ANN: new version of package BifurcationKit.jl v0.1.11

Dear all,

I am glad to report a new version of BifurcationKit.jl (actually two in a row). Compared to the previous one, axed on periodic orbits, emphasis was put on codim 2 bifurcations, continuation, and their normal forms. More precisely,

  • I re-wrote the interface to shooting problems to make the use of time steppers other than DifferentialEquations’ones simpler
  • I re-wrote the interface of the predictor step to allow the easier development of new class of predictors. As a by-product, you can now change the underlying dot product in pseudo-arclength continuation. This is especially useful in FEM. This is shown in action in the new tutorial based on ApproxFun.jl
  • I added a simple tutorial based on ModelingToolkit

For codim 2:

  • I added the detection of all codim 2 bifurcations which works in any dimension, sparse, dense, matrix-free etc. We are not many in this club :smiley:
  • I added the computation of the Bogdanov-Takens normal form, the cusp one and the bautin one.
  • You can branch from these bifurcations to Hopf / Fold curves
  • This is shown at work in an ODE tutorial, this one exhibits all codim 2 bifurcations so it is a nice “benchmark”.
  • this is also shown for a 2d PDE tutorial which is the Ginzburg-Landau equation.
  • this is also shown for a 1d PDE Langmuir which is the Ginzburg-Landau equation.

I hope some of you will find it useful.

Feel free to suggest improvements, design choices,… Also, do not hesitate to open issues if the docs are not clear enough.



Thanks, we’ve found this package to be very useful in tracking solutions of the nonlinear equations governing steady-state lasers as you vary the laser “pump” power. Hopefully we’ll have a publication later this year citing it.


Oh nice!

I did not asked you: is it a PDE model?

Yes. The simplest version of the SALT (steady-state ab-initio laser theory) equations for scalar waves is something like

\left(\nabla^{2}+k^{2}\varepsilon_{c}(\vec{x})+\frac{\gamma_{\perp}}{k-k_{a}+i\gamma_{\perp}}\frac{D_{0}(\vec{x})p}{1+|\psi|^{2}}\right)\psi= 0

where you are solving for an unknown complex-valued function \psi(\vec{x}) and an unknown real frequency k > 0, as a function of the pump strength p > p_0 where p_0 is the “lasing threshold” at which the first solution appears (or potentially as a function of other system parameters).

1 Like

A nonlinear Eigen value problem? It looks like a fun project. I will read your paper when it’s out for sure.

@rveltz, where is the best place to ask questions about the usage of this package?

I was able to run successfully the simplest example at Temperature model (Simplest example) · Bifurcation Analysis in Julia and am trying to modify it for my problem. The Newton solver to find the initial guess works fine. Then continuation() runs without an error, but the report shows that the parameter did not change:

 ┌─ Number of points: 2
 ├─ Curve of EquilibriumCont
 ├─ Type of vectors: Vector{Float64}
 ├─ Parameter k starts at 1.2566370614359174e7, ends at 1.2566370614359174e7
 ├─ Algo: PALC
 └─ Special points:

even though I set pMin = 897597.9010256552 and pMax = 1.2566370614359174e7 in continuation(). Note that my parameter k did not change from pMax, which was also the parameter value where the initial guess solution was calculated.

Any suggestions? If you let me know a better channel to discuss this issue, I will repost the question there.

For this, you can probably open issues or use the dedicated channel on slack.
pMax is the largest parameter value you want, it should be larger than the one. Or you want the parameter to decrease in which case, set a negative ‘ds’