OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
OPAL
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
FFT< SineTransform, Dim, T > Class Template Reference

#include <FFT.h>

Inheritance diagram for FFT< SineTransform, Dim, T >:
Inheritance graph
[legend]
Collaboration diagram for FFT< SineTransform, Dim, T >:
Collaboration graph
[legend]

Public Types

typedef FieldLayout< DimLayout_t
 
typedef BareField< T, DimRealField_t
 
typedef LField< T, DimRealLField_t
 
typedef std::complex< T > Complex_t
 
typedef BareField< Complex_t, DimComplexField_t
 
typedef LField< Complex_t, DimComplexLField_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< DimDomain_t
 
typedef FFTPACK< T > InternalFFT_t
 

Public Member Functions

 FFT (const Domain_t &rdomain, const Domain_t &cdomain, const bool transformTheseDims[Dim], const bool sineTransformDims[Dim], const bool &compressTemps=false)
 
 FFT (const Domain_t &rdomain, const Domain_t &cdomain, const bool sineTransformDims[Dim], const bool &compressTemps=false)
 
 FFT (const Domain_t &rdomain, const bool sineTransformDims[Dim], const bool &compressTemps=false)
 
 FFT (const Domain_t &rdomain, const bool &compressTemps=false)
 
 ~FFT (void)
 
void transform (int direction, RealField_t &f, ComplexField_t &g, const bool &constInput=false)
 
void transform (const char *directionName, RealField_t &f, ComplexField_t &g, const bool &constInput=false)
 
void transform (int direction, ComplexField_t &f, RealField_t &g, const bool &constInput=false)
 
void transform (const char *directionName, ComplexField_t &f, RealField_t &g, const bool &constInput=false)
 
void transform (int direction, RealField_t &f, RealField_t &g, const bool &constInput=false)
 
void transform (const char *directionName, RealField_t &f, RealField_t &g, const bool &constInput=false)
 
void transform (int direction, RealField_t &f)
 
void transform (const char *directionName, RealField_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

bool sineTransformDims_m [Dim]
 
size_t numSineTransforms_m
 
Layout_t ** tempLayouts_m
 
Layout_t ** tempRLayouts_m
 
ComplexField_t ** tempFields_m
 
RealField_t ** tempRFields_m
 
const Domain_tcomplexDomain_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_tgetEngine (void)
 access the internal FFT Engine More...
 
Precision_tgetNormFact (void)
 get the FFT normalization factor More...
 
const Domain_tgetDomain (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< DimnullGC = GuardCellSizes<Dim>()
 null GuardCellSizes object for checking BareField arguments to transform More...
 

Detailed Description

template<size_t Dim, class T>
class FFT< SineTransform, Dim, T >

sine transform class

Definition at line 660 of file FFT.h.

Member Typedef Documentation

◆ Complex_t

template<size_t Dim, class T >
typedef std::complex<T> FFT< SineTransform, Dim, T >::Complex_t

Definition at line 668 of file FFT.h.

◆ ComplexField_t

template<size_t Dim, class T >
typedef BareField<Complex_t,Dim> FFT< SineTransform, Dim, T >::ComplexField_t

Definition at line 669 of file FFT.h.

◆ ComplexLField_t

template<size_t Dim, class T >
typedef LField<Complex_t,Dim> FFT< SineTransform, Dim, T >::ComplexLField_t

Definition at line 670 of file FFT.h.

◆ Domain_t

template<size_t Dim, class T >
typedef FFTBase<Dim,T>::Domain_t FFT< SineTransform, Dim, T >::Domain_t

Definition at line 671 of file FFT.h.

◆ Layout_t

template<size_t Dim, class T >
typedef FieldLayout<Dim> FFT< SineTransform, Dim, T >::Layout_t

Definition at line 665 of file FFT.h.

◆ RealField_t

template<size_t Dim, class T >
typedef BareField<T,Dim> FFT< SineTransform, Dim, T >::RealField_t

Definition at line 666 of file FFT.h.

◆ RealLField_t

template<size_t Dim, class T >
typedef LField<T,Dim> FFT< SineTransform, Dim, T >::RealLField_t

Definition at line 667 of file FFT.h.

Constructor & Destructor Documentation

◆ FFT() [1/4]

template<size_t Dim, class T >
FFT< SineTransform, Dim, T >::FFT ( const Domain_t rdomain,
const Domain_t cdomain,
const bool  transformTheseDims[Dim],
const bool  sineTransformDims[Dim],
const bool &  compressTemps = false 
)

Constructor for doing sine transform(s) followed by RC FFT Create a new FFT object with the given domains for input/output Fields Specify which dimensions to transform along. Also specify which of these are sine transforms Optional argument compress indicates whether or not to compress temporary Fields in between uses.

◆ FFT() [2/4]

template<size_t Dim, class T >
FFT< SineTransform, Dim, T >::FFT ( const Domain_t rdomain,
const Domain_t cdomain,
const bool  sineTransformDims[Dim],
const bool &  compressTemps = false 
)

Same as above, but transform all dims:

◆ FFT() [3/4]

template<size_t Dim, class T >
FFT< SineTransform, Dim, T >::FFT ( const Domain_t rdomain,
const bool  sineTransformDims[Dim],
const bool &  compressTemps = false 
)

Separate constructors for doing only sine transforms Create a new FFT object with the given domain for input/output Field Specify which dimensions to transform along. Optional argument compress indicates whether or not to compress temporary Fields in between uses.

◆ FFT() [4/4]

template<size_t Dim, class T >
FFT< SineTransform, Dim, T >::FFT ( const Domain_t rdomain,
const bool &  compressTemps = false 
)

Same as above, but transform all dims:

◆ ~FFT()

template<size_t Dim, class T >
FFT< SineTransform, Dim, T >::~FFT ( void  )

Definition at line 2127 of file FFT.hpp.

References FFTBase< Dim, T >::numTransformDims().

Here is the call graph for this function:

Member Function Documentation

◆ setup()

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::setup ( void  )
private

setup performs all the initializations necessary after the transform directions have been specified.

Definition at line 1973 of file FFT.hpp.

References FFTBase< Dim, T >::activeDimension(), FFTBase< Dim, T >::compressTemps(), Dim, FFTBase< Dim, T >::getDomain(), FFTBase< Dim, T >::numTransformDims(), PARALLEL, PAssert, PAssert_EQ, PAssert_LT, PInsist, SERIAL, FFTBase< Dim, T >::transformDim(), and FFTBase< Dim, T >::transVnodes().

Here is the call graph for this function:

◆ transform() [1/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( const char *  directionName,
ComplexField_t f,
RealField_t g,
const bool &  constInput = false 
)

◆ transform() [2/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( const char *  directionName,
RealField_t f 
)

◆ transform() [3/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( const char *  directionName,
RealField_t f,
ComplexField_t g,
const bool &  constInput = false 
)

◆ transform() [4/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( const char *  directionName,
RealField_t f,
RealField_t g,
const bool &  constInput = false 
)

◆ transform() [5/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( int  direction,
ComplexField_t f,
RealField_t g,
const bool &  constInput = false 
)

complex-to-real FFT, followed by sine transform(s) Same as above, but with input and output field types reversed.

◆ transform() [6/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( int  direction,
RealField_t f 
)

In-place version of real-to-real transform

◆ transform() [7/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( int  direction,
RealField_t f,
ComplexField_t g,
const bool &  constInput = false 
)

These transforms are for combinations of sine transforms and RC FFTs

Do the FFT: specify +1 or -1 to indicate forward or inverse transform, or specify the user-defined name string for the direction. Supply a second BareField to store the output. 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.

◆ transform() [8/8]

template<size_t Dim, class T >
void FFT< SineTransform, Dim, T >::transform ( int  direction,
RealField_t f,
RealField_t g,
const bool &  constInput = false 
)

These transforms are for doing sine transforms only sine transform: specify +1 or -1 to indicate forward or inverse transform, or specify the user-defined name string for the direction. Supply a second BareField to store the output. 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.

Member Data Documentation

◆ complexDomain_m

template<size_t Dim, class T >
const Domain_t* FFT< SineTransform, Dim, T >::complexDomain_m
private

domain of the resulting complex Field for real-to-complex transform

Definition at line 795 of file FFT.h.

◆ numSineTransforms_m

template<size_t Dim, class T >
size_t FFT< SineTransform, Dim, T >::numSineTransforms_m
private

number of sine transforms to perform

Definition at line 766 of file FFT.h.

◆ sineTransformDims_m

template<size_t Dim, class T >
bool FFT< SineTransform, Dim, T >::sineTransformDims_m[Dim]
private

which dimensions are sine transformed

Definition at line 761 of file FFT.h.

◆ tempFields_m

template<size_t Dim, class T >
ComplexField_t** FFT< SineTransform, Dim, T >::tempFields_m
private

The array of temporary complex Fields These use the corresponding tempLayouts.

Definition at line 785 of file FFT.h.

◆ tempLayouts_m

template<size_t Dim, class T >
Layout_t** FFT< SineTransform, Dim, T >::tempLayouts_m
private

layouts for temporary Fields: SERIAL along the zeroth dimension, with the axes are permuted so that the transform direction is first

layouts for the temporary complex Fields

Definition at line 775 of file FFT.h.

◆ tempRFields_m

template<size_t Dim, class T >
RealField_t** FFT< SineTransform, Dim, T >::tempRFields_m
private

The array of temporary real Fields These use the corresponding tempRLayouts.

Definition at line 790 of file FFT.h.

◆ tempRLayouts_m

template<size_t Dim, class T >
Layout_t** FFT< SineTransform, Dim, T >::tempRLayouts_m
private

layouts for the temporary real Fields

Definition at line 780 of file FFT.h.


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