dynphy_lonlat 动力-物理耦合目录
路径
LMDZ.MARS\libf\dynphy_lonlat
职责
dynphy_lonlat 是 LMDZ.MARS 的动力-物理耦合目录,负责将物理过程(phymars)与动力核心连接起来。该目录包含物理初始化、运行参数定义、初始场处理、时间积分方案等与动力框架交互的代码。
推断:该目录的名称 "dynphy_lonlat" 表示其职责是在 lon-lat 网格上进行动力(dyn)和物理(phy)的耦合。
目录内容
当前目录结构:
dynphy_lonlat/
└── phymars/ # 物理-动力耦合相关文件(21 个文件)
phymars/ 子目录文件
共 21 个文件,按功能分类:
| 文件 | 作用 |
|---|---|
| 入口与调用 | |
callphysiq_mod.F90 |
动力-物理耦合适配器;call_physiq 校验 planet_type 后将动力核心状态转发给 physiq 并回写 tendency |
iniphysiq_mod.F90 |
物理初始化主入口模块;依次调用 inigeomphy/phys_state_var_init/ini_fillgeom/conf_phys,由 newstart/nogcm/start2archive 调用 |
| 运行控制 | |
defrun_new.F |
GCM 运行参数读取器;从 run.def 读取 30+ 参数写入公共模块,由 newstart/start2archive 调用 |
newstart.F |
交互式初始场编辑器;从 start_archive.nc 或 start.nc/startfi.nc 读取状态,修改地形/压力/tracer/地下冰/坡面数后写 restart.nc 和 restartfi.nc |
nogcm.F90 |
独立物理模式主程序;读取配置和 start.nc/理想场,初始化物理和输出后调用 leapfrog_nogcm |
| 时间积分 | |
leapfrog_nogcm.F |
独立物理模式时间积分主循环;Matsuno + leapfrog 步进,牛顿松弛+水平混合替代动力核心,由 nogcm 调用 |
| 初始化 | |
ini_archive.F |
start_archive NetCDF 文件头部写入;定义维度/坐标/垂直系数/地表场/控制参数,由 start2archive 调用 |
lect_start_archive.F |
start_archive NetCDF 读取与网格插值主例程;读取全部初始场并通过 interp_vert/interp_horiz/interp_line 重映射,由 newstart 调用 |
readhead_NC.F |
NetCDF 头信息读取器;读取控制表、经纬度、面积、地表位势和 aps/bps,为 xvik 初始化动力/物理状态 |
datareadnc.F |
火星地表 NetCDF 数据读取与网格插值;从 surface.nc 读取 z0/反照率/热惯量/MOLA 地形/亚网格参数,由 newstart 调用 |
start2archive.F |
起始场归档转换主程序;读取 start.nc/startfi.nc,初始化动力和物理网格后创建或追加 start_archive.nc |
| 水平处理 | |
avg_horiz_mod.F |
水平空间平均插值;将高分辨率地表数据从源网格复合平均到目标 GCM 网格,由 datareadnc 调用 |
mvc_horiz_mod.F |
最大值复合水平插值;将高分辨率地表数据取亚网格最大值映射到 GCM 网格,由 datareadnc 调用 |
grid_noro1.F |
亚网格地形参数计算(无旋转网格);从 USN 高程数据计算 zmea/zstd/zsig/zgam/zthe,由 datareadnc 调用 |
scal_wind.F |
风场位置转换;把 xus/xvs 相邻平均到 u/v 风点,由 lect_start_archive 调用 |
wind_scal.F |
风场标量格点转换;将自然风/通量从 u/v 位置平均回标量格点,由 start2archive 调用 |
| 垂直处理 | |
interp_vert.F |
垂直坐标线性插值;将变量从旧混合 σ-p 层插值到新层,由 lect_start_archive 调用 |
subslope_mola.F90 |
MOLA 坡面分布重算模块;读取 mola64.nc 并按 GCM 网格统计 subslope_dist |
| 其他 | |
caldyn0.F |
lon-lat GCM 动力倾向计算;依次调 13 个 EXTERNAL 子过程,由 newstart 调用 |
xvik.F |
Viking/InSight 压力后处理程序;读取 diagfi 输出并生成站点压力、全球 CO2 压力诊断、日平均和谐波拟合 |
write_archive.F |
start_archive 变量追加器;按 dim 和变量名创建并写入 3D/2D/0D/土壤变量 |
关键模块
| 模块名 | 所在文件 | 作用 |
|---|---|---|
callphysiq_mod |
callphysiq_mod.F90 |
动力-物理耦合适配器;封装 call_physiq |
iniphysiq_mod |
iniphysiq_mod.F90 |
物理初始化主入口;包装 iniphysiq 例程 |
newstart |
newstart.F |
新建/修改 lon-lat GCM 初始状态并写出 restart 文件 |
lect_start_archive |
lect_start_archive.F |
读取 start_archive 初始场 |
avg_horiz_mod |
avg_horiz_mod.F |
水平空间平均插值;源网格地表数据分箱平均到目标 GCM 网格 |
mvc_horiz_mod |
mvc_horiz_mod.F |
最大值复合水平插值;取亚网格最大值映射到 GCM 网格 |
scal_wind |
scal_wind.F |
风场位置转换;插值风场到 u/v 点 |
与其他目录的关系
| 相关目录 | 关系 |
|---|---|
../phymars/ |
被调用执行物理过程 |
../../deftank/ |
读取 run.def、callphys.def 等配置 |
../../startfiles/ |
读取初始状态文件 |
| 外部动力框架 | 提供时间步进、网格数据传输 |
典型运行流程
完整 GCM 模式
初始化:
- 调用
iniphysiq_mod初始化物理 - 调用
lect_start_archive读取初始场 - 调用
defrun_new定义运行参数
- 调用
时间循环:
- 动力核心推进风场、温度
- 调用
callphysiq_mod执行物理过程 - 物理调用
phymars/physiq_mod.F中的physiq()
独立物理模式(nogcm)
当没有完整 GCM 动力核心时,可以使用 nogcm.F90:
- 自己实现时间积分(leapfrog_nogcm.F)
- 只运行物理过程
- 用于离线物理测试或 1D 列模型
关键入口
| 例程 | 所在文件 | 作用 |
|---|---|---|
call_physiq |
callphysiq_mod.F90 |
动力-物理耦合适配入口 |
iniphysiq |
iniphysiq_mod.F90 |
物理初始化入口 |
复现要点
- 需要外部动力框架提供网格、时间步进
- 需要配置 run.def 定义网格参数
- 需要初始状态文件(startfiles)
- 独立物理模式(nogcm)可以单独运行
细节入口
- COMMON 动力核心与 MARS 物理包的串/并行接口约定见 动力-物理接口主题 和 callphysiq_mod。
- 独立物理路径的入口、初始化与时间推进见 nogcm、leapfrog_nogcm 和 iniphysiq_mod。
- 动力网格、物理列和 archive 数据的数组变换见 mod_interface_dyn_phys、wind_scal、scal_wind 与 lect_start_archive。