From 267b329cc3e53ae68c34f470bea57b328efcfb45 Mon Sep 17 00:00:00 2001 From: "Mads M. Pedersen" <mmpe@dtu.dk> Date: Mon, 24 Feb 2025 10:19:29 +0000 Subject: [PATCH] Resolve "NOJLocalDeficit WS_eff result doesn't seem to be affected by TI" --- py_wake/deficit_models/gaussian.py | 6 ++++-- py_wake/deficit_models/noj.py | 4 ---- py_wake/tests/test_deficit_models/test_noj.py | 16 ++++++++++++++-- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/py_wake/deficit_models/gaussian.py b/py_wake/deficit_models/gaussian.py index cdb716851..99946962b 100644 --- a/py_wake/deficit_models/gaussian.py +++ b/py_wake/deficit_models/gaussian.py @@ -153,8 +153,10 @@ class NiayifarGaussianDeficit(BastankhahGaussianDeficit): self.ct2a = ct2a def k_ilk(self, **kwargs): - TI_ref_ilk = kwargs[self.TI_key] - k_ilk = self.a[0] * TI_ref_ilk + self.a[1] + k_ilk = np.reshape(self.a[1], (1, 1, 1)) + if self.a[0] != 0: + TI_ref_ilk = kwargs[self.TI_key] + k_ilk = k_ilk + self.a[0] * TI_ref_ilk return k_ilk diff --git a/py_wake/deficit_models/noj.py b/py_wake/deficit_models/noj.py index 80f803afd..2b1863428 100644 --- a/py_wake/deficit_models/noj.py +++ b/py_wake/deficit_models/noj.py @@ -45,10 +45,6 @@ class NOJDeficit(NiayifarGaussianDeficit, WakeRadiusTopHat): return term_numerator_ilk[:, na] * self.layout_factor_ijlk def wake_radius(self, D_src_il, dw_ijlk, **kwargs): - # k_ijlk = np.atleast_3d(self.k_ilk(kwargs.get('TI_eff_ilk', 0)))[:, na] - if 'TI_eff_ilk' not in kwargs: - kwargs['TI_eff_ilk'] = 0.0 - kwargs['TI_ilk'] = 0.0 k_ijlk = np.atleast_3d(self.k_ilk(**kwargs))[:, na] wake_radius_ijlk = (k_ijlk * dw_ijlk + D_src_il[:, na, :, na] / 2) return wake_radius_ijlk diff --git a/py_wake/tests/test_deficit_models/test_noj.py b/py_wake/tests/test_deficit_models/test_noj.py index 87c412c66..2e30362fe 100644 --- a/py_wake/tests/test_deficit_models/test_noj.py +++ b/py_wake/tests/test_deficit_models/test_noj.py @@ -5,8 +5,8 @@ from py_wake.site._site import UniformSite from py_wake.tests import npt from py_wake.flow_map import HorizontalGrid from py_wake.wind_turbines import WindTurbines -from py_wake.wind_farm_models.engineering_models import All2AllIterative -from py_wake.deficit_models.noj import NOJDeficit +from py_wake.wind_farm_models.engineering_models import All2AllIterative, PropagateDownwind +from py_wake.deficit_models.noj import NOJDeficit, NOJLocalDeficit from py_wake.superposition_models import LinearSum, WeightedSum from py_wake.turbulence_models.stf import STF2017TurbulenceModel from py_wake.wind_turbines.power_ct_functions import PowerCtFunction @@ -107,6 +107,18 @@ def test_NOJConvection2(): wfm([0, 500], [0, 0]) +def test_NOJLocal_ti_dependence(): + def get(ti): + site = UniformSite([1], ti) + wfm = PropagateDownwind(site, NibeA0(), NOJLocalDeficit(use_effective_ti=False)) + return wfm([0, 40], [0, 0], wd=270, ws=[10]) + sim_res1, sim_res2 = [get(ti) for ti in [0.1, 0.2]] + npt.assert_array_almost_equal(sim_res1.TI.squeeze(), [.1]) + npt.assert_array_almost_equal(sim_res2.TI.squeeze(), [.2]) + npt.assert_array_almost_equal(sim_res1.WS_eff.isel(wt=1), [[4.43458331]]) + npt.assert_array_almost_equal(sim_res2.WS_eff.isel(wt=1), [[5.13995521]]) + + def test_NOJLocal_ti_eff_dependence(): site = UniformSite([1], 0.1) wfm = NOJLocal(site, NibeA0(), ct2a=ct2a_mom1d) -- GitLab