@@ -150,9 +150,8 @@ function next_time(p::CoevolveJumpAggregation{T}, u, params, t, i, tstop::T) whe
150150 num_majumps = get_num_majumps (p. ma_jumps)
151151 num_cjumps = length (p. urates) - length (p. rates)
152152 uidx = i - num_majumps
153- lidx = i - num_majumps - num_cjumps
154- urate = uidx > 0 ? get_urate (p, uidx, u, params, t) :
155- get_ma_urate (p, i, u, params, t)
153+ lidx = uidx - num_cjumps
154+ urate = uidx > 0 ? get_urate (p, uidx, u, params, t) : get_ma_urate (p, i, u, params, t)
156155 last_urate = p. cur_rates[i]
157156 if i != p. next_jump && last_urate > zero (t)
158157 s = urate == zero (t) ? typemax (t) : last_urate / urate * (p. pq[i] - t)
@@ -170,26 +169,22 @@ function next_time(p::CoevolveJumpAggregation{T}, u, params, t, i, tstop::T) whe
170169 _t = t + s
171170 continue
172171 end
173- if _t >= tstop
174- break
175- end
176- lrate = p. urates[uidx] === p. lrates[lidx] ? urate :
177- get_lrate (p, lidx, u, params, t)
178- if lrate > urate
179- error (" The lower bound should be lower than the upper bound rate for t = $(t) and i = $(i) , but lower bound = $(lrate) > upper bound = $(urate) " )
180- elseif lrate < urate
172+ (_t >= tstop) && break
173+
174+ lrate = get_lrate (p, lidx, u, params, t)
175+ if lrate < urate
181176 # when the lower and upper bound are the same, then v < 1 = lrate / urate = urate / urate
182- v = rand (rng)
177+ v = rand (rng) * urate
183178 # first inequality is less expensive and short-circuits the evaluation
184- if (v > lrate / urate)
185- if (v > get_rate (p, lidx, u, params, _t) / urate)
186- t = _t
187- urate = get_urate (p, uidx, u, params, t)
188- s = urate == zero (t) ? typemax (t) : randexp (rng) / urate
189- _t = t + s
190- continue
191- end
179+ if (v > lrate) && (v > get_rate (p, lidx, u, params, _t))
180+ t = _t
181+ urate = get_urate (p, uidx, u, params, t)
182+ s = urate == zero (t) ? typemax (t) : randexp (rng) / urate
183+ _t = t + s
184+ continue
192185 end
186+ elseif lrate > urate
187+ error (" The lower bound should be lower than the upper bound rate for t = $(t) and i = $(i) , but lower bound = $(lrate) > upper bound = $(urate) " )
193188 end
194189 break
195190 end
0 commit comments