newstart.F

路径

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

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

newstart.F 定义交互式程序 newstart,用于从 start_archive.nc 或已有 start.nc/startfi.nc 构造新的动力与物理重启文件。它不是时间积分主循环,而是一个初始场编辑器:读控制表、初始化当前网格和物理共享状态、装配或读取动力/物理场、按用户选择修改地形、压力、tracer、地下冰、坡面数等状态,最后写出 restart.ncrestartfi.nc

该程序是 lect_start_archivedatareadncdefrun_newiniphysiqcaldyn0phyredem 等初始化链的汇合点。复现实验时要把它看成“start 文件生成流程”,而不是常规 GCM 运行的一步。

定义的符号

符号 类型 行号 作用
newstart program 2 交互式创建/修改 LMD Mars GCM 初始状态,并写出 restart.nc/restartfi.nc
load_MONS_data subroutine 2045 读取 MONS 地下冰数据,补南极缺测,并插值到 GCM 网格

依赖的模块

use 模块 only 列表 用途 待确认
ioipsl_getincom getin datareadnc 路径配合使用的配置读取体系
mod_phys_lmdz_para is_parallel, is_sequential, is_mpi_root, is_omp_root, is_master tabfi 前强制串行/主进程标志
infotrac infotrac_init, nqtot, tname 读取 tracer 数量和名称
tracer_mod noms, mmol, igcm_* tracer 名、摩尔质量和关键 tracer 索引
surfdat_h phisfi, z0, zmea, zstd, zsig, zgam, zthe, albedodat, qsurf, tsurf, emis, hmons, summit, base, watercap, perennial_co2ice, slope-var init/end 地表、坡面和 surface tracer 状态
comsoil_h inertiedat, inertiesoil, layer, mlayer, nsoilmx, tsoil, slope-var init/end, flux_geo, qsoil, nqsoil 土壤层、热惯量、土壤温度和地下状态
control_mod day_step, iphysiq, anneeref, planet_type 时间步控制和行星类型
geometry_mod longitude, latitude, cell_area 物理重启文件写出的网格坐标和面积
lect_start_archive_mod lect_start_archive start_archive.nc 读取并重映射初始场
tabfi_mod tabfi 从 start/startfi 控制表初始化物理常数和时间
phyetat0_mod phyetat0 startfi.nc 读取物理初始状态
phyredem physdem0, physdem1 写出 restartfi.nc
iostart open_startphy tabfi 打开物理 start 文件
initracer_mod initracer 初始化 igcm_* tracer 索引和物性
dimradmars_mod albedo, slope-var init/end 坡面数变化时重分配地表反照率数组
dust_param_mod tauscaling 尘埃虚/真实值转换因子
turb_mod q2, wstar PBL/TKE restart 状态
filtreg_mod inifilr 写出前初始化极区滤波
mod_const_mpi COMM_LMDZ iniphysiq 初始化通信器参数
comvert_mod ap, bp, pa, preff 垂直坐标和参考压力
comconst_mod lllm, daysec, dtphys, dtvr, cpp, kappa, rad, omeg, g, r, pi 动力/物理常数和时间步
serre_mod alphax 写出前质量计算路径中的诊断输出
temps_mod day_ini, hour_ini 重启时间
ener_mod etot0, ptot0, ztot0, stot0, ang0 动力能量/动量初值控制量
iniphysiq_mod iniphysiq 物理网格、共享状态和配置初始化
exner_hyb_m exner_hyb 由压力计算 Exner 函数
inichim_newstart_mod inichim_newstart 交互选项 ini_q/ini_q-h2o 的化学初始廓线构造
comslope_mod nslope, def_slope, def_slope_mean, subslope_dist, init/end 坡面数量和坡面分布
paleoclimate_mod h2oice_depth, co2ice_depth, coef_ssdif, init/end 坡面数变化时保存并重映射古气候数组
subslope_mola_mod subslope_mola nslope 选项下重算坡面分布
program_options parse_args 解析命令行选项
datafile_mod datadir load_MONS_data 读取 MONS 文本数据路径

INCLUDE 头文件dimensions.hparamet.hcomgeom2.hcomdissnew.hclesph0.hnetcdf.incload_MONS_data 另含 comgeom.h

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
parse_args program_options 218 解析命令行选项
infotrac_init infotrac 240 得到 nqtottname
NetCDF API netcdf.inc 271-339, 461 打开 start 文件并读取 controle
open_startphy / tabfi iostart / tabfi_mod 373-380 读取物理控制表、行星常数、时间
defrun_new defrun_new.F 395 读取 run.def 运行参数
iniconst / inigeom 动力初始化例程 397-398 初始化动力常数和几何
iniphysiq iniphysiq_mod.F90 403 初始化物理网格和共享状态
datareadnc datareadnc.F 424 surface.nc 读取地表数据并插值
gr_dyn_fi / gr_fi_dyn 网格转换工具 多处 动力网格与物理标量网格之间转换
lect_start_archive lect_start_archive.F 453 读取并重映射 start_archive.nc
dynetat0 动力 restart 读取例程 470 start.nc 读动力状态
phyetat0 phyetat0_mod.F90 475 startfi.nc 读物理状态
initracer initracer_mod 514 初始化 tracer 索引和物性
inichim_newstart inichim_newstart_mod 991, 1026 化学和水汽 tracer 初始化
initial0 外部工具 1383-1385 isotherm 选项下清零风和 q2
load_MONS_data 本文件 1643 读取 MONS 地下冰数据
end_* / ini_*_slope_var 多个共享模块 1765-1859 nslope 选项下重分配坡面维度数组
subslope_mola subslope_mola_mod 1818 重新计算坡面面积分布
inifilr filtreg_mod 1943 写出前初始化滤波
pression / exner_hyb 动力/垂直坐标例程 1944, 1950 psap/bp 算压力与 Exner 函数
massdair / geopot 动力例程 1976, 2003 算层空气质量和位势
caldyn0 caldyn0.F 2005 构造动力 restart 需要的辅助场
dynredem0 / dynredem1 动力 restart 写出例程 2011-2013 restart.nc
physdem0 / physdem1 phyredem.F90 2017-2027 restartfi.nc
interp_horiz 水平插值例程 2148, 2150 load_MONS_data 把 MONS 网格插到 GCM 网格

输入

输入 来源 类型/维度 单位 含义
start_archive.nc 当前运行目录 NetCDF 混合 选项 0 时的归档初始场
start.nc 当前运行目录 NetCDF 混合 选项 1 时的动力初始场
startfi.nc 当前运行目录 NetCDF 混合 选项 1 时的物理初始场
controle start/startfi NetCDF 变量 real(100) 混合 动力和物理控制表;start/startfi 模式会把物理表前 50 项复制到 tab_cntrl(51:100)
surface.nc datadir NetCDF 混合 start_archive 路径读取地形、反照率、热惯量、粗糙度和亚网格地形
run.def / include 链 defrun_new 配置 运行参数、物理频率、网格和耗散参数
traceur.def / tracer.def infotrac_init/initracer 配置 tracer 数量、名称和物性识别
profile_<tracer> 当前运行目录 ASCII 混合 q=profile 选项读取的地表+垂直廓线
results_MONS_lat_lon_H_depth.txt datadir ASCII, 180x90 %WEH, g/cm2kg/m2 mons_ice 选项的 MONS 地下冰输入
交互式输入 stdin 字符串/数值 混合 选择输入文件类型和修改选项参数

输出

输出 去向 类型/维度 单位 含义
restart.nc 当前运行目录 NetCDF 混合 动力重启文件;由 dynredem0/1 写出
restartfi.nc 当前运行目录 NetCDF 混合 物理重启文件;由 physdem0/1 写出
ps restart.nc real(iip1,jjp1) Pa 地表压力,可能经地形修正或 ptot 修改
ucov, vcov, teta, q, masse restart.nc 3D/4D 动力数组 混合 协变风、位温、tracer 和层空气质量
tsurf, tsoil, inertiesoil, albedo, emis, q2, qsurf, qsoil restartfi.nc 物理网格数组 混合 地表、土壤、辐射、PBL、地表 tracer 和土壤 tracer 状态
tauscaling, totcloudfrac, wstar, watercap, perennial_co2ice restartfi.nc real(ngridmx,...) 混合 尘埃缩放、云分数、热羽流、水冰和持久 CO2 冰状态

共享状态与副作用

核心逻辑

  1. 初始化运行上下文:调用 parse_args,设置 Mars 常数 cpp=744.499preff=610pa=20planet_type="mars",并把并行标志强制为串行主进程,以便在 iniphysiq 前调用 tabfi
  2. 读取 tracer 元信息infotrac_init 确定 nqtot/tname,分配 q(iip1,jjp1,llm,nqtot)coefvmr(nqtot)
  3. 选择输入源
    • 0:打开 start_archive.nctab0=50Lmodif=1
    • 1:打开 start.ncstartfi.nc,先读动力控制表,再把 startfi.nc 的前 50 项复制到 tab_cntrl(51:100)tab0=0
  4. 读控制表并初始化常数:从 controlekappa/etot0/ptot0/ztot0/stot0/ang0,再通过 open_startphytabfi 得到 rad/omeg/g/mugaz/daysec 等物理常数。
  5. 初始化当前网格与物理:调用 defrun_new(99,.TRUE.)iniconstinigeominiphysiq,设置 dtvr/day_step/dtphys
  6. 装配地表静态场:如果不是直接从 start/startfi 修改,则调用 datareadnc("mola",...) 读取 surface.nc,再用 gr_dyn_fi 把地形、热惯量、反照率、粗糙度和亚网格地形送到物理网格共享数组。
  7. 读取初始状态
    • start_archive 路径调用 lect_start_archive,得到 date/tsurf/tsoil/inertiesoil/albedo/emis/q2/t/ucov/vcov/ps/teta/phisold_newgrid/q/qsurf/tauscaling/totcloudfrac/watercap/perennial_co2ice,并把 inertiedat 复制到 ithfi
    • start/startfi 路径调用 dynetat0phyetat0,并从 albedodat/inertiedat 构造 albfi/ithfi/surfithfi
  8. 同步 tracer 名和索引:调用 initracer;若旧文件的 tracer 名全是 q01/q02/...,把 noms(:) 复制到 tname(:)
  9. 执行交互修改循环:用户可连续输入修改关键字;空输入结束循环。每个分支直接改内存中的动力/物理状态。
  10. 写出前动力一致化:start_archive 路径根据新旧地形差修正 ps=ps*exp((phisold_newgrid-phis)/(t(:,:,1)*r)),保持经度周期;随后调用 pression/exner_hyb,必要时重建 teta
  11. 写出 restart:调用 geopotcaldyn0,然后写 restart.nc;再调用 physdem0/physdem1restartfi.nc

交互修改选项

选项 主要修改 关键实现细节
flat 地形清零 phis(:,:)=0 后同步 phisfi;可选择统一 ps
bilball 统一反照率和热惯量 用户输入 alb_bb/ith_bb,填 alb/ith 并同步 albfi/ithfi,重置 z0 为默认值
z0 统一地表粗糙度 输入 z0_default 并赋给 z0(:)
coldspole 南极永久帽地下温度和反照率 修改南极 tsoilalbfi(ngridmx)
ptot 调整总压 计算当前大气+CO2 冰总压,按目标总压缩放 ps;可选择保持 tracer 总质量而缩放混合比
qname 改 tracer 名 交互选择 iq 并改 tname(iq)
q=0 所有 tracer 清零 大气 tracer 设为 1.e-30,地表 tracer 设为 0
q=factor tracer 乘因子 选一个 tracer,同时缩放 q(:,:,:,iq)qsurf(:,iq,:)
q=x tracer 设常数 输入大气 kg/kg 和地表 kg/m2,填全域
q=profile tracer 从文本廓线初始化 读取 profile_<tracer>,第 1 行为地表值,之后为各大气层
freedust 尘埃从虚光学深度缩放到真实值 tauscaling 乘 dust/ccn mass/number tracer,然后把 tauscaling(:)=1
ini_q 初始化化学物种和水汽 flagh2o=1,可选热层-only,调用 inichim_newstart
ini_q-h2o 初始化化学物种但保留水汽 flagh2o=0,调用 inichim_newstart
inihdo 用 D/H 初始化 HDO 输入 SMOW 倍数,按 HDO/H2O=2*155.76e-6*DoverH 填 HDO tracer
composition 修改 CO2/N2/Ar/O2/CO 主成分 选参考站点,输入新 VMR,换算 MMR 全域缩放,并由最丰富组分闭合 MMR 总和
wetstart 设置南北梯度水汽 h2o_vap=150e-6*(lat+pi/2)/pi
ini_h2osurf 限制/清理地表水冰 地表水冰截断到用户上限并去负值
noglacier 去掉中低纬地表水冰 abs(lat)<45h2o_ice 地表储量置零
watercapn / watercaps 加北/南永久水冰帽 极区 h2o_ice 地表储量设 1.e5 kg/m2
isotherm 等温无风初始场 tsurf/tsoil,设 flagiso,清零 ucov/vcov/q2
co2ice=0 去 CO2 极冠 qsurf(:,igcm_co2,:)=0,发射率取中纬参考值
therm_ini_s 土壤热惯量重置为表层参考值 inertiedat(:,isoil)=surfithfi(:) 并同步 inertiesoil/ithfi/ith
subsoilice_n / subsoilice_s 北/南半球地下冰层 输入纬度、起始深度和冰热惯量,用调和形式构造混合层热惯量
mons_ice 按 MONS 数据布设地下冰 读取 MONS Hdn/d21,按半球系数把 d21 转深度,低于日变化热皮肤深度则下移
nslope 改坡面数量 仅允许 1/3/5/7;重算 def_slopesubslope_dist,重分配并复制 slope-var 状态

load_MONS_data 逻辑

load_MONS_data 打开 datadir/results_MONS_lat_lon_H_depth.txt,跳过首行,按 180x90 网格读取纬度、经度、Hdnd21。源码把纬度索引翻转成北到南顺序,并把 d21g/cm2 乘 10 转成 kg/m2。由于南纬 -77 到 -90 缺少 d21,行 2118-2121 用 -75 度值到南极 0 的线性插值补齐。最后构造 2 度经纬边界、补一列周期经度,用 interp_horiz 分别把 Hdnd21 插值到 (iip1,jjp1)

mons_ice 分支中,只有 MONS_Hdn>=14.0 的格点会布设地下冰;深度为 MONS_d21*MONS_coeffN/S,且不得浅于用表层热惯量估算的日变化热皮肤深度。

伪代码

parse_args()
set Mars constants and serial flags
infotrac_init()
allocate q and coefvmr

ask user for input source:
  if 0:
    open start_archive.nc
    read controle into tab_cntrl
    tabfi(start_archive)
  if 1:
    open start.nc and startfi.nc
    read both controle arrays
    copy startfi controle(1:50) into tab_cntrl(51:100)
    tabfi(startfi)

initialize dynamic constants from tab_cntrl
defrun_new, iniconst, inigeom, iniphysiq

if not reading existing start/startfi:
  datareadnc(surface.nc fields)
  gr_dyn_fi static surface fields into physics grid

if source is start_archive:
  lect_start_archive(...)
  ithfi = inertiedat
else:
  dynetat0(start.nc)
  phyetat0(startfi.nc)
  copy albedodat/inertiedat into albfi/ithfi/surfithfi

initracer()
if old q01/q02 names:
  tname = noms

loop:
  print modification menu
  read modif
  if blank: exit
  apply requested in-memory change

if source is start_archive:
  correct ps for changed topography
  enforce longitude periodicity

inifilr()
pression(ap,bp,ps) -> p3d
exner_hyb(ps,p3d) -> pks,pk,pkf
compute teta if needed
massdair and polar averaging for start_archive source
geopot()
caldyn0()
dynredem0/1("restart.nc")
physdem0/1("restartfi.nc")

参与的主题流程

主题 参与方式
初始场生成 顶层交互式入口,从 start_archivestart/startfi 生成新 restart
地形与亚网格初始化 调用 datareadnc 读取 MOLA/亚网格地形,并可用 flat/nslope 改写
化学初始化 ini_qini_q-h2o 调用 inichim_newstart
水循环/同位素初始化 可设置水汽梯度、地表水冰帽、地下冰、HDO
CO2 循环初始状态 可改总压、去 CO2 极冠、修改主成分
坡面与古气候状态 nslope 分支重分配并复制 surfdat/comsoil/dimradmars/paleoclimate 坡面数组

写法特点

复现要点

待确认

相关页面