diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py index 087b0a876aa2485eadfe6e335c646937e37168d4..7f86b224204a7a2ba928e80af1c6bf6613ea8e78 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 142f099687fc3bf2052e162bda946d88ea319e1a..8bb2f4ea86da508772faa9af4121192f93cd3c36 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()