43 #ifndef PANZER_PROJECT_TO_EDGES_IMPL_HPP 44 #define PANZER_PROJECT_TO_EDGES_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_OrientationTools.hpp" 56 #include "Kokkos_ViewFactory.hpp" 58 #include "Teuchos_FancyOStream.hpp" 60 template<
typename EvalT,
typename Traits>
63 const Teuchos::ParameterList& p)
65 dof_name = (p.get< std::string >(
"DOF Name"));
67 if(p.isType< Teuchos::RCP<PureBasis> >(
"Basis"))
68 basis = p.get< Teuchos::RCP<PureBasis> >(
"Basis");
70 basis = p.get< Teuchos::RCP<const PureBasis> >(
"Basis");
72 Teuchos::RCP<PHX::DataLayout> basis_layout = basis->functional;
73 Teuchos::RCP<PHX::DataLayout> vector_layout = basis->functional_grad;
76 TEUCHOS_ASSERT(basis->isVectorBasis());
78 result = PHX::MDField<ScalarT,Cell,BASIS>(dof_name,basis_layout);
79 this->addEvaluatedField(
result);
81 tangents = PHX::MDField<const ScalarT,Cell,BASIS,Dim>(dof_name+
"_Tangents",vector_layout);
82 this->addDependentField(tangents);
84 vector_values.resize(1);
85 vector_values[0] = PHX::MDField<const ScalarT,Cell,BASIS,Dim>(dof_name+
"_Vector",vector_layout);
86 this->addDependentField(vector_values[0]);
88 this->setName(
"Project To Edges");
92 template<
typename EvalT,
typename Traits>
97 num_edges = vector_values[0].extent(1);
98 num_dim = vector_values[0].extent(2);
100 TEUCHOS_ASSERT(vector_values[0].extent(1) == tangents.extent(1));
101 TEUCHOS_ASSERT(vector_values[0].extent(2) == tangents.extent(2));
105 template<
typename EvalT,
typename Traits>
115 const int intDegree = basis->order();
116 TEUCHOS_ASSERT(intDegree == 1);
119 for (index_t cell = 0; cell < workset.
num_cells; ++cell) {
120 for (
int p = 0; p < num_edges; ++p) {
122 for (
int dim = 0; dim < num_dim; ++dim)
123 result(cell,p) += vector_values[0](cell,p,dim) * tangents(cell,p,dim);
int num_cells
DEPRECATED - use: numCells()
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.
void evaluateFields(typename Traits::EvalData d)