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

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

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

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

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


* V! C2 A8 m5 ^9 q                               
登录/注册后可看大图

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


, o7 E7 V" A  _$ M% i                               
登录/注册后可看大图

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


% h4 M. d& w: a! p! {                               
登录/注册后可看大图

8 U& M- _' j, I                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
/ a* O% @$ g1 Z- e9 t6 z
                               
登录/注册后可看大图

7 V% R; |% `/ \. G8 K3 m/ ^                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

& q' h0 W7 h: T% B                               
登录/注册后可看大图

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

8 A1 y9 K1 p& Y4 T* U) c# O
                               
登录/注册后可看大图

3 a7 \& u( N; ]3 D' C* @                               
登录/注册后可看大图
的导数,因此为了让对

1 s, P9 B5 m) ?& d+ _$ n) A: W                               
登录/注册后可看大图
的中央差分落在和

; Q; }* |. ^. m+ u, r& Y$ e4 W                               
登录/注册后可看大图
同样的位置上,

# N1 F. F) r4 W                               
登录/注册后可看大图
也需要和
; t/ v5 t+ y8 [) S5 N- p, i
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

3 f" m* |+ c& U  y/ s; M                               
登录/注册后可看大图
在t+1时刻的值,就需要

& Q. |  L3 e6 u, C& V% E                               
登录/注册后可看大图
两侧的

7 N' }  [# m- B  `" E( q0 c" H' o1 {( Z                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


/ M; j/ h# p: @7 |! o

) c6 p* `7 B+ L, N3 L5 _8 G. x3 R
                               
登录/注册后可看大图

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


: y' B" a9 L4 x9 v9 ^$ y                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
# k7 ^' \; s6 b$ _3 W
                               
登录/注册后可看大图
是在陆地边界上,所以要使

. Q  s, I4 p. V. Z: C4 Q                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

  o3 Y' j* ?- o9 M( Q  q                               
登录/注册后可看大图
或者

9 ~( g! \) N+ `                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
3 {3 ?! w; [0 I' \' a; Z
                               
登录/注册后可看大图
的格点。对北边界的
3 R! X- x  E2 {/ R2 m  k
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


! Q/ P- l" L% E) c


& q. s' r0 ^: x6 H1 B8 @% @                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)* u2 l- d; J- h! Z. l
    if((wet(j,k+1)==1)||(duu>0))4 }# _9 T! ^( p: m' k4 Y. F
        un(j,k)=uu+duu;  F: J1 b8 a) Q! P
    endelse
, B$ w+ W/ C  l/ s  r    if((wet(j,k+1)==1)&&(duu<0))
( E" ^9 B% n7 Q9 ]9 ^) h" k: V. e        un(j,k)=uu+duu;
: p/ g, g/ Y! f3 t4 \# q& A9 Y) y  w/ {    endend

  对


1 P) U3 w+ U' B2 [' B                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

* L. q6 `8 T6 I( M3 c# s* s  l3 P% `                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

" c  l( T5 k( M# M" c                               
登录/注册后可看大图
的计算和
" P3 o5 D) O, F& K) Q5 h* U
                               
登录/注册后可看大图

的计算同理。

7 ]' J# b% M) w

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


; _# p& x- `* ~- l! t+ g' i: o9 r                               
登录/注册后可看大图

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


. p5 k0 u, H3 ~& X6 H                               
登录/注册后可看大图

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

3 ?+ X4 `4 x. d7 w% p' m4 V
                               
登录/注册后可看大图

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

, v2 C. F2 V9 K' V. n' c
                               
登录/注册后可看大图

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

' E3 j8 t+ ^# h- T/ Q
                               
登录/注册后可看大图

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


/ e; ]+ t4 G: g7 ^                               
登录/注册后可看大图


) y! z. R! Z) o% M9 }8 E+ A6 h                               
登录/注册后可看大图

,具体表达式如下。

( P: f9 P, k8 i1 |# ?- o2 m


0 j6 h7 ~% c* j% a1 J  t                               
登录/注册后可看大图

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


0 R3 j5 |1 Z' u& s9 s! C                               
登录/注册后可看大图

6 G5 }1 b. m: h6 h' [! x: R- |                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

; X" o' \" p8 l3 G4 ^9 m! z                               
登录/注册后可看大图
, j' z& i! V( M2 d7 w0 R, v
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

2 Q% [" r/ v1 X% V! |; {                               
登录/注册后可看大图

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

% A$ J' b5 C6 V2 H. i
                               
登录/注册后可看大图
,而

' Y' ^& N4 h9 {: R" M6 J/ }                               
登录/注册后可看大图
的意思是u网格所在位置的速度
( [. Y% O$ m: A  n! k
                               
登录/注册后可看大图
。以
$ t) I! i, _% x% t0 K
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
  r; B$ [. t" u: x' M- N/ Z& q
                               
登录/注册后可看大图
平均求得。

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

- j" |& J5 A6 d
                               
登录/注册后可看大图

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


1 t; g& E6 ]0 U% S6 }3 }; T                               
登录/注册后可看大图

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

for k=1:N
) j6 P; |/ }0 ?3 d    h(k)=hzero(k) + eta(k);
" K9 V8 q( k: {$ f: Q, E9 d    wet(k)=1;1 D% H# |( a$ E: E$ d- q
    if(h(k)<hmin)
8 W( F5 Z' x& q$ V' b6 }  I        wet(k)=0;
* k. ?* `$ L, [! J6 Z    end
6 O4 ?% b) n# Y! ?6 H! g$ \    u(k)=un(k);end

版权声明

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

参考书目

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

- k) M( {8 N# R! p) L8 }: X% h$ `
回复

举报 使用道具

相关帖子

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