dyn3dpar/conf_gcm.F90

路径

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3dpar\conf_gcm.F90

所属目录/模块

LMDZ.COMMON\libf\dyn3dpar

文件定位

conf_gcm.F90 定义 SUBROUTINE conf_gcm(tapedef, etatinit),是并行动力入口的运行配置读取中心。它通过 getinrun.def 等配置源读取日期、时间步、physics/tracer、restart、输出、耗散、sponge、zoom 和并行专用开关,然后直接写入 control_modlogic_modcomconst_modserre_modsponge_mod_pmod_filtre_fftmod_hallo 等模块全局状态。

与串行 dyn3d/conf_gcm 相比,本文件主体同构,但额外处理 OpenMP adjust 限制、并行 FFT filter 开关、MPI 全局 buffer allocation 开关,并使用并行 sponge 模块 sponge_mod_p。串并行差异的横向对照见 conf_gcm 串并行配置差异

Mars 运行参与度

条件经过:Mars 并行动力构建或并行入口测试经过 `dyn3dpar/gcm.F -> conf_gcm(99,.TRUE.)`。串行 Mars 3D 正常入口使用 `dyn3d/conf_gcm.F90`;MARS dyn1d 不是本文件直接入口。

定义的符号

符号 类型 行号 作用
conf_gcm subroutine 6 读取并行动力运行配置,写 COMMON/parallel 模块全局状态。

依赖的模块和 include

依赖 用途
IOIPSLioipsl_getincom 根据 CPP_IOIPSL 选择正式 IOIPSL 或本地 fallback getin
misc_mod 提供 lunout/prt_level/abort_gcm 等运行输出和错误终止基础。
mod_filtre_fft:use_filtre_fft 并行 polar filter 是否使用 FFT。
mod_hallo:use_mpi_alloc halo/通信 buffer 是否使用 MPI_ALLOC_MEM 风格的全局内存。
control_mod planet_type/day_step/iphysiq/nday/ndynstep/ok_dyn* 等主控制状态。
infotrac:type_trac 写 tracer 系统类型。
assert_m:assert 校验 vert_prof_dissip 和 zoom 范围等。
sponge_mod_p 写并行 sponge 配置 callsponge/mode_sponge/nsponge/tetasponge
comconst_mod 写耗散垂直剖面、top-bound sponge 和 ngroup 等。
logic_mod purmats/ok_guide/read_start/iflag_phys/iflag_trac/fxyhypb/ysinus 等逻辑门。
serre_mod 写 zoom 中心、放大率、范围、陡峭度和 alphax/alphay
temps_mod:calend 写日历类型。
dimensions.h, paramet.h, comdissnew.h, iniprint.h 提供网格维度、耗散控制和打印级别共享状态。

输入和输出

方向 说明
tapedef 输入参数 历史配置单元号;当前实现主要通过 getin,本文件内未直接读取该单元。
etatinit 输入参数 .TRUE. 时初始化 zoom 状态;.FALSE. 时把 run.def zoom 参数与已读 start/control 状态比较。
run.def / include def 文件 输入 getin 数据源;实际文件优先级见 IOIPSL getin 系统
lmdz.out 或标准输出 输出 lunout 不是 5/6 时打开 lmdz.out,并写完整配置摘要。
module 全局变量 输出 后续 dyn3dpar/gcm.Finiconst/inigeom/inidissip/iniphysiqleapfrog_p、history/restart、bands/halo/filter 读取这些状态。

主要 getin 键

类别 写入状态 说明
输出和运行上限 lunout, prt_level, itaumax misc_mod/control_mod 设置日志输出和最大步数上限。
行星和日历 planet_type, calend, dayref, anneeref control_mod, temps_mod Mars/generic/Earth 分支和日期基准。
restart/日期重置 raz_date, resetvarc, starttime, timestart, ecritstart control_mod 决定初始时间、restart 重置和中途写 start/restart。
运行长度 nday, ndynstep, less1day, fractday control_mod 后续入口程序派生 itaufin
调度 day_step, nsplit_phys, iperiod, iphysiq, iapp_tracvl control_mod dyn3dpar/gcm.F 随后检查 iphysiq/iperiodday_step 整除关系。
tracer/守恒 force_conserv_tracer, iconser, iflag_trac, type_trac, config_inca control_mod, logic_mod, infotrac 影响 tracer 初始化、advection 和守恒诊断。
输出 iecri, periodav, output_grads_dyn, ok_dynzon, ok_dyn_ins, ok_dyn_ave control_mod, logic_mod 并行入口只在 mpi_rank==0 初始化 history/dynav。
耗散 idissip, dissip_period, lstardis, nitergdiv, nitergrot, niterh, tetagdiv, tetagrot, tetatemp, coefdis control_mod, comdissnew.h idissip 是旧 Mars/Generic 键;dissip_period 存在时覆盖它。
垂直耗散剖面 dissip_factz, dissip_deltaz, dissip_zref, dissip_fac_mid, dissip_fac_up, dissip_hdelta, dissip_pupstart, vert_prof_dissip comconst_mod, control_mod Earth strato 和 Mars/non-Earth 默认不同;Mars 默认 vert_prof_dissip=1
sponge/top-bound iflag_top_bound, mode_top_bound, tau_top_bound, callsponge, nsponge, mode_sponge, tetasponge comconst_mod, sponge_mod_p iflag_top_bound>=1callsponge=.true. 互斥。
网格/zoom ngroup, clon, clat, grossismx, grossismy, fxyhypb, dzoomx, dzoomy, taux, tauy, ysinus comconst_mod, serre_mod, logic_mod etatinit 决定初始化或一致性校验,后续 inigeom 使用。
物理/guide/start purmats, ok_guide, read_start, iflag_phys, cpofT, ip_ebil_dyn, ok_limit, ok_etat0, read_orop logic_mod, control_mod 入口程序决定读取 start、idealized 初始化、physics 初始化和 guide 边界。
并行专用 adjust, offline, use_filtre_fft, use_mpi_alloc control_mod, mod_filtre_fft, mod_hallo 并行版新增或放宽的配置点,见下一节。

并行特有行为

行为 源码位置 影响
adjust OpenMP 限制 104-117 CPP_OMP 下进入 OpenMP parallel 区检查线程数;若线程数大于 1 且 adjust=.true.,调用 abort_gcm
offline .AND. adjust warning 537-544 不停止运行,但提示 defstoke.nc/fluxstoke.nc/fluxstokev.nc 不会创建,只保留 phystoke.nc
use_filtre_fft 590-596 并行版只读入 mod_filtre_fft:use_filtre_fft;不像串行版直接拒绝 true。源码注释说明此时 grossismx 尚未定义,zoom/FFT 兼容检查被注释。
use_mpi_alloc 607-615 写入 mod_hallo:use_mpi_alloc,由 halo 通信 buffer allocation 使用;细节见 mod_hallo
sponge_mod_p 20, 414-440 使用并行 sponge 状态模块,配置键与串行 sponge 语义相同。

conf_gcm 自身不建立 MPI decomposition。并行分布链在 dyn3dpar/gcm 中发生:conf_gcm 之后才调用 init_const_mpi -> init_parallel -> Read_Distrib -> set_bands -> SetDistrib -> Init_Mod_hallo。因此排查并行配置时要先看本页的 getin 写入,再看 gcm.F 的 MPI/bands/halo 初始化。

Zoom 分支

etatinit 控制 zoom 处理方式:

分支 行号 行为
.not.etatinit 687-871 run.defclon/clat/grossismx/grossismy/fxyhypb/dzoomx/dzoomy/taux/tauy/ysinus 到局部变量,并与当前 serre_mod/logic_mod 状态比较;差异超过 0.001 或布尔不一致时 STOP
etatinit 873-970 直接初始化 serre_mod/logic_mod zoom 状态;默认 grossism*=1fxyhypb=.TRUE.dzoom*=0.2taux/tauy=3ysinus=.TRUE.,并派生 alphax=1-1/grossismxalphay=1-1/grossismy

Mars utility 的 defrun_new 另有 Mars 专用门控,特别是 ysinus=.false.、无 zoom 强制 fxyhypb=.false.、有 zoom 要求双曲映射;几何使用链路见 inigeom zoom/map 几何约定。本页只记录 COMMON 并行 conf_gcm.F90 的源码行为,不把 Mars defrun_new 的默认值混入本文件。

核心流程

open lmdz.out if lunout is not 5/6
read adjust and validate OpenMP compatibility
read run length, date, restart, timestep, output and tracer controls
read dissipation, vertical profile, top-bound sponge and sponge_mod_p controls
read planet-specific defaults and physics/guide/start switches
read parallel-only use_filtre_fft and use_mpi_alloc
derive vert_prof_dissip default from planet_type/ok_strato
if etatinit:
    initialize zoom state in serre_mod/logic_mod
else:
    compare run.def zoom keys against already-loaded state
print effective configuration summary

调用方和使用方

方向 例程/页面 关系
调用方 dyn3dpar/gcm run.def 存在检查后调用 conf_gcm(99,.TRUE.);随后做 iphysiq/iperiodday_step/iperiodday_step/iphysiq 检查。
时间推进 dynamics-control-logic-gates, leapfrog-p-time-scheduler 使用 day_step/iperiod/iphysiq/forward/leapf/apphys/apdiss 等门控。
并行分布 parallel_lmdz, bands, mod_hallo conf_gcm 后建立 MPI/OMP/bands/halo;use_mpi_alloc 进入 mod_hallo
几何和滤波 dyn3d_common/inigeom, inigeom zoom/map 几何约定, filtrez 总览 zoom 状态由 inigeom 使用;use_filtre_fft 影响后续滤波路径。
耗散和 sponge dyn3d_common/inidissip, common-dissip-mars-chain 耗散周期、迭代次数、垂直剖面和 sponge/top-bound 参数在后续初始化和时间推进中使用。
输出/restart leapfrog-p-output-restart, history-field-registration ok_dyn*, iecri, periodav, ecritstart 决定 root rank 输出和 restart 门控。

串并行差异要点

风险和待确认

相关页面