Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 namespace PHAL {
00008
00009
00010 template<typename EvalT, typename Traits>
00011 ODEResid<EvalT, Traits>::ODEResid(Teuchos::ParameterList& p) :
00012 X( p.get<std::string>("Variable Name"),
00013 p.get< Teuchos::RCP<PHX::DataLayout> >("Node Scalar Data Layout") ),
00014 X_dot( p.get<std::string>("Time Derivative Variable Name"),
00015 p.get< Teuchos::RCP<PHX::DataLayout> >("Node Scalar Data Layout") ),
00016 Y( p.get<std::string>("Y Variable Name"),
00017 p.get< Teuchos::RCP<PHX::DataLayout> >("Node Scalar Data Layout") ),
00018 Y_dot( p.get<std::string>("Y Time Derivative Variable Name"),
00019 p.get< Teuchos::RCP<PHX::DataLayout> >("Node Scalar Data Layout") ),
00020 Xoderesid( p.get<std::string>("Residual Name"),
00021 p.get< Teuchos::RCP<PHX::DataLayout> >("Node Scalar Data Layout") ),
00022 Yoderesid( p.get<std::string>("Y Residual Name"),
00023 p.get< Teuchos::RCP<PHX::DataLayout> >("Node Scalar Data Layout") )
00024 {
00025 this->addDependentField(X);
00026 this->addDependentField(X_dot);
00027 this->addEvaluatedField(Xoderesid);
00028 this->addDependentField(Y);
00029 this->addDependentField(Y_dot);
00030 this->addEvaluatedField(Yoderesid);
00031
00032 std::string n = "ODEResid Provider: " + Xoderesid.fieldTag().name();
00033 this->setName(n+PHX::TypeString<EvalT>::value);
00034 }
00035
00036
00037 template<typename EvalT, typename Traits>
00038 void ODEResid<EvalT, Traits>::
00039 postRegistrationSetup(typename Traits::SetupData d,
00040 PHX::FieldManager<Traits>& vm)
00041 {
00042 this->utils.setFieldData(X,vm);
00043 this->utils.setFieldData(X_dot,vm);
00044 this->utils.setFieldData(Xoderesid,vm);
00045 this->utils.setFieldData(Y,vm);
00046 this->utils.setFieldData(Y_dot,vm);
00047 this->utils.setFieldData(Yoderesid,vm);
00048 }
00049
00050
00051 template<typename EvalT, typename Traits>
00052 void ODEResid<EvalT, Traits>::evaluateFields(typename Traits::EvalData workset)
00053 {
00054 Xoderesid(0,0) = 2.0 * X(0,0);
00055 if (workset.transientTerms)
00056 Xoderesid(0,0) += X_dot(0,0);
00057
00058 Yoderesid(0,0) = 2.0 * Y(0,0);
00059 if (workset.transientTerms)
00060 Yoderesid(0,0) += Y_dot(0,0);
00061 }
00062
00063
00064 }