Expected User Knowledge#
To fully utilize all of the functionality of Aviary, some background knowledge is required. This section details the recommend user knowledge to use Aviary for different purposes.
Fundamentals of Aircraft Design#
One of the most important aspects of performing computational design and optimization is understanding the resulting designs, if they’re realistic, and what those designs mean in the real world. Thus, some knowledge of aircraft design is greatly beneficial when running Aviary.
The user is expected to understand how conventional aircraft fly simple missions (takeoff, climb, cruise, descent). Additionally, a understanding of how forces act on the aircraft during flight is helpful, including aerodynamic lift and drag, propulsive thrust, and the weight of the aircraft. Many of Aviary’s components are based on these basic principles, which are often detailed in introductory aircraft design textbooks.
More advanced users will benefit by understanding how different mission definitions, constraints, and design variables affect the aircraft design and optimal trajectory. Advanced users can also benefit from understanding how the different subsystems are modeled and how they interact with each other. User-defined external subsystems generally require a bit more aircraft design knowledge to understand how they will impact vehicle performance.
Optimization#
Aviary uses many concepts related to multidisciplinary optimization (MDO) to perform its design and optimization tasks. Knowledge of MDO techniques and theory is not required to use Aviary, however it is strongly recommended even for basic users to help understand their models and debug issues.
The OpenMDAO dev team has a series called Practical MDO that is a great resource for learning about MDO. It consists of short lesson videos and corresponding Python notebooks that teach the basics of MDO. For a quick introduction to gradient-based multidisciplinary optimization, check out this video from the Practical MDO series.
There is also a free textbook on MDO available written by Professors Joaquim R.R.A. Martins and Andrew Ning.
Note
This textbook is cited as a reference only, and is not officially endorsed by the Aviary team or NASA.
Programming in Python#
The goal of Aviary is to make aircraft design and optimization accessible to a wide range of users while providing a flexible and powerful platform for advanced users.
Users can interact with Aviary without any programming knowledge through use of input files and the command line, and viewing results in a web browser.
Setting up and running Aviary models can also be scripted using the Python API. For this kind of analysis, users are expected to have a basic understanding of Python and object-oriented programming. Interacting with Aviary in this way unlocks most of its functionality. Models and optimization setup are significantly more customizable, and external subsystems can be defined and added.
For advanced users, the Aviary API is just a suggestion. The code is very modular and lends itself well to being utilized in pieces. A problem can be completely scripted from beginning to end directly utilizing parts of Aviary where desired. At this level, users need a strong understanding of Python, object-oriented programming, and the Aviary codebase in general.
Familiarity With Dependencies#
As users dig deeper into the Aviary code, they will encounter the various dependencies that Aviary relies on. The most important of these is OpenMDAO, which is the optimization framework that Aviary is built on top of. In addition to its basic user guide, users are encouraged to learn more about the following topics in the OpenMDAO Advanced User Guide:
Aviary also relies on Dymos for its trajectory optimization capabilities. Users are recommended to read through the following sections:
For most Aviary models an understanding of these dependencies is not strictly required. Experience with OpenMDAO and Dymos will be helpful when using Aviary’s Python API and for diagnosing failed optimizations. For example, knowing how to scale variables in OpenMDAO or choosing a reasonable number of nodes in Dymos can help solve optimization convergence issues.