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

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

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

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

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


) y8 Q" _) |( p/ W5 W$ \4 f" x$ m                               
登录/注册后可看大图

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

& ?1 W" ~& a8 s/ x, i3 q
                               
登录/注册后可看大图

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


; m% D% [4 T# n. T8 ]1 C                               
登录/注册后可看大图
) z; H$ _  n; C* C( a
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

2 ~' K/ Y; I( e2 B7 a9 V4 o                               
登录/注册后可看大图

/ B, o& U- _; x5 p0 g! T. }1 `                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

7 s$ T7 }( u% E; w/ C4 V$ H                               
登录/注册后可看大图

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


+ z5 G7 e& R5 k& A3 y                               
登录/注册后可看大图

* t% b. n9 S$ ^, k. g                               
登录/注册后可看大图
的导数,因此为了让对

- Y8 U/ J: A6 W5 Q+ @1 E; V                               
登录/注册后可看大图
的中央差分落在和

" b/ U/ g" U* S( J4 R7 i                               
登录/注册后可看大图
同样的位置上,
, A) `- d, F7 F$ e1 k, i
                               
登录/注册后可看大图
也需要和

* j. z+ t2 ?* B! l; v                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
5 r6 l; T( W6 ~% P* Y# n
                               
登录/注册后可看大图
在t+1时刻的值,就需要
4 T4 e2 E% S" L) y7 ?8 Q# H$ f# j3 y
                               
登录/注册后可看大图
两侧的
8 V1 V, W5 Q7 d: D9 f" q
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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

* o7 F4 m' p. e

1 i$ T' O! t& w. ^$ p$ Q* D
                               
登录/注册后可看大图

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


1 A. c& q* V; E                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

+ ^$ o2 o1 q: C% }# F6 e                               
登录/注册后可看大图
是在陆地边界上,所以要使

3 L" n. n3 }( H' L/ p, b                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
1 T  {$ Z1 z" `  H* d5 V4 Q# U
                               
登录/注册后可看大图
或者

/ Y8 b0 F& P7 k( k( k" U                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
. E/ Z! \2 w2 l0 `" K
                               
登录/注册后可看大图
的格点。对北边界的

1 {  {# @0 l: M' u+ _                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


1 t- u: W/ Y+ Z: j( p; h$ j

) N5 _( a# i* j# W8 V; o
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
6 T, a$ w& ^9 i& `: D2 C    if((wet(j,k+1)==1)||(duu>0))( ]0 j; Z, ?6 E  K0 K' v. p/ a  {8 j' |
        un(j,k)=uu+duu;
  Z: L. N! d+ t" z% H- Q    endelse
/ z9 l( B5 O, y% \    if((wet(j,k+1)==1)&&(duu<0))
2 [! S6 D- K' q" Y        un(j,k)=uu+duu;
+ Q' q1 W6 [/ G/ U4 ~7 U    endend

  对

+ P9 U0 ~, N) _2 Y" ~" h/ I  Y
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

+ n* H4 A. g+ _0 Q& v                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
) D- W4 O8 U3 n; K2 E# c4 m
                               
登录/注册后可看大图
的计算和
) l6 V$ y! F9 w( F1 u. B1 p
                               
登录/注册后可看大图

的计算同理。


4 }# f" [% R; x. k. ?' q

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


' {, g' W% _8 s* \) g: `                               
登录/注册后可看大图

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

  N" q# F3 g4 p7 O
                               
登录/注册后可看大图

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


0 {) l2 F. V  N" Y) {& k, D                               
登录/注册后可看大图

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

$ s. e% c: Y; P, j6 f7 x8 h
                               
登录/注册后可看大图

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

6 F. V/ E, e( l0 j+ Q% T
                               
登录/注册后可看大图

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


7 `2 i1 G$ l( h( i                               
登录/注册后可看大图

4 e8 x# w& k3 a+ O2 ?% W/ X
                               
登录/注册后可看大图

,具体表达式如下。


& H8 o: l/ `  z$ o# X* H3 l2 d6 H


# S( `/ I, X8 z/ l+ V                               
登录/注册后可看大图

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


% g9 @' L7 Q! d; E                               
登录/注册后可看大图

) u. |: a5 @% S% \5 q                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
: m/ J& u6 `/ G# f/ G1 y
                               
登录/注册后可看大图

9 f, R& z1 }* _% M4 [' a                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

- w1 l6 G0 A8 z9 `                               
登录/注册后可看大图

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


* D7 a- {' d4 L. f2 A# O                               
登录/注册后可看大图
,而

" u; R; C9 q3 O, N3 k0 s0 ?                               
登录/注册后可看大图
的意思是u网格所在位置的速度

  g6 o0 _/ ~% O( v4 ?                               
登录/注册后可看大图
。以

' [7 D0 s: ~( J# R* a8 |' v- ?                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
+ p- m3 a2 H$ g3 {# ~
                               
登录/注册后可看大图
平均求得。

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

  v' I* @8 @9 F2 q! d; z( u
                               
登录/注册后可看大图

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


1 H, T2 W% G2 Q' o" M) o2 f( k+ k                               
登录/注册后可看大图

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

for k=1:N* C5 I5 E8 y# A4 e& d+ @
    h(k)=hzero(k) + eta(k);
8 _+ Z4 k& t. T6 F$ s    wet(k)=1;0 S. l% f# E1 @
    if(h(k)<hmin)
! r: r: F5 o) V. N" W* ?" u        wet(k)=0;
/ b& e, z" f* ]1 ]' k    end: }1 K7 m5 j% ?- c8 B: M- f
    u(k)=un(k);end

版权声明

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

参考书目

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


* @: H" z+ u$ h5 a, F7 E6 ]
回复

举报 使用道具

相关帖子

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