00001
00002
00003
00004
00005
00006
00007 #ifndef QCAD_RESPONSEFIELDVALUE_HPP
00008 #define QCAD_RESPONSEFIELDVALUE_HPP
00009
00010 #include "QCAD_MeshRegion.hpp"
00011 #include "QCAD_MaterialDatabase.hpp"
00012 #include "PHAL_ScatterScalarResponse.hpp"
00013
00014 namespace QCAD {
00015
00016 template<typename EvalT, typename Traits>
00017 class FieldValueScatterScalarResponse :
00018 public PHAL::ScatterScalarResponse<EvalT,Traits> {
00019
00020 public:
00021
00022 FieldValueScatterScalarResponse(const Teuchos::ParameterList& p,
00023 const Teuchos::RCP<Albany::Layouts>& dl) :
00024 PHAL::ScatterScalarResponse<EvalT,Traits>(p,dl) {}
00025
00026 protected:
00027
00028
00029 FieldValueScatterScalarResponse() :
00030 PHAL::ScatterScalarResponse<EvalT,Traits>() {}
00031
00032
00033 void setup(const Teuchos::ParameterList& p,
00034 const Teuchos::RCP<Albany::Layouts>& dl) {
00035 PHAL::ScatterScalarResponse<EvalT,Traits>::setup(p,dl);
00036 }
00037
00038
00039 void setNodeID(const Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> >&) {}
00040
00041 Teuchos::Array<int> field_components;
00042 };
00043
00044
00045 template<typename Traits>
00046 class FieldValueScatterScalarResponse<PHAL::AlbanyTraits::Jacobian,Traits> :
00047 public PHAL::ScatterScalarResponseBase<PHAL::AlbanyTraits::Jacobian,Traits> {
00048
00049 public:
00050 typedef PHAL::AlbanyTraits::Jacobian EvalT;
00051 typedef typename EvalT::ScalarT ScalarT;
00052
00053 FieldValueScatterScalarResponse(const Teuchos::ParameterList& p,
00054 const Teuchos::RCP<Albany::Layouts>& dl) :
00055 PHAL::ScatterScalarResponseBase<EvalT,Traits>(p,dl) {}
00056
00057 void preEvaluate(typename Traits::PreEvalData d) {}
00058 void evaluateFields(typename Traits::EvalData d) {}
00059 void postEvaluate(typename Traits::PostEvalData d);
00060
00061 protected:
00062
00063
00064 FieldValueScatterScalarResponse() :
00065 PHAL::ScatterScalarResponseBase<EvalT,Traits>() {}
00066
00067
00068 void setup(const Teuchos::ParameterList& p,
00069 const Teuchos::RCP<Albany::Layouts>& dl) {
00070 PHAL::ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00071 numNodes = dl->node_scalar->dimension(1);
00072 }
00073
00074
00075 void setNodeID(const Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> >& nodeID_) {
00076 nodeID = nodeID_;
00077 }
00078
00079 Teuchos::Array<int> field_components;
00080
00081 private:
00082
00083 Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> > nodeID;
00084 int numNodes;
00085 };
00086
00087 #ifdef ALBANY_SG_MP
00088 template<typename Traits>
00089 class FieldValueScatterScalarResponse<PHAL::AlbanyTraits::SGJacobian,Traits> :
00090 public PHAL::ScatterScalarResponseBase<PHAL::AlbanyTraits::SGJacobian,Traits> {
00091
00092 public:
00093 typedef PHAL::AlbanyTraits::SGJacobian EvalT;
00094 typedef typename EvalT::ScalarT ScalarT;
00095
00096 FieldValueScatterScalarResponse(const Teuchos::ParameterList& p,
00097 const Teuchos::RCP<Albany::Layouts>& dl) :
00098 PHAL::ScatterScalarResponseBase<EvalT,Traits>(p,dl) {}
00099
00100 void preEvaluate(typename Traits::PreEvalData d) {}
00101 void evaluateFields(typename Traits::EvalData d) {}
00102 void postEvaluate(typename Traits::PostEvalData d);
00103
00104 protected:
00105
00106
00107 FieldValueScatterScalarResponse() :
00108 PHAL::ScatterScalarResponseBase<EvalT,Traits>() {}
00109
00110
00111 void setup(const Teuchos::ParameterList& p,
00112 const Teuchos::RCP<Albany::Layouts>& dl) {
00113 PHAL::ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00114 numNodes = dl->node_scalar->dimension(1);
00115 }
00116
00117
00118 void setNodeID(const Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> >& nodeID_) {
00119 nodeID = nodeID_;
00120 }
00121
00122 Teuchos::Array<int> field_components;
00123
00124 private:
00125
00126 Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> > nodeID;
00127 int numNodes;
00128 };
00129
00130 template<typename Traits>
00131 class FieldValueScatterScalarResponse<PHAL::AlbanyTraits::MPJacobian,Traits> :
00132 public PHAL::ScatterScalarResponseBase<PHAL::AlbanyTraits::MPJacobian,Traits> {
00133
00134 public:
00135 typedef PHAL::AlbanyTraits::MPJacobian EvalT;
00136 typedef typename EvalT::ScalarT ScalarT;
00137
00138 FieldValueScatterScalarResponse(const Teuchos::ParameterList& p,
00139 const Teuchos::RCP<Albany::Layouts>& dl) :
00140 PHAL::ScatterScalarResponseBase<EvalT,Traits>(p,dl) {}
00141
00142 void preEvaluate(typename Traits::PreEvalData d) {}
00143 void evaluateFields(typename Traits::EvalData d) {}
00144 void postEvaluate(typename Traits::PostEvalData d);
00145
00146 protected:
00147
00148
00149 FieldValueScatterScalarResponse() :
00150 PHAL::ScatterScalarResponseBase<EvalT,Traits>() {}
00151
00152
00153 void setup(const Teuchos::ParameterList& p,
00154 const Teuchos::RCP<Albany::Layouts>& dl) {
00155 PHAL::ScatterScalarResponseBase<EvalT,Traits>::setup(p,dl);
00156 numNodes = dl->node_scalar->dimension(1);
00157 }
00158
00159
00160 void setNodeID(const Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> >& nodeID_) {
00161 nodeID = nodeID_;
00162 }
00163
00164 Teuchos::Array<int> field_components;
00165
00166 private:
00167
00168 Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> > nodeID;
00169 int numNodes;
00170 };
00171 #endif //ALBANY_SG_MP
00172
00176 template<typename EvalT, typename Traits>
00177 class ResponseFieldValue :
00178 public FieldValueScatterScalarResponse<EvalT, Traits>
00179 {
00180 public:
00181 typedef typename EvalT::ScalarT ScalarT;
00182 typedef typename EvalT::MeshScalarT MeshScalarT;
00183
00184 ResponseFieldValue(Teuchos::ParameterList& p,
00185 const Teuchos::RCP<Albany::Layouts>& dl);
00186
00187 void postRegistrationSetup(typename Traits::SetupData d,
00188 PHX::FieldManager<Traits>& vm);
00189
00190 void preEvaluate(typename Traits::PreEvalData d);
00191
00192 void evaluateFields(typename Traits::EvalData d);
00193
00194 void postEvaluate(typename Traits::PostEvalData d);
00195
00196 private:
00197 Teuchos::RCP<const Teuchos::ParameterList> getValidResponseParameters() const;
00198
00199 std::size_t numQPs;
00200 std::size_t numDims;
00201
00202 PHX::MDField<ScalarT> opField;
00203 PHX::MDField<ScalarT> retField;
00204 PHX::MDField<MeshScalarT,Cell,QuadPoint,Dim> coordVec;
00205 PHX::MDField<MeshScalarT,Cell,QuadPoint> weights;
00206 Teuchos::ArrayRCP<Teuchos::ArrayRCP<int> > max_nodeID;
00207
00208
00209 bool bOpFieldIsVector, bRetFieldIsVector;
00210
00211 std::string operation;
00212 std::string opFieldName;
00213 std::string retFieldName;
00214
00215 bool bReturnOpField;
00216 bool opX, opY, opZ;
00217
00218 Teuchos::RCP< MeshRegion<EvalT, Traits> > opRegion;
00219
00220 Teuchos::Array<double> initVals;
00221
00223 Teuchos::RCP<QCAD::MaterialDatabase> materialDB;
00224 };
00225
00226 }
00227
00228 #endif