Filter Media Bed Depth & Contact Time Calculator
ANA›Life Services Authority›National 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
- EBCT is calculated using the total bed volume (standard industry definition), not the void volume alone.
More Calculators
- Defect Rate Calculator
- Pump Flow Rate Calculator
- Pump Head Pressure Calculator
- Property Maintenance Cost Estimator
- Process Capability (Cpk) Calculator
- Motor Horsepower to Pump Output Calculator
- Water Usage Calculator
- North Dakota Prevailing Wage Calculator
- Pennsylvania Contractor License Fee Calculator
- Pennsylvania Construction Permit Cost Estimator
- Pennsylvania Prevailing Wage Rate Calculator
- Pool Deck Square Footage Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...