@@ -49,6 +49,25 @@ using NonlinearSolve
49
49
@test integ. ps[p2] == 10.0
50
50
end
51
51
52
+ @testset " vector parameter deps" begin
53
+ @parameters p1[1 : 2 ]= [1.0 , 2.0 ] p2[1 : 2 ]= [0.0 , 0.0 ]
54
+ @variables x (t) = 0
55
+
56
+ @named sys = ODESystem (
57
+ [D (x) ~ sum (p1) * t + sum (p2)],
58
+ t;
59
+ parameter_dependencies = [p2 => 2 p1]
60
+ )
61
+ prob = ODEProblem (complete (sys))
62
+ setp1! = setp (prob, p1)
63
+ get_p1 = getp (prob, p1)
64
+ get_p2 = getp (prob, p2)
65
+ setp1! (prob, [1.5 , 2.5 ])
66
+
67
+ @test get_p1 (prob) == [1.5 , 2.5 ]
68
+ @test get_p2 (prob) == [3.0 , 5.0 ]
69
+ end
70
+
52
71
@testset " extend" begin
53
72
@parameters p1= 1.0 p2= 1.0
54
73
@variables x (t) = 0
84
103
@test get_dep (prob) == 4
85
104
end
86
105
106
+ @testset " getu with vector parameter deps" begin
107
+ @parameters p1[1 : 2 ]= [1.0 , 2.0 ] p2[1 : 2 ]= [0.0 , 0.0 ]
108
+ @variables x (t) = 0
109
+
110
+ @named sys = ODESystem (
111
+ [D (x) ~ sum (p1) * t + sum (p2)],
112
+ t;
113
+ parameter_dependencies = [p2 => 2 p1]
114
+ )
115
+ prob = ODEProblem (complete (sys))
116
+ get_dep = getu (prob, 2 p1)
117
+ @test get_dep (prob) == [2.0 , 4.0 ]
118
+ end
119
+
87
120
@testset " composing systems with parameter deps" begin
88
121
@parameters p1= 1.0 p2= 2.0
89
122
@variables x (t) = 0
109
142
@test get_v1 (prob) == 2
110
143
@test get_v2 (prob) == 4
111
144
145
+ setp1! = setp (prob, sys2. p1)
146
+ setp1! (prob, 2.5 )
147
+ @test prob. ps[sys2. p2] == 5.0
148
+
112
149
new_prob = remake (prob, p = [sys2. p1 => 1.5 ])
150
+
151
+ @test ! isempty (ModelingToolkit. parameter_dependencies (sys2))
113
152
@test new_prob. ps[sys2. p1] == 1.5
114
153
@test new_prob. ps[sys2. p2] == 3.0
115
154
end
0 commit comments