param_read.F
路径
LMDZ.MARS\libf\aeronomars\param_read.F
所属目录 / 模块
libf\aeronomars
文件定位
param_read.F 定义 param_read_mod,提供旧版 EUV 参数表读取例程 param_read。它只在 is_master 进程上从 datadir/EUVDAT/param_v5/ 读取光吸收截面、柱含量表、太阳通量周期参数、解离效率和电离效率,然后把结果写入 param_v4_h 的共享数组,并在 master 读完后通过 bcast 广播给其他进程。
该文件不直接计算光化学倾向;它的职责是把离线表格转成 param_v4_h::c1_16/c17_24/.../jabsifotsintpar/efdis*/efion*/fluxtop/ct*/p* 等全局参数,供热层 EUV 和光解相关例程复用。源码树中未发现 call param_read 的直接调用;当前已确认的热层路径主要调用 param_read_e107,因此本页按源码字面行为记录 param_read 本身,而不推断它在默认运行中的启用条件。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
param_read_mod |
module |
1(end module 433) |
包装 param_read 参数读取例程 |
param_read |
subroutine |
7(end subroutine 431) |
从 EUVDAT/param_v5 读取旧版 EUV/光解参数表并广播到 param_v4_h |
ierr |
local integer |
34 |
只用于 coln.dat 打开失败检测 |
nada |
local real |
35 |
读取 varflujo.dat 第 6 列的占位值 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
param_v4_h |
jfotsout, crscabsi2, c1_16, c17_24, c25_29, c30_31, c32, c33, c34, c35, c36, co2crsc195, co2crsc295, t0, jabsifotsintpar, ninter, nz2, efdisco2, efdiso2, efdish2o, efdish2o2, efdish2, efdiso3, efdiso, efdisn, efdish, efdisno, efdisn2, efdisno2, efdisco, efionco2, efionn2, efionco, efiono3p, efionn, efionno, efionh, fluxtop, ct1, ct2, p1, p2 |
目标共享参数数组;本例程主要写入柱含量、光吸收表、解离/电离效率和太阳通量周期参数 |
jfotsout/crscabsi2/co2crsc195/co2crsc295 在本例程未写入 |
datafile_mod |
datadir |
构造 EUVDAT/param_v5 数据文件路径 |
- |
mod_phys_lmdz_para |
is_master |
限定只有 master 进程执行文件 I/O |
- |
mod_phys_lmdz_transfert_para |
bcast |
把 master 读入的数组广播到其他进程 |
部分已写数组未见广播,见“待确认” |
调用的关键例程
| 被调用例程 |
所在模块 / 文件 |
调用位置 |
作用 |
bcast |
mod_phys_lmdz_transfert_para |
393-426 |
广播读入或设置后的 param_v4_h 数组 |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
datadir |
datafile_mod / callphys.def 的 datadir 键 |
character path |
- |
数据目录根路径,例程拼接 EUVDAT/param_v5/*.dat |
nz2 |
param_v4_h |
integer |
- |
表格垂直层数;读取循环按 nz2,1,-1 反向填数组 |
ninter |
param_v4_h |
integer |
- |
EUV 光谱区间数;控制效率数组和 fluxtop 初始化 |
coln.dat |
datadir/EUVDAT/param_v5 |
ASCII table |
mixed |
柱含量分组 c1_16/c17_24/c25_29/c30_31/c32..c36 |
j*.dat |
datadir/EUVDAT/param_v5 |
ASCII tables |
mixed |
各物种/通道的 jabsifotsintpar(i,species,interval) 光吸收参数 |
varflujo.dat |
datadir/EUVDAT/param_v5 |
ASCII table |
- |
11 年太阳通量变化参数 ct1/p1/ct2/p2 |
efdis_inter.dat |
datadir/EUVDAT/param_v5 |
ASCII table |
- |
CO2、O2、NO 在部分区间的解离效率 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
c1_16, c17_24, c25_29, c30_31, c32..c36 |
param_v4_h |
real arrays over nz2 |
mixed |
coln.dat 中的柱含量或区间聚合列 |
jabsifotsintpar |
param_v4_h |
real (nz2, species, interval) |
mixed |
各物种/光谱区间的光吸收参数表 |
t0 |
param_v4_h |
real (nz2) |
K |
固定设为 195. |
fluxtop |
param_v4_h |
real (ninter) |
- |
先全部设为 1.,作为顶端太阳通量缩放初值 |
ct1, p1, ct2, p2 |
param_v4_h |
real arrays, 读取前 24 行 |
- |
varflujo.dat 给出的太阳周期参数 |
efdis* |
param_v4_h |
real arrays over ninter |
fraction |
CO2/O2/H2O/H2O2/H2/O3/O/N/H/NO/N2/NO2/CO 解离效率 |
efion* |
param_v4_h |
real arrays over ninter and channels |
fraction |
CO2/N2/CO/O(3P)/N/NO/H 电离效率或通道拆分 |
共享状态与副作用
- 所有主要输出都写入
param_v4_h 的模块级共享数组;例程本身没有入参和出参。
- 文件 I/O 只在
is_master 分支内执行,随后用 bcast 同步给并行进程。
coln.dat 使用 iostat=ierr 检查缺失;打开失败时打印 datadir 修复提示并执行 STOP。其他 j*.dat、varflujo.dat、efdis_inter.dat 没有同等 iostat 检查。
- 固定 Fortran unit 使用范围包括 100、120、150-180、210-300、390-510;
efdis_inter.dat 的 unit 120 在源码中读完后未见 close(120)。
- 路径中多处写成
EUVDAT//param_v5/...;通常等价于单斜杠路径,但复现时应按源码字面路径构造。
核心逻辑
- 只有
is_master 为真时进入读表分支。
- 打开
coln.dat,若失败则打印数据目录获取方式和 callphys.def 中 datadir 的修复提示,然后 STOP。
- 打开 26 个
j*.dat 光吸收参数文件,按 unit 分组跳过两行表头。
- 反向遍历
i=nz2,1,-1,先读 coln.dat 到柱含量数组,再把 j1/j2/.../j13 系列表按物种编号和区间范围填入 jabsifotsintpar。
- 关闭光吸收表 unit,设置
t0(:)=195. 与 fluxtop(:)=1.。
- 读取
varflujo.dat 的 24 行太阳周期参数到 ct1/p1/ct2/p2。
- 清零解离和电离效率数组;再读取
efdis_inter.dat 设置 CO2/O2/NO,硬编码 N2、CO、H2O、H2O2、O3、NO2、H2 等区间效率。
- 按固定区间和分支比例设置 CO2、N2、CO、O(3P)、N、NO、H 的电离效率通道。
- 离开 master 分支后广播一组
param_v4_h 数组。
伪代码
param_read():
if is_master:
open datadir/EUVDAT/param_v5/coln.dat with iostat
if missing:
print datadir help
STOP
open j2_an, j3_an, j1_an, ..., j13_cn tables
skip two header lines on each table
for i = nz2 downto 1:
read column groups from coln.dat into c1_16/c17_24/.../c36
for each opened j table:
for i = nz2 downto 1:
read the table into the corresponding species/channel and interval slice
close j-table units
t0(:) = 195.
fluxtop(:) = 1.
read 24 rows of varflujo.dat into ct1,p1,ct2,p2
zero efdis* and efion* arrays
read efdis_inter.dat for inter = 8..28
set high-interval CO2/O2/NO efficiencies to 1
hard-code remaining dissociation and ionization channel efficiencies
bcast column groups, t0, jabsifotsintpar
bcast selected efdis*/efion* arrays and solar-cycle parameters
参与的主题流程
| 主题 |
参与方式 |
| 热层 EUV 参数初始化 |
提供 jabsifotsintpar、fluxtop、ct1/p1/ct2/p2 等共享参数;下游热层光吸收计算通过 param_v4_h 消费这些量 |
| 光化学/光解表数据 |
把 EUVDAT/param_v5 离线表格转为按物种和光谱区间索引的数组 |
| 并行参数同步 |
master 读表后依靠 bcast 把大部分共享数组分发到其他进程 |
写法特点
- 固定格式
.F,没有显式接口参数;所有状态通过 param_v4_h 写入。
- 读表顺序依赖硬编码 unit 号和文件名,表头固定跳过两行。
- 垂直维按
nz2 到 1 反向读取,意味着表文件行序与模型数组索引方向相反。
- 解离/电离效率一部分来自
efdis_inter.dat,另一部分由硬编码区间和比例补齐。
bcast(efdisco2) 与 bcast(efionco2) 各出现两次,bcast(efdish2o2) 出现三次;源码字面如此。
复现要点
- 运行目录的
datadir 必须包含 EUVDAT/param_v5/ 以及 coln.dat、varflujo.dat、efdis_inter.dat 和所有 j*.dat 表;只有 coln.dat 有清晰的缺失诊断。
- 若在并行运行中复现,必须保证 master 读表后
bcast 覆盖了所有下游会读取的数组;未广播数组在非 master 进程上的值需要特别核验。
fluxtop 在本例程中只是初始化为 1.;随太阳周期修正的实际使用需结合 param_v4_h 和 jthermcalc* 路径确认。
- 因源码未发现直接调用点,复现默认流程前应先确认当前配置是否仍会调用
param_read,还是只调用 E107 版本 param_read_e107。
待确认
- 源码中未见
call param_read;它是否仍服务某个旧配置、外部入口或已被 param_read_e107 替代,需要调用链确认。
efdiso2、efdiso3、efdiso、efdish2、efionn2 在 master 分支中被设置或读取,但本文件末尾未见对应 bcast;并行非 master 进程是否依赖这些数组需确认。
efdis_inter.dat 的 unit 120 读完后未见 close(120),是否会影响长流程或重复初始化需确认。
k、jfotsout、crscabsi2、co2crsc195、co2crsc295 在本例程中声明或导入但未使用,可能是历史接口残留。
相关页面