From 8bb4eb6f8d0e4a1d7ba30cc067990aa35c9f74be Mon Sep 17 00:00:00 2001 From: Herman Sletmoen Date: Fri, 27 Jun 2025 22:39:39 +0200 Subject: [PATCH 1/4] Call default_toterm on each default only once --- src/systems/nonlinear/initializesystem.jl | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/systems/nonlinear/initializesystem.jl b/src/systems/nonlinear/initializesystem.jl index 6ad029559d..34c8ec3be6 100644 --- a/src/systems/nonlinear/initializesystem.jl +++ b/src/systems/nonlinear/initializesystem.jl @@ -190,11 +190,13 @@ function generate_initializesystem_timevarying(sys::AbstractSystem; push!(pars, get_iv(sys)) # 8) use observed equations for guesses of observed variables if not provided + guessed = Set(keys(defs)) # x(t), D(x(t)), ... + guessed = union(guessed, Set(default_toterm.(guessed))) # x(t), D(x(t)), xˍt(t), ... for eq in trueobs - haskey(defs, eq.lhs) && continue - any(x -> isequal(default_toterm(x), eq.lhs), keys(defs)) && continue - - defs[eq.lhs] = eq.rhs + if !(eq.lhs in guessed) + defs[eq.lhs] = eq.rhs + #push!(guessed, eq.lhs) # should not encounter eq.lhs twice, so don't need to track it + end end append!(eqs_ics, trueobs) From c2bd333d558cc1be9f2643ed90f978d6b8b2a60d Mon Sep 17 00:00:00 2001 From: Herman Sletmoen Date: Fri, 27 Jun 2025 22:43:35 +0200 Subject: [PATCH 2/4] Don't refer to non-existent AbstractTimeDependentSystem --- src/systems/nonlinear/initializesystem.jl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/systems/nonlinear/initializesystem.jl b/src/systems/nonlinear/initializesystem.jl index 34c8ec3be6..fe3014d3d8 100644 --- a/src/systems/nonlinear/initializesystem.jl +++ b/src/systems/nonlinear/initializesystem.jl @@ -41,7 +41,7 @@ end """ $(TYPEDSIGNATURES) -Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of an `AbstractTimeDependentSystem`. +Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of a time-dependent `AbstractSystem`. """ function generate_initializesystem_timevarying(sys::AbstractSystem; op = Dict(), @@ -218,7 +218,7 @@ end """ $(TYPEDSIGNATURES) -Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of an `AbstractTimeDependentSystem`. +Generate `System` of nonlinear equations which initializes a problem from specified initial conditions of a time-independent `AbstractSystem`. """ function generate_initializesystem_timeindependent(sys::AbstractSystem; op = Dict(), From 2597d6a600ace5a10c32b06df7994d04d98e5989 Mon Sep 17 00:00:00 2001 From: Herman Sletmoen Date: Fri, 27 Jun 2025 22:45:23 +0200 Subject: [PATCH 3/4] Remove unused variables --- src/systems/nonlinear/initializesystem.jl | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/systems/nonlinear/initializesystem.jl b/src/systems/nonlinear/initializesystem.jl index fe3014d3d8..9ad70f6992 100644 --- a/src/systems/nonlinear/initializesystem.jl +++ b/src/systems/nonlinear/initializesystem.jl @@ -71,7 +71,6 @@ function generate_initializesystem_timevarying(sys::AbstractSystem; eqs_ics = Equation[] defs = copy(defaults(sys)) # copy so we don't modify sys.defaults additional_guesses = anydict(guesses) - additional_initialization_eqs = Vector{Equation}(initialization_eqs) guesses = merge(get_guesses(sys), additional_guesses) idxs_diff = isdiffeq.(eqs) @@ -230,12 +229,10 @@ function generate_initializesystem_timeindependent(sys::AbstractSystem; eqs = equations(sys) trueobs, eqs = unhack_observed(observed(sys), eqs) vars = unique([unknowns(sys); getfield.(trueobs, :lhs)]) - vars_set = Set(vars) # for efficient in-lookup eqs_ics = Equation[] defs = copy(defaults(sys)) # copy so we don't modify sys.defaults additional_guesses = anydict(guesses) - additional_initialization_eqs = Vector{Equation}(initialization_eqs) guesses = merge(get_guesses(sys), additional_guesses) # PREPROCESSING From 26255ab2ef4895457bdc0fed9566d88d73605a4b Mon Sep 17 00:00:00 2001 From: Herman Sletmoen Date: Sat, 28 Jun 2025 11:15:19 +0200 Subject: [PATCH 4/4] Convert each equation to string only once --- src/systems/systemstructure.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/systems/systemstructure.jl b/src/systems/systemstructure.jl index 935982e0ff..5dfd36a6fc 100644 --- a/src/systems/systemstructure.jl +++ b/src/systems/systemstructure.jl @@ -431,7 +431,7 @@ function TearingState(sys; quick_cancel = false, check = true, sort_eqs = true) if sort_eqs # sort equations lexicographically to reduce simplification issues # depending on order due to NP-completeness of tearing. - sortidxs = Base.sortperm(eqs, by = string) + sortidxs = Base.sortperm(string.(eqs)) # "by = string" creates more strings eqs = eqs[sortidxs] original_eqs = original_eqs[sortidxs] symbolic_incidence = symbolic_incidence[sortidxs]