<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing with OASIS Tables v3.0 20080202//EN" "https://jats.nlm.nih.gov/nlm-dtd/publishing/3.0/journalpub-oasis3.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:oasis="http://docs.oasis-open.org/ns/oasis-exchange/table" xml:lang="en" dtd-version="3.0" article-type="research-article">
  <front>
    <journal-meta><journal-id journal-id-type="publisher">ESurf</journal-id><journal-title-group>
    <journal-title>Earth Surface Dynamics</journal-title>
    <abbrev-journal-title abbrev-type="publisher">ESurf</abbrev-journal-title><abbrev-journal-title abbrev-type="nlm-ta">Earth Surf. Dynam.</abbrev-journal-title>
  </journal-title-group><issn pub-type="epub">2196-632X</issn><publisher>
    <publisher-name>Copernicus Publications</publisher-name>
    <publisher-loc>Göttingen, Germany</publisher-loc>
  </publisher></journal-meta>
    <article-meta>
      <article-id pub-id-type="doi">10.5194/esurf-14-865-2026</article-id><title-group><article-title>TopoToolbox 3, a laboratory for quantitative geomorphology</article-title><alt-title>TopoToolbox 3</alt-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author" corresp="yes" rid="aff1">
          <name><surname>Kearney</surname><given-names>William S.</given-names></name>
          <email>william.kearney@uni-potsdam.de</email>
        <ext-link>https://orcid.org/0000-0003-3225-1034</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff2">
          <name><surname>Arnau</surname><given-names>Gina</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Bringezu</surname><given-names>Theophil</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff4">
          <name><surname>Dietze</surname><given-names>Michael</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-6063-1726</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff5 aff6">
          <name><surname>Gailleton</surname><given-names>Boris</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-6518-4304</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff3">
          <name><surname>Lamprecht</surname><given-names>Anna-Lena</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1">
          <name><surname>Lenz</surname><given-names>Kilian</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff7">
          <name><surname>Ott</surname><given-names>Richard</given-names></name>
          
        <ext-link>https://orcid.org/0000-0002-8257-0079</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff8 aff9">
          <name><surname>Scherler</surname><given-names>Dirk</given-names></name>
          
        </contrib>
        <contrib contrib-type="author" corresp="no" rid="aff5 aff10">
          <name><surname>Steer</surname><given-names>Philippe</given-names></name>
          
        <ext-link>https://orcid.org/0000-0003-2710-6553</ext-link></contrib>
        <contrib contrib-type="author" corresp="no" rid="aff1 aff8">
          <name><surname>Schwanghart</surname><given-names>Wolfgang</given-names></name>
          
        <ext-link>https://orcid.org/0000-0001-6907-6474</ext-link></contrib>
        <aff id="aff1"><label>1</label><institution>Institute of Environmental Sciences and Geography, University of Potsdam, 14476 Potsdam, Germany</institution>
        </aff>
        <aff id="aff2"><label>2</label><institution>Department of Mechanical and Aerospace Engineering, Princeton University, Princeton, NJ 08544, USA</institution>
        </aff>
        <aff id="aff3"><label>3</label><institution>Institute of Computer Science, University of Potsdam, 14476 Potsdam, Germany</institution>
        </aff>
        <aff id="aff4"><label>4</label><institution>Institute of Geography, RWTH Aachen, 52062 Aachen, Germany</institution>
        </aff>
        <aff id="aff5"><label>5</label><institution>Université de Rennes, CNRS, Géoscience Rennes – UMR 6118, 35000 Rennes, France</institution>
        </aff>
        <aff id="aff6"><label>6</label><institution>Centre national d'études spatiales (CNES), 75039 Paris, France</institution>
        </aff>
        <aff id="aff7"><label>7</label><institution>Institute for Biodiversity and Ecosystem Dynamics, University of Amsterdam, 1090 GE Amsterdam, the Netherlands</institution>
        </aff>
        <aff id="aff8"><label>8</label><institution>Institute of Geographical Sciences, Freie Universität Berlin, 12249 Berlin, Germany</institution>
        </aff>
        <aff id="aff9"><label>9</label><institution>GFZ Helmholtz Centre for Geosciences, 14473 Potsdam, Germany</institution>
        </aff>
        <aff id="aff10"><label>10</label><institution>Institut Universitaire de France (IUF), 75000 Paris, France</institution>
        </aff>
      </contrib-group>
      <author-notes><corresp id="corr1">William S. Kearney (william.kearney@uni-potsdam.de)</corresp></author-notes><pub-date><day>10</day><month>November</month><year>2026</year></pub-date>
      
      <volume>14</volume>
      <issue>6</issue>
      <fpage>865</fpage><lpage>885</lpage>
      <history>
        <date date-type="received"><day>29</day><month>April</month><year>2026</year></date>
           <date date-type="rev-request"><day>26</day><month>May</month><year>2026</year></date>
           <date date-type="rev-recd"><day>5</day><month>October</month><year>2026</year></date>
           <date date-type="accepted"><day>7</day><month>October</month><year>2026</year></date>
      </history>
      <permissions>
        <copyright-statement>Copyright: © 2026 William S. Kearney et al.</copyright-statement>
        <copyright-year>2026</copyright-year>
      <license license-type="open-access"><license-p>This work is licensed under the Creative Commons Attribution 4.0 International License. To view a copy of this licence, visit <ext-link ext-link-type="uri" xlink:href="https://creativecommons.org/licenses/by/4.0/">https://creativecommons.org/licenses/by/4.0/</ext-link></license-p></license></permissions><self-uri xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026.html">This article is available from https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026.html</self-uri><self-uri xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026.pdf">The full text article is available as a PDF file from https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026.pdf</self-uri>
      <abstract><title>Abstract</title>

      <p id="d2e236">TopoToolbox has been widely used to analyze and model landscapes across geomorphology and other geospatial disciplines for the past 15 <inline-formula><mml:math id="M1" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">years</mml:mi></mml:mrow></mml:math></inline-formula>. Its documentation and accessible interfaces have made it a valuable resource for teaching and learning quantitative geomorphology while its customizability and efficiency have allowed researchers to use it as a platform for experimentation and implementation of their own analyses and models. Its third version, TopoToolbox 3, builds on these developments by improving access to the software, integrating with a larger ecosystem of geomorphology software, and establishing sustainable research software engineering practices. TopoToolbox, previously available only in MATLAB, is now also available to users of Python, and an R interface is under development. The redesigned architecture of TopoToolbox 3 is based on a shared library of core computational routines that makes these and other integrations possible while maintaining the MATLAB interface for existing users of the software. We illustrate the power of this design with examples of how users can integrate TopoToolbox into their workflows. First, we compare the implementation of a basic application, <inline-formula><mml:math id="M2" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps, in MATLAB and Python. Second, we show how property-based testing can successfully identify bugs in the absence of known solutions to test cases. We then use the GraphFlood hydraulic model, now available in TopoToolbox, to showcase the potential of integrating simulation tools and analyzing their output in one computational environment. Finally, we demonstrate a two-way coupling between TopoToolbox and the Python-based Landlab landscape evolution modeling framework. We conclude by discussing how improved quality assurance and community-driven development practices ensure that TopoToolbox continues to serve the evolving needs of the geomorphology community.</p>
  </abstract>
    
<funding-group>
<award-group id="gs1">
<funding-source>Deutsche Forschungsgemeinschaft</funding-source>
<award-id>LA 5534/1</award-id>
<award-id>SCHE 1676/7-1</award-id>
</award-group>
<award-group id="gs2">
<funding-source>H2020 European Research Council</funding-source>
<award-id>803721</award-id>
</award-group>
</funding-group>
</article-meta>
  </front>
<body>
      

<sec id="Ch1.S1" sec-type="intro">
  <label>1</label><title>Introduction</title>
      <p id="d2e263">TopoToolbox <xref ref-type="bibr" rid="bib1.bibx64 bib1.bibx65" id="paren.1"/> is a software platform for research in quantitative geomorphology. It provides data structures for representing gridded digital elevation models (DEMs) and flow networks derived from them, as well as tools for manipulating, analyzing and visualizing these data structures. The software has been widely used for research not only in terrestrial geomorphology and hydrology <xref ref-type="bibr" rid="bib1.bibx82 bib1.bibx81" id="paren.2"/> but also in marine geomorphology <xref ref-type="bibr" rid="bib1.bibx12 bib1.bibx13" id="paren.3"/> and planetary geology <xref ref-type="bibr" rid="bib1.bibx1" id="paren.4"/> and in other geospatial sciences such as glaciology <xref ref-type="bibr" rid="bib1.bibx19 bib1.bibx78 bib1.bibx56 bib1.bibx53 bib1.bibx46" id="paren.5"/>, volcanology <xref ref-type="bibr" rid="bib1.bibx75" id="paren.6"/>, soil science <xref ref-type="bibr" rid="bib1.bibx42" id="paren.7"/> and ecology <xref ref-type="bibr" rid="bib1.bibx80 bib1.bibx14 bib1.bibx77 bib1.bibx25" id="paren.8"/> to name a few. This popularity has been attributed to user-friendly interfaces, extensive documentation including an active blog (<uri>https://topotoolbox.wordpress.com</uri>, last access: 6 November 2026), and its computational efficiency. Many tools have also been built on top of TopoToolbox, using its data structures to implement more specific analyses or to provide different user interfaces <xref ref-type="bibr" rid="bib1.bibx17 bib1.bibx30 bib1.bibx28 bib1.bibx73 bib1.bibx70 bib1.bibx75" id="paren.9"/>.</p>
      <p id="d2e297">TopoToolbox's dependence on MATLAB <xref ref-type="bibr" rid="bib1.bibx76" id="paren.10"/> has been critical to its success. MATLAB provides an integrated development environment, an interactive visualization system and its own extensive documentation. Users can download MATLAB and TopoToolbox and immediately begin using the software. However, while TopoToolbox itself is open source and freely available, it requires a license for MATLAB as well as several additional toolboxes that provide both essential functionality (Image Processing and Mapping Toolboxes) and important additional functions (Optimization Toolbox). Many other software tools for quantitative geomorphology also exist from topographic analysis packages similar to TopoToolbox such as Whitebox <xref ref-type="bibr" rid="bib1.bibx55" id="paren.11"/> and LSDTopoTools <xref ref-type="bibr" rid="bib1.bibx57" id="paren.12"/>, to landscape evolution modeling frameworks such as Landlab <xref ref-type="bibr" rid="bib1.bibx41 bib1.bibx43 bib1.bibx7" id="paren.13"/> and Fastscape <xref ref-type="bibr" rid="bib1.bibx15" id="paren.14"/>, to standalone analytical tools such as TopoMetricUncertainty <xref ref-type="bibr" rid="bib1.bibx69" id="paren.15"/>, pyTopoComplexity <xref ref-type="bibr" rid="bib1.bibx54" id="paren.16"/> or CliffDelineaTool <xref ref-type="bibr" rid="bib1.bibx72" id="paren.17"/>, to complete GIS platforms like ArcGIS and QGIS <xref ref-type="bibr" rid="bib1.bibx21" id="paren.18"/> and programming languages like Python, R and Julia, and these represent only a fraction of the many software tools that researchers use to study the Earth's surface <xref ref-type="bibr" rid="bib1.bibx36" id="paren.19"/>. Each of these tools provides a unique combination of analyses and user interfaces that may serve a user better than TopoToolbox, but if a user of one of these tools wishes to access an analysis available in TopoToolbox or if a TopoToolbox user wishes to integrate one of these tools into their workflow, they can face challenges interfacing between the different computational environments.</p>
      <p id="d2e331">Nevertheless, users do often combine TopoToolbox with a variety of other tools. For example, <xref ref-type="bibr" rid="bib1.bibx32" id="text.20"/> used TopoToolbox to delineate drainage basins before loading this data set into ArcGIS, where they compared the drainage basin areas to digitized reef shorelines. <xref ref-type="bibr" rid="bib1.bibx56" id="text.21"/> used TopoToolbox alongside the MATLAB-based Antarctic Mapping Tools <xref ref-type="bibr" rid="bib1.bibx35" id="paren.22"/> to compute subglacial flow paths over topography that was simulated with S-GeMS, a specialized geostatistical software package <xref ref-type="bibr" rid="bib1.bibx61" id="paren.23"/>. <xref ref-type="bibr" rid="bib1.bibx19" id="text.24"/> used TopoToolbox to compute flow accumulation while using QGIS for additional DEM processing and several MATLAB-based tools for radar data processing. Such workflows import data into each tool, process it, then export the results for use in the next program. This pattern works well for analytical pipelines, in which data can be processed once, exported and stored for later use. It is less well-suited for interactive data analysis or modeling that requires the repeated exchange of data between tools. Moreover, while some data such as gridded raster datasets have standard file formats that can be read and written using libraries like GDAL <xref ref-type="bibr" rid="bib1.bibx31" id="paren.25"/>, Python's rasterio <xref ref-type="bibr" rid="bib1.bibx33" id="paren.26"/>, MATLAB's Mapping Toolbox, or R's terra <xref ref-type="bibr" rid="bib1.bibx40" id="paren.27"/>, other data, such as flow and stream networks, do not have these standardized formats and are more complicated to exchange between tools.</p>
      <p id="d2e359">The main innovation of the most recent release, TopoToolbox 3, is the introduction of a software architecture that makes it easier to combine with other tools, to make the software accessible to more users, and to establish a sustainable, community-driven, development process in accordance with the FAIR Principles for Research Software <xref ref-type="bibr" rid="bib1.bibx4" id="paren.28"/>. In comparison to previous releases, TopoToolbox 3's major added value is its multi-layer architecture and a software development framework including automated testing, regular releases, and a contribution process that invites community involvement in the future development of the software.</p>
      <p id="d2e366">The major change visible to users is the introduction of a Python package <xref ref-type="bibr" rid="bib1.bibx49" id="paren.29"/>, which provides a similar interface to the MATLAB package and enables users to integrate TopoToolbox with Python-based tools including geomorphology research software like Landlab.  This package uses a new C library, libtopotoolbox <xref ref-type="bibr" rid="bib1.bibx48" id="paren.30"/>, which implements core functionality shared across higher-level languages. The MATLAB package <xref ref-type="bibr" rid="bib1.bibx51" id="paren.31"/> has been modified to use libtopotoolbox while ensuring backward compatibility with previous versions. Users of the previous MATLAB version should notice only minor changes to the interface. TopoToolbox 3's multi-layer architecture also facilitates its integration into other tools. An R package (<uri>https://github.com/TopoToolbox/topotoolboxr</uri>, last access: 6 November 2026) and a QGIS plugin (<uri>https://github.com/TopoToolbox/QGISTopoToolbox</uri>, last access: 6 November 2026) are actively being developed, and the community is encouraged to develop TopoToolbox 3 integrations for their own tools. A new GitHub organization (<uri>https://github.com/TopoToolbox</uri>, last access: 6 November 2026) coordinates the development of TopoToolbox, and contributions to any of the organization's packages can be made through a pull request workflow described in more detail in the organization's Contribution Guidelines <xref ref-type="bibr" rid="bib1.bibx47" id="paren.32"/>.</p>
      <p id="d2e391">This paper illustrates and evaluates the approaches taken to develop TopoToolbox 3. We describe how TopoToolbox is split into a computational core and binding layers, and how the object-oriented user interface implemented in previous versions is applied in other programming languages. In addition, we describe the testing framework and how to overcome the challenge of testing terrain analysis software where correct answers for a given input are not necessarily known. Finally, we present four practical examples using TopoToolbox 3. We illustrate how a typical geomorphological analysis workflow differs across the MATLAB and Python implementation. We evaluate TopoToolbox's testing framework with an example of how tests caught a real bug in libtopotoolbox. We demonstrate the value of using TopoToolbox as a development platform for new analyses in computational geomorphology with the GraphFlood hydrodynamic model <xref ref-type="bibr" rid="bib1.bibx29" id="paren.33"/>. Finally, we integrate TopoToolbox with Landlab to show how the new architecture enables intermodel comparisons and compare the results and performance benchmarks to highlight opportunities for the future development of geomorphological software tools. This manuscript focuses on the design decisions and software development practices that make TopoToolbox 3 possible. While we do present practical examples of TopoToolbox 3's use for scientific analyses, this is not intended as a tutorial or instructional guide on TopoToolbox 3, and some understanding of the underlying algorithms and the geoscientific reasoning behind them is assumed. The online documentation available at <uri>https://topotoolbox.github.io</uri> (last access: 6 November 2026) and especially the examples gallery at <uri>https://topotoolbox.github.io/gallery</uri> (last access: 6 November 2026) contain more detailed instructional material, including fully worked versions of the examples presented herein, and we encourage users and potential users of TopoToolbox to look there for guidance and inspiration.</p>
      <p id="d2e403">As the scope of TopoToolbox has expanded with this new version, its name has unfortunately become somewhat overloaded. In this manuscript, we use “TopoToolbox” to refer generally to the software, especially when discussing its conceptual framework, the organization that coordinates its development and the community of users and developers who support it. “TopoToolbox 3” is used when referring specifically to the design, implementation and functionality of the newest version of TopoToolbox in contrast to that of “TopoToolbox 2”, the MATLAB package described by <xref ref-type="bibr" rid="bib1.bibx65" id="text.34"/>. Whereas TopoToolbox 2 was a single, self-contained MATLAB package, TopoToolbox 3 consists of several separate components. The MATLAB and Python packages released as part of TopoToolbox 3 are themselves each called TopoToolbox within their respective languages and documentation, but they are hosted in GitHub repositories called “topotoolbox3” and “pytopotoolbox” to avoid name collisions. Those names are occasionally used in this manuscript to distinguish between the two packages and to refer to the GitHub repositories where necessary. “libtopotoolbox” refers to the C library and its repository.</p>
</sec>
<sec id="Ch1.S2">
  <label>2</label><title>Methods</title>
      <p id="d2e417">TopoToolbox 3 was designed to achieve three goals – integrating more smoothly with existing software, improving accessibility and encouraging community engagement with the software – while operating under the constraints of backwards compatibility with TopoToolbox 2 and portability across programming languages and operating systems. We first describe the architecture of TopoToolbox 3 and how it addresses these goals and constraints. We then discuss the testing and quality assurance methods that provide confidence in an increasingly complex software system. Finally, we present four examples that illustrate the functionality of TopoToolbox 3, its quality assurance framework and its integration with external software.</p>
<sec id="Ch1.S2.SS1">
  <label>2.1</label><title>Architecture and design decisions</title>
      <p id="d2e427">The architecture of TopoToolbox 3 consists of three layers (Fig. <xref ref-type="fig" rid="F1"/>). The C library libtopotoolbox provides shared functionality to packages that provide a high-level user interface in MATLAB and Python. A language-specific binding layer (pybind11 and MEX) exchanges data between libtopotoolbox and the higher-level packages. Data input/output and visualization are the responsibility of libraries such as rasterio and the Mapping Toolbox in the higher-level language. The common core of libtopotoolbox ensures that essential computational routines are available across multiple languages. Relying on the same underlying library in different languages means that the results are reproducible regardless of the language used and reduces the sensitivity of TopoToolbox's results to changes in its dependencies.</p>

      <fig id="F1" specific-use="star"><label>Figure 1</label><caption><p id="d2e434">A hypothetical workflow using TopoToolbox 3 illustrates its architecture. Packages provided by TopoToolbox 3 (shown in bold font) include interfaces in high-level languages (pytopotoolbox, topotoolbox3) and the core library (libtopotoolbox). Digital elevation models can be downloaded from services like OpenTopography or loaded from disk into a <monospace>Grid</monospace> object. Flow routing over this DEM creates a <monospace>Flow</monospace> object. Language-specific array and image processing libraries are used along with libtopotoolbox to accomplish flow routing and other algorithms. The binding layer (pybind11, MEX) exchanges data between the high-level languages and libtopotoolbox. A subset of the <monospace>Flow</monospace> object, the <monospace>Stream</monospace> object, represents the stream network. These objects can be plotted using language-specific visualization libraries.</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f01.png"/>

        </fig>

      <p id="d2e455">The high-level interfaces to TopoToolbox 3 preserve the object-oriented approach developed for TopoToolbox 2 <xref ref-type="bibr" rid="bib1.bibx65" id="paren.35"/>. Three major classes provide functionality: <monospace>Grid</monospace> objects represent DEMs and other gridded data sets. <monospace>Flow</monospace> objects represent the flow directions, and <monospace>Stream</monospace> represent a stream network as a subset of the DEM connected via the flow directions (Table <xref ref-type="table" rid="T1"/>). These objects have different names in MATLAB and Python (<monospace>GRIDobj</monospace>/<monospace>GridObject</monospace>, <monospace>FLOWobj</monospace>/<monospace>FlowObject</monospace>, and <monospace>STREAMobj</monospace>/<monospace>StreamObject</monospace>) and the language-agnostic terms <monospace>Grid</monospace>, <monospace>Flow</monospace> and <monospace>Stream</monospace> are used here unless the specific implementation in MATLAB or Python is discussed. Much of the core functionality available in the MATLAB package for each of these three objects has been added to the Python package as well, but complete feature parity between the two interfaces has not yet been achieved. The MATLAB package also includes the additional classes of <monospace>SWATHobj</monospace> for extracting swaths of DEMs and <monospace>DIVIDEobj</monospace> for analyzing drainage divides <xref ref-type="bibr" rid="bib1.bibx63" id="paren.36"/>, but these have not yet been ported to the Python package. The <monospace>PPS</monospace> object for analyzing point processes on stream networks <xref ref-type="bibr" rid="bib1.bibx68" id="paren.37"/> is available experimentally in Python. The GraphFlood algorithm is currently accessible from the <monospace>run_graphflood</monospace> function in both Python and MATLAB, but the Python interface to the GraphFlood algorithm has been encapsulated in a <monospace>GFObject</monospace> class, which provides additional options that are not yet available in MATLAB.</p>

<table-wrap id="T1" specific-use="star"><label>Table 1</label><caption><p id="d2e527">The correspondence between classes in TopoToolbox 3 in MATLAB and Python.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="left"/>
     <oasis:colspec colnum="4" colname="col4" align="left"/>
     <oasis:thead>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1">Abstract data structure</oasis:entry>
         <oasis:entry colname="col2">Description</oasis:entry>
         <oasis:entry colname="col3">MATLAB class</oasis:entry>
         <oasis:entry colname="col4">Python class</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>Grid</monospace></oasis:entry>
         <oasis:entry colname="col2">2D raster dataset</oasis:entry>
         <oasis:entry colname="col3"><monospace>GRIDobj</monospace></oasis:entry>
         <oasis:entry colname="col4"><monospace>GridObject</monospace></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>Flow</monospace></oasis:entry>
         <oasis:entry colname="col2">Flow network</oasis:entry>
         <oasis:entry colname="col3"><monospace>FLOWobj</monospace></oasis:entry>
         <oasis:entry colname="col4"><monospace>FlowObject</monospace></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>Stream</monospace></oasis:entry>
         <oasis:entry colname="col2">Stream network</oasis:entry>
         <oasis:entry colname="col3"><monospace>STREAMobj</monospace></oasis:entry>
         <oasis:entry colname="col4"><monospace>StreamObject</monospace></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>Swath</monospace></oasis:entry>
         <oasis:entry colname="col2">Swath profiles</oasis:entry>
         <oasis:entry colname="col3"><monospace>SWATHobj</monospace></oasis:entry>
         <oasis:entry colname="col4">Not yet implemented</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>PointProcess</monospace></oasis:entry>
         <oasis:entry colname="col2">Point processes</oasis:entry>
         <oasis:entry colname="col3"><monospace>PPS</monospace></oasis:entry>
         <oasis:entry colname="col4"><monospace>PPS</monospace></oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>Divide</monospace></oasis:entry>
         <oasis:entry colname="col2">Drainage divides</oasis:entry>
         <oasis:entry colname="col3"><monospace>DIVIDEobj</monospace></oasis:entry>
         <oasis:entry colname="col4">Not yet implemented</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>GraphFlood</monospace></oasis:entry>
         <oasis:entry colname="col2">2D hydrodynamics</oasis:entry>
         <oasis:entry colname="col3">Not yet implemented</oasis:entry>
         <oasis:entry colname="col4"><monospace>GFObject</monospace></oasis:entry>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

      <p id="d2e689">libtopotoolbox implements a data-oriented approach <xref ref-type="bibr" rid="bib1.bibx24" id="paren.38"/> in which its functions operate only on contiguous arrays of data supplied by the functions' caller. This avoids the complexity of managing object representations and ownership within the C library and enables libtopotoolbox to be used with any language that provides a foreign function interface to C and the ability to access contiguous arrays. Methods in the high-level language extract the necessary arrays from the <monospace>Grid</monospace>, <monospace>Flow</monospace> and <monospace>Stream</monospace> objects before passing them to libtopotoolbox, and they package the output arrays into objects to be returned to users. Some methods like <monospace>Grid.fillsinks</monospace> or <monospace>Flow.flow_accumulation</monospace> return raster datasets of the same shape and size as the input DEM, so these are returned as <monospace>Grid</monospace> objects that can be used in other TopoToolbox functions.</p>
      <p id="d2e714">Other methods, especially those of <monospace>Stream</monospace> objects, return one-dimensional (1D) MATLAB or Numpy arrays. These are either <italic>node attribute lists</italic> with an element for every node in the stream network or <italic>edge attribute lists</italic> with an element for every edge between two nodes of the stream network. Quantities like the distance upstream from an outlet or <inline-formula><mml:math id="M3" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> are attached to nodes and thus returned as node attribute lists. Quantities like the distance between two nodes or the fraction of flow apportioned to two downstream neighbors by a multiple flow direction routing algorithm are attached to edges and returned as edge attribute lists. <monospace>Stream</monospace> objects maintain an additional mapping between the indices of its 1D node attribute lists and those of its parent <monospace>Grid</monospace> object, which can be used to extract information from <monospace>Grid</monospace> objects at the nodes of the stream network using the <monospace>Stream.ezgetnal</monospace> method.</p>
      <p id="d2e746">The <monospace>Flow</monospace> and <monospace>Stream</monospace> objects represent flow networks with a topologically sorted edge list as in TopoToolbox 2 <xref ref-type="bibr" rid="bib1.bibx39 bib1.bibx16 bib1.bibx65" id="paren.39"/>. This data structure stores the links between nodes in the flow network in an order such that all incoming edges to a node occur before any outgoing edges. The edge list consists of two arrays, each of which contains integers labeling the source and target of each edge in the flow network. Many network analysis algorithms can be implemented succinctly with one or more scans of the topologically sorted edge list, and the uniform representation of flow and stream networks as topologically sorted edge lists means they can share libtopotoolbox implementations for many of their functions. libtopotoolbox contains a set of functions that use flow algebras <xref ref-type="bibr" rid="bib1.bibx74" id="paren.40"/> to compute various quantities of interest such as drainage area, downstream and upstream distance and <inline-formula><mml:math id="M4" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula>.</p>
      <p id="d2e768">libtopotoolbox functions are not typically called by users. Instead, methods on <monospace>Grid</monospace>, <monospace>Flow</monospace> and <monospace>Stream</monospace> objects initialize the necessary input and output arrays and pass them to libtopotoolbox through the binding layer. The binding layer marshals data between the high-level language and libtopotoolbox, converting the high-level language's data representations into the contiguous arrays of data needed by libtopotoolbox. TopoToolbox 3 uses MATLAB's MEX system and pybind11 <xref ref-type="bibr" rid="bib1.bibx45" id="paren.41"/> for the Python bindings. Additional C or C++ source code within the MATLAB and Python packages implements these bindings.</p>
      <p id="d2e783">libtopotoolbox currently focuses on in-memory processing of data to make as few assumptions as possible about where a user's data comes from. A DEM loaded into memory in MATLAB using the Mapping Toolbox or in Python using rasterio or created by a landscape evolution model can all be passed to libtopotoolbox functions. The user decides how and when to load their data into memory. This design does make it challenging to operate on DEMs too large to load entirely into memory. Existing solutions for processing large DEMs require control over the input and output of data tiles and communication across the boundaries of tiles <xref ref-type="bibr" rid="bib1.bibx2 bib1.bibx5 bib1.bibx6" id="paren.42"><named-content content-type="pre">e.g.</named-content></xref>. Implementing these algorithms in libtopotoolbox would require users to access their data through libtopotoolbox instead of the libraries they are already using, which is contrary to the design goal for libtopotoolbox to operate on as wide a variety of data sources as possible. Such solutions could, however, be implemented in TopoToolbox's higher-level packages using libraries like dask <xref ref-type="bibr" rid="bib1.bibx62" id="paren.43"/> or MATLAB's Parallel Computing Toolbox to orchestrate I/O tasks and libtopotoolbox to perform computations on each tile. An alternative that is also being considered is to reimplement the libtopotoolbox interface using hardware acceleration frameworks such as the Parallel Computing Toolbox in MATLAB or Taichi Lang, PyTorch and TensorFlow in Python that provide access to resources like multiprocessors and GPUs. In this case, the high-level interface would remain the same, but users could switch between between the portable libtopotoolbox backend and high-performance backends as needed. Work is ongoing to leverage these libraries to provide an easy-to-use, high-performance interface for analyzing large datasets.</p>
</sec>
<sec id="Ch1.S2.SS2">
  <label>2.2</label><title>Testing and quality assurance</title>
      <p id="d2e802">The manual testing performed for TopoToolbox 2 is not able to provide the level of quality assurance required to ensure that code behavior is preserved across languages, that interfaces between high-level languages and libtopotoolbox continue to work correctly after changes in one or both layers, and that the software works properly with external packages. An extensive automated testing system has been implemented for TopoToolbox 3. Each TopoToolbox package contains an automated test suite that runs using a language-specific testing framework. Pull requests submitted to the repository trigger runs of the test suite on GitHub Actions to verify the changes proposed in the pull request. The test suites are run on recent versions of Linux, Windows and macOS, and the Python and MATLAB package repositories run their test suites with the supported versions of Python (3.10 and newer) and MATLAB (R2023b and newer). All changes to TopoToolbox repositories are made through pull requests, and no changes are accepted unless the test suite passes.</p>
      <p id="d2e805">A major challenge in testing scientific software is the oracle problem or the need to know the correct answer for a given input <xref ref-type="bibr" rid="bib1.bibx8" id="paren.44"/>. While oracles can be constructed for small test cases and analytical solutions to many algorithms are available, we want to ensure that TopoToolbox gives correct results on real data, not just these hand-crafted data sets, which may not capture edge cases or unexpected features of real data. The TopoToolbox 3 test suites use the following techniques to create realistic test cases.</p>
<sec id="Ch1.S2.SS2.SSS1">
  <label>2.2.1</label><title>Snapshot-based characterization testing</title>
      <p id="d2e819">Regression tests ensure that changes introduced in TopoToolbox 3 do not substantially affect the behavior of the software. However, the desired behavior of many of the functions of TopoToolbox is not always clearly specified, especially around problems such as the handling of missing data or boundary conditions. We use characterization tests <xref ref-type="bibr" rid="bib1.bibx26" id="paren.45"><named-content content-type="post">p. 186</named-content></xref> to document the existing behavior of TopoToolbox functions by running a set of real and simulated DEMs through the functions in the MATLAB package and storing the result. The libtopotoolbox and pytopotoolbox test suites download these pairs of input and output data, process the input with their own implementations of the same functions, and then check that their outputs are equivalent to the stored MATLAB outputs up to some small threshold to account for platform-specific differences in floating point arithmetic. In cases where the existing functionality needs to be changed, the snapshot data can be updated using the new behavior.</p>
</sec>
<sec id="Ch1.S2.SS2.SSS2">
  <label>2.2.2</label><title>Property-based testing</title>
      <p id="d2e836">Snapshot tests only verify that the behavior of TopoToolbox 3 functions matches their behavior from TopoToolbox 2, not that the implementations are correct. An effective way to test the correctness of these implementations is through property-based testing <xref ref-type="bibr" rid="bib1.bibx34" id="paren.46"/>. Property-based testing specifies software functionality through properties that should hold after some input data is passed through a function. It then verifies that these properties hold when evaluated on randomly generated inputs. For example, the <monospace>fillsinks</monospace> function should have the property that the filled DEM no longer has any sinks, i.e. pixels surrounded by neighbors with higher elevations, while <monospace>drainagebasins</monospace> has the property that the downstream neighbor of a given pixel should receive the same basin label as that pixel. The test suites randomly generate DEMs and then verify that these properties hold after passing them to the relevant functions.</p>
      <p id="d2e848">The <monospace>fillsinks</monospace> and <monospace>drainagebasins</monospace> functions both depend globally on the DEM. It is impossible to know by looking only at a pixel and its immediate neighbors whether that pixel is part of a sink or to which drainage basin it belongs. However, these properties can be quickly verified by local computations that examine each pixel and its immediate neighbors. Properties that locally test global functions are particularly effective in developing tests because they are easy to write and quick to run, and they discriminate well between correct and incorrect implementations of the function. Local computations such as the <monospace>gradient8</monospace> function, which computes the maximum downward slope between a pixel and its eight neighbors in the DEM, require testing code that is very similar to that of the computation itself. Such a property-based test is less effective at verifying the behavior of the function because bugs in the implementation are likely also present in the test. In the end, it provides as much information as a snapshot test does, ensuring only that the behavior of <monospace>gradient8</monospace> is preserved during changes to the code, and the snapshot test is much simpler to implement correctly. Hand-crafted test cases can be used alongside snapshot tests to verify functionality in these cases.</p>
</sec>
<sec id="Ch1.S2.SS2.SSS3">
  <label>2.2.3</label><title>Metamorphic testing</title>
      <p id="d2e871">The major difficulty in implementing property-based tests is the need to generate properties that are testable and that sufficiently distinguish between correct and incorrect answers. Metamorphic testing <xref ref-type="bibr" rid="bib1.bibx18" id="paren.47"/> has been a valuable strategy for generating properties for TopoToolbox 3. Metamorphic testing relies on so-called metamorphic relations between multiple inputs to a function and their expected outputs. While the output of each function for a given input may not be known, the difference between the outputs obtained from transformed versions of the inputs can be deduced from a metamorphic relation. Particularly valuable are invariants, aspects of the output that do not change when the input data is modified in a certain way. A simple example of an invariant metamorphic relation in DEM analysis is that the magnitude of the gradient of a DEM should be identical to the magnitude of the gradient of the same DEM rotated by multiples of ninety degrees. Any violation of this metamorphic relation indicates that the gradient implementation depends on the specific arrangements of the <inline-formula><mml:math id="M5" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M6" display="inline"><mml:mi>y</mml:mi></mml:math></inline-formula> axes, which is likely a bug. An example of a noninvariant metamorphic relation obeyed by the gradient function is that the gradient should be proportional to the inverse of the cell size. A test of this relation constructs two <monospace>Grid</monospace> objects with identical data but different cell sizes, <inline-formula><mml:math id="M7" display="inline"><mml:mrow><mml:msub><mml:mi>h</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M8" display="inline"><mml:mrow><mml:msub><mml:mi>h</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, passes them to the gradient function to obtain two <monospace>Grid</monospace> objects, <inline-formula><mml:math id="M9" display="inline"><mml:mrow><mml:msub><mml:mi>g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> and <inline-formula><mml:math id="M10" display="inline"><mml:mrow><mml:msub><mml:mi>g</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>, and verifies that the ratio of the gradients is approximately the inverse ratio of the cell sizes (<inline-formula><mml:math id="M11" display="inline"><mml:mrow><mml:msub><mml:mi>g</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>g</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>=</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msub><mml:mo>/</mml:mo><mml:msub><mml:mi>h</mml:mi><mml:mn mathvariant="normal">1</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula>) for all pixels with nonzero gradient. A violation of this metamorphic relation indicates that the gradient implementation does not use the supplied cell size correctly.</p>
</sec>
</sec>
<sec id="Ch1.S2.SS3">
  <label>2.3</label><title>Practical evaluation of TopoToolbox 3</title>
      <p id="d2e983">To demonstrate how the design of TopoToolbox 3 enables users to incorporate it into various geoscientific workflows, we present four examples. The first example demonstrates how functionality existing in the previous version TopoToolbox has been adapted to TopoToolbox 3 by presenting MATLAB and Python implementations of <inline-formula><mml:math id="M12" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps and evaluating the consistency of results obtained with the two packages. The second example illustrates how a testing strategy known as metamorphic testing was able to catch a subtle bug in libtopotoolbox. The third example presents GraphFlood <xref ref-type="bibr" rid="bib1.bibx29" id="paren.48"/>, a recently developed hydrodynamic model that has been ported to TopoToolbox 3. Finally, the fourth example demonstrates a two-way coupling between TopoToolbox 3 and Landlab that uses TopoToolbox both to implement a process component of a landscape evolution model and to analyze the model's output. Code samples have been included for some of the examples, but they have been condensed for space. Complete Jupyter notebooks and MATLAB Live Scripts implementing these examples can be found on the online TopoToolbox gallery (<uri>https://topotoolbox.github.io/gallery</uri>, last access: 6 November 2026).</p>
<sec id="Ch1.S2.SS3.SSS1">
  <label>2.3.1</label><title><inline-formula><mml:math id="M13" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps</title>
      <p id="d2e1013"><inline-formula><mml:math id="M14" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps provide a graphical illustration of the potential for dynamic reorganization of river basins <xref ref-type="bibr" rid="bib1.bibx84" id="paren.49"/>. They display the value of the <inline-formula><mml:math id="M15" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> metric <xref ref-type="bibr" rid="bib1.bibx59" id="paren.50"/> at points within the stream network. <inline-formula><mml:math id="M16" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> is a coordinate transformation that arises when solving the steady-state stream power equation by separation of variables. It is obtained by integrating upstream the inverse of the contributing area (Eq. <xref ref-type="disp-formula" rid="Ch1.E1"/>)

              <disp-formula id="Ch1.E1" content-type="numbered"><label>1</label><mml:math id="M17" display="block"><mml:mrow><mml:mi mathvariant="italic">χ</mml:mi><mml:mo>=</mml:mo><mml:munderover><mml:mo movablelimits="false">∫</mml:mo><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow><mml:mi>x</mml:mi></mml:munderover><mml:msup><mml:mfenced open="(" close=")"><mml:mstyle displaystyle="true"><mml:mfrac style="display"><mml:mrow><mml:msub><mml:mi>A</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow><mml:mrow><mml:mi>A</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:mfrac></mml:mstyle></mml:mfenced><mml:mstyle scriptlevel="+1"><mml:mfrac><mml:mi>m</mml:mi><mml:mi>n</mml:mi></mml:mfrac></mml:mstyle></mml:msup><mml:mi mathvariant="normal">d</mml:mi><mml:mi>x</mml:mi></mml:mrow></mml:math></disp-formula>

            where <inline-formula><mml:math id="M18" display="inline"><mml:mrow><mml:msub><mml:mi>A</mml:mi><mml:mn mathvariant="normal">0</mml:mn></mml:msub></mml:mrow></mml:math></inline-formula> is a reference area, <inline-formula><mml:math id="M19" display="inline"><mml:mrow><mml:mi>A</mml:mi><mml:mo>(</mml:mo><mml:mi>x</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula> is the contributing area at each point <inline-formula><mml:math id="M20" display="inline"><mml:mi>x</mml:mi></mml:math></inline-formula> in the stream network, which begins at a location corresponding to base level <inline-formula><mml:math id="M21" display="inline"><mml:mrow><mml:msub><mml:mi>x</mml:mi><mml:mi mathvariant="normal">b</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>. and <inline-formula><mml:math id="M22" display="inline"><mml:mi>m</mml:mi></mml:math></inline-formula> and <inline-formula><mml:math id="M23" display="inline"><mml:mi>n</mml:mi></mml:math></inline-formula> are the parameters of the stream power model. When the along-stream coordinate is transformed to <inline-formula><mml:math id="M24" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula>, stream profiles that solve the steady-state stream power model appear as straight lines whose slope is controlled by the ratio of uplift rate to erodibility.</p>
      <p id="d2e1160">To conduct a <inline-formula><mml:math id="M25" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> analysis in TopoToolbox, the basic workflow is to (1) load a raster containing elevation data, (2) route flow over the topography to determine drainage directions and drainage areas for each cell in the elevation data, (3) identify the stream network from these drainage directions, and (4) perform the upstream integration of drainage area to compute <inline-formula><mml:math id="M26" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula>.</p>
      <p id="d2e1177">We have implemented a <inline-formula><mml:math id="M27" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> analysis of the Rhine-Danube drainage divide in southwestern Germany and northern Switzerland following that of <xref ref-type="bibr" rid="bib1.bibx85" id="text.51"/>. The code in both MATLAB and Python used for this analysis is displayed in Fig. <xref ref-type="fig" rid="F2"/>. This workflow is similar in structure to that depicted in Fig. <xref ref-type="fig" rid="F1"/>.</p>

      <fig id="F2" specific-use="star"><label>Figure 2</label><caption><p id="d2e1197">The code used to generate the <inline-formula><mml:math id="M28" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps. The left column shows the code in MATLAB and the right column the code in Python. The background colors group related sections of the code together. Some details, especially of plotting, have been omitted from the code sample in the interest of space. Complete working examples can be found in the TopoToolbox gallery (MATLAB: <uri>https://topotoolbox.github.io/gallery/notebooks/matlab/alpine-chimaps/alpine_chimaps.html</uri>, last access: 6 November 2026 and Python: <uri>https://topotoolbox.github.io/gallery/notebooks/python/alpine-chimaps/alpine-chimaps.html</uri>, last access: 6 November 2026), and the code and necessary auxiliary data to run the examples can also be obtained from the gallery GitHub repository (<uri>https://github.com/TopoToolbox/gallery</uri>, last access: 6 November 2026).</p></caption>
            <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f02.png"/>

          </fig>

      <p id="d2e1222">The Copernicus Global DEM <xref ref-type="bibr" rid="bib1.bibx23" id="paren.52"/> is first obtained from OpenTopography using a TopoToolbox function to call the OpenTopography API. This DEM is loaded into TopoToolbox as a <monospace>Grid</monospace> object, TopoToolbox's representation of raster datasets and projected into the ETRS89-LAEA coordinate system with a resolution of 90 <inline-formula><mml:math id="M29" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>. While many of the algorithms implemented in TopoToolbox can work properly in geographic coordinate systems, their implementations have often assumed that a projected coordinate system is used, and we recommend projecting DEMs when possible to avoid problems. Work is ongoing to ensure functions work in geographic coordinate systems and to document when a function assumes a particular coordinate system. Pixels below 0 <inline-formula><mml:math id="M30" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> in elevation are replaced by NaN to exclude them from the analysis and set a common base level. A <monospace>Flow</monospace> object, TopoToolbox's representation of flow directions, is created from the gridded DEM using the default settings, which route flow using D8 <xref ref-type="bibr" rid="bib1.bibx58" id="paren.53"/> with least cost auxiliary topography carving <xref ref-type="bibr" rid="bib1.bibx67" id="paren.54"/> through depressions and flat regions. The upstream area is computed using the <monospace>flowacc</monospace>/<monospace>flow_accumulation</monospace> methods on the <monospace>Flow</monospace> objects. A <monospace>Stream</monospace> object containing the subset of the flow network identified as stream channels is then generated from the <monospace>Flow</monospace> object by applying a minimum upstream area threshold of 10 <inline-formula><mml:math id="M31" display="inline"><mml:mrow class="unit"><mml:msup><mml:mi mathvariant="normal">km</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula>. This stream network covers the entire region spanned by the DEM, so it is restricted to the Rhine and Danube basins using the <monospace>klargestconncomps</monospace> method to select the two largest drainage basins. Finally, the <inline-formula><mml:math id="M32" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> transform is computed from the flow accumulation raster using the <monospace>chitransform</monospace> method. The output of <monospace>chitransform</monospace>, <monospace>c</monospace>, is an array with an element for each node of the stream network giving the <inline-formula><mml:math id="M33" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> value computed for that node. The <monospace>Stream.plotc</monospace> method is used here to plot this array in geographic coordinates with its value represented by its color, but <monospace>Stream.plotdz</monospace> could also be used to plot the stream network elevation against <monospace>c</monospace> in the classic <inline-formula><mml:math id="M34" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> plot <xref ref-type="bibr" rid="bib1.bibx59" id="paren.55"/>.</p>
</sec>
<sec id="Ch1.S2.SS3.SSS2">
  <label>2.3.2</label><title>Metamorphic testing</title>
      <p id="d2e1339">To illustrate how TopoToolbox uses property-based and metamorphic testing to ensure that its components work together, we demonstrate a bug in libtopotoolbox's flow routing implementation that was identified by metamorphic testing. This bug was resolved in libtopotoolbox pull request #186 (<uri>https://github.com/TopoToolbox/libtopotoolbox/pull/186</uri>, last access: 6 November 2026).</p>
      <p id="d2e1345">The bug has its origins in the memory layout of <monospace>Grid</monospace> objects. The two-dimensional (2D) raster data sets that underlie the <monospace>Grid</monospace> objects are stored in memory as a 1D array. The data are organized within this array according to either a row- or a column-major layout. A row-major layout puts all the values for a single row next to each other in memory in order of increasing column index. The next row is placed directly after that and the next row after that. The column-major layout puts all the values for a single column next to each other in memory in order of increasing row index. Indexing into a 2D array converts the row and column indices into a linear offset depending on the array's dimensions and the memory layout, and high-level array languages do these conversions automatically.</p>
      <p id="d2e1354">However, MATLAB arrays are column-major while Numpy arrays are row-major by default but can also be column-major. To operate efficiently on arrays originating from both MATLAB and Python, libtopotoolbox needs to know some information about the memory layout of the 2D arrays supplied as inputs and outputs. Metamorphic tests in pytopotoolbox ensure that this interface is correct by generating two <monospace>GridObjects</monospace> with the same data but with different memory layouts, passing both <monospace>GridObjects</monospace> to the same function, and checking that the outputs are equivalent.</p>
</sec>
<sec id="Ch1.S2.SS3.SSS3">
  <label>2.3.3</label><title>GraphFlood</title>
      <p id="d2e1371">Representing streams as networks of flow directions as in TopoToolbox's <monospace>Flow</monospace> and <monospace>Stream</monospace> objects is efficient for large-scale analysis but lacks detailed hydrodynamic information such as channel width, flow depth, velocity or shear stress that may be useful for investigations of landscape evolution and natural hazards <xref ref-type="bibr" rid="bib1.bibx20 bib1.bibx3" id="paren.56"/>. Recovering this information can be done by modeling the 2D or even three-dimensional (3D) flow of water over a landscape. However, the computational cost of solving the full shallow-water equations makes them unsuitable for large-scale exploratory analyses. To circumvent this, <xref ref-type="bibr" rid="bib1.bibx29" id="text.57"/> developed GraphFlood, a numerical method that leverages graph theory and simplified shallow-water equations to compute large-scale, 2D steady-state flow conditions efficiently.</p>
      <p id="d2e1386">To illustrate how GraphFlood operates within TopoToolbox 3, we simulated flow in the Saison watershed in the Western French Pyrenees using the 25 <inline-formula><mml:math id="M35" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> BD ALTI DEM <xref ref-type="bibr" rid="bib1.bibx44" id="paren.58"/>. This watershed has a high variability in both relief and valley width, which demonstrates GraphFlood's versatility in estimating flow over different terrain. We estimate flood extent across the entire catchment under three different hydrological states, prescribed in the model by effective precipitation rates of 10, 50, and 100 <inline-formula><mml:math id="M36" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">mm</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">h</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>. We then use tools from TopoToolbox 3 and the Python numerical ecosystem to extract and quantify spatial variations in channel width, shear stress, and hydraulic slope near the main trunk under the 50 <inline-formula><mml:math id="M37" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">mm</mml:mi><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">h</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> precipitation scenario.</p>
</sec>
<sec id="Ch1.S2.SS3.SSS4">
  <label>2.3.4</label><title>Integration with Landlab</title>
      <p id="d2e1443">Landlab is an environment for modeling Earth surface dynamics <xref ref-type="bibr" rid="bib1.bibx41 bib1.bibx43 bib1.bibx7" id="paren.59"/>. It provides a framework for constructing and running models on a variety of spatial grids as well as an extensive library of “components” that implement different process models or analyses using data on these grids.</p>
      <p id="d2e1449">The Python interface to TopoToolbox 3 makes it possible both to conduct online analysis of Landlab model results and to use TopoToolbox 3 to represent processes within a Landlab model. We have created an example that uses TopoToolbox 3 in these two roles within a basic landscape evolution model based on an example available in the Landlab documentation <xref ref-type="bibr" rid="bib1.bibx83" id="paren.60"/>. The model represents erosion with a stream power incision model and linear diffusion on hillslopes using Landlab's <monospace>StreamPowerEroder</monospace> and <monospace>LinearDiffuser</monospace> components, respectively. We replace Landlab's <monospace>FlowAccumulator</monospace>, which is used to compute the upslope drainage area needed by the stream power model, with a custom component using the flow routing functionality of TopoToolbox 3, <monospace>TT3FlowRouter</monospace> (Fig. <xref ref-type="fig" rid="F3"/>).</p>

      <fig id="F3" specific-use="star"><label>Figure 3</label><caption><p id="d2e1472">The TT3FlowRouter class. Some details have been removed for clarity and space. See the accompanying Jupyter notebook for complete working example.</p></caption>
            <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f03.png"/>

          </fig>

      <p id="d2e1482"><monospace>TT3FlowRouter</monospace> is essentially a <monospace>FlowObject</monospace> modified to expose the information that Landlab's <monospace>StreamPowerEroder</monospace> requires. Landlab represents data as a collection of fields associated with a grid. It provides many different structured and unstructured grid types, but since TopoToolbox focuses on processing regular rasters, we use Landlab's <monospace>RasterModelGrid</monospace> with equal horizontal spacing exclusively. A pytopotoolbox <monospace>GridObject</monospace> is roughly equivalent to a single node-based field on a <monospace>RasterModelGrid</monospace>, and the two can easily be converted from one to another, taking care that the underlying arrays are shaped appropriately for the two different libraries. A helper function <monospace>from_RasterModelGrid</monospace> (not shown) is used to create a <monospace>GridObject</monospace> from a specified field of a <monospace>RasterModelGrid</monospace> in the example.</p>
      <p id="d2e1512">The gridded data is then run through TopoToolbox's default flow routing algorithm, D8 with morphological carving <xref ref-type="bibr" rid="bib1.bibx67" id="paren.61"/>. The topologically sorted list of flow network nodes and downstream receivers of each node are readily available from the <monospace>FlowObject</monospace> and the drainage area is computed with the <monospace>flow_accumulation</monospace> method on <monospace>FlowObject</monospace>. The <monospace>StreamPowerEroder</monospace> also requires a field containing the labels of the edges that carry flow between nodes of the DEM. Every adjacent pair of nodes in the grid is connected by a “link” in Landlab, whether or not any flow is transported across that link. TopoToolbox, on the other hand, only maintains the list of edges that carry flow, so the edge labels of TopoToolbox do not directly correspond to the link labels of Landlab. We construct this field by manipulating Landlab's list of links in the raster grid and TopoToolbox's lists of the source and target indices of each flow network edge.</p>
      <p id="d2e1530">At each time step, the TopoToolbox flow routing component is run on the DEM to compute flow directions and flow accumulation, which are supplied to <monospace>StreamPowerEroder</monospace> to compute the erosion. The hillslope diffusion is applied by Landlab's <monospace>LinearDiffuser</monospace> component and uplift is applied manually to the interior nodes. After <inline-formula><mml:math id="M38" display="inline"><mml:mrow><mml:mn mathvariant="normal">2</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mn mathvariant="normal">6</mml:mn></mml:msup></mml:mrow></mml:math></inline-formula> years  of simulated time, the uplift rate is doubled to create knickpoints that propagate upstream. We use TopoToolbox's <monospace>knickpointfinder</monospace> to identify these knickpoints <xref ref-type="bibr" rid="bib1.bibx71" id="paren.62"/>, and we visualize them on both a hillshaded DEM and a <inline-formula><mml:math id="M39" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> plot <xref ref-type="bibr" rid="bib1.bibx59" id="paren.63"/> created with TopoToolbox's plotting functionality.</p>
</sec>
</sec>
</sec>
<sec id="Ch1.S3">
  <label>3</label><title>Results</title>
      <p id="d2e1581">Here, we present the output of the four examples and discuss each example within the context of the goals of TopoToolbox 3.</p>
<sec id="Ch1.S3.SS1">
  <label>3.1</label><title><inline-formula><mml:math id="M40" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps</title>
      <p id="d2e1598">Figure <xref ref-type="fig" rid="F4"/> shows the pair of <inline-formula><mml:math id="M41" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps of the region generated in MATLAB (Fig. <xref ref-type="fig" rid="F4"/>a) and Python (Fig. <xref ref-type="fig" rid="F4"/>b).</p>

      <fig id="F4" specific-use="star"><label>Figure 4</label><caption><p id="d2e1616"><inline-formula><mml:math id="M42" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps using TopoToolbox 3. <bold>(a)</bold> The <inline-formula><mml:math id="M43" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> map created by the MATLAB code in Fig. <xref ref-type="fig" rid="F2"/>. The Danube basin is highlighted in purple and the Rhine in orange. The stream network is colored based on the <inline-formula><mml:math id="M44" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> value at each point along the channel. <bold>(b)</bold> The same figure as <bold>(a)</bold> created in Python using the code in Fig. <xref ref-type="fig" rid="F2"/>.</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f04.png"/>

        </fig>

      <p id="d2e1659">The TopoToolbox workflow is essentially identical in Python and MATLAB, but the two languages and their TopoToolbox implementations are different and users will have to translate between the two when porting code from one language to another. For example, the two languages use different calling conventions for methods: the MATLAB example uses the functional style (<monospace>klargestconncomps(s, 2)</monospace>) with the object given by the first argument while Python uses dot syntax (<monospace>s.klargestconncomps(2)</monospace>). MATLAB can also use dot syntax for method calls, but most TopoToolbox documentation prefers the functional style. Python users must explicitly import TopoToolbox and associated libraries for plotting (matplotlib) and array computing (numpy). The names of objects and functions are also different in the two languages. TopoToolbox in MATLAB uses <monospace>GRIDobj</monospace>, <monospace>FLOWobj</monospace> and <monospace>STREAMobj</monospace> to refer to the three main objects that we have called <monospace>Grid</monospace>, <monospace>Flow</monospace> and <monospace>Stream</monospace> objects above. In Python these are called <monospace>GridObject</monospace>, <monospace>FlowObject</monospace> and <monospace>StreamObject</monospace>.</p>
      <p id="d2e1697">To illustrate the agreement between the two packages, we plot elevation vs. <inline-formula><mml:math id="M45" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> computed with each packages for the main trunks of the Rhine and Danube in Fig. <xref ref-type="fig" rid="F5"/>. While the two packages provide qualitatively similar results in this case, the Python package underestimates <inline-formula><mml:math id="M46" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> relative to the MATLAB one. This discrepancy is due to differences in how the two packages transform rasters into the chosen coordinate system (Step 2 of Fig. <xref ref-type="fig" rid="F2"/>). While the <monospace>GRIDobj.project</monospace> function in MATLAB and the <monospace>GridObject.reproject</monospace> function in Python are called with the same coordinate reference system and horizontal resolution, the resulting DEMs are not identical. If this reprojection step is bypassed by first transforming the OpenTopography data externally into a projected coordinate system and then loading the projected data into both packages, the computed <inline-formula><mml:math id="M47" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> values are identical.</p>

      <fig id="F5"><label>Figure 5</label><caption><p id="d2e1734">Comparison of <inline-formula><mml:math id="M48" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> profiles along the main trunks of the Rhine and Danube computed in both Python and MATLAB using the code in Fig. <xref ref-type="fig" rid="F2"/>. The <inline-formula><mml:math id="M49" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> profiles by Python are shown with the blue solid line and by MATLAB with the dashed orange lines. The discrepancy between the two packages arises from differences in the coordinate transformation applied by Python and MATLAB in Step 2 of Fig. <xref ref-type="fig" rid="F2"/>. If the DEM is first projected into a coordinate reference system in MATLAB, saved to disk and loaded into Python and then analyzed using Steps 3–6 of Fig. <xref ref-type="fig" rid="F2"/>, the discrepancy goes away, and the <inline-formula><mml:math id="M50" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> profile is identical to the one computed entirely in MATLAB (the dashed orange lines).</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f05.png"/>

        </fig>

</sec>
<sec id="Ch1.S3.SS2">
  <label>3.2</label><title>Metamorphic testing</title>
      <p id="d2e1779">Metamorphic tests identified the problem addressed in pull request #186 when the two <monospace>FlowObjects</monospace> created from the same <monospace>GridObjects</monospace> in different memory layouts did not appear to be equivalent (Fig. <xref ref-type="fig" rid="F6"/>a). While libtopotoolbox takes care to scan over 2D arrays in different directions depending on the memory layout of the underlying array, D8 flow routing also scans a neighborhood of each pixel to determine the direction of steepest descent. In case of ties, the first pixel with the steepest gradient encountered during the scan over the neighborhood is chosen. However, the neighborhood was scanned in a clockwise direction in column-major arrays and in a counterclockwise direction in row-major arrays, and ties were therefore encountered in different orders for row- and column-major arrays (Fig. <xref ref-type="fig" rid="F6"/>c and d). This was fixed in pull request #186 by adding an “order” argument to the flow routing functions in libtopotoolbox. This should be 0 for column-major arrays and 1 for row-major arrays. When it is 1, it flips the direction in which the neighborhood is scanned so that the same pixels are chosen in case of ties (Fig. <xref ref-type="fig" rid="F6"/>b).</p>

      <fig id="F6" specific-use="star"><label>Figure 6</label><caption><p id="d2e1796">An illustration of metamorphic testing in TopoToolbox 3. <bold>(a)</bold> The same DEM is generated in row- and column-major layouts and passed to the libtopotoolbox flow routing function “flow<sub>routing d8 carve</sub>”. The resulting “FlowObjects”, however, are not exactly identical as can be determined from the difference in their corresponding flow accumulation rasters (<inline-formula><mml:math id="M52" display="inline"><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi><mml:mi>A</mml:mi></mml:mrow></mml:math></inline-formula>). <bold>(b)</bold> The flow accumulation test after pull request #186 was merged. The difference in the flow accumulation rasters is now zero because each pixel's neighborhood is scanned in the same direction in the row- and column-major layouts. <bold>(c)</bold> The flow directions obtained prior to the fix from the row-major DEM plotted over the elevation normalized to the value of the center pixel. The south and east neighbors all have the same elevation, and the south neighbor is chosen because the neighborhood scan starts to the south for row-major arrays and proceeds counterclockwise as indicated by the circular arrow. <bold>(d)</bold> The flow directions obtained prior to the fix from the column-major DEM plotted over the elevation normalized to the value of the center pixel. The east neighbor is chosen because the neighborhood scan starts to the east for column-major arrays and proceeds clockwise as indicated by the circular arrow.</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f06.png"/>

        </fig>

</sec>
<sec id="Ch1.S3.SS3">
  <label>3.3</label><title>GraphFlood</title>
      <p id="d2e1845">The GraphFlood simulation of the Saison watershed (Fig. <xref ref-type="fig" rid="F7"/>a) returns estimates of flood extent (Fig. <xref ref-type="fig" rid="F7"/>b) and hydrodynamic parameters under the three precipitation scenarios. The patterns of width and shear stress illustrated by the swaths in Fig. <xref ref-type="fig" rid="F7"/>c do not systematically covary, suggesting that the combination of the two provides more information than either alone. The variability in shear stress across the swath illustrates the value of 2D hydrodynamics in capturing signals beyond along-profile variations such as those that can be analyzed with the 1D methods provided by TopoToolbox's <monospace>Stream</monospace> objects.</p>

      <fig id="F7" specific-use="star"><label>Figure 7</label><caption><p id="d2e1859">Hydrodynamic analysis of the Saison watershed using GraphFlood and TopoToolbox 3. <bold>(a)</bold> Topographic map of the area, note the high variability in fluvial relief and valley confinement. <bold>(b)</bold> Simulated water depth over a portion of the valley floor for three precipitation rates to explore inundation patterns. <bold>(c)</bold> Hydrodynamic parameters in the vicinity of the main trunk: hydraulic slope (<inline-formula><mml:math id="M53" display="inline"><mml:mrow><mml:msub><mml:mi>S</mml:mi><mml:mi>w</mml:mi></mml:msub></mml:mrow></mml:math></inline-formula>), channel width (<inline-formula><mml:math id="M54" display="inline"><mml:mi>W</mml:mi></mml:math></inline-formula>) and fluvial shear stress (<inline-formula><mml:math id="M55" display="inline"><mml:mi mathvariant="italic">τ</mml:mi></mml:math></inline-formula>). The hydraulic slope and fluvial shear stress panels show the median (solid line) and interquartile range (IQR, shaded region) of the respective quantity computed from all pixels within a swath of 500 <inline-formula><mml:math id="M56" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> on either side of the main trunk. Details of the simulation and analysis can be found in the accompanying Jupyter notebook.</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f07.png"/>

        </fig>

      <p id="d2e1911">TopoToolbox is now the main outlet for the ongoing development of GraphFlood, combining traditional topographic analysis with physics-based hydrodynamics at the basin scale. The core GraphFlood algorithm is implemented in libtopotoolbox and is exposed in both the Python and MATLAB packages. The Python implementation wraps this implementation in an object-oriented interface (<monospace>GFObject</monospace>) to make it easier to configure model runs and manage the input data and results. The GraphFlood methods in either package take <monospace>Grid</monospace> objects as input and return them as output so users can load their own data, configure and run the model and then analyze and visualize the results using other TopoToolbox functions. Developing GraphFlood within TopoToolbox allows even a complex numerical model like GraphFlood to be easily distributed to users who can seamlessly integrate it into their workflows.</p>
</sec>
<sec id="Ch1.S3.SS4">
  <label>3.4</label><title>Integration with Landlab</title>
      <p id="d2e1929">Figure <xref ref-type="fig" rid="F8"/> shows the simulated elevations and the stream network with knickpoints identified by TopoToolbox at three timesteps of the Landlab simulation: just before the uplift rate is adjusted (Fig. <xref ref-type="fig" rid="F8"/>a) and at 100 000 <inline-formula><mml:math id="M57" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">years</mml:mi></mml:mrow></mml:math></inline-formula> (Fig. <xref ref-type="fig" rid="F8"/>c) and 200 000 <inline-formula><mml:math id="M58" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">years</mml:mi></mml:mrow></mml:math></inline-formula> after the uplift rate adjustment (Fig. <xref ref-type="fig" rid="F8"/>e). The stream profiles and knickpoints are also visualized in <inline-formula><mml:math id="M59" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> plots (Fig. <xref ref-type="fig" rid="F8"/>b, d, and f). As the balance of erosion against uplift approaches steady state (Fig. <xref ref-type="fig" rid="F8"/>b), the stream profiles collapse towards one another in <inline-formula><mml:math id="M60" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> space. They do not collapse perfectly indicating that a steady state between erosion and uplift has not been fully reached by 2 million years, which is affected by the relatively high hillslope diffusion coefficient used here (0.05 <inline-formula><mml:math id="M61" display="inline"><mml:mrow class="unit"><mml:msup><mml:mi mathvariant="normal">m</mml:mi><mml:mn mathvariant="normal">2</mml:mn></mml:msup><mml:mspace linebreak="nobreak" width="0.125em"/><mml:msup><mml:mi mathvariant="normal">yr</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>). When the uplift rate is increased (Fig. <xref ref-type="fig" rid="F8"/>d), knickpoints form, which cluster in <inline-formula><mml:math id="M62" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> space as expected, and they migrate upstream at the theoretical celerity of knickpoints in the stream power model <xref ref-type="bibr" rid="bib1.bibx11 bib1.bibx59" id="paren.64"/>.</p>

      <fig id="F8" specific-use="star"><label>Figure 8</label><caption><p id="d2e2010">A simulation of knickpoint migration in Landlab using TopoToolbox for flow routing, knickpoint identification and visualization. The figures show the simulation at 3 time steps beginning at <bold>(a, b)</bold> when the uplift rate is adjusted from 1 to 2 <inline-formula><mml:math id="M63" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">mm</mml:mi><mml:mspace width="0.125em" linebreak="nobreak"/><mml:msup><mml:mi mathvariant="normal">yr</mml:mi><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">1</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula> and showing the stream network and knickpoints after <bold>(c, d)</bold> 100 000 and <bold>(e, f)</bold> 200 000 <inline-formula><mml:math id="M64" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">years</mml:mi></mml:mrow></mml:math></inline-formula>. Panels <bold>(a)</bold>, <bold>(c)</bold>, <bold>(e)</bold> show a hillshade topography along with the stream network identified by TopoToolbox (black) and knickpoints (red). Panels <bold>(b)</bold>, <bold>(d)</bold>, <bold>(f)</bold> show the elevation vs the time scale <inline-formula><mml:math id="M65" display="inline"><mml:mi mathvariant="italic">τ</mml:mi></mml:math></inline-formula>, which is <inline-formula><mml:math id="M66" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> normalized by the erodibility coefficient, for the stream network.</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f08.png"/>

        </fig>

      <p id="d2e2087">The TopoToolbox flow router produces nearly identical results to the Landlab <monospace>FlowAccumulator</monospace> with a <monospace>FlowDirectorD8</monospace> and <monospace>DepressionFinderAndRouter</monospace>. The differences between the two are due to differences in how each flow router resolves topographic sinks and computes flow directions over flat areas. These differences affect the early stages of the simulation before sinks in the random initial conditions are removed by the combined effects of uplift, erosion and diffusion, but small differences introduced early in the simulation grow into large differences at the end of the simulation. To minimize the impact of these effects on the final results, the random initial conditions are modified using TopoToolbox's <monospace>imposemin</monospace> function to carve a channel through the initial conditions with a small minimum slope (<inline-formula><mml:math id="M67" display="inline"><mml:mrow><mml:mn mathvariant="normal">1</mml:mn><mml:mo>×</mml:mo><mml:msup><mml:mn mathvariant="normal">10</mml:mn><mml:mrow><mml:mo>-</mml:mo><mml:mn mathvariant="normal">5</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:math></inline-formula>). With minimum imposition on the initial conditions the mean absolute difference between the elevations simulated with the two different flow routers is 0.8 <inline-formula><mml:math id="M68" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> at the end of the simulation. However, there can be differences in the simulated elevation of individual pixels on the order of 200 <inline-formula><mml:math id="M69" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> as show in Fig. <xref ref-type="fig" rid="F9"/>.</p>

      <fig id="F9"><label>Figure 9</label><caption><p id="d2e2142">The elevation values of each pixel in the simulation at the end of the simulation computed with the Landlab <monospace>FlowAccumulator</monospace> component (vertical axis) and the <monospace>TT3FlowRouter</monospace> component (horizontal axis). The red line is the one-to-one line that indicates perfect agreement between the two models.</p></caption>
          <graphic xlink:href="https://esurf.copernicus.org/articles/14/865/2026/esurf-14-865-2026-f09.png"/>

        </fig>

      <p id="d2e2157">The entire simulation runs in 24.1 <inline-formula><mml:math id="M70" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> using the TopoToolbox flow router and in 44.7 <inline-formula><mml:math id="M71" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula> using the Landlab <monospace>FlowAccumulator</monospace> with a <monospace>FlowDirectorD8</monospace> and the <monospace>DepressionFinderAndRouter</monospace> (simulations were run on a Linux workstation with a 2.3 <inline-formula><mml:math id="M72" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">GHz</mml:mi></mml:mrow></mml:math></inline-formula> Intel Core i7-11800H processor with 8 cores and 32 GB of RAM). The original example from the Landlab documentation does not use the <monospace>DepressionFinderAndRouter</monospace>
<xref ref-type="bibr" rid="bib1.bibx83" id="paren.65"/>, but it is included to make better comparisons with pytopotoolbox, which currently always resolves sinks when routing flow. The Landlab simulation is much faster without the <monospace>DepressionFinderAndRouter</monospace> (11.5 <inline-formula><mml:math id="M73" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">s</mml:mi></mml:mrow></mml:math></inline-formula>). Work is ongoing in TopoToolbox to expose flow routing without sink resolution in pytopotoolbox, which should improve the speed of such simulations because sink resolution is the slowest part of TopoToolbox's flow routing algorithm. However, profiles collected using Python's <monospace>profile</monospace> module show (Table <xref ref-type="table" rid="T2"/>) that converting TopoToolbox's topologically sorted edge list into the list of links required by Landlab (the <monospace>set_links</monospace> subroutine) takes around twice as much time to run as the flow routing itself (<monospace>FlowObject.__init__</monospace>).</p>

<table-wrap id="T2" specific-use="star"><label>Table 2</label><caption><p id="d2e2226">Profile of the Landlab simulation. The outer functions are the update functions called on Landlab components within the main simulation loop. The subroutines called by the <monospace>TT3FlowRouter</monospace> are also shown for more detailed comparison. These subroutines are not shown in Fig. <xref ref-type="fig" rid="F3"/> for brevity, but they correspond to the commented sections of code within that function.</p></caption><oasis:table frame="topbot"><oasis:tgroup cols="4">
     <oasis:colspec colnum="1" colname="col1" align="left"/>
     <oasis:colspec colnum="2" colname="col2" align="left"/>
     <oasis:colspec colnum="3" colname="col3" align="right"/>
     <oasis:colspec colnum="4" colname="col4" align="right"/>
     <oasis:thead>
       <oasis:row>
         <oasis:entry colname="col1">Function</oasis:entry>
         <oasis:entry colname="col2">Subroutine</oasis:entry>
         <oasis:entry colname="col3">Time within function</oasis:entry>
         <oasis:entry colname="col4">Time within subroutine</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">(s)</oasis:entry>
         <oasis:entry colname="col4">(s)</oasis:entry>
       </oasis:row>
     </oasis:thead>
     <oasis:tbody>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>TT3FlowRouter.run_one_step</monospace></oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">25.209</oasis:entry>
         <oasis:entry colname="col4"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><monospace>set_links</monospace></oasis:entry>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">16.115</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><monospace>FlowObject.__init__</monospace></oasis:entry>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">7.859</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><monospace>mask_edges</monospace></oasis:entry>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">0.607</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><monospace>set_drainage_area</monospace></oasis:entry>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">0.320</oasis:entry>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><monospace>set_receivers</monospace></oasis:entry>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">0.098</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"/>
         <oasis:entry colname="col2"><monospace>set_node</monospace></oasis:entry>
         <oasis:entry colname="col3"/>
         <oasis:entry colname="col4">0.059</oasis:entry>
       </oasis:row>
       <oasis:row rowsep="1">
         <oasis:entry colname="col1"><monospace>StreamPowerEroder.run_one_step</monospace></oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">5.367</oasis:entry>
         <oasis:entry colname="col4"/>
       </oasis:row>
       <oasis:row>
         <oasis:entry colname="col1"><monospace>LinearDiffuser.run_one_step</monospace></oasis:entry>
         <oasis:entry colname="col2"/>
         <oasis:entry colname="col3">3.486</oasis:entry>
         <oasis:entry colname="col4"/>
       </oasis:row>
     </oasis:tbody>
   </oasis:tgroup></oasis:table></table-wrap>

</sec>
</sec>
<sec id="Ch1.S4">
  <label>4</label><title>Discussion</title>
      <p id="d2e2418">In this section, we first examine the FAIR principles for research software and asses how well TopoToolbox 3 follows them. We then discuss the effectiveness of the testing and quality assurance framework. Finally, we examine the modes in which TopoToolbox can be extended by its users and describe the pathways for users to contribute their own software to the TopoToolbox ecosystem.</p>
<sec id="Ch1.S4.SS1">
  <label>4.1</label><title>FAIR principles</title>
      <p id="d2e2428">The FAIR Principles for Research Software <xref ref-type="bibr" rid="bib1.bibx4" id="paren.66"/> provide a set of best practices for research software development that guided the design of TopoToolbox 3. These principles state that research software should be <italic>findable</italic>, <italic>accessible</italic>, <italic>interoperable</italic>, <italic>reusable</italic>. The components of TopoToolbox 3 and accompanying metadata are <italic>findable</italic> through GitHub as well as the Zenodo archive. Zenodo provides a DOI that serves as a persistent identifier for each released version of the software. The software is <italic>accessible</italic> in source or precompiled forms from GitHub, and the Python package is registered in the Python Package Index, allowing users to install it with Python's standard packaging tools. Zenodo also allows users to download the source code of each repository as well as metadata. TopoToolbox 3 <italic>interoperates</italic> with other software by exchanging raster data through standard file formats, and it provides methods for exporting flow and stream networks to vector data files that can be interpreted by other software. TopoToolbox 3 also exchanges information directly between higher-level programming languages and libtopotoolbox by representing all necessary data as flat arrays, so they can be accessed through interfaces provided by Numpy and MATLAB. TopoToolbox 3 can be <italic>reused</italic>, modified and built upon because it is released as free software under the GNU Public License v3.0. Development is tracked in the Git version control system to establish the provenance of all artifacts incorporated into TopoToolbox 3. Packaging, distribution and dependency management are provided by standard mechanisms in each language, allowing users to install and use the package alongside other software.</p>
      <p id="d2e2459">Each function in TopoToolbox is documented in the source code with descriptions of its arguments and outputs and brief usage examples. This documentation is available to users on the new TopoToolbox website (<uri>https://topotoolbox.github.io</uri>, last access: 6 November 2026) and through the MATLAB Help Center. The Python and MATLAB packages also come with a guide to Getting Started with TopoToolbox. User-contributed examples are provided as executable Jupyter notebooks and MATLAB Live Scripts through the TopoToolbox gallery (<uri>https://topotoolbox.github.io/gallery</uri>, last access: 6 November 2026). Supplementing this official documentation is the long-running TopoToolbox blog (<uri>https://topotoolbox.wordpress.com</uri>, last access: 6 November 2026), which describes many more use cases and workflows.</p>
      <p id="d2e2471">TopoToolbox is developed openly on GitHub, and contributions to any of the TopoToolbox packages are accepted from the community. The TopoToolbox GitHub organization (<uri>https://github.com/TopoToolbox</uri>, last access: 6 November 2026) owns the official GitHub repositories for pytopotoolbox, topotoolbox3, libtopotoolbox and others, but any user can fork a TopoToolbox repository, make changes, and contribute them back through a pull request workflow described in the TopoToolbox Contribution Guidelines <xref ref-type="bibr" rid="bib1.bibx47" id="paren.67"/>. Once a contributor makes a pull request, a TopoToolbox maintainer works with them to ensure that the pull request passes the automated test suite, that it successfully addresses any pertinent bug or issue reports, that it comes with sufficient tests and documentation to enable users and other contributors to make use of the code, and that it meets the stylistic guidelines of the repository, which are documented in each repository's contribution guidelines. There is currently no formal process to become a TopoToolbox maintainer who has permission to merge pull requests, and contributors who have made contributions to TopoToolbox repositories and who express a willingness to help new contributors through this process can be given this permission by existing maintainers.</p>
      <p id="d2e2480">The automated testing and publishing of software and metadata through continuous integration ensures that the FAIR Principles continue to hold as TopoToolbox is modified and extended. The remaining technical challenges facing the sustainability of TopoToolbox lie largely in improving and maintaining interoperability with other software. Passing flow network information to Landlab, for example, requires an expensive indexing operation every time the flow network is updated because TopoToolbox does not maintain within its data structures all of the information required by Landlab' <monospace>StreamPowerEroder</monospace>. Standardized representations of flow networks within the Earth surface processes community could make such integrations smoother and less dependent on the internal implementation details of each library.</p>
</sec>
<sec id="Ch1.S4.SS2">
  <label>4.2</label><title>Quality assurance and the problem of platform dependence</title>
      <p id="d2e2494">The testing strategy outlined above serves three major roles in TopoToolbox 3. It characterizes the informally specified behavior of TopoToolbox 2 and ensures that TopoToolbox 3 does not unintentionally change that behavior. It confirms that new implementations of algorithms in libtopotoolbox and the interface between libtopotoolbox and other packages behave as expected and continue to behave that way as changes are made. Finally, it ensures the consistency of behavior across packages, so that an analysis done in Python will produce the same result as the same analysis done in MATLAB.</p>
      <p id="d2e2497">Testing helps to manage the complexity of the expanding TopoToolbox ecosystem. As TopoToolbox has grown to include new contributors adding code in multiple programming languages, it is increasingly challenging for any single developer to hold the entire system in their head. The tests instead serve as a shared repository of knowledge about the system, and automated testing and continuous integration ensures that the properties described by the tests continue to hold. Contributors can make changes knowing that they will not break other components without warning, and the tests they contribute specify how their components behave as further changes are made. We do not practice strict test-driven development <xref ref-type="bibr" rid="bib1.bibx10" id="paren.68"/> where failing tests are added before implementing any new code. Instead, we let the tests coevolve with the code, enabling more flexible experimentation, especially when it is unclear how code should be tested or what properties need to be preserved. This does require careful code review when changing the tests to ensure that the safeguards provided by the tests continue to operate.</p>
      <p id="d2e2503">As TopoToolbox 3 has grown beyond MATLAB, we have encountered the problem of maintaining consistency across different computational platforms, the combinations of hardware, operating systems, programming languages, libraries and user code that make up a software application <xref ref-type="bibr" rid="bib1.bibx9" id="paren.69"/>. Ideally, the results of an analysis conducted with TopoToolbox 3 would be the same regardless of whether a user conducted the analysis in MATLAB on a Windows PC or in Python on a Mac as the scientific validity of an analysis is undermined if its results depend on the platform used to run it. The <inline-formula><mml:math id="M74" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps example (Fig. <xref ref-type="fig" rid="F5"/>) show that, unfortunately, there can be significant differences between the results of analyses implemented on different platforms.</p>
      <p id="d2e2518">Both the Python and MATLAB versions of TopoToolbox depend on external libraries for some of their functionality. These dependencies can pose a risk to the future stability of both TopoToolbox and to the reproducibility of scientific results generated with TopoToolbox because the libraries may change their behavior. While this risk is clearly visible in the Python package, where its dependencies are open source packages developed by the community, it does also affect the MATLAB package. One of the major updates required to the MATLAB package during the transition to TopoToolbox 3 involved how georeferencing information is maintained in the <monospace>GRIDobj</monospace>, <monospace>FLOWobj</monospace> and <monospace>STREAMobj</monospace>, which was necessitated by changes in MATLAB's Mapping Toolbox.</p>
      <p id="d2e2531">In thinking about these risks, we can roughly categorize TopoToolbox's external dependencies into two categories: interface dependencies and computational dependencies. Interface dependencies load information into and export information from TopoToolbox. Libraries like rasterio and the Mapping Toolbox read and write data from storage, and visualization libraries like matplotlib are used to communicate the results of analyses. In principle, changes to interface dependencies should not change the results of an analysis, but only the process by which that analysis is obtained. If matplotlib ceased to exist, the plotting functionality of pytopotoolbox would no longer work, but alternative plotting libraries could still be used with the same <monospace>GridObjects</monospace>, <monospace>FlowObjects</monospace> and <monospace>StreamObjects</monospace> as before, or the data could be exported for visualization in another system. Computational dependencies perform components of the topographic analyses. Libraries like Python's numpy and scipy and MATLAB's Image Processing Toolbox are used primarily as computational dependencies. The reprojection functionality of rasterio and the Mapping Toolbox illustrates that libraries that primarily serve as interface dependencies can also be computational dependencies when they manipulate data while loading it. Changes to computational dependencies may change the results of an analysis, and upgrading these dependencies must be handled with care through extensive testing.</p>
      <p id="d2e2543">TopoToolbox 3 relies on the shared implementation of functions in libtopotoolbox and cross-platform testing, especially snapshot characterization tests and metamorphic testing as demonstrated in the array memory layout example, to minimize the dependency of its results on the underlying platforms. These two strategies guaranteed that the discrepancy in the MATLAB and Python outputs for the <inline-formula><mml:math id="M75" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> maps did not originate in the flow routing, flow accumulation or <inline-formula><mml:math id="M76" display="inline"><mml:mi mathvariant="italic">χ</mml:mi></mml:math></inline-formula> transform code, all of which is done in libtopotoolbox and tested across platforms. The only remaining computation in that example is the transformation of the OpenTopography data to a projected coordinate system. Bypassing reprojection by transforming the data in MATLAB and using that saved dataset directly in Python confirms that the discrepancy arises entirely in the functions <monospace>GRIDobj.project</monospace> and <monospace>GridObject.reproject</monospace>. These are implemented using raster transformation functions from the MATLAB Mapping Toolbox and rasterio, respectively. While we nominally apply the same settings in each case – bilinear resampling to a fixed 90 <inline-formula><mml:math id="M77" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula> resolution – it is clear that either the underlying implementations or the TopoToolbox interfaces to those implementations make additional assumptions that result in different answers.</p>
      <p id="d2e2574">The discrepancies observed in the Landlab example (Fig. <xref ref-type="fig" rid="F9"/>) are of a similar nature: both Landlab's <monospace>FlowAccumulator</monospace> with <monospace>FlowDirectorD8</monospace> and the <monospace>TT3FlowRouter</monospace> implement D8 flow routing, but they make different choices in how they route flow through depressions and over flat regions. These algorithmic differences can add up to large maximum absolute differences in the simulated elevations (over 200 <inline-formula><mml:math id="M78" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>) even if the mean absolute difference is quite small. However, these results were only obtained by modifying the initial conditions explicitly to minimize the impact of the different sink resolution algorithms, and the discrepancies are much larger when using completely random initial conditions.</p>
      <p id="d2e2596">TopoToolbox's automated test suites are tools for software development, not scientific investigation. They are <italic>verification</italic> tests, which check that the software faithfully implements its specifications, not <italic>validation</italic> tests, which check that the model implemented by the software faithfully represents the real world <xref ref-type="bibr" rid="bib1.bibx52" id="paren.70"/>. The automated tests do not replace the essential scientific work of validating the algorithms implemented by TopoToolbox. Because the DEM is only an approximation of the real landscape <xref ref-type="bibr" rid="bib1.bibx27 bib1.bibx60 bib1.bibx66 bib1.bibx79" id="paren.71"/>, there will always be a limit to how well tests such as those we have illustrated here can validate the assumptions of the algorithms implemented in the software. We instead advocate careful comparison of the outputs of TopoToolbox to independent data sets and to the outputs of other software and models. Because TopoToolbox 3 can be integrated more tightly with other software, it is now much easier to make these comparisons as illustrated in the Landlab example above. Validating the theoretical behavior of knickpoint migration and comparing the output of the Landlab <monospace>FlowAccumulator</monospace> with that of the TopoToolbox <monospace>TT3FlowRouter</monospace> were both essential for correctly implementing the <monospace>TT3FlowRouter</monospace>. At the same time, the test cases contributed to TopoToolbox do not need to demonstrate scientific validity. An algorithm intended for large-scale DEM analysis might require large datasets and complicated analyses to validate it properly, tests which are hard to develop and costly to run. Property-based tests with small, randomly generated DEMs can verify that the implementation in TopoToolbox works as expected with a lower computational expense and a smaller software development and maintenance burden.</p>
</sec>
<sec id="Ch1.S4.SS3">
  <label>4.3</label><title>Extensibility</title>
      <p id="d2e2629">One of the strengths of TopoToolbox is providing a foundation upon which users can build their own tools for more specialized analyses. The architecture of TopoToolbox 3 opens new paths to extend the software. TopoToolbox 3 can still be used by exchanging raster or vector data files between it and other tools. Users who need only a small portion of the functionality of TopoToolbox, who would prefer to do the majority of their analysis in another tool such as a GIS, or who do not need tight, interactive coupling between TopoToolbox and their other tools may find this approach the easiest to get started with. In this case, the new Python interface can be valuable for this kind of analysis even if users are not relying on more sophisticated integration between TopoToolbox and other Python-based software.</p>
      <p id="d2e2632">The GraphFlood and Landlab applications described above demonstrate two other ways that TopoToolbox 3 can be extended. GraphFlood is implemented in libtopotoolbox, and interfaces in both the Python and MATLAB packages expose this functionality to users of either programming language. Implementing an extension in libtopotoolbox allows it to be used from both MATLAB and Python, but it does require implementing the tool in C, subject to constraints on external dependencies, dynamic memory management and data formats imposed by the design of libtopotoolbox.</p>
      <p id="d2e2635">Alternatively, extensions can be built in high-level languages using the core TopoToolbox functions alongside external dependencies. The Landlab integration, for example, is implemented purely in Python. It uses TopoToolbox functions to perform the necessary analyses and provides interface functions that convert data between the formats expected by Landlab and TopoToolbox as well as a class implementing the Landlab component interface. Packages have also been developed in this style in MATLAB, including ttminvoellmy, an interface to the MinVoellmy avalanche model <xref ref-type="bibr" rid="bib1.bibx37 bib1.bibx38" id="paren.72"/>, and BankfullMapper, a toolkit for semi-automatic bankfull geometry extraction and discharge estimation <xref ref-type="bibr" rid="bib1.bibx22" id="paren.73"/>. Software developed in this way can use the standard dependency resolution mechanisms of their programming languages to depend on TopoToolbox. Users can maintain such extensions independently of the TopoToolbox organization if they desire. However, the TopoToolbox organization and its online documentation and discussion forums can publicize such extensions and illustrate how they can be used.</p>
</sec>
</sec>
<sec id="Ch1.S5" sec-type="conclusions">
  <label>5</label><title>Conclusions</title>
      <p id="d2e2654">TopoToolbox has provided a platform for research in the computational geosciences for the past 15 <inline-formula><mml:math id="M79" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">years</mml:mi></mml:mrow></mml:math></inline-formula>. The changes introduced in TopoToolbox 3 facilitate a sustainable development process that ensures the platform will continue to meet the needs of the community for the decade to come. The new architecture, based around the portable core library, libtopotoolbox, and its interfaces in several high-level languages, makes it easier to combine TopoToolbox with other software, such as the Landlab framework, to create interactive data visualization and modeling systems and to disseminate new research software like GraphFlood. It also offers the potential to combine TopoToolbox with libraries for high-performance computing and machine learning to open new frontiers in computational geomorphology. Quality assurance practices including an automated test suite and continuous integration make it possible to change individual components with confidence that the entire system will function as expected.</p>
      <p id="d2e2665">Development of TopoToolbox is ongoing, and we encourage the community to participate in this process. Collaboration occurs through the GitHub issue trackers for each package, which list outstanding tasks and through which contributors can discuss new features and changes to existing ones. As of this writing, development efforts focus on achieving complete feature parity between the Python and MATLAB packages, building out the R and QGIS integrations, prototyping high-performance implementations of TopoToolbox analyses, and expanding and improving the documentation. Counterparts of the <monospace>DIVIDEobj</monospace> and <monospace>SWATHobj</monospace>, further elaboration of the point pattern on stream networks object, <monospace>PPS</monospace>, and more sophisticated and user-friendly visualization tools are excellent opportunities to contribute to the Python package. The R package and integration for QGIS are in early stages of development, and we welcome users of R or QGIS to help guide the design of those tools. Implementations of algorithms that take advantage of hardware acceleration and parallel computing can enable analysis at larger scales, higher resolutions and greater physical fidelity. Documentation and examples of analyses that can be added to the TopoToolbox Gallery are particularly impactful contributions from the community as they showcase the broad range of applications of TopoToolbox. Above all, TopoToolbox aims to establish a community of practice in quantitative geomorphology: user involvement in the future development of TopoToolbox is crucial to ensure that TopoToolbox evolves to solve the problems that users encounter in their study of the Earth's surface.</p>
</sec>

      
      </body>
    <back><notes notes-type="codeavailability"><title>Code availability</title>

      <p id="d2e2682">All code released as part of TopoToolbox 3 is available at <uri>https://github.com/TopoToolbox</uri> (last access: 6 November 2026) and is archived on Zenodo at <ext-link xlink:href="https://doi.org/10.5281/zenodo.20269315" ext-link-type="DOI">10.5281/zenodo.20269315</ext-link> <xref ref-type="bibr" rid="bib1.bibx48" id="paren.74"/>, <ext-link xlink:href="https://doi.org/10.5281/zenodo.20209621" ext-link-type="DOI">10.5281/zenodo.20209621</ext-link> <xref ref-type="bibr" rid="bib1.bibx49" id="paren.75"/>, and <ext-link xlink:href="https://doi.org/10.5281/zenodo.20322894" ext-link-type="DOI">10.5281/zenodo.20322894</ext-link> <xref ref-type="bibr" rid="bib1.bibx51" id="paren.76"/>.</p>
  </notes><notes notes-type="dataavailability"><title>Data availability</title>

      <p id="d2e2711">The χ maps example uses the Copernicus Global Digital Elevation Model available from OpenTopography (<ext-link xlink:href="https://doi.org/10.5069/G9028PQB" ext-link-type="DOI">10.5069/G9028PQB</ext-link>, <xref ref-type="bibr" rid="bib1.bibx23" id="altparen.77"/>) and the GraphFlood example uses the BD ALTI data available from the Institut national de l'information géographique et forestière (<uri>https://cartes.gouv.fr/rechercher-une-donnee/dataset/IGNF_BD-ALTI</uri>; last access: 6 November 2026).</p>
  </notes><notes notes-type="ercavailability"><title>Interactive computing environment (ICE)</title>

      <p id="d2e2727">Jupyter notebooks and MATLAB live scripts implementing the examples can be found at <uri>https://topotoolbox.github.io</uri> (last access: 6 November 2026) and are archived on Zenodo at <ext-link xlink:href="https://doi.org/10.5281/zenodo.20270725" ext-link-type="DOI">10.5281/zenodo.20270725</ext-link> <xref ref-type="bibr" rid="bib1.bibx50" id="paren.78"/>.</p>
  </notes><notes notes-type="authorcontribution"><title>Author contributions</title>

      <p id="d2e2742">WSK prepared the original manuscript draft. All authors reviewed and edited the manuscript. WS, DS, ALL, and WSK conceptualized the study and formulated the goals of TopoToolbox 3. WS, DS, ALL, and PS acquired funding to support this project. WSK and BG implemented the examples. WSK, GA, TB, MD, BG, KL, RO, DS, WS, and PS contributed code to TopoToolbox 3.</p>
  </notes><notes notes-type="competinginterests"><title>Competing interests</title>

      <p id="d2e2748">At least one of the (co-)authors is a member of the editorial board of <italic>Earth Surface Dynamics</italic>. The peer-review process was guided by an independent editor, and the authors also have no other competing interests to declare.</p>
  </notes><notes notes-type="disclaimer"><title>Disclaimer</title>

      <p id="d2e2757">Publisher's note: Copernicus Publications remains neutral with regard to jurisdictional claims made in the text, published maps, institutional affiliations, or any other geographical representation in this paper. The authors bear the ultimate responsibility for providing appropriate place names. Views expressed in the text are those of the authors and do not necessarily reflect the views of the publisher.</p>
  </notes><ack><title>Acknowledgements</title><p id="d2e2763">Gina Arnau was supported by the Summer Work Program of the Department of German, Princeton University. This work is based on data services provided by the OpenTopography Facility with support from the National Science Foundation under NSF Award Numbers 2410799, 2410800, and 2410801.</p></ack><notes notes-type="financialsupport"><title>Financial support</title>

      <p id="d2e2769">This research has been supported by the Deutsche Forschungsgemeinschaft (grant nos. LA 5534/1 and SCHE 1676/7-1) and the H2020 European Research Council (grant no. 803721). Financial support for this study was provided by the Centre national d’études spatiales (CNES), France (ROR: <uri>https://ror.org/04h1h0y33</uri>, last access: 6 November 2026).</p>
  </notes><notes notes-type="reviewstatement"><title>Review statement</title>

      <p id="d2e2778">This paper was edited by Richard Gloaguen and reviewed by Yizhou Wang and three anonymous referees.</p>
  </notes><ref-list>
    <title>References</title>

      <ref id="bib1.bibx1"><label>Arakawa et al.(2020)</label><mixed-citation>Arakawa, M., Saiki, T., Wada, K., Ogawa, K., Kadono, T., Shirai, K., Sawada, H., Ishibashi, K., Honda, R., Sakatani, N., Iijima, Y., Okamoto, C., Yano, H., Takagi, Y., Hayakawa, M., Michel, P., Jutzi, M., Shimaki, Y., Kimura, S., Mimasu, Y., Toda, T., Imamura, H., Nakazawa, S., Hayakawa, H., Sugita, S., Morota, T., Kameda, S., Tatsumi, E., Cho, Y., Yoshioka, K., Yokota, Y., Matsuoka, M., Yamada, M., Kouyama, T., Honda, C., Tsuda, Y., Watanabe, S., Yoshikawa, M., Tanaka, S., Terui, F., Kikuchi, S., Yamaguchi, T., Ogawa, N., Ono, G., Yoshikawa, K., Takahashi, T., Takei, Y., Fujii, A., Takeuchi, H., Yamamoto, Y., Okada, T., Hirose, C., Hosoda, S., Mori, O., Shimada, T., Soldini, S., Tsukizaki, R., Iwata, T., Ozaki, M., Abe, M., Namiki, N., Kitazato, K., Tachibana, S., Ikeda, H., Hirata, N., Hirata, N., Noguchi, R., and Miura, A.: An artificial impact on the asteroid (162173) Ryugu formed a crater in the gravity-dominated regime, Science, 368, 67–71, <ext-link xlink:href="https://doi.org/10.1126/science.aaz1701" ext-link-type="DOI">10.1126/science.aaz1701</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx2"><label>Arge et al.(2003)</label><mixed-citation>Arge, L., Chase, J. S., Halpin, P., Toma, L., Vitter, J. S., Urban, D., and Wickremesinghe, R.: Efficient flow computation on massive grid terrain datasets, GeoInformatica, 7, 283–313, <ext-link xlink:href="https://doi.org/10.1023/a:1025526421410" ext-link-type="DOI">10.1023/a:1025526421410</ext-link>, 2003.</mixed-citation></ref>
      <ref id="bib1.bibx3"><label>Armitage(2019)</label><mixed-citation>Armitage, J. J.: Short communication: flow as distributed lines within the landscape, Earth Surf. Dynam., 7, 67–75, <ext-link xlink:href="https://doi.org/10.5194/esurf-7-67-2019" ext-link-type="DOI">10.5194/esurf-7-67-2019</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx4"><label>Barker et al.(2022)</label><mixed-citation>Barker, M., Chue Hong, N. P., Katz, D. S., Lamprecht, A.-L., Martinez-Ortiz, C., Psomopoulos, F., Harrow, J., Castro, L. J., Gruenpeter, M., Martinez, P. A., and Honeyman, T.: Introducing the FAIR principles for research software, Scientific Data, 9, 622, <ext-link xlink:href="https://doi.org/10.1038/s41597-022-01710-x" ext-link-type="DOI">10.1038/s41597-022-01710-x</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx5"><label>Barnes(2016)</label><mixed-citation>Barnes, R.: Parallel priority-flood depression filling for trillion cell digital elevation models on desktops or clusters, Comput. Geosci., 96, 56–68, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2016.07.001" ext-link-type="DOI">10.1016/j.cageo.2016.07.001</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx6"><label>Barnes(2017)</label><mixed-citation>Barnes, R.: Parallel non-divergent flow accumulation for trillion cell digital elevation models on desktops or clusters, Environ. Modell. Softw., 92, 202–212, <ext-link xlink:href="https://doi.org/10.1016/j.envsoft.2017.02.022" ext-link-type="DOI">10.1016/j.envsoft.2017.02.022</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx7"><label>Barnhart et al.(2020)</label><mixed-citation>Barnhart, K. R., Hutton, E. W. H., Tucker, G. E., Gasparini, N. M., Istanbulluoglu, E., Hobley, D. E. J., Lyons, N. J., Mouchene, M., Nudurupati, S. S., Adams, J. M., and Bandaragoda, C.: Short communication: Landlab v2.0: a software package for Earth surface dynamics, Earth Surf. Dynam., 8, 379–397, <ext-link xlink:href="https://doi.org/10.5194/esurf-8-379-2020" ext-link-type="DOI">10.5194/esurf-8-379-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx8"><label>Barr et al.(2015)</label><mixed-citation>Barr, E. T., Harman, M., McMinn, P., Shahbaz, M., and Yoo, S.: The Oracle Problem in Software Testing: A Survey, IEEE T. Software Eng., 41, 507–525, <ext-link xlink:href="https://doi.org/10.1109/TSE.2014.2372785" ext-link-type="DOI">10.1109/TSE.2014.2372785</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx9"><label>Bartelheimer et al.(2022)</label><mixed-citation>Bartelheimer, C., zur Heiden, P., Lüttenberg, H., and Beverungen, D.: Systematizing the lexicon of platforms in information systems: a data-driven study, Electron. Mark., 32, 375–396, <ext-link xlink:href="https://doi.org/10.1007/s12525-022-00530-6" ext-link-type="DOI">10.1007/s12525-022-00530-6</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx10"><label>Beck(2003)</label><mixed-citation> Beck, K.: Test-Driven Development: By Example, Addison-Wesley, ISBN 0-321-14653-0, 2003.</mixed-citation></ref>
      <ref id="bib1.bibx11"><label>Berlin and Anderson(2007)</label><mixed-citation>Berlin, M. M. and Anderson, R. S.: Modeling of knickpoint retreat on the Roan Plateau, western Colorado, J. Geophys. Res.-Earth, 112, <ext-link xlink:href="https://doi.org/10.1029/2006JF000553" ext-link-type="DOI">10.1029/2006JF000553</ext-link>, 2007. </mixed-citation></ref>
      <ref id="bib1.bibx12"><label>Bernhardt and Schwanghart(2021)</label><mixed-citation>Bernhardt, A. and Schwanghart, W.: Where and why do submarine canyons remain connected to the shore during sea-level rise? Insights from global topographic analysis and Bayesian regression, Geophys. Res. Lett., 48, e2020GL092234, <ext-link xlink:href="https://doi.org/10.1029/2020GL092234" ext-link-type="DOI">10.1029/2020GL092234</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx13"><label>Bernhardt and Schwanghart(2025)</label><mixed-citation>Bernhardt, A. and Schwanghart, W.: Seafloor slopes control submarine canyon distribution: a global analysis, Science Advances, 11, eadv3942, <ext-link xlink:href="https://doi.org/10.1126/sciadv.adv3942" ext-link-type="DOI">10.1126/sciadv.adv3942</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx14"><label>Bertrand et al.(2021)</label><mixed-citation>Bertrand, P., Vihtakari, M., Yoccoz, N. G., Strøm, H., Descamps, S., Steen, H., Duarte, P., Hop, H., Assmy, P., Patrick, S. C., Bertrand, P., Bêty, J., Kohler, J., Pelt, W. v., Harris, S. M., Wold, A., and Moholdt, G.: Feeding at the front line: interannual variation in the use of glacier fronts by foraging black-legged kittiwakes, Mar. Ecol. Prog. Ser., 677, 197–208, <ext-link xlink:href="https://doi.org/10.3354/meps13869" ext-link-type="DOI">10.3354/meps13869</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx15"><label>Bovy and Lange(2023)</label><mixed-citation>Bovy, B. and Lange, R.: fastscape-lem/fastscape: Release v0.1.0, Version 0.1.0, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.8375653" ext-link-type="DOI">10.5281/zenodo.8375653</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx16"><label>Braun and Willett(2013)</label><mixed-citation>Braun, J. and Willett, S. D.: A very efficient <inline-formula><mml:math id="M80" display="inline"><mml:mrow><mml:mi>O</mml:mi><mml:mo>(</mml:mo><mml:mi>n</mml:mi><mml:mo>)</mml:mo></mml:mrow></mml:math></inline-formula>, implicit and parallel method to solve the stream power equation governing fluvial incision and landscape evolution, Geomorphology, 180–181, 170–179, <ext-link xlink:href="https://doi.org/10.1016/j.geomorph.2012.10.008" ext-link-type="DOI">10.1016/j.geomorph.2012.10.008</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx17"><label>Campforts et al.(2017)</label><mixed-citation>Campforts, B., Schwanghart, W., and Govers, G.: Accurate simulation of transient landscape evolution by eliminating numerical diffusion: the TTLEM 1.0 model, Earth Surf. Dynam., 5, 47–66, <ext-link xlink:href="https://doi.org/10.5194/esurf-5-47-2017" ext-link-type="DOI">10.5194/esurf-5-47-2017</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx18"><label>Chen et al.(2018)</label><mixed-citation>Chen, T. Y., Kuo, F.-C., Liu, H., Poon, P.-L., Towey, D., Tse, T. H., and Zhou, Z. Q.: Metamorphic testing: a review of challenges and opportunities, ACM Comput. Surv., 51, <ext-link xlink:href="https://doi.org/10.1145/3143561" ext-link-type="DOI">10.1145/3143561</ext-link>, 2018.</mixed-citation></ref>
      <ref id="bib1.bibx19"><label>Culberg et al.(2022)</label><mixed-citation>Culberg, R., Schroeder, D. M., and Steinbrügge, G.: Double ridge formation over shallow water sills on Jupiter's moon Europa, Nat. Commun., 13, 2007, <ext-link xlink:href="https://doi.org/10.1038/s41467-022-29458-3" ext-link-type="DOI">10.1038/s41467-022-29458-3</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx20"><label>Davy et al.(2017)</label><mixed-citation>Davy, P., Croissant, T., and Lague, D.: A precipiton method to calculate river hydrodynamics, with applications to flood prediction, landscape evolution models, and braiding instabilities, J. Geophys. Res.-Earth, 122, 1491–1512, <ext-link xlink:href="https://doi.org/10.1002/2016JF004156" ext-link-type="DOI">10.1002/2016JF004156</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx21"><label>Dawson et al.(2026)</label><mixed-citation>Dawson, N., Fischer, J., Kuhn, M., Pasotti, A., Rouzaud, D., mhugent, Bruy, A., Sutton, T., Dobias, M., Pellerin, M., Rouault, E., Olaya, V., Blottiere, P., Macho, W., Cabieces, J., Blazek, R., Bartoletti, L., Sherman, G., Sant-anna, H., Woodrow, N., signedav, Natsis, S., rldhont, Felder, J., Shaffer, L., Belgacem, N., Santilli, S., Larosa, S., Mani, S., and Jurgiel, B.: qgis/QGIS: 4.2.2, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.22144220" ext-link-type="DOI">10.5281/zenodo.22144220</ext-link>, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx22"><label>Delchiaro et al.(2025)</label><mixed-citation>Delchiaro, M., Ruscitto, V., Schwanghart, W., Brignone, E., Piacentini, D., and Troiani, F.: BankfullMapper: a semi-automated MATLAB tool on high-resolution digital terrain models for spatio-temporal monitoring of bankfull geometry and discharge, Comput. Geosci., 205, 106001, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2025.106001" ext-link-type="DOI">10.1016/j.cageo.2025.106001</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx23"><label>European Space Agency(2024)</label><mixed-citation>European Space Agency: Copernicus Global Digital Elevation Model, OpenTopography [data set], <ext-link xlink:href="https://doi.org/10.5069/G9028PQB" ext-link-type="DOI">10.5069/G9028PQB</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx24"><label>Fabian(2018)</label><mixed-citation>Fabian, R.: Data-oriented design, <uri>https://www.dataorienteddesign.com/dodbook</uri>  (last access: 6 November 2026), 2018.</mixed-citation></ref>
      <ref id="bib1.bibx25"><label>Falco et al.(2024)</label><mixed-citation>Falco, N., Wainwright, H. M., Chadwick, K. D., Dafflon, B., Enquist, B. J., Uhlemann, S., Breckheimer, I. K., Lamb, J., Chen, J., Tuvshintugs, O., Balde, A., Williams, K. H., and Brodie, E. L.: Ecoimaging: advanced sensing to investigate plant and abiotic hierarchical spatial patterns in mountainous watersheds, SSRN, <ext-link xlink:href="https://doi.org/10.2139/ssrn.4779350" ext-link-type="DOI">10.2139/ssrn.4779350</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx26"><label>Feathers(2004)</label><mixed-citation> Feathers, M. C.: Working Effectively with Legacy Code, Pearson, ISBN 9780131177055, 2004.</mixed-citation></ref>
      <ref id="bib1.bibx27"><label>Fisher and Tate(2006)</label><mixed-citation>Fisher, P. F. and Tate, N. J.: Causes and consequences of error in digital elevation models, Progress in Physical Geography: Earth and Environment, 30, 467–489, <ext-link xlink:href="https://doi.org/10.1191/0309133306pp492ra" ext-link-type="DOI">10.1191/0309133306pp492ra</ext-link>, 2006.</mixed-citation></ref>
      <ref id="bib1.bibx28"><label>Forte and Whipple(2019)</label><mixed-citation>Forte, A. M. and Whipple, K. X.: Short communication: The Topographic Analysis Kit (TAK) for TopoToolbox, Earth Surf. Dynam., 7, 87–95, <ext-link xlink:href="https://doi.org/10.5194/esurf-7-87-2019" ext-link-type="DOI">10.5194/esurf-7-87-2019</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx29"><label>Gailleton et al.(2024)</label><mixed-citation>Gailleton, B., Steer, P., Davy, P., Schwanghart, W., and Bernard, T.: GraphFlood 1.0: an efficient algorithm to approximate 2D hydrodynamics for landscape evolution models, Earth Surf. Dynam., 12, 1295–1313, <ext-link xlink:href="https://doi.org/10.5194/esurf-12-1295-2024" ext-link-type="DOI">10.5194/esurf-12-1295-2024</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx30"><label>Gallen(2017)</label><mixed-citation>Gallen, S. F.: ChiProfiler, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.597335" ext-link-type="DOI">10.5281/zenodo.597335</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx31"><label>GDAL/OGR contributors(2025)</label><mixed-citation>GDAL/OGR contributors: GDAL/OGR Geospatial Data Abstraction softwareLibrary, Open Source Geospatial Foundation, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.5884351" ext-link-type="DOI">10.5281/zenodo.5884351</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx32"><label>Gillen et al.(2025)</label><mixed-citation>Gillen, M. N., Ashton, A. D., and Perron, J. T.: Rivers influence reef pass formation in the Society Islands, Geophys. Res. Lett., 52, e2025GL114881, <ext-link xlink:href="https://doi.org/10.1029/2025GL114881" ext-link-type="DOI">10.1029/2025GL114881</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx33"><label>Gillies et al.(2013)</label><mixed-citation>Gillies, S. et al.: Rasterio: geospatial raster I/O for Python programmers, GitHub [code], <uri>https://github.com/rasterio/rasterio</uri> (last access: 6 November 2026), 2013.</mixed-citation></ref>
      <ref id="bib1.bibx34"><label>Goldstein et al.(2024)</label><mixed-citation>Goldstein, H., Cutler, J. W., Dickstein, D., Pierce, B. C., and Head, A.: Property-based testing in practice, in: Proceedings of the IEEE/ACM 46th International Conference on Software Engineering, ICSE '24, Association for Computing Machinery, New York, NY, USA, ISBN 9798400702174, <ext-link xlink:href="https://doi.org/10.1145/3597503.3639581" ext-link-type="DOI">10.1145/3597503.3639581</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx35"><label>Greene et al.(2017)</label><mixed-citation>Greene, C. A., Gwyther, D. E., and Blankenship, D. D.: Antarctic mapping tools for Matlab, Comput. Geosci., 104, 151–157, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2016.08.003" ext-link-type="DOI">10.1016/j.cageo.2016.08.003</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx36"><label>Grohmann et al.(2026)</label><mixed-citation>Grohmann, C. H., Lecours, V., and Reuter, H. I.: Overview of software packages used in geomorphometry, in: Geomorphometry, edited by: Reuter, H. I., Grohmann, C. H., and Lecours, V., Vol. 37 of Developments in Soil Science, Elsevier, <ext-link xlink:href="https://doi.org/10.1016/B978-0-44-333376-7.00021-5" ext-link-type="DOI">10.1016/B978-0-44-333376-7.00021-5</ext-link>, 371–383, 2026.</mixed-citation></ref>
      <ref id="bib1.bibx37"><label>Hergarten(2024a)</label><mixed-citation>Hergarten, S.: Scaling between volume and runout of rock avalanches explained by a modified Voellmy rheology, Earth Surf. Dynam., 12, 219–229, <ext-link xlink:href="https://doi.org/10.5194/esurf-12-219-2024" ext-link-type="DOI">10.5194/esurf-12-219-2024</ext-link>, 2024a.</mixed-citation></ref>
      <ref id="bib1.bibx38"><label>Hergarten(2024b)</label><mixed-citation>Hergarten, S.: MinVoellmy v1: a lightweight model for simulating rapid mass movements based on a modified Voellmy rheology, Geosci. Model Dev., 17, 781–794, <ext-link xlink:href="https://doi.org/10.5194/gmd-17-781-2024" ext-link-type="DOI">10.5194/gmd-17-781-2024</ext-link>, 2024b.</mixed-citation></ref>
      <ref id="bib1.bibx39"><label>Hergarten and Neugebauer(2001)</label><mixed-citation>Hergarten, S. and Neugebauer, H. J.: Self-organized critical drainage networks, Phys. Rev. Lett., 86, 2689–2692, <ext-link xlink:href="https://doi.org/10.1103/PhysRevLett.86.2689" ext-link-type="DOI">10.1103/PhysRevLett.86.2689</ext-link>, 2001.</mixed-citation></ref>
      <ref id="bib1.bibx40"><label>Hijmans(2025)</label><mixed-citation>Hijmans, R. J.: terra: Spatial Data Analysis, r package version 1.8-58, <uri>https://rspatial.org/</uri> (last access: 6 November 2026), 2025.</mixed-citation></ref>
      <ref id="bib1.bibx41"><label>Hobley et al.(2017)</label><mixed-citation>Hobley, D. E. J., Adams, J. M., Nudurupati, S. S., Hutton, E. W. H., Gasparini, N. M., Istanbulluoglu, E., and Tucker, G. E.: Creative computing with Landlab: an open-source toolkit for building, coupling, and exploring two-dimensional numerical models of Earth-surface dynamics, Earth Surf. Dynam., 5, 21–46, <ext-link xlink:href="https://doi.org/10.5194/esurf-5-21-2017" ext-link-type="DOI">10.5194/esurf-5-21-2017</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx42"><label>Hunter et al.(2024)</label><mixed-citation>Hunter, B. D., Roering, J. J., Silva, L. C. R., and Moreland, K. C.: Geomorphic controls on the abundance and persistence of soil organic carbon pools in erosional landscapes, Nat. Geosci., 17, 151–157, <ext-link xlink:href="https://doi.org/10.1038/s41561-023-01365-2" ext-link-type="DOI">10.1038/s41561-023-01365-2</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx43"><label>Hutton et al.(2020)</label><mixed-citation>Hutton, E., Barnhart, K., Hobley, D., Tucker, G., Nudurupati, S. S., Adams, J., Gasparini, N. M., Shobe, C., Strauch, R., Knuth, J., margauxmouchene, Lyons, N., DavidLitwin, Glade, R., Giuseppecipolla95, Manaster, A., alangston, Thyng, K., and Rengers, F.: landlab/landlab: Mrs. Weasley, Version v2.0.1, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.3776837" ext-link-type="DOI">10.5281/zenodo.3776837</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx44"><label>Institut national de l'information géographique et forestière (IGN)(2024)</label><mixed-citation>Institut national de l'information géographique et forestière (IGN): BD ALTI<sup>®</sup> 25 <inline-formula><mml:math id="M81" display="inline"><mml:mrow class="unit"><mml:mi mathvariant="normal">m</mml:mi></mml:mrow></mml:math></inline-formula>, <uri>https://cartes.gouv.fr/rechercher-une-donnee/dataset/IGNF_BD-ALTI</uri> (last access: 6 November 2026), 2024.</mixed-citation></ref>
      <ref id="bib1.bibx45"><label>Jakob et al.(2017)</label><mixed-citation>Jakob, W., Rhinelander, J., and Moldovan, D.: pybind11 – Seamless operability between C++11 and Python, GitHub [code], <uri>https://github.com/pybind/pybind11</uri> (last access: 6 November 2026), 2017.</mixed-citation></ref>
      <ref id="bib1.bibx46"><label>Karlstrom and Yang(2016)</label><mixed-citation>Karlstrom, L. and Yang, K.: Fluvial supraglacial landscape evolution on the Greenland Ice Sheet, Geophys. Res. Lett., 43, 2683–2692, <ext-link xlink:href="https://doi.org/10.1002/2016GL067697" ext-link-type="DOI">10.1002/2016GL067697</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx47"><label>Kearney(2026)</label><mixed-citation>Kearney, W. S.: TopoToolbox: Contribution Guidelines,  <uri>https://topotoolbox.github.io/contributing.html</uri>, last access: 5 March 2026.</mixed-citation></ref>
      <ref id="bib1.bibx48"><label>Kearney et al.(2026a)</label><mixed-citation>Kearney, W., Gailleton, B., Arnau, G., Bringezu, T., Katerndahl, F., Lenz, K., and Schwanghart, W.: TopoToolbox/libtopotoolbox: 2026-W20, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.20269315" ext-link-type="DOI">10.5281/zenodo.20269315</ext-link>, 2026a.</mixed-citation></ref>
      <ref id="bib1.bibx49"><label>Kearney et al.(2026b)</label><mixed-citation>Kearney, W., Gailleton, B., Bringezu, T., Arnau, G., Malatesta, L., Faure, F., and Ye, X.: TopoToolbox/pytopotoolbox: v0.0.11, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.20209621" ext-link-type="DOI">10.5281/zenodo.20209621</ext-link>, 2026b.</mixed-citation></ref>
      <ref id="bib1.bibx50"><label>Kearney et al.(2026c)</label><mixed-citation>Kearney, W., Schwanghart, W., and Gailleton, B.: TopoToolbox/gallery: release-20260518-4, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.20270725" ext-link-type="DOI">10.5281/zenodo.20270725</ext-link>, 2026c.</mixed-citation></ref>
      <ref id="bib1.bibx51"><label>Kearney et al.(2026d)</label><mixed-citation>Kearney, W., Schwanghart, W., Scherler, D., Ott, R., and Arnau, G.: TopoToolbox/topotoolbox3: release-20260521-1, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.20322894" ext-link-type="DOI">10.5281/zenodo.20322894</ext-link>, 2026d.</mixed-citation></ref>
      <ref id="bib1.bibx52"><label>Kelly and Sanders(2008)</label><mixed-citation>Kelly, D. and Sanders, R.: The challenge of testing scientific software, in: Conference for the Association of Software Testing,   <uri>https://associationforsoftwaretesting.org/conference/cast-archive/cast-2008/</uri> (last access: 6 November 2026), 2008.</mixed-citation></ref>
      <ref id="bib1.bibx53"><label>Kneib et al.(2024)</label><mixed-citation>Kneib, M., Dehecq, A., Brun, F., Karbou, F., Charrier, L., Leinss, S., Wagnon, P., and Maussion, F.: Mapping and characterization of avalanches on mountain glaciers with Sentinel-1 satellite imagery, The Cryosphere, 18, 2809–2830, <ext-link xlink:href="https://doi.org/10.5194/tc-18-2809-2024" ext-link-type="DOI">10.5194/tc-18-2809-2024</ext-link>, 2024.</mixed-citation></ref>
      <ref id="bib1.bibx54"><label>Lai et al.(2025)</label><mixed-citation>Lai, L. S.-H., Booth, A. M., Duvall, A. R., and Herzig, E.: Short communication: Multiscale topographic complexity analysis with pyTopoComplexity, Earth Surf. Dynam., 13, 417–435, <ext-link xlink:href="https://doi.org/10.5194/esurf-13-417-2025" ext-link-type="DOI">10.5194/esurf-13-417-2025</ext-link>, 2025.</mixed-citation></ref>
      <ref id="bib1.bibx55"><label>Lindsay(2016)</label><mixed-citation>Lindsay, J.: Whitebox GAT: a case study in geomorphometric analysis, Comput. Geosci., 95, 75–84, <ext-link xlink:href="https://doi.org/10.1016/j.cageo.2016.07.003" ext-link-type="DOI">10.1016/j.cageo.2016.07.003</ext-link>, 2016.</mixed-citation></ref>
      <ref id="bib1.bibx56"><label>MacKie et al.(2021)</label><mixed-citation>MacKie, E. J., Schroeder, D. M., Zuo, C., Yin, Z., and Caers, J.: Stochastic modeling of subglacial topography exposes uncertainty in water routing at Jakobshavn Glacier, J. Glaciol., 67, 75–83, <ext-link xlink:href="https://doi.org/10.1017/jog.2020.84" ext-link-type="DOI">10.1017/jog.2020.84</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx57"><label>Mudd et al.(2019)</label><mixed-citation>Mudd, S. M., Clubb, F. J., Grieve, S. W. D., Milodowski, D. T., Hurst, M. D., Gailleton, B., and Valters, D. A.: LSDTopoTools2, Zenodo [code], <ext-link xlink:href="https://doi.org/10.5281/zenodo.3245041" ext-link-type="DOI">10.5281/zenodo.3245041</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx58"><label>O'Callaghan and Mark(1984)</label><mixed-citation>O'Callaghan, J. F. and Mark, D. M.: The extraction of drainage networks from digital elevation data, Comput. Vision Graph., 28, 323–344, <ext-link xlink:href="https://doi.org/10.1016/S0734-189X(84)80011-0" ext-link-type="DOI">10.1016/S0734-189X(84)80011-0</ext-link>, 1984.</mixed-citation></ref>
      <ref id="bib1.bibx59"><label>Perron and Royden(2013)</label><mixed-citation>Perron, J. T. and Royden, L.: An integral approach to bedrock river profile analysis, Earth Surf. Proc. Land., 38, 570–576, <ext-link xlink:href="https://doi.org/10.1002/esp.3302" ext-link-type="DOI">10.1002/esp.3302</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx60"><label>Purinton and Bookhagen(2017)</label><mixed-citation>Purinton, B. and Bookhagen, B.: Validation of digital elevation models (DEMs) and comparison of geomorphic metrics on the southern Central Andean Plateau, Earth Surf. Dynam., 5, 211–237, <ext-link xlink:href="https://doi.org/10.5194/esurf-5-211-2017" ext-link-type="DOI">10.5194/esurf-5-211-2017</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx61"><label>Remy(2005)</label><mixed-citation>Remy, N.: S-GeMS: The Stanford geostatistical modeling software: a tool for new algorithms development, in: Geostatistics Banff 2004, edited by: Leuangthong, O. and Deutsch, C. V., Springer Netherlands, Dordrecht, 865–871, <ext-link xlink:href="https://doi.org/10.1007/978-1-4020-3610-1_89" ext-link-type="DOI">10.1007/978-1-4020-3610-1_89</ext-link>, ISBN 978-1-4020-3610-1, 2005.</mixed-citation></ref>
      <ref id="bib1.bibx62"><label>Rocklin(2015)</label><mixed-citation>Rocklin, M.: Dask: parallel computations with blocked algorithms and task scheduling, in: Proceedings of the 14th Python in Science Conference, <ext-link xlink:href="https://doi.org/10.25080/Majora-7b98e3ed-013" ext-link-type="DOI">10.25080/Majora-7b98e3ed-013</ext-link>, 2015.</mixed-citation></ref>
      <ref id="bib1.bibx63"><label>Scherler and Schwanghart(2020)</label><mixed-citation>Scherler, D. and Schwanghart, W.: Drainage divide networks – Part 1: Identification and ordering in digital elevation models, Earth Surf. Dynam., 8, 245–259, <ext-link xlink:href="https://doi.org/10.5194/esurf-8-245-2020" ext-link-type="DOI">10.5194/esurf-8-245-2020</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx64"><label>Schwanghart and Kuhn(2010)</label><mixed-citation>Schwanghart, W. and Kuhn, N. J.: TopoToolbox: a set of Matlab functions for topographic analysis, Environ. Modell. Softw., 25, 770–781, <ext-link xlink:href="https://doi.org/10.1016/j.envsoft.2009.12.002" ext-link-type="DOI">10.1016/j.envsoft.2009.12.002</ext-link>, 2010.</mixed-citation></ref>
      <ref id="bib1.bibx65"><label>Schwanghart and Scherler(2014)</label><mixed-citation>Schwanghart, W. and Scherler, D.: Short Communication: TopoToolbox 2 – MATLAB-based software for topographic analysis and modeling in Earth surface sciences, Earth Surf. Dynam., 2, 1–7, <ext-link xlink:href="https://doi.org/10.5194/esurf-2-1-2014" ext-link-type="DOI">10.5194/esurf-2-1-2014</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx66"><label>Schwanghart and Scherler(2017)</label><mixed-citation>Schwanghart, W. and Scherler, D.: Bumps in river profiles: uncertainty assessment and smoothing using quantile regression techniques, Earth Surf. Dynam., 5, 821–839, <ext-link xlink:href="https://doi.org/10.5194/esurf-5-821-2017" ext-link-type="DOI">10.5194/esurf-5-821-2017</ext-link>, 2017.</mixed-citation></ref>
      <ref id="bib1.bibx67"><label>Schwanghart et al.(2013)</label><mixed-citation>Schwanghart, W., Groom, G., Kuhn, N. J., and Heckrath, G.: Flow network derivation from a high resolution DEM in a low relief, agrarian landscape, Earth Surf. Proc. Land., 38, 1576–1586, <ext-link xlink:href="https://doi.org/10.1002/esp.3452" ext-link-type="DOI">10.1002/esp.3452</ext-link>, 2013.</mixed-citation></ref>
      <ref id="bib1.bibx68"><label>Schwanghart et al.(2021)</label><mixed-citation>Schwanghart, W., Molkenthin, C., and Scherler, D.: A systematic approach and software for the analysis of point patterns on river networks, Earth Surf. Proc. Land., 46, 1847–1862, <ext-link xlink:href="https://doi.org/10.1002/esp.5127" ext-link-type="DOI">10.1002/esp.5127</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx69"><label>Smith et al.(2019)</label><mixed-citation>Smith, T., Rheinwalt, A., and Bookhagen, B.: TopoMetricUncertainty – Calculating Topographic Metric Uncertainty and Optimal Grid Resolution, GFZ Data Services [data set], <ext-link xlink:href="https://doi.org/10.5880/fidgeo.2019.017" ext-link-type="DOI">10.5880/fidgeo.2019.017</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx70"><label>Steer(2021)</label><mixed-citation>Steer, P.: Short communication: Analytical models for 2D landscape evolution, Earth Surf. Dynam., 9, 1239–1250, <ext-link xlink:href="https://doi.org/10.5194/esurf-9-1239-2021" ext-link-type="DOI">10.5194/esurf-9-1239-2021</ext-link>, 2021.</mixed-citation></ref>
      <ref id="bib1.bibx71"><label>Stolle et al.(2019)</label><mixed-citation>Stolle, A., Schwanghart, W., Andermann, C., Bernhardt, A., Fort, M., Jansen, J. D., Wittmann, H., Merchel, S., Rugel, G., Adhikari, B. R., and Korup, O.: Protracted river response to medieval earthquakes, Earth Surf. Proc. Land., 44, 331–341, <ext-link xlink:href="https://doi.org/10.1002/esp.4517" ext-link-type="DOI">10.1002/esp.4517</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx72"><label>Swirad and Young(2022)</label><mixed-citation>Swirad, Z. M. and Young, A. P.: CliffDelineaTool v1.2.0: an algorithm for identifying coastal cliff base and top positions, Geosci. Model Dev., 15, 1499–1512, <ext-link xlink:href="https://doi.org/10.5194/gmd-15-1499-2022" ext-link-type="DOI">10.5194/gmd-15-1499-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx73"><label>Tangi et al.(2019)</label><mixed-citation>Tangi, M., Schmitt, R., Bizzi, S., and Castelletti, A.: The CASCADE toolbox for analyzing river sediment connectivity and management, Environ. Modell. Softw., 119, 400–406, <ext-link xlink:href="https://doi.org/10.1016/j.envsoft.2019.07.008" ext-link-type="DOI">10.1016/j.envsoft.2019.07.008</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx74"><label>Tarboton and Baker(2008)</label><mixed-citation>Tarboton, D. G. and Baker, M. E.: Toward an algebra from terrain-based flow analysis, in: Representing, Modeling and Visualizing the Natural Environment, edited by: Mount, N., Harvey, G. L., Aplin, P., and Priestnall, G., CRC Press, <ext-link xlink:href="https://doi.org/10.1201/9781420055504" ext-link-type="DOI">10.1201/9781420055504</ext-link>, 2008.</mixed-citation></ref>
      <ref id="bib1.bibx75"><label>Tennant et al.(2023)</label><mixed-citation>Tennant, E., Jenkins, S. F., and Biass, S.: FlowDIR: a MATLAB tool for rapidly and probabilistically forecasting the travel directions of volcanic flows, Journal of Applied Volcanology, 12, 10, <ext-link xlink:href="https://doi.org/10.1186/s13617-023-00136-3" ext-link-type="DOI">10.1186/s13617-023-00136-3</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx76"><label>The MathWorks Inc.(2022)</label><mixed-citation>The MathWorks Inc.: MATLAB, <uri>https://www.mathworks.com</uri> (last access: 6 November 2026), 2022.</mixed-citation></ref>
      <ref id="bib1.bibx77"><label>Val et al.(2022)</label><mixed-citation>Val, P., Lyons, N. J., Gasparini, N., Willenbring, J. K., and Albert, J. S.: Landscape evolution as a diversification driver in freshwater fishes, Frontiers in Ecology and Evolution, 9, <ext-link xlink:href="https://doi.org/10.3389/fevo.2021.788328" ext-link-type="DOI">10.3389/fevo.2021.788328</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx78"><label>Van Wyk de Vries et al.(2023)</label><mixed-citation>Van Wyk de Vries, M., Romero, M., Penprase, S. B., Ng, G.-H. C., and Wickert, A. D.: Increasing rate of 21st century volume loss of the Patagonian icefields measured from proglacial river discharge, J. Glaciol., 69, 1187–1202, <ext-link xlink:href="https://doi.org/10.1017/jog.2023.9" ext-link-type="DOI">10.1017/jog.2023.9</ext-link>, 2023.</mixed-citation></ref>
      <ref id="bib1.bibx79"><label>Voigtländer et al.(2024)</label><mixed-citation>Voigtländer, A., Rheinwalt, A., and Tofelde, S.: Quantifying Earth's topography: steeper and larger than projected in digital terrain models, Geophys. Res. Lett., 51, e2024GL109517, <ext-link xlink:href="https://doi.org/10.1029/2024GL109517" ext-link-type="DOI">10.1029/2024GL109517</ext-link>, 2024. </mixed-citation></ref>
      <ref id="bib1.bibx80"><label>Wainwright et al.(2020)</label><mixed-citation>Wainwright, H. M., Steefel, C., Trutner, S. D., Henderson, A. N., Nikolopoulos, E. I., Wilmer, C. F., Chadwick, K. D., Falco, N., Schaettle, K. B., Brown, J. B., Steltzer, H., Williams, K. H., Hubbard, S. S., and Enquist, B. J.: Satellite-derived foresummer drought sensitivity of plant productivity in Rocky Mountain headwater catchments: spatial heterogeneity and geological-geomorphological control, Environ. Res. Lett., 15, 084018, <ext-link xlink:href="https://doi.org/10.1088/1748-9326/ab8fd0" ext-link-type="DOI">10.1088/1748-9326/ab8fd0</ext-link>, 2020.</mixed-citation></ref>
      <ref id="bib1.bibx81"><label>Wainwright et al.(2022)</label><mixed-citation>Wainwright, H. M., Uhlemann, S., Franklin, M., Falco, N., Bouskill, N. J., Newcomer, M. E., Dafflon, B., Siirila-Woodburn, E. R., Minsley, B. J., Williams, K. H., and Hubbard, S. S.: Watershed zonation through hillslope clustering for tractably quantifying above- and below-ground watershed heterogeneity and functions, Hydrol. Earth Syst. Sci., 26, 429–444, <ext-link xlink:href="https://doi.org/10.5194/hess-26-429-2022" ext-link-type="DOI">10.5194/hess-26-429-2022</ext-link>, 2022.</mixed-citation></ref>
      <ref id="bib1.bibx82"><label>Ward et al.(2019)</label><mixed-citation>Ward, A. S., Wondzell, S. M., Schmadel, N. M., Herzog, S., Zarnetske, J. P., Baranov, V., Blaen, P. J., Brekenfeld, N., Chu, R., Derelle, R., Drummond, J., Fleckenstein, J. H., Garayburu-Caruso, V., Graham, E., Hannah, D., Harman, C. J., Hixson, J., Knapp, J. L. A., Krause, S., Kurz, M. J., Lewandowski, J., Li, A., Martí, E., Miller, M., Milner, A. M., Neil, K., Orsini, L., Packman, A. I., Plont, S., Renteria, L., Roche, K., Royer, T., Segura, C., Stegen, J., Toyoda, J., Hager, J., and Wisnoski, N. I.: Spatial and temporal variation in river corridor exchange across a 5th-order mountain stream network, Hydrol. Earth Syst. Sci., 23, 5199–5225, <ext-link xlink:href="https://doi.org/10.5194/hess-23-5199-2019" ext-link-type="DOI">10.5194/hess-23-5199-2019</ext-link>, 2019.</mixed-citation></ref>
      <ref id="bib1.bibx83"><label>Wickert and Gasparini(2026)</label><mixed-citation>Wickert, A. and Gasparini, N.: Modeling Hillslopes and Channels with Landlab, <uri>https://landlab.csdms.io/teaching/geomorphology_exercises/drainage_density_notebooks/drainage_density_class_notebook.html</uri>, last access: 5 March 2026.</mixed-citation></ref>
      <ref id="bib1.bibx84"><label>Willett et al.(2014)</label><mixed-citation>Willett, S. D., McCoy, S. W., Perron, J. T., Goren, L., and Chen, C.-Y.: Dynamic reorganization of river basins, Science, 343, 1248765, <ext-link xlink:href="https://doi.org/10.1126/science.1248765" ext-link-type="DOI">10.1126/science.1248765</ext-link>, 2014.</mixed-citation></ref>
      <ref id="bib1.bibx85"><label>Winterberg and Willett(2019)</label><mixed-citation>Winterberg, S. and Willett, S. D.: Greater Alpine river network evolution, interpretations based on novel drainage analysis, Swiss J. Geosci., 112, 3–22, <ext-link xlink:href="https://doi.org/10.1007/s00015-018-0332-5" ext-link-type="DOI">10.1007/s00015-018-0332-5</ext-link>, 2019.</mixed-citation></ref>

  </ref-list></back>
    <!--<article-title-html>TopoToolbox 3, a laboratory for quantitative geomorphology</article-title-html>
<abstract-html/>
<ref-html id="bib1.bib1"><label>Arakawa et al.(2020)</label><mixed-citation>
       Arakawa, M., Saiki, T., Wada, K., Ogawa, K., Kadono, T., Shirai, K., Sawada, H., Ishibashi, K., Honda, R., Sakatani, N., Iijima, Y., Okamoto, C., Yano, H., Takagi, Y., Hayakawa, M., Michel, P., Jutzi, M., Shimaki, Y., Kimura, S., Mimasu, Y., Toda, T., Imamura, H., Nakazawa, S., Hayakawa, H., Sugita, S., Morota, T., Kameda, S., Tatsumi, E., Cho, Y., Yoshioka, K., Yokota, Y., Matsuoka, M., Yamada, M., Kouyama, T., Honda, C., Tsuda, Y., Watanabe, S., Yoshikawa, M., Tanaka, S., Terui, F., Kikuchi, S., Yamaguchi, T., Ogawa, N., Ono, G., Yoshikawa, K., Takahashi, T., Takei, Y., Fujii, A., Takeuchi, H., Yamamoto, Y., Okada, T., Hirose, C., Hosoda, S., Mori, O., Shimada, T., Soldini, S., Tsukizaki, R., Iwata, T., Ozaki, M., Abe, M., Namiki, N., Kitazato, K., Tachibana, S., Ikeda, H., Hirata, N., Hirata, N., Noguchi, R., and Miura, A.: An artificial impact on the asteroid (162173) Ryugu formed a crater in the gravity-dominated regime, Science, 368, 67–71, <a href="https://doi.org/10.1126/science.aaz1701" target="_blank">https://doi.org/10.1126/science.aaz1701</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib2"><label>Arge et al.(2003)</label><mixed-citation>
       Arge, L., Chase, J. S., Halpin, P., Toma, L., Vitter, J. S., Urban, D., and Wickremesinghe, R.: Efficient flow computation on massive grid terrain datasets, GeoInformatica, 7, 283–313, <a href="https://doi.org/10.1023/a:1025526421410" target="_blank">https://doi.org/10.1023/a:1025526421410</a>, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib3"><label>Armitage(2019)</label><mixed-citation>
       Armitage, J. J.: Short communication: flow as distributed lines within the landscape, Earth Surf. Dynam., 7, 67–75, <a href="https://doi.org/10.5194/esurf-7-67-2019" target="_blank">https://doi.org/10.5194/esurf-7-67-2019</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib4"><label>Barker et al.(2022)</label><mixed-citation>
       Barker, M., Chue Hong, N. P., Katz, D. S., Lamprecht, A.-L., Martinez-Ortiz, C., Psomopoulos, F., Harrow, J., Castro, L. J., Gruenpeter, M., Martinez, P. A., and Honeyman, T.: Introducing the FAIR principles for research software, Scientific Data, 9, 622, <a href="https://doi.org/10.1038/s41597-022-01710-x" target="_blank">https://doi.org/10.1038/s41597-022-01710-x</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib5"><label>Barnes(2016)</label><mixed-citation>
       Barnes, R.: Parallel priority-flood depression filling for trillion cell digital elevation models on desktops or clusters, Comput. Geosci., 96, 56–68, <a href="https://doi.org/10.1016/j.cageo.2016.07.001" target="_blank">https://doi.org/10.1016/j.cageo.2016.07.001</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib6"><label>Barnes(2017)</label><mixed-citation>
       Barnes, R.: Parallel non-divergent flow accumulation for trillion cell digital elevation models on desktops or clusters, Environ. Modell. Softw., 92, 202–212, <a href="https://doi.org/10.1016/j.envsoft.2017.02.022" target="_blank">https://doi.org/10.1016/j.envsoft.2017.02.022</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib7"><label>Barnhart et al.(2020)</label><mixed-citation>
       Barnhart, K. R., Hutton, E. W. H., Tucker, G. E., Gasparini, N. M., Istanbulluoglu, E., Hobley, D. E. J., Lyons, N. J., Mouchene, M., Nudurupati, S. S., Adams, J. M., and Bandaragoda, C.: Short communication: Landlab v2.0: a software package for Earth surface dynamics, Earth Surf. Dynam., 8, 379–397, <a href="https://doi.org/10.5194/esurf-8-379-2020" target="_blank">https://doi.org/10.5194/esurf-8-379-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib8"><label>Barr et al.(2015)</label><mixed-citation>
       Barr, E. T., Harman, M., McMinn, P., Shahbaz, M., and Yoo, S.: The Oracle Problem in Software Testing: A Survey, IEEE T. Software Eng., 41, 507–525, <a href="https://doi.org/10.1109/TSE.2014.2372785" target="_blank">https://doi.org/10.1109/TSE.2014.2372785</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib9"><label>Bartelheimer et al.(2022)</label><mixed-citation>
       Bartelheimer, C., zur Heiden, P., Lüttenberg, H., and Beverungen, D.: Systematizing the lexicon of platforms in information systems: a data-driven study, Electron. Mark., 32, 375–396, <a href="https://doi.org/10.1007/s12525-022-00530-6" target="_blank">https://doi.org/10.1007/s12525-022-00530-6</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib10"><label>Beck(2003)</label><mixed-citation>
       Beck, K.: Test-Driven Development: By Example, Addison-Wesley, ISBN 0-321-14653-0, 2003.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib11"><label>Berlin and Anderson(2007)</label><mixed-citation>
       Berlin, M. M. and Anderson, R. S.: Modeling of knickpoint retreat on the Roan Plateau, western Colorado, J. Geophys. Res.-Earth, 112, <a href="https://doi.org/10.1029/2006JF000553" target="_blank">https://doi.org/10.1029/2006JF000553</a>, 2007.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib12"><label>Bernhardt and Schwanghart(2021)</label><mixed-citation>
       Bernhardt, A. and Schwanghart, W.: Where and why do submarine canyons remain connected to the shore during sea-level rise? Insights from global topographic analysis and Bayesian regression, Geophys. Res. Lett., 48, e2020GL092234, <a href="https://doi.org/10.1029/2020GL092234" target="_blank">https://doi.org/10.1029/2020GL092234</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib13"><label>Bernhardt and Schwanghart(2025)</label><mixed-citation>
       Bernhardt, A. and Schwanghart, W.: Seafloor slopes control submarine canyon distribution: a global analysis, Science Advances, 11, eadv3942, <a href="https://doi.org/10.1126/sciadv.adv3942" target="_blank">https://doi.org/10.1126/sciadv.adv3942</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib14"><label>Bertrand et al.(2021)</label><mixed-citation>
       Bertrand, P., Vihtakari, M., Yoccoz, N. G., Strøm, H., Descamps, S., Steen, H., Duarte, P., Hop, H., Assmy, P., Patrick, S. C., Bertrand, P., Bêty, J., Kohler, J., Pelt, W. v., Harris, S. M., Wold, A., and Moholdt, G.: Feeding at the front line: interannual variation in the use of glacier fronts by foraging black-legged kittiwakes, Mar. Ecol. Prog. Ser., 677, 197–208, <a href="https://doi.org/10.3354/meps13869" target="_blank">https://doi.org/10.3354/meps13869</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib15"><label>Bovy and Lange(2023)</label><mixed-citation>
      
Bovy, B. and Lange, R.: fastscape-lem/fastscape: Release v0.1.0, Version 0.1.0, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.8375653" target="_blank">https://doi.org/10.5281/zenodo.8375653</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib16"><label>Braun and Willett(2013)</label><mixed-citation>
       Braun, J. and Willett, S. D.: A very efficient <i>O</i>(<i>n</i>), implicit and parallel method to solve the stream power equation governing fluvial incision and landscape evolution, Geomorphology, 180–181, 170–179, <a href="https://doi.org/10.1016/j.geomorph.2012.10.008" target="_blank">https://doi.org/10.1016/j.geomorph.2012.10.008</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib17"><label>Campforts et al.(2017)</label><mixed-citation>
       Campforts, B., Schwanghart, W., and Govers, G.: Accurate simulation of transient landscape evolution by eliminating numerical diffusion: the TTLEM 1.0 model, Earth Surf. Dynam., 5, 47–66, <a href="https://doi.org/10.5194/esurf-5-47-2017" target="_blank">https://doi.org/10.5194/esurf-5-47-2017</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib18"><label>Chen et al.(2018)</label><mixed-citation>
       Chen, T. Y., Kuo, F.-C., Liu, H., Poon, P.-L., Towey, D., Tse, T. H., and Zhou, Z. Q.: Metamorphic testing: a review of challenges and opportunities, ACM Comput. Surv., 51, <a href="https://doi.org/10.1145/3143561" target="_blank">https://doi.org/10.1145/3143561</a>, 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib19"><label>Culberg et al.(2022)</label><mixed-citation>
       Culberg, R., Schroeder, D. M., and Steinbrügge, G.: Double ridge formation over shallow water sills on Jupiter's moon Europa, Nat. Commun., 13, 2007, <a href="https://doi.org/10.1038/s41467-022-29458-3" target="_blank">https://doi.org/10.1038/s41467-022-29458-3</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib20"><label>Davy et al.(2017)</label><mixed-citation>
       Davy, P., Croissant, T., and Lague, D.: A precipiton method to calculate river hydrodynamics, with applications to flood prediction, landscape evolution models, and braiding instabilities, J. Geophys. Res.-Earth, 122, 1491–1512, <a href="https://doi.org/10.1002/2016JF004156" target="_blank">https://doi.org/10.1002/2016JF004156</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib21"><label>Dawson et al.(2026)</label><mixed-citation>
       Dawson, N., Fischer, J., Kuhn, M., Pasotti, A., Rouzaud, D., mhugent, Bruy, A., Sutton, T., Dobias, M., Pellerin, M., Rouault, E., Olaya, V., Blottiere, P., Macho, W., Cabieces, J., Blazek, R., Bartoletti, L., Sherman, G., Sant-anna, H., Woodrow, N., signedav, Natsis, S., rldhont, Felder, J., Shaffer, L., Belgacem, N., Santilli, S., Larosa, S., Mani, S., and Jurgiel, B.: qgis/QGIS: 4.2.2, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.22144220" target="_blank">https://doi.org/10.5281/zenodo.22144220</a>, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib22"><label>Delchiaro et al.(2025)</label><mixed-citation>
       Delchiaro, M., Ruscitto, V., Schwanghart, W., Brignone, E., Piacentini, D., and Troiani, F.: BankfullMapper: a semi-automated MATLAB tool on high-resolution digital terrain models for spatio-temporal monitoring of bankfull geometry and discharge, Comput. Geosci., 205, 106001, <a href="https://doi.org/10.1016/j.cageo.2025.106001" target="_blank">https://doi.org/10.1016/j.cageo.2025.106001</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib23"><label>European Space Agency(2024)</label><mixed-citation>
      
European Space Agency: Copernicus Global Digital Elevation Model, OpenTopography [data set], <a href="https://doi.org/10.5069/G9028PQB" target="_blank">https://doi.org/10.5069/G9028PQB</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib24"><label>Fabian(2018)</label><mixed-citation>
      
Fabian, R.: Data-oriented design, <a href="https://www.dataorienteddesign.com/dodbook" target="_blank"/>  (last access: 6 November 2026), 2018.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib25"><label>Falco et al.(2024)</label><mixed-citation>
      
Falco, N., Wainwright, H. M., Chadwick, K. D., Dafflon, B., Enquist, B. J., Uhlemann, S., Breckheimer, I. K., Lamb, J., Chen, J., Tuvshintugs, O., Balde, A., Williams, K. H., and Brodie, E. L.: Ecoimaging: advanced sensing to investigate plant and abiotic hierarchical spatial patterns in mountainous watersheds, SSRN, <a href="https://doi.org/10.2139/ssrn.4779350" target="_blank">https://doi.org/10.2139/ssrn.4779350</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib26"><label>Feathers(2004)</label><mixed-citation>
      
Feathers, M. C.: Working Effectively with Legacy Code, Pearson, ISBN&thinsp;9780131177055, 2004.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib27"><label>Fisher and Tate(2006)</label><mixed-citation>
      
Fisher, P. F. and Tate, N. J.: Causes and consequences of error in digital elevation models, Progress in Physical Geography: Earth and Environment, 30, 467–489, <a href="https://doi.org/10.1191/0309133306pp492ra" target="_blank">https://doi.org/10.1191/0309133306pp492ra</a>, 2006.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib28"><label>Forte and Whipple(2019)</label><mixed-citation>
       Forte, A. M. and Whipple, K. X.: Short communication: The Topographic Analysis Kit (TAK) for TopoToolbox, Earth Surf. Dynam., 7, 87–95, <a href="https://doi.org/10.5194/esurf-7-87-2019" target="_blank">https://doi.org/10.5194/esurf-7-87-2019</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib29"><label>Gailleton et al.(2024)</label><mixed-citation>
       Gailleton, B., Steer, P., Davy, P., Schwanghart, W., and Bernard, T.: GraphFlood 1.0: an efficient algorithm to approximate 2D hydrodynamics for landscape evolution models, Earth Surf. Dynam., 12, 1295–1313, <a href="https://doi.org/10.5194/esurf-12-1295-2024" target="_blank">https://doi.org/10.5194/esurf-12-1295-2024</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib30"><label>Gallen(2017)</label><mixed-citation>
      
Gallen, S. F.: ChiProfiler, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.597335" target="_blank">https://doi.org/10.5281/zenodo.597335</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib31"><label>GDAL/OGR contributors(2025)</label><mixed-citation>
      
GDAL/OGR contributors: GDAL/OGR Geospatial Data Abstraction softwareLibrary, Open Source Geospatial Foundation, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.5884351" target="_blank">https://doi.org/10.5281/zenodo.5884351</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib32"><label>Gillen et al.(2025)</label><mixed-citation>
       Gillen, M. N., Ashton, A. D., and Perron, J. T.: Rivers influence reef pass formation in the Society Islands, Geophys. Res. Lett., 52, e2025GL114881, <a href="https://doi.org/10.1029/2025GL114881" target="_blank">https://doi.org/10.1029/2025GL114881</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib33"><label>Gillies et al.(2013)</label><mixed-citation>
      
Gillies, S. et al.: Rasterio: geospatial raster I/O for Python programmers, GitHub [code], <a href="https://github.com/rasterio/rasterio" target="_blank"/> (last access: 6 November 2026), 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib34"><label>Goldstein et al.(2024)</label><mixed-citation>
       Goldstein, H., Cutler, J. W., Dickstein, D., Pierce, B. C., and Head, A.: Property-based testing in practice, in: Proceedings of the IEEE/ACM 46th International Conference on Software Engineering, ICSE '24, Association for Computing Machinery, New York, NY, USA, ISBN 9798400702174, <a href="https://doi.org/10.1145/3597503.3639581" target="_blank">https://doi.org/10.1145/3597503.3639581</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib35"><label>Greene et al.(2017)</label><mixed-citation>
       Greene, C. A., Gwyther, D. E., and Blankenship, D. D.: Antarctic mapping tools for Matlab, Comput. Geosci., 104, 151–157, <a href="https://doi.org/10.1016/j.cageo.2016.08.003" target="_blank">https://doi.org/10.1016/j.cageo.2016.08.003</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib36"><label>Grohmann et al.(2026)</label><mixed-citation>
       Grohmann, C. H., Lecours, V., and Reuter, H. I.: Overview of software packages used in geomorphometry, in: Geomorphometry, edited by: Reuter, H. I., Grohmann, C. H., and Lecours, V., Vol. 37 of Developments in Soil Science, Elsevier, <a href="https://doi.org/10.1016/B978-0-44-333376-7.00021-5" target="_blank">https://doi.org/10.1016/B978-0-44-333376-7.00021-5</a>, 371–383, 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib37"><label>Hergarten(2024a)</label><mixed-citation>
       Hergarten, S.: Scaling between volume and runout of rock avalanches explained by a modified Voellmy rheology, Earth Surf. Dynam., 12, 219–229, <a href="https://doi.org/10.5194/esurf-12-219-2024" target="_blank">https://doi.org/10.5194/esurf-12-219-2024</a>, 2024a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib38"><label>Hergarten(2024b)</label><mixed-citation>
       Hergarten, S.: MinVoellmy v1: a lightweight model for simulating rapid mass movements based on a modified Voellmy rheology, Geosci. Model Dev., 17, 781–794, <a href="https://doi.org/10.5194/gmd-17-781-2024" target="_blank">https://doi.org/10.5194/gmd-17-781-2024</a>, 2024b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib39"><label>Hergarten and Neugebauer(2001)</label><mixed-citation>
       Hergarten, S. and Neugebauer, H. J.: Self-organized critical drainage networks, Phys. Rev. Lett., 86, 2689–2692, <a href="https://doi.org/10.1103/PhysRevLett.86.2689" target="_blank">https://doi.org/10.1103/PhysRevLett.86.2689</a>, 2001.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib40"><label>Hijmans(2025)</label><mixed-citation>
      
Hijmans, R. J.: terra: Spatial Data Analysis, r package version 1.8-58, <a href="https://rspatial.org/" target="_blank"/> (last access: 6 November 2026), 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib41"><label>Hobley et al.(2017)</label><mixed-citation>
      
Hobley, D. E. J., Adams, J. M., Nudurupati, S. S., Hutton, E. W. H., Gasparini, N. M., Istanbulluoglu, E., and Tucker, G. E.: Creative computing with Landlab: an open-source toolkit for building, coupling, and exploring two-dimensional numerical models of Earth-surface dynamics, Earth Surf. Dynam., 5, 21–46, <a href="https://doi.org/10.5194/esurf-5-21-2017" target="_blank">https://doi.org/10.5194/esurf-5-21-2017</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib42"><label>Hunter et al.(2024)</label><mixed-citation>
      
Hunter, B. D., Roering, J. J., Silva, L. C. R., and Moreland, K. C.: Geomorphic controls on the abundance and persistence of soil organic carbon pools in erosional landscapes, Nat. Geosci., 17, 151–157, <a href="https://doi.org/10.1038/s41561-023-01365-2" target="_blank">https://doi.org/10.1038/s41561-023-01365-2</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib43"><label>Hutton et al.(2020)</label><mixed-citation>
      
Hutton, E., Barnhart, K., Hobley, D., Tucker, G., Nudurupati, S. S., Adams, J., Gasparini, N. M., Shobe, C., Strauch, R., Knuth, J., margauxmouchene, Lyons, N., DavidLitwin, Glade, R., Giuseppecipolla95, Manaster, A., alangston, Thyng, K., and Rengers, F.: landlab/landlab: Mrs. Weasley, Version v2.0.1, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.3776837" target="_blank">https://doi.org/10.5281/zenodo.3776837</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib44"><label>Institut national de l'information géographique et forestière (IGN)(2024)</label><mixed-citation>
      
Institut national de l'information géographique et forestière (IGN): BD ALTI<span style="position:relative; bottom:0.5em; " class="text">®</span> 25&thinsp;m, <a href="https://cartes.gouv.fr/rechercher-une-donnee/dataset/IGNF_BD-ALTI" target="_blank"/> (last access: 6 November 2026), 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib45"><label>Jakob et al.(2017)</label><mixed-citation>
      
Jakob, W., Rhinelander, J., and Moldovan, D.: pybind11 – Seamless operability between C++11 and Python, GitHub [code], <a href="https://github.com/pybind/pybind11" target="_blank"/> (last access: 6 November 2026), 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib46"><label>Karlstrom and Yang(2016)</label><mixed-citation>
      
Karlstrom, L. and Yang, K.: Fluvial supraglacial landscape evolution on the Greenland Ice Sheet, Geophys. Res. Lett., 43, 2683–2692, <a href="https://doi.org/10.1002/2016GL067697" target="_blank">https://doi.org/10.1002/2016GL067697</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib47"><label>Kearney(2026)</label><mixed-citation>
      
Kearney, W. S.: TopoToolbox: Contribution Guidelines,  <a href="https://topotoolbox.github.io/contributing.html" target="_blank"/>, last access: 5 March 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib48"><label>Kearney et al.(2026a)</label><mixed-citation>
      
Kearney, W., Gailleton, B., Arnau, G., Bringezu, T., Katerndahl, F., Lenz, K., and Schwanghart, W.: TopoToolbox/libtopotoolbox: 2026-W20, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.20269315" target="_blank">https://doi.org/10.5281/zenodo.20269315</a>, 2026a.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib49"><label>Kearney et al.(2026b)</label><mixed-citation>
      
Kearney, W., Gailleton, B., Bringezu, T., Arnau, G., Malatesta, L., Faure, F., and Ye, X.: TopoToolbox/pytopotoolbox: v0.0.11, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.20209621" target="_blank">https://doi.org/10.5281/zenodo.20209621</a>, 2026b.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib50"><label>Kearney et al.(2026c)</label><mixed-citation>
      
Kearney, W., Schwanghart, W., and Gailleton, B.: TopoToolbox/gallery: release-20260518-4, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.20270725" target="_blank">https://doi.org/10.5281/zenodo.20270725</a>, 2026c.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib51"><label>Kearney et al.(2026d)</label><mixed-citation>
      
Kearney, W., Schwanghart, W., Scherler, D., Ott, R., and Arnau, G.: TopoToolbox/topotoolbox3: release-20260521-1, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.20322894" target="_blank">https://doi.org/10.5281/zenodo.20322894</a>, 2026d.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib52"><label>Kelly and Sanders(2008)</label><mixed-citation>
      
Kelly, D. and Sanders, R.: The challenge of testing scientific software, in: Conference for the Association of Software Testing,   <a href="https://associationforsoftwaretesting.org/conference/cast-archive/cast-2008/" target="_blank"/> (last access: 6 November 2026), 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib53"><label>Kneib et al.(2024)</label><mixed-citation>
      
Kneib, M., Dehecq, A., Brun, F., Karbou, F., Charrier, L., Leinss, S., Wagnon, P., and Maussion, F.: Mapping and characterization of avalanches on mountain glaciers with Sentinel-1 satellite imagery, The Cryosphere, 18, 2809–2830, <a href="https://doi.org/10.5194/tc-18-2809-2024" target="_blank">https://doi.org/10.5194/tc-18-2809-2024</a>, 2024.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib54"><label>Lai et al.(2025)</label><mixed-citation>
      
Lai, L. S.-H., Booth, A. M., Duvall, A. R., and Herzig, E.: Short communication: Multiscale topographic complexity analysis with pyTopoComplexity, Earth Surf. Dynam., 13, 417–435, <a href="https://doi.org/10.5194/esurf-13-417-2025" target="_blank">https://doi.org/10.5194/esurf-13-417-2025</a>, 2025.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib55"><label>Lindsay(2016)</label><mixed-citation>
       Lindsay, J.: Whitebox GAT: a case study in geomorphometric analysis, Comput. Geosci., 95, 75–84, <a href="https://doi.org/10.1016/j.cageo.2016.07.003" target="_blank">https://doi.org/10.1016/j.cageo.2016.07.003</a>, 2016.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib56"><label>MacKie et al.(2021)</label><mixed-citation>
       MacKie, E. J., Schroeder, D. M., Zuo, C., Yin, Z., and Caers, J.: Stochastic modeling of subglacial topography exposes uncertainty in water routing at Jakobshavn Glacier, J. Glaciol., 67, 75–83, <a href="https://doi.org/10.1017/jog.2020.84" target="_blank">https://doi.org/10.1017/jog.2020.84</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib57"><label>Mudd et al.(2019)</label><mixed-citation>
      
Mudd, S. M., Clubb, F. J., Grieve, S. W. D., Milodowski, D. T., Hurst, M. D., Gailleton, B., and Valters, D. A.: LSDTopoTools2, Zenodo [code], <a href="https://doi.org/10.5281/zenodo.3245041" target="_blank">https://doi.org/10.5281/zenodo.3245041</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib58"><label>O'Callaghan and Mark(1984)</label><mixed-citation>
       O'Callaghan, J. F. and Mark, D. M.: The extraction of drainage networks from digital elevation data, Comput. Vision Graph., 28, 323–344, <a href="https://doi.org/10.1016/S0734-189X(84)80011-0" target="_blank">https://doi.org/10.1016/S0734-189X(84)80011-0</a>, 1984.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib59"><label>Perron and Royden(2013)</label><mixed-citation>
       Perron, J. T. and Royden, L.: An integral approach to bedrock river profile analysis, Earth Surf. Proc. Land., 38, 570–576, <a href="https://doi.org/10.1002/esp.3302" target="_blank">https://doi.org/10.1002/esp.3302</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib60"><label>Purinton and Bookhagen(2017)</label><mixed-citation>
       Purinton, B. and Bookhagen, B.: Validation of digital elevation models (DEMs) and comparison of geomorphic metrics on the southern Central Andean Plateau, Earth Surf. Dynam., 5, 211–237, <a href="https://doi.org/10.5194/esurf-5-211-2017" target="_blank">https://doi.org/10.5194/esurf-5-211-2017</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib61"><label>Remy(2005)</label><mixed-citation>
      
Remy, N.: S-GeMS: The Stanford geostatistical modeling software: a tool for new algorithms development, in: Geostatistics Banff 2004, edited by: Leuangthong, O. and Deutsch, C. V., Springer Netherlands, Dordrecht, 865–871, <a href="https://doi.org/10.1007/978-1-4020-3610-1_89" target="_blank">https://doi.org/10.1007/978-1-4020-3610-1_89</a>, ISBN&thinsp;978-1-4020-3610-1, 2005.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib62"><label>Rocklin(2015)</label><mixed-citation>
      
Rocklin, M.: Dask: parallel computations with blocked algorithms and task scheduling, in: Proceedings of the 14th Python in Science Conference, <a href="https://doi.org/10.25080/Majora-7b98e3ed-013" target="_blank">https://doi.org/10.25080/Majora-7b98e3ed-013</a>, 2015.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib63"><label>Scherler and Schwanghart(2020)</label><mixed-citation>
       Scherler, D. and Schwanghart, W.: Drainage divide networks – Part 1: Identification and ordering in digital elevation models, Earth Surf. Dynam., 8, 245–259, <a href="https://doi.org/10.5194/esurf-8-245-2020" target="_blank">https://doi.org/10.5194/esurf-8-245-2020</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib64"><label>Schwanghart and Kuhn(2010)</label><mixed-citation>
       Schwanghart, W. and Kuhn, N. J.: TopoToolbox: a set of Matlab functions for topographic analysis, Environ. Modell. Softw., 25, 770–781, <a href="https://doi.org/10.1016/j.envsoft.2009.12.002" target="_blank">https://doi.org/10.1016/j.envsoft.2009.12.002</a>, 2010.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib65"><label>Schwanghart and Scherler(2014)</label><mixed-citation>
       Schwanghart, W. and Scherler, D.: Short Communication: TopoToolbox 2 – MATLAB-based software for topographic analysis and modeling in Earth surface sciences, Earth Surf. Dynam., 2, 1–7, <a href="https://doi.org/10.5194/esurf-2-1-2014" target="_blank">https://doi.org/10.5194/esurf-2-1-2014</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib66"><label>Schwanghart and Scherler(2017)</label><mixed-citation>
       Schwanghart, W. and Scherler, D.: Bumps in river profiles: uncertainty assessment and smoothing using quantile regression techniques, Earth Surf. Dynam., 5, 821–839, <a href="https://doi.org/10.5194/esurf-5-821-2017" target="_blank">https://doi.org/10.5194/esurf-5-821-2017</a>, 2017.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib67"><label>Schwanghart et al.(2013)</label><mixed-citation>
       Schwanghart, W., Groom, G., Kuhn, N. J., and Heckrath, G.: Flow network derivation from a high resolution DEM in a low relief, agrarian landscape, Earth Surf. Proc. Land., 38, 1576–1586, <a href="https://doi.org/10.1002/esp.3452" target="_blank">https://doi.org/10.1002/esp.3452</a>, 2013.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib68"><label>Schwanghart et al.(2021)</label><mixed-citation>
       Schwanghart, W., Molkenthin, C., and Scherler, D.: A systematic approach and software for the analysis of point patterns on river networks, Earth Surf. Proc. Land., 46, 1847–1862, <a href="https://doi.org/10.1002/esp.5127" target="_blank">https://doi.org/10.1002/esp.5127</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib69"><label>Smith et al.(2019)</label><mixed-citation>
      
Smith, T., Rheinwalt, A., and Bookhagen, B.: TopoMetricUncertainty – Calculating Topographic Metric Uncertainty and Optimal Grid Resolution, GFZ Data Services [data set], <a href="https://doi.org/10.5880/fidgeo.2019.017" target="_blank">https://doi.org/10.5880/fidgeo.2019.017</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib70"><label>Steer(2021)</label><mixed-citation>
       Steer, P.: Short communication: Analytical models for 2D landscape evolution, Earth Surf. Dynam., 9, 1239–1250, <a href="https://doi.org/10.5194/esurf-9-1239-2021" target="_blank">https://doi.org/10.5194/esurf-9-1239-2021</a>, 2021.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib71"><label>Stolle et al.(2019)</label><mixed-citation>
       Stolle, A., Schwanghart, W., Andermann, C., Bernhardt, A., Fort, M., Jansen, J. D., Wittmann, H., Merchel, S., Rugel, G., Adhikari, B. R., and Korup, O.: Protracted river response to medieval earthquakes, Earth Surf. Proc. Land., 44, 331–341, <a href="https://doi.org/10.1002/esp.4517" target="_blank">https://doi.org/10.1002/esp.4517</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib72"><label>Swirad and Young(2022)</label><mixed-citation>
       Swirad, Z. M. and Young, A. P.: CliffDelineaTool v1.2.0: an algorithm for identifying coastal cliff base and top positions, Geosci. Model Dev., 15, 1499–1512, <a href="https://doi.org/10.5194/gmd-15-1499-2022" target="_blank">https://doi.org/10.5194/gmd-15-1499-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib73"><label>Tangi et al.(2019)</label><mixed-citation>
       Tangi, M., Schmitt, R., Bizzi, S., and Castelletti, A.: The CASCADE toolbox for analyzing river sediment connectivity and management, Environ. Modell. Softw., 119, 400–406, <a href="https://doi.org/10.1016/j.envsoft.2019.07.008" target="_blank">https://doi.org/10.1016/j.envsoft.2019.07.008</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib74"><label>Tarboton and Baker(2008)</label><mixed-citation>
       Tarboton, D. G. and Baker, M. E.: Toward an algebra from terrain-based flow analysis, in: Representing, Modeling and Visualizing the Natural Environment, edited by: Mount, N., Harvey, G. L., Aplin, P., and Priestnall, G., CRC Press, <a href="https://doi.org/10.1201/9781420055504" target="_blank">https://doi.org/10.1201/9781420055504</a>, 2008.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib75"><label>Tennant et al.(2023)</label><mixed-citation>
       Tennant, E., Jenkins, S. F., and Biass, S.: FlowDIR: a MATLAB tool for rapidly and probabilistically forecasting the travel directions of volcanic flows, Journal of Applied Volcanology, 12, 10, <a href="https://doi.org/10.1186/s13617-023-00136-3" target="_blank">https://doi.org/10.1186/s13617-023-00136-3</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib76"><label>The MathWorks Inc.(2022)</label><mixed-citation>
      
The MathWorks Inc.: MATLAB, <a href="https://www.mathworks.com" target="_blank"/> (last access: 6 November 2026), 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib77"><label>Val et al.(2022)</label><mixed-citation>
       Val, P., Lyons, N. J., Gasparini, N., Willenbring, J. K., and Albert, J. S.: Landscape evolution as a diversification driver in freshwater fishes, Frontiers in Ecology and Evolution, 9, <a href="https://doi.org/10.3389/fevo.2021.788328" target="_blank">https://doi.org/10.3389/fevo.2021.788328</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib78"><label>Van Wyk de Vries et al.(2023)</label><mixed-citation>
       Van Wyk de Vries, M., Romero, M., Penprase, S. B., Ng, G.-H. C., and Wickert, A. D.: Increasing rate of 21st century volume loss of the Patagonian icefields measured from proglacial river discharge, J. Glaciol., 69, 1187–1202, <a href="https://doi.org/10.1017/jog.2023.9" target="_blank">https://doi.org/10.1017/jog.2023.9</a>, 2023.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib79"><label>Voigtländer et al.(2024)</label><mixed-citation>
       Voigtländer, A., Rheinwalt, A., and Tofelde, S.: Quantifying Earth's topography: steeper and larger than projected in digital terrain models, Geophys. Res. Lett., 51, e2024GL109517, <a href="https://doi.org/10.1029/2024GL109517" target="_blank">https://doi.org/10.1029/2024GL109517</a>, 2024.


    </mixed-citation></ref-html>
<ref-html id="bib1.bib80"><label>Wainwright et al.(2020)</label><mixed-citation>
       Wainwright, H. M., Steefel, C., Trutner, S. D., Henderson, A. N., Nikolopoulos, E. I., Wilmer, C. F., Chadwick, K. D., Falco, N., Schaettle, K. B., Brown, J. B., Steltzer, H., Williams, K. H., Hubbard, S. S., and Enquist, B. J.: Satellite-derived foresummer drought sensitivity of plant productivity in Rocky Mountain headwater catchments: spatial heterogeneity and geological-geomorphological control, Environ. Res. Lett., 15, 084018, <a href="https://doi.org/10.1088/1748-9326/ab8fd0" target="_blank">https://doi.org/10.1088/1748-9326/ab8fd0</a>, 2020.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib81"><label>Wainwright et al.(2022)</label><mixed-citation>
       Wainwright, H. M., Uhlemann, S., Franklin, M., Falco, N., Bouskill, N. J., Newcomer, M. E., Dafflon, B., Siirila-Woodburn, E. R., Minsley, B. J., Williams, K. H., and Hubbard, S. S.: Watershed zonation through hillslope clustering for tractably quantifying above- and below-ground watershed heterogeneity and functions, Hydrol. Earth Syst. Sci., 26, 429–444, <a href="https://doi.org/10.5194/hess-26-429-2022" target="_blank">https://doi.org/10.5194/hess-26-429-2022</a>, 2022.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib82"><label>Ward et al.(2019)</label><mixed-citation>
       Ward, A. S., Wondzell, S. M., Schmadel, N. M., Herzog, S., Zarnetske, J. P., Baranov, V., Blaen, P. J., Brekenfeld, N., Chu, R., Derelle, R., Drummond, J., Fleckenstein, J. H., Garayburu-Caruso, V., Graham, E., Hannah, D., Harman, C. J., Hixson, J., Knapp, J. L. A., Krause, S., Kurz, M. J., Lewandowski, J., Li, A., Martí, E., Miller, M., Milner, A. M., Neil, K., Orsini, L., Packman, A. I., Plont, S., Renteria, L., Roche, K., Royer, T., Segura, C., Stegen, J., Toyoda, J., Hager, J., and Wisnoski, N. I.: Spatial and temporal variation in river corridor exchange across a 5th-order mountain stream network, Hydrol. Earth Syst. Sci., 23, 5199–5225, <a href="https://doi.org/10.5194/hess-23-5199-2019" target="_blank">https://doi.org/10.5194/hess-23-5199-2019</a>, 2019.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib83"><label>Wickert and Gasparini(2026)</label><mixed-citation>
      
Wickert, A. and Gasparini, N.: Modeling Hillslopes and Channels with Landlab, <a href="https://landlab.csdms.io/teaching/geomorphology_exercises/drainage_density_notebooks/drainage_density_class_notebook.html" target="_blank"/>, last access: 5 March 2026.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib84"><label>Willett et al.(2014)</label><mixed-citation>
       Willett, S. D., McCoy, S. W., Perron, J. T., Goren, L., and Chen, C.-Y.: Dynamic reorganization of river basins, Science, 343, 1248765, <a href="https://doi.org/10.1126/science.1248765" target="_blank">https://doi.org/10.1126/science.1248765</a>, 2014.

    </mixed-citation></ref-html>
<ref-html id="bib1.bib85"><label>Winterberg and Willett(2019)</label><mixed-citation>
       Winterberg, S. and Willett, S. D.: Greater Alpine river network evolution, interpretations based on novel drainage analysis, Swiss J. Geosci., 112, 3–22, <a href="https://doi.org/10.1007/s00015-018-0332-5" target="_blank">https://doi.org/10.1007/s00015-018-0332-5</a>, 2019.

    </mixed-citation></ref-html>--></article>
