HVAC Equipment Sizing Calculator (Manual J Estimator)

ANALife Services AuthorityNational Calculator Authority›HVAC Equipment Sizing Calculator (Manual J Estimator)

.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }

HVAC Equipment Sizing Calculator (Manual J Estimator)

Estimates residential heating and cooling loads using Manual J simplified methodology to help size HVAC equipment properly.

### Building Dimensions

Conditioned Floor Area (sq ft)

Average Ceiling Height (ft)

Number of Stories

1 Story 1.5 Stories 2 Stories 3 Stories

### Climate & Location

Design Temperature Difference (°F)

Difference between indoor setpoint (70°F) and outdoor design temp

Climate Zone

Zone 1 – Very Hot (Miami, Phoenix) Zone 2 – Hot (Houston, Dallas) Zone 3 – Warm (Atlanta, Los Angeles) Zone 4 – Mixed (Kansas City, Seattle) Zone 5 – Cool (Chicago, Denver) Zone 6 – Cold (Minneapolis, Burlington) Zone 7 – Very Cold (Duluth, Fairbanks)

### Insulation & Construction

Wall Insulation Level

Poor (R-0 to R-7) Average (R-11 to R-13) Good (R-15 to R-19) Excellent (R-21+)

Ceiling/Attic Insulation Level

Poor (R-0 to R-11) Average (R-19 to R-30) Good (R-38 to R-49) Excellent (R-60+)

Window Type

Single Pane Double Pane Double Pane Low-E Triple Pane

Window Area (% of floor area)

### Occupancy & Internal Gains

Number of Occupants

Infiltration / Air Tightness

Loose (older home, no weatherstripping) Average (some weatherstripping) Tight (well-sealed, newer construction) Very Tight (Energy Star / Passive House)

Duct Location

Inside Conditioned Space Semi-Conditioned (basement/crawl) Unconditioned (attic/garage)

Calculate HVAC Load

function hvaCalc() { // --- Inputs --- const floorArea = parseFloat(document.getElementById('hva-floor-area').value); const ceilHeight = parseFloat(document.getElementById('hva-ceiling-height').value); const stories = parseFloat(document.getElementById('hva-stories').value); const designTempDiff = parseFloat(document.getElementById('hva-design-temp-diff').value); const climateZone = parseInt(document.getElementById('hva-climate-zone').value); const wallIns = document.getElementById('hva-wall-insulation').value; const ceilIns = document.getElementById('hva-ceiling-insulation').value; const windowType = document.getElementById('hva-window-type').value; const windowPct = parseFloat(document.getElementById('hva-window-area-pct').value); const occupants = parseFloat(document.getElementById('hva-occupants').value); const infiltration = document.getElementById('hva-infiltration').value; const ductLocation = document.getElementById('hva-duct-location').value; const resultDiv = document.getElementById('hva-result');

// --- Validation --- const errors = []; if (isNaN(floorArea) || floorArea 20000) errors.push("Floor area must be between 100 and 20,000 sq ft."); if (isNaN(ceilHeight) || ceilHeight 20) errors.push("Ceiling height must be between 7 and 20 ft."); if (isNaN(designTempDiff) || designTempDiff 120) errors.push("Design temperature difference must be between 10 and 120 °F."); if (isNaN(windowPct) || windowPct 50) errors.push("Window area % must be between 5 and 50."); if (isNaN(occupants) || occupants 20) errors.push("Occupants must be between 1 and 20.");

if (errors.length > 0) { resultDiv.innerHTML = 'Please fix the following:' + errors.map(e => '').join('') + ''; return; }

// ============================================================ // MANUAL J SIMPLIFIED LOAD CALCULATION // Reference: ACCA Manual J 8th Edition (Simplified) // Q = U × A × ΔT (conductive loads) // Q_inf = 0.018 × CFM × ΔT (infiltration load) // ============================================================

// --- Wall U-values (BTU/hr·ft²·°F) --- const wallU = { poor: 0.200, average: 0.090, good: 0.065, excellent: 0.048 }; // --- Ceiling U-values --- const ceilU = { poor: 0.090, average: 0.035, good: 0.026, excellent: 0.017 }; // --- Window U-values (heating) and SHGC (cooling) --- const windowProps = { 'single': { U: 1.10, SHGC: 0.86 }, 'double': { U: 0.48, SHGC: 0.57 }, 'double-low-e': { U: 0.30, SHGC: 0.27 }, 'triple': { U: 0.20, SHGC: 0.20 } }; // --- Infiltration ACH values --- const achMap = { loose: 0.75, average: 0.40, tight: 0.20, 'very-tight': 0.10 }; // --- Duct loss multipliers --- const ductMult = { conditioned: 1.00, semi: 1.10, unconditioned: 1.20 };

// --- Derived geometry --- const volume = floorArea * ceilHeight; // ft³ const wallArea = (floorArea / stories) * 4 * Math.sqrt(floorArea / stories) / (floorArea / stories) * ceilHeight * stories; // Simplified: perimeter ≈ 4 × sqrt(floor area per story), wall area = perimeter × height × stories const perimeterEst = 4 * Math.sqrt(floorArea / stories); const grossWallArea = perimeterEst * ceilHeight * stories; // ft² const windowArea = floorArea * (windowPct / 100); // ft² const netWallArea = Math.max(grossWallArea - windowArea, 0); // ft² const ceilingArea = floorArea / stories; // top-floor ceiling only const floorArea_ext = floorArea / stories; // exposed floor (slab/crawl)

// --- U-values --- const Uwall = wallU[wallIns]; const Uceil = ceilU[ceilIns]; const Uwindow = windowProps[windowType].U; const SHGC = windowProps[windowType].SHGC; const Ufloor = 0.05; // typical insulated floor over unconditioned space

// ============================================================ // HEATING LOAD (BTU/hr) // ============================================================ const Q_wall_heat = Uwall * netWallArea * designTempDiff; const Q_ceil_heat = Uceil * ceilingArea * designTempDiff; const Q_window_heat = Uwindow * windowArea * designTempDiff; const Q_floor_heat = Ufloor * floorArea_ext * (designTempDiff * 0.5); // floor ΔT reduced

// Infiltration heating load: Q = 0.018 × CFM × ΔT const ACH = achMap[infiltration]; const CFM_inf = (volume * ACH) / 60; const Q_inf_heat = 0.018 * CFM_inf * designTempDiff;

// Ventilation (ASHRAE 62.2): CFM_vent = 0.01 × floor_area + 7.5 × (occupants + 1) const CFM_vent = 0.01 * floorArea + 7.5 * (occupants + 1); const Q_vent_heat = 0.018 * CFM_vent * designTempDiff;

const subtotalHeat = Q_wall_heat + Q_ceil_heat + Q_window_heat + Q_floor_heat + Q_inf_heat + Q_vent_heat; const totalHeat_BTU = subtotalHeat * ductMult[ductLocation]; const totalHeat_tons = totalHeat_BTU / 12000;

// ============================================================ // COOLING LOAD (BTU/hr) — CLTD/CLF simplified approach // ============================================================ // Cooling design ΔT typically smaller; use 75% of heating ΔT as approximation const coolDeltaT = designTempDiff * 0.55;

const Q_wall_cool = Uwall * netWallArea * coolDeltaT * 1.0; const Q_ceil_cool = Uceil * ceilingArea * coolDeltaT * 1.3; // attic amplification const Q_floor_cool = 0; // floors rarely contribute to cooling load

// Solar gain through windows: Q_solar = SHGC × windowArea × peak solar (avg 200 BTU/hr·ft²) const peakSolar = 200; const Q_solar = SHGC * windowArea * peakSolar * 0.5; // 0.5 = avg orientation factor

// Conductive window gain const Q_window_cool = Uwindow * windowArea * coolDeltaT;

// Internal gains: occupants (250 BTU/hr sensible each) + lighting (3 W/ft² × 3.41) const Q_occupants = occupants * 250; const Q_lighting = floorArea * 3 * 3.41 * 0.5; // 50% diversity const Q_appliances = floorArea * 1.5; // ~1.5 BTU/hr·ft² appliance estimate

// Infiltration cooling load (sensible only) const Q_inf_cool = 0.018 * CFM_inf * coolDeltaT; const Q_vent_cool = 0.018 * CFM_vent * coolDeltaT;

// Latent load (moisture): ~30% of sensible for average climate, adjusted by zone const latentFactor = [0, 0.20, 0.25, 0.30, 0.25, 0.20, 0.15, 0.10][climateZone];

const sensibleCool = Q_wall_cool + Q_ceil_cool + Q_solar + Q_window_cool + Q_occupants + Q_lighting + Q_appliances + Q_inf_cool + Q_vent_cool; const latentCool = sensibleCool * latentFactor; const subtotalCool = sensibleCool + latentCool; const totalCool_BTU = subtotalCool * ductMult[ductLocation]; const totalCool_tons = totalCool_BTU / 12000;

// ============================================================ // EQUIPMENT SIZING (Manual J recommends no more than 15% oversize) // ============================================================ const heatSize_BTU = Math.ceil(totalHeat_BTU / 5000) * 5000; // round up to nearest 5,000 BTU const coolSize_tons = Math.ceil(totalCool_tons * 2) / 2; // round up to nearest 0.5 ton

// Rule of thumb check (BTU/hr per sq ft) const heatIntensity = totalHeat_BTU / floorArea; const coolIntensity = totalCool_BTU / floorArea;

// Recommended equipment const furnaceSize = heatSize_BTU; const acSize = coolSize_tons;

// ============================================================ // OUTPUT // ============================================================ resultDiv.innerHTML = ` ### Manual J Load Estimate Results

ComponentHeating (BTU/hr)Cooling (BTU/hr)

Walls (${netWallArea.toFixed(0)} ft²) ${Q_wall_heat.toFixed(0)}${Q_wall_cool.toFixed(0)} Ceiling/Roof (${ceilingArea.toFixed(0)} ft²) ${Q_ceil_heat.toFixed(0)}${Q_ceil_cool.toFixed(0)} Windows (${windowArea.toFixed(0)} ft²) ${Q_window_heat.toFixed(0)}${Q_window_cool.toFixed(0)} Solar Gain (windows) —${Q_solar.toFixed(0)} Floor ${Q_floor_heat.toFixed(0)}0 Infiltration (${CFM_inf.toFixed(1)} CFM @ ${ACH} ACH) ${Q_inf_heat.toFixed(0)}${Q_inf_cool.toFixed(0)} Ventilation (${CFM_vent.toFixed(1)} CFM) ${Q_vent_heat.toFixed(0)}${Q_vent_cool.toFixed(0)} Internal Gains (people + lights + appliances) —${(Q_occupants + Q_lighting + Q_appliances).toFixed(0)} Latent Cooling Load —${latentCool.toFixed(0)} Duct Loss Factor (×${ductMult[ductLocation].toFixed(2)}) Applied to subtotals TOTAL LOAD ${totalHeat_BTU.toFixed(0)} BTU/hr ${totalCool_BTU.toFixed(0)} BTU/hr Load Intensity ${heatIntensity.toFixed(1)} BTU/hr·ft² ${coolIntensity.toFixed(1)} BTU/hr·ft²

### 📦 Recommended Equipment Size

Heating Equipment ${(furnaceSize/1000).toFixed(0),000} BTU/hr ${(furnaceSize/1000).toFixed(0)}K BTU/hr furnace or heat pump (${(totalHeat_BTU/1000).toFixed(1)}K BTU/hr calculated load)

Cooling Equipment ${acSize.toFixed(1)} Tons ${acSize.toFixed(1)}-ton AC or heat pump (${totalCool_tons.toFixed(2)} tons calculated load)

⚠️ Sizing Notes:

#### Formulas Used

Conductive Heat Loss/Gain: Q = U × A × ΔT

Infiltration Load: Qinf = 0.018 × CFM × ΔT, where CFM = (Volume × ACH) / 60

Ventilation Load (ASHRAE 62.2): CFMvent = 0.01 × Afloor + 7.5 × (Noccupants + 1)

Solar Gain: Qsolar = SHGC × Awindow × Isolar × orientation factor

Latent Cooling Load: Qlatent = Qsensible × latent fraction (varies by climate zone)

Duct Loss: Total Load = Subtotal × Duct Multiplier (1.00–1.20 depending on duct location)

Tons of Cooling: 1 ton = 12,000 BTU/hr

#### Assumptions & References

More Calculators

Read Next

Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...

References