HVAC Load Calculator (Manual J Estimate)
ANA›Life Services Authority›National Calculator Authority›HVAC Load Calculator (Manual J Estimate)
.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 Load Calculator (Manual J Estimate)
Estimates residential heating and cooling loads using ACCA Manual J simplified methodology. Results help size HVAC equipment appropriately.
### 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
Outdoor Winter Design Temp (°F)
Outdoor Summer Design Temp (°F)
Indoor Heating Setpoint (°F)
Indoor Cooling Setpoint (°F)
Climate Zone
Zone 1 (Hot-Humid, e.g. Miami) Zone 2 (Hot, e.g. Houston) Zone 3 (Warm, e.g. Atlanta) Zone 4 (Mixed, e.g. Baltimore) Zone 5 (Cool, e.g. Chicago) Zone 6 (Cold, e.g. Minneapolis) Zone 7 (Very Cold, e.g. Duluth)
### Envelope Construction
Wall Insulation Level
None / Minimal (R-0 to R-5) Low (R-6 to R-10) Standard (R-11 to R-15) Good (R-16 to R-21) Excellent (R-22+)
Ceiling/Attic Insulation Level
None / Minimal (R-0 to R-10) Low (R-11 to R-19) Standard (R-20 to R-30) Good (R-31 to R-38) Excellent (R-39+)
Floor/Foundation Insulation
Uninsulated slab / crawlspace Partially insulated (R-5 to R-10) Well insulated (R-11 to R-19) Excellent (R-20+)
Window Type
Single pane, no coating Double pane, standard Double pane, low-e Triple pane, low-e
Window Area (% of floor area)
### Infiltration & Ventilation
Air Leakage / Infiltration
Leaky (older home, no weatherstripping) Average (some weatherstripping) Tight (weatherstripped, caulked) Very Tight (blower door tested, <3 ACH50)
Number of Occupants
### Internal & Solar Gains (Cooling)
Primary Window Orientation
North-facing (low solar gain) Mixed / Average South-facing (moderate solar gain) West-facing (high afternoon solar gain)
Window Shading
No shading (bare windows) Partial (blinds or partial overhang) Good (exterior shading or deep overhang)
Calculate HVAC Load Enter building details above and click Calculate.
function hvaCalc() { // --- Gather Inputs --- var floorArea = parseFloat(document.getElementById('hva-floor-area').value); var ceilHeight = parseFloat(document.getElementById('hva-ceiling-height').value); var stories = parseFloat(document.getElementById('hva-stories').value); var designHeatTemp = parseFloat(document.getElementById('hva-design-heat-temp').value); var designCoolTemp = parseFloat(document.getElementById('hva-design-cool-temp').value); var indoorHeatTemp = parseFloat(document.getElementById('hva-indoor-heat-temp').value); var indoorCoolTemp = parseFloat(document.getElementById('hva-indoor-cool-temp').value); var climateZone = parseInt(document.getElementById('hva-climate-zone').value); var uWall = parseFloat(document.getElementById('hva-wall-insulation').value); var uCeiling = parseFloat(document.getElementById('hva-ceiling-insulation').value); var uFloor = parseFloat(document.getElementById('hva-floor-insulation').value); var uWindow = parseFloat(document.getElementById('hva-window-type').value); var windowPct = parseFloat(document.getElementById('hva-window-area-pct').value); var infiltration = parseFloat(document.getElementById('hva-infiltration').value); var occupants = parseFloat(document.getElementById('hva-occupants').value); var orientation = parseFloat(document.getElementById('hva-orientation').value); var shading = parseFloat(document.getElementById('hva-shading').value);
// --- Validation --- var errors = []; if (isNaN(floorArea) || floorArea 20000) errors.push("Floor area must be 100–20,000 sq ft."); if (isNaN(ceilHeight) || ceilHeight 20) errors.push("Ceiling height must be 7–20 ft."); if (isNaN(designHeatTemp) || designHeatTemp 60) errors.push("Winter design temp must be -30 to 60°F."); if (isNaN(designCoolTemp) || designCoolTemp 120) errors.push("Summer design temp must be 70–120°F."); if (isNaN(windowPct) || windowPct 40) errors.push("Window area % must be 5–40%."); if (isNaN(occupants) || occupants 20) errors.push("Occupants must be 1–20."); if (indoorHeatTemp >= designCoolTemp) errors.push("Winter design temp must be below indoor cooling setpoint.");
if (errors.length > 0) { document.getElementById('hva-result').innerHTML = 'Input Errors:' + errors.map(function(e){ return ''; }).join('') + ''; return; }
// --- Derived Geometry --- // Estimate wall area: perimeter × ceiling height × stories // Assume square footprint per story var footprintArea = floorArea / stories; var sideLength = Math.sqrt(footprintArea); var perimeter = 4 * sideLength; var grossWallArea = perimeter * ceilHeight * stories;
// Window area var windowArea = floorArea * (windowPct / 100); var netWallArea = grossWallArea - windowArea; var ceilingArea = footprintArea; // top floor ceiling var floorAreaCalc = footprintArea; // ground floor
// Volume for infiltration var volume = floorArea * ceilHeight;
// --- Temperature Differences --- var deltaT_heat = indoorHeatTemp - designHeatTemp; // heating ΔT var deltaT_cool = designCoolTemp - indoorCoolTemp; // sensible cooling ΔT
// ============================================= // HEATING LOAD (BTU/hr) // Q = U × A × ΔT for each envelope component // =============================================
// Envelope conduction losses var heatWall = uWall * netWallArea * deltaT_heat; var heatCeiling = uCeiling * ceilingArea * deltaT_heat; var heatFloor = uFloor * floorAreaCalc * deltaT_heat; var heatWindow = uWindow * windowArea * deltaT_heat;
// Infiltration heating load // Q_inf = 0.018 BTU/(ft³·°F·ACH) × Volume × ACH × ΔT // ACH natural ≈ infiltration factor (ACH at natural conditions) var ach_natural = infiltration; var heatInfil = 0.018 * volume * ach_natural * deltaT_heat;
// Ventilation (ASHRAE 62.2: 0.03 cfm/sqft + 7.5 cfm/person) var ventCFM = (0.03 * floorArea) + (7.5 * occupants); var heatVent = 1.1 * ventCFM * deltaT_heat; // sensible: 1.1 × CFM × ΔT
var totalHeatingLoad = heatWall + heatCeiling + heatFloor + heatWindow + heatInfil + heatVent;
// ============================================= // COOLING LOAD (BTU/hr) // Sensible + Latent components // =============================================
// Envelope conduction gains (sensible) var coolWall = uWall * netWallArea * deltaT_cool; var coolCeiling = uCeiling * ceilingArea * deltaT_cool * 1.15; // attic temp penalty var coolFloor = uFloor * floorAreaCalc * deltaT_cool * 0.5; // ground moderates var coolWindow = uWindow * windowArea * deltaT_cool;
// Solar heat gain through windows // SHGC assumed 0.25 (low-e) to 0.65 (single pane) based on U-value proxy var shgc = (uWindow >= 1.0) ? 0.65 : (uWindow >= 0.60) ? 0.40 : (uWindow >= 0.35) ? 0.28 : 0.22; // Peak solar irradiance by orientation (BTU/hr·ft²) var solarIrr = 150 * orientation; // baseline ~150 BTU/hr·ft² peak var solarGain = shgc * windowArea * solarIrr * shading;
// Internal gains (sensible) var internalOcc = occupants * 250; // ~250 BTU/hr sensible per person var internalLights = floorArea * 1.5; // ~1.5 BTU/hr per sq ft lighting var internalEquip = floorArea * 1.0; // ~1.0 BTU/hr per sq ft equipment
// Infiltration cooling load (sensible) var coolInfil_sens = 1.1 * (ach_natural * volume / 60) * deltaT_cool;
// Ventilation cooling (sensible) var coolVent_sens = 1.1 * ventCFM * deltaT_cool;
// Total sensible cooling load var sensibleCool = coolWall + coolCeiling + coolFloor + coolWindow + solarGain + internalOcc + internalLights + internalEquip + coolInfil_sens + coolVent_sens;
// Latent cooling load // Climate zone latent fraction: humid climates have higher latent loads var latentFractions = {1: 0.55, 2: 0.45, 3: 0.35, 4: 0.25, 5: 0.20, 6: 0.15, 7: 0.12}; var latentFrac = latentFractions[climateZone] || 0.25;
// Latent from infiltration + ventilation + occupants var latentOcc = occupants * 200; // ~200 BTU/hr latent per person var latentInfil = 0.68 * (ach_natural * volume / 60) * (deltaT_cool * latentFrac * 2.5); var latentVent = 0.68 * ventCFM * (deltaT_cool * latentFrac * 2.5);
var latentCool = latentOcc + latentInfil + latentVent;
var totalCoolingLoad = sensibleCool + latentCool;
// --- Convert to Tons --- var heatingTons = totalHeatingLoad / 12000; var coolingTons = totalCoolingLoad / 12000;
// --- Recommended Equipment Size (with 15% safety factor per Manual J) --- var recHeatBTU = totalHeatingLoad * 1.15; var recCoolBTU = totalCoolingLoad * 1.15; var recHeatTons = recHeatBTU / 12000; var recCoolTons = recCoolBTU / 12000;
// Round to nearest 0.5 ton for equipment sizing var roundedHeatTons = Math.ceil(recHeatTons * 2) / 2; var roundedCoolTons = Math.ceil(recCoolTons * 2) / 2;
// --- Sensible Heat Ratio --- var shr = sensibleCool / totalCoolingLoad;
// --- Format Output --- function fmt(n, d) { return n.toFixed(d !== undefined ? d : 0).replace(/\B(?=(\d{3})+(?!\d))/g, ","); }
var html = '### Manual J Load Estimate Results ';
html += ''; html += '' + 'Component' + 'Heating (BTU/hr)' + 'Cooling (BTU/hr)';
var rows = [ ["Walls (Conduction)", heatWall, coolWall], ["Ceiling/Roof", heatCeiling, coolCeiling], ["Floor/Foundation", heatFloor, coolFloor], ["Windows (Conduction)", heatWindow, coolWindow], ["Solar Gain (Windows)", 0, solarGain], ["Internal Gains (Occ+Ltg+Equip)", 0, internalOcc + internalLights + internalEquip], ["Infiltration", heatInfil, coolInfil_sens], ["Ventilation (Sensible)", heatVent, coolVent_sens], ["Latent Load", 0, latentCool], ];
rows.forEach(function(r, i) { var bg = i % 2 === 0 ? '#f8f9fa' : '#fff'; html += '' + '' + r[0] + '' + '' + (r[1] > 0 ? fmt(r[1]) : '—') + '' + '' + (r[2] > 0 ? fmt(r[2]) : '—') + '' + ''; });
html += '' + 'TOTAL LOAD' + '' + fmt(totalHeatingLoad) + ' BTU/hr' + '' + fmt(totalCoolingLoad) + ' BTU/hr' + '';
html += '';
// Heating summary box html += '' + '#### 🔥 Heating ' + 'Peak Load: ' + fmt(totalHeatingLoad) + ' BTU/hr (' + fmt(heatingTons, 2) + ' tons)
' + 'With 15% Safety Factor: ' + fmt(recHeatBTU) + ' BTU/hr
' + 'Recommended Size: ' + fmt(roundedHeatTons, 1) + ' tons (' + fmt(roundedHeatTons * 12000) + ' BTU/hr)
' + 'Load per sq ft: ' + fmt(totalHeatingLoad / floorArea, 1) + ' BTU/hr·ft²
' + '';
// Cooling summary box html += '' + '#### ❄️ Cooling ' + 'Peak Load: ' + fmt(totalCoolingLoad) + ' BTU/hr (' + fmt(coolingTons, 2) + ' tons)
' + 'With 15% Safety Factor: ' + fmt(recCoolBTU) + ' BTU/hr
' + 'Recommended Size: ' + fmt(roundedCoolTons, 1) + ' tons (' + fmt(roundedCoolTons * 12000) + ' BTU/hr)
' + 'Sensible Heat Ratio (SHR): ' + fmt(shr * 100, 1) + '% | Load per sq ft: ' + fmt(totalCoolingLoad / floorArea, 1) + ' BTU/hr·ft²
' + '';
html += '';
// Geometry summary html += '' + 'Geometry Used: ' + 'Floor Area: ' + fmt(floorArea) + ' ft² | ' + 'Gross Wall: ' + fmt(grossWallArea, 0) + ' ft² | ' + 'Net Wall: ' + fmt(netWallArea, 0) + ' ft² | ' + 'Window: ' + fmt(windowArea, 0) + ' ft² | ' + 'Volume: ' + fmt(volume, 0) + ' ft³ | ' + 'Vent CFM: ' + fmt(ventCFM, 0) + '';
document.getElementById('hva-result').innerHTML = html; }
#### Formulas Used
Envelope Conduction (Heating & Cooling): Q = U × A × ΔT where U = overall heat transfer coefficient (BTU/hr·ft²·°F), A = surface area (ft²), ΔT = design temperature difference (°F)
Infiltration Load: Q_inf = 0.018 × Volume (ft³) × ACH × ΔT (heating) Q_inf = 1.1 × CFM × ΔT (cooling sensible, CFM = ACH × Volume / 60)
Ventilation (ASHRAE 62.2): CFM_vent = 0.03 × Floor Area + 7.5 × Occupants Q_vent = 1.1 × CFM × ΔT (sensible)
Solar Heat Gain: Q_solar = SHGC × A_window × I_solar × Shading Factor where I_solar ≈ 150 BTU/hr·ft² (peak, adjusted by orientation)
Latent Cooling Load: Q_latent = Q_latent_occupants + Q_latent_infiltration + Q_latent_ventilation Q_latent_inf = 0.68 × CFM × ΔW (ΔW = humidity ratio difference, approximated by climate zone latent fraction)
Equipment Sizing: Recommended Size = Total Load × 1.15 (15% safety factor per Manual J), rounded up to nearest 0.5 ton
#### Assumptions & References
- Based on ACCA Manual J (8th Edition) simplified load calculation methodology.
- Building footprint assumed square for perimeter/wall area estimation; actual irregular shapes may vary.
- Attic ceiling load includes a 1.15× penalty for elevated attic temperatures above outdoor design temp.
- Ground floor cooling load uses a 0.5× factor because ground temperature moderates heat gain.
- Solar irradiance baseline of 150 BTU/hr·ft² represents peak summer conditions; adjusted by orientation multiplier.
- Internal gains: 250 BTU/hr sensible + 200 BTU/hr latent per occupant (ASHRAE activity level: seated, light work); lighting 1.5 BTU/hr·ft²; equipment 1.0 BTU/hr·ft².
- Ventilation rates per ASHRAE 62.2-2022: 0.03 cfm/ft² + 7.5 cfm/person.
- A 15% safety/design factor is applied to final loads for equipment selection per Manual J guidance.
- This tool provides a simplified estimate. A full Manual J calculation by a licensed HVAC engineer is required for permit and equipment selection.
More Calculators
- Required Minimum Distribution (RMD) Calculator
- Alimony / Spousal Support Estimator
- Child Support Calculator
- Parenting Time Percentage Calculator
- HUD Complaint Deadline Calculator
- Rent Subsidy Eligibility Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...