Skip to content

Commit 08e76dd

Browse files
committed
make depgraphs for jumps
1 parent 2d8d0c0 commit 08e76dd

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

src/systems/jumps/jumpsystem.jl

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,19 @@ function DiffEqJump.JumpProblem(js::JumpSystem, prob, aggregator; kwargs...)
124124
((prob isa DiscreteProblem) && !isempty(vrjs)) && error("Use continuous problems such as an ODEProblem or a SDEProblem with VariableRateJumps")
125125

126126
jset = JumpSet(Tuple(vrjs), Tuple(crjs), nothing, isempty(majs) ? nothing : majs)
127-
JumpProblem(prob, aggregator, jset)
127+
128+
if needs_vartojumps_map(aggregator) || needs_depgraph(aggregator)
129+
jdeps = asgraph(js)
130+
vdeps = variable_dependencies(js)
131+
vtoj = jdeps.badjlist
132+
jtov = vdeps.badjlist
133+
134+
jtoj = needs_depgraph(aggregator) ? eqeq_dependencies(jdeps, vdeps).fadjlist : nothing
135+
else
136+
vtoj = nothing; jtov = nothing; jtoj = nothing
137+
end
138+
139+
JumpProblem(prob, aggregator, jset; dep_graph=jtoj, vartojumps_map=vtoj, jumptovars_map=jtov)
128140
end
129141

130142

test/jumpsystem.jl

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,16 @@ jprob = JumpProblem(js3, dprob, Direct())
118118
m3 = getmean(jprob,Nsims)
119119
@test abs(m-m3)/m < .01
120120

121+
# maj jump test with dep graphs
122+
js3b = JumpSystem([maj1,maj2], t, [S,I,R], [β,γ])
123+
jprobb = JumpProblem(js3b, dprob, RSSA())
124+
#m4 = getmean(jprobb,Nsims)
125+
#@test abs(m-m4)/m < .01
126+
127+
jprobc = JumpProblem(js3b, dprob, DirectCR())
128+
#m5 = getmean(jprobc,Nsims)
129+
#@test abs(m-m5)/m < .01
130+
121131
# mass action jump tests for other reaction types (zero order, decay)
122132
maj1 = MassActionJump(2.0, [0 => 1], [S => 1])
123133
maj2 = MassActionJump(γ, [S => 1], [S => -1])
@@ -138,3 +148,4 @@ ptoid = Dict(convert(Variable,par) => i for (i,par) in enumerate(parameters(
138148
dprob = DiscreteProblem(js4, [S => 999], (0,1000.), [β => 100.=> .01])
139149
jprob = JumpProblem(js4, dprob, Direct())
140150
sol = solve(jprob, SSAStepper());
151+

0 commit comments

Comments
 (0)