Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #ifndef PHAL_SCATTER_SCALAR_RESPONSE_HPP
00008 #define PHAL_SCATTER_SCALAR_RESPONSE_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 "Albany_ProblemUtils.hpp"
00017
00018 namespace PHAL {
00019
00025 template<typename EvalT, typename Traits>
00026 class ScatterScalarResponseBase
00027 : public virtual PHX::EvaluatorWithBaseImpl<Traits>,
00028 public virtual PHX::EvaluatorDerived<EvalT, Traits> {
00029
00030 public:
00031
00032 ScatterScalarResponseBase(const Teuchos::ParameterList& p,
00033 const Teuchos::RCP<Albany::Layouts>& dl);
00034
00035 void postRegistrationSetup(typename Traits::SetupData d,
00036 PHX::FieldManager<Traits>& vm);
00037
00038 void evaluateFields(typename Traits::EvalData d) {}
00039
00041 Teuchos::RCP<const PHX::FieldTag>
00042 getResponseFieldTag() const {
00043 return global_response.fieldTag().clone();
00044 }
00045
00047 Teuchos::RCP<const PHX::FieldTag>
00048 getEvaluatedFieldTag() const {
00049 return scatter_operation;
00050 }
00051
00052 protected:
00053
00054
00055 ScatterScalarResponseBase() {}
00056
00057
00058 void setup(const Teuchos::ParameterList& p,
00059 const Teuchos::RCP<Albany::Layouts>& dl);
00060
00061 Teuchos::RCP<const Teuchos::ParameterList> getValidResponseParameters() const;
00062
00063 protected:
00064
00065 typedef typename EvalT::ScalarT ScalarT;
00066 PHX::MDField<ScalarT> global_response;
00067 Teuchos::RCP<PHX::FieldTag> scatter_operation;
00068 };
00069
00070 template<typename EvalT, typename Traits> class ScatterScalarResponse {};
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 template<typename Traits>
00083 class ScatterScalarResponse<PHAL::AlbanyTraits::Residual,Traits>
00084 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::Residual, Traits> {
00085 public:
00086 ScatterScalarResponse(const Teuchos::ParameterList& p,
00087 const Teuchos::RCP<Albany::Layouts>& dl);
00088 void postEvaluate(typename Traits::PostEvalData d);
00089 protected:
00090 typedef PHAL::AlbanyTraits::Residual EvalT;
00091 ScatterScalarResponse() {}
00092 void setup(const Teuchos::ParameterList& p,
00093 const Teuchos::RCP<Albany::Layouts>& dl) {
00094 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00095 }
00096 private:
00097 typedef typename PHAL::AlbanyTraits::Residual::ScalarT ScalarT;
00098 };
00099
00100
00101
00102
00103
00104
00105
00106
00107 template<typename Traits>
00108 class ScatterScalarResponse<PHAL::AlbanyTraits::Tangent,Traits>
00109 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::Tangent, Traits> {
00110 public:
00111 ScatterScalarResponse(const Teuchos::ParameterList& p,
00112 const Teuchos::RCP<Albany::Layouts>& dl);
00113 void postEvaluate(typename Traits::PostEvalData d);
00114 protected:
00115 typedef PHAL::AlbanyTraits::Tangent EvalT;
00116 ScatterScalarResponse() {}
00117 void setup(const Teuchos::ParameterList& p,
00118 const Teuchos::RCP<Albany::Layouts>& dl) {
00119 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00120 }
00121 private:
00122 typedef typename PHAL::AlbanyTraits::Tangent::ScalarT ScalarT;
00123 };
00124
00125
00126
00127
00128 #ifdef ALBANY_SG_MP
00129 template<typename Traits>
00130 class ScatterScalarResponse<PHAL::AlbanyTraits::SGResidual,Traits>
00131 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::SGResidual, Traits> {
00132 public:
00133 ScatterScalarResponse(const Teuchos::ParameterList& p,
00134 const Teuchos::RCP<Albany::Layouts>& dl);
00135 void postEvaluate(typename Traits::PostEvalData d);
00136 protected:
00137 typedef PHAL::AlbanyTraits::SGResidual EvalT;
00138 ScatterScalarResponse() {}
00139 void setup(const Teuchos::ParameterList& p,
00140 const Teuchos::RCP<Albany::Layouts>& dl) {
00141 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00142 }
00143 private:
00144 typedef typename PHAL::AlbanyTraits::SGResidual::ScalarT ScalarT;
00145 };
00146
00147
00148
00149
00150
00151
00152
00153
00154 template<typename Traits>
00155 class ScatterScalarResponse<PHAL::AlbanyTraits::SGTangent,Traits>
00156 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::SGTangent, Traits> {
00157 public:
00158 ScatterScalarResponse(const Teuchos::ParameterList& p,
00159 const Teuchos::RCP<Albany::Layouts>& dl);
00160 void postEvaluate(typename Traits::PostEvalData d);
00161 protected:
00162 typedef PHAL::AlbanyTraits::SGTangent EvalT;
00163 ScatterScalarResponse() {}
00164 void setup(const Teuchos::ParameterList& p,
00165 const Teuchos::RCP<Albany::Layouts>& dl) {
00166 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00167 }
00168 private:
00169 typedef typename PHAL::AlbanyTraits::SGTangent::ScalarT ScalarT;
00170 };
00171
00172
00173
00174
00175 template<typename Traits>
00176 class ScatterScalarResponse<PHAL::AlbanyTraits::MPResidual,Traits>
00177 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::MPResidual, Traits> {
00178 public:
00179 ScatterScalarResponse(const Teuchos::ParameterList& p,
00180 const Teuchos::RCP<Albany::Layouts>& dl);
00181 void postEvaluate(typename Traits::PostEvalData d);
00182 protected:
00183 typedef PHAL::AlbanyTraits::MPResidual EvalT;
00184 ScatterScalarResponse() {}
00185 void setup(const Teuchos::ParameterList& p,
00186 const Teuchos::RCP<Albany::Layouts>& dl) {
00187 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00188 }
00189 private:
00190 typedef typename PHAL::AlbanyTraits::MPResidual::ScalarT ScalarT;
00191 };
00192
00193
00194
00195
00196
00197
00198
00199
00200 template<typename Traits>
00201 class ScatterScalarResponse<PHAL::AlbanyTraits::MPTangent,Traits>
00202 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::MPTangent, Traits> {
00203 public:
00204 ScatterScalarResponse(const Teuchos::ParameterList& p,
00205 const Teuchos::RCP<Albany::Layouts>& dl);
00206 void postEvaluate(typename Traits::PostEvalData d);
00207 protected:
00208 typedef PHAL::AlbanyTraits::MPTangent EvalT;
00209 ScatterScalarResponse() {}
00210 void setup(const Teuchos::ParameterList& p,
00211 const Teuchos::RCP<Albany::Layouts>& dl) {
00212 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00213 }
00214 private:
00215 typedef typename PHAL::AlbanyTraits::MPTangent::ScalarT ScalarT;
00216 };
00217 #endif //ALBANY_SG_MP
00218
00219
00220 }
00221
00222 #endif