pvlib 0.11.2__py3-none-any.whl → 0.12.1a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- pvlib/__init__.py +1 -0
- pvlib/atmosphere.py +40 -40
- pvlib/bifacial/infinite_sheds.py +4 -3
- pvlib/bifacial/utils.py +2 -1
- pvlib/iotools/__init__.py +6 -0
- pvlib/iotools/psm3.py +1 -1
- pvlib/iotools/psm4.py +819 -0
- pvlib/iotools/pvgis.py +10 -2
- pvlib/iotools/tmy.py +3 -69
- pvlib/irradiance.py +38 -15
- pvlib/ivtools/sdm/__init__.py +20 -0
- pvlib/ivtools/sdm/_fit_desoto_pvsyst_sandia.py +585 -0
- pvlib/ivtools/sdm/cec.py +93 -0
- pvlib/ivtools/sdm/desoto.py +401 -0
- pvlib/ivtools/sdm/pvsyst.py +630 -0
- pvlib/location.py +73 -33
- pvlib/modelchain.py +19 -36
- pvlib/pvsystem.py +114 -65
- pvlib/snow.py +64 -28
- pvlib/spectrum/__init__.py +0 -1
- pvlib/spectrum/irradiance.py +2 -64
- pvlib/spectrum/mismatch.py +3 -3
- pvlib/tools.py +6 -5
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/METADATA +6 -5
- pvlib-0.12.1a1.dist-info/RECORD +80 -0
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/WHEEL +1 -1
- pvlib/data/BIRD_08_16_2012.csv +0 -8761
- pvlib/data/BIRD_08_16_2012_patm.csv +0 -8761
- pvlib/data/Burlington, United States SolarAnywhere Time Series 2021 Lat_44_465 Lon_-73_205 TMY3 format.csv +0 -8762
- pvlib/data/Burlington, United States SolarAnywhere Time Series 20210101 to 20210103 Lat_44_4675 Lon_-73_2075 SA format.csv +0 -578
- pvlib/data/Burlington, United States SolarAnywhere Typical GHI Year Lat_44_465 Lon_-73_205 SA format.csv +0 -74
- pvlib/data/CPS SCH275KTL-DO-US-800-250kW_275kVA_1.OND +0 -146
- pvlib/data/CRNS0101-05-2019-AZ_Tucson_11_W.txt +0 -4
- pvlib/data/CRN_with_problems.txt +0 -3
- pvlib/data/ET-M772BH550GL.PAN +0 -75
- pvlib/data/NLD_Amsterdam062400_IWEC.epw +0 -8768
- pvlib/data/PVsyst_demo.csv +0 -10757
- pvlib/data/PVsyst_demo_model.csv +0 -3588
- pvlib/data/SRML-day-EUPO1801.txt +0 -1441
- pvlib/data/abq19056.dat +0 -6
- pvlib/data/bishop88_numerical_precision.csv +0 -101
- pvlib/data/bsrn-lr0100-pay0616.dat +0 -86901
- pvlib/data/bsrn-pay0616.dat.gz +0 -0
- pvlib/data/cams_mcclear_1min_verbose.csv +0 -60
- pvlib/data/cams_mcclear_monthly.csv +0 -42
- pvlib/data/cams_radiation_1min_verbose.csv +0 -72
- pvlib/data/cams_radiation_monthly.csv +0 -47
- pvlib/data/detect_clearsky_data.csv +0 -35
- pvlib/data/detect_clearsky_threshold_data.csv +0 -126
- pvlib/data/greensboro_kimber_soil_manwash.dat +0 -8761
- pvlib/data/greensboro_kimber_soil_nowash.dat +0 -8761
- pvlib/data/inverter_fit_snl_meas.csv +0 -127
- pvlib/data/inverter_fit_snl_sim.csv +0 -19
- pvlib/data/ivtools_numdiff.csv +0 -52
- pvlib/data/midc_20181014.txt +0 -1441
- pvlib/data/midc_raw_20181018.txt +0 -1441
- pvlib/data/midc_raw_short_header_20191115.txt +0 -1441
- pvlib/data/msn19056.dat +0 -6
- pvlib/data/precise_iv_curves1.json +0 -10251
- pvlib/data/precise_iv_curves2.json +0 -10251
- pvlib/data/precise_iv_curves_parameter_sets1.csv +0 -33
- pvlib/data/precise_iv_curves_parameter_sets2.csv +0 -33
- pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA2_10kWp_CIS_5_2a_2013_2014.json +0 -1
- pvlib/data/pvgis_hourly_Timeseries_45.000_8.000_SA_30deg_0deg_2016_2016.csv +0 -35
- pvlib/data/pvgis_tmy_meta.json +0 -32
- pvlib/data/pvgis_tmy_test.csv +0 -8761
- pvlib/data/pvwatts_8760_rackmount.csv +0 -8779
- pvlib/data/pvwatts_8760_roofmount.csv +0 -8779
- pvlib/data/singleaxis_tracker_wslope.csv +0 -8761
- pvlib/data/spectrl2_example_spectra.csv +0 -123
- pvlib/data/surfrad-slv16001.dat +0 -1442
- pvlib/data/test_psm3_2017.csv +0 -17521
- pvlib/data/test_psm3_2019_5min.csv +0 -289
- pvlib/data/test_psm3_tmy-2017.csv +0 -8761
- pvlib/data/test_read_psm3.csv +0 -17523
- pvlib/data/test_read_pvgis_horizon.csv +0 -49
- pvlib/data/tmy_45.000_8.000_2005_2023.csv +0 -8789
- pvlib/data/tmy_45.000_8.000_2005_2023.epw +0 -8768
- pvlib/data/tmy_45.000_8.000_2005_2023.json +0 -1
- pvlib/data/tmy_45.000_8.000_2005_2023.txt +0 -8761
- pvlib/data/tmy_45.000_8.000_userhorizon.json +0 -1
- pvlib/ivtools/sdm.py +0 -1379
- pvlib/spa_c_files/README.md +0 -81
- pvlib/spa_c_files/cspa_py.pxd +0 -43
- pvlib/spa_c_files/spa_py.pyx +0 -30
- pvlib/tests/__init__.py +0 -0
- pvlib/tests/bifacial/__init__.py +0 -0
- pvlib/tests/bifacial/test_infinite_sheds.py +0 -317
- pvlib/tests/bifacial/test_losses_models.py +0 -54
- pvlib/tests/bifacial/test_pvfactors.py +0 -82
- pvlib/tests/bifacial/test_utils.py +0 -192
- pvlib/tests/conftest.py +0 -476
- pvlib/tests/iotools/__init__.py +0 -0
- pvlib/tests/iotools/test_acis.py +0 -213
- pvlib/tests/iotools/test_bsrn.py +0 -131
- pvlib/tests/iotools/test_crn.py +0 -95
- pvlib/tests/iotools/test_epw.py +0 -23
- pvlib/tests/iotools/test_midc.py +0 -89
- pvlib/tests/iotools/test_panond.py +0 -32
- pvlib/tests/iotools/test_psm3.py +0 -198
- pvlib/tests/iotools/test_pvgis.py +0 -644
- pvlib/tests/iotools/test_sodapro.py +0 -298
- pvlib/tests/iotools/test_solaranywhere.py +0 -287
- pvlib/tests/iotools/test_solargis.py +0 -68
- pvlib/tests/iotools/test_solcast.py +0 -324
- pvlib/tests/iotools/test_solrad.py +0 -152
- pvlib/tests/iotools/test_srml.py +0 -124
- pvlib/tests/iotools/test_surfrad.py +0 -75
- pvlib/tests/iotools/test_tmy.py +0 -133
- pvlib/tests/ivtools/__init__.py +0 -0
- pvlib/tests/ivtools/test_sde.py +0 -230
- pvlib/tests/ivtools/test_sdm.py +0 -429
- pvlib/tests/ivtools/test_utils.py +0 -173
- pvlib/tests/spectrum/__init__.py +0 -0
- pvlib/tests/spectrum/conftest.py +0 -40
- pvlib/tests/spectrum/test_irradiance.py +0 -138
- pvlib/tests/spectrum/test_mismatch.py +0 -304
- pvlib/tests/spectrum/test_response.py +0 -124
- pvlib/tests/spectrum/test_spectrl2.py +0 -72
- pvlib/tests/test__deprecation.py +0 -97
- pvlib/tests/test_albedo.py +0 -84
- pvlib/tests/test_atmosphere.py +0 -351
- pvlib/tests/test_clearsky.py +0 -884
- pvlib/tests/test_conftest.py +0 -37
- pvlib/tests/test_iam.py +0 -555
- pvlib/tests/test_inverter.py +0 -213
- pvlib/tests/test_irradiance.py +0 -1487
- pvlib/tests/test_location.py +0 -356
- pvlib/tests/test_modelchain.py +0 -2020
- pvlib/tests/test_numerical_precision.py +0 -124
- pvlib/tests/test_pvarray.py +0 -71
- pvlib/tests/test_pvsystem.py +0 -2511
- pvlib/tests/test_scaling.py +0 -207
- pvlib/tests/test_shading.py +0 -391
- pvlib/tests/test_singlediode.py +0 -608
- pvlib/tests/test_snow.py +0 -212
- pvlib/tests/test_soiling.py +0 -230
- pvlib/tests/test_solarposition.py +0 -966
- pvlib/tests/test_spa.py +0 -454
- pvlib/tests/test_temperature.py +0 -470
- pvlib/tests/test_tools.py +0 -146
- pvlib/tests/test_tracking.py +0 -474
- pvlib/tests/test_transformer.py +0 -60
- pvlib-0.11.2.dist-info/RECORD +0 -191
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info/licenses}/AUTHORS.md +0 -0
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info/licenses}/LICENSE +0 -0
- {pvlib-0.11.2.dist-info → pvlib-0.12.1a1.dist-info}/top_level.txt +0 -0
pvlib/snow.py
CHANGED
|
@@ -13,30 +13,38 @@ def _time_delta_in_hours(times):
|
|
|
13
13
|
return delta.dt.total_seconds().div(3600)
|
|
14
14
|
|
|
15
15
|
|
|
16
|
-
def fully_covered_nrel(snowfall, threshold_snowfall=1
|
|
16
|
+
def fully_covered_nrel(snowfall, snow_depth=None, threshold_snowfall=1.,
|
|
17
|
+
threshold_depth=1.):
|
|
17
18
|
'''
|
|
18
|
-
Calculates the timesteps when
|
|
19
|
-
by snow.
|
|
19
|
+
Calculates the timesteps when modules are fully covered by snow.
|
|
20
20
|
|
|
21
21
|
Parameters
|
|
22
22
|
----------
|
|
23
|
-
snowfall
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
snowfall: Series
|
|
24
|
+
Snowfall in each time period. [cm]
|
|
25
|
+
snow_depth: Series, optional
|
|
26
|
+
Snow depth on the ground at the beginning of each time period.
|
|
27
|
+
Must have the same index as ``snowfall``. [cm]
|
|
28
|
+
threshold_snowfall: float, default 1.0
|
|
29
|
+
Hourly snowfall above which the row is fully covered for that hour.
|
|
30
|
+
[cm/hr]
|
|
31
|
+
threshold_depth: float, default 1.0
|
|
32
|
+
Snow depth on the ground, above which snow can affect the modules. [cm]
|
|
29
33
|
|
|
30
34
|
Returns
|
|
31
35
|
----------
|
|
32
|
-
|
|
33
|
-
True where the snowfall exceeds the defined
|
|
34
|
-
the panel.
|
|
36
|
+
covered: Series
|
|
37
|
+
A Series of boolean, True where the snowfall exceeds the defined
|
|
38
|
+
threshold to fully cover the panel.
|
|
35
39
|
|
|
36
40
|
Notes
|
|
37
41
|
-----
|
|
38
42
|
Implements the model described in [1]_ with minor improvements in [2]_.
|
|
39
43
|
|
|
44
|
+
``snow_depth`` is used to return `False` (not fully covered) when snow
|
|
45
|
+
is less than ``threshold_depth``. This check is described in [2]_ as needed
|
|
46
|
+
for systems with low tilt angle.
|
|
47
|
+
|
|
40
48
|
References
|
|
41
49
|
----------
|
|
42
50
|
.. [1] Marion, B.; Schaefer, R.; Caine, H.; Sanchez, G. (2013).
|
|
@@ -56,15 +64,20 @@ def fully_covered_nrel(snowfall, threshold_snowfall=1.):
|
|
|
56
64
|
hourly_snow_rate.iloc[0] = snowfall.iloc[0] / timedelta
|
|
57
65
|
else: # can't infer frequency from index
|
|
58
66
|
hourly_snow_rate.iloc[0] = 0 # replaces NaN
|
|
59
|
-
|
|
67
|
+
covered = (hourly_snow_rate > threshold_snowfall)
|
|
68
|
+
# no coverage when no snow on the ground
|
|
69
|
+
if snow_depth is not None:
|
|
70
|
+
covered = covered & (snow_depth >= threshold_depth)
|
|
71
|
+
return covered
|
|
60
72
|
|
|
61
73
|
|
|
62
74
|
def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
63
|
-
initial_coverage=0, threshold_snowfall=1.,
|
|
64
|
-
can_slide_coefficient=-80.,
|
|
75
|
+
snow_depth=None, initial_coverage=0, threshold_snowfall=1.,
|
|
76
|
+
threshold_depth=1., can_slide_coefficient=-80.,
|
|
77
|
+
slide_amount_coefficient=0.197):
|
|
65
78
|
'''
|
|
66
|
-
Calculates the fraction of the slant height of a row of modules
|
|
67
|
-
snow at every time step.
|
|
79
|
+
Calculates the fraction of the slant height of a row of modules that is
|
|
80
|
+
covered by snow at every time step.
|
|
68
81
|
|
|
69
82
|
Implements the model described in [1]_ with minor improvements in [2]_,
|
|
70
83
|
with the change that the output is in fraction of the row's slant height
|
|
@@ -74,7 +87,7 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
|
74
87
|
Parameters
|
|
75
88
|
----------
|
|
76
89
|
snowfall : Series
|
|
77
|
-
|
|
90
|
+
Snowfall within each time period. [cm]
|
|
78
91
|
poa_irradiance : Series
|
|
79
92
|
Total in-plane irradiance [W/m^2]
|
|
80
93
|
temp_air : Series
|
|
@@ -82,12 +95,17 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
|
82
95
|
surface_tilt : numeric
|
|
83
96
|
Tilt of module's from horizontal, e.g. surface facing up = 0,
|
|
84
97
|
surface facing horizon = 90. [degrees]
|
|
98
|
+
snow_depth : Series, optional
|
|
99
|
+
Snow depth on the ground at the beginning of each time period.
|
|
100
|
+
Must have the same index as ``snowfall``. [cm]
|
|
85
101
|
initial_coverage : float, default 0
|
|
86
102
|
Fraction of row's slant height that is covered with snow at the
|
|
87
103
|
beginning of the simulation. [unitless]
|
|
88
|
-
threshold_snowfall
|
|
89
|
-
Hourly snowfall above which
|
|
90
|
-
|
|
104
|
+
threshold_snowfall: float, default 1.0
|
|
105
|
+
Hourly snowfall above which the row is fully covered for that hour.
|
|
106
|
+
[cm/hr]
|
|
107
|
+
threshold_depth: float, default 1.0
|
|
108
|
+
Snow depth on the ground, above which snow can affect the modules. [cm]
|
|
91
109
|
can_slide_coefficient : float, default -80.
|
|
92
110
|
Coefficient to determine if snow can slide given irradiance and air
|
|
93
111
|
temperature. [W/(m^2 C)]
|
|
@@ -103,8 +121,12 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
|
103
121
|
|
|
104
122
|
Notes
|
|
105
123
|
-----
|
|
106
|
-
In [1]_,
|
|
107
|
-
|
|
124
|
+
In [1]_, ``can_slide_coefficient`` is termed `m`, and the value of
|
|
125
|
+
``slide_amount_coefficient`` is given in tenths of a module's slant height.
|
|
126
|
+
|
|
127
|
+
``snow_depth`` is used to set ``snow_coverage`` to 0 (not fully covered)
|
|
128
|
+
when snow is less than ``threshold_depth``. This check is described in
|
|
129
|
+
[2]_ as needed for systems with low tilt angle.
|
|
108
130
|
|
|
109
131
|
References
|
|
110
132
|
----------
|
|
@@ -117,7 +139,8 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
|
117
139
|
'''
|
|
118
140
|
|
|
119
141
|
# find times with new snowfall
|
|
120
|
-
new_snowfall = fully_covered_nrel(snowfall, threshold_snowfall
|
|
142
|
+
new_snowfall = fully_covered_nrel(snowfall, snow_depth, threshold_snowfall,
|
|
143
|
+
threshold_depth)
|
|
121
144
|
|
|
122
145
|
# set up output Series
|
|
123
146
|
snow_coverage = pd.Series(np.nan, index=poa_irradiance.index)
|
|
@@ -132,6 +155,13 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
|
132
155
|
# don't slide in the interval preceding the snowfall data
|
|
133
156
|
slide_amt.iloc[0] = 0
|
|
134
157
|
|
|
158
|
+
if snow_depth is not None:
|
|
159
|
+
# All slides off if snow on the ground is less than threshold_depth.
|
|
160
|
+
# Described in [2] to avoid non-sliding snow for low-tilt systems.
|
|
161
|
+
# Default threshold_depth of 1cm is from [2[ and SAM's implementation.
|
|
162
|
+
# https://github.com/NREL/ssc/issues/1265
|
|
163
|
+
slide_amt[snow_depth < threshold_depth] = 1.
|
|
164
|
+
|
|
135
165
|
# build time series of cumulative slide amounts
|
|
136
166
|
sliding_period_ID = new_snowfall.cumsum()
|
|
137
167
|
cumulative_sliding = slide_amt.groupby(sliding_period_ID).cumsum()
|
|
@@ -143,7 +173,6 @@ def coverage_nrel(snowfall, poa_irradiance, temp_air, surface_tilt,
|
|
|
143
173
|
snow_coverage.ffill(inplace=True)
|
|
144
174
|
snow_coverage -= cumulative_sliding
|
|
145
175
|
|
|
146
|
-
# clean up periods where row is completely uncovered
|
|
147
176
|
return snow_coverage.clip(lower=0)
|
|
148
177
|
|
|
149
178
|
|
|
@@ -278,9 +307,8 @@ def loss_townsend(snow_total, snow_events, surface_tilt, relative_humidity,
|
|
|
278
307
|
axis to the module edge.
|
|
279
308
|
|
|
280
309
|
The parameter `string_factor` is an enhancement added to the model after
|
|
281
|
-
publication of [1]_
|
|
282
|
-
definition for snow events documented above is
|
|
283
|
-
communication with the model's author.
|
|
310
|
+
publication of [1]_, as described in [2]_.
|
|
311
|
+
The definition for snow events documented above is based on [3]_.
|
|
284
312
|
|
|
285
313
|
References
|
|
286
314
|
----------
|
|
@@ -288,6 +316,14 @@ def loss_townsend(snow_total, snow_events, surface_tilt, relative_humidity,
|
|
|
288
316
|
update from two winters of measurements in the SIERRA. 37th IEEE
|
|
289
317
|
Photovoltaic Specialists Conference, Seattle, WA, USA.
|
|
290
318
|
:doi:`10.1109/PVSC.2011.6186627`
|
|
319
|
+
.. [2] Townsend, T. and Previtali, J. (2023). A Fresh Dusting: Current
|
|
320
|
+
Uses of the Townsend Snow Model. In "Photovoltaic Reliability
|
|
321
|
+
Workshop (PVRW) 2023 Proceedings: Posters.", ed. Silverman,
|
|
322
|
+
T. J. Dec. 2023. NREL/CP-5900-87918.
|
|
323
|
+
Available at: https://www.nrel.gov/docs/fy25osti/90585.pdf
|
|
324
|
+
.. [3] Townsend, T. (2013). Predicting PV Energy Loss Caused by Snow.
|
|
325
|
+
Solar Power International, Chicago IL.
|
|
326
|
+
:doi:`10.13140/RG.2.2.14299.68647`
|
|
291
327
|
'''
|
|
292
328
|
|
|
293
329
|
# unit conversions from cm and m to in, from C to K, and from % to fraction
|
pvlib/spectrum/__init__.py
CHANGED
pvlib/spectrum/irradiance.py
CHANGED
|
@@ -4,7 +4,6 @@ calculations related to spectral irradiance data.
|
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
6
|
import pvlib
|
|
7
|
-
from pvlib._deprecation import deprecated
|
|
8
7
|
import numpy as np
|
|
9
8
|
import pandas as pd
|
|
10
9
|
from pathlib import Path
|
|
@@ -13,68 +12,6 @@ from scipy import constants
|
|
|
13
12
|
from scipy.integrate import trapezoid
|
|
14
13
|
|
|
15
14
|
|
|
16
|
-
@deprecated(
|
|
17
|
-
since="0.11",
|
|
18
|
-
removal="0.12",
|
|
19
|
-
name="pvlib.spectrum.get_am15g",
|
|
20
|
-
alternative="pvlib.spectrum.get_reference_spectra",
|
|
21
|
-
addendum=(
|
|
22
|
-
"The new function reads more data. Use it with "
|
|
23
|
-
+ "standard='ASTM G173-03' and extract the 'global' column."
|
|
24
|
-
),
|
|
25
|
-
)
|
|
26
|
-
def get_am15g(wavelength=None):
|
|
27
|
-
r"""
|
|
28
|
-
Read the ASTM G173-03 AM1.5 global spectrum on a 37-degree tilted surface,
|
|
29
|
-
optionally interpolated to the specified wavelength(s).
|
|
30
|
-
|
|
31
|
-
Global (tilted) irradiance includes direct and diffuse irradiance from sky
|
|
32
|
-
and ground reflections, and is more formally called hemispherical
|
|
33
|
-
irradiance (on a tilted surface). In the context of photovoltaic systems
|
|
34
|
-
the irradiance on a flat receiver is frequently called plane-of-array (POA)
|
|
35
|
-
irradiance.
|
|
36
|
-
|
|
37
|
-
Parameters
|
|
38
|
-
----------
|
|
39
|
-
wavelength: 1-D sequence of numeric, optional
|
|
40
|
-
Wavelengths at which the spectrum is interpolated.
|
|
41
|
-
By default the 2002 wavelengths of the standard are returned. [nm].
|
|
42
|
-
|
|
43
|
-
Returns
|
|
44
|
-
-------
|
|
45
|
-
am15g: pandas.Series
|
|
46
|
-
The AM1.5g standard spectrum indexed by ``wavelength``. [W/(m²nm)].
|
|
47
|
-
|
|
48
|
-
Notes
|
|
49
|
-
-----
|
|
50
|
-
If ``wavelength`` is specified this function uses linear interpolation.
|
|
51
|
-
|
|
52
|
-
If the values in ``wavelength`` are too widely spaced, the integral of the
|
|
53
|
-
spectrum may deviate from the standard value of 1000.37 W/m².
|
|
54
|
-
|
|
55
|
-
The values in the data file provided with pvlib-python are copied from an
|
|
56
|
-
Excel file distributed by NREL, which is found here:
|
|
57
|
-
https://www.nrel.gov/grid/solar-resource/assets/data/astmg173.xls
|
|
58
|
-
|
|
59
|
-
More information about reference spectra is found here:
|
|
60
|
-
https://www.nrel.gov/grid/solar-resource/spectra-am1.5.html
|
|
61
|
-
|
|
62
|
-
See Also
|
|
63
|
-
--------
|
|
64
|
-
pvlib.spectrum.get_reference_spectra : reads also the direct and
|
|
65
|
-
extraterrestrial components of the spectrum.
|
|
66
|
-
|
|
67
|
-
References
|
|
68
|
-
----------
|
|
69
|
-
.. [1] ASTM "G173-03 Standard Tables for Reference Solar Spectral
|
|
70
|
-
Irradiances: Direct Normal and Hemispherical on 37° Tilted Surface."
|
|
71
|
-
""" # noqa: E501
|
|
72
|
-
# Contributed by Anton Driesse (@adriesse), PV Performance Labs. Aug. 2022
|
|
73
|
-
# modified by @echedey-ls, as a wrapper of spectrum.get_reference_spectra
|
|
74
|
-
standard = get_reference_spectra(wavelength, standard="ASTM G173-03")
|
|
75
|
-
return standard["global"]
|
|
76
|
-
|
|
77
|
-
|
|
78
15
|
def get_reference_spectra(wavelengths=None, standard="ASTM G173-03"):
|
|
79
16
|
r"""
|
|
80
17
|
Read a standard spectrum specified by ``standard``, optionally
|
|
@@ -201,7 +138,8 @@ def average_photon_energy(spectra):
|
|
|
201
138
|
ape : numeric or pandas.Series
|
|
202
139
|
Average Photon Energy [eV].
|
|
203
140
|
Note: returns ``np.nan`` in the case of all-zero spectral irradiance
|
|
204
|
-
input
|
|
141
|
+
input, or where one or more spectral irradiance values is
|
|
142
|
+
``np.nan``.
|
|
205
143
|
|
|
206
144
|
Notes
|
|
207
145
|
-----
|
pvlib/spectrum/mismatch.py
CHANGED
|
@@ -520,7 +520,7 @@ def spectral_factor_pvspec(airmass_absolute, clearsky_index,
|
|
|
520
520
|
One of the following PV technology strings from [1]_:
|
|
521
521
|
|
|
522
522
|
* ``'fs4-1'`` - First Solar series 4-1 and earlier CdTe module.
|
|
523
|
-
* ``'fs4-2'`` - First Solar 4-2 and later CdTe module.
|
|
523
|
+
* ``'fs4-2'`` - First Solar series 4-2 and later CdTe module.
|
|
524
524
|
* ``'monosi'`` - anonymous monocrystalline Si module.
|
|
525
525
|
* ``'multisi'`` - anonymous multicrystalline Si module.
|
|
526
526
|
* ``'cigs'`` - anonymous copper indium gallium selenide module.
|
|
@@ -576,8 +576,8 @@ def spectral_factor_pvspec(airmass_absolute, clearsky_index,
|
|
|
576
576
|
_coefficients = {}
|
|
577
577
|
_coefficients['multisi'] = (0.9847, -0.05237, 0.03034)
|
|
578
578
|
_coefficients['monosi'] = (0.9845, -0.05169, 0.03034)
|
|
579
|
-
_coefficients['
|
|
580
|
-
_coefficients['
|
|
579
|
+
_coefficients['fs4-2'] = (1.002, -0.07108, 0.02465)
|
|
580
|
+
_coefficients['fs4-1'] = (0.9981, -0.05776, 0.02336)
|
|
581
581
|
_coefficients['cigs'] = (0.9791, -0.03904, 0.03096)
|
|
582
582
|
_coefficients['asi'] = (1.051, -0.1033, 0.009838)
|
|
583
583
|
|
pvlib/tools.py
CHANGED
|
@@ -3,10 +3,11 @@ Collection of functions used in pvlib_python
|
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
5
|
import datetime as dt
|
|
6
|
+
import warnings
|
|
7
|
+
|
|
6
8
|
import numpy as np
|
|
7
9
|
import pandas as pd
|
|
8
10
|
import pytz
|
|
9
|
-
import warnings
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def cosd(angle):
|
|
@@ -119,21 +120,21 @@ def atand(number):
|
|
|
119
120
|
|
|
120
121
|
def localize_to_utc(time, location):
|
|
121
122
|
"""
|
|
122
|
-
Converts
|
|
123
|
+
Converts ``time`` to UTC, localizing if necessary using location.
|
|
123
124
|
|
|
124
125
|
Parameters
|
|
125
126
|
----------
|
|
126
127
|
time : datetime.datetime, pandas.DatetimeIndex,
|
|
127
128
|
or pandas.Series/DataFrame with a DatetimeIndex.
|
|
128
|
-
location : pvlib.Location object
|
|
129
|
+
location : pvlib.Location object (unused if ``time`` is localized)
|
|
129
130
|
|
|
130
131
|
Returns
|
|
131
132
|
-------
|
|
132
|
-
pandas object localized to UTC.
|
|
133
|
+
datetime.datetime or pandas object localized to UTC.
|
|
133
134
|
"""
|
|
134
135
|
if isinstance(time, dt.datetime):
|
|
135
136
|
if time.tzinfo is None:
|
|
136
|
-
time =
|
|
137
|
+
time = location.pytz.localize(time)
|
|
137
138
|
time_utc = time.astimezone(pytz.utc)
|
|
138
139
|
else:
|
|
139
140
|
try:
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: pvlib
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.1a1
|
|
4
4
|
Summary: A set of functions and classes for simulating the performance of photovoltaic energy systems.
|
|
5
5
|
Home-page: https://github.com/pvlib/pvlib-python
|
|
6
6
|
Author-email: pvlib python Developers <pvlib-admin@googlegroups.com>
|
|
7
|
-
License: BSD-3-Clause
|
|
7
|
+
License-Expression: BSD-3-Clause
|
|
8
8
|
Project-URL: Bug Tracker, https://github.com/pvlib/pvlib-python/issues
|
|
9
9
|
Project-URL: Documentation, https://pvlib-python.readthedocs.io/
|
|
10
10
|
Project-URL: Source Code, https://github.com/pvlib/pvlib-python
|
|
11
11
|
Classifier: Development Status :: 4 - Beta
|
|
12
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
13
12
|
Classifier: Operating System :: OS Independent
|
|
14
13
|
Classifier: Intended Audience :: Science/Research
|
|
15
14
|
Classifier: Programming Language :: Python
|
|
@@ -44,7 +43,7 @@ Requires-Dist: pillow; extra == "doc"
|
|
|
44
43
|
Requires-Dist: sphinx-toggleprompt==0.5.2; extra == "doc"
|
|
45
44
|
Requires-Dist: sphinx-favicon; extra == "doc"
|
|
46
45
|
Requires-Dist: solarfactors; extra == "doc"
|
|
47
|
-
Requires-Dist: sphinx-hoverxref; extra == "doc"
|
|
46
|
+
Requires-Dist: sphinx-hoverxref~=1.4.2; extra == "doc"
|
|
48
47
|
Provides-Extra: test
|
|
49
48
|
Requires-Dist: pytest; extra == "test"
|
|
50
49
|
Requires-Dist: pytest-cov; extra == "test"
|
|
@@ -56,6 +55,8 @@ Requires-Dist: pytest-remotedata; extra == "test"
|
|
|
56
55
|
Requires-Dist: packaging; extra == "test"
|
|
57
56
|
Provides-Extra: all
|
|
58
57
|
Requires-Dist: pvlib[doc,optional,test]; extra == "all"
|
|
58
|
+
Dynamic: home-page
|
|
59
|
+
Dynamic: license-file
|
|
59
60
|
|
|
60
61
|
pvlib python is a community developed toolbox that provides a set of
|
|
61
62
|
functions and classes for simulating the performance of photovoltaic
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
pvlib/__init__.py,sha256=vdXAcBhLHHabZq1hdGnBEoo5cif6hLIS7mCJtgnWWUA,515
|
|
2
|
+
pvlib/_deprecation.py,sha256=pBZkJGV1r3m6q6ymqbQcT__t_toUkDQgPYYCK_Yu1so,15794
|
|
3
|
+
pvlib/albedo.py,sha256=MqrkDztnF6VWaM7W28AGGEgCyAK6X13bDvPk9YEaimU,6205
|
|
4
|
+
pvlib/atmosphere.py,sha256=zG6dXIrAdCvruXXHi7OthbcVqbXfSd6laib7JPkCztA,26854
|
|
5
|
+
pvlib/clearsky.py,sha256=9ReN3IGJHlJv_3bnxWEQUVZkww-klafsqqE5A-jelBQ,38553
|
|
6
|
+
pvlib/iam.py,sha256=zL0YzOaMA2Twbl0JJ0y5nxoxjmaOb9OQGH_Z1MVGcIw,44224
|
|
7
|
+
pvlib/inverter.py,sha256=ZpSv3cjt-Qm_JundL_jkvhCUd3iGjmlKcnNJeJqA2Qw,19127
|
|
8
|
+
pvlib/irradiance.py,sha256=PTVInBAqcHeQzmJaxhIn8eQbCXjeRBlK1jo9S4FaXjs,147940
|
|
9
|
+
pvlib/location.py,sha256=G31Iabv1KcYzMFr5sd0JhcJr9IpZx2rLv25h1K2XaAE,17509
|
|
10
|
+
pvlib/modelchain.py,sha256=G7FysXI-3hcedpFeFstL_PonWzkRwjl3wGZgPy6OL00,72788
|
|
11
|
+
pvlib/pvarray.py,sha256=r60sGTxFNlPiFQndusCJmlEIPX0dv9_7ozKw8zxh7IM,12677
|
|
12
|
+
pvlib/pvsystem.py,sha256=_TiDNphMQgauZImvXjpBAhEnDHwml43Rui0Zn83UggQ,111917
|
|
13
|
+
pvlib/scaling.py,sha256=SsQEmM4f4O1wC7e0amEV4SgaRTBX8nG5IiSV9Xs0i5o,10983
|
|
14
|
+
pvlib/shading.py,sha256=S1Av-oskqxQTyLKkmaVr854bve3StfbP_yF5isHF5zI,26172
|
|
15
|
+
pvlib/singlediode.py,sha256=wcq7QE68CNy04gOHzP-vrdYfZh_QHJcIzkDZXSkZsWQ,35399
|
|
16
|
+
pvlib/snow.py,sha256=1jbfCvyi8ClE15U_stwdnxdaMnXOw8igN3BIYEjFrko,14755
|
|
17
|
+
pvlib/soiling.py,sha256=zDJ3N0uyeS1CoO0mxSdG16q2FCBLZSHbujJHgish54U,8799
|
|
18
|
+
pvlib/solarposition.py,sha256=EZ6tCrz64fLX8-7xTBLwu6JnvjXStFCx2a8Xo1nM6Eo,51200
|
|
19
|
+
pvlib/spa.py,sha256=rXdizMpf2WEe-eKpseN_lf5MWzFihhayrT6E6h5fkgI,44847
|
|
20
|
+
pvlib/temperature.py,sha256=JmLUNkSlldlpSVu8dkRm_HRaSsA2QI1Li13AOCJU_cc,57886
|
|
21
|
+
pvlib/tools.py,sha256=A1g0GNp8S8OGVWSSPYkmuKy26MOpDeVXm0dMxa1sydk,13957
|
|
22
|
+
pvlib/tracking.py,sha256=YAgTSpT21GxOeTpow_cvD5njqJalwl-nHIr9KxuBHsQ,16152
|
|
23
|
+
pvlib/transformer.py,sha256=FXyYaPPooFXAvAP3Ib5vENDVJocbo6kUuBAPzQdimHo,3437
|
|
24
|
+
pvlib/version.py,sha256=0CONzyOSN34Jgbaj9JzemFuaEnbRON_yxp-ah6_KxxQ,165
|
|
25
|
+
pvlib/bifacial/__init__.py,sha256=64cyMvdne1gJJ-tSEetheorxEeMm-TOIad1u-0DSucA,460
|
|
26
|
+
pvlib/bifacial/infinite_sheds.py,sha256=eG4t_oLkInYZeGkFrDaZmT39tXShi4o0IIsvoI2rLuk,23105
|
|
27
|
+
pvlib/bifacial/loss_models.py,sha256=RDl9TcKqFoYXnE3P88DjLVFODh2mHdKEFUUH-BnvH7E,5944
|
|
28
|
+
pvlib/bifacial/pvfactors.py,sha256=QJXqjok4UcaUToNs6eR5ZDMsVf3HHT2AqW2u36hOOSI,5437
|
|
29
|
+
pvlib/bifacial/utils.py,sha256=98D7buxlcE8oilC3BqHqqDT7pCjrM-dAGhYvpYjqalU,14558
|
|
30
|
+
pvlib/data/12839.tm2,sha256=6v86FhwMJeUJIEx8Mj9Rqp_OqmeaQ3rpObunQVaM6ss,1261501
|
|
31
|
+
pvlib/data/703165TY.csv,sha256=8DM6aKEW9a6S8ShaKrh4TY4A5So2dEVlisiNctk9jKQ,1760582
|
|
32
|
+
pvlib/data/723170TYA.CSV,sha256=Hpb4RjjOmOaykAK8RaJ6ppuymw7QNo07Urex-BYQxsk,1716576
|
|
33
|
+
pvlib/data/ASTMG173.csv,sha256=kZZKwjwOyC272kp_FgpfX69VHf4Y_65-JEbXS1fueFk,57708
|
|
34
|
+
pvlib/data/Altitude.h5,sha256=08rUZ3iJrKcrksvEiC4_lQJL8oiIjsVJNivURWPQ3v0,1366196
|
|
35
|
+
pvlib/data/LinkeTurbidities.h5,sha256=NMfkwL-GVBbsu_wysMPptWA5pqrf9pl8w8nMroxj6TE,15637705
|
|
36
|
+
pvlib/data/adr-library-cec-inverters-2019-03-05.csv,sha256=6yNlInxEMmvyUEGnYEJQFB4NpDqE0qoNWBA3frRStXs,1147612
|
|
37
|
+
pvlib/data/sam-library-cec-inverters-2019-03-05.csv,sha256=wZIlLw1hIE31j7DflVFKKqUp2ItFojbbfxZzdmHWFtg,568421
|
|
38
|
+
pvlib/data/sam-library-cec-modules-2019-03-05.csv,sha256=p8OxrT2rtUJTaGFcFjIvLjUYX8QWOAtHHE5I3VRbGSA,5446588
|
|
39
|
+
pvlib/data/sam-library-sandia-modules-2015-6-30.csv,sha256=fhC-Oi0IaYVViKEjyDyDWDCIFfD52rU2gL7w2FBAhPM,195253
|
|
40
|
+
pvlib/data/soiling_hsu_example_inputs.csv,sha256=Dkr0Sc5GA2s6I2hBSeAGIEI5J4KKBNgf-LTtzKS0qEE,319716
|
|
41
|
+
pvlib/iotools/__init__.py,sha256=CqYpFa4q0xlQ-tTR_eqWybyzib5IiKdFb30WbZEulRo,2613
|
|
42
|
+
pvlib/iotools/acis.py,sha256=nzuH3SZBhMNoSk0fBr35O4YADDah6D02Acyj5RNUYeI,18449
|
|
43
|
+
pvlib/iotools/bsrn.py,sha256=Y_-_7qdxu047oiCQLO6idu42MMCvh3Im5uBPxCa-YwU,21837
|
|
44
|
+
pvlib/iotools/crn.py,sha256=PLugc4RF_0LzesWHnyCOtx9KmqeECZH9kxcXgzgjGrQ,5336
|
|
45
|
+
pvlib/iotools/epw.py,sha256=U35VKQE-bsttZp3QUZ2AsEqZpMQDIPj4IrhsWGGFJsI,17263
|
|
46
|
+
pvlib/iotools/midc.py,sha256=T2kskGsBzeHY-9HHc8096mbOaifKvFturCTcZq1pIzY,9568
|
|
47
|
+
pvlib/iotools/panond.py,sha256=okK6zNh5r-H1gDPbZRmWEcYYaBmifPhp1ESR-P2YM9s,5262
|
|
48
|
+
pvlib/iotools/psm3.py,sha256=vSK-9cMhaOeFNyqajYbu27jzRs9VQR2h3XY7jCPDMeo,14771
|
|
49
|
+
pvlib/iotools/psm4.py,sha256=sbM3P05-f6YrqXT-vvbsbdr8xd4om6jmrd-z1OXHelU,32060
|
|
50
|
+
pvlib/iotools/pvgis.py,sha256=R2gms1LTR7KMAY5U-P1jE0bHm3eoBqpKnnZvPU_5n_g,31477
|
|
51
|
+
pvlib/iotools/sodapro.py,sha256=Hw4kOUorJ3olSjB5FBlZjdNxIrkjWtDIHZd1IugVsBs,15629
|
|
52
|
+
pvlib/iotools/solaranywhere.py,sha256=_kDetQ0R8rQgcfTZjeQArq9nmCtVa4upF_KGrcipovQ,12535
|
|
53
|
+
pvlib/iotools/solargis.py,sha256=6FeIsqs_bs2oNrUGvkv7Dc4AlIsDiwpCs5oFVcBheO8,8274
|
|
54
|
+
pvlib/iotools/solcast.py,sha256=d-2LAC-Tlazmih_QZKYbOKCyZaP7U08pIwoKTfciTCk,15332
|
|
55
|
+
pvlib/iotools/solrad.py,sha256=M8Xwasro6_hFiZP7hcsYSeEze3q5kNmnV0kAdNHqgBI,7177
|
|
56
|
+
pvlib/iotools/srml.py,sha256=J-irJ-A5i182jZx47Lh4dET-lX5Y2O6DM0-T6IFMD04,8779
|
|
57
|
+
pvlib/iotools/surfrad.py,sha256=WFh2__FGlOwHg6RTxIkcMmdMucX0vbQfHEz9q_HLGjY,7349
|
|
58
|
+
pvlib/iotools/tmy.py,sha256=zfkxn88qSKBR0GOHWxgrQ6r-BOC-ueoDfppjOS18VBI,26603
|
|
59
|
+
pvlib/ivtools/__init__.py,sha256=bnUDPqkzCP96CaFFK3Gw4HNczJoHtO-cI9GBGAtZVGI,159
|
|
60
|
+
pvlib/ivtools/sde.py,sha256=HL2oE70Ls7xccikyaUSi6SQKx3cWES5XoaMAGuMjPIw,17008
|
|
61
|
+
pvlib/ivtools/utils.py,sha256=xL88J-RuYLXFZyy1za8tvoWei0hcwWb_2ktXara2m_M,19423
|
|
62
|
+
pvlib/ivtools/sdm/__init__.py,sha256=P9akg2O7mFkAXoC8Kh2HcaZhbT96K4tTKnYr3b1dt2g,474
|
|
63
|
+
pvlib/ivtools/sdm/_fit_desoto_pvsyst_sandia.py,sha256=1lHhBK5dRl2R80F4ZGwmQsoghAthCLNU_ce_3dt3Vbc,22522
|
|
64
|
+
pvlib/ivtools/sdm/cec.py,sha256=StIQ92RPaU--pp_2QQjFa1SFl5JSntjbEL5GItiOlNU,3434
|
|
65
|
+
pvlib/ivtools/sdm/desoto.py,sha256=saB71F9sXBRAbWB--gHt-QFnAPRYrg_eDEkNK777x38,15107
|
|
66
|
+
pvlib/ivtools/sdm/pvsyst.py,sha256=ur2LVbm_6S941BHNMKOtA-y5OaaT8LfwIctztSO1FbE,23246
|
|
67
|
+
pvlib/spa_c_files/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
68
|
+
pvlib/spa_c_files/setup.py,sha256=RcMEf0R2wKHJjvpUH5y6h22m86y6UrdXwkPkHKNme48,1102
|
|
69
|
+
pvlib/spa_c_files/spa_py_example.py,sha256=p3ms0mhLycAuZJyaE3Wageqnd_56zh2EKxXK-jlTJfg,1179
|
|
70
|
+
pvlib/spectrum/__init__.py,sha256=8lK8ZJRh5nl4A6eK0OlbiHdViorCHiJkANrK7QkjQIw,516
|
|
71
|
+
pvlib/spectrum/irradiance.py,sha256=VY0-FTUv2WWHTZRyy4lo8lQGrAjIREf4nQMVYrv0mXM,7827
|
|
72
|
+
pvlib/spectrum/mismatch.py,sha256=Vhp1WeyP4vle6hXLsAhDZYwPwyEdPjBhfDL2B1yi0BU,30497
|
|
73
|
+
pvlib/spectrum/response.py,sha256=k3FCoPPR_2yGrfXPGsZljJcgrQ7sckQn0CwiqERNntY,9413
|
|
74
|
+
pvlib/spectrum/spectrl2.py,sha256=sPOZe5lXgkwMem3JbEi19uW7OQq4FzxcZyCnxzXFjWs,19022
|
|
75
|
+
pvlib-0.12.1a1.dist-info/licenses/AUTHORS.md,sha256=Fxk4p_lXlMeQ6g2A1-7oPrgpULDxuJuC9Ebc-3yyj_o,1474
|
|
76
|
+
pvlib-0.12.1a1.dist-info/licenses/LICENSE,sha256=oC4S3araPPDV292K_91XfC7sZAdYqVhCowT3UTuMC-Q,1622
|
|
77
|
+
pvlib-0.12.1a1.dist-info/METADATA,sha256=AuJUb7gX-u4wwLmcVz8otIDN7diBbl9UMprIHrD3_Q4,2899
|
|
78
|
+
pvlib-0.12.1a1.dist-info/WHEEL,sha256=wXxTzcEDnjrTwFYjLPcsW_7_XihufBwmpiBeiXNBGEA,91
|
|
79
|
+
pvlib-0.12.1a1.dist-info/top_level.txt,sha256=eq9CH6YXUc3Fh3dyQ5hQXoGYfSm1SYEAlMygyR22MgE,6
|
|
80
|
+
pvlib-0.12.1a1.dist-info/RECORD,,
|