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]
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
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=[]