pvlib.bifacial.ants2d.get_irradiance#

pvlib.bifacial.ants2d.get_irradiance(tracker_rotation, axis_azimuth, solar_zenith, solar_azimuth, gcr, height, pitch, ghi, dhi, dni, albedo, model='perez', dni_extra=None, airmass=None, row_segments=1, ground_segments=10, axis_tilt=0, cross_axis_slope=0, max_rows=None, return_ground_components=False)[source]#

Get front and rear irradiance using the ANTS-2D bifacial irradiance model.

The ANTS-2D model [1] assumes the PV system comprises parallel, evenly spaced rows on flat or uniformly sloped ground. Rows can be on fixed racking or single axis trackers. The model calculates irradiance at a location far from the ends of any rows, in effect, assuming that the rows (sheds) are infinitely long, and parallel to the (potentially sloped) ground surface.

The model accounts for the following effects:

  • restricted view of the sky from module surfaces due to the nearby rows.

  • restricted view of the ground from module surfaces due to nearby rows.

  • restricted view of the sky from the ground due to rows.

  • shading of module surfaces by nearby rows.

  • nonuniform ground albedo.

  • sloped ground surface.

  • cell-level irradiance nonuniformity.

Parameters:
  • tracker_rotation (numeric) –

    Tracker rotation angle as a right-handed rotation around the axis defined by axis_tilt and axis_azimuth. For example, with axis_tilt=0 and axis_azimuth=180, tracker_theta > 0 results in surface_azimuth to the West while tracker_theta < 0 results in surface_azimuth to the East. [degree]

    For fixed-tilt systems, pretend the array is a tracker and input the tilt as a scalar. For example, a 20 degree south-facing array would have tracker_rotation=20 and axis_azimuth=90.

  • axis_azimuth (numeric) – Axis azimuth angle in degrees. North = 0°; East = 90°; South = 180°; West = 270°. For fixed-tilt systems, add or subtract 90 degrees from the panel azimuth so that tracker_rotation is still a right-handed rotation. For south-facing arrays (azimuth=180°), set axis_azimuth=90. For north-facing arrays (azimuth=0°), set axis_azimuth=270.

  • solar_zenith (numeric) – Refraction-corrected solar zenith angle. [degree]

  • solar_azimuth (numeric) – Solar azimuth angle. [degree]

  • gcr (float) – Ground coverage ratio, ratio of row slant length to row spacing. [unitless]

  • height (float) – Height of the center point of the row above the ground; must be in the same units as pitch.

  • pitch (float) – Distance between two rows; must be in the same units as height.

  • ghi (numeric) – Global horizontal irradiance. [Wm⁻²]

  • dhi (numeric) – Diffuse horizontal irradiance. [Wm⁻²]

  • dni (numeric) – Direct normal irradiance. [Wm⁻²]

  • albedo (numeric) – Surface albedo. If a scalar, it is applied to all ground segments and timestamps. Otherwise, must be specified as an array with shape (n_ground_segments, len(tracker_rotation)). [unitless]

  • model (str, default 'perez') – Irradiance model - can be one of ‘isotropic’, ‘haydavies’, ‘perez’, or ‘perez-driesse’.

  • dni_extra (numeric, optional) – Extraterrestrial direct normal irradiance. Required when model='haydavies', model='perez', or model='perez-driesse'. Computed from the datetime index of the inputs if not provided. [Wm⁻²]

  • airmass (numeric, optional) – Relative airmass. Required when model='perez' or model='perez-driesse'. Computed from solar_zenith if needed. [unitless]

  • row_segments (int or list of pairs, default 1) – If row_segments is an int, it defines the number of equal-length segments the row width is divided into. Otherwise, it must be a list of pairs (x0, x1) where x0 and x1 are fractions of the row width and x0 < x1. Irradiance will be computed and returned for each segment.

  • ground_segments (int or list of pairs, default 10) – If ground_segments is an int, it defines the number of equal-length segments the ground surface is divided into. Otherwise, it must be a list of pairs (g0, g1) where g0 and g1 are fractions of the pitch and g0 < g1. The pairs must be non-overlapping and must cover the entire ground surface. albedo can be specified for each segment.

  • axis_tilt (numeric, default 0) – Tilt of the axis of rotation with respect to horizontal. [degree]

  • cross_axis_slope (numeric, default 0) – The angle, relative to horizontal, of the line formed by the intersection between the plane containing the tracker axes and a plane perpendicular to the tracker axes. The cross-axis slope should be specified using a right-handed convention. For example, trackers with axis azimuth of 180 degrees (heading south) will have a negative cross-axis tilt if the tracker axes plane slopes down to the east and positive cross-axis slope if the tracker axes plane slopes down to the west. Use calc_cross_axis_tilt() to calculate cross_axis_slope. [degrees]

  • max_rows (int, optional) – Number of array units (sky wedges, ground segments, etc) to consider. If not specified, units will be considered to within 4 degrees of the horizon. [unitless]

  • return_ground_components (bool, default False) – If True, also return the direct and diffuse irradiance incident on the ground. These values are returned in a second dict.

Returns:

  • output (dict or DataFrame) – output is a DataFrame when inputs are Series and row_segments=1, a dict of scalars when inputs are scalars and row_segments=1, and a dict of np.ndarray otherwise. The following quantities are included:

    • poa_global: sum of front- and back-side incident irradiance. [Wm⁻²]

    • poa_front: total incident irradiance on the front surface. [Wm⁻²]

    • poa_back: total incident irradiance on the back surface. [Wm⁻²]

    • poa_front_direct: direct irradiance incident on the front surface. [Wm⁻²]

    • poa_front_diffuse: total diffuse irradiance incident on the front surface. [Wm⁻²]

    • poa_front_sky_diffuse: sky diffuse irradiance incident on the front surface. [Wm⁻²]

    • poa_front_ground_diffuse: ground-reflected diffuse irradiance incident on the front surface. [Wm⁻²]

    • shaded_fraction_front: fraction of row slant height that is shaded from direct irradiance on the front surface by adjacent rows. [unitless]

    • poa_back_direct: direct irradiance incident on the back surface. [Wm⁻²]

    • poa_back_diffuse: total diffuse irradiance incident on the back surface. [Wm⁻²]

    • poa_back_sky_diffuse: sky diffuse irradiance incident on the back surface. [Wm⁻²]

    • poa_back_ground_diffuse: ground-reflected diffuse irradiance incident on the back surface. [Wm⁻²]

    • shaded_fraction_back: fraction of row slant height that is shaded from direct irradiance on the back surface by adjacent rows. [unitless]

  • ground_irradiance (dict or DataFrame) – Only returned when return_ground_components=True. ground_irradiance is a DataFrame when inputs are Series and n_ground_segments=1, a dict of scalars when inputs are scalars and n_ground_segments=1, and a dict of np.ndarray otherwise. The following quantities are included:

    • ground_direct: direct irradiance incident on the ground surface. [Wm⁻²]

    • ground_diffuse: diffuse irradiance incident on the ground surface. [Wm⁻²]

Notes

  • model='perez-driesse' was not evaluated in [1] and is included in this implementation as an extension.

References