CIV-470 · Lesson 6 of 12 · 20 min
Culvert hydraulics and fish passage
CIV-370 ended with a recommendation: replace the undersized Ridgeway Road culvert with a 3.6 × 2.1 m concrete box, which passes the 100-year flow of 18 m³/s with 0.81 m of freeboard. The fisheries reviewers' first comment on that recommendation was short: the box must pass fish. Kestrel Creek holds brook trout, and the existing culvert, perched above the downstream pool with a smooth, fast barrel, has blocked their upstream movement for decades. This lesson revisits the culvert with the full set of criteria: hydraulic capacity across the whole range of flows, fish passage, ice and debris, and the shape of the stream bed.
Culvert flow types revisited
FHWA's Hydraulic Design of Highway Culverts (HDS-5), in its third edition of 2012, is the standard North American reference, and its framework is the one used in CIV-370. A culvert operates under inlet control when the barrel can carry more than the entrance admits, so the headwater depends only on the entrance geometry and the flow; it operates under outlet control when the barrel friction, the exit loss or the tailwater set the headwater. At any flow both are computed and the larger headwater governs. HDS-5 gives inlet control equations and charts for many entrance shapes, fitted to laboratory tests; the simplified forms used in this course, weir-like flow at the entrance when unsubmerged and orifice flow when submerged, capture the same behaviour.
Control often switches as the flow rises. At low flows a box on a mild slope runs partly full and the tailwater or barrel friction controls; at intermediate flows the entrance may control; at high flows, with the outlet submerged by a high tailwater, outlet control returns. A performance curve, headwater plotted against flow across the full range, shows these changes and the flow at which the road overtops, and it is a better basis for decisions than a single design point.
Why culverts block fish
Fish need to move up and down streams to spawn, find cold water in summer, reach winter refuges and recolonize reaches after droughts or spills. Culverts block them in four ways. A perched outlet, where the barrel discharges above the downstream pool after the bed has scoured, presents a jump that small fish cannot make. High velocity in a smooth barrel exceeds the speed fish can sustain over the barrel length. Shallow depth at low flow, spread thinly across a wide flat invert, leaves too little water to swim in. And turbulence, debris and ice at the entrance add barriers. A culvert that passes the 100-year flood can still block fish at every flow they need to move.
Under the federal Fisheries Act, works that harmfully alter, disrupt or destroy fish habitat, or that obstruct fish passage, need ministerial authorization unless they follow measures and codes of practice that avoid that harm. Fisheries and Oceans Canada's guidance favours crossings that maintain the natural channel, such as bridges and open-bottom arches, or embedded culverts with a natural bed. Ontario's Ministry of Transportation and the conservation authorities add their own guidance on fish-friendly crossings.
Design approaches for fish passage
Three approaches are used. The hydraulic design approach sets limits on velocity and depth through the barrel at specified fish passage flows, from a low flow at which depth must be adequate to a high flow above which fish are not expected to move, based on the swimming ability of the target species. The stream simulation approach makes the crossing wide enough, typically at least the bankfull width of the channel, with a bed of natural material at the natural slope, so that conditions inside match those outside and no swimming criteria are needed. The no-slope approach places an oversized culvert flat and embedded, so that the bed inside fills naturally. Stream simulation is the most robust for fish and for sediment and debris, but the widest and most costly.
Embedment, setting the culvert invert below the streambed and filling the bottom with bed material, is common to all three. Practice commonly embeds a box or pipe by 20 to 40 % of its rise, with a minimum of about 0.3 m, and adds a low-flow channel and boulders to keep depth at low flow and provide resting places. Embedment costs hydraulic capacity: the opening is smaller, and the natural bed is far rougher than concrete.
# Kestrel Creek crossing: culvert performance curve and a fish passage check
from math import sqrt
UNITS = "SI"
SI = UNITS == "SI"
g, k = 9.81, 1.0
Lb, S0, ke = 24.0, 0.004, 0.5
crest = 3.2 # road low point above the original inlet invert, m
def tailwater(Q): # creek normal depth, trapezoid b 3.0 m, z 2, n 0.035, S 0.004 (CIV-370)
lo, hi = 0.01, 5.0
for _ in range(60):
y = (lo + hi) / 2; A = y * (3 + 2 * y); P = 3 + 2 * y * sqrt(5)
if A * (A / P) ** (2 / 3) * S0 ** 0.5 / 0.035 > Q: hi = y
else: lo = y
return y
def headwater(Q, B, D, nb, emb=0.0):
Dn = D - emb # open height above an embedded bed
q = Q / B; yc = min((q * q / g) ** (1 / 3), Dn); Vc = Q / (B * yc)
hi = yc + (1 + ke) * Vc ** 2 / (2 * g)
if hi > 1.2 * Dn: hi = max(Dn / 2 + (Q / (0.6 * B * Dn)) ** 2 / (2 * g), 1.2 * Dn)
A = B * Dn; R = A / (2 * (B + Dn)); V = Q / A
h0 = max(tailwater(Q) - emb, (yc + Dn) / 2)
ho = h0 + (1 + ke + 2 * g * nb ** 2 * Lb / (k ** 2 * R ** (4 / 3))) * V * V / (2 * g) - Lb * S0
return max(hi, ho) + emb, ("inlet" if hi >= ho else "outlet")
cv = (lambda q: f"{q:5.1f} m3/s", lambda h: f"{h:4.2f} m") if SI else (lambda q: f"{q*35.315:5.0f} cfs", lambda h: f"{h/0.3048:5.2f} ft")
print("Performance curve, 3.6 x 2.1 m box, bed embedded 0.40 m (n 0.013 walls/roof, 0.030 composite)" if SI else
"Performance curve, 12 x 7 ft box, bed embedded 1.3 ft (n 0.013 walls/roof, 0.030 composite)")
for Q in (2, 6, 12, 18, 24, 30):
hw, ctl = headwater(Q, 3.6, 2.1, 0.030, 0.40)
print(f" Q {cv[0](Q)} HW {cv[1](hw)} {ctl:6s} control {'OVERTOPS' if hw > crest else 'freeboard ' + cv[1](crest - hw)}")
lo, hi = 10.0, 60.0
for _ in range(50):
m = (lo + hi) / 2
if headwater(m, 3.6, 2.1, 0.030, 0.40)[0] > crest: hi = m
else: lo = m
print(f"Road overtops at about {cv[0](lo)}")
print("\nAlternatives at the 100-year and climate-check flows (18 and 24 m3/s):" if SI else "\nAlternatives at the 100-year and climate-check flows (640 and 850 cfs):")
for name, B, D, emb, nb in (("3.6 x 2.1 m, not embedded (CIV-370)" if SI else "12 x 7 ft, not embedded (CIV-370)", 3.6, 2.1, 0.0, 0.013),
("3.6 x 2.1 m, embedded 0.40 m" if SI else "12 x 7 ft, embedded 1.3 ft", 3.6, 2.1, 0.40, 0.030),
("4.5 x 2.4 m, embedded 0.40 m" if SI else "15 x 8 ft, embedded 1.3 ft", 4.5, 2.4, 0.40, 0.030)):
r = [crest - headwater(Q, B, D, nb, emb)[0] for Q in (18.0, 24.0)]
print(f" {name:36s} freeboard {cv[1](r[0])} and {cv[1](r[1])}")
# fish passage at the design low and high passage flows: depth and mean velocity in the embedded barrel
for name, Q, Bw in (("low passage flow", 0.08, 4.5), (" in a 1.0 m low-flow channel" if SI else " in a 3 ft low-flow channel", 0.08, 1.0), ("high passage flow", 1.6, 4.5)):
lo2, hi2 = 0.005, 2.0
for _ in range(60):
y = (lo2 + hi2) / 2; A = Bw * y; R = A / (Bw + 2 * y)
if A * R ** (2 / 3) * S0 ** 0.5 / 0.035 > Q: hi2 = y
else: lo2 = y
V = Q / (Bw * y)
if SI: print(f"{name:30s} Q {Q:4.2f} m3/s: depth {y:.2f} m, velocity {V:.2f} m/s")
else: print(f"{name:30s} Q {Q*35.315:4.1f} cfs: depth {y/0.3048:.2f} ft, velocity {V/0.3048:.2f} ft/s")Performance curve, 3.6 x 2.1 m box, bed embedded 0.40 m (n 0.013 walls/roof, 0.030 composite) Q 2.0 m3/s HW 1.32 m outlet control freeboard 1.88 m Q 6.0 m3/s HW 1.60 m outlet control freeboard 1.60 m Q 12.0 m3/s HW 2.22 m inlet control freeboard 0.98 m Q 18.0 m3/s HW 2.89 m outlet control freeboard 0.31 m Q 24.0 m3/s HW 3.85 m outlet control OVERTOPS Q 30.0 m3/s HW 4.92 m outlet control OVERTOPS Road overtops at about 20.1 m3/s Alternatives at the 100-year and climate-check flows (18 and 24 m3/s): 3.6 x 2.1 m, not embedded (CIV-370) freeboard 0.81 m and 0.58 m 3.6 x 2.1 m, embedded 0.40 m freeboard 0.31 m and -0.65 m 4.5 x 2.4 m, embedded 0.40 m freeboard 0.74 m and 0.39 m low passage flow Q 0.08 m3/s: depth 0.06 m, velocity 0.28 m/s in a 1.0 m low-flow channel Q 0.08 m3/s: depth 0.17 m, velocity 0.46 m/s high passage flow Q 1.60 m3/s: depth 0.40 m, velocity 0.88 m/s
Reading the results
Embedding the 3.6 × 2.1 m box by 0.40 m and lining its bottom with stream gravel changes its performance sharply. The composite roughness rises from 0.013 to about 0.030 and the opening falls to 1.7 m. Freeboard at the 100-year flow drops from 0.81 m to 0.31 m, the road overtops at about 20 m³/s, and the climate-check flow of 24 m³/s from CIV-370 would overtop it by 0.65 m. A 4.5 × 2.4 m box embedded 0.40 m restores the capacity: 0.74 m of freeboard at the 100-year flow and 0.39 m at the climate-check flow.
For fish, the wider box gives a mean velocity of 0.88 m/s at the high passage flow, within the 0.9 m/s the team adopts as an illustrative limit for adult brook trout over a 24 m barrel. At the low passage flow of 80 L/s, however, water spread across the 4.5 m bed is only 0.06 m deep. A 1.0 m wide low-flow channel formed in the bed raises the depth to 0.17 m, above the 0.15 m target. The recommended crossing is therefore the 4.5 × 2.4 m box, embedded 0.40 m, with a natural gravel bed, a meandering low-flow channel, boulder clusters for resting, and the bed graded to match the channel upstream and downstream so that no perch can form.
Worked problem
Low-flow depth in the embedded barrel
At the low passage flow of 0.08 m³/s, find the uniform depth on a 4.5 m wide gravel bed (\(n = 0.035\), \(S = 0.004\)) and in a 1.0 m wide low-flow channel.
Show solution
- For a wide shallow flow \(R \approx y\), so \(Q = (1/n)\,b\,y^{5/3}S^{1/2}\).
- \[y = \Big(\frac{nQ}{b\sqrt{S}}\Big)^{3/5} = \Big(\frac{0.035 \times 0.08}{4.5 \times 0.0632}\Big)^{3/5} = (0.00984)^{0.6} = 0.063\ \text{m}\]
- In the 1.0 m channel, side walls matter; solving Manning's equation with \(R = by/(b + 2y)\) gives \(y = 0.17\) m and \(V = 0.08/(1.0 \times 0.17) = 0.46\) m/s.
Answer: The low-flow channel nearly triples the depth for fish without changing the flood capacity.
Ice, debris and sediment
Northern culverts face ice. Frazil ice formed in turbulent open water can accumulate at entrances; in very cold weather, aufeis, sheets of ice built up layer by layer from overflow, can fill a culvert entirely; and spring break-up drives ice and debris into the entrance just as flows rise. Larger openings, embedded natural beds and avoiding culverts in reaches prone to icing all help. Debris, including beaver activity, is a common cause of culvert overtopping in forested watersheds; a debris rack can make it worse by concentrating blockage, so many designers prefer a larger opening and regular inspection, and on Kestrel Creek a beaver management plan.
Sediment continuity matters as well. A culvert narrower or steeper than the channel accelerates flow and scours its outlet, perching it over time, while one that backs up flow causes deposition upstream. The stream simulation idea, matching the channel's width, slope and bed, keeps sediment moving through the crossing as it did before.
| Option | Freeboard at Q100 / climate check | Fish passage | Relative cost |
|---|---|---|---|
| 3.6 × 2.1 m box, not embedded | 0.81 m / 0.58 m | barrier: shallow, fast, smooth | 1.0 |
| 3.6 × 2.1 m box, embedded 0.40 m | 0.31 m / overtops | passable | 1.1 |
| 4.5 × 2.4 m box, embedded 0.40 m | 0.74 m / 0.39 m | passable with low-flow channel | 1.32 |
| 6.0 m open-bottom arch | larger | stream simulation | 1.6 |
The open-bottom arch on footings would leave the natural bed untouched and is the fishery reviewers' preference, but it needs deep footings protected against scour, the subject of lesson 8, on the soft ground near the creek identified in CIV-341. The team recommends the embedded 4.5 m box as the best balance of capacity, fish passage, foundations and cost, and records the arch as the alternative if the agencies require stream simulation.
Practical points
- Draw the performance curve over the full range of flows, not just one design point.
- Check fish passage at a low and a high passage flow, as well as flood capacity.
- Embed the barrel and allow for the lost opening and the rougher bed in the hydraulics.
- Form a low-flow channel and resting places in the embedded bed.
- Match the channel's width, slope and bed where possible, to keep fish and sediment moving.
Common mistakes
MistakeEmbedding a culvert without recalculating its capacity.
InsteadThe opening shrinks and the roughness rises; check the headwater again.
MistakeChecking fish passage only at the design flood.
InsteadFish move at low and moderate flows; check depth at low flow and velocity at the high passage flow.
MistakeFitting a debris rack to protect a small culvert.
InsteadRacks concentrate debris and can block; a larger opening is usually better.
MistakePlacing the invert at the existing scoured outlet level.
InsteadGrade the bed to the natural channel profile so that no perch forms.
Summary and key terms
- Culverts operate under inlet or outlet control, and control can change with flow; performance curves show the whole range.
- Culverts block fish by perched outlets, high velocity, shallow depth and turbulence.
- Hydraulic design, stream simulation and no-slope approaches are used for fish passage; embedment is common to all.
- Embedding the 3.6 × 2.1 m box cuts its 100-year freeboard to 0.31 m; a 4.5 × 2.4 m embedded box gives 0.74 m.
- A low-flow channel provides depth for fish at low flow without reducing flood capacity.
- Ice, debris and sediment continuity also shape the crossing design.
- Inlet control
- Culvert flow in which the entrance limits the discharge.
- Outlet control
- Culvert flow in which barrel friction, exit loss or tailwater limit the discharge.
- Performance curve
- A plot of culvert headwater against discharge over the full range of flows.
- Perched outlet
- A culvert outlet above the downstream water surface, creating a drop that blocks fish.
- Embedment
- Setting the culvert invert below the streambed and filling the bottom with bed material.
- Stream simulation
- A crossing design approach that reproduces the natural channel width, slope and bed through the structure.
- Fish passage flows
- The range of flows, from low to high, at which a crossing must allow fish to move.
- Aufeis
- Layered ice formed by repeated overflow and freezing, which can fill channels and culverts.
Practice problems
Work each problem on paper first, then reveal the answer to check.
A culvert with no embedment has a 100-year headwater of 2.40 m and a road crest at 3.20 m. After embedment the headwater is 2.95 m. What happened to the freeboard?
Show answer
It fell from 0.80 m to 0.25 m.
Find the uniform depth of a flow of 0.10 m³/s on a 3.0 m wide gravel bed with \(n = 0.035\) and \(S = 0.005\), treating it as wide.
Show answer
\(y = (0.035 \times 0.10/(3.0 \times 0.0707))^{0.6} = 0.085\) m.
Give two reasons why an open-bottom arch may be preferred over a box for fish.
Show answer
It keeps the natural bed and slope, so velocities, depths and sediment movement match the stream.
Why does a culvert's control often switch from inlet to outlet control at high flows?
Show answer
A rising tailwater submerges the outlet and barrel losses grow with the square of velocity, so outlet control headwater overtakes inlet control.
Lesson quiz · 5 questions
Score 60% or more to complete this lesson.
Create a free account to save your progress, take quizzes and earn a certificate.