Exhaust Fan Static Pressure Calculator

Exhaust Fan Static Pressure Calculator

Estimate exhaust fan pressure from airflow, duct size, hood or inlet loss, backdraft damper, wall or roof cap, louvers, filters, fittings, run length, and air temperature.

1Exhaust Fan Presets

Choose a realistic exhaust application, then adjust the duct path, accessories, filter, cap, and temperature to match the actual installation.

2Airflow, Duct, Components, And Temperature
Use the design airflow you need at the room, hood, booth, or capture point.
Presets provide a simple fan curve for checking pressure headroom.
Count tight elbows, riser turns, and hard offsets.
Filter pressure is scaled by the ratio of design airflow to rated airflow.
Hot exhaust is less dense, so velocity pressure and component drops decrease.

Exhaust static pressure result

Results update after calculation.

Ready
Total Static 0.00 in w.g.
Fan Available 0.00 at target airflow
Reserve Margin 0.00 after design reserve
Duct Velocity 0 FPM
Duct Loss 0.00 friction plus fittings
Estimated Delivered 0 CFM if fan is short
Enter exhaust fan inputs and calculate.

Pressure Breakdown

3Selected Fan And Application Grid
0Free CFM

Run a calculation to fill the fan grid.

0Max SP

Fan curve rating.

0Density

Temperature correction.

0Eq Length

Duct plus fittings.

4Fan Preset Reference
Fan preset Useful range Max static model Typical exhaust application
Bath fan, 80 CFM40-80 CFM0.35 in w.g.Short bathroom duct with wall cap
High-static bath fan, 150 CFM80-150 CFM0.70 in w.g.Long bathroom or remote inline bath route
6 in inline mixed-flow fan120-350 CFM1.25 in w.g.Grow tent, fume hood, laundry, utility exhaust
8 in inline mixed-flow fan250-750 CFM1.45 in w.g.Shop fume capture, laser exhaust, light booth
Range hood blower250-600 CFM0.85 in w.g.Residential range hood through roof or wall cap
Commercial roof exhaust700-1500 CFM1.60 in w.g.General building exhaust riser and roof curb
Upblast kitchen fan1500-3000 CFM2.40 in w.g.Grease duct, canopy hood, and roof fan
Wall propeller exhaust2500-5000 CFM0.55 in w.g.Large wall louver ventilation with low resistance
5Component Pressure Reference
Component Low loss Common loss High loss warning
Backdraft damper0.02-0.05 in w.g.0.05-0.12 in w.g.Spring dampers can dominate small fans
Wall or roof cap0.03-0.08 in w.g.0.08-0.18 in w.g.Small caps and screens raise exit loss
Louver or screen0.01-0.05 in w.g.0.05-0.15 in w.g.Dirty insect screen can choke airflow
Filter or media0.05-0.15 in w.g.0.15-0.55 in w.g.Carbon, grease, and MERV filters need fan curve data
Hood or inlet0.02-0.08 in w.g.0.08-0.30 in w.g.Slot hoods and fume arms require capture checks
6Duct Size And Velocity Guide
Duct size Quiet exhaust CFM Utility exhaust CFM High velocity note
4 in round40-8080-120Small fans only; losses climb quickly
6 in round90-180180-350Common inline fan and bath upgrade size
8 in round200-400400-750Good for range hood and light shop exhaust
10 in round350-650650-1200Useful for booths, fume capture, and trunks
14-18 in round900-18001800-4000Commercial exhaust and roof fan territory
7Static Pressure Interpretation
Total static Small fan meaning Inline fan meaning Action to consider
Under 0.25 in w.g.Easy runVery light loadConfirm cap, grille, and real duct length
0.25-0.50 in w.g.Moderate to hardNormal rangeUse fan curve, not free-air CFM
0.50-1.00 in w.g.Too much for many bath fansHigh-static inline rangeReduce fittings, enlarge duct, or select stronger fan
1.00-2.00 in w.g.Not typicalSpecial fan neededCheck filters, booth face velocity, and cap losses
Above 2.00 in w.g.Outside residential rangeIndustrial curve requiredUse manufacturer fan curves and measured pressure
8Exhaust Fan Calculation Tips
Fan curve tip: A fan labeled 600 CFM may deliver much less after filters, caps, louvers, and elbows. Compare the calculated pressure with the fan curve at the target CFM.
Duct tip: If static pressure is high, increasing duct size usually helps more than removing one small fitting because velocity pressure falls with the square of velocity.
Safety and code note: Exhaust systems may involve combustion air, grease duct rules, hazardous fumes, make-up air, and fire separation. Verify the final fan selection, materials, clearances, and controls against local code and manufacturer data.
'; html += '
' + fmt(result.density * 100, 0) + '%Air density

Temperature correction from exhaust air temperature.

'; html += '
' + fmt(result.eqLength, 0) + 'Equivalent ft

Duct length plus fittings and accessories.

'; html += '
' + fmt(data.material.factor, 2) + 'xDuct drag

' + data.material.name + '

'; html += '
' + fmt(result.frictionFactor, 3) + 'Friction factor

Reynolds ' + fmt0(result.reynolds) + '

'; html += '
' + fmt(result.filterLoss, 2) + 'Filter in w.g.

' + data.filter.name + '

'; html += '
' + fmt(result.capLoss + result.louverLoss, 2) + 'Outlet in w.g.

' + data.cap.name + '

'; setHtml('espSpecGrid816', html); } function renderResults(data, result) { var breakdown = ''; setHtml('espLead816', 'Design exhaust is ' + cfmToDisplay(data.cfm) + ' through ' + data.geom.label + ' duct using ' + data.material.name.toLowerCase() + '.'); setText('espBadge816', result.badge); setText('espTotal816', unitSystem === 'metric' ? fmt0(result.total * INWG_TO_PA) : fmt(result.total, 3)); setText('espTotalUnit816', pressureUnitText('total')); setText('espFanAvailable816', unitSystem === 'metric' ? fmt0(result.fanSp * INWG_TO_PA) : fmt(result.fanSp, 3)); setText('espFanAvailableUnit816', pressureUnitText('available')); setText('espMargin816', unitSystem === 'metric' ? fmt0(result.margin * INWG_TO_PA) : fmt(result.margin, 3)); setText('espMarginUnit816', pressureUnitText('after reserve')); setText('espVelocity816', velocityToDisplay(result.velocity)); setText('espVelocityUnit816', velocityUnitText()); setText('espDuctLoss816', unitSystem === 'metric' ? fmt0(result.ductLoss * INWG_TO_PA) : fmt(result.ductLoss, 3)); setText('espDuctLossUnit816', pressureUnitText('duct/fittings')); setText('espDelivered816', unitSystem === 'metric' ? fmt0(result.delivered * CFM_TO_M3H) : fmt0(result.delivered)); setText('espDeliveredUnit816', unitSystem === 'metric' ? 'm3/h if fan is short' : 'CFM if fan is short'); setHtml('espStatus816', result.status); breakdown += row('Airflow and duct geometry', cfmToDisplay(data.cfm) + ' through ' + data.geom.label + ', area ' + fmt(data.geom.areaFt2, 3) + ' sq ft'); breakdown += row('Temperature density correction', fmt(data.tempF, 0) + ' deg F gives ' + fmt(result.density * 100, 1) + '% of standard air density'); breakdown += row('Velocity pressure', 'Velocity ' + fmt0(result.velocity) + ' FPM, VP = (V / 4005)^2 x density = ' + pressureToDisplay(result.vp)); breakdown += row('Straight duct and fittings', lengthToDisplay(data.lengthFt) + ' straight, 90s ' + lengthToDisplay(result.eq90) + ', 45s ' + lengthToDisplay(result.eq45) + ', transitions ' + lengthToDisplay(result.eqTrans)); breakdown += row('Accessory equivalent length', 'Hood, damper, cap, and louver add ' + lengthToDisplay(result.eqAccessory) + '; total equivalent length ' + lengthToDisplay(result.eqLength)); breakdown += row('Duct friction', 'Darcy loss with material factor ' + fmt(data.material.factor, 2) + ' = ' + pressureToDisplay(result.ductLoss)); breakdown += row('Hood or inlet loss', data.hood.name + ' = ' + pressureToDisplay(result.inletLoss)); breakdown += row('Backdraft damper loss', data.damper.name + ' = ' + pressureToDisplay(result.damperLoss)); breakdown += row('Wall or roof cap loss', data.cap.name + ' = ' + pressureToDisplay(result.capLoss)); breakdown += row('Louver or screen loss', data.louver.name + ' = ' + pressureToDisplay(result.louverLoss)); breakdown += row('Filter or media loss', data.filter.name + ' at rated ' + cfmToDisplay(data.filterFlow) + ' = ' + pressureToDisplay(result.filterLoss)); breakdown += row('Component subtotal', 'Inlet + damper + cap + louver + filter = ' + pressureToDisplay(result.componentLoss)); breakdown += row('Total static pressure', 'Duct loss + component subtotal = ' + pressureToDisplay(result.total)); breakdown += row('Reserve requirement', 'Total x ' + fmt(1 + data.reserve, 2) + ' = ' + pressureToDisplay(result.withReserve)); breakdown += row('Fan curve check', pressureToDisplay(result.fanSp) + ' available, reserve margin ' + pressureToDisplay(result.margin)); setHtml('espBreakdown816', breakdown); renderSpecGrid(data, result); byId('espResults816').className = 'esp-section esp-results active'; } function setLabels() { if (unitSystem === 'metric') { setText('espCfmLabel816', 'Exhaust airflow (m3/h)'); setText('espDiameterLabel816', 'Round duct diameter (mm)'); setText('espWidthLabel816', 'Rectangular duct width (mm)'); setText('espHeightLabel816', 'Rectangular duct height (mm)'); setText('espLengthLabel816', 'Straight duct length (m)'); setText('espFilterFlowLabel816', 'Filter rated airflow (m3/h)'); setText('espCustomFilterLabel816', 'Custom filter pressure (Pa)'); setText('espCustomInletLabel816', 'Custom inlet pressure (Pa)'); setText('espTemperatureLabel816', 'Exhaust air temperature (deg C)'); setText('espFanStaticLabel816', 'Custom fan static rating (Pa)'); byId('espUnitMetric816').className = 'esp-unit-btn active'; byId('espUnitImperial816').className = 'esp-unit-btn'; } else { setText('espCfmLabel816', 'Exhaust airflow (CFM)'); setText('espDiameterLabel816', 'Round duct diameter (in)'); setText('espWidthLabel816', 'Rectangular duct width (in)'); setText('espHeightLabel816', 'Rectangular duct height (in)'); setText('espLengthLabel816', 'Straight duct length (ft)'); setText('espFilterFlowLabel816', 'Filter rated airflow (CFM)'); setText('espCustomFilterLabel816', 'Custom filter pressure (in w.g.)'); setText('espCustomInletLabel816', 'Custom inlet pressure (in w.g.)'); setText('espTemperatureLabel816', 'Exhaust air temperature (deg F)'); setText('espFanStaticLabel816', 'Custom fan static rating (in w.g.)'); byId('espUnitImperial816').className = 'esp-unit-btn active'; byId('espUnitMetric816').className = 'esp-unit-btn'; } } function convertFields(nextUnit) { var cfm = readCfm(); var filterFlow = readFilterFlow(); var dia = readInches('espDiameter816', 6); var width = readInches('espWidth816', 12); var height = readInches('espHeight816', 8); var length = readFeet('espLength816', 30); var customFilter = readPressure('espCustomFilter816', 0.2); var customInlet = readPressure('espCustomInlet816', 0.08); var fanStatic = readPressure('espFanStatic816', 0.75); var tempF = readTempF(); if (nextUnit === 'metric') { setValue('espCfm816', fmt0(cfm * CFM_TO_M3H).replace(/,/g, '')); setValue('espFilterFlow816', fmt0(filterFlow * CFM_TO_M3H).replace(/,/g, '')); setValue('espDiameter816', fmt(dia * IN_TO_MM, 0).replace(/,/g, '')); setValue('espWidth816', fmt(width * IN_TO_MM, 0).replace(/,/g, '')); setValue('espHeight816', fmt(height * IN_TO_MM, 0).replace(/,/g, '')); setValue('espLength816', fmt(length * FT_TO_M, 1).replace(/,/g, '')); setValue('espCustomFilter816', fmt0(customFilter * INWG_TO_PA).replace(/,/g, '')); setValue('espCustomInlet816', fmt0(customInlet * INWG_TO_PA).replace(/,/g, '')); setValue('espFanStatic816', fmt0(fanStatic * INWG_TO_PA).replace(/,/g, '')); setValue('espTemperature816', fmt((tempF - 32) * 5 / 9, 0).replace(/,/g, '')); } else { setValue('espCfm816', fmt0(cfm).replace(/,/g, '')); setValue('espFilterFlow816', fmt0(filterFlow).replace(/,/g, '')); setValue('espDiameter816', fmt(dia, 1).replace(/,/g, '')); setValue('espWidth816', fmt(width, 1).replace(/,/g, '')); setValue('espHeight816', fmt(height, 1).replace(/,/g, '')); setValue('espLength816', fmt(length, 1).replace(/,/g, '')); setValue('espCustomFilter816', fmt(customFilter, 2).replace(/,/g, '')); setValue('espCustomInlet816', fmt(customInlet, 2).replace(/,/g, '')); setValue('espFanStatic816', fmt(fanStatic, 2).replace(/,/g, '')); setValue('espTemperature816', fmt(tempF, 0).replace(/,/g, '')); } } window.espToggleShape816 = function() { var shape = byId('espShape816').value; byId('espRoundField816').style.display = shape === 'round' ? 'block' : 'none'; byId('espWidthField816').style.display = shape === 'rect' ? 'block' : 'none'; byId('espHeightField816').style.display = shape === 'rect' ? 'block' : 'none'; window.espCalculate816(); }; window.espSetUnits816 = function(nextUnit) { if (nextUnit === unitSystem) { return; } convertFields(nextUnit); unitSystem = nextUnit; setLabels(); window.espCalculate816(); }; window.espApplyPreset816 = function(key) { var p = presets[key] || presets.shopFume; unitSystem = 'imperial'; setLabels(); setValue('espFanPreset816', p.fan); setValue('espCfm816', p.cfm); setValue('espShape816', p.shape); setValue('espDiameter816', p.dia); setValue('espWidth816', p.width); setValue('espHeight816', p.height); setValue('espDuctMaterial816', p.material); setValue('espLength816', p.length); setValue('espElbows90816', p.e90); setValue('espElbows45816', p.e45); setValue('espTransitions816', p.trans); setValue('espHood816', p.hood); setValue('espDamper816', p.damper); setValue('espCap816', p.cap); setValue('espLouver816', p.louver); setValue('espFilter816', p.filter); setValue('espFilterFlow816', p.filterFlow); setValue('espCustomFilter816', p.customFilter); setValue('espCustomInlet816', p.customInlet); setValue('espTemperature816', p.temp); setValue('espFanStatic816', p.fanStatic); setValue('espReserve816', p.reserve); window.espToggleShape816(); window.espCalculate816(); }; window.espCalculate816 = function() { var data = collect(); var result = solve(data); renderResults(data, result); }; function attachEvents() { var ids = ['espCfm816','espFanPreset816','espShape816','espDiameter816','espWidth816','espHeight816','espDuctMaterial816','espLength816','espElbows90816','espElbows45816','espTransitions816','espHood816','espDamper816','espCap816','espLouver816','espFilter816','espFilterFlow816','espCustomFilter816','espCustomInlet816','espTemperature816','espFanStatic816','espReserve816']; var i; for (i = 0; i < ids.length; i++) { if (byId(ids[i])) { byId(ids[i]).addEventListener('input', function() { window.espCalculate816(); }); byId(ids[i]).addEventListener('change', function() { window.espCalculate816(); }); } } } attachEvents(); setLabels(); window.espToggleShape816(); window.espApplyPreset816('shopFume'); })();

At zero resistance in perfect conditions, fans are rated for how much air they can move. In the real world there is resistance, resistance from everything working against the air flow. The filter resists. The bend resists. The roof cap resists. And all these forces combine to cut down on the amount of air that actualy moves into the outside. Once the combined static pressure overwhelms the capacity of the fan, the amount of air flowing will be far lower.

The system includes all of these components. For a correct reading you need to include them all. Friction is created by straight duct based off its size (diameter), length and smoothness of material. Rigid metal duct is less restrictive than flexible duct. Any sag in flexible duct make it even more restrictive. Transitions, elbows and other fittings adds equal length to the run. Inlets and hoods produce entrance losses. Louvers and roof caps create exit losses. Summing up these gives you the total pressure that the fan must overcome.

Understanding Fan Resistance

The resistance of filters changes as they get dirty. The cleaner the filter, the lower its resistance. The dirtier the filter, the higher its resistance. When sizing your system, assume it will be operating at max resistance. That way, the fan still operates with a full filter. Resistance also depends on temperature. Hot air is less dense than cold air, so the systems resistance drops a bit. If you input the exhaust temperature, the calculator applies the correction automatically.

As static pressure increases, most fans give up airflow. Fan performance curves show this inverse relationship clearly. Choose the right fan for your systems pressure demands using the reference tables as a guide. Higher pressure systems require inline fans versus simple wall fans. A propeller fan becomes very inefficient under high pressure conditions. Choose a fan with enough spare capacity to handle the calculated pressure and still deliver the airflow you need.

These mistakes lead to poor performance. Homeowners pick a fan purely on sound level, while ignoring the impact of fittings and length of ducts. Result: Moisture issues and poor ventilation. Commercial guys might oversize fans for there applications. But each fitting adds resistance, which lowers air flow. With this calculator, youll see the loss of air before installation.

To reduce resistance (static pressure), you can improve the duct design. Increasing duct diameter often drops resistance more then removing a fitting. The smoother the material, the less turbulent it is. Reducing bends in the ducts minimizes losses at fittings. Tightening up loose flexible ducts can reduce internal friction. Lighter dampers on ducted systems replace heavier dampers that adds to resistance. Making these changes can recover lost airflow without needing to replace the fan.

Exhaust Fan Static Pressure Calculator

Author

  • Thomas Martinez

    Hi, I am Thomas Martinez, the owner of ToolCroze.com! As a passionate DIY enthusiast and a firm believer in the power of quality tools, I created this platform to share my knowledge and experiences with fellow craftsmen and handywomen alike.

Leave a Comment