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

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

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

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

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


, v+ K. p. `1 s; ~1 H5 `0 v                               
登录/注册后可看大图

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


/ b" S8 h5 f2 ~                               
登录/注册后可看大图

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


- C) R& l( X3 h0 o' ^- Z                               
登录/注册后可看大图

$ l6 }/ p1 f8 \  c) r: n" k                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

! e$ c, j. Q' z; G: `! Q                               
登录/注册后可看大图
) r" l! |9 }0 \. L
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
2 h5 ^' g; i# P# `
                               
登录/注册后可看大图

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


( R8 A8 {* F, T                               
登录/注册后可看大图

# F: G/ d  Z1 l# j7 F+ y                               
登录/注册后可看大图
的导数,因此为了让对
: B- T: B' ~" m6 Y& z9 f
                               
登录/注册后可看大图
的中央差分落在和
0 X4 }, b9 j) c6 \. {8 _
                               
登录/注册后可看大图
同样的位置上,
6 t5 N$ a2 m/ D) s2 [
                               
登录/注册后可看大图
也需要和
- ]. h. |4 B3 g/ }4 `) N  C
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

' N9 z- }$ k" V3 ^: J                               
登录/注册后可看大图
在t+1时刻的值,就需要
& i5 z9 M- R3 q* b0 O. B
                               
登录/注册后可看大图
两侧的

* u  Z3 W+ P4 f4 e$ @: l; M! Z                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


/ y8 n$ Q& x/ {5 U1 \, E


4 v. e# j1 b5 O# D                               
登录/注册后可看大图

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

7 [: q: a7 g1 U2 E0 n
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

  c# H$ ~% h  c; x* L                               
登录/注册后可看大图
是在陆地边界上,所以要使
6 F1 t; E4 p8 X- q! R
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
! o( t5 ^9 [. Z) B  `3 `) P
                               
登录/注册后可看大图
或者
) {( K+ o' Q4 u6 i
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

5 Z# H5 t1 ]1 n/ N7 B7 y: f                               
登录/注册后可看大图
的格点。对北边界的
/ O( t4 Z0 P( H& q" x( b
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


2 }" y4 M! u/ j3 z9 v" @* x

, s% e! B. x* C5 m% I+ b" ?) ^
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1). F3 p0 t+ X# {9 {) J$ f
    if((wet(j,k+1)==1)||(duu>0)), G7 ]/ S/ m2 \/ ^  Q7 y' z: |  V
        un(j,k)=uu+duu;
2 n  G$ W4 k: {    endelse
7 q5 ^8 Z0 g6 I    if((wet(j,k+1)==1)&&(duu<0))
+ `* M' Y6 A; `4 _6 O2 u$ _        un(j,k)=uu+duu;
9 a9 L# `/ J. _) w! i    endend

  对


5 V3 P3 N% k  K% [# Q" {" G5 @: j8 A                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

; @3 y( Y# S, [4 O& T2 p                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

' j' v" x( G0 {7 p                               
登录/注册后可看大图
的计算和
$ O' p, z7 R# o) V2 ]6 ]+ q8 P7 q
                               
登录/注册后可看大图

的计算同理。

# _- R' o: L, `0 S  J: b' ~

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


4 S3 [2 ]8 b( D                               
登录/注册后可看大图

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


' z, c" {4 C7 T                               
登录/注册后可看大图

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


3 h8 E6 ~0 x8 j" O% @$ |0 T) C                               
登录/注册后可看大图

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

) A9 r0 E' r5 `+ z
                               
登录/注册后可看大图

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

# c: Y4 H. w& v* T% r: w4 Q
                               
登录/注册后可看大图

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

8 o6 g$ i3 L1 U0 h
                               
登录/注册后可看大图


7 u* V* l8 }+ ~& O) ], T/ h8 B                               
登录/注册后可看大图

,具体表达式如下。

: x8 v* r3 C+ N/ C


# @7 p0 M) V5 c                               
登录/注册后可看大图

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

1 D& P8 R6 Q! @/ t
                               
登录/注册后可看大图

6 x, |; [. h0 L                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

$ \! m4 I, \* B% x$ W                               
登录/注册后可看大图

  [0 p, W2 L4 @$ M. o, w                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
$ ]. ~7 a/ g. H! Y
                               
登录/注册后可看大图

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


! p# p) [2 Q, |% @* ~                               
登录/注册后可看大图
,而

: B' q! T; K, X3 ^: f3 |# [5 J                               
登录/注册后可看大图
的意思是u网格所在位置的速度
! {1 P/ Z3 q2 e4 s7 F
                               
登录/注册后可看大图
。以

/ z; {# g% G% V9 t* N( A                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

6 ]- j4 V8 I. Q# W( d& o( H8 Z- E                               
登录/注册后可看大图
平均求得。

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


! l& e6 \! j& ]0 R( d                               
登录/注册后可看大图

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


; S  P* q: V3 R# Z$ Y! d& R+ p                               
登录/注册后可看大图

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

for k=1:N+ \$ B+ {; T: p/ v' S
    h(k)=hzero(k) + eta(k);
; [4 s5 m7 \' Z6 s    wet(k)=1;6 l0 C  a1 m* b- B- v
    if(h(k)<hmin)
  x% y7 M8 e& B. O        wet(k)=0;1 s% S- s1 E8 l) P; ]  l# v8 ]& h
    end
; h$ ]+ ^/ l$ x3 t/ c  T    u(k)=un(k);end

版权声明

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

参考书目

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

; S1 u/ r( {: R$ a) g* O
回复

举报 使用道具

相关帖子

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