【Hydro】半图解法调洪演算步骤,附Python代码

news2024/11/15 14:00:14

说明

在这里插入图片描述
半图解法计算步骤如下:
(1)根据水位~库容关系、水位~泄流关系以及计算时段等绘制辅助曲线;
(2)确定起调水位 Z 1 Z_1 Z1及相应的 q 1 q_1 q1 V 1 V_1 V1计算各时段平均入库流量 Q p Q_p Qp
(3)在水位坐标轴上确定Z位置,记为a点。作水平线ac 交A线于b点,使 b c = Q p bc=Q_p bc=Qp。因A 线为 ( V / Δ t − q / 2 ) = f 1 ( Z ) (V/\Delta t-q/2)=f_1(Z) (Vtq/2)=f1(Z),则 a b ab ab等于 ( V / Δ t − q / 2 ) (V/\Delta t-q/2) (Vtq/2) a c ac ac等于 Q , + ( V Δ t − q / 2 ) = ( V / Δ t + q / 2 ) Q,+(V \Delta t- q /2)=(V/\Delta t+q/2) Q,+(VΔtq/2)=(Vt+q/2)
(4)在c点做垂线交B线于d点,由d点作水平线de 交Z坐标轴于e点,可见 d e = a c = ( V / Δ t + q / 2 ) de =ac=(V/\Delta t+q/2) de=ac=(Vt+q/2)。因B线为 ( V / A t + q / 2 ) = f ( Z ) (V/At+q/2)=f(Z) (V/At+q/2)=f(Z) d d d 点位于 B B B线上,则 e e e点为 Z Z Z值。
(5)过 d e de de C C C线交点f作垂线交 q q q坐标轴于 g g g点,则 g g g点为 q q q值。
(6)根据 Z Z Z值,查水位~库容曲线可得 V V V
(7)将 e e e点的 Z Z Z值作为第二时段的 Z Z Z,重复(2)~(6)即可得下一时段的特征值。由此逐时段进行计算,即可完成全部计算。

Python代码

def half_figure():
    z, v, q = util.ZVQ[:, 0], util.ZVQ[:, 1], util.ZVQ[:, 2]
    y = v*10**8/util.DT+q/2
    # 散点图
    plt.scatter(y, q, label='scatter')
    # 插值
    fyq = interpolate.interp1d(y, q, 'quadratic')
    ynew = np.linspace(min(y), max(y), len(y)*100)
    qnew = fyq(ynew)
    plt.plot(ynew, qnew, 'g--', label='interpolate')
    # 拟合
    z1 = np.polyfit(y, q, 3)
    p1 = np.poly1d(z1)
    plt.plot(y, p1(y), 'r-', label='polyfit')
    # 调整图像
    plt.xlabel("$\\frac{V}{\\Delta t}+\\frac{q}{2}(m^3/s)$")
    plt.ylabel("$q(m^3/s)$")
    plt.title("$q-\\frac{V}{\\Delta t}+\\frac{q}{2}$")
    plt.legend()
    plt.grid()
    plt.show()

    # 计算,采用拟合图像
    q_rk = util.QIN
    T = q_rk.size
    (q_qs, q_ck, V, Z) = (0,  # 起始流量
                          np.zeros(T + 1),  # 出库流量
                          np.zeros(T + 1),  # 水库蓄水过程
                          np.zeros(T + 1))  # 水位过程
    Z[0] = util.Z_fx
    V[0] = util.fzv(Z[0])
    for t in range(0, T - 1):
        # print("<DEBUG> time [{}]".format(t))
        Q_T = util.fzq(Z[t])  # 最大过流能力
        q_ck[t] = q_qs + Q_T  # 出库流量过程
        y2 = np.average([q_rk[t], q_rk[t+1]]) - q_ck[t] + V[t] / util.DT + q_ck[t] / 2  # 计算右侧
        q2 = p1(y2)  # 查q2
        q_ck[t+1] = q2  # 放进结果
        V[t+1] = V[t] + ((q_rk[t] + q_rk[t+1]) * util.DT / 2 - (q_ck[t] + q_ck[t+1]) * util.DT / 2)/10**8  # 水量平衡
        Z[t+1] = util.fvz(V[t+1])  # 水位变化
        print(V[t])
    # 画水位变化
    plt.plot(Z[:-1])
    plt.title("$Z$")
    plt.xlabel("$T$")
    plt.ylabel("$Z(m)$")
    zmax = (np.where(Z == np.max(Z))[0][0], np.max(Z).round(1))
    plt.annotate("max{}".format(zmax), xy=zmax)
    plt.xlim(0)
    plt.grid()
    plt.show()
    # 画库容变化
    # plt.plot(V[:-1])
    # plt.title("$V$")
    # plt.xlabel("$T$")
    # plt.ylabel("$V(10^8m^3)$")
    # plt.grid()
    # plt.show()
    # 画入流出流过程线
    plt.plot(q_rk, '.-', label='In')
    inmax = (np.where(q_rk == np.max(q_rk))[0][0], np.max(q_rk))
    plt.plot(q_ck[:-2], 'r--', label='Out')
    omax = (np.where(q_ck == np.max(q_ck))[0][0], np.max(q_ck).round(1))
    plt.title("$In\\quad and\\quad Out(half-figure)$")
    plt.xlabel("$T(\\Delta T=1h)$")
    plt.ylabel("$Q(m^3/s)$")
    plt.annotate("max{}".format(inmax), xy=inmax)
    plt.annotate("max{}".format(omax), xy=omax)
    plt.xlim(0)
    plt.legend()
    plt.grid()
    plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/488719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使OpenGauss支持Python3存储过程

目录 一、概述 二、编译opengauss支持Python3存储过程 三、还有问题 一、概述 OpenGauss是可以支持以Python2、3编写存储过程的&#xff0c;但是这个功能默认不开启&#xff0c;想要这个功能要自己编译源码&#xff0c;目前这部分源码感觉不够成熟&#xff0c;还有一些问题&…

Linux必会100个命令(六十)curl

在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具&#xff0c;可以说是一款很强大的http命令行工具。它支持文件的上传和下载&#xff0c;是综合传输工具。 curl选项比较多&#xff0c;使用man curl或者curl -h获取帮助信息。 -a/--append …

ClickHouse学习笔记(五):ClickHouse 副本与分片

文章目录 1、概述2、数据副本2.1、副本的特点2.2、副本的定义形式 3、ReplicatedMergeTree 原理解析3.1、数据结构3.1.1 ZooKeeper 内的节点结构3.1.2 Entry 日志对象的数据结构 3.2、副本协同的核心流程3.2.1、INSERT 的核心执行流程3.2.2、MERGE 的核心执行流程3.2.3、MUTATI…

【LeetCode股票买卖系列:714. 买卖股票的最佳时机含手续费 | 暴力递归=>记忆化搜索=>动态规划】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【Vue 基础】尚品汇项目-07-动态展示三级联动数据

由于TypeNav是全局组件&#xff0c;因此将“src/pages/Home”中的“TypeNav”文件夹移动到“src/components”文件夹中 在main.js中修改TypeNav的路径 删除测试请求部分代码 当组件挂载完毕&#xff0c;可以向服务器发请求&#xff0c;然后获取数据&#xff0c;显示数据了。在“…

maven从入门到精通 第二章 Maven中运行Java与Web项目

这里写自定义目录标题 一 maven中运行Java项目1.新建项目2. 运行项目2.1查看当前目录2.2 编译项目2.3测试当前项目2.4 生成jar包2.5 迁移数据位置 二 MAVEN中执行Web项目1.配置项目1.1 配置 web.html1.2 配置index.jsp1.3 注册servlet1.4 直接编译运行&#xff0c;发现配置失败…

机器人工程学习和研究的结构性失衡

结论&#xff1a;无解&#xff0c;谁是那屈指可数的幸运者/(ㄒoㄒ)/~~ 供给&#xff1a;培养的机器人工程专业人才 需求&#xff1a;市场企业主体招聘的相关人才 不匹配&#xff0c;错配&#xff0c;导致供给无效。 机器人工程学习和研究的结构性失衡可能是由多种原因导致的…

Java学习-MySQL-备份

Java学习-MySQL-备份 为什么要备份&#xff1a; 1.保证重要的数据不丢失 2.数据转移 MySQL数据库备份的方式&#xff1a; 1.直接拷贝物理文件 2.在Sqlyog 这种可视化工具中导出 3.使用命令行导出&#xff0c;mysqldump&#xff0c;命令行使用 Sqlyog导出表 1.右键表 → 备…

智慧畜牧三维可视化,图扑数字孪生赋能现代农业

前言 "畜牧业是我国重要的农业产业之一&#xff0c;对于国民经济的发展和人民群众的生活具有重要的意义。智慧畜牧作为现代畜牧业的发展方向之一&#xff0c;将信息技术和现代管理相结合&#xff0c;提高养殖效率和品质&#xff0c;为行业的可持续发展注入新的动力。智慧…

PySpark基础入门(5):Spark 内核调度

目录 Spark 内核调度 DAG 内存迭代计算 Spark并行度 Spark任务调度流程 Spark 内核调度 Spark任务调度&#xff1a;如何组织任务去处理RDD中每个分区的数据&#xff0c;根据RDD的依赖关系构建DAG&#xff0c;基于DAG划分Stage&#xff0c;将每个Stage中的任务发到指定节…

盘点那些免费开源、无比精致的图标库,无论是设计还是开发,都很好用

之前分享过很多好看精致的图标库&#xff0c;这对日常设计和开发工作&#xff0c;都很方便&#xff0c;欢迎大家尝试。 css.gg 详细介绍&#xff1a;https://www.thosefree.com/css-gg 一套漂亮的纯 CSS 实现的免费开源图标库&#xff0c;700多个时尚漂亮的 css 图标库&…

本地开发项目删除原有git信息,上传到自己的git仓库

1. 删除原有git信息 进入到项目的目录&#xff0c;右键&#xff0c;选择 git Bash Here 输入 rm -rf .git 查看当前的远程信息&#xff1a;git remote -v 如果有远程信息 使用 git remote rm origin 删除 2.添加自己的远程信息 使用 git remote add origin https://xxxx.git…

分布式事务 --- Seata事务模式、高可用

一、事务模式 1.1、XA模式 XA 规范 是 X/Open 组织定义的分布式事务处理&#xff08;DTP&#xff0c;Distributed Transaction Processing&#xff09;标准&#xff0c;XA 规范 描述了全局的TM与局部的RM之间的接口&#xff0c;几乎所有主流的数据库都对 XA 规范 提供了支持。…

三种常用的以太网端口链路类型:Access、Hybrid和Trunk

以太网是计算机网络中最常用的协议之一&#xff0c;它允许计算机在同一局域网上通信。在以太网中&#xff0c;交换机&#xff08;Switch&#xff09;是一个重要的组件&#xff0c;它们有许多不同的端口&#xff0c;用于连接不同的设备。为了管理和维护这些端口&#xff0c;有三…

Java 数组在内存中的结构是怎样的?数组访问、遍历、复制、扩容、缩容如何编写代码?

Java是一门面向对象的编程语言&#xff0c;数组是其中的重要数据结构之一。在Java中&#xff0c;数组是一种固定长度、有序的数据结构&#xff0c;可以存储一组相同数据类型的元素。在本文中&#xff0c;我们将详细介绍Java数组在内存中的结构。 Java数组的定义 在Java中&…

美国访问学者博士后签证过期后应如何更新?

“美国访问学者类J签证过期后应如何更新&#xff1f;”有读者希望知识人网分享相关经验。今天我们来简单介绍下美国签证免面谈代传递服务&#xff0c;以及其申请条件和相关流程&#xff0c;希望能对大家有所帮助。 首先我们需要明确两个概念&#xff1a; DS2019表的有效期&…

第一章(四):Django框架的模板(DTL):变量、标签、模板过滤器、模板继承、配置模板文件(staticfiles)

系列文章目录 备注&#xff1a;这里是Django系列文章的所有文章的目录 第一章(一) : Django框架如何创建项目、创建应用、创建templates&#xff1b;如何启动django项目&#xff1b; 第一章(二)&#xff1a;Django框架的模式、路由、视图&#xff1b; 第一章(三)&#xff1a;D…

copilot平替tabnine解析

1.copilot 借着最近chatgpt大火的东风&#xff0c;copilot又重新火了一把。 什么是copilot&#xff1f;直接上wiki百科上的解释 GitHub Copilot是GitHub和OpenAI合作开发的一个人工智能工具&#xff0c;用户在使用Visual Studio Code、Microsoft Visual Studio、Vim、Cursor或…

Flask使用Flask-SQLAlchemy对数据库操作详解二(配置、表与表之间一对一、多对一、多对多关系及增删改查参数和代码详细总结)

前面接&#xff1a;Flask使用Flask-SQLAlchemy对数据库操作详解二&#xff08;配置、表与表之间一对一、多对一、多对多关系及增删改查参数和代码详细总结&#xff09; 文章目录 4.增删改查操作4.1添加1. 使用add()方法添加新数据2. 使用create()方法创建新数据 4.2 查询数据1.…

ADAS/AD笔记之特斯拉Autopilot-HW3.0系统

摘要&#xff1a; 目前国内一般直接将高速NOA成为“L2”&#xff1b;因此&#xff0c;复杂度更高的城区NOA&#xff0c;就自然的映射到了“L2”。 一、概述&#xff1a; 特斯拉Autopilot系统首创了NOA这种淡化脱手/脱眼/脱脑&#xff08;驾驶自动化程度&#xff09;逻辑的功能…