dust_scaling_mod.F90

路径

LMDZ.MARS\libf\phymars\dust_scaling_mod.F90

所属目录/模块

libf\phymars

文件定位

该文件定义尘埃缩放模块 dust_scaling_mod(110 行),导出唯一例程 compute_dustscaling,由 aeropacity(行 865)在算完各层尘埃光学厚度后调用。它的职责是根据缩放模式 dustscaling_mode 计算缩放因子并就地调整辐射用的尘埃光学厚度 aerosol

本模块是连接 aeropacity(光学厚度)、dust_param_mod(模式开关)、dust_rad_adjust_mod(v6 调整)的尘埃缩放枢纽。

定义的符号

符号 类型 行号 作用
dust_scaling_mod module 1 尘埃缩放模块
compute_dustscaling subroutine 7 dustscaling_mode 计算缩放因子并就地缩放 aerosol

依赖的模块

use 模块 only 列表 用途 待确认
dust_param_mod dustscaling_mode, odpref 缩放模式开关、参考气压 610 Pa
dust_rad_adjust_mod compute_dust_rad_adjust mode==2 计算辐射调整系数
dimradmars_mod iaerdust 尘埃气溶胶在 aerosol 第三维的索引表

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
compute_dust_rad_adjust dust_rad_adjust_mod 行 79(仅 mode==2zday/=zday_prev_call 计算 dust_rad_adjust

输入

输入 来源 类型/维度 单位 含义
ngrid, nlayer, naerkind, naerdust aeropacity integer scalar - 格点数、层数、气溶胶总数、尘埃气溶胶数
zday aeropacity real scalar sol 日期(用于 mode==2 每步只调一次判断)
pplev(ngrid,nlayer+1) aeropacity real Pa 层界面气压(取 pplev(:,1) 表压缩放)
tau_pref_scenario(ngrid) aeropacity real - 规定场景在 610 Pa 的尘埃柱厚度
IRtoVIScoef(ngrid) aeropacity real - 场景 IR→VIS 换算系数(传给 compute_dust_rad_adjust

输出

输出 去向 类型/维度 单位 含义
tauscaling(ngrid) aeropacity→后续物理 real (OUT) - 尘埃质量/数量缩放因子(mode!=1 时为 1)
dust_rad_adjust(ngrid) aeropacity real (INOUT) - 尘埃辐射调整系数(mode==2compute_dust_rad_adjust 更新)
aerosol(ngrid,nlayer,naerkind) aeropacity→辐射传输 real (INOUT) - 就地缩放尘埃气溶胶层光学厚度(下限 1e-20

共享状态与副作用

核心逻辑

  1. 设 tauscaling(行 42-45)dustscaling_mode!=1tauscaling=1(freedust/v6 不用质量缩放)。
  2. 算 taudust(行 47-67)
    • mode==1:累加所有尘埃气溶胶(naerdust 个)逐层 aerosol(:,:,iaerdust(iaer)) 得柱厚度。
    • mode==2:只累加背景尘埃 iaerdust(1)
  3. 算缩放因子(行 69-86)
    • mode==1tauscaling=tau_pref_scenario*pplev(:,1)/odpref/taudust
    • mode==2:若 zday/=zday_prev_call 则调 compute_dust_rad_adjust;更新 zday_prev_call=zday
  4. 缩放 aerosol(行 88-107)mode<=1tauscalingmode==2dust_rad_adjust,均 max(1e-20, aerosol*因子)

伪代码

if dustscaling_mode != 1: tauscaling = 1

# 柱厚度
if mode==1: taudust = Σ_iaer Σ_l aerosol(:,l,iaerdust(iaer))   # 全部尘埃
elif mode==2: taudust = Σ_l aerosol(:,l,iaerdust(1))           # 仅背景尘埃

# 缩放因子
if mode==1: tauscaling = tau_pref_scenario*pplev(:,1)/odpref/taudust
elif mode==2:
    if zday != zday_prev_call:
        compute_dust_rad_adjust(..., taudust, IRtoVIScoef, dust_rad_adjust)
    zday_prev_call = zday

# 缩放 aerosol
if mode<=1: aerosol(:,:,iaerdust) = max(1e-20, aerosol * tauscaling)
else:       aerosol(:,:,iaerdust) = max(1e-20, aerosol * dust_rad_adjust)

参与的主题流程

主题 参与方式
尘埃循环 实现三种尘埃缩放模式(freedust/GCM v5.3 tauscaling/GCM v6 dust_rad_adjust),把 GCM 尘埃光学厚度对齐到观测场景
辐射 缩放后的 aerosol 直接喂给辐射传输

写法特点

复现要点

待确认

相关页面