IOIPSL getin 系统组页
输入范围
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\misc\ioipsl_getincom.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\misc\ioipsl_stringop.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\misc\ioipsl_errioipsl.F90
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\phy_common\ioipsl_getin_p_mod.F90
文件定位
ioipsl_getincom.F90 是无 IOIPSL 或本地 fallback 的 getin 实现,负责读取 .def 风格键值文件、保存 key 表、解析标量和数组。ioipsl_getin_p_mod.F90 位于 phy_common,把 getin 包装成并行安全的 getin_p:root 读取后广播到所有 MPI/OMP 参与者。
Mars 运行参与度:必经/条件经过。Mars 物理配置大量调用 getin_p;Mars 1D 和部分初始化工具直接调用 getin。datareadnc.F 也直接用 getin("datadir") 定位 surface.nc;该输入链见 Mars utility NetCDF 和 COMMON helper 边界。当编译使用 IOIPSL 时,getin_p 调 IOIPSL 的 getin;否则调本页的 ioipsl_getincom:getin。
主要接口
| 文件 | 行数 | 主要符号 | 作用 |
|---|---|---|---|
ioipsl_getincom.F90 |
1980 | getin, getin_dump |
标量/1D/2D integer/real/character/logical 配置读取和 dump;主文件页见 ioipsl_getincom。 |
ioipsl_stringop.F90 |
243 | 字符串操作 helper | 支撑 key/value 文本清洗、大小写和分隔处理。 |
ioipsl_errioipsl.F90 |
219 | ipslerr 等错误级别处理 |
根据错误级别打印 warning/error/fatal。 |
phy_common/ioipsl_getin_p_mod.F90 |
184 | getin_p generic |
root 上调用 getin,随后 bcast 标量或数组。 |
getin fallback 流程
- 首次调用触发
getin_read,分配文本、key 表和 typed memory。 getin_readdef逐个打开配置文件,跳过空行和注释,读取key = value。getin_decrypt判断 key 类型,把 integer/real/character/logical 值放入对应存储区。getin_checkcohe检查重复 key,源码注释和消息显示保留最后值。- 各
getin*specific procedure 按调用方变量类型和维度回填;找不到 key 时保持调用方默认值。 getin_dump可输出已读数据库,用于 abort 时或调试时复现配置来源。
getin_p 并行约定
- 每个 specific procedure 先执行
!$OMP BARRIER。 - 只有
is_mpi_root .AND. is_omp_root的线程调用getin。 - 标量直接
bcast(VarOut);character 1D 逐元素广播;integer/real/logical 数组调用对应bcast。 - 因此 Mars 并行物理配置读取必须保证
mod_phys_lmdz_mpi_data、mod_phys_lmdz_omp_data和 transfer/bcast 已初始化。
Mars 侧典型使用位置
phymars/conf_phys.F读取ecritphy、outputs_per_sol、iphysiq、tauvis、callrad、water、co2clouds等大量物理配置。dynphy_lonlat/phymars/datareadnc.F读取datadir,决定surface.nc的输入目录;NetCDF 读取本身仍走 Mars 侧直接NF_*API。phymars/aeropacity_mod.F、watercloud_mod.F、initracer.F90等使用getin_p获取局地风暴、微物理和 tracer 参数。- COMMON
dyn3d/conf_gcm.F90、dyn3dpar/conf_gcm.F90直接使用ioipsl_getincom或 IOIPSLgetin读取动力配置。
待确认
ioipsl_getincom.F90的文件来源、key 表、typed memory、getin_dump和错误边界已由 ioipsl_getincom 展开。