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

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

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

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

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


% Z1 ?3 G$ P, n) w. E% T  ^                               
登录/注册后可看大图

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

; v+ N% C7 J" W# }, D
                               
登录/注册后可看大图

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

5 U$ f4 [( s9 c0 Y
                               
登录/注册后可看大图
3 B& ]4 G; e3 l( I
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
9 N+ P! n2 `1 M8 \" y' K
                               
登录/注册后可看大图

! ^: D4 G0 q% a- ^3 h$ c  G                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

# Q/ @: w+ h* u: [                               
登录/注册后可看大图

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

8 A9 R  k" I# A9 T
                               
登录/注册后可看大图

* a6 r. O8 E+ P, ^; L3 ~+ O9 b. R                               
登录/注册后可看大图
的导数,因此为了让对

% J& ]( t3 M: x                               
登录/注册后可看大图
的中央差分落在和

* F9 s1 T5 g; S5 Z1 ]  G! k' p% w                               
登录/注册后可看大图
同样的位置上,

7 ^* T+ R( o4 e/ ~1 p                               
登录/注册后可看大图
也需要和

. p6 ?# ~! A( m' f9 Y5 M+ P* `" _/ g                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

7 [% k; d7 D) a+ ^( X7 U7 {                               
登录/注册后可看大图
在t+1时刻的值,就需要
# W- _0 y  y. B: }* I5 O
                               
登录/注册后可看大图
两侧的
7 w# ~, k$ g* {: Y9 F
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


2 l6 ?0 t3 `1 l" l4 V

6 ^+ a# ~- _7 X: w8 S; `# h: l& t
                               
登录/注册后可看大图

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

/ f, t. W5 ]1 a6 A: |3 }$ L
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
" n7 }+ A5 x4 T$ K( C4 I' C7 I
                               
登录/注册后可看大图
是在陆地边界上,所以要使

% ?, P* R0 v2 d4 }: Y                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

/ |+ g6 X  d  w# E+ }: x                               
登录/注册后可看大图
或者
5 {% P2 X- V2 S% e% L4 E' {
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
# k) p* i2 Q! H+ j: I& g9 d9 v
                               
登录/注册后可看大图
的格点。对北边界的
4 U- s" u# d* `3 \
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

  v" D7 z2 \* |2 W+ f

& t9 J; ^; T2 }  O' s5 I# [
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
0 @) i5 p. T. h: s    if((wet(j,k+1)==1)||(duu>0))' o! ?. K5 y: G/ E6 c4 y" @" s
        un(j,k)=uu+duu;
  }2 ^1 |/ P+ }: x. |, {    endelse# z$ M5 V* ^2 h2 b8 o2 G$ t# @
    if((wet(j,k+1)==1)&&(duu<0))( k# T3 s, b: S+ }
        un(j,k)=uu+duu;. ~' N/ H7 ~2 t! Q( h3 Y
    endend

  对

/ l1 h: u) ^  J, T9 B5 H( a
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
7 T" m& v! U3 E4 Q0 `5 x
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
% Z4 @# h4 K/ p1 d! B; C7 F
                               
登录/注册后可看大图
的计算和
( }! ?  |+ j5 D  k8 p8 S- b/ n0 c
                               
登录/注册后可看大图

的计算同理。


! j9 ~+ d) I% ?+ P0 i

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

0 n5 F" O; S" u. x
                               
登录/注册后可看大图

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


! s( q0 x* H8 V& |                               
登录/注册后可看大图

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

2 Z# `" Y9 ~8 }- {7 z
                               
登录/注册后可看大图

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

: U) y: i. {# B& Q
                               
登录/注册后可看大图

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

8 G% C3 h7 ]. b; w6 z: y
                               
登录/注册后可看大图

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

4 T* {1 s$ m- y2 o' M
                               
登录/注册后可看大图

9 `- q8 |3 x2 @% Y
                               
登录/注册后可看大图

,具体表达式如下。

1 [+ D1 D1 [5 _1 Z; n/ @+ V


3 M$ m7 Y! n# k                               
登录/注册后可看大图

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

) i$ _: i* ]8 V( U/ l  O
                               
登录/注册后可看大图

' ^3 s7 V" L5 p  X, F- @" f; g                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
; ]' z2 n* ~" m7 b6 j1 d. S7 y
                               
登录/注册后可看大图
1 M* J% G# ~9 `5 B8 r4 k, L
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
  K- r1 y- c5 @  D9 \" ]
                               
登录/注册后可看大图

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

9 G# W. T. V+ D& t( w9 v
                               
登录/注册后可看大图
,而
$ `' Z' X5 [+ r  s6 ]! A
                               
登录/注册后可看大图
的意思是u网格所在位置的速度
+ A2 K- E! u- h7 A
                               
登录/注册后可看大图
。以
! ]( }) c7 ]" y) q' R" q. A
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

; ^0 n6 B# m. t0 p) P  _                               
登录/注册后可看大图
平均求得。

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

, y3 S0 `) X/ ^/ V) x( Y# X  h& g9 J% T
                               
登录/注册后可看大图

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

# t- n$ C3 L* b( g. s* U6 p
                               
登录/注册后可看大图

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

for k=1:N  F: p6 P! j- `. N# o! A0 ^1 j
    h(k)=hzero(k) + eta(k);" \* d) v2 T" b3 o5 K3 m
    wet(k)=1;
9 m8 ^8 b. T  P* M- ~9 W8 D& Y) I    if(h(k)<hmin)( Y7 z# x$ r5 a2 U2 W/ L
        wet(k)=0;
! W8 L" u3 [9 P2 d. c! J5 H& @    end* B, y2 G. n( J; g' A
    u(k)=un(k);end

版权声明

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

参考书目

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

9 c9 t4 F. C: ^0 l
回复

举报 使用道具

相关帖子

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