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

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

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

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

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


: W- n$ U- m" j/ E$ {; n                               
登录/注册后可看大图

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


4 o1 D0 I; X2 S! D                               
登录/注册后可看大图

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

/ f! T1 A1 ?9 z+ j& _: G# Z2 g4 y
                               
登录/注册后可看大图
6 J! W, L. t) S, u3 I5 f8 R
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

5 W: K% g2 C# O, N/ Y1 {                               
登录/注册后可看大图
. \8 h: O: u/ y( x, n
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
( Z3 P- v' }+ L
                               
登录/注册后可看大图

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

5 f* ^0 Z1 H/ L" ~! H4 L6 f
                               
登录/注册后可看大图

* s, w4 o5 r. \4 w5 ^  [0 R, e                               
登录/注册后可看大图
的导数,因此为了让对

6 k6 T* S, T: E2 F& ^$ Z1 ~! `0 \                               
登录/注册后可看大图
的中央差分落在和
( v: a; y5 [9 D, K! Y. K
                               
登录/注册后可看大图
同样的位置上,

( w) t0 \1 w( m1 n9 u' \5 p; l: r                               
登录/注册后可看大图
也需要和

& [2 }6 [) s' H! x$ w3 Q7 b                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

! L, d% R' d/ l                               
登录/注册后可看大图
在t+1时刻的值,就需要
1 n9 l9 _9 }3 y* s- L
                               
登录/注册后可看大图
两侧的

9 [. [6 g% r2 Q; y                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
& z$ n& {0 m$ k' U# Z
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

0 u2 t8 a# I7 y

0 `+ Y- r+ r( i
                               
登录/注册后可看大图

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

2 I4 p% Z7 F6 w# r9 }
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
' Y7 {. v8 }! l  a
                               
登录/注册后可看大图
是在陆地边界上,所以要使
# B8 J# Y& T3 y/ B# k
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
$ {& m1 C: g( M' F' b& [! g6 ^
                               
登录/注册后可看大图
或者

( ?& J5 t5 d) s" F7 \" u9 x                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

; o" k3 m+ H7 V                               
登录/注册后可看大图
的格点。对北边界的

  V1 W8 x6 Q' E' N                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

6 o" D; h( z* p! l+ X

7 C5 B, ]  M, E% b/ ~/ R
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
) `: B% z, ~: G( L: H) c' m/ L    if((wet(j,k+1)==1)||(duu>0))% S2 y9 Q3 @* N% {. W9 x
        un(j,k)=uu+duu;
- x6 _9 M4 X  r5 @) F    endelse
5 g( g1 d3 z( f4 M* ], a. v3 U    if((wet(j,k+1)==1)&&(duu<0)), B7 |; f% a3 i! F6 ?
        un(j,k)=uu+duu;' N& \# C6 C+ H, C4 j
    endend

  对

5 y; u! B; V9 S8 B; w. k
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

; F( v2 I, H( Z                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

# O& G9 B: F' @$ l# w) @4 \                               
登录/注册后可看大图
的计算和
; O, o) C+ N. O) |9 g
                               
登录/注册后可看大图

的计算同理。


0 Q' U/ }  L3 l: F# q* t7 D" U

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

* W6 z1 ~8 ~- K' |  _9 b8 a/ |) g( K
                               
登录/注册后可看大图

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


4 O5 @) C6 I4 u; b8 t                               
登录/注册后可看大图

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

: ]0 N1 Y" v) [( F0 J" g# G& b
                               
登录/注册后可看大图

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


& @+ Q# s# W3 f: L4 Q: G                               
登录/注册后可看大图

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

3 A/ K7 p2 q+ P. g% R/ E  f+ I
                               
登录/注册后可看大图

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

  L$ S7 K- e2 N- F0 N
                               
登录/注册后可看大图

% f5 C8 `( T; h* A0 x
                               
登录/注册后可看大图

,具体表达式如下。

7 r6 @, J" u3 H7 j+ m

7 b& {; m* U1 G  k3 ^1 p1 M/ B
                               
登录/注册后可看大图

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

0 b4 i" T* `% G7 k. Y* o# i
                               
登录/注册后可看大图
+ ^  J* P5 {! {2 v3 C
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

6 F& W8 I, u! a- }2 Y                               
登录/注册后可看大图

" m$ V9 b- \  V$ y$ C# ~                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

3 i/ `( d& c9 E. N" x2 M+ L                               
登录/注册后可看大图

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


6 S4 C+ K3 i' K                               
登录/注册后可看大图
,而
6 L7 n) a  s8 {1 q
                               
登录/注册后可看大图
的意思是u网格所在位置的速度
) j5 w) r' i9 N) q+ Z' z
                               
登录/注册后可看大图
。以

8 Q- C2 }' P8 c; t8 G/ E  E                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

# C+ t3 W8 z$ C0 h1 p2 {                               
登录/注册后可看大图
平均求得。

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

/ U% y$ W; A* i( J3 d) [
                               
登录/注册后可看大图

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


1 r* k  C5 B6 j                               
登录/注册后可看大图

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

for k=1:N
# o* [7 S3 m1 i, C    h(k)=hzero(k) + eta(k);
" D, Q2 D) g# z: z0 F    wet(k)=1;! ], ^" o! `5 e6 Z9 I! g+ l; D! F
    if(h(k)<hmin)
; B  u* h# D* Z+ Z- c' T& n5 [        wet(k)=0;& |$ t0 b0 b! R3 E" @
    end
8 ^! C# r2 E" i' A8 U    u(k)=un(k);end

版权声明

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

参考书目

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

; I- S1 C' N6 d& @7 P1 }. T
回复

举报 使用道具

相关帖子

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