Landscape And Hillslopes API
This page is generated from the built Python runtime manifest. Do not edit signatures here.
LandscapeModel thresholds use specific catchment area A/dx in metres. Flat relief windows use a full side length in pixels.
HillslopeCellularResult
Conservative cellular hillslope-transport result and mass-transfer diagnostics.
Returned by hillslope_transport_cellular(); not constructible directly.
Attributes
completed : bool elevation : Raster Elevation Raster (m) after the run. exported_volume_m3 : float Net volume (m^3) exported through fixed-elevation (Dirichlet) cells. max_slope_ratio : float Largest S / S_c reached. message : str n_face_events : int n_substeps : int
Authors
B. Gailleton
Members
completed
(self) -> bool
elevation
Elevation Raster (m) after the run.
exported_volume_m3
Net volume (m^3) exported through fixed-elevation (Dirichlet) cells.
max_slope_ratio
Largest S / S_c reached.
message
(self) -> str
n_face_events
(self) -> int
n_substeps
(self) -> int
HillslopeSteadyStateResult
Steady hillslope-surface solution and convergence diagnostics.
Returned by hillslope_steady_state(); not constructible directly.
Attributes
converged : bool True if the solver tolerance was met. elevation : Raster Steady-state elevation Raster (m). final_residual : float n_iterations : int Solver iterations used.
Authors
B. Gailleton
Members
converged
True if the solver tolerance was met.
elevation
Steady-state elevation Raster (m).
final_residual
(self) -> float
n_iterations
Solver iterations used.
HillslopeTransportResult
Implicit hillslope-transport result and adaptive-solver diagnostics.
Returned by hillslope_transport_implicit(); not constructible directly.
Attributes
elevation : Raster Elevation Raster (m) after the run. final_dt : float Last substep length (years). limiter_fired : bool max_slope_ratio : float Largest S / S_c in the final surface. n_rejected_substeps : int Substeps rejected by the limiter or divergence. n_substeps : int Accepted substeps. total_picard_iterations : int
Authors
B. Gailleton
Members
elevation
Elevation Raster (m) after the run.
final_dt
Last substep length (years).
limiter_fired
(self) -> bool
max_slope_ratio
Largest S / S_c in the final surface.
n_rejected_substeps
Substeps rejected by the limiter or divergence.
n_substeps
Accepted substeps.
total_picard_iterations
(self) -> int
LandscapeModel
Stateful coupled fluvial-incision and hillslope-transport landscape model.
The model owns its evolving elevation raster and reuses native hillslope solver
workspaces between calls to step or run. Each step applies uplift,
stream-power fluvial incision E = K a**m S**n (a = A / dx the
specific catchment area in m, S the gradient in m/m, E in m/yr) and
hillslope transport. Typical use::
model = lsdtt3.LandscapeModel(dem, timestep_years=100, uplift_rate=1e-4)
result = model.run(1000) # 1000 steps of 100 years
result.elevation.write("evolved.tif")
Construct it as
LandscapeModel(dem: Raster, timestep_years: float = 100.0, erodibility: float = 0.001, m_exponent: float = 0.45, n_exponent: float = 1.0, uplift_rate: float = 0.0001, hillslope_diffusivity: float = 0.001, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.8, incision_threshold_specific_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None)
LandscapeModel(dem: Raster, timestep_years: float = 100.0, erodibility: float = 0.001, m_exponent: float = 0.45, n_exponent: float = 1.0, uplift_rate: float = 0.0001, hillslope_diffusivity: float = 0.001, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.8, incision_threshold_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None)
Parameters
dem : Raster
Initial, depression-conditioned elevation surface (m) in a projected
metre CRS.
timestep_years : float, default=100.0
Duration (years) of each call to step.
erodibility : float, default=0.001
Stream-power erodibility K (> 0), in the specific-area convention above;
also the reference K for erodibility_field.
m_exponent, n_exponent : float, default=0.45, 1.0
Stream-power exponents on specific area and slope.
uplift_rate : float, default=0.0001
Uniform rock uplift rate in m/yr.
hillslope_diffusivity : float, default=0.001
Hillslope diffusivity D in m^2/yr.
hillslope_model : {"none", "linear", "roering", "roering_implicit", "cidre", "adi", "cellular"}, default="cidre"
Hillslope process model: linear explicit diffusion, roering
explicit nonlinear flux (Roering et al. 1999), roering_implicit
backward-Euler nonlinear solver, cidre Carretier et al. (2016),
adi implicit linear diffusion, cellular cellular transport;
none disables hillslope transport.
nonlinear_hillslopes : bool, default=False
Use the Roering nonlinear flux law where the model supports it.
critical_hillslope_slope : float, default=0.8
Critical gradient S_c (m/m) of the nonlinear flux law.
incision_threshold_specific_area : float, default=0.0
Channel threshold in specific catchment area A/dx (metres); zero supports fully coupled runs.
incision_threshold_area : float, default=0.0
Deprecated alias of incision_threshold_specific_area (emits a
DeprecationWarning).
coupling_regime : {"automatic", "coupled", "channels_as_boundaries"}, default="automatic"
coupled: hillslope and fluvial processes act everywhere, so valleys
and drainage density emerge; channels_as_boundaries: channel pixels
(above the threshold or in channel_mask) are fixed boundaries of the
hillslope solve; automatic chooses channels_as_boundaries when a
positive threshold or a channel mask is given, else coupled.
boundary_conditions : str, default='oooo'
Four NESW codes: o open, n no-flux, p periodic, b base
level.
fluvial_method : {"d8", "dinf", "none"}, default="d8"
Fluvial incision routing method, or none for hillslope-only evolution.
channel_mask : Raster or None, default=None
Same-grid 0/1 imposed channel raster.
hold_channel_mask_fixed : bool, default=False
Add imposed channel pixels to the fixed-elevation set.
fixed_pixels : array-like of int or None, default=None
Explicit N x 2 (row, col) fixed-elevation cells. None uses the open
and base-level edges.
n_threads : int, default=0
OpenMP thread count; zero uses the runtime default.
baselevel_fall_rate : float, default=0.0
Downward motion of fixed base-level cells in m/yr.
cellular_r_match : float, default=0.85
cellular only: slope ratio r = S / S_c (0 < r < 1) above which the
nonlinear mobility 1 / (1 - r**2) is continued linearly, avoiding
the singularity at S_c.
cellular_cfl_safety : float, default=0.8
cellular only: stability safety factor on the substep (0 < f <= 1).
cellular_nonlocal_fraction : float, default=0.0
cellular only: fraction of near-critical excess flux moved
non-locally (0 keeps the local solver exactly).
cellular_nonlocal_activation_ratio : float, default=0.8
cellular only: slope / S_c ratio (0-1) above which non-local
transfer starts.
cellular_nonlocal_deposition_probability : float, default=0.5
cellular only: probability (0-1] that non-local material deposits at
each hop.
cellular_nonlocal_max_hops : int, default=4
cellular only: largest number of cells non-local material travels.
erodibility_field : Raster or numpy.ndarray or None, default=None
Per-pixel absolute erodibility K replacing erodibility in the fluvial
step: a Raster strictly on the DEM grid or a (n_rows, n_cols) array
(NaN only on DEM nodata). Every valid pixel needs a finite K > 0.
erodibility_m_exponent : float or None, default=None
The m the field was calibrated for; a different m raises ValueError.
erodibility_area_convention : {"map_area", "specific_area"} or None, default=None
Area convention of the field; map_area K is converted by dx**m.
Attributes
coupling_regime : str Resolved coupling experiment: coupled or channels_as_boundaries. elevation : Raster Current elevation Raster (m). erodibility_field : object The per-pixel erodibility in use (run convention), or None. hillslope_model : str Name of the hillslope model in use. iteration : int Number of steps taken so far. time_years : float Model time (years).
Methods
channel_mask() -> Raster Return the imposed or currently threshold-derived channel mask. run(n_steps: int, compute_erosion_rate: bool = False) -> LandscapeStepResult Advance the coupled model repeatedly and return the final step result. set_erodibility_field(field: object | None) -> None Replace the per-pixel erodibility used by subsequent steps. set_forcing(uplift_rate: float, baselevel_fall_rate: float = 0.0) -> None Change the uniform tectonic/base-level forcing used by subsequent steps. step(compute_erosion_rate: bool = False) -> LandscapeStepResult Advance the coupled model by one configured timestep.
Authors
B. Gailleton S. M. Mudd
Deprecated compatibility names:
- incision_threshold_area -> incision_threshold_specific_area; earliest removal: following minor.
def __init__(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_specific_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
def __init__(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
Members
__init__
init(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_specific_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None init(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
Overloaded function.
__init__(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_specific_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
Create a coupled landscape-evolution model from an in-memory DEM.
Parameters
dem : Raster
Initial, depression-conditioned elevation surface.
timestep_years : float, optional
Duration of each call to step.
erodibility, m_exponent, n_exponent : float, optional
Stream-power incision parameters. erodibility must be > 0; it is also the
reference K for erodibility_field.
uplift_rate, hillslope_diffusivity : float, optional
Uniform uplift in m yr⁻¹ and hillslope diffusivity in m² yr⁻¹.
hillslope_model : {"none", "linear", "roering", "roering_implicit", "cidre", "adi", "cellular"}, optional
Hillslope process model. none disables hillslope transport.
nonlinear_hillslopes, critical_hillslope_slope : bool, float, optional
Roering nonlinear-flux controls.
incision_threshold_specific_area : float, optional
Channel threshold in specific catchment area A/dx (metres); zero supports fully coupled runs.
coupling_regime : {"automatic", "coupled", "channels_as_boundaries"}, optional
Whether hillslope channels emerge or are imposed.
boundary_conditions : str, optional
Four NESW open, no-flux, periodic, or base-level codes.
fluvial_method : {"d8", "dinf", "none"}, optional
Fluvial incision routing method, or none for hillslope-only evolution.
channel_mask : Raster, optional
Same-grid binary imposed channel raster.
hold_channel_mask_fixed : bool, optional
Add imposed channel pixels to the fixed-elevation set.
fixed_pixels : array-like of int, optional
Explicit N-by-2 (row, col) fixed-elevation cells. Defaults to open/base-level edges.
n_threads : int, optional
OpenMP thread count; zero uses the runtime default.
baselevel_fall_rate : float, optional
Downward motion of fixed base-level cells in m yr⁻¹.
cellular_r_match, cellular_cfl_safety, cellular_nonlocal_fraction : float, optional
Cellular-hillslope calibration, stability, and optional nonlocal-transfer controls.
erodibility_field : Raster or numpy.ndarray, optional
Per-pixel absolute erodibility K replacing erodibility in the fluvial step: a
Raster strictly on the DEM grid or a (n_rows, n_cols) array (NaN only on DEM
nodata). Every valid pixel needs a finite K > 0.
erodibility_m_exponent : float, optional
The m the field was calibrated for; a different m raises ValueError.
erodibility_area_convention : {"map_area", "specific_area"}, optional
Area convention of the field; map_area K is converted by dx**m.
Returns
LandscapeModel Ready-to-step evolving model.
Authors
B. Gailleton
__init__(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
def __init__(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_specific_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
def __init__(self, dem: lsdtt3.Raster, timestep_years: float = 100.0, erodibility: float = 0.0010000000474974513, m_exponent: float = 0.44999998807907104, n_exponent: float = 1.0, uplift_rate: float = 9.999999747378752e-05, hillslope_diffusivity: float = 0.0010000000474974513, hillslope_model: str = 'cidre', nonlinear_hillslopes: bool = False, critical_hillslope_slope: float = 0.800000011920929, incision_threshold_area: float = 0.0, coupling_regime: str = 'automatic', boundary_conditions: str = 'oooo', fluvial_method: str = 'd8', channel_mask: object | None = None, hold_channel_mask_fixed: bool = False, fixed_pixels: object | None = None, n_threads: int = 0, baselevel_fall_rate: float = 0.0, cellular_r_match: float = 0.85, cellular_cfl_safety: float = 0.8, cellular_nonlocal_fraction: float = 0.0, cellular_nonlocal_activation_ratio: float = 0.8, cellular_nonlocal_deposition_probability: float = 0.5, cellular_nonlocal_max_hops: int = 4, erodibility_field: object | None = None, erodibility_m_exponent: object | None = None, erodibility_area_convention: object | None = None) -> None
channel_mask
channel_mask(self) -> lsdtt3.Raster
Return the imposed or currently threshold-derived channel mask.
Returns
Raster Binary channel raster on the current model grid.
Authors
B. Gailleton
def channel_mask(self) -> lsdtt3.Raster
coupling_regime
Resolved coupling experiment: coupled or channels_as_boundaries.
elevation
Current elevation Raster (m).
erodibility_field
The per-pixel erodibility in use (run convention), or None.
hillslope_model
Name of the hillslope model in use.
iteration
Number of steps taken so far.
run
run(self, n_steps: int, compute_erosion_rate: bool = False) -> lsdtt3.LandscapeStepResult
Advance the coupled model repeatedly and return the final step result.
Parameters
n_steps : int Number of timesteps to execute. compute_erosion_rate : bool, optional Include a per-pixel, signed erosion-rate raster for the final step.
Returns
LandscapeStepResult Final surface and diagnostics.
Authors
B. Gailleton
def run(self, n_steps: int, compute_erosion_rate: bool = False) -> lsdtt3.LandscapeStepResult
set_erodibility_field
set_erodibility_field(self, field: object | None) -> None
Replace the per-pixel erodibility used by subsequent steps.
Parameters
field : Raster, numpy.ndarray or None
Absolute K strictly on the model grid (Raster), or a (n_rows, n_cols) array
with NaN only on DEM nodata; None returns to the scalar erodibility.
Every valid pixel needs a finite K > 0.
Returns
None
Authors
B. Gailleton
def set_erodibility_field(self, field: object | None) -> None
set_forcing
set_forcing(self, uplift_rate: float, baselevel_fall_rate: float = 0.0) -> None
Change the uniform tectonic/base-level forcing used by subsequent steps.
Parameters
uplift_rate, baselevel_fall_rate : float Non-negative uplift and fixed-base-level lowering rates in m yr⁻¹.
Returns
None
Authors
B. Gailleton
def set_forcing(self, uplift_rate: float, baselevel_fall_rate: float = 0.0) -> None
step
step(self, compute_erosion_rate: bool = False) -> lsdtt3.LandscapeStepResult
Advance the coupled model by one configured timestep.
Parameters
compute_erosion_rate : bool, optional Include a per-pixel, signed erosion-rate raster in the result.
Returns
LandscapeStepResult Updated surface and diagnostics.
Authors
B. Gailleton
def step(self, compute_erosion_rate: bool = False) -> lsdtt3.LandscapeStepResult
time_years
Model time (years).
LandscapeStepResult
Diagnostics and surface produced by one or more landscape-evolution steps.
Returned by LandscapeModel.run(), LandscapeModel.step(); not constructible directly.
Attributes
delta_max_elevation : float Absolute change of the maximum elevation over the last step (m). delta_mean_elevation : float Absolute change of the mean elevation over the last step (m). elevation : Raster Elevation (m) after the step(s). erosion_rate : Raster | None Per-pixel erosion rate Raster (m/yr, positive = erosion, uplift removed) if requested, else None. iteration : int Total number of steps the model has taken. max_erosion_rate : float Largest erosion rate over the last step (m/yr, before uplift). max_local_elevation_change : float Largest absolute per-pixel elevation change over the last step (m). mean_erosion_rate : float Mean erosion rate over the last step (m/yr, before uplift). p999_local_elevation_change : float 99.9th percentile of the absolute per-pixel elevation change (m); a robust steady-state measure. time_years : float Model time (years).
Authors
B. Gailleton
Members
delta_max_elevation
Absolute change of the maximum elevation over the last step (m).
delta_mean_elevation
Absolute change of the mean elevation over the last step (m).
elevation
Elevation (m) after the step(s).
erosion_rate
Per-pixel erosion rate Raster (m/yr, positive = erosion, uplift removed) if requested, else None.
iteration
Total number of steps the model has taken.
max_erosion_rate
Largest erosion rate over the last step (m/yr, before uplift).
max_local_elevation_change
Largest absolute per-pixel elevation change over the last step (m).
mean_erosion_rate
Mean erosion rate over the last step (m/yr, before uplift).
p999_local_elevation_change
99.9th percentile of the absolute per-pixel elevation change (m); a robust steady-state measure.
time_years
Model time (years).
hillslope_steady_state
Solve a channel-bounded linear or nonlinear steady hillslope surface.
Parameters
dem : Raster
Initial surface; elevations at channel cells are fixed Dirichlet values.
channels : Raster
Same-grid binary raster: one fixes a channel cell and zero solves it as hillslope.
model : {"auto", "roering", "cidre"}, optional
Newton with safe SOR fallback, direct SOR/Picard, or pseudo-transient routed
Cidre solution.
diffusivity : float, optional
Hillslope diffusivity in m² yr⁻¹.
uplift_rate : float, optional
Uniform non-channel uplift rate in m yr⁻¹.
critical_slope : float, optional
Critical gradient used when nonlinear=True.
nonlinear : bool, optional
Use the Roering et al. (1999) nonlinear flux law.
boundary_conditions : str, optional
Four NESW open or paired-periodic codes.
tolerance, max_iterations, sor_omega, n_threads
Solver convergence and execution controls.
Returns
HillslopeSteadyStateResult Surface and convergence diagnostics.
Authors
B. Gailleton
def hillslope_steady_state(dem: lsdtt3.Raster, channels: lsdtt3.Raster, model: str = 'roering', diffusivity: float = 0.0010000000474974513, uplift_rate: float = 9.999999747378752e-05, critical_slope: float = 0.800000011920929, nonlinear: bool = False, boundary_conditions: str = 'oooo', tolerance: float = 9.999999747378752e-05, max_iterations: int = 10000, sor_omega: float = 0.0, n_threads: int = 0) -> lsdtt3.HillslopeSteadyStateResult
hillslope_transport_adi
Advance unconstrained linear hillslope diffusion with Crank-Nicolson ADI sweeps.
Parameters
dem : Raster Current elevation surface. diffusivity : float Diffusivity in m² yr⁻¹. duration_years : float Integration duration in years. boundary_conditions : str, optional Four NESW open, no-flux, or paired-periodic codes.
Returns
Raster New elevation surface.
Authors
B. Gailleton
def hillslope_transport_adi(dem: lsdtt3.Raster, diffusivity: float, duration_years: float, boundary_conditions: str = 'oooo') -> lsdtt3.Raster
hillslope_transport_cellular
Advance conservative face-transfer cellular hillslope transport.
Parameters
dem, channels : Raster
Current elevation and same-grid binary fixed-channel mask.
duration_years, diffusivity, uplift_rate, critical_slope : float
Transport duration and physical flux-law parameters.
r_match : float, optional
Slope ratio S / S_c (0-1) above which the nonlinear mobility
1 / (1 - r**2) is continued linearly.
cfl_safety : float, optional
Stability safety factor on the substep (0 < f <= 1).
nonlocal_fraction : float, optional
Fraction of near-critical excess flux moved non-locally (0 = local only).
nonlocal_activation_ratio : float, optional
Slope / S_c ratio above which non-local transfer starts.
nonlocal_deposition_probability : float, optional
Probability (0-1] that non-local material deposits at each hop.
nonlocal_max_hops : int, optional
Largest number of cells non-local material travels.
boundary_conditions : str, optional
Four NESW codes o, n, p or b.
n_threads : int, optional
OpenMP thread count; 0 uses the runtime default.
Returns
HillslopeCellularResult Updated elevation and conservative transfer diagnostics.
Authors
B. Gailleton
def hillslope_transport_cellular(dem: lsdtt3.Raster, channels: lsdtt3.Raster, duration_years: float, diffusivity: float = 0.001, uplift_rate: float = 0.0, critical_slope: float = 0.8, r_match: float = 0.85, cfl_safety: float = 0.8, nonlocal_fraction: float = 0.0, nonlocal_activation_ratio: float = 0.8, nonlocal_deposition_probability: float = 0.5, nonlocal_max_hops: int = 4, boundary_conditions: str = 'oooo', n_threads: int = 0) -> lsdtt3.HillslopeCellularResult
hillslope_transport_explicit
Advance linear or Roering nonlinear hillslope transport with explicit sub-cycling.
Parameters
dem : Raster Current elevation surface. channels : Raster Same-grid binary fixed-channel mask. diffusivity : float Diffusivity in m² yr⁻¹. duration_years : float Integration duration in years. nonlinear : bool, optional Use nonlinear Roering transport. critical_slope : float, optional Critical gradient for nonlinear transport. boundary_conditions : str, optional Four NESW open, no-flux, or paired-periodic codes. n_threads : int, optional OpenMP thread count; zero uses the runtime default.
Returns
Raster New elevation surface; channels and nodata are preserved.
Authors
B. Gailleton
def hillslope_transport_explicit(dem: lsdtt3.Raster, channels: lsdtt3.Raster, diffusivity: float, duration_years: float, nonlinear: bool = False, critical_slope: float = 0.800000011920929, boundary_conditions: str = 'oooo', n_threads: int = 0) -> lsdtt3.Raster
hillslope_transport_implicit
Advance hillslope transport with implicit backward-Euler integration.
Parameters
dem, channels : Raster Current surface and same-grid binary fixed-channel mask. duration_years : float Integration duration in years. diffusivity, uplift_rate, critical_slope, nonlinear Roering transport-law parameters in m² yr⁻¹, m yr⁻¹, and m/m. boundary_conditions : str, optional Four NESW open, no-flux, or paired-periodic codes. picard_tolerance, picard_max_iterations, slope_ratio_cap, n_threads Nonlinear-solver controls.
Returns
HillslopeTransportResult New elevation surface and adaptive/Picard diagnostics.
Authors
B. Gailleton
def hillslope_transport_implicit(dem: lsdtt3.Raster, channels: lsdtt3.Raster, duration_years: float, diffusivity: float = 0.0010000000474974513, uplift_rate: float = 0.0, critical_slope: float = 0.800000011920929, nonlinear: bool = True, boundary_conditions: str = 'oooo', picard_tolerance: float = 9.999999747378752e-05, picard_max_iterations: int = 50, slope_ratio_cap: float = 0.9900000095367432, n_threads: int = 0) -> lsdtt3.HillslopeTransportResult