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 bases that are tensor products of two or three component bases. ...
Basis_Derived_HCURL_QUAD(int polyOrder_x, int polyOrder_y)
Constructor.
EFunctionSpace functionSpace_
The function space in which the basis is defined.
void getValues(OutputViewType outputValues, const PointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const override
Evaluation of a FEM basis on a reference cell.
virtual bool requireOrientation() const
True if orientation is required.
Free functions, callable from device code, that implement various polynomials useful in basis definit...
Implementation of a basis that is the direct sum of two other bases.
A basis that is the direct sum of two other bases.
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)
ordinal_type getDofCount(const ordinal_type subcDim, const ordinal_type subcOrd) const
DoF count for specified subcell.
Basis_Derived_HCURL_Family1_QUAD(int polyOrder_x, int polyOrder_y)
Constructor.
Basis_Derived_HCURL_QUAD(int polyOrder)
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 defined as the tensor product of two component bases.