43 #ifndef PANZER_PROJECT_TO_FACES_IMPL_HPP 44 #define PANZER_PROJECT_TO_FACES_IMPL_HPP 46 #include "Teuchos_Assert.hpp" 47 #include "Phalanx_DataLayout.hpp" 49 #include "Intrepid2_Cubature.hpp" 50 #include "Intrepid2_DefaultCubatureFactory.hpp" 51 #include "Intrepid2_FunctionSpaceTools.hpp" 52 #include "Intrepid2_Kernels.hpp" 53 #include "Intrepid2_CellTools.hpp" 54 #include "Intrepid2_OrientationTools.hpp" 59 #include "Kokkos_ViewFactory.hpp" 61 #include "Teuchos_FancyOStream.hpp" 65 template<
typename EvalT,
typename Traits>
69 dof_name = (p.get< std::string >(
"DOF Name"));
71 if(p.isType< Teuchos::RCP<PureBasis> >(
"Basis"))
72 basis = p.get< Teuchos::RCP<PureBasis> >(
"Basis");
74 basis = p.get< Teuchos::RCP<const PureBasis> >(
"Basis");
76 Teuchos::RCP<PHX::DataLayout> basis_layout = basis->functional;
77 Teuchos::RCP<PHX::DataLayout> vector_layout = basis->functional_grad;
80 TEUCHOS_ASSERT(basis->isVectorBasis());
82 result = PHX::MDField<ScalarT,Cell,BASIS>(dof_name,basis_layout);
83 this->addEvaluatedField(
result);
85 normals = PHX::MDField<const ScalarT,Cell,BASIS,Dim>(dof_name+
"_Normals",vector_layout);
86 this->addDependentField(normals);
88 vector_values.resize(1);
89 vector_values[0] = PHX::MDField<const ScalarT,Cell,BASIS,Dim>(dof_name+
"_Vector",vector_layout);
90 this->addDependentField(vector_values[0]);
92 this->setName(
"Project To Faces");
94 num_faces =
result.extent(1);
95 num_dim = vector_values[0].extent(2);
99 template<
typename EvalT,
typename Traits>
104 num_faces =
result.extent(1);
105 num_dim = vector_values[0].extent(2);
107 TEUCHOS_ASSERT(
result.extent(1) == normals.extent(1));
108 TEUCHOS_ASSERT(vector_values[0].extent(2) == normals.extent(2));
112 template<
typename EvalT,
typename Traits>
123 const int intDegree = basis->order();
124 TEUCHOS_ASSERT(intDegree == 1);
127 for (index_t cell = 0; cell < workset.
num_cells; ++cell) {
128 for (
int p = 0; p < num_faces; ++p) {
130 for (
int dim = 0; dim < num_dim; ++dim)
131 result(cell,p) += vector_values[0](cell,p,dim) * normals(cell,p,dim);
int num_cells
DEPRECATED - use: numCells()
void evaluateFields(typename Traits::EvalData d)
void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &vm)
PHX::MDField< ScalarT, panzer::Cell, panzer::IP > result
A field that will be used to build up the result of the integral we're performing.