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);
PHX::MDField< ScalarT, Cell, Point > dof_ip_scalar
DOF(const Teuchos::ParameterList &p)
T & get(const std::string &name, T def_value)
Array_CellBasisIP basis_scalar
panzer::BasisDescriptor bd_
Array_CellBasisIPDim basis_vector
Teuchos::RCP< PHX::DataLayout > dl_scalar
Data layout for scalar fields.
PHX::MDField< const ScalarT, Cell, Point > dof_basis
bool isType(const std::string &name) const
std::vector< std::string >::size_type getBasisIndex(std::string basis_name, const panzer::Workset &workset, WorksetDetailsAccessor &wda)
Returns the index in the workset bases for a particular BasisIRLayout name.
panzer::IntegrationDescriptor id_
Teuchos::RCP< PHX::DataLayout > dl_vector
Data layout for vector fields.
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)
const std::string & getType() const
Get type of basis.
Kokkos::View< const int *, PHX::Device > offsets