XIOS/write_field 输出封装组页
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\xios_writefield.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\write_field_phy.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\misc\write_field.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\misc\wxios.F90
Mars 运行参与度:条件经过。Mars 物理诊断默认路径常见于 phymars 自有 writediag*,但 COMMON 物理侧支持 XIOS 和 fallback write_field;启用相应编译/运行输出路径时经过。
文件清单
| 文件 | 行数 | 主要符号 | 作用 |
|---|---|---|---|
xios_writefield.F90 |
294 | xios_writefield2d, xios_writefield3d |
物理列 2D/3D 场临时创建 XIOS context/file/field 并发送;单文件细节见 xios_writefield。 |
write_field_phy.F90 |
37 | write_field_phy |
gather 物理列到全局,再 Grid1Dto2D_glo 并调用 misc:WriteField。 |
misc/write_field.F90 |
326 | WriteField, write_field1D/2D/3D |
老式 NetCDF 字段快速写出,维护字段名到 file index 的表。 |
misc/wxios.F90 |
664 | wxios_init, wxios_domain_param, wxios_set_cal 等 |
XIOS context、calendar、domain、axis、field 等包装;单文件细节见 wxios。 |
xios_writefield 流程
- generic
xios_writefield根据 rank 调用 2D 或 3D 版本。 - 检查字段是否已登记在
FieldName/FieldIt表中;首次字段会创建context_lmdz_<name>。 - root 读取
xios_writefield_nlon/nlat,广播到物理并行域。 - 初始化 XIOS context、D360 calendar、start/time origin 和 timestep。
- 根据
grid_type选择 regular lon-lat domain 或 unstructured domaingroup。 - 对 3D 字段额外创建 vertical axis。
- 每次写出前
Gather_omp,regular grid 还调用grid1Dto2D_mpi,最后xios_send_field。
write_field_phy 和 misc/write_field
write_field_phy是物理列到旧WriteField的桥:Gather(Field,New_Field)后只在 root 把 1D 物理列转成全局 2D 网格。misc/write_field.F90管理字段表:若名字不存在则CreateNewField,然后按 1D/2D/3D 维度写变量。- 文件名和变量名由字段名派生,
int2str支撑多字段编号。
复现要点
xios_writefield的 field/context 是按变量名懒创建;第一次调用和后续调用逻辑不同。- unstructured grid 且
output_native_grid为假时,field 的domain_ref会切到regular_domain,让 XIOS 做插值输出。 wxios_domain_param使用物理并行 gather/bcast 收集经纬度和 mask,再写入 XIOS domain。
待确认
- 本地 COMMON 与 LMDZ.MARS 源码未见
xios_writefield直接调用点;外部 physics 包或用户 patch 是否调用需另行确认。