• Main Page
  • Related Pages
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

PHAL_Dirichlet.hpp

Go to the documentation of this file.
00001 //*****************************************************************//
00002 //    Albany 2.0:  Copyright 2012 Sandia Corporation               //
00003 //    This Software is released under the BSD license detailed     //
00004 //    in the file "license.txt" in the top-level Albany directory  //
00005 //*****************************************************************//
00006 
00007 #ifndef PHAL_DIRICHLET_HPP
00008 #define PHAL_DIRICHLET_HPP
00009 
00010 #include "Phalanx_ConfigDefs.hpp"
00011 #include "Phalanx_Evaluator_WithBaseImpl.hpp"
00012 #include "Phalanx_Evaluator_Derived.hpp"
00013 #include "Phalanx_MDField.hpp"
00014 
00015 #include "Teuchos_ParameterList.hpp"
00016 #include "Epetra_Vector.h"
00017 
00018 #include "Sacado_ParameterAccessor.hpp"
00019 #include "PHAL_AlbanyTraits.hpp"
00020 
00021 namespace PHAL {
00030 // **************************************************************
00031 // Generic Template Impelementation for constructor and PostReg
00032 // **************************************************************
00033 
00034 template<typename EvalT, typename Traits>
00035 class DirichletBase
00036   : public PHX::EvaluatorWithBaseImpl<Traits>,
00037     public PHX::EvaluatorDerived<EvalT, Traits>,
00038     public Sacado::ParameterAccessor<EvalT, SPL_Traits>  
00039    {
00040   
00041 private:
00042 
00043   //typedef typename Traits::Residual::ScalarT ScalarT;
00044   typedef typename EvalT::ScalarT ScalarT;
00045 
00046 public:
00047   
00048   DirichletBase(Teuchos::ParameterList& p);
00049   
00050   void postRegistrationSetup(typename Traits::SetupData d,
00051                              PHX::FieldManager<Traits>& vm);
00052   
00053   // This function will be overloaded with template specialized code
00054   void evaluateFields(typename Traits::EvalData d)=0;
00055   
00056   virtual ScalarT& getValue(const std::string &n) { return value; }
00057 
00058 protected:
00059   const int offset;
00060   ScalarT value;
00061   std::string nodeSetID;
00062 };
00063 
00064 // **************************************************************
00065 // **************************************************************
00066 // * Specializations
00067 // **************************************************************
00068 // **************************************************************
00069 
00070 template<typename EvalT, typename Traits> class Dirichlet;
00071 
00072 // **************************************************************
00073 // Residual 
00074 // **************************************************************
00075 template<typename Traits>
00076 class Dirichlet<PHAL::AlbanyTraits::Residual,Traits>
00077    : public DirichletBase<PHAL::AlbanyTraits::Residual, Traits> {
00078 public:
00079   Dirichlet(Teuchos::ParameterList& p);
00080   void evaluateFields(typename Traits::EvalData d);
00081 };
00082 
00083 // **************************************************************
00084 // Jacobian
00085 // **************************************************************
00086 template<typename Traits>
00087 class Dirichlet<PHAL::AlbanyTraits::Jacobian,Traits>
00088    : public DirichletBase<PHAL::AlbanyTraits::Jacobian, Traits> {
00089 public:
00090   Dirichlet(Teuchos::ParameterList& p);
00091   void evaluateFields(typename Traits::EvalData d);
00092 };
00093 
00094 // **************************************************************
00095 // Tangent
00096 // **************************************************************
00097 template<typename Traits>
00098 class Dirichlet<PHAL::AlbanyTraits::Tangent,Traits>
00099    : public DirichletBase<PHAL::AlbanyTraits::Tangent, Traits> {
00100 public:
00101   Dirichlet(Teuchos::ParameterList& p);
00102   void evaluateFields(typename Traits::EvalData d);
00103 };
00104 
00105 // **************************************************************
00106 // Stochastic Galerkin Residual 
00107 // **************************************************************
00108 #ifdef ALBANY_SG_MP
00109 template<typename Traits>
00110 class Dirichlet<PHAL::AlbanyTraits::SGResidual,Traits>
00111    : public DirichletBase<PHAL::AlbanyTraits::SGResidual, Traits> {
00112 public:
00113   Dirichlet(Teuchos::ParameterList& p);
00114   void evaluateFields(typename Traits::EvalData d);
00115 };
00116 
00117 // **************************************************************
00118 // Stochastic Galerkin Jacobian
00119 // **************************************************************
00120 template<typename Traits>
00121 class Dirichlet<PHAL::AlbanyTraits::SGJacobian,Traits>
00122    : public DirichletBase<PHAL::AlbanyTraits::SGJacobian, Traits> {
00123 public:
00124   Dirichlet(Teuchos::ParameterList& p);
00125   void evaluateFields(typename Traits::EvalData d);
00126 };
00127 
00128 // **************************************************************
00129 // Stochastic Galerkin Tangent
00130 // **************************************************************
00131 template<typename Traits>
00132 class Dirichlet<PHAL::AlbanyTraits::SGTangent,Traits>
00133    : public DirichletBase<PHAL::AlbanyTraits::SGTangent, Traits> {
00134 public:
00135   Dirichlet(Teuchos::ParameterList& p);
00136   void evaluateFields(typename Traits::EvalData d);
00137 };
00138 
00139 // **************************************************************
00140 // Multi-point Residual 
00141 // **************************************************************
00142 template<typename Traits>
00143 class Dirichlet<PHAL::AlbanyTraits::MPResidual,Traits>
00144    : public DirichletBase<PHAL::AlbanyTraits::MPResidual, Traits> {
00145 public:
00146   Dirichlet(Teuchos::ParameterList& p);
00147   void evaluateFields(typename Traits::EvalData d);
00148 };
00149 
00150 // **************************************************************
00151 // Multi-point Jacobian
00152 // **************************************************************
00153 template<typename Traits>
00154 class Dirichlet<PHAL::AlbanyTraits::MPJacobian,Traits>
00155    : public DirichletBase<PHAL::AlbanyTraits::MPJacobian, Traits> {
00156 public:
00157   Dirichlet(Teuchos::ParameterList& p);
00158   void evaluateFields(typename Traits::EvalData d);
00159 };
00160 
00161 // **************************************************************
00162 // Multi-point Tangent
00163 // **************************************************************
00164 template<typename Traits>
00165 class Dirichlet<PHAL::AlbanyTraits::MPTangent,Traits>
00166    : public DirichletBase<PHAL::AlbanyTraits::MPTangent, Traits> {
00167 public:
00168   Dirichlet(Teuchos::ParameterList& p);
00169   void evaluateFields(typename Traits::EvalData d);
00170 };
00171 #endif //ALBANY_SG_MP
00172 
00173 // **************************************************************
00174 // **************************************************************
00175 // Evaluator to aggregate all Dirichlet BCs into one "field"
00176 // **************************************************************
00177 template<typename EvalT, typename Traits>
00178 class DirichletAggregator
00179   : public PHX::EvaluatorWithBaseImpl<Traits>,
00180     public PHX::EvaluatorDerived<EvalT, Traits>
00181 {
00182 private:
00183 
00184   typedef typename EvalT::ScalarT ScalarT;
00185 
00186 public:
00187   
00188   DirichletAggregator(Teuchos::ParameterList& p);
00189   
00190   void postRegistrationSetup(typename Traits::SetupData d,
00191                              PHX::FieldManager<Traits>& vm) {};
00192   
00193   // This function will be overloaded with template specialized code
00194   void evaluateFields(typename Traits::EvalData d) {};
00195 };
00196 }
00197 
00198 #endif

Generated on Wed Mar 26 2014 18:36:41 for Albany: a Trilinos-based PDE code by  doxygen 1.7.1