收藏本站 劰载中...网站公告 | 吾爱海洋论坛交流QQ群:835383472

数值海洋与大气模式(三):从0到1实现浅水模式(下) ...

[复制链接]
二维浅水模式

  上文讨论了浅水方程在一维情况下的求解,本文探讨浅水方程在二维情况下的求解,并考虑加上底摩擦和风应力的情况。

  首先考虑最简单的二维浅水方程,形式如下。


3 P% z" C1 l: i) h8 b$ j1 s                               
登录/注册后可看大图

  还是同样的过程,对其做离散化,得到下式。


8 T) h$ a- `. M5 n( U4 G                               
登录/注册后可看大图

  上文提到,为了方便实现中央差分来取得二阶精度,选择了交错网格,使得


% D) a+ U- V1 `8 |, m# E                               
登录/注册后可看大图

- A% }6 B- G/ k5 p2 V: P! J4 a                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

3 ?4 Q! l. u; X( Y+ U5 q                               
登录/注册后可看大图
# Q6 v( C9 v- R
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
: k+ u! d1 q4 d8 O
                               
登录/注册后可看大图

放在网格的哪个位置。从上式的第二个式子可以看出,式子右边是


1 K- R& j8 R" [( |                               
登录/注册后可看大图
: k$ X- D! G# T0 Q, f$ a+ ?
                               
登录/注册后可看大图
的导数,因此为了让对

) ~- v& h0 {, _, O& k" l! O                               
登录/注册后可看大图
的中央差分落在和

% U7 G! V: \5 [3 g* k: m& q                               
登录/注册后可看大图
同样的位置上,

$ `3 s: e# S( T/ J                               
登录/注册后可看大图
也需要和

7 Y! u5 |8 ^- i3 c                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

) _0 ?% U+ r/ E5 p$ d                               
登录/注册后可看大图
在t+1时刻的值,就需要
6 S0 k0 |( s2 J, q4 V- e6 B
                               
登录/注册后可看大图
两侧的
& n* Y$ B( _- W- Z* M' F( @
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
9 ]5 a, y' j& c1 Y$ {/ ]
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


% K& u* H: ?) [! x* }! }5 m


8 ]% b3 e' a/ {& j% G, J/ Z, A                               
登录/注册后可看大图

  使用了Arakawa C网格后,可以神奇的发现,在这种情况下,只需要讨论两个边界的速度即可,如下图所示。考虑到

2 N. F) w% g: f4 m# X
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

- M3 y2 Q* [- p* G  |" A                               
登录/注册后可看大图
是在陆地边界上,所以要使

, B" P: ^0 n2 U0 Y  B/ Y- z* ?                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

3 V" A$ |& p8 e1 x2 K                               
登录/注册后可看大图
或者
9 ^+ r5 C! D; @0 r7 }+ |
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
$ a! c0 S% j1 R, m
                               
登录/注册后可看大图
的格点。对北边界的
; I: M7 A3 x& v
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

5 F1 Y) i- `9 x/ G+ a* l5 Q: i2 d9 C


  t# ~- d. ~8 V+ j& J- \' B# }                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)$ W2 N* z# O& ~1 O
    if((wet(j,k+1)==1)||(duu>0))
) ?7 @# v: W( v3 U  U+ c" N        un(j,k)=uu+duu;
$ y; m. h3 J2 f- A; r    endelse$ ?5 p: O8 O( J; E
    if((wet(j,k+1)==1)&&(duu<0))
$ O7 u+ k. u$ d/ ]8 G( h        un(j,k)=uu+duu;# z: K) ?6 U1 w
    endend

  对


+ Q; s4 b- r; K& }6 @& h                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

  y1 ^* U: J3 ]# O" k                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

+ u1 q" {9 e5 o                               
登录/注册后可看大图
的计算和

+ i8 }6 y8 |8 g9 ?                               
登录/注册后可看大图

的计算同理。


/ @! t5 t% V3 h

  接下来,开始考虑更复杂的形式,引入风应力和底摩擦。方程组的形式立马变得更加复杂起来。


8 i# O4 ?& R8 _! x                               
登录/注册后可看大图

  底摩擦和风应力这两项由上式可以看出,是相减的关系,因此可以在计算时,分别看成两项来对待。如果只考虑底摩擦,不考虑其他项的话,方程是如下形式。

3 R5 r% C9 |- J
                               
登录/注册后可看大图

  对其进行半隐式差分得到如下形式。显式差分应用于底摩擦会出现数值稳定性问题。


# Z' ~5 c- F' {3 W$ I9 L. L9 Q                               
登录/注册后可看大图

  考虑完了底摩擦,还需要考虑风应力问题。在原方程去掉底摩擦项后再进行差分得到下式,其中下标j和k分别代表x和y方向。

% P5 ]8 ^! y  h$ K8 u
                               
登录/注册后可看大图

  将其求完后回代到推的底摩擦差分方程中即可。

5 }4 y9 _1 n, \) _
                               
登录/注册后可看大图

  为了表达式清晰简洁,引入了

/ `/ K$ _4 ^" T: A8 C( o
                               
登录/注册后可看大图


: l5 o4 p+ J+ r3 G. O                               
登录/注册后可看大图

,具体表达式如下。


( j4 L& I7 W' `2 U. W. _

$ |3 a$ K: i" r) Y2 w6 O& L
                               
登录/注册后可看大图

  值得注意的是,上式中出现了


; M) c+ a* a- y6 ^/ J                               
登录/注册后可看大图

+ K. u) p' k0 H7 ^& a                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

% e  V2 C5 q& N6 Y% F                               
登录/注册后可看大图
4 J/ s4 @/ T( n; v2 w4 Q* \  k
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

' e; h$ Y& W8 t9 y* {( o                               
登录/注册后可看大图

的意思是v网格所在位置的速度


$ K' p! k4 M$ m                               
登录/注册后可看大图
,而
  [( S+ E& ~0 v; B- {
                               
登录/注册后可看大图
的意思是u网格所在位置的速度
& P: j+ E2 g+ W6 [$ Z
                               
登录/注册后可看大图
。以
2 P/ i' Y  N# `- A/ T6 A* w) z
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

7 @" X- i$ g5 ~, U7 C1 s, E% g/ y$ J                               
登录/注册后可看大图
平均求得。

u_v = 0.25*(v(j+1,k)+v(j,k)+v(j,k-1)+v(j+1,k-1))


% v$ u" |" O  `                               
登录/注册后可看大图

  这样就实现了二维考虑底摩擦和风应力的浅水方程求解。之前说过,干网格和湿网格分别对应网格中的陆地和水,我们在计算时只需要计算流体部分,而不计算陆地的部分。之前我们提到的案例中,陆地边界都在网格的四周。倘若需要模拟的场景是大洋中的一个小岛,即陆地出现在网格内部时,会有什么不同?倘若大洋中的小岛海拔高度有限,在模拟台风时,小岛被水淹没时,干网格和湿网格该怎么转换?当考虑了干湿网格的转换之后,一个具备基本功能的浅水模式就完成了。


, T8 l7 @0 O$ s                               
登录/注册后可看大图

  以一维的情况为例,从图中可以看出来,这个扰动显然会在某些时刻漫过这个岛屿。为了解决这个问题,我们只需要在每轮时间步迭代的最后,加上干湿网格的更新即可。需要定义一个比较小的hmin,意思是当陆地上的积水高度超过hmin就意味着被淹没,下次计算时就把这个网格点当做水面,即把wet(k)这一点赋值为1。

for k=1:N
* H( @/ L$ V3 F5 a% @6 ?2 k6 U    h(k)=hzero(k) + eta(k);
1 c9 |! s# ]+ f5 t    wet(k)=1;
" D+ y: `! J+ Y0 l( G    if(h(k)<hmin)2 M- l. s1 B- v8 ~
        wet(k)=0;: v# r6 v# p5 }$ \/ }
    end/ X. s0 l; N+ \$ ~  Y- `# W
    u(k)=un(k);end

版权声明

  本文创作的初衷是用于帮助数值模式的学习者。欢迎转载,转载请私信并注明作者和出处,请勿用于任何商业用途。

参考书目

Ocean Modelling for Beginners. Jochen Kämpf. Springer Berlin Heidelberg, 2009.


8 \9 w2 T3 l- T% F
回复

举报 使用道具

相关帖子

全部回帖
暂无回帖,快来参与回复吧
懒得打字?点击右侧快捷回复 【吾爱海洋论坛发文有奖】
您需要登录后才可以回帖 登录 | 立即注册
jnsbmj
活跃在2022-11-6
快速回复 返回顶部 返回列表