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

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

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

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

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


, r7 n) f& u, a                               
登录/注册后可看大图

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

! ~8 o! i$ g/ P; y+ \
                               
登录/注册后可看大图

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

0 V6 F0 i% B1 n( W- K- T
                               
登录/注册后可看大图
4 K# v& r8 _3 N- X. t' `* V
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是
- r9 w. p) n% f% v! b
                               
登录/注册后可看大图
2 g, {1 O7 Z; X3 a/ k
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

% s' I) J  N% f+ k3 V  {                               
登录/注册后可看大图

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

/ {1 E, @: f4 P% w% l9 S5 [: G
                               
登录/注册后可看大图
  z; `4 ^) T- f9 ~- ?$ ]
                               
登录/注册后可看大图
的导数,因此为了让对
% r* B! G( J$ j. T- k
                               
登录/注册后可看大图
的中央差分落在和

9 R6 b5 w' [9 t+ J' g                               
登录/注册后可看大图
同样的位置上,

; T1 f$ w5 H' c+ b- F* @                               
登录/注册后可看大图
也需要和

7 m5 R) \! B) T9 }                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算
7 _" T; @% g, n: m  F
                               
登录/注册后可看大图
在t+1时刻的值,就需要
& y8 f. Q3 |* E& B
                               
登录/注册后可看大图
两侧的
; y4 u$ R8 C& _1 X( `1 J
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
. h) E8 w6 O% {% h" ?9 n. r# @: j
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


' P1 o/ |9 l. U


, q& ?& T* w- w( w" b$ E4 T                               
登录/注册后可看大图

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


# M$ s7 N& A# }0 B) s& M8 @                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的
3 G( T" G1 D( I* h
                               
登录/注册后可看大图
是在陆地边界上,所以要使

, L3 U& d* ?5 Y. O0 \% }& ~- @$ X                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而

4 T# I- N- r2 {  a                               
登录/注册后可看大图
或者
' R2 ?; l- ]: y/ ^
                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

  @8 w5 [+ r. ^# K, O                               
登录/注册后可看大图
的格点。对北边界的
8 E. I# L4 c$ T2 U8 w: G5 X  @
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。

3 F0 `8 U  D, Q$ @  v4 S1 s

3 |9 y7 _+ A1 u
                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)% r% P  a% y5 m9 o4 Y3 M& \6 L
    if((wet(j,k+1)==1)||(duu>0))5 b( c% o. x) [! M# _( G
        un(j,k)=uu+duu;; z3 S6 @4 [" }  b5 e& l. a$ P
    endelse
# ]" N8 g. q6 r" h9 b& R. f' J+ f    if((wet(j,k+1)==1)&&(duu<0))) y) [1 _- v6 W; k! o0 X
        un(j,k)=uu+duu;# ]0 @: w1 ?1 B
    endend

  对


( H. [" n) w6 Z4 Z- G% M7 Z                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

9 I! B) F- H* {% q4 b3 S! s                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
7 x9 a- r/ |1 K# I
                               
登录/注册后可看大图
的计算和

7 X% c% s2 v& a2 P. a                               
登录/注册后可看大图

的计算同理。

; [& F" H# @% Q) C. _( s

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


( F2 R+ @" O" Z7 u# t                               
登录/注册后可看大图

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


+ S! f. c" o) Q( r( Q3 e& N                               
登录/注册后可看大图

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


1 H$ I6 D6 V6 n* c                               
登录/注册后可看大图

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

5 \2 ~* N+ Q9 V8 [7 B
                               
登录/注册后可看大图

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


& h% d1 F$ ?3 K, p                               
登录/注册后可看大图

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

) ?& ~2 W7 x( K4 }
                               
登录/注册后可看大图


9 T$ j4 I; e4 P) K# N' X& H; Z                               
登录/注册后可看大图

,具体表达式如下。

% ~0 c9 P7 F8 v3 h3 @8 E% U+ C


( h# H* m! @/ Y1 F                               
登录/注册后可看大图

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


8 C/ f$ T3 y0 ?8 f# W( S                               
登录/注册后可看大图

- y5 l5 H$ K* L! h- ^0 `( M8 }" ?                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的

4 ]# S# u) y7 u2 f; y8 t                               
登录/注册后可看大图

8 O7 |) ]3 k8 V. H/ c% T9 `  E                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

7 q" Z  y6 f. K0 e+ N                               
登录/注册后可看大图

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


6 _: e) p( o0 O1 E8 X' B% i% `                               
登录/注册后可看大图
,而
% P4 c( H; ?$ s, F/ l( h4 o# u& B7 t
                               
登录/注册后可看大图
的意思是u网格所在位置的速度

. F3 Y) i2 W: U9 H  Y6 ?7 z/ s                               
登录/注册后可看大图
。以

: F7 E% c4 g5 \: ^                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
7 p& {( C% i' Q. e: }* T
                               
登录/注册后可看大图
平均求得。

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

) W8 M. f( h1 \& L9 ?$ [- Q( e
                               
登录/注册后可看大图

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

  A' x; Y$ o% u6 r( C! j: W
                               
登录/注册后可看大图

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

for k=1:N
# z$ V" J7 z/ M/ E! s* q    h(k)=hzero(k) + eta(k);# z1 ^) n& i' C4 g  _- v
    wet(k)=1;* [, N& U- q0 [2 K$ c. n
    if(h(k)<hmin)
5 N" x- J4 s5 {4 s        wet(k)=0;
, O' P/ T- u) p: z, }5 @" a% i$ _; W    end
- [- c1 W4 m: C    u(k)=un(k);end

版权声明

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

参考书目

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


5 ~3 U! ^+ @3 S4 N
回复

举报 使用道具

相关帖子

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