43 #ifndef PANZER_DIRICHLET_RESIDUAL_FACEBASIS_IMPL_HPP 44 #define PANZER_DIRICHLET_RESIDUAL_FACEBASIS_IMPL_HPP 50 #include "Intrepid2_CellTools.hpp" 53 #include "Kokkos_ViewFactory.hpp" 60 std::string residual_name = p.get<std::string>(
"Residual Name");
62 basis = p.get<Teuchos::RCP<const panzer::PureBasis> >(
"Basis");
63 pointRule = p.get<Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
65 std::string field_name = p.get<std::string>(
"DOF Name");
66 std::string dof_name = field_name+
"_"+
pointRule->getName();
67 std::string value_name = p.get<std::string>(
"Value Name");
69 Teuchos::RCP<PHX::DataLayout> basis_layout =
basis->functional;
70 Teuchos::RCP<PHX::DataLayout> vector_layout_dof =
pointRule->dl_vector;
71 Teuchos::RCP<PHX::DataLayout> vector_layout_vector =
basis->functional_grad;
74 TEUCHOS_ASSERT(
basis->isVectorBasis());
75 TEUCHOS_ASSERT(basis_layout->dimension(0)==vector_layout_dof->dimension(0));
76 TEUCHOS_ASSERT(basis_layout->dimension(1)==vector_layout_dof->dimension(1));
77 TEUCHOS_ASSERT(
basis->dimension()==vector_layout_dof->extent_int(2));
78 TEUCHOS_ASSERT(vector_layout_vector->dimension(0)==vector_layout_dof->dimension(0));
79 TEUCHOS_ASSERT(vector_layout_vector->dimension(1)==vector_layout_dof->dimension(1));
80 TEUCHOS_ASSERT(vector_layout_vector->dimension(2)==vector_layout_dof->dimension(2));
82 residual = PHX::MDField<ScalarT,Cell,BASIS>(residual_name, basis_layout);
83 dof = PHX::MDField<const ScalarT,Cell,Point,Dim>(dof_name, vector_layout_dof);
84 value = PHX::MDField<const ScalarT,Cell,Point,Dim>(value_name, vector_layout_vector);
102 this->addDependentField(
dof);
104 this->addDependentField(
value);
106 std::string n =
"Dirichlet Residual Face Basis Evaluator";
113 this->utils.setFieldData(
residual,fm);
114 this->utils.setFieldData(
dof,fm);
116 this->utils.setFieldData(
value,fm);
125 if(workset.num_cells<=0)
128 Intrepid2::CellTools<ScalarT>::getPhysicalFaceNormals(
faceNormal,
130 this->wda(workset).subcell_index,
131 *
basis->getCellTopology());
133 for(index_t c=0;c<workset.num_cells;c++) {
134 for(
int b=0;b<
dof.extent_int(1);b++) {
136 for(
int d=0;d<
dof.extent_int(2);d++)
PHX::MDField< ScalarT > residual
Evaluates a Dirichlet BC residual corresponding to a field value.
PointValues2< ScalarT, PHX::MDField > pointValues
Interpolates basis DOF values to IP DOF values.
Kokkos::DynRankView< typename InputArray::value_type, PHX::Device > createDynRankView(const InputArray &a, const std::string &name, const DimensionPack... dims)
Wrapper to simplify Panzer use of Sacado ViewFactory.
PHX::MDField< const ScalarT > dof
Teuchos::RCP< const panzer::PointRule > pointRule
PHX_EVALUATOR_CTOR(BasisValues_Evaluator, p)
PHX_EVALUATE_FIELDS(BasisValues_Evaluator, workset)
Teuchos::RCP< const panzer::PureBasis > basis
Interpolates basis DOF values to IP DOF values.
Array< Scalar, Cell, IP, Dim, Dim, void, void, void, void > jac
void setupArrays(const Teuchos::RCP< const panzer::PointRule > &pr, const ArrayFactory &af)
Sizes/allocates memory for arrays.
PHX_POST_REGISTRATION_SETUP(BasisValues_Evaluator, sd, fm)
Kokkos::DynRankView< ScalarT, PHX::Device > faceNormal