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