|
OPAL (Object Oriented Parallel Accelerator Library) 2024.2
OPAL
|
complex-to-complex FFT class More...
#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 |
| enum | { dimensions = Dim } |
| enum | FFT_e { ccFFT , rcFFT , sineFFT , cosineFFT } |
| typedef T | Precision_t |
| typedef FFTPACK< T > | InternalFFT_t |
Public Member Functions | |
| FFT (const Domain_t &cdomain, const bool transformTheseDims[Dim], const bool &compressTemps=false) | |
| Create a new FFT object with the given domain for the input Field. More... | |
| FFT (const Domain_t &cdomain, const bool &compressTemps=false) | |
| Create a new FFT object of type CCTransform, with a given domain. More... | |
| ~FFT (void) | |
| void | 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. More... | |
| void | transform (const char *directionName, ComplexField_t &f, ComplexField_t &g, const bool &constInput=false) |
| invoke using string for direction name More... | |
| void | transform (int direction, ComplexField_t &f) |
| overloaded versions which perform the FFT "in place" More... | |
| void | transform (const char *directionName, ComplexField_t &f) |
| void | write (std::ostream &out) const |
| I/O for FFT object. More... | |
| void | setDirectionName (int direction, const char *directionName) |
| Allow the user to name the transform directions, for code clarity. More... | |
| void | setNormFact (Precision_t nf) |
| Set the FFT normalization factor (to something other than the default) More... | |
| int | transVnodes () const |
| Utility to determine the number of vnodes to use in temporary transpose fields; this is either -1, or a limited number set on the command line. More... | |
Protected Member Functions | |
| 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 | |
| static GuardCellSizes< Dim > | nullGC = GuardCellSizes<Dim>() |
| ! These members are used by the derived FFT classes More... | |
Private Member Functions | |
| void | setup (void) |
| setup performs all the initializations necessary after the transform directions have been specified. More... | |
Private Attributes | |
| Layout_t ** | tempLayouts_m |
| How the temporary field's are laid out; these are computed from the input Field's domain. More... | |
| ComplexField_t ** | tempFields_m |
| The array of temporary fields, one for each transform direction These use the corresponding tempLayouts. More... | |
| std::map< const char *, int > | directions_m |
| Stores user-defined names for FFT directions: More... | |
| FFT_e | transformType_m |
| Indicates which type of transform we do. More... | |
| bool | transformDims_m [Dim] |
| Indicates which dimensions are transformed. More... | |
| unsigned | nTransformDims_m |
| Stores the number of dims to be transformed. More... | |
| unsigned * | activeDims_m |
| Stores the numbers of these dims (0,1,2). More... | |
| InternalFFT_t | FFTEngine_m |
| Internal FFT object for performing serial FFTs. More... | |
| Precision_t | normFact_m |
| Normalization factor: More... | |
| Domain_t | Domain_m |
| Domain of the input field, mainly used to check axis sizes and ordering, former const Domain_t& Domain_m;. More... | |
| bool | compressTempFields_m |
| Switch to turn on/off compression of intermediate Fields (tempFields) as algorithm is finished with them. 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 |
|
inherited |
|
inherited |
| 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().

|
inlineprotectedinherited |
get dimension number from list of transformed dimensions
| d |
Definition at line 252 of file FFTBase.h.
References PAssert_LT.
Referenced by setup(), FFT< RCTransform, Dim, T >::setup(), and FFT< SineTransform, Dim, T >::setup().
|
inlineprotectedinherited |
compare indexes of two domains
helper function for comparing domains
| Dim | |
| dom1 | |
| Dim | |
| dom2 |
Definition at line 269 of file FFTBase.h.
References Dim.
Referenced by transform().
|
inlineprotectedinherited |
do we compress temps?
Definition at line 166 of file FFTBase.h.
References FFTBase< Dim, T >::compressTempFields_m.
Referenced by setup(), FFT< CCTransform, 1U, T >::setup(), FFT< RCTransform, 1U, T >::setup(), FFT< SineTransform, Dim, T >::setup(), FFT< SineTransform, 1U, T >::setup(), and transform().
|
inlineprotectedinherited |
translate direction name string into dimension number
Translate direction name string into dimension number.
| directionName |
Definition at line 225 of file FFTBase.h.
Referenced by transform().
|
inlineprotectedinherited |
get our domain
Definition at line 160 of file FFTBase.h.
References FFTBase< Dim, T >::Domain_m.
Referenced by setup(), FFT< CCTransform, 1U, T >::setup(), FFT< RCTransform, Dim, T >::setup(), FFT< RCTransform, 1U, T >::setup(), FFT< SineTransform, Dim, T >::setup(), FFT< SineTransform, 1U, T >::setup(), and transform().
|
inlineprotectedinherited |
access the internal FFT Engine
Definition at line 154 of file FFTBase.h.
References FFTBase< Dim, T >::FFTEngine_m.
Referenced by FFT(), and transform().
|
inlineprotectedinherited |
get the FFT normalization factor
Definition at line 157 of file FFTBase.h.
References FFTBase< Dim, T >::normFact_m.
Referenced by FFT(), and transform().
|
inlineprotectedinherited |
query number of transform dimensions
Definition at line 148 of file FFTBase.h.
References FFTBase< Dim, T >::nTransformDims_m.
Referenced by setup(), FFT< RCTransform, Dim, T >::setup(), FFT< SineTransform, Dim, T >::setup(), transform(), ~FFT(), FFT< RCTransform, Dim, T >::~FFT(), and FFT< SineTransform, Dim, T >::~FFT().
|
inlineinherited |
Allow the user to name the transform directions, for code clarity.
| direction | |
| directionName |
Typical values might be "x_to_k", "k_to_x", "t_to_omega", "omega_to_t"
Definition at line 209 of file FFTBase.h.
References abs(), and PAssert_EQ.

|
inlineinherited |
Set the FFT normalization factor (to something other than the default)
| nf |
Definition at line 117 of file FFTBase.h.
References FFTBase< Dim, T >::normFact_m.
|
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.
|
inlineprotectedinherited |
query whether this dimension is to be transformed
| d |
Definition at line 238 of file FFTBase.h.
References Dim, and PAssert_LT.
Referenced by FFT< SineTransform, Dim, T >::setup().
Utility to determine the number of vnodes to use in temporary transpose fields; this is either -1, or a limited number set on the command line.
Definition at line 125 of file FFTBase.h.
References IpplInfo::getNodes(), and IpplInfo::maxFFTNodes().
Referenced by setup(), FFT< RCTransform, Dim, T >::setup(), and FFT< SineTransform, Dim, T >::setup().

|
inherited |
I/O for FFT object.
| out |
Definition at line 82 of file FFTBase.hpp.
References Dim, endl(), and getTransformType().
Referenced by operator<<().

Stores the numbers of these dims (0,1,2).
Definition at line 176 of file FFTBase.h.
Referenced by FFTBase< Dim, T >::~FFTBase().
Switch to turn on/off compression of intermediate Fields (tempFields) as algorithm is finished with them.
Definition at line 188 of file FFTBase.h.
Referenced by FFTBase< Dim, T >::compressTemps().
Domain of the input field, mainly used to check axis sizes and ordering, former const Domain_t& Domain_m;.
Definition at line 185 of file FFTBase.h.
Referenced by FFTBase< Dim, T >::getDomain().
|
privateinherited |
Internal FFT object for performing serial FFTs.
Definition at line 179 of file FFTBase.h.
Referenced by FFTBase< Dim, T >::getEngine().
|
privateinherited |
Normalization factor:
Definition at line 182 of file FFTBase.h.
Referenced by FFTBase< Dim, T >::getNormFact(), and FFTBase< Dim, T >::setNormFact().
Stores the number of dims to be transformed.
Definition at line 175 of file FFTBase.h.
Referenced by FFTBase< Dim, T >::numTransformDims().
|
staticprotectedinherited |
! These members are used by the derived FFT classes
null GuardCellSizes object for checking BareField arguments to transform
|
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