Exemple #1
0
def getID(network_object, object_index):  # ! Sredjeno - TESTIRATI -> RADI
    """
        :param  network_object: string - 'node' ili 'link'
        :param  object_index  : int - index objekta
        :return               : string - vraca ID objekta .

        :info:
        EPANET broji od 1(jedinice) ne kao Python od 0(nule),
        ovo je vazno ukoliko koristimo range f-ju, pisemo range(1,...),
        ne range(0,...).

        :Primer:
        Ukoliko hocemo da dobijemo listu `node` ID-eva, sledi code:
        map(lambda x: getID('node', x), lista_indeksa)
        ili
        [getID('node', i) for i in lista_indeksa]
        Isto je za `link` ID-eve.

    """
    object_id = {
        'node': epa.ENgetnodeid(object_index)[1],
        'link': epa.ENgetlinkid(object_index)[1]
    }

    return object_id[network_object]
Exemple #2
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
Exemple #3
0
    def __init__(self, index, timestep, type_, run_epa=True):
        self.run_epa = run_epa
        self.index = index
        self.timestep = timestep
        self.type_ = LinkType(type_)
        self.failure = list()
        self.outage = list()

        if self.run_epa:
            self.id_ = et.ENgetlinkid(self.index)[1]
    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
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
#Get the list of nodes

ret,nnodes=et.ENgetcount(et.EN_NODECOUNT)
retl,nlinks=et.ENgetcount(et.EN_LINKCOUNT)
links=[]
nodes=[]
pres=[]
time=[]
for index in range(1,nnodes):
    ret,t=et.ENgetnodeid(index)
    nodes.append(t)
    t=[]
    pres.append(t)
print (nodes) 
for index in range(1,nlinks):
    ret,t=et.ENgetlinkid(index)
    links.append(t)
    t=[]
    pres.append(t)
print(links)
     #doctest: +ELLIPSIS
                   #doctest: +NORMALIZE_WHITESPACE

#Get nodes indexes on either side of a link with given index

et.ENgetlinknodes(55) # note the first item in the list should be ignored.

#Hydraulic Simulation
pump=[]