cara/cara/tests/test_known_quantities.py
2020-10-21 10:22:28 +02:00

84 lines
2.6 KiB
Python

import numpy.testing as npt
import pytest
from numpy import linspace
import cara.models as models
def test_no_mask_aerosols(baseline_model):
exp = models.Expiration.types['Unmodulated Vocalization']
npt.assert_allclose(
exp.aerosols(models.Mask.types['No mask']),
6.077541e-12,
rtol=1e-5,
)
def test_no_mask_emission_rate(baseline_model):
rate = 167.74011998223307
npt.assert_allclose(
[baseline_model.infected.emission_rate(t) for t in [0, 1, 4, 4.5, 5, 8, 9]],
[rate, rate, rate, 0, rate, rate, 0],
rtol=1e-5
)
@pytest.fixture
def baseline_model():
model = models.Model(
room=models.Room(volume=75),
ventilation=models.PeriodicWindow(period=120, duration=120, inside_temp=293, outside_temp=283, cd_b=0.6,
window_height=1.6, opening_length=0.6),
infected=models.InfectedPerson(
virus=models.Virus.types['SARS_CoV_2'],
present_times=((0, 4), (5, 8)),
mask=models.Mask.types['No mask'],
activity=models.Activity.types['Light exercise'],
expiration=models.Expiration.types['Unmodulated Vocalization'],
),
infected_occupants=1,
exposed_occupants=10,
exposed_activity=models.Activity.types['Light exercise'],
)
return model
@pytest.fixture
def baseline_periodic_window():
return models.PeriodicWindow(period=120, duration=15, inside_temp=293, outside_temp=283, cd_b=0.6,
window_height=1.6, opening_length=0.6)
@pytest.fixture
def baseline_room():
return models.Room(volume=75)
@pytest.fixture
def baseline_periodic_hepa():
return models.PeriodicHEPA(period=120, duration=15, q_air_mech=514.74)
def test_r0(baseline_model):
saturated = 2.909312e-01
ts = [0, 4, 5, 7, 10]
concentrations = [baseline_model.concentration(t) for t in ts]
npt.assert_allclose(
concentrations,
[0.000000e+00, 2.909211e-01, 1.273836e-04, 2.909210e-01, 5.577662e-08],
rtol=1e-5
)
def test_periodic_window(baseline_periodic_window, baseline_room):
ts = linspace(0, 9 * 60, 9)
aes = [baseline_periodic_window.air_exchange(baseline_room, t) for t in ts]
answers = [0, 0, 0, 0, 0, 0, 0, 514.76 / 75, 0]
npt.assert_allclose(aes, answers, rtol=1e-5)
def test_periodic_hepa(baseline_periodic_hepa, baseline_room):
ts = linspace(0, 9 * 60, 9)
aes = [baseline_periodic_hepa.air_exchange(baseline_room, t) for t in ts]
answers = [0, 0, 0, 0, 0, 0, 0, 514.74 / 75, 0]
npt.assert_allclose(aes, answers, rtol=1e-5)