예제 #1
0
파일: epanet.py 프로젝트: ShipengChu/Case-1
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]
예제 #2
0
    def updateResult(self):
        self.hyd_simulation()
        #########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#########
        for index in range(self.demand_dim):
            [errcode, pressure] = et.ENgetnodevalue(index + 1, et.EN_PRESSURE)
            self.cali_nodal_p.append(pressure)
        for index in range(Number_PIPES):
            [errcode, flow] = et.ENgetlinkvalue(index + 1, et.EN_FLOW)
            self.cali_pipe_f.append(flow)

        self.getResidul()
예제 #3
0
    def read_results_from_epanet(self):
        ####	Returning the head solutions (for the first time step, the only one accessible at the moment)
        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)
            ret, P0 = epa.ENgetnodevalue(index, epa.EN_PRESSURE)
            ret, Demand = epa.ENgetnodevalue(index, epa.EN_DEMAND)
            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].P_0 = float(P0)
                self.node_idx[idx].TranH = [float(H0)]
                self.node_idx[idx].demand = float(Demand) / 1000.

            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)
            ret, Roughness = epa.ENgetlinkvalue(index, epa.EN_ROUGHNESS)
            #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
            except:
                print 'Problem getting Flow or Velocity for link:', idx
            try:
                self.link_idx[idx].V_0 = float(V0)
            except:
                print 'Problem getting Velocity for link:', idx
            try:
                self.link_idx[idx].FF_0 = float(2 * 9.81 * (Headloss / 1000.) *
                                                Diameter / (Length * V0**2))
            except:
                print 'Problem getting FF_0 for link:', idx
            try:
                self.link_idx[idx].roughness = Roughness
            except:
                print 'Problem getting Roughness for link:', idx
            try:
                self.link_idx[idx].headloss = Headloss
            except:
                print 'Problem getting Headloss for link:', idx
예제 #4
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()
예제 #5
0
 def get_pressure(self) -> float:
     tmp = float(et.ENgetnodevalue(self.index, et.EN_PRESSURE)[1])
     if not isnan(tmp):
         return tmp
     else:
         print("Index: ", self.index, ", ID: ", self.id_)
         input()
         return 0.0
예제 #6
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]
예제 #7
0
    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
예제 #8
0
    def getSensorValue(self):
        self.hyd_simulation()
        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.measured_sim['Res'] = Res
        self.measured_sim['P'] = P  #Save the simulated sensor pressure
        self.measured_sim['F'] = F  #Save the simulated sensor flow
예제 #9
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()
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
예제 #11
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])
     
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)


#Net = EPANetSimulation(Directory+FileName,pdd=False)
#h=Node.value_type['EN_HEAD']
LeakNodes = ['CA81W6J9C0','CBEA1QV88R','CAFPFW92WV','CADXK24N13']
LeakNo = 3

LeakStartTime = 900*int(np.random.uniform(288,960))
print 'Leak Start',LeakStartTime
ret, no_nodes = epa.ENgetcount(
    epa.EN_NODECOUNT)  ## Getting the number of nodes in the file

Heads = {'Node': 'Head'}  ##Initialising a dictionary to store the Head data in
Pressures = {
    'Node': 'Pressure'
}  ##Initialising a dictionary to store the Pressure data in
Demands = {
    'Node': 'Demand'
}  ##Initialising a dictionary to store the Demand data in

for i in range(1, no_nodes + 1):
    ret, index = epa.ENgetnodeid(i)  ## Getting the node name

    ret, H0 = epa.ENgetnodevalue(
        i, epa.EN_HEAD)  ## getting the nodal head results
    ret, P0 = epa.ENgetnodevalue(
        i, epa.EN_PRESSURE)  ## getting the nodal pressure results
    ret, Demand = epa.ENgetnodevalue(
        i, epa.EN_DEMAND)  ## getting the nodal demand results

    Heads[
        index] = H0  ## putting the nodal head results into the heads dictionary
    Pressures[
        index] = P0  ## putting the nodal pressure results into the pressures dictionary
    Demands[
        index] = Demand  ## putting the nodal demand results into the demands dictionary

f = open(FileName[:-3] + 'Initial.csv', 'wb')
writer = csv.DictWriter(f, Heads.keys())
writer.writeheader()
while True:
    ret, t = et.ENrunH()
    if t % 3600 != 0:
        ret, tstep = et.ENnextH()
        if (tstep <= 0):
            break
    else:
        time.append(t)

        #play with pump status to obtain diferent water level curves

        ret = et.ENsetlinkvalue(Pump1, et.EN_STATUS, p_status_1[inc])
        ret = et.ENsetlinkvalue(Pump2, et.EN_STATUS, p_status_2[inc])

        ret, T1 = et.ENgetnodevalue(Tank1, et.EN_PRESSURE)
        ret, T2 = et.ENgetnodevalue(Tank2, et.EN_PRESSURE)
        ret, T3 = et.ENgetnodevalue(Tank3, et.EN_PRESSURE)
        ret, P1 = et.ENgetlinkvalue(Pump1, et.EN_STATUS)
        ret, P2 = et.ENgetlinkvalue(Pump2, et.EN_STATUS)
        Pump_status1.append(P1)
        Pump_status2.append(P2)
        Tank_level1.append(T1)
        Tank_level2.append(T2)
        Tank_level3.append(T3)
        ret, tstep = et.ENnextH()
        inc = inc + 1
        if (tstep <= 0):
            break
ret = et.ENcloseH()
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)
        # 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()
        a=et.ENsetlinkvalue(nlinks,et.EN_STATUS,1)
        a,b=et.ENgetlinkvalue(nlinks,et.EN_STATUS)
        pump.append(b)
        if (tstep<=0):
            break
ret=et.ENcloseH()
print([round(x,4) for x in pres[94]])

for i in range(0,len(time)):
    print(time[i]/3600)
    print(pump[i])

예제 #16
0
            #play with pump status to obtain diferent water level curves

            ret = et.ENsetlinkvalue(Pump_1A, et.EN_STATUS,
                                    Pump_status_1A_2[inc])
            ret = et.ENsetlinkvalue(Pump_2A, et.EN_STATUS, p_status_2A[inc])
            ret = et.ENsetlinkvalue(Pump_3A, et.EN_STATUS, p_status_3A[inc])
            ret = et.ENsetlinkvalue(Pump_4B, et.EN_STATUS,
                                    Pump_status_4B_2[inc])
            ret = et.ENsetlinkvalue(Pump_5C, et.EN_STATUS,
                                    Pump_status_5C_2[inc])
            ret = et.ENsetlinkvalue(Pump_6D, et.EN_STATUS,
                                    Pump_status_6D_2[inc])
            ret = et.ENsetlinkvalue(Pump_7F, et.EN_STATUS,
                                    Pump_status_7F_2[inc])

            ret, TA = et.ENgetnodevalue(Tank_A, et.EN_PRESSURE)
            ret, P1A = et.ENgetlinkvalue(Pump_1A, et.EN_STATUS)
            ret, P2A = et.ENgetlinkvalue(Pump_2A, et.EN_STATUS)
            ret, P3A = et.ENgetlinkvalue(Pump_3A, et.EN_STATUS)

            ret, TB = et.ENgetnodevalue(Tank_B, et.EN_PRESSURE)
            ret, P4B = et.ENgetlinkvalue(Pump_4B, et.EN_STATUS)

            ret, TC = et.ENgetnodevalue(Tank_C, et.EN_PRESSURE)
            ret, P5C = et.ENgetlinkvalue(Pump_5C, et.EN_STATUS)

            ret, TD = et.ENgetnodevalue(Tank_D, et.EN_PRESSURE)
            ret, P6D = et.ENgetlinkvalue(Pump_6D, et.EN_STATUS)

            ret, TE = et.ENgetnodevalue(Tank_E, et.EN_PRESSURE)
예제 #17
0
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
    ret, t_step = et.ENnextH()
    if t % 3600 == 0:
        time.append(t / 3600)
        pres.append(p)
    if t_step <= 0:
        break

et.ENcloseH()

plt.plot(time, pres)
plt.grid()
plt.xlabel('Time (hr)')
plt.ylabel('Pressure (psi)')
plt.show()