Skip to content

Commit 71a27e2

Browse files
Restore Initial-dependent parameter guess resolution
Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com>
1 parent 3c3536e commit 71a27e2

2 files changed

Lines changed: 27 additions & 1 deletion

File tree

lib/ModelingToolkitBase/src/systems/problem_utils.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -542,7 +542,15 @@ function evaluate_varmap!(
542542
v = get(varmap, k, COMMON_NOTHING)
543543
v === COMMON_NOTHING && continue
544544
SU.isconst(v) && continue
545-
varmap[k] = subber(v)
545+
v = subber(v)
546+
if !SU.isconst(v)
547+
# IRSubstituter does not descend into operator calls such as `Initial`.
548+
v = fixpoint_sub(
549+
v, varmap; maxiters = limit, fold = Val(true),
550+
warn_maxiters = !allow_symbolic
551+
)
552+
end
553+
varmap[k] = v
546554
end
547555
return
548556
end

lib/ModelingToolkitBase/test/initializationsystem.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1610,6 +1610,24 @@ end
16101610
@test integ1[X1] 1.0
16111611
end
16121612

1613+
@testset "Initial-dependent array parameter guesses" begin
1614+
@variables X1(t) X2(t)
1615+
@parameters k1 k2 Γ[1:1] = missing [guess = [Initial(X1 + X2)]]
1616+
eqs = [D(X1) ~ k1 * (Γ[1] - X1) - k2 * X1]
1617+
@named osys = System(
1618+
eqs, t, [X1], [k1, k2, Γ]; observed = [X2 ~ Γ[1] - X1]
1619+
)
1620+
osys = complete(osys)
1621+
prob = ODEProblem(
1622+
osys,
1623+
[X1 => 1.0, X2 => 2.0, k1 => 0.1, k2 => 0.2],
1624+
(0.0, 1.0)
1625+
)
1626+
1627+
@test prob[X2] == 2.0
1628+
@test prob.ps[Γ[1]] == 3.0
1629+
end
1630+
16131631
if @isdefined(ModelingToolkit)
16141632
@testset "Trivial initialization is run on problem construction" begin
16151633
@variables _x(..) y(t)

0 commit comments

Comments
 (0)