47 const Teuchos::ParameterList& p)
48 : multiplier_field_on(false)
50 std::string result_name = p.get<std::string>(
"Result Name");
51 std::string vec_a_name = p.get<std::string>(
"Vector A Name");
52 std::string vec_b_name = p.get<std::string>(
"Vector B Name");
54 std::string multiplier_name =
"";
55 if(p.isType<std::string>(
"Field Multiplier"))
56 multiplier_name = p.get<std::string>(
"Field Multiplier");
59 if(p.isType<
double>(
"Multiplier"))
62 const Teuchos::RCP<const panzer::PointRule> pr =
63 p.get< Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
66 vec_a = PHX::MDField<const ScalarT>(vec_a_name, pr->dl_vector);
67 vec_b = PHX::MDField<const ScalarT>(vec_b_name, pr->dl_vector);
69 if(multiplier_name!=
"") {
70 multiplier_field = PHX::MDField<const ScalarT>(multiplier_name,pr->dl_scalar);
76 this->addDependentField(
vec_a);
77 this->addDependentField(
vec_b);
79 std::string n =
"DotProduct: " + result_name +
" = " + vec_a_name +
" . " + vec_b_name;
106 auto vec_a_v = vec_a.get_static_view();
107 auto vec_b_v = vec_b.get_static_view();
108 auto vec_a_dot_vec_b_v = vec_a_dot_vec_b.get_static_view();
109 auto multiplier_field_v = multiplier_field.get_static_view();
111 int l_num_pts = num_pts, l_num_dim = num_dim;
112 auto l_multiplier_field_on = multiplier_field_on;
113 auto l_multiplier_value = multiplier_value;
115 Kokkos::parallel_for (workset.
num_cells, KOKKOS_LAMBDA (
const int cell) {
116 for (
int p = 0; p < l_num_pts; ++p) {
117 vec_a_dot_vec_b_v(cell,p) =
ScalarT(0.0);
118 for (
int dim = 0; dim < l_num_dim; ++dim)
119 vec_a_dot_vec_b_v(cell,p) += vec_a_v(cell,p,dim) * vec_b_v(cell,p,dim);
121 if(l_multiplier_field_on)
122 vec_a_dot_vec_b_v(cell,p) *= l_multiplier_value*multiplier_field_v(cell,p);
124 vec_a_dot_vec_b_v(cell,p) *= l_multiplier_value;
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.