Numerical Continuation in Julia?

What are available options for numerical continuation in Julia?

While it’s irrelated does any body know about Auto software?

1 Like

We have a wrapper for PyDSTool:

https://github.com/JuliaDiffEq/PyDSTool.jl

Here’s a usage example:

http://docs.juliadiffeq.org/latest/analysis/bifurcation.html

PyDSTool is quite slow though, so I hope to get Auto wrapped someday as part of the JuliaDiffEq-sphere.

2 Likes

I know this is a late post -what is the current status of the AUTO wrapper, or developing teams towards a new package for this functionality (besides PyDS) ?

BifurcationKit.Jl

sees to be done right

2 Likes

Auto is excellent, but really old. It only has direct methods for linear algebra and that is a problem for large systems. The only continuation code I know of that can use iterative linear solvers is LOCA from Trilinos.

The only continuation code I know of that can use iterative linear solvers is LOCA from Trilinos.

I am not sure what you mean here. rveltz/BifurcationKit.jl that you reference above can do this. In matlab, pde2path can do this as well, in python you have pyNCT and pacopy who use direct sparse solver but adding iterative ones would not be that difficult.

2 Likes

Sorry about that. I did not know that BifurcationKit did that.

I do not agree that “adding iterative ones would not be that difficult”. For example, the eigenvalue computation to detect Hopf bifurcation is not trivial at all with an iterative solver. How did BifurcationKit do that?

It is not that hard to chase simple folds or pitchforks (even I’ve done it) with iterative methods, but Hopf is really tough.

Sorry about that.

No worries!!

I did not know that BifurcationKit did that.

You are not the first to say that :thinking: although I was carefull to write Krylov-Newton whenever I could. Even the preconditioner is coded…

Some examples

This example is Matrix free (periodic orbits): https://rveltz.github.io/BifurcationKit.jl/dev/tutorialsCGL/
This one runs on GPU and is MatrixFree: https://rveltz.github.io/BifurcationKit.jl/dev/tutorials2b/#The-Swift-Hohenberg-equation-(non-local)-on-the-GPU-(Advanced)-1

I do not agree that “adding iterative ones would not be that difficult”. For example, the eigenvalue computation to detect Hopf bifurcation is not trivial at all with an iterative solver

pde2path (mentioned above) do that already. It uses eigs behind the scene.

How did BifurcationKit do that?

BifurcationKit monitors the unstable eigenvalues. When one of them have nonzero imaginary part, we declare a Hopf (see here) because we consider equations over the reals. The bifurcation point are located (fairly) precisely with a bisection algorithm. You can also do codim 2 Hopf continuation and hence locate the simple Hopf point with a Newton algorithm (see here). Finally the Hopf normal form can be computed (follow previous link) and automatic branch switching to periodic orbit is provided.

In a nutshell, everything is in the eigen solver, you (the user) have to tune it to return all unstable eigenvalues. You can use many eigen solvers (see here) or other ones like the FEAST algo, etc. The interface is flexible enough to easily use whatever eigensolver. Actually, the ability to use your own eigensolver (and also linearsolver) was one of the first design consideration for the package.

3 Likes

Nice work.

Thank you!