Library

Parameters

MultiParamContinuation.CoveringParType

Parameters for the covering algorithm(s).

Fields

  • ϵ::Any: Maximum distance between the tangent plane and the manifold. Default: 0.1

  • R0::Any: Initial radius of validity. Default: 0.1

  • Rmin::Any: [Internal] Minimal radius of polyhedra. Default: 0.001

  • delta_angle::Any: Maximum angle difference between charts' tangent spaces in radians. Default: 2pi

  • max_charts::UInt64: Maximum number of charts. Default: 100

  • max_steps::UInt64: Maximum number of continuation steps. Because of mesh adaptation or failure, the number of computed charts is less or equal than max_steps. Default: 1000

  • verbose::Int64: Verbose mode, {0,1,2}. verbose = 0 prints nothing. verbose = 1 prints the charts, verbose = 2 print the intersection of the charts. Default: false

  • newton_options::Any: Newton options. Default: NonLinearSolveSpec()

  • solver_bls::Any: Bordered Linear Solver Default: nothing

  • dotmin::Any: [Internal]. Default: 0.2

source

Results

MultiParamContinuation.ChartType
mutable struct Chart{Tu, Ttg, Tr, Tp, Tin, Td, Teve, Tl}

Structure to define a chart, that is a local system of coordinates which parametrizes a small patch of the manifold.

Fields

  • u::Any

  • Φ::Any

  • R::Any: Radius for region of validity (Ball).

  • P::Any: Polyhedron. Represents the domain of the solution manifold covered by this chart.

  • inside_ball::Any: Array of booleans to check if the vertices in P are inside the ball of validity

  • interior::Bool: Is the polygon inside the validity ball?

  • index::Int64

  • data::Any

  • event_values::Any

  • label::Any

  • neighbors::Vector{Int64}: [Internal] list of direct neighbors in the atlas

Methods

  • do_intersect(c1, c2)::Bool whether the charts intersect
source
MultiParamContinuation.AtlasType
struct Atlas{dim, Tc, Talg, Ttree}

Atlas of charts which represents a manifold.

Fields

  • atlas::Vector: List of Charts

  • BList::Vector: [Internal] Boundary list of charts

  • alg::Any: Algorithm, for example: Henderson()

  • tree::Any: [Internal] Tree for neighbors search

Methods

  • add!(a::Atlas, c::Chart)

  • new_atlas(c::Chart, alg = nothing; dim = 2)

  • length(a::Atlas) returns the number of charts

  • a[3] returns the 3rd chart in the atlas a

source

Problems

MultiParamContinuation.ManifoldProblemType
struct ManifoldProblem{Tu<:(AbstractVector), Tp, TVF, Trec, Tproj, Ttangent, Tradius, Tevent, Tfinalize, Tbb, Tpc} <: MultiParamContinuation.AbstractManifoldProblem

Define a problem to perform multi-parameters continuation of a manifold defined as the zeros of F: Rⁿ → Rᵐ with n > m >= 1.

Fields

  • n::Int64: [Internal] input space dimension

  • m::Int64: [Internal] output space dimension

  • VF::Any: Equation representing the mapping F

  • u0::AbstractVector: Guess for the initial point on the manifold

  • params::Any: Parameters passed to F

  • recordFromSolution::Any: Record a few indicators at each chart of the manifold

  • project::Any: Function to project a point from a tangent space to the manifold. If not provided, a newton algorithm is used. The signature is project(u, par) and returns a vector of solutions

  • get_tangent::Any: Compute an orthonormal basis of the tangent space at a point u on the manifold. Return a matrix of dimension n x (n-m). The signature is get_tangent(u, par). If not provided, a dedicaded function is used.

  • get_radius::Any: Get the an estimate of the curvature at a point u on the manifold. If not provided, a dedicaded function is used.

  • event_function::Any: Event function

  • finalize_solution::Any: Finalise solution. Function to accept or not the current chart. It has signature finalise(c::Chart, par)::Bool

  • project_for_tree::Any: Function used to project a point for the tree used to find the charts near a new point. Needs not be linear but the dimension should be at least the manifold embedding dimension.

  • prob_cons::Any: [Internal] constrained problem for projecting on manifold

Constructor

ManifoldProblem(F, u0, par;
                m = length(F(u0, par)),
                check_dim::Bool = true,
                recordFromSolution = (u,p) -> nothing,
                project = nothing,
                get_radius = get_radius_default,
                get_tangent = nothing,
                event_function = event_default,
                finalize_solution = finalize_default,
                project_for_tree = project_for_tree_default
                )
source
MultiParamContinuation.ManifoldProblemBKType
struct ManifoldProblemBK{Tu<:(AbstractVector), Tp, TVF, Trec, Tproj, Ttangent, Tradius, Tevent, Tfinalize, Tbb, Tpc} <: MultiParamContinuation.AbstractManifoldProblem

Define a problem to perform multi-parameters continuation of a manifold defined as the zeros of F: Rⁿ → Rᵐ with n > m >= 1.

Fields

  • n::Int64: [Internal] input space dimension

  • m::Int64: [Internal] output space dimension

  • VF::Any: Equation representing the mapping F

  • u0::AbstractVector: Guess for the initial point on the manifold

  • params::Any: Parameters passed to F

  • recordFromSolution::Any: Record a few indicators at each chart of the manifold

  • project::Any: Function to project a point from a tangent space to the manifold. If not provided, a newton algorithm is used. The signature is project(u, par) and returns a vector of solutions

  • get_tangent::Any: Compute an orthonormal basis of the tangent space at a point u on the manifold. Return a matrix of dimension n x (n-m). The signature is get_tangent(u, par). If not provided, a dedicaded function is used.

  • get_radius::Any: Get the an estimate of the curvature at a point u on the manifold. If not provided, a dedicaded function is used.

  • event_function::Any: Event function

  • finalize_solution::Any: Finalise solution. Function to accept or not the current chart. It has signature finalise(c::Chart, par)::Bool

  • project_for_tree::Any: Function used to project a point for the tree used to find the charts near a new point. Needs not be linear but the dimension should be at least the manifold embedding dimension.

  • prob_cons::Any: [Internal] constrained problem for projecting on manifold

Constructor

ManifoldProblem(F, u0, par;
                m = length(F(u0, par)),
                check_dim::Bool = true,
                recordFromSolution = (u,p) -> nothing,
                project = nothing,
                get_radius = get_radius_default,
                get_tangent = nothing,
                event_function = event_default,
                finalize_solution = finalize_default,
                project_for_tree = project_for_tree_default
                )
source

Continuation algorithms

MultiParamContinuation.HendersonType
struct Henderson{T} <: MultiParamContinuation.AbstractCoveringAlgorithm

Continuation algorithm from [1] computing implicitely defined 2d manifolds.

Fields

  • np0::Int64: Number of initial vertices in the polyhedra on each tangent space.

  • use_curvature::Bool: Use hessian for curvature estimate.

  • θmax::Any: [Internal]

  • θmin::Any: [Internal]

  • use_tree::Bool: Use a tree to find neighbors. Useful when the number of charts is large because the complexity changes from N² to N⋅log(N)

  • children_pre_leaf::Int64: Number of children per leaf in the tree. Control the depth of the tree.

Reference(s)

[1] Henderson, Michael E. “Multiple Parameter Continuation: Computing Implicitly Defined k-Manifolds.” International Journal of Bifurcation and Chaos 12, no. 03 (March 2002): 451–76. https://doi.org/10.1142/S0218127402004498.

source

Bounding functions

MultiParamContinuation.CubeType

Define a hypercube C of radius r.

C = { u ∈ Rⁿ | -r <= u <= r}

You can define one using

cube = Cube(1)

You can test whether a point is in the cube by doing

cube(rand(3))
source
MultiParamContinuation.ProductSpaceType
struct ProductSpace{T<:(AbstractVector)}

Structure to define a domain defined by a set of intervals

Fields

  • lower::AbstractVector: lower parts of all intervals

  • upper::AbstractVector: upper parts of all intervals

Usage

For example, to create the domain [1,2] x [3,4], you can does

space = ProductSpace([1,3], [2,4])

and test whether a point belongs to this space:

space(rand(2))
source