Go to the documentation of this file.
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";
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.
See Intrepid2::Basis_HDIV_TRI_I1_FEM.
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.
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....
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.
Definition file for FEM basis functions of degree 1 for H(div) functions on TRI cells.
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...
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::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.
Triangle topology, 3 nodes.
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.
Header file for the abstract base class Intrepid2::Basis.
Implementation of the default H(div)-compatible FEM basis of degree 1 on a Triangle cell.
virtual bool requireOrientation() const
True if orientation is required.
shards::CellTopology basisCellTopology_
Base topology of the cells for which the basis is defined. See the Shards package for definition of b...
virtual const char * getName() const
Returns basis name.
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > scalarViewType
View type for scalars.
See Intrepid2::Basis_HDIV_TRI_I1_FEM.