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

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

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

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

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


* x' `1 Y. X% D  G% S, M( ]: w                               
登录/注册后可看大图

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

4 c6 O/ Z* p. w2 g: L
                               
登录/注册后可看大图

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

# j- r( k: ^1 x6 M7 ]- U5 T) C. r# ]/ Z
                               
登录/注册后可看大图

% S0 ]# W; H: n                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
- X6 i# q7 ?# r
                               
登录/注册后可看大图
0 v7 m3 C* A, n3 ]
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

6 n: C5 T& F2 a" ~                               
登录/注册后可看大图

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


2 \; J6 N: ~4 A6 r                               
登录/注册后可看大图
/ E' {& V9 y  ~- ?  H' D1 D
                               
登录/注册后可看大图
的导数,因此为了让对
# u1 ~6 `: o: I& \; o4 [
                               
登录/注册后可看大图
的中央差分落在和

2 E2 j% ^" V* c) Z                               
登录/注册后可看大图
同样的位置上,
2 B$ D$ b; d4 }) @
                               
登录/注册后可看大图
也需要和
* }, `+ c9 p" x6 D
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

% }/ h( e4 I0 F; X  i. g                               
登录/注册后可看大图
在t+1时刻的值,就需要
. m6 R/ ]: Q  B/ T
                               
登录/注册后可看大图
两侧的

0 c4 H- c& x& D% j* d                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
* g9 j5 w0 l, i/ Z9 L0 a
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


/ X& z& d% U% n. Y! m


; w; R% v7 J6 O8 t1 Q% A2 {% E                               
登录/注册后可看大图

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

" O0 Y! m+ K& v- m5 u6 }
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

* ^! I2 j2 Q% U; Q                               
登录/注册后可看大图
是在陆地边界上,所以要使
% X# n7 J" t1 [2 E$ v
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

: t/ A7 }5 G; Z: D/ g                               
登录/注册后可看大图
或者

: s# M' p2 L* y# L, Z  T                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

9 \& J" j. X$ {' D& h" F; _                               
登录/注册后可看大图
的格点。对北边界的

6 `' ]) m7 O4 z; c: a                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


' p; ~1 {1 `8 a. l


# x# `) G& y. u( p- q                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)- d$ L, I0 {9 T0 k
    if((wet(j,k+1)==1)||(duu>0))
3 M5 b% f) m& I4 b* t0 Q        un(j,k)=uu+duu;0 F* n0 g! H* K4 A0 m( e
    endelse8 C' r6 x1 X3 r) b, ?
    if((wet(j,k+1)==1)&&(duu<0))
2 e8 m. \8 S( n6 Y2 S        un(j,k)=uu+duu;
* b) g- S: Y9 {- Q' I! w    endend

  对

4 m4 i4 }1 d* s) K" K
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
" M9 l& X, ^3 C
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
4 o5 |( |  `) @+ Y
                               
登录/注册后可看大图
的计算和

8 D. c- C& ]$ @5 r+ N; ?: W- I! ^                               
登录/注册后可看大图

的计算同理。

9 l; d( w: Z# v: @1 A! n

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

: _! X3 E+ x8 I! R: O
                               
登录/注册后可看大图

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

2 U0 W* n: U5 y9 q- X7 B2 ]
                               
登录/注册后可看大图

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

; U! C8 D. k& G7 ?  x6 D0 s2 u
                               
登录/注册后可看大图

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

6 A3 x5 u# |9 d" f) j' v4 o% w
                               
登录/注册后可看大图

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

3 }$ \$ y" l9 x; {5 v
                               
登录/注册后可看大图

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


" A+ a. v  ]9 d  J; ~  R& Z                               
登录/注册后可看大图

' e- [: r* Y" K, K5 l) m: N
                               
登录/注册后可看大图

,具体表达式如下。

$ G$ _9 u% ]7 l6 J; y


% I" x- \8 T- @/ a2 b8 D                               
登录/注册后可看大图

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


, c. l3 C' g$ U# ]/ u& f                               
登录/注册后可看大图
2 j1 {" @5 a/ N! ?" T1 f- c
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

, H( h4 I% b) d7 j! R+ r5 O                               
登录/注册后可看大图

6 Y% R% u  e+ a( v* h                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

" G3 M( ?3 K0 k, ~% ]2 e0 d0 Y                               
登录/注册后可看大图

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

4 X1 a, ]& @* }; R6 w
                               
登录/注册后可看大图
,而

# o/ p8 T# ^9 f5 \                               
登录/注册后可看大图
的意思是u网格所在位置的速度
4 M0 D/ E# `4 j% c3 Y1 \) r
                               
登录/注册后可看大图
。以
4 h2 i6 c5 f3 d# g5 Y, U2 W
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
& v  z0 C& Y3 [' }' B
                               
登录/注册后可看大图
平均求得。

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

5 y+ Z, h$ T# g) T0 ?. M4 c" a
                               
登录/注册后可看大图

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

5 l1 Y* O4 z7 h( E
                               
登录/注册后可看大图

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

for k=1:N% I" c3 r; ?9 }/ {" ~
    h(k)=hzero(k) + eta(k);9 m. C1 q# e" _8 q* v
    wet(k)=1;
: @+ s$ ^" x, V: s; I) Z    if(h(k)<hmin)
6 M* c% C" p+ s$ X        wet(k)=0;
0 i' z8 ~3 A  z6 m4 r: O  X# }$ k    end) t9 w1 b4 C6 S' I/ z) `' k% ^& n9 _
    u(k)=un(k);end

版权声明

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

参考书目

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

/ g, b$ `& P) k) ]! ~9 T
回复

举报 使用道具

相关帖子

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