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

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

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

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

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

( n) ?$ k. ~5 V! i$ o! c  u2 s
                               
登录/注册后可看大图

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


. ~( v. W, }4 k: @                               
登录/注册后可看大图

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

. k: s1 X% Z9 W& o/ A, {
                               
登录/注册后可看大图

9 P5 w2 Z2 n  I. c: G& p) O2 |                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

' S! l+ ]- {; U% t/ |! F                               
登录/注册后可看大图
) L! o7 S  o' u  w: |. E
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

9 j5 ?/ Y% e  `3 P1 ~                               
登录/注册后可看大图

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


) p' ^/ l: b3 X7 i4 o; f                               
登录/注册后可看大图

1 q/ A2 `9 `6 M$ N                               
登录/注册后可看大图
的导数,因此为了让对
# p0 G4 u5 d$ v
                               
登录/注册后可看大图
的中央差分落在和
: `( X) h; V; g! n  E6 ]9 c3 p+ Z
                               
登录/注册后可看大图
同样的位置上,
* ?/ t8 ~; u8 M- k6 Z
                               
登录/注册后可看大图
也需要和
4 G$ d5 A$ I" C# Y. |
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

, z; c% @, @+ e, J) d6 o* a0 l- f                               
登录/注册后可看大图
在t+1时刻的值,就需要
# d$ ~; u4 H7 d
                               
登录/注册后可看大图
两侧的

% `! w7 R1 C% M1 M' u* F                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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


6 U+ ^: s: w0 l! O3 n


% t1 o3 Y. G* Y                               
登录/注册后可看大图

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

$ [5 j2 {9 g3 z3 O9 }% [/ y
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

2 m' F( Z3 @9 D  L2 F4 ?, D5 ]6 H                               
登录/注册后可看大图
是在陆地边界上,所以要使

  S# B% L' W. a2 l6 u4 C& P: @                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
9 b8 v8 s. ~% F
                               
登录/注册后可看大图
或者
7 J: O+ h4 |2 u  x9 S+ Q
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
4 p! \. Q( l! F& `/ N9 P. I: I
                               
登录/注册后可看大图
的格点。对北边界的

+ N9 t' @! z! B9 I" k4 R! D1 k                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

& j/ Z: q0 }2 R


/ y; {9 q. b! o                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
5 q6 h9 K& O- D    if((wet(j,k+1)==1)||(duu>0))% U) ?9 `7 q- u# ~7 g5 c9 E7 T; @
        un(j,k)=uu+duu;
/ Y" {5 O0 {- K2 R    endelse
  G4 g% M" c/ ?( j9 @! Y0 `9 i3 |# N    if((wet(j,k+1)==1)&&(duu<0))
  J$ V0 J9 G3 v/ `! L+ L        un(j,k)=uu+duu;4 x9 ]9 R& w3 Z: f
    endend

  对

' h) E! n4 C: m  ?4 v
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

; v2 i9 V" w+ w) G: m2 ?9 c, Q' ~" Y                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

0 [$ U0 x* r! ^                               
登录/注册后可看大图
的计算和
6 B- ]# C2 a# w# v! a4 y. ?
                               
登录/注册后可看大图

的计算同理。

7 X; f$ K) @+ n9 C# V$ s* F% F& I4 e

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


7 {7 |: y0 _* n2 |6 Q                               
登录/注册后可看大图

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


$ L$ k5 z- N5 e7 b; N                               
登录/注册后可看大图

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

# O7 M# @/ G) Q4 U  T. r: L
                               
登录/注册后可看大图

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

; U! F8 R- }: k5 x) X) {* O) z
                               
登录/注册后可看大图

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

7 h1 a- ~- h" y
                               
登录/注册后可看大图

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


& f. D7 c+ G7 f/ n: N7 ^+ j2 @                               
登录/注册后可看大图


4 R6 d0 b& v4 g) [                               
登录/注册后可看大图

,具体表达式如下。


- N; F# }  F6 ^' t! T


* T1 i9 Q7 i2 i/ u                               
登录/注册后可看大图

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

5 Y0 w+ i: {8 {9 J" r" O
                               
登录/注册后可看大图
/ n, V3 v, C" e* U! o. U
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

; L! c# W) Y; V- J. Q                               
登录/注册后可看大图

" s" b. a3 M% J" K- v, n# j                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

; H/ o* x4 x9 W8 R                               
登录/注册后可看大图

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


' x9 E5 ?1 N  c/ S8 D                               
登录/注册后可看大图
,而

, V% ^+ k2 W, T! }# _' `                               
登录/注册后可看大图
的意思是u网格所在位置的速度

8 S8 l4 G/ p9 }3 E+ N# G8 z1 n                               
登录/注册后可看大图
。以
8 s/ Y, Q" n1 i% F6 s" L
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
& f- K$ t4 I, \% \
                               
登录/注册后可看大图
平均求得。

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


, c1 T1 i7 l) w  ^! W! {                               
登录/注册后可看大图

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


, W6 V& h* w" {8 `5 o* N% I                               
登录/注册后可看大图

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

for k=1:N8 }' n( t2 ~9 q& ^
    h(k)=hzero(k) + eta(k);
4 f: M/ I. I1 z3 k6 w    wet(k)=1;
! A# c# q9 x5 d9 Q9 }    if(h(k)<hmin)) }  Y' k8 L8 ?% e) `* W  z
        wet(k)=0;+ H# g/ ~& L+ w+ o/ o: i+ K
    end  V' ?/ L& a1 T; `" V
    u(k)=un(k);end

版权声明

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

参考书目

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


7 @' l- k8 e' g0 H2 s" C
回复

举报 使用道具

相关帖子

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