Update simulation.py from WMH
This commit is contained in:
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user