swrayleigh.F

路径

LMDZ.MARS\libf\phymars\swrayleigh.F

所属目录 / 模块

libf/phymars

文件定位

swrayleigh.F 定义短波辐射路径使用的 Rayleigh 柱光学厚度辅助例程。它按太阳谱段 knu 选择一组 CRAY(2,6) 多项式系数,并用修正后的太阳天顶角余弦 prmu 计算每个水平列的 prayl。源码注释说明这些系数来自 Earth model 的两个短波区间,后续用于 swr_fouquartswr_toonrayleigh 开关开启时把气体 Rayleigh 散射并入层光学量。

重要复现差异:源码注释保留了把 Earth 101325 Pa 光学厚度按 Mars 地表压力、重力和 CO2 extinction factor 缩放的公式,但实际赋值行被注释掉。因此当前执行结果只依赖 knuprmu,不随 ppsol 变化。

定义的符号

符号 类型 行号 作用
swrayleigh_mod module 1 封装短波 Rayleigh 柱光学厚度辅助例程。
swrayleigh subroutine 7 按太阳谱段和修正太阳天顶角余弦计算 prayl(kdlon)

依赖的模块

use 模块 only 列表 用途 待确认
- 本文件没有 use 依赖;只使用 Fortran 基本语法和传入数组。 -

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
- - swrayleigh 不调用其他例程。

被调用位置

调用方 文件 调用位置 作用
SWR_FOUQUART swr_fouquart.F 行 173 rayleigh 为真时计算 ZRAYL,随后按 PDSIG 合并到 Fouquart 短波散射光学量。
SWR_TOON swr_toon.F 行 152 rayleigh 为真时计算 ZRAYL,随后按 PDSIG 合并到 Toon two-stream 层光学量。

输入

输入 来源 类型 / 维度 单位 含义
kdlon 调用方 integer - 当前辐射水平列数。
knu 调用方 integer - 短波太阳谱段编号;源码系数表只提供 1 和 2 两个谱段。
ppsol(kdlon) 调用方 real array Pa 地表压力;当前执行语句未使用,仅出现在被注释的 Mars 缩放公式中。
prmu(kdlon) 调用方 real array - 修正后的太阳天顶角余弦;源码注释说明它不同于原始 mu0,已针对大天顶角大气路径修正。

输出

输出 去向 类型 / 维度 单位 含义
prayl(kdlon) swr_fouquart / swr_toonZRAYL real array optical depth 每个水平列的 Rayleigh 柱光学厚度。

共享状态与副作用

本文件不读写文件、不输出诊断,也不修改外部 module 状态。内部 cray(2,6) 系数表通过 DATA 初始化并声明 save,同时用 !$OMP THREADPRIVATE(cray) 标注为 OpenMP 线程私有状态。ppsol 是形参但当前执行路径没有读取它的值。

核心逻辑

  1. 初始化 CRAY(1,1:6)CRAY(2,1:6) 两组短波 Rayleigh 多项式系数。
  2. 对每个水平列 JL=1,KDLON,按 knu 选择系数行。
  3. prmu(JL) 做五次嵌套 Horner 多项式,写出 prayl(JL)
  4. 保留但不执行 Mars 本地 Rayleigh 光学厚度缩放行。

伪代码

for each column JL:
    prayl[JL] =
        CRAY[knu,1] + prmu[JL] * (
        CRAY[knu,2] + prmu[JL] * (
        CRAY[knu,3] + prmu[JL] * (
        CRAY[knu,4] + prmu[JL] * (
        CRAY[knu,5] + prmu[JL] * CRAY[knu,6]))))

    # Mars pressure/gravity/CO2 scaling is present in comments only

参与的主题流程

主题 参与方式
短波辐射 为 Fouquart 和 Toon 两条短波散射路径提供可选 Rayleigh 柱光学厚度。
Rayleigh 散射 callkeys_mod::rayleigh 在上游控制是否调用本例程;本例程本身不读取该开关。

写法特点

复现要点

待确认

相关页面