testphys1d 专用配置
路径
LMDZ.MARS\deftank\run.def.1d (91 行, 1D 专用)
LMDZ.MARS\deftank\callphys.def.GCM6 (245 行, 物理参数开关, 1D/3D 共用)
LMDZ.MARS\libf\phymars\dyn1d\testphys1d.F90 (289 行, 1D 主程序)
LMDZ.MARS\libf\phymars\dyn1d\init_testphys1d_mod.F90 (850 行, 1D 初始化)
类型
配置——控制 testphys1d (1D 物理列模式) 的初始条件、时间积分和物理参数化。
作用
testphys1d 是 LMDZ.MARS 的 1D 列模式,用于在单一大气柱中离线运行全部物理过程(辐射、湍流、凝结、微物理、尘埃、水循环等),不包含 3D 动力学。
源码依据(testphys1d.F90:28-46 注释):
PROGRAM useful to run physical part of the martian GCM in a 1D column
Can be compiled with a command like (e.g. for 25 layers) "makegcm -p mars -d 25 testphys1d" It requires the files "testphys1d.def" "callphys.def" and a 'run.def' file (containing a "INCLUDEDEF=callphys.def" line) and a file describing the sigma layers (e.g. "z2sig.def")
用途:
- 测试单个物理参数化(辐射、微物理、土壤等)在给定条件下的行为。
- 在无需运行完整 3D 动力学的情况下快速验证物理改动。
- 生成 1D 气候平衡解(如极冠、水循环的日-季平均剖面)。
文件加载链
源码依据(testphys1d.F90:110-146):
testphys1d.e
├── 读取 "run.def" (必须, 内含 INCLUDEDEF=callphys.def) ← 报错停止如果缺
├── 读取 "traceur.def" 获取示踪物名和数量 ← 报错停止如果缺
├── 如果 startfiles_1D=true:
│ ├── start1D.txt (ASCII 初始廓线, 可选)
│ └── startfi.nc (NetCDF 物理初始场, 可选)
└── 如果不存在 startfi.nc → 写一个新的 (physdem0/physdem1)
关键字段
run.def.1d(1D 专用)——通过 getin() 读取
源码依据:init_testphys1d_mod.F90 中 getin(...) 调用汇总。
| 字段 | 示例值 | 含义 | 影响模块 |
|---|---|---|---|
startfiles_1D |
.false. |
是否使用 1D 初始/重启文件 | 初始化分支 |
diagsoil |
.false. |
是否输出土壤诊断 | physdem1 |
day0 |
0 |
起始 sol(Ls=0 对应 0) | 日历 |
time |
0. |
起始地方时 (hours, 0-24) | 太阳位置 |
day_step |
48 |
每 sol 时间步数 | steps_per_sol |
ndt |
669 |
运行 sol 数 | 时间循环 |
psurf |
610. |
地表气压 (Pa) | 垂直坐标比例 |
tauvis |
0.2 |
610 Pa 参考尘埃可见光光学厚度 | dimradmars_mod |
latitude |
0. |
纬度 (°) | 太阳天顶角 |
albedo |
0.2 |
裸地反照率 | 辐射 |
inertia |
400 |
土壤热惯性 (SI) | 地表能量收支 |
u, v |
10., 0. |
地转背景风 (m/s) | 风场松弛 (1D) |
co2ice |
0. |
初始地表 CO₂ 冰 (kg/m²) | CO₂ 循环 |
watercaptag |
.false. |
地表是否有永久水冰盖 | 水循环 |
slope_inclination |
0. |
坡度倾角 (°, 0=水平, 90=垂直) | 坡向辐射 |
slope_orientation |
0. |
坡向 (°: 0=北, 90=东, 180=南, 270=西) | 坡向辐射 |
ctrl_h2ovap |
.false. |
是否强制大气水汽廓线 | 水循环 (1D 专用) |
relaxtime_h2ovap |
-1. |
水汽松弛时间 (s, <0 为强制) | 水循环 (1D 专用) |
ctrl_h2oice |
.false. |
是否强制大气水冰廓线 | 水循环 (1D 专用) |
relaxtime_h2oice |
-1. |
水冰松弛时间 (s, <0 为强制) | 水循环 (1D 专用) |
hybrid |
.true. |
是否使用混合垂直坐标 (vs sigma) | logic_mod |
ichoice |
5 (Seiff) |
初始温度廓线类型 (1-8) | profile_temp_mod |
tref |
200 |
参考温度 (K), 用于 ichoice=1/6/7 | 温度初始化 |
isin, pic, largeur, hauteur |
0, 26.522, 10, 30. | 高斯扰动参数 (ichoice=6/7) | 温度扰动 |
INCLUDEDEF=callphys.def |
— | 链到 callphys.def | 所有物理开关 |
callphys.def.GCM6(物理参数化开关,1D/3D 共用)
完整说明见 config-system.md 与 xios-config.md。以下列出 1D 运行中实际生效的关键字段(源码依据:callphys.def.GCM6:58-168):
| 类别 | 关键字段 | 默认值 | 1D 影响 |
|---|---|---|---|
| 辐射 | callrad |
.true. |
辐射传输 |
| 辐射 | callnlte, nltemodel |
.true., 0 |
NLTE 15μm 方案 |
| 湍流 | calldifv, calladj, calltherm, callrichsl |
.true.×4 |
PBL、对流调整、热泡 |
| 凝结 | callcond |
.true. |
CO₂ 凝结 |
| 土壤 | callsoil |
.true. |
土壤热传导 |
| 重力波 | calllott, calllott_nonoro |
.true., .true. |
1D 仍可调用 |
| 尘埃 | dustbin=2, active=.true., doubleq=.true., lifting=.true., rdstorm=.true., topflows=.true. |
— | 完整尘埃循环 |
| 水循环 | water=.true., microphys=.true., caps=.true., activice=.true. |
— | 完整水循环 |
| 化学 | photochem=.false. |
关闭 | 可选开启 |
| 热层 | callthermos, callconduct, callmoldiff, calleuv |
.false.×4 |
1D 极少开启 |
被读取的位置
| 读取例程 | 文件 | 说明 |
|---|---|---|
getin |
libf 通用 (ioipsl) |
读取 run.def 所有 name=value 字段 |
init_testphys1d |
libf/phymars/dyn1d/init_testphys1d_mod.F90:7 |
主入口,调用 getin() 读取 1D 专有字段,打开 traceur.def |
conf_phys |
通过 callkeys_mod |
读取物理开关 |
physdem0 / physdem1 |
phyredem |
当无 startfi.nc 时生成初始 startfi |
physiq |
libf/phymars/physiq_mod.F |
每时间步调用 3D 物理主入口(1D 复用) |
1D 与 3D 的差异(源码依据:
testphys1d.F90:199-232,234-260):
- 风场:不使用 Coriolis 力,而是向地转风
(gru, grv)做松弛,时间尺度1e4秒(第 206-207 行)。- 水示踪物:
ctrl_h2ovap/ctrl_h2oice为真时,物理计算的倾向被覆盖或松弛到qref_h2ovap/qref_h2oice廓线(第 214-232 行)。- 地表气压:物理倾向
dpsurf直接加到psurf(3D 由动力学保证守恒)。
影响的计算流程
| 主题 | 影响 |
|---|---|
| 辐射 | callrad + callnlte + tauvis 共同决定 1D 大气的日变化辐射加热 |
| 尘埃循环 | dustbin, doubleq, lifting, rdstorm, topflows 开启完整尘埃物理 |
| 水循环 | water + microphys + caps + ctrl_h2ovap/ctrl_h2oice 决定水循环闭环方式 |
| CO₂ 循环 | callcond + co2ice 初始值 + psurf 决定 CO₂ 凝结/升华 |
| 土壤 | callsoil + inertia + 土壤分层 (comsoil_h) 决定地表热惯量 |
| 对流/边界层 | calldifv + calladj + calltherm + callrichsl + u/v 决定垂直混合 |
| 重力波 | calllott + calllott_nonoro 影响高层大气耗散 |
ichoice 温度初始廓线选项(1-8)
源码依据(run.def.1d:68-87):
| ichoice | 类型 | 说明 |
|---|---|---|
| 1 | 常数 | T = tref |
| 2 | Savidjari | 类 Seiff 但 dT/dz = cte |
| 3 | Lindner | 极区廓线 |
| 4 | inversion | 逆温 |
| 5 | Seiff | 标准廓线(基于 Viking 进入数据),默认推荐 |
| 6 | 常数 + 高斯扰动 (levels) | 在 pic (层数) 处加扰动,宽度 largeur,幅度 hauteur |
| 7 | 常数 + 高斯扰动 (km) | 在 pic (km) 处加扰动 |
| 8 | ASCII 读取 | 从文件 profile_temp 逐层读取一列温度值 |
复现要求
run.def必须物理存在且含INCLUDEDEF=callphys.def行(源码依据:testphys1d.F90:114-120):否则getin无法解析callphys.def字段,程序停止。traceur.def必须存在(源码依据:init_testphys1d_mod.F90:180-186):第一行为示踪物数量 nq,后续每行一个示踪物名。同位素可用tname tnom_transp格式声明父-子关系。day_step必须整除output_per_sol(源码依据:callphys.def.GCM6:7与time_phylmdz_mod):否则输出步与物理步不匹配。ndt与day_step决定总时间步数(源码依据:init_testphys1d_mod.F90):总步数 =ndt * day_step。hybrid=.true.与 3D 一致(源码依据:run.def.1d:63):1D 必须使用与 3D 相同的垂直坐标定义(来自z2sig.def)。- 水循环松弛设置(源码依据:
run.def.1d:54-61):ctrl_h2ovap=.true.+relaxtime_h2ovap<0→ 强制到profile_ref_h2o_vap文件廓线。ctrl_h2ovap=.true.+relaxtime_h2ovap≥0→ 指数松弛。ctrl_h2ovap=.false.→ 完全由物理决定。
ichoice=5(Seiff) 是标准初始廓线(源码依据:run.def.1d:77注释:standard profile, based on Viking entry)。- 复现风险:1D 风场采用向地转风
(gru, grv)的 1e4 秒松弛而非 3D Coriolis 力(源码依据:testphys1d.F90:199-208注释:"For some tests: No coriolis force at equator")。此简化使得 1D 高层风场可能与 3D 不同。 - 复现风险:
psurf在 1D 中每时间步由物理倾向dpsurf直接累加(testphys1d.F90:254),没有 3D 动力学的守恒修正;长 run 可能出现质量漂移。 - 复现风险:
callphys.def.GCM6中nonoro_gwd_*参数在 1D 仍可被调用(testphys1d.F90:194调physiq),但其参数化假设水平不均匀,1D 结果物理解释需谨慎。 - 复现风险:当
startfiles_1D=.false.且无startfi.nc时,程序调用physdem0/physdem1自动生成一个 startfi(源码依据:testphys1d.F90:152-159),其内部字段值由 1D 参数决定,复现时若修改albedo/inertia/tauvis必须重新生成 startfi。
已核验输入格式与运行边界
profile_ref_h2o_vap/profile_ref_h2o_ice不从datadir搜索,而是在当前运行目录按字面文件名打开;init_testphys1d_mod.F90:794-801和823-830逐层读取nlayer行,文件缺失或行数不足都会停止。start1D.txt的 ASCII 格式可由 writerestart1D_mod 写出的restart1D.txt反推;复用时仍需保证 tracer 顺序、nslope和nlayer一致。profile_temp文件只在ichoice>=8时需要,profile_temp_mod.F90:184-190按运行目录下的字面文件名逐行读取nlev=nlayer+1个温度值;样例文件未随deftank提供时,应由用户运行目录自行放置。ndt在init_testphys1d_mod.F90:74声明为integer,getin("ndt",ndt)读取后先表示 sol 数,再在init_testphys1d_mod.F90:309乘以day_step转为总物理步数;配置中应写整数 sol 数。
相关页面
- config-system.md:GCM def 配置体系总览(含 run.def / callphys.def / traceur.def 格式说明)。
- xios-config.md:XIOS 输出配置(1D 可选启用)。
- z2sig-config.md:垂直坐标定义(1D 通过
z2sig.def决定 nlayer)。 - radiation.md / dust-cycle.md:物理主题(1D 可独立测试)。