inigeom.F
路径
LMDZ.COMMON-6.3\LMDZ.COMMON\libf\dyn3d_common\inigeom.F
所属目录/模块
LMDZ.COMMON\libf\dyn3d_common
文件定位
inigeom.F 定义 SUBROUTINE inigeom,根据行星半径、旋转角速度、zoom 参数和网格函数分支,构造动力网格经纬度、伸长系数、面积、面积权重、Coriolis extensive force、耗散幂权重和极点面积等几何数组。
Mars 运行参与度
必经/条件经过:COMMON `gcm` 和 MARS `phymars/nogcm.F90` 在 iflag_phys==1 初始化路径调用 inigeom;MARS newstart/start2archive/xvik 也调用 inigeom 构造几何。
定义的符号
| 符号 |
类型 |
行号 |
作用 |
inigeom |
subroutine |
6 |
初始化动力水平网格几何和派生系数。 |
依赖的模块
| use 模块 |
only 列表 |
用途 |
待确认 |
comconst_mod |
rad, g, omeg, pi |
使用/设置行星半径、重力、角速度和 pi。 |
- |
logic_mod |
fxyhypb, ysinus |
选择网格映射分支。 |
- |
serre_mod |
clon, clat, grossismx, grossismy, dzoomx, dzoomy, alphax, alphay, taux, tauy, transx, transy, pxo, pyo |
使用 zoom 参数并写平移参数。 |
- |
fxhyp_m |
fxhyp |
双曲正切经向/纬向映射中的 x 方向函数。 |
- |
fyhyp_m |
fyhyp |
双曲正切映射中的 y 方向函数。 |
- |
调用的关键例程
| 被调用例程 |
所在模块/文件 |
调用位置 |
作用 |
fxysinus |
dyn3d_common/fxysinus.F |
168 |
fxyhypb=.false. 且 ysinus=.true. 时生成 sinus(latitude) 网格。 |
fxy |
dyn3d_common/fxy.F |
209 |
fxyhypb=.false. 且 ysinus=.false. 时生成 sinusoidal derivative 网格。 |
fyhyp |
dyn3d_common/fyhyp_m.F90 |
220 |
双曲正切 y 映射。 |
fxhyp |
dyn3d_common/fxhyp_m.F90 |
221 |
双曲正切 x 映射。 |
SSUM |
BLAS 或外部函数 |
637, 638 |
计算北/南极面积和。 |
输入
| 输入 |
来源 |
类型/维度 |
单位 |
含义 |
rad, g, omeg |
comconst_mod |
real |
m, m s-2, s-1 |
行星半径、重力和自转角速度。 |
fxyhypb, ysinus |
logic_mod |
logical |
- |
网格函数分支。 |
clon/clat/grossismx/grossismy/dzoomx/dzoomy/taux/tauy |
serre_mod |
real |
度或无量纲 |
zoom 中心、放大率、范围和陡峭度。 |
nitergdiv/nitergrot/niterh/coefdis |
comdissnew.h |
integer/real |
- |
耗散幂权重参数。 |
iim/jjm/iip1/jjp1 |
dimensions.h/paramet.h |
integer |
- |
水平网格维度。 |
输出
| 输出 |
去向 |
类型/维度 |
单位 |
含义 |
rlonu/rlonv/rlatu/rlatv |
comgeom2.h |
1D |
rad |
U/V 网格经纬度。 |
xprimu/xprimv/yprimu/yprimv |
comgeom2.h |
1D |
无量纲 |
映射导数。 |
aire/aireu/airev/aireij* |
comgeom2.h |
2D |
m2 |
标量、U、V 和四分面积。 |
cu/cv/cuv/cvu |
comgeom2.h |
2D |
m |
伸长系数。 |
alpha* |
comgeom2.h |
2D |
无量纲 |
四分面积权重。 |
unsaire*, unsair*_gam*, cuvscvgam* 等 |
comgeom2.h |
2D |
多种 |
逆面积和耗散幂权重。 |
fext, constang |
comgeom2.h |
2D |
待确认 |
Coriolis extensive force 和角动量相关常数。 |
apoln/apols |
comgeom2.h |
scalar |
m2 |
北/南极总面积。 |
共享状态与副作用
例程大量写入 comgeom2.h 和 comdissnew.h 中的共享数组;向 unit 6 打印网格信息;会设置 pi=2*asin(1);会修改 transx/transy/pxo/pyo 等 zoom 辅助状态。
核心逻辑
- 根据
nitergdiv/nitergrot/niterh 和 coefdis 计算耗散幂指数 gamdi_*。
- 设置
pi。
- 根据
fxyhypb 和 ysinus 选择网格映射:
fxyhypb=.false., ysinus=.true.:调用 fxysinus。
fxyhypb=.false., ysinus=.false.:Newton 迭代求 transx/transy 后调用 fxy。
fxyhypb=.true.:调用 fyhyp 与 fxhyp。
- 设置极点纬度和极点导数。
- 对每个纬度带和经度点计算四分面积
aireij1..4、四分伸长 cuij/cvij,并强制经度周期。
- 汇总标量点面积
aire 和权重 alpha1..4。
- 计算 U/V/Z 点面积、逆面积、
airesurg、耗散幂权重和 Coriolis fext。
- 计算
cu/cv/cuv/cvu 及其派生比值和幂权重。
- 极点处设置
cu/unscu2/cvu 为 0,计算极区面积 apoln/apols。
- 计算
constang=rad*omeg*cu*cos(rlatu) 并施加经度周期。
- 打印 U/V 经纬度。
伪代码
compute dissipation gamma exponents
select horizontal map branch from fxyhypb and ysinus
build rlon/rlat and map derivatives
for each scalar latitude and longitude:
compute quarter-cell areas and cu/cv pieces
enforce periodic longitude
sum quarter areas into scalar, U, V, and Z areas
derive alpha weights, inverse areas, and dissipation factors
derive cu/cv/cuv/cvu metric factors
set pole metrics and pole total areas
compute Coriolis extensive fields and constang
print grid coordinates
参与的主题流程
| 主题 |
参与方式 |
| dynamics initialization |
在 iniconst 后构造动力水平几何。 |
| differential operators |
为梯度、散度、旋度、laplacian 和耗散算子提供 metric/area 权重。 |
| dynphys-interface |
输出的经纬度、面积和伸长系数传给物理初始化。 |
写法特点
固定格式 Fortran,大量数组来自 include 头文件。网格几何按 staggered C-grid 语义处理 U、V、scalar、vorticity/Z 点,且显式处理极点和经度周期。
复现要点
fxyhypb/ysinus 分支决定经纬度和导数生成方式,是复现几何的首要开关。
- 极点面积通过
SSUM(iim,aire(1,1),1) 和南极对应行求和,极点 cu 被置 0。
- 所有
iip1 经度端点都复制第 1 点,后续算子依赖这种周期闭合。
gamdi_* 在迭代次数等于 2 时设为 0,否则为 coefdis/(niter-2)。
待确认
fext 和 constang 的单位未在本文件注释中完整声明,需要结合动力方程使用点确认。
SSUM 的链接来源需由构建或数值库页面确认。
相关页面