49 #ifndef __INTREPID2_HCURL_HEX_I1_FEM_HPP__ 50 #define __INTREPID2_HCURL_HEX_I1_FEM_HPP__ 129 template<EOperator opType>
131 template<
typename OutputViewType,
132 typename inputViewType>
133 KOKKOS_INLINE_FUNCTION
135 getValues( OutputViewType output,
136 const inputViewType input );
139 template<
typename DeviceType,
140 typename outputValueValueType,
class ...outputValueProperties,
141 typename inputPointValueType,
class ...inputPointProperties>
143 getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
144 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
150 template<
typename outputValueViewType,
151 typename inputPointViewType,
154 outputValueViewType _outputValues;
155 const inputPointViewType _inputPoints;
157 KOKKOS_INLINE_FUNCTION
158 Functor( outputValueViewType outputValues_,
159 inputPointViewType inputPoints_ )
160 : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
162 KOKKOS_INLINE_FUNCTION
163 void operator()(
const ordinal_type pt)
const {
166 case OPERATOR_CURL: {
167 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
168 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
173 INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
174 opType != OPERATOR_CURL,
175 ">>> ERROR: (Intrepid2::Basis_HCURL_QUAD_CI_FEM::Serial::getVAlues) operator is not supported");
184 template<
typename DeviceType = void,
185 typename outputValueType = double,
186 typename pointValueType =
double>
205 getValues( OutputViewType outputValues,
206 const PointViewType inputPoints,
207 const EOperator operatorType = OPERATOR_VALUE )
const override {
208 #ifdef HAVE_INTREPID2_DEBUG 215 Impl::Basis_HCURL_HEX_I1_FEM::
216 getValues<DeviceType>( outputValues,
223 getDofCoords( ScalarViewType dofCoords )
const override {
224 #ifdef HAVE_INTREPID2_DEBUG 226 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
227 ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoords) rank = 2 required for dofCoords array");
229 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
basisCardinality_, std::invalid_argument,
230 ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
232 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
basisCellTopology_.getDimension(), std::invalid_argument,
233 ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
235 Kokkos::deep_copy(dofCoords, this->
dofCoords_);
241 getDofCoeffs( ScalarViewType dofCoeffs )
const override {
242 #ifdef HAVE_INTREPID2_DEBUG 244 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 2, std::invalid_argument,
245 ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoeffs) rank = 2 required for dofCoeffs array");
247 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
248 ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
250 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.extent(1) != this->
getBaseCellTopology().getDimension(), std::invalid_argument,
251 ">>> ERROR: (Intrepid2::Basis_HCURL_HEX_I1_FEM::getDofCoeffs) incorrect reference cell (1st) dimension in dofCoeffs array");
253 Kokkos::deep_copy(dofCoeffs, this->
dofCoeffs_);
259 return "Intrepid2_HCURL_HEX_I1_FEM";
281 return Teuchos::rcp(
new 283 else if(subCellDim == 2) {
284 return Teuchos::rcp(
new 288 INTREPID2_TEST_FOR_EXCEPTION(
true,std::invalid_argument,
"Input parameters out of bounds");
Teuchos::RCP< Basis< DeviceType, OutputType, PointType > > BasisPtr
Basis Pointer.
virtual const char * getName() const override
Returns basis name.
Basis_HCURL_HEX_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...
An abstract base class that defines interface for concrete basis implementations for Finite Element (...
Implementation of the default H(curl)-compatible FEM basis of degree 1 on Quadrilateral cell...
ordinal_type getCardinality() const
Returns cardinality of the basis.
See Intrepid2::Basis_HCURL_HEX_I1_FEM.
BasisPtr< typename Kokkos::HostSpace::device_type, outputValueType, pointValueType > getHostBasis() const override
Creates and returns a Basis object whose DeviceType template argument is Kokkos::HostSpace::device_ty...
virtual bool requireOrientation() const override
True if orientation is required.
EOperator
Enumeration of primitive operators available in Intrepid. Primitive operators act on reconstructed fu...
Definition file for FEM basis functions of degree 1 for H(curl) functions on HEX cells.
Implementation of the default HVOL-compatible FEM contstant basis on triangle, quadrilateral, hexahedron and tetrahedron cells.
BasisPtr< DeviceType, outputValueType, pointValueType > getSubCellRefBasis(const ordinal_type subCellDim, const ordinal_type subCellOrd) const override
returns the basis associated to a subCell.
Hexahedron topology, 8 nodes.
Implementation of the default H(curl)-compatible FEM basis of degree 1 on Hexahedron cell...
See Intrepid2::Basis_HCURL_HEX_I1_FEM.
See Intrepid2::Basis_HCURL_HEX_I1_FEM.
ordinal_type basisCardinality_
Cardinality of the basis, i.e., the number of basis functions/degrees-of-freedom. ...
Header file for the Intrepid2::Basis_HCURL_QUAD_I1_FEM class.
shards::CellTopology basisCellTopology_
Base topology of the cells for which the basis is defined. See the Shards package for definition of b...
shards::CellTopology getBaseCellTopology() const
Returns the base cell topology for which the basis is defined. See Shards documentation https://trili...
Kokkos::DynRankView< scalarType, DeviceType > dofCoords_
Coordinates of degrees-of-freedom for basis functions defined in physical space.
Header file for the abstract base class Intrepid2::Basis.
Kokkos::DynRankView< scalarType, DeviceType > dofCoeffs_
Coefficients for computing degrees of freedom for Lagrangian basis If P is an element of the space sp...