Skip to content

r.manning

Converts land cover raster to Manning's roughness coefficient raster.

r.manning input=name output=name landcover=string [source=string] [method=string] [rules=name] [seed=integer] [--overwrite] [--verbose] [--quiet] [--qq] [--ui]

Example:

r.manning input=name output=name landcover=nlcd

grass.script.run_command("r.manning", input, output, landcover, source="kalyanapu", method="medium", rules=None, seed=None, overwrite=None, verbose=None, quiet=None, superquiet=None)

Example:

gs.run_command("r.manning", input="name", output="name", landcover="nlcd")

grass.tools.Tools.r_manning(input, output, landcover, source="kalyanapu", method="medium", rules=None, seed=None, overwrite=None, verbose=None, quiet=None, superquiet=None)

Example:

tools = Tools()
tools.r_manning(input="name", output="name", landcover="nlcd")

This grass.tools API is experimental in version 8.5 and expected to be stable in version 8.6.

Parameters

input=name [required]
    Name of input land cover raster map
output=name [required]
    Name of output Manning's n raster map
landcover=string [required]
    Land cover classification system
    Allowed values: nlcd, worldcover, custom
    nlcd: National Land Cover Database (NLCD)
    worldcover: ESA WorldCover
    custom: custom created land cover
source=string
    Land cover-specific source of Manning's n coefficients
    Allowed values: kalyanapu, hecras
    Default: kalyanapu
    kalyanapu: Kalyanapu et al. 2009 (shallow overland flow, NLCD only)
    hecras: HEC-RAS 2D Manual for NLCD (deep flow, NLCD only)
method=string
    Roughness output type
    Allowed values: low, medium, high, random
    Default: medium
    low: Lower bound estimate
    medium: Typical conditions
    high: Upper bound estimate
    random: Uniform random distribution
rules=name
    Path to custom rules file (CSV with columns: code,n)
seed=integer
    Seed value for the random number generator
    Using the same seed ensures identical results, while a randomly generated seed produces different outcomes in each run.
--overwrite
    Allow output files to overwrite existing files
--help
    Print usage summary
--verbose
    Verbose module output
--quiet
    Quiet module output
--qq
    Very quiet module output
--ui
    Force launching GUI dialog

input : str, required
    Name of input land cover raster map
    Used as: input, raster, name
output : str, required
    Name of output Manning's n raster map
    Used as: output, raster, name
landcover : str, required
    Land cover classification system
    Allowed values: nlcd, worldcover, custom
    nlcd: National Land Cover Database (NLCD)
    worldcover: ESA WorldCover
    custom: custom created land cover
source : str, optional
    Land cover-specific source of Manning's n coefficients
    Allowed values: kalyanapu, hecras
    kalyanapu: Kalyanapu et al. 2009 (shallow overland flow, NLCD only)
    hecras: HEC-RAS 2D Manual for NLCD (deep flow, NLCD only)
    Default: kalyanapu
method : str, optional
    Roughness output type
    Allowed values: low, medium, high, random
    low: Lower bound estimate
    medium: Typical conditions
    high: Upper bound estimate
    random: Uniform random distribution
    Default: medium
rules : str, optional
    Path to custom rules file (CSV with columns: code,n)
    Used as: input, file, name
seed : int, optional
    Seed value for the random number generator
    Using the same seed ensures identical results, while a randomly generated seed produces different outcomes in each run.
overwrite : bool, optional
    Allow output files to overwrite existing files
    Default: None
verbose : bool, optional
    Verbose module output
    Default: None
quiet : bool, optional
    Quiet module output
    Default: None
superquiet : bool, optional
    Very quiet module output
    Default: None

input : str | np.ndarray, required
    Name of input land cover raster map
    Used as: input, raster, name
output : str | type(np.ndarray) | type(np.array) | type(gs.array.array), required
    Name of output Manning's n raster map
    Used as: output, raster, name
landcover : str, required
    Land cover classification system
    Allowed values: nlcd, worldcover, custom
    nlcd: National Land Cover Database (NLCD)
    worldcover: ESA WorldCover
    custom: custom created land cover
source : str, optional
    Land cover-specific source of Manning's n coefficients
    Allowed values: kalyanapu, hecras
    kalyanapu: Kalyanapu et al. 2009 (shallow overland flow, NLCD only)
    hecras: HEC-RAS 2D Manual for NLCD (deep flow, NLCD only)
    Default: kalyanapu
method : str, optional
    Roughness output type
    Allowed values: low, medium, high, random
    low: Lower bound estimate
    medium: Typical conditions
    high: Upper bound estimate
    random: Uniform random distribution
    Default: medium
rules : str | io.StringIO, optional
    Path to custom rules file (CSV with columns: code,n)
    Used as: input, file, name
seed : int, optional
    Seed value for the random number generator
    Using the same seed ensures identical results, while a randomly generated seed produces different outcomes in each run.
overwrite : bool, optional
    Allow output files to overwrite existing files
    Default: None
verbose : bool, optional
    Verbose module output
    Default: None
quiet : bool, optional
    Quiet module output
    Default: None
superquiet : bool, optional
    Very quiet module output
    Default: None

Returns:

result : grass.tools.support.ToolResult | np.ndarray | tuple[np.ndarray] | None
If the tool produces text as standard output, a ToolResult object will be returned. Otherwise, None will be returned. If an array type (e.g., np.ndarray) is used for one of the raster outputs, the result will be an array and will have the shape corresponding to the computational region. If an array type is used for more than one raster output, the result will be a tuple of arrays.

Raises:

grass.tools.ToolError: When the tool ended with an error.

DESCRIPTION

r.manning converts a land cover raster to a Manning's roughness coefficient raster for use in hydraulic and hydrological modeling.

Manning's roughness coefficient (Manning's n) quantifies the resistance to flow over a surface and is a key parameter in hydraulic simulations such as flood modeling, overland flow, and channel flow calculations.

The input parameter specifies the land cover raster map. The tool supports two standard land cover classification systems specified by landcover: NLCD (National Land Cover Database) used in the United States, and ESA WorldCover used globally.

Manning's coefficients for ESA WorldCover are based on values used by QGIS Manning's Roughness Generator plugin by Azzam. For NLCD, the source parameter selects the source of Manning's n coefficients.

  • kalyanapu: Values from Kalyanapu et al. (2009), suitable for shallow overland flow modeling (flow depths in mm to cm range). Available for NLCD only. This is the default for NLCD.
  • hecras: Values from the HEC-RAS 2D User's Manual, suitable for deep flow and floodplain modeling (flow depths > 0.3 m). Available for NLCD.

The method parameter controls which roughness estimate to use:

  • low: Lower bound estimate (minimal surface resistance)
  • medium: Typical conditions (default)
  • high: Upper bound estimate (maximum surface resistance)
  • random: Uniform random value between low and high bounds

For custom land cover classifications, use landcover=custom with a rules file in CSV format.

NOTES

Source of values

Kalyanapu et al. (2009) does not include ranges for Manning's n values. These were estimated using 0.75/1.33 multipliers on the original single values to reflect ranges from Chow (1959). These multipliers were also used to estimate default values from ranges in the HEC-RAS 2D User's Manual.

Kalyanapu et al. (2009) does not include NLCD value for cultivated crops, this tool uses conventional tillage from McCuen (2005).

Custom rules file

For custom land cover classifications, provide a CSV file with the rules parameter. Two formats are supported:

Single value (used for all methods):

# code,n
1,0.035
2,0.120
3,0.050

Three values (low, medium, high):

# code,n_low,n_medium,n_high
1,0.025,0.035,0.045
2,0.080,0.120,0.160
3,0.040,0.050,0.060

Lines starting with # are treated as comments.

Uncertainty Analysis

Manning's n values are inherently uncertain due to spatial and temporal variability in vegetation density, surface conditions, and flow characteristics. The method=random option generates spatially uniform random values between low and high bounds for each land cover class, which can be used for Monte Carlo uncertainty analysis.

EXAMPLES

Basic usage with NLCD land cover

Import NLCD into North Carolina sample dataset and convert it to Manning's n using Kalyanapu values for shallow overland flow:

r.manning input=nlcd_landcover output=mannings_n \
          landcover=nlcd source=kalyanapu

Map of Manning's n values
Figure: Manning's n values for 2024 NLCD using Kalyanapu et al.

Deep flow modeling

Use HEC-RAS values for flood modeling:

r.manning input=nlcd_landcover output=mannings_n \
          landcover=nlcd source=hecras

ESA WorldCover for global applications

r.manning input=worldcover output=mannings_n \
          landcover=worldcover

Conservative high roughness estimate

r.manning input=nlcd_landcover output=mannings_n \
          landcover=nlcd source=kalyanapu method=high

Stochastic Manning's n values

Generate random Manning's n values for stochastic simulation:

from grass.tools import Tools

tools = Tools()

for i in range(100):
    tools.r_manning(
        input="nlcd_landcover",
        output=f"mannings_n_{i}",
        landcover="nlcd",
        source="kalyanapu",
        method="random",
        seed=i,
    )

Integration with r.sim.water

Use the output with GRASS hydrological simulation:

r.manning input=nlcd_landcover output=mannings_n \
          landcover=nlcd source=kalyanapu

r.sim.water elevation=dem dx=dx dy=dy \
            man=mannings_n depth=water_depth

REFERENCES

SEE ALSO

r.sim.water, r.recode

AUTHORS

Anna Petrasova, NCSU Center for Geospatial Analytics

SOURCE CODE

Available at: r.manning source code (history)
Latest change: Thursday Mar 12 16:41:53 2026 in commit 3ddc671