ini_archive.F

路径

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

所属目录/模块

libf/dynphy_lonlat/phymars

文件定位

ini_archive 是 start_archive NetCDF 文件的头部初始化写入例程。它在已打开的 NetCDF 文件中创建完整的维度定义、坐标变量、垂直层系数、土壤层深度、地表位势、热惯量、网格面积、协变/反变转换系数、次网格坡向分布和坡度定义等静态元数据,并把动力+物理运行控制参数写入 controle 一维数组变量。

定义的符号

符号 类型 行号 作用
ini_archive subroutine 2 写入 start_archive NetCDF 文件头部:维度、坐标、垂直系数、地表场和控制参数

依赖的模块

use 模块 only 列表 用途 待确认
comsoil_h nsoilmx, mlayer 土壤层数和层中点深度
comvert_mod ap, bp, aps, bps, pa, preff, presnivs, pseudoalt 混合 sigma 坐标系数、参考气压、伪高度
comconst_mod daysec, dtvr, rad, omeg, g, cpp, kappa, pi 火星物理常数(日长、动力步长、半径、角速度、重力、比热、比热比、圆周率)
logic_mod fxyhypb, ysinus zoom 函数类型选择标志
serre_mod clon, clat, grossismx, grossismy, dzoomx, dzoomy zoom 中心经纬、放大因子和扩展范围
ener_mod etot0, ptot0, ztot0, stot0, ang0 全局守恒控制变量(总能、总压、总涡度、总焓、角动量)
comslope_mod nslope 次网格坡面类别数

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
def_var phymars/def_var.F90 行 180 定义 Time 无限维度变量
NF_DEF_DIM NetCDF API 行 160-171 定义 latitude/longitude/altitude/subsurface_layers/index/rlonu/rlatv/interlayer/Time/nslope/nslope_plus_1 维度
NF_DEF_VAR NetCDF API 行 185-552 定义 controle/rlonu/rlatu/rlonv/rlatv/ap/bp/aps/bps/presnivs/latitude/longitude/altitude/soildepth/inertiedat/cu/cv/aire/phisinit/subslope_dist/def_slope 变量
NF_PUT_VAR_* NetCDF API 多处 写入各变量数据(DOUBLE/REAL 编译期分派)
NF_PUT_ATT_TEXT NetCDF API 多处 写入 title/long_name/units/positive 文本属性
NF_REDEF/NF_ENDDEF NetCDF API 多处 在定义模式和数据写入模式间切换

输入

输入 来源 类型/维度 单位 含义
nid 调用方打开的 NetCDF 文件句柄 INTEGER start_archive 文件的逻辑单元号
idayref 调用方传入 INTEGER*4 day 初始日参考值,写入 controle(4)
phis 调用方(start2archive REAL(ip1jmp1) m²/s² 地表位势,写入 phisinit 变量
ith 调用方 REAL(ip1jmp1,nsoilmx) J·s⁻¹/²·m⁻²·K⁻¹ 土壤热惯量,写入 inertiedat 变量
tab_cntrl_fi 物理初始化路径 REAL(length=100) 混合 物理控制参数表(前 50 个),复制到 tab_cntrl(51:100)
def_slope 调用方 REAL(nslope+1) 坡面类别定义边界值
subslope_dist 调用方 REAL(ip1jmp1,nslope) 次网格坡面面积分数分布

输出

输出 去向 类型/维度 单位 含义
NetCDF 文件 nid 指向的 start_archive 文件 完整的文件头部和静态元数据

共享状态与副作用

核心逻辑

  1. 控制参数表填充:清零 tab_cntrl(100),填入 26 个动力控制参数(网格维度 iim/jjm/llm、idayref、火星物理常数 rad/omeg/g/cpp/kappa、日长 daysec、动力步长 dtvr、全局守恒量 etot0/ptot0/ztot0/stot0/ang0、气压 pa/preff、zoom 参数 clon/clat/grossismx/grossismy/dzoomx/dzoomy 和 fxyhypb/ysinus 标志),再把 tab_cntrl_fi(1:50) 复制到 tab_cntrl(51:100)
  2. NetCDF 维度定义:创建 latitude(jjp1)、longitude(iip1)、altitude(llm)、subsurface_layers(nsoilmx)、index(100)、rlonu(iip1)、rlatv(jjm)、interlayer(llmp1)、Time(unlimited)、nslope、nslope_plus_1 共 11 个维度。
  3. 变量定义与写入:依次用 REDEF/ENDDEF 循环定义并写入:Time 变量(def_var)、controle 控制参数(tab_cntrl)、四组经纬坐标(rlonu/rlatu/rlonv/rlatv)、六组垂直系数(ap/bp/aps/bps/presnivs/altitude)、土壤深度(soildepth/mlayer)、热惯量(inertiedat/ith)、协变/反变转换系数(cu/cv)、网格面积(aire)、地表位势(phisinit)、次网格坡面分布(subslope_dist)和坡度定义(def_slope)。所有浮点变量均通过 #ifdef NC_DOUBLE 分派 DOUBLE/REAL。
  4. latitude/longitude 可视化坐标:额外写入 degree 单位的 latitude 和 longitude 变量(带 degrees_north/degrees_east 属性),用于 GrADS/Ferret 后处理可视化。

伪代码

pi = 2 * asin(1)

! 清零并填充控制参数表
tab_cntrl(:) = 0
tab_cntrl(1:26) = [iim, jjm, llm, idayref, rad, omeg, g, cpp, kappa, daysec, dtvr,
                    etot0, ptot0, ztot0, stot0, ang0, pa, preff,
                    clon, clat, grossismx, grossismy, fxyhypb_flag, dzoomx, dzoomy, ysinus_flag]
tab_cntrl(51:100) = tab_cntrl_fi(1:50)

! 定义 NetCDF 维度 (11 个)
NF_DEF_DIM: latitude, longitude, altitude, subsurface_layers, index,
            rlonu, rlatv, interlayer, Time(unlimited), nslope, nslope_plus_1
NF_ENDDEF

! 定义 Time 变量
def_var(nid, "Time", ...)

! 逐个定义并写入变量 (REDEF→DEF_VAR→ATT→ENDDEF→PUT_VAR 循环)
controle     = tab_cntrl
rlonu/rlatu  = 坐标
rlonv/rlatv  = 坐标
ap/bp/aps/bps/presnivs = 垂直系数
latitude     = rlatu * 180/pi    (degrees_north)
longitude    = rlonv * 180/pi    (degrees_east)
altitude     = pseudoalt          (km, positive=up)
soildepth    = mlayer             (m, positive=down)
inertiedat   = ith                (J·s⁻¹/²·m⁻²·K⁻¹)
cu/cv        = 协变/反变转换系数
aire         = 网格面积
phisinit     = phis               (地表位势)
subslope_dist = subslope_dist     (3D: lon×lat×nslope)
def_slope    = def_slope          (1D: nslope+1)

PRINT 物理常数摘要
RETURN

参与的主题流程

主题 参与方式
初始场 / restart 管理 为 start_archive 文件创建完整的 NetCDF 头部和静态元数据
归档输出 start2archive 流程中作为第一步,建立文件结构供后续 write_archive 追加时间步数据

写法特点

复现要点

待确认

相关页面