PSCF v1.1
FFT.cu
1/*
2* PSCF Package
3*
4* Copyright 2016 - 2022, The Regents of the University of Minnesota
5* Distributed under the terms of the GNU General Public License.
6*/
7
8#include "FFT.tpp"
9
10namespace Pscf {
11namespace Pspg {
12
13 using namespace Util;
14
15 // Forward transform, explicit specializations.
16 //use local mesh dimensions later
17 template<>
18 void FFT<1>::makePlans(RDField<1>& rField, RDFieldDft<1>& kField)
19 {
20#ifdef SINGLE_PRECISION
21 cufftPlan1d(&fPlan_, rField.capacity(), CUFFT_R2C, 1);
22 cufftPlan1d(&iPlan_, rField.capacity(), CUFFT_C2R, 1);
23#else
24 cufftPlan1d(&fPlan_, rField.capacity(), CUFFT_D2Z, 1);
25 cufftPlan1d(&iPlan_, rField.capacity(), CUFFT_Z2D, 1);
26#endif
27 }
28
29 template <>
30 void FFT<2>::makePlans(RDField<2>& rField, RDFieldDft<2>& kField)
31 {
32#ifdef SINGLE_PRECISION
33 cufftPlan2d(&fPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1], CUFFT_R2C);
34 cufftPlan2d(&iPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1], CUFFT_C2R);
35#else
36 cufftPlan2d(&fPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1], CUFFT_D2Z);
37 cufftPlan2d(&iPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1], CUFFT_Z2D);
38#endif
39
40 }
41
42 template <>
43 void FFT<3>::makePlans(RDField<3>& rField, RDFieldDft<3>& kField)
44 {
45#ifdef SINGLE_PRECISION
46 cufftPlan3d(&fPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1],
47 rField.meshDimensions()[2], CUFFT_R2C);
48 cufftPlan3d(&iPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1],
49 rField.meshDimensions()[2], CUFFT_C2R);
50#else
51 cufftPlan3d(&fPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1],
52 rField.meshDimensions()[2], CUFFT_D2Z);
53 cufftPlan3d(&iPlan_, rField.meshDimensions()[0], rField.meshDimensions()[1],
54 rField.meshDimensions()[2], CUFFT_Z2D);
55#endif
56 }
57
58 // Explicit instantiation of relevant class instances
59 template class FFT<1>;
60 template class FFT<2>;
61 template class FFT<3>;
62
63}
64}
C++ namespace for polymer self-consistent field theory (PSCF).
Utility classes for scientific computation.
Definition: accumulators.mod:1