11using ModelingToolkit, OrdinaryDiffEq, Test
2+ using ModelingToolkitBase: bindings, domain_connect, unknowns
3+ using SciMLBase: NoInit
24using SciCompDSL
35using OrdinaryDiffEqNonlinearSolve: NLNewton
46using ModelingToolkit: t_nounits as t, D_nounits as D
152154 end
153155
154156 eqs = [
155- connect (fluid, src1. port)
156- connect (fluid, src2. port)
157+ domain_connect (fluid, src1. port, src2. port)
157158 connect (src1. port, vol1. port)
158159 connect (src2. port, vol2. port)
159160 connect (vol1. flange, mass. flange, vol2. flange)
196197 # volume/mass should stop moving at opposite ends
197198 @test sol (0 ; idxs = sys. vol1. x) == 0.1
198199 @test sol (0 ; idxs = sys. vol2. x) == 0.1
200+ @test sol[sys. src1. port. dm] ≈ - sol[sys. vol1. port. dm]
201+ @test sol[sys. src2. port. dm] ≈ - sol[sys. vol2. port. dm]
199202
200203 @test round (sol (1 ; idxs = sys. vol1. x); digits = 2 ) == 0.19
201204 @test round (sol (1 ; idxs = sys. vol2. x); digits = 2 ) == 0.01
293296
294297 connect (src. port, valve. port_s)
295298 connect (snk. port, valve. port_r)
296- connect (fluid, src. port, snk. port)
299+ domain_connect (fluid, src. port, snk. port)
297300 D (piston. mass. v) ~ ddx
298301 ]
299302
307310 @mtkcompile initsys = ActuatorSystem (false )
308311
309312 initprob = ODEProblem (initsys, [], (0 , 0 ))
310- initsol = solve ( initprob, Rodas5P ())
313+ initial_state = [v => initprob[v] for v in unknowns (initsys)]
311314
312315 @mtkcompile sys = ActuatorSystem (true )
313316
@@ -321,18 +324,19 @@ end
321324 defs[sys. input. buffer] = Parameter (0.5 * x, dt)
322325
323326 # NOTE: bypassing initialization system: https://github.com/SciML/ModelingToolkit.jl/issues/3312
324- prob = ODEProblem (sys, unknowns (initsys) .=> initsol . u[ end ] , (0 , 0.1 ); build_initializeprob = false )
327+ prob = ODEProblem (sys, initial_state , (0 , 0.1 ); build_initializeprob = false )
325328
326329 # TODO : Implement proper initialization system after issue is resolved
327330 # TODO : How to bring the body back and not have an overdetermined system?
328331
329332 # check the fluid domain
330- @test Symbol (defs[sys. src. port. ρ]) == Symbol (sys. fluid. ρ)
331- @test Symbol (defs[sys. valve. port_s. ρ]) == Symbol (sys. fluid. ρ)
332- @test Symbol (defs[sys. valve. port_a. ρ]) == Symbol (sys. fluid. ρ)
333- @test Symbol (defs[sys. valve. port_b. ρ]) == Symbol (sys. fluid. ρ)
334- @test Symbol (defs[sys. valve. port_r. ρ]) == Symbol (sys. fluid. ρ)
335- @test Symbol (defs[sys. snk. port. ρ]) == Symbol (sys. fluid. ρ)
333+ binds = bindings (sys)
334+ @test Symbol (binds[sys. src. port. ρ]) == Symbol (sys. fluid. ρ)
335+ @test Symbol (binds[sys. valve. port_s. ρ]) == Symbol (sys. fluid. ρ)
336+ @test Symbol (binds[sys. valve. port_a. ρ]) == Symbol (sys. fluid. ρ)
337+ @test Symbol (binds[sys. valve. port_b. ρ]) == Symbol (sys. fluid. ρ)
338+ @test Symbol (binds[sys. valve. port_r. ρ]) == Symbol (sys. fluid. ρ)
339+ @test Symbol (binds[sys. snk. port. ρ]) == Symbol (sys. fluid. ρ)
336340
337341 @time sol = solve (prob, Rodas5P (); initializealg = NoInit ())
338342
356360 end
357361
358362 eqs = [
359- connect (fluid, cap. port, vol. port)
363+ domain_connect (fluid, cap. port, vol. port)
364+ connect (cap. port, vol. port)
360365 connect (vol. flange, mass. flange)
361366 ]
362367
0 commit comments