Skip to content

Commit cea2ae8

Browse files
Merge pull request #2442 from AayushSabharwal/as/common-t-D
feat!: add common definitions of t and D
2 parents f77febd + 32f6980 commit cea2ae8

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

44 files changed

+210
-381
lines changed

examples/electrical_components.jl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using Test
22
using ModelingToolkit, OrdinaryDiffEq
3+
using ModelingToolkit: t_nounits as t, D_nounits as D
34

4-
@isdefined(t) || @parameters t
55
@connector function Pin(; name)
66
sts = @variables v(t)=1.0 i(t)=1.0 [connect = Flow]
77
ODESystem(Equation[], t, sts, []; name = name)
@@ -37,7 +37,6 @@ end
3737
@named oneport = OnePort()
3838
@unpack v, i = oneport
3939
ps = @parameters C = C
40-
D = Differential(t)
4140
eqs = [
4241
D(v) ~ i / C,
4342
]
@@ -58,7 +57,6 @@ end
5857
@named oneport = OnePort()
5958
@unpack v, i = oneport
6059
ps = @parameters L = L
61-
D = Differential(t)
6260
eqs = [
6361
D(i) ~ v / L,
6462
]
@@ -89,7 +87,6 @@ end
8987
@parameters rho=rho V=V cp=cp
9088
C = rho * V * cp
9189
@named h = HeatPort()
92-
D = Differential(t)
9390
eqs = [
9491
D(h.T) ~ h.Q_flow / C,
9592
]

src/ModelingToolkit.jl

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ end
7474
@reexport using UnPack
7575
RuntimeGeneratedFunctions.init(@__MODULE__)
7676

77+
import DynamicQuantities, Unitful
78+
const DQ = DynamicQuantities
79+
7780
export @derivatives
7881

7982
for fun in [:toexpr]
@@ -172,11 +175,24 @@ for S in subtypes(ModelingToolkit.AbstractSystem)
172175
@eval convert_system(::Type{<:$S}, sys::$S) = sys
173176
end
174177

178+
const t_nounits = let
179+
only(@parameters t)
180+
end
181+
const t_unitful = let
182+
only(@parameters t [unit = Unitful.u"s"])
183+
end
184+
const t = let
185+
only(@parameters t [unit = DQ.u"s"])
186+
end
187+
188+
const D_nounits = Differential(t_nounits)
189+
const D_unitful = Differential(t_unitful)
190+
const D = Differential(t)
191+
175192
PrecompileTools.@compile_workload begin
176193
using ModelingToolkit
177-
@variables t x(t)
178-
D = Differential(t)
179-
@named sys = ODESystem([D(x) ~ -x])
194+
@variables x(ModelingToolkit.t_nounits)
195+
@named sys = ODESystem([ModelingToolkit.D_nounits(x) ~ -x])
180196
prob = ODEProblem(structural_simplify(sys), [x => 30.0], (0, 100), [], jac = true)
181197
end
182198

src/structural_transformation/codegen.jl

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,6 @@ function build_torn_function(sys;
299299

300300
unknown_vars = Any[fullvars[i] for i in unknowns_idxs]
301301
@set! sys.solved_unknowns = unknown_vars
302-
syms = map(Symbol, unknown_vars)
303302

304303
pre = get_postprocess_fbody(sys)
305304
cpre = get_preprocess_constants(rhss)
@@ -354,9 +353,6 @@ function build_torn_function(sys;
354353
eqs_idxs,
355354
unknowns_idxs) :
356355
nothing,
357-
syms = syms,
358-
paramsyms = Symbol.(parameters(sys)),
359-
indepsym = Symbol(get_iv(sys)),
360356
observed = observedfun,
361357
mass_matrix = mass_matrix,
362358
sys = sys),

src/systems/abstractsystem.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -921,6 +921,7 @@ function toexpr(sys::AbstractSystem)
921921
name = $name, checks = false)))
922922
end
923923

924+
expr = :(let; $expr; end)
924925
Base.remove_linenums!(expr) # keeping the line numbers is never helpful
925926
end
926927

src/systems/diffeqs/abstractodesystem.jl

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -471,9 +471,6 @@ function DiffEqBase.ODEFunction{iip, specialize}(sys::AbstractODESystem, dvs = u
471471
tgrad = _tgrad === nothing ? nothing : _tgrad,
472472
mass_matrix = _M,
473473
jac_prototype = jac_prototype,
474-
syms = collect(Symbol.(unknowns(sys))),
475-
indepsym = Symbol(get_iv(sys)),
476-
paramsyms = collect(Symbol.(ps)),
477474
observed = observedfun,
478475
sparsity = sparsity ? jacobian_sparsity(sys) : nothing,
479476
analytic = analytic)
@@ -569,9 +566,6 @@ function DiffEqBase.DAEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
569566
DAEFunction{iip}(f,
570567
sys = sys,
571568
jac = _jac === nothing ? nothing : _jac,
572-
syms = Symbol.(dvs),
573-
indepsym = Symbol(get_iv(sys)),
574-
paramsyms = Symbol.(ps),
575569
jac_prototype = jac_prototype,
576570
observed = observedfun)
577571
end
@@ -596,11 +590,7 @@ function DiffEqBase.DDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys)
596590
f(u, h, p, t) = f_oop(u, h, p, t)
597591
f(du, u, h, p, t) = f_iip(du, u, h, p, t)
598592

599-
DDEFunction{iip}(f,
600-
sys = sys,
601-
syms = Symbol.(dvs),
602-
indepsym = Symbol(get_iv(sys)),
603-
paramsyms = Symbol.(ps))
593+
DDEFunction{iip}(f, sys = sys)
604594
end
605595

606596
function DiffEqBase.SDDEFunction(sys::AbstractODESystem, args...; kwargs...)
@@ -628,11 +618,7 @@ function DiffEqBase.SDDEFunction{iip}(sys::AbstractODESystem, dvs = unknowns(sys
628618
g(u, h, p, t) = g_oop(u, h, p, t)
629619
g(du, u, h, p, t) = g_iip(du, u, h, p, t)
630620

631-
SDDEFunction{iip}(f, g,
632-
sys = sys,
633-
syms = Symbol.(dvs),
634-
indepsym = Symbol(get_iv(sys)),
635-
paramsyms = Symbol.(ps))
621+
SDDEFunction{iip}(f, g, sys = sys)
636622
end
637623

638624
"""
@@ -718,9 +704,6 @@ function ODEFunctionExpr{iip}(sys::AbstractODESystem, dvs = unknowns(sys),
718704
tgrad = $tgradsym,
719705
mass_matrix = M,
720706
jac_prototype = $jp_expr,
721-
syms = $(Symbol.(unknowns(sys))),
722-
indepsym = $(QuoteNode(Symbol(get_iv(sys)))),
723-
paramsyms = $(Symbol.(parameters(sys))),
724707
sparsity = $(sparsity ? jacobian_sparsity(sys) : nothing),
725708
observed = $observedfun_exp)
726709
end

src/systems/diffeqs/sdesystem.jl

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -474,9 +474,6 @@ function DiffEqBase.SDEFunction{iip}(sys::SDESystem, dvs = unknowns(sys),
474474
Wfact = _Wfact === nothing ? nothing : _Wfact,
475475
Wfact_t = _Wfact_t === nothing ? nothing : _Wfact_t,
476476
mass_matrix = _M,
477-
syms = Symbol.(unknowns(sys)),
478-
indepsym = Symbol(get_iv(sys)),
479-
paramsyms = Symbol.(ps),
480477
observed = observedfun)
481478
end
482479

@@ -563,10 +560,7 @@ function SDEFunctionExpr{iip}(sys::SDESystem, dvs = unknowns(sys),
563560
tgrad = tgrad,
564561
Wfact = Wfact,
565562
Wfact_t = Wfact_t,
566-
mass_matrix = M,
567-
syms = $(Symbol.(unknowns(sys))),
568-
indepsym = $(Symbol(get_iv(sys))),
569-
paramsyms = $(Symbol.(parameters(sys))))
563+
mass_matrix = M)
570564
end
571565
!linenumbers ? Base.remove_linenums!(ex) : ex
572566
end

src/systems/jumps/jumpsystem.jl

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,7 @@ function DiffEqBase.DiscreteProblem(sys::JumpSystem, u0map, tspan::Union{Tuple,
324324
end
325325
end
326326

327-
df = DiscreteFunction{true, true}(f; syms = Symbol.(unknowns(sys)),
328-
indepsym = Symbol(get_iv(sys)),
329-
paramsyms = Symbol.(ps), sys = sys,
330-
observed = observedfun)
327+
df = DiscreteFunction{true, true}(f; sys = sys, observed = observedfun)
331328
DiscreteProblem(df, u0, tspan, p; kwargs...)
332329
end
333330

@@ -371,10 +368,9 @@ function DiscreteProblemExpr{iip}(sys::JumpSystem, u0map, tspan::Union{Tuple, No
371368
f = DiffEqBase.DISCRETE_INPLACE_DEFAULT
372369
u0 = $u0
373370
p = $p
371+
sys = $sys
374372
tspan = $tspan
375-
df = DiscreteFunction{true, true}(f; syms = $(Symbol.(unknowns(sys))),
376-
indepsym = $(Symbol(get_iv(sys))),
377-
paramsyms = $(Symbol.(parameters(sys))))
373+
df = DiscreteFunction{true, true}(f; sys = sys)
378374
DiscreteProblem(df, u0, tspan, p)
379375
end
380376
end

src/systems/nonlinear/nonlinearsystem.jl

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -271,8 +271,6 @@ function SciMLBase.NonlinearFunction{iip}(sys::NonlinearSystem, dvs = unknowns(s
271271
jac_prototype = sparse ?
272272
similar(calculate_jacobian(sys, sparse = sparse),
273273
Float64) : nothing,
274-
syms = Symbol.(unknowns(sys)),
275-
paramsyms = Symbol.(parameters(sys)),
276274
observed = observedfun)
277275
end
278276

@@ -320,9 +318,7 @@ function NonlinearFunctionExpr{iip}(sys::NonlinearSystem, dvs = unknowns(sys),
320318
jac = $_jac
321319
NonlinearFunction{$iip}(f,
322320
jac = jac,
323-
jac_prototype = $jp_expr,
324-
syms = $(Symbol.(unknowns(sys))),
325-
paramsyms = $(Symbol.(parameters(sys))))
321+
jac_prototype = $jp_expr)
326322
end
327323
!linenumbers ? Base.remove_linenums!(ex) : ex
328324
end
@@ -347,7 +343,6 @@ function process_NonlinearProblem(constructor, sys::NonlinearSystem, u0map, para
347343

348344
f = constructor(sys, dvs, ps, u0; jac = jac, checkbounds = checkbounds,
349345
linenumbers = linenumbers, parallel = parallel, simplify = simplify,
350-
syms = Symbol.(dvs), paramsyms = Symbol.(ps),
351346
sparse = sparse, eval_expression = eval_expression, kwargs...)
352347
return f, u0, p
353348
end

src/systems/optimization/optimizationsystem.jl

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -362,8 +362,6 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
362362
grad = _grad,
363363
hess = _hess,
364364
hess_prototype = hess_prototype,
365-
syms = Symbol.(unknowns(sys)),
366-
paramsyms = Symbol.(parameters(sys)),
367365
cons = cons[2],
368366
cons_j = _cons_j,
369367
cons_h = _cons_h,
@@ -380,8 +378,6 @@ function DiffEqBase.OptimizationProblem{iip}(sys::OptimizationSystem, u0map,
380378
SciMLBase.NoAD();
381379
grad = _grad,
382380
hess = _hess,
383-
syms = Symbol.(unknowns(sys)),
384-
paramsyms = Symbol.(parameters(sys)),
385381
hess_prototype = hess_prototype,
386382
expr = obj_expr,
387383
observed = observedfun)
@@ -552,13 +548,9 @@ function OptimizationProblemExpr{iip}(sys::OptimizationSystem, u0map,
552548
ucons = $ucons
553549
cons_j = $_cons_j
554550
cons_h = $_cons_h
555-
syms = $(Symbol.(unknowns(sys)))
556-
paramsyms = $(Symbol.(parameters(sys)))
557551
_f = OptimizationFunction{iip}(f, SciMLBase.NoAD();
558552
grad = grad,
559553
hess = hess,
560-
syms = syms,
561-
paramsyms = paramsyms,
562554
hess_prototype = hess_prototype,
563555
cons = cons,
564556
cons_j = cons_j,
@@ -580,13 +572,9 @@ function OptimizationProblemExpr{iip}(sys::OptimizationSystem, u0map,
580572
lb = $lb
581573
ub = $ub
582574
int = $int
583-
syms = $(Symbol.(unknowns(sys)))
584-
paramsyms = $(Symbol.(parameters(sys)))
585575
_f = OptimizationFunction{iip}(f, SciMLBase.NoAD();
586576
grad = grad,
587577
hess = hess,
588-
syms = syms,
589-
paramsyms = paramsyms,
590578
hess_prototype = hess_prototype,
591579
expr = obj_expr)
592580
OptimizationProblem{$iip}(_f, u0, p; lb = lb, ub = ub, int = int, kwargs...)

src/systems/unit_check.jl

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
import DynamicQuantities, Unitful
2-
const DQ = DynamicQuantities
3-
41
#For dispatching get_unit
52
const Conditional = Union{typeof(ifelse), typeof(IfElse.ifelse)}
63
const Comparison = Union{typeof.([==, !=, , <, <=, , >, >=, ])...}

test/ccompile.jl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
using ModelingToolkit, Test
2-
@parameters t a
2+
using ModelingToolkit: t_nounits as t, D_nounits as D
3+
4+
@parameters a
35
@variables x y
4-
D = Differential(t)
56
eqs = [D(x) ~ a * x - x * y,
67
D(y) ~ -3y + x * y]
78
f = build_function([x.rhs for x in eqs], [x, y], [a], t, expression = Val{false},

test/clock.jl

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using ModelingToolkit, Test, Setfield, OrdinaryDiffEq, DiffEqCallbacks
22
using ModelingToolkit: Continuous
3+
using ModelingToolkit: t_nounits as t, D_nounits as D
34

45
function infer_clocks(sys)
56
ts = TearingState(sys)
@@ -9,9 +10,8 @@ end
910

1011
@info "Testing hybrid system"
1112
dt = 0.1
12-
@variables t x(t) y(t) u(t) yd(t) ud(t) r(t)
13+
@variables x(t) y(t) u(t) yd(t) ud(t) r(t)
1314
@parameters kp
14-
D = Differential(t)
1515
# u(n + 1) := f(u(n))
1616

1717
eqs = [yd ~ Sample(t, dt)(y)
@@ -89,9 +89,8 @@ d = Clock(t, dt)
8989

9090
@info "Testing shift normalization"
9191
dt = 0.1
92-
@variables t x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)
92+
@variables x(t) y(t) u(t) yd(t) ud(t) r(t) z(t)
9393
@parameters kp
94-
D = Differential(t)
9594
d = Clock(t, dt)
9695
k = ShiftIndex(d)
9796

@@ -161,9 +160,8 @@ sol2 = solve(prob, Tsit5())
161160
@info "Testing multi-rate hybrid system"
162161
dt = 0.1
163162
dt2 = 0.2
164-
@variables t x(t) y(t) u(t) r(t) yd1(t) ud1(t) yd2(t) ud2(t)
163+
@variables x(t) y(t) u(t) r(t) yd1(t) ud1(t) yd2(t) ud2(t)
165164
@parameters kp
166-
D = Differential(t)
167165

168166
eqs = [
169167
# controller (time discrete part `dt=0.1`)
@@ -196,14 +194,12 @@ d2 = Clock(t, dt2)
196194
@info "test composed systems"
197195

198196
dt = 0.5
199-
@variables t
200197
d = Clock(t, dt)
201198
k = ShiftIndex(d)
202199
timevec = 0:0.1:4
203200

204201
function plant(; name)
205202
@variables x(t)=1 u(t)=0 y(t)=0
206-
D = Differential(t)
207203
eqs = [D(x) ~ -x + u
208204
y ~ x]
209205
ODESystem(eqs, t; name = name)
@@ -253,9 +249,8 @@ ci, varmap = infer_clocks(cl)
253249
@info "Testing multi-rate hybrid system"
254250
dt = 0.1
255251
dt2 = 0.2
256-
@variables t x(t)=0 y(t)=0 u(t)=0 yd1(t)=0 ud1(t)=0 yd2(t)=0 ud2(t)=0
252+
@variables x(t)=0 y(t)=0 u(t)=0 yd1(t)=0 ud1(t)=0 yd2(t)=0 ud2(t)=0
257253
@parameters kp=1 r=1
258-
D = Differential(t)
259254

260255
eqs = [
261256
# controller (time discrete part `dt=0.1`)
@@ -326,7 +321,6 @@ end
326321
using ModelingToolkitStandardLibrary.Blocks
327322

328323
dt = 0.05
329-
@variables t
330324
d = Clock(t, dt)
331325
k = ShiftIndex(d)
332326

0 commit comments

Comments
 (0)