Source code for foxes.models.turbine_types.CpCt_from_two
import numpy as np
import pandas as pd
from .PCt_from_two import PCtFromTwo
from foxes.data import parse_Pct_two_files
from foxes.utils import PandasFileHelper
import foxes.constants as FC
[docs]
class CpCtFromTwo(PCtFromTwo):
"""
Calculate power and ct by interpolating
cp and ct from two files (or two pandas
DataFrames).
:group: models.turbine_types
"""
[docs]
def __init__(
self,
data_source_cp,
data_source_ct,
col_ws_cp_file="ws",
col_cp="cp",
rho=1.225,
pd_file_read_pars_cp={},
pd_file_read_pars_ct={},
**parameters,
):
"""
Constructor.
Parameters
----------
data_source_cp: str or pandas.DataFrame
The file path, static name, or data
data_source_ct: str or pandas.DataFrame
The file path, static name, or data
col_ws_cp_file: str
The wind speed column in the file of the cp curve
col_cp: str
The cp column
rho: float
The air density for the curves
pd_file_read_pars_cp: dict
Parameters for pandas cp file reading
pd_file_read_pars_ct: dict
Parameters for pandas ct file reading
parameters: dict, optional
Additional parameters for PCtFromTwo class
"""
if not isinstance(data_source_cp, pd.DataFrame) or not isinstance(
data_source_ct, pd.DataFrame
):
pars = parse_Pct_two_files(data_source_cp, data_source_ct)
data_cp = PandasFileHelper.read_file(data_source_cp, **pd_file_read_pars_cp)
data_ct = PandasFileHelper.read_file(data_source_ct, **pd_file_read_pars_ct)
else:
data_cp = data_source_cp
data_ct = data_source_ct
pars = parameters
D = pars["D"]
A = np.pi * (D / 2) ** 2
ws = data_cp[col_ws_cp_file].to_numpy()
cp = data_cp[col_cp].to_numpy()
P_unit = pars.pop("P_unit", FC.kW)
ws_delta = 0.0001
ws_min = np.min(ws)
ws_max = np.max(ws)
N = int((ws_max - ws_min) / ws_delta)
data_P = pd.DataFrame(index=range(N), dtype=FC.DTYPE)
data_P["ws"] = np.linspace(ws_min, ws_max, N, endpoint=True)
data_P["cp"] = np.interp(data_P["ws"], ws, cp, left=0, right=0)
data_P["P"] = (
0.5 * rho * A * data_P["cp"] * data_P["ws"] ** 3 / FC.P_UNITS[P_unit]
)
super().__init__(
data_P,
data_ct,
col_ws_P_file="ws",
col_P="P",
rho=rho,
P_unit=P_unit,
**pars,
)