diff --git a/docs/src/tutorials/initialization.md b/docs/src/tutorials/initialization.md index 27eb2ae28d..ba733e0bfb 100644 --- a/docs/src/tutorials/initialization.md +++ b/docs/src/tutorials/initialization.md @@ -536,3 +536,14 @@ sol[α * x - β * x * y] ```@example init plot(sol) ``` + +## Summary of Initialization API + +```@docs; canonical=false +Initial +isinitial +generate_initializesystem +initialization_equations +guesses +defaults +``` diff --git a/src/ModelingToolkit.jl b/src/ModelingToolkit.jl index 9fb5ff1299..e6b8130af3 100644 --- a/src/ModelingToolkit.jl +++ b/src/ModelingToolkit.jl @@ -286,7 +286,7 @@ export toexpr, get_variables export simplify, substitute export build_function export modelingtoolkitize -export generate_initializesystem, Initial +export generate_initializesystem, Initial, isinitial export alg_equations, diff_equations, has_alg_equations, has_diff_equations export get_alg_eqs, get_diff_eqs, has_alg_eqs, has_diff_eqs diff --git a/src/systems/abstractsystem.jl b/src/systems/abstractsystem.jl index 8fdd36e291..ddc70bb10a 100644 --- a/src/systems/abstractsystem.jl +++ b/src/systems/abstractsystem.jl @@ -717,6 +717,22 @@ function add_initialization_parameters(sys::AbstractSystem) return sys end +""" +Returns true if the parameter `p` is of the form `Initial(x)`. +""" +function isinitial(p) + p = unwrap(p) + if iscall(p) + operation(p) isa Initial && return true + if operation(p) === getindex + operation(arguments(p)[1]) isa Initial && return true + end + else + return false + end + return false +end + """ $(TYPEDSIGNATURES) diff --git a/test/variable_utils.jl b/test/variable_utils.jl index ecc2421955..3204d28836 100644 --- a/test/variable_utils.jl +++ b/test/variable_utils.jl @@ -145,3 +145,16 @@ end @test isequal(parse_variable(sys, str), var) end end + +@testset "isinitial" begin + t = ModelingToolkit.t_nounits + @variables x(t) z(t)[1:5] + @parameters a b c[1:4] + @test isinitial(Initial(z)) + @test isinitial(Initial(x)) + @test isinitial(Initial(a)) + @test isinitial(Initial(z[1])) + @test isinitial(Initial(c[4])) + @test !isinitial(c) + @test !isinitial(x) +end