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

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

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

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

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

: S& H" q2 h: J/ x! V7 g! a0 G5 b
                               
登录/注册后可看大图

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

/ S0 E9 |3 Z* S) G
                               
登录/注册后可看大图

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


, E5 w4 L: J* ]                               
登录/注册后可看大图
* D4 @. ~% ~7 m- F' g7 ?
                               
登录/注册后可看大图
总是相差半个网格距离。在二维的情况,速度是

# [! B- G* B  k) o9 N9 Z                               
登录/注册后可看大图
- _% x$ P+ d6 L" C
                               
登录/注册后可看大图
两个变量,因此我们需要考虑速度

$ U# Y" q. G& R9 n# F2 U) p# O                               
登录/注册后可看大图

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


0 e; R$ [; ~0 ?0 @                               
登录/注册后可看大图
  @6 {3 Z9 H/ V# [% R" Q4 u4 U$ Y
                               
登录/注册后可看大图
的导数,因此为了让对

6 o2 y# ^" ?0 M9 F  ?                               
登录/注册后可看大图
的中央差分落在和
- |( M# X. }2 d$ i
                               
登录/注册后可看大图
同样的位置上,

. `" B# b" {7 ^# U) Y+ H5 c                               
登录/注册后可看大图
也需要和

' @( I7 }9 B; d7 G7 J% b2 l                               
登录/注册后可看大图
间隔半个网格距。这就是大名鼎鼎的Arakawa C网格。在使用交错网格的时候,我们要明确一个准则,就是要确保计算时各个变量都要在相同的空间位置上。比如要算

. B& z7 ?  T5 ^5 S$ O7 r                               
登录/注册后可看大图
在t+1时刻的值,就需要

% E1 S5 Q$ U, q, h                               
登录/注册后可看大图
两侧的
& }1 ~$ W! \/ T3 B* f8 j3 z7 w* r: `
                               
登录/注册后可看大图
做中央差分,这样确保等号左边的
$ Y' u1 {" E2 M$ l& Q4 C# ]
                               
登录/注册后可看大图
和等号右边的导数是相同的空间位置。这一点在之后讲解更复杂的模式中会体现的更明显。例如POM模式,会有更多的参变量,为了保证处于同一空间位置上需要做平均运算。而本文的后半部分,在考虑底摩擦的浅水方程中也涉及到了。


* r  p" D0 D$ ~+ u+ p: l


  B' k) c! P. `, \* N) Y                               
登录/注册后可看大图

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

; H- y$ u' B; r  s' H; H- X; w
                               
登录/注册后可看大图
是水平方向的流速,而东边界(图中右边)的

+ X7 h6 |3 Q3 A1 a7 A                               
登录/注册后可看大图
是在陆地边界上,所以要使
/ e2 U8 g0 m9 v
                               
登录/注册后可看大图
时变为0,不能让水质点穿出边界,而
, S  f( t/ W. w! p
                               
登录/注册后可看大图
或者

3 n: o# X' S  ]  e9 F* m                               
登录/注册后可看大图
时则不需要给予约束,这样就不用考虑西边界,因为西边界没有

; X: m: M/ B0 J# ^                               
登录/注册后可看大图
的格点。对北边界的
& N* N, G+ c1 e8 P' {+ S5 i
                               
登录/注册后可看大图
处理方式一样,在此不做赘述。


; V8 P, f) n+ o# j  j' |' m


1 E* q: Q; _$ P: h, W* R- ?! H                               
登录/注册后可看大图

un(j,k)=0;uu=u(j,k);duu=du(j,k);if(wet(j,k)==1)
0 ^2 X3 |: m( N2 a$ y$ u4 V$ u& _    if((wet(j,k+1)==1)||(duu>0))' n' d9 k- G. i# l
        un(j,k)=uu+duu;
' Q8 ?$ I: m5 T- u  V/ t- W    endelse4 M6 z0 m, S3 K
    if((wet(j,k+1)==1)&&(duu<0))
( B& M: _" r% [: q* e6 ?: q        un(j,k)=uu+duu;
4 z3 _. ^8 k' b- P' S2 C    endend

  对


3 V5 j, y% N4 r1 ^+ n( `. {                               
登录/注册后可看大图
求解的代码实现过程如上,其中if就是在判断边界和速度方向,把不在边界和在边界但是

8 v. C0 K# g+ y* N; W                               
登录/注册后可看大图
不大于0的值赋计算结果,使得在边界且大于0的点赋为0。
. e2 Z9 J; }7 M6 O7 I  p
                               
登录/注册后可看大图
的计算和
8 G4 F% Z- a1 a; p
                               
登录/注册后可看大图

的计算同理。

$ R* ?/ b; E  O' h7 x6 w4 @# O

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

8 P5 E# j/ T+ O. q- N7 i8 r4 I; E
                               
登录/注册后可看大图

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

6 w0 \& g8 G5 K9 ?7 ]
                               
登录/注册后可看大图

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


8 O- @. F# i! q6 n                               
登录/注册后可看大图

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

$ [+ o' k% E8 f/ U* t( T9 |
                               
登录/注册后可看大图

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

# _7 H5 m: C+ K
                               
登录/注册后可看大图

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


2 q% d8 Q, \$ V7 d7 s                               
登录/注册后可看大图

! X3 }6 Y6 B1 z
                               
登录/注册后可看大图

,具体表达式如下。


$ K! e1 W" d( d' |7 N


& U' w8 N" o9 w6 i$ U                               
登录/注册后可看大图

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

5 _. q0 L. m5 e
                               
登录/注册后可看大图

* \% x9 ?* N& T2 _% w( d                               
登录/注册后可看大图
这种变量。这就是前文已经提到的那个问题,Arakawa C网格的
' V# W4 s2 g! E- z3 g0 z
                               
登录/注册后可看大图

3 ?2 h& @0 ^* L; l( I* |) k5 _6 V2 F                               
登录/注册后可看大图
在网格的不同位置处,但是做运算只能在相同网格处。因此

& b- r" v, `5 j/ f                               
登录/注册后可看大图

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

' _1 `+ `. [- V7 Z' E& R
                               
登录/注册后可看大图
,而
& x6 ]( ~  t. o7 ^! g$ w) j$ @
                               
登录/注册后可看大图
的意思是u网格所在位置的速度
- ]& O4 [. {% ~+ d
                               
登录/注册后可看大图
。以

6 l7 f+ H$ |% X- C# i                               
登录/注册后可看大图
为例,如下图所示,可由周围的四个
4 _! p; R+ }! a0 n
                               
登录/注册后可看大图
平均求得。

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

5 b# M) ]# R* i2 j! U/ z7 M
                               
登录/注册后可看大图

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

1 }3 y$ c0 j! H
                               
登录/注册后可看大图

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

for k=1:N" B; \2 n' p# Y  V" a  N
    h(k)=hzero(k) + eta(k);- p! Z: v/ f, |. F
    wet(k)=1;+ L& w4 K4 W, L! _: L8 m( L1 y
    if(h(k)<hmin)
: [! n. O& W) q; m( E        wet(k)=0;* e- X! H9 a7 @# N
    end1 r3 b3 ~9 c) b7 v& b3 g6 `! H2 d
    u(k)=un(k);end

版权声明

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

参考书目

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


4 o+ [1 n# ?, C  H7 I- K3 h0 x
回复

举报 使用道具

相关帖子

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