Heat Load Calculator (Manual J Estimate)

ANALife Services AuthorityNational Calculator Authority›Heat 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; } }

Heat Load Calculator (Manual J Estimate)

Estimates residential heating and cooling loads using the Manual J simplified methodology. Enter your home's characteristics to calculate BTU/hr requirements for properly sizing HVAC equipment.

### Climate & Design Conditions

Outdoor Winter Design Temp (°F)

99% design temperature for your location

Outdoor Summer Design Temp (°F)

1% design temperature for your location

Indoor Winter Setpoint (°F)

Indoor Summer Setpoint (°F)

### Building Envelope

Conditioned Floor Area (sq ft)

Average Ceiling Height (ft)

Gross Exterior Wall Area (sq ft)

Total Window Area (sq ft)

Ceiling / Roof Area (sq ft)

Floor / Foundation Type

Slab-on-Grade Vented Crawlspace Conditioned Basement Floor Over Garage/Unconditioned

### Insulation & Construction

Wall Assembly R-Value (hr·ft²·°F/BTU)

Typical: R-13 (2×4), R-20 (2×6)

Ceiling/Attic R-Value

Typical: R-30 to R-60

Window U-Factor (BTU/hr·ft²·°F)

Double-pane ≈ 0.30; Single-pane ≈ 0.80

Window SHGC (Solar Heat Gain Coefficient)

Low-e ≈ 0.25; Clear glass ≈ 0.60

Floor/Foundation R-Value

Slab edge insulation or floor insulation

Infiltration Rate (ACH)

Tight=0.25, Average=0.35, Leaky=0.60+

### Internal & Solar Gains (Cooling)

Number of Occupants

Each person ≈ 250 BTU/hr sensible

Lighting & Appliance Density (W/sq ft)

Typical residential: 1.0–2.0 W/sq ft

Primary Window Orientation

North (low solar gain) East South West (high solar gain) Mixed / All Directions

Exterior Shading

None Partial (overhangs/trees) Full shading

Calculate Heat Load

Heating Load — BTU/hr —

Cooling Load — BTU/hr —

#### Load Breakdown

Component Heating (BTU/hr) Cooling (BTU/hr)

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

// --- Read inputs --- const outdoorWinter = parseFloat(document.getElementById('hea-outdoor-winter').value); const outdoorSummer = parseFloat(document.getElementById('hea-outdoor-summer').value); const indoorWinter = parseFloat(document.getElementById('hea-indoor-winter').value); const indoorSummer = parseFloat(document.getElementById('hea-indoor-summer').value); const floorArea = parseFloat(document.getElementById('hea-floor-area').value); const ceilHeight = parseFloat(document.getElementById('hea-ceiling-height').value); const wallArea = parseFloat(document.getElementById('hea-wall-area').value); const windowArea = parseFloat(document.getElementById('hea-window-area').value); const ceilingArea = parseFloat(document.getElementById('hea-ceiling-area').value); const floorType = document.getElementById('hea-floor-type').value; const wallR = parseFloat(document.getElementById('hea-wall-rvalue').value); const ceilR = parseFloat(document.getElementById('hea-ceiling-rvalue').value); const windowU = parseFloat(document.getElementById('hea-window-ufactor').value); const windowSHGC = parseFloat(document.getElementById('hea-window-shgc').value); const floorR = parseFloat(document.getElementById('hea-floor-rvalue').value); const ach = parseFloat(document.getElementById('hea-infiltration').value); const occupants = parseFloat(document.getElementById('hea-occupants').value); const lightingDens = parseFloat(document.getElementById('hea-lighting-density').value); const orientation = document.getElementById('hea-orientation').value; const shading = document.getElementById('hea-shading').value;

// --- Validation --- const errors = []; if (isNaN(outdoorWinter) || isNaN(outdoorSummer)) errors.push("Enter valid outdoor design temperatures."); if (isNaN(indoorWinter) || isNaN(indoorSummer)) errors.push("Enter valid indoor setpoint temperatures."); if (isNaN(floorArea) || floorArea = wallArea) errors.push("Window area must be less than wall area."); if (isNaN(ceilingArea) || ceilingArea 1.20) errors.push("Window U-factor must be between 0.10 and 1.20."); if (isNaN(windowSHGC) || windowSHGC 0.87) errors.push("SHGC must be between 0.10 and 0.87."); if (isNaN(floorR) || floorR 2.0) errors.push("Infiltration ACH must be between 0.10 and 2.0."); if (isNaN(occupants) || occupants 0) { errEl.innerHTML = errors.map(e => '⚠ ' + e).join(''); errEl.style.display = 'block'; return; }

// ============================================================ // HEATING LOAD CALCULATIONS // ============================================================ const deltaT_heat = indoorWinter - outdoorWinter; // °F temperature difference

// Net opaque wall area (subtract windows) const netWallArea = wallArea - windowArea;

// Wall conduction: Q = A × U × ΔT where U = 1/R const wallU_heat = 1 / wallR; const Q_wall_heat = netWallArea * wallU_heat * deltaT_heat;

// Ceiling/roof conduction const ceilU_heat = 1 / ceilR; const Q_ceil_heat = ceilingArea * ceilU_heat * deltaT_heat;

// Window conduction: Q = A × U × ΔT const Q_win_heat = windowArea * windowU * deltaT_heat;

// Floor/foundation heat loss // Slab: perimeter × F2 factor; others: area × U × ΔT let Q_floor_heat = 0; const floorU_heat = floorR > 0 ? 1 / floorR : 1 / 2; // default R-2 if uninsulated if (floorType === 'slab') { // Slab perimeter estimate: assume square footprint const perimeterFt = 4 * Math.sqrt(floorArea); // F2 factor (BTU/hr·ft·°F): insulated slab ≈ 0.73, uninsulated ≈ 1.10 const F2 = floorR >= 5 ? 0.73 : 1.10; Q_floor_heat = perimeterFt * F2 * deltaT_heat; } else if (floorType === 'crawl') { // Vented crawlspace: full ΔT applies Q_floor_heat = floorArea * floorU_heat * deltaT_heat; } else if (floorType === 'basement') { // Conditioned basement: reduced ΔT (ground temp ≈ 55°F) const groundTemp = 55; const deltaT_basement = indoorWinter - groundTemp; Q_floor_heat = floorArea * floorU_heat * deltaT_basement; } else if (floorType === 'over-garage') { // Floor over unconditioned space: full ΔT Q_floor_heat = floorArea * floorU_heat * deltaT_heat; }

// Infiltration heat loss: // Q_inf = 0.018 × CFM × ΔT (0.018 = ρ·Cp for air in BTU/ft³·°F) // CFM = (ACH × Volume) / 60 const volume = floorArea * ceilHeight; // ft³ const cfm = (ach * volume) / 60; const Q_inf_heat = 0.018 * cfm * deltaT_heat;

// Total heating load const Q_heat_total = Q_wall_heat + Q_ceil_heat + Q_win_heat + Q_floor_heat + Q_inf_heat;

// ============================================================ // COOLING LOAD CALCULATIONS // ============================================================ const deltaT_cool = outdoorSummer - indoorSummer; // °F temperature difference

// Wall conduction (cooling) // Apply CLTD (Cooling Load Temperature Difference) correction ≈ 1.2× for solar absorption const CLTD_wall = deltaT_cool * 1.2; const Q_wall_cool = netWallArea * wallU_heat * CLTD_wall;

// Ceiling conduction (cooling) — attic amplifies solar gain const CLTD_ceil = deltaT_cool * 1.5; // attic can be 30–50°F above outdoor const Q_ceil_cool = ceilingArea * ceilU_heat * CLTD_ceil;

// Window conduction (cooling) const Q_win_cond_cool = windowArea * windowU * deltaT_cool;

// Solar heat gain through windows: // Q_solar = A × SHGC × SC_factor × shading_factor // Peak solar intensity by orientation (BTU/hr·ft²) — summer peak values const solarIntensity = { north: 30, east: 150, south: 100, west: 175, mixed: 120 }; const shadingFactor = { none: 1.0, partial: 0.75, full: 0.45 }; const peakSolar = solarIntensity[orientation] || 120; const shadeFactor = shadingFactor[shading] || 0.75; const Q_solar_cool = windowArea * windowSHGC * peakSolar * shadeFactor;

// Floor conduction (cooling) — minimal for most floor types
const Q_floor_cool = floorType === 'over-garage'
? floorArea * floorU_heat * deltaT_cool * 0.5
0;

// Infiltration cooling load (sensible only): const Q_inf_cool = 0.018 * cfm * deltaT_cool;

// Internal gains (sensible): // Occupants: 250 BTU/hr sensible per person (ASHRAE) const Q_occupants = occupants * 250;

// Lighting & appliances: 1 W = 3.412 BTU/hr const Q_lighting = lightingDens * floorArea * 3.412;

// Total sensible cooling load const Q_cool_sensible = Q_wall_cool + Q_ceil_cool + Q_win_cond_cool + Q_solar_cool + Q_floor_cool + Q_inf_cool + Q_occupants + Q_lighting;

// Latent cooling load (moisture removal): // Latent ≈ 20–30% of sensible for typical residential const latentFraction = 0.25; const Q_cool_latent = Q_cool_sensible * latentFraction; const Q_cool_total = Q_cool_sensible + Q_cool_latent;

// ============================================================ // DISPLAY RESULTS // ============================================================ const fmt = n => Math.round(n).toLocaleString(); const toTons = btu => (btu / 12000).toFixed(1);

document.getElementById('hea-heating-result').textContent = fmt(Q_heat_total) + ' BTU/hr'; document.getElementById('hea-heating-tons').textContent = toTons(Q_heat_total) + ' tons equivalent'; document.getElementById('hea-cooling-result').textContent = fmt(Q_cool_total) + ' BTU/hr'; document.getElementById('hea-cooling-tons').textContent = toTons(Q_cool_total) + ' tons (' + toTons(Q_cool_sensible) + ' sensible + ' + toTons(Q_cool_latent) + ' latent)';

// Breakdown table const rows = [ ['Opaque Walls', fmt(Q_wall_heat), fmt(Q_wall_cool)], ['Ceiling / Roof', fmt(Q_ceil_heat), fmt(Q_ceil_cool)], ['Windows (Conduction)', fmt(Q_win_heat), fmt(Q_win_cond_cool)], ['Windows (Solar Gain)', '—', fmt(Q_solar_cool)], ['Floor / Foundation', fmt(Q_floor_heat), fmt(Q_floor_cool)], ['Infiltration', fmt(Q_inf_heat), fmt(Q_inf_cool)], ['Occupants', '—', fmt(Q_occupants)], ['Lighting & Appliances', '—', fmt(Q_lighting)], ['Latent (Moisture)', '—', fmt(Q_cool_latent)], ['TOTAL','' + fmt(Q_heat_total) + '', '' + fmt(Q_cool_total) + ''], ];

const tbody = document.getElementById('hea-breakdown-body'); tbody.innerHTML = rows.map((r, i) => { const bg = i === rows.length - 1 ? 'background:#dee2e6;font-weight:700;' : (i % 2 === 0 ? '' : 'background:#f1f3f5;'); return ${r[0]} ${r[1]} ${r[2]}; }).join('');

// Equipment sizing recommendation const heatTons = Q_heat_total / 12000; const coolTons = Q_cool_total / 12000; const designTons = Math.max(heatTons, coolTons); const stdSizes = [1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 5.0]; const recommended = stdSizes.find(s => s >= designTons) || (Math.ceil(designTons * 2) / 2);

document.getElementById('hea-recommendation').innerHTML = **🏠 Equipment Sizing Recommendation** Heating: **${toTons(Q_heat_total)} tons** (${fmt(Q_heat_total)} BTU/hr)  |  Cooling: **${toTons(Q_cool_total)} tons** (${fmt(Q_cool_total)} BTU/hr) **Recommended unit size: ${recommended} tons** — next standard size above your peak load of ${designTons.toFixed(2)} tons. Note: Oversizing by more than 25% reduces efficiency and comfort. Consult a licensed HVAC contractor for a full Manual J calculation.;

resEl.style.display = 'block'; }

#### Formulas Used

Conduction Heat Loss/Gain: Q = A × U × ΔT   where U = 1/R, ΔT = design temperature difference (°F)

Infiltration Load: Qinf = 0.018 × CFM × ΔT   where CFM = (ACH × Volume) / 60 0.018 BTU/ft³·°F = density × specific heat of air

Solar Heat Gain (Cooling): Qsolar = Awindow × SHGC × Ipeak × SF where Ipeak = peak solar intensity by orientation (BTU/hr·ft²), SF = shading factor

Cooling Load Temperature Difference (CLTD): Walls: CLTD = ΔT × 1.2 (solar absorption correction) Ceiling: CLTD = ΔT × 1.5 (attic amplification)

Latent Cooling Load: Qlatent = Qsensible × 0.25 (25% latent fraction, typical residential)

Slab-on-Grade Heat Loss: Qslab = P × F2 × ΔT   where P = perimeter (ft), F2 = edge loss factor (BTU/hr·ft·°F)

Tons of Refrigeration: 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