Exemple #1
0
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()
Exemple #2
0
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_wake_and_blockage(setup):
    site, windTurbines, ss = setup
    noj_ss = All2AllIterative(site,
                              windTurbines,
                              wake_deficitModel=NOJDeficit(),
                              blockage_deficitModel=ss,
                              superpositionModel=LinearSum())

    flow_map = noj_ss(x=[0], y=[0], wd=[270], ws=[10]).flow_map()
    X_j, Y_j = flow_map.XY
    WS_eff = flow_map.WS_eff_xylk[:, :, 0, 0]

    npt.assert_array_almost_equal(WS_eff[200, ::50], [
        9.940967, 9.911659, 9.855934, 9.736016, 9.44199, 4.560631, 5.505472,
        6.223921, 6.782925, 7.226399
    ])
    npt.assert_array_almost_equal(WS_eff[250, ::50], [
        9.937601, 9.90397, 9.834701, 9.659045, 9.049764, 4.560631, 5.505472,
        6.223921, 6.782925, 7.226399
    ])

    if 0:
        plt.contourf(X_j, Y_j, WS_eff)
        plt.plot(X_j[200, ::50], Y_j[200, ::50], '.-')
        plt.plot(X_j[250, ::50], Y_j[250, ::50], '.-')
        print(list(np.round(WS_eff[200, ::50], 6)))
        print(list(np.round(WS_eff[250, ::50], 6)))
        ss.windTurbines.plot([0], [0], wd=[270])
        plt.show()
def test_wake_and_blockage(setup, blockage_model, center_ref, side_ref):
    site, windTurbines = setup
    noj_ss = All2AllIterative(site,
                              windTurbines,
                              wake_deficitModel=NOJDeficit(),
                              blockage_deficitModel=blockage_model(),
                              superpositionModel=LinearSum())

    xy = np.linspace(-200, 200, 500)
    flow_map = noj_ss(x=[0], y=[0], wd=[270],
                      ws=[10]).flow_map(XYGrid(x=xy[::50], y=xy[[190, 250]]))
    X_j, Y_j = flow_map.XY
    WS_eff = flow_map.WS_eff_xylk[:, :, 0, 0]

    if debug:
        flow_map_full = noj_ss(x=[0], y=[0], wd=[270], ws=[10]).flow_map()
        X_j_full, Y_j_full = flow_map_full.XY
        WS_eff_full = flow_map_full.WS_eff_xylk[:, :, 0, 0]
        plt.contourf(X_j_full, Y_j_full, WS_eff_full)
        plt.plot(X_j.T, Y_j.T, '.-')

        print(list(np.round(np.array(WS_eff[0]), 6)))
        print(list(np.round(np.array(WS_eff[1]), 6)))
        plt.title(blockage_model.__name__)
        plt.show()

    npt.assert_array_almost_equal(WS_eff[0], center_ref)
    npt.assert_array_almost_equal(WS_eff[1], side_ref)
Exemple #5
0
def test_Mirror_flow_map(wfm_cls, groundModel, superpositionModel):
    site = UniformSite([1], ti=0.1)
    wt = V80()
    wfm = NOJ(site, wt, k=.5, superpositionModel=superpositionModel)

    fm_ref = wfm([0, 0 + 1e-20], [0, 0 + 1e-20], wd=0, h=[50, -50]).flow_map(
        YZGrid(x=0, y=np.arange(-100, 100, 1) + .1, z=np.arange(1, 100)))
    fm_ref.plot_wake_map()
    plt.title("Underground WT added manually")

    plt.figure()
    wfm = wfm_cls(site,
                  wt,
                  NOJDeficit(k=.5),
                  groundModel=groundModel,
                  superpositionModel=superpositionModel)
    fm_res = wfm([0], [0], wd=0, h=[50]).flow_map(
        YZGrid(x=0, y=np.arange(-100, 100, 1) + .1, z=np.arange(1, 100)))
    fm_res.plot_wake_map()
    plt.title("With Mirror GroundModel")

    if 0:
        plt.show()
    plt.close()
    npt.assert_array_equal(fm_ref.WS_eff, fm_res.WS_eff)
def test_All2AllIterativeDeflection():
    site = IEA37Site(16)
    windTurbines = IEA37_WindTurbines()
    wf_model = All2AllIterative(site, windTurbines,
                                wake_deficitModel=NOJDeficit(),
                                superpositionModel=SquaredSum(),
                                deflectionModel=JimenezWakeDeflection())
    wf_model([0], [0])
Exemple #7
0
def run_wfm(mwc,
            test_cases=['Wieringermeer', 'Lillgrund', 'Hornsrev1'],
            deficit_setups=[{
                'deficit_model': NOJDeficit(),
                'superpositionModel': SquaredSum(),
                'rotorAvgModel': RotorCenter(),
                'turbulenceModel': STF2017TurbulenceModel()
            }],
            gaussian_filter=True):
    '''
        Evaluate wake models for the different test cases
    '''
    mwc_out = {}

    for i in range(len(deficit_setups)):
        deficit_setups[i]['setup_name'] = get_setup_name(deficit_setups[i])

    for case in test_cases:
        mwc_out[case] = mwc[case]
        mwc_out[case]['deficit_setups'] = deficit_setups
        # mwc_out[case]['deficit_models'] = []
        if case == 'Wieringermeer':
            sigma = 2.5 * np.ones((len(mwc[case]['wt_x'])))
        elif case == 'Lillgrund':
            sigma = 3.3 * np.ones((len(mwc[case]['wt_x'])))
        elif case == 'Hornsrev1':
            sigma = sigma_hornsrev('vanderLaan', mwc[case]['wt_x'],
                                   mwc[case]['wt_y'])

        for i in range(len(deficit_setups)):
            # set up model
            wfm = PropagateDownwind(
                mwc[case]['site'],
                mwc[case]['wt'],
                deficit_setups[i]['deficit_model'],
                superpositionModel=deficit_setups[i]['superpositionModel'],
                rotorAvgModel=deficit_setups[i]['rotorAvgModel'],
                turbulenceModel=deficit_setups[i]['turbulenceModel'])
            # simulation
            sim_res = wfm(mwc[case]['wt_x'],
                          mwc[case]['wt_y'],
                          ws=mwc[case]['U0'])
            # Gaussian averaging
            if gaussian_filter:
                powerGA = np.zeros(sim_res.Power.shape)
                for iAD in range(len(mwc[case]['wt_x'])):
                    powerGA[iAD, :, 0] = GaussianFilter(
                        sim_res.Power.values[iAD, :,
                                             0], np.arange(0, 360.0, 1),
                        int(np.ceil(3 * sigma[iAD])), sigma[iAD])
                sim_res['PowerGA'] = xr.DataArray(powerGA,
                                                  dims=['wt', 'wd', 'ws'])
                sim_res['PowerGA'].attrs[
                    'Description'] = 'Gaussian averaged power production [W]'

            mwc_out[case][deficit_setups[i]['setup_name']] = sim_res
            mwc_out[case][deficit_setups[i]
                          ['setup_name']]['gaussian_filter'] = gaussian_filter
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)"
Exemple #9
0
def test_All2AllIterativeDeflection():
    site = IEA37Site(16)
    windTurbines = IEA37_WindTurbines()
    wf_model = All2AllIterative(site,
                                windTurbines,
                                wake_deficitModel=NOJDeficit(),
                                superpositionModel=SquaredSum(),
                                deflectionModel=JimenezWakeDeflection())
    sim_res = wf_model([0, 500], [0, 0], wd=270, ws=10, yaw=30)
    if 0:
        sim_res.flow_map(
            XYGrid(x=np.linspace(-200, 1000, 100))).plot_wake_map()
        plt.show()
Exemple #10
0
def test_NOJ_Nibe_result():
    # Replicate result from: Jensen, Niels Otto. "A note on wind generator interaction." (1983).

    site = UniformSite([1], 0.1)
    x_i = [0, 0, 0]
    y_i = [0, -40, -100]
    h_i = [50, 50, 50]
    wfm = All2AllIterative(site,
                           NibeA0,
                           wake_deficitModel=NOJDeficit(),
                           superpositionModel=LinearSum())
    WS_eff_ilk = wfm.calc_wt_interaction(x_i, y_i, h_i, [0, 1, 1], 0.0, 8.1)[0]
    npt.assert_array_almost_equal(WS_eff_ilk[:, 0, 0], [8.1, 4.35, 5.7])
Exemple #11
0
def run_wms(swc,
            test_cases=[
                'Wieringermeer-West', 'Wieringermeer-East', 'Nibe',
                'Nordtank-500', 'NREL-5MW_TIlow', 'NREL-5MW_TIhigh'
            ],
            deficit_models=[NOJDeficit(),
                            BastankhahGaussianDeficit()],
            wds=np.linspace(-30, 30, 61)):
    '''
        Run the different wake models for the specified sites and output simulation results
    '''
    swc_out = {}
    for case in test_cases:
        swc_out[case] = swc[case]
        x_j = swc[case]['sDown'] * (np.dot(
            swc[case]['xDown'][:, na],
            np.cos(wds / 180.0 * np.pi)[na, :])).flatten()
        y_j = swc[case]['sDown'] * (np.dot(
            swc[case]['xDown'][:, na],
            np.sin(wds / 180.0 * np.pi)[na, :])).flatten()
        ii, jj = len(swc[case]['xDown']), len(wds)
        swc_out[case]['x'] = x_j.reshape(ii, jj)
        swc_out[case]['y'] = y_j.reshape(ii, jj)
        swc_out[case]['wds'] = wds
        swc_out[case]['deficit_models'] = []
        for model in deficit_models:
            # set up model
            tmp = {}
            wfm = PropagateDownwind(swc[case]['site'],
                                    swc[case]['wt'],
                                    model,
                                    superpositionModel=SquaredSum(),
                                    rotorAvgModel=RotorCenter(),
                                    turbulenceModel=STF2017TurbulenceModel())
            # simulation
            sim_res = wfm([0], [0], h=[100], wd=[270])
            lw_j, WS_eff_jlk, TI_eff_jlk = wfm._flow_map(
                x_j, y_j,
                np.ones_like(x_j) * 100, sim_res)
            deficit_name = modify_deficit_name_sw(wfm.wake_deficitModel,
                                                  TI_eff_jlk)
            tmp['bar_label'] = modify_deficit_name(wfm.wake_deficitModel)
            tmp['WS_eff'] = WS_eff_jlk[:, 0, 0].reshape(ii, jj)
            tmp['TI_eff'] = TI_eff_jlk[:, 0, 0].reshape(ii, jj)
            swc_out[case][deficit_name] = tmp
            swc_out[case]['deficit_models'].append(deficit_name)

    return swc_out
Exemple #12
0
def test_turning_mean(complex_grid_site, wfm):

    ds = xr.Dataset(
        data_vars={'Turning': (['x', 'y'], np.arange(-2, 4, 1).reshape((2, 3)).T),
                   'Sector_frequency': ('wd', f), 'Weibull_A': ('wd', A), 'Weibull_k': ('wd', k), 'TI': .1},
        coords={'x': [0, 500, 1000], 'y': [0, 500], 'wd': np.linspace(0, 360, len(f), endpoint=False)})
    site = XRSite(ds)

    wt = V80()
    wfm = wfm(site, wt, NOJDeficit())
    sim_res = wfm([500, 500], [100, 400], wd=0, ws=10)
    print(sim_res.Power)
    if 0:
        sim_res.flow_map(XYGrid(y=np.linspace(0, 500, 100))).plot_wake_map()
        plt.show()
    assert sim_res.WS_eff.sel(wt=0).item() < sim_res.WS_eff.sel(wt=1).item()
    fm = sim_res.flow_map(Points([500, 500], [100, 400], [70, 70]))
    assert fm.WS_eff.sel(i=0).item() < fm.WS_eff.sel(i=1).item()
Exemple #13
0
def test_stf(turbulence_model, ref_ti):
    # setup site, turbines and wind farm model
    site = IEA37Site(16)
    x, y = site.initial_position.T
    windTurbines = IEA37_WindTurbines()

    for wake_model in [
            NOJ(site, windTurbines, turbulenceModel=turbulence_model),
            All2AllIterative(site,
                             windTurbines,
                             wake_deficitModel=NOJDeficit(),
                             superpositionModel=SquaredSum(),
                             turbulenceModel=turbulence_model)
    ]:

        res = wake_model(x, y)
        # print(np.round(res.TI_eff_ilk[:, 0, 0], 3).tolist())
        npt.assert_array_almost_equal(res.TI_eff_ilk[:, 0, 0], ref_ti, 3)
def test_models_with_noj(turbulence_model, ref_ti):
    # setup site, turbines and wind farm model
    site = IEA37Site(16)
    x, y = site.initial_position.T
    windTurbines = IEA37_WindTurbines()

    for wake_model in [NOJ(site, windTurbines, turbulenceModel=turbulence_model),
                       All2AllIterative(site, windTurbines,
                                        wake_deficitModel=NOJDeficit(),
                                        superpositionModel=SquaredSum(),
                                        turbulenceModel=turbulence_model),
                       ]:

        res = wake_model(x, y)
        # print(turbulence_model.__class__.__name__, np.round(res.TI_eff_ilk[:, 0, 0], 3).tolist())
        if 0:
            res.flow_map(wd=0).plot_ti_map()
            plt.show()

        npt.assert_array_almost_equal(res.TI_eff_ilk[:, 0, 0], ref_ti, 3)
Exemple #15
0
def test_wake_and_blockage(setup, blockage_model, center_ref, side_ref):
    site, windTurbines = setup
    noj_ss = All2AllIterative(site,
                              windTurbines,
                              wake_deficitModel=NOJDeficit(),
                              blockage_deficitModel=blockage_model(),
                              superpositionModel=LinearSum())

    flow_map = noj_ss(x=[0], y=[0], wd=[270], ws=[10]).flow_map()
    X_j, Y_j = flow_map.XY
    WS_eff = flow_map.WS_eff_xylk[:, :, 0, 0]

    if debug:
        plt.contourf(X_j, Y_j, WS_eff)
        plt.plot(X_j[190, ::50], Y_j[190, ::50], '.-')
        plt.plot(X_j[250, ::50], Y_j[250, ::50], '.-')
        print(list(np.round(np.array(WS_eff[190, ::50]), 6)))
        print(list(np.round(np.array(WS_eff[250, ::50]), 6)))
        plt.title(blockage_model.__name__)
        plt.show()

    npt.assert_array_almost_equal(WS_eff[190, ::50], center_ref)
    npt.assert_array_almost_equal(WS_eff[250, ::50], side_ref)
Exemple #16
0
def get_wfms(wt, site=Hornsrev1Site(), wake_model=NOJDeficit(), superpositionModel=SquaredSum()):
    wfm1 = PropagateDownwind(site, wt, wake_model, superpositionModel=superpositionModel)
    wfm2 = All2AllIterative(site, wt, wake_model, superpositionModel=superpositionModel)
    wfm2.verbose = False
    wfm1.verbose = False
    return wfm1, wfm2
Exemple #17
0
def test_superposition_model_indices(superpositionModel, sum_func):
    class WTSite(UniformSite):
        def local_wind(self,
                       x_i=None,
                       y_i=None,
                       h_i=None,
                       wd=None,
                       ws=None,
                       wd_bin_size=None,
                       ws_bins=None):
            lw = UniformSite.local_wind(self,
                                        x_i=x_i,
                                        y_i=y_i,
                                        h_i=h_i,
                                        wd=wd,
                                        ws=ws,
                                        wd_bin_size=wd_bin_size,
                                        ws_bins=ws_bins)
            lw['WS'] = xr.DataArray(
                lw.WS_ilk + np.arange(len(x_i))[:, np.newaxis, np.newaxis],
                [('wt', [0, 1, 2]), ('wd', np.atleast_1d(wd)),
                 ('ws', np.atleast_1d(ws))])

            return lw

    site = WTSite([1], 0.1)

    x_i = [0, 0, 0]
    y_i = [0, -40, -100]
    h_i = [50, 50, 50]

    # WS_ilk different at each wt position
    WS_ilk = site.local_wind(x_i, y_i, h_i, wd=0, ws=8.1).WS_ilk
    npt.assert_array_equal(WS_ilk, np.reshape([8.1, 9.1, 10.1], (3, 1, 1)))

    for wake_model in [
            PropagateDownwind(site,
                              NibeA0,
                              wake_deficitModel=NOJDeficit(),
                              superpositionModel=superpositionModel),
            All2AllIterative(site,
                             NibeA0,
                             wake_deficitModel=NOJDeficit(),
                             superpositionModel=superpositionModel)
    ]:

        # No wake (ct = 0), i.e. WS_eff == WS
        WS_eff_ilk = wake_model.calc_wt_interaction(x_i, y_i, h_i, [1, 1, 1],
                                                    0.0, 8.1)[0]
        npt.assert_array_equal(WS_eff_ilk, WS_ilk)

        ref = WS_ilk - np.reshape(
            [0, 3.75, sum_func([2.4, 3.58974359])], (3, 1, 1))

        # full wake (CT=8/9)
        WS_eff_ilk = wake_model.calc_wt_interaction(x_i, y_i, h_i, [0, 0, 0],
                                                    0.0, 8.1)[0]
        npt.assert_array_almost_equal(WS_eff_ilk, ref)

        sim_res = wake_model(x_i, y_i, h_i, [0, 0, 0], 0.0, 8.1)
        WS_eff_ilk = sim_res.flow_map(HorizontalGrid(x=[0], y=y_i,
                                                     h=50)).WS_eff_xylk[:, 0]

        npt.assert_array_almost_equal(WS_eff_ilk, ref)
from py_wake.turbulence_models.stf import STF2017TurbulenceModel
from py_wake.wind_farm_models.engineering_models import PropagateDownwind, All2AllIterative
from py_wake.utils.model_utils import get_models
from numpy import newaxis as na


class GCLLocalDeficit(GCLDeficit):
    def __init__(self):
        GCLDeficit.__init__(self, use_effective_ws=True, use_effective_ti=True)


@pytest.mark.parametrize(
    'deficitModel,aep_ref',
    # 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,
    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, 90]).flow_map(HorizontalGrid(resolution=1000))
    # check that deficit matrix > 10MB (i.e. it enters the memory saving loop)
Exemple #20
0
                ax.set_ylabel('Integrated velocity deficit')
                ax.get_xaxis().set_visible(False)
            self._add_legend(fig)

    def plot_multiwake_power(self):
        for case in self.multi_wake_cases:
            case.plot(self.windFarmModel_dict)


if __name__ == '__main__':
    import matplotlib
    matplotlib.rcParams.update({'figure.max_open_warning': 0})
    validation = Validation()
    site, windTurbines = ValidationSite(), ValidationWindTurbines()
    validation.add_windFarmModel(
        "NOJ",
        PropagateDownwind(site, windTurbines, wake_deficitModel=NOJDeficit()),
        ':')
    validation.add_windFarmModel(
        "NOJ(k=0.04)",
        PropagateDownwind(site,
                          windTurbines,
                          wake_deficitModel=NOJDeficit(k=0.04)), ':')

    #     validation.plot_deficit_profile()
    #     validation.plot_integrated_deficit()
    #     plt.close('all')
    validation.plot_multiwake_power()

    plt.show()
    all_deficit_modules = []
    for loader, module_name, _ in pkgutil.walk_packages([os.path.dirname(deficit_models.__file__)]):

        _module = loader.find_module(module_name).load_module(module_name)
        for n in dir(_module):
            v = _module.__dict__[n]
            if inspect.isclass(v) and issubclass(v, DeficitModel) and \
                    v not in [DeficitModel, ConvectionDeficitModel] and not issubclass(v, RotorAvgModel):
                all_deficit_modules.append(v())
    return all_deficit_modules


@pytest.mark.parametrize(
    'deficitModel,aep_ref',
    # 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/'),
Exemple #22
0
                wd, ws_lst = case.get_result(wfm)
                for ax, ws, xD in zip(axes, ws_lst, case.xD):
                    int_vel_def = integrate_velocity_deficit_arc(wd, ws * case.U0, xD, case.U0)
                    ax.bar(ibar, int_vel_def, width=0.5, color=co, edgecolor=co, label=wfm_name)
            for ax, xD in zip(axes, case.xD):
                ax.set_ylabel('Integrated velocity deficit')
                ax.get_xaxis().set_visible(False)
            self._add_legend(fig)

    def plot_multiwake_power(self):
        for case in self.multi_wake_cases:
            case.plot(self.windFarmModel_dict)


if __name__ == '__main__':
    import matplotlib
    matplotlib.rcParams.update({'figure.max_open_warning': 0})
    validation = Validation()
    site, windTurbines = ValidationSite(), ValidationWindTurbines()
    validation.add_windFarmModel("NOJ", PropagateDownwind(site, windTurbines, wake_deficitModel=NOJDeficit()), ':')
    validation.add_windFarmModel(
        "NOJ(k=0.04)",
        PropagateDownwind(site, windTurbines, wake_deficitModel=NOJDeficit(k=0.04)), ':')

    validation.plot_deficit_profile()
#     validation.plot_integrated_deficit()
#     plt.close('all')
    validation.plot_multiwake_power()

    plt.show()