waterice_tifeedback_mod.F90

路径

LMDZ.MARS\libf\phymars\waterice_tifeedback_mod.F90

所属目录/模块

libf\phymars

文件定位

该文件定义 waterice_tifeedback_mod 模块,含唯一 subroutine waterice_tifeedback。职责是:根据地表水冰覆盖量或土壤孔隙冰填充率,重算一套土壤热惯量廓线 newtherm_i(ngrid,nsoil,nslope),供 soil 例程在求解地温时替代默认热惯量 inertiedat。这是水冰对地表/地下热状态的“热惯量反馈”。

源码头注释说明两种机制(互斥,当前不能同时开启):

历史:JBM 为纯冰编写(2008-2012),LL 于 2024 移入模块/改 .F90 并加入孔隙冰路径。

定义的符号

符号 类型 行号 作用
waterice_tifeedback_mod module 1 容器模块
waterice_tifeedback subroutine 25 按水冰覆盖/孔隙冰重算土壤热惯量廓线

依赖的模块

use 模块 only 列表 用途 待确认
tracer_mod rho_ice 水冰密度(kg·m⁻³),把地表冰量 icecover(kg·m⁻²)换算为厚度 icedepth(m)
comsoil_h layer 各土壤层深度(m),用于定位冰/风化层边界
comsoil_h inertiedat 默认土壤热惯量廓线 (ngrid,nsoil),无冰层与孔隙冰公式的基底值
comsoil_h porosity_reg 风化层孔隙率(PARAMETER=0.45,comsoil_h.F90:41),孔隙冰公式权重
surfdat_h watercaptag 永久水冰盖标志(logical),为真时整列设为冰热惯量
surfdat_h inert_h2o_ice 地表水冰热惯量(默认 2400 J·m⁻²·K⁻¹·s⁻¹ᐟ²,conf_phys.F:1012
callkeys_mod poreice_tifeedback 孔隙冰反馈开关(默认 .false.,conf_phys.F:1145
callkeys_mod surfaceice_tifeedback 地表冰反馈开关(默认 .false.,conf_phys.F:780

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
本例程不调用其他例程,仅含算术、sqrt 与循环

调用方(核验):

调用方 位置 上下文
physiq_mod.F :737 firstcall/初始化土壤前,IF (surfaceice_tifeedback.or.poreice_tifeedback) 内调用,输出 inertiesoil_tifeedback 传给 soil
physiq_mod.F :2487 主物理步中再次调用(地温反馈更新)

调用实参(核验 physiq_mod.F:737-739):icecover = qsurf(:,igcm_h2o_ice,:)poreice = pore_icefraction,输出 newtherm_i = inertiesoil_tifeedback,随后该热惯量传入 soil(...):741)。

输入

输入 来源 类型/维度 单位 含义
ngrid 调用方 integer 水平格点数
nsoil 调用方 integer 土壤层数(传 nsoilmx
nslope 调用方 integer 次网格坡面数
icecover(ngrid,nslope) 调用方 real kg·m⁻² 地表水冰量(传 qsurf(:,igcm_h2o_ice,:)
poreice(ngrid,nsoil,nslope) 调用方 real 1(分数) 孔隙冰填充率(传 pore_icefraction

注意:ngrid/nsoil/nslopeicecover/poreice/newtherm_i 在声明区未写 intent(见“写法特点”),但按用途 icecoverporeice 为输入、newtherm_i 为输出。

输出

输出 去向 类型/维度 单位 含义
newtherm_i(ngrid,nsoil,nslope) 调用方 real J·m⁻²·K⁻¹·s⁻¹ᐟ² 新土壤热惯量廓线,传给 soil 求地温

共享状态与副作用

核心逻辑

  1. 先把 newtherm_i 全置 0。
  2. surfaceice_tifeedback 为真(地表块状冰路径),对每个坡面、每个格点:
    • 冰厚 icedepth = icecover/rho_ice(m)。
    • icedepth >= layer(nsoil)watercaptag(ig) 为真(冰极厚或永久冰盖):整列 newtherm_i = inert_h2o_ice
    • 否则若 icedepth < layer(1)(冰极薄,忽略):整列 newtherm_i = inertiedat
    • 否则(冰介于其间):
      • 找冰/风化层边界 iref:第一个满足 layer(ik) <= icedepth < layer(ik+1)ik+1
      • 边界以上各层 ik=1..iref-1 设为 inert_h2o_ice(纯冰)。
      • 边界层 iref 用热传导串联公式取过渡值:sqrt( (layer(iref)-layer(iref-1)) / ( (icedepth-layer(iref-1))/inert_h2o_ice² + (layer(iref)-icedepth)/inertiedat(ig,ik)² ) )
      • 边界以下各层 ik=iref+1..nsoil 保留 inertiedat
  3. 否则若 poreice_tifeedback 为真(孔隙冰路径),对每个坡面整层向量化: newtherm_i(:,:,islope) = sqrt(inertiedat(:,:)² + porosity_reg*poreice(:,:,islope)*inertie_purewaterice²)
  4. 两个开关都为假时,newtherm_i 保持全 0(调用方此时不会用它,见复现风险)。

伪代码

subroutine waterice_tifeedback(ngrid, nsoil, nslope, icecover, poreice, newtherm_i):
    newtherm_i = 0

    if surfaceice_tifeedback:
        for islope, ig:
            icedepth = icecover(ig,islope) / rho_ice
            if icedepth >= layer(nsoil) or watercaptag(ig):
                newtherm_i(ig,:,islope) = inert_h2o_ice           # 整列纯冰
            else if icedepth < layer(1):
                newtherm_i(ig,:,islope) = inertiedat(ig,:)        # 冰太薄,忽略
            else:
                iref = first ik+1 where layer(ik) <= icedepth < layer(ik+1)
                newtherm_i(ig, 1:iref-1, islope) = inert_h2o_ice  # 冰层
                newtherm_i(ig, iref, islope) =                    # 过渡层(串联)
                    sqrt( (layer(iref)-layer(iref-1)) /
                          ( (icedepth-layer(iref-1))/inert_h2o_ice^2
                          + (layer(iref)-icedepth)/inertiedat^2 ) )
                newtherm_i(ig, iref+1:nsoil, islope) = inertiedat # 下伏风化层

    else if poreice_tifeedback:
        for islope:
            newtherm_i(:,:,islope) =
                sqrt(inertiedat^2 + porosity_reg*poreice(:,:,islope)*inertie_purewaterice^2)

参与的主题流程

主题 参与方式
水循环 地表/地下水冰对土壤热惯量的反馈:改变地温日/季节循环,进而影响地表冰的凝结/升华与 CO2 凝结。是水循环与地表能量收支的耦合点

写法特点

复现要点

待确认

相关页面