I have accumulated, over the last years, some methods for performing pseudo-arclength continuation of solutions of PDE or large scale problems. I decided to package these methods and release it publicly in case others find it useful. I tried my best to write something customizable where one can easily specify a custom linear solver (GMRES, , \ on GPU…) and eigen solver to adapt the method to the specificity of the problem under study. It works reasonably well although I was not very careful about allocations (
premature optimization is...)
So the package can perform continuation of solutions, detection of codim 1 bifurcation (Branch point, Fold point, Hopf point) and continue them as function of another parameter. In the context of matrix free methods, there aren’t so many codes which does this (pde2path, trilinos, ?)
I did not implement branch switching because I could not be bothered implementing the different normal forms (PR suggested ) BUT I implemented a very powerful method described by P Farrell which largely makes up for this and allows you to discover many more solutions than with branch switching.
Finally, I also provide some methods for computing periodic orbits and continuation of them. There are Matrix Free methods and one suitable for Sparse problems.
I did my best not to rely on AbstractVector so one can use Matrices as a state space, or use ApproxFun or ArrayFire…
Please have a look at PseudoArcLengthContinuation.jl and at the examples. Feel free to suggest improvements, design choices and submit PR
|Feature||Matrix Free||Custom state|
|Newton + Deflation||Y||Y|
|Continuation (Natural, Secant, Tangent)||Y||Y|
|Branching point detection||Y||Y|
|Periodic Orbit Newton||Y||N|
|Periodic Orbit continuation||Y||N|