diff --git a/Project.toml b/Project.toml index 0827b0bf8..115aec74e 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "HarmonicBalance" uuid = "e13b9ff6-59c3-11ec-14b1-f3d2cc6c135e" authors = ["Orjan Ameye ", "Jan Kosata ", "Javier del Pino "] -version = "0.15.5" +version = "0.16.0" [deps] DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae" @@ -19,14 +19,17 @@ ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78" [extensions] ModelingToolkitExt = "ModelingToolkit" +[sources] +HarmonicSteadyState = {url = "https://github.com/QuantumEngineeredSystems/HarmonicSteadyState.jl", rev = "MTKv10"} + [compat] Aqua = "0.8.11" DocStringExtensions = "0.9.4" Documenter = "1.4" ExplicitImports = "1.6" -HarmonicSteadyState = "0.2.1, 0.3" +HarmonicSteadyState = "0.4" JET = "0.9.18, 0.10" -ModelingToolkit = "9.60" +ModelingToolkit = "10" PrecompileTools = "1.2" QuestBase = "0.3.1" Random = "1.10" diff --git a/docs/src/examples/ab_initio_noise.md b/docs/src/examples/ab_initio_noise.md index caa6fa0db..e9bef7f9d 100644 --- a/docs/src/examples/ab_initio_noise.md +++ b/docs/src/examples/ab_initio_noise.md @@ -65,9 +65,9 @@ scatter!(ωrange, sidebands1; xlab="ω", legend=false, c=1) Let us now reproduce this sidebands using a noise probe. We use the ModelingToolkit extension to define the stochastic differential equation system from the harmonic equations. The resulting system will have addtivce white noise with a noise strength $\sigma = 0.00005$ for each variable. ````@example ab_initio_noise -odesystem = ODESystem(harmonic_eq) +odesystem = System(harmonic_eq) noiseeqs = [0.00005, 0.00005] # Define noise amplitude for each variable -@mtkbuild sdesystem = SDESystem(odesystem, noiseeqs) +@mtkcompile sdesystem = SDESystem(odesystem, noiseeqs) param = Dict(ω₀ => 1.0, γ => 0.005, λ => 0.02, α => 1.0, ω => 1.0) Ttr = 10_000.0 diff --git a/docs/src/manual/API.md b/docs/src/manual/API.md index 15e797c38..0445a3eae 100644 --- a/docs/src/manual/API.md +++ b/docs/src/manual/API.md @@ -126,7 +126,7 @@ steady_state_sweep ```@docs ODEProblem -ModelingToolkit.ODESystem +ModelingToolkit.System ModelingToolkit.SciMLBase.SteadyStateProblem ModelingToolkit.SciMLBase.NonlinearProblem ``` diff --git a/docs/src/manual/SciMLExt.md b/docs/src/manual/SciMLExt.md index 116422e06..681ec57ef 100644 --- a/docs/src/manual/SciMLExt.md +++ b/docs/src/manual/SciMLExt.md @@ -13,7 +13,7 @@ ODEProblem(eom::Union{DifferentialEquation, HarmonicEquation}, p::AbstractDict; kwargs... ) -ModelingToolkit.ODESystem +ModelingToolkit.System ModelingToolkit.SciMLBase.SteadyStateProblem ModelingToolkit.SciMLBase.NonlinearProblem ``` diff --git a/examples/ab_initio_noise.jl b/examples/ab_initio_noise.jl index 3fe5de6b3..9855f1348 100644 --- a/examples/ab_initio_noise.jl +++ b/examples/ab_initio_noise.jl @@ -45,9 +45,9 @@ scatter(ωrange, sidebands2; xlab="ω", legend=false, c=2) scatter!(ωrange, sidebands1; xlab="ω", legend=false, c=1) # Let us now reproduce this sidebands using a noise probe. We use the ModelingToolkit extension to define the stochastic differential equation system from the harmonic equations. The resulting system will have addtivce white noise with a noise strength $\sigma = 0.00005$ for each variable. -odesystem = ODESystem(harmonic_eq) +odesystem = System(harmonic_eq) noiseeqs = [0.00005, 0.00005] # Define noise amplitude for each variable -@mtkbuild sdesystem = SDESystem(odesystem, noiseeqs) +@mtkcompile sdesystem = SDESystem(odesystem, noiseeqs) param = Dict(ω₀ => 1.0, γ => 0.005, λ => 0.02, α => 1.0, ω => 1.0) Ttr = 10_000.0 diff --git a/ext/ModelingToolkitExt.jl b/ext/ModelingToolkitExt.jl index 3e2dd6be1..28d32d926 100644 --- a/ext/ModelingToolkitExt.jl +++ b/ext/ModelingToolkitExt.jl @@ -2,7 +2,7 @@ module ModelingToolkitExt using DocStringExtensions -export ODESystem, ODEProblem, SteadyStateProblem, NonlinearProblem +export System, ODEProblem, SteadyStateProblem, NonlinearProblem using QuestBase: is_rearranged, rearrange_standard, rearrange_standard!, is_rearranged_standard @@ -14,14 +14,14 @@ using Symbolics: simplify, Equation, substitute, Num, @variables, expand, unwrap, arguments, wrap using ModelingToolkit: ModelingToolkit, - ODESystem, + System, ODEProblem, NonlinearProblem, SteadyStateProblem, varmap_to_vars, parameters, @parameters, - @mtkbuild, + @mtkcompile, @independent_variables swapsides(eq::Equation) = Equation(eq.rhs, eq.lhs) @@ -36,7 +36,7 @@ end @doc """ $(TYPEDSIGNATURES) -Creates and ModelingToolkit.ODESystem from a HarmonicEquation. +Creates and ModelingToolkit.System from a HarmonicEquation. ### Example ```julia @@ -49,12 +49,12 @@ diff_eq = DifferentialEquation( add_harmonic!(diff_eq, x, ω) # harmonic_eq = get_harmonic_equations(diff_eq) -sys = ODESystem(harmonic_eq) +sys = System(harmonic_eq) param = (α => 1.0, ω0 => 1.1, F => 0.01, γ => 0.01, ω => 1.1) ODEProblem(sys, [1.0, 0.0], (0, 100), param) ``` """ -function ModelingToolkit.ODESystem(eom::HarmonicEquation) +function ModelingToolkit.System(eom::HarmonicEquation) if !is_rearranged(eom) # check if time-derivatives of the variable are on the right hand side eom = rearrange_standard(eom) end @@ -75,14 +75,14 @@ function ModelingToolkit.ODESystem(eom::HarmonicEquation) eqs = substitute(eqs, Dict(zip(eom.parameters, par_names))) # ∨ mtk v9 need @mtkbuild - @mtkbuild sys = ODESystem(eqs, first(slow_time_ivp), vars, par_names) + @mtkcompile sys = System(eqs, first(slow_time_ivp), vars, par_names) return sys end @doc """ $(TYPEDSIGNATURES) -Creates and ModelingToolkit.ODESystem from a DifferentialEquation. +Creates and ModelingToolkit.System from a DifferentialEquation. ### Example ```julia @@ -92,14 +92,14 @@ using ModelingToolkit diff_eq = DifferentialEquation( d(x, t, 2) + ω0^2 * x + α * x^3 + γ * d(x, t) ~ F * cos(ω * t), x ) -sys = ODESystem(diff_eq) +sys = System(diff_eq) param = (α => 1.0, ω0 => 1.1, F => 0.01, γ => 0.01, ω => 1.1) ODEProblem(sys, [1.0, 0.0], (0, 100), param) ``` """ -function ModelingToolkit.ODESystem(diff_eq::DifferentialEquation) +function ModelingToolkit.System(diff_eq::DifferentialEquation) diff_eq = deepcopy(diff_eq) if !is_rearranged_standard(diff_eq) rearrange_standard!(diff_eq) @@ -120,7 +120,7 @@ function ModelingToolkit.ODESystem(diff_eq::DifferentialEquation) eqs = substitute(eqs, Dict(zip(param_undeclared, params))) - @mtkbuild sys = ODESystem(eqs, first(iv), vars, params) + @mtkcompile sys = System(eqs, first(iv), vars, params) return sys end @@ -160,7 +160,7 @@ function ModelingToolkit.ODEProblem( in_place=true, kwargs..., ) - sys = ODESystem(eom) + sys = System(eom) param = varmap_to_vars(p, parameters(sys)) if !in_place # out-of-place prob = ODEProblem{false}(sys, u0, tspan, param; jac=true, kwargs...) @@ -220,7 +220,7 @@ SteadyStateProblem(harmonic_eq, [1.0, 0.0], param) function ModelingToolkit.SteadyStateProblem( eom::HarmonicEquation, u0, p::AbstractDict; in_place=true, kwargs... ) - sys = ODESystem(eom) + sys = System(eom) param = varmap_to_vars(p, parameters(sys)) if !in_place # out-of-place prob = SteadyStateProblem{false}(sys, u0, param; jac=true, kwargs...) diff --git a/test/ModelingToolkitExt.jl b/test/ModelingToolkitExt.jl index c10db8d93..cfa8a31e5 100644 --- a/test/ModelingToolkitExt.jl +++ b/test/ModelingToolkitExt.jl @@ -10,7 +10,7 @@ using Test end @testset "DifferentialEquation" begin - @testset "ODESystem" begin + @testset "System" begin @variables α ω ω0 F γ t x(t) diff_eq = DifferentialEquation( d(x, t, 2) + ω0^2 * x + α * x^3 + γ * d(x, t) ~ F * cos(ω * t), x @@ -18,14 +18,14 @@ end fixed = (α => 1.0, ω0 => 1.1, F => 0.01, γ => 0.01) param = HarmonicBalance.OrderedDict(merge(Dict(fixed), Dict(ω => 1.1))) - sys = ODESystem(diff_eq) + sys = System(diff_eq) for p in string.([α, ω, ω0, F, γ]) @test p ∈ string.(parameters(sys)) end # can run a second time without error; diff_eq unmutated - ODESystem(diff_eq) + System(diff_eq) end @testset "ODEProblem" begin @variables α ω ω0 F γ t x(t) @@ -36,7 +36,7 @@ end add_harmonic!(diff_eq, x, ω) # harmonic_eq = get_harmonic_equations(diff_eq) - sys = ODESystem(harmonic_eq) + sys = System(harmonic_eq) fixed = (α => 1.0, ω0 => 1.1, F => 0.01, γ => 0.01) param = HarmonicBalance.OrderedDict(merge(Dict(fixed), Dict(ω => 1.1))) @@ -55,8 +55,8 @@ end fixed = (α => 1.0, ω0 => 1.1, F => 0.01, γ => 0.01) param = HarmonicBalance.OrderedDict(merge(Dict(fixed), Dict(ω => 1.1))) - @testset "ODESystem" begin - sys = ODESystem(harmonic_eq) + @testset "System" begin + sys = System(harmonic_eq) for p in string.([α, ω, ω0, F, γ]) @test p ∈ string.(parameters(sys))