sandialabs / chama

Python package for sensor placement optimization

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Concentration Values not Maximum near the source

apoorvagnihotri opened this issue · comments

concs

I had selected the source location as y = 20 and x = 20. I expected the Concentration values to be maximum near the source, but according to the cross-section of the concentration values, that is not being followed.

If this something that is expected, kindly accept my apologies. It would be fantastic if you could direct me to some source to study Gaussian Plumes.

Thanks a lot for your help.

Are these cross sections at the same z level as the source?

Thanks a lot for the response!

I had not given any arguments specifying the z-level, I had directly used chama.graphics.signal_xsection(signal, 'S') from the Chama library.

These are my doubts

  • Am I correct to assume that the central line of Gaussian Plume is horizontal?
  • How would you suggest to make sure that the statement below is followed?

Are these cross sections at the same z level as the source?

# %% Imports
import numpy as np
import pandas as pd
import chama
import matplotlib.pyplot as plt
#%matplotlib inline

# %% Making a 3D grid
x_vals = (0, 400)
y_vals = x_vals
z_vals = (0, 100)
x_start = 100
y_start = x_start
z_start = 20
granularity = 40
x_grid = np.linspace(*x_vals, granularity) # this is in mts
y_grid = np.linspace(*y_vals, granularity)
z_grid = np.linspace(*z_vals, granularity)
grid = chama.simulation.Grid(x_grid, y_grid, z_grid)

# %% Defining a pollutant source with rate
source = chama.simulation.Source(x_start, y_start, z_start, rate = 40)

# %% Defining the Atmospheric Conditions
atm = pd.DataFrame(
        {
           'Wind Direction': [0],
           'Wind Speed': [2.5], ## ←← Changing this to 0.1 makes concenration values die.
           'Stability Class': ['A'],
        },
        index=[0]
      )

# %% Gives the concentrations during steady state
gauss_plume = chama.simulation.GaussianPlume(grid, source, atm)
gauss_plume.run()
signal = gauss_plume.conc

# %%
chama.graphics.signal_convexhull(
        signal, 
        scenarios=['S'], 
        threshold=1e-3,
        x_range = x_vals, 
        y_range = y_vals, 
        z_range = z_vals
    )

plt.show()
# print ("max", signal.max())
chama.graphics.signal_xsection(signal, 'S', z_range=(z_start-1, z_start+1))
plt.show()

I used a z_range but still, the values are not maximum near the smokestack.

Your help would be much appreciated.

Plot. ↓
zrange_defined

Gaussian plume models are not intended for very low wind speed. When wind speed is 0, concentration is not defined and Chama returns a value of 0 (this could be changed to return NaN).

By default, the Gaussian plume model computes concentration adjusted for buoyancy. When wind speed is very low, concentration adjusted for buoyancy go to zero. I suggest removing buoyancy by setting gravity to 0. This will also make the center line of the Gaussian Plume horizontal.

gauss_plume = chama.simulation.GaussianPlume(grid, source, atm, gravity=0)
gauss_plume.run()
signal = gauss_plume.conc
chama.graphics.signal_xsection(signal, 'S')

If you want to slice the cross section at different levels, use z_value instead of z_range.
Figure_3