def test_own_turbulence_is_zero(turbulenceModel): site = Hornsrev1Site() windTurbines = IEA37_WindTurbines() wf_model = All2AllIterative(site, windTurbines, wake_deficitModel=IEA37SimpleBastankhahGaussianDeficit(), turbulenceModel=turbulenceModel()) sim_res = wf_model([0], [0]) npt.assert_array_equal(sim_res.TI_eff, sim_res.TI.broadcast_like(sim_res.TI_eff))
def test_IEA37WindTurbines(): wt = IEA37WindTurbines() site = IEA37Site(16) x, y = site.initial_position.T for wfm in get_wfms(wt, site, IEA37SimpleBastankhahGaussianDeficit(), SquaredSum()): sim_res = wfm(x, y, ws=9.8, wd=np.arange(0, 360, 22.5)) npt.assert_almost_equal(sim_res.aep(normalize_probabilities=True).sum() * 1e3, 366941.57116, 5)
def test_double_wind_farm_model(): """Check that a new wind farm model does not change results of previous""" site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wfm = PropagateDownwind(site, windTurbines, wake_deficitModel=IEA37SimpleBastankhahGaussianDeficit()) aep_ref = wfm(x, y).aep().sum() PropagateDownwind(site, windTurbines, wake_deficitModel=NoWakeDeficit()) aep = wfm(x, y).aep().sum() npt.assert_array_equal(aep, aep_ref)
def test_double_wind_farm_model_All2AllIterative(): """Check that a new wind farm model does not change results of previous""" site = IEA37Site(64) x, y = site.initial_position.T x, y = wt_x, wt_y windTurbines = IEA37_WindTurbines() wfm = All2AllIterative(site, windTurbines, wake_deficitModel=IEA37SimpleBastankhahGaussianDeficit()) aep_ref = wfm(x, y).aep().sum() All2AllIterative(site, windTurbines, wake_deficitModel=NoWakeDeficit())(x, y) aep = wfm(x, y).aep().sum() npt.assert_array_equal(aep, aep_ref)
def test_RotorGridAvg_deficit(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wfm = IEA37SimpleBastankhahGaussian(site, windTurbines) flow_map = wfm([0, 500], [0, 0], wd=270, ws=10).flow_map(HorizontalGrid(x=[500], y=np.arange(-100, 100))) plt.plot(flow_map.Y[:, 0], flow_map.WS_eff_xylk[:, 0, 0, 0]) R = windTurbines.diameter() / 2 for name, rotorAvgModel, ref1 in [ ('RotorCenter', RotorCenter(), 7.172723970425709), ('RotorGrid2', EqGridRotorAvg(2), 7.495889360682771), ('RotorGrid3', EqGridRotorAvg(3), 7.633415167369133), ('RotorGrid4', EqGridRotorAvg(4), 7.710215921858325), ('RotorGrid100', EqGridRotorAvg(100), 7.820762402628349), ('RotorGQGrid_4,3', GQGridRotorAvg(4, 3), 7.826105012683896), ('RotorCGI4', CGIRotorAvg(4), 7.848406907726826), ('RotorCGI4', CGIRotorAvg(7), 7.819900693605533), ('RotorCGI4', CGIRotorAvg(9), 7.82149363932618), ('RotorCGI4', CGIRotorAvg(21), 7.821558905416136)]: # test with PropagateDownwind wfm = IEA37SimpleBastankhahGaussian(site, windTurbines, rotorAvgModel=rotorAvgModel) sim_res = wfm([0, 500], [0, 0], wd=270, ws=10) npt.assert_almost_equal(sim_res.WS_eff_ilk[1, 0, 0], ref1) # test with All2AllIterative wfm = All2AllIterative(site, windTurbines, IEA37SimpleBastankhahGaussianDeficit(), rotorAvgModel=rotorAvgModel, superpositionModel=SquaredSum()) sim_res = wfm([0, 500], [0, 0], wd=270, ws=10) npt.assert_almost_equal(sim_res.WS_eff_ilk[1, 0, 0], ref1) plt.plot([-R, R], [sim_res.WS_eff_ilk[1, 0, 0]] * 2, label=name) if 0: plt.legend() plt.show() plt.close('all')
def test_RotorGridAvg_ti(): site = IEA37Site(16) x, y = site.initial_position.T windTurbines = IEA37_WindTurbines() wfm = IEA37SimpleBastankhahGaussian(site, windTurbines, turbulenceModel=STF2017TurbulenceModel()) flow_map = wfm([0, 500], [0, 0], wd=270, ws=10).flow_map(HorizontalGrid(x=[500], y=np.arange(-100, 100))) plt.plot(flow_map.Y[:, 0], flow_map.TI_eff_xylk[:, 0, 0, 0]) R = windTurbines.diameter() / 2 for name, rotorAvgModel, ref1 in [ ('RotorCenter', RotorCenter(), 0.22292190804089568), ('RotorGrid2', EqGridRotorAvg(2), 0.2111162769995657), ('RotorGrid3', EqGridRotorAvg(3), 0.2058616982653193), ('RotorGrid4', EqGridRotorAvg(4), 0.2028701990648858), ('RotorGrid100', EqGridRotorAvg(100), 0.1985255601976247), ('RotorGQGrid_4,3', GQGridRotorAvg(4, 3), 0.1982984399750206)]: # test with PropagateDownwind wfm = IEA37SimpleBastankhahGaussian(site, windTurbines, rotorAvgModel=rotorAvgModel, turbulenceModel=STF2017TurbulenceModel()) sim_res = wfm([0, 500], [0, 0], wd=270, ws=10) npt.assert_almost_equal(sim_res.TI_eff_ilk[1, 0, 0], ref1) # test with All2AllIterative wfm = All2AllIterative(site, windTurbines, IEA37SimpleBastankhahGaussianDeficit(), rotorAvgModel=rotorAvgModel, superpositionModel=SquaredSum(), turbulenceModel=STF2017TurbulenceModel()) sim_res = wfm([0, 500], [0, 0], wd=270, ws=10) npt.assert_almost_equal(sim_res.TI_eff_ilk[1, 0, 0], ref1) plt.plot([-R, R], [sim_res.TI_eff_ilk[1, 0, 0]] * 2, label=name) if 0: plt.legend() plt.show() plt.close('all')
def test_RotorAvg_deficit(): site = IEA37Site(16) windTurbines = IEA37_WindTurbines() wfm = IEA37SimpleBastankhahGaussian(site, windTurbines, turbulenceModel=STF2017TurbulenceModel()) flow_map = wfm([0, 500], [0, 0], wd=270, ws=10).flow_map(HorizontalGrid(x=[500], y=np.arange(-100, 100))) plt.plot(flow_map.Y[:, 0], flow_map.TI_eff_xylk[:, 0, 0, 0]) R = windTurbines.diameter() / 2 for name, rotorAvgModel, ref1 in [ ('None', None, 0.22292190804089568), ('RotorCenter', RotorCenter(), 0.22292190804089568), ('RotorGrid100', EqGridRotorAvg(100), 0.1989725533174574), ('RotorGQGrid_4,3', GQGridRotorAvg(4, 3), 0.19874837617113356), ('RotorCGI4', CGIRotorAvg(4), 0.19822024411411204), ('RotorCGI4', CGIRotorAvg(21), 0.1989414764606653)]: # test with PropagateDownwind wfm = IEA37SimpleBastankhahGaussian(site, windTurbines, turbulenceModel=STF2017TurbulenceModel(rotorAvgModel=rotorAvgModel)) sim_res = wfm([0, 500], [0, 0], wd=270, ws=10) npt.assert_almost_equal(sim_res.TI_eff_ilk[1, 0, 0], ref1, err_msg=name) # test with All2AllIterative wfm = All2AllIterative(site, windTurbines, IEA37SimpleBastankhahGaussianDeficit(), turbulenceModel=STF2017TurbulenceModel(rotorAvgModel=rotorAvgModel), superpositionModel=SquaredSum()) sim_res = wfm([0, 500], [0, 0], wd=270, ws=10) npt.assert_almost_equal(sim_res.TI_eff_ilk[1, 0, 0], ref1) plt.plot([-R, R], [sim_res.WS_eff_ilk[1, 0, 0]] * 2, label=name) if 0: plt.legend() plt.show() plt.close()
14285.22744, 31751.29488, 75140.15677, 17597.10319, 11721.21226, 7838.84383 ])), (NOJLocalDeficit(), (335151.6404628441, [ 8355.71335, 7605.92379, 10654.172, 13047.6971, 19181.46408, 23558.34198, 36738.52415, 38663.44595, 21056.39764, 12042.79324, 13813.46269, 30999.42279, 63947.61202, 17180.40299, 11334.12323, 6972.14345 ])), (BastankhahGaussianDeficit(), (355971.9717035484, [ 9143.74048, 8156.71681, 11311.92915, 13955.06316, 19807.65346, 25196.64182, 39006.65223, 41463.31044, 23042.22602, 12978.30551, 14899.26913, 32320.21637, 67039.04091, 17912.40907, 12225.04134, 7513.75582 ])), (IEA37SimpleBastankhahGaussianDeficit(), read_iea37_windfarm(iea37_path + 'iea37-ex16.yaml')[2]), (FugaDeficit(LUT_path=tfp + 'fuga/2MW/Z0=0.00408599Zi=00400Zeta0=0.00E+00/'), (404441.6306021485, [ 9912.33731, 9762.05717, 12510.14066, 15396.76584, 23017.66483, 27799.7161, 43138.41606, 49623.79059, 24979.09001, 15460.45923, 16723.02619, 35694.35526, 77969.14805, 19782.41376, 13721.45739, 8950.79218 ])), (GCLDeficit(), (370863.6246093183, [ 9385.75387, 8768.52105, 11450.13309, 14262.42186, 21178.74926, 25751.59502, 39483.21753, 44573.31533, 23652.09976, 13924.58752, 15106.11692, 32840.02909, 71830.22035, 18200.49805, 12394.7626, 8061.6033 ])),
wf_model = All2AllIterative(site, windTurbines, wake_deficitModel=NOJDeficit(), superpositionModel=SquaredSum(), blockage_deficitModel=SelfSimilarityDeficit(), deflectionModel=JimenezWakeDeflection(), turbulenceModel=STF2005TurbulenceModel()) assert str( wf_model ) == "All2AllIterative(EngineeringWindFarmModel, NOJDeficit-wake, SelfSimilarityDeficit-blockage, RotorCenter-rotor-average, SquaredSum-superposition, JimenezWakeDeflection-deflection, STF2005TurbulenceModel-turbulence)" @pytest.mark.parametrize( 'wake_deficitModel,deflectionModel,superpositionModel', [(NOJDeficit(), None, SquaredSum()), (IEA37SimpleBastankhahGaussianDeficit(), JimenezWakeDeflection(), WeightedSum())]) def test_huge_flow_map(wake_deficitModel, deflectionModel, superpositionModel): site = IEA37Site(16) windTurbines = IEA37_WindTurbines() wake_model = PropagateDownwind(site, windTurbines, wake_deficitModel=wake_deficitModel, superpositionModel=superpositionModel, deflectionModel=deflectionModel, turbulenceModel=STF2005TurbulenceModel()) n_wt = 2 flow_map = wake_model(*site.initial_position[:n_wt].T, wd=[0, 90]).flow_map(HorizontalGrid(resolution=1000)) # check that deficit matrix > 10MB (i.e. it enters the memory saving loop) assert (np.prod(flow_map.WS_eff_xylk.shape) * n_wt * 8 / 1024**2) > 10
# test that the result is equal to last run (no evidens that these number are correct) [(NOJDeficit(), (367205.0846866496, [9833.86287, 8416.99088, 10820.37673, 13976.26422, 22169.66036, 25234.9215, 37311.64388, 42786.37028, 24781.33444, 13539.82115, 14285.22744, 31751.29488, 75140.15677, 17597.10319, 11721.21226, 7838.84383])), (NOJLocalDeficit(), (335151.6404628441, [8355.71335, 7605.92379, 10654.172, 13047.6971, 19181.46408, 23558.34198, 36738.52415, 38663.44595, 21056.39764, 12042.79324, 13813.46269, 30999.42279, 63947.61202, 17180.40299, 11334.12323, 6972.14345])), (BastankhahGaussianDeficit(), (355971.9717035484, [9143.74048, 8156.71681, 11311.92915, 13955.06316, 19807.65346, 25196.64182, 39006.65223, 41463.31044, 23042.22602, 12978.30551, 14899.26913, 32320.21637, 67039.04091, 17912.40907, 12225.04134, 7513.75582])), (IEA37SimpleBastankhahGaussianDeficit(), read_iea37_windfarm(iea37_path + 'iea37-ex16.yaml')[2]), (FugaDeficit(LUT_path=tfp + 'fuga/2MW/Z0=0.00014617Zi=00399Zeta0=0.00E+0/'), (398938.8941139709, [9632.92248, 9733.98766, 12462.98413, 15332.30502, 22199.91899, 27683.32851, 42975.80734, 49481.10395, 24274.96466, 15416.63681, 16681.20957, 35508.27583, 75263.59612, 19679.2854, 13687.14632, 8925.42131])), (GCLDeficit(), (370863.6246093183, [9385.75387, 8768.52105, 11450.13309, 14262.42186, 21178.74926, 25751.59502, 39483.21753, 44573.31533, 23652.09976, 13924.58752, 15106.11692, 32840.02909, 71830.22035, 18200.49805, 12394.7626, 8061.6033])), (GCLLocalDeficit(), (381187.36105425097, [9678.85358, 9003.65526, 11775.06899, 14632.42259, 21915.85495, 26419.65189, 40603.68618, 45768.58091, 24390.71103, 14567.43106, 15197.82861, 32985.67922, 75062.92788, 18281.21981, 12470.01322, 8433.77587])),
def test_str(): site = IEA37Site(16) windTurbines = IEA37_WindTurbines() wf_model = All2AllIterative(site, windTurbines, wake_deficitModel=NOJDeficit(), superpositionModel=SquaredSum(), blockage_deficitModel=SelfSimilarityDeficit(), deflectionModel=JimenezWakeDeflection(), turbulenceModel=STF2005TurbulenceModel()) assert str(wf_model) == "All2AllIterative(EngineeringWindFarmModel, NOJDeficit-wake, SelfSimilarityDeficit-blockage, RotorCenter-rotor-average, SquaredSum-superposition, JimenezWakeDeflection-deflection, STF2005TurbulenceModel-turbulence)" @pytest.mark.parametrize('wake_deficitModel,deflectionModel,superpositionModel', [(NOJDeficit(), None, SquaredSum()), (IEA37SimpleBastankhahGaussianDeficit(), JimenezWakeDeflection(), WeightedSum())]) def test_huge_flow_map(wake_deficitModel, deflectionModel, superpositionModel): site = IEA37Site(16) windTurbines = IEA37_WindTurbines() wake_model = PropagateDownwind(site, windTurbines, wake_deficitModel=wake_deficitModel, superpositionModel=superpositionModel, deflectionModel=deflectionModel, turbulenceModel=STF2005TurbulenceModel()) n_wt = 2 flow_map = wake_model(*site.initial_position[:n_wt].T, wd=0).flow_map(HorizontalGrid(resolution=1000)) # check that deficit matrix > 10MB (i.e. it enters the memory saving loop) assert (np.prod(flow_map.WS_eff_xylk.shape) * n_wt * 8 / 1024**2) > 10 assert flow_map.WS_eff_xylk.shape == (1000, 1000, 1, 1) def test_aep(): site = UniformSite([1], ti=0)