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://www.umich.edu/~mdolaboratory/pdf/Gray2019a.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();

The following cell issues the openmdao cite paraboloid.py command within a notebook.
The same capability exists in the command-line without the preceding !.

If you are in Colab or Binder, the shell command will not find the file because it is a single notebook without the included file.

!openmdao cite paraboloid.py
/usr/share/miniconda/envs/test/lib/python3.11/pty.py:89: RuntimeWarning: os.fork() was called. os.fork() is incompatible with multithreaded code, and JAX is multithreaded, so this will likely lead to a deadlock.
  pid, fd = os.forkpty()
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},