16 #ifndef __INTREPID2_CUBATURE_TENSOR_HPP__
17 #define __INTREPID2_CUBATURE_TENSOR_HPP__
19 #include "Intrepid2_ConfigDefs.hpp"
28 template<
typename DeviceType = void,
29 typename pointValueType = double,
30 typename weightValueType =
double>
32 :
public Cubature<DeviceType,pointValueType,weightValueType> {
47 template<
typename cubPointValueType,
class ...cubPointProperties,
48 typename cubWeightValueType,
class ...cubWeightProperties>
50 getCubatureImpl( Kokkos::DynRankView<cubPointValueType, cubPointProperties...> cubPoints,
51 Kokkos::DynRankView<cubWeightValueType,cubWeightProperties...> cubWeights )
const;
53 using PointViewType =
typename Cubature<DeviceType,pointValueType,weightValueType>::PointViewType;
54 using weightViewType =
typename Cubature<DeviceType,pointValueType,weightValueType>::weightViewType;
57 using PointViewTypeAllocatable =
typename Cubature<DeviceType,pointValueType,weightValueType>::PointViewTypeAllocatable;
58 using WeightViewTypeAllocatable =
typename Cubature<DeviceType,pointValueType,weightValueType>::WeightViewTypeAllocatable;
67 weightViewType cubWeights )
const override {
78 std::vector< PointViewTypeAllocatable > cubaturePointComponents(
numCubatures_);
96 std::vector< WeightDataType > cubatureWeightComponents(
numCubatures_);
99 cubatureWeightComponents[i] = WeightDataType(WeightViewTypeAllocatable(
"cubature weights", cubatures_[i].
getNumPoints()));
125 ordinal_type numCubPoints = 1;
144 return "CubatureTensor";
150 ordinal_type r_val = 0;
165 return cubatures_[i];
179 CubatureTensor(
const CubatureTensor &b)
183 cubatures_[i] = b.cubatures_[i];
191 template<
typename CubatureType0,
192 typename CubatureType1>
194 const CubatureType1 cubature1 )
197 cubatures_[0] = cubature0;
198 cubatures_[1] = cubature1;
207 template<
typename CubatureType0,
208 typename CubatureType1,
209 typename CubatureType2>
211 const CubatureType1 cubature1,
212 const CubatureType2 cubature2 )
215 cubatures_[0] = cubature0;
216 cubatures_[1] = cubature1;
217 cubatures_[2] = cubature2;
225 template<
typename DirectCubature>
227 const DirectCubature cubatureExtension )
231 cubatures_[i] = cubatureTensor.cubatures_[i];
Defines the base class for cubature (integration) rules in Intrepid.
virtual ordinal_type getAccuracy() const override
Returns dimension of the integration domain.
View-like interface to tensor points; point components are stored separately; the appropriate coordin...
typename Cubature< DeviceType, pointValueType, weightValueType >::PointViewTypeAllocatable PointViewTypeAllocatable
KK: following should be updated with nate's tensor work.
ordinal_type getNumCubatures() const
Return the number of cubatures.
KOKKOS_INLINE_FUNCTION enable_if_t< rank==1, const Kokkos::View< typename RankExpander< DataScalar, rank >::value_type, DeviceType > & > getUnderlyingView() const
Returns the underlying view. Throws an exception if the underlying view is not rank 1...
Defines tensor-product cubature (integration) rules in Intrepid.
virtual ordinal_type getDimension() const override
Returns dimension of integration domain.
CubatureTensor(const CubatureTensor cubatureTensor, const DirectCubature cubatureExtension)
Constructor for extending an existing CubatureTensor object with an additional direct cubature rule...
Wrapper around a Kokkos::View that allows data that is constant or repeating in various logical dimen...
ordinal_type numCubatures_
Array of cubature rules.
void getAccuracy(ordinal_type *accuracy) const
Returns max. degree of polynomials that are integrated exactly.
KOKKOS_INLINE_FUNCTION const Data< Scalar, DeviceType > & getTensorComponent(const ordinal_type &r) const
Returns the requested tensor component.
virtual ordinal_type getNumPoints() const override
Returns the number of cubature points.
virtual void getCubature(const TensorPointDataType &tensorCubPoints, const TensorWeightDataType &tensorCubWeights) const override
Returns tensor cubature points and weights. For non-tensor cubatures, the tensor structures are trivi...
void getCubatureImpl(Kokkos::DynRankView< cubPointValueType, cubPointProperties...> cubPoints, Kokkos::DynRankView< cubWeightValueType, cubWeightProperties...> cubWeights) const
CubatureTensor(const CubatureType0 cubature0, const CubatureType1 cubature1)
Constructor.
Header file for the Intrepid2::Cubature class.
virtual TensorWeightDataType allocateCubatureWeights() const override
Returns a weight container appropriate for passing to getCubature().
CubatureDirect< DeviceType, pointValueType, weightValueType > getCubatureComponent(ordinal_type i) const
Return the number of cubatures.
virtual void getCubature(PointViewType cubPoints, weightViewType cubWeights) const override
Returns cubature points and weights (return arrays must be pre-sized/pre-allocated).
ordinal_type dimension_
Dimension of integration domain.
virtual const char * getName() const override
Returns cubature name.
Definition file for the Intrepid2::CubatureTensor class.
Defines direct cubature (integration) rules in Intrepid.
View-like interface to tensor data; tensor components are stored separately and multiplied together a...
virtual TensorPointDataType allocateCubaturePoints() const override
Returns a points container appropriate for passing to getCubature().
KOKKOS_INLINE_FUNCTION ScalarView< PointScalar, DeviceType > getTensorComponent(const ordinal_type &r) const
Returns the requested tensor component.
Header file for the Intrepid2::CubatureDirect class.
static constexpr ordinal_type MaxTensorComponents
Maximum number of tensor/Cartesian products that can be taken: this allows hypercube basis in 7D to b...
CubatureTensor(const CubatureType0 cubature0, const CubatureType1 cubature1, const CubatureType2 cubature2)
Constructor.