Intrepid2
|
View-like interface to tensor data; tensor components are stored separately and multiplied together at access time. More...
#include <Intrepid2_TensorData.hpp>
Public Types | |
using | value_type = Scalar |
using | execution_space = typename DeviceType::execution_space |
Public Member Functions | |
template<size_t numTensorComponents> | |
TensorData (Kokkos::Array< Data< Scalar, DeviceType >, numTensorComponents > tensorComponents, bool separateFirstComponent=false) | |
Constructor with fixed-length Kokkos::Array argument. More... | |
TensorData (std::vector< Data< Scalar, DeviceType > > tensorComponents, bool separateFirstComponent=false) | |
Constructor with variable-length std::vector containing the components. More... | |
TensorData (const TensorData &first, const TensorData &second, bool separateFirstComponent=false) | |
Constructor to combine two other TensorData objects. More... | |
TensorData (Data< Scalar, DeviceType > tensorComponent) | |
Simple constructor for the case of trivial tensor-product structure (single component) More... | |
TensorData () | |
Default constructor. More... | |
rank_ (0) | |
TensorData (TensorData otherTensorData, std::vector< int > whichComps) | |
Constructor that takes a subset of the tensorial components of another TensorData container. More... | |
template<typename OtherDeviceType , class = typename std::enable_if< std::is_same<typename DeviceType::memory_space, typename OtherDeviceType::memory_space>::value>::type, class = typename std::enable_if<!std::is_same<DeviceType,OtherDeviceType>::value>::type> | |
TensorData (const TensorData< Scalar, OtherDeviceType > &tensorData) | |
copy-like constructor for differing device type, but same memory space. This does a shallow copy of the underlying view. | |
template<typename OtherDeviceType , class = typename std::enable_if<!std::is_same<typename DeviceType::memory_space, typename OtherDeviceType::memory_space>::value>::type> | |
TensorData (const TensorData< Scalar, OtherDeviceType > &tensorData) | |
Copy-like constructor for differing execution spaces. This performs a deep copy of the underlying data. | |
KOKKOS_INLINE_FUNCTION const Data< Scalar, DeviceType > & | getTensorComponent (const ordinal_type &r) const |
Returns the requested tensor component. More... | |
template<typename iType0 > | |
KOKKOS_INLINE_FUNCTION std::enable_if < std::is_integral< iType0 > ::value, Scalar >::type | operator() (const iType0 &tensorEntryIndex) const |
Accessor for rank-1 objects. More... | |
template<typename iType0 , ordinal_type numTensorComponents> | |
KOKKOS_INLINE_FUNCTION std::enable_if < std::is_integral< iType0 > ::value, Scalar >::type | operator() (const Kokkos::Array< iType0, numTensorComponents > &entryComponents) const |
Accessor that accepts a fixed-length array with entries corresponding to component indices. More... | |
template<typename iType0 , typename iType1 > | |
KOKKOS_INLINE_FUNCTION std::enable_if < (std::is_integral< iType0 > ::value &&std::is_integral < iType1 >::value), Scalar > ::type | operator() (const iType0 &tensorEntryIndex0, const iType1 &tensorEntryIndex1) const |
Accessor for rank-2 objects. More... | |
KOKKOS_INLINE_FUNCTION ordinal_type | getTensorComponentIndex (const ordinal_type &tensorComponent, const ordinal_type &dim, const ordinal_type &enumerationIndex) const |
return the index into the specified tensorial component in the dimension specified corresponding to the enumerationIndex given for that dimension. | |
template<typename iType0 , typename iType1 , typename iType2 > | |
KOKKOS_INLINE_FUNCTION std::enable_if < (std::is_integral< iType0 > ::value &&std::is_integral < iType1 >::value &&std::is_integral< iType2 > ::value), Scalar >::type | operator() (const iType0 &tensorEntryIndex0, const iType1 &tensorEntryIndex1, const iType2 &tensorEntryIndex2) const |
Accessor for rank-3 objects. More... | |
template<typename iType0 , typename iType1 , ordinal_type numTensorComponents> | |
KOKKOS_INLINE_FUNCTION std::enable_if < (std::is_integral< iType0 > ::value &&std::is_integral < iType1 >::value), Scalar > ::type | operator() (const Kokkos::Array< iType0, numTensorComponents > &entryComponents0, const Kokkos::Array< iType1, numTensorComponents > &entryComponents1) const |
Accessor for rank-2 objects that accepts fixed-length arrays with entries corresponding to component indices. More... | |
template<typename iType > | |
KOKKOS_INLINE_FUNCTION std::enable_if < std::is_integral< iType > ::value, ordinal_type >::type | extent_int (const iType &d) const |
Returns the logical extent in the requested dimension. More... | |
template<typename iType > | |
KOKKOS_INLINE_FUNCTION constexpr std::enable_if < std::is_integral< iType > ::value, size_t >::type | extent (const iType &d) const |
Returns the logical extent in the requested dimension. More... | |
KOKKOS_INLINE_FUNCTION constexpr bool | isValid () const |
Returns true for containers that have data; false for those that don't (e.g., those that have been constructed by the default constructor). | |
KOKKOS_INLINE_FUNCTION ordinal_type | rank () const |
Returns the rank of the container. | |
KOKKOS_INLINE_FUNCTION ordinal_type | numTensorComponents () const |
Return the number of tensorial components. | |
KOKKOS_INLINE_FUNCTION bool | separateFirstComponent () const |
Returns true if the first component is indexed separately; false if not. | |
void | setFirstComponentExtentInDimension0 (const ordinal_type &newExtent) |
Sets the extent of the first component. Only valid when either there is only one component, or when separateFirstComponent() returns true. The intended use case is when the 0 dimension in first component represents a cell index, and the container is resized to match a workset size that does not evenly divide the number of cells. | |
Protected Member Functions | |
void | initialize () |
Initialize members based on constructor parameters. | |
Protected Attributes | |
Kokkos::Array< Data< Scalar, DeviceType > , Parameters::MaxTensorComponents > | tensorComponents_ |
Kokkos::Array< ordinal_type, 7 > | extents_ |
Kokkos::Array< Kokkos::Array < ordinal_type, Parameters::MaxTensorComponents >, 7 > | entryModulus_ |
ordinal_type | rank_ |
bool | separateFirstComponent_ = false |
ordinal_type | numTensorComponents_ = 0 |
View-like interface to tensor data; tensor components are stored separately and multiplied together at access time.
Definition at line 30 of file Intrepid2_TensorData.hpp.
|
inline |
Constructor with fixed-length Kokkos::Array argument.
[in] | tensorComponents | - the data components that will be multiplied together. May not have more than Parameters::MaxTensorComponents entries. |
[in] | separateFirstComponent | - if true, indicates that the first component will be indexed separately (this is used when the first index corresponds to a cell ordinal) |
When separateFirstComponent is false, TensorData has rank equal to the maximum rank of the components in tensorComponents, and the logical index in rank r is a function of the indices in rank r of its components, where the function is such that the fastest-moving component index is the one for the final component. Components that have rank less than r are understood to have index 0 in that dimension.
When separateFirstComponent is true, all components are required to have rank 1, and TensorData has rank 2, with the first argument reserved for the first component. The second argument is indexed precisely as described above, omitting the first component.
Definition at line 94 of file Intrepid2_TensorData.hpp.
|
inline |
Constructor with variable-length std::vector containing the components.
[in] | tensorComponents | - the data components that will be multiplied together. May not have more than Parameters::MaxTensorComponents entries. |
[in] | separateFirstComponent | - if true, indicates that the first component will be indexed separately (this is used when the first index corresponds to a cell ordinal) |
When separateFirstComponent is false, TensorData has rank equal to the maximum rank of the components in tensorComponents, and the logical index in rank r is a function of the indices in rank r of its components, where the function is such that the fastest-moving component index is the one for the final component. Components that have rank less than r are understood to have index 0 in that dimension.
When separateFirstComponent is true, all components are required to have rank 1, and TensorData has rank 2, with the first argument reserved for the first component. The second argument is indexed precisely as described above, omitting the first component.
Definition at line 116 of file Intrepid2_TensorData.hpp.
|
inline |
Constructor to combine two other TensorData objects.
[in] | first | - TensorData object with the components for the first dimension(s) |
[in] | second | - TensorData object with the components for the remaining dimension(s). |
[in] | separateFirstComponent | - if true, indicates that the first component (from the first TensorData object) will be indexed separately (this is used when the first index corresponds to a cell ordinal) |
When separateFirstComponent is true, all components are required to have rank 1, and TensorData has rank 2, with the first argument reserved for the first component. The second argument is indexed precisely as described above, omitting the first component.
Definition at line 137 of file Intrepid2_TensorData.hpp.
|
inline |
Simple constructor for the case of trivial tensor-product structure (single component)
[in] | tensorComponent | - the data component. |
Simple constructor for trivial tensor-product structure. The TensorData object will have precisely the same logical data layout as the provided tensorComponent.
Definition at line 161 of file Intrepid2_TensorData.hpp.
|
inline |
Default constructor.
Default constructor provided to allow an indication of empty/zero data. TensorData::isValid() will return false.
Definition at line 171 of file Intrepid2_TensorData.hpp.
|
inline |
Constructor that takes a subset of the tensorial components of another TensorData container.
[in] | otherTensorData | - the original TensorData container |
[in] | whichComps | - the tensorial component indices to take from the other container. |
Definition at line 184 of file Intrepid2_TensorData.hpp.
|
inline |
Returns the logical extent in the requested dimension.
[in] | d | - the dimension |
Definition at line 499 of file Intrepid2_TensorData.hpp.
|
inline |
Returns the logical extent in the requested dimension.
[in] | d | - the dimension |
Definition at line 487 of file Intrepid2_TensorData.hpp.
Referenced by Intrepid2::CellGeometry< PointScalar, spaceDim, DeviceType >::allocateCellMeasure(), Intrepid2::CellGeometry< PointScalar, spaceDim, DeviceType >::computeCellMeasure(), and Intrepid2::IntegrationTools< DeviceType >::integrate().
|
inline |
Returns the requested tensor component.
[in] | r | - the tensor ordinal of the component |
Definition at line 248 of file Intrepid2_TensorData.hpp.
Referenced by Intrepid2::CellGeometry< PointScalar, spaceDim, DeviceType >::allocateCellMeasure(), Intrepid2::IntegrationTools< DeviceType >::allocateIntegralData(), Intrepid2::CellGeometry< PointScalar, spaceDim, DeviceType >::computeCellMeasure(), Intrepid2::CubatureTensor< DeviceType, pointValueType, weightValueType >::getCubature(), Intrepid2::CubatureTensorPyr< DeviceType, pointValueType, weightValueType >::getCubature(), Intrepid2::Cubature< DeviceType, pointValueType, weightValueType >::getCubature(), Intrepid2::IntegrationTools< DeviceType >::integrate(), Intrepid2::TensorArgumentIterator::TensorArgumentIterator(), and Intrepid2::TensorData< PointScalar, DeviceType >::TensorData().
|
inline |
Accessor for rank-1 objects.
[in] | tensorEntryIndex | - the composite entry index. |
Definition at line 260 of file Intrepid2_TensorData.hpp.
|
inline |
Accessor that accepts a fixed-length array with entries corresponding to component indices.
[in] | entryComponents | - an array with one entry per tensorial component, each entry indicating the requested index into that component. |
Definition at line 285 of file Intrepid2_TensorData.hpp.
|
inline |
Accessor for rank-2 objects.
[in] | tensorEntryIndex0 | - the composite tensor index in the first dimension |
[in] | tensorEntryIndex1 | - the composite tensor index in the second dimension If constructed with separateFirstComponent = true, tensorEntryIndex0 corresponds to the index to be used for the first component. Otherwise, it corresponds to an enumeration of all valid combinations of first arguments to the tensorial components. |
If constructed with separateFirstComponent = true, tensorEntryIndex1 corresponds to an enumeration of all valid combinations of second arguments to components after the first. Otherwise, it corresponds to an enumeration of all valid combinations of second arguments to all the tensorial components.
Definition at line 312 of file Intrepid2_TensorData.hpp.
|
inline |
Accessor for rank-3 objects.
[in] | tensorEntryIndex0 | - the composite tensor index in the first dimension |
[in] | tensorEntryIndex1 | - the composite tensor index in the second dimension |
[in] | tensorEntryIndex2 | - the composite tensor index in the third dimension tensorEntryIndex0 corresponds to an enumeration of all valid combinations of first arguments to the tensorial components. Similarly, tensorEntryIndex1 and tensorEntryIndex2 correspond to an enumeration of all valid second and third arguments to the tensorial components. |
Definition at line 399 of file Intrepid2_TensorData.hpp.
|
inline |
Accessor for rank-2 objects that accepts fixed-length arrays with entries corresponding to component indices.
[in] | entryComponents0 | - an array with one entry per tensorial component, each entry indicating the requested index into that component's first dimension |
[in] | entryComponents1 | - an array with one entry per tensorial component, each entry indicating the requested index into that component's second dimension |
Definition at line 454 of file Intrepid2_TensorData.hpp.