43 #ifndef PANZER_DOF_IMPL_HPP
44 #define PANZER_DOF_IMPL_HPP
53 #include "Intrepid2_FunctionSpaceTools.hpp"
66 template<
typename EvalT,
typename TRAITS>
69 use_descriptors_(false),
70 dof_basis( p.get<
std::string>(
"Name"),
79 if(basis->isScalarBasis()) {
81 p.
get<std::string>(
"Name"),
85 else if(basis->isVectorBasis()) {
87 p.
get<std::string>(
"Name"),
96 std::string n =
"DOF: " +
dof_basis.fieldTag().name() +
" ("+PHX::typeAsString<EvalT>()+
")";
101 template<
typename EvalT,
typename TRAITS>
103 DOF(
const PHX::FieldTag & input,
104 const PHX::FieldTag & output,
107 : use_descriptors_(true)
129 std::string n =
"DOF: " +
dof_basis.fieldTag().name() +
" ("+PHX::typeAsString<EvalT>()+
")";
134 template<
typename EvalT,
typename TRAITS>
139 this->utils.setFieldData(dof_basis,fm);
141 this->utils.setFieldData(dof_ip_vector,fm);
143 this->utils.setFieldData(dof_ip_scalar,fm);
146 if(not use_descriptors_)
151 template<
typename EvalT,
typename TRAITS>
156 : *this->wda(workset).bases[basis_index];
158 if(is_vector_basis) {
162 Kokkos::parallel_for(workset.num_cells,functor);
166 Kokkos::parallel_for(workset.num_cells,functor);
171 Kokkos::parallel_for(workset.num_cells,functor);
182 template<
typename TRAITS>
185 use_descriptors_(false),
186 dof_basis( p.get<
std::string>(
"Name"),
198 offsets_array = Kokkos::View<int*,PHX::Device>(
"offsets",
offsets.size());
199 for(std::size_t i=0;i<
offsets.size();i++)
202 accelerate_jacobian_enabled =
true;
205 sensitivities_name =
true;
206 if (p.
isType<std::string>(
"Sensitivities Name"))
207 sensitivities_name = p.
get<std::string>(
"Sensitivities Name");
210 accelerate_jacobian_enabled =
false;
213 if(basis->isScalarBasis()) {
215 p.
get<std::string>(
"Name"),
219 else if(basis->isVectorBasis()) {
221 p.
get<std::string>(
"Name"),
230 std::string n =
"DOF: " +
dof_basis.fieldTag().name()
231 + ( accelerate_jacobian_enabled ?
" accel_jac " :
"slow_jac" )
232 +
" ("+PHX::typeAsString<panzer::Traits::Jacobian>()+
")";
237 template<
typename TRAITS>
239 DOF(
const PHX::FieldTag & input,
240 const PHX::FieldTag & output,
243 : use_descriptors_(true)
251 accelerate_jacobian_enabled =
false;
267 std::string n =
"DOF: " +
dof_basis.fieldTag().name() +
" slow_jac(descriptor) ("+PHX::typeAsString<typename TRAITS::Jacobian>()+
")";
272 template<
typename TRAITS>
289 template<
typename TRAITS>
295 accelerate_jacobian =
false;
296 if(accelerate_jacobian_enabled && d.first_sensitivities_name==sensitivities_name) {
297 accelerate_jacobian =
true;
302 template<
typename TRAITS>
310 if(accelerate_jacobian) {
314 Kokkos::parallel_for(workset.num_cells,functor);
318 Kokkos::parallel_for(workset.num_cells,functor);
325 Kokkos::parallel_for(workset.num_cells,functor);
329 Kokkos::parallel_for(workset.num_cells,functor);
334 if(accelerate_jacobian) {
336 Kokkos::parallel_for(workset.num_cells,functor);
340 Kokkos::parallel_for(workset.num_cells,functor);