28 const Teuchos::ParameterList& p)
30 std::string result_name = p.get<std::string>(
"Result Name");
31 std::string vec_a_name = p.get<std::string>(
"Vector A Name");
32 std::string vec_b_name = p.get<std::string>(
"Vector B Name");
34 const Teuchos::RCP<const panzer::PointRule> pr =
35 p.get< Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
45 vec_a = PHX::MDField<const ScalarT>(vec_a_name, pr->dl_vector);
46 vec_b = PHX::MDField<const ScalarT>(vec_b_name, pr->dl_vector);
49 this->addDependentField(
vec_a);
50 this->addDependentField(
vec_b);
52 std::string n =
"CrossProduct: " + result_name +
" = " + vec_a_name +
" . " + vec_b_name;
78 auto a =
vec_a.get_static_view();
79 auto b =
vec_b.get_static_view();
86 Kokkos::parallel_for(
"panzer::CrossProduct 2D",policy,KOKKOS_LAMBDA (
const Kokkos::TeamPolicy<PHX::ExecutionSpace>::member_type& team) {
87 const int cell = team.league_rank();
88 Kokkos::parallel_for(Kokkos::TeamThreadRange(team,0,l_num_pts), [&] (
const int p) {
89 a_cross_b(cell,p) = a(cell,p,0)*b(cell,p,1)-a(cell,p,1)*b(cell,p,0);
94 Kokkos::parallel_for(
"panzer::CrossProduct 3D",policy,KOKKOS_LAMBDA (
const Kokkos::TeamPolicy<PHX::ExecutionSpace>::member_type& team) {
95 const int cell = team.league_rank();
96 Kokkos::parallel_for(Kokkos::TeamThreadRange(team,0,l_num_pts), [&] (
const int p) {
97 a_cross_b(cell,p,0) = a(cell,p,1)*b(cell,p,2)-a(cell,p,2)*b(cell,p,1);
98 a_cross_b(cell,p,1) = -(a(cell,p,0)*b(cell,p,2)-a(cell,p,2)*b(cell,p,0));
99 a_cross_b(cell,p,2) = a(cell,p,0)*b(cell,p,1)-a(cell,p,1)*b(cell,p,0);