49 #ifndef INTREPID2_HCURL_TRI_I1_FEM_HPP 50 #define INTREPID2_HCURL_TRI_I1_FEM_HPP 107 template<EOperator opType>
109 template<
typename OutputViewType,
110 typename inputViewType>
111 KOKKOS_INLINE_FUNCTION
113 getValues( OutputViewType output,
114 const inputViewType input );
118 template<
typename ExecSpaceType,
119 typename outputValueValueType,
class ...outputValueProperties,
120 typename inputPointValueType,
class ...inputPointProperties>
122 getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
123 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
129 template<
typename outputValueViewType,
130 typename inputPointViewType,
133 outputValueViewType _outputValues;
134 const inputPointViewType _inputPoints;
136 KOKKOS_INLINE_FUNCTION
137 Functor( outputValueViewType outputValues_,
138 inputPointViewType inputPoints_ )
139 : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
141 KOKKOS_INLINE_FUNCTION
142 void operator()(
const ordinal_type pt)
const {
144 case OPERATOR_VALUE : {
145 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
146 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
150 case OPERATOR_CURL : {
151 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt );
152 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
157 INTREPID2_TEST_FOR_ABORT( (opType == OPERATOR_DIV),
158 ">>> ERROR (Basis_HCURL_TRI_I1_FEM): DIV is invalid operator for HCURL Basis Functions");
161 case OPERATOR_GRAD: {
162 INTREPID2_TEST_FOR_ABORT( (opType == OPERATOR_GRAD),
163 ">>> ERROR (Basis_HCURL_TRI_I1_FEM): GRAD is invalid operator for HCURL Basis Functions");
167 INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
168 opType != OPERATOR_CURL,
169 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_I1_FEM::Serial::getValues) operator is not supported");
178 template<
typename ExecSpaceType = void,
179 typename outputValueType = double,
180 typename pointValueType =
double >
201 const EOperator operatorType = OPERATOR_VALUE )
const {
202 #ifdef HAVE_INTREPID2_DEBUG 210 Impl::Basis_HCURL_TRI_I1_FEM::
211 getValues<ExecSpaceType>( outputValues,
219 #ifdef HAVE_INTREPID2_DEBUG 221 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
222 ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoords) rank = 2 required for dofCoords array");
224 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
basisCardinality_, std::invalid_argument,
225 ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
227 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
basisCellTopology_.getDimension(), std::invalid_argument,
228 ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
230 Kokkos::deep_copy(dofCoords, this->
dofCoords_);
236 #ifdef HAVE_INTREPID2_DEBUG 238 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 2, std::invalid_argument,
239 ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoeffs) rank = 2 required for dofCoeffs array");
241 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
242 ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
244 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.extent(1) != this->
getBaseCellTopology().getDimension(), std::invalid_argument,
245 ">>> ERROR: (Intrepid2::Basis_HCURL_TRI_I1_FEM::getDofCoeffs) incorrect reference cell (1st) dimension in dofCoeffs array");
247 Kokkos::deep_copy(dofCoeffs, this->
dofCoeffs_);
254 return "Intrepid2_HCURL_TRI_I1_FEM";
See Intrepid2::Basis_HCURL_TRI_I1_FEM.
Kokkos::View< ordinal_type *, typename ExecSpaceType::array_layout, Kokkos::HostSpace > OrdinalTypeArray1DHost
View type for 1d host array.
Kokkos::View< ordinal_type **, typename ExecSpaceType::array_layout, Kokkos::HostSpace > OrdinalTypeArray2DHost
View type for 2d host array.
ordinal_type basisCardinality_
Cardinality of the basis, i.e., the number of basis functions/degrees-of-freedom. ...
Basis_HCURL_TRI_I1_FEM()
Constructor.
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...
ordinal_type getCardinality() const
Returns cardinality of the basis.
virtual const char * getName() const
Returns basis name.
An abstract base class that defines interface for concrete basis implementations for Finite Element (...
virtual void getDofCoeffs(ScalarViewType dofCoeffs) const
Coefficients for computing degrees of freedom for Lagrangian basis If P is an element of the space sp...
Kokkos::DynRankView< scalarType, ExecSpaceType > dofCoords_
Coordinates of degrees-of-freedom for basis functions defined in physical space.
Definition file for default FEM basis functions of degree 1 for H(curl) functions on Triangle cells...
See Intrepid2::Basis_HCURL_TRI_I1_FEM.
shards::CellTopology getBaseCellTopology() const
Returns the base cell topology for which the basis is defined. See Shards documentation https://trili...
virtual void getValues(OutputViewType outputValues, const PointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const
Evaluation of a FEM basis on a reference cell.
virtual void getDofCoords(ScalarViewType dofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on the reference cell.
EOperator
Enumeration of primitive operators available in Intrepid. Primitive operators act on reconstructed fu...
Kokkos::DynRankView< OutputValueType, Kokkos::LayoutStride, ExecSpaceType > OutputViewType
View type for basis value output.
Kokkos::View< ordinal_type ***, typename ExecSpaceType::array_layout, Kokkos::HostSpace > OrdinalTypeArray3DHost
View type for 3d host array.
Implementation of the default H(curl)-compatible FEM basis of degree 1 on Triangle cell...
Kokkos::DynRankView< PointValueType, Kokkos::LayoutStride, ExecSpaceType > PointViewType
View type for input points.
Triangle topology, 3 nodes.
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > ScalarViewType
View type for scalars.
Kokkos::DynRankView< scalarType, ExecSpaceType > dofCoeffs_
Coefficients for computing degrees of freedom for Lagrangian basis If P is an element of the space sp...
See Intrepid2::Basis_HCURL_TRI_I1_FEM.
virtual bool requireOrientation() const
True if orientation is required.
Header file for the abstract base class Intrepid2::Basis.
shards::CellTopology basisCellTopology_
Base topology of the cells for which the basis is defined. See the Shards package for definition of b...