Indoor Air Quality Ventilation Rate Calculator

ANALife Services AuthorityNational Calculator Authority›Indoor Air Quality Ventilation Rate 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; } }

Indoor Air Quality Ventilation Rate Calculator

Calculate the minimum outdoor air ventilation rate required for acceptable indoor air quality based on ASHRAE Standard 62.1 (Ventilation for Acceptable Indoor Air Quality). The calculator uses the Ventilation Rate Procedure combining people-related and area-related components.

Space Type / Occupancy Category

Office Space Conference Room Classroom Retail Store Restaurant Dining Gym / Exercise Area Lobby / Reception Corridor / Hallway Custom (Manual Entry)

Floor Area (ft²)

Number of Occupants (people)

People Outdoor Air Rate, Rp (cfm/person)

Per-person outdoor air requirement (ASHRAE 62.1 Table 6-1)

Area Outdoor Air Rate, Ra (cfm/ft²)

Per-unit-area outdoor air requirement (ASHRAE 62.1 Table 6-1)

Zone Air Distribution Effectiveness, Ez

1.0 — Ceiling supply of cool air (most common) 1.2 — Ceiling supply of warm air ≥ 15°F above space temp 0.8 — Ceiling supply of warm air < 15°F above space temp 0.7 — Floor supply of cool air 1.0 — Floor supply of warm air 0.5 — Makeup supply drawn from ceiling exhaust

ASHRAE 62.1 Table 6-2 — affects zone minimum outdoor air

System Ventilation Efficiency, Ev

For single-zone systems use 1.0; for multi-zone use ASHRAE 62.1 Section 6.2.5

Calculate Ventilation Rate Results will appear here.

const indSpaceDefaults = { office: { rp: 5, ra: 0.06, label: "Office Space" }, conference: { rp: 5, ra: 0.06, label: "Conference Room" }, classroom: { rp: 10, ra: 0.12, label: "Classroom" }, retail: { rp: 7.5, ra: 0.12, label: "Retail Store" }, restaurant: { rp: 7.5, ra: 0.18, label: "Restaurant Dining" }, gym: { rp: 20, ra: 0.06, label: "Gym / Exercise Area" }, lobby: { rp: 7.5, ra: 0.06, label: "Lobby / Reception" }, corridor: { rp: 0, ra: 0.06, label: "Corridor / Hallway" }, custom: { rp: null, ra: null, label: "Custom" } };

function updateDefaults() { const type = document.getElementById("ind-space-type").value; const defaults = indSpaceDefaults[type]; if (type !== "custom") { document.getElementById("ind-rp").value = defaults.rp; document.getElementById("ind-ra").value = defaults.ra; } }

// Initialize defaults on load updateDefaults();

function calcIAQ() { const resultDiv = document.getElementById("ind-result");

// --- Gather inputs --- const floorArea = parseFloat(document.getElementById("ind-floor-area").value); const occupants = parseFloat(document.getElementById("ind-occupants").value); const Rp = parseFloat(document.getElementById("ind-rp").value); const Ra = parseFloat(document.getElementById("ind-ra").value); const Ez = parseFloat(document.getElementById("ind-ez").value); const Ev = parseFloat(document.getElementById("ind-ev").value); const spaceType = document.getElementById("ind-space-type").value;

// --- Validation --- const errors = []; if (isNaN(floorArea) || floorArea 1.5) errors.push("Zone air distribution effectiveness (Ez) must be between 0.1 and 1.5."); if (isNaN(Ev) || Ev 1.0) errors.push("System ventilation efficiency (Ev) must be between 0.1 and 1.0."); if (Rp === 0 && Ra === 0) errors.push("At least one of Rp or Ra must be greater than 0.");

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

// --- ASHRAE 62.1 Ventilation Rate Procedure --- // Step 1: Breathing zone outdoor airflow // Vbz = Rp × Pz + Ra × Az const Vbz_people = Rp * occupants; // cfm — people component const Vbz_area = Ra * floorArea; // cfm — area component const Vbz = Vbz_people + Vbz_area; // cfm — total breathing zone OA

// Step 2: Zone outdoor airflow (accounting for air distribution) // Voz = Vbz / Ez const Voz = Vbz / Ez; // cfm

// Step 3: System outdoor airflow (accounting for ventilation efficiency) // Vot = Voz / Ev (for single-zone; multi-zone uses more complex formula) const Vot = Voz / Ev; // cfm — system-level required OA

// Step 4: Per-person and per-area breakdown const cfm_per_person = Vot / occupants; const cfm_per_sqft = Vot / floorArea;

// Step 5: Convert to other units const Vot_m3s = Vot * 0.000471947; // m³/s const Vot_Ls = Vot * 0.471947; // L/s const Vot_m3h = Vot * 1.69901; // m³/h

// Step 6: Air Changes per Hour (ACH) — assumes 9 ft ceiling height const ceilingHeight = 9.0; // ft (standard assumption) const roomVolume_ft3 = floorArea * ceilingHeight; const ACH = (Vot * 60) / roomVolume_ft3;

// Step 7: Occupant density const occupantDensity = (occupants / floorArea) * 1000; // people per 1000 ft²

// Step 8: CO2 generation estimate (SB-10 method, sedentary adults) // CO2 generation ≈ 0.0106 cfm/person (sedentary adult, ASHRAE) const CO2_gen_cfm_person = 0.0106; // cfm CO2 per person const CO2_total = CO2_gen_cfm_person * occupants; // cfm CO2 generated // Steady-state indoor CO2 concentration (ppm) // Ci = Co + (N × G) / Q where Co=400ppm outdoor, N=occupants, G=CO2 gen rate, Q=OA flow const Co_ppm = 400; // outdoor CO2 ppm const G_cfm = CO2_gen_cfm_person * occupants; // total CO2 generation cfm const Ci_ppm = Co_ppm + (G_cfm / Vot) * 1000000; // steady-state indoor CO2 ppm

// Format numbers function fmt(n, d=1) { return isNaN(n) ? "N/A" : n.toFixed(d); }

const spaceLabel = indSpaceDefaults[spaceType] ? indSpaceDefaults[spaceType].label : "Custom";

resultDiv.innerHTML = ` ### ✓ Ventilation Rate Results

Parameter Value Unit

Space Type ${spaceLabel}

Breathing Zone OA — People Component (Rp × P) ${fmt(Vbz_people, 1)} cfm

Breathing Zone OA — Area Component (Ra × A) ${fmt(Vbz_area, 1)} cfm

Total Breathing Zone OA (Vbz) ${fmt(Vbz, 1)} cfm

Zone Outdoor Airflow (Voz = Vbz / Ez) ${fmt(Voz, 1)} cfm

Required System OA Flow (Vot) ${fmt(Vot, 1)} cfm

Required System OA Flow ${fmt(Vot_Ls, 1)} L/s

Required System OA Flow ${fmt(Vot_m3h, 1)} m³/h

OA Flow per Person ${fmt(cfm_per_person, 2)} cfm/person

OA Flow per ft² ${fmt(cfm_per_sqft, 3)} cfm/ft²

Air Changes per Hour (ACH) @ 9 ft ceiling ${fmt(ACH, 2)} ACH

Occupant Density ${fmt(occupantDensity, 1)} people/1000 ft²

Estimated Steady-State Indoor CO₂ ${fmt(Ci_ppm, 0)} ppm

CO₂ Assessment: ${Ci_ppm

Inputs Used: Floor Area = ${floorArea.toLocaleString()} ft²  |  Occupants = ${occupants}  |  Rp = ${Rp} cfm/person  |  Ra = ${Ra} cfm/ft²  |  Ez = ${Ez}  |  Ev = ${Ev}

`; }

#### Formulas Used (ASHRAE 62.1 Ventilation Rate Procedure)

Step 1 — Breathing Zone Outdoor Airflow:

Vbz = Rp × Pz + Ra × Az

Step 2 — Zone Outdoor Airflow:

Voz = Vbz / Ez

Step 3 — System Outdoor Airflow:

Vot = Voz / Ev

Steady-State CO₂ Concentration:

Ci = Co + (G / Vot) × 10⁶

Air Changes per Hour:

ACH = (Vot × 60) / Vroom   where Vroom = Floor Area × 9 ft

#### Assumptions & References

More Calculators

Read Next

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

References