lwmain_mod.F

路径

LMDZ.MARS\libf\phymars\lwmain_mod.F

所属目录 / 模块

libf/phymars
MODULE lwmain_mod

文件定位

lwmain_mod.F 是 LTE 长波热红外辐射主程序模块。它由 callradite_mod 在每个辐射子域内调用,接收已经准备好的层压厚、界面压力/温度、层温、气溶胶 IR 光学性质、地表发射率和地表 CO2 冰量;随后按固定顺序组织长波链:

lwb -> lwu -> (lwxd/lwxn/lwxb, 按 ilw* 频率刷新) -> lwflux -> lwi

本文件本身不实现 Planck 多项式、CO2 透过率、交换系数或散射通量细节;这些细节分别在下游文件页说明。lwmain 的关键职责是把这些步骤按正确状态顺序串联起来,决定何时刷新 yomlw_h::xi 交换率缓存,并把 lwflux 给出的显式冷却率替换为 lwi 的半隐式修正冷却率。

本文件只在 1:nlaylte 的 LTE 有效层内工作。nlayltenlthermeq 写入 yomlw_hcallradite 负责只把这部分层的输入复制进子域工作数组,并在返回后把更高层 dtlw/dtsw 置零。

定义的符号

符号 类型 行号 作用
lwmain_mod module 1 长波 LTE 辐射主调度模块。
lwmain subroutine 7-206 组织 Planck 预处理、CO2/aerosol 吸收量、长波交换率刷新、通量/冷却率汇总和半隐式冷却率修正。

本文件没有 SAVE 变量、没有 THREADPRIVATE 声明、没有 common block。持久共享状态由被调用模块和 yomlw_h 承载。

依赖的模块

use 模块 only 列表 用途 待确认
dimradmars_mod ndlo2, nflev, nir, ndlon, nuco2, naerkind 长波工作数组维度、红外谱带数、CO2 谱带数和气溶胶种类数。
yomlw_h nlaylte, xi nlaylte 控制 LTE 层循环;xi 只出现在注释掉的调试检查中,实际可执行逻辑通过下游例程读写。 xi 直接 use 是否为历史调试遗留。
lwi_mod lwi 半隐式长波冷却率修正。
lwb_mod lwb 计算地表/顶层/层界/层中心 Planck 函数、温度导数和半层差分。
lwu_mod lwu 计算 CO2 累积吸收量、压力缩放吸收量、CO2 带气溶胶透过率和 IR 总光学性质。
lwxd_mod lwxd 刷新远距离层间交换系数 xi
lwxn_mod lwxn 刷新相邻层交换系数 xixi_ground
lwxb_mod lwxb 刷新地面/空间边界交换系数 xi
lwflux_mod lwflux 汇总 CO2 带内净交换和带外扩散散射,输出显式冷却率、地表/顶层通量和 netrad
callkeys_mod ilwb, ilwd, ilwn 控制边界、远距离、相邻层交换系数的更新频率。

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
lwb lwb.F 104-105 tlev/tlay/dt0 生成长波谱带 Planck 函数和导数。
lwu lwu.F 112-117 dp/plev/tlay/aerosol/QIR/omegaIR/gIR 生成 CO2 吸收量和气溶胶总光学性质。
lwxd lwxd.F 132-134 mod(icount-1,ilwd)==0 时刷新远距离层间 xi
lwxn lwxn.F 141-144 mod(icount-1,ilwn)==0 时刷新相邻层 xixi_ground
lwxb lwxb.F 151-153 mod(icount-1,ilwb)==0 时刷新地面/空间边界 xi
lwflux lwflux.F 160-167 xi、Planck 函数和带外散射光学性质计算显式冷却率、地面下行长波、顶层 OLR 和 netrad
lwi lwi.F 188-189 netrad/dblay/dpxi 计算半隐式修正冷却率。

直接调用方

调用方 位置 调用目的
callradite_mod.F::callradite 533-539 在当前 ndomainsz 子域上计算 LTE 长波冷却率、地表下行长波通量、顶层出射长波通量和每层净辐射收支。

physiq_mod.Frocketduststorm_mod.F90topmons_mod.F90 不直接调用 lwmain,而是通过 callradite_mod 间接触发长波链。

输入

输入 来源 类型 / 维度 单位 含义
ig0 callradite 子域循环 integer grid offset 当前子域在全局 xi 缓存第一维中的偏移;传给 lwxd/lwxn/lwxb/lwflux/lwi
icount callradite 调用方 integer step count 物理步计数;与 ilwd/ilwn/ilwb 共同决定是否刷新交换系数。
kdlon, kflev callradite 子域 integer columns/layers 当前子域列数和垂直数组维度。
dp(ndlo2,kflev) callradite real Pa 层压强厚度,供 lwu/lwxn/lwflux/lwi 使用。
dt0(ndlo2) callradite real K 地表温度相对第一界面温度的跳变,供 lwb/lwflux 使用。
emis(ndlo2) callradite real - 地表热红外发射率;本文件还派生 emis_gaz 供气体交换系数使用。
plev(ndlo2,kflev+1) callradite real Pa 层界面压力,供 lwu 构造压力缩放吸收量。
tlev(ndlo2,kflev+1) callradite real K 层界面温度,供 lwb/lwflux 使用。
tlay(ndlo2,kflev) callradite real K 层中心温度,供 lwb/lwu/lwflux 使用。
aerosol(ndlo2,kflev,naerkind) aeropacity -> callradite real optical depth 各类气溶胶层光学厚度,供 lwu 合成 IR 光学量。
QIRsQREF3d, omegaIR3d, gIR3d aeroptproperties -> callradite real - IR 谱带气溶胶消光比、单次散射反照率和非对称因子。
co2ice(ndlo2) callradite real kg/m2 地表 CO2 冰量;大于 20.e-3 时本文件把 emis_gaz 强制为 1。

输出

输出 去向 类型 / 维度 单位 含义
coolrate(ndlo2,kflev) callradite -> dtlw real K/s 长波冷却率。lwflux 先写显式值,随后本文件用 lwinewcoolrate 覆盖 1:nlaylte
fluxground(ndlo2) callradite -> fluxsurf_lw real W/m2 到达地面的下行长波通量。
fluxtop(ndlo2) callradite -> fluxtop_lw real W/m2 大气顶出射长波通量,也就是 OLR。
netrad(ndlo2,kflev) callradite 子域工作数组 real W/m2 每层长波净辐射收支,来自 lwflux,也是 lwi 的输入。

共享状态与副作用

初始化 / firstcall / restart / diagnostic 行为

核心流程

1. CO2 冰覆盖列的气体发射率

行 88-95 构造 emis_gaz

if co2ice(jl) > 20.e-3:
  emis_gaz(jl) = 1.
else:
  emis_gaz(jl) = emis(jl)

这个派生量只传给 lwxd/lwxb 的地面反射/边界交换路径。lwflux 仍接收原始 emis,因此地表通量/带外扩散仍按调用方给定发射率处理。

2. Planck 函数和半层差分

行 104-105 调用 lwb。输出包括:

这些量必须在 lwflux/lwi 之前准备,因为交换率最终要乘 Planck 函数差,半隐式线性化要用温度导数。

3. CO2 吸收量与气溶胶 IR 总光学性质

行 112-117 调用 lwu。它把 dp/plev/tlay 转成 CO2 的 co2_u/co2_up 累积吸收路径,把多类气溶胶合成为:

tautotal(k,j,ir)
omegtotal(k,j,ir)
gtotal(k,j,ir)

同时为 CO2 带生成气溶胶吸收透过率 aer_t。这些数组分别供交换系数例程和 lwflux/lwdiff 使用。

4. 按频率刷新交换率缓存

行 128-155 是 lwmain 最重要的状态门控段:

if mod(icount-1, ilwd) == 0: call lwxd(...)
if mod(icount-1, ilwn) == 0: call lwxn(...)
if mod(icount-1, ilwb) == 0: call lwxb(...)

三类刷新覆盖不同 xi 区域:

lwfluxlwi 不关心本步是否刷新过,只读取 yomlw_h 当前缓存。因此复现某一步的长波结果时,必须知道前序步是否已经按这些频率更新过交换率。

5. 显式通量、净辐射收支和冷却率

行 160-167 调 lwflux。该例程合并两部分:

输出 netrad 和显式 coolrate = gcp * netrad / dp,同时写 fluxgroundfluxtop

6. 半隐式冷却率修正

行 188-201 调 lwi 并覆盖 coolrate

call lwi(..., netrad, dblay, dp, newcoolrate)
for jkk = 1:nlaylte:
  coolrate(:,jkk) = newcoolrate(:,jkk)

这意味着 lwmain 的最终 coolrate 输出不是 lwflux 的显式冷却率,而是 lwi 根据 semidtphys*iradiaxidblay 求出的半隐式修正结果。netrad 不被 lwi 改写,仍表示 lwflux 计算的显式净辐射收支。

伪代码

lwmain:
  for each column:
    if co2ice > 20e-3:
      emis_gaz = 1
    else:
      emis_gaz = emis

  call lwb to compute Planck functions and gradients
  call lwu to compute CO2/aerosol absorber amounts and IR optical properties

  if mod(icount-1, ilwd) == 0:
    call lwxd to update distant-layer xi

  if mod(icount-1, ilwn) == 0:
    call lwxn to update neighbouring-layer xi and xi_ground

  if mod(icount-1, ilwb) == 0:
    call lwxb to update ground/space boundary xi

  call lwflux:
    read xi/xi_ground
    combine CO2 net exchange and non-CO2-band diffusion
    output explicit coolrate, fluxground, fluxtop, netrad

  call lwi:
    read netrad, dblay, dp, xi and timestep controls
    output newcoolrate

  for each LTE layer:
    coolrate = newcoolrate

参与的主题流程

主题 参与方式
辐射 LTE 长波主程序;输出长波冷却率、地表下行长波、顶层 OLR 和层净辐射收支。
气溶胶辐射 消费 aerosolQIRsQREF3d/omegaIR3d/gIR3d,经 lwu/lwdiff 影响长波吸收、散射通量和冷却率。
CO2 循环 / 地表 CO2 冰 co2ice > 20.e-3 时把气体交换系数路径中的 emis_gaz 设为 1;CO2 15 微米带吸收路径由 lwu/lwtt 处理。
LTE/NLTE 边界 只覆盖 nlaylte 内的 LTE 长波层;高层 NLTE 冷却和 LTE/NLTE 混合由 physiq 其他路径处理。
地表能量收支 fluxground 是地表下行长波通量;fluxtop 是大气顶出射长波通量,供诊断和能量收支使用。

写法特点

复现要点

待确认

相关页面