Measures how quickly neighbouring water parcels reach a chosen separation,
rather than how far apart they get in a chosen time. Where ftle() fixes the
clock and measures distance, FSLE fixes the distance and measures the clock:
Usage
fsle(
env_dat,
u = "UO",
v = "VO",
final_separation = 50,
initial_separation = NULL,
max_days = 60,
direction = c("backward", "forward"),
step_hours = 6,
name = NULL
)Arguments
- env_dat
an
sfPOINT object with one row per location and time step, as datamatch's access functions return, on a regular lon/lat grid, containing eastward and northward velocity columns- u
name of the eastward velocity column, in m/s
- v
name of the northward velocity column, in m/s
- final_separation
target separation \(\delta_f\), in km. This is the scale-selectivity knob: it sets the size of structure resolved.
- initial_separation
starting separation \(\delta_0\), in km; defaults to roughly one grid cell
- max_days
give up after this long. Must exceed the time a typical parcel pair needs, or most of the field returns
NA.- direction
"backward"(attracting structures, the default) or"forward"(repelling structures)- step_hours
Runge-Kutta step size, in hours
- name
name for the new column
Value
env_dat with an FSLE column added, in 1/day. Parcels that never reach
final_separation within max_days are NA.
Details
$$\lambda = \frac{\ln(\delta_f / \delta_0)}{\tau}$$
with \(\delta_0\) the starting separation, \(\delta_f\) the target, and \(\tau\) the time taken to reach it. Units are 1/day.
Why choose this over FTLE
The difference is scale selectivity, and it matters most in a domain whose flow speed varies a lot from place to place.
An FTLE map with a fixed integration time resolves fine structure where the flow is fast and only coarse structure where it is slow. Across a shelf with an energetic break current and a sluggish interior, ridge intensity then partly encodes background current speed rather than frontal activity, and a model cannot tell the two apart.
FSLE asks the same question everywhere — "how long to separate by \(\delta_f\)?" — so results are comparable between energetic and quiet regions, and \(\delta_f\) can be set to a scale that means something biologically: a patch size, a predator's search radius, a survey's resolution.
The cost is that FSLE has no natural place to encode a biologically meaningful
timescale. When the relevant duration is known — a retention time, a cohort's
accumulation window — ftle() with that integration time is the better tool.
How it is computed
Each grid point is seeded with two companion particles, offset east and north
by initial_separation. All three are advected together, and the separation of
each pair is checked after every step. \(\tau\) is the first time either pair
reaches final_separation.
Parcels that never separate that far within max_days return NA: the
question "how long to reach this separation" simply has no answer for them, and
substituting max_days would report a slow separation rate where there was
none at all.
References
d'Ovidio, F., Fernandez, V., Hernandez-Garcia, E., & Lopez, C. (2004). Mixing structures in the Mediterranean Sea from finite-size Lyapunov exponents. Geophysical Research Letters, 31(17).
See also
ftle(), and docs/methods.md for when to prefer which
Examples
if (FALSE) { # \dontrun{
# Structures at the 50 km scale, comparable across the whole shelf
env <- datamatch::accessCopernicus(vars = c("UO", "VO"), ...)
env <- fsle(env, final_separation = 50) # UO and VO are the defaults
# A scale matched to a predator's search radius
env <- fsle(env, final_separation = 10, max_days = 60)
} # }