OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
|
#include <FFT.h>
Public Types | |
typedef FieldLayout< Dim > | Layout_t |
typedef std::complex< T > | Complex_t |
typedef BareField< Complex_t, Dim > | ComplexField_t |
typedef LField< Complex_t, Dim > | ComplexLField_t |
typedef FFTBase< Dim, T >::Domain_t | Domain_t |
Public Types inherited from FFTBase< Dim, T > | |
enum | { dimensions = Dim } |
enum | FFT_e { ccFFT , rcFFT , sineFFT , cosineFFT } |
typedef T | Precision_t |
typedef NDIndex< Dim > | Domain_t |
typedef FFTPACK< T > | InternalFFT_t |
Public Member Functions | |
FFT (const Domain_t &cdomain, const bool transformTheseDims[Dim], const bool &compressTemps=false) | |
FFT (const Domain_t &cdomain, const bool &compressTemps=false) | |
~FFT (void) | |
void | transform (int direction, ComplexField_t &f, ComplexField_t &g, const bool &constInput=false) |
void | transform (const char *directionName, ComplexField_t &f, ComplexField_t &g, const bool &constInput=false) |
void | transform (int direction, ComplexField_t &f) |
void | transform (const char *directionName, ComplexField_t &f) |
Public Member Functions inherited from FFTBase< Dim, T > | |
FFTBase () | |
FFTBase (FFT_e transform, const Domain_t &domain, const bool transformTheseDims[Dim], bool compressTemps) | |
FFTBase (FFT_e transform, const Domain_t &domain, bool compressTemps) | |
virtual | ~FFTBase (void) |
void | write (std::ostream &out) const |
void | setDirectionName (int direction, const char *directionName) |
void | setNormFact (Precision_t nf) |
int | transVnodes () const |
Private Member Functions | |
void | setup (void) |
Private Attributes | |
Layout_t ** | tempLayouts_m |
ComplexField_t ** | tempFields_m |
Additional Inherited Members | |
Protected Member Functions inherited from FFTBase< Dim, T > | |
int | getDirection (const char *directionName) const |
translate direction name string into dimension number More... | |
bool | transformDim (unsigned d) const |
query whether this dimension is to be transformed More... | |
unsigned | numTransformDims (void) const |
query number of transform dimensions More... | |
unsigned | activeDimension (unsigned d) const |
get dimension number from list of transformed dimensions More... | |
InternalFFT_t & | getEngine (void) |
access the internal FFT Engine More... | |
Precision_t & | getNormFact (void) |
get the FFT normalization factor More... | |
const Domain_t & | getDomain (void) const |
get our domain More... | |
bool | checkDomain (const Domain_t &dom1, const Domain_t &dom2) const |
compare indexes of two domains More... | |
bool | compressTemps (void) const |
do we compress temps? More... | |
Static Protected Attributes inherited from FFTBase< Dim, T > | |
static GuardCellSizes< Dim > | nullGC = GuardCellSizes<Dim>() |
null GuardCellSizes object for checking BareField arguments to transform More... | |
complex-to-complex FFT class
typedef std::complex<T> FFT< CCTransform, Dim, T >::Complex_t |
typedef FFTBase<Dim,T>::Domain_t FFT< CCTransform, Dim, T >::Domain_t |
typedef FieldLayout<Dim> FFT< CCTransform, Dim, T >::Layout_t |
FFT< CCTransform, Dim, T >::FFT | ( | const Domain_t & | cdomain, |
const bool | transformTheseDims[Dim], | ||
const bool & | compressTemps = false |
||
) |
|
inline |
Create a new FFT object of type CCTransform, with a given domain. Default case of transforming along all dimensions. Note this was formerly in the .cpp file, but the IBM linker could not find it!
Definition at line 78 of file FFT.h.
References Dim, FFTBase< Dim, T >::getEngine(), FFTBase< Dim, T >::getNormFact(), FFTPACK< T >::setup(), and Attrib::Legacy::Distribution::T.
FFT< CCTransform, Dim, T >::~FFT | ( | void | ) |
Definition at line 117 of file FFT.hpp.
References FFTBase< Dim, T >::numTransformDims().
|
private |
setup performs all the initializations necessary after the transform directions have been specified.
Definition at line 69 of file FFT.hpp.
References FFTBase< Dim, T >::activeDimension(), FFTBase< Dim, T >::compressTemps(), Dim, FFTBase< Dim, T >::getDomain(), FFTBase< Dim, T >::numTransformDims(), PARALLEL, SERIAL, and FFTBase< Dim, T >::transVnodes().
|
inline |
Definition at line 125 of file FFT.h.
References BareField< T, Dim >::begin_if(), FFTPACK< T >::callFFT(), FFTBase< Dim, T >::checkDomain(), FFTBase< Dim, T >::compressTemps(), Dim, BareField< T, Dim >::end_if(), FFTBase< Dim, T >::getDirection(), FieldLayout< Dim >::getDistribution(), FieldLayout< Dim >::getDomain(), FFTBase< Dim, T >::getDomain(), FFTBase< Dim, T >::getEngine(), BareField< T, Dim >::getGC(), BareField< T, Dim >::getLayout(), FFTBase< Dim, T >::getNormFact(), LField< T, Dim >::getP(), FFTBase< Dim, T >::numTransformDims(), PAssert_EQ, SERIAL, LField< T, Dim >::size(), and LField< T, Dim >::Uncompress().
void FFT< CCTransform, Dim, T >::transform | ( | const char * | directionName, |
ComplexField_t & | f, | ||
ComplexField_t & | g, | ||
const bool & | constInput = false |
||
) |
invoke using string for direction name
void FFT< CCTransform, Dim, T >::transform | ( | int | direction, |
ComplexField_t & | f | ||
) |
overloaded versions which perform the FFT "in place"
void FFT< CCTransform, Dim, T >::transform | ( | int | direction, |
ComplexField_t & | f, | ||
ComplexField_t & | g, | ||
const bool & | constInput = false |
||
) |
Do the FFT: specify +1 or -1 to indicate forward or inverse transform, or specify the user-defined name string for the direction. User provides separate input and output fields optional argument constInput indicates whether or not to treat the input Field argument f as const. If not, we can use it as a temporary in order to avoid an additional data transpose.
|
private |
|
private |
How the temporary field's are laid out; these are computed from the input Field's domain. This will be allocated as an array of FieldLayouts with nTransformDims elements. Each is SERIAL along the zeroth dimension and the axes are permuted so that the transform direction is first