phyetat0_mod.F90

路径

LMDZ.MARS\libf\phymars\phyetat0_mod.F90

所属目录 / 模块

libf/phymars

文件定位

phyetat0_mod.F90 是物理初始状态读取和兜底初始化模块。它在 startphy_file=.true. 时打开 startfi.nc,通过 iostart 读取地表、土壤、坡面、云分数、热羽流、非地形重力波、tracer 表面储量、古气候和质量修正相关状态;在 startphy_file=.false. 时走无 startfi.nc 的学术/理想化初始化路径,给反照率、发射率、土壤地热通量和少量共享状态设置缺省值。

本文件不是物理倾向计算器,而是把 tabfiiostartsoil_settings 和多个共享状态模块串起来,决定一次运行从哪一个物理初始场和 restart 记忆状态开始。

定义的符号

符号 类型 行号 作用
phyetat0_mod module 1 物理初始状态读取模块
tab_cntrl_mod(100) saved module array 5 为 XIOS/动力控制表缓存行星、网格和时间控制参数
phyetat0 subroutine 13 读取或构造物理初始状态,填充调用方传入的物理状态数组和多个共享模块变量
ini_tab_controle_dyn_xios subroutine 961 把动力网格、物理常数和时间步参数写入 tab_cntrl_mod

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod noms 按 tracer 名称读取地表 tracer 字段 -
surfdat_h phisfi, albedodat, z0, z0_default, zmea, zstd, zsig, zgam, zthe, hmons, summit, base, watercaptag 读取或初始化地表位势、反照率、粗糙度、次网格地形和水冰标签 -
surfini_mod icelocationmode 缺少 watercaptag 时切换水冰定位模式 -
iostart nid_start, open_startphy, close_startphy, get_field, get_var, inquire_field, inquire_dimension, inquire_dimension_length 打开 startfi.nc、查询维度/字段并读取 NetCDF 初始场 -
nonoro_gwd_ran_mod du_nonoro_gwd, dv_nonoro_gwd 恢复非地形随机重力波动量记忆项 -
nonoro_gwd_mix_mod du_eddymix_gwd, dv_eddymix_gwd, de_eddymix_rto, df_eddymix_flx, dh_eddymix_gwd, dq_eddymix_gwd 恢复非地形重力波混合方案记忆项 -
tracer_mass_fixer_dyn_mod mass_predyn_*, found_startfi_*, call_mass_fixer_dyn 恢复动力 tracer 质量修正的前一步全局质量 -
compute_dtau_mod dtau 恢复尘埃光学厚度时间记忆 -
dust_rad_adjust_mod dust_rad_adjust_prev, dust_rad_adjust_next 恢复尘埃辐射调整前后状态 -
dust_param_mod dustscaling_mode 控制 tauscaling 缺省值 -
ioipsl_getin_p_mod getin_p 读取 run.def 中的 timestart 和无 startfi 缺省参数 -
comsoil_h flux_geo startfi.nc 时清零地热通量 -
comslope_mod nslope, major_slope 读取坡面分布并确定主坡面 bin -
paleoclimate_mod paleoclimate, h2oice_depth, co2ice_depth, coef_ssdif 读取或缺省初始化古气候地下冰状态 -
comcstfi_h pi no-startfi 路径下设置表面压力缺省值 -
geometry_mod latitude 南极古气候 CO2 冰缺省值判定 -
soil_settings_mod soil_settings 读取土壤层深、热惯量、土壤温度和土壤 tracer -
tabfi_mod tabfi 读取或构造物理控制表和初始日期 -
callkeys_mod startphy_file, rdstorm, hdo, CLFvarying, CLFfixval 控制是否读 startfi、沙尘暴地形字段、HDO 地表 tracer 和云分数路径 -
comcstfi_h g, mugaz, omeg, rad, rcp ini_tab_controle_dyn_xios 写控制表 -
time_phylmdz_mod hour_ini, daysec, dtphys ini_tab_controle_dyn_xios 写控制表 -
mod_grid_phy_lmdz nbp_lon, nbp_lat, nbp_lev ini_tab_controle_dyn_xios 写控制表 -

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
open_startphy iostart.F90 141 打开 startfi.nc
tabfi tabfi.F / tabfi_mod 145, 148 从文件或 no-startfi 路径读取/构造物理控制表
get_field iostart.F90 多处 读取网格场、地表场、三维场、土壤和 restart 记忆字段
get_var iostart.F90 多处 读取标量、时间轴和质量修正标量
getin_p ioipsl_getin_p_mod 242, 389, 558 读取 surfalbedo_without_startfitimestartsurfemis_without_startfi
abort_physic abort 多处 必需字段缺失或时间索引不合法时中止
ini_tab_controle_dyn_xios 本文件 435 填充 tab_cntrl_mod
soil_settings soil_settings.F 878 读取和插值土壤初始状态
close_startphy iostart.F90 文件末段 关闭 startfi.nc

输入

输入 来源 类型/维度 单位 含义
fichnom 调用方 character - 物理初始场文件名,常见为 startfi.nc
tab0 调用方 / tabfi real array - 物理控制表缓存
Lmodif 调用方 integer - tabfi 的修改/读取模式标志
nsoil, ngrid, nlay, nq, nqsoil 调用方 integer - 土壤层、物理格点、垂直层、tracer 和土壤 tracer 数量
startphy_file callkeys_mod logical - 是否读取 startfi.nc
timestart run.def / getin_p integer - 多时间初始场中选择的 Time 索引;缺省 -9999 表示最后一个时刻
surfalbedo_without_startfi run.def / getin_p real - 无 startfi 时的地表反照率
surfemis_without_startfi run.def / getin_p real - 无 startfi 时的地表发射率
CLFvarying, CLFfixval, rdstorm, hdo, paleoclimate callkeys_mod / paleoclimate_mod logical/real - 控制云分数、沙尘暴地形字段、HDO 和古气候 restart 字段路径

输出

输出 去向 类型/维度 单位 含义
tsurf, tsoil, emis, albedo, q2, qsurf, qsoil, co2ice, watercap, perennial_co2ice, totcloudfrac, wstar 等实参 physiq_mod.Fnewstart.F 等调用方 arrays 混合 物理初始状态、地表储量、土壤和 restart 记忆场
phisfi, albedodat, z0, zmea/zstd/zsig/zgam/zthe, hmons/summit/base, watercaptag surfdat_h module arrays 混合 地表位势、反照率、粗糙度、次网格地形和水冰标签
subslope_dist, major_slope comslope_mod module arrays/scalar - 次网格坡面分布和主坡面索引
dtau, tauscaling, dust_rad_adjust_prev/next dust 相关模块/调用方 arrays - 尘埃光学厚度和辐射调整 restart 状态
du_*, dv_*, dh_*, dq_*, de_*, df_* 非地形重力波模块 arrays - 随机 GW 和 eddy-mix GW 的记忆 tendency/flux
mass_predyn_*, found_startfi_* tracer_mass_fixer_dyn_mod scalars/logicals kg 或源码定义 动力 tracer 质量修正的 restart 标量和存在性标志
h2oice_depth, co2ice_depth, coef_ssdif, perennial_co2ice paleoclimate_mod / 调用方 arrays m 或源码定义 古气候地下冰和常年 CO2 冰状态
tab_cntrl_mod 本模块 / XIOS 控制表路径 real(100) 混合 网格、物理常数、时间步和初始时刻控制参数

共享状态与副作用

核心逻辑

  1. 根据 startphy_file 决定是否打开 startfi.nc,随后调用 tabfi。有 startfi 时从文件读控制表;无 startfi 时用空文件标识走理想化初始化。
  2. 如果 start 文件存在坡面定义,读取 def_slopesubslope_dist,归一化坡面分布并确定 major_slope;若无 startfi 且 nslope!=1,直接中止。
  3. 读取必需地表字段:phisfialbedodatZMEAZSTDZSIGZGAMZTHEtsurfemisq2 等。缺字段时按源码规则中止或给缺省值。
  4. 若存在 Time 维度,读取时间轴并用 timestart 选择 indextime;随后初始化 tab_cntrl_mod
  5. 读取尘埃、云分数、热羽流、地表温度/反照率/发射率、粗糙度、湍流能量和非地形重力波记忆场。
  6. call_mass_fixer_dyn 为真,读取 8 个主要大气成分的 mass_predyn_* 标量,只有字段存在且值大于 0 时才设置对应 found_startfi_*
  7. 按 tracer 名称读取 qsurfh2o_vap 读取 h2o_ice 地表 tracer,HDO 分支把 hdo_vap 映射到 hdo_iceco2 优先读 co2ice,其他缺失非 CO2 tracer 清零。
  8. 读取 watercapwatercaptag。没有 watercap 时把负的 h2o_ice 地表储量转移到 watercap 后清零;没有 watercaptag 时设置 icelocationmode=4
  9. 有 startfi 时调用 soil_settings 读取土壤状态;古气候字段存在时读取 h2oice_depthcoef_ssdifco2ice_depthperennial_co2ice,缺失时填源码缺省值。
  10. 关闭 startfi.nc,返回已填充的物理初始状态。

伪代码

phyetat0(fichnom, ...)
  if startphy_file:
    open_startphy(fichnom)
    tabfi(nid_start, Lmodif, ...)
  else:
    tabfi(0, 0, 0, ...)

  read or initialize slope distribution
  read required surface/orography fields or apply no-startfi defaults
  choose Time index from timestart if Time dimension exists
  ini_tab_controle_dyn_xios(day_ini)

  read dust scaling, dust radiative adjustment, dtau
  read cloud fraction, wstar, tsurf, albedo, emis, z0, q2
  read non-orographic gravity-wave restart memory
  read tracer-mass-fixer mass_predyn_* scalars when enabled

  for each tracer:
    map selected tracer names to surface storage field names
    read qsurf, abort only for missing CO2 surface state

  read watercap/watercaptag and soil settings
  read paleoclimate arrays or set defaults
  close_startphy when opened

ini_tab_controle_dyn_xios(idayref)
  tab_cntrl_mod(1:11,27) = grid sizes, constants, day/time controls

参与的主题流程

主题 参与方式
物理初始化 startfi.nc 或 no-startfi 缺省路径构造 physiq 首步需要的地表、土壤、tracer 和记忆状态
restart 兼容 对缺字段提供源码定义的 fallback,或在必需字段缺失时中止
次网格坡面 读取 def_slopesubslope_dist,归一化坡面分布并设置 major_slope
尘埃循环 恢复 tauscalingdtau 和尘埃辐射调整状态
水循环 / HDO 读取水冰地表储量、watercapwatercaptag,并处理 HDO 地表冰映射
CO2 循环 读取 co2ice 地表状态和古气候常年 CO2 冰字段
非地形重力波 恢复随机 GW 和 eddy-mix GW 记忆 tendency/flux
古气候 / lag-layer 初始化地下 H2O/CO2 冰深度和地下水扩散系数
XIOS/控制表 ini_tab_controle_dyn_xios 填充 tab_cntrl_mod 供控制表路径使用

写法特点

复现要点

待确认

相关页面