[Ocean Modelling for Begineers] Ch5. 2D Shallow-Water Modelling
本章利用二维浅水模型研究表面重力波的不同物理过程,如湖水中风驱动流体,正压不稳定机制(?the barotropic instability mechanism)。本章将为读者介绍使用不同的对流格式模拟物体运动轨迹和动量方程中非线性项。
5.1 浅水中长波
5.1.1 二维浅水波动方程
做以下假设:
- 水体中密度为常数
- 忽略底部摩擦
- 忽略科氏力(周期与惯性周期相比非常小)
- 忽略非线性项(波速远大于流体微团速度)
控制方程简化为
\begin{aligned}
& \frac{\partial u}{\partial t} = -g \frac{\partial \eta}{\partial x} \cr
& \frac{\partial v}{\partial t} = -g \frac{\partial \eta}{\partial y} \cr
& \frac{\partial \eta}{\partial t} = -\frac{\partial (uh)}{\partial x} - \frac{\partial (vh)}{\partial y}
\end{aligned}
\end{eqnarray}\]
5.1.2 Arakawa C网格
Arakawa C网格(Arakawa and Lamb, 1977)是一种交错网格形式,其中流速点分布在相邻水位点周围(如图5.1)。这种网格形式经常被海洋学模型所采用,也被后面模型网格形式。注意流速节点u,v并不在同一节点位置。
5.1.3 有限差分方程
二维浅水方程离散格式,其中j为y方向单元序号,k为x方向单元序号。
\begin{aligned}
& u^{n+1}\_{j,k} = u^{n}\_{j,k} - \Delta t g(\eta^n_{j, k+1} - \eta^n_{j, k})/\Delta x \cr
& v^{n+1}\_{j,k} = v^{n}\_{j,k} - \Delta t g(\eta^n_{j+1, k} - \eta^n_{j, k})/\Delta y \cr
& \eta^*\_{j, k} = \eta^n_{j, k} - \Delta t \\{ (u^{n+1}\_{j,k} h_e - u^{n+1}\_{j,k-1} h\_w)/\Delta x - (v^{n+1}\_{j,k} h_n - v^{n+1}\_{j-1,k} h\_s)/\Delta y \\}
\end{aligned}
\end{equation}\]
二维格式中一阶Shapiro过滤算子
\eta_{j,k}^{n+1} = (1-\epsilon)\eta_{j,k}^\* + 0.25 \epsilon(\eta_{j,k-1}^\* + \eta_{j,k+1}^\* + \eta_{j-1,k}^\* + \eta_{j+1,k}^\*)
\end{equation}\]
5.1.4 陆地与海岸线
陆地定义为水深为0或者为负值,并且在模拟过程中流速分量恒为0。海岸线处隐式的设定法线方向流量为0。由于Arakawa-C网格的优势,这种方法可以按照以下两种情形设置,如果陆地在相邻节点东侧,那么该点u分量为0;同样的,如果陆地在相邻节点北侧,那么该点v分量为0。图5.2给出了在Arakawa-C网格中陆地和海岸线分布形式。干湿算法也可以类似按照一维情形处理。
5.1.5 稳定性
\Delta t \le \frac{min(\Delta t, \Delta y)}{ \sqrt{2gh_{max}} }
\end{equation}\]
5.2 练习8:浅水中长波
5.2.1 目标
本练习目的是模拟环形表面重力波在二维*面上传播过程。
5.2.2 任务描述
计算区域为 \(500m \times 500m\) 矩形网格,空间步长为10m,全场水深为10m,四周为陆边界。
初始时刻在中心点有1m的初始水位,随着时间递进开始向四周传播形成环形波。时间步长为0.1s,共模拟100s
5.2.3 代码范例
5.2.4 计算结果
5.2.5 附加练习
在计算网格内增加岛屿或者海底地形,观察表面重力波沿这些障碍物传播过程。
5.3 练习9:波浪折射
5.3.1 目标
本练习目的是预测*面重力长波在靠*浅水的*岸附*区域的动力特性。
5.3.2 背景
为什么*面重力波在靠*海岸时总是*行于海岸线?原因就是由波浪折射引起。长波的相速度和总水深相关,在深水处波动传播比浅水处更快。因此波浪传播方向发生很大变化,最终*行于地形变化等深线。
5.3.3 任务描述
计算区域2km长,500m宽,空间步长10m。总水深由左侧30m向*岸区域逐渐减小,海岸的坡度为每10m降低10cm。地形等深线和海岸线沿y方向旋转30°。一个单独的Fortran文件专门用来生成模拟计算时区域地形。
*面波是波峰线为直线并且相互*行的波动,传播方向垂直于波峰线并且可由相速度矢量表示。这个*面波在开边界左侧由自由表面正弦振荡形成,振荡周期为20s。
5.3.4 侧向边界条件
5.4 风驱动浅水模型
5.4.1 控制方程
\begin{aligned}
& \frac{\partial u}{\partial t} = -g\frac{\partial \eta}{\partial x} + \frac{\tau_x^{wind} - \tau_x^{bot}}{\rho_0 h} \cr
& \frac{\partial v}{\partial t} = -g\frac{\partial \eta}{\partial y} + \frac{\tau_y^{wind} - \tau_y^{bot}}{\rho_0 h} \cr
& \frac{\partial \eta}{\partial t} = -\frac{\partial (uh)}{\partial x} - \frac{\partial (vh)}{\partial y}
\end{aligned}
\end{eqnarray}\]
简化起见,动量方程中忽略了侧向摩阻,非线性项,科氏力等作用。这个模型只描述风驱动力和底部摩阻对垂向*均水体作用。
5.4.2 底部摩阻半离散方法
假设仅受底部摩擦作用,并且使用二次阻力公式,动量方程写为:
\begin{aligned}
& \frac{\partial u}{\partial t} = -ru\sqrt{(u^2 +v^2)}/h \cr
& \frac{\partial v}{\partial t} = -rv\sqrt{(u^2 +v^2)}/h \cr
\end{aligned}
\end{equation}\]
其中\(r\)为底部无量纲拖曳力系数。假设流动只沿着x方向,使用显式方法求解*似底部摩阻项,可得到差分方程:
u^{n+1}\_{j,k} = u^{n}\_{j,k}(1-\varepsilon) \quad \text{with} \quad \varepsilon=r\Delta \left| u^{n}\_{j,k} \right|/h_u
\end{equation}\]
其中\(h_u\)为u节点处水深。(注意CFL准则要求的是 \(\left| u \right| \Delta t\le \Delta_h\),*岸附*水*网格尺度\(\Delta_h\)远大于水深\(/h_u\))当\(\varepsilon > 1\)时就会出现问题,这时会驱动水流加速,这与实际底部摩阻作用结果是相悖的。使用半隐式格式可以避免出现此类问题,半隐式离散方程为:
5.5 练习10:风驱流
5.5.1 目标
本练习目的是在浅水变化地形上模拟风驱环流运动。
5.5.2 变化地形建立
在模拟风驱流之前,首先向读者介绍一个生成变化地形而不使用复杂的解析函数的简单方法。诀窍是首先采用粗方格网格,随后采用扩撒方程进行光滑。扩散方程为:
\frac{\partial h}{\partial t} = A_h \big( \frac{\partial^2 h}{\partial x^2} + \frac{\partial^2 h}{\partial y^2} \big)
\end{equation}\]
调整扩散系数和光滑计算时间最后得到合适地形。这个光滑过程不包括海岸与岛屿。在干湿网格间采用0梯度边界条件。
5.5.3 代码
默认时间步长与空间步长之间满足:
\]
5.5.4 任务描述
计算域范围为 \(5km \times 5km\),水*网格步长为\(\Delta x = \Delta y = 100m\),底坡是变化的。图5.7显示了生成的计算域地形。由南风产生风应力为\(\tau_y^{wind} = 0.2 Pa\),在起始2天之内线性变化,由0逐渐变为最终值,以避免出现惯性或重力波。模拟时间为5天,设置底部切应力系数为\(r = 0.001\)。时间步长为\(\Delta t = 3s\),满足CFL稳定准则。
5.5.6 计算结果
与深水区域相比在浅水区域流速更为湍急。为了展示,环流通常采用垂向积分流速表示,即水*流速运动。这就消除了水深对流速的剧烈影响并且揭示了环流在深水区运动状态。
模拟4天后恒定环流场基本形成。尽管风应力均匀分布,环流形式仍非常复杂。由于陆地边界限制,不是所有流动都沿风吹动方向,从西北角至东南角形成与风速方向相反的回流。这个回流主要受倾斜的水位产生的压力梯度影响。中间海岛作为一个隔板,在其西部有很强的侧向剪切流。一个逆时针的漩涡在岛西北处形成,最大流速为0.7m/s。
5.6 示踪物运动
5.6.1 Lagrange vs Eulerian 示踪物
Lagrangian示踪物是没有浮力,并且被动地随水流运动的流体微团。实际中,Lagrangian示踪物运动轨迹由每个时间步运动距离来获得,运动距离根据当时所在点流速计算。Eulerian示踪物,则是受流场中对流和混合作用控制的浓度场。
5.6.2 一个困难的任务
数值模拟Eulerian浓度场是一个困难任务,有很多潜在的计算误差。一些数值格式可能引起数值耗散,而其他格式可能导致数值振荡。
5.6.3 Eulerian 对流格式
受垂向*均水*流速控制的示踪物浓度B的垂向*均对流方程为:
\frac{\partial B}{\partial t} = -u\frac{\partial B}{\partial x} -v\frac{\partial B}{\partial y}
\end{equation}\]
其中\(u,v\)为速度分量。
根据微分链式法则,方程等价为:
\frac{\partial B}{\partial t} = -\frac{\partial uB}{\partial x} -\frac{\partial vB}{\partial y} + B\big( \frac{\partial u}{\partial x} + \frac{\partial v}{\partial y}\big)
\end{equation}\]
B的时间变化可以使用简单的时间递进格式离散迭代,最后一项同样可以使用显式格式。其余项有多种方法可供选择,后面介绍的这些方法仅是针对x方向,对于y方向方法类似。
所有格式中,等号右端的第一项可以表示为:
-\Delta t \frac{\partial (uB)}{\partial x} = C_w B_w - C_e B_e
\end{equation}\]
这里'w'与'e'分别代表控制单元的西侧与东侧。其中
C_w = u_{k-1}^n \Delta t/\Delta x \quad \text{and} \quad C_e = u_{k}^n \Delta t/\Delta x
\end{equation}\]
是所谓的柯朗数(Courant numbers)。在下一步中,我们可以将速度分量u分成正负两部分
u^+ = 0.5(u+|u|) \quad \text{and} \quad u^- = 0.5(u-|u|)
\end{equation}\]
重新将离散格式写为:
-\Delta t \frac{\partial (uB)}{\partial x} = C^+_w B^+_w + C^-_w B^-_w - C^+_e B^+_e - C^+_e B^+_e
\end{equation}\]
所有有限差分Eulerian对流格式的目的就是通过单元均值B进行插值来获得有效地边界值\(B_e\)和\(B_w\)。这里我们采用所谓的TVD格式,其要求
\sum_k \big| B_{k+1}^{n+1} - B_k^{n+1} \big| \le \sum_k \big| B_{k+1}^{n} - B_k^{n} \big|
\end{equation}\]
根据Fringer等(2005)描述,在TVD格式中计算B的边界值采用迎风值加上附加的高阶项:
& B_e^+ = B_k^n + 0.5\Psi(r_k^+)(1-C_e^+)(B_{k+1}^n - B_k^n) \cr
& B_e^- = B_{k+1}^n - 0.5\Psi(r_k^-)(1-C_e^-)(B_{k+1}^n - B_k^n) \cr
& B_w^+ = B_{k-1}^n + 0.5\Psi(r_{k-1}^+)(1-C_w^+)(B_{k}^n - B_{k-1}^n) \cr
& B_w^- = B_{k}^n - 0.5\Psi(r_{k-1}^-)(1-C_w^-)(B_{k}^n - B_{k-1}^n)
\end{aligned}\]
其中参数\(r\)表示
\]
限制函数\(\Psi\)代表使用不同格式。后面给出一些可选的格式
- \(\Psi=0\)对应迎风格式
- \(\Psi=0\)为Lax-Wendroff格式
- \(\Psi=max\\{0, min(2r, 1), min(r, 2)\\}\)为Superbee格式
我们还考虑另外的Super-C格式,这种格式受柯朗数限制,表达式为:
\Psi(r, |C|) = \left \\{ \begin{array}{ll}
min(2r/|C|, 1) & 0 \le r \le 1 \cr
min(r/2/(1-|C|), r) & r > 1 \cr
0 & \textrm{otherwise}
\end{array} \right.
\end{equation}\]
这里柯朗数C在控制体边界处计算。
5.6.4 对流方程的稳定性
显式对流方程稳定性条件为:
C = \frac{\Delta t}{\Delta x} u \le 1
\end{equation}\]
这里C为柯朗数,u为流速。因此,时间步应当满足
\Delta t \le \frac{\Delta x}{u}
\end{equation}\]
5.7 练习11:欧拉对流
5.7.1 目标
本练习目的是模拟无浮力的欧拉示踪物质在恒定环流中运动状态。将会在模型中使用不同的TVD对流格式。
5.7.2 任务描述
使用练习10中恒定流场来预测欧拉示踪粒子的运动模式。本练习中,示踪剂在计算场的西北处一正方形区域内释放,正方形边长0.5km。已知恒定环流场运动情况下,预计示踪物初始沿南向运动,然后在南侧边界处向西与东分离。在恒定动力条件下,可以使用比练习10更大的时间步,这里采用\(\Delta t=200s\),同样满足CFL准则。分别测试迎风、Lax-Wendroff、Superbee和Super-C四种对流格式。
5.7.3 结果
5.8 练习12:示踪物
5.8.1 目标
本练习目的是预测没有浮力的Lagrangian流体颗粒在恒定流中运动轨迹。
5.8.2 任务描述
5.10 练习14:岛屿尾流
5.10.1 目标
本练习目的是模拟由于水*流动在岛屿周围形成的紊动尾流。这包括在浅水方程中包含侧边界的摩擦及动量耗散。
5.10.2 雷诺数
在某些情况下,流体在绕过障碍物(如海岛)后会变得不稳定并破碎产生不规则的湍流尾迹。层流转换为紊流的过渡阶段通过非线性项和扩散项壁纸来表示。这个比值称为雷诺数,定义为
\]
这里\(U\)是来流的流速,\(L\)为障碍物的尺寸,\(A_h\)为水*扩散系数。
5.10.3 包括侧边界摩擦与动量扩散
为了模拟障碍物周围紊动尾迹发展,必须添加动量方程中水*摩擦和扩散项。假设水*涡粘系数\(A_h\)为常数,垂向*均的水*扩散项可以写为:
div_h(u) = \frac{A_h}{h}\\{ \frac{\partial }{\partial x}(h \frac{\partial u}{\partial x} + \frac{\partial }{\partial y}(h \frac{\partial u}{\partial y}) \\}
\end{equation}\]
div_h(v) = \frac{A_h}{h}\\{ \frac{\partial }{\partial x}(h \frac{\partial v}{\partial x} + \frac{\partial }{\partial y}(h \frac{\partial v}{\partial y}) \\}
\end{equation}\]
这里\(h\)为分层厚度。扩散方程的离散形式为:
\frac{A_h}{h} \frac{\partial}{\partial x}\Big(h \frac{\partial u}{\partial x} \Big) = \frac{A_h}{h_u \Delta x}\Big[\frac{h_e(u_{j,k+1}^n - u_{j,k}^n)}{\Delta x} - \frac{h_w(u_{j,k}^n - u_{j,k-1}^n)}{\Delta x} \Big]
\end{equation}\]
\frac{A_h}{h} \frac{\partial}{\partial y}\Big(h \frac{\partial u}{\partial y} \Big) = \frac{A_h}{h_u \Delta y}\Big[\frac{h_n(u_{j+1,k}^n - u_{j,k}^n)}{\Delta y} - \frac{h_s(u_{j,k}^n - u_{j-1,k}^n)}{\Delta y} \Big]
\end{equation}\]
5.10.4 扩散项稳定条件
\Delta t \le \frac{(\Delta x)^2}{A_h}
\end{equation}\]
5.10.5 可滑移,半滑移,无滑移边界条件
5.10.6 算例描述
使用程序生成图5.18地形,西部和东部边界为开边界,有一个小岛坐落在西侧开边界附*。长度和宽度方向分别使用\(nx = 101\),\(ny = 51\)个网格节点,空间步长分别为\(\Delta x = \Delta y = 100m\)。时间步长取\(\Delta t = 3s\)。
在动量方程中增加水*扩散项,并且使用无滑移边界条件。模型受西风引起的表面切应力\(\tau_x^{wind}=0.2 Pa\)。使用TVD Superbee格式计算方程中对流项,其他参数与联系13类似。本练习中,西部和东部边界条件为周期性边界条件,即流体在东部边界离开后会再次从西部边界进入计算域。
[Ocean Modelling for Begineers] Ch5. 2D Shallow-Water Modelling的更多相关文章
- 论文翻译:2018_Source localization using deep neural networks in a shallow water environment
论文地址:https://asa.scitation.org/doi/abs/10.1121/1.5036725 深度神经网络在浅水环境中的源定位 摘要: 深度神经网络(DNNs)在表征复杂的非线性关 ...
- 1D RKDG to shallow water equations
RKDG to shallow water equations 1.Governing Equations \[\frac{\partial U}{\partial t} + \frac{\parti ...
- [Ocean Modelling for Begineers] Ch4. Long Waves in a Channel
Ch4. Long Waves in a Channel 简介 本章主要介绍明渠中分层流体模拟.练习包括浅水表面波,风暴潮.内波和分层流体模拟. 4.1 有限差分法详细介绍 4.1.1 泰勒公式 4. ...
- [Ocean Modelling for Begineers] Ch3. Basics of Geophysical Fluid Dynamics
Ch3. Basics of Geophysical Fluid Dynamics 本章主要介绍 标量与向量 Newton定律 波动与恒定状态流体 浮力 科氏力 守恒律 紊动 N-S方程 3.1 Un ...
- BJ2 斜率限制器
BJ2 斜率限制器 本文介绍斜率限制器取自于 Anastasiou 与 Chan (1997)[1]研究,其所利用的斜率限制器也是 Barth 与 Jespersen 限制器的一种修正形式,并且包含一 ...
- 【转】如何使用Unity创造动态的2D水体效果
原文:http://gamerboom.com/archives/83080 作者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染 ...
- [LeetCode] Pacific Atlantic Water Flow 太平洋大西洋水流
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- Leetcode: Pacific Atlantic Water Flow
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
- [Swift]LeetCode417. 太平洋大西洋水流问题 | Pacific Atlantic Water Flow
Given an m x n matrix of non-negative integers representing the height of each unit cell in a contin ...
随机推荐
- Sequence Model-week1编程题2-Character level language model【RNN生成恐龙名 LSTM生成莎士比亚风格文字】
Character level language model - Dinosaurus land 为了构建字符级语言模型来生成新的名称,你的模型将学习不同的名字,并随机生成新的名字. 任务清单: 如何 ...
- LeetCode:BFS/DFS
BFS/DFS 在树专题和回溯算法中其实已经涉及到了BFS和DFS算法,这里单独提出再进一步学习一下 BFS 广度优先遍历 Breadth-First-Search 这部分的内容也主要是学习了labu ...
- Scrum Meeting 5.26
Scrum Meeting Beta 1 日期:2021年5月23日&2021年5月24日 会议主要内容概述:汇报工作 一.进度情况 组员 负责 两日内已完成的工作 后两日计划完成的工作 工作 ...
- [no_code]OCR表格处理——功能规格说明书
项目 内容 这个作业属于哪个课程 2020春季计算机学院软件工程(罗杰 任健) 这个作业的要求在哪里 功能规格说明书 我们在这个课程的目标是 远程协同工作,采用最新技术开发软件 这个作业在哪个具体方面 ...
- Noip模拟80 2021.10.18
预计得分:5 实际得分:140?????????????? T1 邻面合并 我考场上没切掉的大水题....(证明我旁边的cty切掉了,并觉得很水) 然而贪心拿了六十,离谱,成功做到上一篇博客说的有勇气 ...
- [hi3521] nand flash 的 boot 启动模式的区别?
spi nand flash 的 boot 启动模式选择.0:1 线 boot:1:4 线 boot.请问,1线boot和4线boot有什么区别呢?该如何选择呢? 收藏 顶 踩 回复 使用 ...
- 从零开始的DIY智能浇水应用
前言 作为一个新世纪打工人,平常也会去养一些花草,来给我的房间增加点绿色和活力,但是常常因为工作忙而忘记一些事情.,毕竟我大部分的时间都是陪伴着电脑的(严正声明:我不是个单身狗!!! (¬◡¬)✧), ...
- Python matplotlib pylab 画张图
from pylab import * w1 = 1 w2 = 25 fs = 18 y = np.arange(-2,2,0.001) x = w1*y*log(y)-1.0/w2*exp(-(w2 ...
- 2021CCPC河南省省赛
大一萌新,第一次打比赛,虽然是线下赛,但送气球的环节还是很赞的! 这里主要是补一下自己的弱项和考试时没有做出来的题目. 1002(链接之后再放,官方还没公开题目...) 先说一下第二题,这个题一看就是 ...
- 深入剖析 RocketMQ 源码 - 消息存储模块
一.简介 RocketMQ 是阿里巴巴开源的分布式消息中间件,它借鉴了 Kafka 实现,支持消息订阅与发布.顺序消息.事务消息.定时消息.消息回溯.死信队列等功能.RocketMQ 架构上主要分为四 ...