From fa79522054c531d420292b05579c23c06fb1a278 Mon Sep 17 00:00:00 2001 From: "WQY\\qiong" Date: Wed, 1 Mar 2023 23:56:09 +0800 Subject: [PATCH] Supplement options --- api/__init__.py | 1 + api/s23_options.py | 102 ++++++++++++++++--------------- script/sql/create/23.options.sql | 28 +++++---- test_tjnetwork.py | 24 ++++++++ tjnetwork.py | 4 ++ 5 files changed, 96 insertions(+), 63 deletions(-) diff --git a/api/__init__.py b/api/__init__.py index 6789d7d..8be1cdf 100644 --- a/api/__init__.py +++ b/api/__init__.py @@ -90,6 +90,7 @@ from .s21_times import TIME_STATISTIC_NONE, TIME_STATISTIC_AVERAGED, TIME_STATIS from .s21_times import get_time_schema, get_time, set_time from .s23_options import OPTION_UNITS_CFS, OPTION_UNITS_GPM, OPTION_UNITS_MGD, OPTION_UNITS_IMGD, OPTION_UNITS_AFD, OPTION_UNITS_LPS, OPTION_UNITS_LPM, OPTION_UNITS_MLD, OPTION_UNITS_CMH, OPTION_UNITS_CMD +from .s23_options import OPTION_PRESSURE_PSI, OPTION_PRESSURE_KPA, OPTION_PRESSURE_M from .s23_options import OPTION_HEADLOSS_HW, OPTION_HEADLOSS_DW, OPTION_HEADLOSS_CM from .s23_options import OPTION_UNBALANCED_STOP, OPTION_UNBALANCED_CONTINUE from .s23_options import OPTION_DEMAND_MODEL_DDA, OPTION_DEMAND_MODEL_PDA diff --git a/api/s23_options.py b/api/s23_options.py index b62d61f..5f4dd99 100644 --- a/api/s23_options.py +++ b/api/s23_options.py @@ -11,13 +11,14 @@ OPTION_UNITS_MLD = 'MLD' OPTION_UNITS_CMH = 'CMH' OPTION_UNITS_CMD = 'CMD' +OPTION_PRESSURE_PSI = 'PSI' +OPTION_PRESSURE_KPA = 'KPA' +OPTION_PRESSURE_M = 'M' + OPTION_HEADLOSS_HW = 'H-W' OPTION_HEADLOSS_DW = 'D-W' OPTION_HEADLOSS_CM = 'C-M' -#OPTION_HYDRAULICS_USE = 'USE' -#OPTION_HYDRAULICS_SAVE = 'SAVE' - OPTION_UNBALANCED_STOP = 'STOP' OPTION_UNBALANCED_CONTINUE = 'CONTINUE' @@ -31,32 +32,34 @@ OPTION_QUALITY_TRACE = 'TRACE' element_schema = {'type': 'str' , 'optional': True , 'readonly': False} + def get_option_schema(name: str) -> dict[str, dict[str, Any]]: return { 'UNITS' : element_schema, + 'PRESSURE' : element_schema, 'HEADLOSS' : element_schema, - #'HYDRAULICS' : element_schema, + 'QUALITY' : element_schema, + 'UNBALANCED' : element_schema, + 'PATTERN' : element_schema, + 'DEMAND MODEL' : element_schema, + 'DEMAND MULTIPLIER' : element_schema, + 'EMITTER EXPONENT' : element_schema, 'VISCOSITY' : element_schema, + 'DIFFUSIVITY' : element_schema, 'SPECIFIC GRAVITY' : element_schema, 'TRIALS' : element_schema, 'ACCURACY' : element_schema, - 'FLOWCHANGE' : element_schema, 'HEADERROR' : element_schema, - 'CHECKFREQ' : element_schema, - 'MAXCHECK' : element_schema, - 'DAMPLIMIT' : element_schema, - 'UNBALANCED' : element_schema, - 'DEMAND MODEL' : element_schema, + 'FLOWCHANGE' : element_schema, 'MINIMUM PRESSURE' : element_schema, 'REQUIRED PRESSURE' : element_schema, 'PRESSURE EXPONENT' : element_schema, - 'PATTERN' : element_schema, - 'DEMAND MULTIPLIER' : element_schema, - 'EMITTER EXPONENT' : element_schema, - 'QUALITY' : element_schema, - 'DIFFUSIVITY' : element_schema, 'TOLERANCE' : element_schema, - #'MAP' : element_schema, - } + 'HTOL' : element_schema, + 'QTOL' : element_schema, + 'RQTOL' : element_schema, + 'CHECKFREQ' : element_schema, + 'MAXCHECK' : element_schema, + 'DAMPLIMIT' : element_schema } def get_option(name: str) -> dict[str, Any]: @@ -106,37 +109,36 @@ def set_option(name: str, cs: ChangeSet) -> ChangeSet: #-------------------------------------------------------------- -# [EPANET2] -# UNITS CFS/GPM/MGD/IMGD/AFD/LPS/LPM/MLD/CMH/CMD/SI -# PRESSURE PSI/KPA/M -# HEADLOSS H-W/D-W/C-M -# HYDRAULICS USE/SAVE filename -# QUALITY NONE/AGE/TRACE/CHEMICAL (TraceNode) -# MAP filename -# VERIFY filename -# UNBALANCED STOP/CONTINUE {Niter} -# PATTERN id -# DEMAND MODEL DDA/PDA -# DEMAND MULTIPLIER value -# EMITTER EXPONENT value -# VISCOSITY value -# DIFFUSIVITY value -# SPECIFIC GRAVITY value -# TRIALS value -# ACCURACY value# -# HEADERROR value -# FLOWCHANGE value -# MINIMUM PRESSURE value -# REQUIRED PRESSURE value -# PRESSURE EXPONENT value# -# TOLERANCE value -# ---- Undocumented Options ----- -# HTOL value -# QTOL value -# RQTOL value -# CHECKFREQ value -# MAXCHECK value -# DAMPLIMIT value +# [EPANET2][IN][OUT] +# UNITS CFS/GPM/MGD/IMGD/AFD/LPS/LPM/MLD/CMH/CMD/SI +# PRESSURE PSI/KPA/M +# HEADLOSS H-W/D-W/C-M +# QUALITY NONE/AGE/TRACE/CHEMICAL (TraceNode) +# UNBALANCED STOP/CONTINUE {Niter} +# PATTERN id +# DEMAND MODEL DDA/PDA +# DEMAND MULTIPLIER value +# EMITTER EXPONENT value +# VISCOSITY value +# DIFFUSIVITY value +# SPECIFIC GRAVITY value +# TRIALS value +# ACCURACY value# +# HEADERROR value +# FLOWCHANGE value +# MINIMUM PRESSURE value +# REQUIRED PRESSURE value +# PRESSURE EXPONENT value# +# TOLERANCE value +# HTOL value +# QTOL value +# RQTOL value +# CHECKFREQ value +# MAXCHECK value +# DAMPLIMIT value +# ---- Unsupported Options ----- +# HYDRAULICS USE/SAVE filename +# MAP filename #-------------------------------------------------------------- def inp_in_option(section: list[str]) -> ChangeSet: if len(section) > 0: @@ -146,9 +148,9 @@ def inp_in_option(section: list[str]) -> ChangeSet: continue tokens = s.strip().split() - if tokens[0].upper() == 'PATTERN': + if tokens[0].upper() == 'PATTERN': # can not upper id cs |= { 'PATTERN' : tokens[1] } - elif tokens[0].upper() == 'QUALITY': + elif tokens[0].upper() == 'QUALITY': # can not upper trace node value = tokens[1] if len(tokens) > 2: value += f' {tokens[2]}' diff --git a/script/sql/create/23.options.sql b/script/sql/create/23.options.sql index f88b536..732cb40 100644 --- a/script/sql/create/23.options.sql +++ b/script/sql/create/23.options.sql @@ -10,27 +10,29 @@ create table options insert into options (key, value) values ('UNITS', 'GPM') +, ('PRESSURE', 'PSI') , ('HEADLOSS', 'H-W') ---, ('HYDRAULICS', '') +, ('QUALITY', 'NONE') +, ('UNBALANCED', 'STOP') +, ('PATTERN', '1') +, ('DEMAND MODEL', 'DDA') +, ('DEMAND MULTIPLIER', '1.0') +, ('EMITTER EXPONENT', '0.5') , ('VISCOSITY', '1.0') +, ('DIFFUSIVITY', '1.0') , ('SPECIFIC GRAVITY', '1.0') , ('TRIALS', '40') , ('ACCURACY', '0.001') -, ('FLOWCHANGE', '0') , ('HEADERROR', '0') -, ('CHECKFREQ', '2') -, ('MAXCHECK', '10') -, ('DAMPLIMIT', '0') -, ('UNBALANCED', 'STOP') -, ('DEMAND MODEL', 'DDA') +, ('FLOWCHANGE', '0') , ('MINIMUM PRESSURE', '0') , ('REQUIRED PRESSURE', '0.1') , ('PRESSURE EXPONENT', '0.5') -, ('PATTERN', '1') -, ('DEMAND MULTIPLIER', '1.0') -, ('EMITTER EXPONENT', '0.5') -, ('QUALITY', 'NONE') -, ('DIFFUSIVITY', '1.0') , ('TOLERANCE', '0.01') ---, ('MAP', '') +, ('HTOL', '0.0005') +, ('QTOL', '0.0001') +, ('RQTOL', '0.0000001') +, ('CHECKFREQ', '2') +, ('MAXCHECK', '10') +, ('DAMPLIMIT', '0') ; diff --git a/test_tjnetwork.py b/test_tjnetwork.py index 1730aed..4bdb2c4 100644 --- a/test_tjnetwork.py +++ b/test_tjnetwork.py @@ -3251,6 +3251,10 @@ class TestApi: assert o['QUALITY'] == OPTION_QUALITY_NONE assert o['DIFFUSIVITY'] == '1.0' assert o['TOLERANCE'] == '0.01' + assert o['PRESSURE'] == OPTION_PRESSURE_PSI + assert o['HTOL'] == '0.0005' + assert o['QTOL'] == '0.0001' + assert o['RQTOL'] == '0.0000001' o['UNITS'] = OPTION_UNITS_LPS set_option(p, ChangeSet(o)) @@ -3278,6 +3282,10 @@ class TestApi: assert o['QUALITY'] == OPTION_QUALITY_NONE assert o['DIFFUSIVITY'] == '1.0' assert o['TOLERANCE'] == '0.01' + assert o['PRESSURE'] == OPTION_PRESSURE_PSI + assert o['HTOL'] == '0.0005' + assert o['QTOL'] == '0.0001' + assert o['RQTOL'] == '0.0000001' self.leave(p) @@ -3309,6 +3317,10 @@ class TestApi: assert o['QUALITY'] == OPTION_QUALITY_NONE assert o['DIFFUSIVITY'] == '1.0' assert o['TOLERANCE'] == '0.01' + assert o['PRESSURE'] == OPTION_PRESSURE_PSI + assert o['HTOL'] == '0.0005' + assert o['QTOL'] == '0.0001' + assert o['RQTOL'] == '0.0000001' o['UNITS'] = OPTION_UNITS_LPS cs = set_option(p, ChangeSet(o)).operations[0] @@ -3336,6 +3348,10 @@ class TestApi: assert cs['QUALITY'] == OPTION_QUALITY_NONE assert cs['DIFFUSIVITY'] == '1.0' assert cs['TOLERANCE'] == '0.01' + assert cs['PRESSURE'] == OPTION_PRESSURE_PSI + assert cs['HTOL'] == '0.0005' + assert cs['QTOL'] == '0.0001' + assert cs['RQTOL'] == '0.0000001' cs = execute_undo(p).operations[0] assert cs['operation'] == API_UPDATE @@ -3362,6 +3378,10 @@ class TestApi: assert cs['QUALITY'] == OPTION_QUALITY_NONE assert cs['DIFFUSIVITY'] == '1.0' assert cs['TOLERANCE'] == '0.01' + assert cs['PRESSURE'] == OPTION_PRESSURE_PSI + assert cs['HTOL'] == '0.0005' + assert cs['QTOL'] == '0.0001' + assert cs['RQTOL'] == '0.0000001' cs = execute_redo(p).operations[0] assert cs['operation'] == API_UPDATE @@ -3388,6 +3408,10 @@ class TestApi: assert cs['QUALITY'] == OPTION_QUALITY_NONE assert cs['DIFFUSIVITY'] == '1.0' assert cs['TOLERANCE'] == '0.01' + assert cs['PRESSURE'] == OPTION_PRESSURE_PSI + assert cs['HTOL'] == '0.0005' + assert cs['QTOL'] == '0.0001' + assert cs['RQTOL'] == '0.0000001' self.leave(p) diff --git a/tjnetwork.py b/tjnetwork.py index 78417f4..cac960e 100644 --- a/tjnetwork.py +++ b/tjnetwork.py @@ -80,6 +80,10 @@ OPTION_UNITS_MLD = api.OPTION_UNITS_MLD OPTION_UNITS_CMH = api.OPTION_UNITS_CMH OPTION_UNITS_CMD = api.OPTION_UNITS_CMD +OPTION_PRESSURE_PSI = api.OPTION_PRESSURE_PSI +OPTION_PRESSURE_KPA = api.OPTION_PRESSURE_KPA +OPTION_PRESSURE_M = api.OPTION_PRESSURE_M + OPTION_HEADLOSS_HW = api.OPTION_HEADLOSS_HW OPTION_HEADLOSS_DW = api.OPTION_HEADLOSS_DW OPTION_HEADLOSS_CM = api.OPTION_HEADLOSS_CM