Arte SheetsLearn. Try. Understand.

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 Q1Routed Outflow Q2 (m^3/s)
Weights Check (D = 25.2 hr)C1=0.0476, C2=0.4286, C3=0.5238Sum = 1.0000All Ci >= 0 (Stable!)
Rising Flood Limb (0 -> 6 hr)I1 = 100 -> I2 = 280Q1 = 100.00Q2 = 108.57 m^3/s (Wedge storage!)
Receding Peak Step (6 -> 12 hr)I1 = 280 -> I2 = 150Q1 = 108.57Q2 = 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.

Further reading