From a0f964e89e87c62d802188448ba5238b4c46754a Mon Sep 17 00:00:00 2001
From: Theophile Terraz <theophile.terraz@inrae.fr>
Date: Fri, 5 Jul 2024 13:39:54 +0200
Subject: [PATCH] generate discharge without height

---
 .../InitialConditions/InitialConditions.py    | 46 +++++++++++--------
 1 file changed, 27 insertions(+), 19 deletions(-)

diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py
index c89da865..3d4236ce 100644
--- a/src/Model/InitialConditions/InitialConditions.py
+++ b/src/Model/InitialConditions/InitialConditions.py
@@ -369,6 +369,7 @@ class InitialConditions(SQLSubModel):
 
     def generate_growing_constante_height(self, height: float,
                                           compute_discharge: bool):
+
         profiles = self._reach.reach.profiles.copy()
         self._sort_by_z_and_kp(profiles)
 
@@ -376,8 +377,12 @@ class InitialConditions(SQLSubModel):
 
         data_discharge = {}
         if not compute_discharge:
-            for data in self._data:
-                data_discharge[data["kp"]] = data["discharge"]
+            if len(self._data) == 0:
+                for profile in profiles:
+                    data_discharge[profile.kp] = 0.0
+            else:
+                for data in self._data:
+                    data_discharge[data["kp"]] = data["discharge"]
 
         incline = self._reach.reach.get_incline_median_mean()
         logger.debug(f"incline = {incline}")
@@ -411,39 +416,42 @@ class InitialConditions(SQLSubModel):
             new["discharge"] = discharge
             new["elevation"] = elevation
 
+            previous_elevation = elevation
             self._data.append(new)
 
         self._generate_resort_data(profiles)
 
     def generate_discharge(self, discharge: float, compute_height: bool):
 
-        if compute_height:
-            self._data = []
-
-            self._generate_height_estimation_from_discharge(
-                discharge
-            )
-        else:
-            for data in self._data:
-                data["discharge"] = discharge
-
-    def _generate_height_estimation_from_discharge(self, discharge: float):
         profiles = self._reach.reach.profiles.copy()
         self._sort_by_z_and_kp(profiles)
 
         previous_elevation = -99999.99
 
+        data_height = {}
+        if not compute_height:
+            if len(self._data) == 0:
+                for profile in profiles:
+                    data_height[profile.kp] = 0.0
+            else:
+                for data in self._data:
+                    data_height[data["kp"]] = data["height"]
+
         incline = self._reach.reach.get_incline_median_mean()
         logger.debug(f"incline = {incline}")
-
+        self._data = []
         for profile in profiles:
             width = profile.width_approximation()
             strickler = 25
-            height = (
-                discharge
-                /
-                ((width * 0.8) * strickler * (abs(incline) ** (0.5)))
-            ) ** (0.6)
+
+            if not compute_height:
+                height = data_height[profile.kp]
+            else:
+                height = (
+                    discharge
+                    /
+                    ((width * 0.8) * strickler * (abs(incline) ** (0.5)))
+                ) ** (0.6)
 
             elevation = max(
                 profile.z_min() + height,
-- 
GitLab