Source code for foxes.input.windio.read_farm

import numpy as np
import pandas as pd

from foxes.utils import Dict
from foxes.core import Turbine, TurbineType
import foxes.variables as FV


[docs] def read_turbine_type(wio_trbns, algo_dict, ws_exp_P, ws_exp_ct, verbosity): """ Reads the turbine type from windio Parameters ---------- wio_trbns: dict The windio turbines data algo_dict: dict The algorithm dictionary ws_exp_P: int The REWS exponent for power ws_exp_ct: int The REWS exponent for ct verbosity: int The verbosity level, 0=silent Returns ------- ttype: str The turbine type model name :group: input.windio """ tname = wio_trbns.pop("name") if verbosity > 2: print(" Reading wio_trbns") print(" Name:", tname) print(" Contents:", [k for k in wio_trbns.keys()]) # read performance: performance = Dict(wio_trbns["performance"], name="performance") if verbosity > 2: print(" Reading performance") print(" Contents:", [k for k in performance.keys()]) # P, ct data: if "power_curve" in performance: power_curve = Dict(performance["power_curve"], name="power_curve") if verbosity > 2: print(" Reading power_curve") print(" Contents:", [k for k in power_curve.keys()]) P = power_curve["power_values"] ws_P = power_curve["power_wind_speeds"] ct_curve = Dict(performance["Ct_curve"], name="Ct_values") if verbosity > 2: print(" Reading Ct_curve") print(" Contents:", [k for k in ct_curve.keys()]) ct = ct_curve["Ct_values"] ws_ct = ct_curve["Ct_wind_speeds"] data_P = pd.DataFrame(data={"ws": ws_P, "P": P}) data_ct = pd.DataFrame(data={"ws": ws_ct, "ct": ct}) def _get_wse_var(wse): if wse not in [1, 2, 3]: raise ValueError(f"Expecting wind speed exponent 1, 2 or 3, got {wse}") return FV.REWS if wse == 1 else (FV.REWS2 if wse == 2 else FV.REWS3) if verbosity > 2: print(f" Creating model '{tname}'") print(f" Turbine type class: PCtFromTwo") algo_dict["mbook"].turbine_types[tname] = TurbineType.new( ttype_type="PCtFromTwo", data_source_P=data_P, data_source_ct=data_ct, col_ws_P_file="ws", col_ws_ct_file="ws", col_P="P", col_ct="ct", H=wio_trbns["hub_height"], D=wio_trbns["rotor_diameter"], var_ws_ct=_get_wse_var(ws_exp_ct), var_ws_P=_get_wse_var(ws_exp_P), rho=1.225, ) if verbosity > 2: print(" ", algo_dict["mbook"].turbine_types[tname]) # P, ct data: elif "Cp_curve" in performance: cp_curve = Dict(performance["Cp_curve"], name="Cp_curve") if verbosity > 2: print(" Reading Cp_curve") print(" Contents:", [k for k in cp_curve.keys()]) cp = cp_curve["Cp_values"] ws_cp = cp_curve["Cp_wind_speeds"] ct_curve = Dict(performance["Ct_curve"], name="Ct_values") if verbosity > 2: print(" Reading Ct_curve") print(" Contents:", [k for k in ct_curve.keys()]) ct = ct_curve["Ct_values"] ws_ct = ct_curve["Ct_wind_speeds"] data_cp = pd.DataFrame(data={"ws": ws_cp, "cp": cp}) data_ct = pd.DataFrame(data={"ws": ws_ct, "ct": ct}) if verbosity > 2: print(f" Creating model '{tname}'") print(f" Turbine type class: CpCtFromTwo") algo_dict["mbook"].turbine_types[tname] = TurbineType.new( ttype_type="CpCtFromTwo", data_source_cp=data_cp, data_source_ct=data_ct, col_ws_cp_file="ws", col_ws_ct_file="ws", col_cp="cp", col_ct="ct", H=wio_trbns["hub_height"], D=wio_trbns["rotor_diameter"], ) else: raise KeyError(f"Expecting either 'power_curve' or 'Cp_curve'") return tname
[docs] def read_layout(lname, ldict, algo_dict, ttype, verbosity=1): """ Read wind farm layout from windio input Parameters ---------- lname: str The layout name ldict: dict The layout data algo_dict: dict The algorithm dictionary ttype: str Name of the turbine type model verbosity: int The verbosity level, 0=silent Returns ------- states: foxes.core.States The states object :group: input.windio """ if verbosity > 2: print(f" Reading '{lname}'") cdict = Dict(ldict["coordinates"], name="coordinates") farm = algo_dict["farm"] for xy in zip(cdict["x"], cdict["y"]): farm.add_turbine( Turbine(xy=np.array(xy), turbine_models=[ttype]), verbosity=verbosity-3, ) if verbosity > 2: print(f" Added {farm.n_turbines} wio_trbns of type '{ttype}'")