49 #ifndef __INTREPID2_HGRAD_HEX_C1_FEM_HPP__
50 #define __INTREPID2_HGRAD_HEX_C1_FEM_HPP__
98 typedef struct Hexahedron<8> cell_topology_type;
102 template<EOperator opType>
104 template<
typename outputViewType,
105 typename inputViewType>
106 KOKKOS_INLINE_FUNCTION
108 getValues( outputViewType output,
109 const inputViewType input );
113 template<
typename ExecSpaceType,
114 typename outputValueValueType,
class ...outputValueProperties,
115 typename inputPointValueType,
class ...inputPointProperties>
117 getValues( Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
118 const Kokkos::DynRankView<inputPointValueType, inputPointProperties...> inputPoints,
119 const EOperator operatorType);
124 template<
typename outputValueViewType,
125 typename inputPointViewType,
128 outputValueViewType _outputValues;
129 const inputPointViewType _inputPoints;
131 KOKKOS_INLINE_FUNCTION
132 Functor( outputValueViewType outputValues_,
133 inputPointViewType inputPoints_ )
134 : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
136 KOKKOS_INLINE_FUNCTION
137 void operator()(
const ordinal_type pt)
const {
139 case OPERATOR_VALUE : {
140 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt );
141 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
147 case OPERATOR_MAX : {
148 auto output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
149 const auto input = Kokkos::subview( _inputPoints, pt, Kokkos::ALL() );
154 INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
155 opType != OPERATOR_GRAD &&
156 opType != OPERATOR_D2 &&
157 opType != OPERATOR_MAX,
158 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::Serial::getValues) operator is not supported");
166 template<
typename ExecSpaceType = void,
167 typename outputValueType = double,
168 typename pointValueType =
double>
189 const EOperator operatorType = OPERATOR_VALUE )
const {
190 #ifdef HAVE_INTREPID2_DEBUG
192 Intrepid2::getValues_HGRAD_Args(outputValues,
198 Impl::Basis_HGRAD_HEX_C1_FEM::
199 getValues<ExecSpaceType>( outputValues,
207 #ifdef HAVE_INTREPID2_DEBUG
209 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
210 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::getDofCoords) rank = 2 required for dofCoords array");
212 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
getCardinality(), std::invalid_argument,
213 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
215 INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
getBaseCellTopology().getDimension(), std::invalid_argument,
216 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
218 Kokkos::deep_copy(dofCoords, this->
dofCoords_);
224 #ifdef HAVE_INTREPID2_DEBUG
226 INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 1, std::invalid_argument,
227 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::getdofCoeffs) rank = 1 required for dofCoeffs array");
229 INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
230 ">>> ERROR: (Intrepid2::Basis_HGRAD_HEX_C1_FEM::getdofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
232 Kokkos::deep_copy(dofCoeffs, 1.0);
238 return "Intrepid2_HGRAD_HEX_C1_FEM";
See Intrepid2::Basis_HGRAD_HEX_C1_FEM.
See Intrepid2::Basis_HGRAD_HEX_C1_FEM.
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > scalarViewType
View type for scalars.
Definition file for FEM basis functions of degree 1 for H(grad) functions on HEX cells.
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.
shards::CellTopology getBaseCellTopology() const
Returns the base cell topology for which the basis is defined. See Shards documentation https://trili...
Kokkos::DynRankView< scalarType, ExecSpaceType > dofCoords_
Coordinates of degrees-of-freedom for basis functions defined in physical space.
ordinal_type getCardinality() const
Returns cardinality of the basis.
Kokkos::View< ordinal_type ***, typename ExecSpaceType::array_layout, Kokkos::HostSpace > ordinal_type_array_3d_host
View type for 3d host array.
virtual void getValues(outputViewType outputValues, const pointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const
Evaluation of a FEM basis on a reference cell.
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.
See Intrepid2::Basis_HGRAD_HEX_C1_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...
virtual const char * getName() const
Returns basis name.
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Hexahedron cell...
Basis_HGRAD_HEX_C1_FEM()
Constructor.
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.