HAYDAVIES

This function computes the diffuse irradiance on a tilted surface using the Hay and Davies (1980) transposition model.

The model estimates the sky diffuse irradiance using surface orientation, sun angles, and irradiance components. Note that ground-reflected irradiance is not included in this output.

Excel Usage

=HAYDAVIES(surface_tilt, surface_azimuth, dhi, dni, dni_extra, solar_zenith, solar_azimuth)
  • surface_tilt (float, required): Panel tilt from the horizontal (degrees).
  • surface_azimuth (float, required): Panel azimuth (degrees).
  • dhi (float, required): Diffuse horizontal irradiance (W/m^2).
  • dni (float, required): Direct normal irradiance (W/m^2).
  • dni_extra (float, required): Extraterrestrial normal irradiance (W/m^2).
  • solar_zenith (float, required): Solar apparent zenith angle (degrees).
  • solar_azimuth (float, required): Solar azimuth angle (degrees).

Returns (float): The sky diffuse component (W/m^2), or an error string.

Example 1: Calculate sky diffuse for basic inputs

Inputs:

surface_tilt surface_azimuth dhi dni dni_extra solar_zenith solar_azimuth
30 180 100 800 1367 40 180

Excel formula:

=HAYDAVIES(30, 180, 100, 800, 1367, 40, 180)

Expected output:

113.934

Example 2: Hay-Davies sky diffuse for east-facing array

Inputs:

surface_tilt surface_azimuth dhi dni dni_extra solar_zenith solar_azimuth
20 90 120 650 1321 50 110

Excel formula:

=HAYDAVIES(20, 90, 120, 650, 1321, 50, 110)

Expected output:

137.217

Example 3: Hay-Davies sky diffuse for steep winter tilt

Inputs:

surface_tilt surface_azimuth dhi dni dni_extra solar_zenith solar_azimuth
60 180 80 500 1412 65 170

Excel formula:

=HAYDAVIES(60, 180, 80, 500, 1412, 65, 170)

Expected output:

104.73

Example 4: Hay-Davies sky diffuse for west-facing afternoon case

Inputs:

surface_tilt surface_azimuth dhi dni dni_extra solar_zenith solar_azimuth
35 270 140 700 1335 45 250

Excel formula:

=HAYDAVIES(35, 270, 140, 700, 1335, 45, 250)

Expected output:

160.269

Python Code

Show Code
from pvlib.irradiance import haydavies as result_func

def haydavies(surface_tilt, surface_azimuth, dhi, dni, dni_extra, solar_zenith, solar_azimuth):
    """
    Determine diffuse irradiance from the sky on a tilted surface using the Hay and Davies model.

    See: https://pvlib-python.readthedocs.io/en/stable/reference/generated/pvlib.irradiance.haydavies.html

    This example function is provided as-is without any representation of accuracy.

    Args:
        surface_tilt (float): Panel tilt from the horizontal (degrees).
        surface_azimuth (float): Panel azimuth (degrees).
        dhi (float): Diffuse horizontal irradiance (W/m^2).
        dni (float): Direct normal irradiance (W/m^2).
        dni_extra (float): Extraterrestrial normal irradiance (W/m^2).
        solar_zenith (float): Solar apparent zenith angle (degrees).
        solar_azimuth (float): Solar azimuth angle (degrees).

    Returns:
        float: The sky diffuse component (W/m^2), or an error string.
    """
    try:
        tilt = float(surface_tilt)
        azim = float(surface_azimuth)
        dh = float(dhi)
        dn = float(dni)
        dn_e = float(dni_extra)
        zen = float(solar_zenith)
        s_azim = float(solar_azimuth)

        res = result_func(
            surface_tilt=tilt,
            surface_azimuth=azim,
            dhi=dh,
            dni=dn,
            dni_extra=dn_e,
            solar_zenith=zen,
            solar_azimuth=s_azim,
            return_components=False
        )

        return float(res)
    except Exception as e:
        return f"Error: {str(e)}"

Online Calculator

Panel tilt from the horizontal (degrees).
Panel azimuth (degrees).
Diffuse horizontal irradiance (W/m^2).
Direct normal irradiance (W/m^2).
Extraterrestrial normal irradiance (W/m^2).
Solar apparent zenith angle (degrees).
Solar azimuth angle (degrees).