Skip to content

Commit

Permalink
Merge pull request #761 from JuliaReach/schillic/diffeq
Browse files Browse the repository at this point in the history
Avoid `using .DifferentialEquations`
  • Loading branch information
schillic authored Jan 12, 2024
2 parents ac94041 + 2f353c7 commit 4085b78
Showing 1 changed file with 11 additions and 13 deletions.
24 changes: 11 additions & 13 deletions src/Initialization/init_DifferentialEquations.jl
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
using .DifferentialEquations
import .DifferentialEquations
const DE = DifferentialEquations

# resolve namespace conflicts
using MathematicalSystems: islinear
using LazySets: concretize

using HybridSystems: states
# using MathematicalSystems: islinear
# using LazySets: concretize
# using HybridSystems: states

const DEFAULT_TRAJECTORIES = 10

Expand Down Expand Up @@ -45,8 +44,8 @@ function _solve_ensemble(ivp::InitialValueProblem, args...;
end

# formulate ensemble ODE problem
ensemble_prob = ODEProblem(field, first(initial_states), tspan)
_prob_func(prob, i, repeat) = remake(prob; u0=initial_states[i])
ensemble_prob = DE.ODEProblem(field, first(initial_states), tspan)
_prob_func(prob, i, repeat) = DE.remake(prob; u0=initial_states[i])

# choose tolerances
reltol = get(kwargs, :reltol, 1e-3)
Expand All @@ -55,7 +54,7 @@ function _solve_ensemble(ivp::InitialValueProblem, args...;
callback = get(kwargs, :callback, nothing)
dtmax = get(kwargs, :dtmax, Inf)

ensemble_prob = EnsembleProblem(ensemble_prob; prob_func=_prob_func)
ensemble_prob = DE.EnsembleProblem(ensemble_prob; prob_func=_prob_func)

if isnothing(callback)
result = DE.solve(ensemble_prob, trajectories_alg, ensemble_alg;
Expand Down Expand Up @@ -96,7 +95,7 @@ function _solve_ensemble(ivp::InitialValueProblem{<:AbstractHybridSystem},
t0_g = tstart(tspan)
T = tend(tspan)

termination_action = (integrator) -> terminate!(integrator)
termination_action = (integrator) -> DE.terminate!(integrator)
use_discrete_callback = get(kwargs, :use_discrete_callback, false)
dtmax = get(kwargs, :dtmax, Inf)
if use_discrete_callback && isinf(dtmax)
Expand Down Expand Up @@ -124,11 +123,11 @@ function _solve_ensemble(ivp::InitialValueProblem{<:AbstractHybridSystem},
if use_discrete_callback
# use a discrete callback function based on membership
condition = (u, t, integrator) -> u I⁻
callback = DiscreteCallback(condition, termination_action)
callback = DE.DiscreteCallback(condition, termination_action)
else
# use a continuous callback function based on membership
condition = (u, t, integrator) -> u I⁻ ? -1 : 1
callback = ContinuousCallback(condition, termination_action)
callback = DE.ContinuousCallback(condition, termination_action)
end
trajectory = _solve_ensemble(ivp_loc, args...; initial_states=[x0],
callback=callback, tspan=t0 .. T,
Expand Down Expand Up @@ -286,8 +285,7 @@ end
# merge trajectory pieces into an ODESolution object
function _merge_trajectory_chain(trajectory_chain)
prefix = trajectory_chain[1]
@inbounds for i in 2:length(trajectory_chain)
infix = trajectory_chain[i]
@inbounds for infix in Iterators.rest(trajectory_chain)
append!(prefix.u, infix.u)
append!(prefix.t, infix.t)
append!(prefix.k, infix.k)
Expand Down

0 comments on commit 4085b78

Please sign in to comment.