# \[ANN\] New version of package PseudoArcLengthContinuation.jl

**URL:** <https://discourse.julialang.org/t/ann-new-version-of-package-pseudoarclengthcontinuation-jl/34604>\
**Category:** Package Announcements\
**Tags:** package, announcement, gpu\
**Created:** [February 13, 2020, 9:47pm UTC](https://discourse.julialang.org/t/ann-new-version-of-package-pseudoarclengthcontinuation-jl/34604 "2020-02-13T21:47:06Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [February 13, 2020, 9:47pm UTC](https://discourse.julialang.org/t/ann-new-version-of-package-pseudoarclengthcontinuation-jl/34604/1 "2020-02-13T21:47:06Z")

</div>

Dear All,

After roughly one year, I am writing this post to report a new version of my package [PseudoArcLengthContinuation.jl](https://github.com/rveltz/PseudoArcLengthContinuation.jl). The focus of this new version is twofold, namely the computation of bifurcations (localization, preconditioners, iterator,…) and the computation of periodic orbits (and their bifurcations) with the **aim of using the GPU**. Most methods are highly modular and can be chained. For example, you can continue Fold of periodic orbits, etc. The most notable improvements are the following:

- new interface for the Linear Solvers
- the continuation method is written as an iterator, this allows to tweak the algorithm the way you want, implement your test functions…
- addition of preconditionners and callbacks to newton / continuation
- add shooting methods (standard / Poincare(Experimental)) with abstract Flow, but also compatible with `DifferentialEquations.jl`, to compute periodic orbits and their stability
- the algorithm for computing periodic orbits based on Finite Differences has been optimized a lot
- [tutorials](https://rveltz.github.io/PseudoArcLengthContinuation.jl/dev/) with some running completely **on the GPU** (one is computing periodic orbits with preconditioners)

I hope some of you will find it useful.

Feel free to suggest improvements, design choices and submit PR 🙂 (I also accept hard criticism)

Oh! Did I forget to ask you to star if you like it?

I would like to thank @ChrisRackauckas for being patient and answering my questions on slack.

## Main features

- iterator
- Matrix Free Newton solver with generic linear / eigen _preconditioned_ solver. Idem for the arc-length continuation.
- Matrix Free Newton solver with deflation and preconditioner. It can be used for branch switching for example.
- Branch, Fold, Hopf bifurcation point detection of stationary solutions.
- Bifurcation points are located using a bisection algorithm
- Fold / Hopf continuation based on Minimally Augmented formulation, with Matrix Free / Sparse Jacobian.
- 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 |
| --- | --- | --- | --- |
| Newton | Y | Y | All |
| Newton + Deflation | Y | Y | 3, 4 |
| Continuation (Natural, Secant, Tangent) | Y | Y | All |
| Branching point detection (with bisection) | Y | Y | All |
| Fold point detection | Y | Y | All |
| Hopf detection | Y | Y | 5 - 8 |
| Fold Point continuation | Y | Y | 1, 7 |
| Hopf continuation | Y | `AbstractArray` | 5 |
| Periodic Orbit (FD) Newton / continuation | Y | `AbstractVector` | 5, 7 |
| Periodic Orbit with Poincaré / Standard Shooting Newton / continuation | Y | `AbstractArray` | 5, 6, 8 |
| Fold, Neimark-Sacker, Period doubling detection | Y | `AbstractVector` | 5 - 8 |
| Continuation of Fold of periodic orbits | Y | `AbstractVector` | 7 |

---

<div class="post-metadata">

**Author:** ![rveltz](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/rveltz/32/2707_2.png) [@rveltz](https://discourse.julialang.org/u/rveltz)\
**Post date:** [February 23, 2020, 10:43pm UTC](https://discourse.julialang.org/t/ann-new-version-of-package-pseudoarclengthcontinuation-jl/34604/2 "2020-02-23T22:43:11Z")

</div>

Dear all,

I have been able to fix the Poincare Shooting methods thanks to [JuliaDiffEq/DiffEqBase.jl#350](https://github.com/JuliaDiffEq/DiffEqBase.jl/pull/350) being closed. These methods will be further improved later on.

Bests,
