Total volume of your main display tank in Gallons.
4x (Low / Planted)
5x (Standard Freshwater)
6x (High Flow Freshwater)
8x (Reef / Saltwater)
10x (High Flow Reef)
Times per hour the tank volume cycles through the sump.
Distance from the return pump to the top of the tank.
Each elbow adds friction, reducing flow.
Calculation Results
Target Flow Rate (Actual)
0 GPH
Total Dynamic Head Pressure
0 ft
Rec. Min Drain Diameter
–
Overflow Linear Length
0 inches
Pump Buying Advice: To achieve 0 GPH, you should buy a return pump rated for approximately 0 GPH at 0 head, because head pressure will reduce output.
Understanding Sump Flow Rates
Designing an aquarium sump system requires balancing the water going up (return pump) with the water coming down (drain/overflow). If your pump is too strong, your tank will overflow. If your drain is too small, it cannot handle the flow.
Key Metrics Explained
Turnover Rate: This is how many times per hour your entire tank volume passes through the filtration system. For freshwater tanks, a turnover of 4-6x is standard. For saltwater and reef tanks, 8-10x is recommended to ensure proper nutrient export and oxygenation.
Head Height (Head Pressure): Pumps have to fight gravity. The vertical distance from the water level in your sump to the rim of your display tank creates "Head Pressure." As height increases, the flow rate of the pump decreases significantly.
Friction Loss (Elbows): Plumbing fittings like 90-degree elbows add resistance. A general rule of thumb is that every 90-degree elbow is equivalent to adding 1 foot of vertical head height in terms of pressure.
Choosing the Right Return Pump
Never buy a pump based solely on the number on the box (the "Zero Head" rating). You must look at the pump's Flow Curve chart. You need a pump that delivers your Target Flow Rate specifically at your Calculated Head Height.
Drain Pipe Sizing Guide (Gravity Flow)
Based on standard gravity-fed drains (Durso, Herbie, or Bean Animal styles), ensure your plumbing diameter can handle the flow:
3/4″ Pipe: Max ~350-600 GPH
1″ Pipe: Max ~600-900 GPH
1.5″ Pipe: Max ~1300-1500 GPH
2″ Pipe: Max ~2500+ GPH
function calculateFlowRate() {
// 1. Get Inputs
var volume = parseFloat(document.getElementById('tankVolume').value);
var turnover = parseFloat(document.getElementById('turnoverRate').value);
var height = parseFloat(document.getElementById('headHeight').value);
var elbows = parseFloat(document.getElementById('elbowCount').value);
// 2. Validation
if (isNaN(volume) || volume <= 0) {
alert("Please enter a valid tank volume.");
return;
}
if (isNaN(height) || height < 0) {
height = 0;
}
if (isNaN(elbows) || elbows < 0) {
elbows = 0;
}
// 3. Calculate Target Flow (The actual water moving through pipes)
var targetFlow = volume * turnover;
// 4. Calculate Dynamic Head Pressure
// Rule of thumb: 1 foot of head per elbow is a conservative estimate for standard plumbing friction
var frictionHead = elbows * 1;
var totalDynamicHead = height + frictionHead;
// 5. Estimate Rated Pump Requirement
// This calculates what the pump box should likely say (Zero Head Rating)
// to achieve the target flow at the calculated head pressure.
// Approximation: Pumps lose ~15-20% efficiency per few feet, highly variable.
// We will add a safety buffer factor.
// Formula: Target / (1 – (Head / MaxHead)) — simpler heuristic used here:
// Assume an average pump shuts off at 12-15ft head.
var estimatedLossFactor = 1 + (totalDynamicHead * 0.15);
var recommendedRatedFlow = Math.ceil(targetFlow * estimatedLossFactor);
// 6. Calculate Drain Size Recommendation
var drainRecommendation = "Unknown";
if (targetFlow <= 350) {
drainRecommendation = 'Minimum 3/4"';
} else if (targetFlow <= 900) {
drainRecommendation = 'Minimum 1"';
} else if (targetFlow <= 1500) {
drainRecommendation = 'Minimum 1.5"';
} else {
drainRecommendation = 'Minimum 2" or Dual 1.5"';
}
// 7. Calculate Recommended Linear Overflow Length
// Formula: Gallons per Hour / 67 = Linear inches of weir needed
var linearOverflow = Math.ceil(targetFlow / 67);
// 8. Update DOM
document.getElementById('targetGPH').innerHTML = Math.round(targetFlow) + " GPH";
document.getElementById('totalHead').innerHTML = totalDynamicHead.toFixed(1) + " ft";
document.getElementById('drainSize').innerText = drainRecommendation;
document.getElementById('overflowLength').innerHTML = linearOverflow + " inches";
document.getElementById('adviceGPH').innerText = Math.round(targetFlow);
document.getElementById('ratedGPH').innerText = recommendedRatedFlow;
// Show results
document.getElementById('results').style.display = "block";
}