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

PHAL_ScatterResidual.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_SCATTER_RESIDUAL_HPP
00008 #define PHAL_SCATTER_RESIDUAL_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 {
00027 // **************************************************************
00028 // Base Class for code that is independent of evaluation type
00029 // **************************************************************
00030 
00031 template<typename EvalT, typename Traits> 
00032 class ScatterResidualBase
00033   : public PHX::EvaluatorWithBaseImpl<Traits>,
00034     public PHX::EvaluatorDerived<EvalT, Traits>  {
00035   
00036 public:
00037   
00038   ScatterResidualBase(const Teuchos::ParameterList& p,
00039                               const Teuchos::RCP<Albany::Layouts>& dl);
00040   
00041   void postRegistrationSetup(typename Traits::SetupData d,
00042                       PHX::FieldManager<Traits>& vm);
00043   
00044   virtual void evaluateFields(typename Traits::EvalData d)=0;
00045   
00046 protected:
00047 
00048   typedef typename EvalT::ScalarT ScalarT;
00049   Teuchos::RCP<PHX::FieldTag> scatter_operation;
00050   std::vector< PHX::MDField<ScalarT,Cell,Node> > val;
00051   std::vector< PHX::MDField<ScalarT,Cell,Node,Dim> > valVec;
00052   std::size_t numNodes;
00053   std::size_t numFieldsBase; // Number of fields gathered in this call
00054   std::size_t offset; // Offset of first DOF being gathered when numFields<neq
00055 
00056   bool vectorField;
00057 };
00058 
00059 template<typename EvalT, typename Traits> class ScatterResidual;
00060 
00061 // **************************************************************
00062 // **************************************************************
00063 // * Specializations
00064 // **************************************************************
00065 // **************************************************************
00066 
00067 
00068 // **************************************************************
00069 // Residual 
00070 // **************************************************************
00071 template<typename Traits>
00072 class ScatterResidual<PHAL::AlbanyTraits::Residual,Traits>
00073   : public ScatterResidualBase<PHAL::AlbanyTraits::Residual, Traits>  {
00074 public:
00075   ScatterResidual(const Teuchos::ParameterList& p,
00076                               const Teuchos::RCP<Albany::Layouts>& dl);
00077   void evaluateFields(typename Traits::EvalData d);
00078 private:
00079   typedef typename PHAL::AlbanyTraits::Residual::ScalarT ScalarT;
00080   const std::size_t numFields;
00081 };
00082 
00083 // **************************************************************
00084 // Jacobian
00085 // **************************************************************
00086 template<typename Traits>
00087 class ScatterResidual<PHAL::AlbanyTraits::Jacobian,Traits>
00088   : public ScatterResidualBase<PHAL::AlbanyTraits::Jacobian, Traits>  {
00089 public:
00090   ScatterResidual(const Teuchos::ParameterList& p,
00091                               const Teuchos::RCP<Albany::Layouts>& dl);
00092   void evaluateFields(typename Traits::EvalData d);
00093 private:
00094   typedef typename PHAL::AlbanyTraits::Jacobian::ScalarT ScalarT;
00095   const std::size_t numFields;
00096 };
00097 
00098 // **************************************************************
00099 // Tangent
00100 // **************************************************************
00101 template<typename Traits>
00102 class ScatterResidual<PHAL::AlbanyTraits::Tangent,Traits>
00103   : public ScatterResidualBase<PHAL::AlbanyTraits::Tangent, Traits>  {
00104 public:
00105   ScatterResidual(const Teuchos::ParameterList& p,
00106                               const Teuchos::RCP<Albany::Layouts>& dl);
00107   void evaluateFields(typename Traits::EvalData d);
00108 private:
00109   typedef typename PHAL::AlbanyTraits::Tangent::ScalarT ScalarT;
00110   const std::size_t numFields;
00111 };
00112 
00113 // **************************************************************
00114 // Stochastic Galerkin Residual 
00115 // **************************************************************
00116 #ifdef ALBANY_SG_MP
00117 template<typename Traits>
00118 class ScatterResidual<PHAL::AlbanyTraits::SGResidual,Traits>
00119   : public ScatterResidualBase<PHAL::AlbanyTraits::SGResidual, Traits>  {
00120 public:
00121   ScatterResidual(const Teuchos::ParameterList& p,
00122                               const Teuchos::RCP<Albany::Layouts>& dl);
00123   void evaluateFields(typename Traits::EvalData d);
00124 private:
00125   typedef typename PHAL::AlbanyTraits::SGResidual::ScalarT ScalarT;
00126   const std::size_t numFields;
00127 };
00128 
00129 // **************************************************************
00130 // Stochastic Galerkin Jacobian
00131 // **************************************************************
00132 template<typename Traits>
00133 class ScatterResidual<PHAL::AlbanyTraits::SGJacobian,Traits>
00134   : public ScatterResidualBase<PHAL::AlbanyTraits::SGJacobian, Traits>  {
00135 public:
00136   ScatterResidual(const Teuchos::ParameterList& p,
00137                               const Teuchos::RCP<Albany::Layouts>& dl);
00138   void evaluateFields(typename Traits::EvalData d);
00139 private:
00140   typedef typename PHAL::AlbanyTraits::SGJacobian::ScalarT ScalarT;
00141   const std::size_t numFields;
00142 };
00143 
00144 // **************************************************************
00145 // Stochastic Galerkin Tangent
00146 // **************************************************************
00147 template<typename Traits>
00148 class ScatterResidual<PHAL::AlbanyTraits::SGTangent,Traits>
00149   : public ScatterResidualBase<PHAL::AlbanyTraits::SGTangent, Traits>  {
00150 public:
00151   ScatterResidual(const Teuchos::ParameterList& p,
00152                               const Teuchos::RCP<Albany::Layouts>& dl);
00153   void evaluateFields(typename Traits::EvalData d);
00154 private:
00155   typedef typename PHAL::AlbanyTraits::SGTangent::ScalarT ScalarT;
00156   const std::size_t numFields;
00157 };
00158 
00159 // **************************************************************
00160 // Multi-point Residual 
00161 // **************************************************************
00162 template<typename Traits>
00163 class ScatterResidual<PHAL::AlbanyTraits::MPResidual,Traits>
00164   : public ScatterResidualBase<PHAL::AlbanyTraits::MPResidual, Traits>  {
00165 public:
00166   ScatterResidual(const Teuchos::ParameterList& p,
00167                               const Teuchos::RCP<Albany::Layouts>& dl);
00168   void evaluateFields(typename Traits::EvalData d);
00169 private:
00170   typedef typename PHAL::AlbanyTraits::MPResidual::ScalarT ScalarT;
00171   const std::size_t numFields;
00172 };
00173 
00174 // **************************************************************
00175 // Multi-point Jacobian
00176 // **************************************************************
00177 template<typename Traits>
00178 class ScatterResidual<PHAL::AlbanyTraits::MPJacobian,Traits>
00179   : public ScatterResidualBase<PHAL::AlbanyTraits::MPJacobian, Traits>  {
00180 public:
00181   ScatterResidual(const Teuchos::ParameterList& p,
00182                               const Teuchos::RCP<Albany::Layouts>& dl);
00183   void evaluateFields(typename Traits::EvalData d);
00184 private:
00185   typedef typename PHAL::AlbanyTraits::MPJacobian::ScalarT ScalarT;
00186   const std::size_t numFields;
00187 };
00188 
00189 // **************************************************************
00190 // Multi-point Tangent
00191 // **************************************************************
00192 template<typename Traits>
00193 class ScatterResidual<PHAL::AlbanyTraits::MPTangent,Traits>
00194   : public ScatterResidualBase<PHAL::AlbanyTraits::MPTangent, Traits>  {
00195 public:
00196   ScatterResidual(const Teuchos::ParameterList& p,
00197                               const Teuchos::RCP<Albany::Layouts>& dl);
00198   void evaluateFields(typename Traits::EvalData d);
00199 private:
00200   typedef typename PHAL::AlbanyTraits::MPTangent::ScalarT ScalarT;
00201   const std::size_t numFields;
00202 };
00203 #endif //ALBANY_SG_MP
00204 
00205 // **************************************************************
00206 }
00207 
00208 #endif

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