cvmgt.F
路径
LMDZ.MARS\libf\phymars\cvmgt.F
所属目录 / 模块
libf\phymars
文件定位
cvmgt.F 定义 cvmgt_mod,只提供一个 REAL FUNCTION cvmgt(x1,x2,l)。它是一个标量实数选择函数:当逻辑量 l 为真时返回 x1,否则返回 x2。源码没有 use 依赖、没有调用其他例程,也不保存任何 module 状态。
当前源码树中,cvmgt 只被 swr_toon.F 和 swr_fouquart.F 使用。两个短波辐射例程都在归一化 aerosol 不对称因子 ZCGAZ 和单散射反照率 ZPIZAZ 时调用它:源码意图是在分母为零时给默认值,否则使用正常比值。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
cvmgt_mod |
module |
1 |
提供 cvmgt 选择函数的轻量模块。 |
cvmgt |
real function |
7 |
根据逻辑条件在两个 REAL 输入之间选择一个返回值。 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
| - |
- |
本文件没有 use 依赖。 |
- |
调用的关键例程
| 被调用例程 |
所在模块 / 文件 |
调用位置 |
作用 |
| - |
- |
- |
本文件不调用其他例程。 |
上游调用点
| 调用方 |
源码位置 |
调用条件 |
传入 / 接收关系 |
swr_toon.F |
swr_toon.F:17, 138-143 |
短波 Toon 算法归一化 aerosol 光学量时 |
ZPIZAZ==0 时把 ZCGAZ 设为 0;ZTAUAZ==0 时把 ZPIZAZ 设为 1。 |
swr_fouquart.F |
swr_fouquart.F:17, 159-164 |
短波 Fouquart 算法归一化 aerosol 光学量时 |
与 swr_toon 相同,用默认值保护 ZCGAZ/ZPIZAZ 和 ZPIZAZ/ZTAUAZ 两个比值。 |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
x1 |
调用方 |
real scalar, intent(in) |
由调用方决定 |
条件为真时返回的值。 |
x2 |
调用方 |
real scalar, intent(in) |
由调用方决定 |
条件为假时返回的值。 |
l |
调用方 |
logical scalar, intent(in) |
- |
选择条件。 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
cvmgt |
调用方表达式 |
real scalar |
与 x1/x2 相同 |
l=.true. 时为 x1,否则为 x2。 |
共享状态与副作用
- 本文件没有 module 变量、
SAVE 变量、common block、文件 I/O 或诊断输出。
cvmgt 是纯粹的值选择逻辑;源码没有写 PURE 属性,但按当前实现没有可见副作用。
- 复现时要注意它只接受
REAL 标量输入,不是通用类型选择接口。
核心逻辑
- 接收两个实数候选值
x1/x2 和逻辑条件 l。
- 若
l 为真,把函数返回值设为 x1。
- 否则把函数返回值设为
x2。
伪代码
cvmgt(x1, x2, l):
if l is true:
return x1
else:
return x2
参与的主题流程
| 主题 |
参与方式 |
| 短波辐射 |
swr_toon 和 swr_fouquart 用它在 aerosol 光学量归一化时选择除零保护默认值。 |
| 辐射复现 |
如果用标准 merge 或手写 if 替换,需要保持 true 分支返回第一个实参、false 分支返回第二个实参的顺序。 |
写法特点
- 固定格式 Fortran
.F 文件,但内容是一个 module + contained function。
- 函数名与返回变量同名,
IF(l) 分支直接给 cvmgt 赋值。
- 该实现没有短路控制第二实参表达式的能力;在 Fortran 实参求值语义下,调用方若把除零表达式直接作为
x2 传入,编译器是否会先求值由实现相关行为影响。当前 swr_toon 和 swr_fouquart 的写法依赖原代码路径已有实践,复现时更稳妥的写法是显式 if 保护分母。
复现要点
- 选择顺序是
cvmgt(x1,x2,l):l 为真返回 x1,为假返回 x2,不要按 C 风格三元表达式误读参数顺序。
- 在
swr_toon / swr_fouquart 中,默认值分别是 ZCGAZ=0 和 ZPIZAZ=1,只在对应分母为零时使用。
- 本函数不改变物理倾向,也不写共享状态;它只影响短波辐射中 aerosol 光学量的局部归一化结果。
待确认
swr_toon 和 swr_fouquart 把可能除零的比值作为 x2 实参传入。待确认:当前目标编译器是否保证该模式不会在条件为真时提前触发浮点异常;若移植到更严格环境,建议改为显式 if。
- 源码树内
rg 只找到两个调用点;待确认:外部分支或预处理生成代码是否还会调用 cvmgt_mod。
相关页面