swr_fouquart.F
路径
LMDZ.MARS\libf\phymars\swr_fouquart.F
所属目录 / 模块
libf/phymars
文件定位
swr_fouquart.F 定义 Fouquart 短波连续散射方案。swmain_mod.F 在 callkeys_mod::swrtype == 1 时对两个太阳谱段分别调用 SWR_FOUQUART,本例程把各 aerosol 种类的可见光光学厚度、单散射反照率和不对称因子合成为层平均散射参数;若 rayleigh=.true.,再调用 swrayleigh 将气体 Rayleigh 散射并入层光学量;随后按 Fouquart/Bonel 方案计算各层上下短波通量 PFD/PFU。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
swr_fouquart_mod |
module |
1 |
封装 Fouquart 短波散射例程。 |
SWR_FOUQUART |
subroutine |
7 |
计算给定太阳谱段的短波向下/向上归一化通量。 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
dimradmars_mod |
sunfr, ndlo2, nsun, ndlon, nflev, naerkind |
数组维度、谱段太阳能量份额和 aerosol 种类数。 |
- |
yomlw_h |
nlaylte |
当前辐射垂直层数。 |
- |
callkeys_mod |
rayleigh |
控制是否合入 Rayleigh 散射。 |
- |
swrayleigh_mod |
swrayleigh |
计算谱段 Rayleigh 柱光学厚度。 |
- |
cvmgt_mod |
cvmgt |
aerosol 光学量归一化时的除零保护选择函数。 |
- |
调用的关键例程
| 被调用例程 |
所在模块 / 文件 |
调用位置 |
作用 |
cvmgt |
cvmgt.F |
行 161-164 |
分母为零时给 ZCGAZ=0、ZPIZAZ=1 默认值。 |
swrayleigh |
swrayleigh.F |
行 173 |
计算 Rayleigh 柱光学厚度。 |
exp |
Fortran intrinsic |
多处 |
计算层透过率和指数衰减。 |
输入
| 输入 |
来源 |
类型 / 维度 |
单位 |
含义 |
KDLON, KFLEV, KNU |
swmain_mod.F |
integer |
- |
当前列数、垂直层数和太阳谱段编号。 |
aerosol |
swmain_mod.F |
real (NDLO2,KFLEV,naerkind) |
optical depth |
各 aerosol 种类参考波长光学厚度。 |
QVISsQREF3d, omegaVIS3d, gVIS3d |
光学表 |
real 4D |
- |
谱段消光比例、单散射反照率和不对称因子。 |
albedo, PDSIG, PPSOL, PRMU, PSEC |
swmain_mod.F |
arrays |
mixed |
表面反照率、sigma 层厚、地表压、修正太阳天顶角余弦及其倒数。 |
输出
| 输出 |
去向 |
类型 / 维度 |
单位 |
含义 |
PFD |
swmain_mod.F |
real (NDLO2,KFLEV+1) |
normalized flux |
谱段向下短波通量。 |
PFU |
swmain_mod.F |
real (NDLO2,KFLEV+1) |
normalized flux |
谱段向上短波通量。 |
共享状态与副作用
本例程不写 module 状态,也不做文件 I/O。它读取 rayleigh 开关和辐射维度/太阳谱段权重。计算完全通过实参数组返回。
核心逻辑
- 初始化内部反射/透过率工作数组。
- 对每层、每列、每个 aerosol 种类累加谱段光学厚度
ZTAUAZ、散射贡献 ZPIZAZ 和不对称因子贡献 ZCGAZ。
- 用
cvmgt 把累计量归一化成层平均不对称因子和单散射反照率。
- 若
rayleigh 开启,调用 swrayleigh,按 PDSIG 将柱 Rayleigh 光学厚度分配到层,并与 aerosol 散射参数合并。
- 从高层向低层构造有效云量、纯散射反射率/透过率,再做多层合成和地表边界耦合,输出
PFD/PFU。
伪代码
for each layer and aerosol kind:
accumulate spectral optical depth, scattering optical depth and asymmetry
normalize aerosol optical properties with cvmgt protection
if rayleigh:
prayl = swrayleigh(...)
add layer Rayleigh optical depth into total scattering properties
solve Fouquart continuum scattering reflectivity/transmissivity
return normalized downward and upward band fluxes
参与的主题流程
| 主题 |
参与方式 |
| 短波辐射 |
swmain_mod 在 swrtype=1 时调用本例程,生成两个太阳谱段的散射通量。 |
| 尘埃 / aerosol 辐射 |
aerosol 与 QVISsQREF3d/omegaVIS3d/gVIS3d 控制层光学厚度和散射相函数。 |
| Rayleigh 散射 |
通过 rayleigh 开关调用 swrayleigh,把气体散射并入总光学参数。 |
写法特点
- 固定格式 Fortran,例程名大写但模块名小写。
cvmgt 的实参包含可能除零的表达式;这继承旧代码写法,移植到严格浮点异常环境时需谨慎。
KFLEV 作为实参传入,但内部主循环主要使用 nlaylte。
复现要点
swrtype=1 才会使用本文件;swrtype=2 走 Toon 方案。
rayleigh 开关会改变层光学厚度和通量,比较实验时必须记录该开关。
- aerosol 光学表维度必须与
nsun/naerkind/nlaylte 一致。
待确认
- Fouquart 方案后半段的多层反射/透过率递推变量较多,若要做逐式复现,应结合 ECMWF/Fouquart and Bonnel 1980 文档逐项对照。
相关页面