@@ -1417,3 +1417,62 @@ end
14171417 @test prob. ps[p1] ≈ 3.0
14181418 end
14191419end
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