WNTR学习笔记

WNTR是基于EPANET2水力水质模拟的一个Python库. 使用WNTR, 我们不必再使用EPANET软件进行模拟, WNTR提供的功能也比原生的EPANET功能要强大许多.

导入

import wntr

加载管网模型

inp_file = "Net3.inp"

wn = wntr.network.WaterNetworkModel(inp_file)

加载inp之后的相关函数

print(wn.junction_name_list)    #获得junciton的list

print(wn.node_name_list) # node

print(wn.link_name_list) # link  仅仅获取管网名称 不包含前后节点

画出模型图

wntr.graphics.plot_network(wn, title=wn.name)

水力模拟

sim = wntr.sim.EpanetSimulator(wn)

results = sim.run_sim()

结果显示

results.node['quality'].loc[ : 3*3600]

具体显示

print(epanet_sim_results.node.keys()) # node有什么属性

print(epanet_sim_results.link.keys())

print(epanet_sim_results.node['pressure'].loc[: 3*3600])    # 限定显示水力时间

print(epanet_sim_results.link['flowrate'].loc[: 3*3600])

node后demand pressure quality 可选择节点的属性, loc后加限定时间, 一般3600s为一个间隔

results.node与results.link都是下的属性都是DataFrame属性

转换为图

G = wn.get_graph()

print(G.nodes())

print(G.node)

print(G.edges())

获取首尾节点

for i in wn.link_name_list:    # 获取管线的名称

    s = wn.links._data[i]._start_node         #  获取管线首尾节点

    e = wn.links._data[i]._end_node

    print(i, s, e)

设置node的初始水质

for i in wn.node_name_list:    # 获取node的名称

    wn.nodes._data[i]._initial_quality = 0   # 设置初始节点的水质都为0

除去源注入(某些模型可能会有初始的源注入)

for i in wn.source_name_list:

    wn.remove_source(i)

设置报告间隔

wn.options.time.report_timestep = 600

其他的如水力模拟时间, 水质模拟时间等都可以在options中设置

源注入的一个例子

import wntr


# Create a water network model
inp_file = "ky8.inp"

wn = wntr.network.WaterNetworkModel(inp_file)

wn.options.quality.mode = 'CHEMICAL' #设定为化学物质

#要跳过水质模拟,请按如下方式设置“质量”选项:
#wn.options.quality.mode = 'NONE'

# 水质模拟
wn.options.time.duration = 12*3600
wn.options.time.report_timestep = 600

source_pattern = wntr.network.elements.Pattern.binary_pattern('SourcePattern',

                                                              start_time=3*3600,

                                                              end_time=24*3600,

                                                              duration=wn.options.time.duration,

                                                              step_size=wn.options.time.pattern_timestep)

wn.add_pattern('SourcePattern', source_pattern)

wn.add_source('Source1', 'J-10', 'SETPOINT', 100000, 'SourcePattern')  #name, node_name, source_type, quality, pattern=None

epanet_sim = wntr.sim.EpanetSimulator(wn)
epanet_sim_results = epanet_sim.run_sim()

print(epanet_sim_results.node['quality'].loc[:12*3600])

 

  • 8
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值