def speaking(T,RH):
    NaCl_con = 80.0/1000; # 80.0 mmol/L converted to mol/L for saliva, from Kallapur et al.
    sizeclass = [3,6,12,20,28,36,45,62.5,87.5,112.5,137.5,175,225,375,750] # in um
    numcon = [4.59,66.21,22.23,11.33,7.87,4.32,3.37,4.57,3.44,4.52,4.31,4.52,3.85,3.45,1.11] # in cm^-3
    #sizeclass = [12,20,28,36,45,62.5,87.5,112.5,137.5,175,225,375,750,1500] # in um
    #numcon = [22.23,11.33,7.87,4.32,3.37,4.57,3.44,4.52,4.31,4.52,3.85,3.45,1.11,0.00] # in cm^-3
    t_settle = []
    sizepeak = 6 
    for binnum in range(15):
        size = sizeclass[binnum]
        #eqsize = 2*10**6 * settle.kohler(T, RH, size, NaCl_con)
        count = numcon[binnum]
        settime = settle.settling_time(T,RH,size,NaCl_con,1.5,model='sc')
        #if eqsize > 10:
        #    settime = settle.settling_time(T,RH,size,NaCl_con,1.5,model='empirical_big')
        #else:
        #    settime = settle.settling_time(T,RH,size,NaCl_con,1.5,model='empirical_small') 
        #print(eqsize,settime)
        t_settle.append(settime)
    t_peak = settle.settling_time(T,RH,sizepeak,NaCl_con,1.5,model='sc')
    #eqsizepeak = 2*10**6 * settle.kohler(T, RH, sizepeak, NaCl_con)
    #if eqsizepeak > 10:
        #t_peak = settle.settling_time(T,RH,sizepeak,NaCl_con,1.5,model='empirical_big')
    #else:
        #t_peak = settle.settling_time(T,RH,sizepeak,NaCl_con,1.5,model='empirical_small')    
    return(sizeclass,numcon,t_settle,sizepeak,t_peak)
def riskfactor2(T, RH, mode):

    mode_to_test = mode
    risk_fac = 0

    if mode_to_test == 'speaking':
        [sizeclass, numcon, t_settle, sizepeak,
         t_peak] = module_initsize.speaking(T, RH)
        NaCl_con = 80.0 / 1000
        # 80.0 mmol/L converted to mol/L for saliva, from Kallapur et al.
    elif mode_to_test == 'coughing':
        [sizeclass, numcon, t_settle, sizepeak,
         t_peak] = module_initsize.coughing(T, RH)
        NaCl_con = 91.0 / 1000
        # Didn't find any data on dry cough droplet sodium level, here I assume it's close to mouth breathing?
    elif mode_to_test == 'breathing':
        [sizeclass, numcon, t_settle, sizepeak,
         t_peak] = module_initsize.breathing(T, RH)
    viralload = 10**8  # viral particles per mL saliva

    for binnum in range(len(sizeclass)):
        size = sizeclass[binnum]
        count = numcon[binnum]
        dropvol = 4 / 3 * np.pi * (
            (size / 2)**3) * (10**(-12))  # droplet volume converted to mL
        poi_lambda = viralload * dropvol  # in viral particles per droplet
        decay_rate = viability.kdecay(T, RH, 1.9)
        if size > 10:
            settling_time = settle.settling_time(T,
                                                 RH,
                                                 size,
                                                 NaCl_con,
                                                 1.5,
                                                 model='empirical_big')
        else:
            settling_time = settle.settling_time(T,
                                                 RH,
                                                 size,
                                                 NaCl_con,
                                                 1.5,
                                                 model='empirical_small')
        viable_numcon_10min = count * poi_lambda * np.exp(-decay_rate *
                                                          (1 / 6) * 60)
        risk_10min = viable_numcon_10min * (np.maximum(
            1 - ((1 / 6) / settling_time), 0)**2)
        risk_fac = risk_fac + risk_10min  # sum up the risk factors for a total risk at this T and RH condition

    return risk_fac
def coughing(T,RH):
    NaCl_con = 91.0/1000; # Didn't find any data on dry cough droplet sodium level, here I assume it's close to mouth breathing?
    sizeclass = [3,6,12,20,28,36,45,62.5,87.5,112.5,137.5,175,225,375,750,1500] # in um
    numcon = [86,1187,444,144,54,50,41,43,30,36,34,93,53,44,30,0] # in cm^-3
    t_settle = []
    sizepeak = 6
    for binnum in range(16):
        size = sizeclass[binnum]
        count = numcon[binnum]
        if size > 10:
            settling_time = settle.settling_time(T,RH,size,NaCl_con,1.5,model='empirical_big')
        else:
            settling_time = settle.settling_time(T,RH,size,NaCl_con,1.5,model='empirical_small')
        t_settle.append(settling_time)
        t_peak = settle.settling_time(T,RH,sizepeak,NaCl_con,1.5,model='empirical_big')
    return(sizeclass,numcon,t_settle,sizepeak,t_peak)
import settle

# input T[C], RH[%], d0[um], cNaCl[mol/L], fall_height[m], model='sc'
# default model selection of stokes cunningham
# output settling time [hr]
t_stl = settle.settling_time(25, 90, 10, 0.08, 1.5, 'sc')
print(t_stl)
print(type(t_stl))

# model parameter takes other arguments
t_stl = settle.settling_time(25, 90, 10, 0.08, 1.5, 'epstein')
print(t_stl)
print(type(t_stl))

# get Knudsen number of air
for T in [273, 278, 283, 288, 293, 298, 303, 308, 313]:
    print(settle.Kn_atm_air(T))
Exemplo n.º 5
0
import settle
import viability
import weather
import matplotlib.pyplot as plt

# In[15]:

# Weather data for LA downtown in Febuary
filename = 'LADTweather.csv'  # Input the .csv data file here

[tempC, RH] = weather.weatherdataprocess(filename)
t_settle = []
for day in range(len(tempC)):
    daily_T = tempC[day]
    daily_RH = RH[day]
    t = settle.settling_time(daily_T, daily_RH, 10, 0.05, 1.5)
    t_settle.append(t)

# In[16]:

plt.plot(t_settle)
plt.ylabel('Daily Droplet Settling Time in hr')
plt.show()

weather.weatherdatapplot(tempC, RH)

# In[ ]:

# In[ ]:

# In[ ]: