Gaussian Plume model of airborne particulate distribution


Updated 5 Jan 2009

No License

gaussianPlume Steady-state gaussian plume distribution model

gaussianPlume models the dispersion of a continuous point source, i.e.
plume, in various conditions and terrains. The output of gaussianPlume
is a 3-dimensional matrix containing the concentrations of the emitted
substance over a field with the first dimension (y) representing the
cross-wind axis, the second dimension (x) the downwind distance, and
the third dimension (z) the vertical axis. The origin is set at the base
of the stack. All units are in <mgs> (meters, grams, seconds) except
where noted.

C = gaussianPlume(Q) returns the steady-state Gaussian distribution
model of a single, continuous point source emitting at a rate of Q
grams per second for a 50m physical stack height with no calculations
for plume rise, in rural terrain with stability class "F" in the
Guifford-Pasquiill scale. Wind speed is assumed to be 1m/s at the stack
tip (50m).

C = gaussianPlume(Q, u_ref) sets the wind at 1m to be u_ref

C = gaussianPlume(Q, u_ref, h) sets the stack height to h

[C, z0] = gaussianPlume(...) returns the effective stack height in
meters as z0.

C = gaussianPlume(Q, u_ref, h, ...) allows you to set certain options.
Options are set by 'option', <option value> pairs except for certain
options which require no <option value>. The list of permissible
options are listed below:

{'h_ref', h_ref} Sets the reference height for the wind speed u_ref
in meters. Default is 1m.
{'stability', 'class'} Sets Guifford-Pasquill stability class to
class 'class'. 'class' must be one of 'A', 'B', 'C', 'D', 'E',
or 'F'. Default is 'F'.
{'terrain', 't_type'} Sets the terrain to one of 'rural' or
'urban'. Default is 'urban'
{'p', p} Sets the scaling factor for change in wind as a
function of altitude to p. Default is 0.4.
{'plum_rise_model', 'model'} Sets the model to use for calculation
of plume rise. 'model' is one of 'none', 'CONCAWE',
'CarlsonMoses', 'Holland', or 'Briggs'. Default is 'none'.
{'mw', mw} Sets the molecular weight of the exhaust for plume rise
calculations. Specify in atomic mass units. Default is average
of air, 30g/mole.
{'amb_temp', Ta} Sets the ambient temperature in degrees Celsius.
Default is 25C.
{'stack_temp', Ts} Sets the stack temperature in degrees Celsius.
Default is 200C.
{'stack_diameter', ds} Sets the stack diameter (in meters). Default
is 20m.
{'specific_heat', Cp} Sets the specific heat of the exhaust gas in
J/degree Celsius/g. Default is 1.020 (constant pressure Cp for
dry air)
{'amb_pres', Pa} Sets ambient pressure in millibars. Default is
{'stack_pres', Ps} Sets stack tip pressure in millibars. Default is
{'vs', vs} Sets stack exit velocity in m/s. Default is 1m/s.
{'eta', eta} Sets the lapse rate for stable conditions (class E or
'reflection' enables ground reflection (no option value)
'noreflection' disables ground reflection (no option value)
'deposition' models dry deposition (no option value)
'nodeposition' disables dry deposition (no option value)
{'vt', vt} Sets terminal/settling velocity in m/s. Default is
settling velocity for PM2.5, 0.5cm/s.
{'X', x} Sets sampling points at the downwind distances. x is a
vector specifying the downwind distances to evaluate for C in
meters. Default is 0 to 5km in 100m resolution.
{'Y', y} Same as above except for the y-axis (cross-wind)
{'Z', z} Same as above except for the vertical axis

C=gaussianPlume(500, 5, 50, 'h_ref', 10, 'noreflection', ...
'nodeposition', 'amb_pres', 1103, 'amb_temp', 22);
Computes the steady-state Gaussian-distribution of an emission at a
rate of 500g/s with average wind speed of 5m/s at 10m from a
physical stack height of 50m. No plume rise, reflection, nor
deposition will be modeled. The data will be sampled in 100m
resolution across the downwind and crosswind axes from 0 to 5km and
0 to 1km in the vertical axis.

Cite As

Harold Bien (2023). gaussianPlume (, MATLAB Central File Exchange. Retrieved .

MATLAB Release Compatibility
Created with R14SP2
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!
Version Published Release Notes

Lisa - you're right. With the exception of Carlson-Moses and CONCAWE plume rise, I reviewed all equations and performed unit analysis. All temperatures now in Kelvins but input still in Celsius; fixed skipped entry in sigma_z for class 'E'.

Thanks to Sam Duris who pointed out incorrect units were used in calculating sigma_z for rural and sigma_y for urban. I have also added in the documentation reference to the ISC3 User's Manual, Volume II, as the source for the equations.

Thanks to Colin Ritter at Humboldt State University who pointed out an error in the calculation for stable, buoyancy dominated Briggs plume rise, the denominator should have been surrounded in parenthesis, i.e. Fb/(us*s) rather than "Fb/us*s".