Also known as
Model type Tool
Model part of larger framework LandLab
Incorporated models or components:
Spatial dimensions 2D
Spatial extent Regional-Scale, Landscape-Scale, Watershed-Scale
Model domain Terrestrial, Hydrology
One-line model description Temporarily fills depressions and reroutes flow across them
Extended model description A Landlab implementation of the Barnes et al. (2014) lake filling & lake routing algorithms, lightly modified and adapted for Landlab by DEJH. This component is designed as a direct replacement for the LakeMapper as existing pre-Aug 2018, and provides a suite of properties to access information about the lakes created each time it is run. Only significant difference is the way the lakes are coded: this component uses the (unique) ID of the outlet node, whereas DepressionFinderAndRouter uses one of the pit node IDs. Note also this component does not offer the lake_codes or display_depression_map options, for essentially this reason. Use lake_map instead for both. It also uses a much more Landlabbian run_one_step() method as its driver, superceding DepressionFinderAndRouter’s map_depressions().

A variety of options is provided. Flow routing is route-to-one in this implementation, but can be either D4 (“steepest”) or D8 on a raster. The surface can be filled to either flat or a very slight downward incline, such that subsequent flow routing will run over the lake surface. This incline is applied at machine precision to minimize the chances of creating false outlets by overfill, and note that the gradient as calculated on such surfaces may still appear to be zero. The filling can either be performed in place, or on a new (water) surface distinct from the original (rock) surface. For efficiency, data structures describing the lakes and their properties are only created, and existing flow direction and flow accumulation fields modified, if those flags are set at instantiation


flow path, depressions, lakes, flow routing,

First name Daniel
Last name Hobley
Type of contact Technical contact
Institute / Organization
Postal address 1
Postal address 2
Town / City Boulder
Postal code 80309
State Colorado
Country United States
Email address

Supported platforms Unix, Linux, Mac OS, Windows
Other platform
Programming language Python
Other program language
Code optimized Single Processor
Multiple processors implemented
Nr of distributed processors
Nr of shared processors
Start year development 2018
Does model development still take place? No
If above answer is no, provide end year model development 2020
Code development status Only maintenance
When did you indicate the 'code development status'? 2020
Model availability As code
Source code availability
(Or provide future intension)
Through web repository
Source web address
Source csdms web address
Program license type BSD or MIT X11
Program license type other
Memory requirements
Typical run time

Describe input parameters grid : ModelGrid

A Landlab grid.

surface : field name at node or array of length node
The surface to direct flow across.

method : {'Steepest', 'D8'}
Whether or not to recognise diagonals as valid flow paths, if a raster. Otherwise, no effect.

fill_flat : bool
If True, pits will be filled to perfectly horizontal. If False, the new surface will be slightly inclined to give steepest descent flow paths to the outlet.

fill_surface : bool
Sets the field or array to fill. If fill_surface is surface, this operation occurs in place, and is faster. Note that the component will overwrite fill_surface if it exists; to supply an existing water level to it, supply that water level field as surface, not fill_surface.

redirect_flow_steepest_descent : bool
If True, the component outputs modified versions of the 'flow__receiver_node', 'flow__link_to_receiver_node', 'flow__sink_flag', and 'topographic__steepest_slope' fields. These are the fields output by the FlowDirector components, so set to True if you wish to pass this LakeFiller to the FlowAccumulator, or if you wish to work directly with the new, correct flow directions and slopes without rerunning these components on your new surface. Ensure the necessary fields already exist, and have already been calculated by a FlowDirector! This also means you need to instantiate your FlowDirector **before** you instantiate the LakeMapperBarnes. Note that the new topographic__steepest_slope will always be set to zero, even if fill_flat=False (i.e., there is actually a miniscule gradient on the new topography, which gets ignored).

reaccumulate_flow : bool
If True, and redirect_flow_steepest_descent is True, the run method will (re-)accumulate the flow after redirecting the flow. This means the 'drainage_area', 'surface_water__discharge', 'flow__upstream_node_order', and the other various flow accumulation fields (see output field names) will now reflect the new drainage patterns without having to manually reaccumulate the discharge. If True but redirect_flow_steepest_descent is False, raises an ValueError.

ignore_overfill : bool
If True, suppresses the Error that would normally be raised during creation of a gentle incline on a fill surface (i.e., if not fill_flat). Typically this would happen on a synthetic DEM where more than one outlet is possible at the same elevation. If True, the was_there_overfill property can still be used to see if this has occurred.

track_lakes : bool
If True, the component permits a slight hit to performance in order to explicitly track which nodes have been filled, and to enable queries on that data in retrospect. Set to False to simply fill the surface and be done with it.

Input format ASCII
Other input format
Describe output parameters [[Describe output parameters model::"drainage_area":

{ "dtype": float, "intent": "inout", "optional": False, "units": "m**2", "mapping": "node", "doc": "Upstream accumulated surface area contributing to the node's discharge", }

"flow__data_structure_delta": { "dtype": int, "intent": "inout", "optional": False, "units": "-", "mapping": "node", "doc": "Node array containing the elements delta[1:] of the data structure 'delta' used for construction of the downstream-to-upstream node array", }

"flow__link_to_receiver_node": { "dtype": int, "intent": "inout", "optional": False, "units": "-", "mapping": "node", "doc": "ID of link downstream of each node, which carries the discharge", }

"flow__receiver_node": { "dtype": int, "intent": "inout", "optional": False, "units": "-", "mapping": "node", "doc": "Node array of receivers (node that receives flow from current node)", }

"flow__sink_flag": { "dtype": bool, "intent": "inout", "optional": False, "units": "-", "mapping": "node", "doc": "Boolean array, True at local lows", }

"flow__upstream_node_order": { "dtype": int, "intent": "inout", "optional": False, "units": "-", "mapping": "node", "doc": "Node array containing downstream-to-upstream ordered list of node IDs", }

"surface_water__discharge": { "dtype": float, "intent": "inout", "optional": False, "units": "m**3/s", "mapping": "node", "doc": "Volumetric discharge of surface water", }

"topographic__elevation": { "dtype": float, "intent": "inout", "optional": False, "units": "m", "mapping": "node", "doc": "Land surface topographic elevation", }]]

Output format ASCII
Other output format
Pre-processing software needed? No
Describe pre-processing software
Post-processing software needed? No
Describe post-processing software
Visualization software needed? No
If above answer is yes
Other visualization software

Describe processes represented by the model
Describe key physical parameters and equations
Describe length scale and resolution constraints
Describe time scale and resolution constraints
Describe any numerical limitations and issues

Describe available calibration data sets
Upload calibration data sets if available:
Describe available test data sets
Upload test data sets if available:
Describe ideal data for testing

Do you have current or future plans for collaborating with other researchers?
Is there a manual available? No
Upload manual if available:
Model website if any
Model forum / discussion board

This part will be filled out by CSDMS staff

OpenMI compliant Not yet"Not yet" is not in the list (Yes, No but planned, No but possible, No not possible) of allowed values for the "Code openmi compliant or not" property.
BMI compliant Not yet"Not yet" is not in the list (Yes, No but planned, No but possible, No not possible) of allowed values for the "Code IRF or not" property.
WMT component Not yet"Not yet" is not in the list (Yes, In progress, No but possible, No not possible) of allowed values for the "Code CMT compliant or not" property.
PyMT component Not yet"Not yet" is not in the list (Yes, In progress, No but possible, No not possible) of allowed values for the "Code PyMT compliant or not" property.
Is this a data component
Can be coupled with:
Model info
Citation indices LakeMapperBarnes
Nr. of pubs: --
Citations: 0
h-index: --"--" is not a number.
Qrcode LakeMapperBarnes.png
Link to this page




Citation indices LakeMapperBarnes
Nr. of pubs: --
Citations: 0
h-index: --"--" is not a number.

See more publications of LakeMapperBarnes



Input Files

Output Files