diff --git a/py_wake/deficit_models/__init__.py b/py_wake/deficit_models/__init__.py index 7d062657c53980c2ac4684aff8ee7360bbebc920..0b6daac052278a3923476507bf922f5b33538817 100644 --- a/py_wake/deficit_models/__init__.py +++ b/py_wake/deficit_models/__init__.py @@ -10,3 +10,4 @@ from .gaussian import BastankhahGaussianDeficit, IEA37SimpleBastankhahGaussianDe NiayifarGaussianDeficit, ZongGaussianDeficit from .fuga import FugaDeficit, FugaYawDeficit from .gcl import GCLDeficit +from .no_wake import NoWakeDeficit diff --git a/py_wake/superposition_models.py b/py_wake/superposition_models.py index c338f9c234328343906dc323de66ec198655726f..cbc7b2a440b76adedbd8fa20e9a4fb9a45bd9cc1 100644 --- a/py_wake/superposition_models.py +++ b/py_wake/superposition_models.py @@ -46,7 +46,7 @@ class AddedTurbulenceSuperpositionModel(): return TI_xxx + self(add_turb_jxxx) -class SquaredSum(SuperpositionModel): +class SquaredSum(SuperpositionModel, AddedTurbulenceSuperpositionModel): def __call__(self, value_jxxx): return np.sqrt(np.sum(value_jxxx**2, 0)) @@ -55,9 +55,6 @@ class LinearSum(SuperpositionModel, AddedTurbulenceSuperpositionModel): def __call__(self, value_jxxx): return np.sum(value_jxxx, 0) - def calc_effective_TI(self, TI_xxx, add_turb_jxxx): - return TI_xxx + self(add_turb_jxxx) - class MaxSum(SuperpositionModel, AddedTurbulenceSuperpositionModel): def __call__(self, value_jxxx): diff --git a/py_wake/tests/test_superposition_models.py b/py_wake/tests/test_superposition_models.py index b3b8dce97cf5b65da89ba7a0414e8745402d27a3..a253a3f8b3a877a416275c1dfb03126c410864c5 100644 --- a/py_wake/tests/test_superposition_models.py +++ b/py_wake/tests/test_superposition_models.py @@ -2,16 +2,17 @@ import pytest import numpy as np from py_wake import NOJ from py_wake.site._site import UniformSite -from py_wake.superposition_models import LinearSum, SquaredSum, MaxSum +from py_wake.superposition_models import LinearSum, SquaredSum, MaxSum, SqrMaxSum from py_wake.tests import npt from py_wake.wind_farm_models.engineering_models import PropagateDownwind, All2AllIterative from py_wake.deficit_models.noj import NOJDeficit +from py_wake.turbulence_models import TurbulenceModel from py_wake.flow_map import HorizontalGrid from py_wake.tests.test_deficit_models.test_noj import NibeA0 import xarray as xr from py_wake.examples.data.hornsrev1 import V80 from py_wake.deficit_models.deficit_model import BlockageDeficitModel, WakeDeficitModel -from py_wake.deficit_models.selfsimilarity import SelfSimilarityDeficit +from py_wake.deficit_models import SelfSimilarityDeficit, NoWakeDeficit d02 = 8.1 - 5.7 d12 = 8.1 - 4.90473373 @@ -30,6 +31,27 @@ def test_superposition_models(superpositionModel, res): npt.assert_array_almost_equal(WS_eff_ilk[-1, 0, 0], res) +@pytest.mark.parametrize('superpositionModel,res', [(LinearSum(), 0.1 + (.6 + .2)), + (SquaredSum(), .1 + np.hypot(.6, .2)), + (MaxSum(), .1 + .6), + (SqrMaxSum(), np.hypot(.1, .6))]) +def test_superposition_models_TI(superpositionModel, res): + site = UniformSite([1], 0.1) + + class MyTurbulenceModel(TurbulenceModel): + args4addturb = ['dw_ijlk'] + + def calc_added_turbulence(self, dw_ijlk, **_): + return 1.2 - dw_ijlk / 100 + + wake_model = PropagateDownwind(site, NibeA0, NoWakeDeficit(), turbulenceModel=MyTurbulenceModel(superpositionModel)) + x_i = [0, 0, 0] + y_i = [0, -40, -100] + h_i = [50, 50, 50] + TI_eff_ilk = wake_model.calc_wt_interaction(x_i, y_i, h_i, [0, 0, 1], 0.0, 8.1)[1] + npt.assert_array_almost_equal(TI_eff_ilk[-1, 0, 0], res) + + @pytest.mark.parametrize('superpositionModel,sum_func', [(LinearSum(), np.sum), (SquaredSum(), lambda x: np.hypot(*x)), (MaxSum(), np.max)])