diff --git a/api/__init__.cpython-312-x86_64-linux-gnu.so b/api/__init__.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..f02c4ec Binary files /dev/null and b/api/__init__.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/batch_api.cpython-312-x86_64-linux-gnu.so b/api/batch_api.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..a8a93da Binary files /dev/null and b/api/batch_api.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/batch_api_cs.cpython-312-x86_64-linux-gnu.so b/api/batch_api_cs.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..19d8af7 Binary files /dev/null and b/api/batch_api_cs.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/batch_exe.cpython-312-x86_64-linux-gnu.so b/api/batch_exe.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..4c2100d Binary files /dev/null and b/api/batch_exe.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/clean_api.cpython-312-x86_64-linux-gnu.so b/api/clean_api.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..a6e3887 Binary files /dev/null and b/api/clean_api.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/connection.cpython-312-x86_64-linux-gnu.so b/api/connection.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..9a4692f Binary files /dev/null and b/api/connection.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/database.cpython-312-x86_64-linux-gnu.so b/api/database.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..80ff85f Binary files /dev/null and b/api/database.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/extension_data.cpython-312-x86_64-linux-gnu.so b/api/extension_data.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..e7af2e7 Binary files /dev/null and b/api/extension_data.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/inp_in.cpython-312-x86_64-linux-gnu.so b/api/inp_in.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..18034c2 Binary files /dev/null and b/api/inp_in.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/inp_out.cpython-312-x86_64-linux-gnu.so b/api/inp_out.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..c04c6a7 Binary files /dev/null and b/api/inp_out.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/postgresql_info.cpython-312-x86_64-linux-gnu.so b/api/postgresql_info.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..9b1bc9d Binary files /dev/null and b/api/postgresql_info.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/project.cpython-312-x86_64-linux-gnu.so b/api/project.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..38ad438 Binary files /dev/null and b/api/project.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/project_backup.cpython-312-x86_64-linux-gnu.so b/api/project_backup.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..e0fbd33 Binary files /dev/null and b/api/project_backup.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s0_base.cpython-312-x86_64-linux-gnu.so b/api/s0_base.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..4ce64dd Binary files /dev/null and b/api/s0_base.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s10_status.cpython-312-x86_64-linux-gnu.so b/api/s10_status.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..7907c62 Binary files /dev/null and b/api/s10_status.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s11_patterns.cpython-312-x86_64-linux-gnu.so b/api/s11_patterns.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..f4bcc30 Binary files /dev/null and b/api/s11_patterns.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s12_curves.cpython-312-x86_64-linux-gnu.so b/api/s12_curves.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..04c16a0 Binary files /dev/null and b/api/s12_curves.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s13_controls.cpython-312-x86_64-linux-gnu.so b/api/s13_controls.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..f2ff0d6 Binary files /dev/null and b/api/s13_controls.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s14_rules.cpython-312-x86_64-linux-gnu.so b/api/s14_rules.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..3c42366 Binary files /dev/null and b/api/s14_rules.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s15_energy.cpython-312-x86_64-linux-gnu.so b/api/s15_energy.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..f897140 Binary files /dev/null and b/api/s15_energy.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s16_emitters.cpython-312-x86_64-linux-gnu.so b/api/s16_emitters.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..5fec2c4 Binary files /dev/null and b/api/s16_emitters.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s17_quality.cpython-312-x86_64-linux-gnu.so b/api/s17_quality.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..142aac0 Binary files /dev/null and b/api/s17_quality.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s18_sources.cpython-312-x86_64-linux-gnu.so b/api/s18_sources.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..cb24384 Binary files /dev/null and b/api/s18_sources.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s19_reactions.cpython-312-x86_64-linux-gnu.so b/api/s19_reactions.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..9505cdb Binary files /dev/null and b/api/s19_reactions.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s1_title.cpython-312-x86_64-linux-gnu.so b/api/s1_title.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..b82b99c Binary files /dev/null and b/api/s1_title.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s20_mixing.cpython-312-x86_64-linux-gnu.so b/api/s20_mixing.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..716e28b Binary files /dev/null and b/api/s20_mixing.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s21_times.cpython-312-x86_64-linux-gnu.so b/api/s21_times.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..ea59b47 Binary files /dev/null and b/api/s21_times.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s22_report.cpython-312-x86_64-linux-gnu.so b/api/s22_report.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..8e8c09f Binary files /dev/null and b/api/s22_report.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s23_options.cpython-312-x86_64-linux-gnu.so b/api/s23_options.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..b2a0e7e Binary files /dev/null and b/api/s23_options.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s23_options_util.cpython-312-x86_64-linux-gnu.so b/api/s23_options_util.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..657ca9d Binary files /dev/null and b/api/s23_options_util.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s23_options_v3.cpython-312-x86_64-linux-gnu.so b/api/s23_options_v3.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..e4973ed Binary files /dev/null and b/api/s23_options_v3.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s24_coordinates.cpython-312-x86_64-linux-gnu.so b/api/s24_coordinates.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..1e0f30e Binary files /dev/null and b/api/s24_coordinates.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s25_vertices.cpython-312-x86_64-linux-gnu.so b/api/s25_vertices.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..18da646 Binary files /dev/null and b/api/s25_vertices.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s26_labels.cpython-312-x86_64-linux-gnu.so b/api/s26_labels.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..c1c7488 Binary files /dev/null and b/api/s26_labels.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s27_backdrop.cpython-312-x86_64-linux-gnu.so b/api/s27_backdrop.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..b442d11 Binary files /dev/null and b/api/s27_backdrop.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s28_end.cpython-312-x86_64-linux-gnu.so b/api/s28_end.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..177b73c Binary files /dev/null and b/api/s28_end.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s29_scada_device.cpython-312-x86_64-linux-gnu.so b/api/s29_scada_device.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..eaff0ef Binary files /dev/null and b/api/s29_scada_device.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s2_junctions.cpython-312-x86_64-linux-gnu.so b/api/s2_junctions.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..8534b9f Binary files /dev/null and b/api/s2_junctions.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s30_scada_device_data.cpython-312-x86_64-linux-gnu.so b/api/s30_scada_device_data.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..b2f1e78 Binary files /dev/null and b/api/s30_scada_device_data.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s31_scada_element.cpython-312-x86_64-linux-gnu.so b/api/s31_scada_element.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..3282188 Binary files /dev/null and b/api/s31_scada_element.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s32_region.cpython-312-x86_64-linux-gnu.so b/api/s32_region.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..4104e5d Binary files /dev/null and b/api/s32_region.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s32_region_util.cpython-312-x86_64-linux-gnu.so b/api/s32_region_util.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..70d151c Binary files /dev/null and b/api/s32_region_util.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s33_dma.cpython-312-x86_64-linux-gnu.so b/api/s33_dma.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..047f5ef Binary files /dev/null and b/api/s33_dma.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s33_dma_cal.cpython-312-x86_64-linux-gnu.so b/api/s33_dma_cal.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..e27ad81 Binary files /dev/null and b/api/s33_dma_cal.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s33_dma_gen.cpython-312-x86_64-linux-gnu.so b/api/s33_dma_gen.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..28d019b Binary files /dev/null and b/api/s33_dma_gen.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s34_sa.cpython-312-x86_64-linux-gnu.so b/api/s34_sa.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..6c0447d Binary files /dev/null and b/api/s34_sa.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s34_sa_cal.cpython-312-x86_64-linux-gnu.so b/api/s34_sa_cal.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..827934d Binary files /dev/null and b/api/s34_sa_cal.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s34_sa_gen.cpython-312-x86_64-linux-gnu.so b/api/s34_sa_gen.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..8f0aa49 Binary files /dev/null and b/api/s34_sa_gen.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s35_vd.cpython-312-x86_64-linux-gnu.so b/api/s35_vd.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..4e42bd3 Binary files /dev/null and b/api/s35_vd.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s35_vd_cal.cpython-312-x86_64-linux-gnu.so b/api/s35_vd_cal.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..ba23169 Binary files /dev/null and b/api/s35_vd_cal.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s35_vd_gen.cpython-312-x86_64-linux-gnu.so b/api/s35_vd_gen.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..194d1fe Binary files /dev/null and b/api/s35_vd_gen.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s36_wda.cpython-312-x86_64-linux-gnu.so b/api/s36_wda.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..a609944 Binary files /dev/null and b/api/s36_wda.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s36_wda_cal.cpython-312-x86_64-linux-gnu.so b/api/s36_wda_cal.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..1e5d6ef Binary files /dev/null and b/api/s36_wda_cal.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s38_scada_info.cpython-312-x86_64-linux-gnu.so b/api/s38_scada_info.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..5b99a9e Binary files /dev/null and b/api/s38_scada_info.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s39_user.cpython-312-x86_64-linux-gnu.so b/api/s39_user.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..97da87a Binary files /dev/null and b/api/s39_user.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s3_reservoirs.cpython-312-x86_64-linux-gnu.so b/api/s3_reservoirs.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..ad6fc30 Binary files /dev/null and b/api/s3_reservoirs.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s40_schema.cpython-312-x86_64-linux-gnu.so b/api/s40_schema.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..4dfcb11 Binary files /dev/null and b/api/s40_schema.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s41_pipe_risk_probability.cpython-312-x86_64-linux-gnu.so b/api/s41_pipe_risk_probability.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..2fb506c Binary files /dev/null and b/api/s41_pipe_risk_probability.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s42_sensor_placement.cpython-312-x86_64-linux-gnu.so b/api/s42_sensor_placement.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..f790c10 Binary files /dev/null and b/api/s42_sensor_placement.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s43_burst_locate_result.cpython-312-x86_64-linux-gnu.so b/api/s43_burst_locate_result.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..88c328f Binary files /dev/null and b/api/s43_burst_locate_result.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s4_tanks.cpython-312-x86_64-linux-gnu.so b/api/s4_tanks.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..fa19998 Binary files /dev/null and b/api/s4_tanks.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s5_pipes.cpython-312-x86_64-linux-gnu.so b/api/s5_pipes.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..03de81a Binary files /dev/null and b/api/s5_pipes.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s6_pumps.cpython-312-x86_64-linux-gnu.so b/api/s6_pumps.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..c9f18dd Binary files /dev/null and b/api/s6_pumps.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s7_valves.cpython-312-x86_64-linux-gnu.so b/api/s7_valves.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..17fb11b Binary files /dev/null and b/api/s7_valves.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s8_tags.cpython-312-x86_64-linux-gnu.so b/api/s8_tags.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..6f35cbb Binary files /dev/null and b/api/s8_tags.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/s9_demands.cpython-312-x86_64-linux-gnu.so b/api/s9_demands.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..539b911 Binary files /dev/null and b/api/s9_demands.cpython-312-x86_64-linux-gnu.so differ diff --git a/api/sections.cpython-312-x86_64-linux-gnu.so b/api/sections.cpython-312-x86_64-linux-gnu.so new file mode 100644 index 0000000..a9d1ad2 Binary files /dev/null and b/api/sections.cpython-312-x86_64-linux-gnu.so differ diff --git a/api_ex/kmeans_sensor.cp312-win_amd64.pyd b/api_ex/kmeans_sensor.cp312-win_amd64.pyd deleted file mode 100644 index 82c1316..0000000 Binary files a/api_ex/kmeans_sensor.cp312-win_amd64.pyd and /dev/null differ diff --git a/api_ex/kmeans_sensor.py b/api_ex/kmeans_sensor.py new file mode 100644 index 0000000..e30c70e --- /dev/null +++ b/api_ex/kmeans_sensor.py @@ -0,0 +1,109 @@ +import wntr +import pandas as pd +import numpy as np +import matplotlib.pyplot as plt +import sklearn.cluster +import os + + + +class QD_KMeans(object): + def __init__(self, wn, num_monitors): + # self.inp = inp + self.cluster_num = num_monitors # 聚类中心个数,也即测压点个数 + self.wn=wn + self.monitor_nodes = [] + self.coords = [] + self.junction_nodes = {} # Added missing initialization + + + def get_junctions_coordinates(self): + + for junction_name in self.wn.junction_name_list: + junction = self.wn.get_node(junction_name) + self.junction_nodes[junction_name] = junction.coordinates + self.coords.append(junction.coordinates ) + + # print(f"Total junctions: {self.junction_coordinates}") + + def select_monitoring_points(self): + if not self.coords: # Add check if coordinates are collected + self.get_junctions_coordinates() + coords = np.array(self.coords) + coords_normalized = (coords - coords.min(axis=0)) / (coords.max(axis=0) - coords.min(axis=0)) + kmeans = sklearn.cluster.KMeans(n_clusters= self.cluster_num, random_state=42) + kmeans.fit(coords_normalized) + + for center in kmeans.cluster_centers_: + distances = np.sum((coords_normalized - center) ** 2, axis=1) + nearest_node = self.wn.junction_name_list[np.argmin(distances)] + self.monitor_nodes.append(nearest_node) + + return self.monitor_nodes + + + def visualize_network(self): + """Visualize network with monitoring points""" + ax=wntr.graphics.plot_network(self.wn, + node_attribute=self.monitor_nodes, + node_size=30, + title='Optimal sensor') + plt.show() + + + + +def kmeans_sensor_placement(name: str, sensor_num: int, min_diameter: int) -> list: + inp_name = f'./db_inp/{name}.db.inp' + wn= wntr.network.WaterNetworkModel(inp_name) + wn_cluster=QD_KMeans(wn, sensor_num) + + # Select monitoring pointse + sensor_ids= wn_cluster.select_monitoring_points() + + # wn_cluster.visualize_network() + + return sensor_ids + + + +if __name__ == "__main__": + #sensorindex = get_ID(name='suzhouhe_2024_cloud_0817', sensor_num=30, min_diameter=500) + sensorindex = kmeans_sensor_placement(name='szh', sensor_num=50, min_diameter=300) + print(sensorindex) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/epanet/epanet.py b/epanet/epanet.py index eefd3f6..092f840 100644 --- a/epanet/epanet.py +++ b/epanet/epanet.py @@ -328,7 +328,16 @@ def run_project_return_dict(name: str, readable_output: bool = False) -> dict[st data = {} - result = os.system(command) + # 设置环境变量以包含库文件路径 + env = os.environ.copy() + if platform.system() == "Linux": + lib_dir = os.path.dirname(exe) + env["LD_LIBRARY_PATH"] = f"{lib_dir}:{env.get('LD_LIBRARY_PATH', '')}" + + # 使用 subprocess 替代 os.system 以传递 env + process = subprocess.run(command, shell=True, env=env) + result = process.returncode + if result != 0: data["simulation_result"] = "failed" else: @@ -372,8 +381,15 @@ def run_project(name: str, readable_output: bool = False) -> str: data = {} - # DingZQ, 2025-06-02, 使用subprocess.Popen捕获输出到全局日志, 原来的代码是这么写的 - result = os.system(command) + # 设置环境变量以包含库文件路径 + env = os.environ.copy() + if platform.system() == "Linux": + lib_dir = os.path.dirname(exe) + env["LD_LIBRARY_PATH"] = f"{lib_dir}:{env.get('LD_LIBRARY_PATH', '')}" + + # DingZQ, 2025-06-02, 使用subprocess替代os.system + process = subprocess.run(command, shell=True, env=env) + result = process.returncode # logging.info(f"Simulation result: {result}") if result != 0: @@ -414,7 +430,15 @@ def run_inp(name: str) -> str: data = {} - result = os.system(command) + # 设置环境变量以包含库文件路径 + env = os.environ.copy() + if platform.system() == "Linux": + lib_dir = os.path.dirname(exe) + env["LD_LIBRARY_PATH"] = f"{lib_dir}:{env.get('LD_LIBRARY_PATH', '')}" + + process = subprocess.run(command, shell=True, env=env) + result = process.returncode + if result != 0: data["simulation_result"] = "failed" else: diff --git a/epanet/linux/epanet2.h b/epanet/linux/epanet2.h deleted file mode 100644 index 042d6c6..0000000 --- a/epanet/linux/epanet2.h +++ /dev/null @@ -1,464 +0,0 @@ -/* - ****************************************************************************** - Project: OWA EPANET - Version: 2.3 - Module: epanet2.h - Description: declarations of the legacy style EPANET 2 API functions - Authors: see AUTHORS - Copyright: see AUTHORS - License: see LICENSE - Last Updated: 02/14/2025 - ****************************************************************************** - */ - -/* -This module contains declarations of the legacy style EPANET API functions, with -version 2.2 updates, that apply only to single threaded applications. A second -set of thread safe API functions that allows one to run concurrent analyses on -multiple EPANET projects can be found in the epanet2_2.h header file. The two -APIs share the same function names and arguments with the difference being that -the thread safe functions use the prefix "EN_" and include an extra argument that -represents the EPANET project being analyzed. To avoid unnecessary repetition, -only the thread safe API functions have been documented. To see a description of -a legacy style API function declared here please refer to its complementary named -function in epanet2_2.h. -*/ - -#ifndef EPANET2_H -#define EPANET2_H - -// The legacy style EPANET API can be compiled with support for either single -// precision or double precision floating point arguments, with the default -// being single precision. To compile for double precision one must #define -// EN_API_FLOAT_TYPE as double both here and in any client code that uses the -// API. -#ifndef EN_API_FLOAT_TYPE - #define EN_API_FLOAT_TYPE float -#endif - -#ifndef DLLEXPORT - #ifdef _WIN32 - #ifdef epanet2_EXPORTS - #define DLLEXPORT __declspec(dllexport) __stdcall - #else - #define DLLEXPORT __declspec(dllimport) __stdcall - #endif - #elif defined(__CYGWIN__) - #define DLLEXPORT __stdcall - #else - #define DLLEXPORT - #endif -#endif - -#include "epanet2_enums.h" - -// --- Declare the EPANET toolkit functions -#if defined(__cplusplus) -extern "C" { -#endif - - -/******************************************************************** - - Project Functions - -********************************************************************/ - - int DLLEXPORT ENepanet(const char *inpFile, const char *rptFile, - const char *outFile, void (*pviewprog) (char *)); - - int DLLEXPORT ENinit(const char *rptFile, const char *outFile, - int unitsType, int headlossType); - - int DLLEXPORT ENopen(const char *inpFile, const char *rptFile, - const char *outFile); - - int DLLEXPORT ENopenX(const char *inpFile, const char *rptFile, - const char *outFile); - - int DLLEXPORT ENgettitle(char *line1, char *line2, char *line3); - - int DLLEXPORT ENsettitle(const char *line1, const char *line2, const char *line3); - - int DLLEXPORT ENgetcomment(int object, int index, char *comment); - - int DLLEXPORT ENsetcomment(int object, int index, const char *comment); - - int DLLEXPORT ENgettag(int object, int index, char *tag); - - int DLLEXPORT ENsettag(int object, int index, const char *tag); - - int DLLEXPORT ENgetcount(int object, int *count); - - int DLLEXPORT ENsaveinpfile(const char *filename); - - int DLLEXPORT ENclose(); - -/******************************************************************** - - Hydraulic Analysis Functions - -********************************************************************/ - - int DLLEXPORT ENsolveH(); - - int DLLEXPORT ENsaveH(); - - int DLLEXPORT ENopenH(); - - int DLLEXPORT ENinitH(int initFlag); - - int DLLEXPORT ENrunH(long *currentTime); - - int DLLEXPORT ENnextH(long *tStep); - - int DLLEXPORT ENcloseH(); - - int DLLEXPORT ENsavehydfile(const char *filename); - - int DLLEXPORT ENusehydfile(const char *filename); - -/******************************************************************** - - Water Quality Analysis Functions - -********************************************************************/ - - int DLLEXPORT ENsolveQ(); - - int DLLEXPORT ENopenQ(); - - int DLLEXPORT ENinitQ(int saveFlag); - - int DLLEXPORT ENrunQ(long *currentTime); - - int DLLEXPORT ENnextQ(long *tStep); - - int DLLEXPORT ENstepQ(long *timeLeft); - - int DLLEXPORT ENcloseQ(); - -/******************************************************************** - - Reporting Functions - -********************************************************************/ - - int DLLEXPORT ENwriteline(const char *line); - - int DLLEXPORT ENreport(); - - int DLLEXPORT ENcopyreport(const char *filename); - - int DLLEXPORT ENclearreport(); - - int DLLEXPORT ENresetreport(); - - int DLLEXPORT ENsetreport(const char *format); - - int DLLEXPORT ENsetstatusreport(int level); - - int DLLEXPORT ENgetversion(int *version); - - int DLLEXPORT ENgeterror(int errcode, char *errmsg, int maxLen); - - int DLLEXPORT ENgetstatistic(int type, EN_API_FLOAT_TYPE* value); - - int DLLEXPORT ENgetresultindex(int type, int index, int *value); - - int DLLEXPORT ENtimetonextevent(int *eventType, long *duration, int *elementIndex); - - int DLLEXPORT ENsetreportcallback(void (*callback)(void *userData, void *EN_projectHandle, const char*)); - - int DLLEXPORT ENsetreportcallbackuserdata(void *userData); - - -/******************************************************************** - - Analysis Options Functions - -********************************************************************/ - - int DLLEXPORT ENgetoption(int option, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENsetoption(int option, EN_API_FLOAT_TYPE value); - - int DLLEXPORT ENgetflowunits(int *units); - - int DLLEXPORT ENsetflowunits(int units); - - int DLLEXPORT ENgettimeparam(int param, long *value); - - int DLLEXPORT ENsettimeparam(int param, long value); - - int DLLEXPORT ENgetqualinfo(int *qualType, char *chemName, char *chemUnits, - int *traceNode); - - int DLLEXPORT ENgetqualtype(int *qualType, int *traceNode); - - int DLLEXPORT ENsetqualtype(int qualType, const char *chemName, - const char *chemUnits, const char *traceNode); - -/******************************************************************** - - Node Functions - -********************************************************************/ - - int DLLEXPORT ENaddnode(const char *id, int nodeType, int *index); - - int DLLEXPORT ENdeletenode(int index, int actionCode); - - int DLLEXPORT ENgetnodeindex(const char *id, int *index); - - int DLLEXPORT ENgetnodeid(int index, char *id); - - int DLLEXPORT ENsetnodeid(int index, const char *newid); - - int DLLEXPORT ENgetnodetype(int index, int *nodeType); - - int DLLEXPORT ENgetnodevalue(int index, int property, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENgetnodevalues(int property, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENsetnodevalue(int index, int property, EN_API_FLOAT_TYPE value); - - int DLLEXPORT ENsetjuncdata(int index, EN_API_FLOAT_TYPE elev, - EN_API_FLOAT_TYPE dmnd, const char *dmndpat); - - int DLLEXPORT ENsettankdata(int index, EN_API_FLOAT_TYPE elev, - EN_API_FLOAT_TYPE initlvl, EN_API_FLOAT_TYPE minlvl, - EN_API_FLOAT_TYPE maxlvl, EN_API_FLOAT_TYPE diam, - EN_API_FLOAT_TYPE minvol, const char *volcurve); - - int DLLEXPORT ENgetcoord(int index, double *x, double *y); - - int DLLEXPORT ENsetcoord(int index, double x, double y); - -/******************************************************************** - - Nodal Demand Functions - -********************************************************************/ - - int DLLEXPORT ENgetdemandmodel(int *model, EN_API_FLOAT_TYPE *pmin, - EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp); - - int DLLEXPORT ENsetdemandmodel(int model, EN_API_FLOAT_TYPE pmin, - EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp); - - int DLLEXPORT ENadddemand(int nodeIndex, EN_API_FLOAT_TYPE baseDemand, - const char *demandPattern, const char *demandName); - - int DLLEXPORT ENdeletedemand(int nodeIndex, int demandIndex); - - int DLLEXPORT ENgetnumdemands(int nodeIndex, int *numDemands); - - int DLLEXPORT ENgetdemandindex(int nodeIndex, const char *demandName, - int *demandIndex); - - int DLLEXPORT ENgetbasedemand(int nodeIndex, int demandIndex, - EN_API_FLOAT_TYPE *baseDemand); - - int DLLEXPORT ENsetbasedemand(int nodeIndex, int demandIndex, - EN_API_FLOAT_TYPE baseDemand); - - int DLLEXPORT ENgetdemandpattern(int nodeIndex, int demandIndex, int *patIndex); - - int DLLEXPORT ENsetdemandpattern(int nodeIndex, int demandIndex, int patIndex); - - int DLLEXPORT ENgetdemandname(int nodeIndex, int demandIndex, char *demandName); - - int DLLEXPORT ENsetdemandname(int nodeIndex, int demandIndex, const char *demandName); - -/******************************************************************** - - Link Functions - -********************************************************************/ - - int DLLEXPORT ENaddlink(const char *id, int linkType, const char *fromNode, - const char *toNode, int *index); - - int DLLEXPORT ENdeletelink(int index, int actionCode); - - int DLLEXPORT ENgetlinkindex(const char *id, int *index); - - int DLLEXPORT ENgetlinkid(int index, char *id); - - int DLLEXPORT ENsetlinkid(int index, const char *newid); - - int DLLEXPORT ENgetlinktype(int index, int *linkType); - - int DLLEXPORT ENsetlinktype(int *index, int linkType, int actionCode); - - int DLLEXPORT ENgetlinknodes(int index, int *node1, int *node2); - - int DLLEXPORT ENsetlinknodes(int index, int node1, int node2); - - int DLLEXPORT ENgetlinkvalue(int index, int property, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENgetlinkvalues(int property, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENsetlinkvalue(int index, int property, EN_API_FLOAT_TYPE value); - - int DLLEXPORT ENsetpipedata(int index, EN_API_FLOAT_TYPE length, - EN_API_FLOAT_TYPE diam, EN_API_FLOAT_TYPE rough, - EN_API_FLOAT_TYPE mloss); - - int DLLEXPORT ENgetvertexcount(int index, int *count); - - int DLLEXPORT ENgetvertex(int index, int vertex, double *x, double *y); - - int DLLEXPORT ENsetvertex(int index, int vertex, double x, double y); - - int DLLEXPORT ENsetvertices(int index, double *x, double *y, int count); - -/******************************************************************** - - Pump Functions - -********************************************************************/ - - int DLLEXPORT ENgetpumptype(int linkIndex, int *pumpType); - - int DLLEXPORT ENgetheadcurveindex(int linkIndex, int *curveIndex); - - int DLLEXPORT ENsetheadcurveindex(int linkIndex, int curveIndex); - -/******************************************************************** - - Time Pattern Functions - -********************************************************************/ - - int DLLEXPORT ENaddpattern(const char *id); - - int DLLEXPORT ENdeletepattern(int index); - - int DLLEXPORT ENgetpatternindex(const char *id, int *index); - - int DLLEXPORT ENgetpatternid(int index, char *id); - - int DLLEXPORT ENsetpatternid(int index, const char *id); - - int DLLEXPORT ENgetpatternlen(int index, int *len); - - int DLLEXPORT ENgetpatternvalue(int index, int period, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENsetpatternvalue(int index, int period, EN_API_FLOAT_TYPE value); - - int DLLEXPORT ENgetaveragepatternvalue(int index, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENsetpattern(int index, EN_API_FLOAT_TYPE *values, int len); - - int DLLEXPORT ENloadpatternfile(const char *filename, const char *id); - -/******************************************************************** - - Data Curve Functions - -********************************************************************/ - - int DLLEXPORT ENaddcurve(const char *id); - - int DLLEXPORT ENdeletecurve(int index); - - int DLLEXPORT ENgetcurveindex(const char *id, int *index); - - int DLLEXPORT ENgetcurveid(int index, char *id); - - int DLLEXPORT ENsetcurveid(int index, const char *id); - - int DLLEXPORT ENgetcurvelen(int index, int *len); - - int DLLEXPORT ENgetcurvetype(int index, int *type); - - int DLLEXPORT ENsetcurvetype(int index, int type); - - int DLLEXPORT ENgetcurvevalue(int curveIndex, int pointIndex, - EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y); - - int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex, - EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y); - - int DLLEXPORT ENgetcurve(int index, char* id, int *nPoints, - EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues); - - int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues, - EN_API_FLOAT_TYPE *yValues, int nPoints); - -/******************************************************************** - - Simple Controls Functions - -********************************************************************/ - - int DLLEXPORT ENaddcontrol(int type, int linkIndex, EN_API_FLOAT_TYPE setting, - int nodeIndex, EN_API_FLOAT_TYPE level, int *index); - - int DLLEXPORT ENdeletecontrol(int index); - - int DLLEXPORT ENgetcontrol(int index, int *type, int *linkIndex, - EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level); - - int DLLEXPORT ENsetcontrol(int index, int type, int linkIndex, - EN_API_FLOAT_TYPE setting, int nodeIndex, EN_API_FLOAT_TYPE level); - - int DLLEXPORT ENgetcontrolenabled(int index, int *out_enabled); - - int DLLEXPORT ENsetcontrolenabled(int index, int enabled); - -/******************************************************************** - - Rule-Based Controls Functions - -********************************************************************/ - - int DLLEXPORT ENaddrule(char *rule); - - int DLLEXPORT ENdeleterule(int index); - - int DLLEXPORT ENgetrule(int index, int *nPremises, int *nThenActions, - int *nElseActions, EN_API_FLOAT_TYPE *priority); - - int DLLEXPORT ENgetruleID(int index, char* id); - - int DLLEXPORT ENgetpremise(int ruleIndex, int premiseIndex, int *logop, - int *object, int *objIndex, int *variable, - int *relop, int *status, EN_API_FLOAT_TYPE *value); - - int DLLEXPORT ENsetpremise(int ruleIndex, int premiseIndex, int logop, - int object, int objIndex, int variable, int relop, - int status, EN_API_FLOAT_TYPE value); - - int DLLEXPORT ENsetpremiseindex(int ruleIndex, int premiseIndex, int objIndex); - - int DLLEXPORT ENsetpremisestatus(int ruleIndex, int premiseIndex, int status); - - int DLLEXPORT ENsetpremisevalue(int ruleIndex, int premiseIndex, - EN_API_FLOAT_TYPE value); - - int DLLEXPORT ENgetthenaction(int ruleIndex, int actionIndex, int *linkIndex, - int *status, EN_API_FLOAT_TYPE *setting); - - int DLLEXPORT ENsetthenaction(int ruleIndex, int actionIndex, int linkIndex, - int status, EN_API_FLOAT_TYPE setting); - - int DLLEXPORT ENgetelseaction(int ruleIndex, int actionIndex, int *linkIndex, - int *status, EN_API_FLOAT_TYPE *setting); - - int DLLEXPORT ENsetelseaction(int ruleIndex, int actionIndex, int linkIndex, - int status, EN_API_FLOAT_TYPE setting); - - int DLLEXPORT ENsetrulepriority(int index, EN_API_FLOAT_TYPE priority); - - int DLLEXPORT ENgetruleenabled(int index, int *out_enabled); - - int DLLEXPORT ENsetruleenabled(int index, int enabled); - - #if defined(__cplusplus) - } - #endif - -#endif //EPANET2_H diff --git a/epanet/linux/epanet2.pas b/epanet/linux/epanet2.pas deleted file mode 100644 index 0e7ba66..0000000 --- a/epanet/linux/epanet2.pas +++ /dev/null @@ -1,486 +0,0 @@ -unit epanet2; - -{ Declarations of imported procedures from the EPANET PROGRAMMERs TOOLKIT } -{ (EPANET2.DLL) } - -{Last updated on 04/23/2025} - -interface - -const - -{ These are codes used by the DLL functions } - EN_MAXID = 31; { Max. # characters in ID name } - EN_MAXMSG = 255; { Max. # characters in strings } - EN_MISSING = -1.0E10; - EN_SET_CLOSED = -1.0E10; - EN_SET_OPEN = 1.0E10; - - EN_ELEVATION = 0; { Node parameters } - EN_BASEDEMAND = 1; - EN_PATTERN = 2; - EN_EMITTER = 3; - EN_INITQUAL = 4; - EN_SOURCEQUAL = 5; - EN_SOURCEPAT = 6; - EN_SOURCETYPE = 7; - EN_TANKLEVEL = 8; - EN_DEMAND = 9; - EN_HEAD = 10; - EN_PRESSURE = 11; - EN_QUALITY = 12; - EN_SOURCEMASS = 13; - EN_INITVOLUME = 14; - EN_MIXMODEL = 15; - EN_MIXZONEVOL = 16; - EN_TANKDIAM = 17; - EN_MINVOLUME = 18; - EN_VOLCURVE = 19; - EN_MINLEVEL = 20; - EN_MAXLEVEL = 21; - EN_MIXFRACTION = 22; - EN_TANK_KBULK = 23; - EN_TANKVOLUME = 24; - EN_MAXVOLUME = 25; - EN_CANOVERFLOW = 26; - EN_DEMANDDEFICIT = 27; - EN_NODE_INCONTROL = 28; - EN_EMITTERFLOW = 29; - EN_LEAKAGEFLOW = 30; - EN_DEMANDFLOW = 31; - EN_FULLDEMAND = 32; - - EN_DIAMETER = 0; { Link parameters } - EN_LENGTH = 1; - EN_ROUGHNESS = 2; - EN_MINORLOSS = 3; - EN_INITSTATUS = 4; - EN_INITSETTING = 5; - EN_KBULK = 6; - EN_KWALL = 7; - EN_FLOW = 8; - EN_VELOCITY = 9; - EN_HEADLOSS = 10; - EN_STATUS = 11; - EN_SETTING = 12; - EN_ENERGY = 13; - EN_LINKQUAL = 14; - EN_LINKPATTERN = 15; - EN_PUMP_STATE = 16; - EN_PUMP_EFFIC = 17; - EN_PUMP_POWER = 18; - EN_PUMP_HCURVE = 19; - EN_PUMP_ECURVE = 20; - EN_PUMP_ECOST = 21; - EN_PUMP_EPAT = 22; - EN_LINK_INCONTROL = 23; - EN_GPV_CURVE = 24; - EN_PCV_CURVE = 25; - EN_LEAK_AREA = 26; - EN_LEAK_EXPAN = 27; - EN_LINK_LEAKAGE = 28; - EN_VALVE_TYPE = 29; - - EN_DURATION = 0; { Time parameters } - EN_HYDSTEP = 1; - EN_QUALSTEP = 2; - EN_PATTERNSTEP = 3; - EN_PATTERNSTART = 4; - EN_REPORTSTEP = 5; - EN_REPORTSTART = 6; - EN_RULESTEP = 7; - EN_STATISTIC = 8; - EN_PERIODS = 9; - EN_STARTTIME = 10; - EN_HTIME = 11; - EN_QTIME = 12; - EN_HALTFLAG = 13; - EN_NEXTEVENT = 14; - EN_NEXTEVENTTANK = 15; - - EN_ITERATIONS = 0; { Analysis statistics } - EN_RELATIVEERROR = 1; - EN_MAXHEADERROR = 2; - EN_MAXFLOWCHANGE = 3; - EN_MASSBALANCE = 4; - EN_DEFICIENTNODES = 5; - EN_DEMANDREDUCTION = 6; - EN_LEAKAGELOSS = 7; - - EN_NODE = 0; { Component Types } - EN_LINK = 1; - EN_TIMEPAT = 2; - EN_CURVE = 3; - EN_CONTROL = 4; - EN_RULE = 5; - - EN_NODECOUNT = 0; { Component counts } - EN_TANKCOUNT = 1; - EN_LINKCOUNT = 2; - EN_PATCOUNT = 3; - EN_CURVECOUNT = 4; - EN_CONTROLCOUNT = 5; - EN_RULECOUNT = 6; - - EN_JUNCTION = 0; { Node types } - EN_RESERVOIR = 1; - EN_TANK = 2; - - EN_CVPIPE = 0; { Link types } - EN_PIPE = 1; - EN_PUMP = 2; - EN_PRV = 3; - EN_PSV = 4; - EN_PBV = 5; - EN_FCV = 6; - EN_TCV = 7; - EN_GPV = 8; - EN_PCV = 9; - - EN_CLOSED = 0; { Link status types } - EN_OPEN = 1; - - EN_PUMP_XHEAD = 0; { Pump state types } - EN_PUMP_CLOSED = 2; - EN_PUMP_OPEN = 3; - EN_PUMP_XFLOW = 5; - - EN_NONE = 0; { Quality analysis types } - EN_CHEM = 1; - EN_AGE = 2; - EN_TRACE = 3; - - EN_CONCEN = 0; { Source quality types } - EN_MASS = 1; - EN_SETPOINT = 2; - EN_FLOWPACED = 3; - - EN_HW = 0; { Head loss formulas } - EN_DW = 1; - EN_CM = 2; - - EN_CFS = 0; { Flow units types } - EN_GPM = 1; - EN_MGD = 2; - EN_IMGD = 3; - EN_AFD = 4; - EN_LPS = 5; - EN_LPM = 6; - EN_MLD = 7; - EN_CMH = 8; - EN_CMD = 9; - EN_CMS = 10; - - EN_PSI = 0; { Pressure units types } - EN_KPA = 1; - EN_METERS = 2; - EN_BAR = 3; - EN_FEET = 4; - - EN_DDA = 0; { Demand model types } - EN_PDA = 1; - - EN_TRIALS = 0; { Option types } - EN_ACCURACY = 1; - EN_TOLERANCE = 2; - EN_EMITEXPON = 3; - EN_DEMANDMULT = 4; - EN_HEADERROR = 5; - EN_FLOWCHANGE = 6; - EN_HEADLOSSFORM = 7; - EN_GLOBALEFFIC = 8; - EN_GLOBALPRICE = 9; - EN_GLOBALPATTERN = 10; - EN_DEMANDCHARGE = 11; - EN_SP_GRAVITY = 12; - EN_SP_VISCOS = 13; - EN_EXTRA_ITER = 14; - EN_CHECKFREQ = 15; - EN_MAXCHECK = 16; - EN_DAMPLIMIT = 17; - EN_SP_DIFFUS = 18; - EN_BULKORDER = 19; - EN_WALLORDER = 20; - EN_TANKORDER = 21; - EN_CONCENLIMIT = 22; - EN_DEMANDPATTERN = 23; - EN_EMITBACKFLOW = 24; - EN_PRESS_UNITS = 25; - EN_STATUS_REPORT = 26; - - EN_LOWLEVEL = 0; { Control types } - EN_HILEVEL = 1; - EN_TIMER = 2; - EN_TIMEOFDAY = 3; - - EN_SERIES = 0; { Report statistic types } - EN_AVERAGE = 1; - EN_MINIMUM = 2; - EN_MAXIMUM = 3; - EN_RANGE = 4; - - EN_MIX1 = 0; { Tank mixing models } - EN_MIX2 = 1; - EN_FIFO = 2; - EN_LIFO = 3; - - EN_NOSAVE = 0; { Hydraulics flags } - EN_SAVE = 1; - EN_INITFLOW = 10; - EN_SAVE_AND_INIT = 11; - - EN_CONST_HP = 0; { Pump curve types } - EN_POWER_FUNC = 1; - EN_CUSTOM = 2; - EN_NOCURVE = 3; - - EN_VOLUME_CURVE = 0; { Curve types } - EN_PUMP_CURVE = 1; - EN_EFFIC_CURVE = 2; - EN_HLOSS_CURVE = 3; - EN_GENERIC_CURVE = 4; - EN_VALVE_CURVE = 5; - - EN_UNCONDITIONAL = 0; { Deletion action codes } - EN_CONDITIONAL = 1; - - EN_NO_REPORT = 0; { Status reporting levels } - EN_NORMAL_REPORT = 1; - EN_FULL_REPORT = 2; - - EN_R_NODE = 6; { Rule-based control objects } - EN_R_LINK = 7; - EN_R_SYSTEM = 8; - - EN_R_DEMAND = 0; { Rule-based control variables } - EN_R_HEAD = 1; - EN_R_GRADE = 2; - EN_R_LEVEL = 3; - EN_R_PRESSURE = 4; - EN_R_FLOW = 5; - EN_R_STATUS = 6; - EN_R_SETTING = 7; - EN_R_POWER = 8; - EN_R_TIME = 9; - EN_R_CLOCKTIME = 10; - EN_R_FILLTIME = 11; - EN_R_DRAINTIME = 12; - - EN_R_EQ = 0; { Rule-based control operators } - EN_R_NE = 1; - EN_R_LE = 2; - EN_R_GE = 3; - EN_R_LT = 4; - EN_R_GT = 5; - EN_R_IS = 6; - EN_R_NOT = 7; - EN_R_BELOW = 8; - EN_R_ABOVE = 9; - - EN_R_IS_OPEN = 1; { Rule-based control link status } - EN_R_IS_CLOSED = 2; - EN_R_IS_ACTIVE = 3; - - EN_FALSE = 0; { boolean false } - EN_TRUE = 1; { boolean true } - - -{$MACRO ON} - -{$ifdef MSWINDOWS} - EpanetLib = 'epanet2.dll'; - {$DEFINE cdecl := stdcall} -{$endif} - -{$ifdef UNIX} - {$ifdef DARWIN} - EpanetLib = 'libepanet2.dylib'; - {$linklib libepanet2} - {$else} - EpanetLib = 'libepanet2.so'; - {$endif} -{$endif} - -{$ifdef UNIX} - {$DEFINE TimeType:=Int64} -{$else} - {$DEFINE TimeType:=Integer} -{$endif} - -{Project Functions} - function ENepanet(F1: PAnsiChar; F2: PAnsiChar; F3: PAnsiChar; F4: Pointer): Integer; cdecl; external EpanetLib; - function ENinit(F2: PAnsiChar; F3: PAnsiChar; UnitsType: Integer; HeadlossType: Integer): Integer; cdecl; external EpanetLib; - function ENopen(F1: PAnsiChar; F2: PAnsiChar; F3: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENopenX(F1: PAnsiChar; F2: PAnsiChar; F3: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetcount(Code: Integer; var Count: Integer): Integer; cdecl; external EpanetLib; - function ENgettitle(Line1: PAnsiChar; Line2: PAnsiChar; Line3: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsettitle(Line1: PAnsiChar; Line2: PAnsiChar; Line3: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetcomment(ObjType: Integer; Index: Integer; Comment: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetcomment(ObjType: Integer; Index: Integer; Comment: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgettag(ObjType: Integer; Index: Integer; Tag: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsettag(ObjType: Integer; Index: Integer; Tag: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsaveinpfile(F: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENclose: Integer; cdecl; external EpanetLib; - -{Hydraulic Functions} - function ENsolveH: Integer; cdecl; external EpanetLib; - function ENsaveH: Integer; cdecl; external EpanetLib; - function ENopenH: Integer; cdecl; external EpanetLib; - function ENinitH(SaveFlag: Integer): Integer; cdecl; external EpanetLib; - function ENrunH(var T: TimeType): Integer; cdecl; external EpanetLib; - function ENnextH(var Tstep: TimeType): Integer; cdecl; external EpanetLib; - function ENcloseH: Integer; cdecl; external EpanetLib; - function ENsavehydfile(F: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENusehydfile(F: PAnsiChar): Integer; cdecl; external EpanetLib; - -{Quality Functions} - function ENsolveQ: Integer; cdecl; external EpanetLib; - function ENopenQ: Integer; cdecl; external EpanetLib; - function ENinitQ(SaveFlag: Integer): Integer; cdecl; external EpanetLib; - function ENrunQ(var T: TimeType): Integer; cdecl; external EpanetLib; - function ENnextQ(var Tstep: TimeType): Integer; cdecl; external EpanetLib; - function ENstepQ(var Tleft: TimeType): Integer; cdecl; external EpanetLib; - function ENcloseQ: Integer; cdecl; external EpanetLib; - -{Reporting Functions} - function ENwriteline(S: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENreport: Integer; cdecl; external EpanetLib; - function ENcopyreport(F: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENclearreport: Integer; cdecl; external EpanetLib; - function ENresetreport: Integer; cdecl; external EpanetLib; - function ENsetreport(S: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetstatusreport(Code: Integer): Integer; cdecl; external EpanetLib; - function ENgetversion(var Version: Integer): Integer; cdecl; external EpanetLib; - function ENgeterror(Errcode: Integer; Errmsg: PAnsiChar; MaxLen: Integer): Integer; cdecl; external EpanetLib; - function ENgetstatistic(StatType: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENgetresultindex(Code: Integer; Index: Integer; var Value: Integer): Integer; cdecl; external EpanetLib; - function ENtimetonextevent(var EventType: Integer; var Duration: TimeType; var ElementIndex: Integer): Integer; cdecl; external EpanetLib; - -{Analysis Options Functions} - function ENgetoption(Code: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENsetoption(Code: Integer; Value: Single): Integer; cdecl; external EpanetLib; - function ENgetflowunits(var Code: Integer): Integer; cdecl; external EpanetLib; - function ENsetflowunits(Code: Integer): Integer; cdecl; external EpanetLib; - function ENgettimeparam(Code: Integer; var Value: TimeType): Integer; cdecl; external EpanetLib; - function ENsettimeparam(Code: Integer; Value: TimeType): Integer; cdecl; external EpanetLib; - function ENgetqualinfo(var QualType: Integer; ChemName: PAnsiChar; ChemUnits: PAnsiChar; var TraceNode: Integer): Integer; cdecl; external EpanetLib; - function ENgetqualtype(var QualCode: Integer; var TraceNode: Integer): Integer; cdecl; external EpanetLib; - function ENsetqualtype(QualCode: Integer; ChemName: PAnsiChar; ChemUnits: PAnsiChar; TraceNodeID: PAnsiChar): Integer; cdecl; external EpanetLib; - -{Node Functions} - function ENaddnode(ID: PAnsiChar; NodeType: Integer; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENdeletenode(Index: Integer; ActionCode: Integer): Integer; cdecl; external EpanetLib; - function ENgetnodeindex(ID: PAnsiChar; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetnodeid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetnodeid(Index: Integer; NewID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetnodetype(Index: Integer; var Code: Integer): Integer; cdecl; external EpanetLib; - function ENgetnodevalue(Index: Integer; Code: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENsetnodevalue(Index: Integer; Code: Integer; Value: Single): Integer; cdecl; external EpanetLib; - function ENsetjuncdata(Index: Integer; Elev: Single; Dmnd: Single; DmndPat: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsettankdata(Index: Integer; Elev, InitLvl, MinLvl, MaxLvl, Diam, MinVol: Single; VolCurve: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetcoord(Index: Integer; var X: Double; var Y: Double): Integer; cdecl; external EpanetLib; - function ENsetcoord(Index: Integer; X: Double; Y: Double): Integer; cdecl; external EpanetLib; - function ENgetnodevalues(Code: Integer; var X: array of Single): Integer; cdecl; external EpanetLib; - -{Demand Functions} - function ENgetdemandmodel(var Model: Integer; var Pmin: Single; var Preq: Single; var Pexp: Single): Integer; cdecl; external EpanetLib; - function ENsetdemandmodel(Model: Integer; Pmin: Single; Preq: Single; Pexp: Single): Integer; cdecl; external EpanetLib; - function ENgetnumdemands(NodeIndex: Integer; var NumDemands: Integer): Integer; cdecl; external EpanetLib; - function ENadddemand(NodeIndex: Integer; BaseDemand: Single; PatName: PAnsiChar; DemandName: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENdeletedemand(NodeIndex: Integer; DemandIndex: Integer): Integer; cdecl; external EpanetLib; - function ENgetdemandindex(NodeIndex: Integer; DemandName: PAnsiChar; var DemandIndex: Integer): Integer; cdecl; external EpanetLib; - function ENgetbasedemand(NodeIndex: Integer; DemandIndex: Integer; var BaseDemand: Single): Integer; cdecl; external EpanetLib; - function ENsetbasedemand(NodeIndex: Integer; DemandIndex: Integer; BaseDemand: Single): Integer; cdecl; external EpanetLib; - function ENgetdemandpattern(NodeIndex: Integer; DemandIndex: Integer; var PatIndex: Integer): Integer; cdecl; external EpanetLib; - function ENsetdemandpattern(NodeIndex: Integer; DemandIndex: Integer; PatIndex: Integer): Integer; cdecl; external EpanetLib; - function ENgetdemandname(NodeIndex: Integer; DemandIndex: Integer; DemandName: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetdemandname(NodeIndex: Integer; DemandIndex: Integer; DemandName: PAnsiChar): Integer; cdecl; external EpanetLib; - -{Link Functions} - function ENaddlink(ID: PAnsiChar; LinkType: Integer; FromNode: PAnsiChar; ToNode: PAnsiChar; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENdeletelink(Index: Integer; ActionCode: Integer): Integer; cdecl; external EpanetLib; - function ENgetlinkindex(ID: PAnsiChar; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetlinkid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetlinkid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetlinktype(Index: Integer; var Code: Integer): Integer; cdecl; external EpanetLib; - function ENsetlinktype(var Index: Integer; LinkType: Integer; ActionCode: Integer): Integer; cdecl; external EpanetLib; - function ENgetlinknodes(Index: Integer; var Node1: Integer; var Node2: Integer): Integer; cdecl; external EpanetLib; - function ENsetlinknodes(Index: Integer; Node1: Integer; Node2: Integer): Integer; cdecl; external EpanetLib; - function ENgetlinkvalue(Index: Integer; Code: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENsetlinkvalue(Index: Integer; Code: Integer; Value: Single): Integer; cdecl; external EpanetLib; - function ENsetpipedata(Index: Integer; Length: Single; Diam: Single; Rough: Single; Mloss:Single): Integer; cdecl; external EpanetLib; - function ENgetlinkvalues(Code: Integer; var X: array of Single): Integer; cdecl; external EpanetLib; - - function ENgetvertexcount(Index: Integer; var Count: Integer): Integer; cdecl; external EpanetLib; - function ENgetvertex(Index: Integer; Vertex: Integer; var X: Double; var Y: Double): Integer; cdecl; external EpanetLib; - function ENsetvertex(Index: Integer; Vertex: Integer; X: Double; Y: Double): Integer; cdecl; external EpanetLib; - function ENsetvertices(Index: Integer; var X: Double; var Y: Double; Count: Integer): Integer; cdecl; external EpanetLib; - -{Pump Functions} - function ENgetpumptype(LinkIndex: Integer; var PumpType: Integer): Integer; cdecl; external EpanetLib; - function ENgetheadcurveindex(LinkIndex: Integer; var CurveIndex: Integer): Integer; cdecl; external EpanetLib; - function ENsetheadcurveindex(LinkIndex: Integer; CurveIndex: Integer): Integer; cdecl; external EpanetLib; - -{Pattern Functions} - function ENaddpattern(ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENdeletepattern(Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetpatternindex(ID: PAnsiChar; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetpatternid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetpatternid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetpatternlen(Index: Integer; var Len: Integer): Integer; cdecl; external EpanetLib; - function ENgetpatternvalue(Index: Integer; Period: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENsetpatternvalue(Index: Integer; Period: Integer; Value: Single): Integer; cdecl; external EpanetLib; - function ENgetaveragepatternvalue(Index: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENsetpattern(Index: Integer; var F: Single; N: Integer): Integer; cdecl; external EpanetLib; - -{Curve Functions} - function ENaddcurve(ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENdeletecurve(Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetcurveindex(ID: PAnsiChar; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetcurveid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetcurveid(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENgetcurvelen(Index: Integer; var Len: Integer): Integer; cdecl; external EpanetLib; - function ENgetcurvetype(Index: Integer; var CurveType: Integer): Integer; cdecl; external EpanetLib; - function ENsetcurvetype(Index: Integer; CurveType: Integer): Integer; cdecl; external EpanetLib; - function ENgetcurvevalue(CurveIndex: Integer; PointIndex: Integer; var X: Single; var Y: Single): Integer; cdecl; external EpanetLib; - function ENsetcurvevalue(CurveIndex: Integer; PointIndex: Integer; X: Single; Y: Single): Integer; cdecl; external EpanetLib; - function ENgetcurve(Index: Integer; ID: PAnsiChar; var N: Integer; var X: Single; var Y: Single): Integer; cdecl; external EpanetLib; - function ENsetcurve(Index: Integer; var X: Single; var Y: Single; N: Integer): Integer; cdecl; external EpanetLib; - -{Control Functions} - function ENaddcontrol(Ctype: Integer; Link: Integer; Setting: Single; Node: Integer; Level: Single; var Index: Integer): Integer; cdecl; external EpanetLib; - function ENdeletecontrol(Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetcontrol(Index: Integer; var Ctype: Integer; var Link: Integer; var Setting: Single; var Node: Integer; var Level: Single): Integer; cdecl; external EpanetLib; - function ENsetcontrol(Index: Integer; Ctype: Integer; Link: Integer; Setting: Single; Node: Integer; Level: Single): Integer; cdecl; external EpanetLib; - function ENgetcontrolenabled(Index: Integer; var out_enabled: Integer): Integer; cdecl; external EpanetLib; - function ENsetcontrolenabled(Index: Integer; enabled: Integer): Integer; cdecl; external EpanetLib; - - {Rule-Based Control Functions} - function ENaddrule(Rule: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENdeleterule(Index: Integer): Integer; cdecl; external EpanetLib; - function ENgetrule(Index: Integer; var Npremises: Integer; var NthenActions: Integer; - var NelseActions: Integer; var Priority: Single): Integer; cdecl; external EpanetLib; - function ENgetruleID(Index: Integer; ID: PAnsiChar): Integer; cdecl; external EpanetLib; - function ENsetrulepriority(Index: Integer; Priority: Single): Integer; cdecl; external EpanetLib; - function ENgetpremise(RuleIndex: Integer; PremiseIndex: Integer; var LogOp: Integer; - var ObjType: Integer; var ObjIndex: Integer; var Param: Integer; var RelOp: Integer; - var Status: Integer; var Value: Single): Integer; cdecl; external EpanetLib; - function ENsetpremise(RuleIndex: Integer; PremiseIndex: Integer; LogOp: Integer; ObjType: Integer; - ObjIndex: Integer; Param: Integer; RelOp: Integer; Status: Integer; Value: Single): Integer; cdecl; external EpanetLib; - function ENsetpremiseindex(RuleIndex: Integer; PremiseIndex: Integer; ObjIndex: Integer): Integer; cdecl; external EpanetLib; - function ENsetpremisestatus(RuleIndex: Integer; PremiseIndex: Integer; Status: Integer): Integer; cdecl; external EpanetLib; - function ENsetpremisevalue(RuleIndex: Integer; PremiseIndex: Integer; Value: Single): Integer; cdecl; external EpanetLib; - function ENgetthenaction(RuleIndex: Integer; ActionIndex: Integer; var LinkIndex: Integer; - var Status: Integer; var Setting: Single): Integer; cdecl; external EpanetLib; - function ENsetthenaction(RuleIndex: Integer; ActionIndex: Integer; LinkIndex: Integer; - Status: Integer; Setting: Single): Integer; cdecl; external EpanetLib; - function ENgetelseaction(RuleIndex: Integer; ActionIndex: Integer; var LinkIndex: Integer; - var Status: Integer; var Setting: Single): Integer; cdecl; external EpanetLib; - function ENsetelseaction(RuleIndex: Integer; ActionIndex: Integer; LinkIndex: Integer; - Status: Integer; Setting: Single): Integer; cdecl; external EpanetLib; - function ENgetruleenabled(Index: Integer; var out_enabled: Integer): Integer; cdecl; external EpanetLib; - function ENsetruleenabled(Index: Integer; enabled: Integer): Integer; cdecl; external EpanetLib; - -implementation - -end. diff --git a/epanet/linux/epanet2_2.h b/epanet/linux/epanet2_2.h deleted file mode 100644 index eca5095..0000000 --- a/epanet/linux/epanet2_2.h +++ /dev/null @@ -1,1960 +0,0 @@ -/** @file epanet2_2.h - @see http://github.com/openwateranalytics/epanet - */ - -/* - ****************************************************************************** - Project: OWA EPANET - Version: 2.3 - Module: epanet2.h - Description: API function declarations - Authors: see AUTHORS - Copyright: see AUTHORS - License: see LICENSE - Last Updated: 04/25/2025 - ****************************************************************************** - */ - -#ifndef EPANET2_2_H -#define EPANET2_2_H - -#ifdef epanet_py_EXPORTS - #define DLLEXPORT -#else - #ifndef DLLEXPORT - #ifdef _WIN32 - #ifdef epanet2_EXPORTS - #define DLLEXPORT __declspec(dllexport) __stdcall - #else - #define DLLEXPORT __declspec(dllimport) __stdcall - #endif - #elif defined(__CYGWIN__) - #define DLLEXPORT __stdcall - #else - #define DLLEXPORT - #endif - #endif -#endif - -#include "epanet2_enums.h" - -// --- Declare the EPANET toolkit functions -#if defined(__cplusplus) -extern "C" { -#endif - -/** - @brief The EPANET Project wrapper object -*/ -typedef struct Project *EN_Project; - -/*=================================================================== - - Project Functions - -===================================================================*/ - - /** - @brief Creates an EPANET project. - @param[out] ph an EPANET project handle that is passed into all other API functions. - @return an error code. - - EN_createproject must be called before any other API functions are used. - */ - int DLLEXPORT EN_createproject(EN_Project *ph); - - /** - @brief Deletes a currently opened EPANET project. - @param[in,out] ph an EPANET project handle which is returned as NULL. - @return an error code. - - EN_deleteproject should be called after all network analysis has been completed. - */ - int DLLEXPORT EN_deleteproject(EN_Project ph); - - /** - @brief Runs a complete EPANET simulation. - @param ph an EPANET project handle. - @param inpFile the name of an existing EPANET-formatted input file. - @param rptFile the name of a report file to be created (or "" if not needed) - @param outFile the name of a binary output file to be created (or "" if not needed) - @param pviewprog a callback function that takes a character string (char *) as its only parameter. - @return an error code - - The callback function should reside in and be used by the calling code to display - the progress messages that EPANET generates as it carries out its computations. Here is - an example of a such a function that displays progress messages to stdout: - \code {.c} - void writeConsole(char *s) - { - fprintf(stdout, "\n%s", s); - } - \endcode - It would be passed into EN_runproject as `&writeConsole`. If this feature is not needed then - the pviewprog argument should be `NULL`. - */ - int DLLEXPORT EN_runproject(EN_Project ph, const char *inpFile, const char *rptFile, - const char *outFile, void (*pviewprog)(char *)); - - /** - @brief Initializes an EPANET project. - @param ph an EPANET project handle. - @param rptFile the name of a report file to be created (or "" if not needed). - @param outFile the name of a binary output file to be created (or "" if not needed). - @param unitsType the choice of flow units (see @ref EN_FlowUnits). - @param headLossType the choice of head loss formula (see @ref EN_HeadLossType). - @return an error code. - - This function should be called immediately after ::EN_createproject if an EPANET-formatted input - file will not be used to supply network data. If the project receives it's network data - from an input file then there is no need to call this function. - */ - int DLLEXPORT EN_init(EN_Project ph, const char *rptFile, const char *outFile, - int unitsType, int headLossType); - - /** - @brief Reads an EPANET input file with no errors allowed. - @param ph an EPANET project handle. - @param inpFile the name of an existing EPANET-formatted input file. - @param rptFile the name of a report file to be created (or "" if not needed). - @param outFile the name of a binary output file to be created (or "" if not needed). - @return an error code. - - This function should be called immediately after ::EN_createproject if an EPANET-formatted - input file will be used to supply network data. If errors are detected then the project is - not opened and will not accept toolkit function calls. - */ - int DLLEXPORT EN_open(EN_Project ph, const char *inpFile, const char *rptFile, - const char *outFile); - - /** - @brief Reads an EPANET input file with errors allowed. - @param ph an EPANET project handle. - @param inpFile the name of an existing EPANET-formatted input file. - @param rptFile the name of a report file to be created (or "" if not needed). - @param outFile the name of a binary output file to be created (or "" if not needed). - @return an error code. - - This function should be called immediately after ::EN_createproject if an EPANET-formatted - input file will be used to supply network data. If formatting errors are detected (error - code = 200) then the project remains open and will accept toolkit function calls. - */ - int DLLEXPORT EN_openX(EN_Project ph, const char *inpFile, const char *rptFile, - const char *outFile); - - /** - @brief Retrieves the title lines of the project - @param ph an EPANET project handle. - @param[out] out_line1 first title line - @param[out] out_line2 second title line - @param[out] out_line3 third title line - @return an error code - */ - int DLLEXPORT EN_gettitle(EN_Project ph, char *out_line1, char *out_line2, char *out_line3); - - /** - @brief Sets the title lines of the project - @param ph an EPANET project handle. - @param line1 first title line - @param line2 second title line - @param line3 third title line - @return an error code - */ - int DLLEXPORT EN_settitle(EN_Project ph, const char *line1, const char *line2, - const char *line3); - - /** - @brief Retrieves a descriptive comment assigned to a Node, Link, Pattern or Curve. - @param ph an EPANET project handle. - @param object a type of object (either EN_NODE, EN_LINK, EN_TIMEPAT or EN_CURVE) - @param index the object's index starting from 1 - @param[out] out_comment the comment string assigned to the object - @return an error code - */ - int DLLEXPORT EN_getcomment(EN_Project ph, int object, int index, char *out_comment); - - /** - @brief Assigns a descriptive comment to a Node, Link, Pattern or Curve. - @param ph an EPANET project handle. - @param object a type of object (either EN_NODE, EN_LINK, EN_TIMEPAT or EN_CURVE) - @param index the object's index starting from 1 - @param comment the comment string assigned to the object - @return an error code - */ - int DLLEXPORT EN_setcomment(EN_Project ph, int object, int index, - const char *comment); - - /** - @brief Retrieves a tag string assigned to a Node or Link. - @param ph an EPANET project handle. - @param object a type of object (either EN_NODE or EN_LINK) - @param index the object's index starting from 1 - @param[out] out_tag the tag string assigned to the object - @return an error code - */ - int DLLEXPORT EN_gettag(EN_Project ph, int object, int index, char *out_tag); - - /** - @brief Assigns a tag string to a Node or Link. - @param ph an EPANET project handle. - @param object a type of object (either EN_NODE or EN_LINK) - @param index the object's index starting from 1 - @param tag the tag string assigned to the object - @return an error code - */ - int DLLEXPORT EN_settag(EN_Project ph, int object, int index, - const char *tag); - - /** - @brief Retrieves the number of objects of a given type in a project. - @param ph an EPANET project handle. - @param object a type of object to count (see @ref EN_CountType) - @param[out] out_count number of objects of the specified type - @return an error code - */ - int DLLEXPORT EN_getcount(EN_Project ph, int object, int *out_count); - - /** - @brief Saves a project's data to an EPANET-formatted text file. - @param ph an EPANET project handle. - @param filename the name of the file to create. - @return an error code - */ - int DLLEXPORT EN_saveinpfile(EN_Project ph, const char *filename); - - /** - @brief Closes a project and frees all of its memory. - @param ph an EPANET project handle. - @return an error code - - This function clears all existing data from a project but does not delete the - project, so it can be re-used with another set of network data. Use ::EN_deleteproject - to actually delete a project from memory. - */ - int DLLEXPORT EN_close(EN_Project ph); - -/*=================================================================== - - Hydraulic Analysis Functions - -===================================================================*/ - - /** - @brief Runs a complete hydraulic simulation with results for all time periods - written to a temporary hydraulics file. - @param ph an EPANET project handle. - @return an error code. - - Use ::EN_solveH to generate a complete hydraulic solution which can stand alone - or be used as input to a water quality analysis. This function will not allow one to - examine intermediate hydraulic results as they are generated. It can also be followed by calls - to ::EN_saveH and ::EN_report to write hydraulic results to the report file. - - The sequence ::EN_openH - ::EN_initH - ::EN_runH - ::EN_nextH - ::EN_closeH - can be used instead to gain access to results at intermediate time periods and - directly adjust link status and control settings as a simulation proceeds. - - Example: - \code {.c} - EN_Project ph; - EN_createproject(&ph); - EN_open(ph, "net1.inp", "net1.rpt", ""); - EN_solveH(ph); - EN_solveQ(ph); - EN_report(ph); - EN_deleteproject(ph); - \endcode - */ - int DLLEXPORT EN_solveH(EN_Project ph); - - /** - @brief Uses a previously saved binary hydraulics file to supply a project's hydraulics. - @param ph an EPANET project handle. - @param filename the name of the binary file containing hydraulic results. - @return an error code. - - Call this function to re-use a set of hydraulic analysis results saved previously. This - can save computational time if water quality analyses are being made under the same set - of hydraulic conditions. - - Do not call this function while the hydraulics solver is open. - */ - int DLLEXPORT EN_usehydfile(EN_Project ph, const char *filename); - - /** - @brief Opens a project's hydraulic solver. - @param ph an EPANET project handle. - @return an error code. - - Call ::EN_openH prior to running the first hydraulic analysis using the - ::EN_initH - ::EN_runH - ::EN_nextH sequence. Multiple analyses can be made before - calling ::EN_closeH to close the hydraulic solver. - - Do not call this function if ::EN_solveH is being used to run a complete hydraulic - analysis or if hydraulics are being supplied by a previously saved hydraulics file - using ::EN_usehydfile. - */ - int DLLEXPORT EN_openH(EN_Project ph); - - /** - @brief Initializes a network prior to running a hydraulic analysis. - @param ph an EPANET project handle. - @param initFlag a 2-digit initialization flag (see @ref EN_InitHydOption). - @return an error code. - - This function initializes storage tank levels, link status and settings, and - the simulation time clock prior to running a hydraulic analysis. - - The initialization flag is a two digit number where the 1st (left) digit - indicates if link flows should be re-initialized (1) or not (0), and the - 2nd digit indicates if hydraulic results should be saved to a temporary - binary hydraulics file (1) or not (0). - - Be sure to call ::EN_initH prior to running a hydraulic analysis using a - ::EN_runH - ::EN_nextH loop. - - Choose to save hydraulics results if you will be: - - making a subsequent water quality run, - - using ::EN_report to generate a report - - using ::EN_savehydfile to save the binary hydraulics file. - - There is no need to save hydraulics if you will be writing custom code to - process hydraulic results as they are generated using the functions ::EN_getnodevalue - and ::EN_getlinkvalue. - */ - int DLLEXPORT EN_initH(EN_Project ph, int initFlag); - - /** - @brief Computes a hydraulic solution for the current point in time. - @param ph an EPANET project handle. - @param[out] out_currentTime the current simulation time in seconds. - @return an error or warning code. - - This function is used in a loop with ::EN_nextH to run an extended period hydraulic - simulation. This process automatically updates the simulation clock time so `currentTime` - should be treated as a read-only variable. - - ::EN_initH must have been called prior to running the ::EN_runH - ::EN_nextH loop. - - See ::EN_nextH for an example of using this function. - */ - int DLLEXPORT EN_runH(EN_Project ph, long *out_currentTime); - - /** - @brief Determines the length of time until the next hydraulic event occurs in an - extended period simulation. - @param ph an EPANET project handle. - @param[out] out_tStep the time (in seconds) until the next hydraulic event or 0 if at - the end of the full simulation duration. - @return an error code. - - This function is used in a loop with ::EN_runH to run an extended period hydraulic - simulation. - - The value of `out_tstep` should be treated as a read-only variable. It is automatically - computed as the smaller of: - - the time interval until the next hydraulic time step begins - - the time interval until the next reporting time step begins - - the time interval until the next change in demands occurs - - the time interval until a tank becomes full or empty - - the time interval until a control or rule fires. - - Example: - \code {.c} - long t, tstep; - EN_openH(ph); - EN_initH(ph, EN_NOSAVE); - do { - EN_runH(ph, &t); - // Retrieve hydraulic results for time t - EN_nextH(ph, &tstep); - } while (tstep > 0); - EN_closeH(ph); - \endcode - */ - int DLLEXPORT EN_nextH(EN_Project ph, long *out_tStep); - - /** - @brief Transfers a project's hydraulics results from its temporary hydraulics file - to its binary output file, where results are only reported at uniform reporting intervals. - @param ph an EPANET project handle. - @return an error code. - - ::EN_saveH is used when only a hydraulic analysis is run and results at uniform reporting - intervals need to be transferred to a project's binary output file. Such would be the case - when results are to be written in formatted fashion to the project's report file using ::EN_report. - */ - int DLLEXPORT EN_saveH(EN_Project ph); - - /** - @brief Saves a project's temporary hydraulics file to disk. - @param ph an EPANET project handle. - @param filename the name of the file to be created. - @return an error code. - - Use this function to save the current set of hydraulics results to a file, either for - post-processing or to be used at a later time by calling the ::EN_usehydfile function. - - The hydraulics file contains nodal demands and heads and link flows, status, and settings - for all hydraulic time steps, even intermediate ones. - - Before calling this function hydraulic results must have been generated and saved by having - called ::EN_solveH or the ::EN_initH - ::EN_runH - ::EN_nextH sequence with the initflag - argument of ::EN_initH set to `EN_SAVE` or `EN_SAVE_AND_INIT`. - */ - int DLLEXPORT EN_savehydfile(EN_Project ph, const char *filename); - - /** - @brief Closes the hydraulic solver freeing all of its allocated memory. - @return an error code. - - Call ::EN_closeH after all hydraulics analyses have been made using - ::EN_initH - ::EN_runH - ::EN_nextH. Do not call this function if ::EN_solveH is being used. - */ - int DLLEXPORT EN_closeH(EN_Project ph); - -/*=================================================================== - - Water Quality Analysis Functions - -===================================================================*/ - - /** - @brief Runs a complete water quality simulation with results at uniform - reporting intervals written to the project's binary output file. - @param ph an EPANET project handle. - @return an error code. - - A hydraulic analysis must have been run and saved to a hydraulics file before - calling ::EN_solveQ. This function will not allow one to examine intermediate water - quality results as they are generated. It can be followed by a call to ::EN_report - to write all hydraulic and water quality results to a formatted report file. - - One can instead use the ::EN_openQ - ::EN_initQ - ::EN_runQ - ::EN_nextQ - ::EN_closeQ - sequence to gain access to gain access to water quality results at intermediate time - periods. - - Example: see ::EN_solveH. - */ - int DLLEXPORT EN_solveQ(EN_Project ph); - - /** - @brief Opens a project's water quality solver. - @param ph an EPANET project handle. - @return an error code. - - Call ::EN_openQ prior to running the first water quality analysis using an - ::EN_initQ - ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) sequence. Multiple water - quality analyses can be made before calling ::EN_closeQ to close the water - quality solver. - - Do not call this function if a complete water quality analysis will be made - using ::EN_solveQ. - */ - int DLLEXPORT EN_openQ(EN_Project ph); - - /** - @brief Initializes a network prior to running a water quality analysis. - @param ph an EPANET project handle. - @param saveFlag set to `EN_SAVE` (1) if results are to be saved to the project's - binary output file, or to `EN_NOSAVE` (0) if not. - @return an error code. - - Call ::EN_initQ prior to running a water quality analysis using ::EN_runQ in - conjunction with either ::EN_nextQ or ::EN_stepQ. - - ::EN_openQ must have been called prior to calling ::EN_initQ. - - Do not call ::EN_initQ if a complete water quality analysis will be made using ::EN_solveQ. - */ - int DLLEXPORT EN_initQ(EN_Project ph, int saveFlag); - - /** - @brief Makes hydraulic and water quality results at the start of the current time - period available to a project's water quality solver. - @param ph an EPANET project handle. - @param[out] out_currentTime current simulation time in seconds. - @return an error code. - - Use ::EN_runQ along with ::EN_nextQ in a loop to access water quality results at the - start of each hydraulic period in an extended period simulation. Or use it in a loop - with ::EN_stepQ to access results at the start of each water quality time step. See - each of these functions for examples of how to code such loops. - - ::EN_initQ must have been called prior to running an ::EN_runQ - ::EN_nextQ - (or ::EN_stepQ) loop. - - The current time of the simulation, `out_currentTime`, is determined from information - saved with the hydraulic analysis that preceded the water quality analysis. Treat it - as a read-only variable. - */ - int DLLEXPORT EN_runQ(EN_Project ph, long *out_currentTime); - - /** - @brief Advances a water quality simulation over the time until the next hydraulic event. - @param ph an EPANET project handle. - @param[out] out_tStep time (in seconds) until the next hydraulic event or 0 if at the end - of the full simulation duration. - @return an error code. - - This function is used in a loop with ::EN_runQ to perform an extended period water - quality analysis. It reacts and routes a project's water quality constituent over a - time step determined by when the next hydraulic event occurs. Use ::EN_stepQ instead - if you wish to generate results over each water quality time step. - - The value of `out_tStep` is determined from information produced by the hydraulic analysis - that preceded the water quality analysis. Treat it as a read-only variable. - - Example: - \code {.c} - long t, tStep; - EN_solveH(ph); // Generate & save hydraulics - EN_openQ(ph); - EN_initQ(ph, EN_NOSAVE); - do { - EN_runQ(ph, &t); - // Monitor results at time t, which - // begins a new hydraulic time period - EN_nextQ(ph, &tStep); - } while (tStep > 0); - EN_closeQ(ph); - \endcode - */ - int DLLEXPORT EN_nextQ(EN_Project ph, long *out_tStep); - - /** - @brief Advances a water quality simulation by a single water quality time step. - @param ph an EPANET project handle. - @param[out] out_timeLeft time left (in seconds) to the overall simulation duration. - @return an error code. - - This function is used in a loop with ::EN_runQ to perform an extended period water - quality simulation. It allows one to generate water quality results at each water - quality time step of the simulation, rather than over each hydraulic event period - as with ::EN_nextQ. - - Use the argument `out_timeLeft` to determine when no more calls to ::EN_runQ are needed - because the end of the simulation period has been reached (i.e., when `out_timeLeft` = 0). - */ - int DLLEXPORT EN_stepQ(EN_Project ph, long *out_timeLeft); - - /** - @brief Closes the water quality solver, freeing all of its allocated memory. - @param ph an EPANET project handle. - @return an error code. - - Call ::EN_closeQ after all water quality analyses have been made using the - ::EN_initQ - ::EN_runQ - ::EN_nextQ (or ::EN_stepQ) sequence of function calls. - - Do not call this function if ::EN_solveQ is being used. - */ - int DLLEXPORT EN_closeQ(EN_Project ph); - -/*=================================================================== - - Reporting Functions - -===================================================================*/ - - /** - @brief Sets a user-supplied callback function for reporting - @param ph an EPANET project handle. - @param callback a function pointer used for reporting. - @return an error code. - - The callback function replaces the project's report file as - the destination for all output written by ::EN_writeline. It must have - the following signature: - - `void(void *userData, void *EN_projectHandle p, const char* s)` - - The `userData` parameter is a pointer to a client-side data object. - It can be changed using the ::EN_setreportcallbackuserdata function. - The parameter `s` is a placeholder for the EPANET-generated string - that was passed into ::EN_writeline. Setting the callback function to - NULL reverts to having ::EN_writeline use the project's report file. - */ - int DLLEXPORT EN_setreportcallback(EN_Project ph, void(*callback)(void *userData, void *EN_projectHandle, const char*)); - - /** - @brief Sets a pointer to a client-side data object - @param ph an EPANET project handle. - @param userData a pointer to a client-side data object. - @return an error code. - - The data pointer supplied by this function is passed into the callback - function declared in ::EN_setreportcallback that replaces a project's - report file as the destination for output written with ::EN_writeline. - */ - int DLLEXPORT EN_setreportcallbackuserdata(EN_Project ph, void *userData); - - /** - @brief Writes a line of text to a project's report file. - @param ph an EPANET project handle. - @param line a text string to write. - @return an error code. - - ::EN_setreportcallback can be used to assign an alternative destination - to write `line` to in place of the project's report file. - */ - int DLLEXPORT EN_writeline(EN_Project ph, const char *line); - - /** - @brief Writes simulation results in a tabular format to a project's report file. - @param ph an EPANET project handle. - @return an error code - - Either a full hydraulic analysis or full hydraulic and water quality analysis must - have been run, with results saved to file, before ::EN_report is called. In the - former case, ::EN_saveH must also be called first to transfer results from the - project's intermediate hydraulics file to its output file. - - The format of the report is controlled by commands issued with ::EN_setreport. - */ - int DLLEXPORT EN_report(EN_Project ph); - - /** - @brief Copies the current contents of a project's report file to another file. - @param ph an EPANET project handle. - @param filename the full path name of the destination file. - @return an error code. - - This function allows toolkit clients to retrieve the contents of a project's - report file while the project is still open. - */ - int DLLEXPORT EN_copyreport(EN_Project ph, const char *filename); - - /** - @brief Clears the contents of a project's report file. - @param ph an EPANET project handle. - @return an error code. - */ - int DLLEXPORT EN_clearreport(EN_Project ph); - - /** - @brief Resets a project's report options to their default values. - @param ph an EPANET project handle. - @return an error code - - After calling this function the default reporting options are in effect. These are: - - no status report - - no energy report - - no nodes reported on - - no links reported on - - node variables reported to 2 decimal places - - link variables reported to 2 decimal places (3 for friction factor) - - node variables reported are elevation, head, pressure, and quality - - link variables reported are flow, velocity, and head loss. - */ - int DLLEXPORT EN_resetreport(EN_Project ph); - - /** - @brief Processes a reporting format command. - @param ph an EPANET project handle. - @param format a report formatting command. - @return an error code - - Acceptable report formatting commands are described in the @ref ReportPage section of - the @ref InpFile topic. - - Formatted results of a simulation can be written to a project's report file - using the ::EN_report function. - */ - int DLLEXPORT EN_setreport(EN_Project ph, const char *format); - - /** - @brief Sets the level of hydraulic status reporting. - @param ph an EPANET project handle. - @param level a status reporting level code (see @ref EN_StatusReport). - @return an error code. - - Status reporting writes changes in the hydraulics status of network elements to a - project's report file as a hydraulic simulation unfolds. There are three levels - of reporting: `EN_NO_REPORT` (no status reporting), `EN_NORMAL_REPORT` (normal - reporting) `EN_FULL_REPORT` (full status reporting). - - The full status report contains information at each trial of the solution to the - system hydraulic equations at each time step of a simulation. It is useful mainly - for debugging purposes. - - If many hydraulic analyses will be run in the application it is recommended that - status reporting be turned off (`level` = `EN_NO_REPORT`). - */ - int DLLEXPORT EN_setstatusreport(EN_Project ph, int level); - - /** - @brief Retrieves the toolkit API version number. - @param[out] out_version the version of the OWA-EPANET toolkit. - @return an error code. - - The version number is to be interpreted with implied decimals, i.e., - "20100" == "2(.)01(.)00" - */ - int DLLEXPORT EN_getversion(int *out_version); - - /** - @brief Returns the text of an error message generated by an error code. - @param errcode an error code. - @param[out] out_errmsg the error message generated by the error code - @param maxLen maximum number of characters that errmsg can hold - @return an error code - - Error message strings should be greater than @ref EN_SizeLimits "EN_MAXMSG" characters in length. - */ - int DLLEXPORT EN_geterror(int errcode, char *out_errmsg, int maxLen); - - /** - @brief Retrieves a particular simulation statistic. - @param ph an EPANET project handle. - @param type the type of statistic to retrieve (see @ref EN_AnalysisStatistic). - @param[out] out_value the value of the statistic. - @return an error code - */ - int DLLEXPORT EN_getstatistic(EN_Project ph, int type, double* out_value); - - - /** - @brief Gets information about when the next hydraulic time step occurs. - @param ph an EPANET project handle. - @param[out] eventType the type of event that will occur (see @ref EN_TimestepEvent). - @param[out] duration the amount of time in the future this event will occur - @param[out] elementIndex the index of the element causing the event. - **/ - int DLLEXPORT EN_timetonextevent(EN_Project ph, int *eventType, long *duration, int *elementIndex); - - /** - @brief Retrieves the order in which a node or link appears in an @ref OutFile "output file". - @param ph an EPANET project handle. - @param type a type of element (either @ref EN_NODE or @ref EN_LINK). - @param index the element's current index (starting from 1). - @param[out] out_value the order in which the element's results were written to file. - @return an error code. - - If the element does not appear in the file then its result index is 0. - - This function can be used to correctly retrieve results from an EPANET binary output file - after the order of nodes or links in a network's database has been changed due to editing - operations. - */ - int DLLEXPORT EN_getresultindex(EN_Project ph, int type, int index, int *out_value); - -/*=================================================================== - - Analysis Options Functions - -===================================================================*/ - - /** - @brief Retrieves the value of an analysis option. - @param ph an EPANET project handle. - @param option a type of analysis option (see @ref EN_Option). - @param[out] out_value the current value of the option. - @return an error code - */ - int DLLEXPORT EN_getoption(EN_Project ph, int option, double *out_value); - - /** - @brief Sets the value for an analysis option. - @param ph an EPANET project handle. - @param option a type of analysis option (see @ref EN_Option). - @param value the new value assigned to the option. - @return an error code. - @see EN_Option - */ - int DLLEXPORT EN_setoption(EN_Project ph, int option, double value); - - /** - @brief Retrieves a project's flow units. - @param ph an EPANET project handle. - @param[out] out_units a flow units code (see @ref EN_FlowUnits) - @return an error code. - - Flow units in liters or cubic meters implies that SI metric units are used for all - other quantities in addition to flow. Otherwise US Customary units are employed. - */ - int DLLEXPORT EN_getflowunits(EN_Project ph, int *out_units); - - /** - @brief Sets a project's flow units. - @param ph an EPANET project handle. - @param units a flow units code (see @ref EN_FlowUnits) - @return an error code. - - Flow units in liters or cubic meters implies that SI metric units are used for all - other quantities in addition to flow. Otherwise US Customary units are employed. - */ - int DLLEXPORT EN_setflowunits(EN_Project ph, int units); - - /** - @brief Retrieves the value of a time parameter. - @param ph an EPANET project handle. - @param param a time parameter code (see @ref EN_TimeParameter). - @param[out] out_value the current value of the time parameter (in seconds). - @return an error code. - */ - int DLLEXPORT EN_gettimeparam(EN_Project ph, int param, long *out_value); - - /** - @brief Sets the value of a time parameter. - @param ph an EPANET project handle. - @param param a time parameter code (see @ref EN_TimeParameter). - @param value the new value of the time parameter (in seconds) - @return an error code. - */ - int DLLEXPORT EN_settimeparam(EN_Project ph, int param, long value); - - /** - @brief Gets information about the type of water quality analysis requested. - @param ph an EPANET project handle. - @param[out] out_qualType type of analysis to run (see @ref EN_QualityType). - @param[out] out_chemName name of chemical constituent. - @param[out] out_chemUnits concentration units of the constituent. - @param[out] out_traceNode index of the node being traced (if applicable). - @return an error code. - */ - int DLLEXPORT EN_getqualinfo(EN_Project ph, int *out_qualType, char *out_chemName, - char *out_chemUnits, int *out_traceNode); - - /** - @brief Retrieves the type of water quality analysis to be run. - @param ph an EPANET project handle. - @param[out] out_qualType the type of analysis to run (see @ref EN_QualityType). - @param[out] out_traceNode the index of node being traced if `out_qualType` = `EN_TRACE`. - @return an error code. - */ - int DLLEXPORT EN_getqualtype(EN_Project ph, int *out_qualType, int *out_traceNode); - - /** - @brief Sets the type of water quality analysis to run. - @param ph an EPANET project handle. - @param qualType the type of analysis to run (see @ref EN_QualityType). - @param chemName the name of the quality constituent. - @param chemUnits the concentration units of the constituent. - @param traceNode the ID name of the node being traced if `qualType` = `EN_TRACE`. - @return an error code. - - Chemical name and units can be an empty string if the analysis is not for a chemical. - The same holds for the trace node if the analysis is not for source tracing. - - Note that the trace node is specified by ID name and not by index. - */ - int DLLEXPORT EN_setqualtype(EN_Project ph, int qualType, const char *chemName, - const char *chemUnits, const char *traceNode); - -/*=================================================================== - - Node Functions - -===================================================================*/ - - /** - @brief Adds a new node to a project. - @param ph an EPANET project handle. - @param id the ID name of the node to be added. - @param nodeType the type of node being added (see @ref EN_NodeType) - @param[out] out_index the index of the newly added node - @return an error code. - - When a new node is created all of its properties (see @ref EN_NodeProperty) are set to 0. - */ - int DLLEXPORT EN_addnode(EN_Project ph, const char *id, int nodeType, int *out_index); - - /** - @brief Deletes a node from a project. - @param ph an EPANET project handle. - @param index the index of the node to be deleted. - @param actionCode the action taken if any control contains the node and its links. - @return an error code. - - If `actionCode` is `EN_UNCONDITIONAL` then the node, its incident links and all - simple and rule-based controls that contain them are deleted. If set to - `EN_CONDITIONAL` then the node is not deleted if it or its incident links appear - in any controls and error code 261 is returned. - - */ - int DLLEXPORT EN_deletenode(EN_Project ph, int index, int actionCode); - - /** - @brief Gets the index of a node given its ID name. - @param ph an EPANET project handle. - @param id a node ID name. - @param[out] out_index the node's index (starting from 1). - @return an error code - */ - int DLLEXPORT EN_getnodeindex(EN_Project ph, const char *id, int *out_index); - - /** - @brief Gets the ID name of a node given its index. - @param ph an EPANET project handle. - @param index a node's index (starting from 1). - @param[out] out_id the node's ID name. - @return an error code - - The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getnodeid(EN_Project ph, int index, char *out_id); - - /** - @brief Changes the ID name of a node. - @param ph an EPANET project handle. - @param index a node's index (starting from 1). - @param newid the new ID name for the node. - @return an error code. - - The ID name must not be longer than @ref EN_SizeLimits "EN_MAXID" characters. - */ - int DLLEXPORT EN_setnodeid(EN_Project ph, int index, const char *newid); - - /** - @brief Retrieves a node's type given its index. - @param ph an EPANET project handle. - @param index a node's index (starting from 1). - @param[out] out_nodeType the node's type (see @ref EN_NodeType). - @return an error code. - */ - int DLLEXPORT EN_getnodetype(EN_Project ph, int index, int *out_nodeType); - - /** - @brief Retrieves a property value for a node. - @param ph an EPANET project handle. - @param index a node's index. - @param property the property to retrieve (see @ref EN_NodeProperty). - @param[out] out_value the current value of the property. - @return an error code. - - Values are returned in units that depend on the units used for flow rate - (see @ref Units). - */ - - int DLLEXPORT EN_getnodevalue(EN_Project ph, int index, int property, double *out_value); - - /** - @brief Retrieves an array of property values for all nodes. - @param ph an EPANET project handle. - @param property the property to retrieve (see @ref EN_NodeProperty). - @param[out] out_values an array of values for all nodes. - @return an error code. - - Values are returned in units that depend on the units used for flow rate - (see @ref Units). - */ - - int DLLEXPORT EN_getnodevalues(EN_Project ph, int property, double *out_values); - - /** - @brief Sets a property value for a node. - @param ph an EPANET project handle. - @param index a node's index (starting from 1). - @param property the property to set (see @ref EN_NodeProperty). - @param value the new value for the property. - @return an error code. - - Values are in units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_setnodevalue(EN_Project ph, int index, int property, double value); - - /** - @brief Sets a group of properties for a junction node. - @param ph an EPANET project handle. - @param index a junction node's index (starting from 1). - @param elev the value of the junction's elevation. - @param dmnd the value of the junction's primary base demand. - @param dmndpat the ID name of the demand's time pattern ("" for no pattern) - @return an error code. - - These properties have units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_setjuncdata(EN_Project ph, int index, double elev, double dmnd, - const char *dmndpat); - - /** - @brief Sets a group of properties for a tank node. - @param ph an EPANET project handle. - @param index a tank node's index (starting from 1). - @param elev the tank's bottom elevation. - @param initlvl the initial water level in the tank. - @param minlvl the minimum water level for the tank. - @param maxlvl the maximum water level for the tank. - @param diam the tank's diameter (0 if a volume curve is supplied). - @param minvol the volume of the tank at its minimum water level. - @param volcurve the name of the tank's volume curve ("" for no curve) - @return an error code. - - These properties have units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_settankdata(EN_Project ph, int index, double elev, double initlvl, - double minlvl, double maxlvl, double diam, double minvol, const char *volcurve); - - /** - @brief Gets the (x,y) coordinates of a node. - @param ph an EPANET project handle. - @param index a node index (starting from 1). - @param[out] out_x the node's X-coordinate value. - @param[out] out_y the node's Y-coordinate value. - @return an error code. - */ - int DLLEXPORT EN_getcoord(EN_Project ph, int index, double *out_x, double *out_y); - - /** - @brief Sets the (x,y) coordinates of a node. - @param ph an EPANET project handle. - @param index a node index (starting from 1). - @param x the node's X-coordinate value. - @param y the node's Y-coordinate value. - @return an error code. - */ - int DLLEXPORT EN_setcoord(EN_Project ph, int index, double x, double y); - -/*=================================================================== - - Nodal Demand Functions - -===================================================================*/ - - /** - @brief Retrieves the type of demand model in use and its parameters. - @param ph an EPANET project handle. - @param[out] out_type Type of demand model (see @ref EN_DemandModel). - @param[out] out_pmin Pressure below which there is no demand. - @param[out] out_preq Pressure required to deliver full demand. - @param[out] out_pexp Pressure exponent in demand function. - @return an error code. - - Parameters `out_pmin`, `out_preq`, and `out_pexp` are only used when the demand model is `EN_PDA`. - */ - int DLLEXPORT EN_getdemandmodel(EN_Project ph, int *out_type, double *out_pmin, - double *out_preq, double *out_pexp); - - /** - @brief Sets the type of demand model to use and its parameters. - @param ph an EPANET project handle. - @param type Type of demand model (see @ref EN_DemandModel). - @param pmin Pressure below which there is no demand. - @param preq Pressure required to deliver full demand. - @param pexp Pressure exponent in demand function. - @return an error code. - - Set `type` to `EN_DDA` for a traditional demand driven analysis (in which case the - remaining three parameter values are ignored) or to `EN_PDA` for a pressure driven - analysis. In the latter case a node's demand is 0 when pressure is below `pmin`, is at full demand when pressure is above `preq`, or is otherwise computed as:\n - `Dfull * [ (P - pmin) / (preq - pmin) ] ^ pexp`\n - where `Dfull` is the full demand and `P` is the current pressure. - - A valid value for `preq` must be at least 0.1 pressure units larger than `pmin`. - */ - int DLLEXPORT EN_setdemandmodel(EN_Project ph, int type, double pmin, - double preq, double pexp); - - - /** - @brief appends a new demand to a junction node demands list. - @param ph an EPANET project handle. - @param nodeIndex the index of a node (starting from 1). - @param baseDemand the demand's base value. - @param demandPattern the name of a time pattern used by the demand - @param demandName the name of the demand's category - @return an error code. - - A NULL or blank string can be used for `demandPattern` and for `demandName` to indicate - that no time pattern or category name is associated with the demand. - */ - int DLLEXPORT EN_adddemand(EN_Project ph, int nodeIndex, double baseDemand, - const char *demandPattern, const char *demandName); - - /** - @brief deletes a demand from a junction node. - @param ph an EPANET project handle. - @param nodeIndex the index of a node (starting from 1). - @param demandIndex the position of the demand in the node's demands list (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_deletedemand(EN_Project ph, int nodeIndex, int demandIndex); - - /** - @brief Retrieves the index of a node's named demand category - @param ph an EPANET project handle. - @param nodeIndex the index of a node (starting from 1) - @param demandName the name of a demand category for the node - @param[out] out_demandIndex the index of the demand being sought - @return an error code - */ - int DLLEXPORT EN_getdemandindex(EN_Project ph, int nodeIndex, const char *demandName, - int *out_demandIndex); - - /** - @brief Retrieves the number of demand categories for a junction node. - @param ph an EPANET project handle. - @param nodeIndex the index of a node (starting from 1). - @param[out] out_numDemands the number of demand categories assigned to the node. - @return an error code. - */ - int DLLEXPORT EN_getnumdemands(EN_Project ph, int nodeIndex, int *out_numDemands); - - /** - @brief Gets the base demand for one of a node's demand categories. - @param ph an EPANET project handle. - @param nodeIndex a node's index (starting from 1). - @param demandIndex the index of a demand category for the node (starting from 1). - @param[out] out_baseDemand the category's base demand. - @return an error code. - */ - int DLLEXPORT EN_getbasedemand(EN_Project ph, int nodeIndex, int demandIndex, - double *out_baseDemand); - - /** - @brief Sets the base demand for one of a node's demand categories. - @param ph an EPANET project handle. - @param nodeIndex a node's index (starting from 1). - @param demandIndex the index of a demand category for the node (starting from 1). - @param baseDemand the new base demand for the category. - @return an error code. - */ - int DLLEXPORT EN_setbasedemand(EN_Project ph, int nodeIndex, int demandIndex, - double baseDemand); - - /** - @brief Retrieves the index of a time pattern assigned to one of a node's demand categories. - @param ph an EPANET project handle. - @param nodeIndex the node's index (starting from 1). - @param demandIndex the index of a demand category for the node (starting from 1). - @param[out] out_patIndex the index of the category's time pattern. - @return an error code. - - A returned pattern index of 0 indicates that no time pattern has been assigned to the - demand category. - */ - int DLLEXPORT EN_getdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, - int *out_patIndex); - - /** - @brief Sets the index of a time pattern used for one of a node's demand categories. - @param ph an EPANET project handle. - @param nodeIndex a node's index (starting from 1). - @param demandIndex the index of one of the node's demand categories (starting from 1). - @param patIndex the index of the time pattern assigned to the category. - @return an error code. - - Specifying a pattern index of 0 indicates that no time pattern is assigned to the - demand category. - */ - int DLLEXPORT EN_setdemandpattern(EN_Project ph, int nodeIndex, int demandIndex, int patIndex); - - /** - @brief Retrieves the name of a node's demand category. - @param ph an EPANET project handle. - @param nodeIndex a node's index (starting from 1). - @param demandIndex the index of one of the node's demand categories (starting from 1). - @param[out] out_demandName The name of the selected category. - @return an error code. - - `out_demandName` must be sized to contain at least @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getdemandname(EN_Project ph, int nodeIndex, int demandIndex, char *out_demandName); - - /** - @brief Assigns a name to a node's demand category. - @param ph an EPANET project handle. - @param nodeIndex a node's index (starting from 1). - @param demandIdx the index of one of the node's demand categories (starting from 1). - @param demandName the new name assigned to the category. - @return an error code. - - The category name must contain no more than @ref EN_SizeLimits "EN_MAXID" characters. - */ - int DLLEXPORT EN_setdemandname(EN_Project ph, int nodeIndex, int demandIdx, - const char *demandName); - -/*=================================================================== - - Link Functions - -===================================================================*/ - - /** - @brief Adds a new link to a project. - @param ph an EPANET project handle. - @param id the ID name of the link to be added. - @param linkType The type of link being added (see @ref EN_LinkType) - @param fromNode The ID name of the link's starting node. - @param toNode The ID name of the link's ending node. - @param[out] out_index the index of the newly added link. - @return an error code. - - A new pipe is assigned a diameter of 10 inches (254 mm) and a length of 330 - feet (~ 100 meters). Its roughness coefficient depends on the head loss formula in effect (see @ref EN_HeadLossType) as follows: - - Hazen-Williams formula: 130 - - Darcy-Weisbach formula: 0.5 millifeet (0.15 mm) - - Chezy-Manning formula: 0.01 - - All other pipe properties are set to 0. - - A new pump has a status of `EN_OPEN`, a speed setting of 1, and has no pump - curve or power rating assigned to it. - - A new valve has a diameter of 10 inches (254 mm) and all other properties set to 0. - - See @ref EN_LinkProperty. - */ - int DLLEXPORT EN_addlink(EN_Project ph, const char *id, int linkType, const char *fromNode, - const char *toNode, int *out_index); - - /** - @brief Deletes a link from the project. - @param ph an EPANET project handle. - @param index the index of the link to be deleted. - @param actionCode The action taken if any control contains the link. - @return an error code. - - If `actionCode` is `EN_UNCONDITIONAL` then the link and all simple and rule-based - controls that contain it are deleted. If set to `EN_CONDITIONAL` then the link - is not deleted if it appears in any control and error 261 is returned. - */ - int DLLEXPORT EN_deletelink(EN_Project ph, int index, int actionCode); - - /** - @brief Gets the index of a link given its ID name. - @param ph an EPANET project handle. - @param id a link's ID name. - @param[out] out_index the link's index (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_getlinkindex(EN_Project ph, const char *id, int *out_index); - - /** - @brief Gets the ID name of a link given its index. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param[out] out_id The link's ID name. - @return an error code. - - The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getlinkid(EN_Project ph, int index, char *out_id); - - /** - @brief Changes the ID name of a link. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param newid the new ID name for the link. - @return an error code. - - The ID name must not be longer than @ref EN_SizeLimits "EN_MAXID" characters. - */ - int DLLEXPORT EN_setlinkid(EN_Project ph, int index, const char *newid); - - /** - @brief Retrieves a link's type. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param[out] out_linkType the link's type (see @ref EN_LinkType). - @return an error code. - */ - int DLLEXPORT EN_getlinktype(EN_Project ph, int index, int *out_linkType); - - /** - @brief Changes a link's type. - @param ph an EPANET project handle. - @param[in,out] inout_index the link's index before [in] and after [out] the type change. - @param linkType the new type to change the link to (see @ref EN_LinkType). - @param actionCode the action taken if any controls contain the link. - @return an error code. - - If `actionCode` is `EN_UNCONDITIONAL` then all simple and rule-based controls that - contain the link are deleted when the link's type is changed. If set to - `EN_CONDITIONAL` then the type change is cancelled if the link appears in any - control and error 261 is returned. - - To only change a valve's type (such as from PRV to PSV) use ::EN_setlinkvalue with property `EN_VALVE_TYPE` whose value is selected from the valves in @ref EN_LinkType. - */ - int DLLEXPORT EN_setlinktype(EN_Project ph, int *inout_index, int linkType, int actionCode); - - /** - @brief Gets the indexes of a link's start- and end-nodes. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param[out] out_node1 the index of the link's start node (starting from 1). - @param[out] out_node2 the index of the link's end node (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_getlinknodes(EN_Project ph, int index, int *out_node1, int *out_node2); - - /** - @brief Sets the indexes of a link's start- and end-nodes. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param node1 The index of the link's start node (starting from 1). - @param node2 The index of the link's end node (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_setlinknodes(EN_Project ph, int index, int node1, int node2); - - /** - @brief Retrieves a property value for a link. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param property the property to retrieve (see @ref EN_LinkProperty). - @param[out] out_value the current value of the property. - @return an error code. - - Values are returned in units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_getlinkvalue(EN_Project ph, int index, int property, double *out_value); - - /** - @brief Retrieves an array of property values for all links. - @param ph an EPANET project handle. - @param property the property to retrieve (see @ref EN_LinkProperty). - @param[out] out_values an array of values for all links. - @return an error code. - - Values are returned in units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_getlinkvalues(EN_Project ph, int property, double *out_values); - - /** - @brief Sets a property value for a link. - @param ph an EPANET project handle. - @param index a link's index. - @param property the property to set (see @ref EN_LinkProperty). - @param value the new value for the property. - @return an error code. - - Values are in units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_setlinkvalue(EN_Project ph, int index, int property, double value); - - /** - @brief Sets a group of properties for a pipe link. - @param ph an EPANET project handle. - @param index the index of a pipe link (starting from 1). - @param length the pipe's length. - @param diam the pipe's diameter. - @param rough the pipe's roughness coefficient. - @param mloss the pipe's minor loss coefficient. - @return an error code. - - These properties have units that depend on the units used for flow rate (see @ref Units). - */ - int DLLEXPORT EN_setpipedata(EN_Project ph, int index, double length, double diam, - double rough, double mloss); - - /** - @brief Retrieves the number of internal vertex points assigned to a link. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param[out] out_count the number of vertex points that describe the link's shape. - @return an error code. - */ - int DLLEXPORT EN_getvertexcount(EN_Project ph, int index, int *out_count); - - /** - @brief Retrieves the coordinates of a vertex point assigned to a link. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param vertex a vertex point index (starting from 1). - @param[out] out_x the vertex's X-coordinate value. - @param[out] out_y the vertex's Y-coordinate value. - @return an error code. - */ - int DLLEXPORT EN_getvertex(EN_Project ph, int index, int vertex, double *out_x, double *out_y); - - /** - @brief Sets the coordinates of a vertex point assigned to a link. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param vertex a vertex point index (starting from 1). - @param x the vertex's X-coordinate value. - @param y the vertex's Y-coordinate value. - @return an error code. - */ - int DLLEXPORT EN_setvertex(EN_Project ph, int index, int vertex, double x, double y); - - /** - @brief Assigns a set of internal vertex points to a link. - @param ph an EPANET project handle. - @param index a link's index (starting from 1). - @param x an array of X-coordinates for the vertex points. - @param y an array of Y-coordinates for the vertex points. - @param count the number of vertex points being assigned. - @return an error code. - - Replaces any existing vertices previously assigned to the link. - */ - int DLLEXPORT EN_setvertices(EN_Project ph, int index, double *x, double *y, int count); - -/*=================================================================== - - Pump Functions - -===================================================================*/ - - /** - @brief Retrieves the type of head curve used by a pump. - @param ph an EPANET project handle. - @param linkIndex the index of a pump link (starting from 1). - @param[out] out_pumpType the type of head curve used by the pump (see @ref EN_PumpType). - @return an error code. - */ - int DLLEXPORT EN_getpumptype(EN_Project ph, int linkIndex, int *out_pumpType); - - /** - @brief Retrieves the curve assigned to a pump's head curve. - @param ph an EPANET project handle. - @param linkIndex the index of a pump link (starting from 1). - @param[out] out_curveIndex the index of the curve assigned to the pump's head curve. - @return an error code. - */ - int DLLEXPORT EN_getheadcurveindex(EN_Project ph, int linkIndex, int *out_curveIndex); - - /** - @brief Assigns a curve to a pump's head curve. - @param ph an EPANET project handle. - @param linkIndex the index of a pump link (starting from 1). - @param curveIndex the index of a curve to be assigned as the pump's head curve. - @return an error code. - */ - int DLLEXPORT EN_setheadcurveindex(EN_Project ph, int linkIndex, int curveIndex); - -/*=================================================================== - - Time Pattern Functions - -===================================================================*/ - - /** - @brief Adds a new time pattern to a project. - @param ph an EPANET project handle. - @param id the ID name of the pattern to add. - @return an error code. - - The new pattern contains a single time period whose factor is 1.0. - */ - int DLLEXPORT EN_addpattern(EN_Project ph, const char *id); - - /** - @brief Deletes a time pattern from a project. - @param ph an EPANET project handle. - @param index the time pattern's index (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_deletepattern(EN_Project ph, int index); - - /** - @brief Retrieves the index of a time pattern given its ID name. - @param ph an EPANET project handle. - @param id the ID name of a time pattern. - @param[out] out_index the time pattern's index (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_getpatternindex(EN_Project ph, const char *id, int *out_index); - - /** - @brief Retrieves the ID name of a time pattern given its index. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param[out] out_id the time pattern's ID name. - @return an error code. - - The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getpatternid(EN_Project ph, int index, char *out_id); - - /** - @brief Changes the ID name of a time pattern given its index. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param id the time pattern's new ID name. - @return an error code. - - The new ID name must not exceed @ref EN_SizeLimits "EN_MAXID" characters. - */ - int DLLEXPORT EN_setpatternid(EN_Project ph, int index, const char *id); - - /** - @brief Retrieves the number of time periods in a time pattern. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param[out] out_len the number of time periods in the pattern. - @return an error code. - */ - int DLLEXPORT EN_getpatternlen(EN_Project ph, int index, int *out_len); - - /** - @brief Retrieves a time pattern's factor for a given time period. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param period a time period in the pattern (starting from 1). - @param[out] out_value the pattern factor for the given time period. - @return an error code. - */ - int DLLEXPORT EN_getpatternvalue(EN_Project ph, int index, int period, double *out_value); - - /** - @brief Sets a time pattern's factor for a given time period. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param period a time period in the pattern (starting from 1). - @param value the new value of the pattern factor for the given time period. - @return an error code. - */ - int DLLEXPORT EN_setpatternvalue(EN_Project ph, int index, int period, double value); - - /** - @brief Retrieves the average of all pattern factors in a time pattern. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param[out] out_value The average of all of the time pattern's factors. - @return an error code. - */ - int DLLEXPORT EN_getaveragepatternvalue(EN_Project ph, int index, double *out_value); - - /** - @brief Sets the pattern factors for a given time pattern. - @param ph an EPANET project handle. - @param index a time pattern index (starting from 1). - @param values an array of new pattern factor values. - @param len the number of factor values supplied. - @return an error code. - - `values` is a zero-based array that contains `len` elements. - - Use this function to redefine (and resize) a time pattern all at once; - use @ref EN_setpatternvalue to revise pattern factors one at a time. - */ - int DLLEXPORT EN_setpattern(EN_Project ph, int index, double *values, int len); - - /** - @brief Loads time patterns from a file into a project under a specific pattern ID. - @param ph an EPANET project handle. - @param filename the name of the file containing pattern data. - @param id the ID name of the new pattern to load. - @return an error code. - */ - int DLLEXPORT EN_loadpatternfile(EN_Project ph, const char *filename, const char *id); - -/*=================================================================== - - Data Curve Functions - -===================================================================*/ - - /** - @brief Adds a new data curve to a project. - @param ph an EPANET project handle. - @param id The ID name of the curve to be added. - @return an error code. - - The new curve contains a single data point (1.0, 1.0). - */ - int DLLEXPORT EN_addcurve(EN_Project ph, const char *id); - - /** - @brief Deletes a data curve from a project. - @param ph an EPANET project handle. - @param index the data curve's index (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_deletecurve(EN_Project ph, int index); - - /** - @brief Retrieves the index of a curve given its ID name. - @param ph an EPANET project handle. - @param id the ID name of a curve. - @param[out] out_index The curve's index (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_getcurveindex(EN_Project ph, const char *id, int *out_index); - - /** - @brief Retrieves the ID name of a curve given its index. - @param ph an EPANET project handle. - @param index a curve's index (starting from 1). - @param[out] out_id the curve's ID name. - @return an error code. - - The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getcurveid(EN_Project ph, int index, char *out_id); - - /** - @brief Changes the ID name of a data curve given its index. - @param ph an EPANET project handle. - @param index a data curve index (starting from 1). - @param id the data curve's new ID name. - @return an error code. - - The new ID name must not exceed @ref EN_SizeLimits "EN_MAXID" characters. - */ - int DLLEXPORT EN_setcurveid(EN_Project ph, int index, const char *id); - - /** - @brief Retrieves the number of points in a curve. - @param ph an EPANET project handle. - @param index a curve's index (starting from 1). - @param[out] out_len The number of data points assigned to the curve. - @return an error code. - */ - int DLLEXPORT EN_getcurvelen(EN_Project ph, int index, int *out_len); - - /** - @brief Retrieves a curve's type. - @param ph an EPANET project handle. - @param index a curve's index (starting from 1). - @param[out] out_type the curve's type (see @ref EN_CurveType). - @return an error code. - */ - int DLLEXPORT EN_getcurvetype(EN_Project ph, int index, int *out_type); - - /** - @brief Sets a curve's type. - @param ph an EPANET project handle. - @param index a curve's index (starting from 1). - @param type the curve's type (see @ref EN_CurveType). - @return an error code. - */ - int DLLEXPORT EN_setcurvetype(EN_Project ph, int index, int type); - - /** - @brief Retrieves the value of a single data point for a curve. - @param ph an EPANET project handle. - @param curveIndex a curve's index (starting from 1). - @param pointIndex the index of a point on the curve (starting from 1). - @param[out] out_x the point's x-value. - @param[out] out_y the point's y-value. - @return an error code. - */ - int DLLEXPORT EN_getcurvevalue(EN_Project ph, int curveIndex, int pointIndex, - double *out_x, double *out_y); - - /** - @brief Sets the value of a single data point for a curve. - @param ph an EPANET project handle. - @param curveIndex a curve's index (starting from 1). - @param pointIndex the index of a point on the curve (starting from 1). - @param x the point's new x-value. - @param y the point's new y-value. - @return an error code. - */ - int DLLEXPORT EN_setcurvevalue(EN_Project ph, int curveIndex, int pointIndex, - double x, double y); - - /** - @brief Retrieves all of a curve's data. - @param ph an EPANET project handle. - @param index a curve's index (starting from 1). - @param[out] out_id the curve's ID name. - @param[out] out_nPoints the number of data points on the curve. - @param[out] out_xValues the curve's x-values. - @param[out] out_yValues the curve's y-values. - @return an error code. - - The calling program is responsible for making `out_xValues` and `out_yValues` large enough - to hold `out_nPoints` number of data points and for sizing `out_id` to hold at least - @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getcurve(EN_Project ph, int index, char *out_id, int *out_nPoints, - double *out_xValues, double *out_yValues); - - /** - @brief assigns a set of data points to a curve. - @param ph an EPANET project handle. - @param index a curve's index (starting from 1). - @param xValues an array of new x-values for the curve. - @param yValues an array of new y-values for the curve. - @param nPoints the new number of data points for the curve. - @return an error code. - - `xValues` and `yValues` are zero-based arrays that contains `nPoints` elements. - - Use this function to redefine (and resize) a curve all at once; - use @ref EN_setcurvevalue to revise a curve's data points one at a time. - */ - int DLLEXPORT EN_setcurve(EN_Project ph, int index, double *xValues, - double *yValues, int nPoints); - -/*=================================================================== - - Simple Controls Functions - -===================================================================*/ - - /** - @brief Adds a new simple control to a project. - @param ph an EPANET project handle. - @param type the type of control to add (see @ref EN_ControlType). - @param linkIndex the index of a link to control (starting from 1). - @param setting control setting applied to the link. - @param nodeIndex index of the node used to control the link - (0 for `EN_TIMER` and `EN_TIMEOFDAY` controls). - @param level action level (tank level, junction pressure, or time in seconds) - that triggers the control. - @param[out] out_index index of the new control. - @return an error code. - */ - int DLLEXPORT EN_addcontrol(EN_Project ph, int type, int linkIndex, - double setting, int nodeIndex, double level, int *out_index); - - /** - @brief Deletes an existing simple control. - @param ph an EPANET project handle. - @param index the index of the control to delete (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_deletecontrol(EN_Project ph, int index); - - /** - @brief Retrieves the properties of a simple control. - @param ph an EPANET project handle. - @param index the control's index (starting from 1). - @param[out] out_type the type of control (see @ref EN_ControlType). - @param[out] out_linkIndex the index of the link being controlled. - @param[out] out_setting the control setting applied to the link. - @param[out] out_nodeIndex the index of the node used to trigger the control - (0 for `EN_TIMER` and `EN_TIMEOFDAY` controls). - @param[out] out_level the action level (tank level, junction pressure, or time in seconds) - that triggers the control. - @return an error code. - */ - int DLLEXPORT EN_getcontrol(EN_Project ph, int index, int *out_type, int *out_linkIndex, - double *out_setting, int *out_nodeIndex, double *out_level); - - /** - @brief Sets the properties of an existing simple control. - @param ph an EPANET project handle. - @param index the control's index (starting from 1). - @param type the type of control (see @ref EN_ControlType). - @param linkIndex the index of the link being controlled. - @param setting the control setting applied to the link. - @param nodeIndex the index of the node used to trigger the control - (0 for `EN_TIMER` and `EN_TIMEOFDAY` controls). - @param level the action level (tank level, junction pressure, or time in seconds) - that triggers the control. - @return an error code. - */ - int DLLEXPORT EN_setcontrol(EN_Project ph, int index, int type, int linkIndex, - double setting, int nodeIndex, double level); - - /** - @brief Gets the enabled status of a simple control. - @param ph an EPANET project handle. - @param index the control's index (starting from 1). - @param out_enabled `EN_TRUE` (= 1) if the control is enabled or `EN_FALSE` (= 0) if it is disabled. - @return an error code. - */ - int DLLEXPORT EN_getcontrolenabled(EN_Project ph, int index, int *out_enabled); - - /** - @brief Sets the enabled status of a simple control. - @param ph an EPANET project handle. - @param index the control's index (starting from 1). - @param enabled `EN_TRUE` (= 1) sets the control to enabled, `EN_FALSE` (= 0) sets it to disabled. - @return an error code. - */ - int DLLEXPORT EN_setcontrolenabled(EN_Project ph, int index, int enabled); - -/*=================================================================== - - Rule-Based Controls Functions - -===================================================================*/ - - /** - @brief Adds a new rule-based control to a project. - @param ph an EPANET project handle. - @param rule text of the rule following the format used in an EPANET input file. - @return an error code. - - Consult the @ref RulesPage section of the @ref InpFile topic to learn about a - rule's format. Each clause of the rule must end with a newline character `\n`. - */ - int DLLEXPORT EN_addrule(EN_Project ph, char *rule); - - /** - @brief Deletes an existing rule-based control. - @param ph an EPANET project handle. - @param index the index of the rule to be deleted (starting from 1). - @return an error code. - */ - int DLLEXPORT EN_deleterule(EN_Project ph, int index); - - /** - @brief Retrieves summary information about a rule-based control. - @param ph an EPANET project handle. - @param index the rule's index (starting from 1). - @param[out] out_nPremises number of premises in the rule's IF section. - @param[out] out_nThenActions number of actions in the rule's THEN section. - @param[out] out_nElseActions number of actions in the rule's ELSE section. - @param[out] out_priority the rule's priority value. - @return an error code. - */ - int DLLEXPORT EN_getrule(EN_Project ph, int index, int *out_nPremises, - int *out_nThenActions, int *out_nElseActions, double *out_priority); - - /** - @brief Gets the ID name of a rule-based control given its index. - @param ph an EPANET project handle. - @param index the rule's index (starting from 1). - @param[out] out_id the rule's ID name. - @return an error code. - - The ID name must be sized to hold at least @ref EN_SizeLimits "EN_MAXID+1" characters. - */ - int DLLEXPORT EN_getruleID(EN_Project ph, int index, char *out_id); - - /** - @brief Gets the properties of a premise in a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param premiseIndex the position of the premise in the rule's list of premises - (starting from 1). - @param[out] out_logop the premise's logical operator (`IF` = 1, `AND` = 2, `OR` = 3` ). - @param[out] out_object the type of object the premise refers to (see @ref EN_RuleObject). - @param[out] out_objIndex the index of the object (e.g. the index of a tank). - @param[out] out_variable the object's variable being compared (see @ref EN_RuleVariable). - @param[out] out_relop the premise's comparison operator (see @ref EN_RuleOperator). - @param[out] out_status the status that the object's status is compared to - (see @ref EN_RuleStatus). - @param[out] out_value the value that the object's variable is compared to. - @return an error code. - */ - int DLLEXPORT EN_getpremise(EN_Project ph, int ruleIndex, int premiseIndex, - int *out_logop, int *out_object, int *out_objIndex, int *out_variable, - int *out_relop, int *out_status, double *out_value); - - /** - @brief Sets the properties of a premise in a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param premiseIndex the position of the premise in the rule's list of premises. - @param logop the premise's logical operator (`IF` = 1, `AND` = 2, `OR` = 3 ). - @param object the type of object the premise refers to (see @ref EN_RuleObject). - @param objIndex the index of the object (e.g. the index of a tank). - @param variable the object's variable being compared (see @ref EN_RuleVariable). - @param relop the premise's comparison operator (see @ref EN_RuleOperator). - @param status the status that the object's status is compared to - (see @ref EN_RuleStatus). - @param value the value that the object's variable is compared to. - @return an error code. - */ - int DLLEXPORT EN_setpremise(EN_Project ph, int ruleIndex, int premiseIndex, - int logop, int object, int objIndex, int variable, int relop, - int status, double value); - - /** - @brief Sets the index of an object in a premise of a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param premiseIndex the premise's index (starting from 1). - @param objIndex the index of the premise's object (e.g. the index of a tank). - @return an error code. - */ - int DLLEXPORT EN_setpremiseindex(EN_Project ph, int ruleIndex, int premiseIndex, - int objIndex); - - /** - @brief Sets the status being compared to in a premise of a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param premiseIndex the premise's index (starting from 1). - @param status the status that the premise's object status is compared to - (see @ref EN_RuleStatus). - @return an error code. - */ - int DLLEXPORT EN_setpremisestatus(EN_Project ph, int ruleIndex, int premiseIndex, - int status); - - /** - @brief Sets the value in a premise of a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (staring from 1). - @param premiseIndex the premise's index (starting from 1). - @param value The value that the premise's variable is compared to. - @return an error code. - */ - int DLLEXPORT EN_setpremisevalue(EN_Project ph, int ruleIndex, int premiseIndex, - double value); - - /** - @brief Gets the properties of a THEN action in a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param actionIndex the index of the THEN action to retrieve (starting from 1). - @param[out] out_linkIndex the index of the link in the action (starting from 1). - @param[out] out_status the status assigned to the link (see @ref EN_RuleStatus) - @param[out] out_setting the value assigned to the link's setting. - @return an error code. - */ - int DLLEXPORT EN_getthenaction(EN_Project ph, int ruleIndex, int actionIndex, - int *out_linkIndex, int *out_status, double *out_setting); - - /** - @brief Sets the properties of a THEN action in a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param actionIndex the index of the THEN action to modify (starting from 1). - @param linkIndex the index of the link in the action. - @param status the new status assigned to the link (see @ref EN_RuleStatus). - @param setting the new value assigned to the link's setting. - @return an error code. - */ - int DLLEXPORT EN_setthenaction(EN_Project ph, int ruleIndex, int actionIndex, - int linkIndex, int status, double setting); - - /** - @brief Gets the properties of an ELSE action in a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param actionIndex the index of the ELSE action to retrieve (starting from 1). - @param[out] out_linkIndex the index of the link in the action. - @param[out] out_status the status assigned to the link (see @ref EN_RuleStatus). - @param[out] out_setting the value assigned to the link's setting. - @return an error code. - */ - int DLLEXPORT EN_getelseaction(EN_Project ph, int ruleIndex, int actionIndex, - int *out_linkIndex, int *out_status, double *out_setting); - - /** - @brief Sets the properties of an ELSE action in a rule-based control. - @param ph an EPANET project handle. - @param ruleIndex the rule's index (starting from 1). - @param actionIndex the index of the ELSE action being modified (starting from 1). - @param linkIndex the index of the link in the action (starting from 1). - @param status the new status assigned to the link (see @ref EN_RuleStatus) - @param setting the new value assigned to the link's setting. - @return an error code. - */ - int DLLEXPORT EN_setelseaction(EN_Project ph, int ruleIndex, int actionIndex, - int linkIndex, int status, double setting); - - /** - @brief Sets the priority of a rule-based control. - @param ph an EPANET project handle. - @param index the rule's index (starting from 1). - @param priority the priority value assigned to the rule. - @return an error code. - */ - int DLLEXPORT EN_setrulepriority(EN_Project ph, int index, double priority); - - /** - @brief Gets the enabled status of a rule-based control. - @param ph an EPANET project handle. - @param index the rule's index (starting from 1). - @param out_enabled the rule will be either EN_TRUE=enabled or EN_FALSE=disabled. - @return an error code. - */ - int DLLEXPORT EN_getruleenabled(EN_Project ph, int index, int *out_enabled); - - /** - @brief Sets the enabled status of a rule-based control. - @param ph an EPANET project handle. - @param index the rule's index (starting from 1). - @param enabled set the rule to either EN_TRUE=enabled or EN_FALSE=disabled. - @return an error code. - */ - int DLLEXPORT EN_setruleenabled(EN_Project ph, int index, int enabled); - -#if defined(__cplusplus) -} -#endif - -#endif //EPANET2_2_H diff --git a/epanet/linux/epanet2_enums.h b/epanet/linux/epanet2_enums.h deleted file mode 100644 index 2da2e68..0000000 --- a/epanet/linux/epanet2_enums.h +++ /dev/null @@ -1,518 +0,0 @@ -/** @file epanet2_enums.h -*/ -/* - ****************************************************************************** - Project: OWA EPANET - Version: 2.3 - Module: epanet2_enums.h - Description: enumerations of symbolic constants used by the API functions - Authors: see AUTHORS - Copyright: see AUTHORS - License: see LICENSE - Last Updated: 04/23/2025 - ****************************************************************************** -*/ - - -#ifndef EPANET2_ENUMS_H -#define EPANET2_ENUMS_H - -// --- Define the EPANET toolkit constants -/// Character array size limits -/*! \enum EN_SizeLimits - * Limits on the size of character arrays used to store ID names - * and text messages. -*/ -typedef enum { - EN_MAXID = 31, //!< Max. # characters in ID name - EN_MAXMSG = 255 //!< Max. # characters in message text -} EN_SizeLimits; - -/// Node properties -/*! \enum EN_NodeProperty - * These node properties are used with @ref EN_getnodevalue and @ref EN_setnodevalue. - * Those marked as read only are computed values that can only be retrieved. -*/ -typedef enum { - EN_ELEVATION = 0, //!< Elevation - EN_BASEDEMAND = 1, //!< Primary demand baseline value - EN_PATTERN = 2, //!< Primary demand time pattern index - EN_EMITTER = 3, //!< Emitter flow coefficient - EN_INITQUAL = 4, //!< Initial quality - EN_SOURCEQUAL = 5, //!< Quality source strength - EN_SOURCEPAT = 6, //!< Quality source pattern index - EN_SOURCETYPE = 7, //!< Quality source type (see @ref EN_SourceType) - EN_TANKLEVEL = 8, //!< Current computed tank water level (read only) - EN_DEMAND = 9, //!< Current computed demand (read only) - EN_HEAD = 10, //!< Current computed hydraulic head (read only) - EN_PRESSURE = 11, //!< Current computed pressure (read only) - EN_QUALITY = 12, //!< Current computed quality (read only) - EN_SOURCEMASS = 13, //!< Current computed quality source mass inflow (read only) - EN_INITVOLUME = 14, //!< Tank initial volume (read only) - EN_MIXMODEL = 15, //!< Tank mixing model (see @ref EN_MixingModel) - EN_MIXZONEVOL = 16, //!< Tank mixing zone volume (read only) - EN_TANKDIAM = 17, //!< Tank diameter - EN_MINVOLUME = 18, //!< Tank minimum volume - EN_VOLCURVE = 19, //!< Tank volume curve index - EN_MINLEVEL = 20, //!< Tank minimum level - EN_MAXLEVEL = 21, //!< Tank maximum level - EN_MIXFRACTION = 22, //!< Tank mixing fraction - EN_TANK_KBULK = 23, //!< Tank bulk decay coefficient - EN_TANKVOLUME = 24, //!< Current computed tank volume (read only) - EN_MAXVOLUME = 25, //!< Tank maximum volume (read only) - EN_CANOVERFLOW = 26, //!< `EN_TRUE` (= 1) if the Tank can overflow, `EN_FALSE` (= 0) if it cannot - EN_DEMANDDEFICIT = 27,//!< Amount that full demand is reduced under PDA (read only) - EN_NODE_INCONTROL = 28, //!< `EN_TRUE` (= 1) if the node appears in any control, `EN_FALSE` (= 0) if not - EN_EMITTERFLOW = 29, //!< Current emitter flow (read only) - EN_LEAKAGEFLOW = 30, //!< Current leakage flow (read only) - EN_DEMANDFLOW = 31, //!< Current consumer demand delivered (read only) - EN_FULLDEMAND = 32 //!< Current consumer demand requested (read only) -} EN_NodeProperty; - -/// Link properties -/** -These link properties are used with @ref EN_getlinkvalue and @ref EN_setlinkvalue. -Those marked as read only are computed values that can only be retrieved. -*/ -typedef enum { - EN_DIAMETER = 0, //!< Pipe/valve diameter - EN_LENGTH = 1, //!< Pipe length - EN_ROUGHNESS = 2, //!< Pipe roughness coefficient - EN_MINORLOSS = 3, //!< Pipe/valve minor loss coefficient - EN_INITSTATUS = 4, //!< Initial status (see @ref EN_LinkStatusType) - EN_INITSETTING = 5, //!< Initial pump speed or valve setting - EN_KBULK = 6, //!< Bulk flow chemical reaction coefficient - EN_KWALL = 7, //!< Pipe wall chemical reaction coefficient - EN_FLOW = 8, //!< Current computed flow rate (read only) - EN_VELOCITY = 9, //!< Current computed flow velocity (read only) - EN_HEADLOSS = 10, //!< Current computed head loss (read only) - EN_STATUS = 11, //!< Current link status (see @ref EN_LinkStatusType) - EN_SETTING = 12, //!< Current link setting - EN_ENERGY = 13, //!< Current computed pump energy usage (read only) - EN_LINKQUAL = 14, //!< Current computed link quality (read only) - EN_LINKPATTERN = 15, //!< Pump speed time pattern index - EN_PUMP_STATE = 16, //!< Current computed pump state (read only) (see @ref EN_PumpStateType) - EN_PUMP_EFFIC = 17, //!< Current computed pump efficiency (read only) - EN_PUMP_POWER = 18, //!< Pump constant power rating - EN_PUMP_HCURVE = 19, //!< Pump head v. flow curve index - EN_PUMP_ECURVE = 20, //!< Pump efficiency v. flow curve index - EN_PUMP_ECOST = 21, //!< Pump average energy price - EN_PUMP_EPAT = 22, //!< Pump energy price time pattern index - EN_LINK_INCONTROL = 23, //!< Is present in any simple or rule-based control (= 1) or not (= 0) - EN_GPV_CURVE = 24, //!< GPV head loss v. flow curve index - EN_PCV_CURVE = 25, //!< PCV characteristic curve index - EN_LEAK_AREA = 26, //!< Pipe leak area (sq mm per 100 length units) - EN_LEAK_EXPAN = 27, //!< Leak expansion rate (sq mm per unit of pressure head) - EN_LINK_LEAKAGE = 28, //!< Current leakage rate (read only) - EN_VALVE_TYPE = 29 //!< Type of valve (see @ref EN_LinkType) -} EN_LinkProperty; - -/// Time parameters -/** -These time-related options are used with @ref EN_gettimeparam and@ref EN_settimeparam. -All times are expressed in seconds The parameters marked as read only are -computed values that can only be retrieved. -*/ -typedef enum { - EN_DURATION = 0, //!< Total simulation duration - EN_HYDSTEP = 1, //!< Hydraulic time step - EN_QUALSTEP = 2, //!< Water quality time step - EN_PATTERNSTEP = 3, //!< Time pattern period - EN_PATTERNSTART = 4, //!< Time when time patterns begin - EN_REPORTSTEP = 5, //!< Reporting time step - EN_REPORTSTART = 6, //!< Time when reporting starts - EN_RULESTEP = 7, //!< Rule-based control evaluation time step - EN_STATISTIC = 8, //!< Reporting statistic code (see @ref EN_StatisticType) - EN_PERIODS = 9, //!< Number of reporting time periods (read only) - EN_STARTTIME = 10, //!< Simulation starting time of day - EN_HTIME = 11, //!< Elapsed time of current hydraulic solution (read only) - EN_QTIME = 12, //!< Elapsed time of current quality solution (read only) - EN_HALTFLAG = 13, //!< Flag indicating if the simulation was halted (read only) - EN_NEXTEVENT = 14, //!< Shortest time until a tank becomes empty or full (read only) - EN_NEXTEVENTTANK = 15 //!< Index of tank with shortest time to become empty or full (read only) -} EN_TimeParameter; - -/// Time step events -/** -These are the types of events that can cause a new time step to be taken. -**/ -typedef enum { - EN_STEP_REPORT = 0, //!< A reporting time step has ended - EN_STEP_HYD = 1, //!< A hydraulic time step has ended - EN_STEP_WQ = 2, //!< A water quality time step has ended - EN_STEP_TANKEVENT = 3, //!< A tank has become empty or full - EN_STEP_CONTROLEVENT = 4 //!< A link control needs to be activated -} EN_TimestepEvent; - -/// Analysis convergence statistics -/** -These statistics report the convergence criteria for the most current hydraulic analysis -and the cumulative water quality mass balance error at the current simulation time. They -can be retrieved with @ref EN_getstatistic. -*/ -typedef enum { - EN_ITERATIONS = 0, //!< Number of hydraulic iterations taken - EN_RELATIVEERROR = 1, //!< Sum of link flow changes / sum of link flows - EN_MAXHEADERROR = 2, //!< Largest head loss error for links - EN_MAXFLOWCHANGE = 3, //!< Largest flow change in links - EN_MASSBALANCE = 4, //!< Cumulative water quality mass balance ratio - EN_DEFICIENTNODES = 5, //!< Number of pressure deficient nodes - EN_DEMANDREDUCTION = 6, //!< % demand reduction at pressure deficient nodes - EN_LEAKAGELOSS = 7 //!< % flow lost to system leakage -} EN_AnalysisStatistic; - -/// Types of network objects -/** -The types of objects that comprise a network model. -*/ -typedef enum { - EN_NODE = 0, //!< Nodes - EN_LINK = 1, //!< Links - EN_TIMEPAT = 2, //!< Time patterns - EN_CURVE = 3, //!< Data curves - EN_CONTROL = 4, //!< Simple controls - EN_RULE = 5 //!< Control rules -} EN_ObjectType; - -/// Types of objects to count -/** -These options tell @ref EN_getcount which type of object to count. -*/ -typedef enum { - EN_NODECOUNT = 0, //!< Number of nodes (junctions + tanks + reservoirs) - EN_TANKCOUNT = 1, //!< Number of tanks and reservoirs - EN_LINKCOUNT = 2, //!< Number of links (pipes + pumps + valves) - EN_PATCOUNT = 3, //!< Number of time patterns - EN_CURVECOUNT = 4, //!< Number of data curves - EN_CONTROLCOUNT = 5, //!< Number of simple controls - EN_RULECOUNT = 6 //!< Number of rule-based controls -} EN_CountType; - -/// Node Types -/** -These are the different types of nodes that can be returned by calling @ref EN_getnodetype. -*/ -typedef enum { - EN_JUNCTION = 0, //!< Junction node - EN_RESERVOIR = 1, //!< Reservoir node - EN_TANK = 2 //!< Storage tank node -} EN_NodeType; - -/// Link types -/** -These are the different types of links that can be returned by calling @ref EN_getlinktype. -*/ -typedef enum { - EN_CVPIPE = 0, //!< Pipe with check valve - EN_PIPE = 1, //!< Pipe - EN_PUMP = 2, //!< Pump - EN_PRV = 3, //!< Pressure reducing valve - EN_PSV = 4, //!< Pressure sustaining valve - EN_PBV = 5, //!< Pressure breaker valve - EN_FCV = 6, //!< Flow control valve - EN_TCV = 7, //!< Throttle control valve - EN_GPV = 8, //!< General purpose valve - EN_PCV = 9 //!< Positional control valve -} EN_LinkType; - -/// Link status -/** -One of these values is returned when @ref EN_getlinkvalue is used to retrieve a link's -initial status (`EN_INITSTATUS`) or its current status (`EN_STATUS`). These options are -also used with @ref EN_setlinkvalue to set values for these same properties. -*/ -typedef enum { - EN_CLOSED = 0, //!< Link is closed and cannot convey any flow - EN_OPEN = 1 //!< Link is open and is able to convey flow -} EN_LinkStatusType; - -/// Pump states -/** -One of these codes is returned when @ref EN_getlinkvalue is used to retrieve a pump's -current operating state (`EN_PUMP_STATE`). `EN_PUMP_XHEAD` indicates that the pump has been -shut down because it is being asked to deliver more than its shutoff head. `EN_PUMP_XFLOW` -indicates that the pump is being asked to deliver more than its maximum flow. -*/ -typedef enum { - EN_PUMP_XHEAD = 0, //!< Pump closed - cannot supply head - EN_PUMP_CLOSED = 2, //!< Pump closed - EN_PUMP_OPEN = 3, //!< Pump open - EN_PUMP_XFLOW = 5 //!< Pump open - cannot supply flow -} EN_PumpStateType; - -/// Types of water quality analyses -/** -These are the different types of water quality analyses that EPANET can run. They -are used with @ref EN_getqualinfo, @ref EN_getqualtype, and @ref EN_setqualtype. -*/ -typedef enum { - EN_NONE = 0, //!< No quality analysis - EN_CHEM = 1, //!< Chemical fate and transport - EN_AGE = 2, //!< Water age analysis - EN_TRACE = 3 //!< Source tracing analysis -} EN_QualityType; - -/// Water quality source types -/** -These are the different types of external water quality sources that can be assigned -to a node's `EN_SOURCETYPE` property as used by @ref EN_getnodevalue and @ref EN_setnodevalue. -*/ -typedef enum { - EN_CONCEN = 0, //!< Sets the concentration of external inflow entering a node - EN_MASS = 1, //!< Injects a given mass/minute into a node - EN_SETPOINT = 2, //!< Sets the concentration leaving a node to a given value - EN_FLOWPACED = 3 //!< Adds a given value to the concentration leaving a node -} EN_SourceType; - -/// Head loss formulas -/** -The available choices for the `EN_HEADLOSSFORM` option in @ref EN_getoption and -@ref EN_setoption. They are also used for the head loss type argument in @ref EN_init. -Each head loss formula uses a different type of roughness coefficient (`EN_ROUGHNESS`) -that can be set with @ref EN_setlinkvalue. -*/ -typedef enum { - EN_HW = 0, //!< Hazen-Williams - EN_DW = 1, //!< Darcy-Weisbach - EN_CM = 2 //!< Chezy-Manning -} EN_HeadLossType; - -/// Flow units -/** -These choices for flow units are used with @ref EN_getflowunits and @ref EN_setflowunits. -They are also used for the flow units type argument in @ref EN_init. If flow units are -expressed in US Customary units (`EN_CFS` through `EN_AFD`) then all other quantities are -in US Customary units. Otherwise they are in metric units. -*/ -typedef enum { - EN_CFS = 0, //!< Cubic feet per second - EN_GPM = 1, //!< Gallons per minute - EN_MGD = 2, //!< Million gallons per day - EN_IMGD = 3, //!< Imperial million gallons per day - EN_AFD = 4, //!< Acre-feet per day - EN_LPS = 5, //!< Liters per second - EN_LPM = 6, //!< Liters per minute - EN_MLD = 7, //!< Million liters per day - EN_CMH = 8, //!< Cubic meters per hour - EN_CMD = 9, //!< Cubic meters per day - EN_CMS = 10 //!< Cubic meters per second -} EN_FlowUnits; - -/// Pressure units -/** -The available choices for pressure units for the `EN_PRESS_UNITS` option in @ref EN_getoption -and @ref EN_setoption. -*/ -typedef enum { - EN_PSI = 0, //!< Pounds per square inch - EN_KPA = 1, //!< Kilopascals - EN_METERS = 2, //!< Meters - EN_BAR = 3, //!< Bar - EN_FEET = 4 //!< Feet -} EN_PressUnits; - -/// Demand models -/** -These choices for modeling consumer demands are used with @ref EN_getdemandmodel -and @ref EN_setdemandmodel. - -A demand driven analysis requires that a junction's full demand be supplied -in each time period independent of how much pressure is available. A pressure -driven analysis makes demand be a power function of pressure, up to the point -where the full demand is met. -*/ -typedef enum { - EN_DDA = 0, //!< Demand driven analysis - EN_PDA = 1 //!< Pressure driven analysis -} EN_DemandModel; - -/// Simulation options -/** -These constants identify the hydraulic and water quality simulation options -that are applied on a network-wide basis. They are accessed using the -@ref EN_getoption and @ref EN_setoption functions. -*/ -typedef enum { - EN_TRIALS = 0, //!< Maximum trials allowed for hydraulic convergence - EN_ACCURACY = 1, //!< Total normalized flow change for hydraulic convergence - EN_TOLERANCE = 2, //!< Water quality tolerance - EN_EMITEXPON = 3, //!< Exponent in emitter discharge formula - EN_DEMANDMULT = 4, //!< Global demand multiplier - EN_HEADERROR = 5, //!< Maximum head loss error for hydraulic convergence - EN_FLOWCHANGE = 6, //!< Maximum flow change for hydraulic convergence - EN_HEADLOSSFORM = 7, //!< Head loss formula (see @ref EN_HeadLossType) - EN_GLOBALEFFIC = 8, //!< Global pump efficiency (percent) - EN_GLOBALPRICE = 9, //!< Global energy price per KWH - EN_GLOBALPATTERN = 10, //!< Index of a global energy price pattern - EN_DEMANDCHARGE = 11, //!< Energy charge per max. KW usage - EN_SP_GRAVITY = 12, //!< Specific gravity - EN_SP_VISCOS = 13, //!< Specific viscosity (relative to water at 20 deg C) - EN_UNBALANCED = 14, //!< Extra trials allowed if hydraulics don't converge - EN_CHECKFREQ = 15, //!< Frequency of hydraulic status checks - EN_MAXCHECK = 16, //!< Maximum trials for status checking - EN_DAMPLIMIT = 17, //!< Accuracy level where solution damping begins - EN_SP_DIFFUS = 18, //!< Specific diffusivity (relative to chlorine at 20 deg C) - EN_BULKORDER = 19, //!< Bulk water reaction order for pipes - EN_WALLORDER = 20, //!< Wall reaction order for pipes (either 0 or 1) - EN_TANKORDER = 21, //!< Bulk water reaction order for tanks - EN_CONCENLIMIT = 22, //!< Limiting concentration for growth reactions - EN_DEMANDPATTERN = 23, //!< Name of default demand pattern - EN_EMITBACKFLOW = 24, //!< `EN_TRUE` (= 1) if emitters can backflow, `EN_FALSE` (= 0) if not - EN_PRESS_UNITS = 25, //!< Pressure units (see @ref EN_PressUnits) - EN_STATUS_REPORT = 26 //!< Type of status report to produce (see @ref EN_StatusReport) -} EN_Option; - -/// Simple control types -/** -These are the different types of simple (single statement) controls that can be applied -to network links. They are used as an argument to @ref EN_addcontrol,@ref EN_getcontrol, -and @ref EN_setcontrol. -*/ -typedef enum { - EN_LOWLEVEL = 0, //!< Act when pressure or tank level drops below a setpoint - EN_HILEVEL = 1, //!< Act when pressure or tank level rises above a setpoint - EN_TIMER = 2, //!< Act at a prescribed elapsed amount of time - EN_TIMEOFDAY = 3 //!< Act at a particular time of day -} EN_ControlType; - -/// Reporting statistic choices -/** -These options determine what kind of statistical post-processing should be done on -the time series of simulation results before they are reported using @ref EN_report -or saved to the project's binary output file. These options are used in the -@ref EN_gettimeparam and @ref EN_settimeparam functions when `EN_STATISTIC` is the -time parameter being set or retrieved. -*/ -typedef enum { - EN_SERIES = 0, //!< Report all time series points - EN_AVERAGE = 1, //!< Report average value over simulation period - EN_MINIMUM = 2, //!< Report minimum value over simulation period - EN_MAXIMUM = 3, //!< Report maximum value over simulation period - EN_RANGE = 4 //!< Report maximum - minimum over simulation period -} EN_StatisticType; - -/// Tank mixing models -/** -These are the different types of models that describe water quality mixing in storage tanks. -The choice of model is accessed with the `EN_MIXMODEL` property of a Tank node using -@ref EN_getnodevalue and @ref EN_setnodevalue. -*/ -typedef enum { - EN_MIX1 = 0, //!< Complete mix model - EN_MIX2 = 1, //!< 2-compartment model - EN_FIFO = 2, //!< First in, first out model - EN_LIFO = 3 //!< Last in, first out model -} EN_MixingModel; - -/// Hydraulic initialization options -/** -These options are used to initialize a new hydraulic analysis when @ref EN_initH is called. -*/ -typedef enum { - EN_NOSAVE = 0, //!< Don't save hydraulics; don't re-initialize flows - EN_SAVE = 1, //!< Save hydraulics to file, don't re-initialize flows - EN_INITFLOW = 10, //!< Don't save hydraulics; re-initialize flows - EN_SAVE_AND_INIT = 11 //!< Save hydraulics; re-initialize flows -} EN_InitHydOption; - -/// Types of pump curves -/** -@ref EN_getpumptype returns one of these values when it is called. -*/ -typedef enum { - EN_CONST_HP = 0, //!< Constant horsepower - EN_POWER_FUNC = 1, //!< Power function - EN_CUSTOM = 2, //!< User-defined custom curve - EN_NOCURVE = 3 //!< No curve -} EN_PumpType; - -/// Types of data curves -/** -These are the different types of physical relationships that a data curve can -represent as returned by calling @ref EN_getcurvetype. -*/ -typedef enum { - EN_VOLUME_CURVE = 0, //!< Tank volume v. depth curve - EN_PUMP_CURVE = 1, //!< Pump head v. flow curve - EN_EFFIC_CURVE = 2, //!< Pump efficiency v. flow curve - EN_HLOSS_CURVE = 3, //!< Valve head loss v. flow curve - EN_GENERIC_CURVE = 4, //!< Generic curve - EN_VALVE_CURVE = 5 //!< % of fully open flow v. % open -} EN_CurveType; - -/// Deletion action codes -/** -These codes are used in @ref EN_deletenode and @ref EN_deletelink to indicate what action -should be taken if the node or link being deleted appears in any simple or rule-based -controls or if a deleted node has any links connected to it. -*/ -typedef enum { - EN_UNCONDITIONAL = 0, //!< Delete all controls and connecting links - EN_CONDITIONAL = 1 //!< Cancel object deletion if it appears in controls or has connecting links -} EN_ActionCodeType; - -/// Status reporting levels -/** -These choices specify the level of status reporting written to a project's report -file during a hydraulic analysis. The level is set using the @ref EN_setstatusreport -or the @ref EN_setoption functions. -*/ -typedef enum { - EN_NO_REPORT = 0, //!< No status reporting - EN_NORMAL_REPORT = 1, //!< Normal level of status reporting - EN_FULL_REPORT = 2 //!< Full level of status reporting -} EN_StatusReport; - -/// Network objects used in rule-based controls -typedef enum { - EN_R_NODE = 6, //!< Clause refers to a node - EN_R_LINK = 7, //!< Clause refers to a link - EN_R_SYSTEM = 8 //!< Clause refers to a system parameter (e.g., time) -} EN_RuleObject; - -/// Object variables used in rule-based controls -typedef enum { - EN_R_DEMAND = 0, //!< Nodal demand - EN_R_HEAD = 1, //!< Nodal hydraulic head - EN_R_GRADE = 2, //!< Nodal hydraulic grade - EN_R_LEVEL = 3, //!< Tank water level - EN_R_PRESSURE = 4, //!< Nodal pressure - EN_R_FLOW = 5, //!< Link flow rate - EN_R_STATUS = 6, //!< Link status - EN_R_SETTING = 7, //!< Link setting - EN_R_POWER = 8, //!< Pump power output - EN_R_TIME = 9, //!< Elapsed simulation time - EN_R_CLOCKTIME = 10, //!< Time of day - EN_R_FILLTIME = 11, //!< Time to fill a tank - EN_R_DRAINTIME = 12 //!< Time to drain a tank -} EN_RuleVariable; - -/// Comparison operators used in rule-based controls -typedef enum { - EN_R_EQ = 0, //!< Equal to - EN_R_NE = 1, //!< Not equal - EN_R_LE = 2, //!< Less than or equal to - EN_R_GE = 3, //!< Greater than or equal to - EN_R_LT = 4, //!< Less than - EN_R_GT = 5, //!< Greater than - EN_R_IS = 6, //!< Is equal to - EN_R_NOT = 7, //!< Is not equal to - EN_R_BELOW = 8, //!< Is below - EN_R_ABOVE = 9 //!< Is above -} EN_RuleOperator; - -/// Link status codes used in rule-based controls -typedef enum { - EN_R_IS_OPEN = 1, //!< Link is open - EN_R_IS_CLOSED = 2, //!< Link is closed - EN_R_IS_ACTIVE = 3 //!< Control valve is active -} EN_RuleStatus; - -#define EN_MISSING -1.E10 //!< Missing value indicator -#define EN_SET_CLOSED -1.E10 //!< Link set closed indicator -#define EN_SET_OPEN 1.E10 //!< Link set open indicator - -#define EN_FALSE 0 //!< boolean false -#define EN_TRUE 1 //!< boolean true - -#endif //EPANET2_ENUMS_H diff --git a/epanet/linux/libepanet-output.so b/epanet/linux/libepanet-output.so index 6e9aec5..537670d 100644 Binary files a/epanet/linux/libepanet-output.so and b/epanet/linux/libepanet-output.so differ diff --git a/epanet/linux/libepanet2.so b/epanet/linux/libepanet2.so index 168f215..8e9d341 100644 Binary files a/epanet/linux/libepanet2.so and b/epanet/linux/libepanet2.so differ diff --git a/epanet/linux/runepanet b/epanet/linux/runepanet old mode 100644 new mode 100755 index c22bd1c..7aa1e80 Binary files a/epanet/linux/runepanet and b/epanet/linux/runepanet differ diff --git a/main.py b/main.py index 20a611b..db0300e 100644 --- a/main.py +++ b/main.py @@ -62,16 +62,16 @@ NODE_COUNT = 0 LINK_COUNT = 2 prjs = [] -inpDir = "C:/inpfiles/" -tmpDir = "C:/tmpfiles/" -proj_name = project_info.name -lockedPrjs = {} +# inpDir = "C:/inpfiles/" +# tmpDir = "C:/tmpfiles/" +# proj_name = project_info.name +# lockedPrjs = {} -if not os.path.exists(inpDir): - os.mkdir(inpDir) +# if not os.path.exists(inpDir): +# os.mkdir(inpDir) -if not os.path.exists(tmpDir): - os.mkdir(tmpDir) +# if not os.path.exists(tmpDir): +# os.mkdir(tmpDir) # 全局依赖项 diff --git a/requirements.txt b/requirements.txt index 1db579a..0bc39b4 100644 Binary files a/requirements.txt and b/requirements.txt differ