Studying rate-induced tipping

Autonomous snapshot systems

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.

source
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.

source

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:

  1. a matrix of size length(Δps) × length(Δts) encoding the type of rate tipping behavior.
  2. 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 the BasinMapProximity.
  • proximity_kw: Keywords propagated to BasinMapProximity, for mapping the rate system state to the unforced attractors at the middle and end (reverse) of forcing. Do not provide a distance as this is used from the above keyword.
  • decide_rate_outcome: A three input function f(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 that u0 converges 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:

  1. Tracking always.
  2. Return but not tracking (safe overshoot).
  3. 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.

source
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.

source

Basin-overlap tipping probabilities

CriticalTransitions.tipping_probabilities — Function
tipping_probabilities(
    BoA_before::ArrayBasinsOfAttraction,
    BoA_after::ArrayBasinsOfAttraction,
) → P
tipping_probabilities(basins_before, basins_after) → P

Return 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.

source