From 71034476d34f52c8bdf0a11eb5528f533a3bba98 Mon Sep 17 00:00:00 2001 From: Takafumi Arakaki Date: Sun, 17 Jun 2018 23:27:26 -0700 Subject: [PATCH] Move Continuation{Solver,Solution} to top-level Initially, I thought it's nice to have Bifurcations.Continuations usable as a separate package since numerical continuation without (say) stability analysis may be handy. However, solution containers etc. requires a tight coupling to the bifurcation problem (e.g., storing Jacobian and its eigenproblem solutions). I can probably define a very general solution container but it's not a good idea to do at the moment as I don't know what I need. So, let's pull ContinuationSolution, ContinuationSolver and other related stuff out of the sub-module Bifurcations.Continuations. --- src/Bifurcations.jl | 18 ++++++++++++++++-- src/continuations/branching.jl | 10 +++++++++- src/continuations/continuations.jl | 3 --- src/plotting.jl | 2 -- src/{continuations => }/solution.jl | 0 src/{continuations/interface.jl => solver.jl} | 0 src/utils.jl | 2 ++ test/test_normal_form.jl | 2 +- 8 files changed, 28 insertions(+), 9 deletions(-) rename src/{continuations => }/solution.jl (100%) rename src/{continuations/interface.jl => solver.jl} (100%) create mode 100644 src/utils.jl diff --git a/src/Bifurcations.jl b/src/Bifurcations.jl index 08e3724..716c3cc 100644 --- a/src/Bifurcations.jl +++ b/src/Bifurcations.jl @@ -2,15 +2,29 @@ module Bifurcations # Re-export methods from DifferentialEquations extended here: export init, solve, solve!, step! -using DiffEqBase: init, solve, solve!, step! -# see: continuations/interface.jl +import DiffEqBase: init, solve, solve!, step! +# see: solver.jl include("continuations/continuations.jl") + +# Continuation algorithm interface: +using .Continuations: ContinuationCache, ContinuationOptions, + predictor_corrector_step!, new_branches! +# TODO: Reconsider what/how `.Continuations` module "exposes" +# continuation algorithm/method/solver interface. For example, should +# `predictor_corrector_step!` be renamed to `step!`? + +# Continuation problem interface: using .Continuations: AbstractContinuationProblem, AbstractProblemCache import .Continuations: get_prob_cache, get_u0, residual!, residual_jacobian!, residual, isindomain const _C = AbstractProblemCache +include("utils.jl") + +include("solution.jl") +include("solver.jl") + include("fixedpoint.jl") include("diffeq.jl") include("examples/examples.jl") diff --git a/src/continuations/branching.jl b/src/continuations/branching.jl index 66ce395..100e207 100644 --- a/src/continuations/branching.jl +++ b/src/continuations/branching.jl @@ -95,7 +95,15 @@ function solve_simple_bifurcation!(cache, opts, u0, tJ, L, Q) end -function new_branches!(cache, opts, sbint::SimpleBifurcationInterval) +function new_branches!( + cache::ContinuationCache, + opts::ContinuationOptions, + sbint) + # TODO: `sbint` is expected to be a `SimpleBifurcationInterval` + # but it is defined in "down stream". I should turn this into a + # function with "flat" arguments: `new_branches!(cache, opts, u0, + # u1, direction, h)`. + u0, tJ, L, Q = find_simple_bifurcation!(cache, opts, sbint) # TODO: handle not-found case diff --git a/src/continuations/continuations.jl b/src/continuations/continuations.jl index 6b4cfcb..b8cc87d 100644 --- a/src/continuations/continuations.jl +++ b/src/continuations/continuations.jl @@ -1,10 +1,7 @@ module Continuations -import DiffEqBase: solve, solve!, init, step! include("utils.jl") include("base.jl") include("euler_newton.jl") -include("solution.jl") -include("interface.jl") include("zero_point.jl") include("branching.jl") end diff --git a/src/plotting.jl b/src/plotting.jl index 42e266b..296a0f4 100644 --- a/src/plotting.jl +++ b/src/plotting.jl @@ -1,7 +1,5 @@ using RecipesBase -using .Continuations: ContinuationSolution, sweeps_as_vectors - @recipe function f(sol::ContinuationSolution; vars = (0, 1)) ix, iy = vars xs = sweeps_as_vectors(sol, ix) diff --git a/src/continuations/solution.jl b/src/solution.jl similarity index 100% rename from src/continuations/solution.jl rename to src/solution.jl diff --git a/src/continuations/interface.jl b/src/solver.jl similarity index 100% rename from src/continuations/interface.jl rename to src/solver.jl diff --git a/src/utils.jl b/src/utils.jl new file mode 100644 index 0000000..d138851 --- /dev/null +++ b/src/utils.jl @@ -0,0 +1,2 @@ +using .Continuations: isalmostzero +# [[./continuations/utils.jl]] diff --git a/test/test_normal_form.jl b/test/test_normal_form.jl index 95a220c..f775e27 100644 --- a/test/test_normal_form.jl +++ b/test/test_normal_form.jl @@ -2,7 +2,7 @@ module TestNormalForm using Base.Test using Bifurcations -using Bifurcations.Continuations: sweeps_as_vectors +using Bifurcations: sweeps_as_vectors using Bifurcations.Examples: Pitchfork, Transcritical @testset "$normal" for normal in [Pitchfork, Transcritical]