Skip to content

Commit 50c65ad

Browse files
Various cleanup
1 parent 84eb679 commit 50c65ad

File tree

6 files changed

+41
-45
lines changed

6 files changed

+41
-45
lines changed

src/ModelingToolkit.jl

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,30 +7,33 @@ using MacroTools
77
import MacroTools: splitdef, combinedef
88

99
abstract type Expression <: Number end
10-
abstract type AbstractOperation <: Expression end
11-
abstract type AbstractComponent <: Expression end
10+
abstract type AbstractComponent end
11+
abstract type AbstractSystem end
1212

13-
include("variables.jl")
14-
15-
Base.promote_rule(::Type{T},::Type{T2}) where {T<:Number,T2<:Expression} = Expression
13+
Base.promote_rule(::Type{<:Number},::Type{<:Expression}) = Expression
1614
Base.zero(::Type{<:Expression}) = Constant(0)
1715
Base.one(::Type{<:Expression}) = Constant(1)
1816

19-
function caclulate_jacobian end
17+
function calculate_jacobian end
18+
function generate_jacobian end
19+
function generate_function end
2020

2121
@enum FunctionVersion ArrayFunction=1 SArrayFunction=2
2222

23+
include("variables.jl")
2324
include("operations.jl")
2425
include("differentials.jl")
2526
include("equations.jl")
26-
include("systems/systems.jl")
2727
include("systems/diffeqs/diffeqsystem.jl")
2828
include("systems/diffeqs/first_order_transform.jl")
2929
include("systems/nonlinear/nonlinear_system.jl")
3030
include("function_registration.jl")
3131
include("simplify.jl")
3232
include("utils.jl")
3333

34-
export Operation, Expression, AbstractComponent, AbstractDomain
34+
export Operation, Expression, AbstractComponent
35+
export calculate_jacobian, generate_jacobian, generate_function
36+
export ArrayFunction, SArrayFunction
3537
export @register
38+
3639
end # module

src/operations.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
# Parameterize by T so that way it can be Vector{Expression} which is defined after
2-
struct Operation <: AbstractOperation
1+
struct Operation <: Expression
32
op::Function
43
args::Vector{Expression}
54
end

src/systems/systems.jl

Lines changed: 0 additions & 30 deletions
This file was deleted.

src/utils.jl

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,30 @@ function flatten_expr!(x)
3030
x
3131
end
3232

33+
function build_function(rhss, vs, ps, args = (); version::FunctionVersion)
34+
var_pairs = [(u.name, :(u[$i])) for (i, u) enumerate(vs)]
35+
param_pairs = [(p.name, :(p[$i])) for (i, p) enumerate(ps)]
36+
(ls, rs) = zip(var_pairs..., param_pairs...)
37+
38+
var_eqs = Expr(:(=), build_expr(:tuple, ls), build_expr(:tuple, rs))
39+
40+
if version === ArrayFunction
41+
X = gensym()
42+
sys_exprs = [:($X[$i] = $(convert(Expr, rhs))) for (i, rhs) enumerate(rhss)]
43+
let_expr = Expr(:let, var_eqs, build_expr(:block, sys_exprs))
44+
:(($X,u,p,$(args...)) -> $let_expr)
45+
elseif version === SArrayFunction
46+
sys_expr = build_expr(:tuple, [convert(Expr, rhs) for rhs rhss])
47+
let_expr = Expr(:let, var_eqs, sys_expr)
48+
:((u,p,$(args...)) -> begin
49+
X = $let_expr
50+
T = StaticArrays.similar_type(typeof(u), eltype(X))
51+
T(X)
52+
end)
53+
end
54+
end
55+
56+
3357
is_constant(::Constant) = true
3458
is_constant(::Any) = false
3559

test/derivatives.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ eqs = [0 ~ σ*(y-x),
2525
0 ~ x*-z)-y,
2626
0 ~ x*y - β*z]
2727
sys = NonlinearSystem(eqs,[x,y,z],[σ,ρ,β])
28-
jac = ModelingToolkit.calculate_jacobian(sys)
28+
jac = calculate_jacobian(sys)
2929
@test jac[1,1] == σ*-1
3030
@test jac[1,2] == σ
3131
@test jac[1,3] == 0

test/system_construction.jl

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ de = DiffEqSystem(eqs,t,[x,y,z],[σ,ρ,β])
1414
generate_function(de)
1515
generate_function(de;version=ModelingToolkit.SArrayFunction)
1616
jac_expr = generate_jacobian(de)
17-
jac = ModelingToolkit.calculate_jacobian(de)
17+
jac = calculate_jacobian(de)
1818
f = ODEFunction(de)
1919
ModelingToolkit.generate_ode_iW(de)
2020

@@ -67,7 +67,7 @@ eqs = [D(x) ~ σ*a,
6767
D(z) ~ x*y - β*z]
6868
de = DiffEqSystem(eqs,t,[x,y,z],[σ,ρ,β])
6969
generate_function(de)
70-
jac = ModelingToolkit.calculate_jacobian(de)
70+
jac = calculate_jacobian(de)
7171
f = ODEFunction(de)
7272

7373
# Define a nonlinear system
@@ -108,7 +108,7 @@ eqs = [0 ~ σ*(y-x),
108108
0 ~ x*-z)-y,
109109
0 ~ x*y - β*z]
110110
ns = NonlinearSystem(eqs, [x,y,z], [σ,ρ,β])
111-
jac = ModelingToolkit.calculate_jacobian(ns)
111+
jac = calculate_jacobian(ns)
112112
@testset "nlsys jacobian" begin
113113
@test jac[1,1] == σ * -1
114114
@test jac[1,2] == σ
@@ -131,5 +131,5 @@ eqs = [0 ~ σ*a,
131131
0 ~ x*y - β*z]
132132
ns = NonlinearSystem(eqs,[x,y,z],[σ,ρ,β])
133133
nlsys_func = generate_function(ns)
134-
jac = ModelingToolkit.calculate_jacobian(ns)
134+
jac = calculate_jacobian(ns)
135135
jac = generate_jacobian(ns)

0 commit comments

Comments
 (0)