pvlib.iam.schlick_diffuse#

pvlib.iam.schlick_diffuse(surface_tilt)[source]#

Determine the incidence angle modifiers (IAM) for diffuse sky and ground-reflected irradiance on a tilted surface using the Schlick incident angle model.

The Schlick equation (or “Schlick’s approximation”) [1] is an approximation to the Fresnel reflection factor which can be recast as a simple photovoltaic IAM model like so:

\[IAM = 1 - (1 - \cos(aoi))^5\]

Unlike the Fresnel reflection factor itself, Schlick’s approximation can be integrated analytically to derive a closed-form equation for diffuse IAM factors for the portions of the sky and ground visible from a tilted surface if isotropic distributions are assumed. This function implements the integration of the Schlick approximation provided by Xie et al. [2].

Parameters:

surface_tilt (numeric) – Surface tilt angle measured from horizontal (e.g. surface facing up = 0, surface facing horizon = 90). [degrees]

Returns:

  • iam_sky (numeric) – The incident angle modifier for sky diffuse.

  • iam_ground (numeric) – The incident angle modifier for ground-reflected diffuse.

Notes

The analytical integration of the Schlick approximation was derived as part of the FEDIS diffuse IAM model [2]. Compared with the model implemented in this function, the FEDIS model includes an additional term to account for reflection off a pyranometer’s glass dome. Because that reflection should already be accounted for in the instrument’s calibration, the pvlib authors believe it is inappropriate to account for pyranometer reflection again in an IAM model. Thus, this function omits that term and implements only the integrated Schlick approximation.

Note also that the output of this function (which is an exact integration) can be compared with the output of marion_diffuse() which numerically integrates the Schlick approximation:

>>> pvlib.iam.marion_diffuse('schlick', surface_tilt=20)
{'sky': 0.9625000227247358,
 'horizon': 0.7688174948510073,
 'ground': 0.6267861879241405}

>>> pvlib.iam.schlick_diffuse(surface_tilt=20)
(0.9624993421569652, 0.6269387554469255)

References