def turbulent_Gnielinski(Re, Pr, fd):
    """Calculates internal convection Nusselt number for turbulent flows
    in pipe according to [2]_ as in [1]_. This is the most recent general
    equation, and is strongly recommended.

    .. math::
        Nu = \\frac{(f/8)(Re-1000)Pr}{1+12.7(f/8)^{1/2}(Pr^{2/3}-1)}

    Parameters
    ----------
    Re : float
        Reynolds number, [-]
    Pr : float
        Prandtl number, [-]
    fd : float
        Darcy friction factor [-]

    Returns
    -------
    Nu : float
        Nusselt number, [-]

    Notes
    -----
    Range according to [1]_ is 0.5 < Pr ≤ 2000  and 2300 ≤ Re ≤ 5*10^6.

    Examples
    --------
    >>> turbulent_Gnielinski(Re=1E5, Pr=1.2, fd=0.0185)
    254.62682749359632

    References
    ----------
    .. [1] Rohsenow, Warren and James Hartnett and Young Cho. Handbook of Heat
       Transfer, 3E. New York: McGraw-Hill, 1998.
    .. [2] Gnielinski, V. (1976). New Equation for Heat and Mass Transfer in
       Turbulent Pipe and Channel Flow, International Chemical Engineering,
       Vol. 16, pp. 359–368.
    """
    return fd / 8.0 * (Re - 1000.0) * Pr / (1.0 + 12.7 * (fd / 8.0) ** 0.5 *
        (Pr ** (2 / 3.0) - 1.0))
