flusv.F

路径

LMDZ.MARS\libf\phymars\flusv.F

所属目录/模块

libf\phymars

文件定位

flusv.F 定义 flusv_mod,提供长波红外散射通量求解器。主例程 flusv 在给定每层单次散射反照率、不对称因子、光学厚度、层界黑体亮度和地表发射率后,求解 n 层之间的向上/向下红外通量。源码注释说明它假设每层内黑体亮度 B 随光学厚度 tau 线性变化,顶层向下通量为零,层号从大气顶到地面。

当前只读源码搜索显示外部调用点在 lwdiff.Flwdiff 对 CO2 15 微米带外的红外谱带 iir=3,nir 组装 NDD=nlaylte*2 个扩散子层,然后以 nsf=0 调用 flusv 计算 hemispheric constant 通量,再把结果累加回 PFLUC

定义的符号

符号 类型 行号 作用
flusv_mod module 1 包含红外散射通量求解例程和内部三对角求解器。
flusv subroutine 7 组装双流红外散射边值问题,求解每个层界的向上/向下通量。
sys3v subroutine 274 向量化求解三对角线性系统,供 flusv2*n 个积分常数求解使用。

依赖的模块

use 模块 only 列表 用途 待确认
dimradmars_mod ndlo2, ndlon, nflev 定义辐射数组列数和工作数组层数。flusvsys3v 都直接用这些维度声明实参数组和临时数组。

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
sys3v flusv.F flusv 第 162 行 求解 flusv 组装出的 2*n 维三对角系统,返回每层两个积分常数 y(:,2*i-1:2*i)

输入

输入 来源 类型/维度 单位 含义
KDLON 调用方 INTEGER - 本次向量化计算的水平列数;循环范围为 1:KDLON
nsf 调用方 INTEGER - 通量算法选择。0 只用 hemispheric constant 直接公式;>0 会进入 source function 角向积分分支。
n 调用方 INTEGER layer 扩散层数;flusv 组装大小为 2*n 的线性系统。
omega 调用方 REAL(NDLO2,n) - 每层单次散射反照率。
g 调用方 REAL(NDLO2,n) - 每层散射不对称因子。
tau 调用方 REAL(NDLO2,n) - 每层光学厚度。
emis 调用方 REAL(NDLO2) - 地表发射率;底边界同时使用 emis*pi*bsol(1-emis) 反射项。
bh 调用方 REAL(NDLO2,n+1) blackbody luminance 层界黑体亮度,bh(:,n+1) 是剖面对应的地面值。
bsol 调用方 REAL(NDLO2) blackbody luminance 实际地表黑体亮度,可不同于 bh(:,n+1)

输出

输出 去向 类型/维度 单位 含义
fah 调用方 REAL(NDLO2,n+1) flux 每个层顶的向上红外通量,fah(:,n+1) 为地面向上通量。
fdh 调用方 REAL(NDLO2,n+1) flux 每个层顶的向下红外通量,fdh(:,1) 在顶边界为零,fdh(:,n+1) 为地面向下通量。
y sys3v 调用方 REAL(NDLO2,n) - 三对角系统解;在 flusv 中对应每层两个积分常数。

共享状态与副作用

flusv.F 不定义保存型 module 变量,不读写文件,不打印日志,也不读取配置开关。副作用限于写入输出数组 fah/fdh,以及 sys3v 写入输出数组 y。所有临时状态都在例程局部数组中。

核心逻辑

  1. 对每层、每个向量列计算双流散射系数:beta=(1-g)/2gama1=2*(1-omega*(1-beta))gama2=2*omega*betaalambda=sqrt(gama1**2-gama2**2),并由 grgama=(gama1-alambda)/gama2 得到指数解的耦合系数。
  2. 把每层黑体亮度表示成 b0+b1*tau。当 tau>1.E-3 时用层顶和层底黑体亮度差分给出 b1;当光学厚度太小时强制等温层,令 b0=(bh(i)+bh(i+1))/2b1=0,避免 dB/dtau 过大。
  3. 计算每层边界组合系数 e1/e2/e3/e4、非齐次项 cah/cab/cdh/cdb,以及 source-function 分支需要的 grg/grh/grj/grkalpha1/alpha2sigma1/sigma2
  4. 组装 2*n 维三对角系统:第 1 行施加大气顶向下通量为零;中间行连接相邻层界;第 2*n 行施加地表发射和反射边界条件。
  5. 调用 sys3v(KDLON,2*n,a,b,d,e,y) 求出每层两个积分常数。
  6. y(:,2*i-1)y(:,2*i) 更新 grg/grh/grj/grk
  7. nsf==0,直接用 hemispheric constant 公式填充所有层界的 fah/fdh
  8. nsf>0,先从大气顶向下沿 8 个固定高斯角度积分 source function 得到 fdh,再用地表反射条件得到 fah(:,n+1),最后从地面向上积分得到各层 fah
  9. sys3v 从系统底部向上做消元,保存 as/ds,再从顶部向下回代生成 y

伪代码

for each layer i and column iv:
  derive two-stream scattering coefficients from omega, g, tau
  if tau is large enough:
    linearly interpolate blackbody luminance across optical depth
  else:
    use isothermal layer approximation
  build layer transfer/source coefficients

assemble top boundary, internal interface rows, and ground boundary
solve the 2*n tridiagonal system with sys3v

if nsf == 0:
  compute upward/downward interface fluxes directly from solved constants
else:
  integrate downward intensities over 8 quadrature angles
  apply ground emission plus reflected downward flux
  integrate upward intensities over 8 quadrature angles

参与的主题流程

主题 参与方式
辐射计算 长波辐射辅助求解器;lwdiff.F 在 CO2 15 微米带外红外谱带中调用它计算散射通量。
phymars 核心物理模块目录 属于 libf\phymars 的辐射辅助文件。

写法特点

复现要点

待确认

相关页面