FFT backend 抽象组页

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_filtre_fft.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_filtre_fft_loc.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_fft.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_fft_fftw.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_fft_mathkeisan.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_fft_mkl.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mod_fft_wrapper.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mkl_dfti.f90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\mkl_dft_type.f90

Mars 运行参与度:条件经过。动力滤波选择 FFT 实现时经过;具体 backend 由编译宏 FFT_FFTWFFT_MATHKEISAN、MKL 相关构建选择决定。

文件清单

文件 行数 作用
mod_filtre_fft.F90 300 全局/并行滤波用 FFT 滤波系数初始化和 U/V/inverse FFT 滤波。
mod_filtre_fft_loc.F90 343 local 子域版本,接口额外带 jjb/jje/jj_begin/jj_end
mod_fft.F90 17 根据 CPP 宏选择具体 backend 模块。
mod_fft_fftw.F90 114 FFTW dfftw_plan_many_dft_r2c/c2r backend。
mod_fft_mathkeisan.F90 67 mathkeisan DZFFTM/ZDFFTM backend。
mod_fft_mkl.F90 128 MKL DFTI backend。
mod_fft_wrapper.F90 37 未指定 backend 时的 stop wrapper。
mkl_dfti.f90, mkl_dft_type.f90 529, 228 MKL DFTI Fortran interface/type 常量。

抽象层

mod_fft.F90 是编译期选择器:

滤波 FFT 流程

mod_filtre_fftmod_filtre_fft_loc 都提供:

  1. Init_filtre_fft:根据 U/V 滤波系数和南北滤波纬带构造 spectral multiplier,并调用 Init_fft
  2. Filtre_u_fftFiltre_v_fftFiltre_inv_fft:打包待滤波数组,调用 FFT_forward,按 mode multiplier 修改谱空间结果,再 FFT_backward
  3. local 版本显式接收纬向本地范围,适配并行 decomposition。

待确认

相关页面