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

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

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

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

2 n& M; r4 j; d4 q& K* g
                               
登录/注册后可看大图

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


/ ^% g% }% j5 ?8 S1 x8 ^9 h4 K5 y& j                               
登录/注册后可看大图

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


( ]0 \8 x* d0 f$ L' Y0 s2 c/ K$ D                               
登录/注册后可看大图
. d) D5 T6 P  D% s+ p" `
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

. [4 M, n7 y6 n0 g, {8 v+ T+ d                               
登录/注册后可看大图

; E8 H0 j& J7 L# \                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

) O$ V- g1 N; ?, N                               
登录/注册后可看大图

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


0 r3 s- g+ V" m! M8 m7 ~                               
登录/注册后可看大图
$ _9 ~1 K2 M. G2 U; T) W( B
                               
登录/注册后可看大图
的导数,因此为了让对

& L5 Y" P! m( n1 e                               
登录/注册后可看大图
的中央差分落在和
) K6 r7 p$ w% |' B& h
                               
登录/注册后可看大图
同样的位置上,
4 K3 L+ ^5 ~/ O0 \5 o: n( y1 t
                               
登录/注册后可看大图
也需要和
2 U4 O& A# q9 S" J0 o1 T
                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
+ S7 G( }% r2 h
                               
登录/注册后可看大图
在t+1时刻的值,就需要
- P4 B3 z* q1 C7 r9 T
                               
登录/注册后可看大图
两侧的
0 V) D2 L* N: U% A2 D
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
4 l3 S. q" W! s* l; s; |1 I
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。

' K- \3 U8 S1 G( k

: h! c1 A" r! n, B  ~) J" b7 y
                               
登录/注册后可看大图

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


6 O0 i7 v. V; ?5 j$ g                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
  @/ g+ c( ]/ m
                               
登录/注册后可看大图
是在陆地边界上,所以要使

- L$ b/ i% A) q2 o* o! w. Y5 S                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

! L9 [4 u, |% w; g5 n9 R3 M' g! X0 W                               
登录/注册后可看大图
或者
7 h" c4 G/ y8 N! W: W% _; ?$ A2 R
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有
) I2 s/ G/ `9 |
                               
登录/注册后可看大图
的格点。对北边界的
9 \. x$ {/ i, D  _
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


. L( Y7 o& j* g2 D) h

7 _5 Z! r) l) d) x: |& d  H/ r9 e
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
" e' |: o; M5 d7 a6 `; K+ z    if((wet(j,k+1)==1)||(duu>0))5 \3 w  r. p( o1 q9 {7 L" E- E
        un(j,k)=uu+duu;% w: K) Y4 I: K# J& Z' t
    endelse4 P" L$ W2 T4 j' ]! H! n% _! F
    if((wet(j,k+1)==1)&&(duu<0))
1 c4 d* E9 p# R( G# }  Z) H; p        un(j,k)=uu+duu;
  C/ F  [2 x) Z- a+ l    endend

  对

8 X* w5 u! I# U- y; z8 z/ B( d$ m
                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

8 L2 w5 j/ m! M3 _0 V6 g                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
/ J& _8 [0 n) ?: y: b
                               
登录/注册后可看大图
的计算和
) J! `- j9 y: f, R* q
                               
登录/注册后可看大图

的计算同理。


7 j% |$ P1 r' i2 P% g

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

* W5 D" }4 W/ G
                               
登录/注册后可看大图

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


0 \3 v: S) W/ j; w1 j, y                               
登录/注册后可看大图

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

+ t! K+ a8 C1 [! L$ ]7 t4 t4 p
                               
登录/注册后可看大图

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


2 a. d! A4 Z% d! {; h                               
登录/注册后可看大图

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

5 v, Z6 `) _- w' I) o9 w- B: E6 t
                               
登录/注册后可看大图

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


3 X& K2 ^2 V  @' t9 x                               
登录/注册后可看大图

  I, k: A& c7 ~1 f; R6 p+ I
                               
登录/注册后可看大图

,具体表达式如下。


% V* ^- K: R$ R' e+ `


2 `  r3 I* k) _; n# _# i! X" @                               
登录/注册后可看大图

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


- N8 M3 ^3 _8 g' n8 q- ?8 e$ Y0 Q3 x                               
登录/注册后可看大图
5 ]- z; z5 e2 x9 t% O( f
                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

. S  v: b7 y3 F5 n: E) ]                               
登录/注册后可看大图
, X+ K- O; a, z& \7 R1 _
                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

! J8 o9 Z3 n5 H4 a2 I8 [- B* G" C                               
登录/注册后可看大图

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

, N5 q- X: d7 h; Z( Z+ }7 Y1 z& |
                               
登录/注册后可看大图
,而

9 z. n, b+ \5 m) k# x                               
登录/注册后可看大图
的意思是u网格所在位置的速度
; p& Y! s9 \1 y! C  z' D; A
                               
登录/注册后可看大图
。以

# |/ s9 V- z7 B9 G                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个

' |; z# Q1 U" I% d                               
登录/注册后可看大图
平均求得。

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


) p6 i% \* g4 I, X8 a( L                               
登录/注册后可看大图

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


$ H7 r6 R6 A; ]# x8 N2 {5 m                               
登录/注册后可看大图

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

for k=1:N8 W$ C: [" m7 `7 o
    h(k)=hzero(k) + eta(k);( J. v5 e# {( `# N$ x! {; R2 h& o
    wet(k)=1;
( |- s* v# h$ }( L: I2 x7 U; J$ A    if(h(k)<hmin)+ \5 b+ E$ W0 w; b3 o' v
        wet(k)=0;7 D8 p, u) P3 a' c: u2 O
    end
: H4 y. k3 ?: P% H    u(k)=un(k);end

版权声明

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

参考书目

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

( R1 ]6 n& n4 D" v) d6 e" H) t
回复

举报 使用道具

相关帖子

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