其他分享
首页 > 其他分享> > WNTR学习笔记-3

WNTR学习笔记-3

作者:互联网

水网模型

水网模型包括接头、水箱、水库、管道、泵、阀门、模式、曲线、控制、源、模拟选项和节点坐标。水管网模型可以从头开始构建,也可以直接从 EPANET INP 文件构建。EPANET INP 文件中与 WNTR 不兼容的部分在局限性中有描述。API文档里有详细的属性信息。

从 INP 文件构建模型

可以使用 EPANET 2.00.12 或 2.2.0 格式直接从 EPANET INP 文件创建水管网模型。以下示例构建了一个供水管网模型。

import wntr

wn = wntr.network.WaterNetworkModel('Net3.inp')#文件名字我改了 

添加元素

水管网模型包含添加连接点、水箱、水库、管道、泵、阀门、模式、曲线、源和控制的方法。当一个元素被添加到模型中时,它会被添加到模型的注册表中。在注册表中,连接点、储罐和水库共享一个名称空间(元素不能重名),而管道、泵和阀门共享一个名称空间。

对于向模型添加元素的每个方法,都有一个相关的对象。例如,该 add_junction方法Junction向模型添加一个 对象。通常,对象不会直接添加到模型中。(ps:对象一般都有自己的属性和拓扑属性,自己的属性直接定义,拓扑属性就得考虑一下其他对象的连接关系)

下面的示例向水管网模型添加了一个连接点和管道。

 wn.add_junction('new_junction', base_demand=10, demand_pattern='1', elevation=10,coordinates=(6, 25))
'''添加一个节点,名字是'new_junction',基础需水量是10(默认单位是IS国际标准单位,立方米/秒,
这个基础需水量往往是平均水量,还涉及一个系数,在软件的说明文件里这样说。但我没太搞明白),
我觉得这是时均用水量,乘系数之后是最高用水量,做模拟的时候用。但是它是可以设置每个小时的用水情况,还得实验一下,回头来看。
需水量模式是‘1’(需水量的逐时变化模式,模拟实际的用水情况),高程是10m,坐标是(6,25)))
''' wn.add_pipe('new_pipe', start_node_name='new_junction', end_node_name='101',length=10, diameter=0.5, roughness=100, minor_loss=0)
'''添加一个管道,名字是'new——pipe',起始节点名是‘new_junction’,尽头节点名是‘101’,长度是10m(默认国际标准单位),直径是0.5m(IS),
粗糙系数是100(这个涉及公式,海曾威廉公式是系数,没有单位(unitless),达西公式是mm,是不是默认的不清楚。minor_loss,小损耗系数,貌似是突扩管用的

删除元素

水网模型注册表会跟踪模型中的其他元素何时使用元素。一个元素只有在所有依赖它的元素都被删除或修改后才能被删除。例如,如果在控制中使用了阀门,则在移除或修改控制之前无法移除该阀门。(那可够麻烦的)类似地,除非连接到该节点的管道被移除,否则无法移除该节点。(我想回去用图形界面了,用这个库在现成的模型上跑个循环还挺好,改节点和下盲棋差不多)

以下示例从模型中删除管段和节点。如果正在移除的元素被另一个元素使用,则会在屏幕上打印一条错误消息,并且不会移除该元素。(这就离谱,要删管段,节点和它连接;要删节点,管段和它连接,感情搞东南互保,粤不奉召),没弄明白,回头来看

wn.remove_link('new_pipe')
wn.remove_node('new_junction')

修改选项

水管网模型选项分为以下几类:时间、水力、水质、求解器、结果、图形和能量。以下示例返回所有具有默认值的模型选项,然后修改仿真持续时间

wn.options #就应该对着GUI看
wn.options.time.duration = 10*3600 #按秒

修改元素属性

要修改元素属性,首先使用get_node或 get_link方法获取元素对象 。以下示例更改了恒定直径储罐的接头标高、管道直径和尺寸。

1 junction = wn.get_node('121')#简单易懂,get121号节点
2 junction.elevation = 5 #高程
3 pipe = wn.get_link('122') #搞到122号管段
4 pipe.diameter = pipe.diameter*0.5 #改变管径,变成原来的一半
5 tank = wn.get_node('1') #1号节点是个水箱,这个要从list上才能看出
6 tank.diameter = tank.diameter*1.1 

下面显示了如何向节点 121 添加附加需水量。

1 print(junction.demand_timeseries_list) #这个junction还是上边的121号节点
2 junction.add_demand(base=1.0, pattern_name='1') #修改基础需水量和模式,模式应该是要先创建出来。 3 print(junction.demand_timeseries_list)

要删除需水量用del

del junction.demand_timeseries_list[1]
print(junction.demand_timeseries_list)

修改时间序列

多个网络属性以时间序列形式存储,包括连接点需水量、水库水头和泵速。时间序列包含基值、模式和类别。添加连接点、水库或泵时,时间序列会添加到水网络模型中。由于连接点可以有多个需求,连接点需求存储为时间序列列表。以下示例修改时间序列。

改变水库供水量:

reservoir = wn.get_node('River')#名字而已
reservoir.head_timeseries.base_value = reservoir.head_timeseries.base_value*0.9

更改连接点需求基值:

junction = wn.get_node('121')
junction.demand_timeseries_list[0].base_value = 0.005

向交汇点添加新的需求时间序列:

pat = wn.get_pattern('3')
junction.demand_timeseries_list.append((0.001, pat))

添加自定义元素属性

只需定义新的属性名称和值,即可将新属性添加到模型元素。这些属性可用于自定义分析和图形。

pipe = wn.get_link('122')#获取管段122
pipe.material = 'PVC' #材料改成PVC

迭代元素

迭代器可用于连接点、罐、水库、管道、泵和阀门。每个迭代器返回元素的名称和元素的对象。以下示例遍历所有管道以修改管道直径。(p.s.:就是为了这点醋才包的这顿饺子)

 for pipe_name, pipe in wn.pipes():
    pipe.diameter = pipe.diameter*0.9

获取元素名称和计数

有多种方法可用于返回元素名称列表和元素数量,如下例所示。元素名称列表可以用作迭代器,尤其是在不需要元素对象的情况下。

node_names = wn.node_name_list
num_nodes = wn.num_nodes
wn.describe(level=0) 

查询元素属性

Network包含查询节点和管段属性的方法。这些方法可以返回所有节点或管段的属性,或者使用指定节点或管段类型(即,节点或管道)的参数或通过指定阈值返回子集的属性。查询方法返回一个带有元素名称和值的 Pandas  series(一维向量)。以下示例返回节点高程、交汇点高程和大于 10 m 的交汇点高程(使用 NumPy 运算符)。(这个功能相当于GUI里面的query/查询)

import numpy as np
node_elevation = wn.query_node_attribute('elevation') #查询_节点_属性
junction_elevation = wn.query_node_attribute('elevation', node_type=wntr.network.model.Junction)
#node是所有的点元件,tank、storage、junction都算进去,junction是管网上的进出水点。 junction_elevation_10 = wn.query_node_attribute('elevation', np.greater_equal,10, node_type=wntr.network.model.Junction)
#水力管网模型.查询_节点_属性(‘高程’,numpy.大于_等于,10,节点_类型=wntr.管网.模型.用水点)

以类似的方式,可以查询链接属性,如下所示。

link_length = wn.query_link_attribute('length', np.less, 50)#长度,小于,50

重置初始条件

当使用相同的水网络模型使用 WNTRSimulator 运行多个模拟时,需要在模拟之间重置初始条件。初始条件包括模拟时间、罐头、水库头、管道状态、泵状态和阀门状态。使用 EpanetSimualtor 时,不需要这一步,因为每次运行 EPANET 时都会在初始条件下启动。(EPANET有default?)

 wn.reset_initial_values() #重置初始条件

 

标签:node,junction,WNTR,模型,元素,笔记,学习,wn,节点
来源: https://www.cnblogs.com/liuxiazhi/p/15363931.html