Indoor Air Quality Ventilation Rate Calculator
ANA›Life Services Authority›National 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
- Vbz = Breathing zone outdoor airflow (cfm)
- Rp = People outdoor air rate (cfm/person) — ASHRAE 62.1 Table 6-1
- Pz = Zone population (number of occupants)
- Ra = Area outdoor air rate (cfm/ft²) — ASHRAE 62.1 Table 6-1
- Az = Zone floor area (ft²)
Step 2 — Zone Outdoor Airflow:
Voz = Vbz / Ez
- Ez = Zone air distribution effectiveness (ASHRAE 62.1 Table 6-2)
Step 3 — System Outdoor Airflow:
Vot = Voz / Ev
- Ev = System ventilation efficiency (1.0 for single-zone systems)
Steady-State CO₂ Concentration:
Ci = Co + (G / Vot) × 10⁶
- Co = Outdoor CO₂ concentration (400 ppm assumed)
- G = CO₂ generation rate (0.0106 cfm/person for sedentary adults)
Air Changes per Hour:
ACH = (Vot × 60) / Vroom where Vroom = Floor Area × 9 ft
#### Assumptions & References
- Standard: ASHRAE Standard 62.1-2022, Ventilation and Acceptable Indoor Air Quality in Residential Buildings — Ventilation Rate Procedure (Section 6.2)
- Outdoor air rates (Rp, Ra) are taken from ASHRAE 62.1 Table 6-1 for common space types. Custom values can be entered manually.
- Zone air distribution effectiveness (Ez) values are from ASHRAE 62.1 Table 6-2 based on supply air delivery method and temperature differential.
- System ventilation efficiency (Ev) is 1.0 for single-zone systems. Multi-zone recirculating systems require the more complex procedure in ASHRAE 62.1 Section 6.2.5.
- CO₂ generation rate is 0.0106 cfm/person (≈ 0.005 L/s·person) for sedentary adults per ASHRAE 62.1 Informative Appendix B.
- Outdoor CO₂ is assumed to be 400 ppm (current global average).
- Ceiling height for ACH calculation is assumed to be 9 ft (standard commercial). Adjust manually for other heights.
- CO₂ thresholds: <1,000 ppm = excellent; 1,000–1,500 ppm = acceptable; >1,500 ppm = poor (OSHA/NIOSH guidance).
- This calculator applies to commercial and institutional buildings. Residential ventilation is governed by ASHRAE 62.2.
- Results represent minimum required outdoor air. Local codes, energy recovery, filtration, and occupant health needs may require higher rates.
More Calculators
- Event Venue Capacity Calculator
- Orlando Vacation Daily Spending Calculator
- Resort Package Cost Comparison Calculator
- Orlando Theme Park Budget Estimator
- Phoenix Hotel Occupancy Rate Calculator
- Banquet Room Capacity and Revenue Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...