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

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

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

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

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

4 [, x+ b2 k1 @7 g
                               
登录/注册后可看大图

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


, ]. o- C) S6 X' ?/ Y) b  f: I2 O5 y) {                               
登录/注册后可看大图

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


: v* G3 I- m3 \7 P3 z2 y$ X! j: M                               
登录/注册后可看大图

; V) J3 n) G$ U: u0 r( D8 ~% z                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

6 ?  |- b- t) A$ j. d                               
登录/注册后可看大图

& ~* C0 F% m& C8 \/ r6 u                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
# H' a0 ~/ h3 B5 K& a: w: F
                               
登录/注册后可看大图

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


# r+ c- i( P8 u  F% m                               
登录/注册后可看大图
5 X: {' i) l/ o
                               
登录/注册后可看大图
的导数,因此为了让对
- R7 X+ q3 T7 D- T6 W& h, H4 ^
                               
登录/注册后可看大图
的中央差分落在和
! |& W* P3 {7 X3 J
                               
登录/注册后可看大图
同样的位置上,
* {" [6 J  h3 i4 S
                               
登录/注册后可看大图
也需要和
- N5 N$ G+ Q! t7 I2 k
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
: V9 N. l) ]& ~4 p) R- ]
                               
登录/注册后可看大图
在t+1时刻的值,就需要
" `. {4 P, u$ h4 [9 F* F
                               
登录/注册后可看大图
两侧的
4 O" t6 [$ k$ V2 S1 h7 E$ F
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

0 l  g) |8 c7 r; q  o+ H! `5 T$ Q                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

) X! E' ]8 X5 {8 o9 d2 `: D

: k1 E( t3 S: {; T' V* b
                               
登录/注册后可看大图

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

2 x9 @) |$ X5 n
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

  Q; B& }  \6 v                               
登录/注册后可看大图
是在陆地边界上,所以要使

0 s/ L4 V" c% @* j" y                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

: a$ f& a, X; [, I" k7 W. _                               
登录/注册后可看大图
或者

7 E6 s2 ~" n0 d/ U0 n                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

* V  ?! Z6 S/ D6 c( l) t                               
登录/注册后可看大图
的格点。对北边界的
+ h) G' S. k7 f& J- a/ N$ @) g9 r
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

+ X+ j' b  V- P5 G; _# K1 T1 e

. J8 g" @: t2 N6 S1 l
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)0 a+ y% f: X; I9 C
    if((wet(j,k+1)==1)||(duu>0))
1 w: p% }) l" k) y1 p        un(j,k)=uu+duu;
( V# Z5 z8 O) ~( Q# W    endelse8 [7 v! a8 ?3 t' I# h$ m
    if((wet(j,k+1)==1)&&(duu<0))3 j0 Z  P0 X& x' g2 V! o
        un(j,k)=uu+duu;
& p& }8 V. N$ L7 b    endend

  对


/ h: Q6 e" j4 i( A5 |0 G. y! |                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
3 x2 ~) P1 K5 j3 T
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

5 A: x% e9 M6 ]" Y* u                               
登录/注册后可看大图
的计算和
. D! k% a2 y4 {# k) \
                               
登录/注册后可看大图

的计算同理。

+ }& j% O  X) V9 |1 M1 v

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

2 y" C; a7 Q+ ^2 H1 ]
                               
登录/注册后可看大图

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


) x6 W4 {" l3 r( q. P                               
登录/注册后可看大图

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


8 \1 Y! {2 \+ U; Q$ s: c                               
登录/注册后可看大图

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


+ e( E  g% B$ c6 G                               
登录/注册后可看大图

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


( F  [: W/ B$ A, h                               
登录/注册后可看大图

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

# b: g4 i1 U# R/ _* S1 n
                               
登录/注册后可看大图

$ f9 g# y, g+ J8 ^. r" j3 ^; I. D1 z
                               
登录/注册后可看大图

,具体表达式如下。


7 R9 D1 R/ p, x4 ]

: q0 t& o/ Y( D2 i
                               
登录/注册后可看大图

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

5 `4 e5 l) x( X& E5 s& J" D/ n! R
                               
登录/注册后可看大图
' g$ P5 g4 l* S- e5 v
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

' E7 d. a: t( c0 y! N* }                               
登录/注册后可看大图

  n' a1 ?) M  ]                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

( h4 Y! V5 |8 j. q                               
登录/注册后可看大图

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

1 Y* I% m, F5 N! h0 K0 W8 f
                               
登录/注册后可看大图
,而

: `$ D$ w2 g2 m) V                               
登录/注册后可看大图
的意思是u网格所在位置的速度
' I. s" h9 K: j/ S: y/ ~+ W/ D0 r
                               
登录/注册后可看大图
。以

+ H3 I* T0 v( E                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
7 Y" H/ c. V; k' Q7 B* x% P* s
                               
登录/注册后可看大图
平均求得。

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

5 Q% ]5 @" r5 l5 ~; e3 m8 `1 M) y7 W
                               
登录/注册后可看大图

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


$ l. R" j% Q( p+ A                               
登录/注册后可看大图

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

for k=1:N$ }0 p4 e/ {+ `1 u; X: F5 P
    h(k)=hzero(k) + eta(k);+ K  H' C7 C3 i% R
    wet(k)=1;# u% ^1 M1 q0 F
    if(h(k)<hmin)
" V+ T! w' T. G, i0 v$ B2 T        wet(k)=0;
! R+ S; R4 d8 F7 _+ q+ @    end9 I" c: U2 b. K" t+ B
    u(k)=un(k);end

版权声明

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

参考书目

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


) R+ \5 t9 \' J7 e
回复

举报 使用道具

相关帖子

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