Filter Media Bed Depth & Contact Time Calculator

ANALife Services AuthorityNational Calculator Authority›Filter Media Bed Depth & Contact Time 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; } }

Filter Media Bed Depth & Contact Time Calculator

Calculate the empty bed contact time (EBCT), hydraulic loading rate, and related parameters for granular filter media beds used in water and wastewater treatment.

Media Bed Depth (m)

Filter Bed Area (m²)

Influent Flow Rate (m³/h)

Media Bed Porosity (ε, dimensionless)

Media Bulk Density (kg/m³)

Calculate

function filCalc() { const resultDiv = document.getElementById('fil_result'); resultDiv.style.display = 'block';

const bedDepth = parseFloat(document.getElementById('fil_bed_depth').value); const filterArea = parseFloat(document.getElementById('fil_filter_area').value); const flowRate = parseFloat(document.getElementById('fil_flow_rate').value); const porosity = parseFloat(document.getElementById('fil_porosity').value); const mediaDensity = parseFloat(document.getElementById('fil_media_density').value);

// --- Validation --- const errors = []; if (isNaN(bedDepth) || bedDepth 0 m."); if (isNaN(filterArea) || filterArea 0 m²."); if (isNaN(flowRate) || flowRate 0 m³/h."); if (isNaN(porosity) || porosity = 1) errors.push("Porosity must be between 0 and 1 (exclusive)."); if (isNaN(mediaDensity) || mediaDensity 0 kg/m³."); if (!isNaN(bedDepth) && (bedDepth 10)) errors.push("Bed Depth is typically 0.1–10 m for practical filters."); if (!isNaN(porosity) && (porosity 0.9)) errors.push("Porosity is typically 0.10–0.90 for granular media.");

if (errors.length > 0) { resultDiv.innerHTML = 'Input Errors:' + errors.map(e => '').join('') + ''; return; }

// ── Core Calculations ──────────────────────────────────────────────────────

// 1. Hydraulic Loading Rate (HLR) = Q / A [m/h] (also called surface overflow rate) const hlr = flowRate / filterArea;

// 2. Empty Bed Contact Time (EBCT) = V_bed / Q = (A × L) / Q [h → convert to min] // EBCT does NOT account for porosity — it uses the full bed volume const bedVolume = filterArea * bedDepth; // m³ const ebct_h = bedVolume / flowRate; // hours const ebct_min = ebct_h * 60; // minutes

// 3. Actual (pore) Contact Time = EBCT × ε [min] // Only the void volume is available for fluid residence const actualContactTime_min = ebct_min * porosity;

// 4. Interstitial (pore) velocity = HLR / ε [m/h] const interstitialVelocity = hlr / porosity;

// 5. Media Mass in Bed = bulk density × bed volume [kg] const mediaMass = mediaDensity * bedVolume;

// 6. Specific Throughput rate = Q / mediaMass [m³/h per kg] — useful for GAC sizing const specificThroughput = flowRate / mediaMass;

// 7. Bed Volumes per Hour (BV/h) = Q / V_bed [h⁻¹] const bedVolumesPerHour = flowRate / bedVolume;

// ── Formatting helper ────────────────────────────────────────────────────── function fmt(val, dec) { return val.toFixed(dec); }

// ── Warnings ────────────────────────────────────────────────────────────── const warnings = []; if (hlr 20) warnings.push("⚠️ HLR > 20 m/h — may exceed typical rapid-sand filter limits (5–15 m/h)."); if (ebct_min 60) warnings.push("⚠️ EBCT > 60 min — unusually long; verify inputs.");

const warnHtml = warnings.length
? '' + warnings.map(w => '').join('') + ''
'';

resultDiv.innerHTML = warnHtml + ` ### Results

ParameterValueUnit Bed Volume ${fmt(bedVolume, 2)}m³ Hydraulic Loading Rate (HLR) ${fmt(hlr, 3)}m/h Empty Bed Contact Time (EBCT) ${fmt(ebct_min, 2)}min Actual Pore Contact Time ${fmt(actualContactTime_min, 2)}min Interstitial (Pore) Velocity ${fmt(interstitialVelocity, 3)}m/h Media Mass in Bed ${fmt(mediaMass, 1)}kg Specific Throughput Rate ${fmt(specificThroughput * 1000, 4)}m³/h per tonne Bed Volumes per Hour ${fmt(bedVolumesPerHour, 3)}BV/h `; }

#### Formulas Used

1. Bed Volume: Vbed = A × L

2. Hydraulic Loading Rate (HLR / Surface Overflow Rate): HLR = Q / A    [m/h]

3. Empty Bed Contact Time (EBCT): EBCT = Vbed / Q = (A × L) / Q    [h or min] Uses the total bed volume — does not subtract void space.

4. Actual (Pore) Contact Time: tactual = EBCT × ε    [min] Only the void (pore) volume is occupied by flowing water.

5. Interstitial (Pore) Velocity: vi = HLR / ε    [m/h]

6. Media Mass: m = ρbulk × Vbed    [kg]

7. Bed Volumes per Hour: BV/h = Q / Vbed = 1 / EBCTh

Where: A = filter area (m²), L = bed depth (m), Q = flow rate (m³/h), ε = porosity (dimensionless), ρbulk = bulk density (kg/m³).

#### Assumptions & References

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References