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

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

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

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

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

' X! n( y/ n. o+ J4 M
                               
登录/注册后可看大图

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


' u1 x7 g3 j9 ^) z7 Z                               
登录/注册后可看大图

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


; j+ V- b" Y4 g& ^8 I                               
登录/注册后可看大图

* ?, y: l; Y0 K: @) E: H3 @$ j4 J                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
4 r$ Q$ @2 ^7 e$ [! W
                               
登录/注册后可看大图
/ T+ x: g7 }3 z; ]( J& C+ F
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

9 h& W% {- q- H: |$ h, D0 o                               
登录/注册后可看大图

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


3 c! j: S1 M+ ~9 E                               
登录/注册后可看大图

3 d$ Z- t) v/ P5 m( |                               
登录/注册后可看大图
的导数,因此为了让对
; T/ y' [% \* M) p7 X
                               
登录/注册后可看大图
的中央差分落在和
( d4 X( S/ a7 t& R5 `- ?
                               
登录/注册后可看大图
同样的位置上,
/ M" j4 R* p! `# c8 y: n) \/ X. P
                               
登录/注册后可看大图
也需要和

5 L6 E- D& m) n6 n6 M* j                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

" j0 H9 G. v, U2 G- x+ T                               
登录/注册后可看大图
在t+1时刻的值,就需要

9 ?( B! S% ]" B" C; A                               
登录/注册后可看大图
两侧的

* T# G8 d9 m/ D) z3 B* _4 _                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
1 p- r4 y3 m/ K0 g
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

7 i- b- F3 G) @) G5 \

! V1 r1 s$ Y1 F& R4 \
                               
登录/注册后可看大图

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


8 R7 B" r: b2 }. j5 i                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

1 Q: A# u) b  }( @2 Y                               
登录/注册后可看大图
是在陆地边界上,所以要使

# P, x6 j6 n* R' y1 X: O/ f" D                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
0 t5 Y  S# G% H5 N  g+ v& p* W
                               
登录/注册后可看大图
或者
- r( h, c! n8 k+ M
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
5 V8 J. l3 a5 L  I4 n3 a+ ~; q* e3 P
                               
登录/注册后可看大图
的格点。对北边界的

2 Y) x3 ?$ I" J- d; R: s6 `# f                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


5 V5 O. D" k5 u' j+ c1 G0 X

' [' A7 T  T. N5 |7 i
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)3 X: A7 T$ l! ^6 i/ a  w( E
    if((wet(j,k+1)==1)||(duu>0))/ Z: F+ o# U' T4 N* s- X' t
        un(j,k)=uu+duu;
4 ?! K, C/ C6 s4 P+ i9 c/ q: L    endelse
) O6 a/ l0 D9 H" R9 I' _    if((wet(j,k+1)==1)&&(duu<0))
* k" V' Y; X: `* ~6 E        un(j,k)=uu+duu;- V/ O7 Q7 q  R7 u2 c
    endend

  对

) V" ^# @% V% I& j
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
* k/ ]1 f+ A+ t" V5 N8 {6 Q
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

& ~' W( _6 o' W! [! ^                               
登录/注册后可看大图
的计算和

8 W: ]7 ?& M3 X5 J                               
登录/注册后可看大图

的计算同理。

4 u' e, W" Q, [0 K% L

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

. g( `: c- U6 z
                               
登录/注册后可看大图

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

( M9 D% r- `* }9 I5 y  l
                               
登录/注册后可看大图

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

. y! _2 e" @% [' J( Q6 ]4 f  h
                               
登录/注册后可看大图

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


; L) r5 B4 P& N                               
登录/注册后可看大图

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


! z3 V5 ^* e& f3 z( d                               
登录/注册后可看大图

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

/ {0 c# \' G' w+ G# `. P8 D
                               
登录/注册后可看大图

1 @3 ?! O4 j/ O
                               
登录/注册后可看大图

,具体表达式如下。


8 x! V! r& O0 ^5 T. z! d. M: V  K# T


1 B/ U; B& [# r0 Z9 h) R1 K( l5 S3 M' z                               
登录/注册后可看大图

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


/ r: b9 ^! R6 K                               
登录/注册后可看大图

! b# M$ P: v. J# \                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

6 R* p5 l" @; z+ f) U                               
登录/注册后可看大图

7 E7 K" ^1 D) n* _8 Q; i6 i! k0 `                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
1 A8 `: V8 [2 u. Y( [: T
                               
登录/注册后可看大图

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


+ ]  i4 z( [, m  \7 I3 l0 ?                               
登录/注册后可看大图
,而
; }: X4 K6 o1 S6 b, S
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

1 G- F' a% M+ g2 q+ G$ }                               
登录/注册后可看大图
。以
; k- Q* j$ r, r' d; q2 @, g
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
" L5 G  }& n5 g
                               
登录/注册后可看大图
平均求得。

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


6 K5 L9 B+ o. Z% w                               
登录/注册后可看大图

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


2 V4 z' _! M2 l8 w7 d: v9 R                               
登录/注册后可看大图

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

for k=1:N, I& X1 L' m* S. e4 r1 Y
    h(k)=hzero(k) + eta(k);
, k& f; P6 E( n( @* [" T5 g    wet(k)=1;
+ f- d9 r! |4 z4 s/ B8 X/ ]  M8 j    if(h(k)<hmin)
% K" R& |- a$ R  I9 t        wet(k)=0;+ Y4 a' p& t$ v: y9 j0 P( q
    end: ^- i9 r( p2 `3 B
    u(k)=un(k);end

版权声明

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

参考书目

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

& ~5 J  X5 t; z4 j% t3 I7 J" U6 m; w1 T
回复

举报 使用道具

相关帖子

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