BifurcationKit.jl
Documentation  Build Status 

This Julia package aims at performing automatic bifurcation analysis of large dimensional equations F(u, λ)=0 where λ∈ℝ by taking advantage of iterative methods, sparse formulation and specific hardwares (e.g. GPU).
It incorporates continuation algorithms (PALC, deflated continuation, ...) which provide a predictor (u1, λ1) from a known solution (u0, λ0). A NewtonKrylov method is then used to correct this predictor and a MatrixFree eigensolver is used to compute stability and bifurcation points.
By leveraging on the above method, it can also seek for periodic orbits of Cauchy problems by casting them into an equation F(u, λ)=0 of high dimension. It is by now, one of the only softwares which provides shooting methods AND methods based on finite differences to compute periodic orbits.
The current package focuses on large scale nonlinear problems and multiple hardwares. Hence, the goal is to use Matrix Free methods on GPU (see PDE example and Periodic orbit example) or on a cluster to solve non linear PDE, nonlocal problems, compute submanifolds...
Support and citation
If you use this package for your work, we ask that you cite the following paper. Open source development as part of academic research strongly depends on this. Please also consider starring this repository if you like our work, this will help us to secure funding in the future. It is referenced on HALInria as follows:
@misc{veltz:hal02902346,
TITLE = {{BifurcationKit.jl}},
AUTHOR = {Veltz, Romain},
URL = {https://hal.archivesouvertes.fr/hal02902346},
INSTITUTION = {{Inria SophiaAntipolis}},
YEAR = {2020},
MONTH = Jul,
KEYWORDS = {pseudoarclengthcontinuation ; periodicorbits ; floquet ; gpu ; bifurcationdiagram ; deflation ; newtonkrylov},
PDF = {https://hal.archivesouvertes.fr/hal02902346/file/354c9fb0d148262405609eed2cb7927818706f1f.tar.gz},
HAL_ID = {hal02902346},
HAL_VERSION = {v1},
}
Installation
This package requires Julia >= v1.3.0
To install it, please run
] add BifurcationKit
To install the bleeding edge version, please run
] add BifurcationKit#master
Website
The package is located here.
Examples of bifurcation diagrams
Main features
 NewtonKrylov solver with generic linear / eigen preconditioned solver. Idem for the arclength continuation.
 NewtonKrylov solver with nonlinear deflation and preconditioner. It can be used for branch switching for example.
 Deflated continuation
 Bifurcation points are located using a bisection algorithm
 Branch, Fold, Hopf bifurcation point detection of stationary solutions.
 Automatic branch switching at branch points (whatever the dimension of the kernel)
 Automatic branch switching at simple Hopf points to periodic orbits
 Automatic bifurcation diagram computation
 Fold / Hopf continuation based on Minimally Augmented formulation, with Matrix Free / Sparse Jacobian.
 Periodic orbit computation and continuation using Shooting or Finite Differences.
 Branch, Fold, NeimarkSacker, Period Doubling bifurcation point detection of periodic orbits.
 Computation and Continuation of Fold of periodic orbits
Custom state means, we can use something else than AbstractArray
, for example your own struct
.
Note that you can combine most of the solvers, like use Deflation for Periodic orbit computation or Fold of periodic orbits family.
Features  Matrix Free  Custom state  Tutorial  GPU 

(Deflated) KrylovNewton  Yes  Yes  All  
Continuation (Natural, Secant, Tangent, Polynomial)  Yes  Yes  All  
Deflated Continuation  Yes  Yes  
Branching / Fold / Hopf point detection  Yes  Yes  All / All / 

Fold Point continuation  Yes  Yes  
Hopf continuation  Yes  AbstractArray 

Branch switching at Branch / Hopf points  Yes  AbstractArray 

Automatic bifurcation diagram computation  Yes  AbstractArray 

Periodic Orbit (FD) Newton / continuation  Yes  AbstractVector 

Periodic Orbit with Parallel Poincaré / Standard Shooting Newton / continuation  Yes  AbstractArray 

Fold, NeimarkSacker, Period doubling detection  Yes  AbstractVector 

Continuation of Fold of periodic orbits  Yes  AbstractVector 
To do or grab
Without a priority order:
 improve compatibility with
DifferentialEquations.jl
 Add interface to other iterative linear solvers (cg, minres,...) from IterativeSolvers.jl