BifurcationKit.jl

Documentation Build Status Downloads
docs-stable docs-dev Build status codecov

IMPORTANT NOTICE

New version of the package with modified interface. You are now required to define a BifurcationProblem to perform continuation or bifurcation analysis. The previous interface is available under the tag 0.1.12 which can be installed by doing

] add BifurcationKit@0.1.12

The new version provides many bugs fix though. (Please note that the docs are up to date).

This Julia package aims at performing automatic bifurcation analysis of possibly large dimensional equations F(u, λ)=0 where λ∈ℝ by taking advantage of iterative methods, dense / sparse formulation and specific hardwares (e.g. GPU).

It incorporates continuation algorithms (PALC, deflated continuation, ...) based on a Newton-Krylov method to correct the predictor step and a Matrix-Free/Dense/Sparse eigensolver is used to compute stability and bifurcation points.

The idea is to be able to seemingly switch the continuation algorithm a bit like changing the time stepper (Euler, RK4,...) for ODEs.

By leveraging on the above method, it can also seek for periodic orbits of Cauchy problems. It is by now, one of the only softwares which provides shooting methods AND methods based on finite differences or collocation to compute periodic orbits.

The current focus is 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 sub-manifolds...

Despite focus on large scale problems, the package can easily handle low dimensional problems and specific optimizations are regularly added.

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 HAL-Inria as follows:

@misc{veltz:hal-02902346,
  TITLE = {{BifurcationKit.jl}},
  AUTHOR = {Veltz, Romain},
  URL = {https://hal.archives-ouvertes.fr/hal-02902346},
  INSTITUTION = {{Inria Sophia-Antipolis}},
  YEAR = {2020},
  MONTH = Jul,
  KEYWORDS = {pseudo-arclength-continuation ; periodic-orbits ; floquet ; gpu ; bifurcation-diagram ; deflation ; newton-krylov},
  PDF = {https://hal.archives-ouvertes.fr/hal-02902346/file/354c9fb0d148262405609eed2cb7927818706f1f.tar.gz},
  HAL_ID = {hal-02902346},
  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

Automatic Bif. Diagram in 1D Swift Hohenberg Automatic Bif. Diagram in 2D Bratu
Snaking in 2D Swift Hohenberg Periodic orbits in 1D Brusselator
Period doubling BVAM Model Periodic orbits in 2D Ginzburg-Landau
Deflated Continuation in Carrier problem 2D Swift Hohenberg on GPU

Main features

  • Newton-Krylov solver with generic linear / eigen preconditioned solver. Idem for the arc-length continuation.
  • Newton-Krylov solver with nonlinear deflation and preconditioner. It can be used for branch switching for example.
  • Continuation written as an iterator
  • Monitoring user functions along curves computed by continuation, see events
  • Continuation methods: PALC, Moore Penrose, Deflated continuation, ANM, ...
  • Bifurcation points located with a bisection algorithm
  • Detection of Branch, Fold, Hopf bifurcation point of stationary solutions and computation of their normal form.
  • Automatic branch switching at branch points (whatever the dimension of the kernel)
  • Automatic branch switching at simple Hopf points to periodic orbits
  • Automatic computation of bifurcation diagrams of equilibria
  • Fold / Hopf continuation based on Minimally Augmented formulation, with Matrix Free / Sparse Jacobian.
  • Detection of all codim 2 bifurcations of equilibria and computation of the normal forms of Bogdanov-Takens, Bautin and Cusp
  • Branching from Bogdanov-Takens points to Fold / Hopf curve
  • Periodic orbit computation and continuation using Shooting, Finite Differences or Orthogonal Collocation.
  • Detection of Branch, Fold, Neimark-Sacker, Period Doubling bifurcation point of periodic orbits.
  • 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 solvers, like use Deflation for Periodic orbit computation or Fold of periodic orbits family.

Features Matrix Free Custom state Tutorial GPU
(Deflated) Krylov-Newton Yes Yes All :heavy_check_mark:
Continuation PALC (Natural, Secant, Tangent, Polynomial) Yes Yes All :heavy_check_mark:
Deflated Continuation Yes Yes :arrow_heading_up: :heavy_check_mark:
Bifurcation / Fold / Hopf point detection Yes Yes All / All / :arrow_heading_up: :heavy_check_mark:
Fold Point continuation Yes Yes :arrow_heading_up:, :arrow_heading_up: :heavy_check_mark:
Hopf Point continuation Yes AbstractArray
Bogdanov-Takens Point newton Yes AbstractArray
Branch point / Fold / Hopf normal form Yes Yes :heavy_check_mark:
Branch switching at Branch / Hopf points Yes AbstractArray :arrow_heading_up: :heavy_check_mark:
Automatic bifurcation diagram computation of equilibria Yes AbstractArray :arrow_heading_up:
Periodic Orbit (Trapezoid) Newton / continuation Yes AbstractVector :arrow_heading_up:, :arrow_heading_up: :heavy_check_mark:
Periodic Orbit (Collocation) Newton / continuation Yes AbstractVector :arrow_heading_up:
Periodic Orbit (Parallel Poincaré / Standard Shooting) Newton / continuation Yes AbstractArray :arrow_heading_up:
Fold, Neimark-Sacker, Period doubling detection Yes AbstractVector :arrow_heading_up:
Continuation of Fold of periodic orbits Yes AbstractVector :arrow_heading_up: :heavy_check_mark:
Bogdanov-Takens / Bautin / Cusp / Zero-Hopf / Hopf-Hopf point detection Yes Yes :heavy_check_mark:
Bogdanov-Takens / Bautin / Cusp / Zero-Hopf / Hopf-Hopf normal forms Yes Yes :heavy_check_mark:
Branching from Bogdanov-Takens points to Fold / Hopf curve Yes AbstractVector