49 #ifndef __INTREPID2_HDIV_TRI_I1_FEM_HPP__ 50 #define __INTREPID2_HDIV_TRI_I1_FEM_HPP__ 112 template<EOperator opType>
114 template<
typename outputViewType,
115 typename inputViewType>
116 KOKKOS_INLINE_FUNCTION
118 getValues( outputViewType output,
119 const inputViewType input );
123 template<
typename ExecSpaceType,
124 typename outputValueValueType,
class ...outputValueProperties,
125 typename inputPointValueType,
class ...inputPointProperties>
127 getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
128 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
134 template<
typename outputValueViewType,
135 typename inputPointViewType,
138 outputValueViewType _outputValues;
139 const inputPointViewType _inputPoints;
141 KOKKOS_INLINE_FUNCTION
142 Functor( outputValueViewType outputValues_,
143 inputPointViewType inputPoints_ )
144 : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
146 KOKKOS_INLINE_FUNCTION
147 void operator()(
const ordinal_type pt)
const {
149 case OPERATOR_VALUE : {
150 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
151 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
155 case OPERATOR_DIV : {
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_DIV,
164 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::Serial::getValues) operator is not supported");
172 template<
typename ExecSpaceType = void,
173 typename outputValueType = double,
174 typename pointValueType =
double>
195 const EOperator operatorType = OPERATOR_VALUE )
const {
196 #ifdef HAVE_INTREPID2_DEBUG 204 Impl::Basis_HDIV_TRI_I1_FEM::
205 getValues<ExecSpaceType>( outputValues,
213 #ifdef HAVE_INTREPID2_DEBUG 215 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
216 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoords) rank = 2 required for dofCoords array");
218 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
basisCardinality_, std::invalid_argument,
219 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
221 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
basisCellTopology_.getDimension(), std::invalid_argument,
222 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
224 Kokkos::deep_copy(dofCoords, this->
dofCoords_);
230 #ifdef HAVE_INTREPID2_DEBUG 232 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 2, std::invalid_argument,
233 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoeffs) rank = 2 required for dofCoeffs array");
235 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
236 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
238 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.extent(1) != this->
getBaseCellTopology().getDimension(), std::invalid_argument,
239 ">>> ERROR: (Intrepid2::Basis_HDIV_TRI_I1_FEM::getDofCoeffs) incorrect reference cell (1st) dimension in dofCoeffs array");
241 Kokkos::deep_copy(dofCoeffs, this->
dofCoeffs_);
247 return "Intrepid2_HDIV_TRI_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...
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > scalarViewType
View type for scalars.
void getValues_HDIV_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 HDIV-conforming FEM basis...
ordinal_type basisCardinality_
Cardinality of the basis, i.e., the number of basis functions/degrees-of-freedom. ...
virtual void getValues(outputViewType outputValues, const pointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const
Evaluation of a FEM basis on a reference cell.
Basis_HDIV_TRI_I1_FEM()
Constructor.
See Intrepid2::Basis_HDIV_TRI_I1_FEM.
ordinal_type getCardinality() const
Returns cardinality of the basis.
virtual void getDofCoords(scalarViewType dofCoords) const
Returns spatial locations (coordinates) of degrees of freedom on the reference cell.
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.
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.
Implementation of the default H(div)-compatible FEM basis of degree 1 on a Triangle cell...
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< pointValueType, Kokkos::LayoutStride, ExecSpaceType > pointViewType
View type for input points.
virtual bool requireOrientation() const
True if orientation is required.
Triangle topology, 3 nodes.
See Intrepid2::Basis_HDIV_TRI_I1_FEM.
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_HDIV_TRI_I1_FEM.
Definition file for FEM basis functions of degree 1 for H(div) functions on TRI cells.
virtual const char * getName() const
Returns basis name.
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.
shards::CellTopology basisCellTopology_
Base topology of the cells for which the basis is defined. See the Shards package for definition of b...