dyn1d/profile_temp_mod.F90

路径

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

文件定位

profile_temp_mod.F90 是 1D testphys1d 初始化路径的温度廓线构造模块。它不读取 3D 初始场,也不更新物理公共状态;唯一例程 profile_temp 接收垂直层数和 km 高度数组,按 getin 配置生成温度数组,并无条件把结果写到 profile_temp.out

当前调用方是 init_testphys1d_mod:无 start1D.txt restart 时,初始化例程用 zlay/1000 构造 zkm,调用 profile_temp(nlayer+1,zkm,teta),再把 teta(0) 写入 tsurfteta(1:) 写入大气层温度 temp

定义的符号

符号 类型 行号 作用
profile_temp_mod module 1 包装 1D 温度廓线构造例程。
profile_temp subroutine 7-223 按配置生成 temp(nlev),可从 ASCII 文件读取,也可叠加正弦扰动,并写出 profile_temp.out
tseiff(37) local DATA table 57-62 Seiff/Viking 标准温度表,按 2 km 间隔插值使用。

接口

实参 方向 维度/单位 说明
nlev 输入 integer 温度数组长度;在 1D 初始化调用中是 nlayer+1,包含地表/界面用的第一项。
zkm(nlev) 输入 km 对应高度;调用方由 zlay/1000 派生。
temp(nlev) 输出 K 输出温度廓线。

配置键

源码默认 用途
ichoice 1 温度廓线类型;run.def.1d 可把它覆盖为标准 Seiff 选项。
tref 200 选项 1/6/7 的参考温度,单位 K。
isin 0 为 1 时,在基础廓线后追加正弦扰动。
pic 26.522 选项 6 中的层号中心,或选项 7 中的 km 高度中心。
largeur 10 高斯扰动宽度。
hauteur 30 高斯扰动幅度,单位 K。

温度廓线分支

profile_temp 先读取上述配置键,然后按 ichoice 选择基础温度:

ichoice 分支 源码公式或行为
1 常温 所有层 temp=tref
2 Savidjari temp=max(219 - 2.5*zkm, 140)
3 Lindner 极区廓线 z<2.5 km150 + 30*z/2.52.5<=z<5 km180;更高层 max(180 - 2*(z-5), 130)
4 逆温 z<20 km135;更高层 min(135 + 5*(z-20), 200)
5 Seiff/Viking 表 iseiff=int(zkm/2)+1,低于约 70 km 时在 tseiff 2 km 表上做线性插值;更高层固定为 tseiff(37)=139 K
6 常温 + 层号高斯扰动 tmp=il-pictemp=tref + hauteur*exp(-tmp*tmp/largeur/largeur)
7 常温 + 高度高斯扰动 tmp=zkm-pictemp=tref + hauteur*exp(-tmp*tmp*4/largeur/largeur)
>=8 ASCII 文件 打开运行目录文件 profile_temp,逐行读取 nlev 个温度值;打开失败则 error stop 'File "profile_temp" not found!'

注意:源码注释写的是 ichoice=8 读取 ASCII profile,但条件是 ichoice.GE.8,所以 8 以上的值都会走同一文件读取分支。

扰动和输出

基础廓线生成后,若 isin==1,每层追加:

(1 - 1000/(1000 + zkm^2)) * (6*sin(zkm*pi/6) + 9*sin(zkm*pi/10.3))

这个扰动使用 comcstfi_hpi。扰动与 ichoice 分支无关;即使温度来自 profile_temp 文件,也会在文件读入后叠加。

最后例程总是打开 profile_temp.out 并写出 nlev 行温度值。该文件是运行目录中的 ASCII 诊断/检查输出,不是后续源码中已发现的必需输入。

文件 I/O

文件 方向 条件 格式和内容
profile_temp 输入 ichoice>=8 运行目录 ASCII 文件,源码逐行 READ(11,*) temp(il),需要至少 nlev 行单列温度值。
profile_temp.out 输出 每次调用 运行目录 ASCII 文件,逐行写出生成后的 temp(il)

调用关系

方向 符号/文件 说明
调用方 init_testphys1d_mod start1D.txt 时调用,用生成的 teta 初始化 tsurftemp
相关输入 testphys1d 配置 run.def.1d 中的 ichoice/tref/isin/pic/largeur/hauteur 控制本例程。
相邻 profile 读取 read_profile_mod 读取 tracer 初始廓线;与本文件的温度廓线分开。

复现要点

  1. 本例程使用的是高度 zkm,单位为 km;调用方负责把 m 转成 km。
  2. profile_temp 输入文件名不是 profile,而是字面文件名 profile_temp
  3. ichoice 的源码内默认值是 1,但 run.def.1d 样例可覆盖为 5;复现配置时以实际 run.def 为准。
  4. ichoice>=8 文件读取没有行数保护;文件少于 nlev 行时,后续 READ 行为取决于 Fortran 运行时错误处理。
  5. profile_temp.out 每次调用都会被 status='unknown' 打开并覆盖或复用,复现实验时可用它核对实际温度初值。
  6. 选项 5 的 Seiff 表高层分支在 iseiff>=nseiff-1 时直接取 tseiff(37);不要把它外推成继续线性递减。

待确认

相关页面