144 if (dataSrc_in != NULL && dataSrc_in == dataDst_in)
145 NAMD_bug(
"FFTCompute::init, only out-of-place FFTs supported");
147 int permutationDst = permutation;
152 if (dataSrc_in == NULL) {
158 if (dataSrcSize_in < getDataSizeRequired(permutation, pmeGrid,
jblock,
kblock))
159 NAMD_bug(
"FFTCompute::init, invalid dataSrcSize_in");
165 if (dataDst_in == NULL) {
171 if (dataDstSize_in < getDataSizeRequired(permutationDst, pmeGrid,
jblock,
kblock))
172 NAMD_bug(
"FFTCompute::init, invalid dataDstSize_in");
182 NAMD_bug(
"FFTCompute::init, error setting up data buffers");
185 if (pmePencilType == 3) {
188 NAMD_bug(
"FFTCompute::init, 3D FFT requires a single pencil");
189 int n[3] = {pmeGrid.
K1, pmeGrid.
K2, pmeGrid.
K3};
191 }
else if (pmePencilType == 1) {
192 int i0, i1, j0, j1, k0, k1;
194 int n[1] = {i1-i0+1};
195 int howmany = (j1-j0+1)*(k1-k0+1);
197 plan1DX(n, howmany, flags);
199 plan1DY(n, howmany, flags);
201 plan1DZ(n, howmany, flags);
203 NAMD_bug(
"FFTCompute::init, invalid permutation");
205 }
else if (pmePencilType == 2) {
207 int i0, i1, j0, j1, k0, k1;
209 int n[2] = {pmeGrid.
K1, pmeGrid.
K2};
210 int howmany = k1-k0+1;
211 plan2D(n, howmany, flags);
213 NAMD_bug(
"FFTCompute::init, invalid pmePencilType");
static void getPencilDim(const PmeGrid &pmeGrid, const int permutation, const int jblock, const int kblock, int &i0, int &i1, int &j0, int &j1, int &k0, int &k1)
void NAMD_bug(const char *err_msg)