57 #ifndef Intrepid2_DerivedBasis_HDIV_HEX_h
58 #define Intrepid2_DerivedBasis_HDIV_HEX_h
60 #include <Kokkos_View.hpp>
61 #include <Kokkos_DynRankView.hpp>
70 template<
class HGRAD_LINE,
class HVOL_LINE>
76 using OutputViewType =
typename HGRAD_LINE::OutputViewType;
77 using PointViewType =
typename HGRAD_LINE::PointViewType ;
78 using ScalarViewType =
typename HGRAD_LINE::ScalarViewType;
80 using LineGradBasis = HGRAD_LINE;
81 using LineHVolBasis = HVOL_LINE;
93 LineHVolBasis(polyOrder_y-1),
94 LineHVolBasis(polyOrder_z-1))
109 virtual void getValues(OutputViewType outputValues,
const EOperator operatorType,
110 const PointViewType inputPoints1,
const PointViewType inputPoints2,
const PointViewType inputPoints3,
111 bool tensorPoints)
const
113 Intrepid2::EOperator op1, op2, op3;
114 if (operatorType == Intrepid2::OPERATOR_VALUE)
116 op1 = Intrepid2::OPERATOR_VALUE;
117 op2 = Intrepid2::OPERATOR_VALUE;
118 op3 = Intrepid2::OPERATOR_VALUE;
121 auto outputValuesComponent1 = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),0);
122 auto outputValuesComponent23 = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),std::make_pair(1,3));
127 inputPoints3, op3, tensorPoints);
129 Kokkos::deep_copy(outputValuesComponent23,0.0);
131 else if (operatorType == Intrepid2::OPERATOR_DIV)
136 op1 = Intrepid2::OPERATOR_GRAD;
137 op2 = Intrepid2::OPERATOR_VALUE;
138 op3 = Intrepid2::OPERATOR_VALUE;
144 inputPoints3, op3, tensorPoints, weight);
148 INTREPID2_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
"operator not yet supported");
153 template<
class HGRAD_LINE,
class HVOL_LINE>
159 using OutputViewType =
typename HGRAD_LINE::OutputViewType;
160 using PointViewType =
typename HGRAD_LINE::PointViewType ;
161 using ScalarViewType =
typename HGRAD_LINE::ScalarViewType;
163 using LineGradBasis = HGRAD_LINE;
164 using LineHVolBasis = HVOL_LINE;
176 LineGradBasis(polyOrder_y ),
177 LineHVolBasis(polyOrder_z-1))
192 virtual void getValues(OutputViewType outputValues,
const EOperator operatorType,
193 const PointViewType inputPoints1,
const PointViewType inputPoints2,
const PointViewType inputPoints3,
194 bool tensorPoints)
const
196 Intrepid2::EOperator op1, op2, op3;
197 if (operatorType == Intrepid2::OPERATOR_VALUE)
199 op1 = Intrepid2::OPERATOR_VALUE;
200 op2 = Intrepid2::OPERATOR_VALUE;
201 op3 = Intrepid2::OPERATOR_VALUE;
204 auto outputValuesComponent_x = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),0);
205 auto outputValuesComponent_y = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),1);
206 auto outputValuesComponent_z = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),2);
209 Kokkos::deep_copy(outputValuesComponent_x,0.0);
215 inputPoints3, op3, tensorPoints, weight);
218 Kokkos::deep_copy(outputValuesComponent_z,0.0);
220 else if (operatorType == Intrepid2::OPERATOR_DIV)
226 op1 = Intrepid2::OPERATOR_VALUE;
227 op2 = Intrepid2::OPERATOR_GRAD;
228 op3 = Intrepid2::OPERATOR_VALUE;
234 inputPoints3, op3, tensorPoints, weight);
238 INTREPID2_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
"operator not yet supported");
243 template<
class HGRAD_LINE,
class HVOL_LINE>
248 using OutputViewType =
typename HGRAD_LINE::OutputViewType;
249 using PointViewType =
typename HGRAD_LINE::PointViewType ;
250 using ScalarViewType =
typename HGRAD_LINE::ScalarViewType;
252 using LineGradBasis = HGRAD_LINE;
253 using LineHVolBasis = HVOL_LINE;
265 LineHVolBasis(polyOrder_y-1),
266 LineGradBasis(polyOrder_z ))
281 virtual void getValues(OutputViewType outputValues,
const EOperator operatorType,
282 const PointViewType inputPoints1,
const PointViewType inputPoints2,
const PointViewType inputPoints3,
283 bool tensorPoints)
const
285 Intrepid2::EOperator op1, op2, op3;
286 if (operatorType == Intrepid2::OPERATOR_VALUE)
288 op1 = Intrepid2::OPERATOR_VALUE;
289 op2 = Intrepid2::OPERATOR_VALUE;
290 op3 = Intrepid2::OPERATOR_VALUE;
293 auto outputValuesComponent_xy = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),std::make_pair(0,2));
294 auto outputValuesComponent_z = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),2);
297 Kokkos::deep_copy(outputValuesComponent_xy,0.0);
303 inputPoints3, op3, tensorPoints);
305 else if (operatorType == Intrepid2::OPERATOR_DIV)
310 op1 = Intrepid2::OPERATOR_VALUE;
311 op2 = Intrepid2::OPERATOR_VALUE;
312 op3 = Intrepid2::OPERATOR_GRAD;
318 inputPoints3, op3, tensorPoints, weight);
322 INTREPID2_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
"operator not yet supported");
330 template<
class HGRAD_LINE,
class HVOL_LINE>
333 Basis_Derived_HDIV_Family1_HEX<HGRAD_LINE, HVOL_LINE>>
347 Family1(polyOrder_x, polyOrder_y, polyOrder_z)) {
352 template<
class HGRAD_LINE,
class HVOL_LINE>
355 Basis_Derived_HDIV_Family2_HEX<HGRAD_LINE, HVOL_LINE> >
369 Family2 (polyOrder_x, polyOrder_y, polyOrder_z)) {
virtual void getValues(OutputViewType outputValues, const EOperator operatorType, const PointViewType inputPoints12, const PointViewType inputPoints3, bool tensorPoints) const override
Evaluation of a tensor FEM basis on a reference cell.
Basis_Derived_HDIV_Family1_HEX(int polyOrder_x, int polyOrder_y, int polyOrder_z)
Constructor.
Implementation of bases that are tensor products of two or three component bases. ...
virtual void getValues(OutputViewType outputValues, const EOperator operatorType, const PointViewType inputPoints1, const PointViewType inputPoints2, const PointViewType inputPoints3, bool tensorPoints) const
multi-component getValues() method (required/called by TensorBasis3)
EFunctionSpace functionSpace_
The function space in which the basis is defined.
Free functions, callable from device code, that implement various polynomials useful in basis definit...
Basis_Derived_HDIV_Family3_HEX(int polyOrder_x, int polyOrder_y, int polyOrder_z)
Constructor.
Implementation of a basis that is the direct sum of two other bases.
Basis_Derived_HDIV_HEX(int polyOrder)
Constructor.
A basis that is the direct sum of two other bases.
virtual void getValues(OutputViewType outputValues, const EOperator operatorType, const PointViewType inputPoints1, const PointViewType inputPoints2, const PointViewType inputPoints3, bool tensorPoints) const
multi-component getValues() method (required/called by TensorBasis3)
Basis_Derived_HDIV_Family2_HEX(int polyOrder_x, int polyOrder_y, int polyOrder_z)
Constructor.
ordinal_type getDofCount(const ordinal_type subcDim, const ordinal_type subcOrd) const
DoF count for specified subcell.
virtual bool requireOrientation() const
True if orientation is required.
Basis_Derived_HDIV_HEX(int polyOrder_x, int polyOrder_y, int polyOrder_z)
Constructor.
virtual void getValues(OutputViewType outputValues, const EOperator operatorType, const PointViewType inputPoints1, const PointViewType inputPoints2, const PointViewType inputPoints3, bool tensorPoints) const
multi-component getValues() method (required/called by TensorBasis3)
Basis_Derived_HDIV_Family3_Family1_HEX(int polyOrder_x, int polyOrder_y, int polyOrder_z)
Constructor.