diff --git a/py_wake/site/_site.py b/py_wake/site/_site.py index 6bf1fc3246a621144e1c67cb74f3ad59d3276a7c..d6b5ce84a6afe096163f13601c1ba3ac98492613 100644 --- a/py_wake/site/_site.py +++ b/py_wake/site/_site.py @@ -146,7 +146,7 @@ class Site(ABC): ws = np.atleast_1d(ws) return wd, ws - def local_wind(self, x, y, h=None, wd=None, ws=None, time=False, wd_bin_size=None, ws_bins=None, **_): + def local_wind(self, x=None, y=None, h=None, wd=None, ws=None, time=False, wd_bin_size=None, ws_bins=None, **_): """Local free flow wind conditions Parameters diff --git a/py_wake/site/xrsite.py b/py_wake/site/xrsite.py index b472880cea2412ba8d9d542563d598e0f055f197..9da2111d157d58b688419ba5b38b4e332dbe7ec9 100644 --- a/py_wake/site/xrsite.py +++ b/py_wake/site/xrsite.py @@ -414,7 +414,7 @@ class GlobalWindAtlasSite(XRSite): NOTE: This approach is only valid for sites with homogeneous roughness at the site and far around """ - def __init__(self, lat, long, height, roughness, ti=None, **kwargs): # pragma: no cover + def __init__(self, lat, long, roughness, height=None, ti=None, **kwargs): # pragma: no cover """ Parameters ---------- @@ -430,7 +430,10 @@ class GlobalWindAtlasSite(XRSite): self.gwc_ds = self._read_gwc(lat, long) if ti is not None: self.gwc_ds['TI'] = ti - XRSite.__init__(self, ds=self.gwc_ds.interp(height=height, roughness=roughness), **kwargs) + ds = self.gwc_ds.interp(roughness=roughness).rename(height='h') + if height is not None: + ds = ds.interp(z=height) + XRSite.__init__(self, ds=ds, **kwargs) def _read_gwc(self, lat, long): # pragma: no cover diff --git a/py_wake/tests/test_sites/test_xrsite.py b/py_wake/tests/test_sites/test_xrsite.py index 4bd35886e2e25908fcf2ff05002af19e2d26d86f..5445acbc5f7b260b596d7d2be4588dd0e25357a3 100644 --- a/py_wake/tests/test_sites/test_xrsite.py +++ b/py_wake/tests/test_sites/test_xrsite.py @@ -276,27 +276,25 @@ def test_GlobalWindAtlasSite(): lat, long = 55.52972, 7.906111 # hornsrev try: - site = GlobalWindAtlasSite(lat, long, height=70, roughness=0.001, ti=0.075) + site = GlobalWindAtlasSite(lat, long, roughness=0.001, ti=0.075) except (HTTPError, URLError): pytest.xfail('HTTPError in GlobalWindAtlasSite') - ref_mean = weibull.mean(ref.ds.Weibull_A, ref.ds.Weibull_k) - gwa_mean = weibull.mean(site.ds.Weibull_A, site.ds.Weibull_k) + + def mean(lw): + return (lw['P_ilk'] / lw['P_ilk'].sum((0, 2))[na, :, na] * lw['WS_ilk']).sum((0, 2)) if 0: plt.figure() - plt.plot(ref.ds.wd, ref_mean, label='HornsrevSite') - plt.plot(site.ds.wd, gwa_mean, label='HornsrevSite') - for r in [0, 1.5]: - for h in [10, 200]: - A, k = [site.gwc_ds[v].sel(roughness=r, height=h) for v in ['Weibull_A', 'Weibull_k']] - plt.plot(site.gwc_ds.wd, weibull.mean(A, k), label=f'{h}, {r}') + plt.plot(site.default_wd, mean(ref.local_wind()), label='HornsrevSite') + plt.plot(site.default_wd, mean(site.local_wind(h=70)), label='GWA Hornsrev h=70') + plt.plot(site.default_wd, mean(site.local_wind(h=100)), label='GWA Hornsrev h=100') plt.legend() plt.show() - npt.assert_allclose(gwa_mean, ref_mean, atol=1.4) + npt.assert_allclose(mean(site.local_wind(h=70)), mean(ref.local_wind()), atol=1.5) for var, atol in [('Sector_frequency', 0.03), ('Weibull_A', 1.6), ('Weibull_k', 0.4)]: - npt.assert_allclose(site.ds[var], ref.ds[var], atol=atol) + npt.assert_allclose(site.ds.interp(h=70)[var], ref.ds[var], atol=atol) def test_wrong_height():