Skip to content

Commit a14e95e

Browse files
RDaxinikandersolar
andauthored
Add reference to tracking.singleaxis (#2198)
* Update tracking.py Added reference where omega_ideal is used minor edits e.g. adding `` `` around function arguments * Update tracking.py * Update tracking.py degree->degrees * Update pvlib/tracking.py Co-authored-by: Kevin Anderson <[email protected]> * linter, one more `` --------- Co-authored-by: Kevin Anderson <[email protected]>
1 parent 524fa55 commit a14e95e

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

pvlib/tracking.py

+37-35
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,20 @@ def singleaxis(apparent_zenith, apparent_azimuth,
1313
Determine the rotation angle of a single-axis tracker when given particular
1414
solar zenith and azimuth angles.
1515
16-
See [1]_ for details about the equations. Backtracking may be specified,
17-
and if so, a ground coverage ratio is required.
16+
See [1]_ and [2]_ for details about the equations. Backtracking may be
17+
specified, in which case a ground coverage ratio is required.
1818
1919
Rotation angle is determined in a right-handed coordinate system. The
20-
tracker `axis_azimuth` defines the positive y-axis, the positive x-axis is
21-
90 degrees clockwise from the y-axis and parallel to the Earth's surface,
22-
and the positive z-axis is normal to both x & y-axes and oriented skyward.
23-
Rotation angle `tracker_theta` is a right-handed rotation around the y-axis
24-
in the x, y, z coordinate system and indicates tracker position relative to
25-
horizontal. For example, if tracker `axis_azimuth` is 180 (oriented south)
26-
and `axis_tilt` is zero, then a `tracker_theta` of zero is horizontal, a
27-
`tracker_theta` of 30 degrees is a rotation of 30 degrees towards the west,
28-
and a `tracker_theta` of -90 degrees is a rotation to the vertical plane
29-
facing east.
20+
tracker ``axis_azimuth`` defines the positive y-axis, the positive x-axis
21+
is 90 degrees clockwise from the y-axis and parallel to the Earth's
22+
surface, and the positive z-axis is normal to both x and y-axes and
23+
oriented skyward. Rotation angle ``tracker_theta`` is a right-handed
24+
rotation around the y-axis in the x, y, z coordinate system and indicates
25+
tracker position relative to horizontal. For example, if tracker
26+
``axis_azimuth`` is 180 (oriented south) and ``axis_tilt`` is zero, then a
27+
``tracker_theta`` of zero is horizontal, a ``tracker_theta`` of 30 degrees
28+
is a rotation of 30 degrees towards the west, and a ``tracker_theta`` of
29+
-90 degrees is a rotation to the vertical plane facing east.
3030
3131
Parameters
3232
----------
@@ -39,7 +39,7 @@ def singleaxis(apparent_zenith, apparent_azimuth,
3939
axis_tilt : float, default 0
4040
The tilt of the axis of rotation (i.e, the y-axis defined by
4141
``axis_azimuth``) with respect to horizontal.
42-
``axis_tilt`` must be >= 0 and <= 90. [degree]
42+
``axis_tilt`` must be >= 0 and <= 90. [degrees]
4343
4444
axis_azimuth : float, default 0
4545
A value denoting the compass direction along which the axis of
@@ -53,37 +53,37 @@ def singleaxis(apparent_zenith, apparent_azimuth,
5353
opposite of the maximum angle. If a tuple of (min_angle, max_angle) is
5454
provided, it represents both the minimum and maximum rotation angles.
5555
56-
A rotation to 'max_angle' is a counter-clockwise rotation about the
56+
A rotation to ``max_angle`` is a counter-clockwise rotation about the
5757
y-axis of the tracker coordinate system. For example, for a tracker
58-
with 'axis_azimuth' oriented to the south, a rotation to 'max_angle'
59-
is towards the west, and a rotation toward 'min_angle' is in the
60-
opposite direction, toward the east. Hence a max_angle of 180 degrees
61-
(equivalent to max_angle = (-180, 180)) allows the tracker to achieve
62-
its full rotation capability.
58+
with ``axis_azimuth`` oriented to the south, a rotation to
59+
``max_angle`` is towards the west, and a rotation toward ``-max_angle``
60+
is in the opposite direction, toward the east. Hence, a ``max_angle``
61+
of 180 degrees (equivalent to max_angle = (-180, 180)) allows the
62+
tracker to achieve its full rotation capability.
6363
6464
backtrack : bool, default True
6565
Controls whether the tracker has the capability to "backtrack"
6666
to avoid row-to-row shading. False denotes no backtrack
6767
capability. True denotes backtrack capability.
6868
6969
gcr : float, default 2.0/7.0
70-
A value denoting the ground coverage ratio of a tracker system
71-
which utilizes backtracking; i.e. the ratio between the PV array
72-
surface area to total ground area. A tracker system with modules
73-
2 meters wide, centered on the tracking axis, with 6 meters
74-
between the tracking axes has a gcr of 2/6=0.333. If gcr is not
75-
provided, a gcr of 2/7 is default. gcr must be <=1.
70+
A value denoting the ground coverage ratio of a tracker system that
71+
utilizes backtracking; i.e. the ratio between the PV array surface area
72+
to the total ground area. A tracker system with modules 2 meters wide,
73+
centered on the tracking axis, with 6 meters between the tracking axes
74+
has a ``gcr`` of 2/6=0.333. If ``gcr`` is not provided, a ``gcr`` of
75+
2/7 is default. ``gcr`` must be <=1.
7676
7777
cross_axis_tilt : float, default 0.0
7878
The angle, relative to horizontal, of the line formed by the
7979
intersection between the slope containing the tracker axes and a plane
80-
perpendicular to the tracker axes. Cross-axis tilt should be specified
81-
using a right-handed convention. For example, trackers with axis
82-
azimuth of 180 degrees (heading south) will have a negative cross-axis
83-
tilt if the tracker axes plane slopes down to the east and positive
84-
cross-axis tilt if the tracker axes plane slopes down to the west. Use
85-
:func:`~pvlib.tracking.calc_cross_axis_tilt` to calculate
86-
`cross_axis_tilt`. [degrees]
80+
perpendicular to the tracker axes. The cross-axis tilt should be
81+
specified using a right-handed convention. For example, trackers with
82+
axis azimuth of 180 degrees (heading south) will have a negative
83+
cross-axis tilt if the tracker axes plane slopes down to the east and
84+
positive cross-axis tilt if the tracker axes plane slopes down to the
85+
west. Use :func:`~pvlib.tracking.calc_cross_axis_tilt` to calculate
86+
``cross_axis_tilt``. [degrees]
8787
8888
Returns
8989
-------
@@ -107,9 +107,11 @@ def singleaxis(apparent_zenith, apparent_azimuth,
107107
108108
References
109109
----------
110-
.. [1] Kevin Anderson and Mark Mikofski, "Slope-Aware Backtracking for
110+
.. [1] Anderson, K., and Mikofski, M., "Slope-Aware Backtracking for
111111
Single-Axis Trackers", Technical Report NREL/TP-5K00-76626, July 2020.
112112
https://www.nrel.gov/docs/fy20osti/76626.pdf
113+
.. [2] Lorenzo, E., Narvarte, L., and Muñoz, J. (2011). Tracking and
114+
back-tracking 19(6), 747–753. :doi:`10.1002/pip.1085`
113115
"""
114116

115117
# MATLAB to Python conversion by
@@ -127,9 +129,9 @@ def singleaxis(apparent_zenith, apparent_azimuth,
127129
if apparent_azimuth.ndim > 1 or apparent_zenith.ndim > 1:
128130
raise ValueError('Input dimensions must not exceed 1')
129131

130-
# The ideal tracking angle omega_ideal is the rotation to place the sun
132+
# The ideal tracking angle, omega_ideal, is the rotation to place the sun
131133
# position vector (xp, yp, zp) in the (x, z) plane, which is normal to
132-
# the panel and contains the axis of rotation. omega_ideal= 0 indicates
134+
# the panel and contains the axis of rotation. omega_ideal=0 indicates
133135
# that the panel is horizontal. Here, our convention is that a clockwise
134136
# rotation is positive, to view rotation angles in the same frame of
135137
# reference as azimuth. For example, for a system with tracking

0 commit comments

Comments
 (0)