dyn1d/read_profile_mod.F90

路径

LMDZ.MARS\libf\phymars\dyn1d\read_profile_mod.F90

文件定位

read_profile_mod.F90 是 1D testphys1d 初始化路径的 tracer 初始廓线读取模块。它根据 infotrac 中的 tname 逐个寻找运行目录下的 profile_<tracer> ASCII 文件,把地表储量和大气层混合比写入 qsurfq。缺少文件时,它为 CO2、HDO 和尘埃提供特殊默认初始化,其余 tracer 保持 0。

本文件只处理 tracer 廓线;温度廓线由 profile_temp_mod 单独生成。

定义的符号

符号 类型 行号 作用
read_profile_mod module 1 包装 1D tracer profile 读取例程。
read_profile subroutine 39-207 读取 profile_<tracer> 文件,填充 qsurf(nb_tracer)q(nb_layer,nb_tracer),并处理缺文件默认值。

接口

实参 方向 维度/单位 说明
nb_tracer 输入 integer traceur.def 读取出的 tracer 数量。
nb_layer 输入 integer 大气层数。
qsurf(nb_tracer) 输出 kg m-2 每个 tracer 的地表储量或地表值;先整体置 0。
q(nb_layer,nb_tracer) 输出 kg kg-1 atmosphere 每层 tracer 混合比;先整体置 0。
play(nb_layer) 输入 Pa 层中压力;尘埃 Conrath 默认廓线使用。

使用的模块状态

模块 符号 用途
infotrac tname 当前 1D tracer 名称列表;用于构造文件名和识别特殊 tracer。
tracer_mod igcm_co2, igcm_h2o_vap, igcm_h2o_ice, igcm_dust_number, igcm_dust_mass, igcm_ccn_number, igcm_ccn_mass 当对应 profile_* 文件存在时,写入这些物理 tracer 索引。
aeropacity_mod topdustref Conrath dust 默认廓线的垂直尺度参数。
dust_param_mod odpref Conrath dust 默认廓线使用的参考压力。
comcstfi_h pi lifted dust 质量到数浓度换算。

文件格式

对每个 tracer 名 trim(tname(iq)),例程尝试打开:

profile_<tracer>

文件存在时的读取顺序是:

line 1             qsurf(iq)
line 2..nb_layer+1 q(1:nb_layer, iq)

util/extractcolumnfor1D.F90 生成同名文件时也按这个顺序写:先写 surface 值,再逐层写变量值;如果找不到 surface 变量,则用第一层大气值代替 surface。

主流程

  1. q(:,:)qsurf(:) 置 0,并清空本地 name_tracer
  2. 扫描 tname,记录 h2o_vap/h2o_ice/hdo_vap/hdo_ice/dust_mass/dust_numbernb_tracer 维中的位置。
  3. 对每个 tracer:
    • 打印 tracer 名。
    • 打开 profile_<name>
    • 若打开成功,先读 qsurf(iq),再读 nb_layerq(ilayer,iq)
    • 若 tracer 名是 co2/h2o_vap/h2o_ice/dust_number/dust_mass/ccn_number/ccn_mass,在文件存在分支中同步写入对应 tracer_mod::igcm_* 索引。
    • 若打开失败,打印 warning,再按 tracer 名进入缺文件默认分支。
  4. 所有 tracer 扫描结束后,若 HDO 或 dust 标志被置位,再统一派生缺失的 HDO 或尘埃廓线。

缺文件默认值

tracer 行为
co2 q(:,co2)=0.95qsurf(co2) 仍保持初始 0。
hdo_vap 设置 hdo_vap=.true.,循环结束后若存在 h2o_vap,令 q(:,hdo_vap)=q(:,h2o_vap)*2*155.76e-6*5
hdo_ice 设置 hdo_ice=.true.,循环结束后若存在 h2o_ice,令 qsurf(hdo_ice)q(:,hdo_ice) 等于对应 H2O ice 的 2*155.76e-6*5 倍。
dust_massdust_number 设置 dust=.true.,循环结束后用 Conrath dust 默认廓线同时写 dust_massdust_number
其他 tracer 保持初始化的 q=0qsurf=0

Conrath dust 默认廓线

dust=.true. 时,源码先固定 lifted dust 参数:

nueff_lift = 0.5
reff_lift  = 3.e-6 m
rho_dust   = 2500 kg m-3

再计算:

varian = sqrt(log(1 + nueff_lift))
r3n_q = exp(-4.5*varian**2) * (3/4) / (pi*rho_dust)
ref_r0 = exp(2.5*varian**2)
r0_lift = reff_lift/ref_r0
mass2number_lift = r3n_q/r0_lift**3
zp = (odpref/play(ilayer))**(70/topdustref)
q(dust_mass) = max(exp(0.007*(1 - max(zp,1))), 1.e-3)
q(dust_number) = q(dust_mass) * mass2number_lift

这里 play 是层中压力;压力越低时 zp 增大,指数项降低,但质量混合比有 1.e-3 下限。

调用关系

方向 符号/文件 说明
调用方 init_testphys1d_mod start1D.txt 时调用 read_profile(nq,nlayer,qsurf(1,:,1),q,play),再把 qsurf 复制到所有 slope。
生成同格式文件 extractcolumnfor1D 从 GCM NetCDF 输出抽取单柱变量,写 profile_<var> 文件供 1D 初始化使用。
相邻温度初始化 profile_temp_mod 温度 profile 独立生成;不经过本例程。

复现要点

  1. profile_<tracer> 文件名直接来自 tname,包括大小写和下划线;文件名不做别名映射。
  2. 文件第一行是 qsurf,不是第一层大气值;这与 extractcolumnfor1D 的写出格式一致。
  3. 缺文件并不会停止,除了后续特殊初始化可能因缺少对应 tracer 索引而出错;普通 tracer 缺文件就是全 0。
  4. tracer_mod::igcm_* 索引只在对应 profile 文件存在时写入;若 CO2 或 H2O 文件缺失,索引是否已由其他初始化路径设置需结合 tracer_modinit_testphys1d_mod 复核。
  5. 若只配置了 dust_mass 或只配置了 dust_number,但缺文件触发 dust=.true.,源码仍会写两个 dust 索引;缺失另一 tracer 名时存在越界风险。
  6. HDO 派生依赖主同位素索引存在;若 hdo_vap 缺文件但没有 h2o_vap tracer,源码不会派生 HDO vap,保持 0。

待确认

相关页面