Skip to content

Commit 5dd8683

Browse files
committed
extra symbolic parameter tests
1 parent 15fb729 commit 5dd8683

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

src/systems/abstractsystem.jl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,8 @@ end
184184
function Base.setproperty!(sys::AbstractSystem, prop::Symbol, val)
185185
if (pa = Sym{Parameter{Real}}(prop); pa in parameters(sys))
186186
sys.default_p[pa] = value(val)
187-
elseif (st = Sym{Real}(prop); st in states(sys))
187+
# comparing a Sym returns a symbolic expression
188+
elseif (st = Sym{Real}(prop); any(s->s.name==st.name, states(sys)))
188189
sys.default_u0[st] = value(val)
189190
else
190191
setfield!(sys, prop, val)

test/symbolic_parameters.jl

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,30 +14,35 @@ par = [
1414
ρ => 0.1+σ,
1515
β => ρ*1.1
1616
]
17-
u0 = [
17+
u0 = Pair{Num, Any}[
1818
x => u,
1919
y => u,
20-
z => u,
20+
z => u-0.1,
2121
]
2222
ns = NonlinearSystem(eqs, [x,y,z],[σ,ρ,β], name=:ns, default_p=par, default_u0=u0)
23+
ns.y = u*1.1
2324
ModelingToolkit.default_p(ns)
2425
resolved = ModelingToolkit.varmap_to_vars(Dict(), parameters(ns), defaults=ModelingToolkit.default_p(ns))
2526
@test resolved == [1, 0.1+1, (0.1+1)*1.1]
2627

2728
prob = NonlinearProblem(ns, [u=>1.0], Pair[])
29+
@test prob.u0 == [1.0, 1.1, 0.9]
2830
@show sol = solve(prob,NewtonRaphson())
2931

3032
@variables a
3133
@parameters b
3234
top = NonlinearSystem([0 ~ -a + ns.x+b], [a], [b], systems=[ns], name=:top)
3335
top.b = ns.σ*0.5
36+
top.ns.x = u*0.5
3437

3538
res = ModelingToolkit.varmap_to_vars(Dict(), parameters(top), defaults=ModelingToolkit.default_p(top))
3639
@test res == [0.5, 1, 0.1+1, (0.1+1)*1.1]
3740

3841
prob = NonlinearProblem(top, [states(ns, u)=>1.0, a=>1.0], Pair[])
42+
@test prob.u0 == [1.0, 0.5, 1.1, 0.9]
3943
@show sol = solve(prob,NewtonRaphson())
4044

4145
# test NullParameters+defaults
4246
prob = NonlinearProblem(top, [states(ns, u)=>1.0, a=>1.0])
47+
@test prob.u0 == [1.0, 0.5, 1.1, 0.9]
4348
@show sol = solve(prob,NewtonRaphson())

0 commit comments

Comments
 (0)