OPALX (Object Oriented Parallel Accelerator Library for Exascale) MINIorX
OPALX
ippl::FFT< CCTransform, ComplexField > Class Template Reference

complex-to-complex FFT class More...

#include <FFT.h>

Inheritance diagram for ippl::FFT< CCTransform, ComplexField >:
Inheritance graph
Collaboration diagram for ippl::FFT< CCTransform, ComplexField >:
Collaboration graph

Public Types

using Complex_t = typename ComplexField::value_type
 
using heffteBackend = Backend
 
using workspace_t = typename FFT< heffteBackend >::template buffer_container< BufferType >
 
using Layout_t = FieldLayout< Dim >
 

Public Member Functions

void warmup (ComplexField &f)
 
void transform (TransformDirection direction, ComplexField &f)
 

Protected Types

using temp_view_type = typename Kokkos::View< typename FieldType::view_type::data_type, Kokkos::LayoutLeft, typename FieldType::memory_space >::uniform_type
 

Protected Member Functions

void domainToBounds (const NDIndex< Dim > &domain, std::array< long long, 3 > &low, std::array< long long, 3 > &high)
 
void setup (const heffte::box3d< long long > &inbox, const heffte::box3d< long long > &outbox, const ParameterList &params)
 setup performs the initialization necessary. More...
 

Protected Attributes

std::shared_ptr< heffte::fft3d< heffteBackend, long long > > heffte_m
 
workspace_t workspace_m
 
temp_view_type< ComplexField > tempField
 

Private Types

using Base = FFTBase< ComplexField, heffte::fft3d, typename detail::HeffteBackendType< typename ComplexField ::memory_space >::backend >
 

Static Private Attributes

static constexpr unsigned Dim = ComplexField::dim
 

Detailed Description

template<typename ComplexField>
class ippl::FFT< CCTransform, ComplexField >

complex-to-complex FFT class

Definition at line 191 of file FFT.h.

Member Typedef Documentation

◆ Base

template<typename ComplexField >
using ippl::FFT< CCTransform, ComplexField >::Base = FFTBase< ComplexField , heffte::fft3d, typename detail::HeffteBackendType<typename ComplexField ::memory_space>:: backend >
private

Definition at line 193 of file FFT.h.

◆ Complex_t

template<typename ComplexField >
using ippl::FFT< CCTransform, ComplexField >::Complex_t = typename ComplexField::value_type

Definition at line 196 of file FFT.h.

◆ heffteBackend

template<typename ComplexField >
using ippl::FFTBase< Field, FFT, Backend, BufferType >::heffteBackend = Backend

Definition at line 148 of file FFT.h.

◆ Layout_t

template<typename ComplexField >
using ippl::FFTBase< Field, FFT, Backend, BufferType >::Layout_t = FieldLayout<Dim>

Definition at line 150 of file FFT.h.

◆ temp_view_type

using ippl::FFTBase< ComplexField , heffte::fft3d , detail::HeffteBackendType< ComplexField ::memory_space >::backend , typename Field::value_type >::temp_view_type = typename Kokkos::View<typename FieldType::view_type::data_type, Kokkos::LayoutLeft, typename FieldType::memory_space>::uniform_type
protectedinherited

Definition at line 167 of file FFT.h.

◆ workspace_t

template<typename ComplexField >
using ippl::FFTBase< Field, FFT, Backend, BufferType >::workspace_t = typename FFT<heffteBackend>::template buffer_container<BufferType>

Definition at line 149 of file FFT.h.

Member Function Documentation

◆ domainToBounds()

void ippl::FFTBase< ComplexField , heffte::fft3d , detail::HeffteBackendType< ComplexField ::memory_space >::backend , T >::domainToBounds ( const NDIndex< Dim > &  domain,
std::array< long long, 3 > &  low,
std::array< long long, 3 > &  high 
)
protectedinherited

Static cast to detail::long long (uint64_t) is necessary, as heffte::box3d requires it like that.

Definition at line 158 of file FFT.hpp.

◆ setup()

void ippl::FFTBase< ComplexField , heffte::fft3d , detail::HeffteBackendType< ComplexField ::memory_space >::backend , T >::setup ( const heffte::box3d< long long > &  inbox,
const heffte::box3d< long long > &  outbox,
const ParameterList params 
)
protectedinherited

setup performs the initialization necessary.

Definition at line 160 of file FFT.hpp.

◆ transform()

template<typename ComplexField >
void ippl::FFT< CCTransform, ComplexField >::transform ( TransformDirection  direction,
ComplexField &  f 
)

Perform in-place FFT

Parameters
directionForward or backward transformation
fField whose transformation to compute (and overwrite)

This copy to a temporary Kokkos view is needed because of following reasons: 1) heffte wants the input and output fields without ghost layers 2) heffte accepts data in layout left (by default) even though this can be changed during heffte box creation

Definition at line 118 of file FFT.hpp.

References ippl::apply(), ippl::BACKWARD, Dim, ippl::FORWARD, ippl::getRangePolicy(), ippl::parallel_for(), and ippl::detail::shrinkView().

Here is the call graph for this function:

◆ warmup()

template<typename ComplexField >
void ippl::FFT< CCTransform, ComplexField >::warmup ( ComplexField &  f)

Warmup the FFT object by forward & backward FFT on an empty field

Parameters
fField whose transformation to compute (and overwrite)

Definition at line 112 of file FFT.hpp.

References ippl::BACKWARD, and ippl::FORWARD.

Member Data Documentation

◆ Dim

template<typename ComplexField >
constexpr unsigned ippl::FFT< CCTransform, ComplexField >::Dim = ComplexField::dim
staticconstexprprivate

Definition at line 192 of file FFT.h.

◆ heffte_m

std::shared_ptr<heffte::fft3d <heffteBackend, long long> > ippl::FFTBase< ComplexField , heffte::fft3d , detail::HeffteBackendType< ComplexField ::memory_space >::backend , typename Field::value_type >::heffte_m
protectedinherited

Definition at line 163 of file FFT.h.

◆ tempField

temp_view_type<ComplexField > ippl::FFTBase< ComplexField , heffte::fft3d , detail::HeffteBackendType< ComplexField ::memory_space >::backend , typename Field::value_type >::tempField
protectedinherited

Definition at line 170 of file FFT.h.

◆ workspace_m

workspace_t ippl::FFTBase< ComplexField , heffte::fft3d , detail::HeffteBackendType< ComplexField ::memory_space >::backend , typename Field::value_type >::workspace_m
protectedinherited

Definition at line 164 of file FFT.h.


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