43#ifndef PANZER_PointValues_Evaluator_IMPL_HPP
44#define PANZER_PointValues_Evaluator_IMPL_HPP
54template<
typename EvalT,
typename Traits>
57 const Teuchos::ParameterList& p)
61 Teuchos::RCP<const panzer::PointRule> pointRule
62 = p.get< Teuchos::RCP<const panzer::PointRule> >(
"Point Rule");
63 Teuchos::RCP<const Kokkos::DynRankView<double,PHX::Device> > userArray
64 = p.get<Teuchos::RCP<const Kokkos::DynRankView<double,PHX::Device> > >(
"Point Array");
66 initialize(pointRule,userArray.ptr(),Teuchos::null);
70template <
typename EvalT,
typename TRAITST>
72 const Kokkos::DynRankView<double,PHX::Device> & userArray)
76 initialize(pointRule,Teuchos::ptrFromRef(userArray),Teuchos::null);
80template <
typename EvalT,
typename TRAITST>
82 const PHX::MDField<double, panzer::IP, panzer::Dim> & userArray)
86 initialize(pointRule,Teuchos::ptrFromRef(userArray),Teuchos::null);
90template <
typename EvalT,
typename TRAITST>
92 const Teuchos::RCP<const panzer::PureBasis> & pureBasis)
96 Teuchos::Ptr<const PHX::MDField<double, panzer::IP, panzer::Dim> > userArray;
97 initialize(pointRule,userArray,pureBasis);
101template <
typename EvalT,
typename TRAITST>
102template <
typename ArrayT>
104 const Teuchos::Ptr<const ArrayT> & userArray,
105 const Teuchos::RCP<const panzer::PureBasis> & pureBasis)
109 if(userArray!=Teuchos::null && basis==Teuchos::null)
110 useBasisValuesRefArray =
false;
111 else if(userArray==Teuchos::null && basis!=Teuchos::null)
112 useBasisValuesRefArray =
true;
115 TEUCHOS_ASSERT(
false);
119 if(userArray!=Teuchos::null) {
120 TEUCHOS_ASSERT(userArray->rank()==2);
123 refPointArray = md_af.
buildStaticArray<double,
NODE,
Dim>(
"refPointArray",userArray->extent(0),userArray->extent(1));
124 Kokkos::deep_copy(PHX::as_view(refPointArray), PHX::as_view(*userArray));
130 pointValues.setupArrays(pointRule);
133 this->addEvaluatedField(pointValues.coords_ref);
134 this->addEvaluatedField(pointValues.node_coordinates);
135 this->addEvaluatedField(pointValues.jac);
136 this->addEvaluatedField(pointValues.jac_inv);
137 this->addEvaluatedField(pointValues.jac_det);
138 this->addEvaluatedField(pointValues.point_coords);
140 std::string n =
"PointValues_Evaluator: " + pointRule->getName();
145template<
typename EvalT,
typename Traits>
153 this->utils.setFieldData(pointValues.coords_ref,fm);
154 this->utils.setFieldData(pointValues.node_coordinates,fm);
155 this->utils.setFieldData(pointValues.jac,fm);
156 this->utils.setFieldData(pointValues.jac_inv,fm);
157 this->utils.setFieldData(pointValues.jac_det,fm);
158 this->utils.setFieldData(pointValues.point_coords,fm);
160 if(useBasisValuesRefArray) {
165 TEUCHOS_ASSERT(basis->supportsBasisCoordinates());
170template<
typename EvalT,
typename Traits>
176 if(useBasisValuesRefArray) {
180 pointValues.
evaluateValues(this->wda(workset).cell_vertex_coordinates,
186 pointValues.evaluateValues(this->wda(workset).cell_vertex_coordinates,refPointArray,
Array_BasisDim basis_coordinates_ref
void evaluateValues(const PHX::MDField< Scalar, IP, Dim > &cub_points, const PHX::MDField< Scalar, Cell, IP, Dim, Dim > &jac, const PHX::MDField< Scalar, Cell, IP > &jac_det, const PHX::MDField< Scalar, Cell, IP, Dim, Dim > &jac_inv, const int in_num_cells=-1)
PHX::MDField< Scalar, T0 > buildStaticArray(const std::string &str, int d0) const
PointValues_Evaluator(const Teuchos::ParameterList &p)
void initialize(const Teuchos::RCP< const panzer::PointRule > &pointRule, const Teuchos::Ptr< const ArrayT > &userArray, const Teuchos::RCP< const panzer::PureBasis > &pureBasis)
Initialization method to unify the constructors.
void postRegistrationSetup(typename Traits::SetupData d, PHX::FieldManager< Traits > &fm)
void evaluateFields(typename Traits::EvalData d)
int num_cells
DEPRECATED - use: numCells()
std::vector< std::string >::size_type getPureBasisIndex(std::string basis_name, const panzer::Workset &workset, WorksetDetailsAccessor &wda)
Returns the index in the workset bases for a particular PureBasis name.
Teuchos::RCP< const std::vector< panzer::Workset > > worksets_