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.hcomdissnew.h 中的共享数组;向 unit 6 打印网格信息;会设置 pi=2*asin(1);会修改 transx/transy/pxo/pyo 等 zoom 辅助状态。

核心逻辑

  1. 根据 nitergdiv/nitergrot/niterhcoefdis 计算耗散幂指数 gamdi_*
  2. 设置 pi
  3. 根据 fxyhypbysinus 选择网格映射:
    • fxyhypb=.false., ysinus=.true.:调用 fxysinus
    • fxyhypb=.false., ysinus=.false.:Newton 迭代求 transx/transy 后调用 fxy
    • fxyhypb=.true.:调用 fyhypfxhyp
  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 点,且显式处理极点和经度周期。

复现要点

待确认

相关页面