Skip to content

Commit 8bde22e

Browse files
test: test parameters as initialization unknowns
1 parent 2682251 commit 8bde22e

File tree

1 file changed

+58
-0
lines changed

1 file changed

+58
-0
lines changed

test/initializationsystem.jl

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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
488488
end
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

Comments
 (0)