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

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

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

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

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

: ^/ b$ l* g: E/ ?
                               
登录/注册后可看大图

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

# W* r5 Y$ G% A6 b" G0 x8 y: ^
                               
登录/注册后可看大图

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


1 e( K/ Z, ~! |* _9 \& L  ?                               
登录/注册后可看大图
6 L1 ]: z  b6 N) q% r, ^6 Y, E; C
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
3 \' k; t% ]8 z* ^
                               
登录/注册后可看大图

0 j2 i5 q! `8 W9 u' J6 C                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
! W* x6 Z* {8 R! G  A
                               
登录/注册后可看大图

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

' O; N3 H& j' A4 h8 f9 y4 n! \
                               
登录/注册后可看大图

3 q( q* W+ A  W( j# U- k                               
登录/注册后可看大图
的导数,因此为了让对

, E- W6 g" |- Y5 o. d4 Z8 S                               
登录/注册后可看大图
的中央差分落在和

3 J" J3 y- r( Q( i' d                               
登录/注册后可看大图
同样的位置上,
% ]/ P5 S0 g) y. v
                               
登录/注册后可看大图
也需要和
5 R1 s! g# \8 }/ F7 h
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

3 R: b4 ?* F  `                               
登录/注册后可看大图
在t+1时刻的值,就需要

7 k7 H, I+ y$ f" S$ e7 j                               
登录/注册后可看大图
两侧的

" Y# q5 N0 u$ m! I                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
9 U% ]8 \; S% Y# T6 K& {
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


0 w8 C( u( S+ m: e/ p- }9 X4 T

- R( E, t- p3 r2 G. t( O
                               
登录/注册后可看大图

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

& @1 s" s/ I1 g/ w% p1 `1 f- Y
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

* J4 F8 v* }3 Z+ m4 C& S                               
登录/注册后可看大图
是在陆地边界上,所以要使

/ o, }; U* e/ y: b. {/ J                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
9 L1 K8 t% E. \6 b$ {( V$ z
                               
登录/注册后可看大图
或者
+ r, X" w' w1 f1 V/ S, e
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
5 K$ P* ?0 z( D. ~; M. R6 A/ Q; W
                               
登录/注册后可看大图
的格点。对北边界的

/ a3 u( j$ b0 y" S2 }8 x6 g                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


  v+ @' y6 d! l2 F! L


; z- s2 e4 H' z  q4 }* y! a* G                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1). w2 |$ M% e4 W  |3 Z9 @7 d: W
    if((wet(j,k+1)==1)||(duu>0)); i7 w3 _; a3 f' |
        un(j,k)=uu+duu;
% e/ e4 d$ v5 U0 O0 _3 I    endelse: c- L5 P% Q% w) \  w: W' s
    if((wet(j,k+1)==1)&&(duu<0))
4 h2 F8 P7 U) `: |& Q- e  c$ z        un(j,k)=uu+duu;; O, p. _6 t' Q
    endend

  对

5 `  c! K" H2 e  V; O
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
) a* D7 O! |# {8 N
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

1 |2 x! a4 D/ e; b' Y& J" k                               
登录/注册后可看大图
的计算和
7 x8 ]/ y5 h, Y
                               
登录/注册后可看大图

的计算同理。


/ W; P5 H) M" L9 L5 n2 {

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

! }* e+ y( p/ A* ]5 V
                               
登录/注册后可看大图

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

3 U; g# e! S2 u& B) K
                               
登录/注册后可看大图

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

0 b8 V# x( L' o4 @9 O# S
                               
登录/注册后可看大图

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

' x. l: a- Y) p6 q
                               
登录/注册后可看大图

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

" }& n& l+ d% p3 Y7 v
                               
登录/注册后可看大图

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

+ w( w& s6 Y# y0 W, j( [+ N- o2 \
                               
登录/注册后可看大图


& V( p/ `; p8 M                               
登录/注册后可看大图

,具体表达式如下。


5 ^2 q$ d* p; L! j9 x( Q1 r# d

- C  a  o, g# k* B* X. d, g
                               
登录/注册后可看大图

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

' e1 k% Z2 ^) U' f/ r( b
                               
登录/注册后可看大图

# y$ X& U6 \8 O1 V                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
8 F2 d& M! {- o* [
                               
登录/注册后可看大图
0 @  g8 D: T1 G! }& V8 Z
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
: V- p5 p2 z4 Z
                               
登录/注册后可看大图

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

3 l" ]: g: @( S! {" V/ J/ f& }
                               
登录/注册后可看大图
,而

8 n- A3 C  R  K' W; _% l& v                               
登录/注册后可看大图
的意思是u网格所在位置的速度

+ u% r7 P: \0 |( {                               
登录/注册后可看大图
。以
5 W, O: {) [* Z4 J' t
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

7 w6 k/ K' @. d0 f                               
登录/注册后可看大图
平均求得。

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


5 u/ _) ^. U) V: y& P                               
登录/注册后可看大图

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

8 H5 i( O- t5 t8 w1 T# o& o" J
                               
登录/注册后可看大图

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

for k=1:N
  _8 n% b. b9 @/ d; S    h(k)=hzero(k) + eta(k);
, X1 v% h3 Y, X, E    wet(k)=1;/ r9 d6 {+ e% F' _4 b# h, n/ |) g
    if(h(k)<hmin)3 G. J$ T+ r: Q5 A* t1 C; z
        wet(k)=0;5 s1 Y" G) C$ W! o
    end. `/ N; E: B& }0 @
    u(k)=un(k);end

版权声明

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

参考书目

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


, p) J' A7 G, ]" f6 B
回复

举报 使用道具

相关帖子

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