【CFD小工坊】学习二维浅水方程基础理论,从零开始编译计算水力学代码

2023-09-18 20:12:57

【CFD小工坊】学习浅水方程基础理论,从零开始编译计算水力学代码

前言

CFD小工坊是一个本博客一个全新的系列,他将包含我学习二维浅水方程理论,直至编译一个实用的求解器的过程。主要内容有:

  1. 二维浅水方程基本方程,物理意义;
  2. 数值离散方法(非结构化网格),以及离散方程的形式;
  3. 求解器的编写。

对于编程语言,我准备以c/c++为主,并辅以一定的MATLAB脚本。我目前还未熟练掌握c/c++,也希望通过这个系列能逐步学习其使用。也希望和大家一起交流,不断完善我们的博客。

对于本博客中所涉及的所有源代码,我目前暂不开源,但我会在博客中展示一些核心部分。待整个模型开发完成且手册编写完成后,我大概会将源代码和相关资料上传至GitHub。

作为这个系列的开始,本篇博文将简要介绍浅水方程。

浅水动力学

顾名思义,浅水动力学的研究对象是浅水流。浅水流一般有着以下特征:

  1. 有自由表面;
  2. 以重力为主要驱动力,以水流与面体边界之间及水流内部的摩阻力为主要耗散力,有时还存在水面气压场、风应力及地转偏向力的作用;
  3. 水平流速沿垂线近似均匀分布,不必考虑实际存在的对数或指数等形式的垂线流速分布;
  4. 水平运动尺度远大于垂直运动尺度,垂向流速及垂向加速度可忽略,垂向的水压力分布接近静压分布。

事实上,自然界中的水流运动在物理上都属于三维流动,其运动一般可用不可压缩Navier-Stokes方程描述。考虑到浅水流动有着上述第3、4点特性,我们通常将其动力学方程沿着垂向积分(忽略物理量垂向上的空间变化),得到一个二维方程组。这个描述浅水流动的方程组被称为浅水方程,或圣维南方程组(2-D Saint-Venant Equation, 2D SVE)。

在自然界和工程应用中,能作为浅水流动处理的水流通常出现在下列情况中:

  1. 水深相对较浅,即流动的水平尺度远大于垂直尺度。
  2. 水底底坡较缓;如果底坡倾角为α,则有α≈sinα≈tanα。此时,底坡引起的垂直速度和垂直环流可以忽略,也不必考虑垂直加速度及由此产生的动水压力(满足“静压假定”)。
  3. 水面渐变且坡度较缓。
  4. 无明显的垂直环流。

因此,浅水方程常用于描述以下流动:漫滩洪水、灌溉水系、平原河网水流、入库洪水流、溃坝流、河口潮流、近岸风暴潮等等。

然而,从数学上求解二维浅水方程并不容易。通常需要数值方法将其离散,求其近似解。这边衍生出“计算浅水动力学”这一学科方向。至今,已有许多求解浅水方程的成熟方法,本博客将选择其中的一种“有限体积法”来设计、完成求解器。

二维浅水方程

二维浅水方程的守恒形式如下:
∂ U ∂ t + ∂ E ( U ) ∂ x + ∂ G ( U ) ∂ y = S ( U ) U = ( h h u h v ) , E ( U ) = ( h u h u 2 + g h 2 2 h u v ) , G ( U ) = ( h v h u v h v 2 + g h 2 2 ) , S ( U ) = ( 0 g h ( S 0 x − S f x ) g h ( S 0 y − S f y ) ) \dfrac{\partial \bold{U}}{\partial t} + \dfrac{\partial \bold{E(U)}}{\partial x} + \dfrac{\partial \bold{G(U)}}{\partial y} = \bold{S(U)} \\[6pt] \bold{U} = \left( \begin{matrix} h \\ hu \\ hv \end{matrix} \right), \bold{E(U)} = \left( \begin{matrix} hu \\ hu^2+\dfrac{gh^2}{2} \\ huv \end{matrix} \right), \bold{G(U)} = \left( \begin{matrix} hv \\ huv \\ hv^2+\dfrac{gh^2}{2} \end{matrix} \right), \\[6pt] \bold{S(U)} = \left( \begin{matrix} 0 \\ gh(S_{0x} - S_{fx}) \\ gh(S_{0y} - S_{fy}) \end{matrix} \right) tU+xE(U)+yG(U)=S(U)U= hhuhv ,E(U)= huhu2+2gh2huv ,G(U)= hvhuvhv2+2gh2 ,S(U)= 0gh(S0xSfx)gh(S0ySfy)
式中,xy表示平面笛卡尔坐标的两个方向,t表示时间,h表示水深;uv表示x和y方向上的流速,**E(U)G(U)**表示界面通量,**S(U)**表示源项。
S 0 x = − ∂ z b ∂ x , S 0 y = − ∂ z b ∂ y S f x = n 2 u u 2 + v 2 h − 4 / 3 , S f y = n 2 v u 2 + v 2 h − 4 / 3 S_{0x} = -\dfrac{\partial z_b}{\partial x}, S_{0y} = -\dfrac{\partial z_b}{\partial y} \\[6pt] S_{fx} = n^2 u \sqrt{u^2+v^2} h^{-4/3}, S_{fy} = n^2 v \sqrt{u^2+v^2} h^{-4/3} S0x=xzb,S0y=yzbSfx=n2uu2+v2 h4/3,Sfy=n2vu2+v2 h4/3
式中,*zb*表示水底高程,n表示水底糙率。

此外,需要明确的一点是水位η、水深h及水底高程zb的相对关系是:
η = h + z b \eta = h + z_b η=h+zb

参考资料

  1. 谭维炎《计算浅水动力学》
  2. Jingming Hou et. al. A 2D well-balanced shallow flow model for unstructured grids with novel
    slope source term treatment. Advances in Water Resources. 2013.
更多推荐

1、MongoDb综述

1.MongoDb综述1.1.什么是NosqlNoSQL:NotOnlySQL,本质也是一种数据库的技术,相对于传统数据库技术,它不会遵循一些约束,比如:sql标准、ACID属性,表结构等。Nosql优点l满足对数据库的高并发读写l对海量数据的高效存储和访问l对数据库高扩展性和高可用性l灵活的数据结构,满足数据结构不固

zabbix

zabbix是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbixserver与可选组件zabbixagent。通过C/S模式采集数据

sqlite条件查询语句where

文章目录导入CSV数据where其他运算符sqlite初步导入CSV数据查询是数据库中最频繁的操作,但学习查询指令,最起码要有可供查询的表格。比如现在有下面这些2022排名前20的国家GDP的数据,当然格式是csv的,我们要做的第一步就是将其转为sqilte格式。1,美国,美洲,254600,0.2532042,中国,

Excel_字母数字混合排序(数字不符合预期)的一种解决方法

引ADC_DCAL_DN1[13:0]ADC_DCAL_DN10[13:0]ADC_DCAL_DN11[13:0]ADC_DCAL_DN2[13:0]ADC_DCAL_DN3[13:0]ADC1_EOCADC10_EOCADC11_EOCADC2_EOCADC3_EOCADC4_EOCADC5_EOCADC_CALCB

酷开科技夯实流量基础,构建智慧生活新风尚!

在这个日新月异的时代,智能化趋势加速发展,依托于互联网服务的OTT也越来越贴近消费者的居家生活,并在家用场景下释放出独特的大屏营销价值。成立于2006年的酷开科技,一直是智能电视行业前进道路上的坚实力量,自创建以来便一直为互联网智能电视行业提供技术与运维服务。酷开科技以内容技术服务和数字营销服务为核心,自主研发了一套智

Leetcode.213 打家劫舍 II

题目链接Leetcode.213打家劫舍IImid题目描述你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金

Golang 的 GMP:并发编程的艺术

前言在Golang的并发编程中,GMP是一个重要的概念,它代表了Goroutine、M(线程)和P(调度器)。这个强大的三位一体的并发模型使得Golang在处理并发任务时非常高效和灵活。通过GMP的组合,Golang实现了一种高效的并发模型。它充分利用了多核处理器的优势,并通过轻量级的Goroutine实现了高并发的编

typescript 高级类型-class类详解

class简介typescript全面支持es2015中引入的class关键字,并为其添加了类型注解,和其它语法(比如,可见性修饰符等),class基本使用,如下tips1.根据ts中的类型推论,可以知道Person的实例对象p的类型是Person2.ts中的class,不仅提供了class的语法功能,也作为一种类型存

坚鹏:浙江农商联合银行同业核心产品解读与差异化分析培训第8期

浙江农商联合银行同业核心产品解读与差异化分析培训第8期1952年,浙江第一家农村信用社成立。2004年4月18日,浙江省农信联社成立,承担对全省农信社的管理、指导、协调和服务职能。2021年10月,经国务院批准同意、银保监会批复,浙江成为全国深化农信社改革“第一单”。2022年4月18日,省委书记袁家军,省委副书记、省

华清 Qt day1 9月15

.pro:QT+=coregui#引入QT所需要的核心库core,gui为图形开发相关类库greaterThan(QT_MAJOR_VERSION,4):QT+=widgets#表示如果超过4.0版本会自动加上widgets类库CONFIG+=c++11#表示支持C++11后的版本#Thefollowingdefine

SMS--短信服务

1短信服务介绍短信服务(ShortMessageService)是阿里云为用户提供的一种通信服务的能力。2短信服务使用接下来,我们使用短信验证码功能来演示短信服务的使用。流程如下:2.1准备工作2.1.1实名认证https://help.aliyun.com/document_detail/48263.html?spm

热文推荐