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

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

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

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

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

$ Z1 A4 Z5 b, h; ^
                               
登录/注册后可看大图

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

# s, l/ v( X8 v; A' z* g6 |6 I6 B) o
                               
登录/注册后可看大图

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


2 m& V: T; z4 t+ Y4 ^                               
登录/注册后可看大图

* U3 j6 l1 b  ~/ H' a* |                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

+ C; c  G: p9 C  E: B                               
登录/注册后可看大图

& b  Z; ~6 ]3 C; b6 d  G: l$ R% i' u                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

$ t- P% f) p9 d6 m( F8 N                               
登录/注册后可看大图

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

( w0 v# b3 O1 Y" d4 K
                               
登录/注册后可看大图

4 [+ p, q2 w3 n2 d5 t- h# D                               
登录/注册后可看大图
的导数,因此为了让对
/ w) Y3 ^) h5 G2 H" C( o5 \5 V2 ^
                               
登录/注册后可看大图
的中央差分落在和
9 W& J" T% P9 ?1 y. Z
                               
登录/注册后可看大图
同样的位置上,
' H& d5 ~& V1 m9 w1 _' l6 \: w
                               
登录/注册后可看大图
也需要和
" \9 \" J; p4 D
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
1 ]) F! L# {( I
                               
登录/注册后可看大图
在t+1时刻的值,就需要

& G# @4 i& e$ Q3 I* u( E                               
登录/注册后可看大图
两侧的
: s& N6 r7 I: O  _, s6 C( ^; ~
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
# s! h. L* g: l
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

8 N7 q6 p$ W' s2 G8 o


, v% W7 D& N0 |                               
登录/注册后可看大图

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

2 G9 [: G% n9 O6 X1 T0 P
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

( [! r' I6 Y# j9 {0 {' b                               
登录/注册后可看大图
是在陆地边界上,所以要使
6 c2 u* d8 d1 {/ u* Q' T
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
, p3 d1 f  y2 d
                               
登录/注册后可看大图
或者

- X0 C+ J) h" u9 M& C) q                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

; O0 W- h! s5 q                               
登录/注册后可看大图
的格点。对北边界的

( T  N. l2 Y; ?+ F- P9 W                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

2 K5 n1 {/ z# h' `

( Q; |6 x5 g: V6 l
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
/ ^8 i- M- L* N' j6 M$ g) }    if((wet(j,k+1)==1)||(duu>0))
& k' C9 z  o5 {- T6 A9 d  j        un(j,k)=uu+duu;! `  V  E( r2 V8 v' k( F
    endelse
1 l* Q9 T: N4 D" K: S# G4 _% v    if((wet(j,k+1)==1)&&(duu<0))* W1 Z" \& K" B6 s
        un(j,k)=uu+duu;
6 J  v' ?& G' t5 s2 a    endend

  对


* K: T7 N# l4 c  X                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

5 L" }: Q: s8 W$ J7 i9 |0 @8 p, b                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

6 O+ K. K0 s% F8 ~" `                               
登录/注册后可看大图
的计算和
! d8 t0 W- Y  [& d
                               
登录/注册后可看大图

的计算同理。


4 ^4 K% D) w% r/ q& ]( C3 k

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

4 u: l. j* V/ s; C" ^( q6 z
                               
登录/注册后可看大图

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


. h8 \- D* Y4 A' S5 f# M5 N4 k                               
登录/注册后可看大图

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


1 {% V7 D* o2 d3 e9 D8 h                               
登录/注册后可看大图

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

$ P2 i0 s: v1 b5 X  p8 D" K
                               
登录/注册后可看大图

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

1 ]! _! O% s  `# `& O. b( I
                               
登录/注册后可看大图

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

+ Q- r. u! u2 b; W" f, [
                               
登录/注册后可看大图


1 X) h- Z1 Y+ D. k! }0 {                               
登录/注册后可看大图

,具体表达式如下。

  ?4 P9 b  l* R' u. r3 O7 h# @


  P; S% o- C3 [. ~8 v! L                               
登录/注册后可看大图

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

. N- s; O- j* _5 P
                               
登录/注册后可看大图
, v* \/ J* u$ m" y
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

/ P) `" x* @- l8 r. S4 U                               
登录/注册后可看大图

0 c4 p! i, @3 _- @& C$ D                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

  |, n8 y+ F$ ~" f                               
登录/注册后可看大图

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

5 \$ H5 |- J4 A1 D
                               
登录/注册后可看大图
,而

7 ^$ M8 y: w- v                               
登录/注册后可看大图
的意思是u网格所在位置的速度

) ]6 L2 V$ P( E2 Z( [  O                               
登录/注册后可看大图
。以

( r4 L; j! H8 s4 |% Q                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
' w3 m% y, G" u: t% G9 V/ ^' r
                               
登录/注册后可看大图
平均求得。

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

3 @% E( w0 W7 K
                               
登录/注册后可看大图

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

, ?& l, J6 \/ T6 m# x* s6 k
                               
登录/注册后可看大图

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

for k=1:N$ V2 ?7 G) V6 ?5 ^" j9 U
    h(k)=hzero(k) + eta(k);
& ~9 c1 z4 v/ F9 \, x    wet(k)=1;% A9 _3 ]4 A) K/ E4 g
    if(h(k)<hmin)
  Z! A/ D' P; E5 \, Z        wet(k)=0;3 B0 V4 h% H# o; m4 ]3 Y' s
    end0 ?1 S8 c) S  @# g( S
    u(k)=un(k);end

版权声明

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

参考书目

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


6 Y* p6 y* T: A$ G5 A# R1 H# ]3 C
回复

举报 使用道具

相关帖子

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