Source code for foxes.core.turbine_type

import foxes.constants as FC
from foxes.utils import all_subclasses

from .turbine_model import TurbineModel


[docs] class TurbineType(TurbineModel): """ Abstract base class for turbine type models. Rotor diameter and hub height can be overwritten by individual settings in the Turbine object. Attributes ---------- name: str The model name D: float The rotor diameter H: float The hub height P_nominal: float The nominal power in kW P_unit: str The unit of power :group: core """
[docs] def __init__(self, name=None, D=None, H=None, P_nominal=None, P_unit="kW"): """ Constructor. Parameters ---------- name: str, optional The model name D: float, optional The rotor diameter H: float, optional The hub height P_nominal: float, optional The nominal power in kW P_unit: str The unit of power, choices: W, kW, MW, GW """ super().__init__() self.name = name if name is not None else type(self).__name__ self.D = D self.H = H self.P_nominal = P_nominal self.P_unit = P_unit if P_unit not in FC.P_UNITS: raise KeyError( f"Turbine type '{self.name}': Unkown P_unit '{P_unit}', expecting {list(FC.P_UNITS.keys())}" )
[docs] def __repr__(self): a = f"D={self.D}, H={self.H}, P_nominal={self.P_nominal}, P_unit={self.P_unit}" return f"{type(self).__name__}({a})"
[docs] def modify_cutin(self, modify_ct, modify_P): """ Modify the data such that a discontinuity at cutin wind speed is avoided Parameters ---------- variable: str The target variable modify_ct: bool Flag for modification of the ct curve modify_P: bool Flag for modification of the power curve """ if modify_ct or modify_P: raise NotImplementedError( f"Turbine type '{self.name}': Continuous cutin not implemented for modify_ct = {modify_ct}, modify_P = {modify_P}" )
[docs] @classmethod def new(cls, ttype_type, *args, **kwargs): """ Run-time turbine type factory. Parameters ---------- ttype_type: str The selected derived class name args: tuple, optional Additional parameters for constructor kwargs: dict, optional Additional parameters for constructor """ if ttype_type is None: return None allc = all_subclasses(cls) found = ttype_type in [scls.__name__ for scls in allc] if found: for scls in allc: if scls.__name__ == ttype_type: return scls(*args, **kwargs) else: estr = "Turbine type class '{}' is not defined, available types are \n {}".format( ttype_type, sorted([i.__name__ for i in allc]) ) raise KeyError(estr)