ls1-MarDyn
ls1-MarDyn molecular dynamics code
Public Member Functions | Protected Attributes | List of all members
FFTAccelerationAPI Class Referenceabstract

#include <FFTAccelerationAPI.h>

Inheritance diagram for FFTAccelerationAPI:
FFTAccelerationAPI_2Way FFTAcceleration_matrices FFTAcceleration_scalBlocks_v0 FFTAccelerationAPI_full FFTAcceleration_2wayM2L FFTAcceleration_matrices_fftw FFTAcceleration_matrices_optFFT FFTAcceleration_blocks FFTAcceleration_scalBlocks_optFFT FFTAcceleration_2wayM2L_fftw FFTAcceleration_2wayM2L_optFFT FFTAcceleration_blocks_fftw FFTAcceleration_blocks_optFFT

Public Member Functions

virtual ~FFTAccelerationAPI ()
 destructor, child class will be upcasted, virtual destructor required to call the right child class destructor
 
virtual void FFT_initialize_Source (FFTAccelerableExpansion &Expansion, double radius)=0
 
virtual void FFT_initialize_Target (FFTAccelerableExpansion &Expansion)=0
 
virtual void FFT_initialize_TransferFunction (FFTAccelerableExpansion &Expansion)=0
 
virtual void FFT_M2L (FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction)=0
 
virtual void FFT_M2L_vec (FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction)=0
 
virtual void FFT_finalize_Target (FFTAccelerableExpansion &Expansion, double radius)=0
 

Protected Attributes

int _p
 
int _fft_nx
 order of the expansions (start at 0 so usually order+1)
 
int _fft_ny
 number of line of the FFT matrices (or similar)
 

Detailed Description

Abstract class defining the interface of a class handling the M2L's FFT acceleration

Various implementations will offer various schemes and can be choosed at runtime using a factory and strategy pattern (see FFTSetting and FFTFactory)

Member Function Documentation

◆ FFT_finalize_Target()

virtual void FFTAccelerationAPI::FFT_finalize_Target ( FFTAccelerableExpansion Expansion,
double  radius 
)
pure virtual

Finalize a Target expansion by adding the result of the M2L stored in Fourier space to the expansion values.

Include the rescaling using the radius parameter, should be the same as the one used by FFT_initialize_Source

Parameters
FFTAccelerableExpansion& Expansion
doubleradius

Implemented in FFTAcceleration_blocks_fftw, FFTAcceleration_blocks_optFFT, FFTAcceleration_scalBlocks_optFFT, FFTAcceleration_scalBlocks_v0, FFTAcceleration_2wayM2L_fftw, FFTAcceleration_2wayM2L_optFFT, FFTAcceleration_matrices_fftw, and FFTAcceleration_matrices_optFFT.

◆ FFT_initialize_Source()

virtual void FFTAccelerationAPI::FFT_initialize_Source ( FFTAccelerableExpansion Expansion,
double  radius 
)
pure virtual

Initialize a source expansion's FFTDatacontainer, including rescaling using the radius parameter (see doc/Rescalling)

Parameters
FFTAccelerableExpansion& Expansion
doubleradius

Implemented in FFTAcceleration_blocks_fftw, FFTAcceleration_blocks_optFFT, FFTAcceleration_scalBlocks_optFFT, FFTAcceleration_scalBlocks_v0, FFTAcceleration_2wayM2L_fftw, FFTAcceleration_2wayM2L_optFFT, FFTAcceleration_matrices_fftw, and FFTAcceleration_matrices_optFFT.

◆ FFT_initialize_Target()

virtual void FFTAccelerationAPI::FFT_initialize_Target ( FFTAccelerableExpansion Expansion)
pure virtual

Initialize a Target expansion's FFTDatacontainer (schould be to a full 0 FFTDatacontainer)

Parameters
FFTAccelerableExpansion& Expansion

Implemented in FFTAcceleration_blocks, FFTAcceleration_scalBlocks_optFFT, FFTAcceleration_scalBlocks_v0, FFTAcceleration_2wayM2L, and FFTAcceleration_matrices.

◆ FFT_initialize_TransferFunction()

virtual void FFTAccelerationAPI::FFT_initialize_TransferFunction ( FFTAccelerableExpansion Expansion)
pure virtual

Initialize a source expansion's FFTDatacontainer, all subsequent transformations (flip of the matrix or rescaling of scaling blocks for example) should be done here.

Parameters
FFTAccelerableExpansion& Expansion

Implemented in FFTAcceleration_blocks_fftw, FFTAcceleration_blocks_optFFT, FFTAcceleration_scalBlocks_optFFT, FFTAcceleration_scalBlocks_v0, FFTAcceleration_2wayM2L_fftw, FFTAcceleration_2wayM2L_optFFT, FFTAcceleration_matrices_fftw, and FFTAcceleration_matrices_optFFT.

◆ FFT_M2L()

virtual void FFTAccelerationAPI::FFT_M2L ( FFTAccelerableExpansion Source,
FFTAccelerableExpansion Target,
FFTDataContainer TransferFunction 
)
pure virtual

M2L operator, performs the M2L in fourier space, usually an entrywise product (or more complexe scheme if needed, see blocks implementations)

All parameters needs to be initialized using the previous methods The TransferFunction should come from a TransferFunctionManager

Parameters
FFTAccelerableExpansion& Source
FFTAccelerableExpansion& Target
FFTDataContainer*TransferFunction

Implemented in FFTAcceleration_blocks, FFTAcceleration_scalBlocks_optFFT, FFTAcceleration_scalBlocks_v0, FFTAcceleration_2wayM2L, and FFTAcceleration_matrices.

◆ FFT_M2L_vec()

virtual void FFTAccelerationAPI::FFT_M2L_vec ( FFTAccelerableExpansion Source,
FFTAccelerableExpansion Target,
FFTDataContainer TransferFunction 
)
pure virtual

M2L operator, performs the M2L in fourier space, usually an entrywise product (or more complexe scheme if needed, see blocks implementations)

Uses vectorization of the loops

All parameters needs to be initialized using the previous methods The TransferFunction should come from a TransferFunctionManager

Parameters
FFTAccelerableExpansion& Source
FFTAccelerableExpansion& Target
FFTDataContainer*TransferFunction

Implemented in FFTAcceleration_blocks, FFTAcceleration_scalBlocks_optFFT, FFTAcceleration_scalBlocks_v0, FFTAcceleration_2wayM2L, and FFTAcceleration_matrices.


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