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

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

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

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

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

0 Z+ |4 `$ T  O; T
                               
登录/注册后可看大图

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


/ i2 f- @" ^8 j1 o9 }                               
登录/注册后可看大图

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


: F0 J7 w; ^+ K1 n                               
登录/注册后可看大图

! t# e* i+ t+ I2 C& \; v                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

* J7 n9 l7 d* `+ M                               
登录/注册后可看大图

, U) k$ H: n- q                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度
  _$ E9 T# j5 X  z
                               
登录/注册后可看大图

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

% p  Z) n# T9 N- y: g
                               
登录/注册后可看大图
! C; g, H( p& M! |, [# {# e) d
                               
登录/注册后可看大图
的导数,因此为了让对

- L& a* W/ `6 C; r; q' p" T7 C                               
登录/注册后可看大图
的中央差分落在和

/ [+ t! {1 A5 Q8 s4 y' h                               
登录/注册后可看大图
同样的位置上,
. m& @7 @* S: {2 h# g8 v9 O
                               
登录/注册后可看大图
也需要和
. j8 }) v: F' o  d5 [' I( |
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
0 f# h$ d! L" ?4 \
                               
登录/注册后可看大图
在t+1时刻的值,就需要

! v9 T$ y0 O9 l9 r4 _4 l4 W                               
登录/注册后可看大图
两侧的

% d4 ^8 i* c6 B                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


9 K" K/ s7 c$ x

' n6 A& r/ \: }6 P# T7 L' F% e0 ^
                               
登录/注册后可看大图

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


( ~  K% G5 b. H5 ~                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

1 }6 n+ Y, Z& B; _8 e1 M5 ?                               
登录/注册后可看大图
是在陆地边界上,所以要使
( g+ Z1 E+ d( o
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

- ~* _3 |* E: @+ A                               
登录/注册后可看大图
或者

0 q; q2 q% X6 q$ j1 U                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

5 b$ k8 h  V  v                               
登录/注册后可看大图
的格点。对北边界的
1 v  [- e" |+ n; y! T( z
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

. |6 F7 z5 z0 ?* j+ F. g5 k


, \& X3 G0 S/ ]4 w6 `+ w                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
# w7 i' c3 _0 ^% Q. i    if((wet(j,k+1)==1)||(duu>0)). C$ B5 J2 y, W2 y
        un(j,k)=uu+duu;8 C8 Y4 ], K3 S+ B9 R0 ~5 m2 I# T
    endelse
7 w, k" m5 R1 g1 {" C    if((wet(j,k+1)==1)&&(duu<0))
8 X6 o$ k7 w  o- e        un(j,k)=uu+duu;2 P6 m9 _' _% Q4 x% g% y( n+ y
    endend

  对


: Q+ F- S/ x" v/ u- B. I( C                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
, ^: w2 Q+ q7 C, S/ c- v
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
+ t9 b  Y8 v9 G# b2 l/ z  z6 F: z( k
                               
登录/注册后可看大图
的计算和

% o6 W" k# D1 D" k, q                               
登录/注册后可看大图

的计算同理。


: g0 S/ T0 h% T. m$ r

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


) q& |) h2 O$ y0 E; J                               
登录/注册后可看大图

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


( @2 T6 l  h" e  c# `+ P: C                               
登录/注册后可看大图

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

3 l- _- I2 h0 f, [5 f/ |0 [$ A  U( K
                               
登录/注册后可看大图

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

3 V  d) i+ `1 e: p3 N: o4 U
                               
登录/注册后可看大图

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

& t1 @5 C  i- X) y" g0 R! K) K
                               
登录/注册后可看大图

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


, m% U- A  Z1 i2 E4 V' S' X6 |  B                               
登录/注册后可看大图

! w/ Q2 P* s4 X; u
                               
登录/注册后可看大图

,具体表达式如下。

4 g& G% K" S/ s* I( F' r% Z- C


( K6 G) _! z: D4 ?" z  ^                               
登录/注册后可看大图

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

) p. w" L' A; _$ y# r6 X0 o) m
                               
登录/注册后可看大图

7 o4 [8 g3 o& }, q0 }9 N                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

0 d: z. Y: X, T1 y& V- ?# {                               
登录/注册后可看大图
7 \( x# r# ~- j4 D
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

- s% q4 q6 F" S: f- T1 t0 N" R                               
登录/注册后可看大图

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

. K) V. M, J% x
                               
登录/注册后可看大图
,而

6 ]$ z. F; U# K: Z6 j! `                               
登录/注册后可看大图
的意思是u网格所在位置的速度
, H5 w+ V, |3 D/ J1 C- a
                               
登录/注册后可看大图
。以

) R/ J2 _/ f9 r- R5 g                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

) e+ X  G8 H: U                               
登录/注册后可看大图
平均求得。

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

0 s3 Q& s2 j4 @2 e+ |
                               
登录/注册后可看大图

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


+ M; d# ?- f! k                               
登录/注册后可看大图

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

for k=1:N
' [0 T! o/ j! z! w( r% h; D    h(k)=hzero(k) + eta(k);
/ }& W( V% [3 t7 ^& t    wet(k)=1;* A+ H, l- A2 b
    if(h(k)<hmin)
/ G" Q% y5 }! x$ _        wet(k)=0;8 q1 q" G2 `6 B0 P! a( d
    end
  c% \$ U7 Z) z. |6 ]    u(k)=un(k);end

版权声明

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

参考书目

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


! T- Y4 `( r5 @& e" }6 Q
回复

举报 使用道具

相关帖子

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