Skip to content

Commit ff7d28d

Browse files
test: test Initial(x) initialization_eqs for time-independent systems
1 parent d3a5386 commit ff7d28d

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

test/initializationsystem.jl

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1417,3 +1417,62 @@ end
14171417
@test prob.ps[p1] 3.0
14181418
end
14191419
end
1420+
1421+
@testset "`Initial(X)` in time-independent systems: $Problem" for Problem in [
1422+
NonlinearProblem, NonlinearLeastSquaresProblem]
1423+
@parameters k1 k2
1424+
@variables X1(t) X2(t)
1425+
@parameters Γ[1:1]=missing [guess = [1.0]]
1426+
eqs = [
1427+
0 ~ k1 * (Γ[1] - X1) - k2 * X1
1428+
]
1429+
initialization_eqs = [
1430+
X2 ~ Γ[1] - X1
1431+
]
1432+
@mtkbuild nlsys = NonlinearSystem(eqs, [X1, X2], [k1, k2, Γ]; initialization_eqs)
1433+
1434+
@testset "throws if initialization_eqs contain unknowns" begin
1435+
u0 = [X1 => 1.0, X2 => 2.0]
1436+
ps = [k1 => 0.1, k2 => 0.2]
1437+
@test_throws ArgumentError Problem(nlsys, u0, ps)
1438+
end
1439+
1440+
eqs = [0 ~ k1 * (Γ[1] - X1) - k2 * X1
1441+
X2 ~ Γ[1] - X1]
1442+
initialization_eqs = [
1443+
Initial(X2) ~ Γ[1] - Initial(X1)
1444+
]
1445+
@mtkbuild nlsys = NonlinearSystem(eqs, [X1, X2], [k1, k2, Γ]; initialization_eqs)
1446+
1447+
@testset "solves initialization" begin
1448+
u0 = [X1 => 1.0, X2 => 2.0]
1449+
ps = [k1 => 0.1, k2 => 0.2]
1450+
prob = Problem(nlsys, u0, ps)
1451+
@test state_values(prob.f.initialization_data.initializeprob) === nothing
1452+
@test prob.ps[Γ[1]] 3.0
1453+
end
1454+
1455+
@testset "respects explicitly provided value" begin
1456+
u0 = []
1457+
ps = [k1 => 0.1, k2 => 0.2, Γ => [5.0]]
1458+
prob = Problem(nlsys, u0, ps)
1459+
@test prob.ps[Γ[1]] 5.0
1460+
end
1461+
1462+
@testset "fails initialization if inconsistent explicit value" begin
1463+
u0 = [X1 => 1.0, X2 => 2.0]
1464+
ps = [k1 => 0.1, k2 => 0.2, Γ => [5.0]]
1465+
prob = Problem(nlsys, u0, ps)
1466+
sol = solve(prob)
1467+
@test sol.retcode == SciMLBase.ReturnCode.InitialFailure
1468+
end
1469+
1470+
@testset "Ignores initial equation if given insufficient u0" begin
1471+
u0 = [X2 => 2.0]
1472+
ps = [k1 => 0.1, k2 => 0.2, Γ => [5.0]]
1473+
prob = Problem(nlsys, u0, ps)
1474+
sol = solve(prob)
1475+
@test SciMLBase.successful_retcode(sol)
1476+
@test sol.ps[Γ[1]] 5.0
1477+
end
1478+
end

0 commit comments

Comments
 (0)