Intrepid2
Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank > Class Template Reference

Implementation of a general sum factorization algorithm, using a novel approach developed by Roberts, for integration. Uses hierarchical parallelism. More...

#include <Intrepid2_IntegrationToolsDef.hpp>

Public Member Functions

 F_IntegratePointValueCache (Data< Scalar, DeviceType > integralData, TensorData< Scalar, DeviceType > leftComponent, Data< Scalar, DeviceType > composedTransform, TensorData< Scalar, DeviceType > rightComponent, TensorData< Scalar, DeviceType > cellMeasures, int a_offset, int b_offset, int leftFieldOrdinalOffset, int rightFieldOrdinalOffset)
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int incrementArgument (Kokkos::Array< int, maxComponents > &arguments, const Kokkos::Array< int, maxComponents > &bounds) const
KOKKOS_INLINE_FUNCTION int incrementArgument (Kokkos::Array< int, Parameters::MaxTensorComponents > &arguments, const Kokkos::Array< int, Parameters::MaxTensorComponents > &bounds, const int &numComponents) const
 runtime-sized variant of incrementArgument; gets used by approximate flop count.
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int nextIncrementResult (const Kokkos::Array< int, maxComponents > &arguments, const Kokkos::Array< int, maxComponents > &bounds) const
KOKKOS_INLINE_FUNCTION int nextIncrementResult (const Kokkos::Array< int, Parameters::MaxTensorComponents > &arguments, const Kokkos::Array< int, Parameters::MaxTensorComponents > &bounds, const int &numComponents) const
 runtime-sized variant of nextIncrementResult; gets used by approximate flop count.
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int relativeEnumerationIndex (const Kokkos::Array< int, maxComponents > &arguments, const Kokkos::Array< int, maxComponents > &bounds, const int startIndex) const
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==3 &&rank==integralViewRank, Scalar & > integralViewEntry (const IntegralViewType &integralView, const int &cellDataOrdinal, const int &i, const int &j) const
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==2 &&rank==integralViewRank, Scalar & > integralViewEntry (const IntegralViewType &integralView, const int &cellDataOrdinal, const int &i, const int &j) const
KOKKOS_INLINE_FUNCTION void runSpecialized3 (const TeamMember &teamMember) const
 Hand-coded 3-component version.
template<size_t numTensorComponents>
KOKKOS_INLINE_FUNCTION void run (const TeamMember &teamMember) const
KOKKOS_INLINE_FUNCTION void operator() (const TeamMember &teamMember) const
long approximateFlopCountPerCell () const
 returns an estimate of the number of floating point operations per cell (counting sums, subtractions, divisions, and multiplies, each of which counts as one operation).
int teamSize (const int &maxTeamSizeFromKokkos) const
 returns the team size that should be provided to the policy constructor, based on the Kokkos maximum and the amount of thread parallelism we have available.
size_t team_shmem_size (int numThreads) const
 Provide the shared memory capacity.

Private Types

using ExecutionSpace = typename DeviceType::execution_space
using TeamPolicy = Kokkos::TeamPolicy<DeviceType>
using TeamMember = typename TeamPolicy::member_type
using IntegralViewType = Kokkos::View<typename RankExpander<Scalar, integralViewRank>::value_type, DeviceType>

Private Attributes

IntegralViewType integralView_
TensorData< Scalar, DeviceType > leftComponent_
Data< Scalar, DeviceType > composedTransform_
TensorData< Scalar, DeviceType > rightComponent_
TensorData< Scalar, DeviceType > cellMeasures_
int a_offset_
int b_offset_
int leftComponentSpan_
int rightComponentSpan_
int numTensorComponents_
int leftFieldOrdinalOffset_
int rightFieldOrdinalOffset_
size_t fad_size_output_ = 0
Kokkos::Array< int, Parameters::MaxTensorComponentsleftFieldBounds_
Kokkos::Array< int, Parameters::MaxTensorComponentsrightFieldBounds_
Kokkos::Array< int, Parameters::MaxTensorComponentspointBounds_
int maxFieldsLeft_
int maxFieldsRight_
int maxPointCount_

Detailed Description

template<class Scalar, class DeviceType, int integralViewRank>
class Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >

Implementation of a general sum factorization algorithm, using a novel approach developed by Roberts, for integration. Uses hierarchical parallelism.

Whereas F_Integrate, and Mora and Demkowicz, and all others we are aware of, cache partial sums at intermediate component levels — the cached values are indexed by component basis ordinals — we integrate the first component in its dimension(s) and store values for integration points in the remaining dimensions, so that our caches are indexed by point ordinals. If there are L_x, L_y, and L_z quadrature points in dimensions x,y,z, we require a cache of size L_y * L_z +1 for a 3D, 3-component integral. The standard approach requires a cache of size (p_x+1)*(p_y+1). So long as one is not over-integrating by too much, these sizes are about the same. The real advantage of our approach here is (we expect) that it improves data locality.

Definition at line 1025 of file Intrepid2_IntegrationToolsDef.hpp.

Member Typedef Documentation

◆ ExecutionSpace

template<class Scalar, class DeviceType, int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::ExecutionSpace = typename DeviceType::execution_space
private

Definition at line 1027 of file Intrepid2_IntegrationToolsDef.hpp.

◆ IntegralViewType

template<class Scalar, class DeviceType, int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::IntegralViewType = Kokkos::View<typename RankExpander<Scalar, integralViewRank>::value_type, DeviceType>
private

Definition at line 1031 of file Intrepid2_IntegrationToolsDef.hpp.

◆ TeamMember

template<class Scalar, class DeviceType, int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::TeamMember = typename TeamPolicy::member_type
private

Definition at line 1029 of file Intrepid2_IntegrationToolsDef.hpp.

◆ TeamPolicy

template<class Scalar, class DeviceType, int integralViewRank>
using Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::TeamPolicy = Kokkos::TeamPolicy<DeviceType>
private

Definition at line 1028 of file Intrepid2_IntegrationToolsDef.hpp.

Constructor & Destructor Documentation

◆ F_IntegratePointValueCache()

template<class Scalar, class DeviceType, int integralViewRank>
Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::F_IntegratePointValueCache ( Data< Scalar, DeviceType > integralData,
TensorData< Scalar, DeviceType > leftComponent,
Data< Scalar, DeviceType > composedTransform,
TensorData< Scalar, DeviceType > rightComponent,
TensorData< Scalar, DeviceType > cellMeasures,
int a_offset,
int b_offset,
int leftFieldOrdinalOffset,
int rightFieldOrdinalOffset )
inline

Definition at line 1057 of file Intrepid2_IntegrationToolsDef.hpp.

Member Function Documentation

◆ approximateFlopCountPerCell()

template<class Scalar, class DeviceType, int integralViewRank>
long Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::approximateFlopCountPerCell ( ) const
inline

returns an estimate of the number of floating point operations per cell (counting sums, subtractions, divisions, and multiplies, each of which counts as one operation).

Definition at line 1630 of file Intrepid2_IntegrationToolsDef.hpp.

◆ incrementArgument() [1/2]

template<class Scalar, class DeviceType, int integralViewRank>
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::incrementArgument ( Kokkos::Array< int, maxComponents > & arguments,
const Kokkos::Array< int, maxComponents > & bounds ) const
inline

Definition at line 1109 of file Intrepid2_IntegrationToolsDef.hpp.

◆ incrementArgument() [2/2]

template<class Scalar, class DeviceType, int integralViewRank>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::incrementArgument ( Kokkos::Array< int, Parameters::MaxTensorComponents > & arguments,
const Kokkos::Array< int, Parameters::MaxTensorComponents > & bounds,
const int & numComponents ) const
inline

runtime-sized variant of incrementArgument; gets used by approximate flop count.

Definition at line 1126 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralViewEntry() [1/2]

template<class Scalar, class DeviceType, int integralViewRank>
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==2 &&rank==integralViewRank, Scalar & > Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::integralViewEntry ( const IntegralViewType & integralView,
const int & cellDataOrdinal,
const int & i,
const int & j ) const
inline

Definition at line 1205 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralViewEntry() [2/2]

template<class Scalar, class DeviceType, int integralViewRank>
template<int rank>
KOKKOS_INLINE_FUNCTION enable_if_t< rank==3 &&rank==integralViewRank, Scalar & > Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::integralViewEntry ( const IntegralViewType & integralView,
const int & cellDataOrdinal,
const int & i,
const int & j ) const
inline

Definition at line 1197 of file Intrepid2_IntegrationToolsDef.hpp.

◆ nextIncrementResult() [1/2]

template<class Scalar, class DeviceType, int integralViewRank>
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::nextIncrementResult ( const Kokkos::Array< int, maxComponents > & arguments,
const Kokkos::Array< int, maxComponents > & bounds ) const
inline

Definition at line 1144 of file Intrepid2_IntegrationToolsDef.hpp.

◆ nextIncrementResult() [2/2]

template<class Scalar, class DeviceType, int integralViewRank>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::nextIncrementResult ( const Kokkos::Array< int, Parameters::MaxTensorComponents > & arguments,
const Kokkos::Array< int, Parameters::MaxTensorComponents > & bounds,
const int & numComponents ) const
inline

runtime-sized variant of nextIncrementResult; gets used by approximate flop count.

Definition at line 1159 of file Intrepid2_IntegrationToolsDef.hpp.

◆ operator()()

template<class Scalar, class DeviceType, int integralViewRank>
KOKKOS_INLINE_FUNCTION void Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::operator() ( const TeamMember & teamMember) const
inline

Definition at line 1611 of file Intrepid2_IntegrationToolsDef.hpp.

◆ relativeEnumerationIndex()

template<class Scalar, class DeviceType, int integralViewRank>
template<size_t maxComponents, size_t numComponents = maxComponents>
KOKKOS_INLINE_FUNCTION int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::relativeEnumerationIndex ( const Kokkos::Array< int, maxComponents > & arguments,
const Kokkos::Array< int, maxComponents > & bounds,
const int startIndex ) const
inline

Definition at line 1175 of file Intrepid2_IntegrationToolsDef.hpp.

◆ run()

template<class Scalar, class DeviceType, int integralViewRank>
template<size_t numTensorComponents>
KOKKOS_INLINE_FUNCTION void Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::run ( const TeamMember & teamMember) const
inline

Definition at line 1472 of file Intrepid2_IntegrationToolsDef.hpp.

◆ runSpecialized3()

template<class Scalar, class DeviceType, int integralViewRank>
KOKKOS_INLINE_FUNCTION void Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::runSpecialized3 ( const TeamMember & teamMember) const
inline

◆ team_shmem_size()

template<class Scalar, class DeviceType, int integralViewRank>
size_t Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::team_shmem_size ( int numThreads) const
inline

Provide the shared memory capacity.

Definition at line 1786 of file Intrepid2_IntegrationToolsDef.hpp.

◆ teamSize()

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::teamSize ( const int & maxTeamSizeFromKokkos) const
inline

returns the team size that should be provided to the policy constructor, based on the Kokkos maximum and the amount of thread parallelism we have available.

Definition at line 1777 of file Intrepid2_IntegrationToolsDef.hpp.

Member Data Documentation

◆ a_offset_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::a_offset_
private

Definition at line 1037 of file Intrepid2_IntegrationToolsDef.hpp.

◆ b_offset_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::b_offset_
private

Definition at line 1038 of file Intrepid2_IntegrationToolsDef.hpp.

◆ cellMeasures_

template<class Scalar, class DeviceType, int integralViewRank>
TensorData<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::cellMeasures_
private

Definition at line 1036 of file Intrepid2_IntegrationToolsDef.hpp.

◆ composedTransform_

template<class Scalar, class DeviceType, int integralViewRank>
Data<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::composedTransform_
private

Definition at line 1034 of file Intrepid2_IntegrationToolsDef.hpp.

◆ fad_size_output_

template<class Scalar, class DeviceType, int integralViewRank>
size_t Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::fad_size_output_ = 0
private

Definition at line 1045 of file Intrepid2_IntegrationToolsDef.hpp.

◆ integralView_

template<class Scalar, class DeviceType, int integralViewRank>
IntegralViewType Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::integralView_
private

Definition at line 1032 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftComponent_

template<class Scalar, class DeviceType, int integralViewRank>
TensorData<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftComponent_
private

Definition at line 1033 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftComponentSpan_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftComponentSpan_
private

Definition at line 1039 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldBounds_

template<class Scalar, class DeviceType, int integralViewRank>
Kokkos::Array<int,Parameters::MaxTensorComponents> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftFieldBounds_
private

Definition at line 1049 of file Intrepid2_IntegrationToolsDef.hpp.

◆ leftFieldOrdinalOffset_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::leftFieldOrdinalOffset_
private

Definition at line 1042 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxFieldsLeft_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::maxFieldsLeft_
private

Definition at line 1053 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxFieldsRight_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::maxFieldsRight_
private

Definition at line 1054 of file Intrepid2_IntegrationToolsDef.hpp.

◆ maxPointCount_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::maxPointCount_
private

Definition at line 1055 of file Intrepid2_IntegrationToolsDef.hpp.

◆ numTensorComponents_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::numTensorComponents_
private

Definition at line 1041 of file Intrepid2_IntegrationToolsDef.hpp.

◆ pointBounds_

template<class Scalar, class DeviceType, int integralViewRank>
Kokkos::Array<int,Parameters::MaxTensorComponents> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::pointBounds_
private

Definition at line 1051 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightComponent_

template<class Scalar, class DeviceType, int integralViewRank>
TensorData<Scalar,DeviceType> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightComponent_
private

Definition at line 1035 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightComponentSpan_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightComponentSpan_
private

Definition at line 1040 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldBounds_

template<class Scalar, class DeviceType, int integralViewRank>
Kokkos::Array<int,Parameters::MaxTensorComponents> Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightFieldBounds_
private

Definition at line 1050 of file Intrepid2_IntegrationToolsDef.hpp.

◆ rightFieldOrdinalOffset_

template<class Scalar, class DeviceType, int integralViewRank>
int Intrepid2::Impl::F_IntegratePointValueCache< Scalar, DeviceType, integralViewRank >::rightFieldOrdinalOffset_
private

Definition at line 1043 of file Intrepid2_IntegrationToolsDef.hpp.


The documentation for this class was generated from the following file: