From 4007a1aee8034c147e1be244108c24877cd40be3 Mon Sep 17 00:00:00 2001 From: Nicolas Mounet Date: Tue, 1 Dec 2020 15:28:14 +0100 Subject: [PATCH] Adding hinged windows to the calculator model_generator (plus test) --- cara/apps/calculator/model_generator.py | 27 +++++++++++++------ .../apps/calculator/test_model_generator.py | 25 ++++++++++++++++- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/cara/apps/calculator/model_generator.py b/cara/apps/calculator/model_generator.py index 64b28fa0..4dd7be70 100644 --- a/cara/apps/calculator/model_generator.py +++ b/cara/apps/calculator/model_generator.py @@ -146,13 +146,24 @@ class FormData: inside_temp = models.PiecewiseConstant((0, 24), (293,)) outside_temp = data.GenevaTemperatures[month] - ventilation = models.SlidingWindow( - active=window_interval, - inside_temp=inside_temp, outside_temp=outside_temp, - window_height=self.window_height, - opening_length=self.opening_distance, - number_of_windows=self.windows_number, - ) + if self.window_type == 'sliding': + ventilation = models.SlidingWindow( + active=window_interval, + inside_temp=inside_temp, outside_temp=outside_temp, + window_height=self.window_height, + opening_length=self.opening_distance, + number_of_windows=self.windows_number, + ) + elif self.window_type == 'hinged': + ventilation = models.HingedWindow( + active=window_interval, + inside_temp=inside_temp, outside_temp=outside_temp, + window_height=self.window_height, + window_width=self.window_width, + opening_length=self.opening_distance, + number_of_windows=self.windows_number, + ) + elif self.ventilation_type == "no-ventilation": ventilation = models.AirChange(active=always_on, air_exch=0.) else: @@ -419,7 +430,7 @@ def baseline_raw_form_data(): 'ventilation_type': 'natural', 'volume_type': 'room_volume', 'window_height': '2', - 'window_type': 'hinged', + 'window_type': 'sliding', 'window_width': '2', 'windows_number': '1', 'windows_open': 'interval' diff --git a/cara/tests/apps/calculator/test_model_generator.py b/cara/tests/apps/calculator/test_model_generator.py index 889eca0b..0b660798 100644 --- a/cara/tests/apps/calculator/test_model_generator.py +++ b/cara/tests/apps/calculator/test_model_generator.py @@ -30,7 +30,7 @@ def test_blend_expiration(): assert r == expected -def test_ventilation_window(baseline_form): +def test_ventilation_slidingwindow(baseline_form): room = models.Room(75) window = models.SlidingWindow( active=models.PeriodicInterval(period=120, duration=10), @@ -40,6 +40,7 @@ def test_ventilation_window(baseline_form): ) baseline_form.ventilation_type = 'natural' baseline_form.windows_open = 'interval' + baseline_form.window_type = 'sliding' baseline_form.event_type = 'recurrent_event' baseline_form.recurrent_event_month = 'December' baseline_form.window_height = 1.6 @@ -50,6 +51,28 @@ def test_ventilation_window(baseline_form): [baseline_form.ventilation().air_exchange(room, t) for t in ts]) +def test_ventilation_hingedwindow(baseline_form): + room = models.Room(75) + window = models.HingedWindow( + active=models.PeriodicInterval(period=120, duration=10), + inside_temp=models.PiecewiseConstant((0, 24), (293,)), + outside_temp=data.GenevaTemperatures['Dec'], + window_height=1.6, window_width=1., opening_length=0.6, + ) + baseline_form.ventilation_type = 'natural' + baseline_form.windows_open = 'interval' + baseline_form.window_type = 'hinged' + baseline_form.event_type = 'recurrent_event' + baseline_form.recurrent_event_month = 'December' + baseline_form.window_height = 1.6 + baseline_form.window_width = 1. + baseline_form.opening_distance = 0.6 + + ts = np.linspace(8, 16, 100) + np.testing.assert_allclose([window.air_exchange(room, t) for t in ts], + [baseline_form.ventilation().air_exchange(room, t) for t in ts]) + + def test_ventilation_mechanical(baseline_form): room = models.Room(75) mech = models.HVACMechanical(