00001
00002
00003
00004
00005
00006
00007 #ifndef PHAL_SEPARABLE_SCATTER_SCALAR_RESPONSE_HPP
00008 #define PHAL_SEPARABLE_SCATTER_SCALAR_RESPONSE_HPP
00009
00010 #include "PHAL_ScatterScalarResponse.hpp"
00011
00012 namespace PHAL {
00013
00019 template<typename EvalT, typename Traits>
00020 class SeparableScatterScalarResponseBase
00021 : public virtual PHX::EvaluatorWithBaseImpl<Traits>,
00022 public virtual PHX::EvaluatorDerived<EvalT, Traits> {
00023
00024 public:
00025
00026 SeparableScatterScalarResponseBase(const Teuchos::ParameterList& p,
00027 const Teuchos::RCP<Albany::Layouts>& dl);
00028
00029 void postRegistrationSetup(typename Traits::SetupData d,
00030 PHX::FieldManager<Traits>& vm);
00031
00032 void evaluateFields(typename Traits::EvalData d) {}
00033
00034 protected:
00035
00036
00037 SeparableScatterScalarResponseBase() {}
00038
00039
00040 void setup(const Teuchos::ParameterList& p,
00041 const Teuchos::RCP<Albany::Layouts>& dl);
00042
00043 protected:
00044
00045 typedef typename EvalT::ScalarT ScalarT;
00046 PHX::MDField<ScalarT> local_response;
00047 };
00048
00055 template <typename EvalT, typename Traits>
00056 class SeparableScatterScalarResponse :
00057 public ScatterScalarResponse<EvalT, Traits>,
00058 public SeparableScatterScalarResponseBase<EvalT,Traits> {
00059 public:
00060 SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00061 const Teuchos::RCP<Albany::Layouts>& dl) :
00062 ScatterScalarResponse<EvalT,Traits>(p,dl) {}
00063
00064 void postRegistrationSetup(typename Traits::SetupData d,
00065 PHX::FieldManager<Traits>& vm) {
00066 ScatterScalarResponse<EvalT, Traits>::postRegistrationSetup(d,vm);
00067 SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00068 }
00069
00070 void evaluateFields(typename Traits::EvalData d) {}
00071
00072 protected:
00073 SeparableScatterScalarResponse() {}
00074 void setup(const Teuchos::ParameterList& p,
00075 const Teuchos::RCP<Albany::Layouts>& dl) {
00076 ScatterScalarResponse<EvalT,Traits>::setup(p,dl);
00077 SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00078 }
00079 };
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090 template<typename Traits>
00091 class SeparableScatterScalarResponse<PHAL::AlbanyTraits::Jacobian,Traits>
00092 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::Jacobian, Traits>,
00093 public SeparableScatterScalarResponseBase<PHAL::AlbanyTraits::Jacobian, Traits> {
00094 public:
00095 SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00096 const Teuchos::RCP<Albany::Layouts>& dl);
00097 void postRegistrationSetup(typename Traits::SetupData d,
00098 PHX::FieldManager<Traits>& vm) {
00099 ScatterScalarResponseBase<EvalT, Traits>::postRegistrationSetup(d,vm);
00100 SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00101 }
00102 void preEvaluate(typename Traits::PreEvalData d);
00103 void evaluateFields(typename Traits::EvalData d);
00104 void postEvaluate(typename Traits::PostEvalData d);
00105 protected:
00106 typedef PHAL::AlbanyTraits::Jacobian EvalT;
00107 SeparableScatterScalarResponse() {}
00108 void setup(const Teuchos::ParameterList& p,
00109 const Teuchos::RCP<Albany::Layouts>& dl) {
00110 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00111 SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00112 numNodes = dl->node_scalar->dimension(1);
00113 }
00114 private:
00115 typedef typename PHAL::AlbanyTraits::Jacobian::ScalarT ScalarT;
00116 int numNodes;
00117 };
00118
00119
00120
00121
00122 #ifdef ALBANY_SG_MP
00123 template<typename Traits>
00124 class SeparableScatterScalarResponse<PHAL::AlbanyTraits::SGJacobian,Traits>
00125 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::SGJacobian, Traits>,
00126 public SeparableScatterScalarResponseBase<PHAL::AlbanyTraits::SGJacobian, Traits>{
00127 public:
00128 SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00129 const Teuchos::RCP<Albany::Layouts>& dl);
00130 void postRegistrationSetup(typename Traits::SetupData d,
00131 PHX::FieldManager<Traits>& vm) {
00132 ScatterScalarResponseBase<EvalT, Traits>::postRegistrationSetup(d,vm);
00133 SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00134 }
00135 void preEvaluate(typename Traits::PreEvalData d);
00136 void evaluateFields(typename Traits::EvalData d);
00137 void postEvaluate(typename Traits::PostEvalData d);
00138 protected:
00139 typedef PHAL::AlbanyTraits::SGJacobian EvalT;
00140 SeparableScatterScalarResponse() {}
00141 void setup(const Teuchos::ParameterList& p,
00142 const Teuchos::RCP<Albany::Layouts>& dl) {
00143 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00144 SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00145 numNodes = dl->node_scalar->dimension(1);
00146 }
00147 private:
00148 typedef typename PHAL::AlbanyTraits::SGJacobian::ScalarT ScalarT;
00149 int numNodes;
00150 };
00151
00152
00153
00154
00155 template<typename Traits>
00156 class SeparableScatterScalarResponse<PHAL::AlbanyTraits::MPJacobian,Traits>
00157 : public ScatterScalarResponseBase<PHAL::AlbanyTraits::MPJacobian, Traits>,
00158 public SeparableScatterScalarResponseBase<PHAL::AlbanyTraits::MPJacobian, Traits>{
00159 public:
00160 SeparableScatterScalarResponse(const Teuchos::ParameterList& p,
00161 const Teuchos::RCP<Albany::Layouts>& dl);
00162 void postRegistrationSetup(typename Traits::SetupData d,
00163 PHX::FieldManager<Traits>& vm) {
00164 ScatterScalarResponseBase<EvalT, Traits>::postRegistrationSetup(d,vm);
00165 SeparableScatterScalarResponseBase<EvalT,Traits>::postRegistrationSetup(d,vm);
00166 }
00167 void preEvaluate(typename Traits::PreEvalData d);
00168 void evaluateFields(typename Traits::EvalData d);
00169 void postEvaluate(typename Traits::PostEvalData d);
00170 protected:
00171 typedef PHAL::AlbanyTraits::MPJacobian EvalT;
00172 SeparableScatterScalarResponse() {}
00173 void setup(const Teuchos::ParameterList& p,
00174 const Teuchos::RCP<Albany::Layouts>& dl) {
00175 ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00176 SeparableScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00177 numNodes = dl->node_scalar->dimension(1);
00178 }
00179 private:
00180 typedef typename PHAL::AlbanyTraits::MPJacobian::ScalarT ScalarT;
00181 int numNodes;
00182 };
00183 #endif //ALBANY_SG_MP
00184
00185
00186 }
00187
00188 #endif