CLI reference: lsdtt-cosmo-prediction
Predicts cosmogenic radionuclide (CRN) concentrations across a DEM under three scenarios: steady-state erosion, transient step-change erosion, and erosion-weighted downstream accumulation. Uses Stone (2000) spallation scaling with optional ERA40 atmospheric and palaeomagnetic corrections via a NetCDF file.
Supported nuclides: ¹⁰Be (Be10), ²⁶Al (Al26), ¹⁴C (C14).
Units: concentrations in atoms g⁻¹; effective erosion rates in g cm⁻² yr⁻¹.
To convert: ε [g cm⁻² yr⁻¹] = ε [m yr⁻¹] × ρ [kg m⁻³] × 0.1.
Usage
lsdtt-cosmo-prediction <path> <parameter_file>
lsdtt-cosmo-prediction <parameter_file> # path defaults to ./
lsdtt-cosmo-prediction -h # print help and exit
Parameter file format
# Lines beginning with # are comments.
key: value
At least one prediction mode must be activated; the program exits with a message if none are set.
Pipeline overview
| Step | Description |
|---|---|
| 1. Load DEM | GDAL-supported format; must be in projected metres |
| 2. Generate the step change | (optional) make_step_change_rasters — derives erosion rate, time-since-change and topography from the analytical fluvial solution |
| 3. Production raster | Compute Stone 2000 / LSDn, or load from disk |
| 4. Shielding rasters | Topographic, snow, self (raster or uniform scalar) |
| 5. Erosion raster | Raster, uniform scalar, or the generated field |
| 6. Quartz fertility and ice | (optional) fertility field; the ice mask rewrites snow shielding, erosion rate and fertility |
| 7. Steady-state concentrations | calculate_crn_concentration_raster |
| 8. Step-change concentrations | calculate_step_change_crn_concentration_raster or the multi-isotope modes |
| 9. Landslide coupling | (optional) landslide_coupling — scars and/or flushed debris superimposed on step 8 |
| 10. Accumulated concentrations | calculate_accumulated_crn_concentration, mixing on erosion rate or on quartz |
Input / output parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
read_path |
string | ./ |
Directory containing the input DEM. |
read_fname |
string | (empty) | Input DEM filename (including extension). |
write_path |
string | ./ |
Directory for output files. |
write_fname |
string | (same as read_fname stem) | Output filename stem (no extension). |
write_output_format |
string | cog |
Output raster format. cog, gtiff, or same_as_input. |
Nuclide and muon scheme
| Parameter | Type | Default | Description |
|---|---|---|---|
nuclide |
string | Be10 |
Nuclide to predict. Be10, Al26, or C14. |
muon_scheme |
string | BraucherBorchers |
Muon production scheme. BraucherBorchers, Braucher, Granger, Schaller, newCRONUS, cronusEmulatorSt, cronusEmulatorLSDn. The cronusEmulator* schemes reproduce the CRONUS v3 online calculator; they are pressure-dependent (a pressure raster is computed automatically) and are steady-state only — the step-change and transient prediction modes reject them. |
Prediction modes
At least one must be set to true.
| Parameter | Type | Default | Description |
|---|---|---|---|
calculate_crn_concentration_raster |
bool | false |
Compute steady-state concentration at every pixel. Requires erosion rate field and shielding rasters. |
calculate_step_change_crn_concentration_raster |
bool | false |
Compute transient concentration after an instantaneous step change in erosion rate. Requires step_change_eff_erate_old/new and time_since_change. |
calculate_multi_isotope_step_change |
bool | false |
Carry Be-10, Al-26 and C-14 through the same step change at every pixel, and write the two isotope-ratio rasters. |
calculate_multi_isotope_transient |
bool | false |
The same three nuclides through an arbitrary erosion history from transient_history_fname. The general case of the step-change mode. |
calculate_accumulated_crn_concentration |
bool | false |
Accumulate concentration downstream using D8 flow routing. In multi-isotope mode (with no concentration_raster_prefix), Be10/Al26/C14 are accumulated together in one pass and accumulated ratios can be written. |
Three further capabilities are modifiers rather than modes, each opt-in and a no-op when left alone:
| Section | Switch | What it does |
|---|---|---|
| Generating the step change | make_step_change_rasters |
builds the time-since-change field instead of requiring one |
| Landslide coupling | landslide_coupling |
superimposes scars and/or flushed debris |
| Quartz fertility and ice | quartz_fertility*, ice_mask_raster_prefix |
changes what the downstream mixture is weighted by |
Multi-isotope parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
transient_history_fname |
string | NULL |
CSV erosion history for calculate_multi_isotope_transient. NULL is deliberate because transient prediction is optional; the file is required when that mode is enabled. Columns are time,rate,removal (yr BP, m/yr, m); rows run most-recent-first and end with time = -9999. |
transient_rock_density_kg_m3 |
float | 2650 |
Density converting that history's metre-based rates and removals into effective depths. |
write_isotope_ratio_rasters |
bool | true |
In multi-isotope step-change/transient mode, write _R2610_step.tif (Al26/Be10) and _R1410_step.tif (C14/Be10). If accumulation is also on, also write _R2610_acc.tif and _R1410_acc.tif from accumulated basin means. |
Scaling scheme
| Parameter | Type | Default | Description |
|---|---|---|---|
scaling_scheme |
string | stone |
stone = Stone (2000)/Lal, the site-based raster-prediction default and the CAIRN/OCTOPUS scaling. The landslide generator instead defaults to uniform to preserve its legacy scalar path. lsdn = Lifton, Sato & Dunai (2014), interpolated from the LSDn2015 grids. Both site schemes are evaluated per pixel. |
Production raster
By default the Stone 2000 spallation production rate is computed from DEM elevation. A pre-computed production raster can be loaded and optionally saved to disk.
| Parameter | Type | Default | Description |
|---|---|---|---|
load_production_raster |
bool | false |
Load production raster from disk instead of computing. |
production_raster_prefix |
string | NULL |
Filename prefix (no extension) for a pre-computed production raster. Path: read_path + prefix + .tif. Used when load_production_raster: true. |
write_production_raster |
bool | false |
Write the computed production raster to disk. Output: <write_fname>_crn_prod.tif. |
crn_nc_fname |
string | (empty) | Path to crn_parameters.nc for ERA40 atmospheric scaling and palaeomagnetic correction. Leave empty to use the crn_parameters.nc bundled with lsdtt3 (found automatically); if absent, standard-atmosphere Stone 2000. |
sample_age_yr |
float | 0 |
Sample exposure age (yr) for palaeomagnetic correction. Only used when crn_nc_fname is set and value > 0. |
atmosphere |
string | ERA40 |
ERA40 (Balco/Lifton climatology + latitude-dependent lapse, the default), NCEP (the atmosphere CAIRN/OCTOPUS use; needs the NCEP grids), or standard (SLHL barometric formula). ERA40/NCEP fall back to standard if their grids are absent; an unknown name is fatal. Match this to lsdtt-cosmo-tool when using the two together — the atmosphere sets the pressure at every pixel, so forward-modelling under one and inverting under another silently biases the recovered erosion rate. |
Shielding rasters
Each shielding type accepts either a raster (load by prefix) or a uniform scalar. If the prefix is NULL the scalar is used.
Topographic shielding (dimensionless, 0–1; 1 = fully exposed)
| Parameter | Type | Default | Description |
|---|---|---|---|
topographic_shielding_raster_prefix |
string | NULL |
Prefix of a topographic shielding raster. Path: read_path + prefix + .tif. |
topo_shield_value |
float | 1.0 |
Uniform topographic shielding value (0–1) used when prefix is NULL. |
Snow shielding (effective depth, g cm⁻²)
| Parameter | Type | Default | Description |
|---|---|---|---|
snow_shielding_raster_prefix |
string | NULL |
Prefix of a snow shielding raster (effective depth, g/cm²). |
snow_shield_eff_thickness |
float | 0.0 |
Uniform snow shielding effective depth (g/cm²). 0 = no snow. |
Self / sample shielding (effective depth, g cm⁻²)
| Parameter | Type | Default | Description |
|---|---|---|---|
self_shielding_raster_prefix |
string | NULL |
Prefix of a self/sample shielding raster (effective depth, g/cm²). |
self_shield_eff_thickness |
float | 0.0 |
Uniform self shielding effective depth (g/cm²). 0 = surface sample. |
Erosion rate
Used for steady-state and accumulation modes.
| Parameter | Type | Default | Description |
|---|---|---|---|
background_erosion_rate_raster_prefix |
string | NULL |
Prefix of a raster giving effective erosion rate (g/cm²/yr) at each pixel. |
effective_erosion_rate |
float | 0.001 |
Uniform effective erosion rate (g/cm²/yr). Used when prefix is NULL. ≈ 0.001 g/cm²/yr ≈ 3.8 mm/kyr for ρ = 2650 kg/m³. |
Step-change parameters
Used only when calculate_step_change_crn_concentration_raster: true.
| Parameter | Type | Default | Description |
|---|---|---|---|
step_change_eff_erate_old_g_cm2_yr |
float | 0.001 |
Pre-change effective erosion rate (g/cm²/yr). |
step_change_eff_erate_new_g_cm2_yr |
float | 0.01 |
Post-change effective erosion rate (g/cm²/yr). |
time_since_change_raster_prefix |
string | NULL |
Prefix of a raster giving time since step change (yr) at each pixel. Pixels with value 0 receive steady-state concentration at the new erosion rate. |
time_since_change_yr |
float | 10000 |
Uniform time since step change (yr) used when prefix is NULL. |
Generating the step change from a fluvial solution
The time-since-change field above is usually the hard input to supply, because
it is not a free parameter: it is the arrival time of the incision wave. Set
make_step_change_rasters: true and the tool derives it, along with the erosion
rate and a matching topography, from the analytical transient response of
detachment-limited stream power to a step in uplift (Royden & Perron 2013;
Mitchell & Yanites 2019). The generated fields are handed to the step-change
concentration kernel in memory — there is no round trip through disk.
| Parameter | Type | Default | Description |
|---|---|---|---|
make_step_change_rasters |
bool | false |
Generate the erosion-rate, time-since-change and topography fields instead of loading them. |
step_change_uplift_old_m_yr |
float | 0.0001 |
Uplift (= steady erosion) rate before the step, m/yr. |
step_change_uplift_new_m_yr |
float | 0.001 |
Uplift rate after the step, m/yr. |
step_change_target_relief_metres |
float | 1000 |
Relief the old steady-state landscape should have. K is back-calculated from it. |
step_change_age_yr |
float | 100000 |
Time since the step reached the basin outlet. Every pixel gets its own, smaller, elapsed time. |
step_change_n |
float | 1 |
Slope exponent n in E = K A^m S^n. |
step_change_m_over_n |
float | 0.45 |
Concavity for the chi integral. |
step_change_A_0 |
float | 1 |
Reference drainage area for chi. Any positive value is handled exactly. |
step_change_channel_pixels |
int | 500 |
Contributing-pixel count above which a pixel is a channel; below it a critical hillslope gradient is imposed. |
step_change_Sc_old |
float | 0.25 |
Critical hillslope gradient in the unadjusted part of the landscape. |
step_change_Sc_new |
float | 0.4 |
Critical hillslope gradient in the adjusted part. |
step_change_basin_outlet_fname |
string | NULL |
CSV of latitude,longitude giving the basin outlet. The first point is used and snapped to the channel network. NULL uses the largest basin in the DEM. |
rock_density_kg_m3 |
float | 2650 |
Converts the uplift rates (m/yr) to effective erosion rates (g/cm²/yr). |
step_change_production_from_generated_dem |
bool | true |
Compute production from the generated topography rather than the input DEM. |
step_change_route_on_generated_dem |
bool | true |
Build D8 flow routing on the generated topography for accumulation. Set false to route on the original DEM instead. |
write_step_change_rasters |
bool | false |
Write _SC_DEM, _SC_ERATE, _SC_STEPTIME, _SC_TAG and _SC_CHI. |
Read the derived numbers. K is back-calculated from
step_change_target_relief_metres, so the entire configuration — knickpoint
position, wave celerity, the whole time-since-change field — follows from a
relief you chose rather than a rate constant you typed. The run prints K, both
steepness indices, the knickpoint position and elevation, and the adjusted area.
Report them.
The uplift rates override the effective-rate parameters.
step_change_eff_erate_old_g_cm2_yr and ..._new_... are ignored in this mode;
the rates come from step_change_uplift_*_m_yr × rock_density_kg_m3 × 0.1. The
run says so explicitly. Likewise time_since_change_raster_prefix is ignored,
with a note.
What the wave does depends on n. With n ≥ 1 and rising uplift the
transition steepens into a migrating knickpoint (a shock) separating an adjusted
reach below from an unadjusted reach above. With n < 1 it stretches into a
rarefaction fan, inside which the erosion rate varies continuously between the
old and new values — those pixels are tagged separately. A falling step swaps
which case applies, and that is handled: the choice is made on the wave
celerities, not on n alone.
Use the tag raster, never chi, to ask whether a pixel has been rejuvenated.
_SC_TAG is 1 = unadjusted channel, 2 = unadjusted hillslope, 3 = adjusted
channel, 4 = adjusted hillslope, 5 and 6 = the same two inside a fan. Chi
increases upslope, so a hillslope always has a larger chi than the channel it
drains to; a hillslope draining to an adjusted channel therefore carries the new
erosion rate while sitting above the knickpoint in chi. That is correct — a
hillslope belongs to its channel — but it means a chi comparison misclassifies
hillslopes.
Scope and side effects. The generated fields cover one basin, so the concentration output is restricted to it. The generated topography is offset so its outlet sits at the input DEM's outlet elevation, keeping base level real. The generated per-pixel erosion rate is used for steady-state concentrations and as the flux weight in downstream accumulation.
Flow routing: generated or original DEM. Set step_change_route_on_generated_dem
to control which DEM is used for D8 flow accumulation. The default (true) rebuilds
routing on the generated topography, which matches the scenario's rates and times.
However, the generator snaps hillslopes to different critical gradients on each side
of the knickpoint, creating an elevation cliff along the drainage divide that can
cause cross-divide flow artefacts. Setting false routes on the original DEM,
avoiding the cliff but routing against a topography whose rates no longer match the
model. Production, elevation and the step-change fields still come from the generated
surface either way. Accumulation needs routing; set step_change_route_on_generated_dem: false
if cross-divide flow is biasing your basin averages.
Example: generate and consume in one run
read_path: ./
read_fname: my_dem.tif
write_path: ./
write_fname: sc
make_step_change_rasters: true
step_change_uplift_old_m_yr: 0.0001
step_change_uplift_new_m_yr: 0.0005
step_change_target_relief_metres: 1200
step_change_age_yr: 500000
step_change_n: 1.0
step_change_channel_pixels: 500
write_step_change_rasters: true
calculate_multi_isotope_step_change: true
Landslide coupling
Superimposes landslide scars on a step-change concentration field, using the
time-of-failure and excavation-depth rasters written by lsdtt-cosmo-landslides.
| Parameter | Type | Default | Description |
|---|---|---|---|
landslide_coupling |
string | none |
none, scar, flush or both. |
landslide_time_raster_prefix |
string | NULL |
Prefix of <stem>_LS_TFAIL from lsdtt-cosmo-landslides. |
landslide_excavation_raster_prefix |
string | NULL |
Prefix of <stem>_LS_EXCAVATION. |
landslide_report_time_yr |
float | 0 |
Present time on the same clock as the failure-time raster. |
flush_time_threshold_yr |
float | 100 |
How long a scar keeps delivering debris (used by both). |
scar_density_kg_m3 |
float | 1500 |
Density of material already represented by an imported excavation raster; the explicit soil-like default is independent of any area-volume preset. The generating landslide CLI uses a negative sentinel to inherit its active preset instead. |
write_delivery_mass_raster |
bool | false |
Write <stem>_LS_DELIVERY.tif, the downstream mixing weight. |
The scar scenario. The landslide material has long since left the system.
What remains is a scar eroding at the catchment rate from a column whose
inheritance was stripped when it failed — so the surface there is depleted
relative to unfailed ground, and recovers as it re-accumulates. Each failed
pixel gets a four-row erosion history: the old background rate, the change, an
instantaneous removal of the excavated depth at the failure time, then the new
rate to the present.
The flush scenario. The debris is still in the channel, so the sample
contains the whole excavated slab rather than the surface of the scar: the
depth average of the pre-failure profile over [0, d_exc]. both applies the
flush treatment inside flush_time_threshold_yr and the scar treatment outside
it, which is the physically complete case — one kernel with one number, so
scar is the zero-window limit and flush the unbounded one.
The two do not dilute by the same amount, and the ordering is the opposite of the intuitive one. At short ages
background > flush > scar
because the flushed slab contains the pre-failure column's concentrated top,
while the scar is what is left behind — the material from the very base of the
slab, exposed and barely re-accumulated. In the limit of a fresh failure the
inequality flush > scar is exact: the mean of a decreasing profile over
[0, d] must exceed its value at d. As a scar re-accumulates it eventually
overtakes the flush value.
The flush timescale is an age, following Niemi. Niemi et al. (2005) have no sediment storage at all — landslide material passes through within one 100 yr timestep and mixes homogeneously — which is where the default comes from. Set it to the event recurrence interval to reproduce that convention. How long landslide sediment actually persists in a channel network is a separate research question and is not modelled here.
The delivery-mass raster
write_delivery_mass_raster writes the weight a downstream mixing calculation
should use, in kg m⁻² yr⁻¹:
flushing pixel : rho_scar * d_exc / flush_window
everything else: the background erosion rate, converted from g/cm2/yr
Both terms are the same quantity in the same units, which is the point of not reusing the erosion-rate raster as a weight. The erosion-rate raster is left untouched, so the true erosion rate stays available to compare an apparent rate against — the legacy implementation overwrote it in place and destroyed exactly that.
Unfailed ground is bitwise unchanged. The ordinary step-change kernel computes the whole raster and only failed pixels are overwritten, so switching the coupling on cannot perturb ground that never failed. That is asserted by a regression test, because a coupling that shifted the whole raster would move every basin average for reasons nothing to do with landslides.
Failures older than the incision wave are discarded. A pixel whose landslide pre-dates the arrival of the erosion-rate change at that pixel cannot have been caused by it; those keep their plain step-change value and are counted separately in the run report.
"Never failed" is not nodata. The failure-time raster holds an absolute time with nodata on ground that never failed; it is converted here to elapsed years with "never" carried as a distinct state. Encoding it as nodata would drop unfailed ground out of the raster, and hence out of any basin average taken from it — replacing a small correction with a large error.
Two densities, and why they are not the same number
| Parameter | Meaning | Typical |
|---|---|---|
rock_density_kg_m3 |
the eroding bedrock column | 2650 |
scar_density_kg_m3 |
the material a landslide excavated | ~1500 soil, 2650 rock |
The excavation depth from lsdtt-cosmo-landslides is a true geometric thickness,
because Larsen's V = αA^γ is fitted to measured scar volumes. For a shallow
landslide the material that failed is soil, at roughly 1500 kg/m³. Carrying it at
the bedrock density overstates the mass depth by a factor of about 1.77 — and
since production falls exponentially with mass depth, that is more than a factor
of two in the concentration of the material delivered.
lsdtt-cosmo-landslides takes its scar density from the area_volume_preset in play
(larsen_soil_scar → 1500, larsen_bedrock_scar → 2650) and warns if the
preset selected is one fitted across both materials, such as the default
larsen_global, which has no defensible density. Set the two consistently
between the two tools.
Example
calculate_step_change_crn_concentration_raster: true
step_change_eff_erate_old_g_cm2_yr: 0.001
step_change_eff_erate_new_g_cm2_yr: 0.005
time_since_change_yr: 20000
landslide_coupling: both
landslide_time_raster_prefix: ls_LS_TFAIL
landslide_excavation_raster_prefix: ls_LS_EXCAVATION
landslide_report_time_yr: 5000
flush_time_threshold_yr: 100
scar_density_kg_m3: 1500
write_delivery_mass_raster: true
Available with both calculate_step_change_crn_concentration_raster and
calculate_multi_isotope_step_change.
Quartz fertility and ice
A basin-averaged sample is a mixture of quartz, not of rock. Two pixels eroding at the same rate contribute unequally if their rock carries different quartz, and a quartz-free unit — limestone, basalt, many volcanics and mafics — contributes sediment but no sample at all. In mixed-lithology terrain, routing concentrations without accounting for that is wrong, not merely imprecise.
| Parameter | Type | Default | Description |
|---|---|---|---|
quartz_fertility |
float | 1 |
Uniform quartz mass fraction (0–1). 1 is a no-op. |
quartz_fertility_raster_prefix |
string | NULL |
Per-pixel fertility, typically a reclassified lithology map. |
quartz_fertility_regolith |
float | -1 |
Two-layer model: regolith fraction. Negative = off. |
quartz_fertility_bedrock |
float | -1 |
Two-layer model: fresh-bedrock fraction. |
quartz_fertility_regolith_depth_metres |
float | 0 |
Regolith thickness separating the layers. |
ice_mask_raster_prefix |
string | NULL |
Present-day ice cover (non-zero = ice). |
ice_thickness_metres |
float | 50 |
Uniform ice thickness. |
ice_density_kg_m3 |
float | 917 |
Density of ice; lower for firn. |
erate_under_ice_g_cm2_yr |
float | 0 |
Erosion rate beneath the ice. |
quartz_fertility_under_ice |
float | 0 |
Quartz fraction beneath the ice. |
write_quartz_weight_raster |
bool | false |
Write <stem>_QUARTZ_WEIGHT.tif. |
Everything here is opt-in and a no-op by default. With fertility 1 and no
ice mask, the accumulation keeps mixing on the erosion-rate raster exactly as
before. Note also that a uniform fertility changes nothing either: a constant
weight cancels in Σ(Cw)/Σ(w). Fertility only bites where it varies.
A quartz-free unit is excluded however fast it erodes. That is the case that makes this a correctness issue: a basalt unit eroding ten times faster than its granite neighbour dominates the sediment flux and contributes nothing to the sample.
An all-quartz-free domain is reported, not returned as nodata. "This catchment yields no quartz" is a meaningful answer, and a common one in volcanic terrain. The run says so and stops rather than emitting an empty raster.
A mis-scaled fertility raster is caught. Values outside [0,1] — a lithology map supplied as percentages, say — are clamped and the number clamped is reported.
The two-layer model
Chemical weathering removes soluble minerals and leaves quartz behind, so
regolith is enriched relative to the fresh bedrock a deep landslide scar
exposes. Setting the three quartz_fertility_regolith* parameters makes a
landslide deliver the depth average of the two layers over its excavated
slab:
f(d) = [ f_reg * min(d, D) + f_bed * max(0, d - D) ] / d
If that picture is right, landslide debris is under-represented in the quartz separate relative to its mass, and the dilution a landslide causes is weaker than a mass-weighted calculation predicts. This is the switch that tests it.
Ice
Ice changes exactly three things, and lsdtt3 already has a field for each: the ice column shields cosmic rays (snow shielding, as an effective depth), the erosion rate differs or is zero, and little or no quartz reaches the sample. So the ice mask is a helper that writes three existing rasters, not a model of its own. Ten metres of ice is already 917 g cm⁻², at which 0.3 % of spallation survives.
erate_under_ice_g_cm2_yr: 0 is the cold-based idealisation and is numerically
safe: the steady-state kernel forms its denominator as (ε + Γλ) and never
divides by ε, so ε = 0 returns the saturation concentration P/λ.
lsdtt-cosmo-landslides accepts the same mask as ice_mask_fname and places no
landslide on ice; the pixels excluded are reported, since they change the active
area and hence the landslide count for a prescribed erosion rate.
Limitation, stated rather than hidden. This models present-day ice only. Concentrations depend on the shielding history, and real glaciated landscapes advanced and retreated repeatedly. lsdtt3 can express a per-pixel erosion history but not a per-pixel time-varying shielding, so a glacial–interglacial cycle cannot be represented at all, and concentrations under formerly glaciated ground will be overestimated.
Accumulated concentration
Used only when calculate_accumulated_crn_concentration: true.
The concentration raster to accumulate is selected in priority order:
1. concentration_raster_prefix (if set)
2. Step-change concentration computed in the same run
3. Steady-state concentration computed in the same run
When a multi-isotope concentration is present in memory and
concentration_raster_prefix is NULL, accumulation uses the in-memory
Be10/Al26/C14 rasters and accumulates all three in one shared pass over the
domain (shared routing, shared weight raster).
| Parameter | Type | Default | Description |
|---|---|---|---|
concentration_raster_prefix |
string | NULL |
Prefix of a pre-computed concentration raster to use for accumulation. |
fill_before_routing |
bool | true |
Fill DEM pits before building D8 flow routing for accumulation. |
min_slope_for_fill |
float | 0.0001 |
Minimum slope (m/m) imposed during pit filling. |
boundary_conditions |
string | oooo |
D8 boundary conditions (N, E, S, W). o = open, b = forced outlet. |
Sampling the accumulated raster at points
Closes a forward → inverse round trip: the CSV written here is read directly by
lsdtt-cosmo-tool, so an imposed erosion rate can be pushed through the forward
model and recovered by the inversion.
| Parameter | Type | Default | Description |
|---|---|---|---|
sample_points_fname |
string | NULL |
CSV of latitude,longitude at which to sample the accumulated raster. Needs calculate_accumulated_crn_concentration: true. |
sample_column_name |
string | sample_name |
Optional sample-identifier column copied through from the points CSV. Omitted from the output if absent. |
threshold_contributing_pixels |
int | 1000 |
Minimum contributing pixels for a node to count as a channel when snapping. Matches lsdtt-cosmo-tool. |
sample_snap_max_search_radius_pixels |
int | 8 |
Maximum search radius when snapping a point to the channel network. Matches lsdtt-cosmo-tool. |
Output is <write_fname>_sampled_crn_conc.csv.
- Single-isotope accumulation writes
latitude,longitude,<nuclide>_CONC,snapped_contributing_pixels. - Multi-isotope accumulation writes
latitude,longitude,Be10_CONC,Al26_CONC,C14_CONC,R2610_ACC,R1410_ACC,snapped_contributing_pixels.
For apparent-erosion checks in lsdtt-cosmo-tool, multi-isotope sampling also
writes three direct bridge CSVs:
<write_fname>_sampled_crn_conc_Be10.csv<write_fname>_sampled_crn_conc_Al26.csv<write_fname>_sampled_crn_conc_C14.csv
Each contains one concentration column (Be10_CONC, Al26_CONC, C14_CONC
respectively) plus coordinates/snapping, so the tool can invert each isotope
without editing columns or re-running the forward model.
Snapping mirrors lsdtt-cosmo-tool so both tools resolve the same node.
threshold_contributing_pixels is also used to snap
step_change_basin_outlet_fname when generating a step change.
Output write toggles
| Parameter | Type | Default | Description |
|---|---|---|---|
write_crn_concentration_raster |
bool | true |
Write the steady-state concentration raster. Output: <write_fname>_<nuclide>_crn_conc.tif. |
write_step_change_concentration_raster |
bool | true |
Write the step-change concentration raster. Output: <write_fname>_<nuclide>_step_crn_conc.tif. |
write_accumulated_crn_raster |
bool | true |
Write accumulated concentration raster(s). Single-isotope mode writes <write_fname>_<nuclide>_crn_acc.tif; multi-isotope mode writes all three: _Be10_crn_acc.tif, _Al26_crn_acc.tif, _C14_crn_acc.tif. |
write_production_raster |
bool | false |
Write the Stone 2000 production raster. Output: <write_fname>_crn_prod.tif. |
lsdviztools3 interface notes
lsdtt-cosmo-prediction is the forward side used by lsdtt3 comparison
workflows (including point sweeps) that are then plotted by lsdviztools3.
- For point/sweep workflows, sampled concentrations are emitted as
<write_fname>_sampled_crn_conc.csvand paired with inverse runs fromlsdtt-cosmo-tool. - The Phase-M2 sweep script
tests/scripts/run_cosmo_single_point_scaling_scan.pywritessingle_point_scan_comparison.csv. lsdviztools3command for sweep comparison figures:
lsdviz3-cosmo-compare \
--scan-csv tests/expected/cosmo/generated/single_point_scan_comparison.csv \
--outdir demo_output/cosmo
Optional --sample-csv can be used to include a sample-level residual figure in
the same run.
Example parameter files
Steady-state concentration map
read_path: /data/dems/
read_fname: catchment.tif
nuclide: Be10
muon_scheme: BraucherBorchers
calculate_crn_concentration_raster: true
effective_erosion_rate: 0.003 # ~ 11 mm/kyr for rock density 2650 kg/m3
topo_shield_value: 1.0
snow_shield_eff_thickness: 0.0
self_shield_eff_thickness: 0.0
write_crn_concentration_raster: true
Step-change transient concentration
read_path: /data/dems/
read_fname: catchment.tif
nuclide: Be10
calculate_step_change_crn_concentration_raster: true
step_change_eff_erate_old_g_cm2_yr: 0.001
step_change_eff_erate_new_g_cm2_yr: 0.01
time_since_change_yr: 5000
Downstream accumulated concentration
read_path: /data/dems/
read_fname: catchment.tif
nuclide: Be10
# Compute steady-state first, then accumulate
calculate_crn_concentration_raster: true
calculate_accumulated_crn_concentration: true
effective_erosion_rate: 0.002
fill_before_routing: true
boundary_conditions: oooo
References
Stone, J.O. (2000). Air pressure and cosmogenic isotope production. Journal of Geophysical Research, 105(B10), 23753–23759.
Braucher, R., et al. (2011). Production rates of cosmogenic radionuclides at the atmosphere–land surface interface. Earth and Planetary Science Letters, 304(3–4), 417–428.
Multi-isotope step change
Isotope ratios carry the transient signal. The half-lives differ by orders of magnitude — C-14 5.7 kyr, Al-26 0.7 Myr, Be-10 1.39 Myr — so after a change in erosion rate the three re-equilibrate at different speeds, and the pair dates the perturbation in a way one nuclide alone cannot.
A ratio is only meaningful if both members saw an identical scenario, so
calculate_multi_isotope_step_change computes all three from one particle
evolution per pixel — same shielding, same rates, same elapsed time — rather
than from three separate runs. Each nuclide is bitwise identical to what
calculate_step_change_crn_concentration_raster returns for the same inputs, and
the whole thing costs little more than a single-nuclide run.
Inputs are the same as the single-nuclide step change: time_since_change_yr (or
a raster), step_change_eff_erate_old_g_cm2_yr, step_change_eff_erate_new_g_cm2_yr,
the production raster and topographic shielding. The nuclide parameter is
ignored — all three are always produced.
Outputs: _Be10_step_crn_conc.tif, _Al26_step_crn_conc.tif,
_C14_step_crn_conc.tif, plus _R2610_step.tif and _R1410_step.tif. Pixels
with zero Be-10 are written as nodata in the ratio rasters and the count is
reported.
If calculate_accumulated_crn_concentration: true is also set, and
concentration_raster_prefix is NULL, the same run also writes accumulated
multi-isotope rasters (_Be10_crn_acc.tif, _Al26_crn_acc.tif,
_C14_crn_acc.tif) and accumulated ratios (_R2610_acc.tif, _R1410_acc.tif),
and sampled points include R2610_ACC/R1410_ACC.
Note that after an erosion-rate increase all concentrations fall, C-14 reaches its new value first, and the C14/Be10 ratio is therefore suppressed and approaches its endpoint from below — it does not overshoot.
Multi-isotope transient (arbitrary history)
calculate_multi_isotope_transient generalises the step-change mode: instead of
one change in erosion rate, every pixel follows the history in
transient_history_fname. A two-row history reproduces the step-change mode
bitwise, so this is a strict generalisation rather than a parallel
implementation — the per-pixel walk is the same code the column tool uses.
History file format — three columns, time,rate,removal:
time,rate,removal
3000,0.00113,0 <- most recent phase: 0.00113 m/yr for the last 3 kyr
30000,0.0000377,0 <- before that, 0.0000377 m/yr back to 30 kyr
-9999,0.0000755,0 <- long-term background rate (required last row)
Rows run from the most recent (index 0) to the oldest, and the final row must
carry time = -9999 with the long-term background rate that initialises the
column. A row with rate = 0 and a non-zero removal is an instantaneous
stripping event in metres, and must repeat the time of the row before it.
An unordered history is rejected, not silently accepted: reversed rows would produce negative timesteps and a confidently wrong answer.
Outputs are the same five rasters as the step-change mode. Cost is
O(pixels × history rows), so this is substantially slower — inherent, since an
arbitrary history has no closed form.
Parameters
This section is generated from the executable's -h json registry. Do not edit it manually.
Status: experimental. This CLI is not yet fully tested.
File I/O
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
read_path |
string |
./ |
io |
- | Directory from which input files are read. | Defaults to the directory holding the parameter file. |
read_fname |
string |
- | io |
- | Input filename, with or without extension (e.g. my_dem.tif). | Read from read_path. lsdtt3 uses GDAL, so any GDAL-readable raster format works. If empty, defaults to the parameter filename stem. |
write_path |
string |
- | io |
- | Directory to which output files are written. | Defaults to read_path when not set. |
write_fname |
string |
- | io |
- | Output filename prefix (no path, no extension). | All outputs are named <write_fname>_<descriptor>.<ext>. Defaults to the stem of read_fname when not set. |
write_output_format |
string |
cog |
io |
- | Output raster format: cog, gtiff, or same_as_input. | - |
Nuclide and muon scheme
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
nuclide |
string |
Be10 |
param |
- | Nuclide to predict: Be10, Al26, or C14. | - |
muon_scheme |
string |
BraucherBorchers |
param |
- | Muon production scheme. | Braucher, BraucherBorchers, Granger, Schaller, newCRONUS, cronusEmulatorSt, cronusEmulatorLSDn. The cronusEmulator schemes fit lsdtt3's three muon pathways to the CRONUS v3 tabulated model-1A muon inventory and are pressure-dependent; a pressure raster is computed automatically. |
scaling_scheme |
string |
stone |
param |
- | Production-rate scaling scheme. | stone = Stone (2000)/Lal, the lsdtt3 default and the CAIRN/OCTOPUS scheme. This raster prediction workflow is site-based by default; the landslide generator instead defaults to uniform to preserve its legacy scalar path. lsdn = Lifton, Sato & Dunai (2014) nuclide-specific scaling, interpolated from the LSDn2015 scaling grids; requires the LSDn grids in crn_parameters.nc and supports Be10, Al26 and C14 only. Both schemes are evaluated per pixel, including when sample_age_yr > 0. muon_scheme is unaffected: LSDn is a spallation scaling and the muon pathways receive it through the same Vermeesch redistribution as Stone. |
Prediction modes
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
calculate_crn_concentration_raster |
bool |
false |
switch |
- | Compute steady-state CRN concentration at every pixel. | Requires: erosion raster (or effective_erosion_rate), production raster, shielding. |
calculate_step_change_crn_concentration_raster |
bool |
false |
switch |
- | Compute transient CRN concentration after a step change in erosion rate. | Requires: time_since_change raster, step_change_eff_erate_old/new, production raster, topo shielding. |
calculate_multi_isotope_step_change |
bool |
false |
switch |
- | Carry Be-10, Al-26 and C-14 through the SAME step change at every pixel, and write the two isotope-ratio rasters. | The isotope RATIOS are what carry a transient signal: the half-lives differ by orders of magnitude (C-14 5.7 kyr, Al-26 0.7 Myr, Be-10 1.39 Myr), so a pair dates the perturbation in a way one nuclide alone cannot. A ratio is only meaningful if both members saw an identical scenario, so all three are computed from ONE particle evolution per pixel -- same shielding, same rates, same elapsed time -- rather than from three separate runs. Each nuclide is bitwise identical to what calculate_step_change_crn_concentration_raster returns for the same inputs, and costs little more than a single-nuclide run. Uses the same inputs as that mode: time_since_change raster, step_change_eff_erate_old/new, production raster, topographic shielding. The nuclide parameter is ignored here -- all three are always produced. |
calculate_multi_isotope_transient |
bool |
false |
switch |
- | Carry Be-10, Al-26 and C-14 through an ARBITRARY erosion history at every pixel, and write the two isotope-ratio rasters. | The general case of calculate_multi_isotope_step_change: instead of one step, the pixels follow a user-supplied history from transient_history_fname. A two-row history reproduces the step-change mode exactly (bitwise), so this is a strict generalisation. COST: every pixel walks the whole history, so this is O(pixels x history rows) and is much slower than the step-change mode -- inherent, since an arbitrary history has no closed form. The nuclide parameter is ignored; all three are always produced. |
transient_rock_density_kg_m3 |
float |
2650 |
param |
calculate_multi_isotope_transient |
Rock density (kg/m3) used to convert the erosion history's metre-based rates and removals into effective depths. | Only used by calculate_multi_isotope_transient. The history file gives rates in m/yr and removals in m; the physics works in g/cm2, and this is the conversion. |
transient_history_fname |
string |
NULL |
param |
calculate_multi_isotope_transient |
CSV erosion history for calculate_multi_isotope_transient. | NULL is deliberate because transient prediction is an optional mode and the file becomes required only when that mode is enabled. Three columns: time,rate,removal -- time in yr BP, rate in m/yr, removal in m. Rows run from the MOST RECENT (index 0) to the oldest, and the LAST row must have time = -9999 carrying the long-term background rate. A row with rate = 0 and a non-zero removal is an instantaneous stripping event and must share the time of the row before it. An unordered record is rejected: it would produce negative timesteps and a silently wrong answer. |
calculate_accumulated_crn_concentration |
bool |
false |
switch |
- | Accumulate CRN concentration downstream using D8 flow routing. | Requires a concentration raster (computed in the same run or loaded separately). |
Production raster
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
load_production_raster |
bool |
false |
param |
write_production_raster |
Load the Stone 2000 production raster from disk instead of computing it. | File: read_path + production_raster_prefix + .tif |
production_raster_prefix |
string |
NULL |
param |
write_production_raster |
Filename prefix (no extension) for loading a pre-computed production raster. | Used when load_production_raster is true. |
write_production_raster |
bool |
false |
switch |
- | Write the production raster to a GeoTIFF. | Output: write_path + write_fname + _crn_prod.tif |
crn_nc_fname |
string |
- | param |
write_production_raster |
Path to crn_parameters.nc for ERA40 atmospheric scaling and palaeomagnetic correction. | Leave empty to use the crn_parameters.nc bundled with lsdtt3 (found automatically); if absent, standard-atmosphere Stone 2000 (no palaeomagnetic correction). |
sample_age_yr |
float |
0 |
param |
write_production_raster |
Sample exposure age (yr BP) driving the time-integrated production correction; what it selects depends on scaling_scheme. | Only used when crn_nc_fname is set and > 0. Under scaling_scheme=stone this is the Muscheler VDM palaeomagnetic correction to Stone 2000 scaling. Under scaling_scheme=lsdn it drives the duration-weighted average of LSDn production over the Pavon-Carrasco geomagnetic record (Holocene moving paleopole, then a GAD dipole record to ~20 Ma), making it longitude-dependent as well as latitude-dependent. NOTE: "now" is assumed to be 2010 (the packed record's reference year); lsdtt3 has no sample-collection-year input yet, so no (collection year - 2010) shift is applied - negligible (<=~16 yr against 1e2-1e7 yr records) but an assumption, not an exact treatment. |
atmosphere |
string |
ERA40 |
param |
write_production_raster |
Atmosphere model: ERA40 (default), NCEP, or standard. | ERA40 = Balco/Lifton ERA40 climatology + latitude-dependent lapse (the lsdtt3 default). NCEP = Balco NCEPatm_2, the atmosphere CAIRN/OCTOPUS use; requires the NCEP grids in crn_parameters.nc. standard = SLHL barometric formula, no climatology. ERA40/NCEP fall back to standard if the required grids are absent. MATCH THIS TO lsdtt-cosmo-tool when using the two together: the atmosphere sets the pressure at every pixel, so forward-modelling under one and inverting under another silently biases the recovered erosion rate. |
Topographic shielding
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
topographic_shielding_raster_prefix |
string |
NULL |
param |
- | Prefix of topographic shielding raster (dimensionless, 0-1). | If NULL, uniform value topo_shield_value is used. |
topo_shield_value |
float |
1 |
param |
- | Uniform topographic shielding factor (dimensionless, 0-1; 1 = unshielded). | Used when topographic_shielding_raster_prefix is NULL. |
Snow shielding
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
snow_shielding_raster_prefix |
string |
NULL |
param |
- | Prefix of snow shielding raster (effective depth, g/cm2). | If NULL, uniform value snow_shield_eff_thickness is used. |
snow_shield_eff_thickness |
float |
0 |
param |
- | Uniform snow shielding as effective depth (g/cm2; 0 = no snow). | Used when snow_shielding_raster_prefix is NULL. |
Self shielding
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
self_shielding_raster_prefix |
string |
NULL |
param |
- | Prefix of self/sample shielding raster (effective depth, g/cm2). | If NULL, uniform value self_shield_eff_thickness is used. |
self_shield_eff_thickness |
float |
0 |
param |
- | Uniform self shielding as effective depth (g/cm2; 0 = surface sample). | Used when self_shielding_raster_prefix is NULL. |
Background erosion rate
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
background_erosion_rate_raster_prefix |
string |
NULL |
param |
- | Prefix of raster giving effective erosion rate (g/cm2/yr) at each pixel. | If NULL, uniform value effective_erosion_rate is used. |
effective_erosion_rate |
float |
0.001 |
param |
- | Uniform effective erosion rate (g/cm2/yr) across the raster. | Used when background_erosion_rate_raster_prefix is NULL. ~0.001 ~= 3.8 mm/kyr for rho=2650. |
Step change parameters
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
step_change_eff_erate_old_g_cm2_yr |
float |
0.001 |
param |
- | Old (pre-change) effective erosion rate for step change calculation (g/cm2/yr). | - |
step_change_eff_erate_new_g_cm2_yr |
float |
0.01 |
param |
- | New (post-change) effective erosion rate for step change calculation (g/cm2/yr). | - |
time_since_change_raster_prefix |
string |
NULL |
param |
- | Prefix of raster giving years since the step change at each pixel. | Pixels with value 0 receive SS concentration at the new erosion rate. |
time_since_change_yr |
float |
10000 |
param |
- | Uniform time since step change (yr) used when time_since_change_raster_prefix is NULL. | - |
Generate the step change
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
make_step_change_rasters |
bool |
false |
switch |
- | Generate the erosion-rate, time-since-change and topography rasters from an analytical step change in uplift, instead of loading them. | The time-since-change field is not a free input: it is the arrival time of the incision wave, from the detachment-limited stream-power solution in chi (Royden & Perron 2013; Mitchell & Yanites 2019). The generated rasters feed the step-change concentration modes IN MEMORY, so no round trip through disk is needed. K is back-calculated from step_change_target_relief_metres and is echoed at run time -- read it. The generated fields cover ONE basin, so the concentration output is restricted to that basin. |
step_change_uplift_old_m_yr |
float |
0.0001 |
param |
make_step_change_rasters |
Uplift (= steady erosion) rate before the step, in METRES per year. | Metres per year, not mm/yr. Converted to an effective erosion rate with rock_density_kg_m3, and that conversion OVERRIDES step_change_eff_erate_old_g_cm2_yr when make_step_change_rasters is on. |
step_change_uplift_new_m_yr |
float |
0.001 |
param |
make_step_change_rasters |
Uplift rate after the step, in METRES per year. | Overrides step_change_eff_erate_new_g_cm2_yr as above. |
step_change_target_relief_metres |
float |
1000 |
param |
make_step_change_rasters |
Relief the OLD steady-state landscape should have (m). K is back-calculated from it. | This is how a user without a calibrated K gets a landscape of the right size. Everything else -- knickpoint position, wave celerity, the whole time-since-change field -- follows from the K it implies, so the derived K is printed and should be reported. |
step_change_age_yr |
float |
100000 |
param |
make_step_change_rasters |
Time since the step change reached the basin outlet (yr). | Every pixel gets its own, smaller, time since the wave reached IT. |
step_change_n |
float |
1 |
param |
make_step_change_rasters |
Slope exponent n in E = K A^m S^n. | n >= 1 with rising uplift gives a migrating knickpoint (a shock); n < 1 gives a rarefaction fan in which the erosion rate varies continuously between the old and new values. A FALLING step swaps the two, which is handled. n = 1 is the classical case. |
step_change_m_over_n |
float |
0.45 |
param |
make_step_change_rasters |
Concavity m/n used for the chi integral. | - |
step_change_A_0 |
float |
1 |
param |
make_step_change_rasters |
Reference drainage area for the chi integral (m2). | Any positive value is handled exactly; the A_0 dependence is carried through the steepness and the wave celerity rather than assumed away. |
step_change_channel_pixels |
int |
500 |
param |
make_step_change_rasters |
Contributing-pixel count above which a pixel is a channel. | Below it the pixel is a hillslope and is given a critical gradient instead of the fluvial solution. Hillslopes inherit the erosion rate and time-since-change of the channel they drain to. |
step_change_Sc_old |
float |
0.25 |
param |
make_step_change_rasters |
Critical hillslope gradient in the unadjusted part of the landscape. | - |
step_change_Sc_new |
float |
0.4 |
param |
make_step_change_rasters |
Critical hillslope gradient in the adjusted part of the landscape. | - |
step_change_basin_outlet_fname |
string |
NULL |
param |
make_step_change_rasters |
CSV of latitude,longitude giving the basin outlet to model. | The first point is used and any others ignored. It is snapped to the channel network using threshold_contributing_pixels and sample_snap_max_search_radius_pixels. If NULL the largest basin in the DEM is used. |
rock_density_kg_m3 |
float |
2650 |
param |
make_step_change_rasters |
Rock density (kg/m3) converting the generated uplift rates (m/yr) to effective erosion rates (g/cm2/yr). | eff = rate_m_yr * rho_kg_m3 * 0.1. Matches lsdtt-cosmo-tool's parameter of the same name. Distinct from transient_rock_density_kg_m3, which belongs to the erosion-history file read by calculate_multi_isotope_transient. |
step_change_production_from_generated_dem |
bool |
true |
switch |
make_step_change_rasters |
Compute the production raster from the GENERATED topography rather than the input DEM. | On by default because the generated surface is the landscape the scenario describes: using the real DEM's elevations with the scenario's erosion rates mixes two landscapes, and production depends on elevation through pressure. The generated surface is offset so its outlet sits at the input DEM's outlet elevation, keeping the base level real. Set false to reproduce the legacy behaviour, which built production from the input DEM. |
step_change_route_on_generated_dem |
bool |
true |
switch |
make_step_change_rasters |
Build the accumulation flow routing on the GENERATED topography. Set false to route on the ORIGINAL input DEM instead. | Only has an effect when step_change_production_from_generated_dem is true, since that is what replaces the working DEM. The default preserves historical behaviour, but false is the more defensible choice and here is why. The generator snaps hillslopes draining below the knickpoint to step_change_Sc_new and the rest to step_change_Sc_old. Each side is built up from its own channel and nothing reconciles them at the drainage divide, so the generated surface carries an elevation CLIFF along the divide -- measured on the Meghalaya 5x case at a median 56 m, with the steepened side higher in 92 % of boundary cells. Rebuilding D8 on that surface makes divide pixels drain ACROSS the divide into the neighbouring unadjusted catchment: 5.4 % of hillslope-new pixels did so there, carrying post-knickpoint material into basins that are supposed to be entirely pre-knickpoint. A real landscape would migrate the divide rather than hold a cliff on it; representing that needs the divides iterated as the canyons steepen, which the one-pass construction cannot do. Routing on the original DEM sidesteps the artefact, at the cost of a flow network that no longer matches the modelled topography. Production, elevation and the step-change fields still come from the generated surface either way. |
write_step_change_rasters |
bool |
false |
switch |
make_step_change_rasters |
Write the generated topography, erosion rate, time-since-change, tag and chi rasters. | Files: <write_fname>_SC_DEM, _SC_ERATE, _SC_STEPTIME, _SC_TAG, _SC_CHI. The tag raster is 1 = unadjusted channel, 2 = unadjusted hillslope, 3 = adjusted channel, 4 = adjusted hillslope, 5/6 = the same inside a rarefaction fan. USE THE TAG RASTER, not chi, to ask whether a pixel has been rejuvenated: a hillslope always has a larger chi than the channel it drains to, so an adjusted hillslope legitimately sits above the knickpoint in chi. |
Landslide coupling
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
landslide_coupling |
string |
none |
param |
- | How landslides modify the step-change concentration: none, scar, flush or both. | scar = the landslide material has long since left the system, and what remains is a scar eroding at the catchment rate from a column whose inheritance was stripped when it failed. flush = the debris is still in the channel, so the sample contains the whole excavated slab. both = flush inside flush_time_threshold_yr and scar outside it, which is the physically complete case. Needs landslide_time_raster_prefix and landslide_excavation_raster_prefix, both written by lsdtt-cosmo-landslides. Requires a step-change mode. |
landslide_time_raster_prefix |
string |
NULL |
param |
- | Prefix of the time-of-failure raster (lsdtt-cosmo-landslides <stem>_LS_TFAIL). | This holds an ABSOLUTE failure time on the model clock, with nodata where nothing failed. It is converted here to elapsed years using landslide_report_time_yr; 'never failed' is carried as a distinct state, NOT as nodata, so unfailed ground stays in the raster and in any basin average taken from it. |
landslide_excavation_raster_prefix |
string |
NULL |
param |
- | Prefix of the excavation-depth raster (lsdtt-cosmo-landslides <stem>_LS_EXCAVATION). | Real metres of material removed, not a rock-equivalent thickness. It is converted to a mass depth with scar_density_kg_m3. |
landslide_report_time_yr |
float |
0 |
param |
- | Present time on the same clock as the time-of-failure raster (yr). | elapsed = landslide_report_time_yr - time_of_failure. A failure at or after this time has not happened yet and is treated as 'never'. |
flush_time_threshold_yr |
float |
100 |
param |
- | How long a scar keeps delivering its debris to the channel (yr). | Used by landslide_coupling: both. This is an AGE, following Niemi et al. (2005), whose model has no sediment storage at all -- landslide material passes through within one 100 yr timestep and mixes homogeneously, which is where this default comes from. Set it to the event recurrence interval to reproduce that convention. How long landslide sediment actually persists in a channel network is a separate research question and is not modelled here. |
write_delivery_mass_raster |
bool |
false |
switch |
- | Write the delivery-mass raster: the weight a downstream mixing calculation should use. | File: <write_fname>_LS_DELIVERY.tif, in kg m^-2 yr^-1. A flushing pixel delivers its whole excavated slab over the flush window; everything else delivers its background erosion. The erosion-rate raster is left untouched, so the TRUE erosion rate stays available to compare an apparent rate against. |
scar_density_kg_m3 |
float |
1500 |
param |
- | Density of the material a landslide EXCAVATED (kg/m3). | A DIFFERENT quantity from rock_density_kg_m3, which is the eroding bedrock column. The excavation depth is a true geometric thickness of whatever failed, and for a shallow landslide that is soil at roughly 1500 kg/m3. Carrying it at 2650 overstates the mass depth by about a factor of 1.77 and changes the delivered concentration by more than a factor of two. Set 2650 for bedrock failures. The default matches lsdtt-cosmo-landslides' larsen_soil_scar preset. |
Quartz fertility and ice
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
quartz_fertility |
float |
1 |
param |
- | Uniform quartz mass fraction (0-1) used as the downstream mixing weight. | A basin-averaged sample is a mixture of QUARTZ, not of rock. Two pixels eroding at the same rate contribute unequally if their rock carries different quartz, and a quartz-free unit (limestone, basalt, many volcanics) contributes sediment but no sample at all. In mixed-lithology terrain, routing concentrations without this is simply wrong. The default of 1 makes the whole feature a no-op: nothing changes unless you opt in. |
quartz_fertility_raster_prefix |
string |
NULL |
param |
- | Prefix of a raster of quartz mass fraction (0-1), typically a reclassified lithology map. | Overrides quartz_fertility where present. Values outside [0,1] are clamped and the number clamped is reported, so a map supplied as percentages rather than fractions surfaces rather than being silently truncated. |
quartz_fertility_regolith |
float |
-1 |
param |
- | Quartz fraction of the regolith, for the two-layer model. Negative = off. | Chemical weathering removes soluble minerals and leaves quartz behind, so regolith is enriched relative to the fresh bedrock a deep landslide scar exposes. Set this, quartz_fertility_bedrock and quartz_fertility_regolith_depth_metres together to test whether that makes landslide debris under-represented in the quartz separate, and so weakens the dilution a landslide causes. |
quartz_fertility_bedrock |
float |
-1 |
param |
- | Quartz fraction of fresh bedrock, for the two-layer model. Negative = off. | - |
quartz_fertility_regolith_depth_metres |
float |
0 |
param |
- | Regolith thickness (m) separating the two fertility layers. 0 = off. | - |
ice_mask_raster_prefix |
string |
NULL |
param |
- | Prefix of a raster marking present-day ice cover (non-zero = ice). | Ice changes exactly three things and lsdtt3 already has a field for each: the ice column shields cosmic rays (SNOW SHIELDING, as an effective depth), the erosion rate differs or is zero, and little or no quartz reaches the sample. LIMITATION: this is PRESENT-DAY ice only. Concentrations depend on the shielding HISTORY and lsdtt3 cannot yet express a per-pixel time-varying shielding, so a glacial-interglacial cycle is not representable and concentrations under formerly glaciated ground are overestimated. |
ice_thickness_metres |
float |
50 |
param |
- | Uniform ice thickness (m) used where the mask marks ice. | Converted to a snow-shielding mass depth at ice_density_kg_m3. Ten metres of ice is already essentially total shielding (0.3 % of spallation survives). |
ice_density_kg_m3 |
float |
917 |
param |
- | Density of ice (kg/m3). Lower for firn. | - |
erate_under_ice_g_cm2_yr |
float |
0 |
param |
- | Effective erosion rate beneath the ice (g/cm2/yr). | Zero is the cold-based idealisation and is numerically safe: the steady-state kernel forms its denominator as (eps + Gamma*lambda), never divides by eps, and returns the saturation concentration P/lambda. |
quartz_fertility_under_ice |
float |
0 |
param |
- | Quartz fraction beneath the ice. | Zero means the ice contributes nothing to the sample, which is the usual assumption when the erosion rate under it is also zero. |
write_quartz_weight_raster |
bool |
false |
switch |
- | Write the quartz mixing-weight raster. | File: <write_fname>_QUARTZ_WEIGHT.tif, kg of quartz m^-2 yr^-1. This is what the accumulation mixes on when fertility or ice is active. |
Concentration raster loading (for accumulation)
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
concentration_raster_prefix |
string |
NULL |
param |
- | Prefix of a pre-computed concentration raster to use for accumulation. | If NULL and a concentration raster was computed in the same run, that is used. |
Pit filling
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
fill_before_routing |
bool |
true |
switch |
- | Choose whether to pit-fill the DEM before building the flow network. | ASKS: should the DEM be filled at all? Filling is OPTIONAL here and this is a genuine analytical choice. True (the default) routes over a pit-free surface. False builds the flow network on the UNFILLED surface, so flow paths terminate at sinks instead of being carried through them. Do not confuse this with raster_is_filled, which is an assertion that the input is already filled. |
Flow routing (for accumulation)
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
min_slope_for_fill |
float |
0.0001 |
param |
- | Minimum imposed slope during pit filling (m/m). | - |
boundary_conditions |
string |
oooo |
param |
- | D8 flow routing boundary conditions (N,E,S,W): o=open, b=forced outlet. | - |
Sample accumulated concentration at points (bridge to lsdtt-cosmo-tool)
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
sample_points_fname |
string |
NULL |
param |
- | CSV of latitude,longitude points at which to sample the accumulated CRN raster. | When set (not NULL), each point is snapped to the channel network and the accumulated (basin-averaged) result at the snapped node is written to <write_fname>_sampled_crn_conc.csv. Single-isotope mode writes <nuclide>_CONC; multi-isotope mode writes Be10_CONC, Al26_CONC, C14_CONC and the accumulated ratios R2610_ACC and R1410_ACC, plus one per-nuclide bridge CSV (<write_fname>_sampled_crn_conc_Be10.csv etc.) for direct inversion with lsdtt-cosmo-tool. The CSV is directly usable by lsdtt-cosmo-tool via concentration_column_name (for example Be10_CONC). Requires calculate_accumulated_crn_concentration: true. |
sample_points_stride |
int |
1 |
param |
- | Keep every Nth point from sample_points_fname (1 = keep all). | For thinning a dense channel-node CSV to a manageable sample set. Points are thinned BEFORE snapping, in input order. Values < 1 are treated as 1. |
sample_column_name |
string |
sample_name |
param |
- | Optional sample identifier column copied through from the points CSV. | If absent from the points CSV, the column is omitted from the output. |
sample_snap_max_search_radius_pixels |
int |
8 |
param |
- | Maximum search radius (pixels) when snapping sample points to the channel network. | Matches lsdtt-cosmo-tool. Used only when sample_points_fname is set. |
Channel network
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
threshold_contributing_pixels |
int |
1000 |
param |
- | Contributing-pixel threshold defining a channel head. | The total number of upslope contributing pixels from the flow-routing object, not the number of direct donors to a pixel. Reduce this value to extract a denser network. This is a PIXEL COUNT and therefore depends on the grid resolution: the equivalent drainage area is threshold_contributing_pixels x cell area. Where a genuine area is wanted instead, the convention is <what>_area_threshold_m2. |
Output write toggles
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
write_crn_concentration_raster |
bool |
true |
switch |
- | Write the computed CRN concentration raster. | Output: write_fname + _<nuclide>_crn_conc.tif |
write_step_change_concentration_raster |
bool |
true |
switch |
- | Write the step-change CRN concentration raster. | Output: write_fname + _<nuclide>_step_crn_conc.tif |
write_isotope_ratio_rasters |
bool |
true |
switch |
calculate_multi_isotope_step_change |
Write the Al26/Be10 and C14/Be10 ratio rasters. | In multi-isotope step-change/transient mode writes _R2610_step.tif and _R1410_step.tif. If accumulation is also on, writes _R2610_acc.tif and _R1410_acc.tif from the accumulated basin-mean concentrations. |
write_accumulated_crn_raster |
bool |
true |
switch |
- | Write the accumulated CRN concentration raster. | Output: write_fname + _<nuclide>_crn_acc.tif |
write_upstream_mean_erate_raster |
bool |
false |
switch |
- | Write the arithmetic upstream mean erosion rate (g/cm2/yr) -- the basin's ACTUAL mean erosion rate above each pixel, which is what an erosion rate inverted from the accumulated concentration should be compared against. Sampled to CSV as upstream_mean_eff_erate_g_cm2_yr regardless of this switch. | Output: write_fname + _mean_erate_acc.tif |
Interior nodata
| Parameter | Type | Default | Role | Parent | Description | Guidance |
|---|---|---|---|---|---|---|
interior_nodata_method |
string |
sink |
param |
- | How nodata pixels inside the DEM are treated: sink or fill. | Interior nodata are nodata pixels not connected to the raster edge through other nodata (isolated voids, moulins, masked lakes). sink (the default, unchanged behaviour): they are outlets, so flow that reaches them ends there, as at the DEM edge; use this for real internal drainage (e.g. moulins on an ice sheet). fill: they are interpolated with nodata_fill_method_choice before any filling or routing, so flow passes across them; use this for data voids. Nodata connected to the edge (e.g. sea removed by min_elevation) is never filled and always acts as an open boundary. |
nodata_fill_method_choice |
string |
laplacian |
param |
interior_nodata_method=fill |
Method for filling interior nodata pixels. | laplacian: smooth Dirichlet interpolation (recommended). iterative_weighted_average: fast, well-suited to thin voids. Used when interior_nodata_method is fill. |
nodata_fill_max_iter |
int |
10000 |
param |
interior_nodata_method=fill |
Maximum iterations for iterative nodata fill methods. | Used when interior_nodata_method is fill. |