ls1-MarDyn
ls1-MarDyn molecular dynamics code
FFTAcceleration_blocks.h
1/*
2 * FFTAcceleration_blocks.h
3 *
4 * Created on: Feb 12, 2016
5 * Author: gallardjm
6 */
7#ifndef FFTACC_BLOCK_H_
8#define FFTACC_BLOCK_H_
9
10#include "bhfmm/fft/FFTAccelerationImplementations/block/FFTDataContainer_blocks.h"
11#include "bhfmm/fft/FFTAccelerationAPI_extensions.h"
12#include "bhfmm/fft/FFTSettings_preprocessor.h"
13#include "bhfmm/fft/FFTSettings.h"
14
15/*
16 * Abstract class with common code for basic fft and fftw implementation
17 *
18 * Use FFTDataContainer_blocks as Data container (2 arrays of matrices)
19 */
21
22public:
23
24 //child class will be upcasted, virtual destructor required to call the right child class destructor
25 virtual ~~FFTAcceleration_blocks() {
26 }
27
29
30 void FFT_M2L(FFTAccelerableExpansion & Source,
32 FFTDataContainer* TransferFunction);
35 FFTDataContainer* TransferFunction);
36
37 //From FFTAcceleration_OrderReduction
40 FFTDataContainer* TransferFunction, int order);
41 void FFT_M2L_OrderReduction_vec(FFTAccelerableExpansion & Source,
43 FFTDataContainer* TransferFunction, int order);
44
45 //2way M2L, require _fft_nx = 2 * _p
50 FFTDataContainer* TransferFunction);
51 void FFT_M2L_2way_vec(FFTAccelerableExpansion & Source1,
55 FFTDataContainer* TransferFunction);
56
61 FFTDataContainer* TransferFunction, int order);
62 void FFT_M2L_2way_ORed_vec(FFTAccelerableExpansion & Source1,
66 FFTDataContainer* TransferFunction, int order);
67
68protected:
69 FFTDataContainer_blocks* getFFTData(FFTAccelerableExpansion & Expansion);
70
71 int _nbBlocks;
72 int _nbLinePerBlock; //number of usefull line per block
73
74 template<bool Vect, bool OrderRed>
75 void FFT_M2L_template(FFTAccelerableExpansion & Source,
77 FFTDataContainer* TransferFunction, int order);
78
79 template<bool Vect, bool OrderRed>
80 void FFT_M2L_2way_template(FFTAccelerableExpansion & Source1,
84 FFTDataContainer* TransferFunction, int order);
85
86};
87
88#endif
Definition: FFTAccelerableExpansion.h:21
API for OrderReduction scheme (extends 2way M2L)
Definition: FFTAccelerationAPI_extensions.h:43
Definition: FFTAcceleration_blocks.h:20
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_blocks.cpp:256
void FFT_M2L(FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction)
Definition: FFTAcceleration_blocks.cpp:101
void FFT_initialize_Target(FFTAccelerableExpansion &Expansion)
Definition: FFTAcceleration_blocks.cpp:25
void FFT_M2L_2way(FFTAccelerableExpansion &Source1, FFTAccelerableExpansion &Source2, FFTAccelerableExpansion &Target1, FFTAccelerableExpansion &Target2, FFTDataContainer *TransferFunction)
M2L using 2way scheme (see doc/2wayM2L)
Definition: FFTAcceleration_blocks.cpp:242
void FFT_M2L_OrderReduction(FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction, int order)
M2L using Order Reduction.
Definition: FFTAcceleration_blocks.cpp:111
void FFT_M2L_vec(FFTAccelerableExpansion &Source, FFTAccelerableExpansion &Target, FFTDataContainer *TransferFunction)
Definition: FFTAcceleration_blocks.cpp:106
Definition: FFTDataContainer_blocks.h:23
Definition: FFTDataContainer.h:14