chemthermos_readini.F
路径
LMDZ.MARS\libf\aeronomars\chemthermos_readini.F
所属目录/模块
libf\aeronomars
文件定位
chemthermos_readini.F 定义 chemthermos_readini_mod,提供唯一例程 chemthermos_readini:从运行目录下的 chemthermos_reactionrates.def 读取 61 个热层气相化学反应的 Arrhenius 速率常数参数,填入共享模块 param_v4_h::rcoef(61,3)。该例程由 calchim_mod 在 firstcall、if(.not.unichim) 条件下调用一次;rcoef 随后被 paramfoto_compact 取用,按 k=rcoef(i,1)*(T/300)^rcoef(i,2)*exp(rcoef(i,3)/T) 计算 ch2..ch87 各反应速率。
反应逐项含义、文献来源与文件格式详见参考页 reaction-rates;本页只从源码视角记录读取例程的 use/call/输入输出/副作用。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
chemthermos_readini_mod |
module |
1(END MODULE 40) |
包装反应速率读取例程的模块 |
chemthermos_readini |
subroutine |
7(END SUBROUTINE 38) |
读取 chemthermos_reactionrates.def 填充 param_v4_h::rcoef |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
param_v4_h |
rcoef |
写入反应速率系数数组 rcoef(61,3)(real*8,定义于 param_v4_h.F90:45) |
param_v4_h 中 rcoef 为普通 module array,未显式声明 SAVE/THREADPRIVATE |
调用的关键例程
| 被调用例程 |
所在模块/文件 |
调用位置 |
作用 |
abort_physic |
LMDZ 物理工具(本例程 use 列表未显式声明其模块) |
34 |
文件缺失时中止运行 |
open / read / close |
Fortran intrinsic |
19 / 22–26 / 31 |
读取格式化反应速率文件 |
write |
Fortran intrinsic |
33 |
文件缺失时打印空行提示 |
输入
chemthermos_readini 无哑元参数,输入来自文件:
| 输入 |
来源 |
类型 |
含义 |
chemthermos_reactionrates.def |
运行目录(CWD,相对路径) |
formatted ASCII |
61 个反应的 Arrhenius 参数,1 行头 + 每反应 3 行(2 行说明 + 1 行 rc1,rc2,rc3) |
输出
| 输出 |
去向 |
类型/维度 |
含义 |
rcoef |
param_v4_h 模块变量;使用方 paramfoto_compact |
real*8 (61,3) |
反应速率系数:(,1)=A、(,2)=B 温度指数、(,3)=C 活化温度 |
共享状态与副作用
- 写入
param_v4_h::rcoef(61,3)(real*8);param_v4_h 中该数组未显式声明 SAVE/THREADPRIVATE,本文件也不含相关声明。
- 文件 I/O 使用硬编码单位
unit=10;文件名为硬编码相对路径 chemthermos_reactionrates.def(非 datadir 拼接)。
- 文件缺失(
ierr/=0)时打印空行并 abort_physic 中止。
- 无诊断输出、不读取配置键、无
getin 覆盖文件名。
核心逻辑
open(unit=10,file='chemthermos_reactionrates.def',status='old',iostat=ierr)(第 19–20 行)。
- 若
ierr==0(第 21 行):
read(10,*) 跳过文件头(第 22 行);
do i=1,61(第 23–30 行):两次 read(10,*) 跳过该反应的方程与文献说明行,再 read(10,*) rc1,rc2,rc3 读数据行,赋值 rcoef(i,1:3)=rc1,rc2,rc3;
close(10)(第 31 行)。
- 否则(第 32–36 行):
write(*,*) 打印空行,call abort_physic("chemthermos_readini",'Cannot find file chemthermos_reactionrates.def',1)。
伪代码
chemthermos_readini():
open unit=10, file='chemthermos_reactionrates.def', status='old', iostat=ierr
if ierr == 0:
read(10,*) # skip header
for i = 1..61:
read(10,*) # skip reaction equation line
read(10,*) # skip source/literature line
read(10,*) rc1, rc2, rc3
rcoef(i,1)=rc1; rcoef(i,2)=rc2; rcoef(i,3)=rc3
close(10)
else:
write(*,*)
call abort_physic("chemthermos_readini", "Cannot find file ...", 1)
参与的主题流程
| 主题 |
参与方式 |
| 热层化学 / 光化学 |
calchim_mod firstcall(if(.not.unichim))调用,载入反应速率;paramfoto_compact 消费 rcoef 计算 ch2..ch87 供 chemthermos 化学源汇 |
写法特点
- 固定格式
.F(续行用第 6 列 $/&)。
- 文件以相对路径打开(
chemthermos_reactionrates.def),运行时须位于当前工作目录,而非 datadir——与 read_phototable(datadir 拼接 + phototable 配置键)不同。
- 文件名与单位
10 均硬编码,无 getin 覆盖。
- 每反应读 3 行(2 行说明 + 1 行数据),与
reaction-rates.md 记录的 184 行格式一致。
复现要点
- 运行目录须含
chemthermos_reactionrates.def(来自 deftank),否则 abort_physic 中止;不经过 datadir。
- 仅在
calchim_mod firstcall 且 .not.unichim 时调用;unichim=true 路径跳过本读取。
- 反应数严格为 61,与
param_v4_h::rcoef(61,3) 维度绑定;增删反应须同步改数组维度与文件。
rcoef(1..33) 由 paramfoto_compact 用中性温度 tcte 计算,rcoef(34..61) 用电子温度 t_elect 计算(见 reaction-rates);本例程不区分,仅顺序读入。
rcoef 在 param_v4_h 中是普通 module array,未显式 THREADPRIVATE;本例程在 master/所有进程均会执行打开与读取(无 is_master 守卫)。
待确认
abort_physic 的宿主模块未在本例程 use 列表显式声明,可能经其他 host 模块间接可用;待确认。
- 本例程无
is_master 守卫,是否所有 MPI 进程都打开同一文件(以及是否依赖文件系统可见性),待确认并行运行约定。
相关页面