Studying rate-induced tipping
Autonomous snapshot systems
CriticalTransitions.frozen_system — Function
frozen_system(rs::RateSystem, t)Returns the autonomous version of the non-autonomous RateSystem rs with parameters fixed at system time t.
CriticalTransitions.past_limit_system — Function
past_limit_system(rs::RateSystem, t)Returns the autonomous dynamical system corresponding to the RateSystem rs for times t < forcing_start_time. Equivalent to rs.specs.unforced_system.
CriticalTransitions.future_limit_system — Function
future_limit_system(rs::RateSystem, t)Returns the autonomous dynamical system corresponding to the RateSystem rs for times t > forcing_start_time + 2*forcing_duration, i.e. after the time-dependent forcing interval.
R-tipping diagrams
CriticalTransitions.rate_track_return_tip — Function
rate_track_return_tip(rs::RateSystem, Δts, Δps, bmap, sampler; kw...)Utilize the global continuation functionality of DynamicalSystems.jl to calculate a rate track-return-tip diagram for rs for a variety of forcing duration and forcing scales Δts, Δps. Return:
- a matrix of size
length(Δps)×length(Δts)encoding the type of rate tipping behavior. - the attractors of the global continuation of the unforced system.
Keyword arguments
u0 = initial_state(rs): Initial condition to start each rate-return simulation.distance = Centroid(): Distance function used when (1) matching attractors, and (2) mapping the end state of a rate simulation to its closest attractor through theBasinMapProximity.proximity_kw: Keywords propagated toBasinMapProximity, for mapping the rate system state to the unforced attractors at the middle and end (reverse) of forcing. Do not provide adistanceas this is used from the above keyword.decide_rate_outcome: A three input functionf(track_id, return_id, start_id)that returns an integer representing a possible rate tipping case of a simulation with a specificΔt, Δp. It inputs the attractor ID the system converges after the forwards rate forcing, the one it converges after the forcing is reverse, and the ID thatu0converges at the starting parameter of the system.
Description
This function formalizes and generalizes the concept of tracking, returning, or tipping, in rate forced systems introduced in (Ritchie et al., 2023). To achieve this, it uses global continuation using bmap, sampler. The function will run a whole global_continuation run over the parameter range prange = p0 .+ Δps to establish the unfrozen system attractors and assign unique IDs to them throughout prange. If you instead want to run the global continuation yourself, which allows you to change Δts, Δps without re-running the global continuation, then do:
pcurve = unforced_pcurve(rs, Δps)
matcher = MatchBySSSetDistance(distance)
ascm = AttractorsSeedContinueMatch(bmap, matcher)
_, attractors_cont = global_continuation(ascm, pcurve, sampler)
rate_track_return_tip(rs, Δts, Δps, attractors_cont; distance, kw...)After the global continunation, the function will perform a rate simulation with duration Δt and scale Δp for all combinations. For each, it will then assign an integer corresponding to the type of rate-dependent behaviour as in (Ritchie et al., 2023). By default, these integers are ∈ (1, 2, 3) and mean:
- Tracking always.
- Return but not tracking (safe overshoot).
- Tipping always (failure to track).
You can however provide a custom function that may have more involved decision logic via the keyword decide_rate_outcome. To find the unforced system attractor IDs at the middle and and of the rate simulation a BasinMapProximity is used.
Notes
This function applies the same duration and scaling to all parameters that are forced in rs, and enforces all forcings to be reversed as well. The profiles of each parameter are individual though. If any profile does not have the reverse = true option, an error is thrown.
CriticalTransitions.unforced_pcurve — Function
unforced_pcurve(rs::RateSystem, Δps::AbstractVector)Given a range of parameter increments Δps, return a parameter curve pcurve corresponding to all parameter values that rs will be forced through. This pcurve can be used to perform a global continuation for the unforced system.
Basin-overlap tipping probabilities
CriticalTransitions.tipping_probabilities — Function
tipping_probabilities(
BoA_before::ArrayBasinsOfAttraction,
BoA_after::ArrayBasinsOfAttraction,
) → P
tipping_probabilities(basins_before, basins_after) → PReturn the basin-overlap tipping probabilities before and after a parameter change or time-dependent forcing, following (Kaszás et al., 2019).
The basin arrays must have identical sizes and contain integer attractor labels. Let $\mathcal{B}_i(p)$ denote the basin of attraction of attractor $A_i$ at parameters $p$. For a change $p_- \to p_+$, the matrix entry is
\[P(A_i \to A_j \mid p_- \to p_+) = \frac{|\mathcal{B}_j(p_+) \cap \mathcal{B}_i(p_-)|}{|\mathcal{B}_i(p_-)|}.\]
Rows are ordered by the sorted unique labels in basins_before, and columns by the sorted unique labels in basins_after. If the label -1 occurs (trajectories that diverge), it is placed last. For the standard consecutive labels 1:n, P[i, j] is therefore the tipping probability from attractor i to attractor j.
ArrayBasinsOfAttraction inputs are supported for convenience; their .basins arrays are used directly and must describe the same grid points in the same order.