Studying rate-induced tipping

Autonomous snapshot systems

CriticalTransitions.past_limit_systemFunction
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_systemFunction
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_tipFunction
rate_track_return_tip(rs::RateSystem, Δts, Δps, mapper, ics; kw...)

Utilize the global_continuation functionality of Attractors.jl to calculate a rate track-return-tip diagram for rs for a variety of forcing duration and forcing scales Δts, Δps with the rate system starting always at u0. Return:

  1. a matrix of size length(Δps) × length(Δts) encoding the type of rate tipping behavior.
  2. attractors_cont, the attractors of the global continuation of the unforced system.

Keyword arguments

  • 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 mapper, ics. 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 simply do:

pcurve = unforced_pcurve(rs, Δps)
matcher = MatchBySSSetDistance(distance)
ascm = AttractorsSeedContinueMatch(mapper, matcher)
_, attractors_cont = global_continuation(ascm, pcurve, ics)
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 an 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_pcurveFunction
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