Easily model and obtain analytic derivatives of arbitrarily complex coupled systems
Author: Taylor McDonnell
CoupledSystems is a modeling framework for easily modeling and obtaining exact derivatives of arbitrarily complex coupled systems. It is similar in nature to OpenMDAO, but relies on a different theoretical foundation for propagating derivatives (and is written in Julia!). It is also designed to automatically interface with a variety of packages in the Julia ecosystem to make obtaining derivatives and solving nonlinear systems of equations relatively painless.
- Can be used to:
- Perform mixed-mode automatic differentiation
- Construct objective and constraint functions (with exact derivatives) for gradient-based optimization.
- Easily construct monolithic coupled systems of equations from an arbitrary number of systems of equations.
- Perform efficient sensitivity analyses and obtain exact derivatives (to machine precision)
- Automatically calculates partial derivatives using:
- Finite Differencing (Implemented using FiniteDiff)
- Forward
- Central
- Complex Step
- Automatic Differentiation
- Forward Mode (Implemented using ForwardDiff)
- Reverse Mode (Implemented using ReverseDiff)
- User-defined analytic calculations
- Finite Differencing (Implemented using FiniteDiff)
- Automatically calculates total derivatives using the
- Chain Rule (for explicit systems)
- Forward
- Reverse
- Analytic Sensitivity Equations (for implicit systems)
- Direct
- Adjoint
- Chain Rule (for explicit systems)
- Multiple solvers available for solving implicit systems
- Efficient and convenient calling interface
- Output only, derivative only, and/or combined output and derivative calculation functions
- Non-allocating interface to reduce/eliminate run-time allocations
- Allocating interface for derivative verification using ForwardDiff
- Only calculates new values/derivatives for each component/subcomponent if inputs have been updated (unless otherwise specified)
Enter the package manager by typing ]
and then run the following:
pkg> add CoupledSystems
See the documentation
[1] Martins, Joaquim R. R. A., and Ning, Andrew, Engineering Design Optimization, Cambridge University Press, 2021.