chemistrydata.F90

路径

LMDZ.MARS\libf\aeronomars\chemistrydata.F90

所属目录/模块

libf\aeronomars

文件定位

chemistrydata.F90 定义 chemistrydata_mod,是光化学离线光解的查找表数据模块。它用编译期参数声明光解查找表的六个维度(物种、高度、臭氧、太阳天顶角、温度、尘埃不透明度),保存三个 SAVE/PROTECTED/THREADPRIVATE 数据数组(光解速率表 jphot、空气柱剖面 colairtab、臭氧柱网格 table_ozo)以及两张参数表(szatabtautab),并提供读取例程 read_phototable

read_phototablecalchim_mod 的 firstcall 中、photochem .and. .not. jonline(离线光解)条件下被调用一次,从 datadir 读取默认名为 jmars.20140930 的查找表文件(可由 phototable 配置键覆盖),master 读取后广播到所有核。表数据随后由 photolysis.F90photolysis 例程做多维插值,得到光解速率 v_phot,再由 photochemistry_mod 组装反应矩阵并积分化学物种。

作者:Franck Lefevre,VERSION 8/10/2014(源码第 48、50 行)。

定义的符号

符号 类型 行号 作用
chemistrydata_mod module 1(END MODULE 138) 光解查找表数据模块
read_phototable subroutine 39(END SUBROUTINE 136) datadir 读取光解查找表并广播到所有核
jphot protected save THREADPRIVATE array 30 光解速率查找表,维度 (ntemp,nsza,nz,nozo,ntau,nd)
colairtab protected save THREADPRIVATE array 32 空气柱剖面 (nz),作为高度/柱坐标
table_ozo protected save THREADPRIVATE array 34 臭氧柱网格 (nozo)
szatab parameter array 20 表列太阳天顶角 (nsza),0°–95°
tautab parameter array 27 表列尘埃不透明度 (ntau),0–4
nd/nz/nozo/nsza/ntemp/ntau integer parameters 10–15 查找表维度:物种 13 / 高度 143 / 臭氧 7 / SZA 27 / 温度 4 / 尘埃 8

依赖的模块

read_phototable 内:

use 模块 only 列表 用途 待确认
ioipsl_getin_p_mod getin_p 读取 phototable 文件名配置键 -
datafile_mod datadir 数据目录路径,拼接查找表文件全名 -
mod_phys_lmdz_para is_master 仅 master 打开/读取文件 -
mod_phys_lmdz_transfert_para bcast colairtab/table_ozo/jphot 广播到所有核 -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
getin_p ioipsl_getin_p_mod 81 读取 phototable 配置键,覆盖默认文件名
abort_physic LMDZ 物理工具(本例程 use 列表未显式声明其模块) 99 文件缺失时中止运行
bcast mod_phys_lmdz_transfert_para 132–134 广播 colairtabtable_ozojphot
open / read / close Fortran intrinsic 87 / 113–114 / 127 读取格式化查找表文件

输入

read_phototable 无哑元参数,输入来自配置与文件:

输入 来源 类型 含义
phototable 配置键 callphys.defgetin_p character 查找表文件名,默认 jmars.20140930
datadir datafile_mod character 数据目录路径
查找表文件 datadir/phototable formatted ASCII 光解速率表,按固定嵌套顺序排列

输出

输出 去向 类型/维度 含义
jphot photolysis.F90::photolysis real (ntemp,nsza,nz,nozo,ntau,nd) 光解速率查找表,供多维插值
colairtab photolysis.F90::photolysis real (nz) 空气柱剖面,插值的高度坐标
table_ozo photolysis.F90::photolysis real (nozo) 臭氧柱网格,插值的臭氧坐标

共享状态与副作用

核心逻辑

  1. 文件名phototable="jmars.20140930"(默认),call getin_p("phototable",phototable) 允许 def 文件覆盖(第 77–81 行)。
  2. master 打开open(fic,...,file=trim(datadir)//"/"//trim(phototable),iostat=ierr)ierr/=0 时打印帮助信息(提示用 datadir=/phototable= 配置)并 abort_physic(第 85–100 行)。
  3. 嵌套读取(第 108–124 行):itau(1..ntau) × itemp(1..ntemp) × iozo(1..nozo) × isza(1..nsza) × iz(nz..1,-1),每次迭代:
    • 自由格式读一行 colairtab(iz), xsza, table_ozo(iozo)(第 113 行);
    • (7e11.4) 格式读 nd=13jphot(itemp,isza,iz,iozo,itau,ij)(第 114 行);
    • 把等于 1.e-30 的哨兵值置 0.(第 115–119 行)。
  4. 关闭close(fic)(第 127 行)。
  5. 广播bcast(colairtab)bcast(table_ozo)bcast(jphot)(第 132–134 行)。

伪代码

read_phototable():
  phototable = "jmars.20140930"
  call getin_p("phototable", phototable)
  fic = 81
  if is_master:
    open fic, file=datadir//"/"//phototable, iostat=ierr
    if ierr /= 0:
      print help; call abort_physic(...)
    for itau=1..ntau:
      for itemp=1..ntemp:
        for iozo=1..nozo:
          for isza=1..nsza:
            for iz=nz..1 (step -1):
              read fic: colairtab(iz), xsza, table_ozo(iozo)
              read fic (7e11.4): jphot(itemp,isza,iz,iozo,itau, 1..nd)
              for ij=1..nd:
                if jphot(...)==1.e-30: jphot(...)=0.
    close fic
  call bcast(colairtab); call bcast(table_ozo); call bcast(jphot)

参与的主题流程

主题 参与方式
光化学 / 光解 离线光解路径下,calchim_mod firstcall 调 read_phototable 载入表;photolysis 用表插值得光解速率 v_phot 供化学反应
高层大气初始化 init_photolysis(在线光解,jonline=true)二选一,由 calchim_mod firstcall 分支决定

写法特点

复现要点

待确认

相关页面