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 add DDEBifurcationKit.jl in the standard way:
] add 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 with bibtex entry CITATION.bib.
๐งโ๐ป 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 (for now).
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
Capabilities related to equilibria
- 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 bifurcation diagram computation of equilibria
- Fold / Hopf continuation.
Branching from Bogdanov-Takens points to Fold / Hopf curve
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 | Tutorials | 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 | |||
| Branch point / Fold form | C/SD | ||||
| Hopf normal form | C/SD | ||||
| Branch switching at Branch / Hopf points | C/SD | AbstractArray | |||
| Automatic bifurcation diagram computation of equilibria | C/SD | Y | AbstractArray | ||
| Periodic Orbit (Collocation) Newton / continuation | C/SD | AbstractVector | |||
| Bogdanov-Takens / Bautin / Cusp / Zero-Hopf / Hopf-Hopf point detection | C/SD |
Capabilities related to Periodic orbits (PO)
- PO computation and continuation Orthogonal Collocation (mesh adaptive).
- Computation of Floquet exponents
- Automatic branch switching at simple Hopf points (DDE, SD-DDE) to periodic orbits
- Detection of Branch, Fold, Neimark-Sacker (NS), Period Doubling (PD) bifurcation points of PO.
- Assisted branch switching from simple Period-Doubling points to PO
- Assisted branch switching from simple Branch points to PO
| Features | delay type | Matrix Free | Custom state | Tutorials | GPU |
|---|---|---|---|---|---|
| Periodic Orbit (Collocation) Newton / continuation | C/SD | AbstractVector | |||
| Floquet exponents | C/SD | AbstractVector | |||
| Fold, Neimark-Sacker, Period doubling detection | C/SD | AbstractVector |
Requested methods for Custom State
If you use standard arrays, you can skip this section.
We make the same requirements as KrylovKit.jl. Hence, we refer to its docs and the package VectorInterface.jl 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 (seecontinuationfor more details). Iflengthis not available for your "vector" type, definelength(x) = 1and adjust the parameterฮธinPALC.Base.copyto!(dest, in)this is used to reduce the allocations.realthis is used to compute normal forms.conjthis is used to compute normal forms.
Citations
Papers citing this work are collected on Zotero.
These citations are aggregated from Google Scholar (search) and Google Scholar (citations). Note that each link may reference different subsets of papers.