pvlib.irradiance.perez_driesse(surface_tilt, surface_azimuth, dhi, dni, dni_extra, solar_zenith, solar_azimuth, airmass=None, return_components=False)[source]#

Determine diffuse irradiance from the sky on a tilted surface using the continuous Perez-Driesse model.

The Perez-Driesse model 1 is a reformulation of the 1990 Perez model 2 that provides continuity of the function and of its first derivatives. This is achieved by replacing the look-up table of coefficients with quadratic splines.

  • surface_tilt (numeric) – Surface tilt angles in decimal degrees. surface_tilt must be >=0 and <=180. The tilt angle is defined as degrees from horizontal (e.g. surface facing up = 0, surface facing horizon = 90)

  • surface_azimuth (numeric) – Surface azimuth angles in decimal degrees. surface_azimuth must be >=0 and <=360. The azimuth convention is defined as degrees east of north (e.g. North = 0, South=180 East = 90, West = 270).

  • dhi (numeric) – Diffuse horizontal irradiance in W/m^2. dhi must be >=0.

  • dni (numeric) – Direct normal irradiance in W/m^2. dni must be >=0.

  • dni_extra (numeric) – Extraterrestrial normal irradiance in W/m^2.

  • solar_zenith (numeric) – apparent (refraction-corrected) zenith angles in decimal degrees. solar_zenith must be >=0 and <=180.

  • solar_azimuth (numeric) – Sun azimuth angles in decimal degrees. solar_azimuth must be >=0 and <=360. The azimuth convention is defined as degrees east of north (e.g. North = 0, East = 90, West = 270).

  • airmass (numeric, optional) – Relative (not pressure-corrected) airmass values. If airmass is a DataFrame it must be of the same size as all other DataFrame inputs. The kastenyoung1989 airmass calculation is used internally and is also recommended when pre-calculating airmass because it was used in the original model development.

  • return_components (bool (optional, default=False)) – Flag used to decide whether to return the calculated diffuse components or not.


  • numeric, OrderedDict, or DataFrame – Return type controlled by return_components argument. If return_components=False, sky_diffuse is returned. If return_components=True, diffuse_components is returned.

  • sky_diffuse (numeric) – The sky diffuse component of the solar radiation on a tilted surface.

  • diffuse_components (OrderedDict (array input) or DataFrame (Series input)) –

    Keys/columns are:
    • sky_diffuse: Total sky diffuse

    • isotropic

    • circumsolar

    • horizon


The Perez-Driesse model can be considered a plug-in replacement for the 1990 Perez model using the 'allsitescomposite1990' coefficient set. Deviations between the two are very small, as demonstrated in 1. Other coefficient sets are not supported because the 1990 set is based on the largest and most diverse set of empirical data.



Driesse, A., Jensen, A., Perez, R., 2024. A Continuous form of the Perez diffuse sky model for forward and reverse transposition. Solar Energy vol. 267. DOI: 10.1016/j.solener.2023.112093


Perez, R., Ineichen, P., Seals, R., Michalsky, J., Stewart, R., 1990. Modeling daylight availability and irradiance components from direct and global irradiance. Solar Energy 44 (5), 271-289.