00001
00002
00003
00004
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
00031
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
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;
00061 std::size_t offset;
00062 bool vectorField;
00063 bool enableTransient;
00064 bool enableAcceleration;
00065 };
00066
00067 template<typename EvalT, typename Traits> class GatherSolution;
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
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
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
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
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
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
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
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
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
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
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