Manning Open-Channel Discharge Calculator
This Manning open-channel discharge calculator estimates steady, uniform flow from four hydraulic inputs: Manning's roughness coefficient, hydraulic radius, flow area, and channel bed slope.
Run — free
It applies the SI form of Manning's equation and returns both discharge in cubic meters per second and mean velocity in meters per second. Use it for a quick engineering check, comparison of channel alternatives, or repeatable automated calculations when the channel geometry and resistance have already been established.
Prepare hydraulic inputs that describe the same flow section
Start with a cross section and flow condition that can reasonably be treated as steady and uniform. Enter the wetted flow area in square meters, not the total excavated area above the water surface. Hydraulic radius is the wetted area divided by wetted perimeter; it is not generally the same as water depth, although the two can become close in a very wide rectangular channel. Enter bed slope as a dimensionless ratio, such as 0.002 for a drop of two meters over one thousand horizontal meters. The Manning coefficient must represent the channel material, vegetation, irregularity, alignment, and flow condition being evaluated. All four values must describe the same water level and channel reach. Mixing an area from one stage with a hydraulic radius from another produces a numerical answer that has no consistent physical section behind it. This calculator uses SI units throughout, so convert dimensions before calculating rather than attempting to correct the final discharge afterward.
Understand how Manning's equation produces discharge
The calculation uses Q = (1/n) A R^(2/3) S^(1/2), where Q is discharge, n is Manning roughness, A is wetted cross-sectional area, R is hydraulic radius, and S is bed slope. The velocity form is V = (1/n) R^(2/3) S^(1/2), and multiplying that velocity by area gives discharge. Because roughness is in the denominator, a larger coefficient reduces the predicted velocity and flow for otherwise identical geometry. Hydraulic radius has a two-thirds exponent, while slope enters through its square root, so doubling either input does not double discharge. A zero slope produces zero velocity and discharge in this idealized uniform-flow equation. A zero roughness coefficient is mathematically undefined because it would require division by zero, so the calculator returns an input error instead of infinity. Results are rounded to a stable precision for repeatable API and browser output, but that numerical precision should not be mistaken for equal precision in field measurements or the selected roughness coefficient.
Interpret the result and check whether the model applies
Treat the returned discharge as an estimate conditioned on Manning's assumptions, not as a substitute for hydraulic judgment. The equation is commonly used for gravity-driven open-channel flow that is approximately uniform, with a representative energy slope often approximated by the bed slope. It may be unsuitable near controls, transitions, culverts, gates, hydraulic jumps, backwater zones, rapidly varied reaches, or locations where the water surface changes substantially along the reach. Compare the returned mean velocity with acceptable erosion, sedimentation, lining, and safety criteria for the specific channel. Sensitivity checks are especially valuable because Manning roughness is selected rather than measured exactly: run plausible low and high coefficients, and consider alternate stages when area and hydraulic radius vary with depth. Document the geometry source, roughness basis, survey datum, and slope calculation so another reviewer can reproduce the result. The API price is $0.002 per calculation, while the browser version can be used for quick interactive checks with the same deterministic calculation logic.
What you can do with it
Estimate drainage-channel capacity
Calculate the approximate discharge of a ditch or lined drain at a known water level using its wetted area and hydraulic radius.
Compare roughness scenarios
Evaluate how vegetation growth, lining choices, or maintenance assumptions change predicted velocity and discharge without changing geometry.
Automate preliminary hydraulic checks
Run repeatable discharge calculations in a design workflow after cross-sectional geometry and representative bed slope have been computed.
FAQ
Which form of Manning's equation does this calculator use?
It uses the SI form Q = (1/n) A R^(2/3) S^(1/2), returning discharge in cubic meters per second and mean velocity in meters per second.
What units should I enter?
Enter hydraulic radius in meters, cross-sectional area in square meters, and bed slope as a dimensionless ratio. Manning's n is dimensionless in the conventional SI formulation used here.
Why does a zero roughness coefficient return an error?
Manning's n appears in the denominator. Setting it to zero makes the equation undefined, so the calculator rejects the input rather than returning an infinite or misleading result.
Can bed slope be zero?
Yes. In this uniform-flow model, a zero slope produces zero mean velocity and zero discharge. A negative slope is rejected because the square-root term would not represent the stated downstream flow direction.
Is hydraulic radius the same as water depth?
Not generally. Hydraulic radius equals wetted area divided by wetted perimeter. It only approaches water depth for some wide-channel geometries.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/earth/manning-discharge \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"manning_n":0.03,"hydraulic_radius_m":1.2,"area_m2":4.5,"bed_slope":0.002}'const res = await fetch("https://api.kit.forhosting.com/earth/manning-discharge", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"manning_n": 0.03,
"hydraulic_radius_m": 1.2,
"area_m2": 4.5,
"bed_slope": 0.002
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/earth/manning-discharge",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"manning_n": 0.03,
"hydraulic_radius_m": 1.2,
"area_m2": 4.5,
"bed_slope": 0.002
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/earth/manning-discharge", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"manning_n":0.03,"hydraulic_radius_m":1.2,"area_m2":4.5,"bed_slope":0.002}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"manning_n":0.03,"hydraulic_radius_m":1.2,"area_m2":4.5,"bed_slope":0.002}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/earth/manning-discharge", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"manning_n": 0.03,
"hydraulic_radius_m": 1.2,
"area_m2": 4.5,
"bed_slope": 0.002
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "earth.manning_discharge",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |