DDEBifurcationKit.jl
This Julia package aims at performing automatic bifurcation analysis of possibly large dimensional equations delay differential equations (DDE) by taking advantage of iterative methods, dense / sparse formulation and specific hardwares (e.g. GPU).
It builds upon BifurcationKit.jl with version > 0.2 to perform continuation and numerical bifurcation analysis.
Installation
Assuming that you already have Julia correctly installed, it suffices to import DDEBifurcationKit.jl in the standard way:
import Pkg; Pkg.add("https://github.com/bifurcationkit/DDEBifurcationKit.jl")
Citing this work
If you use this package for your work, we ask that you cite the following paper!! Open source development strongly depends on this. 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},
}
Other softwares
There are several good softwares already available.
For continuation in small dimension, most softwares are listed on DSWeb. One can mention the widely used DDE-BIFTOOL, Knut. All these are very reliable and some address high codimension bifurcations.
For large scale problems, there is very little.
In Julia, the present package seems to be the only one.
A word on performance
The examples which follow have not all been written with the goal of performance but rather simplicity.
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, etc. See methods.
- Bifurcation points are located using a bisection algorithm
- detection of Branch, Fold, Hopf bifurcation point of stationary solutions and computation of their normal form.
- <s>Automatic branch switching at branch points (whatever the dimension of the kernel)</s>
- Automatic branch switching at simple Hopf points to periodic orbits
- Automatic bifurcation diagram computation of equilibria
- Fold / Hopf continuation.
- detection all codim 2 bifurcations of equilibria and <s>computation of the normal forms of Bogdanov-Takens, Bautin and Cusp</s>
- <s>Branching from Bogdanov-Takens points to Fold / Hopf curve</s>
- Periodic orbit computation and continuation using <s>Shooting, Finite Differences or </s>Orthogonal Collocation.
- <s>detection of Branch, Fold, Neimark-Sacker, Period Doubling bifurcation point of periodic orbits.</s>
- <s>Continuation of Fold of periodic orbits</s>
Custom state means, we can use something else than AbstractArray
, for example your own struct
.
Type of delay: Constant (C), state-dependent (SD), nested (N)
Features | delay type | Matrix Free | Custom state | Tutorial | GPU |
---|---|---|---|---|---|
(Deflated) Krylov-Newton | C/SD | Yes | Yes | ||
Continuation PALC (Natural, Secant, Tangent, Polynomial) | C/SD | ||||
Bifurcation / Fold / Hopf point detection | C/SD | Y | |||
Fold Point continuation | C/SD | Y | |||
Hopf Point continuation | C/SD | AbstractArray | |||
~~Bogdanov-Takens Point newton~~ | C/SD | Y | AbstractArray | ||
Branch point / Fold / Hopf normal form | C/SD | Y | |||
Branch switching at Branch / Hopf points | C/SD | Y | AbstractArray | ||
<span style="color:red">Automatic bifurcation diagram computation of equilibria</span> | C/SD | Y | AbstractArray | ||
~~Periodic Orbit (Trapezoid) Newton / continuation~~ | AbstractVector | ||||
Periodic Orbit (Collocation) Newton / continuation | C/SD | AbstractVector | |||
~~Periodic Orbit (Parallel Poincaré / Standard Shooting) Newton / continuation~~ | AbstractArray | ||||
~~Fold, Neimark-Sacker, Period doubling detection~~ | AbstractVector | ||||
~~Continuation of Fold of periodic orbits~~ | AbstractVector | ||||
Bogdanov-Takens / Bautin / Cusp / Zero-Hopf / Hopf-Hopf point detection | C/SD | Y | |||
~~Bogdanov-Takens / Bautin / Cusp / Zero-Hopf / Hopf-Hopf normal forms~~ | Y | ||||
~~Branching from Bogdanov-Takens points to Fold / Hopf curve~~ | AbstractVector |
Requested methods for Custom State
Needless to say, if you use regular arrays, you don't need to worry about what follows.
We make the same requirements as KrylovKit.jl
. Hence, we refer to its docs for more information. We additionally require the following methods to be available:
Base.length(x)
: it is used in the constraint equation of the pseudo arclength continuation method (seecontinuation
for more details). Iflength
is not available for your "vector", define itlength(x) = 1
and adjust tuning the parametertheta
inContinuationPar
.Base.copyto!(dest, in)
this is required to reduce the allocations by avoiding too many copiesBase.eltype
must be extended to your vector type. It is mainly used for branching.
Citations
The papers citing this work are collected on google scholar.