pulsesuite.core.fftw

Attributes

fft_1d

ifft_1d

fftc_1d

ifftc_1d

fft_2d

ifft_2d

fftc_2d

ifftc_2d

fft_3d

ifft_3d

fftc_3d

ifftc_3d

Functions

nyquist_1D(→ None)

nyquist_2D(→ None)

nyquist_3D(→ None)

fft_1D(→ None)

ifft_1D(→ None)

fftc_1D(→ None)

ifftc_1D(→ None)

fft_2D(→ None)

ifft_2D(→ None)

fftc_2D(→ None)

ifftc_2D(→ None)

fftw_initialize_2D(→ None)

API-compat stub: planning handled by SciPy/pyFFTW internally.

fftw_initialize_3D(→ None)

API-compat stub: planning handled by SciPy/pyFFTW internally.

fft_3D(→ None)

ifft_3D(→ None)

fftc_3D(→ None)

ifftc_3D(→ None)

CreateHT(→ None)

Precompute Hankel transform matrix HT(Nr, Nr) from J0 zeros.

HankelTransform(→ None)

Apply HT @ f in-place (f length must match HT dimension).

Transform(→ None)

If Z has shape (1, Nr, Nt), apply Hankel along r and FFT along t; else FFT3D.

iTransform(→ None)

Inverse of Transform using ifft along t; Hankel is its own inverse for this discretization.

Module Contents

pulsesuite.core.fftw.nyquist_1D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.nyquist_2D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.nyquist_3D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.fft_1D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.ifft_1D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.fftc_1D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.ifftc_1D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.fft_2D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.ifft_2D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.fftc_2D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.ifftc_2D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.fftw_initialize_2D(Z: numpy.typing.NDArray[_dc]) None

API-compat stub: planning handled by SciPy/pyFFTW internally.

pulsesuite.core.fftw.fftw_initialize_3D(Z: numpy.typing.NDArray[_dc]) None

API-compat stub: planning handled by SciPy/pyFFTW internally.

pulsesuite.core.fftw.fft_3D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.ifft_3D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.fftc_3D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.ifftc_3D(Z: numpy.typing.NDArray[_dc]) None
pulsesuite.core.fftw.CreateHT(Nr: int) None

Precompute Hankel transform matrix HT(Nr, Nr) from J0 zeros.

Fortran reference:

HT(m,n) = (2/a(Nr+1)) * J0( a(m)*a(n) / a(Nr+1) ) / J1(a(n))**2, m,n=1..Nr

where a(:) are the first Nr+1 zeros of J0.

We store a length-(Nr+1) array and a (Nr,Nr) HT in double precision.

pulsesuite.core.fftw.HankelTransform(f: numpy.typing.NDArray[_dc]) None

Apply HT @ f in-place (f length must match HT dimension).

pulsesuite.core.fftw.Transform(Z: numpy.typing.NDArray[_dc]) None

If Z has shape (1, Nr, Nt), apply Hankel along r and FFT along t; else FFT3D.

Fortran logic:
if size(Z,1) == 1:

for k: HankelTransform(Z(1,:,k)) for j: FFT(Z(1,j,:))

else:

FFT(Z)

pulsesuite.core.fftw.iTransform(Z: numpy.typing.NDArray[_dc]) None

Inverse of Transform using ifft along t; Hankel is its own inverse for this discretization.

Fortran logic called HankelTransform both ways; we mirror that.

pulsesuite.core.fftw.fft_1d
pulsesuite.core.fftw.ifft_1d
pulsesuite.core.fftw.fftc_1d
pulsesuite.core.fftw.ifftc_1d
pulsesuite.core.fftw.fft_2d
pulsesuite.core.fftw.ifft_2d
pulsesuite.core.fftw.fftc_2d
pulsesuite.core.fftw.ifftc_2d
pulsesuite.core.fftw.fft_3d
pulsesuite.core.fftw.ifft_3d
pulsesuite.core.fftw.fftc_3d
pulsesuite.core.fftw.ifftc_3d