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

PHAL_GatherSolution.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_GATHER_SOLUTION_HPP
00008 #define PHAL_GATHER_SOLUTION_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 "Albany_Layouts.hpp"
00016 
00017 #include "Teuchos_ParameterList.hpp"
00018 #include "Epetra_Vector.h"
00019 
00020 namespace PHAL {
00029 // **************************************************************
00030 // Base Class with Generic Implementations: Specializations for
00031 // Automatic Differentiation Below 
00032 // **************************************************************
00033 
00034 template<typename EvalT, typename Traits>
00035 class GatherSolutionBase
00036   : public PHX::EvaluatorWithBaseImpl<Traits>,
00037     public PHX::EvaluatorDerived<EvalT, Traits>  {
00038   
00039 public:
00040   
00041   GatherSolutionBase(const Teuchos::ParameterList& p,
00042                               const Teuchos::RCP<Albany::Layouts>& dl);
00043   
00044   void postRegistrationSetup(typename Traits::SetupData d,
00045                       PHX::FieldManager<Traits>& vm);
00046   
00047   // This function requires template specialization, in derived class below
00048   virtual void evaluateFields(typename Traits::EvalData d) = 0;
00049   
00050 protected:
00051 
00052   typedef typename EvalT::ScalarT ScalarT;
00053   std::vector< PHX::MDField<ScalarT,Cell,Node> > val;
00054   std::vector< PHX::MDField<ScalarT,Cell,Node> > val_dot;
00055   std::vector< PHX::MDField<ScalarT,Cell,Node> > val_dotdot;
00056   std::vector< PHX::MDField<ScalarT,Cell,Node,VecDim> > valVec;
00057   std::vector< PHX::MDField<ScalarT,Cell,Node,VecDim> > valVec_dot;
00058   std::vector< PHX::MDField<ScalarT,Cell,Node,VecDim> > valVec_dotdot;
00059   std::size_t numNodes;
00060   std::size_t numFieldsBase; // Number of fields gathered in this call
00061   std::size_t offset; // Offset of first DOF being gathered when numFields<neq
00062   bool vectorField;
00063   bool enableTransient;
00064   bool enableAcceleration;
00065 };
00066 
00067 template<typename EvalT, typename Traits> class GatherSolution;
00068 
00069 // **************************************************************
00070 // **************************************************************
00071 // * Specializations
00072 // **************************************************************
00073 // **************************************************************
00074 
00075 
00076 // **************************************************************
00077 // Residual 
00078 // **************************************************************
00079 template<typename Traits>
00080 class GatherSolution<PHAL::AlbanyTraits::Residual,Traits>
00081    : public GatherSolutionBase<PHAL::AlbanyTraits::Residual, Traits>  {
00082   
00083 public:
00084   GatherSolution(const Teuchos::ParameterList& p,
00085                               const Teuchos::RCP<Albany::Layouts>& dl);
00086   // Old constructor, still needed by BCs that use PHX Factory
00087   GatherSolution(const Teuchos::ParameterList& p);
00088   void evaluateFields(typename Traits::EvalData d);
00089 private:
00090   typedef typename PHAL::AlbanyTraits::Residual::ScalarT ScalarT;
00091   const std::size_t numFields;
00092 };
00093 
00094 // **************************************************************
00095 // Jacobian
00096 // **************************************************************
00097 template<typename Traits>
00098 class GatherSolution<PHAL::AlbanyTraits::Jacobian,Traits>
00099    : public GatherSolutionBase<PHAL::AlbanyTraits::Jacobian, Traits>  {
00100   
00101 public:
00102   GatherSolution(const Teuchos::ParameterList& p,
00103                               const Teuchos::RCP<Albany::Layouts>& dl);
00104   GatherSolution(const Teuchos::ParameterList& p);
00105   void evaluateFields(typename Traits::EvalData d);
00106 private:
00107   typedef typename PHAL::AlbanyTraits::Jacobian::ScalarT ScalarT;
00108   const std::size_t numFields;
00109 };
00110 
00111 
00112 // **************************************************************
00113 // Tangent (Jacobian mat-vec + parameter derivatives)
00114 // **************************************************************
00115 template<typename Traits>
00116 class GatherSolution<PHAL::AlbanyTraits::Tangent,Traits>
00117    : public GatherSolutionBase<PHAL::AlbanyTraits::Tangent, Traits>  {
00118   
00119 public:
00120   GatherSolution(const Teuchos::ParameterList& p,
00121                               const Teuchos::RCP<Albany::Layouts>& dl);
00122   GatherSolution(const Teuchos::ParameterList& p);
00123   void evaluateFields(typename Traits::EvalData d);
00124 private:
00125   typedef typename PHAL::AlbanyTraits::Tangent::ScalarT ScalarT;
00126   const std::size_t numFields;
00127 };
00128 
00129 // **************************************************************
00130 // Stochastic Galerkin Residual
00131 // **************************************************************
00132 
00133 #ifdef ALBANY_SG_MP
00134 template<typename Traits>
00135 class GatherSolution<PHAL::AlbanyTraits::SGResidual,Traits>
00136    : public GatherSolutionBase<PHAL::AlbanyTraits::SGResidual, Traits>  {
00137   
00138 public:
00139   GatherSolution(const Teuchos::ParameterList& p,
00140                               const Teuchos::RCP<Albany::Layouts>& dl);
00141   GatherSolution(const Teuchos::ParameterList& p);
00142   void evaluateFields(typename Traits::EvalData d);
00143 private:
00144   typedef typename PHAL::AlbanyTraits::SGResidual::ScalarT ScalarT;
00145   const std::size_t numFields;
00146 };
00147 
00148 
00149 // **************************************************************
00150 // Stochastic Galerkin Jacobian
00151 // **************************************************************
00152 template<typename Traits>
00153 class GatherSolution<PHAL::AlbanyTraits::SGJacobian,Traits>
00154    : public GatherSolutionBase<PHAL::AlbanyTraits::SGJacobian, Traits>  {
00155   
00156 public:
00157   GatherSolution(const Teuchos::ParameterList& p,
00158                               const Teuchos::RCP<Albany::Layouts>& dl);
00159   GatherSolution(const Teuchos::ParameterList& p);
00160   void evaluateFields(typename Traits::EvalData d);
00161 private:
00162   typedef typename PHAL::AlbanyTraits::SGJacobian::ScalarT ScalarT;
00163   const std::size_t numFields;
00164 };
00165 
00166 // **************************************************************
00167 // Stochastic Galerkin Tangent (Jacobian mat-vec + parameter derivatives)
00168 // **************************************************************
00169 template<typename Traits>
00170 class GatherSolution<PHAL::AlbanyTraits::SGTangent,Traits>
00171    : public GatherSolutionBase<PHAL::AlbanyTraits::SGTangent, Traits>  {
00172   
00173 public:
00174   GatherSolution(const Teuchos::ParameterList& p,
00175                               const Teuchos::RCP<Albany::Layouts>& dl);
00176   GatherSolution(const Teuchos::ParameterList& p);
00177   void evaluateFields(typename Traits::EvalData d);
00178 private:
00179   typedef typename PHAL::AlbanyTraits::SGTangent::ScalarT ScalarT;
00180   const std::size_t numFields;
00181 };
00182 
00183 // **************************************************************
00184 // Multi-point Residual
00185 // **************************************************************
00186 
00187 template<typename Traits>
00188 class GatherSolution<PHAL::AlbanyTraits::MPResidual,Traits>
00189    : public GatherSolutionBase<PHAL::AlbanyTraits::MPResidual, Traits>  {
00190   
00191 public:
00192   GatherSolution(const Teuchos::ParameterList& p,
00193                               const Teuchos::RCP<Albany::Layouts>& dl);
00194   GatherSolution(const Teuchos::ParameterList& p);
00195   void evaluateFields(typename Traits::EvalData d);
00196 private:
00197   typedef typename PHAL::AlbanyTraits::MPResidual::ScalarT ScalarT;
00198   const std::size_t numFields;
00199 };
00200 
00201 
00202 // **************************************************************
00203 // Multi-point Jacobian
00204 // **************************************************************
00205 template<typename Traits>
00206 class GatherSolution<PHAL::AlbanyTraits::MPJacobian,Traits>
00207    : public GatherSolutionBase<PHAL::AlbanyTraits::MPJacobian, Traits>  {
00208   
00209 public:
00210   GatherSolution(const Teuchos::ParameterList& p,
00211                               const Teuchos::RCP<Albany::Layouts>& dl);
00212   GatherSolution(const Teuchos::ParameterList& p);
00213   void evaluateFields(typename Traits::EvalData d);
00214 private:
00215   typedef typename PHAL::AlbanyTraits::MPJacobian::ScalarT ScalarT;
00216   const std::size_t numFields;
00217 };
00218 
00219 // **************************************************************
00220 // Multi-point Tangent (Jacobian mat-vec + parameter derivatives)
00221 // **************************************************************
00222 template<typename Traits>
00223 class GatherSolution<PHAL::AlbanyTraits::MPTangent,Traits>
00224    : public GatherSolutionBase<PHAL::AlbanyTraits::MPTangent, Traits>  {
00225   
00226 public:
00227   GatherSolution(const Teuchos::ParameterList& p,
00228                               const Teuchos::RCP<Albany::Layouts>& dl);
00229   GatherSolution(const Teuchos::ParameterList& p);
00230   void evaluateFields(typename Traits::EvalData d);
00231 private:
00232   typedef typename PHAL::AlbanyTraits::MPTangent::ScalarT ScalarT;
00233   const std::size_t numFields;
00234 };
00235 #endif //ALBANY_SG_MP
00236 
00237 // **************************************************************
00238 }
00239 
00240 #endif

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