Mars 3D GCM 主入口链

输入范围

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\gcm.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d\conf_gcm.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\iniconst.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\inigeom.F
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\inidissip.F90
LMDZ.MARS\libf\dynphy_lonlat\phymars\iniphysiq_mod.F90
LMDZ.MARS\doc\run.tex

Mars 运行参与度:必经/条件经过。LMDZ.MARS 文档给出的 3D GCM 编译示例是 makelmdz_fcm -arch ... -d 64x48x49 -p mars gcm,生成 LMDZ.COMMON/bin/gcm_XXX_phymars_seq.egcm_XXX_phymars_para.e。本页覆盖 gcm 可执行文件的 COMMON 串行入口链;并行入口和 Mars nogcm 变体只作为边界说明。

入口定位

gcm.F90 定义 PROGRAM gcm,负责从运行目录的配置和初始态进入完整 3D 动力时间推进。Mars 运行需要的 physics 由构建期 -p mars 选择 phymars,并在源码中通过 CPP_PHYS 下的 iniphysiq_mod:iniphysiq 接入。

构建和运行的最小外部事实:

证据 含义
LMDZ.MARS\doc\run.tex 示例 makelmdz_fcm -arch linux-ifort -d 64x48x49 -p mars gcm Mars 3D GCM 目标名是 gcm,物理包是 mars
输出命名 gcm_XXX_phymars_YY.e XXX 来自 -d 分辨率,YYseqpara
gcm.F90USE iniphysiq_mod 只在 CPP_PHYS 下启用 Mars 物理初始化由构建出的 phymars dyn-phys 接口提供。
MARS 树中 libf\dynphy_lonlat\phymars\nogcm.F90 调用 leapfrog_nogcm nogcm 是 Mars 专属变体链,不是本页的 gcm 主链。

主启动顺序

阶段 源码位置 关键行为 Mars 复现意义
1. 检查 run.def gcm.F90 157-163 INQUIRE(file="run.def"),缺失则 abort_gcm Mars 3D run 必须在运行目录放置 run.def;物理配置通常由 run.def include callphys.def
2. 读取运行控制 gcm.F90 163;conf_gcm.F90 conf_gcm(99,.TRUE.) 通过 getincontrol_mod, logic_mod, temps_mod, comconst_mod planet_type, nday, day_step, iperiod, iphysiq, read_start, ecritstart, ok_dyn_* 等从这里进入 COMMON 状态层。
3. 基本一致性检查 gcm.F90 164-170, 289-306 检查 iphysiqiperiod 倍数、day_stepiperiod/iphysiq 倍数;串行动力拒绝 use_filtre_fft 这些是 Mars run 前置配置错误,不能靠后续 physics 修正。
4. 可选 XIOS/IOIPSL 设置 gcm.F90 176-224 CPP_XIOSwxios_init("LMDZ")CPP_IOIPSL 下设置日历。 Mars 常用 planet_type!="earth" 时 Julian day ref 被置 0;不能把 Earth 日期输出解释为 Mars sol 日历。
5. tracer 初始化和 q 分配 gcm.F90 235-242 infotrac_init 读取 tracer 配置,按 nqtot 分配 q(ip1jmp1,llm,nqtot) Mars tracer 数量由 traceur.def/infotrac 链决定,必须先于读 start.nc
6. 读取或构造动力初态 gcm.F90 248-281 read_start 为真时读 dynetat0("start.nc");否则 iniacademic 构造理想化初态。 标准 Mars 3D run 走 start.nc;理想化分支不等价于生产初态。
7. 日期和时间步规范化 gcm.F90 301-339 dtvr=daysec/day_step;按 raz_date/starttime 处理 restart 时间差异。 Mars restart 复现要关注 timestart/ecritstart/raz_date,否则可能从错误 sol 或时间记录启动。
8. 常量、几何、滤波 gcm.F90 400-418 iflag_phys==1 时调用 iniconst, inigeom, inifilr 普通 Mars 物理 run 通常需要这些动力常量和几何在 iniphysiq 前就绪。
9. 耗散初始化 gcm.F90 424-425 inidissip(...) 读取/校验耗散阶数和时间尺度。 Mars conf_gcmidissip/dissip_periodvert_prof_dissip 会在这里落地。
10. 结束日和物理初始化 gcm.F90 431-475 nday/less1day/ndynstepday_endiniphysiq 接收网格、常量、dtphys/nsplit_phys Mars physics 第一次获得动力网格几何、面积、常量和物理步长。
11. 初始 restart/history gcm.F90 485-516 Mars 下 dynredem0("restart.nc", day_ini/day_end, phis);按 ok_dyn_ins/ok_dyn_ave 初始化 history/dynav。 ecritstart>0 时 Mars 初始 restart 用 day_ini,否则用 day_end;history 依赖 IOIPSL 宏和输出开关。
12. 进入时间推进 gcm.F90 538 leapfrog(ucov,vcov,teta,ps,masse,phis,q,time_0) 后续主循环由 leapfrog 细节页描述;本页边界停在入口实参和状态准备。

配置键到入口状态

配置/文件 读取点 写入状态 入口后续使用位置
run.def: planet_type conf_gcm control_mod%planet_type Mars restart day 选择、dynetat0/dynredem planeto 分支、物理一致性检查。
run.def: nday, less1day, fractday, ndynstep conf_gcm control_mod gcm 计算 day_endleapfrog 推导循环终点。
run.def: day_step conf_gcm control_mod%day_step dtvr=daysec/day_step,history 周期,physics/dynamics 调用频率。
run.def: iperiod, iphysiq, nsplit_phys conf_gcm control_mod 入口整除检查,iniphysiqdtphys/nsplit_physleapfrog 的 physics 门控。
run.def: read_start conf_gcm logic_mod%read_start 选择 dynetat0("start.nc")iniacademic
run.def: raz_date, starttime, timestart, ecritstart conf_gcm control_mod, temps_mod restart 时间选择、入口日期重置、Mars 初始 restart day。
traceur.def infotrac_init infotrac%nqtot 和 tracer 表 分配 q,读取 start.nc tracer,后续输送。
start.nc dynetat0 ucov/vcov/teta/q/masse/ps/phis/time_0 和时间控制 iniphysiq 之前的动力状态;最终传给 leapfrog

Mars 正常路径和排除路径

Mars 3D 正常 run 的 COMMON 主链可以写成:

makelmdz_fcm -p mars gcm
  -> PROGRAM gcm
  -> require run.def
  -> conf_gcm(99,.TRUE.)
  -> infotrac_init + allocate q
  -> dynetat0("start.nc") when read_start
  -> validate day_step/iperiod/iphysiq and date controls
  -> iniconst -> inigeom -> inifilr -> inidissip
  -> iniphysiq(..., dtphys/nsplit_phys, ..., iflag_phys)
  -> dynredem0 + optional inithist/initdynav
  -> leapfrog(...)

不纳入本页展开:

nogcm 和 Mars defrun_new 的边界

MARS libf\dynphy_lonlat\phymars\nogcm.F90 也调用 conf_gcm(99,.TRUE.),随后执行与 gcm 相似的常量、几何、物理初始化,最后进入 leapfrog_nogcm。它不是 makelmdz_fcm -p mars gcm 的主程序,而是 Mars lon-lat/no-GCM 变体。

MARS defrun_new.F 是 Mars 专属旧式/工具链配置读取器:它直接打开 run.def,写 Mars 相关默认,且注释说明部分 terrestrial 参数“不再从 run.def 读”。COMMON gcm.F90 的 3D 主入口不直接调用 defrun_new;本页只把它作为 Mars utility/nogcm 边界参考。

复现检查点

运行前最小检查:

  1. 可执行文件来自 makelmdz_fcm -p mars gcm,并和目标分辨率 -d 匹配。
  2. 运行目录存在 run.deftraceur.defstart.nc,Mars physics 还需要匹配的 startfi.nc/callphys.def 路径。
  3. run.defplanet_type 应与 Mars physics 一致,通常为 mars
  4. mod(iphysiq,iperiod)==0,且 day_step 同时为 iperiodiphysiq 的倍数。
  5. 若使用串行动力,不设置 use_filtre_fft=.true.
  6. 若从已有 restart 继续,确认 timestart/starttime/raz_date/ecritstart,避免入口因为时间不一致 abort 或从非预期记录启动。
  7. 若需要 history/dynav 输出,确认构建带 CPP_IOIPSL,且 ok_dyn_ins/ok_dyn_aveiecri/periodav 有期望值。

待确认

相关页面