From a6e18aa7c91d881e3f3f23002b231916a61a7367 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Wed, 31 May 2023 15:24:35 +0200
Subject: [PATCH] IC: Add update values as data modification.

---
 src/Model/Geometry/Reach.py                   |  7 +++++
 .../InitialConditions/InitialConditions.py    | 30 +++++++++++++++++++
 2 files changed, 37 insertions(+)

diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 087b0a87..7f86b224 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -49,6 +49,13 @@ class Reach:
     def profiles(self):
         return self._profiles.copy()
 
+    def get_profiles_from_kp(self, kp):
+        return list(
+            filter(
+                lambda p: p.kp == kp, self._profiles
+            )
+        )
+
     @property
     def number_profiles(self):
         """
diff --git a/src/Model/InitialConditions/InitialConditions.py b/src/Model/InitialConditions/InitialConditions.py
index 142f0996..8bb2f4ea 100644
--- a/src/Model/InitialConditions/InitialConditions.py
+++ b/src/Model/InitialConditions/InitialConditions.py
@@ -44,6 +44,31 @@ class Data(object):
 
         return val
 
+    def _update_get_min(self):
+        profile = self._reach.reach.get_profiles_from_kp(self._kp)
+        if len(profile) > 0:
+            min = profile[0].z_min()
+        else:
+            min = 0.0
+
+        return min
+
+    def _update_from_kp(self):
+        min = self._update_get_min()
+        self._elevation = min - self._draft
+
+    def _update_from_elevation(self):
+        min = self._update_get_min()
+        self._draft = self._elevation - min
+
+    def _update_from_draft(self):
+        min = self._update_get_min()
+        self._elevation = self._draft + min
+
+    def _update_from_flow(self):
+        min = self._update_get_min()
+        print("TODO")
+
     def __setitem__(self, key, value):
         if key == "name":
             self._name = str(value)
@@ -51,14 +76,19 @@ class Data(object):
             self._comment = str(value)
         elif key == "kp":
             self._kp = float(value)
+            self._update_from_kp()
         elif key == "speed":
             self._speed = float(value)
+            # Not supposed to be modified
         elif key == "flow":
             self._flow = float(value)
+            self._update_from_flow()
         elif key == "elevation":
             self._elevation = float(value)
+            self._update_from_elevation()
         elif key == "draft":
             self._draft = float(value)
+            self._update_from_draft()
 
         self._status.modified()
 
-- 
GitLab