From 07451899c4c631d901bfbc48ecd1137f5be884cd Mon Sep 17 00:00:00 2001
From: Theophile Terraz <theophile.terraz@inrae.fr>
Date: Mon, 4 Dec 2023 17:38:25 +0100
Subject: [PATCH] export mage SIN file

---
 src/Model/Network/Graph.py | 12 ++++++++++++
 src/Solver/Mage.py         | 32 +++++++++++++++++++++++++-------
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git a/src/Model/Network/Graph.py b/src/Model/Network/Graph.py
index d617ba77..e3616d0e 100644
--- a/src/Model/Network/Graph.py
+++ b/src/Model/Network/Graph.py
@@ -212,3 +212,15 @@ class Graph(object):
 
     def is_enable_edge(self, edge):
         return edge._enable
+
+    #def get_edge_id(self, reach):
+    #    for i, e in enumerate(self.enable_edges):
+    #        if e.id == reach.id:
+    #            return i
+
+    def get_edge_id(self, reach):
+        return next(
+            filter(
+                lambda e: e[1].id == reach.id, enumerate(self.enable_edges)
+                )
+            )[0]
diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py
index 22349870..80793357 100644
--- a/src/Solver/Mage.py
+++ b/src/Solver/Mage.py
@@ -374,13 +374,7 @@ class Mage(CommandLineSolver):
         with mage_file_open(os.path.join(repertory, f"{name}.INI"), "w+") as f:
             has_ini = False
             id = 1
-            reachs = study.river.edges()
-            reachs = list(
-                filter(
-                    lambda e: e.is_enable(),
-                    reachs
-                )
-            )
+            reachs = study.river.enable_edges()
 
             # TODO put real date...
             f.write(f"$ date en minutes :       0.00\n")
@@ -442,6 +436,29 @@ class Mage(CommandLineSolver):
 
         return files
 
+    @timer
+    def _export_SIN(self, study, repertory, qlog, name="0"):
+        files = []
+
+        hydraulic_structures = study.river.hydraulic_structures.lst
+        if len(hydraulic_structures) == 0:
+            return files
+
+        if qlog is not None:
+            qlog.put("Export SIN file")
+
+        with mage_file_open(os.path.join(repertory, f"{name}.SIN"), "w+") as f:
+            files.append(f"{name}.SIN")
+
+            for hs in hydraulic_structures:
+                if hs.reach.is_enable:
+                    reach_id = study.river.get_edge_id(hs.reach)
+                    params = [p.value for p in hs.basic_hydraulic_structure.param]
+                    param_str = ' '.join([f'{p.value:>10.3f}' for p in hs.basic_hydraulic_structure.param])
+                    f.write(f"{reach_id} {hs.kp:>12.3f} {params} {hs.name}\n")
+
+        return files
+
     @timer
     def _export_REP(self, study, repertory, files, qlog, name="0"):
         if qlog is not None:
@@ -683,6 +700,7 @@ class Mage8(Mage):
             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)
+        files = files + self._export_SIN(study, repertory, qlog, name=name)
         files = files + self._export_CAS(study, repertory, qlog, name=name)
         self._export_REP(study, repertory, files, qlog, name=name)
 
-- 
GitLab