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

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

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

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

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

3 Y  t! g: ^; {
                               
登录/注册后可看大图

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

9 e& w6 I4 `$ q" m$ [3 x4 s2 P" i! G
                               
登录/注册后可看大图

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


, U6 }# l3 P6 P                               
登录/注册后可看大图
* V- o4 r: e. O9 n* k. Z# _- K7 h
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

  i! a3 ?: x" z                               
登录/注册后可看大图

4 e5 u: ~" [8 y* T) s                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
7 c) N8 v7 }3 l0 Z: s* }% H6 Z: u
                               
登录/注册后可看大图

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


9 }/ m" t1 v" h- v. v0 R$ n                               
登录/注册后可看大图

1 _" Q9 z% ?4 x; L8 ^: K                               
登录/注册后可看大图
的导数,因此为了让对

6 a) l/ ?" `; Q- S                               
登录/注册后可看大图
的中央差分落在和

6 X) Z) T% k* I/ S  m& C( E                               
登录/注册后可看大图
同样的位置上,
( J7 Q! I9 h) x* b+ G
                               
登录/注册后可看大图
也需要和
4 F0 Z+ f' a3 q+ U6 s5 ]9 s+ h
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

  W! a7 G! A# V: f; ]                               
登录/注册后可看大图
在t+1时刻的值,就需要
5 {4 N8 X* J: t' A) j1 T( E
                               
登录/注册后可看大图
两侧的

, d1 L% U- Y' h3 r                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


3 g6 J( ?. w, y* F) C8 f! X


* h) r# n5 H5 M8 h$ z1 S                               
登录/注册后可看大图

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

4 F! `, x% W! H- x* W" Z: r
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
0 O6 `& {" A1 H
                               
登录/注册后可看大图
是在陆地边界上,所以要使
1 B, \" D8 T6 J" n. v3 j
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

- ]" E8 Z& v4 f  f) O                               
登录/注册后可看大图
或者

6 m/ [% }8 f$ G2 z& P9 [% K/ J$ [                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
- d& V; \* f+ n- Q. d7 X6 f
                               
登录/注册后可看大图
的格点。对北边界的

. \5 f6 v1 q9 f9 Y8 E* Q. Y3 S5 w                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

7 d/ a" ?! h- q5 Q6 P

' K' ~$ D. K4 L9 E  A
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)) ], V+ e6 V$ v& f7 ~9 O$ M( R
    if((wet(j,k+1)==1)||(duu>0))+ ~; W, G5 Z/ `; W
        un(j,k)=uu+duu;" f- f; m4 e' V* G: y& \
    endelse
7 ?3 N, b1 |' y7 j    if((wet(j,k+1)==1)&&(duu<0))! y: r7 G8 |8 H% X' `. g
        un(j,k)=uu+duu;8 G  ?. Q' D; x
    endend

  对

! q7 [& |( q8 W5 x% \% I; Q$ q
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

  w% L2 |5 K$ J& O* _                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

! V: z; `) j" k" j                               
登录/注册后可看大图
的计算和

7 [) K) b* h# A: |) Z. i                               
登录/注册后可看大图

的计算同理。

3 ~5 ]% `2 ~6 m0 b, C

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

/ t* R" t& O! i$ h( u+ J7 O* c; K
                               
登录/注册后可看大图

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

  @; t8 `: N7 ?2 Z" a& Z; C
                               
登录/注册后可看大图

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


# t4 n& H2 w# ]) F. `5 ]2 K                               
登录/注册后可看大图

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

2 }% z) p$ w% t7 f
                               
登录/注册后可看大图

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


2 C, o# ]1 H7 H) }  Z                               
登录/注册后可看大图

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


# M4 h0 _+ ]4 d# Q; M                               
登录/注册后可看大图


" B) j9 ]4 q) b5 G% k                               
登录/注册后可看大图

,具体表达式如下。

! i2 T7 i+ K* |4 U6 T+ i

* f) l$ e& U: ]5 {
                               
登录/注册后可看大图

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

8 W  i) e9 O: b! w1 Z6 l
                               
登录/注册后可看大图
) Y. ], y8 C2 P, W' B
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

1 f* R6 s8 F0 R$ B: b                               
登录/注册后可看大图

6 h7 u# e) m% {! W                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
1 v% x9 B  `2 v% S
                               
登录/注册后可看大图

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

# h6 B+ m  z" a2 z+ L+ |2 B+ H
                               
登录/注册后可看大图
,而
5 x& M) F* A  p% p0 W
                               
登录/注册后可看大图
的意思是u网格所在位置的速度
' I7 m5 r' N" [, {" l' N! J
                               
登录/注册后可看大图
。以

3 G. a$ k7 |: r% H8 m* A                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
7 _/ g( ?% n5 }: V! |" I$ v
                               
登录/注册后可看大图
平均求得。

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


* g8 C9 Q! a- u                               
登录/注册后可看大图

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


% a2 U/ F$ ~4 J  n9 C  h+ E* Y                               
登录/注册后可看大图

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

for k=1:N# ?) q+ W7 n$ D* S# Z
    h(k)=hzero(k) + eta(k);% ]& T8 I# t' w0 U0 D' ?
    wet(k)=1;0 a& z) U& A# l1 p6 ]
    if(h(k)<hmin)
* k4 |, C* x0 C4 d7 }        wet(k)=0;
1 O2 `7 O( ?- w8 f; S    end/ L' |9 \  ?% D( A! x' n
    u(k)=un(k);end

版权声明

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

参考书目

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

- I% D0 |8 F- O+ h  \7 S
回复

举报 使用道具

相关帖子

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