@@ -9,17 +9,20 @@ kernelspec:
99 name : python3
1010---
1111
12- (example_cower_2022)=
13- # Cost of Wind Energy Review 2022
12+ (example_cower)=
13+ # Cost of Wind Energy Review: 2025 Edition
14+
15+ [ ![ Binder] ( https://mybinder.org/badge_logo.svg )] ( https://mybinder.org/v2/gh/NREL/WAVES/main?filepath=examples )
1416
1517Be sure to install ` pip install "waves[examples]" ` (or ` pip install ".[examples]" ` ) to work with
1618this example.
1719
18- This example will walk through the process of running a subset of the 2022 Cost of Wind Energy
19- Review (COWER) analysis to demonstrate an analysis workflow. Please note, that this is not the exact
20- workflow because it has been broken down to highlight some of the key features of WAVES. Similarly,
21- this will stay up to date with WAVES's dependencies, namely ORBIT, WOMBAT, and FLORIS, so results
22- may change slightly between this * example* relying on the configurations and the published results.
20+ This example will walk through the process of running a subset of the current year's Cost of Wind
21+ Energy Review (COWER) analysis to demonstrate an analysis workflow. Please note, that this is not
22+ the exact workflow because it has been broken down to highlight some of the key features of WAVES.
23+ Similarly, this will stay up to date with WAVES's dependencies, namely ORBIT, WOMBAT, and FLORIS,
24+ so results may change slightly between this * example* relying on the configurations and the
25+ published results.
2326
2427```` {note}
2528To run these examples from the command line, the below command can be used, which will dipslay and
@@ -30,10 +33,10 @@ information in the command line wherever WAVES is installed.
3033# NOTE: This is run from the top level of WAVES/
3134
3235# Run one example
33- waves library/base_2022 base_fixed_bottom_2022 .yaml
36+ waves library/base base_osw_fixed .yaml
3437
3538# Run both examples, but don't save the results
36- waves library/base_2022 base_fixed_bottom_2022 .yaml base_floating_2022 .yaml --no-save-report
39+ waves library/base base_osw_fixed .yaml base_osw_floating .yaml --no-save-report
3740```
3841````
3942
@@ -63,22 +66,22 @@ the configurations. For a complete guide and definition, please see either the
6366
6467```` {warning}
6568If your FLORIS installation is <3.6, then the FLORIS configuration files in
66- `library/base_2022 /project/config/` will have to be updated so that line 107 (same line number for
69+ `library/base /project/config/` will have to be updated so that line 107 (same line number for
6770fixed bottom and floating) is using an absolute path like the example below.
6871
6972```yaml
7073# original, set to work with FLORIS >= 3.6
7174turbine_library_path: ../../turbines
7275
7376# updated absolute path, replace <path_to_waves> in your own files
74- turbine_library_path: <path_to_waves>/WAVES/library/base_2022 /turbines/
77+ turbine_library_path: <path_to_waves>/WAVES/library/base /turbines/
7578```
7679````
7780
7881``` {code-cell} ipython3
79- library_path = Path("../library/base_2022/ ")
80- config_fixed = load_yaml(library_path / "project/config", "base_fixed_bottom_2022 .yaml")
81- config_floating = load_yaml(library_path / "project/config", "base_floating_2022 .yaml")
82+ library_path = Path("../library/base ")
83+ config_fixed = load_yaml(library_path / "project/config", "base_osw_fixed .yaml")
84+ config_floating = load_yaml(library_path / "project/config", "base_osw_floating .yaml")
8285
8386# This example was designed prior to the FLORIS 3.6 release, so the path to the turbine library in
8487# FLORIS must be manually updated, but this example must work for all users, so a dynamic method
@@ -100,19 +103,19 @@ WAVES command line interface (CLI).
100103config_fixed.update({"library_path": library_path,})
101104config_floating.update({"library_path": library_path,})
102105
103- start1 = perf_counter()
106+ start = perf_counter()
104107
105108project_fixed = Project.from_dict(config_fixed)
106109
107- end1 = perf_counter()
110+ end = perf_counter()
111+ print(f"Fixed bottom loading time: {(end-start):,.2f} seconds")
108112
109- start2 = perf_counter()
113+ start = perf_counter()
110114
111115project_floating = Project.from_dict(config_floating)
112116
113- end2 = perf_counter()
114- print(f"Fixed bottom loading time: {(end1-start1):,.2f} seconds")
115- print(f"Floating loading time: {(end2-start2):,.2f} seconds")
117+ end = perf_counter()
118+ print(f"Floating loading time: {(end-start):,.2f} seconds")
116119```
117120
118121### Visualize the wind farm
@@ -137,37 +140,34 @@ of the year, for a more accurate energy output. However, we're using just the we
137140in the O&M phase: ` full_wind_rose=False ` .
138141
139142``` {code-cell} ipython3
140- start1 = perf_counter()
143+ start = perf_counter()
141144project_fixed.run(
142- which_floris="wind_rose", # month-based wind rose wake analysis
143145 full_wind_rose=False, # use the WOMBAT date range
144- floris_reinitialize_kwargs ={"cut_in_wind_speed": 3.0, "cut_out_wind_speed": 25.0} # standard ws range
146+ floris_kwargs ={"cut_in_wind_speed": 3.0, "cut_out_wind_speed": 25.0} # standard ws range
145147)
146148project_fixed.wombat.env.cleanup_log_files() # Delete logging data from the WOMBAT simulations
147- end1 = perf_counter()
149+ end = perf_counter()
150+ print(f"Fixed run time: {end - start:,.2f} seconds")
148151
149- start2 = perf_counter()
152+ start = perf_counter()
150153project_floating.run(
151- which_floris="wind_rose",
152154 full_wind_rose=False,
153- floris_reinitialize_kwargs =dict(cut_in_wind_speed=3.0, cut_out_wind_speed=25.0)
155+ floris_kwargs =dict(cut_in_wind_speed=3.0, cut_out_wind_speed=25.0)
154156)
155157project_floating.wombat.env.cleanup_log_files() # Delete logging data from the WOMBAT simulations
156- end2 = perf_counter()
158+ end = perf_counter()
157159
158- print("-" * 29) # separate our timing from the ORBIT and FLORIS run-time warnings
159- print(f"Fixed run time: {end1 - start1:,.2f} seconds")
160- print(f"Floating run time: {end2 - start2:,.2f} seconds")
160+ print(f"Floating run time: {end - start:,.2f} seconds")
161161```
162162
163163Both of these examples can also be run via the CLI, though the FLORIS ` turbine_library_path `
164164configuration will have to be manually updated in each file to ensure the examples run.
165165
166166``` console
167- waves path/to/library/base_2022/ base_fixed_bottom_2022 .yaml base_floating_bottom_2022 .yaml --no-save-report
167+ waves path/to/library/base/ base_osw_fixed .yaml base_osw_floating .yaml --no-save-report
168168```
169169
170- (example_cower_2022 : results )=
170+ (example_cower : results )=
171171## Gather the results
172172
173173Another of the conveniences with using WAVES to run all three models is that some of the core
@@ -213,20 +213,16 @@ metrics_configuration = {
213213 "OpEx per kW ($/kW)": {"metric": "opex", "kwargs": {"per_capacity": "kw"}},
214214 "AEP (MWh)": {
215215 "metric": "energy_production",
216- "kwargs": {"units": "mw", "aep": True, "with_losses": True }
216+ "kwargs": {"units": "mw", "aep": True}
217217 },
218218 "AEP per kW (MWh/kW)": {
219219 "metric": "energy_production",
220- "kwargs": {"units": "mw", "per_capacity": "kw", "aep": True, "with_losses": True }
220+ "kwargs": {"units": "mw", "per_capacity": "kw", "aep": True}
221221 },
222- "Net Capacity Factor With Wake Losses (%)": {
222+ "Net Capacity Factor (%)": {
223223 "metric": "capacity_factor",
224224 "kwargs": {"which": "net"}
225225 },
226- "Net Capacity Factor With All Losses (%)": {
227- "metric": "capacity_factor",
228- "kwargs": {"which": "net", "with_losses": True}
229- },
230226 "Gross Capacity Factor (%)": {
231227 "metric": "capacity_factor",
232228 "kwargs": {"which": "gross"}
@@ -256,8 +252,7 @@ metrics_order = [
256252 "Annual OpEx per kW ($/kW)",
257253 "Energy Availability (%)",
258254 "Gross Capacity Factor (%)",
259- "Net Capacity Factor With Wake Losses (%)",
260- "Net Capacity Factor With All Losses (%)",
255+ "Net Capacity Factor (%)",
261256 "AEP (MWh)",
262257 "AEP per kW (MWh/kW)",
263258 "LCOE ($/MWh)",
@@ -319,8 +314,8 @@ df_capex
319314Now, let's generate the report, and then add in some additional reporting variables.
320315
321316``` {code-cell} ipython3
322- project_name_fixed = "COE 2022 - Fixed"
323- project_name_floating = "COE 2022 - Floating"
317+ project_name_fixed = "Fixed"
318+ project_name_floating = "Floating"
324319
325320# Generate the reports using WAVES and the above configurations
326321# NOTE: the results are transposed to view them more easily for the example, otherwise
0 commit comments