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
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
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
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
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
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