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

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

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

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

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


. {5 {' }8 ]8 S                               
登录/注册后可看大图

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

1 J. U! d+ l6 u6 p
                               
登录/注册后可看大图

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


3 s, l, `9 \' ~; g5 i1 b8 h' G                               
登录/注册后可看大图
, B6 Q  O$ ]. P1 k. A0 I
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
% T0 f7 {1 Y8 V
                               
登录/注册后可看大图
. A6 D+ s1 [2 S: w5 Y0 e
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

/ }4 H* n8 y# T# p                               
登录/注册后可看大图

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


0 l# @7 J0 ?' k" W                               
登录/注册后可看大图
5 c+ s2 a0 n2 D% R& F
                               
登录/注册后可看大图
的导数,因此为了让对

4 k0 {, ~5 A( Z# _* L% Q% p4 p4 s                               
登录/注册后可看大图
的中央差分落在和

1 X9 x+ w9 t& k& T% y6 Z# X                               
登录/注册后可看大图
同样的位置上,

9 A' D) Q# h3 J* Z* o                               
登录/注册后可看大图
也需要和
1 L4 u/ H$ B* u! E" {* R
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

" n* O+ [: M/ R+ G, Y  G7 |$ x                               
登录/注册后可看大图
在t+1时刻的值,就需要

) t1 B; B) V0 q# ?# x                               
登录/注册后可看大图
两侧的

. c) u8 O, s! c" a4 x: a0 z% R                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


! J$ y5 w4 n5 g: \8 t$ A


3 S& V1 C+ l; c! G0 O- P7 T' v1 X                               
登录/注册后可看大图

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

8 Y; S1 C4 T- [2 B. w" h
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

, c+ ~7 ?; a3 y; n+ r                               
登录/注册后可看大图
是在陆地边界上,所以要使
$ {* k; E; T/ G+ [3 l4 ~
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

; ?" b5 U$ a0 Z# c  C  d1 T                               
登录/注册后可看大图
或者

0 Y8 t  g' V6 d, q; K                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

) X( L) Q8 C; B! @  O' C                               
登录/注册后可看大图
的格点。对北边界的
0 [3 g, M% h% c8 W( c  f" E
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

4 K: x7 l, h" X6 J9 _) l+ j

6 b! U- \  B5 k* c* C3 R
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)3 Z) }6 w3 P, E+ S- y  W
    if((wet(j,k+1)==1)||(duu>0))8 H. x8 c* |2 |1 I7 d2 A
        un(j,k)=uu+duu;6 b3 b- Y) ^4 N2 Q
    endelse
; B% k3 v! u3 n1 J2 V! k" N$ e    if((wet(j,k+1)==1)&&(duu<0))  v/ {+ G- E0 k: ~% ?5 i* I2 b, d, a
        un(j,k)=uu+duu;
9 _5 l9 F1 Q; q( u    endend

  对

' K! U4 T# e% G/ ~! X1 T: |
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

# V, R# i0 e: f) L. T9 k9 r, {# ]                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

) u  U1 d: ]8 i: T& E$ o2 R                               
登录/注册后可看大图
的计算和
  Z- M. X/ ^7 |
                               
登录/注册后可看大图

的计算同理。

# Q) C; s. o1 Y0 G9 N9 Q

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

& e0 g- \' x5 u" ^& C
                               
登录/注册后可看大图

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


9 A: S% C' P' \4 X2 p                               
登录/注册后可看大图

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


8 O+ a& \% {; e# x7 Q: }                               
登录/注册后可看大图

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

7 C+ m) ?2 c! x( M9 Y
                               
登录/注册后可看大图

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


( z; T: h: E$ P                               
登录/注册后可看大图

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


+ P; h7 e1 C; }! E' ^2 P! N                               
登录/注册后可看大图


8 R2 Z& z  n" @* a2 M                               
登录/注册后可看大图

,具体表达式如下。

& }0 m- a# H- e9 n$ q' g2 ~


; Y: N+ t  s0 B% h, S5 v                               
登录/注册后可看大图

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

4 }0 U' Z. \* E: J
                               
登录/注册后可看大图
& C7 W0 e# W5 ~' U
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

( `2 _7 z5 V, U8 E1 D                               
登录/注册后可看大图
6 h  k0 t" j) x1 \, J
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
0 E* ?7 u9 b( D. b$ X
                               
登录/注册后可看大图

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


( B+ T8 u6 s6 P! e% C- m' Z7 {                               
登录/注册后可看大图
,而
# d; z+ J, @: y" @
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

1 K0 x% s0 a: n  c# X; [: s2 w                               
登录/注册后可看大图
。以
$ E- l! e' m; \0 @3 ?
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

9 m6 i/ V  `0 E' B4 m                               
登录/注册后可看大图
平均求得。

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


( B; K7 V/ B* \0 t                               
登录/注册后可看大图

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


$ `5 F) k& Q1 W; u4 C3 c  H( d                               
登录/注册后可看大图

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

for k=1:N
  y" w5 m1 W$ ?/ l& s7 e7 }, g$ G    h(k)=hzero(k) + eta(k);2 e: V, z1 P$ Q" ]
    wet(k)=1;: E  r( X- R) y6 @" K! z7 l
    if(h(k)<hmin)
/ ^8 o& A$ e7 |/ W/ m4 C        wet(k)=0;& e( I' n6 U! I; s
    end
& }$ D5 h3 F, ^6 V    u(k)=un(k);end

版权声明

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

参考书目

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

4 ?; U3 B7 V, e; L8 h0 ?+ V! a# h3 y
回复

举报 使用道具

相关帖子

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