Manifold problems
The idea behind MultiParamContinuation
is to compute immersed manifolds $\mathcal M$ in memory limited environments, the manifold being defined as (parts) of the zeros of
\[F:\mathbb R^n\times \mathbb R^{par}\to\mathbb R^m.\]
Generic manifold problem
ManifoldProblem
is the basic / generic structure for encoding a bifurcation problem ; it holds the following fields:
- the vector field
- an initial guess
- a set of parameters
as well as user defined functions for
- recording (
record_from_solution
) indicators about the solution when this one is too large to be saved at every continuation step.
and some other that we described below. A detailed account for the struct is ManifoldProblem
.
The Plane tutorial provides an example where these arguments are used in situation.
Basic example
using MultiParamContinuation
F(u,p) = [u[3]]
prob = ManifoldProblem(F, [0,0,0.], nothing)
Projection function
You can pass your own projection function which takes a point $u_{guess}\in \mathbb R^n$ and project it on $\mathcal M$. For example, in the case of the plane F(u,p) = u[3]
, we could use:
prob = ManifoldProblem(F, [0,0,0.], nothing;
project = (u_g,p) -> begin
u = copy(u_g)
u[3] = 0
return u
end,
)
Tangent function
You can pass your own tangent function which returns an orthonormal basis of the tangent space at point $u$. For example, in the case of the plane F(u,p) = u[3]
, we could use:
prob = ManifoldProblem(F, [0,0,0.], nothing;
get_tangent = (u,p) -> [1 0; 0 1; 0 0],
)
Finalizing the solution
You can pass a finalizer function which returns a boolean. This boolean is used to discard or not the current chart. This can be used to restrict the manifold to a given bounding box.
You can have a look at bounding space for predefined finalizer functions for simple spaces.
prob = ManifoldProblem(F, [.0,0.,0.], nothing;
finalize_solution = (c::Chart, p) -> true
)