comm_wrf.F90

路径

LMDZ.MARS\libf\phymars\comm_wrf.F90

所属目录/模块

libf\phymars

文件定位

comm_wrf.F90 定义 comm_wrf,是 phymars 的 MESOSCALE 编译分支使用的 WRF 风格输出共享缓存模块。源码注释说明它用于输出那些尚未放入其他共享模块的诊断场。模块本身只声明、分配和释放数组;实际写入发生在 physiq_mod.F#ifdef MESOSCALE 分支中。

复现上,这个模块不是物理过程入口,也不改变物理倾向。它把 physiq 已经算出的短波/长波加热率、短波地表向下通量、尘埃/水冰光学与半径、水汽/水冰柱量等复制到 comm_* 数组,供外部 WRF/mesoscale 输出接口读取。

定义的符号

符号 类型 行号 作用
comm_wrf module 1 MESOSCALE 分支的 WRF 风格诊断输出缓存模块
comm_HR_SW real allocatable save module variable 8 短波加热率缓存,二维 ngrid,nlayer
comm_HR_LW real allocatable save module variable 9 长波加热率缓存,二维 ngrid,nlayer
comm_SWDOWNZ real allocatable save module variable 10 地表向下短波通量缓存,长度 ngrid
comm_TAU_DUST real allocatable save module variable 11 参考可见尘埃光学厚度缓存,长度 ngrid
comm_RDUST real allocatable save module variable 12 尘埃半径缓存,二维 ngrid,nlayer
comm_QSURFDUST real allocatable save module variable 13 地表尘埃质量缓存,长度 ngrid
comm_MTOT real allocatable save module variable 14 水汽柱量转换后的缓存,长度 ngrid
comm_ICETOT real allocatable save module variable 15 水冰柱量转换后的缓存,长度 ngrid
comm_VMR_ICE real allocatable save module variable 16 水冰体积混合比缓存,二维 ngrid,nlayer
comm_TAU_ICE real allocatable save module variable 17 水冰云 TES 光学厚度缓存,长度 ngrid
comm_RICE real allocatable save module variable 18 水冰粒子半径缓存,二维 ngrid,nlayer
allocate_comm_wrf subroutine 26 ngrid,nlayer 分配未分配的 comm_* 数组
deallocate_comm_wrf subroutine 43 无条件释放所有 comm_* 数组

依赖的模块

use 模块 only 列表 用途 待确认
- 本模块没有 use 依赖 -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
无外部例程 - - 本模块只调用 Fortran allocated/allocate/deallocate 内建机制

输入

输入 来源 类型/维度 单位 含义
ngrid physiq_mod.F 的 MESOSCALE 分支调用 allocate_comm_wrf integer scalar - 物理网格列数
nlayer physiq_mod.F 的 MESOSCALE 分支调用 allocate_comm_wrf integer scalar - 垂直层数
zdtsw(ngrid,nlayer) physiq_mod.F 辐射计算后局部数组 real array K/s 短波加热率,写入 comm_HR_SW
zdtlw(ngrid,nlayer) physiq_mod.F 辐射计算后局部数组 real array K/s 长波加热率,写入 comm_HR_LW
fluxsurf_dn_sw_tot(ngrid,*) physiq_mod.F 辐射通量数组 real array W m-2 第 1 个坡面/平面索引的地表向下短波通量
tau_pref_gcm(ngrid) physiq_mod.F 尘埃光学厚度状态 real array - 参考可见尘埃光学厚度
rdust(ngrid,nlayer) physiq_mod.F 尘埃半径数组 real array m 尘埃粒子半径
qsurf(:,igcm_dust_mass,1) physiq_mod.F 地表 tracer 数组 real array kg m-2 地表尘埃质量;尘埃质量 tracer 不存在时输出 0
mtot(ngrid) / icetot(ngrid) physiq_mod.F 水循环柱积分数组 real array kg m-2 水汽/水冰柱质量,写入前乘 1.e6/rho_ice
zq(:,:,igcm_h2o_ice)mmeanmmol physiq_mod.F tracer 与平均分子量状态 real arrays - 水冰体积混合比换算来源
taucloudtes / tauTES physiq_mod.F 水冰云光学厚度数组 real array - activice 为真时用 taucloudtes,否则用 tauTES
rice(ngrid,nlayer) physiq_mod.F 水冰粒子半径数组 real array m 写入 comm_RICE

输出

输出 去向 类型/维度 单位 含义
comm_HR_SW MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid,nlayer) K/s WRF state 注释名 HR_SW
comm_HR_LW MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid,nlayer) K/s WRF state 注释名 HR_LW
comm_SWDOWNZ MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid) W m-2 WRF state 注释名 SWDOWNZ
comm_TAU_DUST MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid) - WRF state 注释名 TAU_DUST
comm_RDUST MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid,nlayer) m WRF state 注释名 RDUST
comm_QSURFDUST MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid) kg m-2 WRF state 注释名 QSURFDUST
comm_MTOT MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid) pmic 水汽柱质量折算为微米冰等效厚度
comm_ICETOT MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid) pmic,源码注释有不一致 水冰柱质量同样乘 1.e6/rho_ice
comm_VMR_ICE MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid,nlayer) ppm 水冰体积混合比
comm_TAU_ICE MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid) - TES 波数处水冰云光学厚度
comm_RICE MESOSCALE/WRF 输出接口,推断 real allocatable (ngrid,nlayer) m 水冰粒子半径

共享状态与副作用

核心逻辑

  1. physiq_mod.F 行 107-110 在 #ifdef MESOSCALE 分支中 use comm_wrf
  2. physiq_mod.F 行 3254 进入 MESOSCALE 输出段,行 3260 调用 allocate_comm_wrf(ngrid,nlayer)
  3. allocate_comm_wrf 逐个检查 11 个 comm_* 数组,未分配时按 ngridngrid,nlayer 分配。
  4. physiq_mod.F 行 3263-3297 把已计算的物理诊断量复制到 comm_* 数组。
  5. igcm_dust_mass 不为 0,comm_QSURFDUSTqsurf(:,igcm_dust_mass,1);否则全设为 0。
  6. comm_MTOTcomm_ICETOT 分别取 mtoticetot 并乘 1.e6/rho_ice
  7. igcm_h2o_ice 不为 0,comm_VMR_ICE = 1.e6*zq(:,:,igcm_h2o_ice)*mmean/mmol(igcm_h2o_ice);否则全设为 0。
  8. activice 为真,comm_TAU_ICEtaucloudtes;否则取 tauTES

伪代码

module comm_wrf:
    declare WRF-style diagnostic arrays as allocatable SAVE
    mark all arrays THREADPRIVATE

allocate_comm_wrf(ngrid, nlayer):
    for each 2-D diagnostic:
        if not allocated, allocate(ngrid, nlayer)
    for each 1-D diagnostic:
        if not allocated, allocate(ngrid)

physiq MESOSCALE output block:
    call allocate_comm_wrf(ngrid, nlayer)
    copy shortwave/longwave heating rates
    copy surface downward shortwave flux
    copy dust optical depth and dust radius
    if dust mass tracer exists:
        copy surface dust mass
    else:
        write zero surface dust mass
    convert water vapor and water ice column masses by 1e6/rho_ice
    if water ice tracer exists:
        compute water ice VMR in ppm
    else:
        write zero VMR
    select active/inactive water ice optical depth source
    copy water ice particle radius

参与的主题流程

主题 参与方式
MESOSCALE / WRF 输出 #ifdef MESOSCALE 分支中为 WRF 风格 registry/state 输出缓存诊断数组
辐射诊断 缓存 zdtsw/zdtlw 加热率和 fluxsurf_dn_sw_tot 地表短波通量
尘埃诊断 缓存 tau_pref_gcmrdust 和可选 qsurf(:,igcm_dust_mass,1)
水循环诊断 缓存 mtot/icetot 的微米等效厚度、VMR_ICETAU_ICErice

写法特点

复现要点

待确认

相关页面