Beispiel #1
0
def _iterate_visualization(axes, owflop, history):
    axes['convergence'].clear()
    vis.draw_convergence(axes['convergence'], history)
    axes['step_size'].clear()
    vis.draw_step_size(axes['step_size'], history)
    axes['layout'].clear()
    vis.site_setup(axes['layout'])
    vis.connect_layouts(axes['layout'], history.layout)
    vis.draw_turbines(axes['layout'], history.isel(iteration=0).layout,
                      owflop.rotor_radius_adim)
    vis.draw_turbines(axes['layout'], history.isel(iteration=-1).layout,
                      owflop.rotor_radius_adim,
                      minimal_proximity=owflop.minimal_proximity,
                      inside=owflop.inside)
    vis.draw_boundaries(axes['layout'], owflop.boundaries)
    _plt.pause(0.1)
Beispiel #2
0
def _setup_visualization(owflop, history):
    axes = {}
    fig = _plt.figure()
    grid = _gs.GridSpec(3, 5)
    axes['windrose'] = fig.add_subplot(grid[0, :2], polar=True)
    vis.draw_windrose(axes['windrose'], owflop._ds.direction_pmf)
    axes['convergence'] = fig.add_subplot(grid[1, :2])
    axes['step_size'] = fig.add_subplot(grid[2, :2],
                                        sharex=axes['convergence'])
    axes['layout'] = fig.add_subplot(grid[:, 2:])
    vis.site_setup(axes['layout'])
    vis.draw_turbines(axes['layout'], history.isel(iteration=0).layout,
                      owflop.rotor_radius_adim,
                      minimal_proximity=owflop.minimal_proximity,
                      inside=owflop.inside)
    vis.draw_boundaries(axes['layout'], owflop.boundaries)
    grid.tight_layout(fig)
    _plt.pause(.10)
    return axes
Beispiel #3
0
plt.rc('axes', titlesize=10)

# %% set up problem
o = wflopg.Owflop()
o.load_problem("problem-IEA37_Optimization_Case_Study-small.yaml",
               wind_resource="wind_resource-from_West.yaml")
o.calculate_wakeless_power()
o.calculate_deficit()
o.calculate_power()
o.calculate_relative_wake_loss_vector()

# %% save initial layout figure
fig = plt.figure()
ax = plt.subplot(111)
vis.site_setup(ax, o.minimal_proximity)
vis.draw_boundaries(ax, o.boundaries)
vis.draw_turbines(ax, o._ds.layout, o.rotor_radius_adim, o.minimal_proximity)
fig.savefig('IEA37C1W_16-layout_initial.pdf', bbox_inches="tight")

# %% plot windrose and initial pseudogradients
fig = plt.figure(figsize=(8, 1.7))
alignax = None
gs = fig.add_gridspec(ncols=6, nrows=1, wspace=0., hspace=0.,
                      width_ratios=[.8, .2] + 4*[1])
axwr = fig.add_subplot(gs[0:2, 0], polar=True)
vis.draw_windrose(axwr, o.wind_rose.dir_weights)
axwr.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2])
axwr.set_xticklabels(['N', 'O', 'S', 'W'])
axwr.xaxis.set_tick_params(pad=-2)
axwr.set_rticks([])
#
Beispiel #4
0
                       nrows=3,
                       wspace=0.,
                       hspace=0.,
                       width_ratios=[1] * 2,
                       height_ratios=[1.1, .9, .9])
 #
 axp = {}
 shareyp = None
 axc = {}
 shareyc = None
 axs = {}
 shareys = None
 for k, kind in enumerate(['soft', 'aggressive']):
     axp[kind] = fig.add_subplot(gs[0, k], sharey=shareyp)
     vis.site_setup(axp[kind], o.minimal_proximity)
     vis.draw_boundaries(axp[kind], o.boundaries)
     vis.draw_turbines(axp[kind],
                       history[(kind, turbines)].layout.sel(iteration=0),
                       o.rotor_radius_adim,
                       turbine_color='#87f')
     vis.draw_turbines(
         axp[kind],
         history[(kind, turbines)].layout.isel(
             iteration=history[(kind, turbines)].objective.argmin()),
         o.rotor_radius_adim,
         o.minimal_proximity,
         turbine_color='#f56')
     vis.connect_layouts(axp[kind], history[(kind, turbines)].layout)
     axp[kind].set_xlim([-1.02, 1])
     axp[kind].set_ylim([-1.02, .47])
     axp[kind].set_title(kind)
Beispiel #5
0
plt.rc('font', family='serif', serif='Times')
plt.rc('axes', titlesize=10)

# %% set up problem
o = wflopg.Owflop()
o.load_problem("problem-Mosetti_et_al-WLP.yaml")
o.calculate_wakeless_power()
o.calculate_deficit()
o.calculate_power()
o.calculate_relative_wake_loss_vector()

# %% save initial layout figure
fig = plt.figure()
ax = plt.subplot(111)
vis.site_setup(ax, o.minimal_proximity)
vis.draw_boundaries(ax, o.boundaries)
vis.draw_turbines(ax, o._ds.layout, o.rotor_radius_adim, o.minimal_proximity)
fig.savefig('Mosetti_et_al-layout_initial.pdf', bbox_inches="tight")

# %% optimize using to various pseudo-gradient types
history = {}
# %% start from Mosetti's layout
o = wflopg.Owflop()
o.load_problem("problem-Mosetti_et_al-WLP.yaml")
o.calculate_wakeless_power()
history['M'] = opt.step_iterator(o, max_iterations=20,
                                 multiplier=3, scaling=[.9, 1.1])
# %% start from hex layout
o = wflopg.Owflop()
o.load_problem(
    "problem-Mosetti_et_al-WLP.yaml",
Beispiel #6
0
gs = fig.add_gridspec(ncols=2,
                      nrows=3,
                      wspace=0.,
                      hspace=0.,
                      width_ratios=[1] * 2,
                      height_ratios=[1.1, .9, .9])
axp = {}
shareyp = None
axc = {}
shareyc = None
axs = {}
shareys = None
for k, n in enumerate([36, 64]):
    axp[n] = fig.add_subplot(gs[0, k], sharey=shareyp)
    vis.site_setup(axp[n], os[n].minimal_proximity)
    vis.draw_boundaries(axp[n], os[n].boundaries)
    vis.draw_turbines(axp[n],
                      histories[n].layout.sel(iteration=0),
                      os[n].rotor_radius_adim,
                      turbine_color='#87f')
    vis.draw_turbines(
        axp[n],
        histories[n].layout.isel(iteration=histories[n].objective.argmin()),
        os[n].rotor_radius_adim,
        os[n].minimal_proximity,
        turbine_color='#f56')
    vis.connect_layouts(axp[n], histories[n].layout)
    axp[n].set_title(f"{n} turbines")
    axs[n] = fig.add_subplot(gs[2, k], sharey=shareys)
    vis.draw_step_size(axs[n], histories[n])
    axs[n].set_xlim([-2.5, 32.5])