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

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

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

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

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


$ f! m; d' d, j0 ^1 R                               
登录/注册后可看大图

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


0 f: T- Y0 s: m: n7 `  D7 C                               
登录/注册后可看大图

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


- L7 J5 V3 h& B* y* y5 `& B                               
登录/注册后可看大图

. S8 l7 E- Z" ^% f3 M4 @- a                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

. j% d# g+ e2 C; ?                               
登录/注册后可看大图
2 P7 g0 W" j$ g! A
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
$ \: v9 n# s% G! S$ K
                               
登录/注册后可看大图

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


# r  }! G& K6 {& @3 z4 A5 C/ l                               
登录/注册后可看大图
: N. g  i+ {7 F7 j/ ]
                               
登录/注册后可看大图
的导数,因此为了让对
. E* |! F9 m' Q( B0 ]: T" N8 E
                               
登录/注册后可看大图
的中央差分落在和
' h( ^  p( V6 D  f0 h7 D
                               
登录/注册后可看大图
同样的位置上,
: |+ u$ a- f( v0 z8 k: i6 Y1 _
                               
登录/注册后可看大图
也需要和

6 R! D; G& f0 `2 D9 v                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
- k, r6 G# F; E" T* B4 j2 p/ p
                               
登录/注册后可看大图
在t+1时刻的值,就需要

; w4 M% |: g! P2 S" l+ Y( ~                               
登录/注册后可看大图
两侧的
1 \: [9 P9 }- l* r
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
3 [, m, s1 B# O2 T) m6 U! c
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


" h; K6 t9 ~, M9 `* g0 d1 G) G6 ]


& L% J" v1 q% s% i2 \9 ]) j$ x                               
登录/注册后可看大图

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

- f! T$ S' B* a- h/ Z) U
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

- K! V! u% K% V/ F" L) G                               
登录/注册后可看大图
是在陆地边界上,所以要使

' _" H0 h( [& b9 t8 @3 I) R/ L3 {                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
" N# G2 S1 G7 W( U
                               
登录/注册后可看大图
或者

# V1 w  j: K  A! Q7 d5 I                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
6 Y6 \! [8 J5 K' j9 _5 ?5 I
                               
登录/注册后可看大图
的格点。对北边界的

3 }- I& _: u) h: {& @/ V" {" U$ h                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


: V, N* b( Q! A


( j& X& E- z; b+ K+ ~                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
# Z) k# R8 y" v3 R$ P    if((wet(j,k+1)==1)||(duu>0))
1 J- `/ z$ P  b& ^$ J2 M        un(j,k)=uu+duu;0 d' V9 s6 o3 g. e
    endelse
4 {! ?' h( m" ?( L, m    if((wet(j,k+1)==1)&&(duu<0))
' r7 I! l5 q3 G, h2 s) j        un(j,k)=uu+duu;! K: a( N: I+ G3 ^1 ^. X7 W; U
    endend

  对


7 u5 y  m4 ^) M+ k) S+ G/ J                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
* L8 R* R5 r# g, s4 B
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

8 A& ]  m3 ?- Q, x: {                               
登录/注册后可看大图
的计算和
& l: m/ O: v$ i0 F2 S+ i
                               
登录/注册后可看大图

的计算同理。


& ^0 i* s/ D( O- e' A6 E

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


# l( G; {- z" e$ G1 m7 A* c                               
登录/注册后可看大图

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


# W8 S0 T# z, i8 U0 Q& g9 ]1 B                               
登录/注册后可看大图

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


2 Y% }: h5 B' P                               
登录/注册后可看大图

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

5 j5 i4 k! G" X' w
                               
登录/注册后可看大图

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


( f; v- v% T/ z5 w7 H                               
登录/注册后可看大图

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

) G+ K4 W" v5 d7 l7 l+ ?# J  Y% T" z
                               
登录/注册后可看大图

' u. E% a; f! a- T* C
                               
登录/注册后可看大图

,具体表达式如下。

8 M0 G! s# ?1 Z& T( E% F5 m

; F( ]3 |' r2 P! E3 D$ g
                               
登录/注册后可看大图

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

2 m$ @4 z( v1 Q+ W* ]1 b9 T1 C3 i& }$ K
                               
登录/注册后可看大图

, _! g+ B6 ^9 A8 c7 i/ _                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
5 x0 A: e) R" I6 w1 k: O  g; E
                               
登录/注册后可看大图
" n/ V& y5 t. A' g+ b0 V
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

. g1 @4 j5 W8 p# m0 ]: ^; L                               
登录/注册后可看大图

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

; V+ \! v; c. V" \
                               
登录/注册后可看大图
,而

+ b- S3 c6 S& K$ n, }; F2 |* N                               
登录/注册后可看大图
的意思是u网格所在位置的速度
: v: @& Z4 j9 j& P! z
                               
登录/注册后可看大图
。以

3 h4 X- E) M5 H  {! |                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

" H0 f+ ~- F, H                               
登录/注册后可看大图
平均求得。

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

; Q1 m3 F3 g% _; U+ k/ z& @
                               
登录/注册后可看大图

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


- m! I  `3 v; T# S% z6 U( N                               
登录/注册后可看大图

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

for k=1:N
& S: P7 z, \$ Q1 t: t5 {5 v    h(k)=hzero(k) + eta(k);$ f, V" J9 }, t& m
    wet(k)=1;
9 C6 k/ `$ D4 w: A8 }1 m9 [# @    if(h(k)<hmin)$ b. z0 D, U/ W9 n0 a
        wet(k)=0;1 J4 g2 y8 l) C) Q! d4 k8 W1 N( X
    end
; B( r4 }7 m! r2 G& Q    u(k)=un(k);end

版权声明

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

参考书目

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

! v) P% M! R& b! H/ v/ m, w$ z3 w
回复

举报 使用道具

相关帖子

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