FFTs
Name DoubleFFTParameter
Section Mesh::FFTs
Type float
Default 2.0
For solving the Poisson equation in Fourier space, and for applying the local potential
in Fourier space, an auxiliary cubic mesh is built. This mesh will be larger than
the circumscribed cube of the usual mesh by a factor DoubleFFTParameter. See
the section that refers to Poisson equation, and to the local potential for details
[the default value of two is typically good].
Name FFTLibrary
Section Mesh::FFTs
Type integer
Default fftw
(experimental) You can select the FFT library to use.
Options:
- fftw:
Uses FFTW3 library.
- pfft:
(experimental) Uses PFFT library, which has to be linked.
- accel:
(experimental) Uses a GPU accelerated library. This only
works if Octopus was compiled with Cuda or OpenCL support.
Name FFTOptimize
Section Mesh::FFTs
Type logical
Default yes
Should octopus optimize the FFT dimensions?
This means that the mesh to which FFTs are applied is not taken to be as small
as possible: some points may be added to each direction in order to get a "good number"
for the performance of the FFT algorithm.
The best FFT grid dimensions are given by $2^a 3^b 5^c 7^d 11^e 13^f$
where $a,b,c,d$ are arbitrary and $e,f$ are 0 or 1.
(ref).
In some cases, namely when using
the split-operator, or Suzuki-Trotter propagators, this option should be turned off.
For spatial FFTs in periodic directions, the grid is never optimized, but a warning will
be written if the number is not good, with a suggestion of a better one to use, so you
can try a different spacing if you want to get a good number.
Name FFTPreparePlan
Section Mesh::FFTs
Type integer
Default fftw_measure
The FFTs are performed in octopus with the help of FFTW and similar packages.
Before doing the actual computations, this package prepares a "plan", which means that
the precise numerical strategy to be followed to compute the FFT is machine/compiler-dependent,
and therefore the software attempts to figure out which is this precise strategy (see the
FFTW documentation for details). This plan preparation, which has to be done for each particular
FFT shape, can be done exhaustively and carefully (slow), or merely estimated. Since this is
a rather critical numerical step, by default it is done carefully, which implies a longer initial
initialization, but faster subsequent computations. You can change this behaviour by changing
this FFTPreparePlan variable, and in this way you can force FFTW to do a fast guess or
estimation of which is the best way to perform the FFT.
Options:
- fftw_measure:
This is the default, and implies a longer initialization, but involves a more careful analysis
of the strategy to follow, and therefore more efficient FFTs.
- fftw_estimate:
This is the "fast initialization" scheme, in which the plan is merely guessed from "reasonable"
assumptions.
- fftw_patient:
It is like fftw_measure, but considers a wider range of algorithms and often produces a
"more optimal" plan (especially for large transforms), but at the expense of several times
longer planning time (especially for large transforms).
- fftw_exhaustive:
It is like fftw_patient, but considers an even wider range of algorithms,
including many that we think are unlikely to be fast, to produce the most optimal
plan but with a substantially increased planning time.
Name NFFTCutoff
Section Mesh::FFTs
Type integer
Default 6
Cut-off parameter of the window function.
See NFFT manual for details.
Name NFFTGuruInterface
Section Mesh::FFTs
Type logical
Default false
Perform NFFT with guru interface. This permits the fine tuning of several critical parameters.
Name NFFTOversampling
Section Mesh::FFTs
Type float
Default 2
NFFT oversampling factor (sigma). This will rule the size of the FFT under the hood.
Name NFFTPrecompute
Section Mesh::FFTs
Type integer
Default NFFT_PRE_PSI
NFFT precomputation strategy.
Options:
- NFFT_PRE_LIN_PSI:
This method implements a linear interpolation from a lookup table.
- NFFT_PRE_PSI:
This method uses a medium amount of memory to store d*(2*m+1)*M real numbers and requires at most
2(2m + 1)d extra multiplications for each node.
This is the default option.
- NFFT_PRE_FULL_PSI:
Is the fastest method but requires a large amount of memory as it requires to store (2*m+1)^d*M
real numbers. No extra operations are needed during matrix vector multiplication.
Name PNFFTCutoff
Section Mesh::FFTs
Type integer
Default 6
Cut-off parameter of the window function.
Name PNFFTOversampling
Section Mesh::FFTs
Type float
Default 2.0
PNFFT oversampling factor (sigma). This will rule the size of the FFT under the hood.