dyn1d/serre_mod.F90

路径

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

文件定位

dyn1d/serre_mod.F90 在当前源码树中不是独立实现,而是一行相对路径:

../../../../LMDZ.COMMON/libf/dyn3d_common/serre_mod.F90

它把 1D testphys1d 构建路径中可见的 serre_mod 解析到 LMDZ.COMMON/libf/dyn3d_common/serre_mod.F90。公共目标模块只声明水平 zoom/网格变换相关的全局标量;没有子例程、函数、初始化语句、文件 I/O 或分配逻辑。

定义的符号

符号 类型 位置 作用
serre_mod.F90 path stub dyn1d line 1 指向公共目标文件。
serre_mod module common target line 1 保存公共动力网格 zoom/变换参数。
clon, clat real module scalars common target lines 5-6 zoom 中心经度、纬度;公共 defrun/defrun_newrun.def 或 start 控制表读取或比对。
grossismx, grossismy real module scalars common target line 6 x/y 方向放大率;defrundefrun_new 要求有效值不小于 1,并派生 alphax/alphay
dzoomx, dzoomy, taux, tauy real module scalars common target line 6 hyperbolic zoom 宽度和形状参数;fyhyp_m 使用 y 方向参数构造纬向映射。
alphax, alphay, transx, transy, pxo, pyo real module scalars common target lines 5-6 旧式/派生 zoom 参数和几何变换中间量;inigeom 使用它们构造水平网格。

状态和副作用

项目 说明
模块状态 14 个 REAL 模块变量,均无显式初值。
例程 无。
文件 I/O dyn1d stub 和公共目标模块本身都没有 I/O。
分配/释放 ALLOCATEDEALLOCATE
并行/线程 THREADPRIVATE 声明;状态是普通模块全局变量。
1D 直接使用 rgLMDZ.MARS/libf/phymars/dyn1d 中未发现直接 use serre_mod 的 Fortran 使用方。

赋值和读取路径

serre_mod 本身只提供变量容器,实际值来自公共动力或 dynphy_lonlat 初始化路径。

路径 证据 写入或读取内容
LMDZ.COMMON/libf/dyn3d_common/defrun.F USE serre_mod, ONLY: clon,clat,grossismx,grossismy,dzoomx,dzoomy,alphax,alphay,taux,tauy run.def 读取 zoom 参数;非 etatinit 时与 start 中已有值比对,不一致则停止;etatinit 时写入模块变量。
LMDZ.MARS/libf/dynphy_lonlat/phymars/defrun_new.F 同样 USE serre_mod,但通过 getin 读取 clon/clat/grossismx/grossismy/dzoomx/dzoomy/taux/tauy Mars dynphy_lonlat 路径的 run.def 读取和 start 值一致性检查。旧 start 中 grossismx/grossismy=0 时会用 run.def 值补回。
LMDZ.COMMON/libf/dyn3d_common/dynetat0.F90 USE serre_mod, ONLY: clon,clat,grossismx,grossismy tab_cntrl 恢复 start/restart 中的 zoom 中心和放大率。
LMDZ.COMMON/libf/dyn3d_common/inigeom.F USE serre_mod, ONLY: ... transx,transy,pxo,pyo clon/clat/alphax/alphay 等参数构造水平网格变换;源码中 pxo=clon*pi/180pyo=2*clat*pi/180
LMDZ.COMMON/libf/dyn3d_common/fyhyp_m.F90 use serre_mod, only: clat, dzoomy, grossismy, tauy 用 y 方向 zoom 参数构造 hyperbolic 纬向映射;若 2*beta-grossismy <= 0,提示修改 grossismy/tauy/dzoomy 并停止。

与 1D testphys 路径的边界

当前 1D 主链的几何状态主要由 init_testphys1d_mod 直接构造:读取 1D 位置、坡面、psurf、垂直坐标和物理侧几何数组后进入 testphys1d 配置 所描述的单柱运行。serre_mod 虽然在 dyn1d 目录中可见,但没有在 init_testphys1d_mod.F90testphys1d.F90profile_temp_mod.F90read_profile_mod.F90 中被直接 use

因此复现 1D testphys1d 时,不应把 serre_mod 当成单柱经纬度或坡面设置来源;它是公共动力 zoom 网格状态容器,主要影响 3D/dynphy_lonlat 水平网格构造和 start/run.def 一致性检查。

复现要点

  1. 如果构建系统需要 serre_mod,必须让 libf/phymars/dyn1d/serre_mod.F90 解析到 LMDZ.COMMON/libf/dyn3d_common/serre_mod.F90;当前 Windows 工作树中该入口表现为一行路径文本。
  2. 单独编译这一行路径文本不是有效 Fortran;它依赖源码管理或构建系统把 stub 当作公共源文件入口。
  3. 使用公共动力 zoom 的运行必须先通过 defrundefrun_new 或 restart 读取路径给 clon/clat/grossismx/grossismy/dzoomx/dzoomy/taux/tauy 赋值。
  4. grossismxgrossismy 小于 1 会触发停止;dzoomy/tauy/grossismy 的组合还可能在 fyhyp_m 中导致 beta 条件失败。
  5. 对 1D testphys1d,本模块当前只是构建可见性补位;实际单柱几何和物理状态应从 init_testphys1d_modcomgeomfi_htestphys1d 配置 追踪。

待确认

相关页面