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

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

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

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

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

$ _( e7 `$ n- b+ [
                               
登录/注册后可看大图

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


4 P* E( a! `2 }# p' M7 z( s                               
登录/注册后可看大图

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

4 K+ `+ }8 ?% v+ I6 h5 c$ {; F; n
                               
登录/注册后可看大图

- Z( n. C; ^$ R% M8 `8 `* j                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
; b- m& A  c+ B. |" u8 b: z$ T
                               
登录/注册后可看大图
$ u, |8 ~9 R+ C' ^8 j% d8 h, X+ A, H
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

+ T% n* k9 b  {0 L0 ?, L/ o: p6 d                               
登录/注册后可看大图

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


( O/ i( S8 `3 F- K/ F9 x& }; J                               
登录/注册后可看大图
. u" n$ v9 g* E3 o; [0 E
                               
登录/注册后可看大图
的导数,因此为了让对

* \# v5 n4 m1 i8 S. J7 M                               
登录/注册后可看大图
的中央差分落在和

# \2 ~0 Q2 v6 C4 Q# t                               
登录/注册后可看大图
同样的位置上,

+ j1 d( s9 O! m( o& T                               
登录/注册后可看大图
也需要和

& H! ^: x1 o3 q0 f                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
; O2 A2 c" ^6 k4 k3 Y2 A4 s; r1 m
                               
登录/注册后可看大图
在t+1时刻的值,就需要
8 N' w8 \# U8 J
                               
登录/注册后可看大图
两侧的
  U2 {( h% V- o! s, ~
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
4 |; \, O( b( x8 ^, k/ }( m
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

) `; N# p1 ?% N  ]

5 |3 [9 _! J- {3 Z, C
                               
登录/注册后可看大图

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


2 G* {+ ?2 i8 K% y0 _& i9 ?                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

0 ~. k+ X5 H+ M                               
登录/注册后可看大图
是在陆地边界上,所以要使
: d1 `+ T. d5 N' X* c+ D
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
; ^9 x5 G4 U  ]: r) ]' |- i
                               
登录/注册后可看大图
或者

. K1 c4 h& i1 J( I% E# h                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
6 }( [% [1 A, R/ |
                               
登录/注册后可看大图
的格点。对北边界的
, J5 o  Q4 X: r
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

/ W2 @5 s5 T4 i8 @7 k

- }+ D! i" f# c5 e: H1 X
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
. e. F3 f5 @0 }+ q8 D* u    if((wet(j,k+1)==1)||(duu>0))
5 Z8 q7 O' D! ^" Y" k! q        un(j,k)=uu+duu;
5 L+ x6 p1 x" W" l" O2 Z+ u# C    endelse
$ M$ J% V2 Q. _, ^9 G  p    if((wet(j,k+1)==1)&&(duu<0))! U8 r0 i% R9 B0 ?9 C- X
        un(j,k)=uu+duu;0 a0 {. Q# u2 U
    endend

  对

' `4 g# C. S! f# C0 h6 ~2 W
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

% w! t% t7 |% o6 Q                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
* i1 _% U9 |$ o/ S! q/ ^: X
                               
登录/注册后可看大图
的计算和

8 I$ T1 @7 p/ U. ]4 i                               
登录/注册后可看大图

的计算同理。


8 X, n9 w3 ~1 U+ Z& R

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


0 i: \9 j% d6 t6 s; u- r# q                               
登录/注册后可看大图

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

" W% b! ~5 c2 o3 ?
                               
登录/注册后可看大图

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

' ^, A$ N3 m2 w
                               
登录/注册后可看大图

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


, z' h  q  h/ f5 ?                               
登录/注册后可看大图

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


5 f3 B0 d& x2 }: d                               
登录/注册后可看大图

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


! ]' c) ^9 B3 Z7 I9 X1 z: q$ b* z2 y                               
登录/注册后可看大图


& u7 v7 E6 s$ F" Z& F" w8 e                               
登录/注册后可看大图

,具体表达式如下。


8 `+ _! `; G9 W1 ]


1 [' b/ Q" ]. ?                               
登录/注册后可看大图

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

. _7 L& D! m; H$ V0 r2 U6 z
                               
登录/注册后可看大图
9 c+ H5 q4 W+ z2 [
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
" U* ~, N! P7 p$ I, j1 u9 H
                               
登录/注册后可看大图
0 W- q% i. Q- x6 q. J6 k, I
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

8 X1 _$ O9 A2 g4 J  C- G* i                               
登录/注册后可看大图

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

4 E7 q1 R! l& t
                               
登录/注册后可看大图
,而

, K4 w/ k5 _0 H$ a8 d/ v; ~/ g                               
登录/注册后可看大图
的意思是u网格所在位置的速度

; m/ a7 ?! o; G2 b6 ~- h) f( ~                               
登录/注册后可看大图
。以

/ ~5 Z3 \5 z5 ^$ R0 G1 u                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
; R# a1 V- q0 h& I0 j+ i8 [
                               
登录/注册后可看大图
平均求得。

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

# X4 L) Y# c5 O$ N; @
                               
登录/注册后可看大图

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

: g' Z+ w0 ]8 C4 Y
                               
登录/注册后可看大图

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

for k=1:N
1 N. v9 x: O; z0 c" C' g* K2 i    h(k)=hzero(k) + eta(k);/ x( O' H! q6 @) y& ?  y$ z
    wet(k)=1;
: D  S: I$ a; }6 M    if(h(k)<hmin)1 q$ H  H+ A, W% b; v( M& u
        wet(k)=0;
. \- x7 a& q6 I+ N1 |: N9 k  S7 U    end% W5 I/ @. X3 T* b, e$ n- e4 \7 B
    u(k)=un(k);end

版权声明

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

参考书目

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

2 E. z2 ^# y% l" c( C
回复

举报 使用道具

相关帖子

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