dust_rad_adjust_mod.F90

路径

LMDZ.MARS\libf\phymars\dust_rad_adjust_mod.F90

所属目录/模块

libf\phymars

文件定位

该文件定义尘埃辐射调整系数模块 dust_rad_adjust_mod(146 行),导出例程 compute_dust_rad_adjust,由 dust_scalingcompute_dustscaling,行 79)在 dustscaling_mode==2(GCM v6 风格)时调用。它的职责是计算逐格点的尘埃辐射调整系数 dust_rad_adjust:把每日 14:00(t_scenario_sol)尘埃场景目标柱厚度与 GCM 当前可见光尘埃柱厚度 taudust 之比作为“目标”,在相邻两日 14:00 的目标值(dust_rad_adjust_prev/dust_rad_adjust_next)之间做时间线性插值,从而让辐射传输看到的尘埃光学厚度平滑跟随观测场景,而不强行重缩放尘埃 tracer 质量(区别于 dustscaling_mode==1tauscaling)。

模块保存两个相邻日的调整系数 dust_rad_adjust_prev/dust_rad_adjust_next(restart 经 phyetat0/phyredem 读写),并提供 ini/end_dust_rad_adjust_mod 管理其分配。

定义的符号

符号 类型 行号 作用
dust_rad_adjust_mod module 1 尘埃辐射调整系数模块
dust_rad_adjust_prev real SAVE ALLOCATABLE(:) 5 当前 t_scenario 时刻算得的调整系数(上一日 14:00 目标),按格点
dust_rad_adjust_next real SAVE ALLOCATABLE(:) 7 次日 t_scenario 的调整系数(下一日 14:00 目标),按格点
compute_dust_rad_adjust subroutine 14 计算 dust_rad_adjust(两日目标间时间线性插值)
ini_dust_rad_adjust_mod subroutine 126 分配 dust_rad_adjust_prev/next
end_dust_rad_adjust_mod subroutine 137 释放 dust_rad_adjust_prev/next

依赖的模块

use 模块 only 列表 用途 待确认
geometry_mod longitude_deg 由经度算各格点本地时(当前步与上一步)
time_phylmdz_mod dtphys, daysec 物理步长与 sol 秒数,算上一步 zday_prevdt
dust_param_mod odpref, t_scenario_sol 参考气压 610 Pa;场景厚度精确时刻(14:00,触发目标更新与插值锚点)
read_dust_scenario_mod read_dust_scenario 读取次日(zday_scenario_next)场景目标厚度 tau_pref_scenario_next

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
read_dust_scenario read_dust_scenario_mod 行 80 读次日场景尘埃柱厚度(VIS)

输入

输入 来源 类型/维度 单位 含义
ngrid, nlayer compute_dustscaling integer scalar - 水平格点数、垂直层数
zday compute_dustscaling real scalar sol 日期(sol 分数)
pplev(ngrid,nlayer+1) compute_dustscaling real Pa 层界面气压(取 pplev(:,1) 表压缩放)
taudust(ngrid) compute_dustscaling real - GCM 可见光尘埃柱厚度(目标比的分母)
IRtoVIScoef(ngrid) compute_dustscaling(源自 aeropacity real - 场景 IR→VIS 换算系数,传给 read_dust_scenario

输出

输出 去向 类型/维度 单位 含义
dust_rad_adjust(ngrid) compute_dustscaling→缩放 aerosol real (OUT) - 尘埃辐射调整系数(时间插值结果)
dust_rad_adjust_prev/next(ngrid) module SAVE;restart phyetat0/phyredem real - 相邻两日 14:00 的目标调整系数

共享状态与副作用

核心逻辑

  1. firstcall(行 56-64):打印提示;分配 local_timelocal_time_prevdttau_pref_scenario_next
  2. 算本地时(行 66-75):由 zday+经度算当前步与上一步(zday_prevdt=zday-dtphys/daysec)本地时;zday_scenario=floor(zday)zday_scenario_next=zday_scenario+1
  3. 读次日场景(行 77-82)read_dust_scenario(zday_scenario_next, IRtoVIScoef, tau_pref_scenario_next)
  4. 更新目标(行 84-101):逐格点,若本地时本步跨过 t_scenario_soldust_rad_adjust_prev=旧 nextdust_rad_adjust_next=tau_pref_scenario_next*pplev(:,1)/odpref/taudustnext=min(next,5)(防极夜大日变化时 tau 失控)。
  5. 时间插值(行 103-119):逐格点算权重 weight(本地时距上一日 14:00 的 sol 距离:≥14:00 取 local_time-t_scenario_sol,否则取 (1-t_scenario_sol)+local_time),dust_rad_adjust=prev+weight*(next-prev)

伪代码

if firstcall:
    print 提示; allocate local_time, local_time_prevdt, tau_pref_scenario_next

# 本地时
local_time      = f(zday, longitude)
local_time_prevdt = f(zday - dtphys/daysec, longitude)
zday_scenario_next = floor(zday) + 1

# 次日场景目标
tau_pref_scenario_next = read_dust_scenario(zday_scenario_next, IRtoVIScoef)

# 跨 14:00 更新目标
for ig:
    if local_time crosses t_scenario_sol this step:
        dust_rad_adjust_prev = dust_rad_adjust_next       # 旧 next 转 prev
        dust_rad_adjust_next = tau_pref_scenario_next*pplev(:,1)/odpref/taudust
        dust_rad_adjust_next = min(dust_rad_adjust_next, 5.)   # 上限

# 两日目标间线性插值
for ig:
    if local_time >= t_scenario_sol: weight = local_time - t_scenario_sol
    else:                            weight = (1-t_scenario_sol) + local_time
    dust_rad_adjust = prev + weight*(next - prev)

参与的主题流程

主题 参与方式
尘埃循环 dustscaling_mode==2(GCM v6)下产出辐射调整系数 dust_rad_adjust,由 compute_dustscaling 用它缩放 aerosol 光学厚度,使辐射看到的尘埃跟随观测场景而不改尘埃质量
辐射 调整系数最终作用在喂给辐射传输的 aerosol

写法特点

复现要点

待确认

相关页面