-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Allow asymmetrical rotation limits in pvlib.tracking.singleaxis
#1809
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
251deb7
a3f898a
476bdba
ebb4240
0a9a760
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||
---|---|---|---|---|---|---|
|
@@ -44,12 +44,20 @@ def singleaxis(apparent_zenith, apparent_azimuth, | |||||
A value denoting the compass direction along which the axis of | ||||||
rotation lies. Measured in decimal degrees east of north. | ||||||
|
||||||
max_angle : float, default 90 | ||||||
max_angle : float or tuple, default 90 | ||||||
A value denoting the maximum rotation angle, in decimal degrees, | ||||||
of the one-axis tracker from its horizontal position (horizontal | ||||||
if axis_tilt = 0). A max_angle of 90 degrees allows the tracker | ||||||
to rotate to a vertical position to point the panel towards a | ||||||
horizon. max_angle of 180 degrees allows for full rotation. | ||||||
if axis_tilt = 0). If a float is provided, it represents the maximum | ||||||
rotation angle, and the minimum rotation angle is assumed to be the | ||||||
opposite of the maximum angle. If a tuple of (min_angle, max_angle) | ||||||
is provided, it represents both the minimum and maximum rotation angles. | ||||||
|
||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I feel like we need to explain the orientation that distinguishes A rotation to There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thank you for this input! As you suggested, I have added this paragraph. |
||||||
A rotation to 'max_angle' is a counter-clockwise rotation about the y-axis | ||||||
of the tracker coordinate system. For example, for a tracker with 'axis_azimuth' | ||||||
oriented to the south, a rotation to 'max_angle' is towards the west, and a | ||||||
rotation toward 'min_angle' is in the opposite direction, toward the east. | ||||||
Hence a max_angle of 180 degrees (equivalent to max_angle = (-180, 180)) allows | ||||||
the tracker to achieve its full rotation capability. | ||||||
|
||||||
backtrack : bool, default True | ||||||
Controls whether the tracker has the capability to "backtrack" | ||||||
|
@@ -190,7 +198,17 @@ def singleaxis(apparent_zenith, apparent_azimuth, | |||||
|
||||||
# NOTE: max_angle defined relative to zero-point rotation, not the | ||||||
# system-plane normal | ||||||
tracker_theta = np.clip(tracker_theta, -max_angle, max_angle) | ||||||
|
||||||
|
||||||
# Determine minimum and maximum rotation angles for the tracker based on max_angle. | ||||||
# If max_angle is a single value, assume min_angle is the negative of max_angle. | ||||||
if np.array(max_angle).size == 1: | ||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Maybe a bit easier to read while achieving the same thing? |
||||||
min_angle = -max_angle | ||||||
else: | ||||||
min_angle, max_angle = max_angle | ||||||
|
||||||
# Clip tracker_theta between the minimum and maximum angles. | ||||||
tracker_theta = np.clip(tracker_theta, min_angle, max_angle) | ||||||
|
||||||
# Calculate auxiliary angles | ||||||
surface = calc_surface_orientation(tracker_theta, axis_tilt, axis_azimuth) | ||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.