@@ -248,33 +248,33 @@ Reduces the flow from `port_a` to `port_b` by `n`. Useful for modeling parallel
248248- `port_a`: full flow hydraulic port
249249- `port_b`: part flow hydraulic port
250250"""
251- @component function FlowDivider (; n, name)
251+ @mtkmodel FlowDivider begin
252252
253253 # TODO : assert n >= 1
254254
255- pars = @parameters begin
255+ @parameters begin
256256 n = n
257257 end
258258
259- vars = @variables begin
259+ @variables begin
260260 dm_a (t), [guess = 0 ]
261261 dm_b (t), [guess = 0 ]
262262 end
263263
264- systems = @named begin
264+ @components begin
265265 port_a = HydraulicPort ()
266266 port_b = HydraulicPort ()
267267 open = Open ()
268268 end
269269
270- eqs = [connect (port_a, port_b, open. port)
271- dm_a ~ port_a. dm
272- dm_b ~ dm_a / n
273- open. dm ~ dm_a - dm_b # extra flow dumps into an open port
274- # port_b.dm ~ dm_b # divided flow goes to port_b
275- ]
270+ @equations begin
271+ connect (port_a, port_b, open. port)
272+ dm_a ~ port_a. dm
273+ dm_b ~ dm_a / n
274+ open. dm ~ dm_a - dm_b # extra flow dumps into an open port
275+ # port_b.dm ~ dm_b # divided flow goes to port_b
276+ end
276277
277- ODESystem (eqs, t, vars, pars; name, systems)
278278end
279279
280280@component function ValveBase (
@@ -367,36 +367,37 @@ Valve with `area` input and discharge coefficient `Cd` defined by https://en.wik
367367 ODESystem (eqs, t, vars, pars; name, systems)
368368end
369369
370- @component function VolumeBase (; area, dead_volume = 0 , Χ1 = 1 , Χ2 = 1 ,
371- name)
372- pars = @parameters begin
370+ @mtkmodel VolumeBase begin
371+
372+ @parameters begin
373373 area = area
374374 dead_volume = dead_volume
375+ x1 = 1
376+ x2 = 1
375377 end
376378
377- systems = @named begin
378- port = HydraulicPort ()
379- end
380-
381- vars = @variables begin
379+ @variables begin
382380 x (t)
383381 dx (t), [guess = 0 ]
384382 rho (t), [guess = liquid_density (port)]
385383 drho (t), [guess = 0 ]
386384 vol (t)
387385 end
388386
389- # let
390- dm = port. dm
391- p = port . p
387+ @components begin
388+ port = HydraulicPort ()
389+ end
392390
393- eqs = [vol ~ dead_volume + area * x
394- D (x) ~ dx
395- D (rho) ~ drho
396- rho ~ full_density (port, p)
397- dm ~ drho * vol * Χ1 + rho * area * dx * Χ2]
391+ @equations begin
392+ dm = port. dm
393+ p = port. p
394+ vol ~ dead_volume + area * x
395+ D (x) ~ dx
396+ D (rho) ~ drho
397+ rho ~ full_density (port, p)
398+ dm ~ drho * vol * Χ1 + rho * area * dx * Χ2
399+ end
398400
399- ODESystem (eqs, t, vars, pars; name, systems)
400401end
401402
402403"""
@@ -410,29 +411,29 @@ Fixed fluid volume.
410411# Connectors:
411412- `port`: hydraulic port
412413"""
413- @component function FixedVolume (; vol, name)
414- pars = @parameters begin
415- vol = vol
416- end
414+ @mtkmodel FixedVolume begin
417415
418- systems = @named begin
419- port = HydraulicPort (;)
416+ @parameters begin
417+ Volume
420418 end
421419
422- vars = @variables begin
420+ @variables begin
423421 rho (t), [guess = liquid_density (port)]
424422 drho (t), [guess = 0 ]
425423 end
426424
427- # let
428- dm = port. dm
429- p = port . p
425+ @components begin
426+ port = HydraulicPort ()
427+ end
430428
431- eqs = [D (rho) ~ drho
432- rho ~ full_density (port, p)
433- dm ~ drho * vol]
429+ @equations begin
430+ dm = port. dm
431+ p = port. p
432+ D (rho) ~ drho
433+ rho ~ full_density (port, p)
434+ dm ~ drho * vol
435+ end
434436
435- ODESystem (eqs, t, vars, pars; name, systems)
436437end
437438
438439"""
@@ -473,16 +474,14 @@ dm ────► │ │ area
473474
474475See also [`FixedVolume`](@ref), [`DynamicVolume`](@ref)
475476"""
476- @component function Volume (;
477+ @mtkmodel Volume begin
477478
478- # parameters
479- area,
480- direction = + 1 , name)
481- pars = @parameters begin
482- area = area
479+ @parameters begin
480+ area
481+ direction = + 1
483482 end
484483
485- vars = @variables begin
484+ @variables begin
486485 x (t)
487486 dx (t)
488487 p (t)
@@ -492,28 +491,29 @@ See also [`FixedVolume`](@ref), [`DynamicVolume`](@ref)
492491 dm (t)
493492 end
494493
495- systems = @named begin
494+ @components begin
496495 port = HydraulicPort ()
497496 flange = MechanicalPort ()
498497 end
499498
500- eqs = [
501- # connectors
502- port. p ~ p
503- port. dm ~ dm
504- flange. v * direction ~ dx
505- flange. f * direction ~ - f
499+ @equations begin
500+ # connectors
501+ port. p ~ p
502+ port. dm ~ dm
503+ flange. v * direction ~ dx
504+ flange. f * direction ~ - f
506505
507- # differentials
508- D (x) ~ dx
509- D (rho) ~ drho
506+ # differentials
507+ D (x) ~ dx
508+ D (rho) ~ drho
509+
510+ # physics
511+ rho ~ liquid_density (port, p)
512+ f ~ p * area
513+ dm ~ drho * x * area + rho * dx * area
514+ end
510515
511- # physics
512- rho ~ liquid_density (port, p)
513- f ~ p * area
514- dm ~ drho * x * area + rho * dx * area]
515516
516- ODESystem (eqs, t, vars, pars; name, systems, defaults = [rho => liquid_density (port)])
517517end
518518
519519"""
0 commit comments