XIOS 输出配置体系
路径
LMDZ.MARS\deftank\xios\iodef.xml (29 行, 根入口)
LMDZ.MARS\deftank\xios\context_pcm_physics.xml (94 行, 上下文)
LMDZ.MARS\deftank\xios\field_def_physics.xml (1344 行, 变量定义)
LMDZ.MARS\deftank\xios\file_def_physics.xml (239 行, 输出文件)
运行时 4 个文件必须同时存在于工作目录(源码依据:deftank/README:31-33)。
类型
输出配置——定义 GCM 物理过程的所有可通过 XIOS 输出的变量、输出文件格式和时间策略。
作用
源码依据(field_def_physics.xml:1-4 注释):
Definition of all existing variables that can be outputed from Martian physics
这四个 XML 文件是 LMDZ.MARS GCM 通过 XIOS 库(eXtensible Input/Output Server)将物理诊断量写入 NetCDF 文件的唯一配置入口。它们控制:
- 哪些变量可被输出(
field_def_physics.xml定义所有可用 field)。 - 变量写入哪些文件(
file_def_physics.xml组合 field 成 output file)。 - 输出频率和聚合方式(instantaneous / average / minimum / maximum)。
- 空间轴和网格定义(
context_pcm_physics.xml定义 dom_glo、altitude、presnivs 等)。 - XIOS 运行时参数(
iodef.xml控制 buffer、server 模式、日志级别)。
4 个文件的关系
iodef.xml (根入口, XIOS context)
├── context id="xios" ← buffer/server/verbosity 参数
└── context id="LMDZ" (src="./context_pcm_physics.xml")
├── domain_definition ← dom_glo 2D rectilinear
├── axis_definition ← altitude, presnivs, soil_layers, interlayer, ...
├── scalar_definition
├── grid_definition ← grid_3d, grid_soil, grid_2d, scalarpoint, ...
├── field_definition (src="./field_def_physics.xml") ← 所有可用变量
└── file_definition (src="./file_def_physics.xml") ← 输出文件组合
关键字段
iodef.xml(XIOS 运行时参数)
| 字段 | 示例值 | 含义 | 影响 |
|---|---|---|---|
print_file |
true |
是否将 XIOS 自身日志写入独立文件 | XIOS 调试 |
buffer_size |
85000000 |
输出缓冲区大小(字节) | 内存占用/性能 |
buffer_server_factor_size |
2 |
服务端缓冲倍数 | detached server 模式 |
using_server |
false |
是否使用 detached server/client 模式 | MPI 拓扑 |
info_level |
100 |
XIOS 日志级别(0=无, 100=详细) | 调试输出 |
源码依据:iodef.xml:6-23。
context_pcm_physics.xml(空间轴与网格)
| 轴/网格 | 单位 | 含义 | 设置位置 |
|---|---|---|---|
altitude |
km | 模型层伪高度(由 z2sig.def 决定) |
代码中 wxios_add_vaxis |
presnivs |
Pa | 层中点气压 | 代码中 xios_set_axis_attr |
interlayer |
km | 界面层高度(= altitude 层数 +1) | 代码 |
soil_layers |
m | 土壤层深度 | 代码 |
subslope |
— | 亚格点坡度分类 | 代码 |
controle_axe |
— | 控制向量(n_glo=100) | 静态 |
dom_glo |
— | 全球 2D rectilinear 域 | 静态 |
grid_3d / grid_2d / grid_soil / scalarpoint |
— | 组合网格 | 切换 axis id 可改输出轴为 presnivs |
源码依据:context_pcm_physics.xml:6-86;轴值在代码中由 xios_output_mod.F90:55-66 的 xios_set_axis_attr 调用设置。
复现要点:
context_pcm_physics.xml:46-50的grid_3d默认使用altitude轴;若改为presnivs(注释行已预留),所有 3D 输出将变为气压坐标。
field_def_physics.xml(变量定义)
所有变量按 4 个 field_group 组织(源码依据:XML 结构):
| field_group | grid_ref | 变量数 | 主要主题 |
|---|---|---|---|
fields_0D |
scalarpoint |
~50 | Ls、逃逸通量(H/H₂/D)、示踪物全球质量(化学 + 离子)、CO₂ 守恒 |
fields_2D |
dom_glo |
~250 | 地表(ps/tsurf/albedo/emis)、辐射通量、尘埃循环、水循环、CO₂ 循环、热参数、亚表层示踪、坡度变体(slope01-07) |
fields_3D |
dom_glo + altitude |
~350 | 温度/风/密度/气压、加热率(dtrad/sw/lw/q15um/nir/uv/cond)、所有示踪物(CO₂/H₂O/化学/离子)的 mass/vmr/num、尘埃/风暴/山顶尘埃参数、水云、CO₂ 凝结 |
fields_soil |
dom_glo + soil_layers |
~50 | 土壤温度(含 7 个 slope 变体)、热惯性、水密度、亚表层水汽饱和、吸附水、扩散系数 |
变量定义通用属性(源码依据:field_def_physics.xml:6-8):
<field_definition prec="4" freq_op="1ts" enabled="true">prec="4":单精度(4 字节)freq_op="1ts":默认操作频率 = 1 个物理时间步enabled="true":默认启用(但需被 file_def 引用才实际输出)
重复 field id 现象:XML 中存在多个重复 id(如 mass_o2plus/mass_coplus 在第 106、112-116 行重复;h2o_ice_s 第 481-486 行;IRtoVIScoef 第 336-341 行;rdsdustN 第 1128-1133 行)。推断:XIOS 可能用最后一次定义覆盖,或是历史合并冲突遗留。
file_def_physics.xml(输出文件)
6 个预定义输出文件,仅 File 1 默认启用(源码依据:各 <file enabled=...> 属性):
| 文件 | id | output_freq | 操作 | 状态 | 主要用途 |
|---|---|---|---|---|---|
| 1 | histins |
12ts |
instant | enabled | 标准瞬时输出(每 12 物理时间步) |
| 2 | diurnalave |
1d |
average | disabled | 日平均气象场 |
| 3 | outdaily4pem |
1d |
average | disabled | 亚表层冰(PEM)日平均(无坡度) |
| 4 | outyearly4pem |
1y |
average + minimum | disabled | PEM 年平均 + CO₂/水冰年最小(无坡度) |
| 5 | outdaily4pem_s |
1d |
average | disabled | PEM 日平均(含 7 坡度) |
| 6 | outyearly4pem_s |
1y |
average + minimum | disabled | PEM 年统计(含 7 坡度) |
File 1 (histins) 输出的变量(源码依据:file_def_physics.xml:10-52):
| 类别 | 变量 |
|---|---|
| 0D | Ls |
| 2D | area(once), ps, tsurf, co2ice, fluxsurf_dn_sw(as ISR), fluxtop_lw(as OLR) |
| 3D | temp, u, v, dustq, dustN, h2o_vap, h2o_ice |
| soil | soiltemp(as tsoil), inertiedat |
Field 引用别名:<field field_ref="fluxsurf_dn_sw" name="ISR" /> 允许输出时用 ISR 替代原 field id,方便后处理。
操作类型:
instant:每freq_op输出一帧瞬时值average:在output_freq周期内平均minimum:在output_freq周期内取最小
被读取的位置
| 读取例程 | 文件 | 说明 |
|---|---|---|
| XIOS 库自身 | 外部库(LMDZ.COMMON 通过 USE xios 链接) |
运行时解析 iodef.xml |
initialize_xios_output |
libf/phymars/xios_output_mod.F90:19 |
初始化轴、域、日历、关闭定义阶段 |
send_xios_field |
libf/phymars/xios_output_mod.F90:12 |
发送 0D/1D/2D/3D 场到 XIOS |
write_output |
libf/phymars/write_output_mod.F90:28+ |
通过 xios_is_active_field 检查变量是否在某个 file_def 中被引用,再决定是否发送 |
finalize_xios_output |
libf/phymars/xios_output_mod.F90:155 |
关闭 XIOS 上下文 |
源码依据(
write_output_mod.F90:46-49注释): "only send the field to xios if the user asked for it" — 这意味着仅在 field_def 中定义但未被任何 file_def 引用的变量不会被实际计算/发送,有性能优化作用。
影响的计算流程
| 主题 | 影响 |
|---|---|
| 尘埃循环 | dustq/dustN/dustliftday/rds_lapserate 等字段覆盖尘埃全生命周期诊断 |
| 水循环 | h2o_vap/h2o_ice/watercap/flux_ssice 等字段覆盖水汽/冰/亚表层水诊断 |
| CO₂ 循环 | co2ice/perennial_co2ice/co2condens_pdtc 等字段 |
| 辐射计算 | fluxsurf_lw/sw/fluxtop_lw/sw/dtrad/sw_htrt/lw_htrt 等 |
| 化学/离子 | c_co/c_o3/num_co2plus 等 ~70 个列密度和数密度字段 |
| 重力波 | nonoro_u_epflux_tot/du_nonoro_gwd 等非地形重力波诊断 |
| 亚表层冰 | fields_soil 组覆盖土壤温度/水密度/扩散/吸附 |
复现要求
- 4 个 XML 文件必须同名且同目录:
iodef.xml通过src="./context_pcm_physics.xml"相对路径引用上下文,context 又引用 field_def 和 file_def。任何改名都会导致 XIOS 初始化失败。 histins默认每 12 物理时间步:若iphysiq改变(run.def中),实际输出频率随之改变。重新实现后处理工具时必须识别output_freq="12ts"语义。- 3D 输出默认使用
altitude轴(context_pcm_physics.xml:49):后处理读取 NetCDF 时 z 轴单位是 km 而非 Pa;切换为气压坐标需编辑 XML。 buffer_size = 85 MB:若增加大量 field 或提高频率可能需要增大此值(源码依据:iodef.xml:12)。using_server=false为默认模式:MPI 拓扑与 detached server 模式完全不同,不能混用启动脚本。- field id 重复现象:
mass_o2plus、h2o_ice_s等 id 在 XML 中重复定义——XIOS 行为取决于库版本(推断:后定义覆盖前定义)。复现时若依赖这些字段,必须确认实际生效的是哪个定义。 - 复现风险:
file_def_physics.xml中 File 2-6 全部enabled="false"——若用户误启用多个文件且output_freq冲突,可能产生极大的重复输出。 - 复现风险:
field_def_physics.xml:46-50的注释<!--<axis id="presnivs" /> -->是切换输出垂直轴的唯一入口;若误操作同时启用两个 axis,XIOS 会报错。 - 复现风险:坡度变体(
_slope01到_slope07)仅在nslope > 1时被物理模块填充;若nslope = 1仍引用 slope 字段,输出全零。
已核验边界与外部依赖风险
- 重复 field id 是配置层事实:
field_def_physics.xml中mass_o2plus、IRtoVIScoef、h2o_ice_s、rdsdustN均出现重复field id(见第 106/112、336/339、481/484、1128/1131 行)。本仓库未包含 XIOS 解析器测试或固定版本说明,因此不要假设“静默覆盖”一定成立;生产运行前应先去重或用目标 XIOS 版本做一次最小启动测试。 - PEM 无坡度与坡度输出不应直接同时启用:
outdaily4pem与outdaily4pem_s的name同为xoutdaily4pem,outyearly4pem与outyearly4pem_s的name同为xoutyearly4pem(file_def_physics.xml:85-168)。若要同一运行启用两组文件,需要先改名,否则输出文件名冲突/覆盖行为取决于 XIOS 运行时。 using_server=true不是自包含开关:iodef.xml:17-19只声明 detached server/client 模式开关;仓库内未发现配套的 XIOS server 启动脚本。若启用该模式,需要在外部 MPI/XIOS 启动方式中提供 server 进程,不能只改 XML。presnivs切换只改变垂直轴引用,不改变 field id 语义:context_pcm_physics.xml:48-49在grid_3d内二选一引用presnivs或altitude;两个轴值都由xios_output_mod.F90:55-58在初始化时填充。file_def_physics.xml仍通过field_ref引用同一批 field,因此变量 id 不变,变化的是 3D 输出的垂直坐标物理含义和单位。
相关页面
- config-system.md:def 配置体系总览。
- z2sig-config.md:垂直网格定义(XIOS
altitude轴值的源头)。 - xios_output_mod:XIOS Fortran 封装模块。
- write_output_mod:
write_output统一接口。