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

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

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

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

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


; `; s1 @  v1 q; p  }                               
登录/注册后可看大图

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


! X8 S9 G. m/ v  O. R+ b5 r                               
登录/注册后可看大图

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


- i+ r: {+ k0 Y& N1 T                               
登录/注册后可看大图
: c' a9 J) U7 ^
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

" f) Q. \" w: n, q& t1 H                               
登录/注册后可看大图
# b0 s, r: f/ L
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

8 K7 V2 Z8 K: o2 ~                               
登录/注册后可看大图

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

* x) [# u' i) Y" x/ ]& A
                               
登录/注册后可看大图
3 K% G( }2 H$ _9 ~& W  k0 A# v
                               
登录/注册后可看大图
的导数,因此为了让对
0 D$ e' t, r" ]" M7 O! Q& ^# B
                               
登录/注册后可看大图
的中央差分落在和

$ x7 k- D# k2 v0 T  j                               
登录/注册后可看大图
同样的位置上,

( E; u" p* ?1 e' P7 M                               
登录/注册后可看大图
也需要和
: u1 A6 X) Q5 l
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

/ a; K& j: D/ }                               
登录/注册后可看大图
在t+1时刻的值,就需要

; H$ Z8 i5 p2 J                               
登录/注册后可看大图
两侧的

% _, \. k* Y" h                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

0 a& n, q( ~+ C$ S& y                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

. m) j$ k4 L  ^$ d& r6 L

8 }7 w" {5 `" w$ F
                               
登录/注册后可看大图

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


+ S, R& `9 l9 F                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
0 M2 z- ~; T+ i+ Q9 r
                               
登录/注册后可看大图
是在陆地边界上,所以要使
& u/ s2 @5 _6 u. a( l& I# U0 C
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

3 t" R4 F. \- \! W" a, |$ {+ m                               
登录/注册后可看大图
或者

) g, @7 Z% `1 H5 g$ i- _' W                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
5 Y$ {2 n+ _0 ?/ ~/ |: O
                               
登录/注册后可看大图
的格点。对北边界的
  }+ S9 c% {5 U5 j
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


  M7 q- L: l" {0 B3 r0 ?( Z

  ^1 }' Q" W/ K- U' {3 x: q7 e
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)9 ~$ K1 S+ Z* B# `% [
    if((wet(j,k+1)==1)||(duu>0))" L3 ]; |, H  X9 f" v- F
        un(j,k)=uu+duu;0 t! ^% n6 e5 A$ s, J& h
    endelse
) O( ]/ x" t; N4 k+ ^    if((wet(j,k+1)==1)&&(duu<0))2 E6 [. t( S) j( A& a) n3 R
        un(j,k)=uu+duu;
  `; Q- f8 u+ J* p    endend

  对

  ^; x3 o2 I4 ]" j; F: M: O
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

; z  Z! s" ?# f( F: \                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

  Z" A, X3 f' ?" g                               
登录/注册后可看大图
的计算和
2 I. Q& ]: Q$ b- i/ a4 O
                               
登录/注册后可看大图

的计算同理。

+ s6 T8 g- i. H: A4 ^! D5 V

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

1 Q# Z1 G; n8 ?$ Z( _+ C
                               
登录/注册后可看大图

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

% y$ U  A9 v; E$ S0 L9 \5 b, X
                               
登录/注册后可看大图

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

: Q7 X- G+ W6 f
                               
登录/注册后可看大图

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

% b. }+ M8 V0 ?8 f, P3 M& M
                               
登录/注册后可看大图

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


/ H# m* Q: z7 f/ Y* J3 W                               
登录/注册后可看大图

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


: b9 U1 n. q6 a* V# q# K) A. a                               
登录/注册后可看大图


% @( ^, P+ A; a" E2 \5 P7 w. M                               
登录/注册后可看大图

,具体表达式如下。


5 i+ K7 e3 i2 a. j0 A

6 S4 C; r8 p9 x$ p$ l! H6 ^
                               
登录/注册后可看大图

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

) S3 \* p- g+ [* c8 d: a
                               
登录/注册后可看大图
; u' Q& ]6 |) y
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

% Z1 G- u) |$ Q                               
登录/注册后可看大图
+ ^( g" H3 p2 d: s
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
) r. m+ V( _/ H$ i, l0 X3 F
                               
登录/注册后可看大图

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

1 x. X4 p+ C2 i2 `
                               
登录/注册后可看大图
,而

9 s; l/ l$ T0 x  G                               
登录/注册后可看大图
的意思是u网格所在位置的速度
0 u# h% }% G8 n) q
                               
登录/注册后可看大图
。以
9 ^# C  X) D3 }+ u4 r% p
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
3 O/ o- V- Y2 i4 |
                               
登录/注册后可看大图
平均求得。

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


$ L2 c4 t# X  x8 \" ]. Z                               
登录/注册后可看大图

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


: ~" c% p0 e3 j                               
登录/注册后可看大图

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

for k=1:N
; I' E1 ?% ?# T( D1 Q6 o5 b. u    h(k)=hzero(k) + eta(k);' I- K1 p) q' M$ ], n
    wet(k)=1;
3 x. B1 ?$ ]  f" B+ ~  F' g    if(h(k)<hmin)
; s0 L& g! K6 Q$ F% k        wet(k)=0;) \3 e- a9 e1 _; r: N, J
    end) j1 S. t% m6 [: ~/ x+ `, p# K
    u(k)=un(k);end

版权声明

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

参考书目

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

0 Q' [" P1 D9 a
回复

举报 使用道具

相关帖子

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