def HEDH_Taborek(P, Pc, Te=None, q=None):
    """Calculates heat transfer coefficient for a evaporator operating
    in the nucleate boiling regime according to Taborek (1986)
    as described in [1]_ and as presented in [2]_. Modification of [3]_.

    Either heat flux or excess temperature is required.

    With `Te` specified:
    
    .. math::
        h = \\left(0.00417P_c^{0.69} \\Delta Te^{0.7}\\left[2.1P_r^{0.27} +
        \\left(9 + (1-Pr^2)^{-1}\\right)P_r^2 \\right]\\right)^{1/0.3}

    With `q` specified:
    
    .. math::
        h = 0.00417P_c^{0.69} q^{0.7}\\left[2.1P_r^{0.27} + \\left(9 + (1-Pr^2
        )^{-1}\\right)P_r^2\\right]

    Parameters
    ----------
    P : float
        Saturation pressure of fluid, [Pa]
    Pc : float
        Critical pressure of fluid, [Pa]
    Te : float, optional
        Excess wall temperature, [K]
    q : float, optional
        Heat flux, [W/m^2]

    Returns
    -------
    h : float
        Heat transfer coefficient [W/m^2/K]

    Notes
    -----
    Example is from [3]_ and matches to within the error of the algebraic
    manipulation rounding.

    Examples
    --------
    >>> HEDH_Taborek(Te=16.2, P=310.3E3, Pc=2550E3)
    1397.272486525486

    References
    ----------
    .. [1] Schlünder, Ernst U, and International Center for Heat and Mass
       Transfer. Heat Exchanger Design Handbook. Washington:
       Hemisphere Pub. Corp., 1987.
    .. [2] Mostinsky I. L.: "Application of the rule of corresponding states
       for the calculation of heat transfer and critical heat flux,"
       Teploenergetika 4:66, 1963 English Abstr. Br Chem Eng 8(8):586, 1963
    .. [3] Serth, R. W., Process Heat Transfer: Principles,
       Applications and Rules of Thumb. 2E. Amsterdam: Academic Press, 2014.
    """
    Pr = P / Pc
    if Te:
        return (0.00417 * (Pc / 1000.0) ** 0.69 * Te ** 0.7 * (2.1 * Pr ** 
            0.27 + (9 + 1.0 / (1 - Pr ** 2)) * Pr ** 2)) ** (1 / 0.3)
    elif q:
        return 0.00417 * (Pc / 1000.0) ** 0.69 * q ** 0.7 * (2.1 * Pr ** 
            0.27 + (9 + 1.0 / (1 - Pr ** 2)) * Pr ** 2)
    else:
        raise Exception('Either q or Te is needed for this correlation')
