43 #ifndef PANZER_EVALUATOR_DotProduct_IMPL_HPP 44 #define PANZER_EVALUATOR_DotProduct_IMPL_HPP 51 #include "Teuchos_RCP.hpp" 55 template <
typename EvalT,
typename TraitsT>
56 Teuchos::RCP<DotProduct<EvalT,TraitsT> >
59 const std::string & vecA,
60 const std::string & vecB,
62 const std::string & fieldMultiplier)
64 Teuchos::ParameterList pl;
65 pl.set(
"Result Name",resultName);
66 pl.set(
"Point Rule",Teuchos::rcpFromRef(pr));
67 pl.set(
"Vector A Name",vecA);
68 pl.set(
"Vector B Name",vecB);
70 pl.set(
"Field Multiplier",fieldMultiplier);
72 return Teuchos::rcp(
new DotProduct<EvalT,TraitsT>(pl));
79 std::string result_name = p.get<std::string>(
"Result Name");
80 std::string vec_a_name = p.get<std::string>(
"Vector A Name");
81 std::string vec_b_name = p.get<std::string>(
"Vector B Name");
83 std::string multiplier_name =
"";
84 if(p.isType<std::string>(
"Field Multiplier"))
85 multiplier_name = p.get<std::string>(
"Field Multiplier");
88 if(p.isType<
double>(
"Multiplier"))
91 const Teuchos::RCP<const panzer::PointRule> pr =
92 p.get< Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
95 vec_a = PHX::MDField<const ScalarT>(vec_a_name, pr->dl_vector);
96 vec_b = PHX::MDField<const ScalarT>(vec_b_name, pr->dl_vector);
98 if(multiplier_name!=
"") {
99 multiplier_field = PHX::MDField<const ScalarT>(multiplier_name,pr->dl_scalar);
105 this->addDependentField(
vec_a);
106 this->addDependentField(
vec_b);
108 std::string n =
"DotProduct: " + result_name +
" = " + vec_a_name +
" . " + vec_b_name;
116 this->utils.setFieldData(
vec_a,fm);
117 this->utils.setFieldData(
vec_b,fm);
125 TEUCHOS_ASSERT(
vec_a.dimension(1) ==
vec_b.dimension(1));
126 TEUCHOS_ASSERT(
vec_a.dimension(2) ==
vec_b.dimension(2));
132 for (index_t cell = 0; cell < workset.num_cells; ++cell) {
133 for (
int p = 0; p <
num_pts; ++p) {
135 for (
int dim = 0; dim <
num_dim; ++dim)
PANZER_EVALUATOR_CLASS_END Teuchos::RCP< DotProduct< EvalT, TraitsT > > buildEvaluator_DotProduct(const std::string &resultName, const panzer::PointRule &pr, const std::string &vecA, const std::string &vecB, double multiplier=1, const std::string &fieldMultiplier="")
Build a dot product evaluator. Evaluates dot product at a set of points.
PHX::MDField< const ScalarT > multiplier_field
PHX::MDField< ScalarT > vec_b
PHX_EVALUATOR_CTOR(BasisValues_Evaluator, p)
PHX::MDField< ScalarT > vec_a
PHX_EVALUATE_FIELDS(BasisValues_Evaluator, workset)
PHX::MDField< ScalarT > vec_a_dot_vec_b
Evaluates dot product at a set of points.
PHX_POST_REGISTRATION_SETUP(BasisValues_Evaluator, sd, fm)