lwxb.F
路径
LMDZ.MARS\libf\phymars\lwxb.F
所属目录 / 模块
libf\phymars
文件定位
lwxb.F 定义 lwxb_mod 模块,提供长波 LTE 辐射主流程中的边界交换系数构造例程 lwxb。它不计算 Planck 函数,也不重新累计 CO2 或气溶胶光学量;这些输入由 lwu 准备。lwxb 的职责是把 co2_u/co2_up/aer_t 按三类边界路径重组后反复调用 lwtt,再用相邻边界透过率差分写入 yomlw_h::xi 中与地表、空间有关的净交换率。
源码注释把本例程定位为 “transmission function and exchange coefficients for boundaries”,并在矩阵图中只标出地面 0、空间 nlaylte+1 与各大气层 1:nlaylte 之间的条目。因此本页只覆盖边界相关 xi,不把远距离层间交换 lwxd 或相邻层交换 lwxn 的职责并入。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
lwxb_mod |
module |
1 |
封装长波边界交换系数构造例程。 |
lwxb |
subroutine |
7 |
计算地面-层、层-空间、地面-空间三类边界透过率差分,并写入共享净交换率表 xi。 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
dimradmars_mod |
ndlo2, nuco2, ndlon, nflev |
提供输入数组和局部工作数组的水平、谱带、垂直维度上限。 |
否 |
yomlw_h |
xi, nlaylte |
读取 LTE 长波有效层数,并把边界交换系数写入共享 xi。 |
否 |
lwtt_mod |
lwtt |
由 CO2 吸收路径 zu/zup 计算每个 CO2 谱带的透过率。 |
否 |
调用的关键例程
| 被调用例程 |
所在模块 / 文件 |
调用位置 |
作用 |
lwtt |
lwtt_mod / lwtt.F |
95, 116, 146 |
分别计算层界面到空间、层界面到地面、经地面反射后到空间三类 CO2 透过率。 |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
ig0 |
lwmain |
integer |
grid offset |
当前向量块在全局 xi 第一维中的偏移,写入时使用 ig0+jl。 |
kdlon |
lwmain |
integer |
column |
当前向量块内有效水平列数,循环范围为 1:kdlon。 |
kflev |
lwmain |
integer |
layer |
接口数组的垂直层数参数;主要循环边界由 nlaylte 决定。 |
emis |
lwmain 传入的 emis_gaz |
real(ndlo2) |
- |
地表发射率。lwmain 会在 CO2 冰足够厚时把用于气体计算的发射率设为 1.。 |
aer_t |
lwu |
real(ndlo2,nuco2,kflev+1) |
- |
CO2 谱带上的累计气溶胶吸收透过率。 |
co2_u |
lwu |
real(ndlo2,nuco2,kflev+1) |
吸收路径 |
从顶到底累计的 CO2 吸收量。 |
co2_up |
lwu |
real(ndlo2,nuco2,kflev+1) |
压力缩放吸收路径 |
带压力效应的累计 CO2 吸收量。 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
xi(ig0+jl,ja,jk,nlaylte+1) 与对称项 |
yomlw_h,后续由 lwflux / lwi 读取 |
shared array |
- |
第 jk 层与空间边界的 CO2 带净交换率。 |
xi(ig0+jl,ja,0,jk) 与对称项 |
yomlw_h |
shared array |
- |
地面与第 jk 层之间的净交换率,乘以地表发射率。 |
xi(ig0+jl,ja,0,nlaylte+1) 与对称项 |
yomlw_h |
shared array |
- |
地面与空间边界之间的净交换率,源码注释说明地面能量收支中当前使用 sigma T4,该项不直接用于地面 budget。 |
共享状态与副作用
lwxb 唯一的持久副作用是写入 yomlw_h::xi 的边界相关条目。它不读写文件,不分配内存,不打印诊断,也不修改输入数组。写入时所有边界交换率都同时填充互易项,例如 xi(...,jk,nlaylte+1) 与 xi(...,nlaylte+1,jk) 使用相同值。
核心逻辑
- 对
jk=1:nlaylte+1 构造层界面到空间的直接路径:zu=co2_u(:,:,jk),zup=co2_up(:,:,jk),气溶胶项直接取 aer_t(:,:,jk);调用 lwtt 后得到 trans(:,:,space,jk)=zt_co2*aer_t。
- 对同一组边界构造层界面到地面的直接路径:用底部边界
1 与当前边界 jk 的累计差 co2_u(:,:,1)-co2_u(:,:,jk) 和 co2_up(:,:,1)-co2_up(:,:,jk),气溶胶项用 aer_t(:,:,1)/aer_t(:,:,jk);调用 lwtt 后得到 trans(:,:,ground,jk)。
- 构造经地面反射后再到空间的路径:CO2 路径写成
2*co2_u(:,:,1)-co2_u(:,:,jk),气溶胶路径写成 aer_t(:,:,1)^2/aer_t(:,:,jk),并保存为 trans_emis(:,:,jk)。
- 对每个真实大气层
jk=1:nlaylte,层-空间交换率取相邻边界透过率差 trans(space,jk+1)-trans(space,jk),再叠加反射路径差分 trans_emis(jk)-trans_emis(jk+1) 乘以 (1-emis)。
- 地面-层交换率取
trans(ground,jk)-trans(ground,jk+1),并乘以 emis 后写入 xi(0,jk) 和互易项。
- 地面-空间交换率取
trans(ground,nlaylte+1),乘以 emis 后写入 xi(0,nlaylte+1) 和互易项。
伪代码
for boundary jk = 1 to nlaylte+1:
zu = co2_u(:,:,jk)
zup = co2_up(:,:,jk)
zt_aer = aer_t(:,:,jk)
zt_co2 = lwtt(zu, zup)
trans(space,jk) = zt_co2 * zt_aer
for boundary jk = 1 to nlaylte+1:
zu = co2_u(:,:,1) - co2_u(:,:,jk)
zup = co2_up(:,:,1) - co2_up(:,:,jk)
zt_aer = aer_t(:,:,1) / aer_t(:,:,jk)
zt_co2 = lwtt(zu, zup)
trans(ground,jk) = zt_co2 * zt_aer
for boundary jk = 1 to nlaylte+1:
zu = 2 * co2_u(:,:,1) - co2_u(:,:,jk)
zup = 2 * co2_up(:,:,1) - co2_up(:,:,jk)
zt_aer = aer_t(:,:,1) * aer_t(:,:,1) / aer_t(:,:,jk)
zt_co2 = lwtt(zu, zup)
trans_emis(jk) = zt_co2 * zt_aer
for layer jk = 1 to nlaylte:
ksi_space = trans(space,jk+1) - trans(space,jk)
ksi_emis = trans_emis(jk) - trans_emis(jk+1)
xi(layer,space) = ksi_space + ksi_emis * (1 - emis)
xi(space,layer) = xi(layer,space)
ksi_ground = trans(ground,jk) - trans(ground,jk+1)
xi(ground,layer) = ksi_ground * emis
xi(layer,ground) = xi(ground,layer)
xi(ground,space) = trans(ground,nlaylte+1) * emis
xi(space,ground) = xi(ground,space)
参与的主题流程
| 主题 |
参与方式 |
| 辐射计算 |
在长波 LTE 主流程中负责 lwmain 的边界传输函数阶段,为后续 lwflux 和 lwi 提供地面/空间相关 xi 条目。 |
| phymars 核心物理模块目录 |
属于 libf\phymars 长波辐射辅助文件组。 |
写法特点
- 固定格式 Fortran 文件,模块内只有一个公开子例程。
- 源码使用
2 表示空间路径,1 表示地面路径,并把地面层编号写为 0、空间编号写为 nlaylte+1。
kflev 参与数组形状,实际循环上界来自 yomlw_h::nlaylte;复现时必须保证两者与辐射初始化一致。
- 对地面反射路径使用
trans_emis 单独保存,最后只通过 (1-emis) 修正层-空间交换。
- 所有写入
xi 的边界项都显式写互易项,调用方不需要再镜像这些条目。
复现要点
- lwu 必须先生成单调一致的
co2_u/co2_up 和有下限保护的 aer_t;lwxb 在地面路径和反射路径中直接使用差值或比值。
aer_t(:,:,jk) 出现在除法分母中。当前上游 lwu 把 aer_t 钳制到 1e-30,复现边界交换时不能移除这一保护。
lwtt 对 sqrt(up) 和 u ** cst_voigt 没有本地保护;lwxb 构造的 zu/zup 依赖上游累计量物理一致,不能给出负的路径增量。
emis 在本例程中不做范围钳制;若外部传入小于 0 或大于 1 的值,xi 会按源码字面行为缩放。
ig0+jl 必须落在全局 xi 第一维有效范围内,否则边界交换率会写到错误网格列。
待确认
- 源码注释说明地面-空间项当前不用于地面 budget,因为
physiq.F 使用 sigma T4;本页记录该源码事实,未进一步确认所有下游分支是否完全不读取该项。
emis_gaz 中 CO2 冰覆盖时强制为 1. 的物理意图来自 lwmain_mod.F 的调用前处理,本页只记录其进入 lwxb 的接口效果。
相关页面