Skip to content

Commit 07e3b6f

Browse files
authored
Merge branch 'main' into perez-perez-driesse-components-dict
2 parents 786cab9 + b4cc5f3 commit 07e3b6f

11 files changed

Lines changed: 43 additions & 69 deletions

File tree

.github/CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
Contributing
22
============
33

4-
We welcome your contributions! Please see the [contributing](http://pvlib-python.readthedocs.io/en/latest/contributing.html) page for information about how to contribute.
4+
We welcome your contributions! Please see the [contributing](https://pvlib-python.readthedocs.io/en/stable/contributing/index.html) page for information about how to contribute.

docs/examples/system-models/oedi_9068.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"""
88
# %%
99
# This example model uses satellite-based solar resource data from the
10-
# NSRDB PSM3. This approach is useful for pre-construction energy modeling
10+
# NSRDB PSM4. This approach is useful for pre-construction energy modeling
1111
# and in retrospective analyses where the system’s own irradiance
1212
# measurements are not present or unreliable.
1313
#
@@ -135,17 +135,18 @@
135135
#
136136
# The system does have measured plane-of-array irradiance data, but the
137137
# measurements suffer from row-to-row shading and tracker stalls. In this
138-
# example, we will use weather data taken from the NSRDB PSM3 for the year
138+
# example, we will use weather data taken from the NSRDB PSM4 for the year
139139
# 2019.
140140

141141
api_key = 'DEMO_KEY'
142142
email = 'your_email@domain.com'
143143

144144
keys = ['ghi', 'dni', 'dhi', 'temp_air', 'wind_speed',
145145
'albedo', 'precipitable_water']
146-
psm3, psm3_metadata = pvlib.iotools.get_nsrdb_psm4_conus(latitude, longitude,
146+
psm4, psm4_metadata = pvlib.iotools.get_nsrdb_psm4_conus(latitude, longitude,
147147
api_key, email,
148-
year=2019, interval=5,
148+
year=2019,
149+
time_step=5,
149150
parameters=keys,
150151
map_variables=True,
151152
leap_day=True)
@@ -167,20 +168,20 @@
167168
# module fraction and returns the average irradiance over the total module
168169
# surface.
169170

170-
solar_position = location.get_solarposition(psm3.index)
171+
solar_position = location.get_solarposition(psm4.index)
171172
tracker_angles = mount.get_orientation(
172173
solar_position['apparent_zenith'],
173174
solar_position['azimuth']
174175
)
175-
dni_extra = pvlib.irradiance.get_extra_radiation(psm3.index)
176+
dni_extra = pvlib.irradiance.get_extra_radiation(psm4.index)
176177

177178
# note: this system is monofacial, so only calculate irradiance for the
178179
# front side:
179180
averaged_irradiance = pvlib.bifacial.infinite_sheds.get_irradiance_poa(
180181
tracker_angles['surface_tilt'], tracker_angles['surface_azimuth'],
181182
solar_position['apparent_zenith'], solar_position['azimuth'],
182183
gcr, axis_height, pitch,
183-
psm3['ghi'], psm3['dhi'], psm3['dni'], psm3['albedo'],
184+
psm4['ghi'], psm4['dhi'], psm4['dni'], psm4['albedo'],
184185
model='haydavies', dni_extra=dni_extra,
185186
)
186187

@@ -191,14 +192,14 @@
191192

192193
cell_temperature_steady_state = pvlib.temperature.faiman(
193194
poa_global=averaged_irradiance['poa_global'],
194-
temp_air=psm3['temp_air'],
195-
wind_speed=psm3['wind_speed'],
195+
temp_air=psm4['temp_air'],
196+
wind_speed=psm4['wind_speed'],
196197
**temperature_model_parameters,
197198
)
198199

199200
cell_temperature = pvlib.temperature.prilliman(
200201
cell_temperature_steady_state,
201-
psm3['wind_speed'],
202+
psm4['wind_speed'],
202203
unit_mass=module_unit_mass
203204
)
204205

@@ -215,7 +216,7 @@
215216
'poa_direct': averaged_irradiance['poa_direct'],
216217
'poa_diffuse': averaged_irradiance['poa_diffuse'],
217218
'cell_temperature': cell_temperature,
218-
'precipitable_water': psm3['precipitable_water'], # for the spectral model
219+
'precipitable_water': psm4['precipitable_water'], # for the spectral model
219220
})
220221
model.run_model_from_poa(weather_inputs)
221222

docs/sphinx/source/whatsnew/v0.15.3.rst

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,14 @@ Bug fixes
1818

1919
Enhancements
2020
~~~~~~~~~~~~
21+
* Ensure all timezones are available in all OSs. (:issue:`2795`, :pull:`2809`)
2122

2223

2324
Documentation
2425
~~~~~~~~~~~~~
26+
* Fix broken link in GitHub Contributing tab. (:issue:`2628`, :pull:`2806`)
27+
* Fixed broken ``interval`` keyword argument in the ``oedi_9068`` gallery
28+
example; the correct parameter name is ``time_step``. (:issue:`2791`)
2529

2630

2731
Testing
@@ -38,8 +42,13 @@ Requirements
3842

3943
Maintenance
4044
~~~~~~~~~~~
45+
* Removed unused internal function ``clearsky._is_leap_year`` (:issue:`2768`, :pull:`2813`)
46+
* Fix documentation builds on runner images lacking link-type timezones. (:issue:`2795`, :pull:`2809`)
4147

4248

4349
Contributors
4450
~~~~~~~~~~~~
45-
51+
* Eesh Saxena (:ghuser:`eeshsaxena`)
52+
* Karl Hill (:ghuser:`karlhillx`)
53+
* Yonry Zhu (:ghuser:`yonryzhu`)
54+
* Darshan Gowda (:ghuser:`dgowdaan-cmyk`)

docs/sphinx/source/whatsnew/v0.16.0.rst

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@
22

33

44
v0.16.0
5-
-------------------------------------
6-
75
Breaking Changes
86
~~~~~~~~~~~~~~~~
97
* Change output type of :py:func:`pvlib.irradiance.perez` and
108
:py:func:`pvlib.irradiance.perez_driesse` from ``OrderedDict`` to ``dict`` when
119
``return_components=True`` to be consistent with other models.
1210
(:pull:`2789`)
11+
* Remove empty ``poa_horizon`` key from the ``diffuse_components`` output of
12+
:py:func:`pvlib.irradiance.haydavies`.
13+
(:pull:`2788`)
14+
1315

1416
Deprecations
1517
~~~~~~~~~~~~
@@ -45,4 +47,4 @@ Maintenance
4547

4648
Contributors
4749
~~~~~~~~~~~~
48-
* Carolina Crespo (:ghuser:`cbcrespo`)
50+
* Carolina Crespo (:ghuser:`cbcrespo`)

pvlib/bifacial/infinite_sheds.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -45,19 +45,6 @@ def _poa_sky_diffuse_pv(dhi, gcr, surface_tilt):
4545
Integrated view factors from the shaded and unshaded parts of
4646
the row slant height to the sky.
4747
48-
Parameters
49-
----------
50-
f_x : numeric
51-
Fraction of row slant height from the bottom that is shaded from
52-
direct irradiance. [unitless]
53-
surface_tilt : numeric
54-
Surface tilt angle in degrees from horizontal, e.g., surface facing up
55-
= 0, surface facing horizon = 90. [degree]
56-
gcr : float
57-
Ratio of row slant length to row spacing (pitch). [unitless]
58-
npoints : int, default 100
59-
Number of points for integration. [unitless]
60-
6148
A detailed calculation would be
6249
6350
dhi * (f_x * vf_shade_sky_integ + (1 - f_x) * vf_noshade_sky_integ)
@@ -73,9 +60,6 @@ def _poa_sky_diffuse_pv(dhi, gcr, surface_tilt):
7360
7461
Parameters
7562
----------
76-
f_x : numeric
77-
Fraction of row slant height from the bottom that is shaded from
78-
direct irradiance. [unitless]
7963
dhi : numeric
8064
Diffuse horizontal irradiance (DHI). [W/m^2]
8165
gcr : float

pvlib/clearsky.py

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -220,22 +220,6 @@ def lookup_linke_turbidity(time, latitude, longitude, filepath=None,
220220
return linke_turbidity
221221

222222

223-
def _is_leap_year(year):
224-
"""Determine if a year is leap year.
225-
226-
Parameters
227-
----------
228-
year : numeric
229-
230-
Returns
231-
-------
232-
isleap : array of bools
233-
"""
234-
isleap = ((np.mod(year, 4) == 0) &
235-
((np.mod(year, 100) != 0) | (np.mod(year, 400) == 0)))
236-
return isleap
237-
238-
239223
def _interpolate_turbidity(lts, time):
240224
"""
241225
Interpolated monthly Linke turbidity onto daily values.

pvlib/irradiance.py

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -787,7 +787,7 @@ def haydavies(surface_tilt, surface_azimuth, dhi, dni, dni_extra,
787787
788788
Returns
789789
--------
790-
numeric, OrderedDict, or DataFrame
790+
numeric, dict, or DataFrame
791791
Return type controlled by ``return_components`` argument.
792792
If `False`, ``sky_diffuse`` is returned.
793793
If `True`, ``diffuse_components`` is returned.
@@ -796,13 +796,11 @@ def haydavies(surface_tilt, surface_azimuth, dhi, dni, dni_extra,
796796
The sky diffuse component of the solar radiation on a tilted
797797
surface. [Wm⁻²]
798798
799-
diffuse_components : OrderedDict (array input) or DataFrame (Series input)
799+
diffuse_components : dict (array input) or DataFrame (Series input)
800800
Keys/columns are:
801801
* poa_sky_diffuse: Total sky diffuse
802802
* poa_isotropic
803803
* poa_circumsolar
804-
* poa_horizon (always zero, not accounted for by the
805-
Hay-Davies model)
806804
807805
Notes
808806
------
@@ -860,14 +858,11 @@ def haydavies(surface_tilt, surface_azimuth, dhi, dni, dni_extra,
860858
sky_diffuse = poa_isotropic + poa_circumsolar
861859

862860
if return_components:
863-
diffuse_components = OrderedDict()
864-
diffuse_components['poa_sky_diffuse'] = sky_diffuse
865-
866-
# Calculate the individual components
867-
diffuse_components['poa_isotropic'] = poa_isotropic
868-
diffuse_components['poa_circumsolar'] = poa_circumsolar
869-
diffuse_components['poa_horizon'] = np.where(
870-
np.isnan(diffuse_components['poa_isotropic']), np.nan, 0.)
861+
diffuse_components = {
862+
'poa_sky_diffuse': sky_diffuse,
863+
'poa_isotropic': poa_isotropic,
864+
'poa_circumsolar': poa_circumsolar
865+
}
871866

872867
if isinstance(sky_diffuse, pd.Series):
873868
diffuse_components = pd.DataFrame(diffuse_components)
@@ -3120,8 +3115,8 @@ def _liujordan(zenith, transmittance, airmass, dni_extra=1367.0):
31203115
transmittance: float
31213116
Atmospheric transmittance between 0 and 1.
31223117
3123-
pressure: float, default 101325.0
3124-
Air pressure
3118+
airmass: numeric
3119+
Optical air mass. [unitless]
31253120
31263121
dni_extra: float, default 1367.0
31273122
Direct irradiance incident at the top of the atmosphere.

pvlib/pvsystem.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,7 @@ def get_iam(self, aoi, iam_model='physical'):
395395
aoi : numeric or tuple of numeric
396396
The angle of incidence in degrees.
397397
398-
aoi_model : string, default 'physical'
398+
iam_model : string, default 'physical'
399399
The IAM model to be used. Valid strings are 'physical', 'ashrae',
400400
'martin_ruiz', 'sapm' and 'interp'.
401401
Returns
@@ -1188,7 +1188,7 @@ def get_iam(self, aoi, iam_model='physical'):
11881188
aoi : numeric
11891189
The angle of incidence in degrees.
11901190
1191-
aoi_model : string, default 'physical'
1191+
iam_model : string, default 'physical'
11921192
The IAM model to be used. Valid strings are 'physical', 'ashrae',
11931193
'martin_ruiz', 'sapm' and 'interp'.
11941194

pvlib/solarposition.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ def sun_rise_set_transit_ephem(times, latitude, longitude,
516516
517517
Parameters
518518
----------
519-
time : pandas.DatetimeIndex
519+
times : pandas.DatetimeIndex
520520
Must be localized
521521
latitude : float
522522
Latitude in degrees, positive north of equator, negative to south

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ dependencies = [
1717
'requests',
1818
'scipy >= 1.7.2',
1919
'h5py',
20+
'tzdata', # ensure all timezones are available in all installs for consistency GH#2795
2021
]
2122
license = "BSD-3-Clause"
2223
classifiers = [

0 commit comments

Comments
 (0)