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

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

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

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

' k7 s0 g* c; q; {% y
                               
登录/注册后可看大图

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


; @0 T) L9 R8 a$ I5 Z3 U4 R                               
登录/注册后可看大图

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

& Z+ K& z8 a/ ]% v3 J; ]
                               
登录/注册后可看大图

4 Z/ }  v! e1 g7 I( f0 V                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
  s+ |4 t6 f8 e( ~5 ~3 s
                               
登录/注册后可看大图
( j) j2 W- w/ Q2 y+ e
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

  Q: z' K$ S& O* R                               
登录/注册后可看大图

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

6 A& c; L  t8 o/ Y0 K) T
                               
登录/注册后可看大图
# d, b5 e) Y+ L6 t0 g+ j" `4 Z
                               
登录/注册后可看大图
的导数,因此为了让对
+ Z5 G. X* g0 J7 ^
                               
登录/注册后可看大图
的中央差分落在和
0 ^' E+ ~7 v# H- Z( W; h& e' ^2 d
                               
登录/注册后可看大图
同样的位置上,
7 x& X! f8 V8 N+ A# X6 I  `, \+ g
                               
登录/注册后可看大图
也需要和
7 l4 v9 Q4 m2 w, ?; \' R( S: ~8 b
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
; X9 V' i" A- p4 i
                               
登录/注册后可看大图
在t+1时刻的值,就需要
+ @, [* e6 y$ t; ^1 a6 o
                               
登录/注册后可看大图
两侧的
% I) C4 C! q' B# q8 U
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

- D8 d6 m8 E% R% T) Z7 Y" D5 p                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

3 ~& }/ r* _2 R! c% P3 B


: Q: l& {4 _" X+ W! u4 L/ i                               
登录/注册后可看大图

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


! ]1 H. j2 _5 R" o$ d' C* g                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

, a4 Z, G- D" c8 K8 g9 _. f9 Q                               
登录/注册后可看大图
是在陆地边界上,所以要使
8 {% b' f( X7 ?- j2 x" i
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

) f' T, @+ [% m9 u' |& y7 k, x                               
登录/注册后可看大图
或者
1 O( H2 K: n, q1 f
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
' }6 {9 c* Q1 }7 E9 N
                               
登录/注册后可看大图
的格点。对北边界的

3 t0 B+ A' L/ F& X1 |                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

. i8 u! Q+ h$ J1 N+ a% e

& Q. l: f4 Z+ x9 e# C
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)/ N; Q" W3 _% H, d" A
    if((wet(j,k+1)==1)||(duu>0))2 x  ]/ L" R! ~1 w1 X, m  Q  y
        un(j,k)=uu+duu;& d) l* A! D) q* i- B: p
    endelse6 y" ~8 F9 X' K  M% j9 p
    if((wet(j,k+1)==1)&&(duu<0))/ p  N" O/ y, ~1 K
        un(j,k)=uu+duu;' z' n; n) o# V/ c
    endend

  对

; G7 D3 X3 B) u1 g$ N7 n
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

3 Y) \3 G, g* H/ L1 G8 Y, B                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

/ O# o, [! {8 h' o8 ^( V                               
登录/注册后可看大图
的计算和

. W9 s, F; ~1 H3 h/ C                               
登录/注册后可看大图

的计算同理。


) E- ?, k" j- n+ T

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


2 J0 G+ l- _4 z9 J: J# u+ h                               
登录/注册后可看大图

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


! L. c* g3 x4 l9 ~+ c" P                               
登录/注册后可看大图

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


& O# @+ ^6 h5 V0 B# q  ]- j6 {6 f                               
登录/注册后可看大图

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


- _2 U% z5 ^2 \2 C. \; q$ \& Z7 I, Z                               
登录/注册后可看大图

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


; Q: J) Y, K" y                               
登录/注册后可看大图

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


, t. }  W$ o0 ~# E6 i6 A5 G  \                               
登录/注册后可看大图

" R1 a7 b; n- O% C( C7 e) `
                               
登录/注册后可看大图

,具体表达式如下。

' m$ ~5 n8 s7 W) G! k* F4 X! v: V


! ~' J" S* _5 A( @0 i) |                               
登录/注册后可看大图

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


6 [0 L& t& D- o- C                               
登录/注册后可看大图
, ~$ {8 O: v( u# W* c% T6 w
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
' R9 A- f4 g7 d- G6 t/ V9 {
                               
登录/注册后可看大图
0 X0 r7 j5 G2 b8 s' w* P* L
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
9 ^: c# ?* g0 [* T) ~+ d3 }
                               
登录/注册后可看大图

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

4 |# B# |' L0 {& h0 n
                               
登录/注册后可看大图
,而

7 _, y. A  d! J8 s! S9 E+ _                               
登录/注册后可看大图
的意思是u网格所在位置的速度

: b8 U8 A) o4 x- a0 x                               
登录/注册后可看大图
。以
# Y: M/ z; E, Q: ^4 e
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

4 `# ~; o+ w- a1 }5 `                               
登录/注册后可看大图
平均求得。

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

  I- n( g1 l1 {; C7 S% g5 }
                               
登录/注册后可看大图

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


- N& s8 w( O' z9 M                               
登录/注册后可看大图

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

for k=1:N
' u% h. h$ J3 B, K$ |8 z* H    h(k)=hzero(k) + eta(k);7 o; l: m9 S" z% N6 g
    wet(k)=1;
. W; J$ Y( w( i6 e  e    if(h(k)<hmin)" ^: ^; U' R+ L
        wet(k)=0;
: _* z5 \% d" p- T9 r    end
" U5 @# w. t& M$ [2 G4 F+ X    u(k)=un(k);end

版权声明

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

参考书目

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

& n, p  ^, \+ J, f
回复

举报 使用道具

相关帖子

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