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

Merge request reports

Loading