From 645a76b0e8e3f565b8fe7f5fced7970d9d23cc41 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Mon, 1 Sep 2025 14:00:01 +0200 Subject: [PATCH] Solver: Mage: Fix export where data is deleted. --- src/Solver/Mage.py | 118 ++++++++++++++++++++++++++++----------------- 1 file changed, 74 insertions(+), 44 deletions(-) diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index 48cec313..d280cf6d 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -250,21 +250,26 @@ class Mage(CommandLineSolver): # 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) + if profile.sl is None: + return - # Number of layers - nl = len(profile.sl) - sediment = f" {nl:>3}" + if profile.sl.is_deleted(): + return - # 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}" - ) + 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} {rk} {pname} {sediment}\n") @@ -278,19 +283,24 @@ class Mage(CommandLineSolver): # 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}" + if point.sl is None: + return - # 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}" - ) + if point.sl.is_deleted(): + return + + # 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") @@ -311,6 +321,9 @@ class Mage(CommandLineSolver): if bound.node is None: continue + if bound.is_deleted(): + continue + name = self.get_node_name(bound.node) f.write(f"* {bound.node.name} ({name}) {bound.bctype}\n") f.write(f"${name}\n") @@ -383,6 +396,9 @@ class Mage(CommandLineSolver): if lateral.edge is None: return + if lateral.is_deleted(): + return + edges = study.river.enable_edges() if lateral.edge not in edges: return @@ -405,6 +421,9 @@ class Mage(CommandLineSolver): f.write(f"*{header[0]:>9}|{header[1]:>10}\n") for d in lateral.data: + if d.is_deleted(): + continue + if lateral.lctype in ["EV"]: f.write(f"{d[0]:10.3f}{-d[1]:10.3f}\n") else: @@ -430,6 +449,9 @@ class Mage(CommandLineSolver): if friction.begin_strickler is None: continue + if friction.is_deleted(): + continue + num = f"{id:>3}" brk = f"{friction.begin_rk:>10.3f}" erk = f"{friction.end_rk:>10.3f}" @@ -583,26 +605,31 @@ class Mage(CommandLineSolver): def _export_SIN_bhs(self, study, sin_dict, hs, f): for bhs in hs.basic_structures: - if bhs.enabled: - reach_id = study.river.get_edge_id(hs.input_reach) + 1 - param_str = ' '.join( - [ - f'{p:>10.3f}' - for p in self._export_SIN_parameters(bhs) - ] - ) + if not bhs.enabled: + continue - name = bhs.name - if name == "": - name = f"HS_{bhs.id:>3}".replace(" ", "0") - else: - name = name.replace(" ", "_") + if bhs.is_deleted(): + continue - f.write( - f"{sin_dict[bhs._type]} " + - f"{reach_id} {float(hs.input_section.rk):>12.3f} " + - f"{param_str} {name}\n" - ) + reach_id = study.river.get_edge_id(hs.input_reach) + 1 + param_str = ' '.join( + [ + f'{p:>10.3f}' + for p in self._export_SIN_parameters(bhs) + ] + ) + + name = bhs.name + if name == "": + name = f"HS_{bhs.id:>3}".replace(" ", "0") + else: + name = name.replace(" ", "_") + + f.write( + f"{sin_dict[bhs._type]} " + + f"{reach_id} {float(hs.input_section.rk):>12.3f} " + + f"{param_str} {name}\n" + ) def _export_SIN_parameters(self, bhs): res = [9999.999] * 5 @@ -677,12 +704,15 @@ class Mage(CommandLineSolver): if hs.input_reach is None: continue - if not hs.input_reach.is_enable(): + if not hs.input_reach.is_enable() or hs.input_reach.is_deleted(): continue if not hs.enabled: continue + if hs.is_deleted(): + continue + for bhs in hs.basic_structures: if bhs.enabled: logger.info(bhs._type)