type :: Fourier_Transform
type(FFTPlan) :: fft_plan
contains
procedure, nopass, private :: dft_cmplx_sp, dft_cmplx_dp, dft_cmplx_qp
generic :: dft => dft_cmplx_sp, dft_cmplx_dp, dft_cmplx_qp
procedure, nopass, private :: dft_real_sp, dft_real_dp, dft_real_qp
generic :: dft => dft_real_sp, dft_real_dp, dft_real_qp
procedure, nopass, private :: dft2_cmplx_sp, dft2_cmplx_dp, dft2_cmplx_qp
generic :: dft => dft2_cmplx_sp, dft2_cmplx_dp, dft2_cmplx_qp
procedure, nopass, private :: dft2_real_sp, dft2_real_dp, dft2_real_qp
generic :: dft => dft2_real_sp, dft2_real_dp, dft2_real_qp
procedure, nopass, private :: dft3_cmplx_sp, dft3_cmplx_dp, dft3_cmplx_qp
generic :: dft => dft3_cmplx_sp, dft3_cmplx_dp, dft3_cmplx_qp
procedure, nopass, private :: dft3_real_sp, dft3_real_dp, dft3_real_qp
generic :: dft => dft3_real_sp, dft3_real_dp, dft3_real_qp
procedure, nopass, private :: idft_cmplx_sp, idft_cmplx_dp, idft_cmplx_qp
generic :: idft => idft_cmplx_sp, idft_cmplx_dp, idft_cmplx_qp
procedure, nopass, private :: idft_real_sp, idft_real_dp, idft_real_qp
generic :: idft => idft_real_sp, idft_real_dp, idft_real_qp
procedure, nopass, private :: idft2_cmplx_sp, idft2_cmplx_dp, idft2_cmplx_qp
generic :: idft => idft2_cmplx_sp, idft2_cmplx_dp, idft2_cmplx_qp
procedure, nopass, private :: idft2_real_sp, idft2_real_dp, idft2_real_qp
generic :: idft => idft2_real_sp, idft2_real_dp, idft2_real_qp
procedure, nopass, private :: idft3_cmplx_sp, idft3_cmplx_dp, idft3_cmplx_qp
generic :: idft => idft3_cmplx_sp, idft3_cmplx_dp, idft3_cmplx_qp
procedure, nopass, private :: idft3_real_sp, idft3_real_dp, idft3_real_qp
generic :: idft => idft3_real_sp, idft3_real_dp, idft3_real_qp
procedure, private :: init_fft_plan_sp
generic :: init_fft_plan => init_fft_plan_sp
procedure, private :: fft_cmplx_sp
generic :: fft => fft_cmplx_sp
procedure, private :: destroy_fft_plan_sp
generic :: destroy_fft_plan => destroy_fft_plan_sp
end type Fourier_Transform