def Graetz_heat(V, D, x, rho=None, Cp=None, k=None, alpha=None):
    """Calculates Graetz number or `Gz` for a specified velocity
    `V`, diameter `D`, axial distance `x`, and specified properties for the
    given fluid.

    .. math::
        Gz = \\frac{VD^2\\cdot C_p \\rho}{x\\cdot k} = \\frac{VD^2}{x \\alpha}

    Inputs either of any of the following sets:

    * V, D, x, density `rho`, heat capacity `Cp`, and thermal conductivity `k`
    * V, D, x, and thermal diffusivity `alpha`

    Parameters
    ----------
    V : float
        Velocity, [m/s]
    D : float
        Diameter [m]
    x : float
        Axial distance [m]
    rho : float, optional
        Density, [kg/m^3]
    Cp : float, optional
        Heat capacity, [J/kg/K]
    k : float, optional
        Thermal conductivity, [W/m/K]
    alpha : float, optional
        Thermal diffusivity, [m^2/s]

    Returns
    -------
    Gz : float
        Graetz number []

    Notes
    -----
    .. math::
        Gz = \\frac{\\text{Time for radial heat diffusion in a fluid by conduction}}
        {\\text{Time taken by fluid to reach distance x}}

    .. math::
        Gz = \\frac{D}{x}RePr

    An error is raised if none of the required input sets are provided.

    Examples
    --------
    >>> Graetz_heat(1.5, 0.25, 5, 800., 2200., 0.6)
    55000.0
    >>> Graetz_heat(1.5, 0.25, 5, alpha=1E-7)
    187500.0

    References
    ----------
    .. [1] Bergman, Theodore L., Adrienne S. Lavine, Frank P. Incropera, and
       David P. DeWitt. Introduction to Heat Transfer. 6E. Hoboken, NJ:
       Wiley, 2011.
    """
    if rho and Cp and k:
        alpha = k / (rho * Cp)
    elif not alpha:
        raise Exception(
            'Either heat capacity and thermal conductivity and        density, or thermal diffusivity is needed'
            )
    return V * D ** 2 / (x * alpha)
