iono_h.F90

路径

LMDZ.MARS\libf\aeronomars\iono_h.F90

所属目录/模块

libf\aeronomars

文件定位

iono_h.F90 定义 iono_h,是电离层/离子化学的共享状态模块。它保存 18 个物种“平衡标志”字符数组(*_eq,长度 nlayer)和 27 个离子/中性物种反应系数数组 tau*real*8 (nreact,nlayer)),全部 SAVE/ALLOCATABLETHREADPRIVATE;提供分配例程 allocate_param_iono 和电子温度函数 temp_electphysiq_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_ionoallocatetemp_elect 仅用 tanh 与表插值

输入

allocate_param_iono(nlayer,nreact)nlayernreact(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)

共享状态与副作用

核心逻辑

allocate_param_iono(nlayer,nreact)(第 57–110 行):allocate 18 个 *_eq(nlayer) 与 27 个 tau*(nreact,nlayer)

temp_elect(zkm,tt,origin)(第 114–171 行):

  1. Viking 表 zhanson=(120,130,150,175,200,225,250,275,300)tehanson=(tt,200,300,500,1250,2000,2200,2400,2500)
  2. origin=1(Viking):zkm≤120ttzkm≥300 → 2500;其间对 zhanson/tehanson 线性插值。
  3. origin=2(MAVEN,Ergun et al. GRL 2015):zkm≤120tt;否则 temp_elect=(3140+120)/2 + (3140-120)/2*tanh((zkm-241)/60)
  4. 其他 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_compacttau*/*_eq 算离子反应速率;calchimtemp_elect 取电子温度驱动电子温度依赖反应

写法特点

复现要点

待确认

相关页面