Initial Commit + Hardcode Example
This commit is contained in:
parent
9aae3dec59
commit
d36adf55f1
0
floris_module/__init__.py
Normal file
0
floris_module/__init__.py
Normal file
244
floris_module/src/gch.yaml
Normal file
244
floris_module/src/gch.yaml
Normal file
@ -0,0 +1,244 @@
|
|||||||
|
|
||||||
|
###
|
||||||
|
# A name for this input file.
|
||||||
|
# This is not currently only for the user's reference.
|
||||||
|
name: GCH
|
||||||
|
|
||||||
|
###
|
||||||
|
# A description of the contents of this input file.
|
||||||
|
# This is not currently only for the user's reference.
|
||||||
|
description: Three turbines using Gauss Curl Hybrid model
|
||||||
|
|
||||||
|
###
|
||||||
|
# The earliest verion of FLORIS this input file supports.
|
||||||
|
# This is not currently only for the user's reference.
|
||||||
|
floris_version: v4
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the logging level and where to show the logs.
|
||||||
|
logging:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Settings for logging to the console (i.e. terminal).
|
||||||
|
console:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Can be "true" or "false".
|
||||||
|
enable: true
|
||||||
|
|
||||||
|
###
|
||||||
|
# Set the severity to show output. Messages at this level or higher will be shown.
|
||||||
|
# Can be one of "CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG".
|
||||||
|
level: WARNING
|
||||||
|
|
||||||
|
###
|
||||||
|
# Settings for logging to a file.
|
||||||
|
file:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Can be "true" or "false".
|
||||||
|
enable: false
|
||||||
|
|
||||||
|
###
|
||||||
|
# Set the severity to show output. Messages at this level or higher will be shown.
|
||||||
|
# Can be one of "CRITICAL", "ERROR", "WARNING", "INFO", "DEBUG".
|
||||||
|
level: WARNING
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the solver for the type of simulation.
|
||||||
|
solver:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Select the solver type.
|
||||||
|
# Can be one of: "turbine_grid", "flow_field_grid", "flow_field_planar_grid".
|
||||||
|
type: turbine_grid
|
||||||
|
|
||||||
|
###
|
||||||
|
# Options for the turbine type selected above. See the solver documentation for available parameters.
|
||||||
|
turbine_grid_points: 3
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the turbine types and their placement within the wind farm.
|
||||||
|
farm:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Coordinates for the turbine locations in the x-direction which is typically considered
|
||||||
|
# to be the streamwise direction (left, right) when the wind is out of the west.
|
||||||
|
# The order of the coordinates here corresponds to the index of the turbine in the primary
|
||||||
|
# data structures.
|
||||||
|
layout_x:
|
||||||
|
- 0.0
|
||||||
|
- 630.0
|
||||||
|
- 1260.0
|
||||||
|
|
||||||
|
###
|
||||||
|
# Coordinates for the turbine locations in the y-direction which is typically considered
|
||||||
|
# to be the spanwise direction (up, down) when the wind is out of the west.
|
||||||
|
# The order of the coordinates here corresponds to the index of the turbine in the primary
|
||||||
|
# data structures.
|
||||||
|
layout_y:
|
||||||
|
- 0.0
|
||||||
|
- 0.0
|
||||||
|
- 0.0
|
||||||
|
|
||||||
|
###
|
||||||
|
# Listing of turbine types for placement at the x and y coordinates given above.
|
||||||
|
# The list length must be 1 or the same as ``layout_x`` and ``layout_y``. If it is a
|
||||||
|
# single value, all turbines are of the same type. Otherwise, the turbine type
|
||||||
|
# is mapped to the location at the same index in ``layout_x`` and ``layout_y``.
|
||||||
|
# The types can be either a name included in the turbine_library or
|
||||||
|
# a full definition of a wind turbine directly.
|
||||||
|
turbine_type:
|
||||||
|
- nrel_5MW
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the atmospheric conditions.
|
||||||
|
flow_field:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Air density.
|
||||||
|
air_density: 1.225
|
||||||
|
|
||||||
|
###
|
||||||
|
# The height to consider the "center" of the vertical wind speed profile
|
||||||
|
# due to shear. With a shear exponent not 1, the wind speed at this height
|
||||||
|
# will be the value given in ``wind_speeds``. Above and below this height,
|
||||||
|
# the wind speed will change according to the shear profile; see
|
||||||
|
# :py:meth:`.FlowField.initialize_velocity_field`.
|
||||||
|
# For farms consisting of one wind turbine type, use ``reference_wind_height: -1``
|
||||||
|
# to use the hub height of the wind turbine definition. For multiple wind turbine
|
||||||
|
# types, the reference wind height must be given explicitly.
|
||||||
|
reference_wind_height: -1
|
||||||
|
|
||||||
|
###
|
||||||
|
# The turbulence intensities to include in the simulation, specified as a decimal.
|
||||||
|
turbulence_intensities:
|
||||||
|
- 0.06
|
||||||
|
|
||||||
|
###
|
||||||
|
# The wind directions to include in the simulation.
|
||||||
|
# 0 is north and 270 is west.
|
||||||
|
wind_directions:
|
||||||
|
- 270.0
|
||||||
|
|
||||||
|
###
|
||||||
|
# The exponent used to model the wind shear profile; see
|
||||||
|
# :py:meth:`.FlowField.initialize_velocity_field`.
|
||||||
|
wind_shear: 0.12
|
||||||
|
|
||||||
|
###
|
||||||
|
# The wind speeds to include in the simulation.
|
||||||
|
wind_speeds:
|
||||||
|
- 8.0
|
||||||
|
|
||||||
|
###
|
||||||
|
# The wind veer as a constant value for all points in the grid.
|
||||||
|
wind_veer: 0.0
|
||||||
|
|
||||||
|
###
|
||||||
|
# The conditions that are specified for use with the multi-dimensional Cp/Ct capbility.
|
||||||
|
# These conditions are external to FLORIS and specified by the user. They are used internally
|
||||||
|
# through a nearest-neighbor selection process to choose the correct Cp/Ct interpolants
|
||||||
|
# to use.
|
||||||
|
multidim_conditions:
|
||||||
|
Tp: 2.5
|
||||||
|
Hs: 3.01
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the wake model.
|
||||||
|
wake:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Select the models to use for the simulation.
|
||||||
|
# See :py:mod:`~.wake` for a list
|
||||||
|
# of available models and their descriptions.
|
||||||
|
model_strings:
|
||||||
|
|
||||||
|
###
|
||||||
|
# Select the wake combination model.
|
||||||
|
combination_model: sosfs
|
||||||
|
|
||||||
|
###
|
||||||
|
# Select the wake deflection model.
|
||||||
|
deflection_model: gauss
|
||||||
|
|
||||||
|
###
|
||||||
|
# Select the wake turbulence model.
|
||||||
|
turbulence_model: crespo_hernandez
|
||||||
|
|
||||||
|
###
|
||||||
|
# Select the wake velocity deficit model.
|
||||||
|
velocity_model: gauss
|
||||||
|
|
||||||
|
###
|
||||||
|
# Can be "true" or "false".
|
||||||
|
enable_secondary_steering: true
|
||||||
|
|
||||||
|
###
|
||||||
|
# Can be "true" or "false".
|
||||||
|
enable_yaw_added_recovery: true
|
||||||
|
|
||||||
|
###
|
||||||
|
# Can be "true" or "false".
|
||||||
|
enable_active_wake_mixing: false
|
||||||
|
|
||||||
|
###
|
||||||
|
# Can be "true" or "false".
|
||||||
|
enable_transverse_velocities: true
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the parameters for the wake deflection model
|
||||||
|
# selected above.
|
||||||
|
# Additional blocks can be provided for
|
||||||
|
# models that are not enabled, but the enabled model
|
||||||
|
# must have a corresponding parameter block.
|
||||||
|
wake_deflection_parameters:
|
||||||
|
gauss:
|
||||||
|
ad: 0.0
|
||||||
|
alpha: 0.58
|
||||||
|
bd: 0.0
|
||||||
|
beta: 0.077
|
||||||
|
dm: 1.0
|
||||||
|
ka: 0.38
|
||||||
|
kb: 0.004
|
||||||
|
jimenez:
|
||||||
|
ad: 0.0
|
||||||
|
bd: 0.0
|
||||||
|
kd: 0.05
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the parameters for the wake velocity deficit model
|
||||||
|
# selected above.
|
||||||
|
# Additional blocks can be provided for
|
||||||
|
# models that are not enabled, but the enabled model
|
||||||
|
# must have a corresponding parameter block.
|
||||||
|
wake_velocity_parameters:
|
||||||
|
cc:
|
||||||
|
a_s: 0.179367259
|
||||||
|
b_s: 0.0118889215
|
||||||
|
c_s1: 0.0563691592
|
||||||
|
c_s2: 0.13290157
|
||||||
|
a_f: 3.11
|
||||||
|
b_f: -0.68
|
||||||
|
c_f: 2.41
|
||||||
|
alpha_mod: 1.0
|
||||||
|
gauss:
|
||||||
|
alpha: 0.58
|
||||||
|
beta: 0.077
|
||||||
|
ka: 0.38
|
||||||
|
kb: 0.004
|
||||||
|
jensen:
|
||||||
|
we: 0.05
|
||||||
|
|
||||||
|
###
|
||||||
|
# Configure the parameters for the wake turbulence model
|
||||||
|
# selected above.
|
||||||
|
# Additional blocks can be provided for
|
||||||
|
# models that are not enabled, but the enabled model
|
||||||
|
# must have a corresponding parameter block.
|
||||||
|
wake_turbulence_parameters:
|
||||||
|
crespo_hernandez:
|
||||||
|
initial: 0.1
|
||||||
|
constant: 0.5
|
||||||
|
ai: 0.8
|
||||||
|
downstream: -0.32
|
83
floris_module/src/main.py
Normal file
83
floris_module/src/main.py
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
import floris.layout_visualization as layoutviz
|
||||||
|
from floris import FlorisModel
|
||||||
|
from floris.flow_visualization import visualize_cut_plane
|
||||||
|
|
||||||
|
|
||||||
|
# Create the plotting objects using matplotlib
|
||||||
|
fig, axarr = plt.subplots(3, 3, figsize=(16, 10), sharex=False)
|
||||||
|
axarr = axarr.flatten()
|
||||||
|
|
||||||
|
MIN_WS = 1.0
|
||||||
|
MAX_WS = 8.0
|
||||||
|
|
||||||
|
# Initialize FLORIS with the given input file.
|
||||||
|
fmodel = FlorisModel("./gch.yaml")
|
||||||
|
|
||||||
|
# Change to 5-turbine layout with a wind direction from northwest
|
||||||
|
fmodel.set(
|
||||||
|
layout_x=[0, 0, 1000, 1000, 1000], layout_y=[0, 500, 0, 500, 1000], wind_directions=[300]
|
||||||
|
)
|
||||||
|
|
||||||
|
# Plot 1: Visualize the flow
|
||||||
|
ax = axarr[0]
|
||||||
|
# Plot a horizatonal slice of the initial configuration
|
||||||
|
horizontal_plane = fmodel.calculate_horizontal_plane(height=90.0)
|
||||||
|
visualize_cut_plane(
|
||||||
|
horizontal_plane,
|
||||||
|
ax=ax,
|
||||||
|
min_speed=MIN_WS,
|
||||||
|
max_speed=MAX_WS,
|
||||||
|
)
|
||||||
|
# Plot the turbine points, setting the color to white
|
||||||
|
layoutviz.plot_turbine_points(fmodel, ax=ax, plotting_dict={"color": "w"})
|
||||||
|
ax.set_title("Flow visualization and turbine points")
|
||||||
|
|
||||||
|
# Plot 2: Show a particular flow case
|
||||||
|
ax = axarr[1]
|
||||||
|
turbine_names = [f"T{i}" for i in [10, 11, 12, 13, 22]]
|
||||||
|
layoutviz.plot_turbine_points(fmodel, ax=ax)
|
||||||
|
layoutviz.plot_turbine_labels(
|
||||||
|
fmodel, ax=ax, turbine_names=turbine_names, show_bbox=True, bbox_dict={"facecolor": "r"}
|
||||||
|
)
|
||||||
|
ax.set_title("Show turbine names with a red bounding box")
|
||||||
|
|
||||||
|
|
||||||
|
# Plot 2: Show turbine rotors on flow
|
||||||
|
ax = axarr[2]
|
||||||
|
fmodel.set(yaw_angles=np.array([[0., 30., 0., 0., 0.]]))
|
||||||
|
horizontal_plane = fmodel.calculate_horizontal_plane(height=90.0)
|
||||||
|
visualize_cut_plane(horizontal_plane, ax=ax, min_speed=MIN_WS, max_speed=MAX_WS)
|
||||||
|
layoutviz.plot_turbine_rotors(fmodel, ax=ax, yaw_angles=np.array([[0.0, 30.0, 0.0, 0.0, 0.0]]))
|
||||||
|
ax.set_title("Flow visualization with yawed turbine")
|
||||||
|
|
||||||
|
# Plot 3: Show the layout, including wake directions
|
||||||
|
ax = axarr[3]
|
||||||
|
layoutviz.plot_turbine_points(fmodel, ax=ax)
|
||||||
|
layoutviz.plot_turbine_labels(fmodel, ax=ax, turbine_names=turbine_names)
|
||||||
|
layoutviz.plot_waking_directions(fmodel, ax=ax)
|
||||||
|
ax.set_title("Show turbine names and wake direction")
|
||||||
|
|
||||||
|
# Plot 4: Plot a subset of the layout, and limit directions less than 7D
|
||||||
|
ax = axarr[4]
|
||||||
|
layoutviz.plot_turbine_points(fmodel, ax=ax, turbine_indices=[0, 1, 2, 3])
|
||||||
|
layoutviz.plot_turbine_labels(
|
||||||
|
fmodel, ax=ax, turbine_names=turbine_names, turbine_indices=[0, 1, 2, 3]
|
||||||
|
)
|
||||||
|
layoutviz.plot_waking_directions(fmodel, ax=ax, turbine_indices=[0, 1, 2, 3], limit_dist_D=7)
|
||||||
|
ax.set_title("Plot a subset and limit wake line distance")
|
||||||
|
|
||||||
|
# Plot with a shaded region
|
||||||
|
ax = axarr[5]
|
||||||
|
layoutviz.plot_turbine_points(fmodel, ax=ax)
|
||||||
|
layoutviz.shade_region(np.array([[0, 0], [300, 0], [300, 1000], [0, 700]]), ax=ax)
|
||||||
|
ax.set_title("Plot with a shaded region")
|
||||||
|
|
||||||
|
# Change hub heights and plot as a proxy for terrain
|
||||||
|
ax = axarr[6]
|
||||||
|
fmodel.core.farm.hub_heights = np.array([110, 90, 100, 100, 95])
|
||||||
|
layoutviz.plot_farm_terrain(fmodel, ax=ax)
|
||||||
|
|
||||||
|
plt.show()
|
Loading…
Reference in New Issue
Block a user