Plume Models

Plume models are models of continuous, steady-state, releases and are time independent, this includes, for example, emissions from elevated stacks.

GasDispersion.plumeFunction
plume(scenario::Scenario, model::PlumeModel[, equationset::EquationSet])

Runs the plume dispersion model on the given scenario and returns the solution which is callable to give the concentration c(x, y, z[, t])

The concentration is in vol fraction, if model is unspecified, defaults to a simple gaussian plume model.

equationsets are used to specify that an alternative set of correlations should be used for model parameters, if alternatives exist.

All model parameters are assumed to be in SI base units (i.e. distances in m, velocities in m/s, mass in kg, etc.)

source

Gaussian Plumes

GasDispersion.plumeMethod
plume(::Scenario, GaussianPlume[, ::EquationSet]; kwargs...)

Returns the solution to a Gaussian plume dispersion model for the given scenario.

\[c\left(x,y,z\right) = {m_{i} \over { 2 \pi \sigma_{y} \sigma_{z} u } } \exp \left[ -\frac{1}{2} \left( y \over \sigma_{y} \right)^2 \right] \\ \times \left\{ \exp \left[ -\frac{1}{2} \left( { z -h } \over \sigma_{z} \right)^2 \right] + \exp \left[ -\frac{1}{2} \left( { z + h } \over \sigma_{z} \right)^2 \right] \right\}\]

where the σs are dispersion parameters correlated with the distance x. The EquationSet defines the set of correlations used to calculate the dispersion parameters. The concentration returned is in volume fraction, assuming the plume is a gas at ambient conditions.

References

  • AIChE/CCPS. 1999. Guidelines for Consequence Analysis of Chemical Releases. New York: American Institute of Chemical Engineers
source
plume(::Scenario{Substance,VerticalJet,Atmosphere}, GaussianPlume[, ::EquationSet]; kwargs...)

Returns the solution to a Gaussian plume dispersion model for a vertical jet. By default the Briggs plume rise model is used.

\[c\left(x,y,z\right) = {m_{i} \over { 2 \pi \sigma_{y} \sigma_{z} u } } \exp \left[ -\frac{1}{2} \left( y \over \sigma_{y} \right)^2 \right] \\ \times \left\{ \exp \left[ -\frac{1}{2} \left( { z -h } \over \sigma_{z} \right)^2 \right] + \exp \left[ -\frac{1}{2} \left( { z + h } \over \sigma_{z} \right)^2 \right] \right\}\]

where the σs are dispersion parameters correlated with the distance x. The EquationSet defines the set of correlations used to calculate the dispersion parameters. The concentration returned is in volume fraction, assuming the plume is a gas at ambient conditions.

Arguments

  • downwash::Bool=false: when true, includes stack-downwash effects
  • plumerise::Bool=true: when true, includes plume-rise effects using Briggs' model

References

  • AIChE/CCPS. 1999. Guidelines for Consequence Analysis of Chemical Releases. New York: American Institute of Chemical Engineers
  • Briggs, Gary A. 1969. Plume Rise Oak Ridge: U.S. Atomic Energy Commission
source

The gaussian plume model assumes that concentration profile in the crosswind (y) and vertical (z) directions follow gaussian distributions with dispersions $\sigma_y$ and $\sigma_z$, respectively. This model can be derived from an advection-diffusion equation, or simply taken as a given.

The basic gaussian would have the plume expand downward beyond the ground, to correct for this an additional term for ground reflection is added. This is equivalent to adding a mirror image source reflected across the x-z plane, and causes mass to accumulate along the ground instead of simply disappearing (as would happen in the naive case).

The concentration is then given by:

\[ c = {m_i \over 2 \pi u \sigma_{y} \sigma_{z} } \exp \left[ -\frac{1}{2} \left( y \over \sigma_{y} \right)^2 \right] \left\{ \exp \left[ -\frac{1}{2} \left( { z -h } \over \sigma_{z} \right)^2 \right] + \exp \left[ -\frac{1}{2} \left( { z + h } \over \sigma_{z} \right)^2 \right] \right\} \]

with

  • $c$ - concentration, kg/m^3
  • $m_i$ - mass emission rate of the species, kg/s
  • u - windspeed, m/s
  • $\sigma_y$ - crosswind dispersion, m
  • $\sigma_z$ - vertical dispersion, m
  • h - release elevation, m

Three important parameters are determined from correlations, which are functions of the atmospheric stability: the windspeed at the release point, the crosswind dispersion, and the vertical dispersion. The model converts the final concentration to volume fraction, assuming the plume is a gas at ambient conditions.

Crosswind dispersion correlations

The crosswind dispersion, $\sigma_{y}$ is a function of downwind distance, $x$ as well as stability class

\[ \sigma_{y} = \delta x^{\beta} \]

Where $\delta$, $\beta$, and $\gamma$ are tabulated based on stability class (Spicer and Havens 1988, 112):

Stability Class$\delta$$\beta$
A0.4230.9
B0.3130.9
C0.2100.9
D0.1360.9
E0.1020.9
F0.06740.9

Vertical dispersion correlations

The vertical dispersion, $\sigma_{z}$ is a function of downwind distance, $x$ as well as stability class

\[ \sigma_{z} = \delta x^{\beta} \exp \left( \gamma \left( \ln x \right)^2 \right) \]

Where $\delta$ and $\beta$ are tabulated based on stability class (Seinfeld 1986)

Stability Class$\delta$$\beta$$\gamma$
A107.7-1.71720.2770
B0.13550.87520.0136
C0.096230.9477-0.0020
D0.041341.1737-0.0316
E0.022751.3010-0.0450
F0.011221.4024-0.0540

Example

Suppose we wish to model the dispersion of gaseous propane from a leak from a storage tank, where the leak is from a 10mm hole that is 3.5m above the ground and the propane is at 25°C and 4barg. Assume the discharge coefficient $c_{D} = 0.85$. This scenario is adapted from CCPS Guidelines for Consequence Analysis of Chemical Releases(AIChE/CCPS 1999, 47)

First we define the scenario

using GasDispersion

propane = Substance(name="propane",
              molar_weight=0.044096,     # kg/mol
              liquid_density=526.13,     # kg/m³
              k=1.142,
              boiling_temp=231.02,       # K
              latent_heat=425740,        # J/kg
              gas_heat_capacity=1678,    # J/kg/K
              liquid_heat_capacity=2520) # J/kg/K

Patm = 101325 # Pa
P1 = 4e5 + Patm # Pa
T1 = 25 + 273.15 # K

scn = scenario_builder(propane, JetSource; 
       phase = :gas,
       diameter = 0.01,  # m
       dischargecoef = 0.85,
       temperature = T1, # K
       pressure = P1,    # Pa
       height = 3.5)     # m, height of hole above the ground

And then pass it to the plume function

g = plume(scn, GaussianPlume)

Where g is a callable which returns the concentration (in vol fraction) at any point. For example at 100m downwind and at a height of 2m

g(100,0,2)

# output

0.0006124169932080678

Which is ~612ppm (vol). Beyond simply having a number, we may want a plan-view of the plume at a given height, say 2m.

using Plots

plot(g, xlims=(0,100), ylims=(-10,10), height=2)
Example block output

We might want instead to look at the concentration at the release height: 3.5 m, zoom in, and look at concentrations in the vicinity of the LEL.

LEL = 0.021 # v/v, LEL from CAMEO Chemicals
UEL = 0.095 # v/v, UEL from CAMEO Chemicals

plot(g, xlims=(0,100), ylims=(-5,5), height=3.5, clims=(0,LEL))
Example block output

These plan views stretch out the crosswind distance, but we can change the aspect ratio, to give a sense of how skinny the plume actually is

plot(g, xlims=(0,50), ylims=(-10,10), height=3.5, clims=(0,LEL),
     aspect_ratio=:equal)
Example block output

Simple Jet Plumes

GasDispersion.plumeMethod
plume(::Scenario, SimpleJet; kwargs...)

Returns the solution to a simple turbulent jet dispersion model for the given scenario.

\[c\left(x,y,z\right) = k_2 c_0 \left( d \over z \right) \sqrt{ \rho_j \over \rho_a } \exp \left( - \left( k_3 { r \over z } \right)^2 \right)\]

where r is the radial distance from the jet centerline. Assumes a circular jet with diameter equal to the jet diameter. Ground-reflection is included by method of images.

References

  • Long, V.D. 1963. "Estimation of the Extent of Hazard Areas Round a Vent." Chem. Process Hazard. II:6

Arguments

  • release_angle::Number=0: the angle at which the jet is released, in radians
  • k2::Number=6 parameter of the model, default value is recommended by Long
  • k3::Number=5 parameter of the model, default value is recommended by Long
source

Simple jet dispersion models are a useful tool for evaluating dispersion near the region where a jet release is occurring. They are based on a simplified model where the air is stationary and all of the momentum needed to mix the release is supplied by the jet. This is in some ways the opposite assumptions than are used in the Gaussian Plume model – where the release is assumed to have negligible velocity and the momentum is entirely supplied by the wind.

\[c = k_2 c_0 \left( d \over z \right) \sqrt{ \rho_j \over \rho_a } \exp \left( - \left( k_3 { y \over x } \right)^2 \right) \left[ \exp \left( - \left( k_3 { (z-h) \over x }\right)^2 \right) + \exp \left( - \left( k_3 { (z+h) \over x }\right)^2 \right) \right]\]

with

  • c - concentration, volume fraction
  • $k_2$ and $k_3$ - model parameters
  • $c_0$ - initial concentration, volume fraction
  • d - diameter of the jet, m
  • $\rho_j$ - initial density of the jet material, kg/m^3
  • $\rho_a$ - density of the ambient atmosphere, kg/m^3

Model Parameters

The model parameters $k_2$ and $k_3$ are per Long (1963)

$k_2$6.0
$k_3$5.0

the initial concentration is calculated from the mass flowrate and volumetric flowrate

\[ c_0 = { Q_i \over Q } = { \dot{m} \over \rho Q } = { \dot{m} \over { \rho \frac{\pi}{4} d^2 u } } \]

Example

Suppose we wish to model the dispersion of gaseous propane using the same scenario, scn, worked out above.

j = plume(scn, SimpleJet)
j(100,0,2)

# output

0.002485496609730624
plot(j, xlims=(0,100), ylims=(-10,10), height=2)
Example block output

Britter-McQuaid Model

GasDispersion.plumeMethod
plume(::Scenario, BritterMcQuaidPlume[, equationset::EquationSet])

Returns the solution to the Britter-McQuaid continuous ground level release model for the given scenario.

The equationset is used to calculate the windspeed at 10m, all other correlations are as per the Britter-McQuaid model. Unless otherwise specified a default power-law wind profile is used.

References

  • Britter, Rex E. and J. McQuaid. 1988. Workbook on the Dispersion of Dense Gases. HSE Contract Research Report No. 17/1988
  • AIChE/CCPS. 1999. Guidelines for Consequence Analysis of Chemical Releases. New York: American Institute of Chemical Engineers
source

The Britter-McQuaid model is based on the Workbook on the Dispersion of Dense Gases(Britter and McQuaid 1988) which uses a series of correlations relating maximum center-line concentrations to downwind distances based upon actual releases. The model of the plume is a series of rectangular slices with constant, average, concentration throughout – giving a "top-hat" model. Points outside the defined plume are assumed to have zero concentration.

The original workbook gives the correlations as simply curves on a page, this model uses digitizations of those correlations(AIChE/CCPS 1999, 118)

Example

This example is based on the Burro LNG dispersion results, in which LNG was released at ground-level, as given in Guidelines for Consequence Analysis (AIChE/CCPS 1999, 122):

  • release temperature: -162°C
  • release rate: 0.23 m³/s (liquid)
  • release duration: 174 s
  • windspeed at 10m: 10.9 m/s
  • LNG liquid density (at release conditions): 425.6 kg/m³
  • LNG gas density (at release conditions): 1.76 kg/m³

and we assume the atmosphere was otherwise at ambient conditions of 298K and 1atm.

using GasDispersion

lng = Substance(name = :LNG,
              molar_weight = 0.01604, # kg/mol, Methane
              gas_density = 1.76,
              liquid_density = 425.6,
              reference_temp=(273.15-162),
              reference_pressure=101325.0,
              boiling_temp = 111.6, # Methane, NIST Webbook
              latent_heat = 509880.0,  # J/kg, Methane
              gas_heat_capacity = 2240.0, # J/kg/K, Methane
              liquid_heat_capacity = 3349.0) # J/kg/K, Methane

ṁ = 0.23*lng.ρ_l # liquid spill rate times liquid density
Q = ṁ/lng.ρ_g    # gas volumetric flowrate

d = 1
A = (π/4)*(d)^2 # release area, assuming a diameter of 1m.
u = Q/A         # initial jet velocity

r = HorizontalJet( mass_rate = ṁ,
                  duration = 174,
                  diameter = d,
                  velocity = u,
                  height = 0.0,
                  pressure = 101325.0,
                  temperature = (273.15-162),
                  fraction_liquid = 0.0)

a = SimpleAtmosphere(windspeed=10.9, temperature=298, stability=ClassF)

scn = Scenario(lng,r,a)

Generating a solution using the Britter-McQuaid model is quite simple

bm = plume(scn, BritterMcQuaidPlume)

bm(367,0,0)

# output

0.050717667650511944

From the reference, we expect the concentration to be ~5%, which is within acceptable margins given the imprecision that comes with using correlations (especially with pencil and paper).