49 #ifndef __INTREPID2_HGRAD_QUAD_C1_FEM_HPP__
50 #define __INTREPID2_HGRAD_QUAD_C1_FEM_HPP__
93 template<EOperator opType>
95 template<
typename outputViewType,
96 typename inputViewType>
97 KOKKOS_INLINE_FUNCTION
99 getValues( outputViewType output,
100 const inputViewType input );
104 template<
typename ExecSpaceType,
105 typename outputValueValueType,
class ...outputValueProperties,
106 typename inputPointValueType,
class ...inputPointProperties>
108 getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
109 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
110 const EOperator operatorType);
115 template<
typename outputValueViewType,
116 typename inputPointViewType,
119 outputValueViewType _outputValues;
120 const inputPointViewType _inputPoints;
122 KOKKOS_INLINE_FUNCTION
123 Functor( outputValueViewType outputValues_,
124 inputPointViewType inputPoints_ )
125 : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
127 KOKKOS_INLINE_FUNCTION
128 void operator()(
const ordinal_type pt)
const {
130 case OPERATOR_VALUE : {
131 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt );
132 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
139 case OPERATOR_MAX : {
140 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
141 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
146 INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
147 opType != OPERATOR_GRAD &&
148 opType != OPERATOR_CURL &&
149 opType != OPERATOR_D2 &&
150 opType != OPERATOR_MAX,
151 ">>> ERROR: (Intrepid2::Basis_HGRAD_QUAD_C1_FEM::Serial::getValues) operator is not supported");
159 template<
typename ExecSpaceType = void,
160 typename outputValueType = double,
161 typename pointValueType =
double>
182 const EOperator operatorType = OPERATOR_VALUE )
const {
183 #ifdef HAVE_INTREPID2_DEBUG
185 Intrepid2::getValues_HGRAD_Args(outputValues,
191 Impl::Basis_HGRAD_QUAD_C1_FEM::
192 getValues<ExecSpaceType>( outputValues,
200 #ifdef HAVE_INTREPID2_DEBUG
202 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
203 ">>> ERROR: (Intrepid2::Basis_HGRAD_QUAD_C1_FEM::getDofCoords) rank = 2 required for dofCoords array");
205 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
getCardinality(), std::invalid_argument,
206 ">>> ERROR: (Intrepid2::Basis_HGRAD_QUAD_C1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
208 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
getBaseCellTopology().getDimension(), std::invalid_argument,
209 ">>> ERROR: (Intrepid2::Basis_HGRAD_QUAD_C1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
211 Kokkos::deep_copy(dofCoords, this->
dofCoords_);
217 #ifdef HAVE_INTREPID2_DEBUG
219 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 1, std::invalid_argument,
220 ">>> ERROR: (Intrepid2::Basis_HGRAD_QUAD_C1_FEM::getdofCoeffs) rank = 1 required for dofCoeffs array");
222 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
223 ">>> ERROR: (Intrepid2::Basis_HGRAD_QUAD_C1_FEM::getdofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
225 Kokkos::deep_copy(dofCoeffs, 1.0);
231 return "Intrepid2_HGRAD_QUAD_C1_FEM";
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Quadrilateral cell...
Definition file for FEM basis functions of degree 1 for H(grad) functions on QUAD cells...
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > scalarViewType
View type for scalars.
An abstract base class that defines interface for concrete basis implementations for Finite Element (...
Kokkos::DynRankView< outputValueType, Kokkos::LayoutStride, ExecSpaceType > outputViewType
View type for basis value output.
shards::CellTopology getBaseCellTopology() const
Returns the base cell topology for which the basis is defined. See Shards documentation https://trili...
Kokkos::DynRankView< scalarType, ExecSpaceType > dofCoords_
Coordinates of degrees-of-freedom for basis functions defined in physical space.
ordinal_type getCardinality() const
Returns cardinality of the basis.
Kokkos::View< ordinal_type ***, typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_3d_host
View type for 3d host array.
See Intrepid2::Basis_HGRAD_QUAD_C1_FEM.
virtual const char * getName() const
Returns basis name.
Kokkos::View< ordinal_type *,typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_1d_host
View type for 1d host array.
Kokkos::DynRankView< pointValueType, Kokkos::LayoutStride, ExecSpaceType > pointViewType
View type for input points.
virtual void getDofCoords(scalarViewType dofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on the reference cell.
virtual void getDofCoeffs(scalarViewType dofCoeffs) const
Coefficients for computing degrees of freedom for Lagrangian basis If P is an element of the space sp...
See Intrepid2::Basis_HGRAD_QUAD_C1_FEM.
virtual void getValues(outputViewType outputValues, const pointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const
Evaluation of a FEM basis on a reference cell.
See Intrepid2::Basis_HGRAD_QUAD_C1_FEM.
Basis_HGRAD_QUAD_C1_FEM()
Constructor.
Header file for the abstract base class Intrepid2::Basis.
Kokkos::View< ordinal_type **,typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_2d_host
View type for 2d host array.