水饱和与凝结温度辅助函数页

文件组

文件 路径
watersat_mod.F90 LMDZ.MARS\libf\phymars\watersat_mod.F90
tcondwater.F90 LMDZ.MARS\libf\phymars\tcondwater.F90

所属目录/模块

libf/phymars

文件组定位

这两个文件提供水冰凝结的热力学基础计算:

二者基于同一参数化公式(Laurent Li / Murphy & Koop 2005),形式上互为逆运算,是水循环、水云微物理和边界层的核心热力学入口。

定义的符号

符号 文件 类型 行号 作用
watersat_mod watersat_mod.F90 module 1 封装 watersat 的模块
watersat watersat_mod.F90 subroutine 19 给定 T、P 计算水饱和混合比
tcondwater_mod tcondwater.F90 module 1 封装 tcondwater 的模块
tcondwater tcondwater.F90 subroutine 7 给定 P、q 反推凝结温度

依赖的模块

use 模块 来源文件 only 列表 用途 待确认
- - - -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
无外部调用 - - 纯函数式计算,无子例程调用

输入

watersat

输入 来源 类型/维度 单位 含义
gridsize 调用点 INTEGER, scalar - 数组维度
T 调用点 REAL (gridsize) K 温度数组
p 调用点 REAL (gridsize) Pa 总气压数组

tcondwater

输入 来源 类型/维度 单位 含义
ngrid 调用点 INTEGER, scalar - 水平网格数
nlay 调用点 INTEGER, scalar - 垂直层数
p 调用点 REAL (ngrid,nlay) Pa 总气压
q 调用点 REAL (ngrid,nlay) kg/kg 水质量混合比(watercloud_mod 传入 h2o_vap + h2o_ice

输出

watersat

输出 去向 类型/维度 单位 含义
qsat 调用点 REAL (gridsize) kg/kg 水饱和质量混合比

tcondwater

输出 去向 类型/维度 单位 含义
tcond 调用点 REAL (ngrid,nlay) K 水凝结温度

共享状态与副作用

核心逻辑

watersat

  1. 计算分子量比 epsi = 18.0/44.0(≈0.4091,H2O/CO2 分子量比)。
  2. 按参数化公式计算冰面饱和蒸汽压(Pa):
    psat = 100.0 × 10^(2.07023 − 0.00320991×T − 2484.896/T + 3.56654×log₁₀(T))
    • 公式来源:Laurent Li 参数化,基于 Murphy & Koop (2005)(QJRMS)
    • 100.0 因子将 mbar 转换为 Pa
  3. psat > P(总气压),设 qsat = 1(完全饱和保护)。
  4. 否则 qsat = epsi × psat / (P − (1−epsi) × psat),并取 max(qsat, 1e-30) 防止极小值。

tcondwater

  1. 计算 x = log₁₀(max(q, 1e-16) × p / (100 × 0.41))
    • 100 将 mbar 因子归一化,0.41epsi = 18/44
    • max(q, 1e-16) 防止非正数取对数
  2. 用 5 阶多项式反解温度:
    tcond = 252.8466 + 23.9230×x + 2.21334×x² + 0.179978×x³ + 0.0100068×x⁴ + 0.000255145×x⁵
    • 多项式系数通过数值拟合得到(源码注释记录了 5~12 阶的多组系数和最大误差)
    • 5 阶拟合最大绝对误差:0.0604 K

伪代码

watersat

watersat(gridsize, T, p, qsat):
    epsi = 18.0 / 44.0
    对 i = 1 到 gridsize:
        psat = 100.0 * 10^(2.07023 - 0.00320991*T(i) - 2484.896/T(i) + 3.56654*log10(T(i)))
        if psat > p(i):
            qsat(i) = 1.0
        else:
            qsat(i) = epsi * psat / (p(i) - (1 - epsi) * psat)
            qsat(i) = max(qsat(i), 1e-30)

tcondwater

tcondwater(ngrid, nlay, p, q, tcond):
    对 i = 1 到 ngrid:
        对 j = 1 到 nlay:
            x = log10(max(q(i,j), 1e-16) * p(i,j) / (100.0 * 0.41))
            tcond(i,j) = 252.8466 + 23.9230*x + 2.21334*x² + 0.179978*x³
                        + 0.0100068*x⁴ + 0.000255145*x⁵

参与的主题流程

主题 参与方式
水循环 (water-cycle) 为水云微物理和边界层提供饱和判据和凝结温度
水冰云形成 watercloud_mod 调用 tcondwater(行 248)计算 CLFvarying 凝结温度,调用 watersat(行 564)检查过饱和
边界层 vdifcvdif_cdpbl_parameters 调用 watersat 计算地表饱和混合比

写法特点

复现要点

待确认

复现风险

相关页面