Proper duct sizing is critical for HVAC efficiency, noise control, and system longevity. If ducts are too small, the system will be noisy and work harder (increasing energy costs). If they are too large, air velocity drops, and rooms may not heat or cool effectively.
The calculation is primarily based on two factors: CFM (Cubic Feet per Minute) and Friction Rate. The industry standard for residential design often uses a friction rate of 0.1 inches of water column (w.c.) per 100 feet of duct run.
Common CFM Guidelines
System Size (Tons)
Total CFM (Approx)
Main Trunk Round Duct (at 0.1 Friction)
1.5 Tons
600 CFM
12″
2.0 Tons
800 CFM
14″
2.5 Tons
1000 CFM
14″ – 16″
3.0 Tons
1200 CFM
16″
4.0 Tons
1600 CFM
18″
5.0 Tons
2000 CFM
20″
Using the Calculator
Input CFM: Determine the total airflow required for the space or the equipment capacity (typically 400 CFM per ton of cooling).
Select Friction Rate: Use 0.1 for standard residential calculations. Use lower values (0.05 – 0.08) for quieter, more efficient systems.
Rectangular Conversion: If you are using rectangular ducts, enter one known side (like the joist height) to find the required width.
Velocity Matters
While the friction rate ensures the fan can move the air, Velocity (FPM – Feet Per Minute) ensures comfort. For residential main trunks, velocity should generally stay under 900 FPM. For branch ducts, aim for 600 FPM or less to prevent whistling and air noise.
function calculateDuctSize() {
var cfm = parseFloat(document.getElementById("cfmInput").value);
var friction = parseFloat(document.getElementById("frictionInput").value);
var fixedSide = parseFloat(document.getElementById("rectWidth").value);
if (isNaN(cfm) || isNaN(friction) || cfm <= 0 || friction 0) {
// b = (De^1.25 * (a+b)^0.25) / (1.3^1.25 * a^0.625)
// Iterative approach for precision
var b = (Math.pow(diameter, 2)) / fixedSide; // Initial guess
for(var i = 0; i 0) {
document.getElementById("fixedLabel").innerText = fixedSide;
document.getElementById("rectResult").innerText = otherSide.toFixed(1) + '"';
} else {
document.getElementById("rectResult").innerText = "N/A";
}
document.getElementById("velocityResult").innerText = Math.round(velocity);
document.getElementById("results").style.display = "block";
}