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.