49 #ifndef __INTREPID2_HGRAD_LINE_C1_FEM_HPP__ 
   50 #define __INTREPID2_HGRAD_LINE_C1_FEM_HPP__ 
   85       typedef struct Line<2> cell_topology_type;
 
   89       template<EOperator opType>
 
   91         template<
typename OutputViewType,
 
   92                  typename inputViewType>
 
   93         KOKKOS_INLINE_FUNCTION
 
   95         getValues(       OutputViewType output,
 
   96                    const inputViewType input );
 
  100       template<
typename ExecSpaceType,
 
  101                typename outputValueValueType, 
class ...outputValueProperties,
 
  102                typename inputPointValueType,  
class ...inputPointProperties>
 
  104       getValues(       Kokkos::DynRankView<outputValueValueType,outputValueProperties...> outputValues,
 
  105                  const Kokkos::DynRankView<inputPointValueType, inputPointProperties...>  inputPoints,
 
  106                  const EOperator operatorType);
 
  111       template<
typename outputValueViewType,
 
  112                typename inputPointViewType,
 
  115              outputValueViewType _outputValues;
 
  116         const inputPointViewType  _inputPoints;
 
  118         KOKKOS_INLINE_FUNCTION
 
  119         Functor(       outputValueViewType outputValues_,
 
  120                        inputPointViewType  inputPoints_ )
 
  121           : _outputValues(outputValues_), _inputPoints(inputPoints_) {}
 
  123         KOKKOS_INLINE_FUNCTION
 
  124         void operator()(
const ordinal_type pt)
 const {
 
  126           case OPERATOR_VALUE : {
 
  127             auto       output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt );
 
  128             const auto input  = Kokkos::subview( _inputPoints,                 pt, Kokkos::ALL() );
 
  133           case OPERATOR_MAX : {
 
  134             auto       output = Kokkos::subview( _outputValues, Kokkos::ALL(), pt, Kokkos::ALL() );
 
  135             const auto input  = Kokkos::subview( _inputPoints,                 pt, Kokkos::ALL() );
 
  140             INTREPID2_TEST_FOR_ABORT( opType != OPERATOR_VALUE &&
 
  141                                       opType != OPERATOR_GRAD &&
 
  142                                       opType != OPERATOR_MAX,
 
  143                                       ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::Serial::getValues) operator is not supported");
 
  152   template<
typename ExecSpaceType = void,
 
  153            typename outputValueType = double,
 
  154            typename pointValueType = 
double>
 
  156     : 
public Basis<ExecSpaceType,outputValueType,pointValueType> {
 
  176                const EOperator operatorType = OPERATOR_VALUE )
 const {
 
  177 #ifdef HAVE_INTREPID2_DEBUG 
  179       Intrepid2::getValues_HGRAD_Args(outputValues,
 
  185       Impl::Basis_HGRAD_LINE_C1_FEM::
 
  186         getValues<ExecSpaceType>( outputValues,
 
  194 #ifdef HAVE_INTREPID2_DEBUG 
  196       INTREPID2_TEST_FOR_EXCEPTION( dofCoords.rank() != 2, std::invalid_argument,
 
  197                                     ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getDofCoords) rank = 2 required for dofCoords array");
 
  199       INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoords.extent(0)) != this->
basisCardinality_, std::invalid_argument,
 
  200                                     ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getDofCoords) mismatch in number of dof and 0th dimension of dofCoords array");
 
  202       INTREPID2_TEST_FOR_EXCEPTION( dofCoords.extent(1) != this->
basisCellTopology_.getDimension(), std::invalid_argument,
 
  203                                     ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getDofCoords) incorrect reference cell (1st) dimension in dofCoords array");
 
  205       Kokkos::deep_copy(dofCoords, this->
dofCoords_);
 
  211 #ifdef HAVE_INTREPID2_DEBUG 
  213       INTREPID2_TEST_FOR_EXCEPTION( dofCoeffs.rank() != 1, std::invalid_argument,
 
  214                                     ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getdofCoeffs) rank = 1 required for dofCoeffs array");
 
  216       INTREPID2_TEST_FOR_EXCEPTION( static_cast<ordinal_type>(dofCoeffs.extent(0)) != this->
getCardinality(), std::invalid_argument,
 
  217                                     ">>> ERROR: (Intrepid2::Basis_HGRAD_LINE_C1_FEM::getdofCoeffs) mismatch in number of dof and 0th dimension of dofCoeffs array");
 
  219       Kokkos::deep_copy(dofCoeffs, 1.0);
 
  225       return "Intrepid2_HGRAD_LINE_C1_FEM";
 
See Intrepid2::Basis_HGRAD_LINE_C1_FEM. 
Definition file for FEM basis functions of degree 1 for H(grad) functions on a Line. 
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. ...
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 (...
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. 
Basis_HGRAD_LINE_C1_FEM()
Constructor. 
Kokkos::DynRankView< OutputValueType, Kokkos::LayoutStride, ExecSpaceType > OutputViewType
View type for basis value output. 
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 > OrdinalTypeArray3DHost
View type for 3d host array. 
See Intrepid2::Basis_HGRAD_LINE_C1_FEM. 
virtual const char * getName() const 
Returns basis name. 
Kokkos::DynRankView< PointValueType, Kokkos::LayoutStride, ExecSpaceType > PointViewType
View type for input points. 
virtual void getValues(OutputViewType outputValues, const PointViewType inputPoints, const EOperator operatorType=OPERATOR_VALUE) const 
Evaluation of a FEM basis on a reference cell. 
Implementation of the default H(grad)-compatible FEM basis of degree 1 on Line cell. 
Kokkos::DynRankView< scalarType, Kokkos::LayoutStride, ExecSpaceType > ScalarViewType
View type for scalars. 
Header file for the abstract base class Intrepid2::Basis. 
See Intrepid2::Basis_HGRAD_LINE_C1_FEM. 
shards::CellTopology basisCellTopology_
Base topology of the cells for which the basis is defined. See the Shards package for definition of b...