Go to the documentation of this file.00001
00002
00003
00004
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
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;
00054 std::size_t offset;
00055
00056 bool vectorField;
00057 };
00058
00059 template<typename EvalT, typename Traits> class ScatterResidual;
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
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
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
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
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
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
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
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
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
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