Architecture
- Complete re-structuring of optimization code. Now the optimization code executes in complete isolation in a worker thread separate from the GUI thread, with results being passed through a multiprocessing.Pipe. This makes the GUI completely responsive during computationally intensive optimization studies, as elements of the GUI are no longer directly accessed by the optimization process. These elements are only triggered to update to show progress using the thread-safe pyqtSignals and pyqtSlots.
Bug fixes
- Aerodynamic force history now saves every generation rather than only at the end to allow the GUI to be able to find the Cp distribution to use for update if the optimal Cp distribution was found in a previous generation.