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

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

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

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

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


- ~  Y: y) O. G- V+ Z3 Z                               
登录/注册后可看大图

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


7 A7 \! N" W7 H& g* r! L                               
登录/注册后可看大图

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


$ \& |  E- F! H4 J2 u0 `                               
登录/注册后可看大图

# o+ F3 K) ^6 Y: Y" t7 O                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

3 X: E$ U; E) V4 o                               
登录/注册后可看大图

% ]6 {- |0 n. h5 Z- t$ g3 H7 a                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

: O1 |0 h6 e) T' X: U8 b# c4 s) |                               
登录/注册后可看大图

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


- T: {- {: j6 j0 L7 _/ e                               
登录/注册后可看大图

# ?0 K* t4 k# U, O6 K  y                               
登录/注册后可看大图
的导数,因此为了让对
8 x' q1 o% C. H7 L- |
                               
登录/注册后可看大图
的中央差分落在和
% r) g! V6 ~* z' @" W; W  M0 v
                               
登录/注册后可看大图
同样的位置上,
' C% |: I4 C8 i# X/ x+ a% K; p
                               
登录/注册后可看大图
也需要和
7 ~3 }. W9 d- I5 D" y: T( ]
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
$ Z5 @8 b  M; z9 B, r* A+ m; ?
                               
登录/注册后可看大图
在t+1时刻的值,就需要

! c- U* I$ p; B) k4 {9 T                               
登录/注册后可看大图
两侧的
$ [% e/ h0 Z2 w+ i+ z+ V" m
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
" ]  e/ j" s$ i; V, U) N( K6 ~6 E
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


  G% n8 s# ~$ i& |

, g" ~+ K7 J7 K5 A3 K+ r
                               
登录/注册后可看大图

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


) A% q1 m1 g! e0 Y& A9 }                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

1 ^9 [! B  N: g: O: P                               
登录/注册后可看大图
是在陆地边界上,所以要使
3 n2 c4 r2 ?+ \) V
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

# ?4 x! S7 Z/ [' l                               
登录/注册后可看大图
或者
" k8 W7 g8 b7 F
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

9 B  ?: S2 V/ W, Q" F% d                               
登录/注册后可看大图
的格点。对北边界的
2 u) S! w, @3 F# D" K, s
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

* X- ~; ^' k0 G% P( d0 O

8 L5 l' E; x3 h& L! m+ ]
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
% z- l, `3 o% d    if((wet(j,k+1)==1)||(duu>0))/ ~* p8 R4 C! z. p
        un(j,k)=uu+duu;3 w" n. c/ g, ^
    endelse
7 C; n3 y! b: ?+ T0 m1 {2 g    if((wet(j,k+1)==1)&&(duu<0))
8 a( i( g% ?/ a3 t9 ~7 f/ ]& t        un(j,k)=uu+duu;
, D9 r/ a$ L  o; c3 j) C! R* H    endend

  对


  D% P; w1 D2 {                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

8 Z. ^) L& y5 W3 {& |                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

/ y  S4 Y! \  K, d8 O                               
登录/注册后可看大图
的计算和
; P4 A9 t. p; ~9 o, A
                               
登录/注册后可看大图

的计算同理。

8 W: H; e2 F% k# x; x

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


# _- G  X; c) `1 T                               
登录/注册后可看大图

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


5 A$ l# X; y3 c4 o+ s8 b8 i                               
登录/注册后可看大图

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


- B! v; D, t" n( \% n                               
登录/注册后可看大图

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

1 y  R2 ~& u" f: V
                               
登录/注册后可看大图

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


7 E' N6 K+ v0 j7 Z0 T                               
登录/注册后可看大图

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


% X4 i7 h/ H. O                               
登录/注册后可看大图

+ x' Y$ U( C  i9 P
                               
登录/注册后可看大图

,具体表达式如下。

% C$ z, J9 S, p4 m; V5 M, ?


3 s! Q! ]2 f: g9 U5 a: n                               
登录/注册后可看大图

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


& O- T4 Q' ^/ R- X5 z                               
登录/注册后可看大图
/ p6 a1 _5 H. S8 ]
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
7 ?- \+ z# }  B# u4 f/ p
                               
登录/注册后可看大图

- f' R0 V! v- @9 V" d7 W                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

8 {* H6 v+ V- G& U                               
登录/注册后可看大图

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

( S" z  R* x7 d3 u
                               
登录/注册后可看大图
,而
$ |% `8 I! k% G* t. l
                               
登录/注册后可看大图
的意思是u网格所在位置的速度
# K! N; j3 @" G: K( V
                               
登录/注册后可看大图
。以

* ^" h& F4 J: {& W- w% f                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

+ k' m  f& O4 @, p, b% a; r& b4 k3 F                               
登录/注册后可看大图
平均求得。

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


+ F9 P' o3 ?- r. \8 s0 i- R$ h                               
登录/注册后可看大图

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

! `5 e& B$ z5 x. M
                               
登录/注册后可看大图

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

for k=1:N
0 j  C" c6 l0 I. u- m3 }6 [) t( i    h(k)=hzero(k) + eta(k);
3 y* x" c/ x5 a+ t. r    wet(k)=1;
! s( d+ t0 h2 S: ^2 e) u: I2 r    if(h(k)<hmin)
# ?+ E" D5 G% O! Y        wet(k)=0;
3 n) z, r) r& A' I7 z. V8 Z7 g- P    end
, l  Y6 u1 t7 t    u(k)=un(k);end

版权声明

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

参考书目

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

0 g4 _" ]$ p; v
回复

举报 使用道具

相关帖子

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