P3DFFT stands for Parallel Three-Dimensional Fast Fourier Transforms. It is a library for large-scale computer simulations on parallel platforms. It implements 3D FFT and related algorithms such as Chebyshev transform (an important class of algorithm for simulations in a wide range of fields). P3DFFT uses 2D, or pencil, decomposition. For more information:
Thank you for dealing with the pos0 bug! Sorry to raise this point again, but it seems that pos0 = (x-1)*jjsize is not always the right value in that part of the code, but pos0 = 0 seems correct. The FFT was correct before the bug fix if the compiler initialized integers with zeros, I've been using it for years like that. Also it worked when I set pos0 = 0 and compiled with -finit-integer=10000000. I don't know why, but the new bug fix makes the FFT fail in those cases when it worked before (like nx=128 ny=128 nz=192, mpidims= 1 24).
My config string is as follows:
./configure --prefix=$PWD --enable-gnu --enable-fftw --with-fftw=${FFT_ROOT} --enable-measure --enable-stride1 LDFLAGS="-lm"
Besides that, in ftran.F90
184 : call init_f_c(buf,1,nz, XYZg,1,nz,nz,jjsize,op)
542 : call init_f_c(buf,1,nz, XYZg,1,nz,nz,jjsize,op)
Parameter 'op' probably shouldn't be there. Maybe it's not a big deal, I just noticed it because my new compiler gave a warning.
Thank you for dealing with the pos0 bug! Sorry to raise this point again, but it seems that pos0 = (x-1)*jjsize is not always the right value in that part of the code, but pos0 = 0 seems correct. The FFT was correct before the bug fix if the compiler initialized integers with zeros, I've been using it for years like that. Also it worked when I set pos0 = 0 and compiled with -finit-integer=10000000. I don't know why, but the new bug fix makes the FFT fail in those cases when it worked before (like nx=128 ny=128 nz=192, mpidims= 1 24). My config string is as follows: ./configure --prefix=$PWD --enable-gnu --enable-fftw --with-fftw=${FFT_ROOT} --enable-measure --enable-stride1 LDFLAGS="-lm"
Besides that, in ftran.F90 184 : call init_f_c(buf,1,nz, XYZg,1,nz,nz,jjsize,op) 542 : call init_f_c(buf,1,nz, XYZg,1,nz,nz,jjsize,op) Parameter 'op' probably shouldn't be there. Maybe it's not a big deal, I just noticed it because my new compiler gave a warning.