The theoretical flow rate of a positive displacement pump is a fundamental calculation in hydraulic engineering. It represents the volume of fluid a pump transports over a specific period, assuming 100% efficiency. This value is purely geometric, based on the internal dimensions of the pump and the speed at which it rotates.
Engineers use this metric as a baseline to size components such as motors, valves, and actuators. While actual flow rate will always be slightly lower due to internal leakage (slip) and fluid properties, the theoretical flow rate determines the maximum potential capacity of the system.
The Formula
The calculation depends on the unit system used for the pump's displacement (volume moved per single revolution of the shaft).
Metric System (cc/rev)
Q (LPM) = (d × n) / 1000
Where: Q = Theoretical Flow Rate in Liters per Minute (LPM) d = Displacement in cubic centimeters per revolution (cc/rev) n = Rotational Speed in Revolutions per Minute (RPM) 1000 = Conversion factor from cc to Liters
Imperial System (in³/rev)
Q (GPM) = (d × n) / 231
Where: Q = Theoretical Flow Rate in US Gallons per Minute (GPM) d = Displacement in cubic inches per revolution (in³/rev) n = Rotational Speed in RPM 231 = Conversion factor (231 cubic inches = 1 US Gallon)
Theoretical vs. Actual Flow
It is critical to distinguish between Theoretical Flow and Actual Flow.
Theoretical Flow: Assumes zero leakage and perfect sealing. It is the geometric volume displaced.
Actual Flow: The real output measured at the pump outlet. It is always less than theoretical flow due to internal leakage (slip) as pressure increases.
The relationship is defined by Volumetric Efficiency (ηvol):
Actual Flow = Theoretical Flow × Volumetric Efficiency.
Example Calculation
Consider a hydraulic gear pump with a displacement of 50 cc/rev driven by an electric motor at 1450 RPM.
Using the formula:
Q = (50 × 1450) / 1000
Q = 72,500 / 1000 Q = 72.5 LPM
This means, theoretically, the pump will move 72.5 liters of oil every minute. If the pump is 95% efficient, the actual flow would be roughly 68.9 LPM.
function calculateTheoreticalFlow() {
// 1. Get Input Elements
var dispInput = document.getElementById('displacement');
var unitInput = document.getElementById('dispUnit');
var rpmInput = document.getElementById('rpm');
var resultsBox = document.getElementById('results');
var dispError = document.getElementById('dispError');
var rpmError = document.getElementById('rpmError');
var resLPM = document.getElementById('resLPM');
var resGPM = document.getElementById('resGPM');
var resImpGPM = document.getElementById('resImpGPM');
// 2. Reset Errors
dispError.style.display = 'none';
rpmError.style.display = 'none';
resultsBox.style.display = 'none';
dispInput.style.borderColor = '#e2e8f0';
rpmInput.style.borderColor = '#e2e8f0';
// 3. Get Values and Parse
var displacement = parseFloat(dispInput.value);
var unit = unitInput.value;
var rpm = parseFloat(rpmInput.value);
var isValid = true;
// 4. Validation Logic
if (isNaN(displacement) || displacement <= 0) {
dispError.style.display = 'block';
dispInput.style.borderColor = '#e53e3e';
isValid = false;
}
if (isNaN(rpm) || rpm < 0) {
rpmError.style.display = 'block';
rpmInput.style.borderColor = '#e53e3e';
isValid = false;
}
if (!isValid) return;
// 5. Calculation Logic
var flowLPM = 0;
var flowGPM = 0;
var flowImpGPM = 0;
// Convert everything to basic Metric (LPM) first, then convert out
if (unit === 'cc') {
// Formula: (cc/rev * rpm) / 1000 = LPM
flowLPM = (displacement * rpm) / 1000;
} else if (unit === 'cir') {
// Formula: (in3/rev * rpm) / 231 = GPM (US)
// Then convert GPM to LPM
flowGPM = (displacement * rpm) / 231;
flowLPM = flowGPM * 3.78541; // Convert US GPM to LPM
}
// 6. Final Conversions for Output
// If we started with cc, we have LPM, need GPM
if (unit === 'cc') {
flowGPM = flowLPM / 3.78541;
}
// Imperial Gallons (UK)
// 1 Imp Gallon = 4.54609 Liters
flowImpGPM = flowLPM / 4.54609;
// 7. Display Results
resLPM.innerText = flowLPM.toFixed(2) + " LPM";
resGPM.innerText = flowGPM.toFixed(2) + " GPM";
resImpGPM.innerText = flowImpGPM.toFixed(2) + " Imp GPM";
resultsBox.style.display = 'block';
}