Skip to contents

PgSigmas: Briggs (1973) fits of the Pasquill-Gifford coefficients, rural sigma_y = a_y x (1 + 0.0001 x)^(-1/2) (urban 0.0004) and sigma_z = a_z x (1 + b_z x)^(e_z) by stability class A-F. BriggsPlumeRise: buoyancy flux F = g v_s d^2 (T_s - T_a) / (4 T_s); final rise 21.425 F^(3/4) / u (F < 55, x_f = 49 F^(5/8)) or 38.71 F^(3/5) / u (x_f = 119 F^(2/5)) for classes A-D, 2.6 (F / (u s))^(1/3) with s = g (dtheta/dz) / T_a and x_f = 2.0715 u / sqrt(s) for E and F; transitional rise 1.6 F^(1/3) x^(2/3) / u before x_f (EPA ISC3). GaussianPlume: Q / (2 pi u sigma_y sigma_z) exp(-y^2 / (2 sigma_y^2)) V with ground reflection and, under a mixing lid, image terms. GaussianPuff: instantaneous puff with sigma_x = sigma_y at the travel distance u t. AdvectionDiffusion2d: explicit upwind advection, central diffusion, forward Euler, zero boundaries; the scheme is stable when |u dt/dx| + |v dt/dy| + 2 (kx dt/dx^2 + ky dt/dy^2) <= 1, returned as stability_number and stable, and a call outside the bound is taken in enough sub-steps of a smaller dt to satisfy it (substeps, dt), with a warning. Every physical input is checked: rates, masses, heights and distances non-negative, wind speed, travel time and grid steps positive, n_images a whole number, the stack hotter than the air, x0 and y0 single numbers; a release above mixing_height warns. LagrangianParticles: random walk x + u dt + sqrt(2 K dt) xi with Philox normals (step k uses streams 2k and 2k + 1) and an optional counting grid.

Usage

PgSigmas(x, stability = "D", setting = "rural")

BriggsPlumeRise(
  x,
  u,
  diameter,
  exit_velocity,
  stack_temp,
  ambient_temp,
  stability = "D",
  dtheta_dz = NULL,
  g = 9.80616
)

GaussianPlume(
  q,
  u,
  h,
  receptors,
  stability = "D",
  setting = "rural",
  mixing_height = NULL,
  n_images = 3
)

GaussianPuff(
  mass,
  u,
  h,
  receptors,
  t,
  stability = "D",
  setting = "rural",
  mixing_height = NULL,
  n_images = 3
)

AdvectionDiffusion2d(c0, u, v, kx, ky, dx, dy, dt, n_steps, source = NULL)

LagrangianParticles(
  n,
  x0,
  y0,
  u,
  v,
  kx,
  ky,
  dt,
  n_steps,
  seed = 0,
  grid = NULL
)

Arguments

x

Downwind distance(s) (m).

stability

Pasquill stability class, "A" to "F".

setting

"rural" or "urban".

u

Wind speed (m/s), or the x velocity.

diameter, exit_velocity, stack_temp, ambient_temp

Stack diameter (m), exit velocity (m/s), stack gas and ambient temperatures (K).

dtheta_dz

Potential temperature gradient for stable classes (K/m).

g

Gravity.

q

Emission rate.

h

Effective stack height.

receptors

Matrix (or list) of receptor coordinates x, y, z.

mixing_height

Mixing-lid height, or NULL for none.

n_images

Number of lid image pairs.

mass

Puff mass.

t

Time since release.

c0

Initial concentration grid.

v

Velocity along y.

kx, ky

Eddy diffusivities.

dx, dy

Grid spacings.

dt

Time step.

n_steps

Number of steps.

source

Source grid (per unit time), or NULL.

n

Number of particles.

x0, y0

Release point.

seed

Philox seed.

grid

NULL or c(x_min, x_max, y_min, y_max, nx, ny).

Value

A list, or a numeric vector of concentrations.

References

Briggs, G. A. (1973). Diffusion estimation for small emissions. ATDL Contribution 79. Briggs, G. A. (1975). Plume rise predictions. AMS. Turner, D. B. (1970). Workbook of Atmospheric Dispersion Estimates. EPA AP-26. Seinfeld, J. H. and Pandis, S. N. (2016). Atmospheric Chemistry and Physics, 3rd ed. Thomson, D. J. (1987). J. Fluid Mech. 180, 529-556.

Examples

PgSigmas(1000, "D")
#> $sigma_y
#> [1] 76.27701
#> 
#> $sigma_z
#> [1] 37.94733
#> 
GaussianPlume(100, 5, 50, rbind(c(1000, 0, 0)))
#> [1] 0.0009232376