Skip to content

cstarkjp/slm

Repository files navigation

Streamline Mapping of Landscape Structure: slm

The slm package provides a set of tools to map landscape structure using topographic streamline tracing. These tools are implemented in Python, OpenCL and OCaml. The main documentation can be found here.

proviso: this is a work in progress

The git repo here is the main slm code base repository. Companion repos house Jupyter notebooks and DTM data (lidar digital terrain models).

What slm can do

Capabilities available now or anticipated soon include the ability to:

  • map channels and identify the locations of channel heads
  • visualize patterns of topographic surface flow
  • measure hillslope lengths across a DTM landscape
  • route flow over pit-prone and divergent topography such as alluvial fans
  • carry out GPU-accelerated processing of large DTM data sets

Longer-term goals include:

  • kinematic mapping of surface water flow depth
    • the main aim is to estimate channel inundation and flow geometry in lidar DTMs
    • contrasts with typical GIS methods of DTM flow routing which have no sense of channel flow geometry
  • deployment of these methods in a landscape evolution model
    • will be able to resolve hillslope-channel transitions and approximate channel flow geometry
    • speed will be a challenge

Code base

slm has a code base founded on:

  • Python 3
    • development is with version 3.6.x on MacOSX
    • several packages are required, notably Numba, which is used to accelerate preprocessing steps
  • OpenCL
  • OCaml
    • intended to be a fast replacement for the Python component of slm
    • porting currently underway
    • will work with common OpenCL code base

Documentation

  • slm hub
    • core documentation of slm idea, implementation and example results
    • links to Jupyter notebook demos
    • documents the Python portion of the code
  • OpenCL docs
    • documents the OpenCL kernels and related functions used in slm
    • generated with Doxygen
  • OCaml docs
    • not yet implemented
    • will document the OCaml portion of slm