types_asis.F90

路径

LMDZ.MARS\libf\aeronomars\types_asis.F90

所属目录/模块

libf\aeronomars

文件定位

types_asis.F90 定义 ASIS 光化学隐式求解器使用的反应索引类型和共享数组。它不执行化学计算,也不分配数组;真正的分配和填充发生在 photochemistry_mod 的内部子例程 indice,消费发生在 fill_matrix

该文件的核心作用是把反应化学计量写成紧凑的“系数-物种索引”对,供 fill_matrix 把光解样一阶反应、同物种二次反应和二体反应装配到 Jacobian、产生项和损失项。

定义的符号

符号 类型 行号 作用
types_asis module 1-35 ASIS 反应索引类型和共享数组模块
jpim integer parameter 4 索引整型 kind,源码固定为 4
jprb integer parameter 5 反应系数实型 kind,源码固定为 8
z3spec derived type 8-15 三对“系数-物种索引”槽位,用于 A -> B + CA + A -> B + C 类反应
z4spec derived type 16-25 四对“系数-物种索引”槽位,用于 A + B -> C + D 类反应
indice_phot allocatable saved module array 29 type(z3spec) 数组;保存光解、quench 和异相反应索引
indice_3 allocatable saved module array 30 type(z3spec) 数组;保存同物种二次反应索引
indice_4 allocatable saved module array 31 type(z4spec) 数组;保存二体反应索引

依赖的模块

use 模块 only 列表 用途 待确认
- 本模块自包含,只定义 kind、派生类型和 module 数组 -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
- - 本文件无 procedure、无 call、无 I/O

输入

输入 来源 类型/维度 单位 含义
nb_phot_max photochemistry_mod::indice integer - 分配 indice_phot(:) 的长度
nb_reaction_3_max photochemistry_mod::indice integer - 分配 indice_3(:) 的长度
nb_reaction_4_max photochemistry_mod::indice integer - 分配 indice_4(:) 的长度
物种索引参数 photochemistry_mod::indice integer - 构造 z3spec/z4spec 时写入偶数字段 z2/z4/z6/z8

输出

输出 去向 类型/维度 单位 含义
indice_phot(:) photochemistry_mod::fill_matrix type(z3spec) - 一阶反应表。z1/z2 是被消耗物种系数和索引,z3/z4z5/z6 是最多两个产物的系数和索引
indice_3(:) photochemistry_mod::fill_matrix type(z3spec) - 同物种二次反应表。fill_matrixc(reactant)^2 进入产生项,按 v_3*c(reactant) 进入损失和矩阵项
indice_4(:) photochemistry_mod::fill_matrix type(z4spec) - 二体反应表。z1/z2z3/z4 是两个反应物,z5/z6z7/z8 是最多两个产物

共享状态与副作用

核心逻辑

  1. 定义 jpim=4jprb=8,固定反应索引的整数 kind 和系数的双精度实数 kind。
  2. 定义 z3spec:字段顺序为 z1 realz2 integerz3 realz4 integerz5 realz6 integer
  3. 定义 z4spec:在 z3spec 基础上追加 z7 realz8 integer
  4. 声明三组保存型 allocatable 数组,分别服务三类反应:
    • indice_phot:光解、quench、异相反应等按一阶过程进入 fill_matrix
    • indice_3A + A -> B + C,反应速率项用 c(A)^2
    • indice_4A + B -> C + D,反应速率项用 c(A)*c(B)
  5. !$OMP THREADPRIVATE 保证 OpenMP 线程各自持有这些数组副本。

伪代码

module types_asis:
  define integer kind jpim = 4
  define real kind jprb = 8

  type z3spec:
    coefficient_1, species_index_1
    coefficient_2, species_index_2
    coefficient_3, species_index_3

  type z4spec:
    coefficient_1, species_index_1
    coefficient_2, species_index_2
    coefficient_3, species_index_3
    coefficient_4, species_index_4

  declare saved allocatable arrays:
    indice_phot(:) as z3spec
    indice_3(:)    as z3spec
    indice_4(:)    as z4spec

  mark arrays THREADPRIVATE
end module

参与的主题流程

主题 参与方式
光化学隐式积分 提供反应化学计量表的数据结构,photochemistry_mod::fill_matrix 用它装配 ASIS Jacobian
离子化学和氘化学 不直接判断开关;当 ionchemdeutchem 为真时,photochemistry_mod::indice 会向这些数组追加对应反应
异相化学 indice_phot 也保存 HO2/OH/H2O2 + ice/dust 的一阶化异相反应索引

写法特点

复现要点

待确认

相关页面