优化关阀分析算法,实现网络拓扑缓存,增量图处理

This commit is contained in:
2026-02-05 10:46:46 +08:00
parent e893c7db5f
commit 4c208abe55

View File

@@ -199,7 +199,7 @@ def valve_close_analysis(
modify_pattern_start_time: str,
modify_total_duration: int = 900,
modify_valve_opening: dict[str, float] = None,
scheme_Name: str = None,
scheme_name: str = None,
) -> None:
"""
关阀模拟
@@ -207,7 +207,7 @@ def valve_close_analysis(
:param modify_pattern_start_time: 模拟开始时间,格式为'2024-11-25T09:00:00+08:00'
:param modify_total_duration: 模拟总历时,秒
:param modify_valve_opening: dict中包含多个阀门开启度str为阀门的idfloat为修改后的阀门开启度
:param scheme_Name: 方案名称
:param scheme_name: 方案名称
:return:
"""
print(
@@ -262,7 +262,7 @@ def valve_close_analysis(
modify_total_duration=modify_total_duration,
modify_valve_opening=modify_valve_opening,
scheme_Type="valve_close_Analysis",
scheme_Name=scheme_Name,
scheme_name=scheme_name,
)
# step 3. restore the base model
# for valve in valves:
@@ -284,7 +284,7 @@ def flushing_analysis(
modify_valve_opening: dict[str, float] = None,
drainage_node_ID: str = None,
flushing_flow: float = 0,
scheme_Name: str = None,
scheme_name: str = None,
) -> None:
"""
管道冲洗模拟
@@ -294,9 +294,15 @@ def flushing_analysis(
:param modify_valve_opening: dict中包含多个阀门开启度str为阀门的idfloat为修改后的阀门开启度
:param drainage_node_ID: 冲洗排放口所在节点ID
:param flushing_flow: 冲洗水量传入参数单位为m3/h
:param scheme_Name: 方案名称
:param scheme_name: 方案名称
:return:
"""
scheme_detail: dict = {
"duration": modify_total_duration,
"valve_opening": modify_valve_opening,
"drainage_node_ID": drainage_node_ID,
"flushing_flow": flushing_flow,
}
print(
datetime.now(pytz.timezone("Asia/Shanghai")).strftime("%Y-%m-%d %H:%M:%S")
+ " -- Start Analysis."
@@ -387,13 +393,22 @@ def flushing_analysis(
modify_total_duration=modify_total_duration,
modify_valve_opening=modify_valve_opening,
scheme_Type="flushing_Analysis",
scheme_Name=scheme_Name,
scheme_name=scheme_name,
)
# step 4. restore the base model
if is_project_open(new_name):
close_project(new_name)
delete_project(new_name)
# return result
# 存储方案信息到 PG 数据库
store_scheme_info(
name=name,
scheme_name=scheme_name,
scheme_type="flushing_analysis",
username="admin",
scheme_start_time=modify_pattern_start_time,
scheme_detail=scheme_detail,
)
############################################################
@@ -415,10 +430,10 @@ def contaminant_simulation(
:param modify_pattern_start_time: 模拟开始时间,格式为'2024-11-25T09:00:00+08:00'
:param modify_total_duration: 模拟总历时,秒
:param source: 污染源所在的节点ID
:param concentration: 污染源位置处的浓度单位mg/L,即默认的污染模拟setting为concentration应改为 Set point booster
:param concentration: 污染源位置处的浓度单位mg/L默认的污染模拟setting为SOURCE_TYPE_CONCEN改为SOURCE_TYPE_SETPOINT
:param source_pattern: 污染源的时间变化模式若不传入则默认以恒定浓度持续模拟时间长度等于duration;
若传入,则格式为{1.0,0.5,1.1}等系数列表pattern_step模拟等于模型的hydraulic time step
:param scheme_Name: 方案名称
:param scheme_name: 方案名称
:return:
"""
scheme_detail: dict = {
@@ -490,7 +505,7 @@ def contaminant_simulation(
cs_source = ChangeSet()
source_schema = {
"node": source,
"s_type": SOURCE_TYPE_CONCEN,
"s_type": SOURCE_TYPE_SETPOINT,
"strength": concentration,
"pattern": pt["id"],
}
@@ -634,7 +649,7 @@ def pressure_regulation(
modify_tank_initial_level: dict[str, float] = None,
modify_fixed_pump_pattern: dict[str, list] = None,
modify_variable_pump_pattern: dict[str, list] = None,
scheme_Name: str = None,
scheme_name: str = None,
) -> None:
"""
区域调压模拟用来模拟未来15分钟内开关水泵对区域压力的影响
@@ -644,7 +659,7 @@ def pressure_regulation(
:param modify_tank_initial_level: dict中包含多个水塔str为水塔的idfloat为修改后的initial_level
:param modify_fixed_pump_pattern: dict中包含多个水泵模式str为工频水泵的idlist为修改后的pattern
:param modify_variable_pump_pattern: dict中包含多个水泵模式str为变频水泵的idlist为修改后的pattern
:param scheme_Name: 模拟方案名称
:param scheme_name: 模拟方案名称
:return:
"""
print(
@@ -697,7 +712,7 @@ def pressure_regulation(
modify_fixed_pump_pattern=modify_fixed_pump_pattern,
modify_variable_pump_pattern=modify_variable_pump_pattern,
scheme_Type="pressure_regulation",
scheme_Name=scheme_Name,
scheme_name=scheme_name,
)
if is_project_open(new_name):
close_project(new_name)