HVAC Equipment Sizing Calculator
ANA›Life Services Authority›National 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):
- Conduction: Q = U × A × ΔT (U = assembly U-value, A = area ft², ΔT = outdoor − indoor °F)
- Solar Gain: Qsolar = SHGC × Awindow × Ipeak × CFclimate (Ipeak = 200 BTU/hr·ft²)
- Infiltration (sensible): Qinf = 1.1 × CFM × ΔT where CFM = ACH × Volume / 60
- Infiltration (latent): Qlat = 0.68 × CFM × ΔW (ΔW = humidity ratio difference, gr/lb)
- Occupants: 250 BTU/hr sensible + 200 BTU/hr latent per person (ASHRAE 62.1)
- Lighting/Equipment: Q = W/ft² × Area × 3.412 BTU/W
- Total Cooling: Qtotal = Qsensible + Qlatent
Heating Load Components (BTU/hr):
- Conduction: Q = U × A × ΔT (ΔT = indoor − outdoor °F)
- Infiltration: Qinf = 1.1 × CFM × ΔT
- Total Heating: Sum of all conduction + infiltration (no internal gains credited)
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
- Based on ACCA Manual J (Residential Load Calculation, 8th Ed.) simplified method
- Equipment sizing per ACCA Manual S (Residential Equipment Selection)
- Standard door size assumed at 20 sq ft per door
- Building footprint assumed square for perimeter/wall area estimation
- Peak solar intensity of 200 BTU/hr·ft² per ASHRAE Fundamentals Handbook
- Occupant sensible/latent gains per ASHRAE 62.1 (250/200 BTU/hr per person)
- U-values based on ASHRAE 90.1 prescriptive envelope requirements by insulation level
More Calculators
- Medical Expenses Recovery Calculator
- Vehicle Diminished Value Calculator
- Personal Injury Compensation Estimator
- Auto Claim Settlement Value Estimator
- Total Loss vs Repair Cost Calculator
- Property Damage Loss Assessment Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...