protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            List<WR_LoadCombination> loadCombinations = new List<WR_LoadCombination>();
            bool go = false;
            List<int> modes = new List<int>();
            int maxIterations = 0;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();

            if (!DA.GetData(0, ref structure)) { return; }
            if (!DA.GetDataList(1, loadCombinations)) { return; }
            if (!DA.GetData(2, ref go)) { return; }
            if (!DA.GetDataList(3, modes)) { return; }
            if (!DA.GetData(4, ref maxIterations)) { return; }

            if (go)
            {

                _resElems = new List<ResultElement>();
                _log.Clear();
                watch.Restart();

                // Solve
                WR_CombinedSectionSizer optimizer = new WR_CombinedSectionSizer(structure);

                foreach (WR_LoadCombination lc in loadCombinations)
                {
                    optimizer.AddLoadCombination(lc);
                }

                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                //Run
                _iterations = optimizer.Run(modes, maxIterations);

                watch.Stop();

                _log.Add(String.Format("Run mode shape optimization and section sizer: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();

                // Extract results
                List<WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {

                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d el3d = (WR_Element3d)elems[i];
                        ResultElement re = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));

            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
            DA.SetData(2, _iterations);
        }
        protected override void SolveInstance(IGH_DataAccess DA)
        {
            // Indata
            WR_Structure structure = null;
            List <WR_LoadCombination> loadCombinations = new List <WR_LoadCombination>();
            bool       go            = false;
            List <int> modes         = new List <int>();
            int        maxIterations = 0;

            System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();


            if (!DA.GetData(0, ref structure))
            {
                return;
            }
            if (!DA.GetDataList(1, loadCombinations))
            {
                return;
            }
            if (!DA.GetData(2, ref go))
            {
                return;
            }
            if (!DA.GetDataList(3, modes))
            {
                return;
            }
            if (!DA.GetData(4, ref maxIterations))
            {
                return;
            }


            if (go)
            {
                _resElems = new List <ResultElement>();
                _log.Clear();
                watch.Restart();



                // Solve
                WR_CombinedSectionSizer optimizer = new WR_CombinedSectionSizer(structure);


                foreach (WR_LoadCombination lc in loadCombinations)
                {
                    optimizer.AddLoadCombination(lc);
                }



                watch.Stop();

                _log.Add(String.Format("Initialising: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();


                //Run
                _iterations = optimizer.Run(modes, maxIterations);


                watch.Stop();

                _log.Add(String.Format("Run mode shape optimization and section sizer: {0}ms", watch.ElapsedMilliseconds));

                watch.Restart();


                // Extract results
                List <WR_IElement> elems = structure.GetAllElements();
                for (int i = 0; i < elems.Count; i++)
                {
                    if (elems[i] is WR_Element3d)
                    {
                        WR_Element3d  el3d = (WR_Element3d)elems[i];
                        ResultElement re   = new ResultElement(el3d);
                        _resElems.Add(re);
                    }
                }

                watch.Stop();

                _log.Add(String.Format("Extract results: {0}ms", watch.ElapsedMilliseconds));
            }
            DA.SetDataList(0, _log);
            DA.SetDataList(1, _resElems);
            DA.SetData(2, _iterations);
        }