dyn1d/writerestart1D_mod.F90

路径

LMDZ.MARS\libf\phymars\dyn1d\writerestart1D_mod.F90

文件定位

writerestart1D_mod.F90 是 1D testphys1d 的文本 restart 写出模块。它不写 NetCDF;唯一公开例程 writerestart1D 把当前单柱表压、tracer、风和温度状态写入一个 ASCII 文件,调用方在当前源码中传入固定文件名 restart1D.txt

唯一直接调用点在 testphys1d 末尾:

if (startfiles_1D) call writerestart1D('restart1D.txt',psurf,pa,preff,tsurf(1,:),nlayer,size(tsurf,2),temp,u,v,nq,noms,q)

因此这个模块只在 startfiles_1D=.true. 时参与输出;默认 startfiles_1D=.false. 时不会写 restart1D.txt

定义的符号

符号 类型 行号 作用
writerestart1D_mod module 1-36 包装 1D 文本 restart 写出例程。
writerestart1D subroutine 7-34 写出 restart1D.txt 格式的 ASCII restart。

文件共 36 行。模块没有全局变量、没有 SAVE 状态、没有分配/释放,也没有 NetCDF 调用。

接口

SUBROUTINE writerestart1D(filename,psurf,pa,preff,tsurf,nlayer,nslope,temp,u,v,nq,qnames,q)
实参 方向 维度/单位 写出用途
filename in 字符串 输出文件名;当前调用方传 restart1D.txt
psurf, pa, preff in Pa 或垂直坐标相关标量 第一行 ps 记录。
tsurf in (nslope) K teta 记录中的坡面地表温度部分。
nlayer, nq, nslope in 整数 控制垂直层、tracer 和坡面循环长度。
temp in (nlayer) K teta 记录中的大气温度剖面。
u, v in (nlayer) m s-1 uv 记录。
qnames in (nq) 字符串 每个 tracer 行的名称标签。
q in (nlayer,nq) 每个 tracer 的垂直混合比剖面。

写出格式

例程固定使用 Fortran unit 1:

open(1,file = filename,status = "replace",action = "write")

status="replace" 表示目标文件已存在时会被覆盖。写出顺序如下:

顺序 记录标签 内容
1 ps psurf, pa, preff
2..nq+1 tracer 名称 qnames(i), q(1:nlayer,i),每个 tracer 一行。
nq+2 u u(1:nlayer)
nq+3 v v(1:nlayer)
nq+4 teta tsurf(1:nslope), temp(1:nlayer)

最后执行 close(1)。没有错误码检查、没有显式格式字符串,所有记录都使用 list-directed write(1,*)

与读取路径的对应关系

init_testphys1d_modtherestart1D=.true. 时读取 start1D.txt

  1. 先读取第一行的标签和 psurf, pa, preff
  2. 逐 tracer 读取名称和 q(1,:,iq),并检查文件中的 tracer 名必须等于 traceur.def 中的 tname(iq)
  3. 读取 uvteta 记录。
  4. teta 记录前 nslope 个值进入 tsurf,后 nlayer 个值进入 temp

因此 restart1D.txt 可作为下一次运行的 start1D.txt 使用,但调用方/运行脚本需要负责重命名或复制;本例程不会自动写 start1D.txt

调用关系

方向 符号/页面 说明
调用方 testphys1d 主程序时间循环结束后,在 startfiles_1D 为真时写 restart1D.txt
读取方 init_testphys1d_mod 后续运行以 start1D.txt 读取同类文本格式。
配置背景 testphys1d 配置 startfiles_1D 和 1D restart 工作流说明。

复现要点

  1. 输出文件是 ASCII 文本,不是 NetCDF;startfi.ncphyredem 负责。
  2. restart1D.txt 的 tracer 行顺序必须和下一次运行的 traceur.def 一致,否则 init_testphys1d_mod 会在名称检查处停止。
  3. teta 行同时包含 nslopetsurfnlayertemp;改变 nslopenlayer 后复用旧 restart 会导致读取错位或失败。
  4. status="replace" 会覆盖同名文件;保留历史 restart 需要在运行脚本层面改名。
  5. 例程没有 iostat 检查;磁盘权限或路径错误会由 Fortran 运行时处理。

待确认和风险

相关页面