Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 33 additions & 17 deletions src/callbacks.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ ContinuousCallback(condition, affect!, affect_neg!;
save_positions = (true, true),
interp_points = 10,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing)
initializealg = nothing, is_discontinuity = true)
```

```julia
Expand All @@ -36,7 +36,7 @@ ContinuousCallback(condition, affect!;
affect_neg! = affect!,
interp_points = 10,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing)
initializealg = nothing, is_discontinuity = true)
```

Contains a single callback whose `condition` is a continuous function. The callback is triggered when this function evaluates to 0.
Expand Down Expand Up @@ -135,13 +135,15 @@ struct ContinuousCallback{F1, F2, F3, F4, F5, T, T2, T3, T4, I, R, SCP} <:
repeat_nudge::T3
initializealg::T4
saved_clock_partitions::SCP
is_discontinuity::Bool
initialize_save_discretes::Bool
function ContinuousCallback(
condition::F1, affect!::F2, affect_neg!::F3,
initialize::F4, finalize::F5, idxs::I, rootfind,
interp_points, save_positions, dtrelax::R, abstol::T,
reltol::T2, repeat_nudge::T3, initializealg::T4 = nothing,
saved_clock_partitions::SCP = (), initialize_save_discretes::Bool = true
saved_clock_partitions::SCP = (), is_discontinuity::Bool = true,
initialize_save_discretes::Bool = true
) where {
F1, F2, F3, F4, F5, T, T2, T3, T4, I, R, SCP,
}
Expand All @@ -153,7 +155,7 @@ struct ContinuousCallback{F1, F2, F3, F4, F5, T, T2, T3, T4, I, R, SCP} <:
interp_points,
BitArray(collect(save_positions)),
dtrelax, abstol, reltol, repeat_nudge, initializealg, saved_clock_partitions,
initialize_save_discretes
is_discontinuity, initialize_save_discretes
)
end
end
Expand All @@ -171,6 +173,7 @@ function ContinuousCallback(
repeat_nudge = 1 // 100,
initializealg = nothing,
saved_clock_partitions = (),
is_discontinuity = true,
initialize_save_discretes = true,
)
return ContinuousCallback(
Expand All @@ -179,7 +182,7 @@ function ContinuousCallback(
rootfind, interp_points,
save_positions,
dtrelax, abstol, reltol, repeat_nudge, initializealg, saved_clock_partitions,
initialize_save_discretes
is_discontinuity, initialize_save_discretes
)
end

Expand All @@ -194,15 +197,16 @@ function ContinuousCallback(
interp_points = 10,
dtrelax = 1,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing, saved_clock_partitions = (),
initializealg = nothing, saved_clock_partitions = (),
is_discontinuity = true,
initialize_save_discretes = true,
)
return ContinuousCallback(
condition, affect!, affect_neg!, initialize, finalize, idxs,
rootfind, interp_points,
collect(save_positions),
dtrelax, abstol, reltol, repeat_nudge, initializealg, saved_clock_partitions,
initialize_save_discretes
is_discontinuity, initialize_save_discretes
)
end

Expand All @@ -216,7 +220,7 @@ VectorContinuousCallback(condition, affect!, affect_neg!, len;
save_positions = (true, true),
interp_points = 10,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing)
initializealg = nothing, is_discontinuity = true)
```

```julia
Expand All @@ -229,7 +233,7 @@ VectorContinuousCallback(condition, affect!, len;
affect_neg! = affect!,
interp_points = 10,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing)
initializealg = nothing, is_discontinuity = true)
```

This is also a subtype of `AbstractContinuousCallback`. `CallbackSet` is not feasible when you have many callbacks,
Expand Down Expand Up @@ -269,14 +273,17 @@ struct VectorContinuousCallback{F1, F2, F3, F4, F5, T, T2, T3, T4, I, R, SCP} <:
repeat_nudge::T3
initializealg::T4
saved_clock_partitions::SCP
is_discontinuity::Bool
initialize_save_discretes::Bool
function VectorContinuousCallback(
condition::F1, affect!::F2, affect_neg!::F3, len::Int,
initialize::F4, finalize::F5, idxs::I, rootfind,
interp_points, save_positions, dtrelax::R,
abstol::T, reltol::T2, repeat_nudge::T3,
initializealg::T4 = nothing,
saved_clock_partitions::SCP = (), initialize_save_discretes = true
saved_clock_partitions::SCP = (),
is_discontinuity::Bool = true,
initialize_save_discretes = true
) where {
F1, F2, F3, F4, F5, T, T2,
T3, T4, I, R, SCP,
Expand All @@ -289,7 +296,9 @@ struct VectorContinuousCallback{F1, F2, F3, F4, F5, T, T2, T3, T4, I, R, SCP} <:
interp_points,
BitArray(collect(save_positions)),
dtrelax, abstol, reltol, repeat_nudge, initializealg,
saved_clock_partitions, initialize_save_discretes
saved_clock_partitions,
is_discontinuity,
initialize_save_discretes
)
end
end
Expand All @@ -304,7 +313,8 @@ function VectorContinuousCallback(
interp_points = 10,
dtrelax = 1,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing, saved_clock_partitions = (),
initializealg = nothing, saved_clock_partitions = (),
is_discontinuity = true,
initialize_save_discretes = true
)
return VectorContinuousCallback(
Expand All @@ -313,6 +323,7 @@ function VectorContinuousCallback(
idxs,
rootfind, interp_points,
save_positions, dtrelax,
is_discontinuity,
abstol, reltol, repeat_nudge, initializealg, saved_clock_partitions,
initialize_save_discretes
)
Expand All @@ -330,6 +341,7 @@ function VectorContinuousCallback(
dtrelax = 1,
abstol = 10eps(), reltol = 0, repeat_nudge = 1 // 100,
initializealg = nothing, saved_clock_partitions = (),
is_discontinuity = true,
initialize_save_discretes = true
)
return VectorContinuousCallback(
Expand All @@ -338,7 +350,7 @@ function VectorContinuousCallback(
rootfind, interp_points,
collect(save_positions),
dtrelax, abstol, reltol, repeat_nudge, initializealg, saved_clock_partitions,
initialize_save_discretes
is_discontinuity, initialize_save_discretes
)
end

Expand All @@ -348,7 +360,7 @@ DiscreteCallback(condition, affect!;
initialize = INITIALIZE_DEFAULT,
finalize = FINALIZE_DEFAULT,
save_positions = (true, true),
initializealg = nothing)
initializealg = nothing, is_discontinuity = true)
```

# Arguments
Expand Down Expand Up @@ -402,21 +414,23 @@ struct DiscreteCallback{F1, F2, F3, F4, F5, SCP} <: AbstractDiscreteCallback
save_positions::BitArray{1}
initializealg::F5
saved_clock_partitions::SCP
is_discontinuity::Bool
initialize_save_discretes::Bool
function DiscreteCallback(
condition::F1, affect!::F2,
initialize::F3, finalize::F4,
save_positions,
initializealg::F5 = nothing,
saved_clock_partitions::SCP = (),
is_discontinuity::Bool = true,
initialize_save_discretes = true
) where {F1, F2, F3, F4, F5, SCP}
_condition = prepare_function(condition)
return new{typeof(_condition), F2, F3, F4, F5, SCP}(
_condition,
affect!, initialize, finalize,
BitArray(collect(save_positions)),
initializealg, saved_clock_partitions,
initializealg, saved_clock_partitions, is_discontinuity,
initialize_save_discretes
)
end
Expand All @@ -426,11 +440,13 @@ function DiscreteCallback(
initialize = INITIALIZE_DEFAULT, finalize = FINALIZE_DEFAULT,
save_positions = (true, true),
initializealg = nothing, saved_clock_partitions = (),
initialize_save_discretes = true,
is_discontinuity = true,
initialize_save_discretes = true
)
return DiscreteCallback(
condition, affect!, initialize, finalize, save_positions, initializealg,
saved_clock_partitions, initialize_save_discretes
saved_clock_partitions, is_discontinuity,
initialize_save_discretes,
)
end

Expand Down