Skip to content
hellolulujiangPublic

About

Serial orderings, parallel layerings and spatial partitions for D8 flow networks, computed once from the flow-direction grid and reused by any drainage-order computation. Python reference implementation.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

FlowTopo

FlowTopo builds reusable orderings, parallel layerings and spatial partitions from a D8 flow-direction grid.

topological sort from the sources
ordering="topo"
breadth-first from the pit
ordering="bfs"
depth-first from the pit
ordering="dfs"
a cell is appended once all its donors are donecells in order of hop count from the pitone tributary subtree at a time; best cache locality

Three serial orderings visit every cell once while respecting the flow dependencies.

Install

git clone https://github.com/hellolulujiang/flowtopo.git
cd flowtopo
pip install -e ".[speed]"

Python 3.10 or newer. The speed extra enables threaded kernels.

Quick start

import flowtopo

topo = flowtopo.FlowTopo.from_raster("data/dir_example.tif")
upa = topo.upstream_area(ordering="dfs")  # km²
upa_grid = topo.to_2d(upa)

The bundled MERIT Hydro basin has 93,432 valid cells. Input requirements.

Structures and propagation

Many threads: which cells together?

Three parallel layerings. Layers run in order; the cells of one layer run at the same time.

as-soon-as-possible
layering="asap"
conflict-free downstream
layering="cfds"
as-late-as-possible
layering="alap"
every cell in the earliest layer its donors allowas-soon-as-possible, plus: no two cells in a layer share a receiverevery cell as late as the longest flow path allows; the most evenly filled layers in practice

Several processors: which cells where?

Two basins onto two subregions: (a) whole basins, unbalanced; (b) the dominant basin cut along its mainstem, a tributary subtree moved; (c) balanced.

basin-level
level="basin"
subbasin-level
level="subbasin"
whole basins go to subregions; a dominant basin cannot be balancedthe basins that keep the parts from balancing, usually the dominant one, are opened along their mainstems; their tributary subtrees balance the load, and the held-back mainstem section runs in a separate stage

At a confluence: how does a value reach the receiver?

Three propagation manners. The structure decides when a cell runs; the manner decides who writes the result.

pull
manner="pull"
atomic push
manner="atomic_push"
push
manner="push"
each receiver reads its donors and writes only itself; needs the donor tabledonors write through atomics; correct, but float sums are not reproducibledonors write directly; deterministic, no locks; safe only under cfds

Data products

FullTopo v1.1 provides saved structures for the 90 MERIT Hydro regions of FullDivide v1.1. Contents and use.

Documentation

User guide · Methods and provenance · Notebook · Video · Animations · FullHydro tools

Tests · tests

Citing

Cite this repository with the release used and downloaded products by version. Paper: MERIT-FlowTopo v1.0: a reusable computational foundation for hyperresolution hydrology on the global 90 m drainage network (Jiang et al., submitted to Geoscientific Model Development). Archived paper code.

Acknowledgements

MERIT Hydro (Yamazaki et al., 2019) supplies the example grid. Foundational conventions follow pyflwdir (D. Eilander, Deltares; MIT); see provenance.

Licence

MIT; see LICENSE. The bundled MERIT Hydro excerpt retains its terms, CC BY-NC 4.0 or ODbL 1.0; see DATA_NOTICE.md.

About

Serial orderings, parallel layerings and spatial partitions for D8 flow networks, computed once from the flow-direction grid and reused by any drainage-order computation. Python reference implementation.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages