Source code for archABM.aerosol_model_mit

from typing import Tuple
from .parameters import Parameters
from .aerosol_model import AerosolModel


[docs]class AerosolModelMIT(AerosolModel): """Aerosol transmission estimator MIT COVID-19 Indoor Safety Guideline :cite:`Bazante2018995118,Bazant2021.04.04.21254903,Risbeck2021.06.21.21259287` Theoretical model that quantifies the extent to which transmission risk is reduced in large rooms with high air exchange rates, increased for more vigorous respiratory activities, and dramatically reduced by the use of face masks. Consideration of a number of outbreaks yields self-consistent estimates for the infectiousness of the new coronavirus. """ name: str = "MIT" def __init__(self, params): super().__init__(params) self.params = params
[docs] def get_risk(self, inputs: Parameters) -> Tuple[float, float]: """Calculate the infection risk of an individual in a room and the CO\ :sub:`2` thrown into the air. Args: inputs (Parameters): model parameters Returns: Tuple[float, float]: CO\ :sub:`2` concentration (ppm), and infection risk probability """ params = self.params area = inputs.room_area height = inputs.room_height volume = area * height ventilation = inputs.room_ventilation_rate ventilation_flow = ventilation * volume recirculation = 1 recirculation_flow = recirculation * volume air_flow = ventilation_flow + recirculation_flow air_outdoor_fraction = ventilation_flow / air_flow filtration_efficiency = params.filtration_efficiency # 0.01 filtration_rate = filtration_efficiency * recirculation_flow / volume relative_humidity = params.relative_humidity / 100 # 60 / 100 breathing_rate = params.breathing_rate # 0.49 aerosol_radius = params.aerosol_radius # 2 aerosol_radius_humidity = aerosol_radius * (0.4 / (1 - relative_humidity)) ** (1 / 3) infectiousness = params.infectiousness # 72 deactivation_rate = params.deactivation_rate # 0.3 deactivation_rate_humidity = deactivation_rate * relative_humidity / 50 transmissibility = params.transmissibility # 1 settling_speed = (2 / 9) * 1100 / (1.86 * 10 ** (-5)) * 9.8 / 1e9 * aerosol_radius_humidity ** 2 # * 60 * 60 / 1000 relaxation_rate = ventilation + deactivation_rate_humidity + filtration_rate + settling_speed * 60 * 60 / 1000 / ventilation dillution_factor = breathing_rate / (relaxation_rate * volume) infectiousness_room = infectiousness * dillution_factor mask_passage_probability = 1 - inputs.mask_efficiency # 0.145 transmission_rate = (breathing_rate * mask_passage_probability) ** 2 * infectiousness * transmissibility / (volume * relaxation_rate) # if risk tolerance is fixed # risk_tolerance = 0.1 # exposure_time = inputs.time_in_room_h # 10 # maximum_occupancy_transient = 1 + risk_tolerance * (1 + 1/(relaxation_rate*exposure_time)) / (transmission_rate * exposure_time) # maximum_occupancy_steady = 1 + risk_tolerance / (transmission_rate * exposure_time) # occupancy = inputs.num_people # maximum_exposure_time_steady = risk_tolerance / (occupancy - 1) / transmission_rate # maximum_exposure_time_transient = maximum_exposure_time_steady * (1 + math.sqrt(1 + 4/(relaxation_rate*maximum_exposure_time_steady) )) / 2 # background_co2 = params.background_co2 # 410 # average_co2 = params.average_co2 # 700 # maximum_exposure_time_co2 = risk_tolerance * 38000 * relaxation_rate / \ # ((average_co2 - background_co2) * breathing_rate * infectiousness * \ # transmissibility * mask_passage_probability * mask_passage_probability * ventilation ) # co2_concentration = background_co2 + risk_tolerance * 38000 * relaxation_rate / (exposure_time * breathing_rate * infectiousness * transmissibility * mask_passage_probability * mask_passage_probability * ventilation) # if exposure time and occupancy is fixed exposure_time = inputs.time_in_room_h # 10 occupancy = inputs.num_people risk_tolerance_steady = (occupancy - 1) * transmission_rate * exposure_time risk_tolerance_transient = risk_tolerance_steady / (1 + 1 / (relaxation_rate * exposure_time)) background_co2 = params.background_co2 # 410 co2_concentration = background_co2 + risk_tolerance_steady * 38000 * relaxation_rate / ( exposure_time * breathing_rate * infectiousness * transmissibility * mask_passage_probability * mask_passage_probability * ventilation ) # Return results air_contamination = co2_concentration - background_co2 infection_risk = risk_tolerance_steady print("hey", risk_tolerance_steady, relaxation_rate, exposure_time, breathing_rate, infectiousness, transmissibility, mask_passage_probability, ventilation) return air_contamination, infection_risk