HVAC Equipment Sizing Calculator

ANALife Services AuthorityNational Calculator Authority›HVAC Equipment Sizing Calculator

.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

Estimate heating and cooling loads for residential and light commercial spaces using the Manual J simplified method. Results help determine appropriate HVAC equipment capacity in BTU/hr and tons.

### Space Dimensions

Conditioned Floor Area (sq ft)

Ceiling Height (ft)

Number of Windows

Average Window Area per Window (sq ft)

Number of Exterior Doors

### Climate & Envelope

Outdoor Summer Design Temp (°F)

Outdoor Winter Design Temp (°F)

Indoor Summer Setpoint (°F)

Indoor Winter Setpoint (°F)

Wall/Ceiling Insulation Level

Poor (older home, minimal insulation) Average (code minimum) Good (above code, well-sealed) Excellent (high-performance/passive)

Climate Zone

Hot & Humid (zones 1–2) Mixed (zones 3–4) Cold (zones 5–6) Very Cold (zones 7–8)

### Occupancy & Internal Gains

Number of Occupants

Lighting Load (W/sq ft)

Equipment/Appliance Load (W/sq ft)

Infiltration Rate

Tight (0.25 ACH) Average (0.50 ACH) Leaky (0.75 ACH) Very Leaky (1.0 ACH)

Calculate HVAC Load

### Sizing Results

function hvaCalc() { const errEl = document.getElementById('hva-error'); const resEl = document.getElementById('hva-result'); errEl.style.display = 'none'; resEl.style.display = 'none';

// --- Gather Inputs --- const floorArea = parseFloat(document.getElementById('hva-floor-area').value); const ceilHeight = parseFloat(document.getElementById('hva-ceiling-height').value); const numWindows = parseFloat(document.getElementById('hva-num-windows').value); const windowArea = parseFloat(document.getElementById('hva-window-area').value); const numDoors = parseFloat(document.getElementById('hva-num-doors').value); const outdoorSummer = parseFloat(document.getElementById('hva-outdoor-summer').value); const outdoorWinter = parseFloat(document.getElementById('hva-outdoor-winter').value); const indoorSummer = parseFloat(document.getElementById('hva-indoor-summer').value); const indoorWinter = parseFloat(document.getElementById('hva-indoor-winter').value); const insulation = document.getElementById('hva-insulation').value; const climateZone = document.getElementById('hva-climate-zone').value; const occupants = parseFloat(document.getElementById('hva-occupants').value); const lightingLoad = parseFloat(document.getElementById('hva-lighting-load').value); const equipLoad = parseFloat(document.getElementById('hva-equipment-load').value); const infiltration = document.getElementById('hva-infiltration').value;

// --- Validation --- const errors = []; if (isNaN(floorArea) || floorArea 50000) errors.push("Floor area must be 100–50,000 sq ft."); if (isNaN(ceilHeight) || ceilHeight 20) errors.push("Ceiling height must be 7–20 ft."); if (isNaN(numWindows) || numWindows 100) errors.push("Number of windows must be 0–100."); if (isNaN(windowArea) || windowArea 100) errors.push("Window area must be 1–100 sq ft."); if (isNaN(numDoors) || numDoors 20) errors.push("Number of doors must be 0–20."); if (isNaN(outdoorSummer) || outdoorSummer 120) errors.push("Outdoor summer temp must be 70–120°F."); if (isNaN(outdoorWinter) || outdoorWinter 60) errors.push("Outdoor winter temp must be -30 to 60°F."); if (isNaN(indoorSummer) || indoorSummer 80) errors.push("Indoor summer setpoint must be 68–80°F."); if (isNaN(indoorWinter) || indoorWinter 78) errors.push("Indoor winter setpoint must be 60–78°F."); if (isNaN(occupants) || occupants 100) errors.push("Occupants must be 1–100."); if (isNaN(lightingLoad) || lightingLoad 5) errors.push("Lighting load must be 0.1–5 W/sq ft."); if (isNaN(equipLoad) || equipLoad 10) errors.push("Equipment load must be 0.1–10 W/sq ft."); if (outdoorSummer = indoorWinter) errors.push("Outdoor winter temp must be below indoor winter setpoint.");

if (errors.length > 0) { errEl.innerHTML = errors.map(e => `⚠ ${e}

`).join(''); errEl.style.display = 'block'; return; }

// ============================================================ // CONSTANTS & LOOKUP TABLES // ============================================================

// U-values (BTU/hr·ft²·°F) by insulation level // Wall U-value const wallU = { poor: 0.130, average: 0.064, good: 0.040, excellent: 0.020 }[insulation]; // Ceiling/Roof U-value const ceilU = { poor: 0.080, average: 0.030, good: 0.020, excellent: 0.010 }[insulation]; // Window U-value (double-pane assumed for average+) const winU = { poor: 0.870, average: 0.350, good: 0.250, excellent: 0.180 }[insulation]; // Window SHGC (Solar Heat Gain Coefficient) const winSHGC = { poor: 0.70, average: 0.40, good: 0.30, excellent: 0.22 }[insulation]; // Door U-value const doorU = { poor: 0.500, average: 0.200, good: 0.150, excellent: 0.100 }[insulation];

// Infiltration ACH const ach = { tight: 0.25, average: 0.50, leaky: 0.75, 'very-leaky': 1.0 }[infiltration];

// Climate zone solar correction factor for cooling const solarFactor = { 'hot-humid': 1.15, mixed: 1.0, cold: 0.85, 'very-cold': 0.70 }[climateZone];

// ============================================================ // GEOMETRY // ============================================================ const volume = floorArea * ceilHeight; // ft³ const totalWindowArea = numWindows * windowArea; // ft² const totalDoorArea = numDoors * 20; // ft² (std 20 sq ft door) // Estimate wall area: perimeter × height (assume square footprint) const perimeter = 4 * Math.sqrt(floorArea); // ft const grossWallArea = perimeter * ceilHeight; // ft² const netWallArea = grossWallArea - totalWindowArea - totalDoorArea; // ft²

// ============================================================ // COOLING LOAD CALCULATION (BTU/hr) // ============================================================ const dT_cool = outdoorSummer - indoorSummer; // °F temperature difference

// 1. Envelope conduction (walls, ceiling, windows, doors) const wallCool = wallU * netWallArea * dT_cool; const ceilCool = ceilU * floorArea * dT_cool; const winCondCool= winU * totalWindowArea * dT_cool; const doorCool = doorU * totalDoorArea * dT_cool;

// 2. Solar gain through windows // Peak solar intensity ~200 BTU/hr·ft² (ASHRAE, adjusted by climate) const peakSolar = 200 * solarFactor; const solarGain = winSHGC * totalWindowArea * peakSolar;

// 3. Infiltration cooling load // Q_inf = 1.1 × CFM × ΔT (sensible) // CFM = ACH × Volume / 60 const cfm = (ach * volume) / 60; const infCool = 1.1 * cfm * dT_cool;

// 4. Internal gains // Occupants: 250 BTU/hr sensible + 200 BTU/hr latent per person (ASHRAE) const occGain = occupants * 250; // Lighting: 1 W = 3.412 BTU/hr const lightGain = lightingLoad * floorArea * 3.412; // Equipment: 1 W = 3.412 BTU/hr const equipGain = equipLoad * floorArea * 3.412;

// 5. Latent load (moisture) // Occupant latent + infiltration latent const occLatent = occupants * 200; // Infiltration latent: 0.68 × CFM × ΔW (assume ΔW = 30 gr/lb for humid climates) const deltaW = { 'hot-humid': 35, mixed: 25, cold: 15, 'very-cold': 10 }[climateZone]; const infLatent = 0.68 * cfm * deltaW;

// Total sensible cooling load const sensibleCool = wallCool + ceilCool + winCondCool + doorCool + solarGain + infCool + occGain + lightGain + equipGain; // Total latent cooling load const latentCool = occLatent + infLatent; // Total cooling load const totalCool = sensibleCool + latentCool; // Sensible Heat Ratio const shr = sensibleCool / totalCool;

// ============================================================ // HEATING LOAD CALCULATION (BTU/hr) // ============================================================ const dT_heat = indoorWinter - outdoorWinter; // °F temperature difference

// 1. Envelope conduction const wallHeat = wallU * netWallArea * dT_heat; const ceilHeat = ceilU * floorArea * dT_heat; const winHeat = winU * totalWindowArea * dT_heat; const doorHeat = doorU * totalDoorArea * dT_heat;

// 2. Infiltration heating load (no solar credit for heating design) const infHeat = 1.1 * cfm * dT_heat;

// 3. Total heating load (no internal gains credited — conservative per Manual J) const totalHeat = wallHeat + ceilHeat + winHeat + doorHeat + infHeat;

// ============================================================ // EQUIPMENT SIZING // ============================================================ // Apply 15% safety factor per ACCA Manual S const coolDesign = totalCool * 1.15; const heatDesign = totalHeat * 1.15;

// Convert to tons (1 ton = 12,000 BTU/hr) const coolTons = coolDesign / 12000; // Round to nearest 0.5 ton (standard equipment sizes) const coolTonsRounded = Math.ceil(coolTons * 2) / 2;

// Heating in kW (for heat pump / electric) const heatKW = heatDesign / 3412;

// Rule-of-thumb check (BTU/hr per sq ft) const coolPerSqFt = totalCool / floorArea; const heatPerSqFt = totalHeat / floorArea;

// ============================================================ // OUTPUT // ============================================================ document.getElementById('hva-output').innerHTML = `

ParameterValue

Space Summary Conditioned Volume${volume.toLocaleString()} ft³ Net Wall Area${netWallArea.toFixed(0)} ft² Total Window Area${totalWindowArea.toFixed(0)} ft² Infiltration Rate${cfm.toFixed(0)} CFM (${ach} ACH)

Cooling Load Breakdown Wall Conduction${wallCool.toFixed(0)} BTU/hr Ceiling Conduction${ceilCool.toFixed(0)} BTU/hr Window Conduction${winCondCool.toFixed(0)} BTU/hr Door Conduction${doorCool.toFixed(0)} BTU/hr Solar Gain (windows)${solarGain.toFixed(0)} BTU/hr Infiltration (sensible)${infCool.toFixed(0)} BTU/hr Occupant Gains${occGain.toFixed(0)} BTU/hr Lighting Gains${lightGain.toFixed(0)} BTU/hr Equipment Gains${equipGain.toFixed(0)} BTU/hr Latent Load${latentCool.toFixed(0)} BTU/hr Total Cooling Load${totalCool.toFixed(0)} BTU/hr Sensible Heat Ratio (SHR)${(shr * 100).toFixed(1)}% Cooling Intensity${coolPerSqFt.toFixed(1)} BTU/hr·ft²

Heating Load Breakdown Wall Conduction${wallHeat.toFixed(0)} BTU/hr Ceiling Conduction${ceilHeat.toFixed(0)} BTU/hr Window Conduction${winHeat.toFixed(0)} BTU/hr Door Conduction${doorHeat.toFixed(0)} BTU/hr Infiltration${infHeat.toFixed(0)} BTU/hr Total Heating Load${totalHeat.toFixed(0)} BTU/hr Heating Intensity${heatPerSqFt.toFixed(1)} BTU/hr·ft²

Recommended Equipment Size (with 15% safety factor) Cooling Capacity Needed${coolDesign.toFixed(0)} BTU/hr Recommended AC/HP Size${coolTonsRounded.toFixed(1)} tons (${(coolTonsRounded * 12000).toLocaleString()} BTU/hr) Heating Capacity Needed${heatDesign.toFixed(0)} BTU/hr (${heatKW.toFixed(1)} kW)

⚠ This is a simplified Manual J estimate. A full Manual J calculation by a licensed HVAC engineer is required for permit applications and final equipment selection.

`; resEl.style.display = 'block'; }

#### Formulas Used

Cooling Load Components (BTU/hr):

Heating Load Components (BTU/hr):

Equipment Sizing: Design load = Calculated load × 1.15 (15% safety factor per ACCA Manual S). Cooling capacity rounded up to nearest 0.5-ton increment.

#### Assumptions & References

More Calculators

Read Next

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

References