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

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

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

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

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


8 ]1 t. I- E! p2 s                               
登录/注册后可看大图

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

% t+ R# H, u" P4 [: T$ N
                               
登录/注册后可看大图

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

' U* F1 Z" ~/ C0 t
                               
登录/注册后可看大图
; q1 A2 h4 k+ h$ S
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

7 J/ S; x1 N/ |7 N5 R/ `                               
登录/注册后可看大图

0 V- F' d8 o! ]                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
+ Y7 e) x8 U4 P0 Q) m4 g7 K; {/ f& ~
                               
登录/注册后可看大图

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


% d& F6 y# t1 X                               
登录/注册后可看大图
5 H7 _3 F- |  G& s' r- e
                               
登录/注册后可看大图
的导数,因此为了让对

( _6 ?) @3 c8 w  y' e; P  N. e                               
登录/注册后可看大图
的中央差分落在和

- _/ R/ `& l3 z4 G                               
登录/注册后可看大图
同样的位置上,
! H& l" Q$ w$ r
                               
登录/注册后可看大图
也需要和

/ c5 u: c/ l- n                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

( _5 Q- E& T1 W+ Y" N* C                               
登录/注册后可看大图
在t+1时刻的值,就需要
" M4 f0 V  ?8 }! [
                               
登录/注册后可看大图
两侧的

6 X8 ~8 A6 V, S4 G* v/ C                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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

  p. ~  i5 s- N! p. M9 w" q

6 v% }5 b, J# g- ]) A( Z
                               
登录/注册后可看大图

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


7 K. K: P( e) b% f4 S. U                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

% M9 y. ?3 V& h# p$ @4 n- J                               
登录/注册后可看大图
是在陆地边界上,所以要使
. l3 h1 C( P* u8 x
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
  V* N# F' g$ V/ t: @
                               
登录/注册后可看大图
或者
; z5 q, X. D. i2 e
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

& q" }. k3 _; f# y- w. o6 i4 h                               
登录/注册后可看大图
的格点。对北边界的
2 x" Y$ q* h/ n0 T+ ]3 o7 l3 X
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

2 q+ U5 f: u/ E8 U

' _$ `# h6 v2 I
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)2 Y9 }! x! f+ `+ N' U
    if((wet(j,k+1)==1)||(duu>0))
! _- X% E) P- @9 s/ \! [9 P) p$ v        un(j,k)=uu+duu;0 M2 q  O2 I6 L% Z0 |3 I3 Z8 G
    endelse& W# D; v% @. t  S+ d! g
    if((wet(j,k+1)==1)&&(duu<0))  W+ [# W( G% @! `& K
        un(j,k)=uu+duu;1 Y3 e& |6 |( E
    endend

  对


: X2 Q# ?5 {; G% ^                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

; k' R6 x6 J6 ^! x' k                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

2 }" G- T: p: Y  B( e9 L, ]                               
登录/注册后可看大图
的计算和

/ [, u* P& E9 s6 s3 c- d# x                               
登录/注册后可看大图

的计算同理。


" n+ Q1 B/ L) j  ?( [/ N/ r

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


0 S. g  e+ [& H: ?' E: ^                               
登录/注册后可看大图

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


8 |% V& n$ x$ l3 i0 I! x: Q' Z                               
登录/注册后可看大图

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


* d" w4 }: p9 u* J2 e: h: u* g                               
登录/注册后可看大图

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

' j2 M6 Z! ~$ V5 b3 J
                               
登录/注册后可看大图

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

: y! d7 w0 A' M( T" L" ~, z) }
                               
登录/注册后可看大图

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


6 q3 j1 ]# O% v; c" ?8 e/ F+ {                               
登录/注册后可看大图


5 Y' B! u2 u, D                               
登录/注册后可看大图

,具体表达式如下。


9 s- Q7 c* t7 G8 n5 O5 d


9 Z, _% A; B9 f4 L: j  h                               
登录/注册后可看大图

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

# v1 u& e5 D9 u+ `) O. a, R
                               
登录/注册后可看大图

; O, x9 H4 Y6 ~' f+ Y: v4 W                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
6 N3 B" N9 z2 d7 w2 ?7 {* u
                               
登录/注册后可看大图

6 j5 D6 ~' k! I* z                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

! u/ v" h5 ~) g. @5 K                               
登录/注册后可看大图

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


  d4 q6 ?) s" g0 Z                               
登录/注册后可看大图
,而
2 g8 ^8 a3 x$ r/ f  B
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

3 r7 Z# ^8 d' }0 g  H/ j3 E9 S9 a                               
登录/注册后可看大图
。以

1 ?( c" k- W: f1 h- c0 A" {1 {& B                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
5 ~- n" D& }! K9 o# [3 b
                               
登录/注册后可看大图
平均求得。

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

/ e# T' g* J7 n# w# o" j7 C
                               
登录/注册后可看大图

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

6 s0 p% p% m9 e: O6 D. t
                               
登录/注册后可看大图

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

for k=1:N
, S$ O5 ^. J$ Q8 N3 D$ ]    h(k)=hzero(k) + eta(k);, h, t2 O( X4 ]6 x! H2 j
    wet(k)=1;2 F$ }3 a! s; \; W* F$ W
    if(h(k)<hmin)
- X% ]* i. ~' @- e        wet(k)=0;2 N3 n- {$ R; G5 C/ Z
    end
6 p$ H) k- ~5 i; m' [7 u0 C    u(k)=un(k);end

版权声明

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

参考书目

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


1 e# S- c- M& t. l9 V5 A
回复

举报 使用道具

相关帖子

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