diff --git a/src/Solver/ASolver.py b/src/Solver/ASolver.py index 186abbbbd9c93a05ceaa748d1a119e130c854f31..a87dad973a5bb6da078f1671481587049872a85b 100644 --- a/src/Solver/ASolver.py +++ b/src/Solver/ASolver.py @@ -67,6 +67,9 @@ class AbstractSolver(object): self._process = None self._output = None + # Last study running + self._study = None + def __str__(self): return f"{self._name} : {self._type} : {self._description}" diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index c53d5f754eadffc349b7f8897fb628d65fe54b60..61c8b26f5bd1b4935221b13d1cee48570252fd3e 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -105,18 +105,23 @@ class Mage(AbstractSolver): return l def input_param(self): - return "0.REP" + name = self._study.name + return f"{name}.REP" def log_file(self): - return "0.TRA" + name = self._study.name + return f"{name}.TRA" @timer - def _export_ST(self, study, repertory, qlog): + def _export_ST(self, study, repertory, qlog, name="0"): files = [] if qlog is not None: qlog.put("Export ST file") + os.makedirs(os.path.join(repertory, "net"), exist_ok=True) + gra_file = f"{name}.GRA" + # Write header edges = study.river.edges() edges = list( @@ -131,8 +136,8 @@ class Mage(AbstractSolver): if edge._name == "": name = f"Reach_{edge.id}" - with mage_file_open(os.path.join(repertory, f"{name}.ST"), "w+") as f: - files.append(f"{name}.ST") + with mage_file_open(os.path.join(repertory, "net", f"{name}.ST"), "w+") as f: + files.append(str(os.path.join("net", f"{name}.ST"))) cnt_num = 1 for profile in edge.reach.profiles: @@ -149,7 +154,7 @@ class Mage(AbstractSolver): sediment = "" if profile.sl is not None: if not any(filter(lambda f: ".GRA" in f, files)): - files.append("0.GRA") + files.append(gra_file) nl = len(profile.sl) sediment = f" {nl:>3}" @@ -181,7 +186,7 @@ class Mage(AbstractSolver): return files @timer - def _export_BC(self, t, bounds, repertory, qlog): + def _export_BC(self, t, bounds, repertory, qlog, name="0"): files = [] if len(bounds) == 0: @@ -190,8 +195,8 @@ class Mage(AbstractSolver): if qlog is not None: qlog.put(f"Export {t} file") - with mage_file_open(os.path.join(repertory, f"0.{t}"), "w+") as f: - files.append(f"0.{t}") + with mage_file_open(os.path.join(repertory, f"{name}.{t}"), "w+") as f: + files.append(f"{name}.{t}") for bound in bounds: name = f"{bound.node.id:3}".replace(" ", "x") @@ -204,7 +209,7 @@ class Mage(AbstractSolver): v0 = d[0] v1 = d[1] - if t in ["HYD", "QSO"]: + if t in ["HYD", "QSO", "LIM"]: v0 /= 60 # Convert first column to minute f.write(f"{v0:10}{v1:10}\n") @@ -212,7 +217,7 @@ class Mage(AbstractSolver): return files @timer - def _export_bound_cond(self, study, repertory, qlog): + def _export_bound_cond(self, study, repertory, qlog, name="0"): files = [] lst = study.river.boundary_condition @@ -232,22 +237,22 @@ class Mage(AbstractSolver): elif bound.bctype == "SL": QSO.append(bound) - files = files + self._export_BC("AVA", AVA, repertory, qlog) - files = files + self._export_BC("HYD", HYD, repertory, qlog) - files = files + self._export_BC("LIM", LIM, repertory, qlog) - files = files + self._export_QSO(QSO, repertory, qlog) + files = files + self._export_BC("AVA", AVA, repertory, qlog, name=name) + files = files + self._export_BC("HYD", HYD, repertory, qlog, name=name) + files = files + self._export_BC("LIM", LIM, repertory, qlog, name=name) + files = files + self._export_QSO(QSO, repertory, qlog, name=name) return files # @timer - # def _export_LC(self, lateral, repertory, qlog): + # def _export_LC(self, lateral, repertory, qlog, name="0"): # files = [] # if qlog is not None: # qlog.put(f"Export LAT file") - # with mage_file_open(os.path.join(repertory, f"0.LAT"), "w+") as f: - # files.append(f"0.LAT") + # with mage_file_open(os.path.join(repertory, f"{name}.LAT"), "w+") as f: + # files.append(f"{name}.LAT") # name = f"{lateral.node.id:3}".replace(" ", "x") # f.write(f"* {lateral.node.name} ({name}) {lateral.bctype}\n") @@ -256,12 +261,12 @@ class Mage(AbstractSolver): # f.write(f"*{header[0]:>9}|{header[1]:>10}\n") # for d in lateral.data: - # f.write(f"{d[0]:10.3f}{d[1]:10.3f}\n") + # f.write(f"{d[0]:1{name}.3f}{d[1]:10.3f}\n") # return files # @timer - # def _export_lateral_contrib(self, study, repertory, qlog): + # def _export_lateral_contrib(self, study, repertory, qlog, name="0"): # files = [] # lst = study.river.lateral_contribution @@ -272,15 +277,15 @@ class Mage(AbstractSolver): # return files @timer - def _export_RUG(self, study, repertory, qlog): + def _export_RUG(self, study, repertory, qlog, name="0"): files = [] if qlog is not None: qlog.put("Export RUG file") # Write header - with mage_file_open(os.path.join(repertory, "0.RUG"), "w+") as f: - files.append("0.RUG") + with mage_file_open(os.path.join(repertory, f"{name}.RUG"), "w+") as f: + files.append(f"{name}.RUG") edges = study.river.edges() edges = list( @@ -313,14 +318,14 @@ class Mage(AbstractSolver): return files @timer - def _export_INI(self, study, repertory, qlog): + def _export_INI(self, study, repertory, qlog, name="0"): files = [] if qlog is not None: qlog.put("Export INI file") # Write header - with mage_file_open(os.path.join(repertory, "0.INI"), "w+") as f: + with mage_file_open(os.path.join(repertory, f"{name}.INI"), "w+") as f: has_ini = False id = 1 reachs = study.river.edges() @@ -358,16 +363,16 @@ class Mage(AbstractSolver): id += 1 if has_ini: - files.append("0.INI") + files.append(f"{name}.INI") return files @timer - def _export_REP(self, study, repertory, files, qlog): + def _export_REP(self, study, repertory, files, qlog, name="0"): if qlog is not None: qlog.put("Export REP file") # Write header - with mage_file_open(os.path.join(repertory, f"0.REP"), "w+") as f: + with mage_file_open(os.path.join(repertory, f"{name}.REP"), "w+") as f: f.write("confirmation=non\n") for file in files: @@ -377,8 +382,8 @@ class Mage(AbstractSolver): f.write(f"{EXT} {file}\n") f.write("* OUTPUT\n") - f.write(f"TRA 0.TRA\n") - f.write(f"BIN 0.BIN\n") + f.write(f"TRA {name}.TRA\n") + f.write(f"BIN {name}.BIN\n") for file in files: EXT = file.split('.')[1] @@ -389,7 +394,10 @@ class Mage(AbstractSolver): @timer def export(self, study, repertory, qlog = None): - self._export_ST(study, repertory, qlog) + self._study = study + name = study.name.replace(" ", "_") + + self._export_ST(study, repertory, qlog, name = name) return True @@ -397,11 +405,11 @@ class Mage(AbstractSolver): # RESULTS # ########### - def read_bin(self, study, repertory, results, qlog = None): + def read_bin(self, study, repertory, results, qlog = None, name="0"): return @timer - def results(self, study, repertory, qlog = None): + def results(self, study, repertory, qlog = None, name="0"): results = Results(study = study) self.read_bin(study, repertory, results, qlog) @@ -462,14 +470,14 @@ class Mage8(Mage): return l @timer - def _export_PAR(self, study, repertory, qlog = None): + def _export_PAR(self, study, repertory, qlog = None, name = "0"): files = [] if qlog is not None: qlog.put("Export PAR file") - with mage_file_open(os.path.join(repertory, "0.PAR"), "w+") as f: - files.append("0.PAR") + with mage_file_open(os.path.join(repertory, f"{name}.PAR"), "w+") as f: + files.append(f"{name}.PAR") params = study.river.get_params(self.type).parameters for p in params: @@ -486,14 +494,14 @@ class Mage8(Mage): return files @timer - def _export_NET(self, study, repertory, qlog = None): + def _export_NET(self, study, repertory, qlog = None, name="0"): files = [] if qlog is not None: qlog.put("Export NET file") - with mage_file_open(os.path.join(repertory, "0.NET"), "w+") as f: - files.append("0.NET") + with mage_file_open(os.path.join(repertory, f"{name}.NET"), "w+") as f: + files.append(f"{name}.NET") edges = study.river.edges() edges = list( @@ -512,14 +520,14 @@ class Mage8(Mage): n1 = f"{e.node1.id:3}".replace(" ", "x") n2 = f"{e.node2.id:3}".replace(" ", "x") - file = name + ".ST" + file = os.path.join("net", name + ".ST") f.write(f"{id} {n1} {n2} {file}\n") return files @timer - def _export_QSO(self, bounds, repertory, qlog): + def _export_QSO(self, bounds, repertory, qlog, name="0"): files = [] if len(bounds) == 0: @@ -528,8 +536,8 @@ class Mage8(Mage): if qlog is not None: qlog.put(f"Export QSO file") - with mage_file_open(os.path.join(repertory, f"0.QSO"), "w+") as f: - files.append(f"0.QSO") + with mage_file_open(os.path.join(repertory, f"{name}.QSO"), "w+") as f: + files.append(f"{name}.QSO") for bound in bounds: name = f"{bound.node.id:3}".replace(" ", "x") @@ -545,16 +553,19 @@ class Mage8(Mage): @timer - def export(self, study, repertory, qlog = None): + def export(self, study, repertory, qlog = None, name="0"): + self._study = study + name = study.name.replace(" ", "_") + files = [] - files = self._export_ST(study, repertory, qlog) - files = files + self._export_PAR(study, repertory, qlog) - files = files + self._export_NET(study, repertory, qlog) - files = files + self._export_bound_cond(study, repertory, qlog) - files = files + self._export_RUG(study, repertory, qlog) - files = files + self._export_INI(study, repertory, qlog) - self._export_REP(study, repertory, files, qlog) + files = self._export_ST(study, repertory, qlog, name=name) + files = files + self._export_PAR(study, repertory, qlog, name=name) + files = files + self._export_NET(study, repertory, qlog, name=name) + files = files + self._export_bound_cond(study, repertory, qlog, name=name) + files = files + self._export_RUG(study, repertory, qlog, name=name) + files = files + self._export_INI(study, repertory, qlog, name=name) + self._export_REP(study, repertory, files, qlog, name=name) return True @@ -563,10 +574,10 @@ class Mage8(Mage): ########### @timer - def read_bin(self, study, repertory, results, qlog = None): + def read_bin(self, study, repertory, results, qlog = None, name="0"): logger.info(f"read_bin: Start ...") - with mage_file_open(os.path.join(repertory, f"0.BIN"), "r") as f: + with mage_file_open(os.path.join(repertory, f"{name}.BIN"), "r") as f: newline = lambda: np.fromfile(f, dtype=np.int32, count=1) endline = lambda: np.fromfile(f, dtype=np.int32, count=1) @@ -685,13 +696,13 @@ class Mage8(Mage): logger.info(f"read_bin: ... end with {len(ts)} timestamp read") @timer - def read_gra(self, study, repertory, results, qlog = None): + def read_gra(self, study, repertory, results, qlog = None, name="0"): if not study.river.has_sediment(): return logger.info(f"read_gra: Start ...") - with mage_file_open(os.path.join(repertory, f"0.GRA"), "r") as f: + with mage_file_open(os.path.join(repertory, f"{name}.GRA"), "r") as f: newline = lambda: np.fromfile(f, dtype=np.int32, count=1) endline = lambda: np.fromfile(f, dtype=np.int32, count=1) @@ -838,7 +849,10 @@ class Mage8(Mage): @timer def results(self, study, repertory, qlog = None): - results = super(Mage8, self).results(study, repertory, qlog) - self.read_gra(study, repertory, results, qlog) + self._study = study + name = study.name.replace(" ", "_") + + results = super(Mage8, self).results(study, repertory, qlog, name = name) + self.read_gra(study, repertory, results, qlog, name = name) return results