Branch switching
Branch switching from simple branch point to equilibria
You can perform automatic branch switching by calling continuation
with the following options:
continuation(F, dF, d2F, d3F, br::ContResult, ind_bif::Int, optionsCont::ContinuationPar;
Jᵗ = nothing, δ = 1e-8, nev = 5, verbose = false, kwargs...)
where br
is a branch computed after a call to continuation
with detection of bifurcation points enabled. This call computes the branch bifurcating from the ind_bif
th bifurcation point in br
. An example of use is provided in A generalized Bratu–Gelfand problem in two dimensions.
Branch switching from non simple branch point to equilibria
We provide an experimental automatic branch switching method in this case. The method is to first compute the reduced equation (see Non-simple branch point) and use it to compute the nearby solutions. These solutions are seeded as initial guess for continuation
. Hence, you can perform automatic branch switching by calling continuation
with the following options:
continuation(F, dF, d2F, d3F, br::ContResult, ind_bif::Int, optionsCont::ContinuationPar;
Jᵗ = nothing, δ = 1e-8, nev = 5, verbose = false, kwargs...)
Branch switching from Hopf point to periodic orbits
In order to compute the bifurcated branch of periodic solutions at a Hopf bifurcation point, you need to choose a method. Indeed, we provide two methods to compute periodic orbits:
Once you have decided which method you want, you can call the following method.
continuation(F, dF, d2F, d3F, br::ContResult, ind_bif::Int, _contParams::ContinuationPar, prob::AbstractPeriodicOrbitProblem ;
Jᵗ = nothing, δ = 1e-8, δp = nothing, ampfactor = 1, kwargs...)
We refer to continuation
for more information about the arguments. Here, we just say a few words about how we can specify prob::AbstractPeriodicOrbitProblem
. For Periodic orbits based on finite differences, you can pass prob = PeriodicOrbitTrapProblem(M = 51)
where M
is the number of times slices in the periodic orbit. For Periodic orbits based on the shooting method, you need more parameters. For example, you can pass prob = ShootingProblem(2, par, prob, Euler())
or prob = PoincareShootingProblem(2, par, prob, Euler())
where prob::ODEProblem
is an ODE problem to specify the Cauchy problem and par
is the set of parameters passed to the vector field and which must be the same as br.params
.
Several examples are provided like Brusselator 1d (automatic) or Complex Ginzburg-Landau 2d.
Although very convenient, the automatic branch switching does not allow the very fine tuning of parameters. It must be used as a first attempt before recurring to manual branch switching
Branch switching from Branch point of curve of periodic orbits
We only provide (for now) this method for the case of PeriodicOrbitTrapProblem
. The call is as follows. Please note that a deflation is included in this method to simplify branch switching.
An example of use is provided in Brusselator 1d (automatic).
BifurcationKit.continuationPOTrapBPFromPO
— FunctioncontinuationPOTrapBPFromPO(br, ind_bif, _contParams; Jᵗ, δ, δp, ampfactor, usedeflation, linearPO, printSolution, linearAlgo, updateSectionEveryStep, kwargs...)
Branch switching at a Branch point of periodic orbits specified by a PeriodicOrbitTrapProblem
. This is still experimental. A deflated Newton-Krylov solver is used to improve the branch switching capabilities.
Arguments
br
branch of periodic orbits computed with aPeriodicOrbitTrapProblem
ind_bif
index of the branch point_contParams
parameters to be used by a regularcontinuation
Optional arguments
Jᵗ = (x, p) -> transpose(d_xF(x, p))
jacobian adjoint, it should be implemented in an efficient manner. For matrix-free methods,transpose
is not readily available and the user must provide a dedicated method. In the case of sparse based jacobian,Jᵗ
should not be passed as it is computed internally more efficiently, i.e. it avoid recomputing the jacobian as it would be if you passJᵗ = (x, p) -> transpose(dF(x, p))
δ
used internally to compute derivatives w.r.t the parameterp
.δp = 0.1
used to specify a particular guess for the parameter in the branch which is otherwise determined bycontParams.ds
. This allows to use a step larger thancontParams.dsmax
.ampfactor = 1
factor which alter the amplitude of the bifurcated solution. Useful to magnify the bifurcated solution when the bifurcated branch is very steep.usedeflation = true
whether to use nonlinear deflation (see Deflated problems) to help finding the guess on the bifurcated branchlinearPO = :BorderedLU
linear solver used for the Newton-Krylov solver when applied toPeriodicOrbitTrapProblem
.printSolution = (u,p) -> u[end]
, print method used in the bifurcation diagram, by default this prints the period of the periodic orbit.linearAlgo = BorderingBLS()
, same as forcontinuation
kwargs
keywords arguments used for a call to the regularcontinuation
updateSectionEveryStep = 1
updates the section every whenmod(step, updateSectionEveryStep) == 1
during continuation