Rainwater Runoff and Drainage Calculator
ANA›Life Services Authority›National Calculator Authority›Rainwater Runoff and Drainage Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Rainwater Runoff and Drainage Calculator
Estimate stormwater runoff volume and peak discharge using the Rational Method (Q = CiA) and the SCS Curve Number method. Useful for drainage design, flood estimation, and land development planning.
### Catchment Properties
Catchment Area (hectares)
Surface Type / Runoff Coefficient (C)
Custom (enter below) Impervious – Rooftops, Asphalt (C = 0.95) Commercial / Business District (C = 0.85) Industrial Area (C = 0.70) Residential – Dense (C = 0.55) Residential – Suburban (C = 0.40) Lawns / Parks – Sandy Soil (C = 0.30) Cultivated Agricultural Land (C = 0.20) Forest / Woodland (C = 0.15)
Runoff Coefficient C (0.0 – 1.0)
Average Catchment Slope (%)
Flow Path Length (m) – for Time of Concentration
### Rainfall Data
Rainfall Intensity (mm/hr)
Storm Duration (minutes)
Return Period (years)
2-year (50% AEP) 5-year (20% AEP) 10-year (10% AEP) 20-year (5% AEP) 50-year (2% AEP) 100-year (1% AEP)
### SCS Curve Number Method
SCS Curve Number (CN)
Custom (enter below) Impervious Surfaces – Pavement, Roofs (CN = 98) Commercial / Business (CN = 90) Industrial (CN = 85) Residential 1/4 acre lots (CN = 77) Residential 1/2 acre lots (CN = 70) Residential 1 acre lots (CN = 61) Row Crops – Good Condition (CN = 74) Pasture – Good Condition (CN = 55) Woods – Good Condition (CN = 45) Open Water / Wetlands (CN = 30)
Curve Number CN (1 – 100)
Total Rainfall Depth P (mm)
Calculate Runoff
function raiUpdateC() { var sel = document.getElementById('rai-surface'); var cInput = document.getElementById('rai-c'); if (sel.value !== 'custom') { cInput.value = sel.value; } else { cInput.value = ''; } }
function raiUpdateCN() { var sel = document.getElementById('rai-cn-select'); var cnInput = document.getElementById('rai-cn-val'); if (sel.value !== 'custom') { cnInput.value = sel.value; } else { cnInput.value = ''; } }
function raiCalc() { var resultDiv = document.getElementById('rai-result'); resultDiv.style.display = 'block'; resultDiv.innerHTML = '';
// --- Inputs --- var area_ha = parseFloat(document.getElementById('rai-area').value); var C = parseFloat(document.getElementById('rai-c').value); var slope = parseFloat(document.getElementById('rai-slope').value); var length = parseFloat(document.getElementById('rai-length').value); var intensity= parseFloat(document.getElementById('rai-intensity').value); var duration = parseFloat(document.getElementById('rai-duration').value); var CN = parseFloat(document.getElementById('rai-cn-val').value); var P = parseFloat(document.getElementById('rai-rainfall-depth').value); var returnPd = parseInt(document.getElementById('rai-return').value);
var errors = [];
// Validate shared inputs if (isNaN(area_ha) || area_ha 0 ha."); if (isNaN(C) || C 1) errors.push("Runoff coefficient C must be between 0.0 and 1.0."); if (isNaN(intensity) || intensity 0 mm/hr."); if (isNaN(duration) || duration 0 minutes.");
// Validate Tc inputs (optional but warn) var hasTc = !isNaN(slope) && slope >= 0 && !isNaN(length) && length > 0;
// Validate SCS inputs var hasSCS = !isNaN(CN) && CN >= 1 && CN 0; if (!isNaN(CN) && (CN 100)) errors.push("Curve Number CN must be between 1 and 100."); if (!isNaN(P) && P 0 mm.");
if (errors.length > 0) { resultDiv.innerHTML = 'Please fix the following:' + errors.map(function(e){ return ''; }).join('') + ''; return; }
// ============================================= // 1. RATIONAL METHOD Q = C × i × A / 360 // Q in m³/s, i in mm/hr, A in hectares // (Factor: 1 mm/hr × 1 ha = 1/360 m³/s) // ============================================= var area_m2 = area_ha * 10000; var Q_rational = (C * intensity * area_ha) / 360.0; // m³/s
// Runoff volume from Rational Method var duration_hr = duration / 60.0; var vol_rational = Q_rational * duration_hr * 3600.0; // m³
// ============================================= // 2. TIME OF CONCENTRATION – Kirpich Formula // Tc = 0.0195 × L^0.77 × S^(-0.385) (minutes) // L in metres, S = slope as fraction // ============================================= var Tc_min = null; var Tc_str = "N/A (slope or length not provided)"; if (hasTc && slope > 0) { var S_frac = slope / 100.0; Tc_min = 0.0195 * Math.pow(length, 0.77) * Math.pow(S_frac, -0.385); Tc_str = Tc_min.toFixed(1) + " min"; } else if (hasTc && slope === 0) { Tc_str = "N/A (slope = 0, flat terrain)"; }
// ============================================= // 3. SCS CURVE NUMBER METHOD // S = (25400 / CN) - 254 (mm) // Ia = 0.2 × S (initial abstraction, mm) // Q = (P - Ia)² / (P - Ia + S) (mm runoff depth, if P > Ia) // Volume = Q_depth × Area (m³) // ============================================= var scsHTML = ""; if (hasSCS) { var S_mm = (25400.0 / CN) - 254.0; var Ia_mm = 0.2 * S_mm; var Q_depth_mm = 0; var scs_note = ""; if (P 0 ? (Q_depth_mm / P * 100) : 0;
scsHTML = '### SCS Curve Number Results ' + '' + 'Potential Max Retention S' + S_mm.toFixed(1) + ' mm' + 'Initial Abstraction Iₐ (0.2 × S)' + Ia_mm.toFixed(1) + ' mm' + 'Runoff Depth Q' + Q_depth_mm.toFixed(2) + ' mm' + 'Runoff / Rainfall Ratio' + runoff_ratio.toFixed(1) + '%' + 'Runoff Volume (SCS)' + vol_scs.toFixed(1) + ' m³ (' + (vol_scs/1000).toFixed(3) + ' ML)' + '' + (scs_note ? '' + scs_note + '
' : ''); } else { scsHTML = 'SCS results not shown — enter CN and rainfall depth P to enable.
'; }
// ============================================= // 4. DRAINAGE PIPE SIZING (Manning's Equation) // Q = (1/n) × A × R^(2/3) × S^(1/2) // For circular pipe flowing full: // Q = (1/n) × (π/4 × D²) × (D/4)^(2/3) × S^(1/2) // Solve for D given Q_rational // ============================================= var n_pipe = 0.013; // concrete pipe Manning's n var pipe_slope = hasTc && slope > 0 ? slope / 100.0 : 0.005; // use catchment slope or default 0.5% // Rearranged: D = [ Q × n / (π/4 × (1/4)^(2/3) × S^0.5) ]^(3/8) × (4/π)^(3/8) ... simplified: // For full circular pipe: Q = 0.3117 × D^(8/3) × S^(1/2) / n // => D = [ Q × n / (0.3117 × S^0.5) ]^(3/8) var pipe_D_m = Math.pow((Q_rational * n_pipe) / (0.3117 * Math.sqrt(pipe_slope)), 3/8); var pipe_D_mm = pipe_D_m * 1000;
// Round up to nearest standard pipe size var stdSizes = [100,150,225,300,375,450,525,600,675,750,825,900,1050,1200,1350,1500]; var selectedSize = stdSizes[stdSizes.length - 1]; for (var i = 0; i = pipe_D_mm) { selectedSize = stdSizes[i]; break; } }
// ============================================= // 5. RETURN PERIOD FREQUENCY FACTOR // Gumbel distribution: K = -√6/π × (0.5772 + ln(ln(T/(T-1)))) // Adjusted intensity = base intensity × (1 + K × Cv) // Cv assumed 0.3 (typical) // ============================================= var Cv = 0.3; var T = returnPd; var K_gumbel = -(Math.sqrt(6)/Math.PI) * (0.5772 + Math.log(Math.log(T / (T - 1)))); var freq_factor = 1 + K_gumbel * Cv; var Q_freq = Q_rational * freq_factor;
// Build output var html = '### 💧 Rational Method Results (' + returnPd + '-Year Storm) ' + '' + 'Catchment Area' + area_ha.toFixed(2) + ' ha (' + (area_m2).toFixed(0) + ' m²)' + 'Runoff Coefficient C' + C.toFixed(2) + '' + 'Rainfall Intensity i' + intensity.toFixed(1) + ' mm/hr' + 'Storm Duration' + duration.toFixed(0) + ' min' + 'Time of Concentration (Kirpich)' + Tc_str + '' + 'Peak Flow Rate Q (Rational)' + Q_rational.toFixed(4) + ' m³/s (' + (Q_rational*1000).toFixed(2) + ' L/s)' + 'Runoff Volume (Rational)' + vol_rational.toFixed(1) + ' m³ (' + (vol_rational/1000).toFixed(3) + ' ML)' + 'Frequency-Adjusted Peak Q (' + returnPd + '-yr, Gumbel)' + Q_freq.toFixed(4) + ' m³/s (' + (Q_freq*1000).toFixed(2) + ' L/s)' + '' +
'### 🚰 Drainage Pipe Sizing (Manning's Equation) ' + '' + 'Manning's n (concrete pipe)' + n_pipe + '' + 'Pipe Slope Used' + (pipe_slope * 100).toFixed(2) + '%' + 'Calculated Minimum Diameter' + pipe_D_mm.toFixed(1) + ' mm' + 'Recommended Standard Pipe Size' + selectedSize + ' mm diameter' + '' +
scsHTML;
resultDiv.innerHTML = html; }
#### Formulas Used
1. Rational Method (Peak Flow Rate)
Q = C × i × A / 360
2. Time of Concentration – Kirpich Formula
Tc = 0.0195 × L0.77 × S−0.385
3. SCS Curve Number Method (Runoff Depth)
S = (25400 / CN) − 254 | Iₐ = 0.2 × S | Q = (P − Iₐ)² / (P − Iₐ + S) [if P > Iₐ]
4. Manning's Equation – Circular Pipe (Full Flow)
Q = (1/n) × (π/4 × D²) × (D/4)2/3 × S1/2 → D = [Q × n / (0.3117 × √S)]3/8
5. Gumbel Frequency Factor
K = −(√6 / π) × [0.5772 + ln(ln(T / (T−1)))] | QT = Q × (1 + K × Cv)
#### Assumptions & References
- The Rational Method is most accurate for catchments < 80 ha with uniform land use and short concentration times (AS/NZS 3500, ASCE Manual of Engineering Practice No. 36).
- The Kirpich formula was developed for small agricultural watersheds (Kirpich, 1940); results should be verified for urban catchments.
- The SCS CN method (now NRCS TR-55) uses Antecedent Moisture Condition II (average conditions). Initial abstraction ratio Iₐ = 0.2S is the standard assumption.
More Calculators
- Self-Employment Tax Calculator
- Lease Break Cost Calculator
- Tax Lien Payoff Calculator
- Tile Cost Estimator
- Tax Withholding Estimator
- Back Taxes Owed Estimator
- IRS Penalty & Interest Calculator
- PTO Value Calculator
- Payroll Cost Calculator
- Overtime Cost Calculator
- Cost Per Hire Calculator
- Employee Turnover Cost Calculator
Read Next
Tile Layout And Pattern Planner ANA › Life Services Authority › National Calculator Authority › Tile Layout and Pattern Planner .calc-container { max-width:...
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...