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

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

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

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

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


4 v1 f1 W6 z/ ]9 q  p( n+ u                               
登录/注册后可看大图

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


( ^) W$ z) g! [                               
登录/注册后可看大图

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

- N$ H: {8 F: U
                               
登录/注册后可看大图

  K3 t2 f& d8 R+ E                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
$ n' Y) g) p/ e$ n# w4 ?
                               
登录/注册后可看大图

" W0 Q' n. H# _                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

  p+ J1 v8 z. N; P                               
登录/注册后可看大图

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

7 w+ I6 U4 k( |% K! e
                               
登录/注册后可看大图
6 `. {' d6 p# P- r2 A
                               
登录/注册后可看大图
的导数,因此为了让对
; s5 k( A( W& Y, w
                               
登录/注册后可看大图
的中央差分落在和

# Y2 P9 N, S# n+ M$ B' |% r                               
登录/注册后可看大图
同样的位置上,

  T3 L% x, K. {) U3 u5 B                               
登录/注册后可看大图
也需要和
0 G0 N! {! e) x* Q1 U
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
: g1 O6 K1 y4 n& x; c* F4 F
                               
登录/注册后可看大图
在t+1时刻的值,就需要
; {; Z. z, _" S9 y4 {. e
                               
登录/注册后可看大图
两侧的

7 g, w) S' R3 P                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
! d. T5 V6 n6 B( }
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


: ^. k! T+ ?! ^. ~) `3 w

' o  \) p) ?/ k9 }/ N
                               
登录/注册后可看大图

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


% l+ ]$ j+ M+ q+ y, U# E                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
5 V* F  y  Z. A( o( p  J
                               
登录/注册后可看大图
是在陆地边界上,所以要使

) B& b- F% u% I7 X5 ~; H                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
2 E: ?% O1 |4 r, W3 x  T5 j+ X
                               
登录/注册后可看大图
或者

/ Q7 ^% a7 A$ q1 X6 ~                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
( y- f0 v2 l( ?: s8 S
                               
登录/注册后可看大图
的格点。对北边界的

+ r' V: S+ p* @( Y: _  U6 X/ {                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

' p/ e! K0 Q6 ?1 M) o4 O! |


3 Z' r* F/ i8 a& [( x( r+ d                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)* I. N2 A3 K4 y
    if((wet(j,k+1)==1)||(duu>0))* F. r) \  {4 s9 b0 s
        un(j,k)=uu+duu;& l. P. I! }4 |  \, m1 j9 n  f0 a5 g7 A
    endelse
9 F! J  J" b$ T, g/ B2 J) l( u    if((wet(j,k+1)==1)&&(duu<0))3 N- K/ l6 k6 z' E$ N; c
        un(j,k)=uu+duu;: a8 H1 B5 P% d. b
    endend

  对


& d% L, s( ^( Z5 _# I4 l                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

3 U. o7 k& }: P7 N                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

! [+ x0 I# W5 s! E                               
登录/注册后可看大图
的计算和
8 ]8 J: c! ^/ }
                               
登录/注册后可看大图

的计算同理。

( {' d8 I" S$ y5 Z$ k' I

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

0 J+ s& k0 x! c$ u8 z. U, H1 A/ S1 W
                               
登录/注册后可看大图

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

! N* q( n4 E1 R4 a7 p$ E$ |
                               
登录/注册后可看大图

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

6 O# F. ?" M- `
                               
登录/注册后可看大图

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


1 I0 R- `8 r4 ~( e                               
登录/注册后可看大图

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


2 j. {1 W0 X# v& c' Q: ^# `, v6 z                               
登录/注册后可看大图

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


8 K0 w$ f5 w' b# n- m                               
登录/注册后可看大图


0 L8 C1 E' |$ I; q! ]                               
登录/注册后可看大图

,具体表达式如下。


) W! k- a& Q9 u6 V

' n0 H- |3 M) n( [% D
                               
登录/注册后可看大图

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


' J: F8 R2 F4 J4 W5 T/ u                               
登录/注册后可看大图

& K2 o2 c8 ?6 b0 a, ~3 B0 b0 w, h/ u                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
9 @. E0 y! j+ U  ]/ r4 A) d
                               
登录/注册后可看大图

4 F/ t4 E2 ~6 ^2 K" _                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
$ s$ t, |1 t" f
                               
登录/注册后可看大图

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

) ^8 I4 G6 d0 M) T0 n( i2 I
                               
登录/注册后可看大图
,而
7 i' d8 c+ X  ?9 z6 p7 Q4 |' H4 l
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

- F  F3 Z7 I/ C8 G                               
登录/注册后可看大图
。以

9 A: ~" H% H& c6 |4 d- K                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
" G' O9 C4 [, |
                               
登录/注册后可看大图
平均求得。

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

$ H* e7 z" W, ]$ }
                               
登录/注册后可看大图

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

& S& r$ Z  ~( j. |& C7 s
                               
登录/注册后可看大图

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

for k=1:N
4 d+ y% L4 Z1 s0 H' B5 Y' d+ w    h(k)=hzero(k) + eta(k);: f! }1 Q/ v  F4 L# ?5 B
    wet(k)=1;/ L6 I" }* o3 s$ n. `+ n
    if(h(k)<hmin)" V  `; {# s- R4 h, d6 p
        wet(k)=0;! C5 b! h& ]. J6 V7 q
    end+ p; W" Q( e( j$ X6 |  c/ o, o
    u(k)=un(k);end

版权声明

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

参考书目

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

- A: U  a+ i1 A( g) q4 S1 E
回复

举报 使用道具

相关帖子

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