dynetat0.F90

路径

LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\dynetat0.F90

所属目录/模块

LMDZ.COMMON\libf\dyn3d_common

文件定位

dynetat0.F90 定义 SUBROUTINE dynetat0,从动力 restart/start NetCDF 文件读取控制数组、网格、几何、动力状态、tracer、气柱质量和地表压力。它同时根据 planet_type 区分 Earth-like、Titan 和 planeto-like/Mars start 文件布局,并处理 timestart 选择多时间片。

Mars 运行参与度

必经/条件经过:COMMON `gcm` 和 MARS `phymars/nogcm.F90` 在 read_start 路径调用 `dynetat0("start.nc",...)`;MARS newstart/start2archive 也调用 dynetat0 读取起始状态。

定义的符号

符号 类型 行号 作用
dynetat0 subroutine 4 读取动力 start/restart NetCDF 初态。
check_dim internal subroutine 307 检查文件维度与编译维度一致。
get_var1 internal subroutine 320 读取一维变量。
get_var2 internal subroutine 328 读取二维变量并修正经度周期端点。
get_var2_t internal subroutine 350 读取含时间维的二维变量。
get_var3 internal subroutine 380 读取 U 网格三维变量。
get_var3u_t internal subroutine 387 读取 U 网格含时间维三维变量并修正周期端点。
get_var3v_t internal subroutine 418 读取 V 网格含时间维三维变量并修正周期端点。
err internal subroutine 449 统一处理 NetCDF 错误并调用 ABORT_gcm

依赖的模块

use 模块 only 列表 用途 待确认
infotrac tname, nqtot, isotope 相关数组 确定 tracer 变量名和缺失 tracer 的默认/同位素初始化。 -
netcdf nf90_open, NF90_NOWRITE, nf90_noerr, nf90_strerror, nf90_get_var, nf90_inq_varid, nf90_inq_dimid, nf90_inquire_dimension, nf90_close NetCDF 文件读 API。 -
control_mod planet_type, timestart 判断 start 文件布局和选择时间片。 -
comvert_mod pa, preff 写垂直坐标参考参数。 -
comconst_mod im, jm, lllm, daysec, dtvr, rad, omeg, g, cpp, kappa, pi 写维度和物理常量。 -
logic_mod fxyhypb, ysinus 写网格函数分支。 -
serre_mod clon, clat, grossismx, grossismy 写 zoom 参数。 -
temps_mod annee_ref, day_ref, itau_dyn, start_time, day_ini, hour_ini 写时间和日期状态。 -
ener_mod etot0, ptot0, ztot0, stot0, ang0 写初始能量/角动量诊断基准。 -

调用的关键例程

被调用例程 所在模块/文件 调用位置 作用
NF90_OPEN, NF90_CLOSE NetCDF 68, 291 打开和关闭 start 文件。
get_var1/2/2_t/3u_t/3v_t 本文件内部 多处 读取控制、经纬度、几何和状态变量。
check_dim 本文件内部 139-141 确认 im/jm/llm
nf90_inq_varid, nf90_inq_dimid, nf90_inquire_dimension, nf90_get_var NetCDF 168-205, 221-229, 272-285 查询并读取时间轴和 tracer。
ABORT_gcm dyn3d/abort_gcm.F 多处 缺变量、读失败、维度不符或找不到时间时退出。

输入

输入 来源 类型/维度 单位 含义
fichnom 调用参数 character - NetCDF start 文件名,常见为 start.nc
controle NetCDF 变量 real(100) 多种 编码维度、日期、常量、能量、垂直/zoom 参数。
rlonu/rlatu/rlonv/rlatv NetCDF 变量 1D rad U/V 网格经纬度。
cu/cv/aire/phisinit NetCDF 变量 2D 多种 几何伸长、面积和地表位势。
tempsTime NetCDF 变量/维度 1D day 可用时间片。
vcov/ucov/teta/masse/ps NetCDF 变量 2D/3D + time 多种 动力状态变量。
tracer 变量 NetCDF 变量名来自 tname(iq) 3D + time tracer 单位 各 tracer 初值。

输出

输出 去向 类型/维度 单位 含义
vcov 调用方数组 (iip1,jjm,llm) covariant wind V covariant wind。
ucov 调用方数组 (iip1,jjp1,llm) covariant wind U covariant wind。
teta 调用方数组 (iip1,jjp1,llm) K 位温。
q 调用方数组 (iip1,jjp1,llm,nqtot) tracer 单位 tracer 场。
masse 调用方数组 (iip1,jjp1,llm) kg 或质量单位待确认 层空气质量。
ps 调用方数组 (iip1,jjp1) Pa 地表压力。
phis 调用方数组 (iip1,jjp1) m2 s-2 待确认 地表位势。
time0 调用方标量 real day fraction 当前时间片在动力积分中的初始小数日。
多个 module 状态 comconst_mod/comvert_mod/temps_mod/... 多种 多种 controle 解码出的常量、日期和 zoom 参数。

共享状态与副作用

例程写入动力常量、垂直坐标、时间、能量和 zoom 相关 module 全局状态;读取失败或维度不符会 abort;内部读取函数会检查经度周期端点,不一致时打印 warning 并把最后经度点改为第一个经度点。

核心逻辑

  1. 打开 NetCDF start 文件,读取 controle 数组。
  2. 根据 planet_type 选择 Earth-like 或 planeto-like 布局:Mars/generic 使用 idecal=4,Earth/Titan 使用 idecal=5
  3. controle 解码网格维度、日期、行星常量、能量、垂直坐标和 zoom 参数。
  4. 对 Mars,把 hour_ini 从控制数组第 29 项读取;其他行星设为 0。
  5. 检查 im/jm/llm 与编译维度 iim/jjm/lllm 一致。
  6. 读取经纬度、cu/cv/aire/phisinit
  7. 读取 temps 或回退读取 Time,根据 timestart 选择最后时间片或匹配时间片。
  8. Mars 路径把 day_ini/hour_ini/time0 重组为整数日加小数日。
  9. 读取 vcov/ucov/teta
  10. 对每个 tracer,按 tname(iq) 读取;缺失时置零,Earth isotope 路径可做理论初始化。
  11. 读取 masseps,关闭文件。
  12. 非 Mars 路径将 time0 的整数部分累加到 day_ini

伪代码

open start NetCDF
read controle
if planet_type is mars or generic:
    decode planeto layout
else:
    decode earth-like layout
write constants, dates, energy, vertical, zoom state
check file dimensions against compiled dimensions
read longitude/latitude and geometry fields
read temps or Time axis
select indextime from timestart or last value
adjust Mars day_ini/hour_ini/time0
read vcov, ucov, teta
for each tracer name:
    read tracer at selected time or initialize missing tracer
read masse and ps
close file

参与的主题流程

主题 参与方式
restart-io 读取动力 start.nc 初态,是 dynredem 写出 restart 的反向路径。
dynamics-time-integration 提供进入 leapfrog 的初始状态。
Mars start handling Mars 使用 planeto-like 控制数组布局,并处理 timestarthour_ini

写法特点

Fortran 90 子程序内含多个内部读取 helper。读取 helper 同时做周期端点修正,这意味着输出数组可能不是 NetCDF 原值的逐字节拷贝。

复现要点

待确认

相关页面