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_new 从 run.def 或 start 控制表读取或比对。 |
grossismx, grossismy |
real module scalars | common target line 6 | x/y 方向放大率;defrun 和 defrun_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。 |
| 分配/释放 | 无 ALLOCATE、DEALLOCATE。 |
| 并行/线程 | 无 THREADPRIVATE 声明;状态是普通模块全局变量。 |
| 1D 直接使用 | rg 在 LMDZ.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/180、pyo=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.F90、testphys1d.F90、profile_temp_mod.F90 或 read_profile_mod.F90 中被直接 use。
因此复现 1D testphys1d 时,不应把 serre_mod 当成单柱经纬度或坡面设置来源;它是公共动力 zoom 网格状态容器,主要影响 3D/dynphy_lonlat 水平网格构造和 start/run.def 一致性检查。
复现要点
- 如果构建系统需要
serre_mod,必须让libf/phymars/dyn1d/serre_mod.F90解析到LMDZ.COMMON/libf/dyn3d_common/serre_mod.F90;当前 Windows 工作树中该入口表现为一行路径文本。 - 单独编译这一行路径文本不是有效 Fortran;它依赖源码管理或构建系统把 stub 当作公共源文件入口。
- 使用公共动力 zoom 的运行必须先通过
defrun、defrun_new或 restart 读取路径给clon/clat/grossismx/grossismy/dzoomx/dzoomy/taux/tauy赋值。 grossismx和grossismy小于 1 会触发停止;dzoomy/tauy/grossismy的组合还可能在fyhyp_m中导致beta条件失败。- 对 1D
testphys1d,本模块当前只是构建可见性补位;实际单柱几何和物理状态应从 init_testphys1d_mod、comgeomfi_h 和 testphys1d 配置 追踪。
待确认
- 当前 Windows 工作树把 dyn1d 入口呈现为一行路径文本;原始类 Unix 工作树中它可能是符号链接。
- dyn1d 构建目标是否实际需要编译
serre_mod,需结合 makefile/构建脚本确认。 transx/transy在公共inigeom后续分支中的完整派生公式未在本页展开;本页只覆盖 dyn1d stub 和目标模块状态边界。
相关页面
- dyn1d/index.md - dyn1d 子目录索引。
- init_testphys1d_mod - 1D 初始化主流程。
- logic_mod - dyn1d 可见的公共动力逻辑状态 stub。
- comvert_mod - dyn1d 可见的公共垂直坐标 stub。
- defrun_new - Mars dynphy_lonlat run.def 读取路径。
- testphys1d 配置 - 1D 运行配置入口。