From bd4222adfaa4abca898d04f77eb6fcc586556253 Mon Sep 17 00:00:00 2001
From: Youcef AOUAD <youcef.aouad@inrae.fr>
Date: Wed, 26 Jun 2024 12:55:07 +0200
Subject: [PATCH] Export files 1

---
 src/Model/D90AdisTS/D90AdisTSList.py          |   4 +
 src/Model/DIFAdisTS/DIFAdisTSList.py          |   4 +
 .../InitialConditionsAdisTSList.py            |   4 +
 src/Model/Study.py                            |   2 +-
 src/Solver/AdisTS.py                          | 144 +++++++++++++++++-
 tests_cases/Enlargement/Enlargement.pamhyr    | Bin 237568 -> 237568 bytes
 6 files changed, 156 insertions(+), 2 deletions(-)

diff --git a/src/Model/D90AdisTS/D90AdisTSList.py b/src/Model/D90AdisTS/D90AdisTSList.py
index a9c8e7f5..076267ef 100644
--- a/src/Model/D90AdisTS/D90AdisTSList.py
+++ b/src/Model/D90AdisTS/D90AdisTSList.py
@@ -57,6 +57,10 @@ class D90AdisTSList(PamhyrModelList):
         self._status.modified()
         return n
 
+    @property
+    def D90_AdisTS_List(self):
+        return self.lst
+
 
 
 
diff --git a/src/Model/DIFAdisTS/DIFAdisTSList.py b/src/Model/DIFAdisTS/DIFAdisTSList.py
index 89eff085..87a0f936 100644
--- a/src/Model/DIFAdisTS/DIFAdisTSList.py
+++ b/src/Model/DIFAdisTS/DIFAdisTSList.py
@@ -57,6 +57,10 @@ class DIFAdisTSList(PamhyrModelList):
         self._status.modified()
         return n
 
+    @property
+    def DIF_AdisTS_List(self):
+        return self.lst
+
 
 
 
diff --git a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py
index 8ff24cf2..5ac16ceb 100644
--- a/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py
+++ b/src/Model/InitialConditionsAdisTS/InitialConditionsAdisTSList.py
@@ -57,6 +57,10 @@ class InitialConditionsAdisTSList(PamhyrModelList):
         self._status.modified()
         return n
 
+    @property
+    def Initial_Conditions_List(self):
+        return self.lst
+
 
 
 
diff --git a/src/Model/Study.py b/src/Model/Study.py
index c8ce1dd2..1efdce00 100644
--- a/src/Model/Study.py
+++ b/src/Model/Study.py
@@ -72,7 +72,7 @@ class Study(SQLModel):
             StudyNetworkReachChecker(),
             StudyGeometryChecker(),
             StudyInitialConditionsChecker(),
-            StudyBoundaryConditionChecker(),
+            #StudyBoundaryConditionChecker(),
             # DummyOK(),
             # DummyWARNING(),
             # DummyERROR(),
diff --git a/src/Solver/AdisTS.py b/src/Solver/AdisTS.py
index 659bcb21..b5f9388d 100644
--- a/src/Solver/AdisTS.py
+++ b/src/Solver/AdisTS.py
@@ -182,7 +182,145 @@ class AdisTSlc(AdisTS):
 
         return lst
 
+    def _export_POLs(self, study, repertory, qlog=None, name="0"):
+
+        files = []
+
+        if qlog is not None:
+            qlog.put("Export POLS files")
+
+        pollutants = study.river.Pollutants.Pollutants_List
+
+        for pollutant in pollutants:
+            name = pollutant.name
+            with adists_file_open(os.path.join(repertory, f"{name}.POL"), "w+") as f:
+                files.append(f"{name}.POL")
+                f.write(f"*Polluant A contaminé aux PCB\n")
+                f.write(f"name = {name}\n")
+
+                self._export_POL_Characteristics(study, pollutant._data, f, qlog)
+
+                POL_ICs = next(filter(lambda ic: ic.pollutant == pollutant.id,\
+                                      study.river.initial_conditions_adists.Initial_Conditions_List))
+
+                if POL_ICs.concentration != None:
+                    self._export_ICs_AdisTS(study, repertory, POL_ICs, qlog, name)
+
+        return files
+
+    def _export_ICs_AdisTS(self, study, repertory, POL_IC_default, qlog, POL_name):
+
+        if qlog is not None:
+            qlog.put("Export POL ICs files")
+
+        with adists_file_open(os.path.join(repertory, f"{POL_name}.INI"), "w+") as f:
+            f.write(f"*État initial pour le polluant {POL_name}\n")
+            f.write(f"{POL_IC_default.name} = {POL_IC_default.concentration} {POL_IC_default.eg} "+
+            f"{POL_IC_default.em} {POL_IC_default.ed}\n")
+
+    def _export_POL_Characteristics(self, study, pol_data, f, qlog, name="0"):
+
+        list_characteristics = ["type", "diametre", "rho", "porosity", "cdc_riv", "cdc_cas", "apd", "ac", "bc"]
+
+        if len(list_characteristics) == (len(pol_data[0])-1):
+            for l in range(len(list_characteristics)):
+                f.write(f"{list_characteristics[l]} = {pol_data[0][l]}\n")
+
+    def _export_D90(self, study, repertory, qlog=None, name="0"):
+
+        files = []
+
+        if qlog is not None:
+            qlog.put("Export D90 file")
+
+        with adists_file_open(os.path.join(repertory, f"{name}.D90"), "w+") as f:
+            files.append(f"{name}.D90")
+
+            f.write(f"*Diamètres caractéristiques du fond stable\n")
+
+            d90AdisTS = study.river.d90_adists.D90_AdisTS_List
+
+            f.write(f"{d90AdisTS[0].name} = {d90AdisTS[0].d90}\n")
+
+            self._export_d90_spec(study, d90AdisTS[0]._data, f, qlog)
+
+        return files
+
+    def _export_d90_spec(self, study, d90_spec_data, f, qlog, name="0"):
+
+        for d90_spec in d90_spec_data:
+            if (d90_spec.name is None) or (d90_spec.reach is None) or (d90_spec.start_kp is None) or \
+                (d90_spec.end_kp is None) or (d90_spec.d90 is None):
+                return
+
+            edges = study.river.enable_edges()
+
+            id_edges = list(map(lambda x: x.id, edges))
+
+            id_reach = d90_spec.reach
+
+            if id_reach not in id_edges:
+                return
+
+            f.write(f"{d90_spec.name} = {id_reach} {d90_spec.start_kp} {d90_spec.end_kp} {d90_spec.d90}\n")
+
+    def _export_DIF(self, study, repertory, qlog=None, name="0"):
+
+        files = []
+
+        if qlog is not None:
+            qlog.put("Export DIF file")
+
+        with adists_file_open(os.path.join(repertory, f"{name}.DIF"), "w+") as f:
+            files.append(f"{name}.DIF")
+
+            f.write(f"*Définition des paramètres des fonctions de calcul du\n")
+            f.write(f"*coefficient de diffusion\n")
+
+            difAdisTS = study.river.dif_adists.DIF_AdisTS_List
+
+            if difAdisTS[0].method != "generique":
+                f.write(f"defaut = {difAdisTS[0].method} {difAdisTS[0].dif }\n")
+            else:
+                f.write(f"defaut = {difAdisTS[0].method} {difAdisTS[0].dif} {difAdisTS[0].b} {difAdisTS[0].c}\n")
+
+            self._export_dif_spec(study, difAdisTS[0]._data, f, qlog)
+
+        return files
+
+    def _export_dif_spec(self, study, dif_spec_data, f, qlog, name="0"):
+
+        for dif_spec in dif_spec_data:
+            if (dif_spec.reach is None) or (dif_spec.start_kp is None) or \
+                (dif_spec.end_kp is None) or (dif_spec.dif is None) or (dif_spec.b is None) or (dif_spec.c is None):
+                return
+
+            edges = study.river.enable_edges()
+
+            id_edges = list(map(lambda x: x.id, edges))
+
+            id_reach = dif_spec.reach
+
+            if id_reach not in id_edges:
+                return
+
+            if dif_spec.method != "generique":
+                f.write(f"{dif_spec.method} = {id_reach} {dif_spec.start_kp} {dif_spec.end_kp} {dif_spec.dif}\n")
+            else:
+                f.write(f"{dif_spec.method} = {id_reach} {dif_spec.start_kp} {dif_spec.end_kp} {dif_spec.dif}" +
+                f"{dif_spec.b} {dif_spec.c}\n")
+
     def _export_NUM(self, study, repertory, qlog=None, name="0"):
+
+        dict_names = {"init_time":"start_date",
+                      "final_time":"end_date",
+                      "timestep":"dt0",
+                      "implicitation_parameter":"theta",
+                      "timestep_screen":"dtscr",
+                      "timestep_bin":"dtbin",
+                      "timestep_csv":"dtcsv",
+                      "timestep_mage":"dtMage",
+                      "initial_concentration":"c_initiale"}
         files = []
 
         if qlog is not None:
@@ -202,7 +340,8 @@ class AdisTSlc(AdisTS):
                     f"export: NUM: {name}: {value} ({p.value})"
                 )
 
-                f.write(f"{name} {value}\n")
+                if name != "command_line_arguments":
+                    f.write(f"{dict_names[name]} = {value}\n")
 
             outputkps = study.river.Output_kp_adists.OutputKp_List
 
@@ -231,6 +370,9 @@ class AdisTSlc(AdisTS):
     def export_func_dict(self):
         return [
             self._export_NUM,
+            self._export_DIF,
+            self._export_D90,
+            self._export_POLs,
         ]
 
 
diff --git a/tests_cases/Enlargement/Enlargement.pamhyr b/tests_cases/Enlargement/Enlargement.pamhyr
index ee8749c4d284e64a929297cf802ff0263ae738b2..45c153f4f775b86e041fe26b3c9660f46ce56472 100644
GIT binary patch
delta 193
zcmZoTz}IkqZ-b}+W5LEoS>DaYvfNCJrV|?tl@!^THFa|mi%a5*6U$QLQxZ#34b2TL
zjf^df4UO~+4K2(zPm&K!U}W0-qFzRTgNgqh5b=N9ENF0vUyq-Wje%ECk})JIC$q3L
zGlhwPftLj&B+eP^Q=FfZnZnD!z`(?RpMn1)|9zmI%lysv*KfbSo>Bb)%UuTkyI>(H
nMFtKAX?b=|M$VMfw8YY!lJwNP)FPmXsqNqAGfn?KpP3T?BVamc

delta 239
zcmZoTz}IkqZ-b}+WB$fQS>DaYvfNCJCKDSCl$F?-HT826i%a5*6U$QLQxZ#34b2TL
zjf~BWj7{}S&5R6<HcyfdO<-i%{Gwh)fQy;`0t5eh{`>qFHVYaY;&<R>VPoJG6z2@~
zDbCNyOyOe&aV0rJTyioCOEXjW8NqzUkSGYBiI;(afrWn`1OG>$85jBY0Zm!QuP6vK
zg;P?L(ZbBcz`(%BK+k}g2WS!pzbGSw*L;8d_WSD@)gNqUD`2|AFUr9nEy>Qw$eEIw
YmROool9pMVky_OLeLmCl@AH{C0ZooT_5c6?

-- 
GitLab