NREL-reV 0.13.1__py3-none-any.whl → 0.14.1__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.
- {nrel_rev-0.13.1.dist-info → nrel_rev-0.14.1.dist-info}/METADATA +2 -5
- {nrel_rev-0.13.1.dist-info → nrel_rev-0.14.1.dist-info}/RECORD +20 -19
- {nrel_rev-0.13.1.dist-info → nrel_rev-0.14.1.dist-info}/WHEEL +1 -1
- reV/SAM/version_checker.py +3 -2
- reV/bespoke/bespoke.py +22 -15
- reV/cli.py +4 -2
- reV/config/project_points.py +8 -5
- reV/econ/economies_of_scale.py +160 -61
- reV/generation/cli_gen.py +4 -2
- reV/losses/scheduled.py +18 -31
- reV/supply_curve/aggregation.py +15 -6
- reV/supply_curve/cli_tech_mapping.py +66 -0
- reV/supply_curve/points.py +118 -28
- reV/supply_curve/sc_aggregation.py +93 -23
- reV/supply_curve/tech_mapping.py +190 -245
- reV/utilities/__init__.py +9 -4
- reV/version.py +1 -1
- {nrel_rev-0.13.1.dist-info → nrel_rev-0.14.1.dist-info}/entry_points.txt +0 -0
- {nrel_rev-0.13.1.dist-info → nrel_rev-0.14.1.dist-info}/licenses/LICENSE +0 -0
- {nrel_rev-0.13.1.dist-info → nrel_rev-0.14.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: NREL-reV
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.14.1
|
4
4
|
Summary: National Renewable Energy Laboratory's (NREL's) Renewable Energy Potential(V) Model: reV
|
5
5
|
Author-email: Galen Maclaurin <galen.maclaurin@nrel.gov>
|
6
6
|
Maintainer-email: Grant Buster <gbuster@nrel.gov>, Paul Pinchuk <ppinchuk@nrel.gov>
|
@@ -22,7 +22,7 @@ Description-Content-Type: text/x-rst
|
|
22
22
|
License-File: LICENSE
|
23
23
|
Requires-Dist: NREL-gaps<0.9,>=0.8.0
|
24
24
|
Requires-Dist: NREL-NRWAL<0.1,>=0.0.11
|
25
|
-
Requires-Dist: NREL-PySAM~=
|
25
|
+
Requires-Dist: NREL-PySAM~=7.0.0
|
26
26
|
Requires-Dist: NREL-rex<0.4,>=0.3.2
|
27
27
|
Requires-Dist: numpy<3,>=2.0.2
|
28
28
|
Requires-Dist: packaging<25,>=24.2
|
@@ -156,9 +156,6 @@ Option 1: Install from PIP (recommended for analysts):
|
|
156
156
|
3. Install reV:
|
157
157
|
1) ``pip install NREL-reV`` or
|
158
158
|
|
159
|
-
- NOTE: If you install using conda and want to run from files directly on S3 like in the `running reV locally example <https://nrel.github.io/reV/misc/examples.running_locally.html>`_
|
160
|
-
you will also need to install S3 filesystem dependencies: ``pip install NREL-reV[s3]``
|
161
|
-
|
162
159
|
- NOTE: If you install using conda and want to use `HSDS <https://github.com/NREL/hsds-examples>`_
|
163
160
|
you will also need to install HSDS dependencies: ``pip install NREL-reV[hsds]``
|
164
161
|
|
@@ -1,13 +1,13 @@
|
|
1
|
-
nrel_rev-0.
|
1
|
+
nrel_rev-0.14.1.dist-info/licenses/LICENSE,sha256=hDwoTANtan2ZpufBlXm5C3W_PJ-mCqItvlcobgjxL7k,1526
|
2
2
|
reV/__init__.py,sha256=tXTpWu_qVo3uotfSw_TJ-gNbidGaIPPfUTwBlpCMJ-g,856
|
3
|
-
reV/cli.py,sha256=
|
4
|
-
reV/version.py,sha256=
|
3
|
+
reV/cli.py,sha256=u7G5M5moA7q8fCgC_1MB30Z7R14GNcngVf6eVNkfQU8,1682
|
4
|
+
reV/version.py,sha256=en0eHrVgai6A_9JZVnfZf8ZSffqqCeB8YJG-3yS393g,51
|
5
5
|
reV/SAM/SAM.py,sha256=3NK9rRaJzqH6wz7CU_5XguKCRhmoilOpDdFFsFgOaxQ,33163
|
6
6
|
reV/SAM/__init__.py,sha256=LJqoncyKDY5ZP5WA4kboh561bce11F9Ge645Izah0EY,240
|
7
7
|
reV/SAM/defaults.py,sha256=JQMJomX7wsbMzxKjx_IMnA_9QFsV2yWCyl_JToDVSJo,6703
|
8
8
|
reV/SAM/econ.py,sha256=dFhtUXp5eozSsPyk0XXji0HGexKJnxoct8cwE1ApHVg,20704
|
9
9
|
reV/SAM/generation.py,sha256=kbDiQ0a0VCrfPi6P1RSMKdjlbxuO3rgiR0-YSM1pyU8,85653
|
10
|
-
reV/SAM/version_checker.py,sha256=
|
10
|
+
reV/SAM/version_checker.py,sha256=MBSPqHYmTyjXJLi1ziJ1sGS18AH9an-PZRcl-6IPJGw,3963
|
11
11
|
reV/SAM/windbos.py,sha256=fnq1uxtSl-vtJth0gTlHkCSsmvDbRROCo9RGdqA7hK4,7504
|
12
12
|
reV/SAM/defaults/USA AZ Phoenix Sky Harbor Intl Ap (TMY3).csv,sha256=8QorTX0ACjgPgNV7kLSpTHOqfY4E17gkkpKB-qseiFk,406896
|
13
13
|
reV/SAM/defaults/USA CA Daggett (TMY2).csv,sha256=vVP-mk_cXj1GRHMbqsyZ60fTVMywTappzwp5-ILurFs,410050
|
@@ -16,7 +16,7 @@ reV/SAM/defaults/WY Southern-Flat Lands.srw,sha256=oSlFI7nnycW7SMnTXEXBXYkoh8rhV
|
|
16
16
|
reV/SAM/defaults/geothermal.json,sha256=gnlxOBxxkbDDacIw6B9yP9iRkfmwj0WTWs8Zb71ytCo,7119
|
17
17
|
reV/SAM/defaults/i_pvwattsv5.json,sha256=sF8rSe1bcqsKLXchvRxlp25dXOVe_q7rPJTf_vWR20Y,312
|
18
18
|
reV/bespoke/__init__.py,sha256=vpXbyBUrUsTgK8UP_LafMjLiDg2CRG9WZLHPsOJoxek,109
|
19
|
-
reV/bespoke/bespoke.py,sha256=
|
19
|
+
reV/bespoke/bespoke.py,sha256=ZMl4kz9oAaXpZaNa5EgiD43RvKiKl3xymRv-z4lDYmQ,113169
|
20
20
|
reV/bespoke/cli_bespoke.py,sha256=b6Xu0GKpXqPX3qVJ6-z0FrO97uCsH_1dVOa4r6IvesQ,2911
|
21
21
|
reV/bespoke/gradient_free.py,sha256=URWV1yiO2jyWk3_GOpfpLV_wlgJhXXGmTUwCB3WTV0Y,12015
|
22
22
|
reV/bespoke/pack_turbs.py,sha256=Dcd9F8obF8LPztzeycB5kxa5hXKSCiz3jC1WeAFUx28,3508
|
@@ -28,16 +28,16 @@ reV/config/cli_project_points.py,sha256=6edOlLNOG-ZEbcpNS2MPfu-DXjcOTEh_MEvKOvQS
|
|
28
28
|
reV/config/curtailment.py,sha256=1bH7xzxOmD4PwLKcXFNotMAa9iCfGBUm2DKTOXViCJg,5548
|
29
29
|
reV/config/execution.py,sha256=hyf8W7XYUXE6tXBXs-4En7h_aDTYu8FzbslgBsKLJkQ,5046
|
30
30
|
reV/config/output_request.py,sha256=Sj3L5hcypLTCtLnKAqS7GSaI4_Hpb28QLuWT9IMCvrc,4520
|
31
|
-
reV/config/project_points.py,sha256=
|
31
|
+
reV/config/project_points.py,sha256=CSq7lHgWfJ1pq1XlWJ5eykmGGhumkxVcg__Ln9RR4-Y,41886
|
32
32
|
reV/config/sam_config.py,sha256=xvvx2FTuliq0Sk-BjRE3I9zdDmIdwHVBnWtXCcsoc40,7998
|
33
33
|
reV/econ/__init__.py,sha256=UId1LNaAP9lErCEXVce6JZf0qVRUvwNFOPrajdRevGo,130
|
34
34
|
reV/econ/cli_econ.py,sha256=2KNy3JQD0EKjStaoD2r6nv3ELFw88h2E_up-UKj_sfE,4286
|
35
35
|
reV/econ/econ.py,sha256=edsNPZg2amhC_GZeotkY2MU3u17NgWeCpS6okZNrwAA,23637
|
36
|
-
reV/econ/economies_of_scale.py,sha256=
|
36
|
+
reV/econ/economies_of_scale.py,sha256=UXBmHFDK-pngDGaIoKe90TQgW2LlNKxcjMQHMxSxky8,15044
|
37
37
|
reV/econ/utilities.py,sha256=ZOA49S1jfsvdenvlL7m-BAJIrAvpAHSix5-wrSW0uLc,1232
|
38
38
|
reV/generation/__init__.py,sha256=LBecrbpL69tROol_OwVHTKBrTqgSSxJW59fs0k3o0jQ,75
|
39
39
|
reV/generation/base.py,sha256=D--WPQ8ZWElE06HtZF9rQYK1cAa4MWBDEqkOZ2hmFEE,49482
|
40
|
-
reV/generation/cli_gen.py,sha256=
|
40
|
+
reV/generation/cli_gen.py,sha256=JYcTX9bM1hb_HQX-9yUwvE5fXNxRMINttlGo4Pvo138,4530
|
41
41
|
reV/generation/generation.py,sha256=FrNN3p-WScRtnVHhaqxpTAgvVbE0cIF9_2Or_qDlJ8g,49029
|
42
42
|
reV/generation/output_attributes/generation.json,sha256=cy8efVCJgNSYCsR3x3_VpMCtynYS3oaQG4M2MwcdzFY,4954
|
43
43
|
reV/generation/output_attributes/lcoe_fcr.json,sha256=d_TGMkZsmsfDXQiWfhYjFkmwqi-wKF8JdHmiMCj2h38,136
|
@@ -61,7 +61,7 @@ reV/hybrids/hybrid_methods.py,sha256=5nGb2sadp8zT9atZJNVigpYm_JYJxt4gWCPo56-5Vjk
|
|
61
61
|
reV/hybrids/hybrids.py,sha256=7DFaqkNdAUVJxd_YDoQI-psKcJAlWgOGapYb_kIv3kw,46601
|
62
62
|
reV/losses/__init__.py,sha256=DMmJo9oOVrF1npUcjuSHo_yslf94am8xdvYrvwjEsjM,141
|
63
63
|
reV/losses/power_curve.py,sha256=P7xhRlTDqVoz5m3BJMwqYbrSKBkZfeWVEzFVmFARVGE,45289
|
64
|
-
reV/losses/scheduled.py,sha256=
|
64
|
+
reV/losses/scheduled.py,sha256=JKOVKh6jNOQx2Dj-uSPx1kpICcoHuYGPpievxkVqOQM,26878
|
65
65
|
reV/losses/utils.py,sha256=XyM38JVlBNad9BEMJqRLuK6xba_DfFZUxNSC7EcRelM,7511
|
66
66
|
reV/nrwal/__init__.py,sha256=HD-QXvKRM5s6Z24zfKw31yhBttrkTe8hzUnx0FZP_P0,114
|
67
67
|
reV/nrwal/cli_nrwal.py,sha256=sa2gI86sNGk3ZJuQPxy_xsxle4KWDyPNrM11hlq6Ask,1825
|
@@ -74,25 +74,26 @@ reV/rep_profiles/__init__.py,sha256=v6YZk7tGLpw5gnSckjOn22xazTnv10siCFfWQl9H_fQ,
|
|
74
74
|
reV/rep_profiles/cli_rep_profiles.py,sha256=i3fRolT7HTzTQePXpNLDyxwgpRa7FEfHO1mOqiSufK4,4613
|
75
75
|
reV/rep_profiles/rep_profiles.py,sha256=dJ2jcklbelYYNS3IUXIYHg8E0poXLOWrwdqeBBnqYIE,48271
|
76
76
|
reV/supply_curve/__init__.py,sha256=dbf0cO0qmt1VhV8dnDddztrcpnwua9T2HBhM6tLKaP8,274
|
77
|
-
reV/supply_curve/aggregation.py,sha256=
|
77
|
+
reV/supply_curve/aggregation.py,sha256=DvIUmj0PbZ8NxgOSmpXvzn9wJnOiQO2Xm2w_WCRVK-U,40908
|
78
78
|
reV/supply_curve/cli_sc_aggregation.py,sha256=qGfJyZjg4tFARG2dl-wAlHv9KjEp2u4wg1Boxz18Gf0,3347
|
79
79
|
reV/supply_curve/cli_supply_curve.py,sha256=e-XrHQIe4OqWTL6u-TUAyHrw7Alk7vkXQ2HoLbE3zTM,2163
|
80
|
+
reV/supply_curve/cli_tech_mapping.py,sha256=ztNJhgk3WlSD5Gn7Rh3qBLMvX_pFkjuQT7qUK4s0P2w,1731
|
80
81
|
reV/supply_curve/competitive_wind_farms.py,sha256=eOjM72-4oWtsqxB7Wh2gnB2zVAt4LY3iPE_DqWdXbQ4,15795
|
81
82
|
reV/supply_curve/exclusions.py,sha256=4-ZxTO5Vlu03vie0V_74uvdajQfCuC8FE96Pg8I4U_c,42950
|
82
83
|
reV/supply_curve/extent.py,sha256=a31po753hXSxQ8lfcCvpE8hoKc4bY7MmYq0NO0jtdqA,17414
|
83
|
-
reV/supply_curve/points.py,sha256=
|
84
|
-
reV/supply_curve/sc_aggregation.py,sha256=
|
84
|
+
reV/supply_curve/points.py,sha256=p9Kqzas1jX8uCXcvYX7o6mdUVsgeHCC_F9pjBaEypPI,93548
|
85
|
+
reV/supply_curve/sc_aggregation.py,sha256=l7uXs-grLb0enblPNsEDKccSP11WZ2Pah5baWtgtvzE,68067
|
85
86
|
reV/supply_curve/supply_curve.py,sha256=9zhAA_9XSxE18j1Z9FuC71Wr3I0VuakfR5mt1_gHYuU,69931
|
86
|
-
reV/supply_curve/tech_mapping.py,sha256=
|
87
|
-
reV/utilities/__init__.py,sha256=
|
87
|
+
reV/supply_curve/tech_mapping.py,sha256=WP-o5Sk5q1Jz_F9Rpe77_fvTYGH8R4GnYDfRMSTuHB8,17804
|
88
|
+
reV/utilities/__init__.py,sha256=HVb1P-ee-z2P6UTjyc0s0gYFK7XYM71BQLEMxj26apA,10834
|
88
89
|
reV/utilities/_clean_readme.py,sha256=IFI9wGPX5nnLTNVLJzH8IOHq9unQlAlHRu4Namib0LA,709
|
89
90
|
reV/utilities/cli_functions.py,sha256=1_T_sXz0Ct8lW-vOk3mMRcpD6NYsc9cGI7dEujIi9z4,3864
|
90
91
|
reV/utilities/curtailment.py,sha256=As902-2aLGnCiVEutYfAFIOwuV--_rCQhxGNOY9RB-4,5241
|
91
92
|
reV/utilities/exceptions.py,sha256=f7sRGsbFLpmL6Caq_H1cD4GfVhnLMyvYUsLPA1UVDDE,3974
|
92
93
|
reV/utilities/pytest_utils.py,sha256=spCw9yQ8KEYOkQZpCi9IEmaWIvIqHqbUPDXXNQJJ68U,3241
|
93
94
|
reV/utilities/slots.py,sha256=xsw-JuUVZ0YeoCNuwP_HxGNxFMA4xRs1tuImXHIJqaU,2618
|
94
|
-
nrel_rev-0.
|
95
|
-
nrel_rev-0.
|
96
|
-
nrel_rev-0.
|
97
|
-
nrel_rev-0.
|
98
|
-
nrel_rev-0.
|
95
|
+
nrel_rev-0.14.1.dist-info/METADATA,sha256=0EADVsx-loQXOEowljo4an8-FB9ZjXBm9XBC_Ie0edA,10733
|
96
|
+
nrel_rev-0.14.1.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
97
|
+
nrel_rev-0.14.1.dist-info/entry_points.txt,sha256=4IfJtZm2iMJwrbC8J0Or7VjZWnFpvCaHYVpvSWfIwDA,616
|
98
|
+
nrel_rev-0.14.1.dist-info/top_level.txt,sha256=S6YF2ZYgXUB6n28SY0K2H8YB9tMJdXQ9CyQbo6VC89M,4
|
99
|
+
nrel_rev-0.14.1.dist-info/RECORD,,
|
reV/SAM/version_checker.py
CHANGED
@@ -6,8 +6,9 @@ Created on Mon Feb 3 14:40:42 2020
|
|
6
6
|
@author: gbuster
|
7
7
|
"""
|
8
8
|
import logging
|
9
|
+
import importlib
|
9
10
|
from warnings import warn
|
10
|
-
|
11
|
+
|
11
12
|
from packaging import version
|
12
13
|
from reV.utilities.exceptions import PySAMVersionError, PySAMVersionWarning
|
13
14
|
|
@@ -105,7 +106,7 @@ class PySamVersionChecker:
|
|
105
106
|
@property
|
106
107
|
def pysam_version(self):
|
107
108
|
"""Get the PySAM distribution version"""
|
108
|
-
return
|
109
|
+
return importlib.metadata.version("nrel-pysam")
|
109
110
|
|
110
111
|
@classmethod
|
111
112
|
def run(cls, tech, parameters):
|
reV/bespoke/bespoke.py
CHANGED
@@ -23,7 +23,7 @@ from rex.multi_year_resource import MultiYearWindResource
|
|
23
23
|
from rex.utilities.bc_parse_table import parse_bc_table
|
24
24
|
from rex.utilities.execution import SpawnProcessPool
|
25
25
|
from rex.utilities.loggers import create_dirs, log_mem
|
26
|
-
from rex.utilities.utilities import parse_year
|
26
|
+
from rex.utilities.utilities import parse_year, check_res_file
|
27
27
|
|
28
28
|
from reV.config.output_request import SAMOutputRequest
|
29
29
|
from reV.econ.utilities import lcoe_fcr
|
@@ -80,7 +80,8 @@ class BespokeMultiPlantData:
|
|
80
80
|
Option to pre-load relative humidity data (useful for icing
|
81
81
|
runs). If ``False``, relative humidities are not loaded.
|
82
82
|
"""
|
83
|
-
self.res_fpath = res_fpath
|
83
|
+
self.res_fpath = ([res_fpath]
|
84
|
+
if isinstance(res_fpath, str) else res_fpath)
|
84
85
|
self.sc_gid_to_hh = sc_gid_to_hh
|
85
86
|
self.sc_gid_to_res_gid = sc_gid_to_res_gid
|
86
87
|
self.hh_to_res_gids = {}
|
@@ -104,8 +105,9 @@ class BespokeMultiPlantData:
|
|
104
105
|
hh: sorted(gids) for hh, gids in self.hh_to_res_gids.items()
|
105
106
|
}
|
106
107
|
|
108
|
+
hsds = all(check_res_file(fp)[1] for fp in self.res_fpath)
|
107
109
|
start_time = time.time()
|
108
|
-
with MultiYearWindResource(self.res_fpath) as res:
|
110
|
+
with MultiYearWindResource(self.res_fpath, hsds=hsds) as res:
|
109
111
|
self._wind_dirs = {
|
110
112
|
hh: res[f"winddirection_{hh}m", :, gids]
|
111
113
|
for hh, gids in self.hh_to_res_gids.items()
|
@@ -488,7 +490,9 @@ class BespokeSinglePlant:
|
|
488
490
|
self._pre_loaded_data = pre_loaded_data
|
489
491
|
self._outputs = {}
|
490
492
|
|
491
|
-
|
493
|
+
if isinstance(res, str):
|
494
|
+
__, hsds = check_res_file(res)
|
495
|
+
res = MultiYearWindResource(res, hsds=hsds)
|
492
496
|
|
493
497
|
self._sc_point = AggSCPoint(
|
494
498
|
gid,
|
@@ -1087,8 +1091,8 @@ class BespokeSinglePlant:
|
|
1087
1091
|
fcr = lcoe_kwargs['fixed_charge_rate']
|
1088
1092
|
cc = lcoe_kwargs['capital_cost']
|
1089
1093
|
foc = lcoe_kwargs['fixed_operating_cost']
|
1090
|
-
voc = lcoe_kwargs['variable_operating_cost']
|
1091
|
-
aep = self.outputs['annual_energy-means']
|
1094
|
+
voc = lcoe_kwargs['variable_operating_cost'] # $/kWh
|
1095
|
+
aep = self.outputs['annual_energy-means'] # kWh
|
1092
1096
|
|
1093
1097
|
my_mean_lcoe = lcoe_fcr(fcr, cc, foc, aep, voc)
|
1094
1098
|
|
@@ -1184,6 +1188,7 @@ class BespokeSinglePlant:
|
|
1184
1188
|
'wind_resource_data',
|
1185
1189
|
'wind_turbine_powercurve_powerout',
|
1186
1190
|
'adjust_hourly',
|
1191
|
+
'adjust_timeindex',
|
1187
1192
|
'capital_cost',
|
1188
1193
|
'fixed_operating_cost',
|
1189
1194
|
'variable_operating_cost',
|
@@ -1387,12 +1392,12 @@ class BespokeSinglePlant:
|
|
1387
1392
|
self._meta[SupplyCurveField.EOS_MULT] = eos_mult
|
1388
1393
|
self._meta[SupplyCurveField.REG_MULT] = reg_mult_cc
|
1389
1394
|
|
1390
|
-
self._meta[SupplyCurveField.
|
1395
|
+
self._meta[SupplyCurveField.COST_SITE_CC_USD_PER_AC_MW] = (
|
1391
1396
|
(self.plant_optimizer.capital_cost
|
1392
1397
|
+ self.plant_optimizer.balance_of_system_cost)
|
1393
1398
|
/ capacity_ac_mw
|
1394
1399
|
)
|
1395
|
-
self._meta[SupplyCurveField.
|
1400
|
+
self._meta[SupplyCurveField.COST_BASE_CC_USD_PER_AC_MW] = (
|
1396
1401
|
(self.plant_optimizer.capital_cost / eos_mult / reg_mult_cc
|
1397
1402
|
+ self.plant_optimizer.balance_of_system_cost / reg_mult_bos)
|
1398
1403
|
/ capacity_ac_mw
|
@@ -1406,14 +1411,13 @@ class BespokeSinglePlant:
|
|
1406
1411
|
/ reg_mult_foc
|
1407
1412
|
/ capacity_ac_mw
|
1408
1413
|
)
|
1409
|
-
self._meta[SupplyCurveField.
|
1410
|
-
self.plant_optimizer.variable_operating_cost
|
1411
|
-
/ capacity_ac_mw
|
1414
|
+
self._meta[SupplyCurveField.COST_SITE_VOC_USD_PER_AC_MWH] = (
|
1415
|
+
self.plant_optimizer.variable_operating_cost * 1000 # to $/MWh
|
1412
1416
|
)
|
1413
|
-
self._meta[SupplyCurveField.
|
1417
|
+
self._meta[SupplyCurveField.COST_BASE_VOC_USD_PER_AC_MWH] = (
|
1414
1418
|
self.plant_optimizer.variable_operating_cost
|
1415
1419
|
/ reg_mult_voc
|
1416
|
-
|
1420
|
+
* 1000 # to $/MWh
|
1417
1421
|
)
|
1418
1422
|
self._meta[SupplyCurveField.FIXED_CHARGE_RATE] = (
|
1419
1423
|
self.plant_optimizer.fixed_charge_rate
|
@@ -1972,7 +1976,8 @@ class BespokeWindPlants(BaseAggregation):
|
|
1972
1976
|
pre_extract_inclusions=pre_extract_inclusions,
|
1973
1977
|
)
|
1974
1978
|
|
1975
|
-
self._res_fpath = res_fpath
|
1979
|
+
self._res_fpath = ([res_fpath]
|
1980
|
+
if isinstance(res_fpath, str) else res_fpath)
|
1976
1981
|
self._obj_fun = objective_function
|
1977
1982
|
self._cap_cost_fun = capital_cost_function
|
1978
1983
|
self._foc_fun = fixed_operating_cost_function
|
@@ -2123,8 +2128,9 @@ class BespokeWindPlants(BaseAggregation):
|
|
2123
2128
|
)
|
2124
2129
|
)
|
2125
2130
|
|
2131
|
+
hsds = all(check_res_file(fp)[1] for fp in self._res_fpath)
|
2126
2132
|
# just check that this file exists, cannot check res_fpath if *glob
|
2127
|
-
with MultiYearWindResource(self._res_fpath) as f:
|
2133
|
+
with MultiYearWindResource(self._res_fpath, hsds=hsds) as f:
|
2128
2134
|
assert any(f.dsets)
|
2129
2135
|
|
2130
2136
|
def _pre_load_data(self, pre_load_data):
|
@@ -2494,6 +2500,7 @@ class BespokeWindPlants(BaseAggregation):
|
|
2494
2500
|
"area_filter_kernel": area_filter_kernel,
|
2495
2501
|
"min_area": min_area,
|
2496
2502
|
"h5_handler": MultiYearWindResource,
|
2503
|
+
"hsds": all(check_res_file(fp)[1] for fp in res_fpath),
|
2497
2504
|
}
|
2498
2505
|
|
2499
2506
|
with AggFileHandler(excl_fpath, res_fpath, **file_kwargs) as fh:
|
reV/cli.py
CHANGED
@@ -12,6 +12,7 @@ from reV.handlers.cli_collect import collect_command
|
|
12
12
|
from reV.handlers.cli_multi_year import my_command
|
13
13
|
from reV.supply_curve.cli_sc_aggregation import sc_agg_command
|
14
14
|
from reV.supply_curve.cli_supply_curve import sc_command
|
15
|
+
from reV.supply_curve.cli_tech_mapping import tm_command
|
15
16
|
from reV.rep_profiles.cli_rep_profiles import rep_profiles_command
|
16
17
|
from reV.hybrids.cli_hybrids import hybrids_command
|
17
18
|
from reV.nrwal.cli_nrwal import nrwal_command
|
@@ -24,8 +25,9 @@ logger = logging.getLogger(__name__)
|
|
24
25
|
|
25
26
|
|
26
27
|
commands = [bespoke_command, gen_command, econ_command, collect_command,
|
27
|
-
my_command, sc_agg_command, sc_command,
|
28
|
-
hybrids_command, nrwal_command,
|
28
|
+
my_command, tm_command, sc_agg_command, sc_command,
|
29
|
+
rep_profiles_command, hybrids_command, nrwal_command,
|
30
|
+
qa_qc_command]
|
29
31
|
main = make_cli(commands, info={"name": "reV", "version": __version__})
|
30
32
|
main.add_command(qa_qc_extra)
|
31
33
|
main.add_command(project_points)
|
reV/config/project_points.py
CHANGED
@@ -464,8 +464,10 @@ class ProjectPoints:
|
|
464
464
|
h_var = "wind_turbine_hub_ht"
|
465
465
|
if self._h is None:
|
466
466
|
if "wind" in self.tech:
|
467
|
-
|
468
|
-
|
467
|
+
if h_var in self.df.columns:
|
468
|
+
self._h = self.df[h_var].values.tolist()
|
469
|
+
else:
|
470
|
+
self._h = [self[site][1][h_var] for site in self.sites]
|
469
471
|
|
470
472
|
return self._h
|
471
473
|
|
@@ -837,7 +839,6 @@ class ProjectPoints:
|
|
837
839
|
logger.error(msg)
|
838
840
|
raise ConfigError(msg)
|
839
841
|
|
840
|
-
|
841
842
|
unused_configs = set(curtail_configs) - set(df_configs)
|
842
843
|
if unused_configs:
|
843
844
|
msg = ("One or more curtailment configurations not found in "
|
@@ -1164,12 +1165,14 @@ class ProjectPoints:
|
|
1164
1165
|
multi_h5_res, hsds = check_res_file(res_file)
|
1165
1166
|
if multi_h5_res:
|
1166
1167
|
res_cls = MultiFileResourceX
|
1168
|
+
res_kwargs = {}
|
1167
1169
|
else:
|
1168
1170
|
res_cls = ResourceX
|
1171
|
+
res_kwargs = {"hsds": hsds}
|
1169
1172
|
|
1170
1173
|
logger.info("Extracting ProjectPoints for desired regions")
|
1171
1174
|
points = []
|
1172
|
-
with res_cls(res_file,
|
1175
|
+
with res_cls(res_file, **res_kwargs) as f:
|
1173
1176
|
meta = f.meta
|
1174
1177
|
for region, region_col in regions.items():
|
1175
1178
|
logger.debug("- {}: {}".format(region_col, region))
|
@@ -1181,7 +1184,7 @@ class ProjectPoints:
|
|
1181
1184
|
if duplicates:
|
1182
1185
|
msg = (
|
1183
1186
|
"reV Cannot currently handle duplicate "
|
1184
|
-
"Resource gids! The given regions
|
1187
|
+
"Resource gids! The given regions containing the "
|
1185
1188
|
"same gids:\n{}".format(duplicates)
|
1186
1189
|
)
|
1187
1190
|
logger.error(msg)
|