DiFfRG
Loading...
Searching...
No Matches
DiFfRG::Integrator2DCartesianGPU< NT, KERNEL > Class Template Reference

Integration of an arbitrary 2D function from (qx_min, qy_min) to (qx_max, qy_max) using TBB. More...

#include <integrator_2D_cartesian_gpu.hh>

Public Types

using ctype = typename get_type::ctype<NT>
 Numerical type to be used for integration tasks e.g. the argument or possible jacobians.
 

Public Member Functions

 Integrator2DCartesianGPU (QuadratureProvider &quadrature_provider, const std::array< uint, 2 > grid_sizes, const ctype x_extent, const JSONValue &json)
 Construct a new Integrator2DCartesianGPU object.
 
 Integrator2DCartesianGPU (QuadratureProvider &quadrature_provider, std::array< uint, 2 > grid_sizes, const ctype x_extent=0., const uint max_block_size=256, const ctype qx_min=-M_PI, const ctype qy_min=-M_PI, const ctype qx_max=M_PI, const ctype qy_max=M_PI)
 Construct a new Integrator2DCartesianGPU object.
 
 Integrator2DCartesianGPU (const Integrator2DCartesianGPU &other)
 Copy a Integrator2DCartesianGPU object.
 
void set_qx_min (const ctype qx_min)
 Set the minimum value of the qx integration range.
 
void set_qy_min (const ctype qy_min)
 Set the minimum value of the qy integration range.
 
void set_qx_max (const ctype qx_max)
 Set the maximum value of the qx integration range.
 
void set_qy_max (const ctype qy_max)
 Set the maximum value of the qy integration range.
 
template<typename... T>
NT get (const ctype k, const T &...t) const
 Get the result of the integration.
 
template<typename... T>
std::future< NT > request (const ctype k, const T &...t) const
 Get the result of the integration asynchronously.
 

Private Types

using PoolMR = rmm::mr::pool_memory_resource<rmm::mr::device_memory_resource>
 

Private Attributes

const std::array< uint, 2 > grid_sizes
 
std::array< uint, 2 > block_sizes
 
const uint device_data_size
 
ctype qx_min = -M_PI
 
ctype qy_min = -M_PI
 
ctype qx_extent = 2 * M_PI
 
ctype qy_extent = 2 * M_PI
 
const ctypeptr_x_quadrature_p
 
const ctypeptr_x_quadrature_w
 
const ctypeptr_y_quadrature_p
 
const ctypeptr_y_quadrature_w
 
dim3 num_blocks
 
dim3 threads_per_block
 
PoolMR pool
 
const rmm::cuda_stream_pool cuda_stream_pool
 

Detailed Description

template<typename NT, typename KERNEL>
class DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >

Integration of an arbitrary 2D function from (qx_min, qy_min) to (qx_max, qy_max) using TBB.

Template Parameters
NTThe numerical type of the result.
KERNELThe kernel to integrate.

Member Typedef Documentation

◆ ctype

template<typename NT , typename KERNEL >
using DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::ctype = typename get_type::ctype<NT>

Numerical type to be used for integration tasks e.g. the argument or possible jacobians.

◆ PoolMR

template<typename NT , typename KERNEL >
using DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::PoolMR = rmm::mr::pool_memory_resource<rmm::mr::device_memory_resource>
private

Constructor & Destructor Documentation

◆ Integrator2DCartesianGPU() [1/3]

template<typename NT , typename KERNEL >
DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::Integrator2DCartesianGPU ( QuadratureProvider & quadrature_provider,
const std::array< uint, 2 > grid_sizes,
const ctype x_extent,
const JSONValue & json )
inline

Construct a new Integrator2DCartesianGPU object.

Parameters
quadrature_providerThe quadrature provider to use.
grid_sizesThe number of grid points in x and y direction.
x_extentThis argument is not used, but kept for compatibility with flow classes.
jsonThe JSON object containing the configuration.

◆ Integrator2DCartesianGPU() [2/3]

template<typename NT , typename KERNEL >
DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::Integrator2DCartesianGPU ( QuadratureProvider & quadrature_provider,
std::array< uint, 2 > grid_sizes,
const ctype x_extent = 0.,
const uint max_block_size = 256,
const ctype qx_min = -M_PI,
const ctype qy_min = -M_PI,
const ctype qx_max = M_PI,
const ctype qy_max = M_PI )
inline

Construct a new Integrator2DCartesianGPU object.

Parameters
quadrature_providerThe quadrature provider to use.
grid_sizesThe number of grid points in x and y direction.
x_extentThis argument is not used, but kept for compatibility with flow classes.
max_block_sizeThe maximum block size to use on GPU.
qy_minThe minimum value of the y integration range.
qx_maxThe maximum value of the x integration range.
qy_maxThe maximum value of the y integration range.

◆ Integrator2DCartesianGPU() [3/3]

template<typename NT , typename KERNEL >
DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::Integrator2DCartesianGPU ( const Integrator2DCartesianGPU< NT, KERNEL > & other)
inline

Copy a Integrator2DCartesianGPU object.

Parameters
otherThe other Integrator2DCartesianGPU object to copy.

Member Function Documentation

◆ get()

template<typename NT , typename KERNEL >
template<typename... T>
NT DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::get ( const ctype k,
const T &... t ) const
inline

Get the result of the integration.

Parameters
kThe current RG scale.
tThe remaining arguments of the kernel.
Returns
The result of the integration.

◆ request()

template<typename NT , typename KERNEL >
template<typename... T>
std::future< NT > DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::request ( const ctype k,
const T &... t ) const
inline

Get the result of the integration asynchronously.

Parameters
kThe current RG scale.
tThe remaining arguments of the kernel.
Returns
An std::future<NT> which returns the result of the integration.

◆ set_qx_max()

template<typename NT , typename KERNEL >
void DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::set_qx_max ( const ctype qx_max)
inline

Set the maximum value of the qx integration range.

◆ set_qx_min()

template<typename NT , typename KERNEL >
void DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::set_qx_min ( const ctype qx_min)
inline

Set the minimum value of the qx integration range.

◆ set_qy_max()

template<typename NT , typename KERNEL >
void DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::set_qy_max ( const ctype qy_max)
inline

Set the maximum value of the qy integration range.

◆ set_qy_min()

template<typename NT , typename KERNEL >
void DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::set_qy_min ( const ctype qy_min)
inline

Set the minimum value of the qy integration range.

Member Data Documentation

◆ block_sizes

template<typename NT , typename KERNEL >
std::array<uint, 2> DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::block_sizes
private

◆ cuda_stream_pool

template<typename NT , typename KERNEL >
const rmm::cuda_stream_pool DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::cuda_stream_pool
private

◆ device_data_size

template<typename NT , typename KERNEL >
const uint DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::device_data_size
private

◆ grid_sizes

template<typename NT , typename KERNEL >
const std::array<uint, 2> DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::grid_sizes
private

◆ num_blocks

template<typename NT , typename KERNEL >
dim3 DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::num_blocks
private

◆ pool

template<typename NT , typename KERNEL >
PoolMR DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::pool
mutableprivate

◆ ptr_x_quadrature_p

template<typename NT , typename KERNEL >
const ctype* DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::ptr_x_quadrature_p
private

◆ ptr_x_quadrature_w

template<typename NT , typename KERNEL >
const ctype* DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::ptr_x_quadrature_w
private

◆ ptr_y_quadrature_p

template<typename NT , typename KERNEL >
const ctype* DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::ptr_y_quadrature_p
private

◆ ptr_y_quadrature_w

template<typename NT , typename KERNEL >
const ctype* DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::ptr_y_quadrature_w
private

◆ qx_extent

template<typename NT , typename KERNEL >
ctype DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::qx_extent = 2 * M_PI
private

◆ qx_min

template<typename NT , typename KERNEL >
ctype DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::qx_min = -M_PI
private

◆ qy_extent

template<typename NT , typename KERNEL >
ctype DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::qy_extent = 2 * M_PI
private

◆ qy_min

template<typename NT , typename KERNEL >
ctype DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::qy_min = -M_PI
private

◆ threads_per_block

template<typename NT , typename KERNEL >
dim3 DiFfRG::Integrator2DCartesianGPU< NT, KERNEL >::threads_per_block
private

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