8.1 Air Quality

Air quality science quantifies the concentrations, transport, transformation, and deposition of pollutants in the atmosphere. The World Health Organization estimates that ambient air pollution causes approximately 4.2 million premature deaths annually, making it the single largest environmental health risk worldwide. Understanding pollutant sources, dispersion physics, and atmospheric chemistry is essential for designing effective control strategies and protecting public health.

Primary vs Secondary Pollutants

Atmospheric pollutants are classified by their emission pathway. Primary pollutants are emitted directly from identifiable sources, while secondary pollutants form in the atmosphere through chemical reactions among precursors.

Primary Pollutants

  • Carbon monoxide (CO) -- incomplete combustion
  • Sulfur dioxide (SO₂) -- fossil fuel burning
  • Nitrogen oxides (NO, NO₂) -- high-temperature combustion
  • Particulate matter (PM) -- dust, soot, sea salt
  • Volatile organic compounds (VOCs) -- solvents, fuels, vegetation
  • Lead (Pb), ammonia (NH₃), hydrogen sulfide (H₂S)

Secondary Pollutants

  • Ozone (O₃) -- from NO₂ photolysis + VOC chemistry
  • Secondary organic aerosol (SOA) -- VOC oxidation
  • Sulfate aerosol (SO₄²⁻) -- SO₂ oxidation
  • Nitrate aerosol (NO₃⁻) -- NOₓ oxidation
  • Peroxyacetyl nitrate (PAN) -- photochemical smog
  • Formaldehyde (HCHO) -- VOC oxidation intermediate

The distinction matters because controlling primary pollutants requires reducing emissions at the source, whereas controlling secondary pollutants requires managing their precursors and understanding the nonlinear atmospheric chemistry that produces them.

Criteria Pollutants and WHO Guidelines

Regulatory agencies define criteria pollutants -- species for which ambient air quality standards are set based on health effects. The six criteria pollutants under the US Clean Air Act, along with WHO 2021 guideline values, are:

PollutantSourcesWHO GuidelineAveragingHealth Effects
PM2.5Combustion, dust, secondary aerosol5 ug/m³AnnualCardiovascular disease, lung cancer, respiratory illness
PM10Dust, pollen, construction, roads15 ug/m³AnnualRespiratory inflammation, aggravation of asthma
O₃Secondary (NOₓ + VOC + sunlight)100 ug/m³8-hourLung damage, reduced lung function, airway inflammation
NO₂Traffic, power plants, industry10 ug/m³AnnualAirway inflammation, increased susceptibility to infection
SO₂Coal/oil combustion, smelting40 ug/m³24-hourBronchoconstriction, acid rain precursor
COIncomplete combustion, vehicles4 mg/m³24-hourBinds hemoglobin (COHb), reduces O₂ transport

PM2.5 is the most lethal criteria pollutant globally. Particles with aerodynamic diameter less than 2.5 micrometers penetrate deep into the alveolar region of the lungs, enter the bloodstream, and cause systemic inflammation, atherosclerosis, and oxidative stress.

Air Quality Index (AQI) Calculation

The AQI translates pollutant concentrations into a dimensionless index for public communication. Each pollutant is computed separately and the overall AQI is the maximum among them. The piecewise linear interpolation formula is:

$$\text{AQI} = \frac{I_{Hi} - I_{Lo}}{C_{Hi} - C_{Lo}} \times (C - C_{Lo}) + I_{Lo}$$

where $C$ is the measured pollutant concentration, $C_{Lo}$ and $C_{Hi}$ are the concentration breakpoints bracketing $C$, and $I_{Lo}$ and $I_{Hi}$ are the corresponding AQI breakpoints.

AQI RangeCategoryPM2.5 (ug/m³, 24h)Color
0--50Good0.0--12.0Green
51--100Moderate12.1--35.4Yellow
101--150Unhealthy for Sensitive Groups35.5--55.4Orange
151--200Unhealthy55.5--150.4Red
201--300Very Unhealthy150.5--250.4Purple
301--500Hazardous250.5--500.4Maroon

Gaussian Plume Dispersion Model

The Gaussian plume model is the foundational analytical solution for steady-state dispersion from a continuous point source. It assumes the concentration distribution is Gaussian in both the crosswind (y) and vertical (z) directions, with the plume advected downwind at mean wind speed u. For a source with effective stack height H (physical height + plume rise), the ground-level and elevated concentration is:

$$C(x,y,z) = \frac{Q}{2\pi \sigma_y \sigma_z u} \exp\!\left(-\frac{y^2}{2\sigma_y^2}\right) \left[\exp\!\left(-\frac{(z-H)^2}{2\sigma_z^2}\right) + \exp\!\left(-\frac{(z+H)^2}{2\sigma_z^2}\right)\right]$$

where:

  • $Q$ = emission rate (g/s or kg/s)
  • $u$ = mean wind speed at effective stack height (m/s)
  • $\sigma_y(x)$, $\sigma_z(x)$ = horizontal and vertical dispersion parameters (m), functions of downwind distance x
  • $H$ = effective stack height = physical height $h_s$ + plume rise $\Delta h$
  • The second exponential term with $(z+H)$ represents the reflection of the plume from the ground (image source method)

At ground level (z = 0), the equation simplifies to:

$$C(x,y,0) = \frac{Q}{\pi \sigma_y \sigma_z u} \exp\!\left(-\frac{y^2}{2\sigma_y^2}\right) \exp\!\left(-\frac{H^2}{2\sigma_z^2}\right)$$

The maximum ground-level concentration along the plume centerline (y = 0) occurs at the downwind distance where $\sigma_z = H/\sqrt{2}$. This is a critical regulatory metric for stack design.

Pasquill-Gifford Stability Classes

Atmospheric stability determines how rapidly a plume disperses. The Pasquill-Gifford (P-G) classification scheme categorizes turbulent dispersion into six stability classes based on wind speed, solar insolation, and cloud cover:

ClassStabilityConditionsDispersion
AVery unstableStrong solar, light windsRapid, looping plume
BUnstableModerate solar, light windsFast spreading
CSlightly unstableWeak solar or moderate windsModerate
DNeutralOvercast or strong windsConing plume
ESlightly stableNight, moderate cloud, light windSlow, fanning plume
FStableClear night, light windsVery slow, fumigation risk

The dispersion coefficients are parameterized as power laws of downwind distance x (in meters):

$$\sigma_y(x) = a \, x^{0.894} \qquad \sigma_z(x) = c \, x^d$$

The coefficients a, c, d depend on the stability class. For class A: a = 0.22, c = 0.20, d = 0.894. For class F: a = 0.04, c = 0.016, d = 0.70. More stable conditions yield smaller dispersion coefficients and thus higher near-source concentrations that persist further downwind.

Urban Box Model

A simple but useful approach for estimating urban-scale pollutant concentrations treats the city as a well-mixed box of volume V = L x W x H, where L is the city length along the wind, W is the crosswind width, and H is the mixing height. The mass balance yields:

$$\frac{dC}{dt} = \frac{E}{V} - \frac{C}{\tau} - k_c C + \frac{C_{bg}}{\tau}$$

where E is the total emission rate (g/s), $\tau = L/u$ is the ventilation time (flushing time), $k_c$ is a first-order chemical loss rate, and $C_{bg}$ is the background concentration. At steady state ($dC/dt = 0$):

$$C_{ss} = \frac{E/V + C_{bg}/\tau}{1/\tau + k_c} = \frac{E}{(u \cdot W \cdot H)} + C_{bg} \quad \text{(when } k_c \approx 0\text{)}$$

The box model reveals that urban pollutant levels scale inversely with wind speed u and mixing height H -- explaining why stagnant conditions with low inversions produce the worst air quality episodes. The ventilation coefficient (u x H) is a key metric used operationally to forecast air quality.

Deposition Processes

Pollutants are removed from the atmosphere through dry and wet deposition, completing the atmospheric pollutant lifecycle.

Dry Deposition

Direct transfer of gases and particles to surfaces without precipitation. The deposition flux is parameterized as:

$$F_d = v_d \cdot C(z_{ref})$$

where $v_d$ is the deposition velocity (typically 0.1--2 cm/s for gases, 0.01--1 cm/s for particles). The resistance analog model decomposes $v_d = (r_a + r_b + r_c)^{-1}$ into aerodynamic, boundary layer, and surface resistances.

Wet Deposition

Scavenging by precipitation, subdivided into in-cloud (rainout) and below-cloud (washout) processes:

$$F_w = \Lambda \int_0^H C(z)\,dz$$

where $\Lambda$ is the scavenging coefficient (s⁻¹), often parameterized as $\Lambda = a P^b$ with P the rainfall rate. The washout ratio $W = C_{\text{rain}}/C_{\text{air}}$ typically ranges from 10³ to 10⁶.

Photochemical Smog and the NOₓ-VOC-O₃ Cycle

Photochemical smog is driven by the nonlinear interaction between nitrogen oxides (NOₓ = NO + NO₂) and volatile organic compounds (VOCs) in the presence of sunlight. The basic photostationary state cycle is:

$$\text{NO}_2 + h\nu \xrightarrow{J_1} \text{NO} + \text{O} \quad (\lambda < 420\;\text{nm})$$

$$\text{O} + \text{O}_2 + M \xrightarrow{k_2} \text{O}_3 + M$$

$$\text{NO} + \text{O}_3 \xrightarrow{k_3} \text{NO}_2 + \text{O}_2$$

This gives the Leighton relationship at photostationary state:

$$[\text{O}_3] = \frac{J_1 [\text{NO}_2]}{k_3 [\text{NO}]}$$

Without VOCs, this cycle simply recycles NO, NO₂, and O₃ with no net ozone production. However, VOCs react with OH radicals to produce peroxy radicals (RO₂, HO₂) that convert NO to NO₂ without consuming O₃:

$$\text{RH} + \text{OH} \rightarrow \text{R} + \text{H}_2\text{O}$$

$$\text{R} + \text{O}_2 \rightarrow \text{RO}_2$$

$$\text{RO}_2 + \text{NO} \rightarrow \text{RO} + \text{NO}_2$$

$$\text{HO}_2 + \text{NO} \rightarrow \text{OH} + \text{NO}_2$$

This additional NO-to-NO₂ conversion pathway leads to net ozone accumulation. Urban ozone control is complicated because O₃ production can be either NOₓ-limited or VOC-limited depending on the NOₓ/VOC ratio. In VOC-limited regimes, reducing NOₓ alone can actually increase ozone -- a counterintuitive result with major policy implications.

Temperature Inversions and Mixing Height

A temperature inversion occurs when temperature increases with altitude, creating a stable layer that suppresses vertical mixing and traps pollutants near the surface. The mixing height $z_i$ is the height of the convective boundary layer, above which a capping inversion prevents vertical dispersion.

Radiation Inversion

Forms overnight as the surface cools radiatively faster than the air above. Breaks up after sunrise as solar heating destabilizes the surface layer. Causes morning rush-hour pollution peaks.

Subsidence Inversion

Created by large-scale sinking air in high-pressure systems. Persistent and can last days to weeks. Responsible for multi-day pollution episodes (e.g., Los Angeles basin, Beijing winter smog).

The ventilation coefficient is defined as:

$$\text{VC} = \bar{u} \times z_i \quad (\text{m}^2/\text{s})$$

When VC is less than 6000 m²/s, poor dispersion conditions are expected. Air quality forecasters issue advisories when persistent inversions combine with high emissions, particularly during winter (heating emissions + low mixing heights) or summer (photochemical smog + stagnation).

Fortran: Urban Box Model for Pollutant Evolution

This Fortran program integrates the urban box model equation forward in time using an explicit Euler scheme, tracking pollutant concentration under time-varying emissions and a diurnally varying mixing height.

program box_model_pollution
  ! Urban box model for pollutant concentration evolution
  ! dC/dt = E/V - C/tau - k_c*C + C_bg/tau
  implicit none

  integer, parameter :: dp = selected_real_kind(15, 307)
  integer, parameter :: nsteps = 86400   ! 1-day simulation, dt=1s
  real(dp) :: C, E, L_city, W_city, H_mix, u_wind
  real(dp) :: tau, V, k_chem, C_bg, dt, time
  real(dp) :: hour, E_base, H_day, H_night
  integer  :: i, iunit

  ! --- Parameters ---
  L_city  = 20000.0_dp    ! City length along wind (m)
  W_city  = 15000.0_dp    ! City crosswind width (m)
  u_wind  = 3.0_dp        ! Mean wind speed (m/s)
  k_chem  = 1.0e-5_dp     ! Chemical loss rate (1/s)
  C_bg    = 5.0e-6_dp     ! Background concentration (g/m^3)
  E_base  = 500.0_dp      ! Base emission rate (g/s)
  H_day   = 1500.0_dp     ! Daytime mixing height (m)
  H_night = 200.0_dp      ! Nighttime mixing height (m)
  dt      = 1.0_dp        ! Time step (s)

  ! --- Initial condition ---
  C = C_bg   ! Start at background

  ! --- Output file ---
  iunit = 20
  open(unit=iunit, file='box_model_output.dat', status='replace')
  write(iunit, '(A)') '# Time(h)  Concentration(ug/m3)  MixHeight(m)  Emission(g/s)'

  ! --- Time integration ---
  do i = 1, nsteps
    time = real(i, dp) * dt
    hour = mod(time / 3600.0_dp, 24.0_dp)

    ! Diurnal mixing height: rises after sunrise, falls after sunset
    if (hour >= 7.0_dp .and. hour <= 18.0_dp) then
      H_mix = H_night + (H_day - H_night) * &
              sin(3.14159265_dp * (hour - 7.0_dp) / 11.0_dp)
    else
      H_mix = H_night
    end if

    ! Diurnal emission profile: peak during rush hours
    if (hour >= 7.0_dp .and. hour <= 9.0_dp) then
      E = E_base * 2.5_dp   ! Morning rush
    else if (hour >= 17.0_dp .and. hour <= 19.0_dp) then
      E = E_base * 2.0_dp   ! Evening rush
    else if (hour >= 9.0_dp .and. hour <= 17.0_dp) then
      E = E_base * 1.2_dp   ! Daytime
    else
      E = E_base * 0.3_dp   ! Nighttime
    end if

    ! Box model parameters
    V   = L_city * W_city * H_mix
    tau = L_city / u_wind

    ! Euler forward step
    C = C + dt * (E / V - C / tau - k_chem * C + C_bg / tau)
    if (C < 0.0_dp) C = 0.0_dp

    ! Write output every 5 minutes
    if (mod(i, 300) == 0) then
      write(iunit, '(F8.3, 2X, F12.4, 2X, F8.1, 2X, F8.1)') &
        hour, C * 1.0e6_dp, H_mix, E
    end if
  end do

  close(iunit)
  print *, 'Box model integration complete. Output: box_model_output.dat'

end program box_model_pollution

Interactive Simulation: AQI Calculator & Pollutant Dispersion

Python

Gaussian plume dispersion model for a point source showing concentration fields under different atmospheric stability classes. Includes an AQI calculator that converts PM2.5 concentrations to Air Quality Index values with category classification.

aqi_plume_dispersion.py88 lines

Click Run to execute the Python code

Code will be executed with Python 3 on the server