43 #ifndef PANZER_DOF_IMPL_HPP 44 #define PANZER_DOF_IMPL_HPP 53 #include "Intrepid2_FunctionSpaceTools.hpp" 66 template<
typename EvalT,
typename TRAITS>
70 const std::string fieldName = p.
get<std::string>(
"Name");
76 if(p.
isType<
bool>(
"Use DOF Name")) {
77 if(p.
get<
bool>(
"Use DOF Name"))
81 dof_basis = PHX::MDField<ScalarT,Cell,Point>(fieldName,
basis->
functional);
83 this->addDependentField(dof_basis);
93 dof_ip_scalar = PHX::MDField<ScalarT,Cell,Point>(
96 this->addEvaluatedField(dof_ip_scalar);
98 this->addDependentField(
basisValues->basis_ref_scalar);
102 dof_ip_vector = PHX::MDField<ScalarT,Cell,Point,Dim>(
105 this->addEvaluatedField(dof_ip_vector);
107 this->addDependentField(
basisValues->basis_ref_vector);
108 this->addDependentField(
basisValues->basis_vector);
113 std::string n =
"DOF_PointValues: " + dof_basis.fieldTag().name();
118 template<
typename EvalT,
typename TRAITS>
123 this->utils.setFieldData(dof_basis,fm);
125 if(!is_vector_basis) {
126 this->utils.setFieldData(dof_ip_scalar,fm);
129 this->utils.setFieldData(
basisValues->basis_ref_scalar,fm);
130 this->utils.setFieldData(
basisValues->basis_scalar,fm);
133 this->utils.setFieldData(dof_ip_vector,fm);
136 this->utils.setFieldData(
basisValues->basis_ref_vector,fm);
137 this->utils.setFieldData(
basisValues->basis_vector,fm);
142 template<
typename EvalT,
typename TRAITS>
148 if(is_vector_basis) {
149 int spaceDim =
basisValues->basis_vector.dimension(3);
152 Kokkos::parallel_for(workset.num_cells,functor);
156 Kokkos::parallel_for(workset.num_cells,functor);
161 Kokkos::parallel_for(workset.num_cells,functor);
172 template<
typename TRAITS>
176 const std::string fieldName = p.
get<std::string>(
"Name");
185 offsets_array = Kokkos::View<int*,PHX::Device>(
"offsets",
offsets.size());
186 for(std::size_t i=0;i<
offsets.size();i++)
189 accelerate_jacobian =
true;
192 accelerate_jacobian =
false;
195 if(p.
isType<
bool>(
"Use DOF Name")) {
196 if(p.
get<
bool>(
"Use DOF Name"))
197 evalName = fieldName;
200 dof_basis = PHX::MDField<ScalarT,Cell,Point>(fieldName,
basis->functional);
211 if(
basis->isScalarBasis()) {
217 this->addDependentField(
basisValues->basis_ref_scalar);
218 this->addDependentField(
basisValues->basis_scalar);
220 else if(
basis->isVectorBasis()) {
226 this->addDependentField(
basisValues->basis_ref_vector);
227 this->addDependentField(
basisValues->basis_vector);
232 std::string n =
"DOF_PointValues: " +
dof_basis.fieldTag().name() +
" Jacobian";
237 template<
typename TRAITS>
248 this->utils.setFieldData(
basisValues->basis_ref_scalar,fm);
249 this->utils.setFieldData(
basisValues->basis_scalar,fm);
255 this->utils.setFieldData(
basisValues->basis_ref_vector,fm);
256 this->utils.setFieldData(
basisValues->basis_vector,fm);
261 template<
typename TRAITS>
266 if(accelerate_jacobian) {
267 int spaceDim =
basisValues->basis_vector.dimension(3);
270 Kokkos::parallel_for(workset.num_cells,functor);
274 Kokkos::parallel_for(workset.num_cells,functor);
278 int spaceDim =
basisValues->basis_vector.dimension(3);
281 Kokkos::parallel_for(workset.num_cells,functor);
285 Kokkos::parallel_for(workset.num_cells,functor);
290 if(accelerate_jacobian) {
292 Kokkos::parallel_for(workset.num_cells,functor);
296 Kokkos::parallel_for(workset.num_cells,functor);
Teuchos::RCP< BasisValues2< ScalarT > > basisValues
std::string name() const
A unique key that is the combination of the basis type and basis order.
T & get(const std::string &name, T def_value)
void evaluateFields(typename TRAITS::EvalData d)
PHX::MDField< ScalarT, Cell, Point, Dim > dof_ip_vector
bool isVectorBasis() const
TEUCHOS_DEPRECATED RCP< T > rcp(T *p, Dealloc_T dealloc, bool owns_mem)
Teuchos::RCP< PHX::DataLayout > dl_scalar
Data layout for scalar fields.
PHX::MDField< ScalarT, Cell, Point > dof_basis
Teuchos::RCP< const panzer::PointRule > pointRule
Teuchos::RCP< const PureBasis > basis
void postRegistrationSetup(typename TRAITS::SetupData d, PHX::FieldManager< TRAITS > &fm)
bool isType(const std::string &name) const
bool isScalarBasis() const
Teuchos::RCP< BasisValues2< ScalarT > > basisValues
Teuchos::RCP< PHX::DataLayout > dl_vector
Data layout for vector fields.
Teuchos::RCP< const panzer::PureBasis > basis
Interpolates basis DOF values to IP DOF values.
const std::string & getName() const
PHX::MDField< ScalarT, Cell, Point > dof_ip_scalar
#define TEUCHOS_ASSERT(assertion_test)
Teuchos::RCP< PHX::DataLayout > functional
<Cell,Basis> or <Cell,Basis>
DOF_PointValues(const Teuchos::ParameterList &p)
Kokkos::View< const int *, PHX::Device > offsets