tabfi.F

路径

LMDZ.MARS\libf\phymars\tabfi.F

所属目录 / 模块

libf/phymars

文件定位

tabfi.F 是物理初始化路径中的控制表读取和常数恢复模块。tabfistartfi.nccontrole 数组读取火星半径、自转角速度、重力、气体摩尔质量、日长、物理时间步、轨道量、地表粗糙度、湍流下限、CO2 冰反照率/发射率、尘埃可见光学厚度和土壤体积热容;当 nid=0 时,它不读文件,而写入一组默认 Mars 常数。若 Lmodif=1 且处于串行运行,它还允许交互修改控制表中的若干物理常数,最后调用 iniorbit 生成轨道派生量。

定义的符号

符号 类型 行号 作用
tabfi_mod module 1 封装物理控制表读取和修改例程。
tabfi subroutine 8 读取或默认初始化物理常数,并把关键常数回传给调用方。

依赖的模块

use 模块 only 列表 用途 待确认
ioipsl_getin_p_mod getin_p 源码保留的 getin 接口,本例程当前执行语句未直接调用。 是否为历史接口残留。
comsoil_h volcapa 写入土壤体积热容。 -
surfdat_h z0_default, emissiv, emisice, albedice, iceradius, dtemisice 写入地表粗糙度、地表/冰发射率、冰反照率和 CO2 雪粒径参数。 iceradius 在 only 列表中重复出现一次。
dimradmars_mod tauvis 写入参考可见尘埃光学厚度。 -
iostart get_var 从物理 start 文件读取 controle 数组。 -
mod_phys_lmdz_para is_parallel 禁止并行路径下交互修改 tab_control -
comcstfi_h g, mugaz, omeg, rad, rcp 写入公共物理常数。 -
time_phylmdz_mod daysec, dtphys 写入日长和物理时间步。 -
planete_h aphelie, emin_turb, lmixmin, obliquit, peri_day, periheli, year_day, lsp2solp, iniorbit 写入轨道和湍流参数,并调用轨道派生量初始化。 -

调用的关键例程

被调用例程 所在模块 / 文件 调用位置 作用
get_var iostart 行 167 读取 controle 数组。
abort_physic 物理错误处理 行 169、277 缺少 controle 或并行修改控制表时终止。
lsp2solp planete_h 行 464 把交互输入的近日点太阳经度换算为 peri_day
iniorbit planete_h 行 549 用基础轨道量生成派生轨道状态。

被调用位置

调用方 文件 调用位置 作用
phyetat0 phyetat0_mod.F90 行 145、148 有 startfi 时读控制表;无 startfi 时走默认常数路径。
newstart dynphy_lonlat/phymars/newstart.F 行 374、379 新建/修改初始场时读取并可修改物理控制表。

输入

输入 来源 类型 / 维度 单位 含义
nid 调用方 integer - start 文件逻辑标识;nid=0 时不读取 controle,改用默认常数。
Lmodif 调用方 integer - 是否允许交互修改控制表;1 表示修改模式。
tab0 调用方 integer - 物理参数在 tab_cntrl 中的偏移。

输出

输出 去向 类型 / 维度 单位 含义
day_ini 调用方 integer*4 sol tab_cntrl(tab0+3),初始日期。
lmax 调用方 integer layers tab_cntrl(tab0+2),用于与物理层数核对。
p_rad, p_omeg, p_g, p_mugaz, p_daysec 调用方 real scalar mixed 同名动力/物理常数的回传值。
time 调用方 real scalar - tab_cntrl(tab0+4) 读取的时间值。

共享状态与副作用

tabfi 会直接写入多个共享模块变量:comcstfi_hrad/omeg/g/mugaz/rcptime_phylmdz_moddaysec/dtphysplanete_hyear_day/periheli/aphelie/peri_day/obliquit/lmixmin/emin_turbsurfdat_h 的地表和 CO2 冰辐射参数,dimradmars_mod::tauvis,以及 comsoil_h::volcapa。它会向标准输出打印控制表前后状态;修改模式还会从标准输入读取关键字和值。并行运行时若 Lmodif=1abort_physic

核心逻辑

  1. 打印 nid/tab0/Lmodif
  2. nid=0,清零 tab_cntrl 并写入默认 Mars 常数、轨道量、地表粗糙度、CO2 冰辐射参数、尘埃光学厚度和土壤热容。
  3. nid!=0,调用 get_var("controle", tab_cntrl, found),随后按 tab0+index 读取各控制量并写入共享模块。
  4. 打印修改前的控制表值;若 Lmodif=1 且并行运行则终止。
  5. 串行修改模式中循环读取用户关键字,允许修改 day_ini/z0/emin_turb/lmixmin/emissiv/emisice/albedice/iceradius/dtemisice/tauvis/obliquit/peri_day/peri_ls/periheli/aphelie/volcapa
  6. 修改后再次打印控制表值,调用 iniorbit()
  7. 若旧 start 文件没有 iceradius,把南北 CO2 雪粒径设为 100.e-6dtemisice 设为 0.4

伪代码

if nid == 0:
    set default Mars physical constants and surface/radiative parameters
else:
    read controle into tab_cntrl
    copy tab_cntrl(tab0 + indices) into shared modules and output args

print control values before modification
if Lmodif == 1:
    abort if parallel
    while user enters a keyword:
        read replacement value and update matching shared variable
    print control values after modification

call iniorbit()
patch old start files if iceradius is zero

参与的主题流程

主题 参与方式
初始状态 / restart phyetat0_mod 调用本例程恢复或默认生成物理控制表。
轨道和太阳几何 写入基础轨道量并调用 iniorbit,影响 solarlongorbite 等下游。
CO2 冰和地表辐射 初始化 albedice/emisice/iceradius/dtemisice/emissiv/z0_default 等参数。
土壤和边界层 初始化 volcapalmixminemin_turb

写法特点

复现要点

待确认

相关页面