Accept Merge Request #166: (api -> master)

Merge Request: Add EPANET2 output format

Created By: @王琼钰
Accepted By: @王琼钰
URL: https://tjwater.coding.net/p/tjwatercloud/d/TJWaterServer/git/merge/166?initial=true
This commit is contained in:
王琼钰
2023-03-01 22:06:15 +08:00
20 changed files with 38 additions and 25 deletions

3
.gitignore vendored
View File

@@ -17,3 +17,6 @@ dev_demo.py
*.rpt
*.opt
*.opt.json
# todo
TODO.md

View File

@@ -69,7 +69,7 @@ def set_status(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# link value
#--------------------------------------------------------------
class InpStatus:

View File

@@ -94,7 +94,8 @@ def delete_pattern(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# ;desc
# id mult1 mult2 .....
#--------------------------------------------------------------
def inp_in_pattern(section: list[str]) -> ChangeSet:

View File

@@ -122,7 +122,8 @@ def delete_curve(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# ;type: desc
# id x y
#--------------------------------------------------------------
def inp_in_curve(section: list[str]) -> ChangeSet:

View File

@@ -132,7 +132,7 @@ def set_pump_energy(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# GLOBAL {PRICE/PATTERN/EFFIC} value
# PUMP id {PRICE/PATTERN/EFFIC} value
# DEMAND CHARGE value

View File

@@ -60,7 +60,7 @@ def set_emitter(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# node Ke
#--------------------------------------------------------------
class InpEmitter:

View File

@@ -60,7 +60,7 @@ def set_quality(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# node initqual
#--------------------------------------------------------------
class InpQuality:

View File

@@ -103,7 +103,7 @@ def delete_source(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# node sourcetype quality (pattern)
#--------------------------------------------------------------
class InpSource:

View File

@@ -182,7 +182,7 @@ def set_tank_reaction(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# ORDER {BULK/WALL/TANK} value
# GLOBAL BULK coeff
# GLOBAL WALL coeff

View File

@@ -97,7 +97,7 @@ def delete_mixing(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# TankID MixModel FractVolume
#--------------------------------------------------------------
class InpMixing:

View File

@@ -130,7 +130,6 @@ def set_option(name: str, cs: ChangeSet) -> ChangeSet:
# REQUIRED PRESSURE value
# PRESSURE EXPONENT value#
# TOLERANCE value
# SEGMENTS value (not used)
# ---- Undocumented Options -----
# HTOL value
# QTOL value

View File

@@ -12,7 +12,7 @@ def get_node_coord(name: str, id: str) -> dict[str, float]:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# id x y
#--------------------------------------------------------------
# exception ! need merge to node change set !

View File

@@ -76,7 +76,7 @@ def delete_vertex(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# id x y
#--------------------------------------------------------------
def inp_in_vertex(section: list[str]) -> ChangeSet:

View File

@@ -122,7 +122,10 @@ def delete_junction(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# id elev. (demand) (demand pattern)
# [IN]
# id elev. (demand) (demand pattern) ;desc
# [OUT]
# id elev. ;desc
#--------------------------------------------------------------
class InpJunction:
def __init__(self, line: str) -> None:

View File

@@ -117,8 +117,8 @@ def delete_reservoir(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# id elev (pattern)
# [EPANET2][IN][OUT]
# id elev (pattern) ;desc
#--------------------------------------------------------------
class InpReservoir:
def __init__(self, line: str) -> None:

View File

@@ -145,8 +145,10 @@ def delete_tank(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# id elev initlevel minlevel maxlevel diam (minvol vcurve)
# [EPANET2][IN][OUT]
# id elev initlevel minlevel maxlevel diam (minvol vcurve overflow) ;desc
# xxx
# * YES
#--------------------------------------------------------------
class InpTank:
def __init__(self, line: str) -> None:
@@ -163,7 +165,7 @@ class InpTank:
self.max_level = float(tokens[4])
self.diameter = float(tokens[5])
self.min_vol = float(tokens[6])
self.vol_curve = str(tokens[7]) if num_without_desc >= 8 else None
self.vol_curve = str(tokens[7]) if num_without_desc >= 8 and tokens[7] != '*' else None
self.overflow = str(tokens[8].upper()) if num_without_desc >= 9 else None
self.desc = str(tokens[-1]) if has_desc else None
@@ -192,6 +194,8 @@ def inp_out_tank(name: str) -> list[str]:
min_vol = obj['min_vol']
vol_curve = obj['vol_curve'] if obj['vol_curve'] != None else ''
overflow = obj['overflow'] if obj['overflow'] != None else ''
if vol_curve == '' and overflow != '':
vol_curve = '*'
desc = ';'
lines.append(f'{id} {elevation} {init_level} {min_level} {max_level} {diameter} {min_vol} {vol_curve} {overflow} {desc}')
return lines

View File

@@ -125,7 +125,10 @@ def delete_pipe(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# id node1 node2 length diam rcoeff (lcoeff) (status)
# [IN]
# id node1 node2 length diam rcoeff (lcoeff status) ;desc
# [OUT]
# id node1 node2 length diam rcoeff lcoeff (status) ;desc
#--------------------------------------------------------------
class InpPipe:
def __init__(self, line: str) -> None:

View File

@@ -115,8 +115,8 @@ def delete_pump(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2] Version 1.x is deprecated
# id node1 node2 KEYWORD value {KEYWORD value ...}
# [EPANET2][IN][OUT]
# id node1 node2 KEYWORD value {KEYWORD value ...} ;desc
# where KEYWORD = [POWER,HEAD,PATTERN,SPEED]
#--------------------------------------------------------------
class InpPump:

View File

@@ -123,7 +123,7 @@ def delete_valve(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# [EPANET2][IN][OUT]
# id node1 node2 diam type setting (lcoeff lcurve)
# for GPV, setting is string = head curve id
# for PCV, add loss curve if present

View File

@@ -86,9 +86,8 @@ def set_demand(name: str, cs: ChangeSet) -> ChangeSet:
#--------------------------------------------------------------
# [EPANET2]
# MULTIPLY factor
# node base_demand (pattern)
# [EPANET2][IN][OUT]
# node base_demand (pattern) ;category
#--------------------------------------------------------------
class InpDemand:
def __init__(self, line: str) -> None: