Go to the documentation of this file.
49 #ifndef __INTREPID2_HCURL_QUAD_I1_FEM_HPP__
50 #define __INTREPID2_HCURL_QUAD_I1_FEM_HPP__
111 template<EOperator opType>
113 template<
typename outputViewType,
114 typename inputViewType>
115 KOKKOS_INLINE_FUNCTION
117 getValues( outputViewType output,
118 const inputViewType input );
122 template<
typename ExecSpaceType,
123 typename outputValueValueType,
class ...outputValueProperties,
124 typename inputPointValueType,
class ...inputPointProperties>
126 getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
127 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
133 template<
typename outputValueViewType,
134 typename inputPointViewType,
137 outputValueViewType _outputValues;
138 const inputPointViewType _inputPoints;
140 KOKKOS_INLINE_FUNCTION
141 Functor( outputValueViewType outputValues_,
142 inputPointViewType inputPoints_)
143 : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
145 KOKKOS_INLINE_FUNCTION
146 void operator()(
const ordinal_type pt)
const {
148 case OPERATOR_VALUE : {
149 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
150 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
155 case OPERATOR_CURL: {
156 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt );
157 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
162 INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
163 opType != OPERATOR_CURL,
164 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_CI_FEM::Serial::getVAlues) operator is not supported");
174 template<
typename ExecSpaceType = void,
175 typename outputValueType = double,
176 typename pointValueType =
double>
198 const EOperator operatorType = OPERATOR_VALUE )
const {
199 #ifdef HAVE_INTREPID2_DEBUG
207 Impl::Basis_HCURL_QUAD_I1_FEM::
208 getValues<ExecSpaceType>( outputValues,
216 #ifdef HAVE_INTREPID2_DEBUG
218 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
219 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoords) rank = 2 required for dofCoords array");
221 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
basisCardinality_, std::invalid_argument,
222 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
224 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
basisCellTopology_.getDimension(), std::invalid_argument,
225 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
227 Kokkos::deep_copy(dofCoords, this->
dofCoords_);
233 #ifdef HAVE_INTREPID2_DEBUG
235 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 2, std::invalid_argument,
236 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoeffs) rank = 2 required for dofCoeffs array");
238 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
239 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
241 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.extent(1) != this->
getBaseCellTopology().getDimension(), std::invalid_argument,
242 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::getDofCoeffs) incorrect reference cell (1st) dimension in dofCoeffs array");
244 Kokkos::deep_copy(dofCoeffs, this->
dofCoeffs_);
250 return "Intrepid2_HCURL_QUAD_I1_FEM";
ordinal_type getCardinality() const
Returns cardinality of the basis.
ordinal_type basisCardinality_
Cardinality of the basis, i.e., the number of basis functions/degrees-of-freedom.
virtual void getDofCoords(scalarViewType dofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on the reference cell.
Kokkos::DynRankView< scalarType, ExecSpaceType > dofCoords_
Coordinates of degrees-of-freedom for basis functions defined in physical space.
shards::CellTopology getBaseCellTopology() const
Returns the base cell topology for which the basis is defined. See Shards documentation https://trili...
Kokkos::View< ordinal_type ***, typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_3d_host
View type for 3d host array.
Kokkos::View< ordinal_type **,typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_2d_host
View type for 2d host array.
See Intrepid2::Basis_HCURL_QUAD_I1_FEM.
virtual void getDofCoeffs(scalarViewType dofCoeffs) const
Coefficients for computing degrees of freedom for Lagrangian basis If P is an element of the space sp...
Implementation of the default H(curl)-compatible FEM basis of degree 1 on Quadrilateral cell.
void getValues_HCURL_Args(const outputValueViewType outputValues, const inputPointViewType inputPoints, const EOperator operatorType, const shards::CellTopology cellTopo, const ordinal_type basisCard)
Runtime check of the arguments for the getValues method in an HCURL-conforming FEM basis....
An abstract base class that defines interface for concrete basis implementations for Finite Element (...
EOperator
Enumeration of primitive operators available in Intrepid. Primitive operators act on reconstructed fu...
Kokkos::View< ordinal_type *,typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_1d_host
View type for 1d host array.
Kokkos::DynRankView< outputValueType, Kokkos::LayoutStride, ExecSpaceType > outputViewType
View type for basis value output.
Kokkos::DynRankView< pointValueType, Kokkos::LayoutStride, ExecSpaceType > pointViewType
View type for input points.
See Intrepid2::Basis_HCURL_QUAD_I1_FEM.
virtual const char * getName() const
Returns basis name.
Kokkos::DynRankView< scalarType, ExecSpaceType > dofCoeffs_
Coefficients for computing degrees of freedom for Lagrangian basis If P is an element of the space sp...
Quadrilateral topology, 4 nodes.
Definition file for FEM basis functions of degree 1 for H(curl) functions on Qadrilateral cells.
Basis_HCURL_QUAD_I1_FEM()
Constructor.
Header file for the abstract base class Intrepid2::Basis.
virtual void getValues(outputViewType outputValues, const pointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const
Evaluation of a FEM basis on a reference cell.
shards::CellTopology basisCellTopology_
Base topology of the cells for which the basis is defined. See the Shards package for definition of b...
See Intrepid2::Basis_HCURL_QUAD_I1_FEM.
virtual bool requireOrientation() const
True if orientation is required.
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > scalarViewType
View type for scalars.