目录

  • 说明
  • 一、圣维南方程组
  • 1、基本要素与假设条件
  • 2、圣维南方程组
  • 3、公式推导
  • 连续性方程
  • 动量方程
  • 二、方程离散
  • 1. 连续方程
  • 2. 动量方程
  • 三. 离散方程求解
  • 1.河道方程
  • 2.节点方程
  • 3.边界条件
  • 参考文献


说明

Mike11软件包由水动力、对流~扩散、水质、降雨~径流、洪水预报等模块组成,核心模块为水动力模块。Mike11水动力模块采用6点Abbott~Ionescu有限差分格式对圣维南方程组求解。

一、圣维南方程组

1、基本要素与假设条件

Mike11模型基于以下三个要素:反映有关物理定律的微分方程组;对微分方程组进行线性化的有限差分格式;求解线性方程组的算法。并基于以下几个假定:流体为不可压缩、均质流体;一维流态; 坡降小、纵向断面变化幅度小;符合静水压力假设。

2、圣维南方程组

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python
式中:Q为流量,m³/s;q为侧向入流,m³/s;A为过水面积,m²;h为水位,m;R为水力半径,m;C为谢才系数;a为动量修正系数。

圣维南方程组求解 python 二维圣维南方程_MIKE_02


关于圣维南方程的方程的简洁推导可以参考:一个简洁的圣维南方程组推导过程,根据《水文学原理》,描述洪水波在河道中传播规律的物理途径主要有两类:一是利用圣维南方程组描述河道洪水波运动;二是利用河段水量平衡方程式和槽蓄方程式描述河道洪水波运动。基于前一种途径的洪水演算方法称为水力学法。基于后一种途径的洪水演算方法称为水文学法。

3、公式推导

圣维南方程组求解 python 二维圣维南方程_CFD_03


令水的密度为圣维南方程组求解 python 二维圣维南方程_方程组_04 ;重力加速度为 圣维南方程组求解 python 二维圣维南方程_方程组_05圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_06为水在时间圣维南方程组求解 python 二维圣维南方程_水动力模型_07位置圣维南方程组求解 python 二维圣维南方程_CFD_08的深 (高) 度; 圣维南方程组求解 python 二维圣维南方程_MIKE_09 为在时间圣维南方程组求解 python 二维圣维南方程_水动力模型_07,位置圣维南方程组求解 python 二维圣维南方程_CFD_08上水体的流速,q为t时间流入水体的侧向流,默认右为正方向。

连续性方程

考虑x轴上的一个固定区间上的水体,则对水体的高度h对x进行积分,可以求得这一单位宽度水体的质量为
圣维南方程组求解 python 二维圣维南方程_水动力模型_12水体流动过程中,单位区间圣维南方程组求解 python 二维圣维南方程_方程组_13内的水体质量会发生变化,单位时间变化量可以通过水体质量对圣维南方程组求解 python 二维圣维南方程_水动力模型_07的导数求得,即
圣维南方程组求解 python 二维圣维南方程_方程组_15即,
圣维南方程组求解 python 二维圣维南方程_水动力模型_16由于水体流入、流出、以及侧向流q,单位区间圣维南方程组求解 python 二维圣维南方程_方程组_13内的水体质量才发生变化,故水体质量的变化还可以表示为
圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_18
圣维南方程组求解 python 二维圣维南方程_方程组_04为常量,故,
圣维南方程组求解 python 二维圣维南方程_MIKE_20
右边使用反向运用牛顿-莱布尼兹公式,并将时间导数移至积分号内部,即
圣维南方程组求解 python 二维圣维南方程_CFD_21圣维南方程组求解 python 二维圣维南方程_CFD_22故,

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_23故,
圣维南方程组求解 python 二维圣维南方程_水动力模型_24即,
圣维南方程组求解 python 二维圣维南方程_水动力模型_25故,
圣维南方程组求解 python 二维圣维南方程_方程组_26

动量方程

根据物质守恒定律要求,在任意给定的时间间隔内,物质的数量必须是定值。因此,对于任意的位置,圣维南方程组求解 python 二维圣维南方程_CFD_27 的变化量必须与该位置的流量相等。流量定义为 圣维南方程组求解 python 二维圣维南方程_CFD_28。因此,我们有:

圣维南方程组求解 python 二维圣维南方程_方程组_29

其中 圣维南方程组求解 python 二维圣维南方程_MIKE_30 表示该位置的物质变化量,圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_31

首先,我们假设流体的速度为 圣维南方程组求解 python 二维圣维南方程_MIKE_32,流体的体积为 圣维南方程组求解 python 二维圣维南方程_水动力模型_33,河床的高度为 圣维南方程组求解 python 二维圣维南方程_水动力模型_34

对于流体的任意一小部分,其动量可以表示为:圣维南方程组求解 python 二维圣维南方程_MIKE_35,其中 圣维南方程组求解 python 二维圣维南方程_方程组_04

因此,当河流在某一时刻流动,我们可以表示为:

圣维南方程组求解 python 二维圣维南方程_方程组_29

将这个式子代入动量守恒原理,即:

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_38

其中 圣维南方程组求解 python 二维圣维南方程_方程组_05 是重力加速度,圣维南方程组求解 python 二维圣维南方程_MIKE_40

圣维南方程组求解 python 二维圣维南方程_方程组_41 改写为 圣维南方程组求解 python 二维圣维南方程_CFD_42,即:

圣维南方程组求解 python 二维圣维南方程_方程组_43

化简,得到:

圣维南方程组求解 python 二维圣维南方程_方程组_44

在一般情况下,圣维南方程组求解 python 二维圣维南方程_MIKE_40 可以被模拟为 圣维南方程组求解 python 二维圣维南方程_方程组_46,其中 圣维南方程组求解 python 二维圣维南方程_CFD_47 是河流的波速,圣维南方程组求解 python 二维圣维南方程_CFD_48

最后,可以得到:
圣维南方程组求解 python 二维圣维南方程_方程组_49
动量方程中的第一项 圣维南方程组求解 python 二维圣维南方程_方程组_50 表示流速 圣维南方程组求解 python 二维圣维南方程_MIKE_51 关于时间的变化; 第二项圣维南方程组求解 python 二维圣维南方程_方程组_52 表示流速 圣维南方程组求解 python 二维圣维南方程_MIKE_51关于空间的变化; 第三项 圣维南方程组求解 python 二维圣维南方程_MIKE_54 表示水位 圣维南方程组求解 python 二维圣维南方程_水动力模型_34 关于空间的变化; 第四项圣维南方程组求解 python 二维圣维南方程_方程组_56

二、方程离散

圣维南方程中的连续性方程和动量方程通过有限差分法进行离散,计算网格由流量点和水位点组成,其中流量点和水位点在同一时间步长下分别进行 计算,见图。计算网格由模型自动生成,水位点是横断面所在的位置,相邻水位点之间的距离可能不同,流量点位于两个相邻的水位点之间。计算网格点的分布遵循以下规则:①河段上下游端点为计算水位点;②支流入流点为计算水位点;③实测断面资料点为计算水位点;④模型根据max△r值自动插入的点为计算水位点;⑤建筑物点为计算水位点;⑥两个水位点之间只存在一个计算流量点。

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_57

1. 连续方程

在连续方程中,引入蓄存宽度圣维南方程组求解 python 二维圣维南方程_CFD_58

圣维南方程组求解 python 二维圣维南方程_水动力模型_59

从而连续方程转变为:

圣维南方程组求解 python 二维圣维南方程_CFD_60

由公式可以看出仅流量Q与x有关,方程很容易得到以h点为中心的6点隐式格式见图。

圣维南方程组求解 python 二维圣维南方程_水动力模型_61


应用该离散格式,则连续方程变为:

圣维南方程组求解 python 二维圣维南方程_MIKE_62圣维南方程组求解 python 二维圣维南方程_CFD_63圣维南方程组求解 python 二维圣维南方程_水动力模型_64式中: 圣维南方程组求解 python 二维圣维南方程_CFD_65为网格点 j-1 与 j 之间的水面面积;圣维南方程组求解 python 二维圣维南方程_CFD_66为网格点 j 与 j+1 之间的水面面积;圣维南方程组求解 python 二维圣维南方程_水动力模型_67 为网格点 j-1 与 j+1 之间的距离。

将式(3)、式(4)代入方程(2) 变为:

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_68

圣维南方程组求解 python 二维圣维南方程_MIKE_69

圣维南方程组求解 python 二维圣维南方程_方程组_70

该方程可以简化为:

圣维南方程组求解 python 二维圣维南方程_MIKE_71

圣维南方程组求解 python 二维圣维南方程_水动力模型_72式中:a、β、γ为b和δ的函数,其值决定于h点在时间n处及Q点在时间n+1/2处的值。

注:这一步简化还没理解,参考chatGPT回答,揣测了一下
其中,
圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_73圣维南方程组求解 python 二维圣维南方程_MIKE_74圣维南方程组求解 python 二维圣维南方程_CFD_75圣维南方程组求解 python 二维圣维南方程_水动力模型_76

2. 动量方程

动量方程集中在流量点,其网格形式为以Q点为中心点的差分格式见图3。

圣维南方程组求解 python 二维圣维南方程_水动力模型_77


依据6点中心Abbott - Ionescu差分法,动量方程可以表示如下:

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_78圣维南方程组求解 python 二维圣维南方程_方程组_79圣维南方程组求解 python 二维圣维南方程_CFD_80

对公式(8)中的二次项,引入以下公式:

圣维南方程组求解 python 二维圣维南方程_CFD_81式 中 : θ 角的值通过HD参数文件“默认值”中的“THETA”系数来给定,默认值为1。

由上,动量方程可以表达为:

圣维南方程组求解 python 二维圣维南方程_CFD_82其中圣维南方程组求解 python 二维圣维南方程_方程组_83

圣维南方程组求解 python 二维圣维南方程_CFD_84圣维南方程组求解 python 二维圣维南方程_方程组_85圣维南方程组求解 python 二维圣维南方程_MIKE_86

在默认的条件下,软件在一个时间步长里用两次迭代来对这些方程进行求解。初次迭代起始于第 一个时间步长,第二次迭代采用第一次计算值的中心差值来进行计算。迭代次数可以通过NoITER系数来进行修改。

三. 离散方程求解

方程求解采用追赶法(双扫描法)。

1.河道方程

根据水流连续方程和运动方程整理后的最终形式[式(6)和式(11)],河道内某一 水力变量Z,(水位h,或流量Q,)与相邻差分格点的水力参数的关系可以表示为一线性方程:
圣维南方程组求解 python 二维圣维南方程_MIKE_87
假设某河道由n个差分格点离散化,由于河道首末计算断面均为水位点,所以n为奇数。对于河道的所有差分格点写出式(12),可以得到n个线性方程:
圣维南方程组求解 python 二维圣维南方程_MIKE_88圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_89圣维南方程组求解 python 二维圣维南方程_方程组_90圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_91圣维南方程组求解 python 二维圣维南方程_方程组_92圣维南方程组求解 python 二维圣维南方程_MIKE_93圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_94圣维南方程组求解 python 二维圣维南方程_水动力模型_95圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_96
这样方程就多出2个未知量。第一个方程中的圣维南方程组求解 python 二维圣维南方程_水动力模型_97和最后一个方程中的圣维南方程组求解 python 二维圣维南方程_方程组_98分别代表上下游节点的水位。某一河道第一个网格点的水位等于与之相连河段上游节点的水位:圣维南方程组求解 python 二维圣维南方程_MIKE_99,即:圣维南方程组求解 python 二维圣维南方程_CFD_100。同样,圣维南方程组求解 python 二维圣维南方程_MIKE_101, 即:圣维南方程组求解 python 二维圣维南方程_MIKE_102
对于单一河道,只要给出上下游水位边界,即圣维南方程组求解 python 二维圣维南方程_水动力模型_97圣维南方程组求解 python 二维圣维南方程_方程组_98为已知,就可用消元法求解方程组 (13)了。
对于河网,方程组(13)用矩阵的形式表示为:
圣维南方程组求解 python 二维圣维南方程_CFD_105
用消元法变成了
圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_106
由此便能将河道内任意点的水力变量圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_107(水位或流量)表示为上下游节点的水位函数:
圣维南方程组求解 python 二维圣维南方程_MIKE_108在求解过程中首先求出河道中各节点的水位值,之后便可应用式(14)求解任一河段,任一差分格点的水力参数。

2.节点方程

圣维南方程组求解 python 二维圣维南方程_方程组_109


如图所示,绕节点的控制体连续性方程为:

圣维南方程组求解 python 二维圣维南方程_水动力模型_110

将上述方程中右边第2式的3项分别以式(14)替代,可以得到:

圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_111

式中:圣维南方程组求解 python 二维圣维南方程_MIKE_112为该节点的水位,圣维南方程组求解 python 二维圣维南方程_方程组_113圣维南方程组求解 python 二维圣维南方程_方程组_114分别为支流A,B上游端节点水位,圣维南方程组求解 python 二维圣维南方程_CFD_115为支流C下游端节 点水位。
在式(15)中,将某个节点的水位表示为与之直接相连的河道节点水位的线性函数。同样,对于河网所有节点(假设为N个),可以得到N个类似的方程(节点方程组)。在边界水位或流量为已知的情况下,可以利用高斯消元法直接求解节点方程组,得到各个节点的水位,进而回代式(15)求解任意河道任意网格点的水位或流量。
原则上节点可以任意编码,但对于大型复杂河网,这样得到的节点方程组的系数矩阵将是一个阶数很高的稀疏矩阵,存贮量大,运算非常耗时。大型稀疏矩阵求解计算时间主要取决于矩阵主对角线非零元素的宽度。可以通过对河网节点进行优化编码的方法来降低节点方程组系数矩阵的带宽,使之成为主对角线元素占优的矩阵,从而方便方程组的求解,并大大减少计算耗时。

3.边界条件

若在河道边界节点上给出水位的时间变化过程:圣维南方程组求解 python 二维圣维南方程_方程组_116。此时,边界上的节点方程为(假设边界所在河道编号为圣维南方程组求解 python 二维圣维南方程_MIKE_117):
圣维南方程组求解 python 二维圣维南方程_方程组_118
若在河道边界节点上给出流量的时间变化过程:圣维南方程组求解 python 二维圣维南方程_MIKE_119。对控制体应用连续方程可以得到:
圣维南方程组求解 python 二维圣维南方程_水动力模型_120根据(14)将上式中的圣维南方程组求解 python 二维圣维南方程_水动力模型_121代入,可以得到
圣维南方程组求解 python 二维圣维南方程_水动力模型_122

圣维南方程组求解 python 二维圣维南方程_方程组_123


若在河道边界节点上给出流量的时间变化过程:圣维南方程组求解 python 二维圣维南方程_方程组_124,其处理方法同流量边界,得到与式子(16)类似的方程,只是方程中的圣维南方程组求解 python 二维圣维南方程_水动力模型_125圣维南方程组求解 python 二维圣维南方程_圣维南方程组求解 python_126由流量水位关系得到。