Exemple #1
0
def gravitational_loss_in_circular_tube(temperature=293.15,  # Kelvin
                                        pressure=101.3,  # kPa
                                        particle_diameter=10,  # µm
                                        particle_density=1000,  # kg/m^3
                                        tube_diameter=0.01,  # m
                                        tube_length=0.1,  # m
                                        incline_angle=60,  # degrees from horizontal (0-90)
                                        flow_rate=3,  # cc/s
                                        mean_flow_velocity=False,  # 0.1061    # m/s)
                                        flow_type='auto',
                                        verbose=False):
    """
    Arguments
    ---------
    temperature         = 293.15,   # Kelvin
    pressure            = 101.3,    # kPa
    particle_diameter   = 10,       # µm
    particle_density    = 1000,     # kg/m^3
    tube_diameter       = 0.01,     # m
    tube_length         = 0.1,      # m
    incline_angle       = 60,       # degrees from horizontal (0-90)
    flow_rate           = 3,        # cc/s
    mean_flow_velocity  = False     #0.1061    # m/s)"""

    if not mean_flow_velocity:
        mean_flow_velocity = _tools_sampling_efficiency.flow_rate2flow_velocity(flow_rate, tube_diameter, verbose=verbose)

    if flow_type == 'auto':
        flow_type = _tools_sampling_efficiency.test_flow_type_in_tube(tube_diameter, mean_flow_velocity, temperature, pressure, verbose=verbose)

    if flow_type == 'laminar':
        sv = _tools_sampling_efficiency.settling_velocity(temperature, particle_density, particle_diameter, pressure, verbose=verbose)
        k770 = np.cos(np.pi * incline_angle / 180) * 3 * sv * tube_length / (4 * tube_diameter * mean_flow_velocity)
        if np.any((k770 ** (2. / 3)) > 1):
            fract = 0
        else:

            if np.any(k770 ** (2 / 3.) > 1):
                k771 = 0
            else:
                k771 = np.arcsin(k770 ** (1 / 3.))  # done

            fract = (1 - (2 / np.pi) * (
            2 * k770 * np.sqrt(1 - k770 ** (2 / 3)) + k771 - (k770 ** (1 / 3) * np.sqrt(1 - k770 ** (2 / 3)))))  # done
            if np.any(fract < 0):
                fract = 0
    elif flow_type == 'turbulent':
        raise ValueError('Sorry this loss mechanism has not been implemented for turbulent flow')
    else:
        raise ValueError('Unknown flow type: %s' % flow_type)
    if verbose:
        print('k770: %s' % k770)
        print('k771: %s' % k771)
        print('fraction penetrating: %s' % fract)
    return fract
Exemple #2
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_sampling_efficiency.flow_rate2flow_velocity(
            tube_air_flow_rate, tube_diameter, verbose=verbose)

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

    velocity_ratio = 1
    stnum = _tools_sampling_efficiency.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
Exemple #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_sampling_efficiency.flow_rate2flow_velocity(tube_air_flow_rate, tube_diameter, verbose=verbose)

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

    velocity_ratio = 1
    stnum = _tools_sampling_efficiency.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
Exemple #4
0
def gravitational_loss_in_circular_tube(
        temperature=293.15,  # Kelvin
        pressure=101.3,  # kPa
        particle_diameter=10,  # µm
        particle_density=1000,  # kg/m^3
        tube_diameter=0.01,  # m
        tube_length=0.1,  # m
        incline_angle=60,  # degrees from horizontal (0-90)
        flow_rate=3,  # cc/s
        mean_flow_velocity=False,  # 0.1061    # m/s)
        flow_type='auto',
        verbose=False):
    """
    Arguments
    ---------
    temperature         = 293.15,   # Kelvin
    pressure            = 101.3,    # kPa
    particle_diameter   = 10,       # µm
    particle_density    = 1000,     # kg/m^3
    tube_diameter       = 0.01,     # m
    tube_length         = 0.1,      # m
    incline_angle       = 60,       # degrees from horizontal (0-90)
    flow_rate           = 3,        # cc/s
    mean_flow_velocity  = False     #0.1061    # m/s)"""

    if not mean_flow_velocity:
        mean_flow_velocity = _tools_sampling_efficiency.flow_rate2flow_velocity(
            flow_rate, tube_diameter, verbose=verbose)

    if flow_type == 'auto':
        flow_type = _tools_sampling_efficiency.test_flow_type_in_tube(
            tube_diameter,
            mean_flow_velocity,
            temperature,
            pressure,
            verbose=verbose)

    if flow_type == 'laminar':
        sv = _tools_sampling_efficiency.settling_velocity(temperature,
                                                          particle_density,
                                                          particle_diameter,
                                                          pressure,
                                                          verbose=verbose)
        k770 = np.cos(np.pi * incline_angle / 180) * 3 * sv * tube_length / (
            4 * tube_diameter * mean_flow_velocity)
        if np.any((k770**(2. / 3)) > 1):
            fract = 0
        else:

            if np.any(k770**(2 / 3.) > 1):
                k771 = 0
            else:
                k771 = np.arcsin(k770**(1 / 3.))  # done

            fract = (1 - (2 / np.pi) *
                     (2 * k770 * np.sqrt(1 - k770**(2 / 3)) + k771 -
                      (k770**(1 / 3) * np.sqrt(1 - k770**(2 / 3)))))  # done
            if np.any(fract < 0):
                fract = 0
    elif flow_type == 'turbulent':
        raise ValueError(
            'Sorry this loss mechanism has not been implemented for turbulent flow'
        )
    else:
        raise ValueError('Unknown flow type: %s' % flow_type)
    if verbose:
        print('k770: %s' % k770)
        print('k771: %s' % k771)
        print('fraction penetrating: %s' % fract)
    return fract