Complex fast Fourier transform on a three-dimensional mesh.
Self-contained radix-2/3 Stockham transform. Allowing products of powers of two and three avoids padding the particle mesh to the next power of two.
Twiddle factors for the transforms along the three mesh directions
| Type | Visibility | Attributes | Name | Initial | |||
|---|---|---|---|---|---|---|---|
| integer, | public | :: | mesh(3) | = | 0 |
Number of points along each direction |
|
| complex(kind=wp), | public, | allocatable | :: | tw(:,:) |
Roots of unity for each direction, whose lengths need not divide each other |
Smallest supported mesh size not below the requested number of points
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | npoint |
Requested number of mesh points |
Supported number of mesh points
Transform along all three directions, isign selects forward (-1) or backward (+1)
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(fft_mesh), | intent(in) | :: | self |
Instance of the transform |
||
| complex(kind=wp), | intent(inout) | :: | grid(:,:,:) |
Mesh to transform in place |
||
| integer, | intent(in) | :: | isign |
Sign of the exponent |
Tabulate the roots of unity for transforms on the given mesh
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| type(fft_mesh), | intent(out) | :: | self |
Instance of the transform |
||
| integer, | intent(in) | :: | mesh(3) |
Number of points along each direction |