solang.F

路径

LMDZ.MARS\libf\phymars\solang.F

所属目录 / 模块

libf\phymars

文件定位

solang.F 定义 solang_mod 模块和 solang 子程序,用物理网格的经纬度三角缓存、太阳赤纬和当前时角计算每个格点的太阳天顶角余弦 mu0,并用 mu0>0 给出当前时间片是否日照的 fract。它是 physiq 日变化辐射分支的太阳角计算入口,也被 nirco2abs 在近红外 CO2 日积分中复用。

定义的符号

符号 类型 行号 作用
solang_mod module 1 日变化太阳角辅助模块。
solang subroutine 7 按格点经纬度和太阳赤纬/时角计算 pmu0pfract

依赖的模块

use 模块 only 列表 用途 待确认
- - 本文件没有 use 依赖,全部数据通过显式参数传入。 -

调用的关键例程

被调用例程 所在模块 / 来源 调用位置 作用
- - - 本文件不调用自定义例程,也不调用非平凡 intrinsic。

下游调用点

调用方 源码位置 用途
physiq_mod.F use solang_mod 在 66 行;调用在 1017-1018 行 diurnal=.true. 时,用 sinlon/coslon/sinlat/coslat 和由 declin/zday 构造的 ztim1/2/3 写入 comsaison_h::mu0/fract
nirco2abs.F use solang_mod 在 12 行;调用在 216-218 行 近红外 CO2 加热率的日平均积分中,对子时间点计算 mu0_int/fract_int

输入

输入 来源 类型 / 维度 含义
kgrid 调用方 integer scalar 物理格点数。
psilon(kgrid) comgeomfi_h::sinlon real array 格点经度正弦。
pcolon(kgrid) comgeomfi_h::coslon real array 格点经度余弦。
psilat(kgrid) comgeomfi_h::sinlat real array 格点纬度正弦。
pcolat(kgrid) comgeomfi_h::coslat real array 格点纬度余弦。
ptim1 调用方 real scalar sin(declin)
ptim2 调用方 real scalar cos(declin)*cos(time)physiq 中 time 写成 2*pi*(zday-.5)
ptim3 调用方 real scalar -cos(declin)*sin(time);实参注释写作 SIN(DECLI)*SIN(TIME),但调用方和公式实际用于经度正弦项。

输出

输出 去向 类型 / 维度 含义
pmu0(kgrid) comsaison_h::mu0 或局部 mu0_int real array 太阳天顶角余弦;夜侧可为负值,源码没有把负值钳为 0。
pfract(kgrid) comsaison_h::fract 或局部 fract_int real array 当前时间片日照标志;pmu0>0 时为 1,否则为 0。

共享状态与副作用

核心逻辑

  1. 初始化所有格点的 pmu0=0pfract=0
  2. 对每个格点计算:
pmu0 = sin(lat)*ptim1 + cos(lat)*ptim2*cos(lon) + cos(lat)*ptim3*sin(lon)
  1. pmu0 > 0,设置 pfract=1;否则保持 pfract=0

伪代码

for jl in 1..kgrid:
    pmu0[jl] = psilat[jl]*ptim1
              + pcolat[jl]*ptim2*pcolon[jl]
              + pcolat[jl]*ptim3*psilon[jl]
    pfract[jl] = 1 if pmu0[jl] > 0 else 0

参与的主题流程

主题 参与方式
日变化太阳几何 physiqdiurnal=.true. 分支使用本例程更新每个格点即时 mu0/fract
辐射 mu0/fract 进入短波辐射、坡面和相关诊断路径;非日变化分支由 mucorr 提供日平均等效值。
近红外 CO2 加热 nirco2abs 用本例程在日积分子步上重新计算太阳角。

写法特点

复现要点

待确认

相关页面