diff --git a/readfiles.py b/readfiles.py index 5fb3b6c..eef2491 100644 --- a/readfiles.py +++ b/readfiles.py @@ -7,6 +7,7 @@ from simulation_list import SimulationList simulation_sets = { "original": sorted(glob("../data/*")), "cloud": sorted(glob("../../Bachelorarbeit_data/results/*")) + # "benchmark": sorted(glob("../../Bachelorarbeit_benchmark/results/*")) } simulations = SimulationList() @@ -14,6 +15,7 @@ for set_type, directories in simulation_sets.items(): for dir in directories: original = set_type == "original" spheres_file = dir + "/spheres_ini_log" + timings_file = dir + "/pythontimings.json" aggregates_file = dir + ("/sim/aggregates.txt" if original else "/aggregates.txt") if not path.exists(spheres_file) or not path.exists(aggregates_file): print(f"skipping {dir}") @@ -28,6 +30,7 @@ for set_type, directories in simulation_sets.items(): sim.type = set_type sim.load_params_from_spheres_ini_log(spheres_file) sim.load_params_from_aggregates_txt(aggregates_file) + sim.load_params_from_pythontiming_json(timings_file) sim.assert_all_loaded() if sim.rel_velocity < 0 or sim.distance < 0: # Sometimes in the old dataset the second object wasn't detected. diff --git a/simulation.py b/simulation.py index 9fe5cdd..e095bd6 100644 --- a/simulation.py +++ b/simulation.py @@ -25,6 +25,11 @@ class Simulation: self.second_largest_aggregate_water_fraction = None # wmfS2 self.rel_velocity = None # vrel self.rel_velocity_per_esc_velocity = None # vrel_over_vesc + self.desired_N = None + self.actual_N = None + self.relaxation_time = None + self.miluphcuda_time = None + self.setup_time = None @classmethod def from_dict(cls, data: dict): @@ -90,7 +95,8 @@ class Simulation: return ( self.largest_aggregate_mass * (1 - self.largest_aggregate_water_fraction) + self.second_largest_aggregate_mass * (1 - self.second_largest_aggregate_water_fraction) - ) / (self.projectile_mass * (1-self.projectile_water_fraction) + self.target_mass * (1-self.target_water_fraction)) + ) / (self.projectile_mass * (1 - self.projectile_water_fraction) + self.target_mass * ( + 1 - self.target_water_fraction)) @property def water_retention_main(self) -> float: @@ -145,7 +151,9 @@ class Simulation: line = lines[i] if "Geometry:" in line: self.v = float(lines[i + 2].split(" = ")[-1]) - self.alpha = float(lines[i + 3].split(" = ")[-1][:-1]) + print(lines[i + 3]) + # self.alpha = float(lines[i + 3].split(" = ")[-1][:-1]) #for old format + self.alpha = float(lines[i + 3].split(" = ")[-1].split(" ")[0]) if "Masses:" in line: self.total_mass = float(lines[i + 2].split()[3]) self.projectile_mass = float(lines[i + 4].split()[3]) @@ -153,23 +161,34 @@ class Simulation: if "Mantle/shell mass fractions:" in line: self.projectile_water_fraction = float(lines[i + 1].split()[7]) self.target_water_fraction = float(lines[i + 3].split()[7]) + if "Particle numbers" in line: + self.desired_N = int(lines[i + 1].split()[3]) + self.actual_N = int(lines[i + 1].split()[-1]) def load_params_from_aggregates_txt(self, filename: str) -> None: with open(filename) as f: lines = [line.rstrip("\n") for line in f] for i in range(len(lines)): line = lines[i] - if "#largest aggregate" in line: + if "# largest aggregate" in line: self.largest_aggregate_mass = float(lines[i + 2].split()[0]) self.largest_aggregate_water_fraction = float(lines[i + 2].split()[2]) - if "#2nd largest aggregate" in line: + if "# 2nd-largest aggregate:" in line: self.second_largest_aggregate_mass = float(lines[i + 2].split()[0]) self.second_largest_aggregate_water_fraction = float(lines[i + 2].split()[2]) - if "# distance" in line: + if "# distance" in line: # TODO: not sure if correct anymore self.distance = float(lines[i + 1].split()[0]) self.rel_velocity = float(lines[i + 1].split()[1]) self.rel_velocity_per_esc_velocity = float(lines[i + 1].split()[2]) + def load_params_from_pythontiming_json(self, filename: str) -> None: + with open(filename) as f: + data = json.load(f) + self.miluphcuda_time=data["miluphcuda"] + self.relaxation_time=data["relaxation"] + self.setup_time=data["setup"] + def assert_all_loaded(self) -> None: for key, value in self.__dict__.items(): + print(key, value) assert value is not None