Example #1
0
def openepafile(inp_file_path=''):  # ! Sredjeno - TESTIRATI -> RADI
    """
    :param  inp_file_path = '' : string - Ako ne unesemo putanju, otvara se `dialog-box` da odaberemo .inp-fajl.
    :return                    : Ne vraca nista

    :info:
    Otvaranje EPANET inp-fajla.
    Bilo bi JAKO korisno da se vrednost ove f-je sacuva u nekoj varijabli,
    zato sto putanju fajla koriste neke funkcije kao parametar,
    kao npr f-ja getQH(file_path)...

    :primer:
    epanetfilepath = openepafile()
    """

    if inp_file_path == '':
        # pretvaramo u `string` zato sto je u `unicode-u` ('uPAnekitext')
        epanetfile = str(gui.fileopenbox())

        n = len(epanetfile) - 3
        epa.ENopen(epanetfile, epanetfile[:n] + "rpt", "")

        return epanetfile

    elif inp_file_path != '':

        n = len(inp_file_path) - 3
        epa.ENopen(inp_file_path, inp_file_path[:n] + "rpt", "")

        return inp_file_path
Example #2
0
    def __init__(self,
                 network,
                 output,
                 tasmax,
                 years=82,
                 timestep=60 * 60,
                 tmp_dir='data/tmp/'):
        # super().__init__(output, tasmax, years=years, timestep=timestep, tmp_dir=tmp_dir)
        self.tmp_dir = tmp_dir
        self.tasmax = tasmax
        self.pumps = list()
        self.pipes = list()
        self.nodes = list()
        self.current_time = 0
        self.current_temp = 0.0
        self.timestep = timestep
        self.time = ((48 * 60 * 60) + (years * self.year))
        self.years = years

        rmtree(self.tmp_dir, ignore_errors=True)
        makedirs(tmp_dir)
        et.ENopen(network, output, '')
        et.ENsettimeparam(0, self.time)
        network = tmp_dir + network.split('/')[-1]
        output = tmp_dir + output.split('/')[-1]
        et.ENsaveinpfile(network)
        et.ENclose()
        et.ENopen(network, output, '')
        self.network = network
Example #3
0
def getResidulSqure_EPA(MeaData):
    errcode = et.ENopen(ResultInp, "BUFF.rpt", "")
    errcode = et.ENsolveH()
    ResidulSqure = {}
    ResidulSqure['Res'] = {}
    ResidulSqure['P'] = {}
    ResidulSqure['F'] = {}
    residul = []
    for id in ResID:
        [errcode, index] = et.ENgetnodeindex(id)
        [errcode, value] = et.ENgetnodevalue(index, et.EN_DEMAND)
        ResidulSqure['Res'][id] = (value - MeaData.Data['Res'][id])**2
        residul.append(value - MeaData.Data['Res'][id])
    for id in PreID:
        [errcode, index] = et.ENgetnodeindex(id)
        [errcode, value] = et.ENgetnodevalue(index, et.EN_PRESSURE)
        ResidulSqure['P'][id] = (value - MeaData.Data['P'][id])**2
        residul.append(value - MeaData.Data['P'][id])
    for id in FloID:
        [errcode, index] = et.ENgetlinkindex(id)
        [errcode, value] = et.ENgetlinkvalue(index, et.EN_FLOW)
        ResidulSqure['F'][id] = (value - MeaData.Data['F'][id])**2
        residul.append(value - MeaData.Data['F'][id])
    errcode = et.ENclose()
    return [ResidulSqure, residul]
Example #4
0
def setDiameter(id,value):
    errcode=et.ENopen(Inp,"BUFF.rpt","")
    [errcode,index]=et.ENgetlinkindex(id)
#    [errcode,diameter]=et.ENgetlinkvalue(index,et.EN_DIAMETER)
    et.ENsetlinkvalue(index,et.EN_DIAMETER,value)
    errcode=et.ENsaveinpfile(InpCopy)
    errcode=et.ENclose()
Example #5
0
def setElevation(id,value):
    errcode=et.ENopen(Inp,"BUFF.rpt","")
    [errcode,index]=et.ENgetnodeindex(id)
    [errcode,elevation]=et.ENgetnodevalue(index,et.EN_ELEVATION)
    et.ENsetnodevalue(index,et.EN_ELEVATION,elevation+value)
    errcode=et.ENsaveinpfile(InpCopy)
    errcode=et.ENclose()
    def Import_EPANet_Results(self):
        ret = epa.ENopen(self.filename, self.filename[:-3] + 'rep',
                         self.filename[:-3] + 'out')
        #print ret
        ####	Opening the hydraulics results
        ret = epa.ENopenH()
        #print ret
        ret = epa.ENinitH(0)
        #print ret
        ####	Running the Hydraulics Solver
        epa.ENrunH()

        ####	Returning the head solutions (for the first time step, the only one accessible at the moment)
        ##	Only need to do this for the node elements at the moment as reservoirs don't change
        ret, no_nodes = epa.ENgetcount(epa.EN_NODECOUNT)
        print 'Number of NODES in results file', no_nodes
        for index in range(1, no_nodes + 1):
            ret, idx = epa.ENgetnodeid(index)
            ret, H0 = epa.ENgetnodevalue(index, epa.EN_HEAD)
            try:
                #print Network.node_idx[idx].Name,idx
                if self.node_idx[idx].type == 'Node':
                    self.node_idx[idx].H_0 = float(H0)
                    self.node_idx[idx].TranH = [float(H0)]

            except:
                print 'Problem getting Head for Node:', idx
                continue

        ####	Returning the flow solutions (for the first time step, the only one accessible at the moment)
        ret, no_links = epa.ENgetcount(epa.EN_LINKCOUNT)
        print 'Number of LINKS in results file', no_links
        for index in range(1, no_links + 1):
            ret, idx = epa.ENgetlinkid(index)

            ret, Q0 = epa.ENgetlinkvalue(index, epa.EN_FLOW)

            ret, V0 = epa.ENgetlinkvalue(index, epa.EN_VELOCITY)

            ret, Headloss = epa.ENgetlinkvalue(index, epa.EN_HEADLOSS)
            ret, Length = epa.ENgetlinkvalue(index, epa.EN_LENGTH)
            ret, Diameter = epa.ENgetlinkvalue(index, epa.EN_DIAMETER)
            #print Headloss,Length,Diameter,V0
            #print 2*9.81*(Headloss/1000.)*Diameter / (Length * V0**2)

            try:

                self.link_idx[idx].Q_0 = float(Q0) / 1000.  #Convert to m^3/s
                self.link_idx[idx].V_0 = float(V0)
                self.link_idx[idx].FF_0 = float(2 * 9.81 * (Headloss / 1000.) *
                                                Diameter / (Length * V0**2))
                #self.link_idx[idx].R = float((Headloss/1000.) / (np.pi*Diameter/4. * Length * V0))
            except:
                print 'Problem getting Flow or Velocity for link:', idx
                continue
Example #7
0
def generatePriorDist():
    PriorDist = priorDistributon()
    PriorDist.pred_values = 0
    PriorDist.pred_variance = 0
    PriorDist.prior_values = 0
    PriorDist.prior_variance = 100
    PriorDist.node_id = []
    errcode = et.ENopen(Inp, "BUFF.rpt", "")
    for i in range(DEMAND_NUM):
        [errcode, id] = et.ENgetnodeid(i + 1)
        PriorDist.node_id.append(id)
    errcode = et.ENclose()

    return PriorDist
Example #8
0
def getResidulSqure_EPA(MeaData):
    errcode = et.ENopen(ResultInp, "BUFF.rpt", "")
    errcode = et.ENsolveH()
    ResidulSqure = {}
    ResidulSqure['Res'] = {}
    ResidulSqure['P'] = {}
    ResidulSqure['F'] = {}
    print_R_RES = 0
    print_R_Pre = 0
    print_R_Flo = 0
    residul = []
    for id in MeaData.ResID:
        [errcode, index] = et.ENgetnodeindex(id)
        [errcode, value] = et.ENgetnodevalue(index, et.EN_DEMAND)
        ResidulSqure['Res'][id] = (value - MeaData.Data['Res'][id])**2
        print_R_RES = print_R_RES + ResidulSqure['Res'][id]
        residul.append(value - MeaData.Data['Res'][id])
    if (len(MeaData.ResID) > 0):
        print_R_RES = print_R_RES / len(MeaData.ResID)

    for id in MeaData.PreID:
        [errcode, index] = et.ENgetnodeindex(id)
        [errcode, value] = et.ENgetnodevalue(index, et.EN_PRESSURE)
        ResidulSqure['P'][id] = (value - MeaData.Data['P'][id])**2
        print_R_Pre = print_R_Pre + ResidulSqure['P'][id]
        residul.append(value - MeaData.Data['P'][id])
    if (len(MeaData.PreID) > 0):
        print_R_Pre = print_R_Pre / len(MeaData.PreID)

    for id in MeaData.FloID:
        [errcode, index] = et.ENgetlinkindex(id)
        [errcode, value] = et.ENgetlinkvalue(index, et.EN_FLOW)
        ResidulSqure['F'][id] = (value - MeaData.Data['F'][id])**2
        print_R_Flo = print_R_Flo + ResidulSqure['F'][id]
        residul.append(value - MeaData.Data['F'][id])
    if (len(MeaData.FloID) > 0):
        print_R_Flo = print_R_Flo / len(MeaData.FloID)

    errcode = et.ENclose()
    print('ave Squre error:          Res          Flo               Pre')
    print('               ' + str(print_R_RES) + '    ' + str(print_R_Flo) +
          '    ' + str(print_R_Pre))
    return [ResidulSqure, residul]
def Import_EPANet_Results(inp_filename, Network=None):
    if Network == None:
        Network = Import_EPANet_Geom(inp_filename)

    ret = epa.ENopen(inp_filename, inp_filename[:-3] + 'rep',
                     inp_filename[:-3] + 'out')

    ####	Opening the hydraulics results
    err(epa.ENopenH())
    err(epa.ENinitH(0))

    ####	Running the Hydraulics Solver
    epa.ENrunH()

    ####	Returning the head solutions (for the first time step, the only one accessible at the moment)
    ret, no_nodes = epa.ENgetcount(epa.EN_NODECOUNT)
    for index in range(1, no_nodes):
        ret, idx = epa.ENgetnodeid(index)
        ret, H0 = epa.ENgetnodevalue(index, epa.EN_HEAD)
        try:
            #print Network.node_idx[idx].Name,idx
            Network.node_idx[idx].H_0 = H0
        except:
            print 'Problem getting Head for Node:', idx
            continue

    ####	Returning the flow solutions (for the first time step, the only one accessible at the moment)
    ret, no_links = epa.ENgetcount(epa.EN_LINKCOUNT)
    for index in range(1, no_nodes):
        ret, idx = epa.ENgetlinkid(index)
        ret, Q0 = epa.ENgetlinkvalue(index, epa.EN_FLOW)
        ret, V0 = epa.ENgetlinkvalue(index, epa.EN_VELOCITY)
        try:

            Network.link_idx[idx].Q_0 = Q0
            Network.link_idx[idx].V_0 = V0
        except:
            print 'Problem getting Flow or Velocity for link:', idx
            continue
Example #10
0
    def updateResult(self, ResultInp):
        errcode = et.ENopen(ResultInp, 'r.rtp', '')
        errcode = et.ENsolveH()
        #########update the calibrated value at sensors#########
        Res = {}
        P = {}
        F = {}

        for id in self.sensorID_Res:
            [errcode, index] = et.ENgetnodeindex(id)
            [errcode, demand] = et.ENgetnodevalue(index, et.EN_DEMAND)
            Res[id] = demand
        for id in self.sensorID_P:
            [errcode, index] = et.ENgetnodeindex(id)
            [errcode, pressure] = et.ENgetnodevalue(index, et.EN_PRESSURE)
            P[id] = pressure

#       for id in self.sensorID_F:
#           [errcode,index]=et.ENgetlinkindex(id)
#           [errcode,flow]=et.ENgetlinkvalue(index,et.EN_FLOW)
#           F[id]=flow
        self.cali_sensor['Res'] = Res
        self.cali_sensor['P'] = P  #Save the simulated sensor pressure
        #       self.cali_sensor['F']=F#Save the simulated sensor flow
        #########update the calibrated nodal pressure and pipe flow rate#########
        self.cali_demand_values = []
        self.cali_nodal_p = []  #需要初始化
        self.cali_pipe_f = []
        for index in range(self.demand_dim):
            [errcode, pressure] = et.ENgetnodevalue(index + 1, et.EN_PRESSURE)
            self.cali_nodal_p.append(pressure)
            [errcode, demand] = et.ENgetnodevalue(index + 1, et.EN_DEMAND)
            self.cali_demand_values.append(demand)
        for index in range(Number_PIPES):
            [errcode, flow] = et.ENgetlinkvalue(index + 1, et.EN_FLOW)
            self.cali_pipe_f.append(flow)
        errcode = et.ENclose()
Example #11
0
 def hyd_simulation(self, ResultInp):
     errcode = et.ENopen(ResultInp, 'r.rtp', '')
     errcode = et.ENsolveH()
pressure = Node.value_type[
    'EN_PRESSURE']  #this gives the water level of the tank for each increment
for i in range(0, 27):
    print("%.3f" % es.network.nodes['1'].results[pressure][i])
    print("%.3f" % es.network.nodes['2'].results[pressure][i])
    print("%.3f \n" % es.network.nodes['3'].results[pressure][i])
'''
Simulation
'''
import os
from random import randint
from epanettools import epanet2 as et
from epanettools.examples import simple

file = os.path.join(os.path.dirname(simple.__file__), 'Net3.inp')
ret = et.ENopen(file, "Net3B.rpt", "")
time = []
Pump_status1 = []
Pump_status2 = []
Tank_level1 = []
Tank_level2 = []
Tank_level3 = []

et.ENopenH()
et.ENinitH(0)

inc = 0
p_status_1 = []
for i in range(0, 25):
    p_status_1.append(randint(0, 0))
p_status_2 = []
Example #13
0
    Tank_level_C2 = []
    d_C = []

    cost_6D_2 = []
    Tank_level_D2 = []
    d_D = []

    Tank_level_E2 = []

    cost_7F_2 = []
    Tank_level_F2 = []
    d_F = []
    network_real = "richmondNet_2_Under"
    file2 = os.path.join(os.path.dirname(simple.__file__),
                         network_real + '.inp')
    ret = et.ENopen(file2, network_real + ".rpt", "")

    et.ENopenH()
    et.ENinitH(0)

    while True:
        ret, t = et.ENrunH()

        if t % 3600 != 0:
            ret, tstep = et.ENnextH()

            if (tstep <= 0):
                break
        else:
            time.append(t)
Example #14
0
"""
This workflow runs extended-period simulation of CTOWN network and plots pressure reads
   for junction J193
Dependencies: epanettools and matplot modules
"""

from epanettools import epanet2 as et
from epanettools.epanettools import EPANetSimulation
import matplotlib.pyplot as plt
import os

dir = os.path.abspath('testEPANETTOOLS.py')
dir = '\\'.join(dir.split('\\')[0:-2])
file_directory = dir + '\\resources\\CTOWN.inp'

ret = et.ENopen(file_directory, "CTOWN.rpt", "")
es = EPANetSimulation(file_directory)
n = es.network.nodes

junction = 'J193'

pres = []
nodes = []
time = []

et.ENopenH()
et.ENinitH(0)
while True:
    ret, t = et.ENrunH()
    ret, p = et.ENgetnodevalue(n[junction].index, et.EN_PRESSURE)
    print t, p
# and open the template in the editor.

__author__ = "assela"
__date__ = "$Sep 30, 2011 12:59:16 PM$"


def err(e):
    if (e > 0):
        print((e, et.ENgeterror(e, 25)))
        exit(5)


if __name__ == "__main__":

    from epanettools import epanet2 as et
    ret = et.ENopen("Net3.inp", "Net3.rpt", "")
    err(ret)
    ret, result = et.ENgetcount(et.EN_LINKCOUNT)
    err(ret)
    print(("Network has ", result, " links."))
    ret, result = et.ENgetcount(et.EN_NODECOUNT)
    err(ret)
    print(("Network has ", result, " nodes."))
    node = '105'
    ret, index = et.ENgetnodeindex(node)
    print(("Node ", node, " has index : ", index))

    ret, nnodes = et.ENgetcount(et.EN_NODECOUNT)
    nodes = []
    pres = []
    for index in range(1, nnodes):
Example #16
0
def openEPANET(INP):
    errcode = et.ENopen(INP, "BUFF.rpt", "")
    if (errcode > 100):
        print('error in open INP')
Example #17
0
def copyInp(INP):
    errcode=et.ENopen(INP,"BUFF.rpt","")
    errcode=et.ENsaveinpfile(InpCopy)
    errcode=et.ENclose()
def open_EPANET(filename):
    ret = epa.ENopen(filename, filename[:-3] + 'rep', filename[:-3] + 'out')
Example #19
0
 def test_basic(self):
     import os
     from epanettools import epanet2 as et
     from epanettools.examples import simple 
     
     file = os.path.join(os.path.dirname(simple.__file__),'Net3.inp')
     ret=et.ENopen(file,"Net3.rpt","Net3.dat")
     self.err(et,ret)
     
     ret,result=et.ENgetcount(et.EN_LINKCOUNT)
     
     # #links
     assert (result==119)
     
     ret,result=et.ENgetcount(et.EN_NODECOUNT)
     # # nodes
     assert(result==97)
 
     node='105'
     ret,index=et.ENgetnodeindex(node)
     # index of node '105'
     assert(index==12)
     
     #
     print(et.ENgetlinknodes(55))
     assert all([i==j for i,j in zip(et.ENgetlinknodes(55),[0,5,46])])
  
 
     ret,nnodes=et.ENgetcount(et.EN_NODECOUNT)
     nodes=[]
     pres=[]
     time=[]
     for index in range(1,nnodes):
         ret,t=et.ENgetnodeid(index)
         nodes.append(t)
         t=[]
         pres.append(t)
     print(nodes)
     assert(nodes==['10', '15', '20', '35', '40', '50', 
                    '60', '601', '61', '101', '103', '105',
                    '107', '109', '111', '113', '115', '117',
                    '119', '120', '121', '123', '125', '127', 
                    '129', '131', '139', '141', '143', '145',
                    '147', '149', '151', '153', '157', '159', 
                    '161', '163', '164', '166', '167', '169',
                    '171', '173', '177', '179', '181', '183', 
                    '184', '185', '187', '189', '191', '193', 
                    '195', '197', '199', '201', '203', '204', 
                    '205', '206', '207', '208', '209', '211', 
                    '213', '215', '217', '219', '225', '229', 
                    '231', '237', '239', '241', '243', '247', 
                    '249', '251', '253', '255', '257', '259', 
                    '261', '263', '265', '267', '269', '271', 
                    '273', '275', 'River', 'Lake', '1', '2'])
 
     
     self.err(et,et.ENopenH())
     self.err(et,et.ENinitH(0))
     while True :
         ret,t=et.ENrunH()
         time.append(t)
         self.err(et,ret)
         # Retrieve hydraulic results for time t
         for  i in range(0,len(nodes)):
             ret,p=et.ENgetnodevalue(i+1, et.EN_PRESSURE )
             pres[i].append(p)
         ret,tstep=et.ENnextH()
         self.err(et,ret)
         if (tstep<=0):
             break
     ret=et.ENcloseH()
     print(pres[12])
     diffs=[abs(i-j) for i,j in zip(pres[12],
                                          [54.085777282714844, 60.99293518066406, 
                                           63.03010940551758, 63.56983947753906, 
                                           66.80770874023438, 63.989463806152344, 
                                           63.49333190917969, 63.895835876464844, 
                                           63.440582275390625, 63.90030288696289, 
                                           63.43799591064453, 63.438758850097656, 
                                           63.03285598754883, 63.005157470703125, 
                                           63.1264533996582, 63.40403366088867, 
                                           56.72084045410156, 56.622596740722656, 
                                           56.47193908691406, 56.478843688964844, 
                                           56.27402114868164, 55.576839447021484, 
                                           55.0153923034668, 55.81755065917969, 
                                           55.200626373291016, 53.8864860534668, 
                                           55.024227142333984])]
     print([i for i in diffs])
     assert all([i<1.e-5 for i in  diffs])
     
 def setUp(self):
     print("SETUP!")
     self.file = os.path.join(os.path.dirname(simple.__file__), 'Net3.inp')
     self.Error(et.ENopen(self.file, "t.rpt", ""))
Tank_C = es_nodes['C'].index
Tank_A = es_nodes['A'].index
Tank_D = es_nodes['D'].index
Tank_B = es_nodes['B'].index
Tank_E = es_nodes['E'].index
Tank_F = es_nodes['F'].index
'''
Simulation
'''
import os
from random import randint
from epanettools import epanet2 as et
from epanettools.examples import simple
file = os.path.join(os.path.dirname(simple.__file__), 'richmondNet_1.inp')
ret = et.ENopen(file, "richmondNet_1.rpt", "")

time = []
Pump_status_1A = []
Pump_status_2A = []
Pump_status_3A = []
Pump_status_4B = []
Pump_status_5C = []
Pump_status_6D = []
Pump_status_7F = []
Tank_level_A = []
Tank_level_B = []
Tank_level_C = []
Tank_level_D = []
Tank_level_E = []
Tank_level_F = []
Example #22
0
 def open_epanet_file(self):
     ret = epa.ENopen(self.filename, self.filename[:-3] + 'rep',
                      self.filename[:-3] + 'out')
import numpy as np
import pylab as pp
import csv
from epanettools.epanettools import EPANetSimulation, Node, Link, Network, Nodes,Links, Patterns, Pattern, Controls, Control
from epanettools import epanet2 as et
Directory = 'Projects/Xu_Leak_Detection/'
# FileName = '250701 K709vs2-Export.inp'
FileName = 'ExampleNetwork1.inp'
FileName = 'LeakTestNet.inp'

ret=et.ENopen(Directory+FileName,Directory + 'Temp.rpt',"")
et.ENopenH()
et.ENinitH(0)


time=[]
nodes={}
ret,nnodes=et.ENgetcount(et.EN_NODECOUNT)
for index in range(1,nnodes+1):
    ret,t=et.ENgetnodeid(index)
    nodes[t] = []

for index in range(1,nnodes):
    ret,d = et.ENgetnodevalue(index,et.EN_BASEDEMAND)

    if d == 0.0:
        Pete = np.random.randint(1, 6)
    #if Pete == 1:
        ret1 = et.ENsetnodevalue(index, et.EN_PATTERN, 1)
        ret2 = et.ENsetnodevalue(index,et.EN_BASEDEMAND,300.0)
Example #24
0
    'EN_PRESSURE']  #this gives the water level of the tank for each increment
for i in range(0, 27):
    print("%.3f" % es.network.nodes['C'].results[pressure][i])
    print("%.3f" % es.network.nodes['A'].results[pressure][i])
    print("%.3f \n" % es.network.nodes['D'].results[pressure][i])

es._close
'''
Simulation
'''
import os
from random import randint
from epanettools import epanet2 as et
from epanettools.examples import simple
file = os.path.join(os.path.dirname(simple.__file__), 'richmondNet_1.inp')
ret = et.ENopen(file, "richmondNet.rpt_1", "")

time = []
Pump_status_1A = []
Pump_status_2A = []
Pump_status_3A = []
Pump_status_4B = []
Pump_status_5C = []
Pump_status_6D = []
Pump_status_7F = []
Tank_level_A = []
Tank_level_B = []
Tank_level_C = []
Tank_level_D = []
Tank_level_E = []
Tank_level_F = []