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

news/2024/11/28 3:25:07/

说明

在这里插入图片描述
半图解法计算步骤如下:
(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)根据水量平衡得到下一时刻的 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.QINT = 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_fxV[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)  # 查q2q_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.ppmy.cn/news/61761.html

相关文章

详细版简单易学版TypeScript各类型声明

假如本地新建了一个b.ts文件 安装TypeScript&#xff1a;npm install -g typescript 编译代码&#xff1a;tsc b.ts 运行js&#xff1a;node b.js 在终端输入 tsc -init 生成 tsconfig.json 文件 类型注解&#xff1a;TypeScript里的类型注解是一种轻量级的为函数或变量添加约束…

vue3+webpack4 前端优化首屏时间

项目背景 中小项目&#xff0c;Vue-cli3 vue2 webpack4 目标 缩短白屏时间&#xff0c;用户能够更快的看到我的页面&#xff01; 白屏时间&#xff1a;从打开页面到看到页面&#xff0c;中间白屏停留的时间。 方向 1.减少资源体积&#xff0c;从而缩短请求时间 2.减少资…

C# 使用PdfiumViewer实现对PDF文档打印预览(二)

文章目录 前言关于PdfiumViewer配置PdfiumViewer环境PdfiumViewer 打开并预览本地的PDF文档PdfiumViewer 预览PDF文件流小节附录 前言 想要对PDF文档进行预览和打印&#xff0c;实际上这个文档可以是存在的&#xff0c;也可以是一个PDF文件流&#xff08;本地并没有PDF文件&am…

5 系统数据文件和信息

5.1 口令文件 口令文件包含了下表中所示的各字段&#xff0c;这些字段包含在<pwd.h>中定义的passwd结构中。 /etc/passwd文件中的字段 说 明struct passwd 成员用户名char *pw_name加密口令char *pw_passwd数值用户IDuid_t pw_uid数值组IDgid_t pw_gid注释字段char *pw_g…

Linux 创建监控用户

1.创建用户和登录shell useradd -s /bin/bash monitor 2.修改用户密码 passwd monitor 3.创建用户shell执行命令目录 mkdir /home/monitor/.bin 4.root修改用户的shell配置文件 chown root. /home/monitor/.bash_profile chmod 755 /home/monitor/.bash_profile 5.修改ba…

数字化转型导师坚鹏:如何制定企业数字化转型年度培训规划

如何制定企业数字化转型年度培训规划 ——以推动企业数字化转型战略落地为核心&#xff0c;实现知行果合一 课程背景&#xff1a; 很多企业都在开展企业数字化转型培训工作&#xff0c;目前存在以下问题急需解决&#xff1a; 缺少针对性的企业数字化转型年度培训规划 不清…

Java8异步编程的技巧

以下是Java8异步编程的技巧&#xff1a; 1. CompletableFuture CompletableFuture是Java8中新增的一个类&#xff0c;它提供了一种简单而强大的异步编程方式。通过使用CompletableFuture&#xff0c;我们可以轻松地创建和组合异步任务&#xff0c;让代码更加简洁和易于维护。…

服装生产erp都有哪些功能?该如何选服装生产erp?

各位开服装工厂的老板是否遇到这些难题&#xff1a; 库存管理成本高&#xff0c;大量库存积压导致资金紧张&#xff1b; 车间用人成本高&#xff0c;工人工作效率低&#xff0c;浪费大量时间和资金成本&#xff1b; 生产、加工、成品出库等各环节无法顺畅衔接&#xff0c;补单困…