27 const Teuchos::ParameterList& p)
29 std::string result_name = p.get<std::string>(
"Result Name");
30 std::string vec_a_name = p.get<std::string>(
"Vector A Name");
31 std::string vec_b_name = p.get<std::string>(
"Vector B Name");
33 const Teuchos::RCP<const panzer::PointRule> pr =
34 p.get< Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
37 useScalarField = (pr->spatial_dimension==2);
40 vec_a_cross_vec_b = PHX::MDField<ScalarT>(result_name, pr->dl_vector);
42 vec_a_cross_vec_b = PHX::MDField<ScalarT>(result_name, pr->dl_scalar);
44 vec_a = PHX::MDField<const ScalarT>(vec_a_name, pr->dl_vector);
45 vec_b = PHX::MDField<const ScalarT>(vec_b_name, pr->dl_vector);
47 this->addEvaluatedField(vec_a_cross_vec_b);
48 this->addDependentField(vec_a);
49 this->addDependentField(vec_b);
51 std::string n =
"CrossProduct: " + result_name +
" = " + vec_a_name +
" . " + vec_b_name;
78 for (index_t cell = 0; cell < workset.
num_cells; ++cell) {
79 for (
int p = 0; p < num_pts; ++p) {
80 vec_a_cross_vec_b(cell,p) = vec_a(cell,p,0)*vec_b(cell,p,1)-vec_a(cell,p,1)*vec_b(cell,p,0);
85 for (index_t cell = 0; cell < workset.
num_cells; ++cell) {
86 for (
int p = 0; p < num_pts; ++p) {
87 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);
88 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));
89 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);