iono_h.F90
快速理解
它做什么: 电离层/离子化学共享状态模块,保存 18 个物种平衡标志和 27 个离子反应系数数组。
基本过程: allocate_param_iono 分配 → paramfoto_compact 读取算离子化学速率 → temp_elect 按高度返回电子温度。
关键结果: tau*/*_eq 数组(被 paramfoto_compact 读取)和电子温度(被 calchim_mod 调用)。
路径
LMDZ.MARS\libf\aeronomars\iono_h.F90
所属目录/模块
libf\aeronomars
文件定位
iono_h.F90 定义 iono_h,是电离层/离子化学的共享状态模块。它保存 18 个物种“平衡标志”字符数组(*_eq,长度 nlayer)和 27 个离子/中性物种反应系数数组 tau*(real*8 (nreact,nlayer)),全部 SAVE/ALLOCATABLE 并 THREADPRIVATE;提供分配例程 allocate_param_iono 和电子温度函数 temp_elect。physiq_mod 在初始化时调用 allocate_param_iono 分配数组,paramfoto_compact 读取 tau*/*_eq 计算离子化学速率,calchim_mod 调用 temp_elect 取电子温度。
定义的符号
| 符号 | 类型 | 行号 | 作用 |
|---|---|---|---|
iono_h |
module | 1(END MODULE 173) |
电离层共享状态模块 |
allocate_param_iono |
subroutine | 57(END 110) |
按 nlayer,nreact 分配 18 个标志数组与 27 个 tau* 数组 |
temp_elect |
function | 114(end 171) |
按高度计算电子温度(Viking 或 MAVEN 剖面) |
o1d_eq 等 18 个 |
character*1 save allocatable | 5–22 | 物种平衡标志 (nlayer):o1d_eq,ho2_eq,oh_eq,h_eq,n2d_eq,no2_eq,o3_eq,no_eq,cplus_eq,coplus_eq,oplus_eq,n2plus_eq,hplus_eq,co2plus_eq,o2plus_eq,noplus_eq,nplus_eq,hco2plus_eq |
tauco2 等 27 个 |
real*8 save allocatable | 23–49 | 物种反应系数 (nreact,nlayer):tauco2,tauo2,tauo3p,tauco,tauh,tauoh,tauho2,tauh2,tauh2o,tauo1d,tauh2o2,tauo3,taun,tauno,taun2,taun2d,tauno2,tauco2plus,tauoplus,tauo2plus,taucoplus,taucplus,taunplus,taunoplus,taun2plus,tauhplus,tauhco2plus |
依赖的模块
| use 模块 | only 列表 | 用途 | 待确认 |
|---|---|---|---|
| 无 | - | - | 自包含模块,无 use 依赖 |
调用的关键例程
| 被调用例程 | 所在模块/文件 | 调用位置 | 作用 |
|---|---|---|---|
| 无外部例程 | - | - | allocate_param_iono 仅 allocate;temp_elect 仅用 tanh 与表插值 |
输入
allocate_param_iono(nlayer,nreact):nlayer、nreact(integer)。 temp_elect(zkm,tt,origin):zkm 高度(km)、tt 中性温度(K)、origin 来源(1=Viking,2=MAVEN)。
输出
| 输出 | 去向 | 类型/维度 | 含义 |
|---|---|---|---|
18 个 *_eq + 27 个 tau* |
paramfoto_compact 等读取 |
char/real*8 数组 | 离子化学平衡标志与反应系数 |
temp_elect 返回值 |
calchim_mod:821 |
real | 电子温度(K) |
共享状态与副作用
- 45 个模块数组为
SAVE, ALLOCATABLE,并用!$OMP THREADPRIVATE(第 51–53 行)声明;模块外可读取。 allocate_param_iono仅分配,不赋初值,也无对应deallocate例程(见待确认)。temp_elect为纯函数性质(无副作用),但对origin非 1/2 打印错误并回退中性温度;photochemistry_mod 的temp_elect(nlayer)是调用方传入的电子温度数组,不是本函数调用。- 无文件 I/O、无
getin、无abort。
核心逻辑
allocate_param_iono(nlayer,nreact)(第 57–110 行):allocate 18 个 *_eq(nlayer) 与 27 个 tau*(nreact,nlayer)。
temp_elect(zkm,tt,origin)(第 114–171 行):
- Viking 表
zhanson=(120,130,150,175,200,225,250,275,300)、tehanson=(tt,200,300,500,1250,2000,2200,2400,2500)。 origin=1(Viking):zkm≤120→tt;zkm≥300→ 2500;其间对zhanson/tehanson线性插值。origin=2(MAVEN,Ergun et al. GRL 2015):zkm≤120→tt;否则temp_elect=(3140+120)/2 + (3140-120)/2*tanh((zkm-241)/60)。- 其他
origin:打印错误,回退tt。
伪代码
allocate_param_iono(nlayer, nreact):
allocate *_eq(nlayer) for 18 species
allocate tau*(nreact, nlayer) for 27 species
temp_elect(zkm, tt, origin):
if origin == 1: # Viking
if zkm <= 120: return tt
if zkm >= 300: return 2500
linear-interp tehanson over zhanson -> return
else if origin == 2: # MAVEN
if zkm <= 120: return tt
return (3140+120)/2 + (3140-120)/2 * tanh((zkm-241)/60)
else:
print error; return tt
参与的主题流程
| 主题 | 参与方式 |
|---|---|
| 电离层 / 离子化学 | physiq 分配数组;paramfoto_compact 用 tau*/*_eq 算离子反应速率;calchim 用 temp_elect 取电子温度驱动电子温度依赖反应 |
写法特点
- 自由格式
.F90模块;45 个数组全SAVE+ALLOCATABLE+THREADPRIVATE。 character*1平衡标志 +real*8反应系数,物种覆盖中性(CO2/O2/O/H2O/…)与离子(CO2+/O+/O2+/…/HCO2+)。temp_elect内置 Viking 表与 MAVEN tanh 公式;MAVEN 公式注释说明 Langmuir 探针 <500K 不敏感,低热层(<150km)可能高估。allocate_param_iono无对应 deallocate;无分配前allocated守卫。- photochemistry_mod 另有同名哑元数组
temp_elect(nlayer),与本函数无关(名称遮蔽)。
复现要点
- 须先
allocate_param_iono(nlayer,nreact)再使用tau*/*_eq;nreact须与离子化学网络反应数一致。 temp_elect依赖origin:Viking(1) 用表插值,MAVEN(2) 用 tanh 公式;二者给出不同电子温度,影响电子温度依赖反应速率。- 数组
THREADPRIVATE,并行复现需确认各线程完成分配。 - 无 deallocate 例程,重复分配需调用方自行避免。
待确认
- 无
deallocate_param_iono是否有意(依赖进程退出释放或调用方管理)。 *_eq标志的取值约定(如 'y'/'n')与赋值方,待paramfoto_compact/chemthermos文件页确认。tau*的赋值例程(疑为paramfoto_compact或jthermcalc*),待相关文件页确认。
相关页面
- aeronomars/index:
aeronomars目录总览,本文件在其“电离层”分类下。 - physiq_mod:调用
allocate_param_iono(第 765 行)分配数组。 - calchim_mod:调用方文件页,调
temp_elect(第 821 行)。 - photochemistry_mod:接收
calchim_mod传入的电子温度数组,用于电子温度依赖反应速率。 - paramfoto_compact:
tau*/*_eq消费和写入方,用于寿命、平衡标志、离子化学积分和平衡修正。