def main(): if __name__ == '__main__': from py_wake.examples.data.iea37 import IEA37Site, IEA37_WindTurbines from py_wake.deficit_models.selfsimilarity import SelfSimilarityDeficit import matplotlib.pyplot as plt site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() from py_wake.deficit_models.noj import NOJDeficit from py_wake.superposition_models import SquaredSum # NOJ wake model noj = PropagateDownwind(site, windTurbines, wake_deficitModel=NOJDeficit(), superpositionModel=SquaredSum()) # NOJ wake and selfsimilarity blockage noj_ss = All2AllIterative( site, windTurbines, wake_deficitModel=NOJDeficit(), superpositionModel=SquaredSum(), blockage_deficitModel=SelfSimilarityDeficit()) for wm in [noj, noj_ss]: plt.figure() wm(x=x, y=y, wd=[30], ws=[9]).flow_map().plot_wake_map() plt.show()
def test_iea37_distances(): from py_wake.examples.data.iea37 import IEA37Site n_wt = 16 # must be 9, 16, 36, 64 site = IEA37Site(n_wt) x, y = site.initial_position.T lw = site.local_wind(x_i=x, y_i=y, wd=site.default_wd, ws=site.default_ws) dw_iil, hcw_iil, _, _ = site.wt2wt_distances( x_i=x, y_i=y, h_i=np.zeros_like(x), wd_il=lw.WD_ilk.mean(2)) # Wind direction. wdir = np.rad2deg(np.arctan2(hcw_iil, dw_iil)) npt.assert_allclose( wdir[:, 0, 0], [180, -90, -18, 54, 126, -162, -90, -54, -18, 18, 54, 90, 126, 162, -162, -126], atol=1e-4) if 0: import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.scatter(x, y) for i, txt in enumerate(np.arange(len(x))): ax.annotate(txt, (x[i], y[i]), fontsize='large')
def test_min_ws_eff_line(): site = IEA37Site(16) x, y = [0, 600, 1200], [0, 0, 0] # site.initial_position[:2].T windTurbines = IEA37_WindTurbines() wfm = IEA37SimpleBastankhahGaussian( site, windTurbines, deflectionModel=JimenezWakeDeflection()) yaw_ilk = np.reshape([-30, 30, 0], (3, 1, 1)) plt.figure(figsize=(14, 3)) fm = wfm(x, y, yaw=yaw_ilk, wd=270, ws=10).flow_map( XYGrid(x=np.arange(-100, 2000, 10), y=np.arange(-500, 500, 10))) min_ws_line = fm.min_WS_eff() if 0: fm.plot_wake_map() min_ws_line.plot() print(np.round(min_ws_line[::10], 2)) plt.show() npt.assert_array_almost_equal(min_ws_line[::10], [ np.nan, np.nan, 11.6, 21.64, 30.42, 38.17, 45.09, 51.27, -8.65, -18.66, -27.51, -35.37, -42.38, -48.58, -1.09, -1.34, -1.59, -1.83, -2.07, -2.31, -2.56 ], 2)
def test_FlowBox(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wf_model = IEA37SimpleBastankhahGaussian(site, windTurbines) sim_res = wf_model(x, y) flow_box = sim_res.flow_box(x=np.arange(0, 100, 10), y=np.arange(0, 100, 10), h=np.arange(0, 100, 10))
def test_plot_ws_distribution_iea37(): from py_wake.examples.data.iea37 import IEA37Site n_wt = 16 # must be 16, 32 or 64 site = IEA37Site(n_wt) site.plot_ws_distribution(wd=[0]) if 0: import matplotlib.pyplot as plt plt.show()
def test_power_xylk(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() # NOJ wake model wind_farm_model = IEA37SimpleBastankhahGaussian(site, windTurbines) simulation_result = wind_farm_model(x, y) fm = simulation_result.flow_map(grid=HorizontalGrid(resolution=3)) npt.assert_array_almost_equal(fm.power_xylk(with_wake_loss=False)[:, :, 0, 0] * 1e-6, 3.35)
def test_not_implemented_plane(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wf_model = IEA37SimpleBastankhahGaussian(site, windTurbines) sim_res = wf_model(x, y) grid = YZGrid(x=-100, y=None, resolution=100, extend=.1) grid = grid(x, y, windTurbines.hub_height(x * 0), windTurbines.hub_height(x * 0)) with pytest.raises(NotImplementedError): sim_res.flow_map(grid=grid, wd=270, ws=None).plot_wake_map()
def test_YZGrid_plot_wake_map(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wf_model = IEA37SimpleBastankhahGaussian(site, windTurbines) sim_res = wf_model(x, y) sim_res.flow_map(grid=YZGrid(x=-100, y=None, resolution=100, extend=.1), wd=270, ws=None).plot_wake_map() if 0: plt.show() plt.close()
def test_plot_ws_distribution_iea37(): from py_wake.examples.data.iea37 import IEA37Site n_wt = 16 # must be 16, 32 or 64 site = IEA37Site(n_wt) p = site.plot_ws_distribution(wd=[0]) npt.assert_almost_equal(p, [1 / 300] * 300) if 0: import matplotlib.pyplot as plt plt.show()
def main(): if __name__ == '__main__': from py_wake.examples.data.iea37 import IEA37Site, IEA37_WindTurbines from py_wake.deficit_models.selfsimilarity import SelfSimilarityDeficit from py_wake.deficit_models.gaussian import ZongGaussianDeficit from py_wake.turbulence_models.stf import STF2017TurbulenceModel from py_wake.flow_map import XYGrid import matplotlib.pyplot as plt site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() from py_wake.deficit_models.noj import NOJDeficit from py_wake.superposition_models import SquaredSum # NOJ wake model noj = PropagateDownwind(site, windTurbines, wake_deficitModel=NOJDeficit(), superpositionModel=SquaredSum()) # NOJ wake and selfsimilarity blockage noj_ss = All2AllIterative( site, windTurbines, wake_deficitModel=NOJDeficit(), superpositionModel=SquaredSum(), blockage_deficitModel=SelfSimilarityDeficit()) # Zong convection superposition zongp_ss = PropagateDownwind(site, windTurbines, wake_deficitModel=ZongGaussianDeficit(), superpositionModel=WeightedSum(), turbulenceModel=STF2017TurbulenceModel()) # Zong convection superposition zong_ss = All2AllIterative( site, windTurbines, wake_deficitModel=ZongGaussianDeficit(), superpositionModel=WeightedSum(), blockage_deficitModel=SelfSimilarityDeficit(), turbulenceModel=STF2017TurbulenceModel()) for wm in [noj, noj_ss, zongp_ss, zong_ss]: sim = wm(x=x, y=y, wd=[30], ws=[9]) plt.figure() sim.flow_map(XYGrid(resolution=200)).plot_wake_map() plt.title(' AEP: %.3f GWh' % sim.aep().sum()) plt.show()
def test_Points(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wf_model = IEA37SimpleBastankhahGaussian(site, windTurbines) sim_res = wf_model(x, y) flow_map = sim_res.flow_map(Points(x, y, x * 0 + windTurbines.hub_height()), wd=0, ws=None) if 0: flow_map.WS_eff.plot() plt.show() plt.close('all')
def test_YZGrid(): site = IEA37Site(16) x, y = site.initial_position.T m = x < -1000 windTurbines = IEA37_WindTurbines() wind_farm_model = IEA37SimpleBastankhahGaussian(site, windTurbines) simulation_result = wind_farm_model(x[m], y[m], wd=270) fm = simulation_result.flow_map(grid=YZGrid(-1000, z=110, resolution=20)) if 0: simulation_result.flow_map(grid=YZGrid(-1000)).plot_wake_map() plt.plot(fm.X[0], fm.Y[0], '.') print(np.round(fm.WS_eff_xylk[0, :, 0, 0], 2).data.tolist()) plt.show() npt.assert_array_almost_equal(fm.WS_eff_xylk[:, 0, 0, 0], [9.8, 9.8, 8.42, 5.24, 9.74, 9.8, 9.8, 9.8, 9.76, 7.61, 7.61, 9.76, 9.8, 9.8, 9.8, 9.74, 5.24, 8.42, 9.8, 9.8], 2)
def test_YZGrid_parallel(): site = IEA37Site(16) x, y = site.initial_position.T m = x < -1000 windTurbines = IEA37_WindTurbines() wind_farm_model = IEA37SimpleBastankhahGaussian(site, windTurbines) simulation_result = wind_farm_model(x[m], y[m], wd=0) fm = simulation_result.flow_map(grid=YZGrid(-1000, z=110, resolution=20)) if 0: simulation_result.flow_map(grid=YZGrid(-1000)).plot_wake_map() plt.plot(fm.X[0], fm.Y[0], '.') print(np.round(fm.WS_eff_xylk[:, 0, 0, 0], 2).data.tolist()) plt.plot(fm.X[0], fm.WS_eff_xylk[:, 0, 0, 0] * 100, label='ws*100') plt.legend() plt.show() npt.assert_array_almost_equal(fm.WS_eff_xylk[:, 0, 0, 0], [ 7.32, 7.02, 6.63, 8.86, 8.79, 8.71, 8.63, 8.53, 8.42, 8.3, 8.16, 7.99, 7.81, 7.59, 7.33, 7.0, 6.52, 9.8, 9.8, 9.8 ], 2)
def main(): if __name__ == '__main__': from py_wake.examples.data.iea37 import IEA37Site, IEA37_WindTurbines from py_wake import IEA37SimpleBastankhahGaussian import matplotlib.pyplot as plt site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wind_farm_model = IEA37SimpleBastankhahGaussian(site, windTurbines) simulation_result = wind_farm_model(x, y) fm = simulation_result.flow_map(wd=30) fm.plot_wake_map() plt.figure() fm.plot(fm.power_xylk().sum(['wd', 'ws']) * 1e-3, "Power [kW]") fm = simulation_result.flow_map(grid=HorizontalGrid(resolution=50)) plt.figure() fm.plot(fm.aep_xy(), "AEP [GWh]") plt.show()
def test_YZGrid_variables(): site = IEA37Site(16) x, y = [0], [0] windTurbines = IEA37_WindTurbines() wf_model = IEA37SimpleBastankhahGaussian(site, windTurbines) sim_res = wf_model(x, y) fm = sim_res.flow_map(grid=YZGrid(x=100, y=None, resolution=100, extend=.1), wd=270, ws=None) fm.WS_eff.plot() plt.plot(fm.y[::10], fm.y[::10] * 0 + 110, '.') if 0: print(np.round(fm.WS_eff.interp(h=110)[::10].squeeze().values, 4)) plt.show() plt.close('all') npt.assert_array_almost_equal( fm.WS_eff.interp(h=110)[::10].squeeze(), [ 9.1461, 8.4157, 7.3239, 6.058, 5.022, 4.6455, 5.1019, 6.182, 7.446, 8.506 ], 4)