合工大周啸课题组 - EPANET
type: channel
link: https://group.zhouxiao.tech/tag/EPANET/
items: 基于梯度算法的供水管网水力计算实现
items: 使用EPANET+WNTR完成管网水质模拟

基于梯度算法的供水管网水力计算实现
type: item
date: 2026-06-01T13:06:00+08:00
description: 论文介绍论文题目：A Gradient Algorithm for the Analysis of Pipe Networks作者：E. Todini, S. Pilati (1988)供水管网水力分析（稳态流分析）是管网设计与优化的核心环节。其任务是在已知管网拓扑、管道参数、节点需水量和固定水头（水库、水塔）的条件下，求解所有管道的流量 $Q$ 和所有未知节点的测压水头 $H$。传统方法（如 Hardy‑Cross、牛顿法、线性理论、优化法）各有缺陷：或收敛慢、或依赖初值、或方程组规模过大、或数值实现复杂。作者提出了一种梯度算法（Gradient Algorithm）：在流量‑水头联合空间 $(Q, H)$ 中应用牛顿法，并借助 Content Model（内容模型） 的凸性证明了解的存在唯一性——这是算法无条件收敛的理论基石。通过分块矩阵消元，将每步牛顿迭代压缩为只求解一个与未知节点水头数 $nn$ 同规模的线性系统，再通过简单回代得到新的管道流量。该线性系统具有对称正定、稀疏、Stieltjes 矩阵的良好性质，可采用 不完全 Cholesky 分解 + 共轭梯度法（ICF/MCG） 高效求解，存储量仅与管道数 $np$ 成正比，适合在个人计算机上求解大型管网。论文（核心）结构：第二章：推导节点梯度法的完整迭代公式。第三章：从同一修正方程导出线性理论和环梯度法，展示三种方法的统一性。第四章：从输入、初值、规模、求解效率四个维度比较，证明节点梯度法最优。第五章：介绍 ICF/MCG 算法，实现节点法的高效求解。本文提出的梯度算法后来成为全球广泛使用的供水管网物理模拟软件 EPANET 的核心求解器（称为 Global Gradient Algorithm）。1 Introduction引言其实在讲四件事：管网问题分两步：一是设计与优化，二是水力分析。本文主要研究第二个，即稳态管网水力分析。稳态分析要解什么：在稳态（管网达到稳定运行的）条件下，求：每条管段的流量以及每个节点的测压水头。旧方法有什么问题：作者回顾了四类方法，Hardy Cross 一类的局部梯度法：可能发散，收敛慢牛顿法：更好，但仍依赖初值和网络复杂度线性理论法：更稳，但方程组更大优化法：理论漂亮，但数值实现较重作者的方法新在哪里：作者的方法想把两类优点结合起来，从优化思路那里获得“解存在且唯一”的理论基础从牛顿法那里获得高效迭代求解能力最终再把问题压缩成一个只和未知节点水头数有关的线性系统这就是整篇论文真正的核心出发点。2 The Derivation of the Proposed Newton-Raphson Algorithm2.1 问题定义已知量管网拓扑（管道连接关系）每根管道的特性：$R_i, n_i$（Hazen‑Williams 或 Darcy‑Weisbach 参数）每个节点的需水量 $q_j$（正值表示流出）固定水头节点（水库、水塔）的水头值 $H0$（$no$ 个）未知量每根管道的流量 $Q_i$（$np$ 个）每个未知节点的水头 $H_j$（$nn$ 个）具体的形式定义对于管段：$Q^T=[Q_1,Q_2,\ldots,Q_{np}]$，形状为 $(1,np)$，表示每一根管道中的流量。$F^T(Q)=[f_1,f_2,\ldots,f_{np}]$，形状为 $(1,np)$，用于表示各管道中的水头损失规律，其中每一项 $f_i$ 都是对应流量 $Q_i$ 的函数，即 $f_i=f_i(Q_i)$。若采用 Hazen–Williams 水头损失函数，则对于每一根管道可写为：$f_i(Q_i)=R_{i}\left|Q_{i}\right|^{n_{i}-1} Q_{i}$.对于节点：$q^T=[q_1,q_2,\ldots,q_{nn}]$，形状为 $(1,nn)$，表示各未知节点的需水量。$H^T=[H_1,H_2,\ldots,H_{nn}]$，形状为 $(1,nn)$，表示各未知节点的水头。$H_0^T=[H_{0_{1}},H_{0_{2}},\ldots,H_{0_{no}}]$，形状为 $(1,no)$，表示各定水头节点的水头。管段与节点的连接关系使用 $A_{12}(i,j)$ （行为管段、列为节点）来描述：$$ A_{12}(i,j)=\begin{cases} 1 & \text{if flow of pipe i enters node j}\\ 0 & \text{if pipe i and node j are not connected}\\ -1 & \text{if flow of pipe i leaves node j} \end{cases} $$另外，$A_{21}=A_{12}^T$. 另外还有 …

使用EPANET+WNTR完成管网水质模拟
type: item
date: 2024-07-21T17:03:00+08:00
description: ❓ 需求分析首先展示下我的问题，以便分析本篇博客中的哪些步骤适用于你的需要。已知条件：有某地区管网的.inp文件，并且有该地区水源节点历史两个月的余氯时间序列数据。求解结果：得到该管网结构中所有节点在历史两个月中的余氯值，更准确的结果如下表展示所示：Time节点 01节点 02……节点 m时刻 012.564.28……2.56时刻 023.564.56……2.56…………………………时刻 n3.443.89……2.56🫡 基础知识什么是WNTR？简单来说：WNTR（Water Network Tool for Resilience）是由美国国家标准与技术研究院（NIST）开发的一套用于分析水分配系统的开源工具，用于模拟和评估给水管网系统的性能和恢复力。主要作用包括：模拟水分配系统、恢复力分析、情景分析，以及优化调度等。简单来说，WNTR就是基于Python的高级版EPANET。EPANET中的Patterns是干什么的？在EPANET中，"Patterns"（模式）是用来表示随时间变化的水需求、压力或其他参数的变化模式。模式是一个数组或一系列因子，这些因子用于调整基础需求或其他输入参数，以模拟系统在不同时间段的行为。应用场景：水需求模式：模式通常用于表示水需求的日变化。例如，居民区的用水需求在早晨和傍晚会有高峰，而在夜间会较低。通过设置不同时间段的需求因子，可以精确模拟真实的用水情况。泵操作模式：模式还可以用于控制泵的操作。例如，可以设置泵在特定时间段的运行速度或开启/关闭状态，以模拟不同的运行策略。压力调节模式：在某些情况下，模式也可以用于调节系统中的压力，模拟压力管理策略。举个例子：假设有一个居民区的用水模式，表示一天24小时内的需求变化：时间步长（小时）: 1 模式因子: [0.5, 0.6, 0.7, 0.8, 1.0, 1.2, 1.5, 1.8, 2.0, 1.8, 1.6, 1.4, 1.2, 1.0, 0.9, 0.8, 0.7, 0.6, 0.5, 0.4, 0.3, 0.3, 0.4, 0.5]在这个模式中，0点到1点的需求因子是0.5，表示这段时间的需求是基础需求的50%。早晨6点到9点的需求因子是1.2到2.0，表示用水需求较高，为基础需求的120%到200%。🕹️ 具体步骤简要介绍在开始细致讲解前，先对整体的操作步骤进行一个大致总结，以便各位观众按需研究：以文本形式打开.inp文件，将管网水源节点的余氯时间序列添加为一个Pattern；在EPANET中打开这个.inp文件，将该Pattern与水源节点相关联，并进行相关设置；使用WNTR完成水力模拟并保存所有节点的水质数据。管网数据文件格式的调整在.inp文件中，可以将管网数据以文本的形式进行编辑，非常方便。那么第一步需要进行的操作就是：如果你的管网文件是.net格式，需要将其调整为.inp格式。这里有个注意点，将.net文件另存为.inp文件不能直接使用 File → Save As... 命令来操作，否则生成的文件会显示打开错误：正确的操作步骤为：File → Export → Network，这样导出的.inp文件才是完整并且可直接进行文本编辑的。将时间序列设置为Pattern完成上面的.inp文件格式转换后，就可以直接使用文本编辑工具（Notepad、VS Code等）打开并进行编辑了。在文件中直接搜索[PATTERNS]，定位到Pattern的存储位置，会有如下的字样：[PATTERNS] ;ID Multipliers ; 1 0.781 0.752 0.738 0.706 0.704 0.73 然后即可在后面进行Pattern的添加，例如：[PATTERNS] ;ID Multipliers ; 1 0.781 0.752 0.738 0.706 0.704 0.73 ; demo 1 0.986378898 0.974703668 0.976000916 0.980541283 0.97340642上面添加的Pattern名为demo，可以使用EPANET打开该文件进行查看：这里有个小问题，如果我的水源节点历史时间序列长度为2个月（60天）、每5分钟一个数据，那么一共会有60*24*(60/5)=17280条数据，也就是说我设置的Pattern长度也必须为17280。同时，还需要进行对应的时间设置：另外还需要将水源节点的余氯值与这个Pattern相关联：关于节点的两个属性：Initial Quality代表了水力模型起始运行那一刻的水质；Source Quality代表了水力模拟过程中，水源水质的变化情况。为什么要在EPANET中进行这些设置呢？就是因为我是用WNTR倒腾了几周还是会有各种各样的问题，一直没有解决，然后才采用了这种方法。…