From d03f0163f450f03889c1e1c67ab2e0b5d6c9253c Mon Sep 17 00:00:00 2001 From: "Mads M. Pedersen" <mmpe@dtu.dk> Date: Tue, 25 Feb 2025 15:43:43 +0000 Subject: [PATCH] adapt to numpy2 --- py_wake/deficit_models/deficit_model.py | 5 ++++- py_wake/deficit_models/gaussian.py | 4 ++-- py_wake/deflection_models/deflection_model.py | 4 ++-- py_wake/tests/test_sites/test_distances.py | 8 ++++---- py_wake/tests/test_utils/test_model_gradients.py | 4 +--- py_wake/utils/gradients.py | 6 ++++++ 6 files changed, 19 insertions(+), 12 deletions(-) diff --git a/py_wake/deficit_models/deficit_model.py b/py_wake/deficit_models/deficit_model.py index 0573b44e6..e1673d902 100644 --- a/py_wake/deficit_models/deficit_model.py +++ b/py_wake/deficit_models/deficit_model.py @@ -6,6 +6,7 @@ from py_wake.utils.model_utils import method_args, RotorAvgAndGroundModelContain from py_wake.superposition_models import WeightedSum from py_wake.utils.grid_interpolator import GridInterpolator import inspect +from py_wake.utils import gradients class DeficitModel(ABC, RotorAvgAndGroundModelContainer): @@ -113,7 +114,9 @@ class BlockageDeficitModel(DeficitModel): if induc_ijlk is not None: # Close to the rotor the induced velocities become unphysical in some models and are # limited to the induction in the rotor plane estimated by BEM. - deficit_ijlk = np.where(np.abs(deficit_ijlk) > induc_ijlk, induc_ijlk * np.sign(deficit_ijlk), deficit_ijlk) + deficit_ijlk = np.where(np.abs(deficit_ijlk) > induc_ijlk, + induc_ijlk * gradients.sign(deficit_ijlk), + deficit_ijlk) return deficit_ijlk diff --git a/py_wake/deficit_models/gaussian.py b/py_wake/deficit_models/gaussian.py index 99946962b..d31fe7d40 100644 --- a/py_wake/deficit_models/gaussian.py +++ b/py_wake/deficit_models/gaussian.py @@ -516,8 +516,8 @@ class BlondelSuperGaussianDeficit2020(WakeDeficitModel): a1 = 2 ** (2 / n - 1) a2 = 2 ** (4 / n - 2) - deficit_center_ijlk = a1 - np.sqrt(a2 - ((n * ctx_ijlk) / (16.0 * gamma(2 / n) * np.sign(sigma_ijlk) * - (cabs(sigma_ijlk) ** (4 / n))))) + deficit_center_ijlk = a1 - np.sqrt(a2 - ((n * ctx_ijlk) / + (16.0 * gamma(2 / n) * gradients.sign(sigma_ijlk) * (cabs(sigma_ijlk) ** (4 / n))))) return deficit_center_ijlk diff --git a/py_wake/deflection_models/deflection_model.py b/py_wake/deflection_models/deflection_model.py index c6ed7dbcf..50acd752f 100644 --- a/py_wake/deflection_models/deflection_model.py +++ b/py_wake/deflection_models/deflection_model.py @@ -70,8 +70,8 @@ class DeflectionIntegrator(DeflectionModel): deflection_rate = self.get_deflection_rate(theta_ilk=theta_total_ilk, dw_ijlkx=dw_ijlkx, yaw_ilk=yaw_ilk, tilt_ilk=tilt_ilk, **kwargs) deflection_ijlk = gradients.trapz(deflection_rate, dw_ijlkx, axis=4) - self.hcw_ijlk = hcw_ijlk + np.sign(dw_ijlk) * deflection_ijlk * np.cos(theta_total_angle_ilk[:, na]) - self.dh_ijlk = dh_ijlk + np.sign(dw_ijlk) * deflection_ijlk * np.sin(theta_total_angle_ilk[:, na]) + self.hcw_ijlk = hcw_ijlk + gradients.sign(dw_ijlk) * deflection_ijlk * np.cos(theta_total_angle_ilk[:, na]) + self.dh_ijlk = dh_ijlk + gradients.sign(dw_ijlk) * deflection_ijlk * np.sin(theta_total_angle_ilk[:, na]) return dw_ijlk, self.hcw_ijlk, self.dh_ijlk @abstractmethod diff --git a/py_wake/tests/test_sites/test_distances.py b/py_wake/tests/test_sites/test_distances.py index c20f303e9..c4e19e6aa 100644 --- a/py_wake/tests/test_sites/test_distances.py +++ b/py_wake/tests/test_sites/test_distances.py @@ -173,7 +173,7 @@ def test_straightDistance_turning(wfm_cls, turning, method, angle_func): warnings.simplefilter('ignore', UserWarning) fm_wide = sim_res.flow_map(XYGrid(x=450, y=np.linspace(-200, 200, 1001)), wd=270) - y = fm_wide.y[np.argmin(fm_wide.WS_eff.squeeze().values)] + y = fm_wide.y[np.argmin(fm_wide.WS_eff.squeeze().values)].item() with warnings.catch_warnings(): warnings.simplefilter('ignore', UserWarning) fm = sim_res.flow_map(XYGrid(x=450, y=np.linspace(y - 2, y + 2, 1001)), wd=270) @@ -313,11 +313,11 @@ def test_JITStreamlinesparquefictio(): # average downwind distance increase around 5 m npt.assert_almost_equal((dw + dw.T).mean(), 5, 0) - fm = sim_res.flow_map(XYGrid(x=np.linspace(site.ds.x[0], site.ds.x[-1], 500), - y=np.linspace(site.ds.y[0], site.ds.y[-1], 500))) + fm = sim_res.flow_map(XYGrid(x=np.linspace(site.ds.x[0].item(), site.ds.x[-1].item(), 500), + y=np.linspace(site.ds.y[0].item(), site.ds.y[-1].item(), 500))) stream_lines = vf3d.stream_lines(wd=np.full(x.shape, wd), start_points=np.array([x, y, np.full(x.shape, 70)]).T, dw_stop=y - 6504700) - if 1: + if 0: fm.plot_wake_map() for sl in stream_lines: plt.plot(sl[:, 0], sl[:, 1]) diff --git a/py_wake/tests/test_utils/test_model_gradients.py b/py_wake/tests/test_utils/test_model_gradients.py index ae69d57d6..9b1e47fb9 100644 --- a/py_wake/tests/test_utils/test_model_gradients.py +++ b/py_wake/tests/test_utils/test_model_gradients.py @@ -5,8 +5,7 @@ import xarray as xr import matplotlib.pyplot as plt from py_wake import np from py_wake.deficit_models.deficit_model import WakeDeficitModel, BlockageDeficitModel -from py_wake.deficit_models.gaussian import IEA37SimpleBastankhahGaussianDeficit, \ - BastankhahGaussianDeficit, NiayifarGaussianDeficit +from py_wake.deficit_models.gaussian import BastankhahGaussianDeficit, NiayifarGaussianDeficit from py_wake.deficit_models.no_wake import NoWakeDeficit from py_wake.deflection_models.deflection_model import DeflectionModel from py_wake.examples.data.ParqueFicticio._parque_ficticio import ParqueFicticioSite @@ -25,7 +24,6 @@ from py_wake.utils import gradients from py_wake.utils.gradients import autograd, plot_gradients, fd, cs from py_wake.utils.model_utils import get_models from py_wake.wind_farm_models.engineering_models import PropagateDownwind, All2AllIterative, EngineeringWindFarmModel -from py_wake.wind_farm_models.wind_farm_model import WindFarmModel from py_wake.deficit_models.noj import NOJDeficit from py_wake.site.jit_streamline_distance import JITStreamlineDistance from py_wake.site.xrsite import XRSite diff --git a/py_wake/utils/gradients.py b/py_wake/utils/gradients.py index 0a2af4d80..e4e4d070d 100644 --- a/py_wake/utils/gradients.py +++ b/py_wake/utils/gradients.py @@ -386,3 +386,9 @@ def gamma(x): return agamma(x) else: return sgamma(x) + + +def sign(x): + if np.iscomplexobj(x): + x = x.real + return np.sign(x) -- GitLab