# Source code for chemics.terminal_velocity

import numpy as np

[docs]def ut(cd, dp, rhog, rhos):
"""
Calculate terminal velocity of a single particle based on Equation 28 on
page 80 in the Kunii and Levenspiel book _ where :math:C_D is an
experimentally determined drag coefficient.

.. math:: u_t = \\left( \\frac{4 d_p\\, (\\rho_s - \\rho_g) g}{3 \\rho_g\\, C_D} \\right)^{1/2}

Parameters
----------
cd : float
Drag coefficient [-]
dp : float
Diameter of particle [m]
rhog : float
Density of gas [kg/m^3]
rhos : float
Density of solid [kg/m^3]

Returns
-------
ut : float
Terminal velocity [m/s]

Example
-------
>>> ut(11.6867, 0.00016, 1.2, 2600)
0.6227

References
----------
..  Daizo Kunii and Octave Levenspiel. Fluidization Engineering.
Butterworth-Heinemann, 2nd edition, 1991.
"""
g = 9.81  # gravity acceleration, m/s^2
tm1 = 4 * dp * (rhos - rhog) * g
tm2 = 3 * rhog * cd
ut = (tm1 / tm2)**(1 / 2)
return ut

[docs]def ut_ganser(dp, mu, phi, rhog, rhos):
"""
Estimate terminal velocity of a non-spherical particle based on the Ganser
drag coefficient _. According to the Chhabra paper _, the Ganser drag
correlation is applicable for sphericity values from 0.09 to 1.

.. math::

C_d &= \\frac{24}{Re\\, K_1} \\left( 1 + 0.1118 (Re\\, K_1 K_2)^{0.6567} \\right) + \\frac{0.4305 K_2}{1 + \\frac{3305}{Re\\, K_1 K_2}}

K_1 &= \\left( \\frac{1}{3} + \\frac{2}{3}\\phi \\right)

K_2 &= 10^{1.8148 (-log\\, \\phi)^{0.5743}}

where K₁ is Stokes' shape factor and K₂ is Newton's shape factor. The Cui 2007
and Chhabra 1999 papers leave out the :math:-2.25*d_v/D term in the shape
factor equations.

Parameters
----------
dp : float
Diameter of the particle [m]
mu : float
Viscosity of gas [kg/(m s)]
phi : float
Sphericity of the particle [-]
rhog : float
Density of the gas [kg/m³]
rhos : float
Density of the particle [kg/m³]

Returns
-------
ut : float
Terminal velocity of non-spherical particle [m/s]

Example
-------
>>> ut_ganser(0.00016, 1.8e-5, 0.67, 1.2, 2600)
0.6230

Note
----
Drag coefficient is referenced from Equation 18 in Ganser, Equation 6 in
Chhabra, and as Equation 2 in Cui _.

References
----------
..  Gary H. Ganser. A rational approach to drag prediction of spherical
and nonsperical particles. Powder Technology, 77, 143-152, 1993.
..  R.P. Chhabra, L. Agarwal, and N.K. Sinha. Drag on non-spherical
particles: An evaluation of available methods. Powder Technology,
101, 288-295, 1999.
..  Heping Cui and John R. Grace. Fluidization of biomass particles: A
review of experimental multiphase flow aspects. Chemical Engineering
Science, 62, 45-55, 2007.
"""
g = 9.81    # acceleration from gravity [m/s²]

# Guess a range for Ut [m/s] to perform calculations
# max terminal velocity in range determined from Newton's law
ut_newton = 1.74 * np.sqrt(9.81 * dp * (rhos - rhog) / rhog)
ut = np.arange(0.0001, ut_newton, 0.004)

# Shape factors
# papers Cui 2007 and Chhabra 1999 leave out the -2.25*dv/D term
k1 = (1 / 3 + 2 / 3 * (phi**-0.5))**(-1)           # Stokes' shape factor
k2 = 10**(1.8148 * ((-np.log(phi))**0.5743))       # Newton's shape factor

# Evaluate Ganser drag coefficient [-] for a range of Ut
# re and cd are vectors
re = (dp * rhog * ut) / mu
cd = (24 / (re * k1)) * (1 + 0.1118 * ((re * k1 * k2)**0.6567)) \
+ (0.4305 * k2) / (1 + (3305 / (re * k1 * k2)))

# Evaluate sphere drag coefficient [-] for a range of Ut
# this expression is from the Levenspiel book
# cdd is a vector
cdd = (4 * g * dp * (rhos - rhog)) / (3 * (ut**2) * rhog)

# Interpolate value for Ut where Cd-Cdd = 0
ut_interp = np.interp(0, cd - cdd, ut)

return ut_interp

[docs]def ut_haider(dp, mu, phi, rhog, rhos):
"""
Calculate terminal velocity of a particle as discussed in the Haider and
Levenspiel _. Valid for particle sphericities of 0.5 to 1. Particle
diameter should be an equivalent spherical diameter, such as the diameter
of a sphere having same volume as the particle.

To determine the terminal velocity for a range of particle sphericities, Haider
and Levenspiel first define two dimensionless quantities

.. math::

d_{*} = d_p \\left[ \\frac{g\\, \\rho_g (\\rho_s - \\rho_g)}{\\mu^2} \\right]^{1/3} \\
u_* = \\left[ \\frac{18}{d{_*}^2} + \\frac{2.3348 - 1.7439\\, \\phi}{d{_*}^{0.5}} \\right]^{-1}

where :math:0.5 \\leq \\phi \\leq 1 and particle diameter :math:d_p is an
equivalent spherical diameter, the diameter of a sphere having the same volume
as the particle. The relationship between :math:u_* and :math:u_t is given
by

.. math:: u_* = u_t \\left[ \\frac{\\rho{_g}^2}{g\\, \\mu\\, (\\rho_s - \\rho_g)} \\right]^{1/3}

The terminal velocity of the particle can finally be determined by rearranging
the above equation such that

.. math:: u_t = u_* \\left[ \\frac{g\\, \\mu\\, (\\rho_s - \\rho_g)}{\\rho{_g}^2} \\right]^{1/3}

Parameters
----------
dp : float
Diameter of particle [m]
mu : float
Viscosity of gas [kg/(m s)]
phi : float
Sphericity of particle [-]
rhog : float
Density of gas [kg/m^3]
rhos : float
Density of particle [kg/m^3]

Returns
-------
ut : float
Terminal velocity of a particle [m/s]

Example
-------
>>> ut_haider(0.00016, 1.8e-5, 0.67, 1.2, 2600)
0.8857

References
----------
..  A. Haider and O. Levenspiel. Drag coefficient and terminal velocity
of spherical and nonspherical particles. Powder Technology,
58:63–70, 1989.
"""
if phi > 1.0 or phi < 0.5:
raise ValueError('Sphericity must be 0.5 <= phi <= 1.0')

d_star = dp * ((9.81 * rhog * (rhos - rhog)) / (mu**2))**(1 / 3)
u_star = (18 / (d_star**2) + ((2.3348 - 1.7439 * phi) / (d_star**0.5)))**-1
ut = u_star * ((9.81 * (rhos - rhog) * mu) / rhog**2)**(1 / 3)
return ut