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

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

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

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

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

# s( @4 H& h- @8 y+ @" X
                               
登录/注册后可看大图

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


' V, K2 V% E0 x/ N                               
登录/注册后可看大图

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


- z" |  `& I3 ]# \: M. t9 s+ x8 |                               
登录/注册后可看大图

$ p* I- k! ^' f! ]% i) b" W$ Z                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

: L( }" S* K9 n1 Z                               
登录/注册后可看大图

& }  y$ Y% Y' S/ w1 {2 {7 u0 S                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

3 }! \6 c. I9 [8 ^                               
登录/注册后可看大图

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


5 _; Q/ R& D' ?! m                               
登录/注册后可看大图
' [. ~+ E5 {  I- v# I  b
                               
登录/注册后可看大图
的导数,因此为了让对

" B/ N% B" a) c/ \- S                               
登录/注册后可看大图
的中央差分落在和

4 ?( i* P" m6 N3 A8 s                               
登录/注册后可看大图
同样的位置上,

' u9 r; N- U/ {: ]. e                               
登录/注册后可看大图
也需要和
: L$ a0 o3 B9 g$ ]
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
$ l6 b* ~6 d8 k3 W0 q( N" `
                               
登录/注册后可看大图
在t+1时刻的值,就需要
/ I% }8 C9 d. h' {4 F7 x3 J* B
                               
登录/注册后可看大图
两侧的

0 \. I6 x0 h+ M3 g                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
9 d0 V, ~! R& M, ?1 c: Q5 ]$ _' q
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

6 c: h9 H1 I0 W5 C6 E6 a


* [, z' G, A; J$ @: l                               
登录/注册后可看大图

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


) O7 @* A( w) M! Y3 X# W/ h% j' W                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

6 f' L9 |/ M4 Q9 @                               
登录/注册后可看大图
是在陆地边界上,所以要使

- Y' j" H& l4 b6 W( ]+ [                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

7 Y7 i+ `2 B  F" l4 i" _6 S3 m0 q                               
登录/注册后可看大图
或者
" t! C3 e0 g# n7 O$ A" o) Z
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
9 W9 c) r7 e' ?# K' F
                               
登录/注册后可看大图
的格点。对北边界的
2 I8 T, L1 C: B- E+ V5 W! s4 E, N
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


- s! A; \& Q: n


$ L, U7 w$ y. s( T! q# @6 [                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
" r, ^* g6 R' d4 z2 u7 K4 J    if((wet(j,k+1)==1)||(duu>0))4 v- H! M  ?! K- d; r# E: K& d
        un(j,k)=uu+duu;
4 P' a: W6 A% k# q- M; o1 l! `6 v    endelse' A  E8 G/ k* Z* D. S: d3 W4 O
    if((wet(j,k+1)==1)&&(duu<0))
1 l: H1 m5 D/ Y: o4 _+ L        un(j,k)=uu+duu;3 ^% |4 ], V% x0 g- V
    endend

  对


' O+ Y; h$ H- M  W$ f% F% d                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
, `5 ~+ M+ a$ j# p9 r7 }7 q: x
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
8 C, K9 h- \  ^; z
                               
登录/注册后可看大图
的计算和

, T$ v7 ]" s4 M6 j! L- U3 h/ L                               
登录/注册后可看大图

的计算同理。


7 H) E8 L! ]4 q" S0 t' f/ s1 Y# h

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


3 r$ x! I; d. g. ?8 H: }5 t                               
登录/注册后可看大图

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

& T; f3 Q  ~/ z$ S! l# P, B# f3 }
                               
登录/注册后可看大图

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


$ P& ~" K0 E2 [0 A                               
登录/注册后可看大图

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

' E/ C- o, z5 }0 q
                               
登录/注册后可看大图

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

# j* v( ?6 R- w" t
                               
登录/注册后可看大图

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


' Q- T4 r, K# N$ K8 R                               
登录/注册后可看大图

0 F( R' x% p1 C: o
                               
登录/注册后可看大图

,具体表达式如下。


, w$ v/ @" F8 l' C8 h

; ~) J7 j1 I! b1 A
                               
登录/注册后可看大图

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

7 q% ~. H( \% [! i7 V6 p
                               
登录/注册后可看大图
! W% b; w  ~7 ~! `' W% p
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

9 E. B7 e' b- ]& h                               
登录/注册后可看大图
. j- i0 W% B; ]) j0 z7 _
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
" w4 O$ d1 P5 ?+ F- R9 u7 M
                               
登录/注册后可看大图

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

( d8 u+ D% ]8 x$ Z
                               
登录/注册后可看大图
,而

( c$ D6 U; w- [3 d9 i                               
登录/注册后可看大图
的意思是u网格所在位置的速度
/ ^! `, Y- ?8 m$ b1 ^2 K! ^/ t
                               
登录/注册后可看大图
。以
+ j# k1 C% n  R- h5 `
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
+ o# @. p5 e+ P  Q8 }
                               
登录/注册后可看大图
平均求得。

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


. j! A9 u1 ^- ]  F& q                               
登录/注册后可看大图

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

9 A4 `9 X& R" p3 ]# I* O
                               
登录/注册后可看大图

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

for k=1:N; O/ G5 V+ p  m' U% J/ ^
    h(k)=hzero(k) + eta(k);4 V) e" d& h) M+ p! [
    wet(k)=1;9 _- q, ~- f4 D8 }
    if(h(k)<hmin)
  ]6 V' H% d4 G; y! b9 M, K0 L! N. [        wet(k)=0;
" N1 F( d' C; `    end) s7 d( A$ N4 Z8 {
    u(k)=un(k);end

版权声明

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

参考书目

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

) |0 Z: l( L$ Y) b
回复

举报 使用道具

相关帖子

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