Skip to content

Commit ebd34d7

Browse files
Merge pull request #838 from SciML/myb/imp
Some minor improvements
2 parents 336e5cb + 820cdbc commit ebd34d7

File tree

2 files changed

+22
-13
lines changed

2 files changed

+22
-13
lines changed

src/systems/abstractsystem.jl

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,11 +223,20 @@ function Base.getproperty(sys::AbstractSystem, name::Symbol)
223223
end
224224

225225
function Base.setproperty!(sys::AbstractSystem, prop::Symbol, val)
226-
if (pa = Sym{Parameter{Real}}(prop); pa in parameters(sys))
227-
sys.default_p[pa] = value(val)
228-
# comparing a Sym returns a symbolic expression
229-
elseif (st = Sym{Real}(prop); any(s->s.name==st.name, states(sys)))
230-
sys.default_u0[st] = value(val)
226+
# We use this weird syntax because `parameters` and `states` calls are
227+
# potentially expensive.
228+
if (
229+
params = parameters(sys);
230+
idx = findfirst(s->getname(s) == prop, params);
231+
idx !== nothing;
232+
)
233+
sys.default_p[params[idx]] = value(val)
234+
elseif (
235+
sts = states(sys);
236+
idx = findfirst(s->getname(s) == prop, sts);
237+
idx !== nothing;
238+
)
239+
sys.default_u0[sts[idx]] = value(val)
231240
else
232241
setfield!(sys, prop, val)
233242
end

test/components.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,21 @@ using ModelingToolkit, OrdinaryDiffEq
33

44
# Basic electric components
55
const t = Sym{ModelingToolkit.Parameter{Real}}(:t)
6-
function Pin(name)
6+
function Pin(;name)
77
@variables v(t) i(t)
88
ODESystem(Equation[], t, [v, i], [], name=name, default_u0=[v=>1.0, i=>1.0])
99
end
1010

1111
function Ground(name)
12-
g = Pin(:g)
12+
@named g = Pin()
1313
eqs = [g.v ~ 0]
1414
ODESystem(eqs, t, [], [], systems=[g], name=name)
1515
end
1616

1717
function ConstantVoltage(name; V = 1.0)
1818
val = V
19-
p = Pin(:p)
20-
n = Pin(:n)
19+
@named p = Pin()
20+
@named n = Pin()
2121
@parameters V
2222
eqs = [
2323
V ~ p.v - n.v
@@ -28,8 +28,8 @@ end
2828

2929
function Resistor(name; R = 1.0)
3030
val = R
31-
p = Pin(:p)
32-
n = Pin(:n)
31+
@named p = Pin()
32+
@named n = Pin()
3333
@variables v(t)
3434
@parameters R
3535
eqs = [
@@ -42,8 +42,8 @@ end
4242

4343
function Capacitor(name; C = 1.0)
4444
val = C
45-
p = Pin(:p)
46-
n = Pin(:n)
45+
@named p = Pin()
46+
@named n = Pin()
4747
@variables v(t)
4848
@parameters C
4949
D = Differential(t)

0 commit comments

Comments
 (0)