Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Gaussian plume — derivation from the advection-diffusion equation

Derivation of the Gaussian plume solution

This note derives the steady-state Gaussian plume solution used by the forward model in plume_simulation.gauss_plume.plume.plume_concentration. The derivation follows Stockie [1] closely; Stockie’s paper is an excellent pedagogical reference that starts from the full advection-diffusion PDE, states the simplifying assumptions explicitly, and walks through the Laplace-transform and Green’s-function solutions in detail. The structure, equation numbering, and notation of this note mirror Stockie §§2-3; any reader who wants more depth — in particular the proofs behind the equivalence theorem (2.4) ≡ (2.5), the Green’s-function route, or the discussion of the eddy-diffusivity / σ-parameterisation inconsistency — should consult the paper itself.

1. Governing equation (Stockie §2)

Let C(x,t)C(\vec{x}, t) [kg/m³] denote the mass concentration of a single contaminant at position x=(x,y,z)R3\vec{x} = (x, y, z) \in \mathbb{R}^3 [m] and time tRt \in \mathbb{R} [s]. Conservation of mass (Stockie eq. 2.1) reads

Ct+J  =  S,\frac{\partial C}{\partial t} + \nabla \cdot \vec{J} \;=\; S,

where S(x,t)S(\vec{x}, t) [kg/m³·s] is a volumetric source term and J\vec{J} [kg/m²·s] is the total contaminant mass flux. Two physical mechanisms contribute to J\vec{J}. Advection by the wind field u\vec{u} [m/s] contributes JA=Cu\vec{J}_A = C \vec{u}. Turbulent diffusion contributes a Fickian flux JD=KC\vec{J}_D = -\mathbf{K}\, \nabla C, where K(x)=diag(Kx,Ky,Kz)\mathbf{K}(\vec{x}) = \operatorname{diag}(K_x, K_y, K_z) [m²/s] is the eddy diffusivity — an effective, position-dependent diffusion tensor that parameterises turbulent mixing at scales well below the resolution of interest. Summing the two contributions and substituting into the conservation law yields the three-dimensional advection-diffusion equation (Stockie eq. 2.2):

Ct+(Cu)  =  (KC)+S.\frac{\partial C}{\partial t} + \nabla \cdot (C \vec{u}) \;=\; \nabla \cdot (\mathbf{K}\, \nabla C) + S.

This PDE is the starting point. It is exact under the Fickian-closure hypothesis for the turbulent flux; everything that follows is a chain of simplifications to reduce it to a form with a closed-form solution.

2. The seven classical assumptions (Stockie §2)

To recover the Gaussian plume, Stockie makes seven assumptions (A1-A7). Each is a physically-motivated simplification; together they replace the full PDE by a linear, constant-coefficient problem that admits a closed-form solution.

Applying (A1)-(A6) to equation gives the scalar, elliptic boundary-value problem (Stockie 2.4a-c):

uCx  =  K2Cy2+K2Cz2+Qδ(x)δ(y)δ(zH),u\, \frac{\partial C}{\partial x} \;=\; K\, \frac{\partial^2 C}{\partial y^2} + K\, \frac{\partial^2 C}{\partial z^2} + Q\, \delta(x)\, \delta(y)\, \delta(z - H),

on the half-space x0x \geq 0, z0z \geq 0, y(,)y \in (-\infty, \infty), with boundary conditions C(0,y,z)=0C(0, y, z) = 0 (no contaminant upwind), C(,y,z)=C(x,±,z)=C(x,y,)=0C(\infty, y, z) = C(x, \pm\infty, z) = C(x, y, \infty) = 0 (finite total mass), and the ground-reflection Neumann condition KC/z(x,y,0)=0K\, \partial C / \partial z (x, y, 0) = 0 from (A7).

3. Boundary-source equivalence (Stockie §2, eqs. 2.5)

Stockie notes that the source term can be absorbed into the boundary condition at x=0x = 0: the volumetric source Qδ(x)δ(y)δ(zH)Q\, \delta(x)\, \delta(y)\, \delta(z - H) is equivalent to a surface source C(0,y,z)=(Q/u)δ(y)δ(zH)C(0, y, z) = (Q/u)\, \delta(y)\, \delta(z - H) on the inflow plane, with no interior source. This is a standard result (Stakgold’s theorem; Stockie’s Exercise 1 asks the reader to prove it by integrating the PDE over x[d,d]x \in [-d, d] and taking d0+d \to 0^+). We will use the boundary-source form — it simplifies the Laplace-transform manipulation.

4. Change of variable: the r-coordinate (Stockie §3, eq. 3.1)

Because KK can depend on downwind distance xx (Assumption A4), the PDE has a variable coefficient in the y- and z-Laplacians. Stockie eliminates this by introducing

r  =  1u0xK(ξ)dξ[m2],r \;=\; \frac{1}{u} \int_0^{x} K(\xi)\, \mathrm{d}\xi \qquad [\text{m}^2],

so that r/x=K(x)/u\partial r / \partial x = K(x) / u and u/x=K(x)/ru\, \partial / \partial x = K(x)\, \partial / \partial r. Substituting, the reduced PDE becomes (Stockie eq. 3.2)

cr  =  2cy2+2cz2,\frac{\partial c}{\partial r} \;=\; \frac{\partial^2 c}{\partial y^2} + \frac{\partial^2 c}{\partial z^2},

a standard two-dimensional heat equation in which rr plays the role of time. The boundary conditions carry over: cc vanishes at in yy and zz, Kc/z(r,y,0)=0K\, \partial c / \partial z (r, y, 0) = 0, and the “initial condition” at r=0r = 0 is the delta-source boundary from §3.

5. Separation of variables (Stockie §3, eq. 3.3)

The delta source factorises in yy and zz, suggesting the ansatz

c(r,y,z)  =  Qua(r,y)b(r,z).c(r, y, z) \;=\; \frac{Q}{u}\, a(r, y)\, b(r, z).

Substituting and separating yields two 1-D diffusion problems:

ar=2ay2,a(0,y)=δ(y),a(r,±)=0.\frac{\partial a}{\partial r} = \frac{\partial^2 a}{\partial y^2}, \qquad a(0, y) = \delta(y), \qquad a(r, \pm\infty) = 0.
br=2bz2,b(0,z)=δ(zH),b(r,)=0,bz(r,0)=0.\frac{\partial b}{\partial r} = \frac{\partial^2 b}{\partial z^2}, \qquad b(0, z) = \delta(z - H), \qquad b(r, \infty) = 0, \qquad \frac{\partial b}{\partial z}(r, 0) = 0.

Each is a 1-D heat equation with a delta initial condition — the first on R\mathbb{R}, the second on the half-line [0,)[0, \infty) with a zero-flux BC at the origin.

6. Solving the two subproblems (Stockie §3.1)

Stockie solves both subproblems by Laplace transforms in rr and (for the crosswind problem) also in yy; §3.2 gives an equivalent Green’s-function derivation. Since we only need the final solutions, I’ll quote them directly and flag the physical content.

6.1 Crosswind Gaussian

The yy-problem is a 1-D heat equation on R\mathbb{R} with a(0,y)=δ(y)a(0, y) = \delta(y). Its fundamental solution is the heat kernel (Stockie eq. 3.6):

a(r,y)  =  14πrexp ⁣(y24r).a(r, y) \;=\; \frac{1}{\sqrt{4 \pi r}}\, \exp\!\left( -\frac{y^2}{4 r} \right).

6.2 Vertical Gaussian with ground reflection

The zz-problem lives on [0,)[0, \infty) with a zero-flux boundary at z=0z = 0. The method of images handles this cleanly: reflect the source at height HH to an image source at H-H and solve on all of R\mathbb{R}. The superposition of the two fundamental solutions automatically satisfies b/zz=0=0\partial b / \partial z \big|_{z=0} = 0 because the reflected contribution exactly cancels the vertical derivative of the direct contribution at the ground. The result is (Stockie eq. 3.7):

b(r,z)  =  14πr[exp ⁣((zH)24r)+exp ⁣((z+H)24r)].b(r, z) \;=\; \frac{1}{\sqrt{4 \pi r}}\, \left[\, \exp\!\left( -\frac{(z - H)^2}{4 r} \right) + \exp\!\left( -\frac{(z + H)^2}{4 r} \right) \,\right].

The two exponentials correspond to the direct plume path from the physical source at (0,0,H)(0, 0, H) and the reflected path from the image source at (0,0,H)(0, 0, -H) respectively.

7. Assembly and σ-rewrite (Stockie §3, eqs. 3.8, 3.9)

Substituting aa and bb into the separable ansatz gives the Gaussian plume solution in r-coordinates (Stockie eq. 3.8):

C(x,y,z)  =  Q4πurexp ⁣(y24r)[exp ⁣((zH)24r)+exp ⁣((z+H)24r)].C(x, y, z) \;=\; \frac{Q}{4 \pi u\, r}\, \exp\!\left( -\frac{y^2}{4 r} \right) \left[\, \exp\!\left( -\frac{(z - H)^2}{4 r} \right) + \exp\!\left( -\frac{(z + H)^2}{4 r} \right) \,\right].

It is standard in the atmospheric-science literature to replace rr with the standard deviations of the Gaussian plume:

σ2(x)  =  2u0xK(ξ)dξ  =  2r.\sigma^2(x) \;=\; \frac{2}{u} \int_0^x K(\xi)\, \mathrm{d}\xi \;=\; 2 r.

With this substitution and distributing the factor of 2 in the exponentials, we recover the canonical form used in every textbook and in plume_concentration:

C(x,y,z)  =  Q2πuσyσzexp ⁣(y22σy2)[exp ⁣((zH)22σz2)+exp ⁣((z+H)22σz2)].C(x, y, z) \;=\; \frac{Q}{2 \pi u\, \sigma_y\, \sigma_z}\, \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].

This is exactly the expression evaluated in plume.py at the points where plume_concentration computes normalization, exp_y, exp_z_direct, and exp_z_reflected.

A subtlety: distinct σ_y and σ_z

Stockie derives the solution under assumption (A4) that Kx=Ky=Kz=KK_x = K_y = K_z = K — the eddy diffusivity is isotropic. Under that assumption σy=σz\sigma_y = \sigma_z follows identically. In practice, atmospheric turbulence is anisotropic: vertical mixing is suppressed relative to horizontal mixing by density stratification, and the empirical dispersion parameterisations (Pasquill-Gifford, Briggs-McElroy-Pooler) give different σy(x)\sigma_y(x) and σz(x)\sigma_z(x) in every stability regime. The standard practice — which we follow — is to carry equation over verbatim and separately parameterise σy\sigma_y and σz\sigma_z from empirical data. This is technically an inconsistency with the isotropic-KK starting point; Stockie §3.3 discusses it candidly, citing Llewellyn’s critique. The error turns out to be small in the regime where the Gaussian plume is used operationally.

8. Dispersion-coefficient parameterisations (Stockie §3.3)

Stockie §3.3 notes that σ2(x)\sigma^2(x) is determined by the eddy diffusivity via equation, but that in practice one parameterises σ directly from field experiments. He mentions the simple power-law form

σ2(x)  =  axb,\sigma^2(x) \;=\; a x^b,

and notes that experimentally b>0.70b > 0.70 in most conditions — larger than the b=1/2b = 1/2 predicted by constant KK, reflecting the fact that real-atmosphere diffusivities grow with downwind distance.

Our library uses the slightly richer Briggs-McElroy-Pooler parameterisation:

σi(x)  =  aix(1+bix)ci,i{y,z},\sigma_i(x) \;=\; a_i\, x \, (1 + b_i\, x)^{c_i}, \qquad i \in \{y, z\},

with one coefficient triple (ai,bi,ci)(a_i, b_i, c_i) per Pasquill-Gifford stability class A-F. For bi=0b_i = 0 this reduces to Stockie’s form equation with a=ai2a = a_i^2 and b=2b = 2; for bi>0b_i > 0 and ci<0c_i < 0 the extra factor produces a gentle rollover at large xx that matches measurements better than the pure power law. The six stability classes — from A (strongly unstable, sunny convective day) through D (neutral) to F (strongly stable, clear calm night) — give six different (σy,σz)(\sigma_y, \sigma_z) curves. Class A produces the largest σ’s and hence the most diluted plume; class F produces long, thin plumes with high peak concentration near the centerline. dispersion.py stores the six parameter triples in BRIGGS_DISPERSION_PARAMS and evaluates equation in calculate_briggs_dispersion.

9. Mass conservation

Integrating equation across a plane x=constx = \text{const} (that is, integrating in y(,)y \in (-\infty, \infty) and in z[0,)z \in [0, \infty)) gives

0C(x,y,z)udydz  =  Q,\int_0^{\infty} \int_{-\infty}^{\infty} C(x, y, z) \, u \, \mathrm{d}y \, \mathrm{d}z \;=\; Q,

which is mass-flux conservation: the downwind flux of contaminant mass through any cross-section equals the source rate. The factor of 2 in the denominator of equation (i.e. 2πuσyσz2 \pi u\, \sigma_y\, \sigma_z rather than 4πuσyσz4 \pi u\, \sigma_y\, \sigma_z) is exactly what’s needed for this — the ground reflection puts the full vertical Gaussian on the physical half-space z0z \geq 0, and the yy-Gaussian is symmetric around zero.

10. Operational conventions and pitfalls

Three small items that are easy to trip over:

Footnotes
  1. Stockie, J. M. (2011). The Mathematics of Atmospheric Dispersion Modelling. SIAM Review, 53(2), 349-372. Preprint: https://www.sfu.ca/~jstockie/atmos/paper.pdf. Referenced here as “Stockie (2011)”. All equation numbers cited with the form “(2.1)” refer to that paper; equation numbers without a Stockie prefix are introduced in this note.