From 55bab8cf601235619d81c959aece0f6b90fbb109 Mon Sep 17 00:00:00 2001 From: DingZQ Date: Sun, 23 Mar 2025 12:21:02 +0800 Subject: [PATCH] Update simulation.py from WMH --- simulation.py | 66 +++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 29 deletions(-) diff --git a/simulation.py b/simulation.py index d317644..b6a9b27 100644 --- a/simulation.py +++ b/simulation.py @@ -526,13 +526,15 @@ def convert_time_format(original_time: str) -> str: def get_history_pattern_info(project_name, pattern_name): - """读取选定pattern的保存的历史pattern信息flow""" + """读取选定pattern的保存的历史pattern信息flow和factor""" flow_list = [] + factor_list = [] patterns_info = read_all(project_name, f"select * from history_patterns_flows where id = '{pattern_name}' order by _order") for item in patterns_info: flow_list.append(float(item['flow'])) - return flow_list + factor_list.append(float(item['factor'])) + return flow_list, factor_list # 2025/01/11 @@ -572,9 +574,7 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s print('{} -- Hydraulic simulation started.'.format( datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S'))) - # 重新打开数据库 - if is_project_open(name): - close_project(name) + # 判断是实时模拟还是多步长模拟 # if simulation_type.upper() == 'REALTIME': # 实时模拟(修改原数据库) # name_c = name @@ -689,7 +689,7 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s if value: demand_pattern = get_pattern(name_c, get_demand(name_c, demand_name)['pattern']) if get_option(name_c)['UNITS'] == 'LPS': - demand_pattern['factors'][modify_index] = float(value) / 3.6 # m3/h 转换为 L/s + demand_pattern['factors'][modify_index] = float(value) / 3.6 # 默认SCADA数据获取的是流量单位是m3/h, 转换为 L/s elif get_option(name_c)['UNITS'] == 'CMH': demand_pattern['factors'][modify_index] = float(value) cs = ChangeSet() @@ -706,14 +706,19 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s # print(source_outflow_dict) for pattern_name in source_outflow_dict.keys(): # print(pattern_name) - history_source_outflow_list = get_history_pattern_info(name_c, pattern_name) - history_source_outflow = history_source_outflow_list[modify_index] + history_source_outflow_flow_list, history_source_outflow_factor_list = get_history_pattern_info(name_c, pattern_name) + history_source_outflow_flow = history_source_outflow_flow_list[modify_index] + history_source_outflow_factor = history_source_outflow_factor_list[modify_index] # print(source_outflow_dict[pattern_name]) + # print(history_source_outflow_flow) + # print(history_source_outflow_factor) if source_outflow_dict[pattern_name]: realtime_source_outflow = float(source_outflow_dict[pattern_name]) - multiply_factor = realtime_source_outflow / history_source_outflow + multiply_factor = realtime_source_outflow / history_source_outflow_flow + # print(multiply_factor) pattern = get_pattern(name_c, pattern_name) - pattern['factors'][modify_index] *= multiply_factor + pattern['factors'][modify_index] = multiply_factor * history_source_outflow_factor + # print(pattern['factors'][modify_index]) cs = ChangeSet() cs.append(pattern) set_pattern(name_c, cs) @@ -723,13 +728,14 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s query_ids_list=list(globals.realtime_pipe_flow_pattern_id.values()), query_time=modify_pattern_start_time) realtime_pipe_flow_dict = {key: realtime_pipe_flow_SCADA_data_dict[value] for key, value in globals.realtime_pipe_flow_pattern_id.items()} for pattern_name in realtime_pipe_flow_dict.keys(): - history_pipe_flow_list = get_history_pattern_info(name_c, pattern_name) - history_pipe_flow = history_pipe_flow_list[modify_index] + history_pipe_flow_flow_list, history_pipe_flow_factor_list = get_history_pattern_info(name_c, pattern_name) + history_pipe_flow_flow = history_pipe_flow_flow_list[modify_index] + history_pipe_flow_factor = history_pipe_flow_factor_list[modify_index] if realtime_pipe_flow_dict[pattern_name]: realtime_pipe_flow = float(realtime_pipe_flow_dict[pattern_name]) - multiply_factor = realtime_pipe_flow / history_pipe_flow + multiply_factor = realtime_pipe_flow / history_pipe_flow_flow pattern = get_pattern(name_c, pattern_name) - pattern['factors'][modify_index] *= multiply_factor + pattern['factors'][modify_index] = multiply_factor * history_pipe_flow_factor cs = ChangeSet() cs.append(pattern) set_pattern(name_c, cs) @@ -745,15 +751,17 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s query_ids_list=list(temp_realtime_pipe_flow_pattern_id.values()), query_time=modify_pattern_start_time) temp_realtime_pipe_flow_dict = {key: temp_realtime_pipe_flow_SCADA_data_dict[value] for key, value in temp_realtime_pipe_flow_pattern_id.items()} for pattern_name in temp_realtime_pipe_flow_dict.keys(): - temp_history_pipe_flow_list = get_history_pattern_info(name_c, pattern_name) - temp_history_pipe_flow = temp_history_pipe_flow_list[modify_index] + temp_history_pipe_flow_flow_list, temp_history_pipe_flow_factor_list = get_history_pattern_info(name_c, pattern_name) + temp_history_pipe_flow_flow = temp_history_pipe_flow_flow_list[modify_index] if temp_realtime_pipe_flow_dict[pattern_name]: temp_realtime_pipe_flow = float(temp_realtime_pipe_flow_dict[pattern_name]) - temp_multiply_factor = temp_realtime_pipe_flow / temp_history_pipe_flow + temp_multiply_factor = temp_realtime_pipe_flow / temp_history_pipe_flow_flow temp_non_realtime_demand_pattern_list = globals.pipe_flow_region_patterns[pattern_name] for demand_pattern_name in temp_non_realtime_demand_pattern_list: + history_non_realtime_demand_flow_list, history_non_realtime_demand_factor_list = get_history_pattern_info(name_c, demand_pattern_name) + history_non_realtime_demand_factor = history_non_realtime_demand_factor_list[modify_index] pattern = get_pattern(name_c, demand_pattern_name) - pattern['factors'][modify_index] *= temp_multiply_factor + pattern['factors'][modify_index] = temp_multiply_factor * history_non_realtime_demand_factor cs = ChangeSet() cs.append(pattern) set_pattern(name_c, cs) @@ -778,17 +786,19 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s region_total_source_outflow = sum(region_source_outflow_valid_values) history_region_total_source_outflow = 0 for source_outflow_pattern_name in temp_source_outflow_region_patterns: - temp_history_source_outflow_list = get_history_pattern_info(name_c, source_outflow_pattern_name) - history_region_total_source_outflow += temp_history_source_outflow_list[modify_index] + temp_history_source_outflow_flow_list, temp_history_source_outflow_factor_list = get_history_pattern_info(name_c, source_outflow_pattern_name) + history_region_total_source_outflow += temp_history_source_outflow_flow_list[modify_index] region_total_realtime_region_pipe_flow_and_demand = sum(valid_values) history_region_total_realtime_region_pipe_flow_and_demand = 0 for pipe_flow_and_demand_pattern_name in temp_realtime_region_pipe_flow_and_demand_patterns: - temp_history_pipe_flow_and_demand_list = get_history_pattern_info(name_c, pipe_flow_and_demand_pattern_name) - history_region_total_realtime_region_pipe_flow_and_demand += temp_history_pipe_flow_and_demand_list[modify_index] + temp_history_pipe_flow_and_demand_flow_list, temp_history_pipe_flow_and_demand_factor_list = get_history_pattern_info(name_c, pipe_flow_and_demand_pattern_name) + history_region_total_realtime_region_pipe_flow_and_demand += temp_history_pipe_flow_and_demand_flow_list[modify_index] temp_multiply_factor = (region_total_source_outflow - region_total_realtime_region_pipe_flow_and_demand) / (history_region_total_source_outflow - history_region_total_realtime_region_pipe_flow_and_demand) for non_realtime_region_pattern_name in temp_non_realtime_region_patterns: + history_non_realtime_region_pattern_flow_list, history_non_realtime_region_pattern_factor_list = get_history_pattern_info(name_c, non_realtime_region_pattern_name) + history_non_realtime_region_pattern_factor = history_non_realtime_region_pattern_factor_list[modify_index] pattern = get_pattern(name_c, non_realtime_region_pattern_name) - pattern['factors'][modify_index] *= temp_multiply_factor + pattern['factors'][modify_index] = temp_multiply_factor * history_non_realtime_region_pattern_factor cs = ChangeSet() cs.append(pattern) set_pattern(name_c, cs) @@ -883,8 +893,6 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s print('{} -- Hydraulic simulation finished, cost time: {:.2f} s.'.format( datetime.now(pytz.timezone('Asia/Shanghai')).strftime('%Y-%m-%d %H:%M:%S'), time_cost_end - time_cost_start)) - close_project(name_c) - # DingZQ 下面这几句一定要这样,不然读取不了 time.sleep(5) # wait 5 seconds @@ -893,10 +901,10 @@ def run_simulation(name: str, simulation_type: str, modify_pattern_start_time: s output = Output(tmp_file) node_result = output.node_results() link_result = output.link_results() - link_flow = [] - for link in link_result: - link_flow.append(link['result'][-1]['flow']) - print(link_flow) + # link_flow = [] + # for link in link_result: + # link_flow.append(link['result'][-1]['flow']) + # print(link_flow) num_periods_result = output.times()['num_periods'] print("simulation_type", simulation_type) print("before store result")