Home Reference Source Test Repository

src/Dispersion/GaussianDecayPlume.js

/**
 * Created by austin on 6/6/16.
 * @file GaussianDecayPlume.js
 */

import GaussianPlume from './GaussianPlume';

/*
* Understanding Radioactive Aerosols and Their Measurement
* https://books.google.com/books?id=bCjRtBX0MYkC&pg=PA280&lpg=PA280&dq=gaussian+decay+plume&source=bl&ots=oJbqk8OmIe&sig=GqzwcwVfbk_XUR6RztjSeVI0J20&hl=en&sa=X&ved=0ahUKEwih4OS7zpTNAhWq5oMKHeM_DyIQ6AEINjAF#v=onepage&q=gaussian%20decay%20plume&f=false
* 
* */

/**
 * An extension (surprise surprise) on the Gaussian Plume to account for radioactive materials
 */
class GaussianDecayPlume extends GaussianPlume {

    /**
     * @override
     * @param {Atmosphere} atmosphere
     * @param {Source} source
     * @param {number} halfLife - seconds
     */
    constructor(atmosphere, source, halfLife) {
        super(atmosphere, source);
        /**
         * 
         * @type {number}
         * @private
         */
        this._halfLife = halfLife; // Usually the half-life of the pollutant
        /**
         * 
         * @type {number}
         * @private
         */
        this._decayCoeff = 0.693 / halfLife;
    }

    /**
     * 
     * @returns {number}
     */
    getHalfLife() {
        return this._halfLife;
    }
    
    /**
     * Read URAaTM pg 281 - 285
     * @see https://books.google.com/books?id=bCjRtBX0MYkC&pg=PA280&lpg=PA280&dq=gaussian+decay+plume&source=bl&ots=oJbqk8OmIe&sig=GqzwcwVfbk_XUR6RztjSeVI0J20&hl=en&sa=X&ved=0ahUKEwih4OS7zpTNAhWq5oMKHeM_DyIQ6AEINjAF#v=onepage&q=gaussian%20decay%20plume&f=false
     * @param {number} x - downwind distance (m)
     * @param {number} windSpeed - at source height (m/s)
     * @returns {number} Decay term
     */
    getDecayTerm(x, windSpeed) {
        if (this._decayCoeff == 0) {
            return 1;
        } else {
            return Math.exp(- this._decayCoeff * (x / windSpeed));
        }
    }

    /**
     * Takes into account the decay term, as seen in URAaTM pg 281
     * Overridden from super class
     * @override
     * @param {number} x
     * @param {number} y
     * @param {number} z
     */
    getConcentration(x, y, z) {
        let unDecayed = super.getConcentration(x, y, z);
        let decayTerm = this.getDecayTerm(x, this.getAtmosphere().getWindSpeed());
        return unDecayed * decayTerm;
    }
}

export default GaussianDecayPlume;