diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index 52efc0712f9f1953efbc29b75575f007caac6dd3..b6e586f8071dad1f8e4d7f066a6fd736feac0995 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -125,7 +125,6 @@ class Mage(CommandLineSolver): 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() @@ -149,72 +148,83 @@ class Mage(CommandLineSolver): cnt_num = 1 for profile in edge.reach.profiles: - num = f"{cnt_num:>6}" - c1 = f"{profile.code1:>6}" - c2 = f"{profile.code2:>6}" - t = f"{len(profile.points):>6}" - kp = f"{profile.kp:>12f}"[0:12] - pname = profile.name - if profile.name == "": - # Generate name from profile id prefixed with - # 'p' (and replace space char with '0' char) - pname = f"p{profile.id:>3}".replace(" ", "0") - name = f"{pname:<19}" - - # Generate sediment additional data if available - sediment = "" - if profile.sl is not None: - if not any(filter(lambda f: ".GRA" in f, files)): - files.append(gra_file) - - # Number of layers - nl = len(profile.sl) - sediment = f" {nl:>3}" - - # Layers data - for layer in profile.sl.layers: - sediment += ( - f" {layer.height:>10} {layer.d50:>10} " + - f"{layer.sigma:>10} " + - f"{layer.critical_constraint:>10}" - ) - - # Profile header line - f.write(f"{num}{c1}{c2}{t} {kp} {name} {sediment}\n") + self._export_ST_profile_header( + f, files, profile, cnt_num + ) cnt_num += 1 # Points for point in profile.points: - x = f"{point.x:<12f}"[0:12] - y = f"{point.y:<12f}"[0:12] - z = f"{point.z:<12f}"[0:12] - n = f"{point.name:<3}" - - # Generate sediment additional data if available - sediment = "" - prev = point.z - if point.sl is not None: - # Number of layers - nl = len(point.sl) - sediment = f"{nl:>3}" - - # Layers data - for layer in point.sl.layers: - prev = round(prev - layer.height, 5) - sediment += ( - f" {prev:>10} {layer.d50:>10} " + - f"{layer.sigma:>10} " + - f"{layer.critical_constraint:>10}" - ) - - # Point line - f.write(f"{x} {y} {z} {n} {sediment}\n") + self._export_ST_point_line( + f, files, point + ) # Profile last line f.write(f" 999.9990 999.9990 999.9990\n") return files + def _export_ST_profile_header(self, wfile, files, + profile, cnt): + num = f"{cnt:>6}" + c1 = f"{profile.code1:>6}" + c2 = f"{profile.code2:>6}" + t = f"{len(profile.points):>6}" + kp = f"{profile.kp:>12f}"[0:12] + pname = profile.name + if profile.name == "": + # Generate name from profile id prefixed with + # 'p' (and replace space char with '0' char) + pname = f"p{profile.id:>3}".replace(" ", "0") + name = f"{pname:<19}" + + # Generate sediment additional data if available + sediment = "" + if profile.sl is not None: + if not any(filter(lambda f: ".GRA" in f, files)): + files.append(self._gra_file) + + # Number of layers + nl = len(profile.sl) + sediment = f" {nl:>3}" + + # Layers data + for layer in profile.sl.layers: + sediment += ( + f" {layer.height:>10} {layer.d50:>10} " + + f"{layer.sigma:>10} " + + f"{layer.critical_constraint:>10}" + ) + + # Profile header line + wfile.write(f"{num}{c1}{c2}{t} {kp} {name} {sediment}\n") + + def _export_ST_point_line(self, wfile, files, point): + x = f"{point.x:<12f}"[0:12] + y = f"{point.y:<12f}"[0:12] + z = f"{point.z:<12f}"[0:12] + n = f"{point.name:<3}" + + # Generate sediment additional data if available + sediment = "" + prev = point.z + if point.sl is not None: + # Number of layers + nl = len(point.sl) + sediment = f"{nl:>3}" + + # Layers data + for layer in point.sl.layers: + prev = round(prev - layer.height, 5) + sediment += ( + f" {prev:>10} {layer.d50:>10} " + + f"{layer.sigma:>10} " + + f"{layer.critical_constraint:>10}" + ) + + # Point line + wfile.write(f"{x} {y} {z} {n} {sediment}\n") + @timer def _export_BC(self, t, bounds, repertory, qlog, name="0"): files = [] @@ -429,6 +439,10 @@ class Mage(CommandLineSolver): self._study = study name = study.name.replace(" ", "_") + # Define GRA file name + self._gra_file = f"{name}.GRA" + self._bin_file = f"{name}.BIN" + self._export_ST(study, repertory, qlog, name=name) return True @@ -622,6 +636,11 @@ class Mage8(Mage): self._study = study name = study.name.replace(" ", "_") + # Define GRA file name + self._gra_file = f"{name}.GRA" + self._bin_file = f"{name}.BIN" + + # Generate files files = [] files = self._export_ST(study, repertory, qlog, name=name)