Engineering & Science
Muskingum River Flood Routing: C1, C2, C3 Coefficients & Routed Outflow (Q2)
Route upstream flood hydrographs through natural river reaches using McCarthy's Muskingum storage equation Q2 = C1*I2 + C2*I1 + C3*Q1 with automatic Courant/sub-interval stability guard 2*K*X <= dt <= 2*K*(1 - X).
Capture both flood-wave translation (K) and wedge attenuation (X) in river reaches!
Unlike a level-pool reservoir where storage S depends only on outflow Q (X = 0), a rising flood wave entering a river reach piles up a sloping "wedge storage" above prism storage! Gerald McCarthy's US Army Corps of Engineers Muskingum method sets S = K * (X * I + (1 - X) * Q), where K is reach flood-wave travel time (hours) and X in [0, 0.5] is the dimensionless wedge factor (typically 0.15–0.30 for natural rivers; X = 0.5 gives pure unattenuated translation)!
Discretizing continuity over routing step dt gives Q2 = C1*I2 + C2*I1 + C3*Q1 with common denominator D = 2*K*(1 - X) + dt: C1 = (dt - 2*K*X) / D, C2 = (dt + 2*K*X) / D, and C3 = (2*K*(1 - X) - dt) / D, which ALWAYS sum identically to C1 + C2 + C3 = 1! Crucial numerical stability rule: choose dt inside 2*K*X <= dt <= 2*K*(1 - X) so all three weights stay non-negative (preventing non-physical negative outflow dips)! For K = 12 hr, X = 0.20, dt = 6 hr (4.8 <= 6 <= 19.2), C1 = 0.0476, C2 = 0.4286, C3 = 0.5238, routing an inflow jump I1 = 100 -> I2 = 280 m^3/s from Q1 = 100 m^3/s to Q2 = 108.57 m^3/s!
| Muskingum Step (K=12 hr, X=0.20, dt=6 hr) | Inflows I1 -> I2 (m^3/s) | Start Outflow Q1 | Routed Outflow Q2 (m^3/s) |
|---|---|---|---|
| Weights Check (D = 25.2 hr) | C1=0.0476, C2=0.4286, C3=0.5238 | Sum = 1.0000 | All Ci >= 0 (Stable!) |
| Rising Flood Limb (0 -> 6 hr) | I1 = 100 -> I2 = 280 | Q1 = 100.00 | Q2 = 108.57 m^3/s (Wedge storage!) |
| Receding Peak Step (6 -> 12 hr) | I1 = 280 -> I2 = 150 | Q1 = 108.57 | Q2 = 184.01 m^3/s (Delayed wave!) |
Routed Downstream Outflow Q2 = C1*I2 + C2*I1 + C3*Q1 (m^3/s, With Stability Check)
Enforces 0 <= X <= 0.5 and non-negative weight bounds 2*K*X <= dt <= 2*K*(1 - X) before routing.
=IF(OR(B2 <= 0, B3 < 0, B3 > 0.5, B4 < (2 * B2 * B3), B4 > (2 * B2 * (1 - B3))), "Unstable dt (Require 2KX <= dt <= 2K(1-X))", ROUND((((B4 - (2 * B2 * B3)) * B6) + ((B4 + (2 * B2 * B3)) * B5) + (((2 * B2 * (1 - B3)) - B4) * B7)) / ((2 * B2 * (1 - B3)) + B4), 2))Muskingum Leading Coefficient C1 = (dt - 2*K*X) / (2*K*(1 - X) + dt)
Computes C1 directly to verify C1 >= 0.
=ROUND((B4 - (2 * B2 * B3)) / ((2 * B2 * (1 - B3)) + B4), 4)Try the example
Use the original values or change them to test your understanding.