-
Notifications
You must be signed in to change notification settings - Fork 159
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
284 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,51 @@ | ||
name: Floris Benchmark | ||
# on: | ||
|
||
on: | ||
schedule: | ||
- cron: '0 3 * * *' # Runs daily at 3am UTC | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
branches: | ||
- main | ||
workflow_dispatch: # Allows manual triggering of the workflow | ||
|
||
|
||
permissions: | ||
# deployments permission to deploy GitHub pages website | ||
deployments: write | ||
# contents permission to update benchmark contents in gh-pages branch | ||
contents: write | ||
|
||
jobs: | ||
benchmark: | ||
name: Run FLORIS benchmarks | ||
runs-on: ubuntu-latest | ||
strategy: | ||
matrix: | ||
python-version: ["3.13"] | ||
steps: | ||
- uses: actions/checkout@v4 | ||
- name: Set up Python ${{ matrix.python-version }} | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
- name: Install project | ||
run: | | ||
python -m pip install --upgrade pip | ||
pip install -e ".[develop]" | ||
- name: Run benchmark | ||
run: | | ||
cd benchmarks | ||
pytest bench.py --benchmark-json output.json | ||
- name: Store benchmark result | ||
uses: benchmark-action/github-action-benchmark@v1 | ||
with: | ||
name: Python Benchmark with pytest-benchmark | ||
tool: 'pytest' | ||
output-file-path: benchmarks/output.json | ||
# Use personal access token instead of GITHUB_TOKEN due to https://github.community/t/github-action-not-triggering-gh-pages-upon-push/16096 | ||
github-token: ${{ secrets.GITHUB_TOKEN }} | ||
auto-push: true |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,142 @@ | ||
from pathlib import Path | ||
|
||
import numpy as np | ||
import pytest | ||
|
||
from floris import ( | ||
FlorisModel, | ||
TimeSeries, | ||
) | ||
from floris.core.turbine.operation_models import POWER_SETPOINT_DEFAULT | ||
from floris.heterogeneous_map import HeterogeneousMap | ||
|
||
|
||
TEST_DATA = Path(__file__).resolve().parent / "data" | ||
YAML_INPUT = TEST_DATA / "input_full.yaml" | ||
|
||
N = 100 | ||
|
||
|
||
def test_benchmark_set(benchmark): | ||
fmodel = FlorisModel(configuration=YAML_INPUT) | ||
wind_directions = np.linspace(0, 360, N) | ||
wind_speeds = np.ones(N) * 8 | ||
turbulence_intensities = np.ones(N) * 0.06 | ||
|
||
benchmark( | ||
fmodel.set, | ||
wind_directions=wind_directions, | ||
wind_speeds=wind_speeds, | ||
turbulence_intensities=turbulence_intensities, | ||
) | ||
|
||
|
||
def test_benchmark_run(benchmark): | ||
fmodel = FlorisModel(configuration=YAML_INPUT) | ||
wind_directions = np.linspace(0, 360, N) | ||
wind_speeds = np.ones(N) * 8 | ||
turbulence_intensities = np.ones(N) * 0.06 | ||
|
||
fmodel.set( | ||
wind_directions=wind_directions, | ||
wind_speeds=wind_speeds, | ||
turbulence_intensities=turbulence_intensities, | ||
) | ||
|
||
benchmark(fmodel.run) | ||
|
||
|
||
def test_benchmark_100_turbine_run(benchmark): | ||
fmodel = FlorisModel(configuration=YAML_INPUT) | ||
wind_directions = np.linspace(0, 360, N) | ||
wind_speeds = np.ones(N) * 8 | ||
turbulence_intensities = np.ones(N) * 0.06 | ||
|
||
fmodel.set( | ||
wind_directions=wind_directions, | ||
wind_speeds=wind_speeds, | ||
turbulence_intensities=turbulence_intensities, | ||
layout_x=np.linspace(0, 1000, 100), | ||
layout_y=np.linspace(0, 1000, 100), | ||
) | ||
|
||
benchmark(fmodel.run) | ||
|
||
|
||
def test_benchmark_het_set(benchmark): | ||
# Define a 2D het map and confirm the results are as expected | ||
# when applied to FLORIS | ||
|
||
# The side of the flow which is accelerated reverses for east versus west | ||
het_map = HeterogeneousMap( | ||
x=np.array([0.0, 0.0, 500.0, 500.0]), | ||
y=np.array([0.0, 500.0, 0.0, 500.0]), | ||
speed_multipliers=np.array( | ||
[ | ||
[1.0, 2.0, 1.0, 2.0], # Top accelerated | ||
[2.0, 1.0, 2.0, 1.0], # Bottom accelerated | ||
] | ||
), | ||
wind_directions=np.array([270.0, 90.0]), | ||
wind_speeds=np.array([8.0, 8.0]), | ||
) | ||
|
||
# Get the FLORIS model | ||
fmodel = FlorisModel(configuration=YAML_INPUT) | ||
|
||
time_series = TimeSeries( | ||
wind_directions=np.linspace(0, 360, N), | ||
wind_speeds=8.0, | ||
turbulence_intensities=0.06, | ||
heterogeneous_map=het_map, | ||
) | ||
|
||
# Set the model to a turbines perpinducluar to | ||
# east/west flow with 0 turbine closer to bottom and | ||
# turbine 1 closer to top | ||
benchmark( | ||
fmodel.set, | ||
wind_data=time_series, | ||
layout_x=[250.0, 250.0], | ||
layout_y=[100.0, 400.0], | ||
) | ||
|
||
|
||
def test_benchmark_het_run(benchmark): | ||
# Define a 2D het map and confirm the results are as expected | ||
# when applied to FLORIS | ||
|
||
# The side of the flow which is accelerated reverses for east versus west | ||
het_map = HeterogeneousMap( | ||
x=np.array([0.0, 0.0, 500.0, 500.0]), | ||
y=np.array([0.0, 500.0, 0.0, 500.0]), | ||
speed_multipliers=np.array( | ||
[ | ||
[1.0, 2.0, 1.0, 2.0], # Top accelerated | ||
[2.0, 1.0, 2.0, 1.0], # Bottom accelerated | ||
] | ||
), | ||
wind_directions=np.array([270.0, 90.0]), | ||
wind_speeds=np.array([8.0, 8.0]), | ||
) | ||
|
||
# Get the FLORIS model | ||
fmodel = FlorisModel(configuration=YAML_INPUT) | ||
|
||
time_series = TimeSeries( | ||
wind_directions=np.linspace(0, 360, N), | ||
wind_speeds=8.0, | ||
turbulence_intensities=0.06, | ||
heterogeneous_map=het_map, | ||
) | ||
|
||
# Set the model to a turbines perpinducluar to | ||
# east/west flow with 0 turbine closer to bottom and | ||
# turbine 1 closer to top | ||
fmodel.set( | ||
wind_data=time_series, | ||
layout_x=[250.0, 250.0], | ||
layout_y=[100.0, 400.0], | ||
) | ||
|
||
benchmark(fmodel.run) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,90 @@ | ||
|
||
name: test_input | ||
description: Single turbine for testing | ||
floris_version: v4 | ||
|
||
logging: | ||
console: | ||
enable: false | ||
level: WARNING | ||
file: | ||
enable: false | ||
level: WARNING | ||
|
||
solver: | ||
type: turbine_grid | ||
turbine_grid_points: 3 | ||
|
||
farm: | ||
layout_x: | ||
- 0.0 | ||
layout_y: | ||
- 0.0 | ||
turbine_type: | ||
- nrel_5MW | ||
|
||
flow_field: | ||
air_density: 1.225 | ||
reference_wind_height: 90.0 | ||
turbulence_intensities: | ||
- 0.06 | ||
wind_directions: | ||
- 270.0 | ||
wind_shear: 0.12 | ||
wind_speeds: | ||
- 8.0 | ||
wind_veer: 0.0 | ||
|
||
wake: | ||
model_strings: | ||
combination_model: sosfs | ||
deflection_model: gauss | ||
turbulence_model: crespo_hernandez | ||
velocity_model: gauss | ||
|
||
enable_secondary_steering: true | ||
enable_yaw_added_recovery: true | ||
enable_active_wake_mixing: true | ||
enable_transverse_velocities: true | ||
|
||
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 | ||
|
||
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 | ||
turboparkgauss: | ||
A: 0.04 | ||
include_mirror_wake: True | ||
|
||
wake_turbulence_parameters: | ||
crespo_hernandez: | ||
initial: 0.01 | ||
constant: 0.9 | ||
ai: 0.83 | ||
downstream: -0.25 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -50,6 +50,7 @@ docs = [ | |
] | ||
develop = [ | ||
"pytest", | ||
"pytest-benchmark~=5.1", | ||
"pre-commit", | ||
"ruff", | ||
"isort" | ||
|