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_FFTW、FFT_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_MATHKEISAN时使用mod_fft_mathkeisan。FFT_FFTW时使用mod_fft_fftw。- 其他 MKL 构建可使用
mod_fft_mkl和MKL_DFTI接口。 - 无 backend 时落到
mod_fft_wrapper,其Init_fft/fft_forward/fft_backward直接STOP,提示必须用 CPP key 指定 FFT。
滤波 FFT 流程
mod_filtre_fft 和 mod_filtre_fft_loc 都提供:
Init_filtre_fft:根据 U/V 滤波系数和南北滤波纬带构造 spectral multiplier,并调用Init_fft。Filtre_u_fft、Filtre_v_fft、Filtre_inv_fft:打包待滤波数组,调用FFT_forward,按 mode multiplier 修改谱空间结果,再FFT_backward。- local 版本显式接收纬向本地范围,适配并行 decomposition。
待确认
- 当前 Mars 编译环境默认启用哪个 FFT backend,需要结合 arch/build 页面确认。