@@ -80,4 +80,50 @@ prob = ODEProblem(s2, [resistor.v=> 10.0], (0, 2.01))
80
80
sol = solve (prob, Tsit5 ())
81
81
@test ctx[1 ] == 2
82
82
83
+ include (" ../examples/rc_model.jl" )
83
84
85
+ function affect5! (integ, u,p,ctx)
86
+ @test integ. u[u. capacitor₊v] ≈ 0.3
87
+ integ. p[p. C] *= 200
88
+ end
89
+
90
+ @named rc_model = ODESystem (rc_eqs, t, continuous_events= [[capacitor. v ~ 0.3 ]=> (affect5!, [capacitor. v], [capacitor. C => :C ], nothing )])
91
+ rc_model = compose (rc_model, [resistor, capacitor, source, ground])
92
+
93
+ sys = structural_simplify (rc_model)
94
+ u0 = [capacitor. v => 0.0
95
+ capacitor. p. i => 0.0
96
+ resistor. v => 0.0 ]
97
+
98
+ prob = ODEProblem (sys, u0, (0 , 10.0 ))
99
+ sol = solve (prob, Rodas4 ())
100
+ @test all (sol[rc_model. capacitor. v] .< 0.4 )
101
+
102
+ function affect6! (integ, u,p,ctx)
103
+ @test integ. u[u. v] ≈ 0.3
104
+ integ. p[p. C] *= 200
105
+ end
106
+
107
+ function Capacitor (; name, C = 1.0 )
108
+ @named oneport = OnePort ()
109
+ @unpack v, i = oneport
110
+ ps = @parameters C = C
111
+ D = Differential (t)
112
+ eqs = [
113
+ D (v) ~ i / C,
114
+ ]
115
+ extend (ODESystem (eqs, t, [], ps; name = name, continuous_events= [[v ~ 0.3 ]=> (affect6!, [v], [C], nothing )]), oneport)
116
+ end
117
+
118
+ @named capacitor = Capacitor (C = C)
119
+ @named rc_model = ODESystem (rc_eqs, t)
120
+ rc_model = compose (rc_model, [resistor, capacitor, source, ground])
121
+
122
+ sys = structural_simplify (rc_model)
123
+ u0 = [capacitor. v => 0.0
124
+ capacitor. p. i => 0.0
125
+ resistor. v => 0.0 ]
126
+
127
+ prob = ODEProblem (sys, u0, (0 , 10.0 ))
128
+ sol = solve (prob, Rodas4 ())
129
+ @test all (sol[rc_model. capacitor. v] .< 0.4 )
0 commit comments