ls1-MarDyn
ls1-MarDyn molecular dynamics code
FFTAcceleration_scalBlocks_optFFT.h
1/*
2 * FFTAcceleration_scalBlocks_optFFT.h
3 *
4 * Created on: Mar 16, 2016
5 * Author: gallardjm
6 */
7#ifndef FFTACC_SCALBLOCKS_OPTFFT_H_
8#define FFTACC_SCALBLOCKS_OPTFFT_H_
9
10#include "bhfmm/fft/FFTAccelerationImplementations/block/FFTDataContainer_scalBlocks.h"
11#include "bhfmm/fft/FFTAccelerationAPI_extensions.h"
12#include "bhfmm/fft/FFTSettings_preprocessor.h"
13#include "bhfmm/fft/FFTSettings.h"
14#include "bhfmm/fft/tools/optimizedFFT/optFFT_API_Factory.h"
15
16/*
17 * Use FFTDataContainer_scalBlocks as Data container (2 arrays of matrices)
18 */
20
21public:
22
25 delete _optFFT_API;
26 delete[] _blockSize;
27 for (int i = 0; i < mardyn_get_max_threads(); ++i) {
28 delete_matrix(_Re_tmp[i]);
29 delete_matrix(_Im_tmp[i]);
30 }
31 }
32
35 double radius);
37
39 double radius);
40
41 void FFT_M2L(FFTAccelerableExpansion & Source,
43 FFTDataContainer* TransferFunction);
46 FFTDataContainer* TransferFunction);
47
48 //From FFTAcceleration_full
51 FFTDataContainer* TransferFunction, int order);
52 void FFT_M2L_OrderReduction_vec(FFTAccelerableExpansion & Source,
54 FFTDataContainer* TransferFunction, int order);
55
60 FFTDataContainer* TransferFunction);
61 void FFT_M2L_2way_vec(FFTAccelerableExpansion & Source1,
65 FFTDataContainer* TransferFunction);
66
71 FFTDataContainer* TransferFunction, int order);
72 void FFT_M2L_2way_ORed_vec(FFTAccelerableExpansion & Source1,
76 FFTDataContainer* TransferFunction, int order);
77
78protected:
80 FFTAccelerableExpansion & Expansion);
81 FFTDataContainer_scalBlocks* getFFTData_scal(
82 FFTAccelerableExpansion & Expansion);
83 optFFT_API* _optFFT_API;
84
85 int _nbBlocks;
86 int _nbLinePerBlock; //number of usefull line per block
87 int* _blockSize; //fft_ny size of each block
88 //tmp matrices for FFT for each thread
89 FFT_precision*** _Re_tmp;
90 FFT_precision*** _Im_tmp;
91
92 template<bool Vect, bool OrderRed>
93 void FFT_M2L_template(FFTAccelerableExpansion & Source,
95 FFTDataContainer* TransferFunction, int order);
96 template<bool Vect, bool OrderRed>
97 void FFT_M2L_2way_template(FFTAccelerableExpansion & Source1,
100 FFTAccelerableExpansion & Target2,
101 FFTDataContainer* TransferFunction, int order);
102
103};
104
105#endif
Definition: FFTAccelerableExpansion.h:21
API for OrderReduction scheme (extends 2way M2L)
Definition: FFTAccelerationAPI_extensions.h:43
Definition: FFTAcceleration_scalBlocks_optFFT.h:19
void FFT_initialize_Target(FFTAccelerableExpansion &Expansion)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:79
void FFT_initialize_Source(FFTAccelerableExpansion &Expansion, double radius)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:87
void FFT_M2L_vec(FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:291
void FFT_initialize_TransferFunction(FFTAccelerableExpansion &Expansion)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:765
void FFT_M2L_2way_ORed(FFTAccelerableExpansion &Source1, FFTAccelerableExpansion &Source2, FFTAccelerableExpansion &Target1, FFTAccelerableExpansion &Target2, FFTDataContainer *TransferFunction, int order)
M2L using both Order Reduction and 2way.
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:555
void FFT_finalize_Target(FFTAccelerableExpansion &Expansion, double radius)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:129
void FFT_M2L_2way(FFTAccelerableExpansion &Source1, FFTAccelerableExpansion &Source2, FFTAccelerableExpansion &Target1, FFTAccelerableExpansion &Target2, FFTDataContainer *TransferFunction)
M2L using 2way scheme (see doc/2wayM2L)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:539
void FFT_M2L(FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction)
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:285
void FFT_M2L_OrderReduction(FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction, int order)
M2L using Order Reduction.
Definition: FFTAcceleration_scalBlocks_optFFT.cpp:297
Definition: FFTDataContainer_scalBlocks.h:23
Definition: FFTDataContainer.h:14
Definition: optFFT_API.h:18