param_read_e107.F

路径

LMDZ.MARS\libf\aeronomars\param_read_e107.F

所属目录 / 模块

libf\aeronomars

文件定位

param_read_e107.F 定义 param_read_e107_mod,提供热层 E107 参数读取例程 param_read_e107。它是当前源码中可见的热层参数初始化入口:physiq_mod.Fcallthermos 为真时先调用 fill_data_thermosallocate_param_thermosallocate_param_iono,再调用 param_read_e107

该例程把 datadir/EUVDAT/param_v6 下的柱含量、透过率/光吸收表、E10.7 拟合系数和 Mars-year E107 时间序列表读入 param_v4_h,并设置解离/电离效率表。与旧版 param_read 相比,本文件改用 param_v6/trans*.dat,新增 fit_js_e107.date107_MY*.dat 和 Schunk & Nagy (2000) 分支比文件,并显式支持 callkeys_mod::solvaryear 选择太阳活动年表。

定义的符号

符号 类型 行号 作用
param_read_e107_mod module 1(end module 554) 封装 E107 版热层参数读取例程
param_read_e107 subroutine 7(end subroutine 552) 读取 EUVDAT/param_v6 表格、E107 序列和电离分支比,初始化 param_v4_h 热层共享参数
filename local character*13 37 根据 solvaryear 构造 e107_MYxx.dat 文件名
ierr local integer 35 只用于 coln.dat 打开失败检测
nada local real 36 读取电离分支比文件第二列总电离效率的占位变量

依赖的模块

use 模块 only 列表 用途 待确认
param_v4_h c1_16,c17_24,c25_29,c30_31,c32..c36,t0,jabsifotsintpar,ninter,nz2,nabs,e107,date_e107,e107_tab,coefit0..coefit4,efdis*,efion*,fluxtop,ct1,ct2,p1,p2 写入热层 EUV 表、E107 拟合系数、时间序列和解离/电离效率 jfotsout/crscabsi2/co2crsc195/co2crsc295/ct1/ct2/p1/p2/e107 在本例程 use 列表中出现但未直接写入
datafile_mod datadir 拼接 EUVDAT/param_v6EUVDAT/*branchingratio* 文件路径 -
mod_phys_lmdz_para is_master 限定大部分文件 I/O 在 master 进程执行 -
mod_phys_lmdz_transfert_para bcast 广播 master 读入的数组到其他进程 efiono3p/efionn/efionno/efionh 在所有进程本地设置,未单独广播
callkeys_mod solvaryear 选择 e107_MYxx.dat 年表文件 错误提示写“24 and 37”,而条件允许 23..37

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
bcast mod_phys_lmdz_transfert_para 276-297, 410-415, 448-451, 479-482, 512-515 广播柱含量、透过率、E107 拟合/时间表和部分电离分支效率
open/read/close Fortran intrinsic 多处 读取 param_v6 表、E107 年表和分支比文件
write/STOP Fortran intrinsic 51-60, 260-263, 270 coln.datsolvaryear 不合法时中止;读取 E107 表时逐行打印调试信息

输入

输入 来源 类型/维度 单位 含义
datadir datafile_mod / callphys.def character path - 数据目录根路径
solvaryear callkeys_mod / callphys.def integer Mars year 选择 e107_MYxx.dat;源码条件允许 23..37
coln.dat datadir/EUVDAT/param_v6 ASCII table mixed 柱含量分组,反向写入 c1_16/c17_24/.../c36
trans*.dat datadir/EUVDAT/param_v6 ASCII tables mixed 13 个吸收体的 jabsifotsintpar(i,absorber,interval)
fit_js_e107.dat datadir/EUVDAT/param_v6 ASCII table - coefit0..coefit4(ninter,nabs) 多项式拟合系数
e107_MYxx.dat datadir/EUVDAT/param_v6 669 行时间序列 - date_e107(1:669)e107_tab(1:669)
co2/o2/n2/co ion_branchingratio_schunkandnagy2000_param.dat datadir/EUVDAT ASCII tables fraction CO2、O2、N2、CO 的总电离效率和通道相对比例

输出

输出 去向 类型/维度 单位 含义
c1_16,c17_24,c25_29,c30_31,c32..c36 param_v4_h real arrays over nz2 mixed 柱含量查找表
jabsifotsintpar param_v4_h real (nz2,nabs,ninter) mixed 各吸收体/区间的透过率或光吸收参数
t0 param_v4_h real (nz2) K 所有进程本地设为 195. 后广播
fluxtop param_v4_h real (ninter) - 所有进程本地设为 1. 后广播
coefit0..coefit4 param_v4_h real (ninter,nabs) - E10.7 到光吸收参数的多项式拟合系数
date_e107,e107_tab param_v4_h real (669) - E107 时间轴和表值
efdis* param_v4_h real (ninter) fraction 各物种解离效率
efionco2,efiono2,efionn2,efionco,efiono3p,efionn,efionno,efionh param_v4_h real arrays fraction 电离效率和通道分支

共享状态与副作用

核心逻辑

  1. master 打开 EUVDAT/param_v6/coln.dat,缺失则打印 datadir 修复提示并 STOP
  2. master 打开 26 个 trans*.dat 表,跳过两行表头,按 i=nz2..1 反向填入柱含量和 jabsifotsintpar
  3. master 关闭表文件;所有进程设置 t0(:)=195.fluxtop(:)=1.
  4. master 读取 fit_js_e107.dat:对每个 inter=1..ninter 先跳一行,再读 j=1..nabscoefit0..coefit4
  5. master 检查 solvaryear,构造 e107_MYxx.dat,读取 669 行 date_e107/e107_tab 并打印每行。
  6. 广播 t0/fluxtop、柱含量、jabsifotsintparcoefit0..coefit4date_e107/e107_tab
  7. 所有进程清零解离/电离效率数组,并硬编码 H2O、H2O2、O3、NO2、H2、O/N/H 等效率。
  8. master 分别读取 CO2、O2、N2、CO 的 Schunk & Nagy 分支比文件,用第二列总电离效率计算 efdis* = 1 - total_ionization,并把各通道相对比例乘上总电离效率。
  9. 每类分支比读取后广播对应 efion*efdis*,再对高区间解离效率设为 1。

伪代码

param_read_e107():
  if is_master:
    open param_v6/coln.dat with iostat, stop if missing
    open all trans*.dat tables, skip two header rows
    read coln.dat and trans*.dat from nz2 down to 1
    close table units

  t0(:) = 195
  fluxtop(:) = 1

  if is_master:
    read fit_js_e107.dat into coefit0..coefit4
    if solvaryear in 23..37:
      filename = "e107_MY"//solvaryear//".dat"
    else:
      print error; stop
    read 669 date/e107 rows into date_e107/e107_tab and print each row

  bcast table arrays and E107 arrays

  zero efdis*/efion*
  set hard-coded dissociation efficiencies
  for species in CO2, O2, N2, CO:
    if is_master:
      read species branching-ratio file
      derive efdis* and efion* channels
    bcast species efdis*/efion*
    set remaining high intervals to fully dissociated
  set O(3P), N, NO, H ionization efficiencies locally

参与的主题流程

主题 参与方式
热层初始化 physiq_mod.Fcallthermos 分支中调用本例程,载入热层 EUV/E107 参数
热层 EUV 加热 hrtherm/jthermcalc_e107 消费 fluxtopcoefit*date_e107/e107_tabjabsifotsintpar
热层化学/光化学 paramfoto_compact 注释说明会使用 jthermcalc_e107 光吸收率和本例程给出的 ionization/dissociation branching ratios

写法特点

复现要点

待确认

相关页面