Open and run in Colab (interactive) Edit on Gitlab

Nested turbine type specific optimization

In this example, a nested optimization is performed accounting for the layout and the turbine types. The inner layer solves the layout optimization problem with a gradient-based solver, and the outer layer changes the turbine types with a gradient-free (random-search) solver. In this case, the boundaries are not specific to the wind turbine and a spacing and circular boundary contraints are used.

The objective function is to minimize the wake losses produced by neighbouring wind turbines.

Install TOPFARM if needed

[1]:
# Install TopFarm if needed
import importlib
if not importlib.util.find_spec("topfarm"):
    !pip install git+https://gitlab.windenergy.dtu.dk/TOPFARM/TopFarm2.git

Loading Python dependencies.

[2]:
import numpy as np
import matplotlib.pyplot as plt

Loading PyWake dependencies. We import the two turbines to use (Vestas V80 and the DTU 10MW reference turbine) as well as the site (IEA37) and the wake deficit model (IEA37SimpleBastankhahGaussian) to use for the optimization.

[3]:
from py_wake.examples.data.iea37._iea37 import IEA37Site
from py_wake.wind_turbines import WindTurbines
from py_wake.examples.data.hornsrev1 import V80
from py_wake.examples.data.dtu10mw import DTU10MW
from py_wake.deficit_models.gaussian import IEA37SimpleBastankhahGaussian
from py_wake.utils.gradients import autograd

Loading TOPFARM dependencies.

[4]:
import topfarm
from topfarm.cost_models.cost_model_wrappers import CostModelComponent
from topfarm import TopFarmProblem
from topfarm.easy_drivers import EasyRandomSearchDriver, EasyScipyOptimizeDriver
from topfarm.drivers.random_search_driver import randomize_turbine_type
from topfarm.constraint_components.boundary import CircleBoundaryConstraint
from topfarm.constraint_components.spacing import SpacingConstraint, SpacingTypeConstraint
from topfarm.plotting import XYPlotComp, TurbineTypePlotComponent, NoPlot

We first define the site and initial positions for the optimization problem.

[5]:
# Site definition
n_wt = 9
site = IEA37Site(n_wt, ti=0.05)
wt_x = site.initial_position[:, 0]
wt_y = site.initial_position[:, 1]
[6]:
# plot wind rose
plt.figure(dpi=100)
site.plot_wd_distribution()
[6]:
<xarray.DataArray (sector: 12)> Size: 96B
array([0.03275556, 0.03466667, 0.04457778, 0.08075556, 0.10533333,
       0.15191111, 0.08742222, 0.0512    , 0.08915556, 0.23697778,
       0.05386667, 0.03422222])
Coordinates:
  * sector   (sector) int64 96B 0 1 2 3 4 5 6 7 8 9 10 11
Attributes:
    description:  Probability of wind flow case (i.e. wind direction and wind...
../_images/notebooks_nested_optimization_type_and_positions_11_1.png

We now set up the two turbine types and define their basic paramenters such as diameter, hub height and CT curve. A TurbineTypes class is created to merge the turbine objects to then feed into the wind farm model as WindTurbines object.

[7]:
# Turbine types
turb_types = [0, 1]
names = ['V80', 'DTU10MW']
diameters = [V80().diameter(), DTU10MW().diameter()]
hub_heights = [V80().hub_height(), DTU10MW().hub_height()]
powerCtFunctions = [V80().powerCtFunction, DTU10MW().powerCtFunction]
n_types = len(turb_types)


# Merge turbine objects
class TurbineTypes(WindTurbines):
    def __init__(self):
        super().__init__(names, diameters, hub_heights, powerCtFunctions)

windTurbines = TurbineTypes()
[8]:
diameters
[8]:
[np.float64(80.0), np.float64(178.3)]
[9]:
# Wind farm model
wfm = IEA37SimpleBastankhahGaussian(site, windTurbines)
/builds/TOPFARM/TopFarm2/.pixi/envs/default/lib/python3.11/site-packages/py_wake/deficit_models/gaussian.py:277: UserWarning: The IEA37SimpleBastankhahGaussian model is not representative of the setup used in the literature. For this, use py_wake.literature.iea37_case_study1.IEA37CaseStudy1 instead
  DeprecatedModel.__init__(self, 'py_wake.literature.iea37_case_study1.IEA37CaseStudy1')

We now set up the objective function and the CostModelComponent.

[10]:
# Objective function and cost model component

def wake_loss(x, y, type, **kwargs):
    '''Calculate the wake losses in %.'''
    simres = wfm(x, y, type=np.asarray(type, dtype=int), **kwargs)
    aep_ref = simres.aep().values.sum()
    aep_nowake = simres.aep(with_wake_loss=False).values.sum()
    loss = 100 * (aep_nowake - aep_ref) / aep_nowake
    return loss


cost_comp = CostModelComponent(input_keys=[('x', wt_x),('y', wt_y)],
                                          n_wt=n_wt,
                                          cost_function=wake_loss,
                                          objective=True,
                                          maximize=False,
                                          output_keys=[('Wake losses', 0)],
                                          output_unit='%',
                                          additional_input= [(topfarm.type_key, np.ones(n_wt, dtype=int))]
                                          )

Optimization set up

The first layer of the optimization takes the turbine positions and design variables as well as the spacing and boundary constraints.

[11]:
# Layout component (1st layer of the optimization)
layout_problem = TopFarmProblem(design_vars={topfarm.x_key: wt_x,
                                             topfarm.y_key: wt_y},
                                cost_comp=cost_comp,
                                driver=EasyScipyOptimizeDriver(maxiter=30, tol=1e-2, disp=False),
                                constraints=[SpacingTypeConstraint(3*np.asarray(diameters)),
                                              CircleBoundaryConstraint([0, 0], 600)],
                                plot_comp=NoPlot(),
                                expected_cost=1,
                                ext_vars={topfarm.type_key: np.zeros(n_wt, dtype=int)},
                                )
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000434 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000135 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000033 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000138 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).

The second layer utilizes the optimized layout to then find the optimal turbine types that satisfy the objective function.

[12]:
# topfarm main problem - uses the layout problem as component and turbine type as design variables (2nd layer)
problem = TopFarmProblem(design_vars={topfarm.type_key: ([1, 0, 1, 0, 1, 0, 1, 0 ,1], 0, int(n_types-1))},
                          cost_comp=layout_problem,
                          driver=EasyRandomSearchDriver(randomize_turbine_type, max_iter=30, disp=False)
                          )
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000117 sec).
INFO: checking system...
INFO:     system check complete (0.000009 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000087 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000015 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000088 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000021 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
[13]:
# Run the optimization.
cost, state, recorder = problem.optimize()
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000109 sec).
INFO: checking system...
INFO:     system check complete (0.000007 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000095 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000014 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000083 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000017 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000159 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000119 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000031 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000117 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000030 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000149 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000105 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000120 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000030 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000150 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000118 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000043 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000009 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000148 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000046 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000005 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000147 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000106 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000128 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000030 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000166 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000113 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000006 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000120 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000158 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000127 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000029 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000132 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000041 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000168 sec).
INFO: checking system...
INFO:     system check complete (0.000017 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000146 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000029 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000145 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000074 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000148 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000133 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000141 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000228 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000172 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000130 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000139 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000101 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000127 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000030 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000154 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000124 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000119 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000144 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000126 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000027 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000126 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000164 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000114 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000141 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000150 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000102 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000024 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000116 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000030 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000002 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000217 sec).
INFO: checking system...
INFO:     system check complete (0.000023 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000157 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000133 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000139 sec).
INFO: checking system...
INFO:     system check complete (0.000012 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000112 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000024 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000002 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000116 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000028 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000002 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000157 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000122 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000129 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000141 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000117 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000128 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000146 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000115 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000024 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000127 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000161 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000119 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000141 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000155 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000115 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000129 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000002 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000146 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000115 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000027 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000011 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000133 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000180 sec).
INFO: checking system...
INFO:     system check complete (0.000023 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000152 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000029 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000005 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000137 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000035 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000147 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000122 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000131 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000200 sec).
INFO: checking system...
INFO:     system check complete (0.000030 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000162 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000031 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000157 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000050 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000155 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000103 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000116 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000002 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000197 sec).
INFO: checking system...
INFO:     system check complete (0.000012 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000109 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000131 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000036 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000140 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000118 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000125 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000166 sec).
INFO: checking system...
INFO:     system check complete (0.000017 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000130 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000038 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000133 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000038 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000144 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000112 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000122 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000149 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000110 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000139 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000180 sec).
INFO: checking system...
INFO:     system check complete (0.000022 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000147 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000005 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000140 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000170 sec).
INFO: checking system...
INFO:     system check complete (0.000025 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000148 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000030 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000136 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000167 sec).
INFO: checking system...
INFO:     system check complete (0.000020 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000163 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000005 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000158 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000047 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000160 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000114 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000124 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000171 sec).
INFO: checking system...
INFO:     system check complete (0.000021 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000137 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000030 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000137 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000040 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000148 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000113 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000126 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000153 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000120 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000139 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000040 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000152 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000128 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000132 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000162 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000127 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000027 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000159 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000036 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000163 sec).
INFO: checking system...
INFO:     system check complete (0.000018 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000127 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000037 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000133 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000036 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000183 sec).
INFO: checking system...
INFO:     system check complete (0.000023 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000143 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000037 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000005 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000164 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000043 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000183 sec).
INFO: checking system...
INFO:     system check complete (0.000017 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000129 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000027 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000139 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000048 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000136 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000104 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000024 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000119 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000144 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000107 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000125 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000149 sec).
INFO: checking system...
INFO:     system check complete (0.000017 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000152 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000163 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000044 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000162 sec).
INFO: checking system...
INFO:     system check complete (0.000030 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000157 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000030 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000161 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000048 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000005 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000151 sec).
INFO: checking system...
INFO:     system check complete (0.000017 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000123 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000129 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000184 sec).
INFO: checking system...
INFO:     system check complete (0.000025 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000124 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000027 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000134 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000033 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000148 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000109 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000120 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000145 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000108 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000122 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000145 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000110 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000128 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000157 sec).
INFO: checking system...
INFO:     system check complete (0.000016 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000126 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000030 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000005 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000163 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000053 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000006 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000141 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000111 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000031 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000145 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000152 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000118 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000126 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000032 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000159 sec).
INFO: checking system...
INFO:     system check complete (0.000014 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000111 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000026 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000187 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000037 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000004 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000163 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000121 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000130 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000034 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000142 sec).
INFO: checking system...
INFO:     system check complete (0.000013 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000105 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000025 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000003 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000122 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000031 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
INFO: checking out_of_order...
INFO:     out_of_order check complete (0.000161 sec).
INFO: checking system...
INFO:     system check complete (0.000015 sec).
INFO: checking solvers...
INFO:     solvers check complete (0.000134 sec).
INFO: checking dup_inputs...
INFO:     dup_inputs check complete (0.000028 sec).
INFO: checking missing_recorders...
INFO:     missing_recorders check complete (0.000004 sec).
INFO: checking unserializable_options...
INFO:     unserializable_options check complete (0.000157 sec).
INFO: checking comp_has_no_outputs...
INFO:     comp_has_no_outputs check complete (0.000043 sec).
INFO: checking auto_ivc_warnings...
INFO:     auto_ivc_warnings check complete (0.000003 sec).
[14]:
print(state['type'])
[1. 0. 0. 0. 0. 0. 0. 0. 1.]

Given that wind turbine type 0 (V80) has significantly smaller diameter and hub height, the solver selects mostly that type. The type 1 causes larger wake losses due to larger rotor diameter. However, a sweet spot can exist that allows to minimize the wake based on the hub height difference of type 1.

[15]:
# predominant wind directions are: 270 and 150 deg
wds = [150, 270]
wps = [8]
simres = wfm(state['x'], state['y'], type=state['type'], ws=wps, wd=wds)


fig, ax = plt.subplots(1, 2, figsize=(10, 4), dpi=100, tight_layout=True)
for i in range(2):
    fm = simres.flow_map(wd=wds[i])
    fm.plot_wake_map(ax=ax[i])
    ax[i].set_xlabel('x')
    ax[i].set_ylabel('y')
../_images/notebooks_nested_optimization_type_and_positions_26_0.png
[16]:
fig, ax = plt.subplots()
ax.plot(recorder['Wake losses'])
ax.set_title('Wake loss')
ax.set_xlabel('Iteration')
ax.set_ylabel('Wake loss [%]')
[16]:
Text(0, 0.5, 'Wake loss [%]')
../_images/notebooks_nested_optimization_type_and_positions_27_1.png