From a7a9ca43daf86d914b660aa35f2b5d4474c94dbe Mon Sep 17 00:00:00 2001 From: Luis Aleixo Date: Wed, 28 Sep 2022 14:28:47 +0200 Subject: [PATCH] Removed co2 activities and adapted formula --- caimira/models.py | 14 ++++++++------ caimira/monte_carlo/data.py | 8 -------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/caimira/models.py b/caimira/models.py index 99969d5d..ce2e949a 100644 --- a/caimira/models.py +++ b/caimira/models.py @@ -1004,7 +1004,7 @@ class ConcentrationModel: return 1. / (IVRR * V) @method_cache - def _CO2_concentration_limit(self, time: float) -> _VectorisedFloat: + def _CO2_normed_concentration_limit(self, time: float) -> _VectorisedFloat: if not self.infected.person_present(time): return 0. V = self.room.volume @@ -1416,20 +1416,22 @@ class ExposureModel: return self._CO2_concentration(time) def _CO2_concentration(self, time: float) -> _VectorisedFloat: + make_up_air_concentration = 440.44e-6 # carbon dioxide concentration in the make up air (m3/m3 person) - 440ppm if time <= self.concentration_model._first_presence_time(): - return 440.44e-6 # carbon dioxide concentration in the make up air (m3/m3 person) - 440ppm + return make_up_air_concentration next_state_change_time = self.concentration_model._next_state_change(time) IVRR = self.concentration_model.air_exch_virus_removal_rate(next_state_change_time) - co2_conc_limit = (self.concentration_model._CO2_concentration_limit(next_state_change_time) * - (self.concentration_model.infected.activity.exhalation_rate * (self.exposed.number + self.concentration_model.infected.number))) - + co2_conc_limit = (self.concentration_model._CO2_normed_concentration_limit(next_state_change_time) * + ((self.exposed.number*self.exposed.activity.exhalation_rate*0.1 + + self.concentration_model.infected.number*self.concentration_model.infected.activity.exhalation_rate*0.1))) + t_last_state_change = self.concentration_model.last_state_change(time) co2_conc_at_last_state_change = self._CO2_concentration_cached(t_last_state_change) # CO2 contribution in the room at start delta_time = time - t_last_state_change fac = np.exp(-IVRR * delta_time) - return co2_conc_limit * (1 - fac) + ((co2_conc_at_last_state_change - 440.44e-6) * fac) + 440.44e-6 + return co2_conc_limit * (1 - fac) + ((co2_conc_at_last_state_change - make_up_air_concentration) * fac) + make_up_air_concentration def CO2_concentration(self, time: float) -> _VectorisedFloat: # Correction due to the number of generated points. diff --git a/caimira/monte_carlo/data.py b/caimira/monte_carlo/data.py index 35dc3eb4..e0eaa09a 100644 --- a/caimira/monte_carlo/data.py +++ b/caimira/monte_carlo/data.py @@ -86,14 +86,6 @@ activity_distributions = { } -co2_activity = { - 'Sleep': mc.Activity(0.013, 0.013), - 'Resting': mc.Activity(0.02, 0.02), - 'Normal work': mc.Activity(LogNormal(0.08, 0.13), LogNormal(0.08, 0.13)), - 'Hard work': mc.Activity(LogNormal(0.33, 0.38), LogNormal(0.33, 0.38)), -} - - # From https://doi.org/10.1101/2021.10.14.21264988 and references therein symptomatic_vl_frequencies = LogCustomKernel( np.array((2.46032, 2.67431, 2.85434, 3.06155, 3.25856, 3.47256, 3.66957, 3.85979, 4.09927, 4.27081,