photolysis_mod.F90

路径

LMDZ.MARS\libf\aeronomars\photolysis_mod.F90

所属目录/模块

libf\aeronomars

文件定位

photolysis_mod.F90 定义 photolysis_mod,是在线光解路径的初始化和共享数据模块。calchim_modphotochem .and. jonline 的 firstcall 中调用 init_photolysis;该例程建立 162 个低分辨率光谱区间,读取太阳通量、吸收截面、量子产额和固定地表反照率,并把这些 SAVE/THREADPRIVATE 数组留给 photolysis_online 在运行时逐层积分光解率。

本文件本身不计算 v_phot,也不进入化学矩阵积分;它负责把 datadir/solar_fluxesdatadir/cross_sections 的外部表格重采样到统一波长网格。

定义的符号

符号 类型 行号 作用
photolysis_mod module 1-2460 在线光解共享状态和读表工具模块
nphot saved module variable 7 基础光解过程数,默认 13;calchim_mod 的氘化学路径会加 2
nabs parameter 12 吸收气体数,源码中设为 10
nw parameter 16 低分辨率工作光谱网格长度,源码设为 162
mopt saved module variable 17 光谱网格模式;init_photolysis 固定设为 2
wl,wc,wu saved module arrays 21 光谱区间下界、中心和上界
f saved module array 27 1 AU 太阳通量,读表后转换为 photon s^-1 nm^-1 cm^-2
xs*,yield*,albedo saved module arrays 31-52 各物种截面、量子产额和地表反照率
init_photolysis subroutine 59-140 在线光解初始化入口,依次建网格、读通量/截面/产额、设反照率
gridw subroutine 144-385 生成高/低分辨率波长区间;当前运行固定低分辨率
rdsolarflux subroutine 389-483 读取并重采样太阳通量表
addpnt subroutine 487-582 给单调数据列插入边界点,供重采样前补边界
inter2 subroutine 585-737 把离散输入数据按目标波长 bin 做梯形面积平均
rdxsco2 subroutine 741-955 读取 CO2 截面和 CO2 光解产额
rdxso2 subroutine 959-1177 读取 O2 截面和 O2 光解产额
rdxso3 subroutine 1181-1295 读取 O3 两温度截面
rdxsh2o subroutine 1299-1374 读取 H2O 截面
rdxshdo subroutine 1378-1453 读取 HDO 截面
rdxsh2o2 subroutine 1457-1535 读取 H2O2 截面
rdxsho2 subroutine 1539-1607 读取 HO2 截面
rdxsh2 subroutine 1611-1712 读取 H2 截面和 H2 光解产额
rdxsno2 subroutine 1716-1907 读取 NO2 截面和量子产额
rdxsno subroutine 1911-2008 读取 NO 截面和光解产额
rdxsn2 subroutine 2012-2113 读取 N2 截面和光解产额
rdxshcl,rdxscl2,rdxsclo,rdxshocl subroutines 2117-2414 氯化学截面读表工具;当前 init_photolysis 中调用被注释
setalb subroutine 2418-2458 设置波长无关 Lambertian 地表反照率

依赖的模块

use 模块 only 列表 用途 待确认
datafile_mod datadir 所有读表例程拼接运行时数据目录和文件名
mod_phys_lmdz_para is_master 只让 master 进程执行文件读取和插值
mod_phys_lmdz_transfert_para bcast 将 master 读取/插值后的数组广播到其它进程

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
gridw 本文件 70 建立目标波长网格
rdsolarflux 本文件 74 读取太阳通量并转换单位
rdxso2,rdxsco2,rdxso3 本文件 78-86 读取 O2/CO2/O3 截面和产额
rdxsh2o,rdxsh2o2,rdxsho2,rdxsh2,rdxsno,rdxsno2,rdxsn2,rdxshdo 本文件 90-118 读取 H/O/N 相关截面和产额
setalb 本文件 138 设置固定地表反照率
addpnt 本文件 多处 在原始数据首尾和零点处补点,避免 inter2 外推
inter2 本文件 多处 把原始谱表重采样到 wl 网格
bcast mod_phys_lmdz_transfert_para 多处 广播已读入的截面、通量和产额数组

输入

输入 来源 类型/维度 单位 含义
datadir datafile_mod / 配置 character path 运行时数据目录;本文件从其下读取 solar_fluxescross_sections
mopt init_photolysis 固定赋值 integer - 光谱网格模式;当前固定为低分辨率 2
外部太阳通量表 datadir/solar_fluxes/atlas3_thuillier_tuv.txt text table mW m^-2 nm^-1 rdsolarflux 读取并转换到 photon 通量
外部截面表 datadir/cross_sections/* text tables cm2 等 O2、CO2、O3、H2O、HDO、H2O2、HO2、H2、NO、NO2、N2 等截面与产额

输出

输出 去向 类型/维度 单位 含义
wl,wc,wu photolysis_online real (nw) nm 在线光解辐射传输工作波长网格
f photolysis_online real (nw) photon s^-1 nm^-1 cm^-2 1 AU 太阳光子通量
xsco2_*,xso2_*,xso3_*,xsh2o,xshdo,xsh2o2,xsho2,xsh2,xsno*,xsn2 photolysis_online real (nw) cm2 温度相关或物种相关吸收截面
yieldco2,yieldo2,yieldh2,yieldno,yieldn2,yldno2_* photolysis_online real (nw) - 光解或电离分支量子产额
albedo photolysis_online real (nw) - 固定 Lambertian 地表反照率
nphot calchim_mod / photochemistry_mod / photolysis_online integer count 基础光解槽位数,用于 nb_phot_maxv_phot 布局

共享状态与副作用

核心逻辑

  1. 固定在线光解模式init_photolysismopt=2,即低分辨率 GCM 推荐模式;源码保留 mopt=1 的 3789 区间高分辨率网格逻辑,但当前入口不会使用。
  2. 构造波长网格gridw 按分段步长建立 0-815 nm 的低分辨率网格,区间包括 EUV/UV 到可见光;wl(kw+1)=wu(kw) 作为最后边界。
  3. 太阳通量读表rdsolarflux 固定 msun=18,读取 atlas3_thuillier_tuv.txt 的 19193 行数据,先从 mW 转 W,再按 wc*5.039e11 转为光子通量。
  4. 截面和产额读表:各 rdxs* 例程从 cross_sections 下读取对应物种和温度的截面表,调用 addpnt 补边界,再由 inter2 重采样到 wl 网格。
  5. 多温度截面保留为多数组:CO2 保存 195/295/370 K 三套截面,O2 保存 150/200/250/300 K 四套截面,O3 保存 218/298 K 两套截面,NO2 保存普通、220 K 和 294 K 截面,并保存 248/298 K 产额。
  6. 产额表处理:CO2/O2/H2/NO/N2 读取 Schunk & Nagy 或专用产额表;部分产额读入后按源码做 1 - y 形式转换。
  7. 设置反照率setalb 对所有工作波长给定常数 0.015,源码注释来自 Clancy et al. 1999。

伪代码

init_photolysis:
  mopt = 2
  call gridw(nw, wl, wc, wu, mopt)
  call rdsolarflux(nw, wl, wc, f)
  call rdxso2(..., xso2_* , yieldo2)
  call rdxsco2(..., xsco2_* , yieldco2)
  call rdxso3(..., xso3_*)
  call rdxsh2o / rdxsh2o2 / rdxsho2 / rdxsh2
  call rdxsno / rdxsno2 / rdxsn2 / rdxshdo
  skip commented chlorine cross-section readers
  call setalb(nw, wl, albedo)

each rd* reader:
  if is_master:
    open datadir file
    skip headers and read fixed number of rows
    add extrapolation guard points with addpnt
    map source data into wl bins with inter2
    stop if file or interpolation fails
  call bcast(result arrays)

参与的主题流程

主题 参与方式
在线光解 calchim_mod firstcall 调 init_photolysis,本模块准备 photolysis_online.F所需全部光谱输入
光化学反应网络 nphot 决定基础光解槽位数量,进入 photochemistry_mod 的反应数和矩阵布局
氘化学 deutchem 为真,calchim_mod 在初始化前把 nphot 从 13 增到 15;本模块读入 HDO 截面供在线路径使用
并行读表 master 读文件,其它进程通过 bcast 接收重采样后的数组

写法特点

复现要点

待确认

相关页面