ls1-MarDyn
ls1-MarDyn molecular dynamics code
FFTFactory.h
1/*
2 * FFTFactory.h
3 *
4 * Created on: Feb 05, 2016
5 * Author: gallardjm
6 */
7#ifndef FFTFACTORY_H_
8#define FFTFACTORY_H_
9
10#include "bhfmm/fft/FFTSettings.h"
11#include "bhfmm/fft/FFTAccelerationAPI.h"
12#include "bhfmm/fft/FFTAccelerationImplementations/FFTAcceleration_matrices_optFFT.h"
13#include "bhfmm/fft/FFTAccelerationImplementations/FFTAcceleration_matrices_fftw.h"
14#include "bhfmm/fft/FFTAccelerationImplementations/FFTAcceleration_2wayM2L_fftw.h"
15#include "bhfmm/fft/FFTAccelerationImplementations/FFTAcceleration_2wayM2L_optFFT.h"
16#include "bhfmm/fft/FFTAccelerationImplementations/block/FFTAcceleration_blocks_fftw.h"
17#include "bhfmm/fft/FFTAccelerationImplementations/block/FFTAcceleration_blocks_optFFT.h"
18#include "bhfmm/fft/FFTAccelerationImplementations/block/FFTAcceleration_scalBlocks_v0.h"
19#include "bhfmm/fft/FFTAccelerationImplementations/block/FFTAcceleration_scalBlocks_optFFT.h"
20#include "bhfmm/fft/TransferFunctionManagerAPI.h"
21#include "bhfmm/fft/transferFunctionManager/TransferFunctionManager.h"
22#include "bhfmm/fft/transferFunctionManager/TransferFunctionManager_UniformGrid.h"
23#include <stdexcept>
24
30
31public:
32
33 static FFTAccelerationAPI* getFFTAccelerationAPI(int order) {
34 if (FFTSettings::USE_BLOCK) {
35 if (FFTSettings::USE_FFTW) {
36 if (FFTSettings::USE_ADVBLOCK)
37 throw std::invalid_argument(
38 "No advblock fftw implementation, use fft instead");
39 else
40 return new FFTAcceleration_blocks_fftw(order);
41 } else {
42 if (FFTSettings::USE_ADVBLOCK)
43 return new FFTAcceleration_scalBlocks_optFFT(order); //return new FFTAcceleration_scalBlocks_v0(order);
44 else
45 return new FFTAcceleration_blocks_optFFT(order);
46 }
47 } else {
48 if (FFTSettings::USE_2WAY_M2L) {
49 if (FFTSettings::USE_FFTW)
50 return new FFTAcceleration_2wayM2L_fftw(order);
51 else
52 return new FFTAcceleration_2wayM2L_optFFT(order);
53 } else {
54 if (FFTSettings::USE_FFTW)
55 return new FFTAcceleration_matrices_fftw(order);
56 else
57 return new FFTAcceleration_matrices_optFFT(order);
58 }
59 }
60 }
61
62 static TransferFunctionManagerAPI* getTransferFunctionManagerAPI(int ord,
63 FFTAccelerationAPI* FFTA) {
64 if (FFTSettings::USE_TFMANAGER_UNIFORMGRID)
65 return new TransferFunctionManager_UniformGrid(ord, FFTA,
66 FFTSettings::TFMANAGER_VERBOSE);
67 else
68 return new TransferFunctionManager(ord, FFTA,
69 FFTSettings::TFMANAGER_VERBOSE);
70 }
71
72};
73
74#endif
Definition: FFTAccelerationAPI.h:22
Definition: FFTAcceleration_2wayM2L_fftw.h:21
Definition: FFTAcceleration_2wayM2L_optFFT.h:22
Definition: FFTAcceleration_blocks_fftw.h:21
Definition: FFTAcceleration_blocks_optFFT.h:22
Definition: FFTAcceleration_matrices_fftw.h:20
Definition: FFTAcceleration_matrices_optFFT.h:20
Definition: FFTAcceleration_scalBlocks_optFFT.h:19
Definition: FFTFactory.h:29
Definition: TransferFunctionManagerAPI.h:11
Definition: TransferFunctionManager_UniformGrid.h:25
Definition: TransferFunctionManager.h:26