ConstrainedSystems.jl
Tools for solving constrained dynamical systems
Documentation  Build Status 

This package contains several tools for solving and advancing (largescale) dynamical systems with constraints. These systems generically have the form
dy/dt = L y  B_{1}^{T} z + r_{1}(y,t)
B_{2} y + C z = r_{2}(y,t)
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).
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 halfexplicit RungeKutta (HERK) and integrating factor RungeKutta (IFRK), or their combination (IFHERK). 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_{1}^{T} and B_{2}, 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.
The package is agnostic to the type of systems, and might arise from, e.g., fluid dynamics or rigidbody mechanics.