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 namespace HYD {
00014
00015
00016
00017 template<typename EvalT, typename Traits>
00018 HydrideStressTerm<EvalT, Traits>::
00019 HydrideStressTerm(const Teuchos::ParameterList& p) :
00020
00021 stress (p.get<std::string> ("Stress Name"),
00022 p.get<Teuchos::RCP<PHX::DataLayout> >("QP Tensor Data Layout") ),
00023 stressTerm (p.get<std::string> ("Stress Term"),
00024 p.get<Teuchos::RCP<PHX::DataLayout> >("QP Scalar Data Layout") )
00025
00026 {
00027
00028 e = p.get<double>("e Value");
00029
00030
00031 Teuchos::RCP<PHX::DataLayout> tensor_dl =
00032 p.get< Teuchos::RCP<PHX::DataLayout> >("QP Tensor Data Layout");
00033 std::vector<PHX::DataLayout::size_type> dims;
00034 tensor_dl->dimensions(dims);
00035 numQPs = dims[1];
00036 numDims = dims[2];
00037
00038
00039 this->addDependentField(stress);
00040
00041 this->addEvaluatedField(stressTerm);
00042
00043 this->setName("HydrideStressTerm"+PHX::TypeString<EvalT>::value);
00044
00045 }
00046
00047
00048 template<typename EvalT, typename Traits>
00049 void HydrideStressTerm<EvalT, Traits>::
00050 postRegistrationSetup(typename Traits::SetupData d,
00051 PHX::FieldManager<Traits>& fm)
00052 {
00053 this->utils.setFieldData(stress,fm);
00054
00055 this->utils.setFieldData(stressTerm,fm);
00056 }
00057
00058
00059 template<typename EvalT, typename Traits>
00060 void HydrideStressTerm<EvalT, Traits>::
00061 evaluateFields(typename Traits::EvalData workset)
00062 {
00063
00064
00065
00066
00067
00068
00069 for (std::size_t cell=0; cell < workset.numCells; ++cell)
00070 for (std::size_t qp=0; qp < numQPs; ++qp){
00071
00072 stressTerm(cell, qp) = 0.0;
00073
00074 for (std::size_t dim=0; dim < numDims; ++dim)
00075
00076 stressTerm(cell, qp) -= stress(cell, qp, dim, dim) * e;
00077
00078 }
00079
00080 }
00081
00082 template<typename EvalT, typename Traits>
00083 typename HydrideStressTerm<EvalT, Traits>::ScalarT&
00084 HydrideStressTerm<EvalT, Traits>::getValue(const std::string &n) {
00085
00086 if (n == "e")
00087
00088 return e;
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 HydrideStressTerm::getValue()" << std::endl);
00095 return e;
00096 }
00097
00098 }
00099
00100
00101 }
00102