floris.core.turbine.unified_momentum_model#

Functions

UMM_rotor_axial_induction(Cts, yaw_angles)

Computes the axial induction of a yawed rotor given the yaw-aligned thrust coefficient and yaw angles using the yawed actuator disk model developed at MIT as described in Heck et al. 2023.

UMM_rotor_velocity_yaw_correction(Cts, ...)

Computes adjusted rotor wind speeds given the yaw-aligned thrust coefficient, yaw angles, and axial induction values using the yawed actuator disk model developed at MIT as described in Heck et al. 2023.

adaptivefixedpointiteration([max_iter, ...])

Class decorator which adds a __call__ method to the class which performs fixed-point iteration.

fixedpointiteration([max_iter, tolerance, ...])

Class decorator which adds a __call__ method to the class which performs fixed-point iteration.

Classes

FixedPointIterationCompatible(*args, **kwargs)

FixedPointIterationResult(converged, niter, ...)

Heck([v4_correction])

Solves the iterative momentum equation for an actuator disk model.

LimitedHeck()

Solves the limiting case when v_4 << u_4.

MomentumSolution(Ctprime, yaw, an, u4, v4, ...)

Stores the results of the Unified Momentum model solution.

UnifiedMomentumModelTurbine()

Turbine operation model as described by Heck et al. (2023).

floris.core.turbine.unified_momentum_model.UMM_rotor_axial_induction(Cts, yaw_angles)[source]#

Computes the axial induction of a yawed rotor given the yaw-aligned thrust coefficient and yaw angles using the yawed actuator disk model developed at MIT as described in Heck et al. 2023. Assumes the modified thrust coefficient, C_T', is invariant to yaw misalignment angle.

Uses form of C_T' from Eq. (19) of Calaf et al., 2010, https://doi.org/10.1063/1.3291077

Return type:

ndarray[tuple[int, ...], dtype[float64]]

Parameters:
  • Cts (ndarray[tuple[int, ...], dtype[float64]])

  • yaw_angles (ndarray[tuple[int, ...], dtype[float64]])

Args

Cts (NDArrayFloat): Yaw-aligned thrust coefficient(s). yaw_angles (NDArrayFloat): Rotor yaw angle(s) in degrees.

Returns: NDArrayFloat: Axial induction factor(s) of the yawed rotor.

floris.core.turbine.unified_momentum_model.UMM_rotor_velocity_yaw_correction(Cts, yaw_angles, axial_inductions, rotor_effective_velocities)[source]#

Computes adjusted rotor wind speeds given the yaw-aligned thrust coefficient, yaw angles, and axial induction values using the yawed actuator disk model developed at MIT as described in Heck et al. 2023. Assumes the modified thrust coefficient, C_T', is invariant to yaw misalignment angle.

Return type:

ndarray[tuple[int, ...], dtype[float64]]

Parameters:
  • Cts (ndarray[tuple[int, ...], dtype[float64]])

  • yaw_angles (ndarray[tuple[int, ...], dtype[float64]])

  • axial_inductions (ndarray[tuple[int, ...], dtype[float64]])

  • rotor_effective_velocities (ndarray[tuple[int, ...], dtype[float64]])

Args

Cts (NDArrayFloat): Yaw-aligned thrust coefficient(s). yaw_angles (NDArrayFloat): Rotor yaw angle(s) in degrees. axial_induction (NDArrayFloat): Rotor axial induction(s); this should follow the MIT model yaw dependent derivation and probably gotten from UMM_rotor_axial_induction. rotor_effective_velocities (NDArrayFloat) rotor effective wind speed(s) at the rotor.

Returns: NDArrayFloat: corrected rotor effective wind speed(s) of the yawed rotor.

class floris.core.turbine.unified_momentum_model.FixedPointIterationCompatible(*args, **kwargs)[source]#
residual(*args, **kwargs)[source]#
Return type:

Tuple[Union[Buffer, _SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[bool | int | float | complex | str | bytes]]]

initial_guess(*args, **kwargs)[source]#
Return type:

Tuple[Union[Buffer, _SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[bool | int | float | complex | str | bytes]]]

class floris.core.turbine.unified_momentum_model.FixedPointIterationResult(converged, niter, relax, max_resid, x)[source]#
Parameters:
  • converged (bool)

  • niter (int)

  • relax (float)

  • max_resid (float)

  • x (Buffer | _SupportsArray[dtype[Any]] | _NestedSequence[_SupportsArray[dtype[Any]]] | bool | int | float | complex | str | bytes | _NestedSequence[bool | int | float | complex | str | bytes])

converged: bool#
niter: int#
relax: float#
max_resid: float#
x: Union[Buffer, _SupportsArray[dtype[Any]], _NestedSequence[_SupportsArray[dtype[Any]]], bool, int, float, complex, str, bytes, _NestedSequence[bool | int | float | complex | str | bytes]]#
floris.core.turbine.unified_momentum_model.fixedpointiteration(max_iter=100, tolerance=1e-06, relaxation=0.0)[source]#

Class decorator which adds a __call__ method to the class which performs fixed-point iteration.

Return type:

FixedPointIterationCompatible

Parameters:
  • max_iter (int)

  • tolerance (float)

  • relaxation (float)

Args:

max_iter (int): Maximum number of iterations (default: 100) tolerance (float): Convergence criteria (default: 1e-6) relaxation (float): Relaxation factor between 0 and 1 (default: 0.0)

The class must contain 2 mandatory methods and 3 optional method:

mandatory: initial_guess(self, *args, **kwargs) residual(self, x, *args, **kwargs)

optional: pre_process(self, *args, **kwargs) # Optional post_process(self, result:FixedPointIterationResult) # Optional callback(self, x) # Optional

floris.core.turbine.unified_momentum_model.adaptivefixedpointiteration(max_iter=100, tolerance=1e-06, relaxations=[0.0])[source]#

Class decorator which adds a __call__ method to the class which performs fixed-point iteration. Same as fixedpointiteration, but takes a list of relaxation factors, and iterates over all of them in order until convergence is reached.

Return type:

Callable

Parameters:
  • max_iter (int)

  • tolerance (float)

  • relaxations (List[float])

class floris.core.turbine.unified_momentum_model.UnifiedMomentumModelTurbine[source]#

Turbine operation model as described by Heck et al. (2023).

power(velocities, air_density, yaw_angles, average_method='cubic-mean', cubature_weights=None, **kwargs)[source]#
Return type:

None

Parameters:
  • power_thrust_table (dict)

  • velocities (ndarray[tuple[int, ...], dtype[float64]])

  • air_density (float)

  • yaw_angles (ndarray[tuple[int, ...], dtype[float64]])

  • average_method (str)

  • cubature_weights (ndarray[tuple[int, ...], dtype[float64]] | None)

thrust_coefficient(velocities, air_density, yaw_angles, average_method='cubic-mean', cubature_weights=None, **kwargs)[source]#
Return type:

None

Parameters:
  • power_thrust_table (dict)

  • velocities (ndarray[tuple[int, ...], dtype[float64]])

  • air_density (float)

  • yaw_angles (ndarray[tuple[int, ...], dtype[float64]])

  • average_method (str)

  • cubature_weights (ndarray[tuple[int, ...], dtype[float64]] | None)

axial_induction(velocities, air_density, yaw_angles, average_method='cubic-mean', cubature_weights=None, **kwargs)[source]#
Parameters:
  • power_thrust_table (dict)

  • velocities (ndarray[tuple[int, ...], dtype[float64]])

  • air_density (float)

  • yaw_angles (ndarray[tuple[int, ...], dtype[float64]])

  • average_method (str)

  • cubature_weights (ndarray[tuple[int, ...], dtype[float64]] | None)

class floris.core.turbine.unified_momentum_model.MomentumSolution(Ctprime, yaw, an, u4, v4, x0, dp, dp_NL=0.0, niter=1, converged=True, beta=0.0)[source]#

Stores the results of the Unified Momentum model solution.

Parameters:
  • Ctprime (float)

  • yaw (float)

  • an (float | ndarray[tuple[int, ...], dtype[float64]])

  • u4 (float | ndarray[tuple[int, ...], dtype[float64]])

  • v4 (float | ndarray[tuple[int, ...], dtype[float64]])

  • x0 (float | ndarray[tuple[int, ...], dtype[float64]])

  • dp (float | ndarray[tuple[int, ...], dtype[float64]])

  • dp_NL (float | ndarray[tuple[int, ...], dtype[float64]] | None)

  • niter (int | None)

  • converged (bool | None)

  • beta (float | None)

Ctprime: float#
yaw: float#
an: Union[float, ndarray[tuple[int, ...], dtype[float64]]]#
u4: Union[float, ndarray[tuple[int, ...], dtype[float64]]]#
v4: Union[float, ndarray[tuple[int, ...], dtype[float64]]]#
x0: Union[float, ndarray[tuple[int, ...], dtype[float64]]]#
dp: Union[float, ndarray[tuple[int, ...], dtype[float64]]]#
dp_NL: Union[float, ndarray[tuple[int, ...], dtype[float64]], None] = 0.0#
niter: Optional[int] = 1#
converged: Optional[bool] = True#
beta: Optional[float] = 0.0#
property Ct#

Returns the thrust coefficient Ct.

property Cp#

Returns the power coefficient Cp.

class floris.core.turbine.unified_momentum_model.LimitedHeck[source]#

Solves the limiting case when v_4 << u_4. (Eq. 2.19, 2.20). Also takes Numpy array arguments.

class floris.core.turbine.unified_momentum_model.Heck(v4_correction=1.0)[source]#

Solves the iterative momentum equation for an actuator disk model.

Parameters:

v4_correction (float)

initial_guess(Ctprime, yaw)[source]#
residual(x, Ctprime, yaw)[source]#

Residual function of yawed-actuator disk model in Eq. 2.15.

Return type:

ndarray

Parameters:
  • x (ndarray)

  • Ctprime (float)

  • yaw (float)

Args:

x (np.ndarray): (a, u4, v4) Ctprime (float): Rotor thrust coefficient. yaw (float): Rotor yaw angle (radians).

Returns:

np.ndarray: residuals of induction and outlet velocities.

post_process(result, Ctprime, yaw)[source]#
Parameters:
  • Ctprime (float)

  • yaw (float)