Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007 #include "Teuchos_TestForException.hpp"
00008 #include "Phalanx_DataLayout.hpp"
00009
00010 #include "Intrepid_FunctionSpaceTools.hpp"
00011
00012
00013 template<typename T>
00014 T Sqr(T num)
00015 {
00016 return num * num;
00017 }
00018
00019 namespace HYD {
00020
00021
00022
00023 template<typename EvalT, typename Traits>
00024 HydrideChemTerm<EvalT, Traits>::
00025 HydrideChemTerm(const Teuchos::ParameterList& p) :
00026 c (p.get<std::string> ("C QP Variable Name"),
00027 p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") ),
00028 w (p.get<std::string> ("W QP Variable Name"),
00029 p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") ),
00030 chemTerm (p.get<std::string> ("Chemical Energy Term"),
00031 p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") )
00032
00033 {
00034
00035 b = p.get<double>("b Value");
00036
00037 Teuchos::RCP<PHX::DataLayout> vector_dl =
00038 p.get< Teuchos::RCP<PHX::DataLayout> >("QP Vector Data Layout");
00039 std::vector<PHX::DataLayout::size_type> dims;
00040 vector_dl->dimensions(dims);
00041 numQPs = dims[1];
00042 numDims = dims[2];
00043
00044 this->addDependentField(c);
00045 this->addDependentField(w);
00046
00047 this->addEvaluatedField(chemTerm);
00048
00049 this->setName("HydrideChemTerm"+PHX::TypeString<EvalT>::value);
00050
00051 }
00052
00053
00054 template<typename EvalT, typename Traits>
00055 void HydrideChemTerm<EvalT, Traits>::
00056 postRegistrationSetup(typename Traits::SetupData d,
00057 PHX::FieldManager<Traits>& fm)
00058 {
00059 this->utils.setFieldData(c,fm);
00060 this->utils.setFieldData(w,fm);
00061
00062 this->utils.setFieldData(chemTerm,fm);
00063 }
00064
00065
00066 template<typename EvalT, typename Traits>
00067 void HydrideChemTerm<EvalT, Traits>::
00068 evaluateFields(typename Traits::EvalData workset)
00069 {
00070
00071
00072
00073
00074 for (std::size_t cell=0; cell < workset.numCells; ++cell)
00075 for (std::size_t qp=0; qp < numQPs; ++qp)
00076
00077
00078 chemTerm(cell, qp) = ( Sqr(c(cell, qp)) - Sqr(b) ) * c(cell, qp) - w(cell, qp);
00079
00080 }
00081
00082 template<typename EvalT, typename Traits>
00083 typename HydrideChemTerm<EvalT, Traits>::ScalarT&
00084 HydrideChemTerm<EvalT, Traits>::getValue(const std::string &n) {
00085
00086 if (n == "b")
00087
00088 return b;
00089
00090 else
00091 {
00092 TEUCHOS_TEST_FOR_EXCEPTION(true, Teuchos::Exceptions::InvalidParameter, std::endl <<
00093 "Error! Logic error in getting parameter " << n <<
00094 " in HydrideChemTerm::getValue()" << std::endl);
00095 return b;
00096 }
00097
00098 }
00099
00100
00101 }
00102