Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
@@ -1,13 +1,8 @@
import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
import numpy as np

from flasc.utilities.utilities_examples import load_floris_artificial as load_floris
from flasc.visualization import (
plot_floris_layout,
plot_layout_only,
plot_layout_with_waking_directions,
shade_region,
)

# Example demonstrates some methods for visualizing the layout of the farm
# represented within the FLORIS interface
Expand All @@ -21,42 +16,59 @@
# Defines alternative names for each turbine with 1-index
turbine_names = ["Turbine-%d" % (t + 1) for t in range(len(fm.layout_x))]

# Plot using default 0-indexed labels (includes power/thrust curve)
plot_floris_layout(fm, plot_terrain=False)
# Plot the basic farm layout
ax = layoutviz.plot_turbine_points(fm, plotting_dict={"color": "g"})
layoutviz.plot_turbine_labels(fm, ax=ax, turbine_names=turbine_names)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

# Plot using default given 1-indexed labels (includes power/thrust curve)
plot_floris_layout(fm, plot_terrain=False, turbine_names=turbine_names)

# Plot only the layout with default options
plot_layout_only(fm)

# Plot only the layout with custom options
plot_layout_only(fm, {"turbine_names": turbine_names, "color": "g"})

# Plot layout with wake directions and inter-turbine distances labeled
plot_layout_with_waking_directions(fm)

# Plot layout with wake directions and inter-turbine distances labeled
# (using custom options)
plot_layout_with_waking_directions(
# Plot using the default names and show the wake directions
turbines_to_plot = range(2, len(fm.layout_x))
ax = layoutviz.plot_turbine_points(fm, turbine_indices=turbines_to_plot)
layoutviz.plot_turbine_labels(
fm, ax=ax, turbine_indices=turbines_to_plot, turbine_names=turbine_names
)
layoutviz.plot_waking_directions(
fm,
limit_num=3, # limit to 3 lines per turbine
layout_plotting_dict={
"turbine_names": turbine_names,
"turbine_indices": range(2, len(fm.layout_x)),
},
ax=ax,
limit_num=3,
wake_plotting_dict={"color": "r"},
turbine_indices=turbines_to_plot,
)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

# Demonstrate shading of an arbitrary region
points_for_demo = np.array([[600, 0], [1400, 0], [1200, 1000]])
ax = plot_layout_only(fm)
shade_region(
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax, turbine_names=turbine_names)
layoutviz.shade_region(
points_for_demo,
show_points=True,
plotting_dict_region={"color": "blue", "label": "Example region"},
plotting_dict_points={"color": "blue", "marker": "+", "s": 50},
ax=ax,
)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

# Turbine data
fig, ax = plt.subplots(2, 1)
ax[0].plot(
fm.core.farm.turbine_map[0].power_thrust_table["wind_speed"],
fm.core.farm.turbine_map[0].power_thrust_table["power"],
)
ax[1].plot(
fm.core.farm.turbine_map[0].power_thrust_table["wind_speed"],
fm.core.farm.turbine_map[0].power_thrust_table["thrust_coefficient"],
)
ax[1].set_xlabel("Wind Speed [m/s]")
ax[1].set_ylabel("Thrust coefficient [-]")
ax[0].set_ylabel("Power [kW]")
ax[0].grid()
ax[1].grid()

plt.show()
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# Copyright 2022 NREL & Shell
import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
from floris.flow_visualization import visualize_cut_plane

from flasc.utilities.utilities_examples import load_floris_artificial as load_floris
from flasc.visualization import plot_floris_layout

if __name__ == "__main__":
# User settings
Expand All @@ -26,7 +26,11 @@
wind_speeds=[wind_speed],
turbulence_intensities=[turbulence_intensity],
)
plot_floris_layout(fm, plot_terrain=False)
ax = layoutviz.plot_turbine_points(fm)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")
ax.set_title("Turbine layout")

# Generate baseline flowfield
print("Calculating flowfield...")
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
import numpy as np

from flasc import visualization as fsaviz
from flasc.utilities import floris_tools as fsatools
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris

Expand All @@ -19,7 +19,11 @@
fm, _ = load_floris()

# Plot the layout of the farm for reference
fsaviz.plot_layout_only(fm)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

# Get the dependencies of turbine 2
check_directions = np.arange(0, 360.0, 2.0)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import floris.layout_visualization as layoutviz
import numpy as np
from _local_helper_functions import evaluate_optimal_yaw_angles, optimize_yaw_angles
from matplotlib import pyplot as plt

from flasc.utilities.lookup_table_tools import get_yaw_angles_interpolant
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris
from flasc.visualization import plot_floris_layout, plot_layout_with_waking_directions
from flasc.yaw_optimizer_visualization import (
plot_offsets_wd,
plot_offsets_wswd_heatmap,
Expand All @@ -14,8 +14,9 @@
if __name__ == "__main__":
# Load FLORIS model and plot layout (and additional information)
fm, _ = load_floris()
plot_floris_layout(fm)
plot_layout_with_waking_directions(fm, limit_dist_D=5, limit_num=3)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
layoutviz.plot_waking_directions(fm, ax=ax, limit_dist_D=5, limit_num=3)

# Compare optimizing over all wind speeds vs. optimizing over a single wind speed
AEP_baseline_array = []
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import os

import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
Expand All @@ -10,7 +11,6 @@
from flasc.analysis.energy_ratio_input import EnergyRatioInput
from flasc.data_processing import dataframe_manipulations as dfm
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris
from flasc.visualization import plot_floris_layout


def load_data():
Expand Down Expand Up @@ -169,7 +169,11 @@ def plot_energy_ratios(turbine_array, results_energy_ratio, ax=None, label=None)
ax = plot_energy_ratios(turbine_array, results_energy_ratio)

# Also plot wake situation according to FLORIS
plot_floris_layout(fm, plot_terrain=False)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

fig, ax = plt.subplots()
fm.set(wind_directions=[wd], wind_speeds=[10.0])
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
from flasc.analysis.energy_ratio_heterogeneity_mapper import heterogeneity_mapper
from flasc.data_processing import dataframe_manipulations as dfm
from flasc.utilities import floris_tools as ftools

# from flasc.visualization import plot_floris_layout
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris


Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
Expand All @@ -6,7 +7,7 @@
from flasc.analysis import energy_ratio as er
from flasc.analysis.energy_ratio_input import EnergyRatioInput
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris
from flasc.visualization import plot_binned_mean_and_ci, plot_layout_with_waking_directions
from flasc.visualization import plot_binned_mean_and_ci

if __name__ == "__main__":
# Construct a simple 3-turbine wind farm with a
Expand All @@ -19,7 +20,12 @@
fm.set(layout_x=[0, 0, 5 * 126], layout_y=[5 * 126, 0, 0])

# Show the wind farm
plot_layout_with_waking_directions(fm)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
layoutviz.plot_waking_directions(fm, ax=ax)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

# Create a time history of points where the wind speed and wind
# direction step different combinations
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

from flasc.analysis import total_uplift as tup
from flasc.analysis.energy_ratio_input import EnergyRatioInput
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris
from flasc.visualization import plot_binned_mean_and_ci, plot_layout_with_waking_directions
from flasc.visualization import plot_binned_mean_and_ci

if __name__ == "__main__":
# Generate the data as in example 05_wake_steering_example.py
Expand All @@ -20,7 +21,12 @@
fm.set(layout_x=[0, 0, 5 * 126], layout_y=[5 * 126, 0, 0])

# Show the wind farm
plot_layout_with_waking_directions(fm)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
layoutviz.plot_waking_directions(fm, ax=ax)
ax.grid()
ax.set_xlabel("x coordinate [m]")
ax.set_ylabel("y coordinate [m]")

# Create a time history of points where the wind speed and wind
# direction step different combinations
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,7 @@
import numpy as np
import pandas as pd

from flasc.model_estimation.floris_sensitivity_analysis import (
floris_sobol_analysis,
)
from flasc.model_estimation.floris_sensitivity_analysis import floris_sobol_analysis


def _save_pickle(dict_in, fn):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,7 @@
from floris.utilities import wrap_360

from flasc.analysis import energy_ratio_suite
from flasc.data_processing import (
dataframe_manipulations as dfm,
)
from flasc.data_processing import dataframe_manipulations as dfm
from flasc.utilities import floris_tools as fsatools
from flasc.utilities.utilities_examples import load_floris_artificial as load_floris

Expand Down
72 changes: 42 additions & 30 deletions examples_smarteole/00_inspect_floris_model.ipynb

Large diffs are not rendered by default.

15 changes: 9 additions & 6 deletions flasc/utilities/utilities_examples.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,11 @@
from pathlib import Path
from time import perf_counter as timerpc

import floris.layout_visualization as layoutviz
import matplotlib.pyplot as plt
import numpy as np
from floris import FlorisModel, UncertainFlorisModel

from flasc.visualization import plot_floris_layout


def load_floris_smarteole(wake_model="gch", wd_std=0.0):
"""Load a FlorisModel object for the wind farm at hand.
Expand Down Expand Up @@ -114,14 +113,18 @@ def load_floris_artificial(wake_model="gch", wd_std=0.0, cosine_exponent=None):
if __name__ == "__main__":
# Load and time the artificial FLORIS model
t0 = timerpc()
fi, turbine_weights = load_floris_artificial()
fm, turbine_weights = load_floris_artificial()
print("Time spent to load the FLORIS model (artificial): {:.2f} s.".format(timerpc() - t0))
plot_floris_layout(fi, plot_terrain=False)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
ax.grid()

# Load and time the Smarteole FLORIS model
t0 = timerpc()
fi, turbine_weights = load_floris_smarteole()
fm, turbine_weights = load_floris_smarteole()
print("Time spent to load the FLORIS model (smarteole): {:.2f} s.".format(timerpc() - t0))
plot_floris_layout(fi, plot_terrain=False)
ax = layoutviz.plot_turbine_points(fm)
layoutviz.plot_turbine_labels(fm, ax=ax)
ax.grid()

plt.show()
Loading