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