27 const Teuchos::ParameterList& p)
31 const std::string name = p.get<std::string>(
"Name");
32 side_id = p.get<
int>(
"Side ID");
33 Teuchos::RCP<panzer::IntegrationRule> quadRule
34 = p.get< Teuchos::RCP<panzer::IntegrationRule> >(
"IR");
35 if(p.isParameter(
"Normalize"))
39 Teuchos::RCP<PHX::DataLayout> vector_dl = quadRule->dl_vector;
43 normals = PHX::MDField<ScalarT,Cell,Point,Dim>(name, vector_dl);
44 this->addEvaluatedField(
normals);
46 std::string n =
"Normals: " + name;
74 Intrepid2::CellTools<PHX::exec_space>::getPhysicalSideNormals(normals.get_view(),
75 this->wda(workset).int_rules[quad_index]->jac.get_view(),
76 side_id, *this->wda(workset).int_rules[quad_index]->int_rule->topology);
81 auto local_normals = normals;
82 auto local_num_qp = num_qp;
83 auto local_num_dim = num_dim;
85 if (Sacado::IsADType<ScalarT>::value) {
86 scratch = PHX::View<ScalarT*>(
"normals:scratch",workset.
num_cells,PHX::getFadSize(local_normals.get_static_view()));
89 scratch = PHX::View<ScalarT*>(
"normals:scratch",workset.
num_cells);
93 Kokkos::parallel_for(
"normalize", workset.
num_cells, KOKKOS_LAMBDA (index_t c) {
94 for(std::size_t q=0;q<local_num_qp;q++) {
98 for(std::size_t d=0;d<local_num_dim;d++)
99 norm(c) += local_normals(c,q,d)*local_normals(c,q,d);
102 norm(c) = sqrt(norm(c));
103 for(std::size_t d=0;d<local_num_dim;d++)
104 local_normals(c,q,d) /= norm(c);