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

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

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

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

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


( {' |# ~/ ]2 K& ?                               
登录/注册后可看大图

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

6 O* ^7 c7 m, H9 k/ Z& Q$ w) k
                               
登录/注册后可看大图

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

; A; s- a: ~, i3 k* p. t& Y8 a
                               
登录/注册后可看大图
; @1 y6 f9 d3 ~% [0 h! c7 @7 T6 t
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
- V4 a* _! c6 V. Q- {: Y+ s/ \
                               
登录/注册后可看大图
- ?! K9 j- ~& ~- x2 [7 v
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
- I( n$ I5 v, v2 w6 ^
                               
登录/注册后可看大图

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

9 b0 l- |# V0 \; T$ m
                               
登录/注册后可看大图
0 X& R: e* |3 a, t
                               
登录/注册后可看大图
的导数,因此为了让对

8 S* X! H" ?: S0 \3 d2 S: B                               
登录/注册后可看大图
的中央差分落在和

1 D3 x4 F6 g! h2 w7 J/ _$ ^% @* B                               
登录/注册后可看大图
同样的位置上,
  d; i) l3 }2 y2 v- a4 V
                               
登录/注册后可看大图
也需要和
6 ^7 A: |' S4 y5 h; d$ q  f
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

% V' Q* O* h# i, H4 V) T& o                               
登录/注册后可看大图
在t+1时刻的值,就需要

/ D& Y! [- s. p, B. q' T                               
登录/注册后可看大图
两侧的

1 r* k# ~) [# {* Q                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

. [6 j) u7 l1 b- p0 X8 \; G                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


5 g, Q! W# E; `* I: p3 L0 U

! ^( Y! V" i; w2 M
                               
登录/注册后可看大图

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

1 u" Q3 F9 h* v7 w
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

" ]4 a( n  T0 o                               
登录/注册后可看大图
是在陆地边界上,所以要使
( F: g1 _$ r% J( a+ J
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
, g& q8 u% ]" }# K" U. u' g% x
                               
登录/注册后可看大图
或者
, K1 c% {, _; ?( q& U
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

9 k) B: L- V4 r- j. |* l. a; u                               
登录/注册后可看大图
的格点。对北边界的

0 L$ d# {1 F0 J( t                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


7 w# t1 C8 B# V

. @7 K* P- \- N& b* {
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
2 N7 h" U' ]% t7 I0 k3 m" L% M    if((wet(j,k+1)==1)||(duu>0))
/ f, D, P9 S4 @+ r        un(j,k)=uu+duu;% N- d' j( L4 \! A" l7 F+ u# P3 c# ^* W
    endelse. ]6 v! J; }0 A
    if((wet(j,k+1)==1)&&(duu<0))
4 V, {5 x- d7 `        un(j,k)=uu+duu;
3 Z( W( |8 I6 e% @$ D    endend

  对


. M9 k  r1 J9 Q, o! ]3 ]7 w; N                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

5 S( W: h; N6 P7 v                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
3 X: K( U' m1 b2 \+ d, I$ K
                               
登录/注册后可看大图
的计算和

6 R# a8 ]8 m/ Q/ V8 G% E0 n* h                               
登录/注册后可看大图

的计算同理。


8 `; C/ _9 o/ p2 r

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

, O5 d. \: ~; Z& ]
                               
登录/注册后可看大图

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

" [2 }& r- B7 z3 M& ^. M- |  Z; S
                               
登录/注册后可看大图

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


5 \( x* u: C, q                               
登录/注册后可看大图

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

0 L1 G4 e6 p, J- g/ F
                               
登录/注册后可看大图

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

; p7 S0 S0 C) D& V+ j# k6 H. t- h
                               
登录/注册后可看大图

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


; Y( S' O# G8 S8 H+ r, `/ F  q) X: t                               
登录/注册后可看大图


2 a: m/ X3 s# ?1 U& R2 n6 i                               
登录/注册后可看大图

,具体表达式如下。

! ?6 o: k4 u5 i


! |4 }: G/ z" J3 |( x' H                               
登录/注册后可看大图

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


9 S2 F; c/ n5 w) X                               
登录/注册后可看大图
9 v. l' L% f5 n. C7 X
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

- q  N% |7 X6 M7 y                               
登录/注册后可看大图

* Q# W! K2 ?* a# y, q                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
; M& `. g* ]3 m6 a" B# W- d
                               
登录/注册后可看大图

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


  Y( ^8 w7 O( J/ \6 u                               
登录/注册后可看大图
,而

6 _/ u. E# }& d, M- K0 h                               
登录/注册后可看大图
的意思是u网格所在位置的速度
! b% e( e& `% i. i& F" S" m# e
                               
登录/注册后可看大图
。以

+ J: X! T3 s8 ~3 ?8 l& ?                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

1 d6 ?: c$ e* X4 }2 x; S0 V) e. E                               
登录/注册后可看大图
平均求得。

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


' t% I: S6 ^2 i; X2 C& e0 e                               
登录/注册后可看大图

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


; P; O! {9 @6 B                               
登录/注册后可看大图

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

for k=1:N+ a. Z4 ^1 l$ s/ C1 `! v) f
    h(k)=hzero(k) + eta(k);
5 x; [, t2 k' o) [    wet(k)=1;
1 u1 |5 G# o1 D    if(h(k)<hmin)
" x( V+ F( Z6 R* R( u        wet(k)=0;- k8 a- e+ p: T' C
    end" E% q+ a$ U6 H7 e* ]
    u(k)=un(k);end

版权声明

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

参考书目

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


! U2 ]. r$ O  a) Q+ w
回复

举报 使用道具

相关帖子

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