Ejemplo n.º 1
0
def loss_at_an_abrupt_contraction_in_circular_tubing(temperature=293.15,  # Kelvin
                                                     pressure=101.3,  # kPa
                                                     particle_diameter=1,  # µm
                                                     particle_density=1000,  # kg/m^3
                                                     tube_air_velocity=False,  # m/s
                                                     flow_rate_in_inlet=3,  # cc/s
                                                     tube_diameter=0.0025,  # m
                                                     contraction_diameter=0.00125,  # m
                                                     contraction_angle=90,  # degrees
                                                     verbose=False,
                                                     ):
    """
    (B&W 8-69 to 8-71; W&B 6-54, 17-25)
    Temperature	293.15	 Kelvin
    Pressure	101.3	 kPa
    Particle diameter	1	 µm
    Particle density	1000	 kg/m^3
    Tube air velocity	10	 m/s
    Tube diameter	0.0025	 m
    Contraction diameter	0.00125	 m
    Contraction angle	90	 degrees
    """

    if not tube_air_velocity:
        tube_air_velocity = tools.flow_rate2flow_velocity(flow_rate_in_inlet, tube_diameter, verbose=verbose)

    st_num = tools.stokes_number(particle_density, particle_diameter, pressure, temperature, tube_air_velocity, 1,
                                 contraction_diameter, verbose=verbose)

    # st_num = (particle_density * particle_diameter * particle_diameter * 0.000000000001 * slip_correction_factor * B906 / (18*B912*B908))


    frac = 1 - (1 / (1 + ((2 * st_num * (1 - (contraction_diameter / tube_diameter) ** 2)) / (
        3.14 * np.exp(-0.0185 * contraction_angle))) ** -1.24))
    return frac
Ejemplo n.º 2
0
def aspiration_efficiency_all_forward_angles(temperature=293.15,  # Kelvin
                                             pressure=101.3,  # kPa
                                             particle_diameter=10,  # µm
                                             particle_density=1000,  # kg/m^3
                                             inlet_diameter=0.025,  # m
                                             sampling_angle=46,  # degrees	between 0 to 90°
                                             flow_rate_in_inlet=3,  # cc/s
                                             air_velocity_in_inlet=False,  # m/s
                                             velocity_ratio=5,  # R is 1 for isokinetic, > 1 for subisokinetic
                                             force=False,
                                             verbose=False):
    """
    (B&W 8-20, 8-21, 8-22; W&B 6-20, 6-21, 6-22)
    Hangal and Willeke Eviron. Sci. Tech. 24:688-691 (1990)
    Temperature	293.15	 Kelvin
    Pressure	101.3	 kPa
    Particle diameter	10	 µm
    Particle density	1000	 kg/m^3
    Inlet diameter	0.025	 m
    Sampling angle	46	 degrees	between 0 to 90°
    Air velocity in inlet (Vi)	0.34	 m/s
    Velocity ratio (Vw/Vi)	5		R is 1 for isokinetic, > 1 for subisokinetic
    """
    if not air_velocity_in_inlet:
        air_velocity_in_inlet = tools.flow_rate2flow_velocity(flow_rate_in_inlet, inlet_diameter, verbose=verbose)

    st_num = tools.stokes_number(particle_density, particle_diameter, pressure, temperature, air_velocity_in_inlet,
                                 velocity_ratio, inlet_diameter, verbose=verbose)
    # rey_num = tools.flow_reynolds_number(inlet_diameter, air_velocity_in_inlet, temperature, pressure, verbose=verbose)
    if (45 < sampling_angle <= 90) and (1.25 < velocity_ratio < 6.25) and (0.003 < st_num < 0.2):
        pass
    else:
        txt = """sampling angle, velocity ratio, or stokes number is not in valid regime!
Sampling angle: %s (45 < angle < 90)
Velocity ratio: %s (1.25 < ratio < 6.25)
Stokes number: %s (0.003 < st_num  < 0.2)""" % (sampling_angle, velocity_ratio, st_num)
        if force:
            warnings.warn(txt)
        else:
            raise ValueError(txt)

    if sampling_angle == 0:
        inert_param = 1 - 1 / (1 + (2 + 0.617 / velocity_ratio) * st_num)
    elif sampling_angle > 45:
        inert_param = 3 * st_num ** (velocity_ratio ** -0.5)
    else:
        f619 = st_num * np.exp(0.022 * sampling_angle)
        inert_param = (1 - 1 / (1 + (2 + 0.617 / velocity_ratio) * f619)) * (
            1 - 1 / (1 + 0.55 * f619 * np.exp(0.25 * f619))) / (1 - 1 / (1 + 2.617 * f619))
    # =IF(B609=0,1-1/(1+(2+0.617/B611)*B618),IF(B609>45,3*B618^(B611^-0.5),(1-1/(1+(2+0.617/B611)*B619))*(1-1/(1+0.55*B619*EXP(0.25*B619)))/(1-1/(1+2.617*B619))))


    asp_eff = 1 + (velocity_ratio * np.cos(sampling_angle * np.pi / 180) - 1) * inert_param
    return asp_eff
Ejemplo n.º 3
0
def loss_in_a_bent_section_of_circular_tubing(
        temperature=293.15,  # Kelvin
        pressure=101.3,  # kPa
        particle_diameter=3.5,  # µm
        particle_density=1000,  # kg/m^3
        tube_air_flow_rate=3,  # cc/s
        tube_air_velocity=False,  # m/s
        tube_diameter=0.0025,  # m
        angle_of_bend=90,  # degrees
        flow_type='auto',
        verbose=False):
    """ (B&W 8-66 to 8-68; W&B 6-52, 6-53)
        Temperature	293.15	 Kelvin
        Pressure	101.3	 kPa
        Particle Diameter	3.5	 µm
        Particle Density	1000	 kg/m^3
        Tube air velocity	6.25	 m/s
        Tube diameter	0.0025	 m
        Angle of bend	90	 degrees"""

    if not tube_air_velocity:
        tube_air_velocity = tools.flow_rate2flow_velocity(tube_air_flow_rate,
                                                          tube_diameter,
                                                          verbose=verbose)

    if flow_type == 'auto':
        flow_type = tools.test_flow_type_in_tube(tube_diameter,
                                                 tube_air_velocity,
                                                 temperature,
                                                 pressure,
                                                 verbose=verbose)

    velocity_ratio = 1
    stnum = tools.stokes_number(particle_density,
                                particle_diameter,
                                pressure,
                                temperature,
                                tube_air_velocity,
                                velocity_ratio,
                                tube_diameter,
                                verbose=verbose)

    if flow_type == 'laminar':

        fract = 1 - stnum * angle_of_bend * np.pi / 180.

    elif flow_type == 'turbulent':
        fract = np.exp(-2.823 * stnum * angle_of_bend * np.pi / 180)

    else:
        raise ValueError('Unknown flow type: %s' % flow_type)

    return fract
Ejemplo n.º 4
0
def loss_at_an_abrupt_contraction_in_circular_tubing(
    temperature=293.15,  # Kelvin
    pressure=101.3,  # kPa
    particle_diameter=1,  # µm
    particle_density=1000,  # kg/m^3
    tube_air_velocity=False,  # m/s
    flow_rate_in_inlet=3,  # cc/s
    tube_diameter=0.0025,  # m
    contraction_diameter=0.00125,  # m
    contraction_angle=90,  # degrees
    verbose=False,
):
    """
    (B&W 8-69 to 8-71; W&B 6-54, 17-25)
    Temperature	293.15	 Kelvin
    Pressure	101.3	 kPa
    Particle diameter	1	 µm
    Particle density	1000	 kg/m^3
    Tube air velocity	10	 m/s
    Tube diameter	0.0025	 m
    Contraction diameter	0.00125	 m
    Contraction angle	90	 degrees
    """

    if not tube_air_velocity:
        tube_air_velocity = tools.flow_rate2flow_velocity(flow_rate_in_inlet,
                                                          tube_diameter,
                                                          verbose=verbose)

    st_num = tools.stokes_number(particle_density,
                                 particle_diameter,
                                 pressure,
                                 temperature,
                                 tube_air_velocity,
                                 1,
                                 contraction_diameter,
                                 verbose=verbose)

    # st_num = (particle_density * particle_diameter * particle_diameter * 0.000000000001 * slip_correction_factor * B906 / (18*B912*B908))

    frac = 1 - (1 / (1 +
                     ((2 * st_num *
                       (1 - (contraction_diameter / tube_diameter)**2)) /
                      (3.14 * np.exp(-0.0185 * contraction_angle)))**-1.24))
    return frac
Ejemplo n.º 5
0
def loss_in_a_bent_section_of_circular_tubing(temperature=293.15,  # Kelvin
                                              pressure=101.3,  # kPa
                                              particle_diameter=3.5,  # µm
                                              particle_density=1000,  # kg/m^3
                                              tube_air_flow_rate=3,  # cc/s
                                              tube_air_velocity=False,  # m/s
                                              tube_diameter=0.0025,  # m
                                              angle_of_bend=90,  # degrees
                                              flow_type='auto',
                                              verbose=False
                                              ):
    """ (B&W 8-66 to 8-68; W&B 6-52, 6-53)
        Temperature	293.15	 Kelvin
        Pressure	101.3	 kPa
        Particle Diameter	3.5	 µm
        Particle Density	1000	 kg/m^3
        Tube air velocity	6.25	 m/s
        Tube diameter	0.0025	 m
        Angle of bend	90	 degrees"""

    if not tube_air_velocity:
        tube_air_velocity = tools.flow_rate2flow_velocity(tube_air_flow_rate, tube_diameter, verbose=verbose)

    if flow_type == 'auto':
        flow_type = tools.test_flow_type_in_tube(tube_diameter, tube_air_velocity, temperature, pressure,
                                                 verbose=verbose)

    velocity_ratio = 1
    stnum = tools.stokes_number(particle_density, particle_diameter, pressure, temperature, tube_air_velocity,
                                velocity_ratio, tube_diameter, verbose=verbose)

    if flow_type == 'laminar':

        fract = 1 - stnum * angle_of_bend * np.pi / 180.

    elif flow_type == 'turbulent':
        fract = np.exp(-2.823 * stnum * angle_of_bend * np.pi / 180)

    else:
        raise ValueError('Unknown flow type: %s' % flow_type)

    return fract
Ejemplo n.º 6
0
def aspiration_efficiency_all_forward_angles(
        temperature=293.15,  # Kelvin
        pressure=101.3,  # kPa
        particle_diameter=10,  # µm
        particle_density=1000,  # kg/m^3
        inlet_diameter=0.025,  # m
        sampling_angle=46,  # degrees	between 0 to 90°
        flow_rate_in_inlet=3,  # cc/s
        air_velocity_in_inlet=False,  # m/s
        velocity_ratio=5,  # R is 1 for isokinetic, > 1 for subisokinetic
        force=False,
        verbose=False):
    """
    (B&W 8-20, 8-21, 8-22; W&B 6-20, 6-21, 6-22)
    Hangal and Willeke Eviron. Sci. Tech. 24:688-691 (1990)
    Temperature	293.15	 Kelvin
    Pressure	101.3	 kPa
    Particle diameter	10	 µm
    Particle density	1000	 kg/m^3
    Inlet diameter	0.025	 m
    Sampling angle	46	 degrees	between 0 to 90°
    Air velocity in inlet (Vi)	0.34	 m/s
    Velocity ratio (Vw/Vi)	5		R is 1 for isokinetic, > 1 for subisokinetic
    """
    if not air_velocity_in_inlet:
        air_velocity_in_inlet = tools.flow_rate2flow_velocity(
            flow_rate_in_inlet, inlet_diameter, verbose=verbose)

    st_num = tools.stokes_number(particle_density,
                                 particle_diameter,
                                 pressure,
                                 temperature,
                                 air_velocity_in_inlet,
                                 velocity_ratio,
                                 inlet_diameter,
                                 verbose=verbose)
    # rey_num = tools.flow_reynolds_number(inlet_diameter, air_velocity_in_inlet, temperature, pressure, verbose=verbose)
    if (45 < sampling_angle <= 90) and (1.25 < velocity_ratio <
                                        6.25) and (0.003 < st_num < 0.2):
        pass
    else:
        txt = """sampling angle, velocity ratio, or stokes number is not in valid regime!
Sampling angle: %s (45 < angle < 90)
Velocity ratio: %s (1.25 < ratio < 6.25)
Stokes number: %s (0.003 < st_num  < 0.2)""" % (sampling_angle, velocity_ratio,
                                                st_num)
        if force:
            warnings.warn(txt)
        else:
            raise ValueError(txt)

    if sampling_angle == 0:
        inert_param = 1 - 1 / (1 + (2 + 0.617 / velocity_ratio) * st_num)
    elif sampling_angle > 45:
        inert_param = 3 * st_num**(velocity_ratio**-0.5)
    else:
        f619 = st_num * np.exp(0.022 * sampling_angle)
        inert_param = (1 - 1 / (1 + (2 + 0.617 / velocity_ratio) * f619)) * (
            1 - 1 /
            (1 + 0.55 * f619 * np.exp(0.25 * f619))) / (1 - 1 /
                                                        (1 + 2.617 * f619))
    # =IF(B609=0,1-1/(1+(2+0.617/B611)*B618),IF(B609>45,3*B618^(B611^-0.5),(1-1/(1+(2+0.617/B611)*B619))*(1-1/(1+0.55*B619*EXP(0.25*B619)))/(1-1/(1+2.617*B619))))

    asp_eff = 1 + (velocity_ratio * np.cos(sampling_angle * np.pi / 180) -
                   1) * inert_param
    return asp_eff