43 #ifndef PANZER_DOF_IMPL_HPP 44 #define PANZER_DOF_IMPL_HPP 53 #include "Intrepid2_FunctionSpaceTools.hpp" 66 template<
typename EvalT,
typename TRAITS>
69 dof_basis( p.get<
std::string>(
"Name"),
80 p.
get<std::string>(
"Name"),
86 p.
get<std::string>(
"Name"),
95 std::string n =
"DOF: " +
dof_basis.fieldTag().name() +
" ("+PHX::typeAsString<EvalT>()+
")";
100 template<
typename EvalT,
typename TRAITS>
105 this->utils.setFieldData(dof_basis,fm);
107 this->utils.setFieldData(dof_ip_vector,fm);
109 this->utils.setFieldData(dof_ip_scalar,fm);
115 template<
typename EvalT,
typename TRAITS>
121 if(is_vector_basis) {
122 int spaceDim =
basisValues.basis_vector.dimension(3);
125 Kokkos::parallel_for(workset.num_cells,functor);
129 Kokkos::parallel_for(workset.num_cells,functor);
134 Kokkos::parallel_for(workset.num_cells,functor);
145 template<
typename TRAITS>
148 dof_basis( p.get<
std::string>(
"Name"),
160 offsets_array = Kokkos::View<int*,PHX::Device>(
"offsets",
offsets.size());
161 for(std::size_t i=0;i<
offsets.size();i++)
164 accelerate_jacobian_enabled =
true;
167 sensitivities_name =
true;
168 if (p.
isType<std::string>(
"Sensitivities Name"))
169 sensitivities_name = p.
get<std::string>(
"Sensitivities Name");
172 accelerate_jacobian_enabled =
false;
177 p.
get<std::string>(
"Name"),
183 p.
get<std::string>(
"Name"),
192 std::string n =
"DOF: " +
dof_basis.fieldTag().name()
193 + ( accelerate_jacobian_enabled ?
" accel_jac " :
"slow_jac" )
194 +
" ("+PHX::typeAsString<panzer::Traits::Jacobian>()+
")";
199 template<
typename TRAITS>
214 template<
typename TRAITS>
220 accelerate_jacobian =
false;
221 if(accelerate_jacobian_enabled && d.first_sensitivities_name==sensitivities_name) {
222 accelerate_jacobian =
true;
227 template<
typename TRAITS>
234 if(accelerate_jacobian) {
235 int spaceDim =
basisValues.basis_vector.dimension(3);
238 Kokkos::parallel_for(workset.num_cells,functor);
242 Kokkos::parallel_for(workset.num_cells,functor);
246 int spaceDim =
basisValues.basis_vector.dimension(3);
249 Kokkos::parallel_for(workset.num_cells,functor);
253 Kokkos::parallel_for(workset.num_cells,functor);
258 if(accelerate_jacobian) {
260 Kokkos::parallel_for(workset.num_cells,functor);
264 Kokkos::parallel_for(workset.num_cells,functor);
std::vector< std::string >::size_type getBasisIndex(std::string basis_name, panzer::Workset &workset, WorksetDetailsAccessor &wda)
Returns the index in the workset bases for a particular BasisIRLayout name.
PHX::MDField< ScalarT, Cell, Point > dof_ip_scalar
DOF(const Teuchos::ParameterList &p)
T & get(const std::string &name, T def_value)
bool isVectorBasis() const
Teuchos::RCP< PHX::DataLayout > dl_scalar
Data layout for scalar fields.
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.
void evaluateFields(typename TRAITS::EvalData d)
WorksetDetailsAccessor wda
Interpolates basis DOF values to IP DOF values.
PHX::MDField< ScalarT, Cell, Point, Dim > dof_ip_vector
#define TEUCHOS_ASSERT(assertion_test)
void postRegistrationSetup(typename TRAITS::SetupData d, PHX::FieldManager< TRAITS > &fm)
PHX::MDField< ScalarT, Cell, Point > dof_basis
Kokkos::View< const int *, PHX::Device > offsets