43 #ifndef PANZER_DOF_IMPL_HPP 44 #define PANZER_DOF_IMPL_HPP 53 #include "Intrepid2_FunctionSpaceTools.hpp" 66 template<
typename EvalT,
typename TRAITS>
68 DOF(
const Teuchos::ParameterList & p) :
69 dof_basis( p.get<
std::string>(
"Name"),
73 Teuchos::RCP<const PureBasis>
basis 74 = p.get< Teuchos::RCP<BasisIRLayout> >(
"Basis")->getBasis();
78 if(
basis->isScalarBasis()) {
80 p.get<std::string>(
"Name"),
81 p.get< Teuchos::RCP<panzer::IntegrationRule> >(
"IR")->dl_scalar);
84 else if(
basis->isVectorBasis()) {
86 p.get<std::string>(
"Name"),
87 p.get< Teuchos::RCP<panzer::IntegrationRule> >(
"IR")->dl_vector);
91 { TEUCHOS_ASSERT(
false); }
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>
147 DOF(
const Teuchos::ParameterList & p) :
148 dof_basis( p.get<
std::string>(
"Name"),
152 Teuchos::RCP<const PureBasis>
basis 153 = p.get< Teuchos::RCP<BasisIRLayout> >(
"Basis")->getBasis();
156 if(p.isType<Teuchos::RCP<
const std::vector<int> > >(
"Jacobian Offsets Vector")) {
157 const std::vector<int> &
offsets = *p.get<Teuchos::RCP<const std::vector<int> > >(
"Jacobian Offsets Vector");
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;
175 if(
basis->isScalarBasis()) {
177 p.get<std::string>(
"Name"),
178 p.get< Teuchos::RCP<panzer::IntegrationRule> >(
"IR")->dl_scalar);
181 else if(
basis->isVectorBasis()) {
183 p.get<std::string>(
"Name"),
184 p.get< Teuchos::RCP<panzer::IntegrationRule> >(
"IR")->dl_vector);
188 { TEUCHOS_ASSERT(
false); }
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)
Teuchos::RCP< BasisValues2< ScalarT > > basisValues
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
void postRegistrationSetup(typename TRAITS::SetupData d, PHX::FieldManager< TRAITS > &fm)
PHX::MDField< ScalarT, Cell, Point > dof_basis
Kokkos::View< const int *, PHX::Device > offsets