8000 add Mount classes by kandersolar · Pull Request #1176 · pvlib/pvlib-python · GitHub
[go: up one dir, main page]

Skip to content

add Mount classes #1176

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

Merged
merged 54 commits into from
Jul 27, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
cb3c207
add Mount classes, incorporate into Array and PVSystem
kandersolar Feb 23, 2021
8a6d0e6
update pvsystem tests
kandersolar Feb 23, 2021
6d4240e
delete mounts module
kandersolar Feb 23, 2021
fc4064b
fix modelchain tests
kandersolar Feb 24, 2021
e8f1404
some modifications to SingleAxisTracker
kandersolar Feb 24, 2021
02a2b27
changes from review
kandersolar Feb 27, 2021
0be45ae
stickler
kandersolar Feb 27, 2021
9406ccd
Merge branch 'master' into mount_classes
kandersolar Mar 2, 2021
e1bdc67
use dataclasses for mounts
kandersolar Mar 7, 2021
61650e9
update tests
kandersolar Mar 7, 2021
fc47003
update docs
kandersolar Mar 7, 2021
887fd3a
whatsnew
kandersolar Mar 7, 2021
ecc4737
test mount classes
kandersolar Mar 7, 2021
cbb41e1
stickler
kandersolar Mar 7, 2021
9e663d2
more tests
kandersolar Mar 7, 2021
105edb7
another test
kandersolar Mar 7, 2021
6d32c41
fix typo
kandersolar Mar 7, 2021
4a6347e
clean up AbstractMount
kandersolar Mar 13, 2021
1e063ba
remove unnecessary use of dataclasses.field
kandersolar Mar 13, 2021
3dcf106
calculate -> get
kandersolar Mar 13, 2021
d4045a3
Merge remote-tracking branch 'upstream/master' into mount_classes
kandersolar Mar 21, 2021
b0b551f
Update pvlib/pvsystem.py
kandersolar Mar 21, 2021
515a359
stickler
kandersolar Mar 21, 2021
a874b11
test fixes
kandersolar Mar 21, 2021
17195ae
add optional surface_tilt parameter to PVSystem.fuentes_celltemp
kandersolar Mar 21, 2021
93716bb
move racking_model and module_height to the Mounts
kandersolar Mar 21, 2021
efe6b3b
fix some tests
kandersolar Mar 21, 2021
74a6be4
remove unnecessary fixture
kandersolar Mar 28, 2021
9da9eb4
Revert "remove unnecessary fixture"
kandersolar Mar 30, 2021
2320ed7
Merge remote-tracking branch 'upstream/master' into mount_classes
kandersolar May 14, 2021
6370143
update merged test
kandersolar May 14, 2021
6181e96
fix fuentes issue, sort of
kandersolar May 14, 2021
47b6884
pep8
kandersolar May 14, 2021
dbc1193
pep8
kandersolar May 14, 2021
e0eeef4
remove PVSystem.fuentes_celltemp surface_tilt parameter
kandersolar May 14, 2021
cf3fe20
placeholder fuentes surface_tilt logic
kandersolar May 14, 2021
7c18126
Merge branch 'master' into mount_classes
kandersolar May 21, 2021
86292c5
test updates
kandersolar May 21, 2021
cc5f45a
Merge remote-tracking branch 'upstream/master' into mount_classes
kandersolar Jun 17, 2021
739359e
remove unused imports
kandersolar Jun 17, 2021
59547f5
remove fuentes override complexity
kandersolar Jun 23, 2021
bed27c9
stickler
kandersolar Jun 23, 2021
1103f99
update RST pages
kandersolar Jun 23, 2021
e6504cd
Merge remote-tracking branch 'upstream/master' into mount_classes
kandersolar Jun 23, 2021
73aba9a
revert unnecessary docs change
kandersolar Jun 23, 2021
f3ff722
add link to pvsystem and modelchain pages in api listing
kandersolar Jun 29, 2021
9c0c3ff
other changes from review
kandersolar Jun 29, 2021
35da280
get module_height from mount instead of temperature_model_parameters
kandersolar Jun 29, 2021
1a43ea8
coverage for fuentes module_height parameter
kandersolar Jun 29, 2021
c1738e9
deprecate SingleAxisTracker
kandersolar Jul 21, 2021
781b133
suppress SAT deprecation warnings in tests
kandersolar Jul 21, 2021
22341ec
Apply suggestions from code review
kandersolar Jul 22, 2021
6df8408
Tracking -> Tracker
kandersolar Jul 22, 2021
506edbc
Merge branch 'mount_classes' of https://github.com/kanderso-nrel/pvli…
kandersolar Jul 22, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
some modifications to SingleAxisTracker
  • Loading branch information
kandersolar committed Feb 24, 2021
commit e8f1404734b57af35e6d12349a61ea41e7f0a629
38 changes: 7 additions & 31 deletions pvlib/tests/test_tracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -301,35 +301,6 @@ def test_SingleAxisTracker_creation():
assert system.inverter == 'blarg'


def test_SingleAxisTracker_one_array_only():
system = tracking.SingleAxisTracker(
arrays=[pvsystem.Array(
module='foo',
surface_tilt=None,
surface_azimuth=None
)]
)
assert system.module == 'foo'
with pytest.raises(ValueError,
match="SingleAxisTracker does not support "
r"multiple arrays\."):
tracking.SingleAxisTracker(
arrays=[pvsystem.Array(module='foo'),
pvsystem.Array(module='bar')]
)
with pytest.raises(ValueError,
match="Array must not have surface_tilt "):
tracking.SingleAxisTracker(arrays=[pvsystem.Array(module='foo')])
with pytest.raises(ValueError,
match="Array must not have surface_tilt "):
tracking.SingleAxisTracker(
arrays=[pvsystem.Array(surface_azimuth=None)])
with pytest.raises(ValueError,
match="Array must not have surface_tilt "):
tracking.SingleAxisTracker(
arrays=[pvsystem.Array(surface_tilt=None)])


def test_SingleAxisTracker_tracking():
system = tracking.SingleAxisTracker(max_angle=90, axis_tilt=30,
axis_azimuth=180, gcr=2.0/7.0,
Expand Down Expand Up @@ -444,8 +415,13 @@ def test_SingleAxisTracker___repr__():
name: None
Array:
name: None
surface_tilt: None
surface_azimuth: None
mount: SingleAxisTrackerMount:
axis_tilt: 0
axis_azimuth: 0
max_angle: 45
backtrack: True
gcr: 0.25
cross_axis_tilt: 0.0
module: blah
albedo: 0.25
racking_model: None
Expand Down
45 changes: 27 additions & 18 deletions pvlib/tracking.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
import pandas as pd

from pvlib.tools import cosd, sind, tand
from pvlib.pvsystem import PVSystem, _unwrap_single_value
from pvlib.pvsystem import (
PVSystem, Array, SingleAxisTrackerMount, _unwrap_single_value
)
from pvlib import irradiance, atmosphere


Expand Down Expand Up @@ -76,31 +78,38 @@ class SingleAxisTracker(PVSystem):
def __init__(self, axis_tilt=0, axis_azimuth=0, max_angle=90,
backtrack=True, gcr=2.0/7.0, cross_axis_tilt=0.0, **kwargs):

arrays = kwargs.get('arrays', [])
if len(arrays) > 1:
raise ValueError("SingleAxisTracker does not support "
"multiple arrays.")
elif len(arrays) == 1:
surface_tilt = arrays[0].surface_tilt
surface_azimuth = arrays[0].surface_azimuth
if surface_tilt is not None or surface_azimuth is not None:
raise ValueError(
"Array must not have surface_tilt or "
"surface_azimuth assigned. You must pass an "
"Array with these fields set to None."
)

mount = SingleAxisTrackerMount(axis_tilt, axis_azimuth, max_angle,
backtrack, gcr, cross_axis_tilt)

array_defaults = {
'albedo': None, 'surface_type': None, 'module': None,
'module_type': None, 'module_parameters': None,
'temperature_model_parameters': None,
'modules_per_string': 1,
'racking_model': None,
}
array_kwargs = {
key: kwargs.get(key, array_defaults[key]) for key in array_defaults
}
# strings/strings_per_inverter is a special case
array_kwargs['strings'] = kwargs.get('strings_per_inverter', 1)

array = Array(mount=mount, **array_kwargs)
pass_through_kwargs = { # other args to pass to PVSystem()
k: v for k, v in kwargs.items() if k not in array_defaults
}
# leave these in case someone is using them
self.axis_tilt = axis_tilt
self.axis_azimuth = axis_azimuth
self.max_angle = max_angle
self.backtrack = backtrack
self.gcr = gcr
self.cross_axis_tilt = cross_axis_tilt

kwargs['surface_tilt'] = None
kwargs['surface_azimuth'] = None
pass_through_kwargs['surface_tilt'] = None
pass_through_kwargs['surface_azimuth'] = None

super().__init__(**kwargs)
super().__init__(arrays=[array], **pass_through_kwargs)

def __repr__(self):
attrs = ['axis_tilt', 'axis_azimuth', 'max_angle', 'backtrack', 'gcr',
Expand Down
0