Skip to content

Commit

Permalink
Bugfix: Unexpected behavior in SerialRefine caused by quiet NaNs (#605)
Browse files Browse the repository at this point in the history
* Change argmax to nanargmax

* Add test example

* Add nan warning

* Updating warning message handling, removing temporary example.

* Cleaning up trailing whitespace as suggested by pre-commit.

* Remove unused import

---------

Co-authored-by: misha <msinner@nrel.gov>
Co-authored-by: Rafael M Mudafort <rafael.mudafort@nrel.gov>
  • Loading branch information
3 people committed Mar 17, 2023
1 parent 16628a0 commit 01684c8
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions floris/tools/optimization/yaw_optimization/yaw_optimizer_sr.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,13 @@
import numpy as np
import pandas as pd

from floris.logging_manager import LoggerBase

# from .yaw_optimizer_scipy import YawOptimizationScipy
from .yaw_optimization_base import YawOptimization


class YawOptimizationSR(YawOptimization):
class YawOptimizationSR(YawOptimization, LoggerBase):
def __init__(
self,
fi,
Expand Down Expand Up @@ -240,8 +242,17 @@ def optimize(self, print_progress=True):
# Evaluate grid of yaw angles, get farm powers and find optimal solutions
farm_powers = self._process_evaluation_grid()

# If farm powers contains any nans, then issue a warning
if np.any(np.isnan(farm_powers)):
err_msg = (
"NaNs found in farm powers during SerialRefine "
"optimization routine. Proceeding to maximize over yaw "
"settings that produce valid powers."
)
self.logger.warning(err_msg, stack_info=True)

# Find optimal solutions in new evaluation grid
args_opt = np.expand_dims(np.argmax(farm_powers, axis=0), axis=0)
args_opt = np.expand_dims(np.nanargmax(farm_powers, axis=0), axis=0)
farm_powers_opt_new = np.squeeze(
np.take_along_axis(farm_powers, args_opt, axis=0),
axis=0,
Expand Down

0 comments on commit 01684c8

Please sign in to comment.