def fao56_penman_monteith(net_radiation, temperature_mean, ws, latent_ht, sat_vp, avp,
                          delta_sat_vp, psy, sol_rad, shf=0.0, time_period="15min"):
    """
    Estimate reference evapotranspiration (ETo) from a hypothetical
    short grass reference surface using the FAO-56 Penman-Monteith equation.

    Based on equation 6 in Allen et al (1998).

    :param net_radiation: Net radiation at crop surface [MJ m-2 day-1]. If
        necessary this can be estimated using ``net_rad()``.
    :param temperature_mean: Air temperature at 2 m height [deg Celsius].
    :param ws: Wind speed at 2 m height [m s-1]. If not measured at 2m,
        convert using ``wind_speed_at_2m()``.
    :param latent_ht: Letent heat Can be calculated using ``latent_heat(temperature_mean)``.
    :param sat_vp: Saturation vapour pressure [kPa]. Can be estimated using
        ``svp_from_t()''.
    :param avp: Actual vapour pressure [kPa]. Can be estimated using a range
        of functions with names beginning with 'avp_from'.
    :param delta_sat_vp: Slope of saturation vapour pressure curve [kPa degC-1].
        Can be estimated using ``delta_svp()``.
    :param psy: Psychrometric constant [kPa deg C]. Can be estimated using
        ``psy_const_of_psychrometer()`` or ``psy_const()``.
    :param sol_rad: Solar Radiation to calculate the day and night period
    :param shf: Soil heat flux (G) [MJ m-2 day-1] (default is 0.0, which is
        reasonable for a daily or 10-day time steps). For monthly time steps
        *shf* can be estimated using ``monthly_soil_heat_flux()`` or
        ``monthly_soil_heat_flux2()``.
    :param time_period The period of time that will be used to calculate the result
        ( Supported values: daily, hourly, half_hourly and 15min )
    :return: Reference evapotranspiration (ETo) from a hypothetical
        grass reference surface [mm day-1].
    :rtype: float
    """

    # time period conversion
    if time_period == "daily":
        time_period_conversion = 900
    elif time_period == "hourly":
        time_period_conversion = 37.5
    elif time_period == "half_hourly":
        time_period_conversion = 18.75
    else:
        time_period_conversion = 9.375  # 15min period

    cd = 0.24 if sol_rad > 1 else 0.96

    a1 = 1 / latent_ht
    a2 = (net_radiation - shf) * delta_sat_vp
    a3 = (time_period_conversion / (temperature_mean + 273)) * psy * ws * (sat_vp - avp)
    a4 = delta_sat_vp + (psy * (1 + cd * ws))

    return (a1 * a2 + a3) / a4