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

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

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

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

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

1 F0 z/ |7 t2 [3 H1 c. C
                               
登录/注册后可看大图

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

6 j9 [+ Z7 `3 n+ ^0 s% U
                               
登录/注册后可看大图

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

! m1 e! g! x/ R5 ~% W
                               
登录/注册后可看大图

$ ]( t3 _5 q0 [, }                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

0 _! {. K& U% N' Z                               
登录/注册后可看大图
9 n5 e% X: f# V4 F
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
5 M( T7 a4 W- b  U% j( ^
                               
登录/注册后可看大图

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


& R- w( V6 p( N5 l0 ~9 `. x9 x                               
登录/注册后可看大图

# F- A2 w: _4 n9 B                               
登录/注册后可看大图
的导数,因此为了让对
% ~/ c4 Y' A+ @, S) w- v
                               
登录/注册后可看大图
的中央差分落在和
8 r" _6 g# z( w; V' @1 h. H
                               
登录/注册后可看大图
同样的位置上,

% e7 C  x  _& q$ l! U6 T$ L, ~/ p                               
登录/注册后可看大图
也需要和

6 L" r$ r% ?' p3 y  H4 G8 h: Q                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
- B% w8 X" J. w  \
                               
登录/注册后可看大图
在t+1时刻的值,就需要
  X, w; O, }# X. F' I
                               
登录/注册后可看大图
两侧的
6 t% e/ T$ A3 G( Z5 W4 Q
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


2 l' ^/ N. H$ Y# i

/ x6 h! x1 S: u" R3 H2 p* ]8 y, h
                               
登录/注册后可看大图

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


( Z( p3 {) r/ H; ~" {; u+ X: p7 l                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

: i  u' V! D8 Y0 i5 E1 E                               
登录/注册后可看大图
是在陆地边界上,所以要使

  j: E+ B  V0 S& h0 t9 @                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

2 n" T1 L! m4 p' \/ |                               
登录/注册后可看大图
或者

2 u! L6 W9 i4 v& J9 Z/ @6 G                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
) E8 b" i4 G7 F
                               
登录/注册后可看大图
的格点。对北边界的

, N: q- i; g, i2 w" }1 O4 A                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

, H) Z% g( l5 |; a# N. A' c


/ s: d- d7 d, v( K# }$ \: N2 @                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
8 H5 ]% |6 I% f5 n# D    if((wet(j,k+1)==1)||(duu>0)); O; }/ k5 H: u  c; @/ K# _* o
        un(j,k)=uu+duu;
( H& h( H2 T# Z; b7 I* n- m    endelse
$ p# p2 f: M, W+ g  w    if((wet(j,k+1)==1)&&(duu<0))
: G$ y1 p, g, y' e% t, X8 T) O        un(j,k)=uu+duu;
% k; P) f0 C/ t) d- k    endend

  对


. \" V8 ?% K# l6 a                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
5 ~9 k+ ?6 D" Q3 t+ a; G
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

5 ]# K1 B% v/ `2 k4 m7 _                               
登录/注册后可看大图
的计算和
7 Y2 O/ |/ h+ d( \& j0 O
                               
登录/注册后可看大图

的计算同理。


$ d  X9 ?3 [$ p' p& @" R/ g

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


8 E- d9 f( P2 Q8 r+ O                               
登录/注册后可看大图

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


% v& P" Y, Z$ C- `* k7 \7 X- r7 J/ [                               
登录/注册后可看大图

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


. {" x  v. g, A; D3 u9 p                               
登录/注册后可看大图

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

6 v( E2 l! x) L2 m
                               
登录/注册后可看大图

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

# y0 s) X; h+ o0 I
                               
登录/注册后可看大图

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


: P4 c* U1 T/ o                               
登录/注册后可看大图

: @2 _9 F+ U1 u- l( p$ s. h' ?
                               
登录/注册后可看大图

,具体表达式如下。


! ?& o2 d+ X! M3 Y

$ U( ?% \# c" Y" o& b! ]3 r
                               
登录/注册后可看大图

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

% D9 B: F- P- D9 X' b7 |
                               
登录/注册后可看大图
8 D, r, ?( D+ H, b1 m$ t0 m
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
5 z( ~7 ?* D: t! s
                               
登录/注册后可看大图
5 f* {! z- ]- X) ^
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
5 ?8 h2 c  B( I$ z
                               
登录/注册后可看大图

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


0 M0 I  U8 l$ ~% E" R6 Z                               
登录/注册后可看大图
,而
- u! Z3 j# o$ I! f! G/ k
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

! Z# S7 I% b. H9 x  h* A                               
登录/注册后可看大图
。以
9 Z, D3 N4 S$ ]. D! K! G# y
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
4 `' `+ P- P: y  g3 I
                               
登录/注册后可看大图
平均求得。

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

$ R: d3 M; v! i; e0 }- M" R
                               
登录/注册后可看大图

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


9 A. Z" |2 i3 z" v* l                               
登录/注册后可看大图

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

for k=1:N
# z( N5 \! i- R9 H0 p' X    h(k)=hzero(k) + eta(k);5 t% A9 N1 |( ^
    wet(k)=1;
6 k' N( o2 w  s+ w5 X! K    if(h(k)<hmin)# F; x' c' r0 ?9 R+ f3 y
        wet(k)=0;$ f* W/ \: c8 Y( p2 x. j
    end
& A' y2 K' j+ Q# h5 I* J    u(k)=un(k);end

版权声明

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

参考书目

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


2 M1 c8 G8 `5 F
回复

举报 使用道具

相关帖子

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