Calculate volumetric flow rate based on stack geometry and gas velocity.
Metric (Meters, m/s)
Imperial (Inches, ft/min)
Circular / Round
Rectangular / Square
Calculation Results
Cross-Sectional Area:–
Flow Rate (Per Second):–
Flow Rate (Per Minute):–
Flow Rate (Per Hour):–
function updateLabels() {
var units = document.getElementById('sfr_units').value;
if (units === 'metric') {
document.getElementById('lbl_diameter').innerText = 'Stack Diameter (m)';
document.getElementById('lbl_width').innerText = 'Stack Width (m)';
document.getElementById('lbl_depth').innerText = 'Stack Depth (m)';
document.getElementById('lbl_velocity').innerText = 'Average Gas Velocity (m/s)';
document.getElementById('sfr_diameter').placeholder = 'e.g., 0.5';
document.getElementById('sfr_velocity').placeholder = 'e.g., 15';
} else {
document.getElementById('lbl_diameter').innerText = 'Stack Diameter (inches)';
document.getElementById('lbl_width').innerText = 'Stack Width (inches)';
document.getElementById('lbl_depth').innerText = 'Stack Depth (inches)';
document.getElementById('lbl_velocity').innerText = 'Average Gas Velocity (ft/min)';
document.getElementById('sfr_diameter').placeholder = 'e.g., 24';
document.getElementById('sfr_velocity').placeholder = 'e.g., 2000';
}
}
function toggleShapeInputs() {
var shape = document.getElementById('sfr_shape').value;
var diameterGroup = document.getElementById('input_diameter_group');
var widthGroup = document.getElementById('input_width_group');
var depthGroup = document.getElementById('input_depth_group');
if (shape === 'circular') {
diameterGroup.style.display = 'flex';
widthGroup.style.display = 'none';
depthGroup.style.display = 'none';
diameterGroup.classList.remove('hidden');
widthGroup.classList.add('hidden');
depthGroup.classList.add('hidden');
} else {
diameterGroup.style.display = 'none';
widthGroup.style.display = 'flex';
depthGroup.style.display = 'flex';
diameterGroup.classList.add('hidden');
widthGroup.classList.remove('hidden');
depthGroup.classList.remove('hidden');
}
}
function calculateFlowRate() {
var units = document.getElementById('sfr_units').value;
var shape = document.getElementById('sfr_shape').value;
var velocity = parseFloat(document.getElementById('sfr_velocity').value);
var area = 0;
var flowSec = 0;
var flowMin = 0;
var flowHour = 0;
// Validation
if (isNaN(velocity)) {
alert("Please enter a valid Gas Velocity.");
return;
}
// Calculate Area
if (shape === 'circular') {
var diameter = parseFloat(document.getElementById('sfr_diameter').value);
if (isNaN(diameter)) {
alert("Please enter a valid Diameter.");
return;
}
if (units === 'metric') {
// Diameter in meters
area = Math.PI * Math.pow((diameter / 2), 2);
} else {
// Diameter in inches, convert to feet for area calculation (Area in sq ft)
// d (ft) = d (in) / 12
var diaFeet = diameter / 12;
area = Math.PI * Math.pow((diaFeet / 2), 2);
}
} else {
var width = parseFloat(document.getElementById('sfr_width').value);
var depth = parseFloat(document.getElementById('sfr_depth').value);
if (isNaN(width) || isNaN(depth)) {
alert("Please enter valid Width and Depth dimensions.");
return;
}
if (units === 'metric') {
// meters
area = width * depth;
} else {
// inches to feet
area = (width / 12) * (depth / 12);
}
}
// Calculate Flow
if (units === 'metric') {
// Area is m2, Velocity is m/s
// Q = A * V -> m3/s
flowSec = area * velocity;
flowMin = flowSec * 60;
flowHour = flowSec * 3600;
// Display
document.getElementById('res_area').innerHTML = area.toFixed(4) + ' m²';
document.getElementById('lbl_res_primary').innerHTML = 'Flow Rate (m³/s):';
document.getElementById('res_flow_sec').innerHTML = flowSec.toFixed(4);
document.getElementById('lbl_res_secondary').innerHTML = 'Flow Rate (m³/min):';
document.getElementById('res_flow_min').innerHTML = flowMin.toFixed(2);
document.getElementById('lbl_res_tertiary').innerHTML = 'Flow Rate (m³/hr):';
document.getElementById('res_flow_hour').innerHTML = flowHour.toFixed(2);
} else {
// Area is ft2, Velocity is ft/min (FPM)
// Q = A * V -> ft3/min (CFM)
flowMin = area * velocity; // CFM
flowSec = flowMin / 60; // CFS
flowHour = flowMin * 60; // CFH
// Display
document.getElementById('res_area').innerHTML = area.toFixed(4) + ' ft²';
document.getElementById('lbl_res_primary').innerHTML = 'Flow Rate (ACFM):';
document.getElementById('res_flow_sec').innerHTML = flowMin.toFixed(2) + ' (ft³/min)'; // Swapped position for importance in Imperial
document.getElementById('lbl_res_secondary').innerHTML = 'Flow Rate (ACFS):';
document.getElementById('res_flow_min').innerHTML = flowSec.toFixed(4) + ' (ft³/sec)';
document.getElementById('lbl_res_tertiary').innerHTML = 'Flow Rate (ACFH):';
document.getElementById('res_flow_hour').innerHTML = flowHour.toFixed(0) + ' (ft³/hr)';
}
document.getElementById('sfr_results').style.display = 'block';
}
// Initialize logic on load
updateLabels();
toggleShapeInputs();
Understanding Stack Flow Rate Calculations
Calculating the volumetric flow rate of an industrial stack or exhaust duct is a fundamental task in environmental engineering, HVAC system design, and emissions monitoring. The stack flow rate represents the volume of gas that passes through the stack cross-section per unit of time.
The Flow Rate Formula
The basic principle of calculating the volumetric flow rate ($Q$) is derived from the continuity equation, multiplying the cross-sectional area of the stack ($A$) by the average velocity of the gas stream ($V$).
Formula: $Q = A \times V$
Q (Flow Rate): Typically measured in cubic meters per second ($m^3/s$) or Actual Cubic Feet per Minute (ACFM).
A (Area): The internal cross-sectional area of the stack. For circular stacks, $A = \pi \times r^2$. For rectangular stacks, $A = Width \times Depth$.
V (Velocity): The average speed of the gas moving through the stack, usually determined by a Pitot tube traverse or thermal flow meter.
Why "Actual" vs. "Standard" Matters
The calculator above provides the Actual Flow Rate based on the operating conditions found in the stack. In environmental reporting, you may often need to convert this to "Standard Conditions" (SCFM or $Nm^3/hr$).
Actual flow ($Q_a$) depends on the temperature and pressure inside the stack. Hotter gases expand, meaning the same mass of gas occupies a larger volume. To compare emissions against regulatory limits, engineers convert actual flow to standard flow using temperature and pressure correction factors.
Common Units Used
Depending on your location and industry, units vary significantly:
Metric System: Velocity is usually in meters per second ($m/s$), and stack dimensions in meters. The resulting flow is often reported in cubic meters per hour ($m^3/hr$) for large industrial applications.
Imperial System: Velocity is often measured in feet per minute (FPM). Stack dimensions are measured in inches (converted to square feet for calculation). The industry standard for output is ACFM (Actual Cubic Feet per Minute).
How to Use This Calculator
Select System: Choose between Metric ($m$, $m/s$) or Imperial (inches, $ft/min$).
Define Shape: Choose Circular for round stacks or Rectangular for square ducts.
Enter Dimensions: Input the internal diameter or width/depth. Do not include the wall thickness.
Input Velocity: Enter the average gas velocity obtained from your flow monitoring equipment.
Calculate: Click the button to see the volumetric flow rate in various time bases.