Ch4. Long Waves in a Channel

简介

本章主要介绍明渠中分层流体模拟。练习包括浅水表面波,风暴潮、内波和分层流体模拟。

4.1 有限差分法详细介绍

4.1.1 泰勒公式

4.1.2 前差,后差,中心差分

4.1.3 二阶微分格式

4.1.4 截断误差

考虑函数:

\[f(x) = A sin(2\pi x/\lambda)
\]

方程的导数为:

\[\frac{df}{dx} = 2 \pi A/ \lambda cos(2 \pi x/lambda)
\]

如果我们使用中心差分近似一阶导数,可以得到

\[\frac{f(x+\Delta x) - f(x-\Delta x)}{2 \Delta x} = \frac{A sin[2 \pi (x+\Delta x) / \lambda] - A sin[2 \pi (x-\Delta x) / \lambda]}{2 \Delta x} = 2 \pi A / \lambda cos(2 \pi x / \lambda) \cdot [1-\epsilon]
\]

相对误差与绝对误差的比值

\[\epsilon(\Delta x) = 1-\frac{sin(2 \pi \Delta x/ \lambda)}{2 \pi \Delta x / \lambda}
\]

使用有限差分法模拟波动过程时,只有波长范围内有10个以上节点时才能准确描述波动过程。

4.2 表面重力长波

4.2.1 单个过程分析

NS方程描述了在不同长度尺度和时间尺度上同时发生的流体运动过程。在某些假定下,我们可以取出单独过程进行研究。比如说,当周期远远小于惯性周期时,我们可以忽略科氏力的作用而对控制方程进行简化。

4.2.2 浅水过程

4.2.3 浅水模型

我们做以下假定:

  1. 波周期相比惯性周期很小,可以忽略科氏力作用
  2. 假设摩擦力为一阶近似
  3. 忽略非线性项,即波速远远超过颗粒运动速度

4.2.4 控制方程

4.2.5 波动解析解

4.2.6 动画演示

4.2.7 数值计算网格

使用交错网格,流速节点位于相邻水位节点中间。

4.2.8 有限差分格式

4.2.9 稳定准则

CFL准则:

\[\lambda = \frac{\Delta t}{\Delta x}\sqrt{g h_{max}} \le 1
\]

其中\(h_max\)为模型中最大水深。

4.2.10 一阶Shapiro过滤器

为了去掉数值振荡现象,使用Shapiro过滤算子(Shapiro, 1970):

\[\eta\_k^{n+1} = (1-\epsilon)\eta\_k^\* + 0.5 \epsilon (\eta\_{k-1}^\* + \eta\_{k+1}^\*)
\]

其中\(\epsilon\)为光滑系数。

4.2.11 陆地与海岸边界

没有流动可以穿过陆地与海岸线,除非特殊处理的计算格式(4.4节介绍)。由于交叉网格设置,海岸线需要特殊的条件,若\(h_{k+1}\le 0\)时\(u_k\)为0。

4.2.12 侧向陆边界条件

模型计算网格从\(k=1\)到\(k=nx\),边界处单元\(k=0\)与\(k=(n+1)x\)也需要赋值才能计算。一种方法是令边界闭合,横向对流流速为0:

\[u_0^n = 0 \quad \text{and} \quad u_{(n+1)x}^n = 0\quad
\]

0梯度边界条件用来消除物理量在边界处扩散流量,边界条件为:

\[C_0^n = C_1^n \quad \text{and} \quad C_{(n+1)x}^n = C_{nx}^n\quad
\]

周期边界条件表示为:

\[C_0^n = C_{(n+1)x}^n \quad \text{and} \quad C_{(n+1)x}^n = C_1^n\quad
\]

4.2.13 模块化Fortran脚本

4.2.14 Fortran代码结构

4.3 练习5:明渠中长波运动

4.3.1 目标

4.3.2 说明

水渠长1km,网格步长10m,设置101个节点单元,包括最后一个边界节点,计算时间步长0.1s,满足CFL准则。

  1. 溃坝算例

    平衡状态水深为10m,在中心110m宽长度上初始高程提升1m
  2. 波动算例

    在中点处放置一个造波板,以1m振幅,20s周期造波

4.3.3 简单代码及动画示例

4.3.4 结果

4.4 练习6: 干湿算法

4.4.1 目标

可以模拟洪水传播到陆地过程。例如由潮水或风暴潮淹没海岸情形。

4.4.2 重新定义干湿

湿节点定义为水深超过某一阀值\(h_{min}\),通常为几厘米左右。这个阀值作用主要是避免水体退去后湿单元出现负水深,从而使模型崩溃。干单元通常定义为\(h\le h_{min}\)

4.4.3 淹没干单元

4.4.4 淹没边坡

  1. \(h_0\)为静水位置距底部距离,在有水地方为正值,而在陆地为负值
  2. 初始高程在湿单元处为0,在干单元与陆地高程相同\(\eta = -min(0, h_0)\)
  3. 真正水深为\(h = h_0 + \eta\),这个水深用来判别干湿节点

4.4.5 终极测试(?Ultimate Crash Tests)

两组测试算例,长1km,网格步长10m,设置101个节点单元,前后增加一个边界节点,计算时间步长0.1s,满足CFL准则。

  1. 小岛最高位于水面0.5m,左侧200m有一风暴潮,初始高程1m,两侧为陆边界
  2. 斜坡上有一高程为4m水坑

代码几处要点

  1. 过滤算子只在湿节点作用,跳过干节点
  2. 流速更新只考虑两种情形,两侧为湿节点;由湿节点流向干节点
  3. 干湿阀值水深为0.1m,水深越小越精确(随着阀值减小,水体下流速度变快?)。但是此值不能为0,否则水体前进速度会变得特别快,并不符合实际。

存在问题

  1. 干湿水深阀值如何确定?

4.5 多层浅水模型

4.5.1 基础

在浅水假定条件下,可以构造每一层都是密度为常数多层浅水模型。第i层的动量方程为

\[\frac{\partial u_i}{\partial t} = -\frac{1}{\rho_i} \frac{\partial P_i}{\partial x}
\]

其中,\(i\)为层数,每层水体动压为

\[\begin{array}{ll}
P_1 = \rho_1 g \eta_1 \cr
P_2 = P_1 + (\rho_2 - \rho_1) g \eta_1 \cr
\cdots
\end{array}\]

更一般形式为

\[P_i = P_{i-1} + (\rho_i - \rho_{i-1})g \eta_i \quad \text{for} \quad i = 1,2,3,...
\]

连续方程为

\[\frac{\partial h_i}{\partial t} = - \frac{\partial u_i h_i}{\partial x}
\]

其中第i层水体厚度为

\[h_i = h_{i, 0} + \eta_i - \eta_{i+1}
\]

这里\(h_{i, 0}\)为第i层水体未扰动时的厚度。

4.6 练习7:长波在分层流体中运动

4.6.1 目标

模拟重力波在不同密度分层水体内运动情况

4.6.2 算例描述

顶层水体密度为\(1025 kg/m^3\),第二层至底层密度分别从\(1026 kg/m^3\)到\(1026.5 kg/m^3\)逐渐增加。模型由左侧正弦振荡自由表面驱动,振幅为1s,周期分别为10s与2h。两侧为封闭的固边界。计算时间取10倍波动周期,时间步0.25s。

4.6.3 代码

4.6.4 结果

4.6.5 内波相速度

在两层流体模型中,内部长波的相速度为:

\[c_{iw} = \sqrt{g'h^*}
\]

这里\(g'\)为相对重力加速度,\(h^* = h_1 h_2 /(h_1 + h_2)\)为相对水深,对\(h_2\gg h_1\)时,\(h*\approx h_1\)。因此内部波运动速度远小于表面重力波,与表面重力波一样,在静压模型中,无法模拟内波破碎现象。

4.6.6 封闭水体自由振荡

在波节点处,流体只进行水平运动而没有垂向运动。与之相反,在波腹处流体只有垂向运动。

4.6.7 Merian 定律

4.6.8 海湾内协同振荡(Co-oscillations)

[Ocean Modelling for Begineers] Ch4. Long Waves in a Channel的更多相关文章

  1. [Ocean Modelling for Begineers] Ch3. Basics of Geophysical Fluid Dynamics

    Ch3. Basics of Geophysical Fluid Dynamics 本章主要介绍 标量与向量 Newton定律 波动与恒定状态流体 浮力 科氏力 守恒律 紊动 N-S方程 3.1 Un ...

  2. [Ocean Modelling for Begineers] Ch5. 2D Shallow-Water Modelling

    本章利用二维浅水模型研究表面重力波的不同物理过程,如湖水中风驱动流体,正压不稳定机制(?the barotropic instability mechanism).本章将为读者介绍使用不同的对流格式模 ...

  3. Meditation Guide

    Meditation “Stop!!!” don’t we just scream[vi. 尖叫:呼啸:发出尖锐刺耳的声音:令人触目惊心 ] this in our minds when the da ...

  4. NeoOcean - Unity3D Ocean Waves Simulation

    GMail: bearworks8@gmail.com QQMail:196221347@qq.com QQ Group:391782326 Dropbox Demo:  https://www.dr ...

  5. Basic EEG waves 四种常见EEG波形

    Source: https://www.medicine.mcgill.ca/physio/vlab/biomed_signals/eeg_n.htm The electroencephalogram ...

  6. Waves – 赞!超炫交互体验的点击动画效果

    Waves 点击效果的灵感来自于谷歌的材料设计,很容易使用.只需要引入 waves.min.css 和 waves.min.js 到 HTML 文件中可以使用了.采用 touchstart 与 tou ...

  7. Mongodb Manual阅读笔记:CH4 管理

    4 管理 Mongodb Manual阅读笔记:CH2 Mongodb CRUD 操作Mongodb Manual阅读笔记:CH3 数据模型(Data Models)Mongodb Manual阅读笔 ...

  8. VPS -Digital Ocean -初试以及VPN的搭建

    首先恭喜你找到这篇博客,它会带你走出困境. 题外话(请忽略):一直以来想搞一个VPS,终于在自己的刺激下试了一下Digital Ocean,还没有使用很长时间不做太多评论,唯一给我的感觉是各种操作还算 ...

  9. Waves:类Material Design 的圆形波浪(涟漪)点击特效插件

    Waves:类Material Design 的圆形波浪(涟漪)点击特效插件 2014/08/06 分类:前端开发, 素材分享 浏览:6,734次  来源:原创 1个评论       6,734   ...

随机推荐

  1. Coursera Deep Learning笔记 改善深层神经网络:超参数调试 Batch归一化 Softmax

    摘抄:https://xienaoban.github.io/posts/2106.html 1. 调试(Tuning) 超参数 取值 #学习速率:\(\alpha\) Momentum:\(\bet ...

  2. [敏捷软工团队博客]Beta阶段测试报告

    项目 内容 2020春季计算机学院软件工程(罗杰 任健) 博客园班级博客 作业要求 Beta阶段测试报告 我们在这个课程的目标是 在团队合作中锻炼自己 这个作业在哪个具体方面帮助我们实现目标 对Bet ...

  3. poi实现生成下拉选

    在我们日常开发中,经常需要使用poi操作excel文件,现在就简单介绍一下在poi中是如何生成下拉选的. 1.创建workbook 2.创建数据约束 3.设置数据的有效性 @Test public v ...

  4. spring cloud中使用hystrix实现回退

    在微服务架构中,我们的服务被拆分成多个微服务,每个微服务完成自己的职责,微服务之间通过rpc或http进行调用.这个时候我们就要确保我们的服务高可用,但谁也说不准我们的服务能永远快速的提供服务.假如现 ...

  5. 『学了就忘』Linux基础 — 3、CentOS镜像下载

    下载CentOS镜像可以从官网下载:https://www.centos.org/download/. 也可以从国内的镜像网站下载. 阿里云:https://mirrors.aliyun.com/ce ...

  6. GPIO原理与配置(跑马灯,蜂鸣器,按键)

    一.STM32 GPIO固件库函数配置方法 1. 根据需要在项目中删掉一些不用的固件库文件,保留有用的固件库文件 2. 在stm32f10x_conf.h中注释掉这些不用的头文件 3. STM32的I ...

  7. 最长子序列(线性DP)学习笔记

    子序列和子串不一样.子串要求必须连续,而子序列不需要连续. 比如说\(\{a_1,a_2\dots a_n\}\),他的子串就是\(\{a_i,a_{i+1},\dots, a_j|1\leq i\l ...

  8. 你真的了解电子邮件系统的组成和结构吗?(SMTP、POP3、IMAP、MIME……)

    文章转自:https://blog.csdn.net/weixin_43914604/article/details/105896201 学习课程:<2019王道考研计算机网络> 学习目的 ...

  9. linux ar

    转载:Linux ar命令 | 菜鸟教程 (runoob.com) Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件. ar可让您集合许多文件,成为单一的备存文件.在备存文件中,所 ...

  10. .Net(c#)汉字和Unicode编码互相转换实例

    {"name": "\u676d\u5dde", "href": "www.baidu.com"} 经常遇到这样内容的j ...