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

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

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

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

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

3 d2 y/ ^: v" O/ ^( j
                               
登录/注册后可看大图

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


% `7 [2 U0 k* K$ ]5 q+ ]6 Z2 l                               
登录/注册后可看大图

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


3 Q. w. n4 _; w                               
登录/注册后可看大图
; m3 H  ~* `* R/ l
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
6 D7 V8 k) h2 c
                               
登录/注册后可看大图
: n" {- d$ ~0 \5 B( a- j" t
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

% D& i+ y9 x% ]% u3 y2 d" Q* n                               
登录/注册后可看大图

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


# F# V" X) e; y# a3 r  v  u                               
登录/注册后可看大图

) |8 v& g9 N7 E; Q, x3 x$ J0 ]                               
登录/注册后可看大图
的导数,因此为了让对

/ I) N* Q4 p/ T: W# |3 A                               
登录/注册后可看大图
的中央差分落在和

7 B% `+ J5 V" J* y1 v9 ?! A                               
登录/注册后可看大图
同样的位置上,

8 E, D  f* i5 C6 Y9 |                               
登录/注册后可看大图
也需要和

8 p; \2 ^& `: i- O+ U                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

: H2 u4 H/ |2 c                               
登录/注册后可看大图
在t+1时刻的值,就需要
7 [' W9 E& q( h0 ~5 r% \+ X
                               
登录/注册后可看大图
两侧的
& Q9 G. v4 {& U; h
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
5 a1 Z2 A! f( L5 j' y! Z/ y7 f
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

, Y% _% ?/ {, x9 l


4 y$ s3 F( p% ~7 g# N) I# v, f                               
登录/注册后可看大图

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

2 a: G: D/ L: Q' K( R
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

" g$ |3 |/ w1 j2 n2 g                               
登录/注册后可看大图
是在陆地边界上,所以要使

2 m* I! L3 E0 ~                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

6 m) m# c" l. }. Y: E                               
登录/注册后可看大图
或者

; A6 N* @  O7 m. W- B                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
% h0 d5 v& V$ H) @. k( F5 Q$ _
                               
登录/注册后可看大图
的格点。对北边界的
& _4 p4 e9 ]1 c1 m& y
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

% \; Q" d" J  v4 Q


& a, {" O  v+ n% O. P                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
2 @5 Q& v( [4 h    if((wet(j,k+1)==1)||(duu>0))
  Q. r4 g- P7 ]( ?, G        un(j,k)=uu+duu;
3 X+ ]# N6 x2 A& b0 Y4 \9 ^    endelse
0 [2 u$ F" _4 q5 C    if((wet(j,k+1)==1)&&(duu<0))- M3 N; T$ U( @( r! x
        un(j,k)=uu+duu;2 \' J" L% Z0 |8 J- f
    endend

  对


, J0 S1 E$ A1 k1 h5 ?5 a                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
! K& h: X7 ^. X- g
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

7 Q% ?( s  a2 D; u2 w7 J  }6 H, }                               
登录/注册后可看大图
的计算和

, U: S4 F% k5 y                               
登录/注册后可看大图

的计算同理。

& j" E7 H$ t- j. I+ I

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


, _8 Q* i# l8 z+ D0 v# `5 \/ l. q' `                               
登录/注册后可看大图

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


' U/ H4 {+ z) q0 m4 O                               
登录/注册后可看大图

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


4 y& `# H/ e) a) i. x9 @1 n                               
登录/注册后可看大图

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


6 |% u: f- l. ~" L  I/ P8 S' [                               
登录/注册后可看大图

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


4 x3 R7 o/ [# T6 V& a, H, T7 M                               
登录/注册后可看大图

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


: A6 Q( l+ ~  W. c                               
登录/注册后可看大图


$ X4 G. s- p( u                               
登录/注册后可看大图

,具体表达式如下。

$ w$ @% |1 E$ D' G+ _  M- M

$ a8 ?" H" |# g/ S- U
                               
登录/注册后可看大图

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

3 B1 q" E' [9 i% C7 F# g2 x+ M
                               
登录/注册后可看大图
3 A* ?- R6 |* L( Y8 p
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
7 U5 |: s# p! U$ w: ?+ _9 \
                               
登录/注册后可看大图
0 H3 y% f4 c' C4 j! U& ]- u
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

: |) K& g- {% ^* l: T7 [. U                               
登录/注册后可看大图

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

, ?* D( K0 `9 `- u, e
                               
登录/注册后可看大图
,而

4 Z4 R: e' p0 ~/ `                               
登录/注册后可看大图
的意思是u网格所在位置的速度

  q% Z$ e9 ^% Y' P' n, r) |8 y& A                               
登录/注册后可看大图
。以

9 i, _$ |- v9 l( y8 W, a6 }                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

3 l( `: D4 p' d3 |& P$ A* }: y                               
登录/注册后可看大图
平均求得。

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


8 E3 e& C# ?& [* ~3 V                               
登录/注册后可看大图

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


' p; f; d0 w% {( B. _                               
登录/注册后可看大图

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

for k=1:N
( g. w% y! s- q2 F0 A    h(k)=hzero(k) + eta(k);; K) }! v+ \; x  `$ S8 q7 E
    wet(k)=1;3 X- u  n- j/ I) O4 s4 m7 X
    if(h(k)<hmin)
. P5 Z- K5 S4 Y, m& k        wet(k)=0;
0 u  c1 r: |9 @    end# q- e1 [* ^6 x& J3 J3 ~
    u(k)=un(k);end

版权声明

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

参考书目

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


" T7 {& K2 \# V9 _7 |2 f5 O' E
回复

举报 使用道具

相关帖子

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