def umf_ergun(dp, ep, mu, phi, rhog, rhos):
    """
    Determine minimum fluidization velocity from particle and gas properties.
    This approach is based on the Ergun pressure drop equation for a bed of
    particles. Refer to Equations 18 and 19 in Chapter 3 of Kunii and Levenspiel
    [2]_,

    Parameters
    ----------
    dp : float
        Diameter of bed particle [m]
    ep : float
        Void fraction of the bed [-]
    mu : float
        Viscosity of gas [kg/ms]
    phi : float
        Sphericity of bed particle [-]
    rhog : float
        Density of gas [kg/m³]
    rhos : float
        Density of bed particle [kg/m³]

    Returns
    -------
    umf : float
        Minimum fluidization velocity [m/s]

    Example
    -------
    >>> umf_ergun(0.0005, 0.46, 3.6e-5, 0.86, 0.44, 2500)
    0.1488

    References
    ----------
    .. [2] Daizo Kunii and Octave Levenspiel. Fluidization Engineering.
       Butterworth-Heinemann, 2nd edition, 1991.
    """

    # g is acceleration from gravity [m/s²]
    # K1, K2, a, b are dimensionless constants [-]
    g = 9.81
    K1 = 1.75 / (ep**3 * phi)
    K2 = 150 * (1 - ep) / (ep**3 * phi**2)
    a = K2 / (2 * K1)
    b = 1 / K1

    # Ar is Archimedes number [-], Re is Reynolds number [-], and umf is minimum
    # fluidization velocity [m/s]
    Ar = ((dp**3) * rhog * (rhos - rhog) * g) / (mu**2)
    Re = ((a**2 + b * Ar)**0.5) - a
    umf = (Re * mu) / (rhog * dp)
    return umf