11using ModelingToolkit, OrdinaryDiffEq, Test
2+ using ModelingToolkitBase: bindings, domain_connect, unknowns
23using SciCompDSL
34using OrdinaryDiffEqNonlinearSolve: NLNewton
45using ModelingToolkit: t_nounits as t, D_nounits as D
152153 end
153154
154155 eqs = [
155- connect (fluid, src1. port)
156- connect (fluid, src2. port)
156+ domain_connect (fluid, src1. port, src2. port)
157157 connect (src1. port, vol1. port)
158158 connect (src2. port, vol2. port)
159159 connect (vol1. flange, mass. flange, vol2. flange)
196196 # volume/mass should stop moving at opposite ends
197197 @test sol (0 ; idxs = sys. vol1. x) == 0.1
198198 @test sol (0 ; idxs = sys. vol2. x) == 0.1
199+ @test sol[sys. src1. port. dm] ≈ - sol[sys. vol1. port. dm]
200+ @test sol[sys. src2. port. dm] ≈ - sol[sys. vol2. port. dm]
199201
200202 @test round (sol (1 ; idxs = sys. vol1. x); digits = 2 ) == 0.19
201203 @test round (sol (1 ; idxs = sys. vol2. x); digits = 2 ) == 0.01
293295
294296 connect (src. port, valve. port_s)
295297 connect (snk. port, valve. port_r)
296- connect (fluid, src. port, snk. port)
298+ domain_connect (fluid, src. port, snk. port)
297299 D (piston. mass. v) ~ ddx
298300 ]
299301
307309 @mtkcompile initsys = ActuatorSystem (false )
308310
309311 initprob = ODEProblem (initsys, [], (0 , 0 ))
310- initsol = solve ( initprob, Rodas5P ())
312+ initial_state = [v => initprob[v] for v in unknowns (initsys)]
311313
312314 @mtkcompile sys = ActuatorSystem (true )
313315
@@ -321,18 +323,19 @@ end
321323 defs[sys. input. buffer] = Parameter (0.5 * x, dt)
322324
323325 # 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 )
326+ prob = ODEProblem (sys, initial_state , (0 , 0.1 ); build_initializeprob = false )
325327
326328 # TODO : Implement proper initialization system after issue is resolved
327329 # TODO : How to bring the body back and not have an overdetermined system?
328330
329331 # 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. ρ)
332+ binds = bindings (sys)
333+ @test Symbol (binds[sys. src. port. ρ]) == Symbol (sys. fluid. ρ)
334+ @test Symbol (binds[sys. valve. port_s. ρ]) == Symbol (sys. fluid. ρ)
335+ @test Symbol (binds[sys. valve. port_a. ρ]) == Symbol (sys. fluid. ρ)
336+ @test Symbol (binds[sys. valve. port_b. ρ]) == Symbol (sys. fluid. ρ)
337+ @test Symbol (binds[sys. valve. port_r. ρ]) == Symbol (sys. fluid. ρ)
338+ @test Symbol (binds[sys. snk. port. ρ]) == Symbol (sys. fluid. ρ)
336339
337340 @time sol = solve (prob, Rodas5P (); initializealg = NoInit ())
338341
356359 end
357360
358361 eqs = [
359- connect (fluid, cap. port, vol. port)
362+ domain_connect (fluid, cap. port, vol. port)
363+ connect (cap. port, vol. port)
360364 connect (vol. flange, mass. flange)
361365 ]
362366
0 commit comments