滤波主流程和并行滤波调用组页
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\filtreg.F
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\filtrez\filtreg_mod.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar\filtreg_p.F
Mars 运行参与度:条件经过。动力滤波开启时,串行路径使用 filtreg,并行路径使用 filtreg_p;是否启用 FFT 由 use_filtre_fft 和配置读取决定。
文件清单
| 文件 | 行数 | 主要符号 | 作用 |
|---|---|---|---|
filtreg.F |
322 | filtreg operators, filtreg |
串行场滤波主例程。 |
filtreg_mod.F90 |
559 | filtreg_mod, inifilr |
初始化滤波矩阵、特征函数和 FFT 滤波系数。 |
dyn3dpar/filtreg_p.F |
437 | filtreg_p |
并行子域上的滤波主例程,带 OMP chunk 和 timer。 |
初始化
filtreg_mod 保存 matriceun/matriceus/matricevn/matricevs/matrinvn/matrinvs 等滤波矩阵。初始化时:
- 调用
inifgn计算离散 Laplacian 的特征函数和特征值。 - 按
jfiltnu/jfiltsu/jfiltnv/jfiltsv检查南北半球滤波纬带。 - 使用
MXM或SGEMM构造 U/V 和 inverse 滤波矩阵。 - 若
use_filtre_fft,调用Init_filtre_fft和 local 版本初始化 FFT 系数。
串行 filtreg
filtreg(champ,nlat,nbniv,ifiltre,iaire,...) 根据 ifiltre 和 iaire 选择 U/V 或 inverse 矩阵,对每个需滤波纬带做矩阵乘法。ifiltre 不是 2 或 -2 时打印错误;源码注释提示某些模式应使用旧滤波路径。
并行 filtreg_p
并行版本额外接收 ibeg/iend/nlat 子域信息:
- 若未启用 FFT,按本地纬向范围对
champ_fft临时数组执行DGEMM矩阵滤波。 - 若启用 FFT,先复制本地场到
champ_fft,再按iaire调Filtre_inv_fft、Filtre_u_fft或Filtre_v_fft。 - 结束时将对称/反对称组合写回
champ,并通过timer_filtre统计耗时。
复现要点
coefils.h中的jfiltn*、sddu/sddv和矩阵数组是滤波纬带与权重的核心状态。- 串行和并行矩阵路径都依赖 BLAS
SGEMM/DGEMM;并行路径还依赖OMP_CHUNK分块。 - FFT 路径在
filtreg_p中只在use_filtre_fft为真时启用。
待确认
- Mars 默认配置中
use_filtre_fft的取值和conf_gcm读取路径需由动力配置 主页面最终确认。