callradite_mod.F

路径

LMDZ.MARS\libf\phymars\callradite_mod.F

所属目录 / 模块

libf/phymars
MODULE callradite_mod

文件定位

callradite_mod.Fphymars 辐射传输的主调度入口。它不直接实现长波或短波辐射主算法,而是在每个辐射时间步完成以下工作:识别当前配置启用的气溶胶 scatterer,首次调用时加载光学查找表;把 tracer/微物理状态转成辐射需要的粒径和三维光学参数;计算每层气溶胶光学厚度;按 ndomainsz 把水平网格切成子域;在 LTE 有效层 nlaylte 内调用 lwmainswmain;最后把长波/短波加热率和地表/顶层通量写回全局输出数组。

它的上游主要是 physiq_mod.Fcallrad 分支;rocketduststorm_mod.F90topmons_mod.F90 也会进行二次辐射调用,用来估算 stormdust 或 topdust 带来的额外辐射加热。它的下游是 updatereffradaeroptpropertiesaeropacitylwmainswmain

定义的符号

符号 类型 行号 作用
callradite_mod module 1 辐射调用入口模块
callradite subroutine 7-616 辐射调度例程;准备气溶胶光学输入,分块调用长波/短波主程序,输出加热率和通量
firstcall LOGICAL,SAVE, THREADPRIVATE 291-292 首次调用时识别 scatterer、写 gcp 并调用 SUAER;后续调用跳过这些初始化

本文件没有 common block,没有其他 SAVE 局部状态。

依赖的模块

use 模块 only 列表 用途 待确认
aeropacity_mod aeropacity 根据 tracer、粒径和光学参数计算逐层/柱气溶胶光学厚度
updatereffrad_mod updatereffrad 从 dust/H2O/CO2 tracer 和微物理状态更新 reffrad/nueffrad
aeroptproperties_mod aeroptproperties reffrad/nueffrad 对查找表做尺寸分布积分,输出 VIS/IR 三维散射参数
dimradmars_mod ndomainsz, nflev, nsun, nir, naerkind, name_iaer, iaer_*, flux_1AU 辐射维度、scatterer 名称/索引、太阳常数和光学表共享状态
yomlw_h gcp, nlaylte gcp=g/cpp 由本文件首次写入;nlaylte 限定 LTE 辐射计算层数
comcstfi_h g, cpp 计算 gcp,并作为辐射链物理常数上下文
time_phylmdz_mod daysec 仅用于注释掉的调试输出
lwmain_mod lwmain 长波热红外辐射主程序
swmain_mod swmain 短波太阳辐射主程序
suaer_mod suaer 首次调用时加载离散气溶胶光学查找表
dust_param_mod doubleq, active, submicron 决定 dust scatterer 名称和索引匹配路径
callkeys_mod water, activice, rdstorm, topflows, co2clouds, activeco2ice 决定 H2O ice、CO2 ice、stormdust、topdust scatterer 是否应存在

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
abort_physic 公共物理错误处理 393 scatterer 数量/名称与 naerkind 不一致时终止
SUAER / suaer suaer.F90 408 首次调用时加载 VIS/IR 气溶胶光学查找表
updatereffrad updatereffrad_mod.F 418-421 更新 dust/stormdust/topdust/H2O ice/CO2 ice 的辐射有效半径和方差
aeroptproperties aeroptproperties.F 424-428 由粒径分布积分得到 QVISsQREF3d/omegaVIS3d/gVIS3d 和 IR 对应场
aeropacity aeropacity_mod.F 430-436 计算 aerosoltautaucloudtesdsodust/dsords/dsotop 和尘埃缩放相关输出
lwmain lwmain_mod.F 533-539 在当前子域上计算长波加热率、地表/顶层长波通量和长波净辐射
swmain swmain_mod.F 547-551 在当前子域上计算短波加热率和上下行短波通量

直接调用方

调用方 位置 调用目的
physiq_mod.F::physiq 1097-1107 主辐射调用,clearsky=.false.,计算含云/背景状态的 zdtlw/zdtsw 和辐射通量
physiq_mod.F::physiq 1121-1134 CLFvarying 时的 clear-sky 二次调用,随后按 totcloudfrac 混合 clear/cloudy 通量和加热率
rocketduststorm_mod.F90 259-267 stormdust 二次辐射试算,获得尘暴额外加热
topmons_mod.F90 291-299 topdust 二次辐射试算,获得山顶尘流额外加热并推导辐射驱动垂直速度

输入

输入 来源 类型 / 维度 单位 含义
icount physiq 或二次辐射调用方 integer - 物理步计数;传给 lwmain
ngrid, nlayer, nq 调用方 integer - 水平格点、垂直层和 tracer 数
zday, ls 轨道/季节状态 real sol, rad 自 Ls=0 起日期和太阳经度;aeropacity 用于尘埃场景
pq(ngrid,nlayer,nq) 物理 tracer 状态 real kg/kg 或 tracer 自身单位 dust、water ice、CO2 ice、stormdust/topdust 等光学厚度和粒径输入
albedo(ngrid,2) 地表状态 real - 两个短波太阳波段地表反照率
emis(ngrid) 地表状态 real - 热红外发射率
mu0(ngrid), fract(ngrid) 太阳几何 real - 太阳天顶角余弦和当前步日照分数
pplev, pplay 大气网格 real Pa 层界面和层中心压力
pt, tsurf 热力状态 real K 大气层温度和地表温度
dist_sol 轨道状态 real AU 日火距离;短波太阳常数按 1/dist_sol^2 缩放
co2ice(ngrid) 地表 CO2 冰 real kg/m2 传给长波主程序用于 CO2 ice 相关边界
totstormfract, clearatm stormdust 调用上下文 real/logical - stormdust 亚格点面积分数;是否计算不含 stormdust 的背景大气
nohmons topdust 调用上下文 logical - 是否计算不含 topdust/hmons 的背景大气
clearsky, totcloudfrac 水冰云分数路径 logical/real - CLFvarying 下是否排除云,以及总云分数

输出

输出 去向 类型 / 维度 单位 含义
dtlw, dtsw 调用方温度倾向 real (ngrid,nlayer) K/s 长波和短波辐射加热率;nlaylte+1:nlayer 被置零
fluxsurf_lw, fluxtop_lw 地表能量/诊断 real (ngrid) W/m2 地表向下长波通量、顶层向上长波通量
fluxsurf_dn_sw, fluxsurf_up_sw 地表能量/诊断 real (ngrid,2) W/m2 两个太阳波段的地表下行/上行短波通量
fluxtop_dn_sw, fluxtop_up_sw 诊断/能量收支 real (ngrid,2) W/m2 大气顶下行/上行短波通量
tau_pref_scenario, tau_pref_gcm 尘埃缩放/诊断 real (ngrid) - 场景规定和 GCM 计算的参考压力处尘埃柱光学厚度
tau(ngrid,naerkind) 诊断/后续粒径更新 real - 每类气溶胶柱总可见光光学厚度
aerosol(ngrid,nlayer,naerkind) lwmain/swmain 输入和诊断 real - 每层每类气溶胶可见光光学厚度
dsodust, dsords, dsotop 尘埃过程 real (ngrid,nlayer) - density-scaled opacity,分别用于背景尘埃、stormdust 和 topdust
tauscaling, dust_rad_adjust, IRtoVIScoef 尘埃缩放共享状态 real (ngrid) - aeropacity 更新的尘埃/场景缩放系数
rdust, rstormdust, rtopdust, rice, nuice, riceco2, nuiceco2 诊断/下游 real arrays m 或 - 各类气溶胶粒径和方差
taucloudtes 云诊断 real (ngrid) - 用 IR 吸收效率计算的水冰云 TES 对比不透明度

共享状态与副作用

初始化 / firstcall / restart / diagnostic 行为

  1. 行 301-304 每次调用都重新计算 ndomain=(ngrid-1)/ndomainsz+1。注释说明该逻辑被移出 firstcall,用于支持 nesting 或演化网格。
  2. 行 306-413 只在 firstcall 执行:打印子域切分信息;按物理开关和 name_iaer 匹配 scatterer;若 aer_count != naerkind,打印已识别项并 abort_physic;成功后写 gcp 并调用 SUAER
  3. 本文件不读写 restart;它依赖上游在辐射调用前准备 nlayltephysiq_mod.F 在每 sol 开头调用 nlthermeq 更新 nlaylte
  4. 尾部行 597-613 保留了调试打印模板,可打印辐射输入和每层 dtsw/dtlw,但当前全部注释,不产生运行时诊断输出。

核心流程

1. Scatterer 识别和光学表加载

首次调用时,源码先把所有 iaer_* 置零,再按开关识别应出现的气溶胶名称:

每匹配一个名称就写对应 iaer_* 索引并递增 aer_countaer_count 必须等于 naerkind,否则说明 callphys.def 中的气溶胶数量、名称或开关不一致,程序终止。通过校验后,SUAER 读取外部光学属性表。

2. 气溶胶粒径、光学属性和光学厚度准备

每次调用都按固定顺序执行三段:

  1. updatereffrad:从 pqtauscaling、已有 taupplaypt 推导 rdust/rice/riceco2/...,并填 reffrad/nueffrad
  2. aeroptproperties:用 suaer 预加载的离散光学表和 reffrad/nueffrad,生成每个格点/层/气溶胶的 VIS 与 IR 散射参数。
  3. aeropacity:计算 aerosoltautaucloudtesdsodust/dsords/dsotop,并处理场景尘埃、stormdust/topdust、clear-sky 等开关。

这三段的顺序不能调换:aeroptproperties 依赖粒径,aeropacity 依赖参考波长的 QREF* 和粒径。

3. 子域切分

行 445-451 按 ndomainsz 切分水平网格。每个子域起点 ig0=(jd-1)*ndomainsz,最后一个子域大小 nd=ngrid-ig0,其余为 ndomainsz。这是为高分辨率/LES 节省辐射工作数组内存。

子域内行 456-507 复制 nlaylte 层以内的 VIS/IR 光学参数、压力、温度、气溶胶光学厚度和反照率。nlaylte 以上不传给 lwmain/swmain

4. 层界温度构造

行 509-528 构造 zztlev

同时 zdt0=tsurf-zztlev(:,1) 作为地表和最低层界面温度差传给长波链。

5. 长波和短波调用

行 533-539 调 lwmain。输入包括子域层厚 zdp、地表温度差 zdt0、发射率、界面压力/温度、层温、气溶胶光学厚度、IR 光学参数和 co2ice。输出 zzdtlwfluxsurf_lwfluxtop_lwznetrad

行 543-551 调 swmain。先用 cste_mars=flux_1AU/(dist_sol*dist_sol) 计算当前日火距离下的太阳常数,再传入 albedo、mu0、层厚、界面压力、aerosolfract 和 VIS 光学参数,输出 zzdtsw 与短波上下行通量。

6. 合并输出和 LTE 层之外置零

行 556-584 把子域 zzdtlw/zzdtsw 和短波 flux 拷回全局数组。fluxsurf_lw/fluxtop_lw 已由 lwmain 直接写到全局切片 ig0+1 起始位置。行 588-596 对 nlaylte+1:nlayerdtlw/dtsw 置零,符合文件头注释“只在 LTE 有效层计算辐射倾向”的设计。

伪代码

callradite:
  ndomain = ceil(ngrid / ndomainsz)

  if firstcall:
    reset iaer_* indices
    for each enabled physical aerosol branch:
      find matching name_iaer entry and set iaer_* index
    if aer_count != naerkind:
      abort with scatterer consistency error
    gcp = g / cpp
    call suaer to load optical lookup tables
    firstcall = false

  call updatereffrad to compute reffrad/nueffrad
  call aeroptproperties to compute VIS/IR 3D optical properties
  call aeropacity to compute aerosol optical depth and dust/cloud diagnostics

  for each horizontal subdomain jd:
    copy nlaylte layers of optical fields, pressure, temperature, aerosol, albedo
    build interface temperatures zztlev and surface temperature jump zdt0
    call lwmain for thermal IR heating and LW fluxes
    cste_mars = flux_1AU / dist_sol^2
    call swmain for solar heating and SW fluxes
    copy subdomain heating rates and fluxes back to global outputs

  if nlayer > nlaylte:
    dtlw(:, nlaylte+1:nlayer) = 0
    dtsw(:, nlaylte+1:nlayer) = 0

参与的主题流程

主题 参与方式
辐射 主入口,调度 LTE 长波、短波、气溶胶光学准备和 flux/heating 输出
尘埃循环 读取 dust/stormdust/topdust tracer,计算粒径、光学厚度和 density-scaled opacity,并支持背景/风暴/山顶尘流的多次辐射试算
水循环 water.AND.activice 时要求 h2o_ice scatterer;CLFvarying 时支持 clear/cloudy 辐射混合
CO2 循环 co2clouds.AND.activeco2ice 时要求 co2_ice scatterer;传入地表 co2ice 给长波链
热层 / LTE-NLTE 只计算 nlaylte 以内的 LTE 辐射倾向;nlayltenlthermeq 根据当前大气剖面更新
地表能量收支 输出地表长波、短波上下行通量,供地表温度/能量平衡路径使用

写法特点

复现要点

待确认

相关页面