Source code for foxes.models.turbine_models.thrust2ct
import numpy as np
from foxes.core import TurbineModel
import foxes.variables as FV
[docs]
class Thrust2Ct(TurbineModel):
"""
Calculates ct from thrust force data.
Attributes
----------
thrust_var: str
Name of the thrust variable
WSCT: str
The wind speed variable for ct lookup
:group: models.turbine_models
"""
[docs]
def __init__(self, thrust_var=FV.T, var_ws_ct=FV.REWS2):
"""
Constructor.
Parameters
----------
thrust_var: str
Name of the thrust variable
var_ws_ct: str
The wind speed variable for ct lookup
"""
super().__init__()
self.thrust_var = thrust_var
self.WSCT = var_ws_ct
[docs]
def __repr__(self):
a = f"thrust_var={self.thrust_var}, var_ws_ct={self.WSCT}"
return f"{type(self).__name__}({a})"
[docs]
def output_farm_vars(self, algo):
"""
The variables which are being modified by the model.
Parameters
----------
algo: foxes.core.Algorithm
The calculation algorithm
Returns
-------
output_vars: list of str
The output variable names
"""
return [FV.CT]
[docs]
def calculate(self, algo, mdata, fdata, st_sel):
"""
The main model calculation.
This function is executed on a single chunk of data,
all computations should be based on numpy arrays.
Parameters
----------
algo: foxes.core.Algorithm
The calculation algorithm
mdata: foxes.core.MData
The model data
fdata: foxes.core.FData
The farm data
st_sel: slice or numpy.ndarray of bool
The state-turbine selection,
for shape: (n_states, n_turbines)
Returns
-------
results: dict
The resulting data, keys: output variable str.
Values: numpy.ndarray with shape (n_states, n_turbines)
"""
ct = fdata[FV.CT]
T = fdata[self.thrust_var][st_sel]
rho = fdata[FV.RHO][st_sel]
A = np.pi * (fdata[FV.D][st_sel] / 2) ** 2
ws = fdata[self.WSCT][st_sel]
ct[st_sel] = 2 * T / (rho * A * ws**2)
return {FV.CT: ct}