53 #ifndef Intrepid2_DerivedBasis_HCURL_QUAD_h
54 #define Intrepid2_DerivedBasis_HCURL_QUAD_h
56 #include <Kokkos_View.hpp>
57 #include <Kokkos_DynRankView.hpp>
66 template<
class HGRAD_LINE,
class HVOL_LINE>
71 using ExecutionSpace =
typename HGRAD_LINE::ExecutionSpace;
72 using OutputValueType =
typename HGRAD_LINE::OutputValueType;
73 using PointValueType =
typename HGRAD_LINE::PointValueType;
75 using OutputViewType =
typename HGRAD_LINE::OutputViewType;
76 using PointViewType =
typename HGRAD_LINE::PointViewType ;
77 using ScalarViewType =
typename HGRAD_LINE::ScalarViewType;
79 using LineGradBasis = HGRAD_LINE;
80 using LineHVolBasis = HVOL_LINE;
91 LineGradBasis(polyOrder_y))
105 virtual void getValues(OutputViewType outputValues,
const EOperator operatorType,
106 const PointViewType inputPoints1,
const PointViewType inputPoints2,
107 bool tensorPoints)
const
109 Intrepid2::EOperator op1, op2;
110 if (operatorType == Intrepid2::OPERATOR_VALUE)
112 op1 = Intrepid2::OPERATOR_VALUE;
113 op2 = Intrepid2::OPERATOR_VALUE;
116 auto outputValuesComponent1 = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),0);
117 auto outputValuesComponent2 = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),1);
121 inputPoints2, op2, tensorPoints);
123 Kokkos::deep_copy(outputValuesComponent2,0.0);
125 else if (operatorType == Intrepid2::OPERATOR_CURL)
129 op1 = Intrepid2::OPERATOR_VALUE;
130 op2 = Intrepid2::OPERATOR_GRAD;
132 double weight = -1.0;
135 inputPoints2, op2, tensorPoints, weight);
139 INTREPID2_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
"operator not yet supported");
144 template<
class HGRAD_LINE,
class HVOL_LINE>
149 using ExecutionSpace =
typename HGRAD_LINE::ExecutionSpace;
150 using OutputValueType =
typename HGRAD_LINE::OutputValueType;
151 using PointValueType =
typename HGRAD_LINE::PointValueType;
153 using OutputViewType =
typename HGRAD_LINE::OutputViewType;
154 using PointViewType =
typename HGRAD_LINE::PointViewType ;
155 using ScalarViewType =
typename HGRAD_LINE::ScalarViewType;
157 using LineGradBasis = HGRAD_LINE;
158 using LineHVolBasis = HVOL_LINE;
169 LineHVolBasis(polyOrder_y-1))
183 virtual void getValues(OutputViewType outputValues,
const EOperator operatorType,
184 const PointViewType inputPoints1,
const PointViewType inputPoints2,
185 bool tensorPoints)
const
187 Intrepid2::EOperator op1, op2;
188 if (operatorType == Intrepid2::OPERATOR_VALUE)
190 op1 = Intrepid2::OPERATOR_VALUE;
191 op2 = Intrepid2::OPERATOR_VALUE;
194 auto outputValuesComponent1 = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),0);
195 auto outputValuesComponent2 = Kokkos::subview(outputValues,Kokkos::ALL(),Kokkos::ALL(),1);
198 Kokkos::deep_copy(outputValuesComponent1, 0.0);
201 inputPoints2, op2, tensorPoints);
204 else if (operatorType == Intrepid2::OPERATOR_CURL)
208 op1 = Intrepid2::OPERATOR_GRAD;
209 op2 = Intrepid2::OPERATOR_VALUE;
213 inputPoints2, op2, tensorPoints);
217 INTREPID2_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
"operator not yet supported");
222 template<
class HGRAD_LINE,
class HVOL_LINE>
225 Basis_Derived_HCURL_Family2_QUAD<HGRAD_LINE, HVOL_LINE> >
238 Family2(polyOrder_x, polyOrder_y)) {
Implementation of a basis that is the direct sum of two other bases.
Free functions, callable from device code, that implement various polynomials useful in basis definit...
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, bool tensorPoints) const
multi-component getValues() method (required/called by TensorBasis)
Basis_Derived_HCURL_Family1_QUAD(int polyOrder_x, int polyOrder_y)
Constructor.
Basis_Derived_HCURL_Family2_QUAD(int polyOrder_x, int polyOrder_y)
Constructor.
virtual void getValues(OutputViewType outputValues, const EOperator operatorType, const PointViewType inputPoints1, const PointViewType inputPoints2, bool tensorPoints) const
multi-component getValues() method (required/called by TensorBasis)
Basis_Derived_HCURL_QUAD(int polyOrder_x, int polyOrder_y)
Constructor.
Basis_Derived_HCURL_QUAD(int polyOrder)
Constructor.
virtual bool requireOrientation() const
True if orientation is required.
A basis that is the direct sum of two other bases.
Basis defined as the tensor product of two component bases.
virtual void getValues(OutputViewType, const PointViewType, const EOperator=OPERATOR_VALUE) const
Evaluation of a FEM basis on a reference cell.
ordinal_type getDofCount(const ordinal_type subcDim, const ordinal_type subcOrd) const
DoF count for specified subcell.
EFunctionSpace functionSpace_
The function space in which the basis is defined.