@@ -486,3 +486,61 @@ sys = extend(sysx, sysy)
486486 ssys = structural_simplify (sys)
487487 @test_throws ArgumentError ODEProblem (ssys, [x => 3 ], (0 , 1 ), []) # y should have a guess
488488end
489+
490+ @testset " Initialization of parameters" begin
491+ function test_parameter (prob, sym, val, initialval = zero (val))
492+ @test prob. ps[sym] ≈ initialval
493+ @test init (prob, Tsit5 ()). ps[sym] ≈ val
494+ @test solve (prob, Tsit5 ()). ps[sym] ≈ val
495+ end
496+ @variables x (t) y (t)
497+ @parameters p
498+ _p = ModelingToolkit. setdefault (p, missing )
499+ _p = ModelingToolkit. setguess (_p, 0.0 )
500+ @mtkbuild sys = ODESystem ([D (x) ~ x, _p ~ x + y], t)
501+ prob = ODEProblem (sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ))
502+ test_parameter (prob, _p, 2.0 )
503+ @mtkbuild sys = ODESystem (
504+ [D (x) ~ x, p ~ x + y], t; defaults = [p => missing ], guesses = [p => 0.0 ])
505+ prob = ODEProblem (sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ))
506+ test_parameter (prob, p, 2.0 )
507+ @mtkbuild sys = ODESystem ([D (x) ~ x, p ~ x + y], t; guesses = [p => 0.0 ])
508+ prob = ODEProblem (sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ), [p => missing ])
509+ test_parameter (prob, p, 2.0 )
510+
511+ @mtkbuild sys = ODESystem ([D (x) ~ x, p ~ x + y], t; guesses = [p => 1.0 ])
512+ @test_throws ModelingToolkit. MissingParametersError ODEProblem (
513+ sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ))
514+ @mtkbuild sys = ODESystem ([D (x) ~ x, p ~ x + y], t)
515+ @test_throws [" Invalid setup" , " parameter p" , " guess" ] ODEProblem (
516+ sys, [x => 1.0 , y => 1.0 ], (0.0 , 1.0 ), [p => missing ])
517+
518+ @testset " Null system" begin
519+ @variables x (t) y (t) s (t)
520+ @parameters x0 y0
521+ @mtkbuild sys = ODESystem ([x ~ x0, y ~ y0, s ~ x + y], t; guesses = [y0 => 0.0 ])
522+ prob = ODEProblem (sys, [s => 1.0 ], (0.0 , 1.0 ), [x0 => 0.3 , y0 => missing ])
523+ test_parameter (prob, y0, 0.7 )
524+ end
525+
526+ using ModelingToolkitStandardLibrary. Mechanical. TranslationalModelica: Fixed, Mass,
527+ Spring, Force,
528+ Damper
529+ using ModelingToolkitStandardLibrary. Blocks: Constant
530+
531+ @named mass = Mass (; m = 1.0 , s = 1.0 , v = 0.0 , a = 0.0 )
532+ @named fixed = Fixed (; s0 = 0.0 )
533+ @named spring = Spring (; c = 2.0 )
534+ @named gravity = Force ()
535+ @named constant = Constant (; k = 9.81 )
536+ @named damper = Damper (; d = 0.1 )
537+ @mtkbuild sys = ODESystem (
538+ [connect (fixed. flange, spring. flange_a), connect (spring. flange_b, mass. flange_a),
539+ connect (mass. flange_a, gravity. flange), connect (constant. output, gravity. f),
540+ connect (fixed. flange, damper. flange_a), connect (damper. flange_b, mass. flange_a)],
541+ t;
542+ systems = [fixed, spring, mass, gravity, constant, damper],
543+ guesses = [spring. s_rel0 => 1.0 ])
544+ prob = ODEProblem (sys, [], (0.0 , 1.0 ), [spring. s_rel0 => missing ])
545+ test_parameter (prob, spring. s_rel0, - 3.905 )
546+ end
0 commit comments