43 #ifndef PANZER_EVALUATOR_CrossProduct_IMPL_HPP 44 #define PANZER_EVALUATOR_CrossProduct_IMPL_HPP 51 #include "Teuchos_RCP.hpp" 58 std::string result_name = p.get<std::string>(
"Result Name");
59 std::string vec_a_name = p.get<std::string>(
"Vector A Name");
60 std::string vec_b_name = p.get<std::string>(
"Vector B Name");
62 const Teuchos::RCP<const panzer::PointRule> pr =
63 p.get< Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
73 vec_a = PHX::MDField<ScalarT>(vec_a_name, pr->dl_vector);
74 vec_b = PHX::MDField<ScalarT>(vec_b_name, pr->dl_vector);
77 this->addDependentField(
vec_a);
78 this->addDependentField(
vec_b);
80 std::string n =
"CrossProduct: " + result_name +
" = " + vec_a_name +
" . " + vec_b_name;
88 this->utils.setFieldData(
vec_a,fm);
89 this->utils.setFieldData(
vec_b,fm);
94 TEUCHOS_ASSERT(
vec_a.dimension(1) ==
vec_b.dimension(1));
95 TEUCHOS_ASSERT(
vec_a.dimension(2) ==
vec_b.dimension(2));
102 for (index_t cell = 0; cell < workset.num_cells; ++cell) {
103 for (
int p = 0; p <
num_pts; ++p) {
109 for (index_t cell = 0; cell < workset.num_cells; ++cell) {
110 for (
int p = 0; p <
num_pts; ++p) {
111 vec_a_cross_vec_b(cell,p,0) =
vec_a(cell,p,1)*
vec_b(cell,p,2)-
vec_a(cell,p,2)*
vec_b(cell,p,1);
112 vec_a_cross_vec_b(cell,p,1) = -(
vec_a(cell,p,0)*
vec_b(cell,p,2)-
vec_a(cell,p,2)*
vec_b(cell,p,0));
113 vec_a_cross_vec_b(cell,p,2) =
vec_a(cell,p,0)*
vec_b(cell,p,1)-
vec_a(cell,p,1)*
vec_b(cell,p,0);
PHX::MDField< ScalarT > vec_a_cross_vec_b
Evaluates cross product at a set of points.
PHX::MDField< ScalarT > vec_b
PHX_EVALUATOR_CTOR(BasisValues_Evaluator, p)
PHX::MDField< ScalarT > vec_a
PHX_EVALUATE_FIELDS(BasisValues_Evaluator, workset)
PHX_POST_REGISTRATION_SETUP(BasisValues_Evaluator, sd, fm)