# How to Cite OpenMDAO¶

There is a general OpenMDAO paper that includes a high-level overview of the framework, including how implicit and explicit components leverage the underlying core APIs to support multidisciplinary modeling. There is a walk-through example of how some of the key underlying mathematics of the framework are used and how analytic derivatives are computed. Lastly, there are examples of how and when to use some of the specialized algorithms for computing derivatives efficiently for different kinds of problems.

We hope the paper helps you understand the framework better, and most importantly, helps you to solve some really nice MDO problems! If you do make use of OpenMDAO, please cite this paper.

```
@article{openmdao_2019,
Author={Justin S. Gray and John T. Hwang and Joaquim R. R. A. Martins and Kenneth T. Moore and Bret A. Naylor},
Title="{OpenMDAO: An Open-Source Framework for Multidisciplinary Design, Analysis, and Optimization}",
Journal="{Structural and Multidisciplinary Optimization}",
Year={2019},
Volume={59},
pages={1075-1104},
issue={4},
Publisher={Springer},
pdf={http://mdolab.engin.umich.edu/sites/default/files/OpenMDAO_preprint_0.pdf},
Doi={10.1007/s00158-019-02211-z},
}
```

## With the openmdao command¶

Depending on which parts of OpenMDAO you are using, there are also a few other papers that are appropriate to cite. OpenMDAO can tell you which citations are appropriate, accounting for what classes you’re actually using in your model.

If you copy the following script into a file called paraboloid.py, then you can get the citations from the command line using the openmdao command-line script.

```
import openmdao.api as om
# build the model
prob = om.Problem()
prob.model.add_subsystem('paraboloid', om.ExecComp('f = (x-3)**2 + x*y + (y+4)**2 - 3'))
# setup the optimization
prob.driver = om.ScipyOptimizeDriver()
prob.driver.options['optimizer'] = 'SLSQP'
prob.model.add_design_var('paraboloid.x', lower=-50, upper=50)
prob.model.add_design_var('paraboloid.y', lower=-50, upper=50)
prob.model.add_objective('paraboloid.f')
prob.setup()
# Set initial values.
prob.set_val('paraboloid.x', 3.0)
prob.set_val('paraboloid.y', -4.0)
# run the optimization
prob.run_driver()
# minimum value
print(prob.get_val('paraboloid.f'))
# location of the minimum
print(prob.get_val('paraboloid.x'))
print(prob.get_val('paraboloid.y'))
```

Optimization terminated successfully. (Exit mode 0) Current function value: -27.33333333333333 Iterations: 5 Function evaluations: 6 Gradient evaluations: 5 Optimization Complete ----------------------------------- [-27.33333333] [6.66666667] [-7.33333333]

```
openmdao cite paraboloid.py
```

Class: <class 'openmdao.core.problem.Problem'> @article{openmdao_2019, Author={Justin S. Gray and John T. Hwang and Joaquim R. R. A. Martins and Kenneth T. Moore and Bret A. Naylor}, Title="{OpenMDAO: An Open-Source Framework for Multidisciplinary Design, Analysis, and Optimization}", Journal="{Structural and Multidisciplinary Optimization}", Year={2019}, Publisher={Springer}, pdf={http://openmdao.org/pubs/openmdao_overview_2019.pdf}, note= {In Press} } Class: <class 'openmdao.drivers.scipy_optimizer.ScipyOptimizeDriver'> @article{Hwang_maud_2018 author = {Hwang, John T. and Martins, Joaquim R.R.A.}, title = "{A Computational Architecture for Coupling Heterogeneous Numerical Models and Computing Coupled Derivatives}", journal = "{ACM Trans. Math. Softw.}", volume = {44}, number = {4}, month = jun, year = {2018}, pages = {37:1--37:39}, articleno = {37}, numpages = {39}, doi = {10.1145/3182393}, publisher = {ACM},