drop FFTW2 support, and change doc pages
This commit is contained in:
@ -33,27 +33,25 @@ LAMMPS can use them if they are available on your system.
|
||||
|
||||
[CMake variables]:
|
||||
|
||||
-D FFT=value # KISS or FFTW3 or FFTW2 or MKL, default is FFTW3 if found, else KISS
|
||||
-D FFT=value # FFTW3 or MKL or KISS, default is FFTW3 if found, else KISS
|
||||
-D FFT_SINGLE=value # yes or no (default), no = double precision
|
||||
-D FFT_PACK=value # array (default) or pointer or memcpy :pre
|
||||
|
||||
NOTE: The values for the FFT variable must be in upper-case.
|
||||
This is an exception to the rule that all CMake variables can
|
||||
be specified with lower-case values.
|
||||
NOTE: The values for the FFT variable must be in upper-case. This is
|
||||
an exception to the rule that all CMake variables can be specified
|
||||
with lower-case values.
|
||||
|
||||
Usually these settings are all that is needed. If CMake cannot find
|
||||
the FFT library, you can set these variables:
|
||||
|
||||
-D FFTW3_INCLUDE_DIRS=path # path to FFTW3 include files
|
||||
-D FFTW3_LIBRARIES=path # path to FFTW3 libraries
|
||||
-D FFTW2_INCLUDE_DIRS=path # ditto for FFTW2
|
||||
-D FFTW2_LIBRARIES=path
|
||||
-D MKL_INCLUDE_DIRS=path # ditto for Intel MKL library
|
||||
-D MKL_LIBRARIES=path :pre
|
||||
|
||||
[Makefile.machine settings]:
|
||||
|
||||
FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW2, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS
|
||||
FFT_INC = -DFFT_FFTW3 # -DFFT_FFTW3, -DFFT_FFTW (same as -DFFT_FFTW3), -DFFT_MKL, or -DFFT_KISS
|
||||
# default is KISS if not specified
|
||||
FFT_INC = -DFFT_SINGLE # do not specify for double precision
|
||||
FFT_INC = -DFFT_PACK_ARRAY # or -DFFT_PACK_POINTER or -DFFT_PACK_MEMCPY :pre
|
||||
@ -63,8 +61,6 @@ FFT_INC = -I/usr/local/include
|
||||
FFT_PATH = -L/usr/local/lib
|
||||
FFT_LIB = -lfftw3 # FFTW3 double precision
|
||||
FFT_LIB = -lfftw3 -lfftw3f # FFTW3 single precision
|
||||
FFT_LIB = -lfftw # FFTW2 double precision, or -ldfftw
|
||||
FFT_LIB = -lsfftw # FFTW2 single precision
|
||||
FFT_LIB = -lmkl_intel_lp64 -lmkl_sequential -lmkl_core # MKL with Intel compiler
|
||||
FFT_LIB = -lmkl_gf_lp64 -lmkl_sequential -lmkl_core # MKL with GNU compier :pre
|
||||
|
||||
@ -89,13 +85,9 @@ details.
|
||||
|
||||
FFTW is a fast, portable FFT library that should also work on any
|
||||
platform and can be faster than the KISS FFT library. You can
|
||||
download it from "www.fftw.org"_http://www.fftw.org. Both the
|
||||
(obsolete) legacy version 2.1.X and the newer 3.X versions are
|
||||
supported.
|
||||
download it from "www.fftw.org"_http://www.fftw.org. LAMMPS requires
|
||||
version 3.X; the legacy version 2.1.X is no longer supported.
|
||||
|
||||
NOTE: FFTW2 has not been updated since 1999 and has been declared
|
||||
obsolete by its developers.
|
||||
|
||||
Building FFTW for your box should be as simple as ./configure; make;
|
||||
make install. The install command typically requires root privileges
|
||||
(e.g. invoke it via sudo), unless you specify a local directory with
|
||||
@ -116,8 +108,8 @@ error is less than the difference in precision. Using the -DFFT_SINGLE
|
||||
setting trades off a little accuracy for reduced memory use and
|
||||
parallel communication costs for transposing 3d FFT data.
|
||||
|
||||
When using -DFFT_SINGLE with FFTW3 or FFTW2, you may need to build the
|
||||
FFTW library a second time with support for single-precision.
|
||||
When using -DFFT_SINGLE with FFTW3 you may need to build the FFTW
|
||||
library a second time with support for single-precision.
|
||||
|
||||
For FFTW3, do the following, which should produce the additional
|
||||
library libfftw3f.a
|
||||
@ -125,12 +117,6 @@ library libfftw3f.a
|
||||
make clean
|
||||
./configure --enable-single; make; make install :pre
|
||||
|
||||
For FFTW2, do the following, which should produce the additional
|
||||
library libsfftw.a
|
||||
|
||||
make clean
|
||||
./configure --enable-float --enable-type-prefix; make; make install :pre
|
||||
|
||||
Performing 3d FFTs requires communication to transpose the 3d FFT
|
||||
grid. The data packing/unpacking for this can be done in one of 3
|
||||
modes (ARRAY, POINTER, MEMCPY) as set by the FFT_PACK syntax above.
|
||||
|
||||
@ -104,11 +104,13 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan)
|
||||
DftiComputeForward(plan->handle_fast,data);
|
||||
else
|
||||
DftiComputeBackward(plan->handle_fast,data);
|
||||
/*
|
||||
#elif defined(FFT_FFTW2)
|
||||
if (flag == -1)
|
||||
fftw(plan->plan_fast_forward,total/length,data,1,length,NULL,0,0);
|
||||
else
|
||||
fftw(plan->plan_fast_backward,total/length,data,1,length,NULL,0,0);
|
||||
fftw(plan->plan_fast_backward,total/length,data,1,length,NULL,0,0);
|
||||
*/
|
||||
#elif defined(FFT_FFTW3)
|
||||
if (flag == -1)
|
||||
theplan=plan->plan_fast_forward;
|
||||
@ -143,11 +145,13 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan)
|
||||
DftiComputeForward(plan->handle_mid,data);
|
||||
else
|
||||
DftiComputeBackward(plan->handle_mid,data);
|
||||
/*
|
||||
#elif defined(FFT_FFTW2)
|
||||
if (flag == -1)
|
||||
fftw(plan->plan_mid_forward,total/length,data,1,length,NULL,0,0);
|
||||
else
|
||||
fftw(plan->plan_mid_backward,total/length,data,1,length,NULL,0,0);
|
||||
*/
|
||||
#elif defined(FFT_FFTW3)
|
||||
if (flag == -1)
|
||||
theplan=plan->plan_mid_forward;
|
||||
@ -182,11 +186,13 @@ void fft_3d(FFT_DATA *in, FFT_DATA *out, int flag, struct fft_plan_3d *plan)
|
||||
DftiComputeForward(plan->handle_slow,data);
|
||||
else
|
||||
DftiComputeBackward(plan->handle_slow,data);
|
||||
/*
|
||||
#elif defined(FFT_FFTW2)
|
||||
if (flag == -1)
|
||||
fftw(plan->plan_slow_forward,total/length,data,1,length,NULL,0,0);
|
||||
else
|
||||
fftw(plan->plan_slow_backward,total/length,data,1,length,NULL,0,0);
|
||||
*/
|
||||
#elif defined(FFT_FFTW3)
|
||||
if (flag == -1)
|
||||
theplan=plan->plan_slow_forward;
|
||||
@ -520,6 +526,7 @@ struct fft_plan_3d *fft_3d_create_plan(
|
||||
(out_khi-out_klo+1);
|
||||
}
|
||||
|
||||
/*
|
||||
#elif defined(FFT_FFTW2)
|
||||
|
||||
plan->plan_fast_forward =
|
||||
@ -561,6 +568,7 @@ struct fft_plan_3d *fft_3d_create_plan(
|
||||
plan->normnum = (out_ihi-out_ilo+1) * (out_jhi-out_jlo+1) *
|
||||
(out_khi-out_klo+1);
|
||||
}
|
||||
*/
|
||||
|
||||
#elif defined(FFT_FFTW3)
|
||||
plan->plan_fast_forward =
|
||||
@ -660,6 +668,7 @@ void fft_3d_destroy_plan(struct fft_plan_3d *plan)
|
||||
DftiFreeDescriptor(&(plan->handle_fast));
|
||||
DftiFreeDescriptor(&(plan->handle_mid));
|
||||
DftiFreeDescriptor(&(plan->handle_slow));
|
||||
/*
|
||||
#elif defined(FFT_FFTW2)
|
||||
if (plan->plan_slow_forward != plan->plan_fast_forward &&
|
||||
plan->plan_slow_forward != plan->plan_mid_forward) {
|
||||
@ -672,6 +681,7 @@ void fft_3d_destroy_plan(struct fft_plan_3d *plan)
|
||||
}
|
||||
fftw_destroy_plan(plan->plan_fast_forward);
|
||||
fftw_destroy_plan(plan->plan_fast_backward);
|
||||
*/
|
||||
#elif defined(FFT_FFTW3)
|
||||
FFTW_API(destroy_plan)(plan->plan_slow_forward);
|
||||
FFTW_API(destroy_plan)(plan->plan_slow_backward);
|
||||
@ -809,6 +819,7 @@ void fft_1d_only(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan)
|
||||
DftiComputeBackward(plan->handle_mid,data);
|
||||
DftiComputeBackward(plan->handle_slow,data);
|
||||
}
|
||||
/*
|
||||
#elif defined(FFT_FFTW2)
|
||||
if (flag == -1) {
|
||||
fftw(plan->plan_fast_forward,total1/length1,data,1,0,NULL,0,0);
|
||||
@ -819,6 +830,7 @@ void fft_1d_only(FFT_DATA *data, int nsize, int flag, struct fft_plan_3d *plan)
|
||||
fftw(plan->plan_mid_backward,total2/length2,data,1,0,NULL,0,0);
|
||||
fftw(plan->plan_slow_backward,total3/length3,data,1,0,NULL,0,0);
|
||||
}
|
||||
*/
|
||||
#elif defined(FFT_FFTW3)
|
||||
FFTW_API(plan) theplan;
|
||||
if (flag == -1)
|
||||
|
||||
@ -24,7 +24,7 @@ typedef float FFT_SCALAR;
|
||||
typedef double FFT_SCALAR;
|
||||
#endif
|
||||
|
||||
// set default fftw library. switch to FFT_FFTW3 when convenient.
|
||||
// if user set FFTW, it means FFTW3
|
||||
|
||||
#ifdef FFT_FFTW
|
||||
#define FFT_FFTW3
|
||||
@ -41,13 +41,13 @@ typedef double FFT_SCALAR;
|
||||
typedef float _Complex FFT_DATA;
|
||||
#define FFT_MKL_PREC DFTI_SINGLE
|
||||
|
||||
#elif defined(FFT_FFTW2)
|
||||
#if defined(FFTW_SIZE)
|
||||
#include "sfftw.h"
|
||||
#else
|
||||
#include "fftw.h"
|
||||
#endif
|
||||
typedef FFTW_COMPLEX FFT_DATA;
|
||||
//#elif defined(FFT_FFTW2)
|
||||
//#if defined(FFTW_SIZE)
|
||||
//#include "sfftw.h"
|
||||
//#else
|
||||
//#include "fftw.h"
|
||||
//#endif
|
||||
//typedef FFTW_COMPLEX FFT_DATA;
|
||||
|
||||
#elif defined(FFT_FFTW3)
|
||||
#include "fftw3.h"
|
||||
@ -82,13 +82,13 @@ typedef struct kiss_fft_state* kiss_fft_cfg;
|
||||
typedef double _Complex FFT_DATA;
|
||||
#define FFT_MKL_PREC DFTI_DOUBLE
|
||||
|
||||
#elif defined(FFT_FFTW2)
|
||||
#if defined(FFTW_SIZE)
|
||||
#include "dfftw.h"
|
||||
#else
|
||||
#include "fftw.h"
|
||||
#endif
|
||||
typedef FFTW_COMPLEX FFT_DATA;
|
||||
//#elif defined(FFT_FFTW2)
|
||||
//#if defined(FFTW_SIZE)
|
||||
//#include "dfftw.h"
|
||||
//#else
|
||||
//#include "fftw.h"
|
||||
//#endif
|
||||
//typedef FFTW_COMPLEX FFT_DATA;
|
||||
|
||||
#elif defined(FFT_FFTW3)
|
||||
#include "fftw3.h"
|
||||
@ -139,13 +139,13 @@ struct fft_plan_3d {
|
||||
DFTI_DESCRIPTOR *handle_fast;
|
||||
DFTI_DESCRIPTOR *handle_mid;
|
||||
DFTI_DESCRIPTOR *handle_slow;
|
||||
#elif defined(FFT_FFTW2)
|
||||
fftw_plan plan_fast_forward;
|
||||
fftw_plan plan_fast_backward;
|
||||
fftw_plan plan_mid_forward;
|
||||
fftw_plan plan_mid_backward;
|
||||
fftw_plan plan_slow_forward;
|
||||
fftw_plan plan_slow_backward;
|
||||
//#elif defined(FFT_FFTW2)
|
||||
// fftw_plan plan_fast_forward;
|
||||
// fftw_plan plan_fast_backward;
|
||||
// fftw_plan plan_mid_forward;
|
||||
// fftw_plan plan_mid_backward;
|
||||
//fftw_plan plan_slow_forward;
|
||||
//fftw_plan plan_slow_backward;
|
||||
#elif defined(FFT_FFTW3)
|
||||
FFTW_API(plan) plan_fast_forward;
|
||||
FFTW_API(plan) plan_fast_backward;
|
||||
|
||||
Reference in New Issue
Block a user