Propagate down wind broadcast to right dimensions
With current master this setup:
import numpy as np
from py_wake.wind_turbines import WindTurbine
from py_wake.wind_turbines.power_ct_functions import PowerCtTabular
from py_wake.site import XRSite
from py_wake.deficit_models import ZongGaussianDeficit
import xarray as xr
from py_wake.rotor_avg_models import GaussianOverlapAvgModel
from py_wake.wind_farm_models import PropagateUpDownIterative
from py_wake.turbulence_models import GCLTurbulence
from py_wake.site.shear import PowerShear
x = np.array(
[
0.0,
319.0,
230.0,
500.0,
774.0,
1030.0,
565.0,
909.0,
1172.0,
1497.0,
960.0,
1278.0,
1542.0,
1811.0,
]
)
y = np.array(
[
0.0,
277.0,
382.0,
88.0,
172.0,
418.0,
601.0,
276.0,
58.0,
183.0,
689.0,
503.0,
283.0,
4.0,
]
)
hub_height = 90
diam = 82
n_wt = 14
# %% Power curve
u = np.concatenate(([0], np.arange(4, 14.5, 0.5), [22], [35]))
power = [
0,
55,
110,
186,
264,
342,
424,
506,
618,
730,
865,
999,
1195,
1391,
1558,
1724,
1829,
1909,
1960,
2002,
2025,
2044,
2050,
0,
]
ct = np.concatenate(([0], np.full(22, 8 / 9), [0])) # unknown
# %% Make turbine list and plot wind farm
my_wt = WindTurbine(
name="my_wt",
diameter=diam,
hub_height=hub_height,
powerCtFunction=PowerCtTabular(u, power, "kW", ct, method="pchip"),
)
# %% Wind data
f = [0.036, 0.039, 0.052, 0.07, 0.084, 0.064, 0.086, 0.118, 0.152, 0.147, 0.1, 0.052]
A = [
9.177,
9.782,
9.532,
9.91,
10.043,
9.594,
9.584,
10.515,
11.399,
11.687,
11.637,
10.088,
]
k = [2.393, 2.447, 2.412, 2.592, 2.756, 2.596, 2.584, 2.549, 2.471, 2.607, 2.627, 2.326]
wd = np.linspace(0, 360, len(f), endpoint=False)
ti = 0.1
# %% Make site
site = XRSite(
ds=xr.Dataset(data_vars={"WS": 5.7, "P": ("wd", f), "TI": ti}, coords={"wd": wd}),
shear=PowerShear(h_ref=hub_height, alpha=0.2),
initial_position=np.array([x, y]).T,
)
# %% Make wind deficit model and wind farm model
wdm = ZongGaussianDeficit(
use_effective_ws=True, rotorAvgModel=GaussianOverlapAvgModel()
)
from py_wake.deficit_models import HybridInduction
wfm = PropagateUpDownIterative(
site,
my_wt,
wdm,
blockage_deficitModel=HybridInduction(use_effective_ws=True),
turbulenceModel=GCLTurbulence(),
)
initial = np.array(site.initial_position) # user-defined initial turbine layouts
design_vars = dict(zip("xy", (initial[:, :2]).T))
wss = np.linspace(4, 25, 30)
taep = (
wfm(design_vars["x"], design_vars["y"], wd=wd, ws=wss).aep().sum()
) # run the model
print(taep)
aep_sum_ws = 0
for ws in wss:
aep_sum_ws += wfm(design_vars["x"], design_vars["y"], wd=wd, ws=ws).aep().sum()
print(aep_sum_ws)
Results in error:
Traceback (most recent call last):
File "/home/ernie/code/TopFarm2/sandbox.py", line 157, in <module>
wfm(design_vars["x"], design_vars["y"], wd=wd, ws=np.linspace(3, 25, 30))
File "/home/ernie/code/TopFarm2/.pixi/envs/default/lib/python3.11/site-packages/py_wake/wind_farm_models/wind_farm_model.py", line 132, in __call__
res = self._run(x, y, h=h, type=type, wd=wd, ws=ws, time=time, verbose=verbose,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ernie/code/TopFarm2/.pixi/envs/default/lib/python3.11/site-packages/py_wake/wind_farm_models/wind_farm_model.py", line 70, in _run
return self.calc_wt_interaction(h_i=h, type_i=type,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ernie/code/TopFarm2/.pixi/envs/default/lib/python3.11/site-packages/py_wake/wind_farm_models/engineering_models.py", line 246, in calc_wt_interaction
WS_eff_ilk, TI_eff_ilk, ct_ilk, kwargs = self._calc_wt_interaction(**kwargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ernie/code/TopFarm2/.pixi/envs/default/lib/python3.11/site-packages/py_wake/wind_farm_models/engineering_models.py", line 491, in _calc_wt_interaction
WS_eff_wake_ilk, TI_eff_ilk, ct_ilk, res_kwargs = self._propagate_deficit(
^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ernie/code/TopFarm2/.pixi/envs/default/lib/python3.11/site-packages/py_wake/wind_farm_models/engineering_models.py", line 731, in _propagate_deficit
WS_eff_jlk, ct_jlk = np.array(WS_eff_mk), np.array(ct_jlk)
^^^^^^^^^^^^^^^^^^^
ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 2 dimensions. The detected shape was (14, 12) + inhomogeneous part.
This fixes the issue
Edited by Ernestas Simutis