conf_phys.F

路径

LMDZ.MARS\libf\phymars\conf_phys.F

所属目录 / 模块

libf\phymars

文件定位

conf_phys.F 定义 conf_phys_mod 模块(第 1 行)和 conf_phys(ngrid,nlayer,nq) 子程序(第 7 行),是 Mars PCM 物理参数化的运行时配置入口。它不计算物理 tendency;它的职责是在物理初始化阶段读取 run.def/callphys.def 风格的配置键,写入 callkeys_moddust_param_moddimradmars_moddatafile_modtime_phylmdz_mod 等共享状态,并在同一个入口内执行大量依赖/互斥校验。

从源码结构看,配置流程分三段:非 MESOSCALE 分支先读取动力-物理共享调度键(第 101-129 行),随后检查并读取 callphys.def(第 133-1291 行),最后给长波辐射设置默认值并可选读取 radia.def 覆盖(第 1304-1381 行)。因此,复现实验时不能只保存 callphys.def;还要记录源码默认值、是否存在 radia.def、以及编译宏 MESOSCALE 对默认值和 bcast 路径的影响。

定义的符号

符号 类型 行号 作用
conf_phys_mod module 1 物理配置读取模块,包含 conf_phys
conf_phys subroutine 7 读取运行时配置,设置物理开关和共享参数,并执行配置一致性检查。
modname local character parameter 85 传给 abort_physic 的错误定位名。
old_flag local real 82 检查废弃配置键,例如 ecritphyalbedo_h2o_ice
callg2d local logical 94 radia.def 读取的废弃未用标志;源码注释说明可能从 radia.def 读到。

依赖的模块

use 模块 only 列表 用途 待确认
ioipsl_getin_p_mod getin_p 读取配置键并覆盖源码默认值。
callkeys_mod startphy_file, callrad, water, co2clouds, callthermos 等大量开关 本文件最主要的写入目标;保存全局物理开关和运行时参数。
time_phylmdz_mod steps_per_sol, outputs_per_sol, iphysiq, ecritstart, daysec, dtphys, slow_diagfi 物理步长、输出频率、restart 输出频率和诊断输出节奏。
dimradmars_mod naerkind, name_iaer, ini_scatterers, tauvis 设置辐射气溶胶种类数、名称表和可见光参考尘埃光学厚度。
dust_param_mod dustbin, doubleq, active, lifting, freedust, dustscaling_mode, reff_driven_IRtoVIS_scenario 尘埃循环配置枢纽;本文件设置 bin 数、双矩尘埃、起尘、自由尘埃和辐射缩放模式。
aeropacity_mod iddist, topdustref 尘埃垂直分布类型和自定义顶高。
datafile_mod datadir 外部数据根目录,供下游读光学表、尘埃场景、化学和云表。
wstats_mod, write_output_mod, writediagsoil_mod callstats, output_diagfi, diagsoil 控制 stats.ncdiagfi.ncdiagsoil.nc 输出。
tracer_mod nuice_sed, ccn_factor, nuiceco2_sed, nuice_ref, nuiceco2_ref 读取水冰/CO2 冰沉降方差和 CCN 因子。
surfdat_h 水冰/CO2 极冠反照率、霜阈值、热惯量等 设置地表冰、霜和极冠相关参数。
co2condens_mod, calchim_mod scavco2cond, ichemistry CO2 凝结清除和光化学调用频率。
paleoclimate_mod, comsoil_h, microphys_h 古气候、土壤吸附、水冰接触参数 读取古气候、吸附和云微物理参数,并校验依赖。
dust_coagulation_mod, nonoro_gwd_mix_mod, lwxn_mod 尘埃凝并、非地形 GW 混合、长波参数 读取对应过程开关或默认参数。
tracer_mass_fixer_dyn_mod, moldiff_MPF_mod call_mass_fixer_dyn, call_mass_fixer_moldiff_MPF 读取 tracer 质量修正开关。
mod_phys_lmdz_transfert_para bcast 非 MESOSCALE 并行路径下广播文件存在性、radia.def 读入值等。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
getin_p ioipsl_getin_p_mod 第 101 行起,多处 读取配置键。调用前通常先写入源码默认值,再允许配置覆盖。
bcast mod_phys_lmdz_transfert_para 第 143、1371-1381 行 非 MESOSCALE 并行路径广播 callphys.def/radia.def 读取结果。
abort_physic 外部错误处理入口 多处,例如第 104、311、342、893、1225-1280、1290 行 配置冲突、废弃键或缺失配置文件时终止运行。
ini_scatterers dimradmars_mod 第 1064 行 在知道 naerkind 后分配辐射气溶胶数组。

输入

输入 来源 类型/维度 单位 含义
ngrid conf_phys 实参 integer scalar 网格列数 传给 ini_scatterers 分配气溶胶数组。
nlayer conf_phys 实参 integer scalar 垂直层数 传给 ini_scatterers
nq conf_phys 实参 integer scalar tracer 数 控制是否安全写入 name_iaer(2:)
run.def 风格键 getin_p scalar 混合 非 MESOSCALE 分支读取 outputs_per_sol, slow_diagfi, iphysiq, ecritstart 等。
callphys.def 当前运行目录 formatted file - 必须存在;不存在则第 1289-1291 行终止。
radia.def 当前运行目录 formatted file - 可选长波辐射调参文件;存在时覆盖 callemis, iradia, ilw*, lwxn_*, semi 等。
编译宏 MESOSCALE 预处理 compile-time - 改变若干默认值并跳过非 MESOSCALE 的 bcast 路径。

输出

输出 去向 类型/维度 单位 含义
callkeys_mod 开关 下游物理过程 saved scalars 混合 辐射、尘埃、水循环、CO2、PBL、高层大气等主开关。
dust_param_mod 状态 尘埃循环 scalar/module variables 混合 尘埃 bin、双矩尘埃、起尘、自由尘埃和缩放模式。
dimradmars_mod::naerkind/name_iaer 辐射和光学属性路径 integer + character array - 定义气溶胶种类数和名称顺序,供 suaer/aeroptproperties/updatereffrad 等使用。
time_phylmdz_mod 调度量 物理调度、输出和 restart scalar steps / seconds 物理调用频率、输出频率、restart 间隔。
datafile_mod::datadir 数据读取模块 character path 外部数据根目录。
诊断输出开关 wstats_mod, write_output_mod, writediagsoil_mod logical - 控制 stats.ncdiagfi.ncdiagsoil.nc 是否写出。
终端日志 stdout text - 打印每个关键配置值和警告。

共享状态与副作用

核心逻辑

  1. 进入 conf_phys 后,在非 MESOSCALE 分支读取物理输出和调用频率。废弃键 ecritphy 若存在会立即终止;outputs_per_sol 还必须整除 steps_per_sol
  2. OpenMP master 检查 callphys.def 是否存在,非 MESOSCALE 时广播 ierr。不存在则在第 1289-1291 行终止。
  3. 对每个配置项先写源码默认值,再调用 getin_p。例如 iaervar=8callrad=.true.calldifv=.true.callsoil=.true.dustbin=0water=.false.co2clouds=.false.callthermos=.false.
  4. 读取并校验主物理开关:辐射/NLTE/NIR、垂直扩散、热羽流、干对流、Yamada4/ATKE、CO2 凝结、土壤、地形/非地形重力波、尘埃注入、古气候、水循环、CO2 云、吸附和热层。
  5. 尘埃逻辑先设置 dustbin/active/doubleq/submicron/lifting/freedust/dustscaling_mode,再校验组合。例如 active 需要 doubleqsubmicron 需要双矩尘埃,freedust 需要 dustbin > 0dustinjection=1 需要 liftingfreedust
  6. dustiropacity 只接受 tesmcstesdustrefir=9.3E-6mcs21.6E-6;若启用 reff_driven_IRtoVIS_scenario,源码要求使用 tes 参考波长。
  7. 水/CO2 云逻辑读 sedimentation/activice/water/hdo/activeco2ice/CLFvarying/co2clouds/...,然后执行依赖检查:例如 activice 需要 wateractiveco2ice 需要 co2cloudsmicrophys 需要 waterdoubleqscavenging 需要 microphysdustbin >= 1
  8. naerkind 读取后先检查 activice 至少需要两个 scatterer,再调用 ini_scatterers。随后按 doubleq/activerdstormtopflowswater/activiceco2clouds/activeco2icesubmicron/active 的组合填充 name_iaer
  9. 高层大气逻辑读取 callthermos 及其子开关。若 callthermos=.false.,则 callconduct/calleuv/callmolvis/callmoldiff/thermochem 任一为真都会终止;最后还要求 photochemcallthermos 均依赖 water
  10. 主配置完成后,设置长波默认值:callemis=.true., ilwd=1, ilwn=1, ilwb=1, lwxn_linear=.true., lwxn_ncouche=3, lwxn_alphan=0.4, semi=0。若 radia.def 存在,则按固定顺序读取并覆盖这些值。

伪代码

subroutine conf_phys(ngrid, nlayer, nq):
    if not MESOSCALE:
        reject obsolete ecritphy
        read outputs_per_sol, slow_diagfi, iphysiq, ecritstart
        require outputs_per_sol divides steps_per_sol

    check callphys.def exists; broadcast result when parallel
    if missing: abort

    for each callphys key:
        assign source default
        getin_p(key, variable)
        print selected value
        enforce local dependency and incompatibility rules

    read naerkind
    require active water ice has enough scatterers
    ini_scatterers(ngrid, nlayer)
    fill name_iaer according to dust, water, CO2, storm, topflow flags

    require thermosphere child switches depend on callthermos
    require photochem and callthermos depend on water

    assign longwave defaults
    if radia.def exists:
        read fixed-order longwave overrides
        broadcast overrides when parallel
end subroutine

参与的主题流程

主题 参与方式
辐射 设置 callrad, callslope, callnlte, nltemodel, callnirco2, nircorr, iradia, rayleigh, naerkind, name_iaer 和长波 radia.def 覆盖。
尘埃循环 设置 iaervar, tauvis, iddist, topdustref, dustbin, doubleq, lifting, freedust, dustscaling_mode, dustinjection, rdstorm, topflows, dust_coagulation 等。
水循环 设置 water, activice, microphys, supersat, cloud_adapt_ts, scavenging, caps, 水冰反照率/霜阈值、热惯量和吸附相关开关。
CO2 循环 设置 callcond, co2clouds, activeco2ice, co2useh2o, CLFvaryingCO2, satindexco2, scavco2cond 和 CO2 冰沉降参数。
边界层 / 湍流 / 重力波 设置 calldifv, calltherm, calladj, callyamada4, callatke, callrichsl, calllott, calllott_nonoro, calljliu_gwimix
高层大气 / 化学 设置 photochem, ichemistry, callthermos, callconduct, calleuv, callmolvis, callmoldiff, thermochem, solvarmod, fixed_euv_value, solvaryear, euveff

写法特点

复现要点

待确认

相关页面