From ff6f61e9c10730c336d0e0c31da58250e2b757ef Mon Sep 17 00:00:00 2001 From: Nicolas Mounet Date: Wed, 11 Nov 2020 14:12:12 +0100 Subject: [PATCH 1/3] Forcing outside temperature to be at worst 0.1 K below the inside temperature (models.py) --- cara/models.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/cara/models.py b/cara/models.py index 918ca439..22584cd3 100644 --- a/cara/models.py +++ b/cara/models.py @@ -203,6 +203,9 @@ class WindowOpening(Ventilation): #: used to exchange air (0 <= cd_b <= 1) cd_b: float = 0.6 + #: Minimum difference between inside and outside temperature + min_deltaT: float = 0.1 + def transition_times(self) -> typing.Set[float]: transitions = super().transition_times() transitions.update(self.inside_temp.transition_times) @@ -218,7 +221,10 @@ class WindowOpening(Ventilation): outside_temp = self.outside_temp.value(time) # Reminder, no dependence on time in the resulting calculation. - temp_delta = abs(inside_temp - outside_temp) / outside_temp + if outside_temp < (inside_temp-self.min_deltaT): + temp_delta = (inside_temp - outside_temp) / outside_temp + else: + temp_delta = self.min_deltaT / outside_temp root = np.sqrt(9.81 * self.window_height * temp_delta) window_area = self.window_height * self.opening_length * self.number_of_windows return (3600 / (3 * room.volume)) * self.cd_b * window_area * root From 103c820adad27fe89fa680020096b57672aadcff Mon Sep 17 00:00:00 2001 From: Nicolas Mounet Date: Wed, 11 Nov 2020 14:13:23 +0100 Subject: [PATCH 2/3] Changing the r0 for June in tests, following the enforcement of a minimum temperature difference --- cara/tests/test_known_quantities.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cara/tests/test_known_quantities.py b/cara/tests/test_known_quantities.py index 336751f9..d621f31d 100644 --- a/cara/tests/test_known_quantities.py +++ b/cara/tests/test_known_quantities.py @@ -471,7 +471,7 @@ def build_exposure_model(concentration_model): "month, expected_r0", [ ['Jan', 91.06953], - ['Jun', 99.46692], + ['Jun', 99.995335], ], ) def test_r0_hourly_dep(month,expected_r0): @@ -489,7 +489,7 @@ def test_r0_hourly_dep(month,expected_r0): "month, expected_r0", [ ['Jan', 91.19912], - ['Jun', 99.59226], + ['Jun', 99.997324], ], ) def test_r0_hourly_dep_refined(month,expected_r0): From 1ec9a0e9b08966715daabc627f7f459fdb8cd64d Mon Sep 17 00:00:00 2001 From: Nicolas Mounet Date: Thu, 12 Nov 2020 12:06:33 +0100 Subject: [PATCH 3/3] More concise/clearer way to compute the deltaT in air_exchange for WindowOpening; adding comments --- cara/models.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/cara/models.py b/cara/models.py index 22584cd3..12f85c7c 100644 --- a/cara/models.py +++ b/cara/models.py @@ -217,15 +217,17 @@ class WindowOpening(Ventilation): if not self.active.triggered(time): return 0. + # Reminder, no dependence on time in the resulting calculation. inside_temp = self.inside_temp.value(time) outside_temp = self.outside_temp.value(time) - # Reminder, no dependence on time in the resulting calculation. - if outside_temp < (inside_temp-self.min_deltaT): - temp_delta = (inside_temp - outside_temp) / outside_temp - else: - temp_delta = self.min_deltaT / outside_temp - root = np.sqrt(9.81 * self.window_height * temp_delta) + # The inside_temperature is forced to be always at least min_deltaT degree + # warmer than the outside_temperature. Further research needed to + # handle the buoyancy driven ventilation when the temperature gradient + # is inverted. + inside_temp = max(inside_temp, outside_temp + self.min_deltaT) + temp_gradient = (inside_temp - outside_temp) / outside_temp + root = np.sqrt(9.81 * self.window_height * temp_gradient) window_area = self.window_height * self.opening_length * self.number_of_windows return (3600 / (3 * room.volume)) * self.cd_b * window_area * root