A Review of Point Source Air Dispersion Modeling Techniques Mathematical Modeling of Energy and Environmental Systems MANE6960H01 Spring 2013 James P. Burke Introduction As part of the curriculum of MANE-6961HO1 a research project was to be performed. I began my research of refrigeration cycles with the focus on geothermal systems for an upcoming build for my house. Around the midpoint of the semester I found the topic of point source dispersion modeling to be a much more interesting topic. This paper is to provide a summary of the work I was able to perform throughout the semester. The text book assigned for class, Energy and Environment by James A. Fay and Dan S. Golomb, provides a simple Gaussian plume model equation on page 282 and 283. This model account for several factors: wind, random dispersion, gravity, and bouncy. In this paper I have broken these phenomena down into simple cases to demonstrate them. Gaussian Plume Model To start at a high level, a simple model was created and tested. Figure 1 is a plot of the smoke dispersion of my personal property (504 Russellville Rd, Westfield, MA), which can be found on the Westfield, MA GIS maps (http://gis.cityofwestfield.org/fl/westfieldmapublic/main.html). Equations 10.3, 10.4, and 10.5 from our textbook were inputs into ANSYS along with the key point of the property boundaries. A simple two dimensional mesh was created based on the property key points. The generated nodes were then processed thru a do loop to determine the parameters of equation 10.3. Figure 1 shows a case of wind blowing at 45 degree to the north (x axis is north). The amount of smoke produced by the stove is unknown, therefore the plots only provides a relative dispersion of smoke. Figure 1: Smoke Dispersion Model Random Dispersion Sub Model Part of the Gaussian plume model discussed about is a random dispersion term. Wikipedia had a good description of this phenomena http://en.wikipedia.org/wiki/Random_walk. The easiest way to visualize this behavior is to imagine a single walker starting at a central point. In the 2-D case he has two chooses each “time step”. The walker has to choose to go in the positive/negative x direction one unit and also chose to go in the positive/negative y direction one unit. This process is repeated thousands of times and the walker’s position is monitored. This is then repeated for many walkers to provide a statistical distribution as a function of time. To simulate this type of model a random number generator is needed. ANSYS, typically a finite element code, was used for its ability to store large arrays of data and to be able to produce random numbers for the walker’s “chooses”. In the appendix attached to this report I have provided my code that generates this model. Below I have listed the basic steps to simulate random dispersion: Assigned a data array to store walkers information Do loop to provide each walker with all of their chooses (random number generator) A second do loop to add each step up and keep track of the locations of each walker Generate a inform square mesh to track walker positions A third do loop to determine for each walker which of the uniform nodes is closest to it for a given time point. Each uniform node keeps track of the number of walkers in its area A temperature distribution is applied based on the number of walkers at each node (used for visualizing things) For this model 10,000 walkers were chosen for 2,000 steps. The figures below show the dispersion of the walkers as you step thru time. Figure 2: Two dimensional Model – Time 50 Figure 3: Two dimensional Model – Time 500 Figure 4: Two dimensional Model – Time 1,000 Figure 5: Two dimensional Model – Time 2,000 Random Dispersion With Wind Sub Model The second sub model I created added an additional step to the process, constant wind. The original random dispersion model was used as a starting point. To account for wind effects a bias was added to the x direction random number generator. This constant adder accounts for wind push the walker in the x direction. This model also used 10,000 walkers for only 1,775 steps. The figures below show the walker distribution for various time steps. As you can see the walkers are not only dispersing in the x and y directions, but the entire dispersion is shift in the positive X direction. The dispersion rate and wind speed are selected based on testing purposes. This model does not represent any real physical case. The inputs files for this model can be found the appendix in the back of this report. Figure 6: Two dimensional Model – Time 50 Figure 7: Two dimensional Model – Time 500 Figure 8: Two dimensional Model – Time 1,000 Figure 9: Two dimensional Model – Time 1,775 Random Dispersion With Wind and Gravity Effects Sub Model The last model created account for the third and final effect, gravity. The first two sub models were simple two dimensional models. To account for gravity a third direction was added in the decision maker portion of the code. The same input code was used as a starting point for this model. An extra column was added for a z direction term. During the random number generation phase of the code a bias was introduced to tended to cause the walkers to want to go into the –Z direction (i.e., falling towards the ground). The same 10,000 walkers were selected, but were only run to 500 steps. Because of the additional run time associated with the third dimension the number of steps was reduced significantly. Instead of mapping walker positions on a uniform plot, the walkers themselves were plots as nodes on the model for various time points. The figures below show the walker distribution as a function of time. As you can see the walkers are not only uniformly dispersing in the X and Y direction, but also they are shift in the X direction (wind) and Z direction (gravity). As mentioned above the wind, random, and gravity rates were selected for testing purposes only. They do not represent any real physical model. Figure 10: Three dimensional Model – Time 5 Figure 11: Three dimensional Model – Time 25 Figure 12: Three dimensional Model – Time 50 Figure 13: Three dimensional Model – Time 500 Conclusions The three sub models presented above demonstrate the principals of a Gaussian Plume model. While the random dispersion, wind, and gravity rates are not based on any real physical system, the plots do provide a user an understanding of what is occurring. Attached in the project folder (http://www.ewp.rpi.edu/hartford/~burkej8/MMEES/Project/ ) are all of the input files used to generate these plots. Also, I have provided all the figures and generated movies that provide the various models figures in a nice format for viewing. The appendices attached below are the input files used to generated the figures above. Input Model Files for ANSYS Static Random Model Input File finish /clear,nostart xstep=.05 ystep=.05 tcase=10000 steps=5000 *dim,rd,array,steps,3,tcase *do,i,1,tcase,1 *do,j,1,steps,1 x=rand(-xstep/2,xstep/2) y=rand(-ystep/2,ystep/2) rd(j,1,i)=j rd(j,2,i)=x rd(j,3,i)=y *enddo *enddo *do,i,1,tcase,1 *do,j,2,steps,1 rd(j,2,i)=rd(j,2,i)+rd(j-1,2,i) rd(j,3,i)=rd(j,3,i)+rd(j-1,3,i) *enddo *enddo /prep7 ET,1,182 RECTNG,-3,3,-3,3, aesize,1,.025 amesh,all bf,all,temp,0 modmsh,nocheck /PBF,TEMP, ,1 *do,f,25,5000,25 /title, MANE-6961 MMES Random Model - %f% steps /prep7 !Clear old data out for reruning bf,all,temp,0 *do,i,1,tcase nd=node(rd(f,2,i),rd(f,3,i),0) *get,ndtemp,node,nd,ntemp bf,nd,temp,ndtemp+.1 *enddo eplot finish !Take Picture !**************** ! Switch output to PNG-files /SHO,png,,,8 ! Plot to PNG files PNGR,comp,on,9 ! Setting of PNG compression level - might be unnecessary /GFI,640 pixels in frame ! The VERTICAL size of resulting picture in pixels - the final includes 10 more ! this changes the background to white for the picture /RGB,INDEX,100,100,100, 0 /RGB,INDEX, 80, 80, 80,13 /RGB,INDEX, 60, 60, 60,14 /RGB,INDEX, 0, 0, 0,15 ! your plot commands eplot ! Switch output back to screen /SHO,close ! Reset changed settings /RGB,INDEX, 0, 0, 0, 0 /RGB,INDEX, 60, 60, 60,13 /RGB,INDEX, 80, 80, 80,14 /RGB,INDEX,100,100,100,15 /REPLOT *enddo save Two Dimensional Random Models with Wind Input File finish /clear,nostart xstep=.05 ystep=.05 tcase=10000 steps=5000 *dim,rd,array,steps,3,tcase *do,i,1,tcase,1 *do,j,1,steps,1 x=rand(-xstep/2,xstep/2)+.001 y=rand(-ystep/2,ystep/2) rd(j,1,i)=j rd(j,2,i)=x rd(j,3,i)=y *enddo *enddo *do,i,1,tcase,1 *do,j,2,steps,1 rd(j,2,i)=rd(j,2,i)+rd(j-1,2,i) rd(j,3,i)=rd(j,3,i)+rd(j-1,3,i) *enddo *enddo /prep7 ET,1,182 RECTNG,-3,3,-3,3, aesize,1,.025 amesh,all bf,all,temp,0 modmsh,nocheck /PBF,TEMP, ,1 *do,f,25,5000,25 /title, MANE-6961 MMES Random Model Wind +X Direction - %f% steps /prep7 !Clear old data out for reruning bf,all,temp,0 *do,i,1,tcase nd=node(rd(f,2,i),rd(f,3,i),0) *get,ndtemp,node,nd,ntemp bf,nd,temp,ndtemp+.1 *enddo eplot finish !Take Picture !**************** ! Switch output to PNG-files /SHO,png,,,8 ! Plot to PNG files PNGR,comp,on,9 ! Setting of PNG compression level - might be unnecessary /GFI,640 pixels in frame ! The VERTICAL size of resulting picture in pixels - the final includes 10 more ! this changes the background to white for the picture /RGB,INDEX,100,100,100, 0 /RGB,INDEX, 80, 80, 80,13 /RGB,INDEX, 60, 60, 60,14 /RGB,INDEX, 0, 0, 0,15 ! your plot commands eplot ! Switch output back to screen /SHO,close ! Reset changed settings /RGB,INDEX, 0, 0, 0, 0 /RGB,INDEX, 60, 60, 60,13 /RGB,INDEX, 80, 80, 80,14 /RGB,INDEX,100,100,100,15 /REPLOT *enddo save Three Dimensional Model with Wind and Gravity Input File finish /clear,nostart xstep=.05 ystep=.05 zstep=.05 tcase=10000 steps=5000 *dim,rd,array,steps,4,tcase *do,i,1,tcase,1 *do,j,1,steps,1 x=rand(-xstep/2,xstep/2)+.001 y=rand(-ystep/2,ystep/2)-.001 z=rand(-zstep/2,zstep/2) rd(j,1,i)=j rd(j,2,i)=x rd(j,3,i)=y rd(j,4,i)=z *enddo *enddo *do,i,1,tcase,1 *do,j,2,steps,1 rd(j,2,i)=rd(j,2,i)+rd(j-1,2,i) rd(j,3,i)=rd(j,3,i)+rd(j-1,3,i) rd(j,4,i)=rd(j,4,i)+rd(j-1,4,i) *enddo *enddo /prep7 *do,f,5,500,5 /prep7 *do,i,1,tcase n,i,rd(f,2,i),rd(f,3,i),rd(f,4,i) *enddo nplot /VIEW,1,1,1,1 nplot /title, MANE-6961 MMES Random Model - %f% steps finish !Take Picture !**************** ! Switch output to PNG-files /SHO,png,,,8 ! Plot to PNG files PNGR,comp,on,9 ! Setting of PNG compression level - might be unnecessary /GFI,640 pixels in frame ! The VERTICAL size of resulting picture in pixels - the final includes 10 more ! this changes the background to white for the picture /RGB,INDEX,100,100,100, 0 /RGB,INDEX, 80, 80, 80,13 /RGB,INDEX, 60, 60, 60,14 /RGB,INDEX, 0, 0, 0,15 ! your plot commands nplot ! Switch output back to screen /SHO,close ! Reset changed settings /RGB,INDEX, 0, 0, 0, 0 /RGB,INDEX, 60, 60, 60,13 /RGB,INDEX, 80, 80, 80,14 /RGB,INDEX,100,100,100,15 /REPLOT *enddo Dispersion Model Input File finish /clear,nostart *AFUN,DEG qp=200/24/60/60 coming out the stack lbs/s amount of wood i load per day diveded out into seconds !stuff u=1*17.6 speed miles/hours !wind tamb=50 !Ambient temp tstack=200 Temp !Stack g=32 constant !gravity d_stack=8 diameter !stack vstack=1 h_stack=10*12 x_stack=803.08 y_stack=1004 !stack velocity in/s currently guess value !stack height !location of stack on map !location of stack on map stab_case=6 !which sigma case to grab 6 is the worst theta=45 !Wind direction 0 is heading south /prep7 !keypoints from GPS mapping from wetland project k,1,0,0,0 k,2,1.11379212264292E-13,909.107886624231,0 k,3,361.592268694118,2678.51224057324,0 k,4,578.567497626089,4285.61651162794,0 k,5,795.470885488339,4983.62057945538,0 k,6,2217.47123102765,5518.94040363645,0 k,7,5453.04236275294,6005.73667338336,0 k,8,5538.33197524753,1975.16554545456,0 !makes area a,1,2,3,4,5,6,7,8 !Extrudes Solid VOFFST,1,-5, , et,1,285 type,1 esize,50 vmesh,all !Calcualtes Bouncy Force F=g*vstack*d_stack**2*(tstack-tamb)/(4*tstack) *if,f,le,55,then dh=21.4*f**.75/u *endif *if,f,gt,55,then dh=38.7*f**(3/5)/u *endif !Bouncy force h=dh+h_stack !Total Smoke height !Array for sigma values *dim,stab,array,6,4,1 stab(1,1)=213 stab(1,2)=440.8 stab(1,3)=1.041 stab(1,4)=9.27 stab(2,1)=156 stab(2,2)=106.6 stab(2,3)=1.149 stab(2,4)=3.3 stab(3,1)=104 stab(3,2)=61.0 stab(3,3)=.911 stab(3,4)=0 stab(4,1)=68 stab(4,2)=33.2 stab(4,3)=.725 stab(4,4)=-1.7 stab(5,1)=50.5 stab(5,2)=22.8 stab(5,3)=.675 stab(5,4)=-1.3 stab(6,1)=34 stab(6,2)=14.35 stab(6,3)=.740 stab(6,4)=-.35 allsel,all *get,num_count,node,0,count *do,i,1,num_count,1 *get,num_node,node,0,num,min *get,xc,node,num_node,loc,x *get,yc,node,num_node,loc,y *get,zc,node,num_node,loc,z xc=(xc-x_stack)/39370 yc=(yc-y_stack)/39370 zc=zc sz=stab(stab_case,1)*xc**stab(stab_case,3)+stab(stab_case,4) sy=stab(stab_case,1)*xc**.894 sy=sy*39.370 sz=sz*39.370 xc=xc*39370 yc=yc*39370-tan(theta)*xc+yc *if,xc,ge,0,then c=qp/(2*3.14*sy*sz*u)*exp(-.5*(yc**2/sy**2+(zc-h)**2/sz**2)) *endif *if,xc,lt,0,then c=0 *endif bf,num_node,temp,c/(c+.000004505)*100 nsel,u,,,num_node *enddo allsel,all /EDGE,1,0,45 /GLINE,1,-1 /PBF,TEMP, ,1 finish !Take Picture !**************** ! Switch output to PNG-files /SHO,png,,,8 ! Plot to PNG files PNGR,comp,on,9 ! Setting of PNG compression level - might be unnecessary /GFI,640 pixels in frame ! The VERTICAL size of resulting picture in pixels - the final includes 10 more ! this changes the background to white for the picture /RGB,INDEX,100,100,100, 0 /RGB,INDEX, 80, 80, 80,13 /RGB,INDEX, 60, 60, 60,14 /RGB,INDEX, 0, 0, 0,15 ! your plot commands eplot ! Switch output back to screen /SHO,close ! Reset changed settings /RGB,INDEX, 0, 0, 0, 0 /RGB,INDEX, 60, 60, 60,13 /RGB,INDEX, 80, 80, 80,14 /RGB,INDEX,100,100,100,15 /REPLOT