辐射计算主题
主题目标
辐射计算是 LMDZ.MARS 物理包的核心过程之一,负责计算火星大气中的长波(热红外)和短波(太阳辐射)辐射传输过程。该主题的目标是:
- 计算大气层的辐射加热率和冷却率
- 计算地表和大气顶的辐射通量
- 处理气溶胶(尘埃、水冰、CO2冰)的散射和吸收
- 为大气动力学提供辐射强迫
源码依据:callradite_mod.F 注释说明 "Subroutine designed to call the main canonic radiative transfer subroutine 'lwmain' et 'swmain' to compute radiative heating and cooling rate and radiative fluxes to the surface."
入口
辐射计算的主入口是 callradite() 子例程,位于 libf/phymars/callradite_mod.F。
调用位置:在 physiq_mod.F 的 physiq() 主物理例程中被调用。
源码依据:callradite_mod.F 第 7-15 行定义了子例程接口。
参与文件
核心文件
长波辐射辅助文件
短波辐射辅助文件
配置和维度文件
主调用链
callradite() (callradite_mod.F)
├── updatereffrad() 更新气溶胶粒径分布
│ ├── updaterdust() 更新尘埃粒径
│ ├── updaterice_micro() 更新水冰粒径
│ └── updaterice_microco2() 更新CO2冰粒径
├── aeroptproperties() 计算3D散射参数
├── aeropacity() 计算气溶胶光学厚度
├── lwmain() 长波辐射主程序
│ ├── lwb() 普朗克函数
│ ├── lwu() 吸收物质量
│ ├── lwxd() 远距离传输函数
│ ├── lwxn() 邻近层传输函数
│ ├── lwxb() 边界层传输函数
│ ├── lwflux() 通量和冷却率
│ └── lwi() 半隐式格式
└── swmain() 短波辐射主程序
├── swr_fouquart() Fouquart算法
└── swr_toon() Toon算法
状态变量
输入变量
| 变量 |
类型 |
维度 |
单位 |
含义 |
icount |
INTEGER |
标量 |
- |
物理调用计数器 |
ngrid |
INTEGER |
标量 |
- |
水平网格点数 |
nlayer |
INTEGER |
标量 |
- |
垂直层数 |
nq |
INTEGER |
标量 |
- |
示踪剂数量 |
ls |
REAL |
标量 |
rad |
太阳经度(Ls) |
zday |
REAL |
标量 |
sol |
日期(自Ls=0起的火星日) |
pq |
REAL |
(ngrid,nlayer,nq) |
kg/kg |
示踪剂混合比 |
albedo |
REAL |
(ngrid,2) |
- |
地表反照率(两个太阳波段) |
emis |
REAL |
(ngrid) |
- |
地表发射率 |
mu0 |
REAL |
(ngrid) |
- |
太阳天顶角余弦 |
pplev |
REAL |
(ngrid,nlayer+1) |
Pa |
层边界压力 |
pplay |
REAL |
(ngrid,nlayer) |
Pa |
层中点压力 |
pt |
REAL |
(ngrid,nlayer) |
K |
大气温度 |
tsurf |
REAL |
(ngrid) |
K |
地表温度 |
fract |
REAL |
(ngrid) |
- |
时间间隔的白天分数 |
dist_sol |
REAL |
标量 |
AU |
火星-太阳距离 |
输出变量
| 变量 |
类型 |
维度 |
单位 |
含义 |
dtlw |
REAL |
(ngrid,nlayer) |
K/s |
长波加热率 |
dtsw |
REAL |
(ngrid,nlayer) |
K/s |
短波加热率 |
fluxsurf_lw |
REAL |
(ngrid) |
W/m² |
地表向下长波通量 |
fluxsurf_dn_sw |
REAL |
(ngrid,2) |
W/m² |
地表向下短波通量 |
fluxsurf_up_sw |
REAL |
(ngrid,2) |
W/m² |
地表向上短波通量 |
fluxtop_lw |
REAL |
(ngrid) |
W/m² |
大气顶向上长波通量 |
fluxtop_dn_sw |
REAL |
(ngrid,2) |
W/m² |
大气顶向下短波通量 |
fluxtop_up_sw |
REAL |
(ngrid,2) |
W/m² |
大气顶向上短波通量 |
tau |
REAL |
(ngrid,naerkind) |
- |
各类气溶胶的可见光光学厚度 |
aerosol |
REAL |
(ngrid,nlayer,naerkind) |
- |
各层各类气溶胶的光学厚度 |
内部变量
| 变量 |
类型 |
维度 |
单位 |
含义 |
reffrad |
REAL |
(ngrid,nlayer,naerkind) |
m |
气溶胶有效半径 |
nueffrad |
REAL |
(ngrid,nlayer,naerkind) |
- |
气溶胶有效方差 |
QVISsQREF3d |
REAL |
(ngrid,nlayer,nsun,naerkind) |
- |
可见光消光效率比 |
omegaVIS3d |
REAL |
(ngrid,nlayer,nsun,naerkind) |
- |
可见光单次散射反照率 |
gVIS3d |
REAL |
(ngrid,nlayer,nsun,naerkind) |
- |
可见光不对称因子 |
QIRsQREF3d |
REAL |
(ngrid,nlayer,nir,naerkind) |
- |
红外消光效率比 |
omegaIR3d |
REAL |
(ngrid,nlayer,nir,naerkind) |
- |
红外单次散射反照率 |
gIR3d |
REAL |
(ngrid,nlayer,nir,naerkind) |
- |
红外不对称因子 |
配置开关
callphys.def 中的关键配置
| 开关 |
默认值 |
作用 |
naerkind |
- |
气溶胶种类数量 |
tauvis |
- |
可见光光学厚度(场景模式) |
iaervar |
- |
尘埃光学厚度变化模式 |
swrtype |
1 |
短波辐射算法选择(1=Fouquart, 2=Toon) |
ilwb |
1 |
边界层传输函数更新频率 |
ilwd |
1 |
远距离传输函数更新频率 |
ilwn |
1 |
邻近层传输函数更新频率 |
water |
.true. |
是否包含水循环 |
activice |
.true. |
是否激活水冰 |
co2clouds |
.false. |
是否包含CO2云 |
rdstorm |
.false. |
是否包含沙尘暴 |
topflows |
.false. |
是否包含地形尘埃 |
dimradmars_mod 中的维度配置
| 参数 |
含义 |
ndomainsz |
子域大小(用于内存优化) |
nflev |
辐射计算的有效层数 |
nsun |
太阳光谱区间数(通常为2) |
nir |
红外光谱区间数(通常为4) |
naerkind |
气溶胶种类数 |
数据依赖
外部数据
| 数据 |
文件位置 |
作用 |
| 光学属性查找表 |
datadir/ |
气溶胶的散射和吸收属性 |
| 尘埃场景数据 |
datadir/ |
尘埃光学厚度的时间变化 |
| 初始状态 |
startfiles/ |
初始尘埃和冰晶分布 |
模块依赖
| 模块 |
作用 |
tracer_mod |
示踪剂定义和索引 |
comcstfi_h |
物理常数(g, cpp等) |
time_phylmdz_mod |
时间相关参数 |
geometry_mod |
网格几何信息 |
计算阶段
阶段 1:初始化(firstcall)
- 识别气溶胶种类(尘埃、水冰、CO2冰)
- 加载光学属性查找表(
SUAER)
- 设置维度参数
阶段 2:气溶胶粒径更新
- 调用
updatereffrad() 更新各类气溶胶的粒径分布
- 尘埃:根据质量和数量混合比计算几何平均半径
- 水冰:根据微物理方案或典型值计算
- CO2冰:根据微物理方案计算
阶段 3:光学属性计算
- 调用
aeroptproperties() 计算3D散射参数
- 使用对数正态分布和高斯-勒让德积分
- 计算可见光和红外的消光效率、单次散射反照率、不对称因子
阶段 4:光学厚度计算
- 调用
aeropacity() 计算各层各类气溶胶的光学厚度
- 处理尘埃场景(Viking、MGS、TES等)
- 处理沙尘暴和地形尘埃
- 计算尘埃缩放系数
阶段 5:长波辐射计算
- 计算普朗克函数(
lwb)
- 计算吸收物质量(
lwu)
- 计算传输函数(
lwxd、lwxn、lwxb)
- 计算冷却率和通量(
lwflux)
- 应用半隐式格式(
lwi)
阶段 6:短波辐射计算
- 计算火星太阳常数
- 循环两个太阳光谱区间
- 调用 Fouquart 或 Toon 算法
- 计算加热率
阶段 7:输出整理
- 将子域结果合并到全局数组
- 设置高层大气(nlaylte以上)的加热率为零
- 输出诊断信息
与其他主题的耦合
与尘埃循环的耦合
- 尘埃粒径分布由尘埃循环模块提供
- 尘埃光学厚度影响辐射加热
- 辐射加热反过来影响大气动力和尘埃输送
源码依据:callradite_mod.F 使用 dust_param_mod 中的 doubleq、active、submicron 开关。
与水循环的耦合
- 水冰粒径由水循环模块提供
- 水冰云影响辐射传输
- 辐射冷却影响水冰凝结
源码依据:callradite_mod.F 使用 callkeys_mod 中的 water、activice 开关。
与CO2循环的耦合
- CO2冰粒径由CO2循环模块提供
- CO2云影响辐射传输
- 辐射冷却影响CO2凝结
源码依据:callradite_mod.F 使用 callkeys_mod 中的 co2clouds、activeco2ice 开关。
与边界层的耦合
与动力核心的耦合
- 辐射加热率作为动力核心的强迫项
- 动力核心提供风场用于尘埃输送
输出结果
直接输出
- 长波加热率(
dtlw):K/s,用于大气温度演化
- 短波加热率(
dtsw):K/s,用于大气温度演化
- 地表通量:用于地表能量平衡
- 大气顶通量:用于行星能量收支
诊断输出
- 气溶胶光学厚度(
tau):用于与观测比较
- 气溶胶粒径(
rdust、rice、riceco2):用于微物理诊断
- 密度缩放光学厚度(
dsodust):用于与TES观测比较
伪代码总览
SUBROUTINE callradite(...)
! 1. 初始化(firstcall)
IF (firstcall) THEN
! 识别气溶胶种类
! 加载光学属性查找表
CALL SUAER
END IF
! 2. 更新气溶胶粒径分布
CALL updatereffrad(...)
! 3. 计算3D散射参数
CALL aeroptproperties(...)
! 4. 计算光学厚度
CALL aeropacity(...)
! 5. 子域循环
DO jd = 1, ndomain
! 分割输入变量
! 6. 长波辐射计算
CALL lwmain(...)
! 7. 短波辐射计算
cste_mars = flux_1AU / (dist_sol * dist_sol)
CALL swmain(...)
! 8. 合并输出变量
END DO
! 9. 设置高层大气加热率为零
IF (nlayer > nlaylte) THEN
dtlw(:, nlaylte+1:nlayer) = 0.
dtsw(:, nlaylte+1:nlayer) = 0.
END IF
END SUBROUTINE
复现检查点
必须保留的逻辑
- 气溶胶种类识别:必须正确匹配
callphys.def 中的 naerkind 和 name_iaer
- 光学属性查找表:必须使用正确的查找表文件
- 子域分割:必须正确处理
ndomainsz 维度
- LTE层限制:必须使用
nlaylte 限制辐射计算范围
关键公式
- 火星太阳常数:
cste_mars = flux_1AU / (dist_sol * dist_sol)
- 光学厚度计算:
aerosol = 0.75 * QREFvis / (rho * reffrad) * mass * dp / g
- 加热率计算:
PHEAT = gcp * ZDFNET / PDP
验证检查点
- 光学厚度合理性:待确认:典型值 0.1-5.0(可见光)需补充观测、文档或测试依据
- 加热率量级:待确认:长波 ~1 K/solar day、短波 ~1-10 K/solar day 的量级需补充源码、文档或测试依据
- 能量守恒:待确认:大气顶入射短波、反射短波、向上长波与地表吸收的闭合检查需数值验证
相关模块
待确认
- 各光谱区间的具体波长范围
- 光学属性查找表的具体格式和内容
- 不同尘埃场景(iaervar)的详细实现
- NLTE(非局部热力学平衡)处理的细节