|
51 | 51 |
|
52 | 52 | @testset "extend" begin
|
53 | 53 | @parameters p1=1.0 p2=1.0
|
54 |
| - @variables x(t) |
| 54 | + @variables x(t)=0 |
55 | 55 |
|
56 | 56 | @mtkbuild sys1 = ODESystem(
|
57 | 57 | [D(x) ~ p1 * t + p2],
|
|
65 | 65 | sys = extend(sys2, sys1)
|
66 | 66 | @test isequal(only(parameters(sys)), p1)
|
67 | 67 | @test Set(full_parameters(sys)) == Set([p1, p2])
|
| 68 | + prob = ODEProblem(complete(sys)) |
| 69 | + get_dep = getu(prob, 2p2) |
| 70 | + @test get_dep(prob) == 4 |
68 | 71 | end
|
69 | 72 |
|
70 | 73 | @testset "getu with parameter deps" begin
|
|
81 | 84 | @test get_dep(prob) == 4
|
82 | 85 | end
|
83 | 86 |
|
| 87 | +@testset "composing systems with parameter deps" begin |
| 88 | + @parameters p1=1.0 p2=2.0 |
| 89 | + @variables x(t)=0 |
| 90 | + |
| 91 | + @mtkbuild sys1 = ODESystem( |
| 92 | + [D(x) ~ p1 * t + p2], |
| 93 | + t |
| 94 | + ) |
| 95 | + @named sys2 = ODESystem( |
| 96 | + [D(x) ~ p1 * t - p2], |
| 97 | + t; |
| 98 | + parameter_dependencies = [p2 => 2p1] |
| 99 | + ) |
| 100 | + sys = complete(ODESystem([], t, systems=[sys1, sys2], name=:sys)) |
| 101 | + |
| 102 | + prob = ODEProblem(sys) |
| 103 | + v1 = sys.sys2.p2 |
| 104 | + v2 = 2 * v1 |
| 105 | + @test is_parameter(prob, v1) |
| 106 | + @test is_observed(prob, v2) |
| 107 | + get_v1 = getu(prob, v1) |
| 108 | + get_v2 = getu(prob, v2) |
| 109 | + @test get_v1(prob) == 2 |
| 110 | + @test get_v2(prob) == 4 |
| 111 | + |
| 112 | + new_prob = remake(prob, p=[sys2.p1 => 1.5]) |
| 113 | + @test new_prob.ps[sys2.p1] == 1.5 |
| 114 | + @test new_prob.ps[sys2.p2] == 3.0 |
| 115 | +end |
| 116 | + |
84 | 117 | @testset "Clock system" begin
|
85 | 118 | dt = 0.1
|
86 | 119 | @variables x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)
|
|
0 commit comments