leapfrog_nogcm.F

路径

LMDZ.MARS\libf\dynphy_lonlat\phymars\leapfrog_nogcm.F

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

独立物理模式(nogcm)的时间积分主循环。在没有完整 GCM 动力核心的情况下,实现 Matsuno forward/backward + leapfrog 时间步进方案,并用牛顿松弛 + 水平混合替代动力过程,模拟气压、温度和 CO₂ 示踪剂的全局重分布。该例程是 nogcm.F90 的核心驱动。

作者:P. Le Van / L. Fairhead / F. Hourdin。SVN $Id: leapfrog.F 1446 2010-10-22$

定义的符号

符号 类型 行号 作用
leapfrog_nogcm subroutine 6 独立物理模式时间积分主循环
globaverage2d function 1021 全局面积加权二维平均(内部辅助函数)

依赖的模块

use 模块 only 列表 用途 待确认
IOIPSL NetCDF 输出接口(#ifdef CPP_IOIPSL 条件编译)
infotrac nqtot, ok_iso_verif, tname 示踪剂总数、同位素校验开关、示踪剂名称
write_field writefield 场写入辅助
control_mod planet_type, nday, day_step, iperiod, iphysiq, less1day, fractday, ndynstep, iconser, dissip_period, offline, ip_ebil_dyn, ok_dynzon, periodav, ok_dyn_ave, iecri, ok_dyn_ins, output_grads_dyn 运行控制参数
exner_hyb_m exner_hyb 混合坐标 Exner 函数
exner_milieu_m exner_milieu 中间层 Exner 函数
cpdet_mod cpdet, tpot2t, t2tpot 温度相关 Cp(T) 适配
comuforc_h 全模块 强迫场公共块
comvert_mod ap, bp, pressure_exner, presnivs, aps, bps, pseudoalt, preff, scaleheight 垂直坐标系数与参数
comconst_mod daysec, dtvr, dtphys, dtdiss, cpp, ihf, iflag_top_bound, pi, kappa, r 物理常数与时间步长
logic_mod iflag_phys, ok_guide, forward, leapf, apphys, statcl, conser, purmats, tidal, ok_strato 逻辑控制开关
temps_mod jD_ref, jH_ref, itaufin, day_ini, day_ref, start_time, dt 时间与日期

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
pression 外部 303, 464, 584, 635 从混合坐标系数和 ps 计算层间气压
exner_hyb / exner_milieu exner_hyb_m / exner_milieu_m 305-308, 466-469, 637-641 计算 Exner 函数(按 pressure_exner 分支)
geopot 外部 472, 809, 843, 953, 978 从位温 + Exner 计算位势
globaverage2d 内部函数 337, 599, 656, 688, 699, 732, 746-747 全局面积加权二维平均
calfis 外部 549-553 物理倾向计算入口
addfi 外部 571-573 将物理倾向加到动力变量
massdair 外部 585, 636 从气压计算空气质量
diagedyn 外部 518-520 动力诊断(仅 Earth,ip_ebil_dyn >= 1
writehist IOIPSL 852, 988 写入历史文件
writedynav IOIPSL 822-823, 966-967 写入动力平均文件
bilan_dyn IOIPSL 815-817, 959-961 动力收支诊断
dynredem1 外部 870-871, 1000-1001 写入 restart 文件
abort_gcm 外部 321, 795, 935 中止/正常终止模拟
check_isotopes_seq 外部 830, 915, 941 同位素序列校验(ok_iso_verif
tpot2t cpdet_mod 841, 976 位温→温度转换(Cp(T) 适配)
scopy BLAS 371-375 数组复制(保存前一步变量)

输入

输入 来源 类型/维度 单位 含义
ucov INOUT real(ip1jmp1, llm) m/s 纬向协变风
vcov INOUT real(ip1jm, llm) m/s 经向协变风
teta INOUT real(ip1jmp1, llm) K 位温
ps INOUT real(ip1jmp1) Pa 地表气压
masse INOUT real(ip1jmp1, llm) kg 空气质量
phis INOUT real(ip1jmp1) m²/s² 地表位势
q INOUT real(ip1jmp1, llm, nqtot) 平流示踪剂
time_0 IN real 初始时间(未使用)

输出

所有输出通过 INOUT 参数回写:ucov/vcov/teta/ps/masse/q 在时间积分后被更新到最终状态。

共享状态与副作用

核心逻辑

  1. 确定终止步 itaufin:根据 nday(正=天数,负=步数)、less1day(分数天)、ndynstep(固定步数)计算
  2. 初始化倾向数组为零dudis/dvdis/dtetadis/dutop/dufi/dvfi/dtetafi/dqfi/dpfi
  3. 初始气压与 Exner:调用 pression + exner_hyb/exner_milieu,并验证 PK 单调递减
  4. 计算参考气压因子 kpd = exp(-phis/(R*200)) 和全局平均 p00d = globaverage2d(kpd)
  5. 定位 CO₂ 示踪剂:遍历 tname 找到 "co2" 的索引 igcm_co2
  6. Matsuno Forward 步(label 1):
    • 保存前一步变量(scopy × 5)
    • forward=.TRUE., leapf=.FALSE., dt=dtvr
    • 动力倾向置零(nogcm 无动力核心)
    • 判断物理调用 apphys(按 iphysiq 频率)
  7. 物理调用分支apphys 为真时):
    • 重新计算气压、Exner、位势
    • 调用 calfis 计算物理倾向
    • 调用 addfi 施加物理倾向
    • nogcm 特有:牛顿松弛气压 → ps += (p0*kpd - ps) * (1 - exp(-dtphys/tau_ps))tau_ps = 1s
    • nogcm 特有:位温修正 teta *= (ps_new/ps_old)^kappa
    • nogcm 特有:CO₂ 垂直混合(质量加权柱平均替代垂直分布)
    • nogcm 特有:CO₂ 水平混合(牛顿松弛向全局平均,tau_co2 = 10^5 s
    • nogcm 特有:温度水平混合(牛顿松弛,tau_teta = 10^7 s
  8. Matsuno Backward / Leapfrog 步(label 2):
    • 根据 purmats 选择纯 Matsuno 或 Matsuno+Leapfrog 方案
    • Leapfrog 步 dt = 2*dtvr
  9. 输出与 restart
    • iperiod 频率写动力平均和诊断
    • iecri 频率写历史文件
    • 终止时写 restart.ncdynredem1
  10. 时间步进控制:通过 GO TO 1/2 在 forward/backward/leapfrog 之间跳转

伪代码

Compute itaufin from nday / ndynstep / less1day
Zero all tendency arrays
Compute initial pressure, Exner function; verify PK monotonicity
Compute kpd = exp(-phis / (R*200)); p00d = global_average(kpd)
Locate CO2 tracer index (igcm_co2)

LOOP itau = 0 .. itaufin:
    -- Matsuno Forward step --
    Save current state (ucov, vcov, teta, masse, ps) → (...m1)
    Set forward=.T., leapf=.F., dt=dtvr
    Zero dynamic tendencies (nogcm has no dynamics)
    IF physics due (apphys):
        Recompute pressure, Exner, geopotential
        CALL calfis → physical tendencies (dufi, dvfi, dtetafi, dqfi)
        CALL addfi → apply tendencies
        Newtonian relax ps toward p0*kpd (tau=1s)
        Correct teta for ps change
        Vertical-mix CO2 (column mass-weighted mean)
        Horizontal-mix CO2 toward global mean (tau=1e5s)
        Horizontal-mix teta toward global mean (tau=1e7s)

    -- Matsuno Backward / Leapfrog step --
    IF purmats: pure Matsuno (forward→backward→forward...)
    ELSE: Matsuno forward+backward, then leapfrog (dt=2*dtvr)

    IF output due: write history / averages / diagnostics
    IF itau == itaufin: write restart.nc; stop

参与的主题流程

主题 参与方式
独立物理模式(nogcm) 提供完整的时间积分循环,替代 GCM 动力核心
CO₂ 循环(nogcm 近似) 用牛顿松弛和水平混合近似动力输运
初始场与 restart 终止时写 restart.nc

写法特点

复现要点

待确认

相关页面