综合能源系统分析的统一能路理论(三):《稳态与动态潮流计算》(Python代码实现)
创始人
2024-05-04 06:31:07
0

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

2.1 六节点热网动态潮流

2.2  六节点热网稳态潮流

 2.3 七节点气网动态潮流

2.4 七节点气网稳态潮流

🎉3 参考文献

🌈4 Python代码、数据


💥1 概述

本文包含“综合能源系统分析的统一能路理论(三):潮流计算”中7节点天然气网络和6节点供热网络的数据与Python源码

注意

1. 第三方package要求:pandas、numpy、scipy、matplotlib

2. python版本要求:python 3.x

3. 给出的源码仅对目标算例负责。举例:7节点气网算例中的压气机扬程保持恒定,故未对其进行傅里叶分解;基值修正部分,标准的做法应对计算得到的流量取绝对值再修正(因为基值是非负的),由于算例中给出的正方向恰好为实际正方向,故源码中未取绝对值。如需扩充、修改算例内容,请自行修改代码。

4. 天然气网络的算例中,RT用声速(340m/s)的平方代替。这是一个常数,具体取值不影响算法本身。

📚2 运行结果

2.1 六节点热网动态潮流

 

2.2  六节点热网稳态潮流

 2.3 七节点气网动态潮流

2.4 七节点气网稳态潮流

 部分代码:

with context('读取数据与处理'):pipe_table = pd.read_excel('./7节点气网稳态data.xls', sheet_name='Branch')node_table = pd.read_excel('./7节点气网稳态data.xls', sheet_name='Node')numpipe = len(pipe_table)  # 支路数numnode = len(node_table)  # 节点数l = pipe_table['长度(km)'].values * 1e3  # 长度,md = pipe_table['管径(mm)'].values / 1e3  # 管径,mlam = pipe_table['粗糙度'].values  # 摩擦系数cp = pipe_table['压气机(MPa)'].values * 1e6  # 支路增压,Pac = 340  # 声速Apipe = np.pi*d**2/4  # 管道截面积v = np.ones(numpipe)*5  # 流速基值with context('基于能路的潮流计算'):MaxIter = 100  # 最大迭代次数err = []  # 误差记录vb = [v.copy()]  # 基值记录for itera in range(MaxIter):# 支路参数Rg = [lam[i]*v[i]/Apipe[i]/d[i] for i in range(numpipe)]Lg = [1/Apipe[i] for i in range(numpipe)]Cg = [Apipe[i]/c**2 for i in range(numpipe)]Ug = [-lam[i]*v[i]**2/2/c**2/d[i] for i in range(numpipe)]# 支路导纳矩阵Yb1, Yb2, Zb, Ub = [], [], [], []f = 0  # 稳态,只取零频率分量for i in range(numpipe):Z, Y = Rg[i], 0za = np.cosh(np.sqrt(Ug[i]**2+4*Z*Y)/2*l[i]) - Ug[i]/np.sqrt(Ug[i]**2+4*Z*Y)*np.sinh(np.sqrt(Ug[i]**2+4*Z*Y)/2*l[i])za = za*np.exp(-Ug[i]*l[i]/2)zb = -2*Z/np.sqrt(Ug[i]**2+4*Z*Y)*np.sinh(np.sqrt(Ug[i]**2+4*Z*Y)/2*l[i])zb = zb*np.exp(-Ug[i]*l[i]/2)zc = -2*Y/np.sqrt(Ug[i]**2+4*Z*Y)*np.sinh(np.sqrt(Ug[i]**2+4*Z*Y)/2*l[i])zc = zc*np.exp(-Ug[i]*l[i]/2)zd = np.cosh(np.sqrt(Ug[i]**2+4*Z*Y)/2*l[i]) + Ug[i]/np.sqrt(Ug[i]**2+4*Z*Y)*np.sinh(np.sqrt(Ug[i]**2+4*Z*Y)/2*l[i])zd = zd*np.exp(-Ug[i]*l[i]/2)Yb1.append((za*zd-zb*zc-za)/zb)  # 稳态计算中,接地支路不起作用Yb2.append((1-zd)/zb)  # 稳态计算中,接地支路不起作用Zb.append(-zb)Ub.append(1-za*zd+zb*zc)yb, ub = np.diag(1/np.array(Zb)), np.diag(Ub)# 节点-支路关联矩阵A = np.zeros([numnode, numpipe])Ap = np.zeros([numnode, numpipe])for row in pipe_table.iterrows():A[int(row[1][1])-1, row[0]] = 1A[int(row[1][2])-1, row[0]] = -1Ap[int(row[1][1])-1, row[0]] = 1Ap[int(row[1][2])-1, row[0]] = 0# 节点导纳矩阵Yg_ = np.matmul(np.matmul(A, yb), A.T) - np.matmul(np.matmul(np.matmul(A, yb), ub), Ap.T)# 节点分类fix_G = node_table[node_table['节点类型']=='定注入'].index.valuesfix_p = node_table[node_table['节点类型']=='定压力'].index.valuesYg_11 = Yg_[fix_G][:,fix_G]Yg_12 = Yg_[fix_G][:,fix_p]Yg_21 = Yg_[fix_p][:,fix_G]Yg_22 = Yg_[fix_p][:,fix_p]assert np.linalg.cond(Yg_11)<1e5  # 确认矩阵不奇异# 形成广义节点注入向量(给定) 与 节点压力向量(给定)Gn_1 = node_table[node_table['节点类型']=='定注入']['注入 (kg/s)'].values.reshape([-1,1])  # kg/sGn_1 -= np.matmul(np.matmul(A[fix_G,:], yb), cp.reshape([-1,1]))pn2 = node_table[node_table['节点类型']=='定压力']['气压 (MPa)'].values.reshape([-1,1]) * 1e6  # Pa# 求解零频率网络方程pn1 = np.matmul(np.linalg.inv(Yg_11), (Gn_1 - np.matmul(Yg_12, pn2))).realGn_2 = (np.matmul(Yg_21, pn1) + np.matmul(Yg_22, pn2))Gn_2 += np.matmul(np.matmul(A[fix_p,:], yb), cp.reshape([-1,1]))# 计算失配误差p = []pn1, pn2 = pn1.reshape(-1).tolist(), pn2.reshape(-1).tolist()for node in node_table['节点类型'].values:p.append(pn1.pop(0) if node=='定注入' else pn2.pop(0))p = np.array(p).reshape([-1,1])I = np.matmul(A.T, p).reshape(-1) + cp.reshape(-1) - (np.array(Ub).reshape([-1,1])*np.matmul(Ap.T, p)).reshape(-1)for i in range(numpipe):I[i] = abs(I[i]*np.diag(yb)[i]/Apipe[i]/(np.matmul(Ap.T, p).reshape(-1)[i])*c**2)err.append(np.linalg.norm(I-v))print('第%d次迭代,失配误差为%.5f'%(itera+1, err[-1]))

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Python代码、数据

相关内容

热门资讯

【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AsusVivobook无法开... 首先,我们可以尝试重置BIOS(Basic Input/Output System)来解决这个问题。...
月入8000+的steam搬砖... 大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...