From 2b2a4f8306a1cb869266e70a6ad1b85d8c993335 Mon Sep 17 00:00:00 2001 From: Orjan Ameye Date: Sat, 28 Jun 2025 18:39:39 +0200 Subject: [PATCH 1/2] play around --- Project.toml | 1 + attractors.jl | 52 +++++++++++++++++++++++++++++++++++++++++++++++ docs/Project.toml | 15 ++++++++------ 3 files changed, 62 insertions(+), 6 deletions(-) create mode 100644 attractors.jl diff --git a/Project.toml b/Project.toml index 4e36f28..f374cdf 100644 --- a/Project.toml +++ b/Project.toml @@ -4,6 +4,7 @@ authors = ["Orjan Ameye ", "Jan Kosata Delta / omega0, γ => gamma / omega0, F₁ => F1_fix, δ => δ_exp / omega0, F₂ => 1e-4) +prob = ODEProblem(harmonic_eq, SA[rand(6)...] ./ 4, (0.0, 100.0), param_1d; in_place=false) +diffeq = (alg=Vern7(),abstol = 1e-6,reltol = 1e-6) +ds = CoupledODEs(prob, #=diffeq=#) + +set_parameter!(ds, :F₂, 0.0007) + +u_range = range(-0.2, 0.2; length=75) +grid = ( + u_range, # u1 + u_range, # v1 + u_range, # u2 + u_range, # v2 + u_range, # u3 + u_range, # v3 +) +mapper = AttractorsViaRecurrences( + ds, + grid; + consecutive_recurrences=5000, + attractor_locate_steps=5000, + consecutive_lost_steps=500, +) + +fs = basins_fractions(mapper, sampler) +attractors = extract_attractors(mapper) + +plot_attractors(attractors; access=SVector(1, 2)) + +continuation_range = range(1e-4, 0.002, 100) + +sampler, = statespace_sampler(grid) +algo = AttractorSeedContinueMatch(mapper) + +reinit!(ds) +fractions_cont, attractors_cont = global_continuation( + algo, continuation_range, :F₂, sampler; samples_per_parameter=50 +) diff --git a/docs/Project.toml b/docs/Project.toml index b1d29a4..0a734ee 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -1,17 +1,20 @@ [deps] +Attractors = "f3fd9213-ca85-4dba-9dfd-7fc91308fec7" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DocumenterTools = "35a29f4d-8980-5a13-9543-d66fff28ecb8" +HarmonicBalance = "e13b9ff6-59c3-11ec-14b1-f3d2cc6c135e" HarmonicSteadyState = "1158f75c-a779-4b85-8bfb-8fcf6bf02ced" -Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" OrdinaryDiffEqRosenbrock = "43230ef6-c299-4910-a778-202eb28ce4ce" OrdinaryDiffEqTsit5 = "b1df2697-797e-41e3-8120-5422d3b24e4a" -HarmonicBalance = "e13b9ff6-59c3-11ec-14b1-f3d2cc6c135e" +Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" SteadyStateDiffEq = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f" -[sources] -HarmonicBalance = {url = "https://github.com/QuantumEngineeredSystems/HarmonicBalance.jl", rev = "QuestBase"} - [compat] Documenter = "1" -julia = "1.11" +julia = "1.10" + +[sources.HarmonicBalance] +rev = "QuestBase" +url = "https://github.com/QuantumEngineeredSystems/HarmonicBalance.jl" From 6198d4968742cba2a6d281d4b88f94f344851bd7 Mon Sep 17 00:00:00 2001 From: Orjan Ameye Date: Sat, 28 Jun 2025 21:48:07 +0200 Subject: [PATCH 2/2] try more things --- attractors.jl | 59 +++++++++++++++++++++++++++++++++++++++-------- docs/Project.toml | 6 +++++ 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/attractors.jl b/attractors.jl index bd20f65..619e55a 100644 --- a/attractors.jl +++ b/attractors.jl @@ -1,7 +1,9 @@ -using HarmonicBalance, ModelingToolkit +using HarmonicBalance, HarmonicSteadyState +using Symbolics, RuntimeGeneratedFunctions, QuestBase, FunctionWrappers, SciMLBase +using ModelingToolkit +import FunctionWrappers: FunctionWrapper using Attractors - @variables γ λ α ω0 ω t @variables x(t) @@ -10,16 +12,29 @@ dEOM = DifferentialEquation(nat_eq, x) add_harmonic!(dEOM, x, ω) harmonic_eq = get_harmonic_equations(dEOM); -using OrdinaryDiffEq -param_1d = Dict( - Δ => Delta / omega0, γ => gamma / omega0, F₁ => F1_fix, δ => δ_exp / omega0, F₂ => 1e-4) -prob = ODEProblem(harmonic_eq, SA[rand(6)...] ./ 4, (0.0, 100.0), param_1d; in_place=false) -diffeq = (alg=Vern7(),abstol = 1e-6,reltol = 1e-6) -ds = CoupledODEs(prob, #=diffeq=#) +struct AttractorsProblem{ + ParType<:Number, + Jac<:JacobianFunction(ComplexF64), +} <: SteadyStateProblem + variables::Vector{Num} + parameters::Vector{Num} + swept_parameters::OrderedDict{Num,Vector{ParType}} + fixed_parameters::OrderedDict{Num,ParType} + phase_space::NTuple{N,Vector{ParType}} + coupled_ode::DynamicalSystemBase.CoupledODEs + jacobian::Jac + eom::HarmonicEquation +end -set_parameter!(ds, :F₂, 0.0007) +ODEProblem( + harmonic_eq, + zeros(2), + (0, Inf), + Dict(ω0 => 1.0, γ => 0.1, λ => 0.05, α => 0.01), +) u_range = range(-0.2, 0.2; length=75) +u_range |> typeof grid = ( u_range, # u1 u_range, # v1 @@ -50,3 +65,29 @@ reinit!(ds) fractions_cont, attractors_cont = global_continuation( algo, continuation_range, :F₂, sampler; samples_per_parameter=50 ) + + +# eqs = rearrange_standard(harmonic_eq).equations +# rhs = Num[eq.lhs for eq in eqs] +# vars = get_variables(harmonic_eq) + +# function compile_function( +# rhs::Vector{Num}, variables::Vector{Num}; rules=Dict() +# )::RuntimeGeneratedFunction +# rhss = QuestBase.substitute_all.(rhs, Ref(rules)) # Ref makes sure only mat is broadcasted +# rhsf = Symbolics.build_function(rhss, variables; expression=Val(false)) +# return rhsf isa Tuple ? first(rhsf) : rhsf +# end + +# rgf = compile_function( +# rhs, vcat(vars, ω); rules=Dict(ω0 => 1.0, γ => 0.1, λ => 0.05, α => 0.01) +# ) # RuntimeGeneratedFunction + +# function f(u,p,t) +# rgf(vcat(u,p)) +# end +# ff = FunctionWrapper{Vector{Float64},Tuple{Vector{Float64},Vector{Float64},Float64}}(f) +# ff(rand(2), rand(1), 0.0) + +# CoupledODEs(ff, rand(2) , rand(1)) +# SciMLBase.isinplace(ff, 100) diff --git a/docs/Project.toml b/docs/Project.toml index 0a734ee..66d2964 100644 --- a/docs/Project.toml +++ b/docs/Project.toml @@ -2,6 +2,8 @@ Attractors = "f3fd9213-ca85-4dba-9dfd-7fc91308fec7" Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" DocumenterTools = "35a29f4d-8980-5a13-9543-d66fff28ecb8" +DynamicalSystemsBase = "6e36e845-645a-534a-86f2-f5d4aa5a06b4" +FunctionWrappers = "069b7b12-0de2-55c6-9aab-29f3d0a68a2e" HarmonicBalance = "e13b9ff6-59c3-11ec-14b1-f3d2cc6c135e" HarmonicSteadyState = "1158f75c-a779-4b85-8bfb-8fcf6bf02ced" ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" @@ -9,7 +11,11 @@ OrdinaryDiffEq = "1dea7af3-3e70-54e6-95c3-0bf5283fa5ed" OrdinaryDiffEqRosenbrock = "43230ef6-c299-4910-a778-202eb28ce4ce" OrdinaryDiffEqTsit5 = "b1df2697-797e-41e3-8120-5422d3b24e4a" Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80" +QuestBase = "7e80f742-43d6-403d-a9ea-981410111d43" +RuntimeGeneratedFunctions = "7e49a35a-f44a-4d26-94aa-eba1b4ca6b47" +SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462" SteadyStateDiffEq = "9672c7b4-1e72-59bd-8a11-6ac3964bc41f" +Symbolics = "0c5d862f-8b57-4792-8d23-62f2024744c7" [compat] Documenter = "1"