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

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

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

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

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


; R) [3 V9 J7 R+ L5 \7 B& u                               
登录/注册后可看大图

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

8 _8 }: @9 H- f5 n& s( B; G
                               
登录/注册后可看大图

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


/ X7 c" t6 z5 ]                               
登录/注册后可看大图
/ A' l1 r3 q0 k5 r4 ^( S9 |7 O& F
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

2 H3 [+ ?" b0 g1 W( H* o& i4 M- O                               
登录/注册后可看大图

1 B: c; ~( x0 y( Q0 y3 ?                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
" M, X- [8 D; ~+ d. Q! S
                               
登录/注册后可看大图

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

# @. j) K6 z6 u# i; o0 g% O
                               
登录/注册后可看大图
+ Y# ?, i3 J4 H6 g" k  X
                               
登录/注册后可看大图
的导数,因此为了让对
: g; x5 Q2 O8 R3 m# m% y- s, W9 W8 u
                               
登录/注册后可看大图
的中央差分落在和

( T& U, d( E+ |, E, W                               
登录/注册后可看大图
同样的位置上,
- i/ ^4 T6 P5 I0 M+ ~
                               
登录/注册后可看大图
也需要和

. N  j) g& N4 v& S. J  [                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

2 e. ]7 {; t+ e# V7 {                               
登录/注册后可看大图
在t+1时刻的值,就需要
. W7 r% X( [/ S
                               
登录/注册后可看大图
两侧的
, u( T8 \& g8 L8 ^, y
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
6 @& |+ _! W) {- b7 s
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

7 m/ E: ]. w* _$ N" [6 G

8 S5 n) z; c) T# r5 V* w3 z. e$ {
                               
登录/注册后可看大图

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


" ]# n7 G5 m# K. Z2 h                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

3 k! [( D  A" p4 d) H, Y                               
登录/注册后可看大图
是在陆地边界上,所以要使

) {) W! W9 u  V/ I- e                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

! ?: b2 g- j) W" W! _4 e                               
登录/注册后可看大图
或者
) v" X- h) |% `& P8 q: L. t; q
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
0 U1 V0 q6 s" T) w  Z1 ?6 b) C
                               
登录/注册后可看大图
的格点。对北边界的
8 W  ?; n4 q- e, l% q1 _
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


& \+ T6 _& ^9 w  L# _! m0 O

4 P) W1 W. B* P6 b4 K
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
" y* }6 ~% k6 L( w. a# w( d& j    if((wet(j,k+1)==1)||(duu>0))
/ @& o  n/ ^1 B$ U8 ?        un(j,k)=uu+duu;) S2 Q. C9 L2 f
    endelse; n  K" b* F6 ^9 f) {. _, n
    if((wet(j,k+1)==1)&&(duu<0))
7 @3 m4 K" A0 L! {" y( y        un(j,k)=uu+duu;3 G) ]  o' T2 p2 x4 M5 w
    endend

  对


3 z' ]' ]6 [2 U% \& p                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
" c" L: T6 {8 B& ]1 r6 L( t
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
+ Q: k3 S  ?  i3 }8 _/ N
                               
登录/注册后可看大图
的计算和
- \# Y% q: N3 G2 t+ y$ {
                               
登录/注册后可看大图

的计算同理。


& Z! u/ o3 E/ p8 L# Z! E8 ^1 b6 _

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


# O( v9 O) ~1 F( H3 S  J, L                               
登录/注册后可看大图

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


0 }% R4 {9 L& \, k+ E6 I                               
登录/注册后可看大图

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


' a) h& w& N5 c4 \8 C                               
登录/注册后可看大图

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

* n% W9 @5 f( ?3 w4 @
                               
登录/注册后可看大图

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


# z+ O7 |' a( y                               
登录/注册后可看大图

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


5 P# q9 |& t" _# n& O& q! M                               
登录/注册后可看大图


; R6 s6 u( g% g2 g8 T* Z                               
登录/注册后可看大图

,具体表达式如下。

/ I+ ?% Z8 ?: q


" j1 U+ Y  X1 J) E                               
登录/注册后可看大图

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

) M, J1 u6 E& M2 T
                               
登录/注册后可看大图

/ ]( S; P5 J" _- @; Q2 }                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

/ ^  @7 }; `7 x/ F8 i& t                               
登录/注册后可看大图

8 E0 q3 y- z0 a1 k" `4 G7 W                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
5 u! y1 k' B! f1 j& }3 F+ d# E
                               
登录/注册后可看大图

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

* d* E  A! \" s
                               
登录/注册后可看大图
,而

3 v7 W: a0 B: o; L  H5 \0 a                               
登录/注册后可看大图
的意思是u网格所在位置的速度

( o! I* S: e( {" r2 w+ L( z                               
登录/注册后可看大图
。以
6 E  X  R# s  F& T% q3 j0 u
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
5 Y( u5 t) ]( _1 x* @+ ]- R
                               
登录/注册后可看大图
平均求得。

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


1 h' ]$ c2 i+ Z% e                               
登录/注册后可看大图

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

- k+ q$ n+ ]: P" I  {
                               
登录/注册后可看大图

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

for k=1:N' ^8 |1 p0 |. q1 t0 ~) S
    h(k)=hzero(k) + eta(k);
+ Q" q; H9 k1 |, }* P+ ]) l    wet(k)=1;2 I5 M" r( v1 J; i! X8 G" v
    if(h(k)<hmin)
  w& h/ v' y+ N        wet(k)=0;6 c2 \* G! z9 I$ c
    end1 a- t3 e3 G; p! a, r5 ^, R
    u(k)=un(k);end

版权声明

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

参考书目

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

! t$ T# G$ _5 K( G: g0 m
回复

举报 使用道具

相关帖子

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