# ConstrainedSystems.jl

tools for solving constrained dynamical systems


This package contains several tools for solving and advancing (large-scale) dynamical systems with constraints. These systems generically have the form

$$$\ddt{y} = L u - B_{1}^{T} z + r_{1}(y,t), \quad B_{2} y = r_{2}(t), \quad y(0) = y_{0}$$$

where $y$ is a state vector, $L$ is a linear operator with an associated matrix exponential (integrating factor), and $z$ is a constraint force vector (i.e., Lagrange multipliers). Systems of this type might arise from, e.g., incompressible fluid dynamics, rigid-body mechanics, or couplings of such systems.

Some of the key components of this package are

• Tools for solving linear algebra problems with constraints and associated Lagrange multipliers, known generically as saddle point systems. The sizes of these systems might be large.

• Time integrators that can incorporate these constraints, such as half-explicit Runge-Kutta (HERK) and integrating factor Runge-Kutta (IFRK), or their combination (IF-HERK). These

extend the tools in the DifferentialEquations.jl package, and utilize the same basic syntax for setting up a problem and solving it.

• Allowance for variable constraint operators B<sub>1</sub><sup>T</sup> and B<sub>2</sub>,

through the use of a variable parameter argument and an associated parameter update function.

• The ability to add an auxiliary (unconstrained) system of equations that the

constraint operators $B_1^T$ and $B_2$ depend upon.

## Installation

This package works on Julia 1.4 and above and is registered in the general Julia registry. To install from the REPL, type e.g.,

] add ConstrainedSystems

Then, in any version, type

julia> using ConstrainedSystems

The plots in this documentation are generated using Plots.jl. You might want to install that, too, to follow the examples.