work on initial conditions

compare_results
Theophile Terraz 2024-09-19 10:03:44 +02:00
parent 8250efcd62
commit fe4ae46784
6 changed files with 121 additions and 29 deletions

View File

@ -21,6 +21,7 @@ import logging
from copy import copy, deepcopy from copy import copy, deepcopy
from tools import trace, timer from tools import trace, timer
from functools import reduce from functools import reduce
from numpy import interp
from Model.Tools.PamhyrDB import SQLSubModel from Model.Tools.PamhyrDB import SQLSubModel
@ -492,25 +493,39 @@ class InitialConditions(SQLSubModel):
self._generate_resort_data(profiles) self._generate_resort_data(profiles)
def generate_height(self, elevation: float): def generate_height(self,
elevation1: float,
elevation2: float,
compute_discharge: bool,
discharge: float):
profiles = self._reach.reach.profiles.copy() profiles = self._reach.reach.profiles.copy()
upstream_rk = profiles[0].rk
downstream_rk = profiles[-1].rk
data_discharge = {} data_discharge = {}
if len(self._data) == 0: if not compute_discharge:
for profile in profiles: if len(self._data) == 0:
data_discharge[profile.rk] = 0.0 for profile in profiles:
else: data_discharge[profile.rk] = 0.0
for data in self._data: else:
data_discharge[data["rk"]] = data["discharge"] for data in self._data:
data_discharge[data["rk"]] = data["discharge"]
self._data = [] self._data = []
for profile in profiles: for profile in profiles:
if not compute_discharge:
d = data_discharge[profile.rk]
else:
d = discharge
elevation = interp(profile.rk,
[upstream_rk, downstream_rk],
[elevation1, elevation2])
new = Data(reach=self._reach, status=self._status) new = Data(reach=self._reach, status=self._status)
new["rk"] = profile.rk new["rk"] = profile.rk
new["discharge"] = data_discharge[profile.rk] new["discharge"] = d
new["elevation"] = elevation new["elevation"] = elevation
self._data.append(new) self._data.append(new)
self._generate_resort_data(profiles)
def _generate_resort_data(self, profiles): def _generate_resort_data(self, profiles):
is_reverse = False is_reverse = False
if profiles[0].rk > profiles[-1].rk: if profiles[0].rk > profiles[-1].rk:

View File

@ -28,7 +28,7 @@ from PyQt5.QtCore import (
from PyQt5.QtWidgets import ( from PyQt5.QtWidgets import (
QDialogButtonBox, QComboBox, QUndoStack, QShortcut, QDialogButtonBox, QComboBox, QUndoStack, QShortcut,
QDoubleSpinBox QDoubleSpinBox, QCheckBox, QLabel
) )
@ -44,10 +44,27 @@ class HeightDialog(PamhyrDialog):
parent=parent parent=parent
) )
self.value = None self.value = [None, None, None]
self.option = None
self.find(QCheckBox, "checkBox").clicked.connect(
self.enable_discharge
)
def enable_discharge(self):
cb = self.find(QCheckBox, "checkBox")
dsb = self.find(QDoubleSpinBox, "doubleSpinBox_3")
l = self.find(QLabel, "label_3")
dsb.setEnabled(cb.isChecked())
l.setEnabled(cb.isChecked())
def accept(self): def accept(self):
self.value = self.find(QDoubleSpinBox, "doubleSpinBox").value() self.value[0] = self.find(QDoubleSpinBox, "doubleSpinBox_1").value()
self.value[1] = self.find(QDoubleSpinBox, "doubleSpinBox_2").value()
self.option = self.find(QCheckBox, "checkBox").isChecked()
if self.option:
self.value[2] = self.find(QDoubleSpinBox, "doubleSpinBox_3").value()
else:
self.value[2] = None
super().accept() super().accept()
def reject(self): def reject(self):

View File

@ -194,4 +194,7 @@ class GenerateCommand(QUndoCommand):
self._ics.generate_discharge(self._param, self._ics.generate_discharge(self._param,
self._option) self._option)
elif self._generator == "height": elif self._generator == "height":
self._ics.generate_height(self._param) self._ics.generate_height(self._param[0],
self._param[1],
self._option,
self._param[2])

View File

@ -370,5 +370,6 @@ class InitialConditionsWindow(PamhyrWindow):
dlg = HeightDialog(trad=self._trad, parent=self) dlg = HeightDialog(trad=self._trad, parent=self)
if dlg.exec(): if dlg.exec():
value = dlg.value value = dlg.value
self._table.generate("height", value, None) compute_discharge = dlg.option
self._table.generate("height", value, compute_discharge)
self._update() self._update()

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>284</width> <width>396</width>
<height>80</height> <height>182</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -17,7 +17,70 @@
<locale language="English" country="Europe"/> <locale language="English" country="Europe"/>
</property> </property>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Upstream Height (m)</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_1">
<property name="minimum">
<double>-1000000.000000000000000</double>
</property>
<property name="maximum">
<double>1000000.000000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<widget class="QLabel" name="label_3">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Discharge</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_3">
<property name="enabled">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0"> <item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Downstream Height (m)</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox_2">
<property name="minimum">
<double>-1000000.000000000000000</double>
</property>
<property name="value">
<double>0.000000000000000</double>
</property>
</widget>
</item>
</layout>
</item>
<item row="4" column="0">
<widget class="QDialogButtonBox" name="buttonBox"> <widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -27,19 +90,12 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="0"> <item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
<widget class="QLabel" name="label"> <widget class="QCheckBox" name="checkBox">
<property name="text"> <property name="text">
<string>Height (m)</string> <string>Generate Constant Discharge</string>
</property>
</widget>
</item>
<item>
<widget class="QDoubleSpinBox" name="doubleSpinBox">
<property name="maximum">
<double>1000000.000000000000000</double>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -132,7 +132,7 @@
<item row="0" column="0"> <item row="0" column="0">
<widget class="QTabWidget" name="tabWidget"> <widget class="QTabWidget" name="tabWidget">
<property name="currentIndex"> <property name="currentIndex">
<number>0</number> <number>1</number>
</property> </property>
<property name="tabsClosable"> <property name="tabsClosable">
<bool>true</bool> <bool>true</bool>