comsoil_h.F90

路径

LMDZ.MARS\libf\phymars\comsoil_h.F90

所属目录/模块

libf/phymars — Mars 物理参数化模块

文件定位

comsoil_h 是 Mars GCM 土壤子系统的核心共享状态模块。它定义了土壤层数常数 nsoilmx=57、层深度几何、热惯量、热扩散求解器系数数组、地下 tracer(水汽/冰/吸附水)以及相关控制开关。所有涉及土壤热传导、水循环地下过程、初始场读写和诊断输出的文件都依赖此模块。它本身不包含物理计算逻辑,仅提供数据声明、参数常量和分配/释放子程序。

定义的符号

符号 类型 行号 作用
comsoil_h module 1 土壤共享状态模块
nsoilmx integer, parameter 6 土壤层数 = 57
layer real, save, allocatable(:) 8 各层深度(m)
mlayer real, save, allocatable(:) 9 各层中点深度(m)
inertiedat real, save, allocatable(:,:) 10 当前气候土壤热惯量 (ngrid, nsoilmx)
inertiesoil real, save, allocatable(:,:,:) 11 土壤热惯量 (ngrid, nsoilmx, nslope)
volcapa real, save 12 土壤体积热容量 (J/m³/K),从 start 文件 control(35) 读取
tsoil real, save, allocatable(:,:,:) 19 土壤温度 (K) (ngrid, nsoilmx, nslope)
mthermdiff real, save, allocatable(:,:,:) 20 层中点热扩散系数 (ngrid, 0:nsoilmx-1, nslope)
thermdiff real, save, allocatable(:,:,:) 21 层界面热扩散系数 (ngrid, nsoilmx-1, nslope)
coefq real, save, allocatable(:) 22 q_{k+1/2} 系数 (0:nsoilmx-1)
coefd real, save, allocatable(:,:,:) 23 d_k 系数 (ngrid, nsoilmx-1, nslope)
alph real, save, allocatable(:,:,:) 24 alpha_k 系数 (ngrid, nsoilmx-1, nslope)
beta real, save, allocatable(:,:,:) 25 beta_k 系数 (ngrid, nsoilmx-1, nslope)
flux_geo real, save, allocatable(:,:) 26 地热通量 (W/m²) (ngrid, nslope)
mu real, save 27 热扩散求解辅助参数
adsorption_soil logical, save 32 是否启用吸附过程
choice_ads real, save 33 吸附等温线选择(3 = 无吸附,见 soilwater.F90)
ads_const_D logical, save 34 是否使用常数扩散系数
ads_massive_ice logical, save 35 是否有大块地下冰
qsoil real, save, allocatable(:,:,:,:) 36 地下 tracer (kg/m³ regol) (ngrid, nsoilmx, nqsoil, nslope)
nqsoil integer, parameter 37 地下 tracer 数 = 3
igcm_h2o_vap_soil integer, parameter 38 tracer 索引:土壤水汽 = 1
igcm_h2o_ice_soil integer, parameter 39 tracer 索引:土壤冰 = 2
igcm_h2o_vap_ads integer, parameter 40 tracer 索引:吸附水 = 3
porosity_reg real, parameter 41 表土孔隙率 = 0.45
ini_comsoil_h subroutine 49 分配所有土壤数组(ngrid, nslope)
end_comsoil_h subroutine 73 释放所有土壤数组
ini_comsoil_h_slope_var subroutine 94 仅分配与坡面相关的子集(tsoil, inertiesoil, 热扩散系数, flux_geo, qsoil)
end_comsoil_h_slope_var subroutine 114 释放坡面子集

依赖的模块

无。comsoil_h 是纯声明模块,不 use 任何其他模块。

调用的关键例程

comsoil_h 本身不调用外部例程。其分配/释放子程序被以下模块调用:

调用方 位置 用途
phys_state_var_init_mod.F90 行 41 use comsoil_h, only: ini_comsoil_h, end_comsoil_h — 物理状态变量初始化/释放
start2archive.F 行 25 use comsoil_h, only: ini_comsoil_h — 初始场转换时分配

输入

comsoil_h 是共享状态模块,无传统输入参数。其数据来源:

变量 写入方 说明
layer, mlayer soil_settings.F 根据 nsoilmx 计算层深度和中点深度
inertiedat surfini_mod.F90 / lect_start_archive.F 从 start 文件读取当前气候热惯量
inertiesoil soil_settings.F / newstart.F 根据 inertiedat 和气候条件计算
volcapa tabfi.F / soil_settings.F 从 start 文件 control(35) 读取或初始化
tsoil soil.F / phyredem.F90 从 start 文件读取或由热扩散求解更新
coefq, coefd, alph, beta, mu soil.F (firstcall) 热扩散隐式求解系数,在首次调用时计算
flux_geo phyetat0_mod.F90 / newstart.F 从 start 文件读取地热通量
qsoil vdifc_mod.F / phyredem.F90 地下水 tracer,由垂直扩散或重启文件写入
adsorption_soil, choice_ads, ads_const_D, ads_massive_ice conf_phys.F callphys.def 读取

输出

作为共享状态模块,输出是所有 use comsoil_h 的文件可访问的变量。主要使用点:

变量 主要使用点 用途
tsoil soil.F, vdifc_mod.F, physiq_mod.F 土壤温度廓线,热扩散求解和地表能量收支
inertiesoil soil.F, physiq_mod.F 热惯量,决定土壤热扩散速率
qsoil soilwater.F90, vdifc_mod.F 地下水 tracer(水汽/冰/吸附水)
layer, mlayer soil.F, soilwater.F90, vdifc_mod.F, 多个 I/O 文件 层深度几何
nsoilmx 几乎所有土壤相关文件 层数常数
coefq/coefd/alph/beta soil.F 热扩散三对角矩阵系数
flux_geo soil.F 底边界地热通量

共享状态与副作用

comsoil_h 是纯粹的共享状态容器。所有变量均为 save 属性,部分标记 allocatable。所有可分配数组标记 !$OMP THREADPRIVATE 以支持 OpenMP 并行。

关键副作用:

核心逻辑

comsoil_h 不含物理计算逻辑,其结构为:

  1. 参数声明(行 6, 37–41)nsoilmx=57 定义土壤层数;nqsoil=3 定义地下 tracer 数;igcm_h2o_vap_soil/ice/ads 定义 tracer 索引;porosity_reg=0.45 定义表土孔隙率。

  2. 土壤层几何(行 8–9)layer(nsoilmx)mlayer(0:nsoilmx-1) 分别存储层界面深度和层中点深度,由 soil_settings.F 计算。

  3. 热性质(行 10–12)inertiedat(当前气候参考值)和 inertiesoil(含坡面变化的实际值)控制热扩散速率;volcapa 是体积热容量。

  4. 热扩散求解器数组(行 19–27)tsoil 是土壤温度;mthermdiff/thermdiff 是扩散系数;coefq/coefd/alph/beta/mu 是隐式三对角求解系数,在 soil.F 的 firstcall 中计算。

  5. 地下 tracer(行 32–43)qsoil(ngrid,nsoilmx,3,nslope) 存储三个 tracer(水汽、冰、吸附水);adsorption_soil/choice_ads/ads_const_D/ads_massive_ice 控制吸附行为。

  6. 分配/释放(行 49–128):四个子程序分别处理全量和坡面子集的分配与释放。ini_comsoil_hphys_state_var_init 中调用;ini_comsoil_h_slope_var 在需要重新分配坡面维度时调用。

伪代码

module comsoil_h:
    constant nsoilmx = 57              # 土壤层数
    constant nqsoil = 3                # 地下 tracer 数
    constant igcm_h2o_vap_soil = 1     # tracer 索引
    constant igcm_h2o_ice_soil = 2
    constant igcm_h2o_vap_ads = 3
    constant porosity_reg = 0.45       # 表土孔隙率

    save layer(nsoilmx)                # 层深度
    save mlayer(0:nsoilmx-1)           # 层中点深度
    save inertiedat(ngrid,nsoilmx)     # 参考热惯量
    save inertiesoil(ngrid,nsoilmx,nslope)  # 实际热惯量
    save volcapa                       # 体积热容量
    save tsoil(ngrid,nsoilmx,nslope)   # 土壤温度
    save mthermdiff, thermdiff         # 热扩散系数
    save coefq, coefd, alph, beta, mu  # 求解系数
    save flux_geo(ngrid,nslope)        # 地热通量
    save qsoil(ngrid,nsoilmx,nqsoil,nslope)  # 地下 tracer
    save adsorption_soil, choice_ads, ads_const_D, ads_massive_ice  # 控制开关

    subroutine ini_comsoil_h(ngrid, nslope):
        allocate all soil arrays

    subroutine end_comsoil_h:
        deallocate all soil arrays (with allocated() guard)

    subroutine ini_comsoil_h_slope_var(ngrid, nslope):
        allocate slope-dependent subset only

    subroutine end_comsoil_h_slope_var:
        deallocate slope-dependent subset (with allocated() guard)

参与的主题流程

主题 参与方式
water-cycle 提供地下 tracer(qsoil)和吸附控制开关,是 soilwater/vdifc 的数据基础
radiation 间接:土壤热惯量影响地表温度,进而影响辐射

写法特点

复现要点

待确认

相关页面