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 辅助状态。

核心逻辑

  1. 根据 nitergdiv/nitergrot/niterh 和 coefdis 计算耗散幂指数 gamdi_*。
  2. 设置 pi。
  3. 根据 fxyhypb 和 ysinus 选择网格映射:
    • fxyhypb=.false., ysinus=.true.:调用 fxysinus。
    • fxyhypb=.false., ysinus=.false.:Newton 迭代求 transx/transy 后调用 fxy。
    • fxyhypb=.true.:调用 fyhyp 与 fxhyp。
  4. 设置极点纬度和极点导数。
  5. 对每个纬度带和经度点计算四分面积 aireij1..4、四分伸长 cuij/cvij,并强制经度周期。
  6. 汇总标量点面积 aire 和权重 alpha1..4。
  7. 计算 U/V/Z 点面积、逆面积、airesurg、耗散幂权重和 Coriolis fext。
  8. 计算 cu/cv/cuv/cvu 及其派生比值和幂权重。
  9. 极点处设置 cu/unscu2/cvu 为 0,计算极区面积 apoln/apols。
  10. 计算 constang=rad*omeg*cu*cos(rlatu) 并施加经度周期。
  11. 打印 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 点,且显式处理极点和经度周期。

复现要点

待确认

相关页面