This page covers how the optimization code is setup, along with some more detailed explanations of the geometry control framework. This will just cover a simple aerodynamic shape optimization setup. Over time, many more involved optimization capabilities have been added, e.g. unsteady optimization, pseudo-MDO, etc. These are more project-specific and are not discussed here. For info on them, speak to a senior lab member.
The aerodynamic shape optimization code is comprised of five components:
Details of these won't be discussed here (see group theses for details.)
At a high level, the optimization code subroutines are structured as follows:
The subroutine optimize() calls initializing routines, including initOptimier() and usrfun(), then calls the optimizer, SNOPT. The subroutines initOptimize() and usrfun() are the most often modified routines, so will be discribed briefly below.
Currently, these two subroutines are setup for simple optimizations. To avoid clutter, specific optimization frameworks, e.g. unsteady optimization, pseudo-MDO, etc., have their own versions of these two routines which are called from within the initOptimize() and usrfun(). For example, if using the Axial Control framework, calls to initAxlCtrlOptimize() and usrfunAxlCtrl() are made from initOptimize() and usrfun().