swrayleigh.F
路径
LMDZ.MARS\libf\phymars\swrayleigh.F
所属目录 / 模块
libf/phymars
文件定位
swrayleigh.F 定义短波辐射路径使用的 Rayleigh 柱光学厚度辅助例程。它按太阳谱段 knu 选择一组 CRAY(2,6) 多项式系数,并用修正后的太阳天顶角余弦 prmu 计算每个水平列的 prayl。源码注释说明这些系数来自 Earth model 的两个短波区间,后续用于 swr_fouquart 和 swr_toon 在 rayleigh 开关开启时把气体 Rayleigh 散射并入层光学量。
重要复现差异:源码注释保留了把 Earth 101325 Pa 光学厚度按 Mars 地表压力、重力和 CO2 extinction factor 缩放的公式,但实际赋值行被注释掉。因此当前执行结果只依赖 knu 和 prmu,不随 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_toon 的 ZRAYL |
real array |
optical depth |
每个水平列的 Rayleigh 柱光学厚度。 |
共享状态与副作用
本文件不读写文件、不输出诊断,也不修改外部 module 状态。内部 cray(2,6) 系数表通过 DATA 初始化并声明 save,同时用 !$OMP THREADPRIVATE(cray) 标注为 OpenMP 线程私有状态。ppsol 是形参但当前执行路径没有读取它的值。
核心逻辑
- 初始化
CRAY(1,1:6) 和 CRAY(2,1:6) 两组短波 Rayleigh 多项式系数。
- 对每个水平列
JL=1,KDLON,按 knu 选择系数行。
- 用
prmu(JL) 做五次嵌套 Horner 多项式,写出 prayl(JL)。
- 保留但不执行 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 在上游控制是否调用本例程;本例程本身不读取该开关。 |
写法特点
- 固定格式 Fortran,模块内只有一个短例程。
CRAY 系数用 DATA 语句分两组写入,并带 save / THREADPRIVATE。
- 多项式采用嵌套写法,避免显式计算
prmu 的各次幂。
ppsol 形参保留了接口兼容性,但当前 Mars 缩放行被注释。
复现要点
- 比较
rayleigh=.true. 与 .false. 的短波辐射时,需要同时记录 swrtype,因为 Fouquart 和 Toon 两条路径对 ZRAYL 的后续合并位置不同。
- 当前代码的
prayl 不随地表压力变化;若实验期望 Mars 压力缩放,需要先确认是否恢复源码中被注释的缩放行。
knu 必须为 1 或 2;系数表没有其他谱段。
prmu 应来自上游修正后的太阳天顶角余弦,不能直接用未修正的 mu0 替代。
待确认
CRAY 系数注释标明来自 Earth model 且提示 Mars model 应修改;若要物理复现实验,应核对当前辐射谱段和 Mars CO2 Rayleigh 参数是否仍接受这套系数。
- 被注释的 Mars 缩放行是否为有意保持的历史兼容行为,需要结合版本历史或实验说明确认。
相关页面