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

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

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

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

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


) P% S& y$ A: h9 r" u) u' n                               
登录/注册后可看大图

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

& M$ ^3 U- b( S4 Y7 B/ @
                               
登录/注册后可看大图

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


( C( n2 H9 L) I4 w% Q  i6 x                               
登录/注册后可看大图

( `# a, s8 [4 e- g: |                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

0 L. y/ [% W# p8 r                               
登录/注册后可看大图
/ o& F# F" Y$ k
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

  Q/ F: R# h* |; G& A! A                               
登录/注册后可看大图

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

# b- `4 C1 ^% ^; B, j# S
                               
登录/注册后可看大图

4 \. Q" `8 w$ Y! ^' k7 j                               
登录/注册后可看大图
的导数,因此为了让对

- D. ~6 D* C3 f+ t1 K                               
登录/注册后可看大图
的中央差分落在和

& f  k1 t2 v. C" n' a% H                               
登录/注册后可看大图
同样的位置上,

8 G; _; L6 ]9 R3 q. b                               
登录/注册后可看大图
也需要和
" X1 [( z$ s& v: |; g1 e
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
' Q7 ^, Z- b2 G- m
                               
登录/注册后可看大图
在t+1时刻的值,就需要

; U  }! b! `0 d1 [                               
登录/注册后可看大图
两侧的

9 v& ]/ p& ?, p: V- f                               
登录/注册后可看大图
做中央差分,这样确保等号左边的

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

! x" Y3 d& P5 n  V! E6 p6 \* L; y


* m. J5 h0 w; U; D" k) a                               
登录/注册后可看大图

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

' T- _; r0 \$ {' n  b/ E
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
9 ?1 c, E8 A5 ^8 D8 p) [
                               
登录/注册后可看大图
是在陆地边界上,所以要使
4 @1 C' B6 i2 {$ @8 h2 H- C
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

' a7 H, L1 W0 p( A. x( M8 e- ?                               
登录/注册后可看大图
或者
! w) r: K" U0 S* D. X
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

1 b2 B5 u" n! Y; x: o2 z                               
登录/注册后可看大图
的格点。对北边界的

( w" S! K4 W# y; O# B( x                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


" I& @( b) |+ t7 n' R: k# Z* G

* c8 R' V% B5 U+ C+ E7 A
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)) O( o1 V, c3 j5 U6 ]
    if((wet(j,k+1)==1)||(duu>0))" C$ W; I+ f7 t0 p. k" S! A, K
        un(j,k)=uu+duu;% B, O6 N9 }( R: A( s  M- U" l
    endelse
8 Y, Z2 \+ r* X& F6 @# I) U    if((wet(j,k+1)==1)&&(duu<0))
0 }3 d0 ], W, j1 q0 P! j        un(j,k)=uu+duu;
3 e9 R' N* A6 i$ \    endend

  对


' Q2 Y* Y8 a, E7 f! a- i                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是
4 a( w* P( O- F# {
                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。

7 V: @+ K9 O' I/ Q, U' f; W                               
登录/注册后可看大图
的计算和
4 e, c  w0 m  U$ P
                               
登录/注册后可看大图

的计算同理。

- ?2 J5 Q8 E& L- G

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


0 I# l& H8 i; }& j9 D+ O/ L1 n) t                               
登录/注册后可看大图

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

3 l7 W$ Y! v  [! L; i8 i' u" M. m
                               
登录/注册后可看大图

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

4 ?6 a- @; r6 c( [5 a% a: ?  E
                               
登录/注册后可看大图

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

; r8 X2 }7 g2 T5 W3 d
                               
登录/注册后可看大图

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

1 n- R' i8 T: V# K, e( T
                               
登录/注册后可看大图

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


2 `& C6 \0 J. P' ~6 C7 K2 `                               
登录/注册后可看大图

- R+ w2 Z9 m& t" _1 A  F5 N' |
                               
登录/注册后可看大图

,具体表达式如下。


+ c' \" V5 H: s" w2 `- ^# Q2 f


7 D; O$ h9 P1 h. \8 k3 L* p" y                               
登录/注册后可看大图

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

5 d7 W! u% v' i) J& Z
                               
登录/注册后可看大图

( g* y, Q9 h. N. {                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
  f' B7 \6 G- m( Q
                               
登录/注册后可看大图

' @6 p* w7 `* E                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此
# _3 S: Z6 y$ W
                               
登录/注册后可看大图

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

# P* p( Q4 ~. C) C
                               
登录/注册后可看大图
,而
! n  K$ \* l) Q: M1 G1 K* c
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

: @2 G: g0 M. [9 [                               
登录/注册后可看大图
。以
  w! O# j' s4 V( J4 K9 L
                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
  M8 u. v7 w  W# \
                               
登录/注册后可看大图
平均求得。

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

8 F2 H- m9 G8 J# A  y
                               
登录/注册后可看大图

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

' R/ Z( L. N6 b* @  N3 ]9 p1 V9 t% Z
                               
登录/注册后可看大图

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

for k=1:N
' c  _2 J# \. W' E- q- O: G    h(k)=hzero(k) + eta(k);
! D) v5 U8 A: v# {* W! x4 |  D% Q9 B    wet(k)=1;8 c+ b. z8 s; `( I/ b: r; @4 i. [
    if(h(k)<hmin). w( ]% _# m- z5 [$ l% d
        wet(k)=0;2 A5 k0 V) e4 c! m5 R1 c5 n; X4 H% N
    end5 `% l* B7 @3 o, F$ v
    u(k)=un(k);end

版权声明

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

参考书目

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

! e* T& p7 v! T; F- e6 f/ N
回复

举报 使用道具

相关帖子

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