Skip to content

Commit 16ae064

Browse files
committed
finish off dependency graphs
1 parent a0d22c2 commit 16ae064

File tree

3 files changed

+36
-2
lines changed

3 files changed

+36
-2
lines changed

src/ModelingToolkit.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ using RecursiveArrayTools
1818
import SymbolicUtils
1919
import SymbolicUtils: to_symbolic, FnType
2020

21-
import LightGraphs: SimpleDiGraph
21+
import LightGraphs: SimpleDiGraph, add_edge!
2222

2323
import TreeViews
2424

@@ -130,6 +130,9 @@ export calculate_factorized_W, generate_factorized_W
130130
export calculate_hessian, generate_hessian
131131
export calculate_massmatrix, generate_diffusion_function
132132

133+
export BipartiteGraph, equation_dependencies, variable_dependencies, eqeq_dendencies, varvar_dependencies
134+
export asgraph, asdigraph
135+
133136
export simplified_expr, rename, get_variables
134137
export simplify, substitute
135138
export build_function

src/systems/dependency_graphs.jl

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ function variable_dependencies(sys::AbstractSystem; variables=states(sys), varia
6969
end
7070

7171
# convert BipartiteGraph to LightGraph.SimpleDiGraph
72-
function digraph(g::BipartiteGraph, sys::AbstractSystem; variables = states(sys), equationsfirst = true)
72+
function asdigraph(g::BipartiteGraph, sys::AbstractSystem; variables = states(sys), equationsfirst = true)
7373
neqs = length(equations(sys))
7474
nvars = length(variables)
7575
fadjlist = deepcopy(g.fadjlist)
@@ -87,3 +87,33 @@ function digraph(g::BipartiteGraph, sys::AbstractSystem; variables = states(sys)
8787

8888
SimpleDiGraph(g.ne, fadjlist, badjlist)
8989
end
90+
91+
# maps the i'th eq to equations that depend on it
92+
function eqeq_dendencies(eqdeps::BipartiteGraph{T}, vardeps::BipartiteGraph{T}) where {T <: Integer}
93+
g = SimpleDiGraph{T}(length(eqdeps.fadjlist))
94+
95+
for (eqidx,sidxs) in enumerate(vardeps.badjlist)
96+
# states modified by eqidx
97+
for sidx in sidxs
98+
# equations depending on sidx
99+
foreach(v -> add_edge!(g, eqidx, v), eqdeps.badjlist[sidx])
100+
end
101+
end
102+
103+
g
104+
end
105+
106+
# maps the i'th variable to variables that depend on it
107+
function varvar_dependencies(eqdeps::BipartiteGraph{T}, vardeps::BipartiteGraph{T}) where {T <: Integer}
108+
g = SimpleDiGraph{T}(length(vardeps.fadjlist))
109+
110+
for (sidx,eqidxs) in enumerate(eqdeps.badjlist)
111+
# eqs modified by eqidx
112+
for eqidx in eqidxs
113+
# states depending on eqidx
114+
foreach(v -> add_edge!(g, sidx, v), vardeps.badjlist[eqidx])
115+
end
116+
end
117+
118+
g
119+
end

src/systems/jumps/jumpsystem.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ generate_affect_function(js, affect, outputidxs) = build_function(affect, states
3939
expression=Val{false},
4040
headerfun=add_integrator_header,
4141
outputidxs=outputidxs)[2]
42+
4243
function assemble_vrj(js, vrj, statetoid)
4344
rate = generate_rate_function(js, vrj.rate)
4445
outputvars = (convert(Variable,affect.lhs) for affect in vrj.affect!)

0 commit comments

Comments
 (0)