Coder Social home page Coder Social logo

kristofferc / bifurcationkit.jl Goto Github PK

View Code? Open in Web Editor NEW

This project forked from bifurcationkit/bifurcationkit.jl

0.0 2.0 0.0 68.41 MB

A Julia package to perform Bifurcation Analysis

Home Page: https://rveltz.github.io/BifurcationKit.jl/dev

License: Other

Julia 100.00%

bifurcationkit.jl's Introduction

BifurcationKit.jl

Documentation Build Status
Build status codecov

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 Newton-Krylov method is then used to correct this predictor and a Matrix-Free 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 sub-manifolds...

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.
  • Continuation written as an iterator
  • Monitoring user functions along curves computed by continuation, see events
  • Newton-Krylov 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.
  • detection of Bogdanov-Takens, Bautin and Cusp bifurcations
  • Periodic orbit computation and continuation using Shooting or Finite Differences.
  • Branch, Fold, Neimark-Sacker, 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) Krylov-Newton 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, Neimark-Sacker, 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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.