lwxb.F
快速理解
它做什么: 构造与地面、空间及大气层边界相关的交换系数 xi。被 lwmain 调用。
基本过程: 把 lwu 准备的吸收量按边界路径(地面-层/层-太空/地面-太空)重组 → 调 lwtt → 差分。
关键结果: 边界相关净交换率写入 yomlw_h::xi,与 lwxd/lwxn 共同凑出完整 xi 表。
路径
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的接口效果。
相关页面
- radiation
- phymars/index
- lwu
- lwtt
- lwflux
- lwi
- lwmain_mod - 长波 LTE 主调度入口,按
ilwb调用本例程刷新边界交换率。 - lwxd
- lwxn
- yomlw_h.md:长波辐射共享参数。