CO2 饱和与凝结温度辅助函数页
文件组
| 文件 | 路径 |
|---|---|
co2sat.F |
LMDZ.MARS\libf\phymars\co2sat.F |
tcondco2.F90 |
LMDZ.MARS\libf\phymars\tcondco2.F90 |
所属目录/模块
libf/phymars
文件组定位
这两个文件提供 CO2 凝结的热力学基础计算:
co2sat.F:给定温度计算 CO2 饱和蒸汽压tcondco2.F90:给定压力和 CO2 质量混合比反推凝结温度
二者基于相同的 James et al. 1992 饱和蒸汽压公式,形式上互为逆运算,是 CO2 循环与 CO2 云微物理的核心热力学入口。
定义的符号
| 符号 | 文件 | 类型 | 行号 | 作用 |
|---|---|---|---|---|
co2sat |
co2sat.F | subroutine | 8 | 计算饱和蒸汽压 |
tcondco2 |
tcondco2.F90 | subroutine | 7 | 计算凝结温度 |
tcondco2_mod |
tcondco2.F90 | module | 1 | 封装 tcondco2 的模块 |
依赖的模块
| use 模块 | 来源文件 | only 列表 | 用途 | 待确认 |
|---|---|---|---|---|
| conc_mod | tcondco2.F90 | mmean | 获取平均分子量 | 否 |
调用的关键例程
| 被调用例程 | 所在模块/文件 | 调用位置 | 作用 |
|---|---|---|---|
| 无外部调用 | - | - | 纯函数式计算,无子例程调用 |
输入
| 输入 | 来源 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
naersize |
co2sat.F | integer | - | 数组维度 |
t |
co2sat.F | real(naersize) | K | 温度数组 |
ngrid |
tcondco2.F90 | integer | - | 水平网格数 |
nlay |
tcondco2.F90 | integer | - | 垂直层数 |
p |
tcondco2.F90 | real(ngrid,nlay) | Pa | 总气压 |
q |
tcondco2.F90 | real(ngrid,nlay) | kg/kg | CO2 质量混合比(tracer 值,经调用点核验:pq(ig,l,igcm_co2)) |
输出
| 输出 | 去向 | 类型/维度 | 单位 | 含义 |
|---|---|---|---|---|
psat |
co2sat.F | real(naersize) | Pa | 饱和蒸汽压 |
tcond |
tcondco2.F90 | double precision(ngrid,nlay) | K | CO2 凝结温度 |
共享状态与副作用
tcondco2通过conc_mod读取mmean(ig,l)(平均分子量),但不修改- 无文件 I/O
- 无全局变量写入
- 纯函数式计算,无副作用
核心逻辑
co2sat
按 James et al. 1992 公式计算饱和蒸汽压:
psat = 1.382 × 10¹² × exp(-3182.48 / t)
- 对数组
t(1:naersize)逐元素应用上述公式 - 参数为固定常数:前置因子 1.382×10¹² Pa,活化能 3182.48 K
tcondco2
从饱和蒸汽压公式反解温度,给定气压和 CO2 混合比:
计算 CO2 分压:
pco2 = q(ig,l) * (mmean(ig,l)/44.01) * p(ig,l)mmean为当地平均分子量(通过conc_mod读取)- 44.01 为 CO2 分子量
q为 CO2 tracer 质量混合比 (kg/kg),调用点传入pq(:,:,igcm_co2)或pq+pdq*ptimestep- 公式含义:将质量混合比转换为体积混合比(
q * M_mean/M_CO2),再乘以总压得分压
反解温度:
tcond = B / (log(pco2) - A)A = log(1.382×10¹²)B = -3182.48- 推导:由
psat = exp(A) × exp(B/t)得log(psat) = A + B/t,故t = B / (log(psat) - A)
对所有网格点和垂直层循环应用
伪代码
co2sat
对 i = 1 到 naersize:
psat(i) = 1.382e12 * exp(-3182.48 / t(i))
tcondco2
A = log(1.382e12)
B = -3182.48
对 l = 1 到 nlay:
对 ig = 1 到 ngrid:
pco2 = q(ig,l) * (mmean(ig,l) / 44.01) * p(ig,l)
tcond(ig,l) = B / (log(pco2) - A)
参与的主题流程
| 主题 | 参与方式 |
|---|---|
| CO2 循环 | 为 co2cloud_mod 和 improvedco2clouds_mod 提供热力学判据(tcondco2 判断 CO2 凝结温度、co2sat 计算饱和蒸汽压) |
| CO2 云微物理 | 为 improvedco2clouds_mod 提供凝结温度和饱和蒸汽压,用于成核与增长计算 |
| CO2 循环主题页 | 主题入口 |
写法特点
co2sat.F为固定格式 Fortran(F77 风格),tcondco2.F90为自由格式(F90 风格)- 参数为硬编码常数,未从配置文件读取
- 精度差异:
tcond输出为double precision,co2sat输出为real - 调用点核验:
co2cloud_mod.F90:515传入zq_co2vap = pq(ig,l,igcm_co2) + pdq*ptimestep;improvedco2clouds_mod.F90:316传入zq(:,:,igcm_co2) + zq(:,:,igcm_co2_ice)——均为 tracer 质量混合比 kg/kg
复现要点
- 确保
conc_mod已正确初始化并提供mmean数组 tcond输入q为 CO2 tracer 质量混合比 (kg/kg),经调用点co2cloud_mod.F90:515和improvedco2clouds_mod.F90:316核验- 反解过程中
pco2不能为零或负值,否则log(pco2)将出错(源码未含保护) - 参数 A、B 的常数源自 James et al. 1992,修改需同步两文件
待确认
pco2单位:推断为 Pa(与p同单位),与co2sat输出单位一致tcond是否需要在pco2接近零时设置保护(源码未含保护)
复现风险
- 当
pco2≤ 0 时tcond中的log(pco2)会崩溃,需确认调用点是否有前置保护 - 参数 A、B 的精度敏感性:直接使用双精度计算,但
co2sat仅返回单精度real
相关页面
- conc_mod - 提供
tcondco2使用的mmean平均摩尔质量数组 - co2cloud_mod — CO2 云主调度 - 调用
tcondco2(行 515)和co2sat(行 1126)判断 CO2 凝结与饱和 - improvedco2clouds_mod - 调用
co2sat(行 315)和tcondco2(行 316)用于成核与增长计算 - initracer-co2-tracers - CO2 tracer 索引与一致性检查
- co2-cycle-config - CO2 循环配置页