# ScalarTransportFoam Help

 Register Blogs Members List Search Today's Posts Mark Forums Read

 January 3, 2011, 05:06 ScalarTransportFoam Help #1 New Member   Abhinav Sharma Join Date: Sep 2010 Posts: 28 Rep Power: 8 Hello Foamers, I've set up my flow field model using both LES and RAS ( run with pisoFoam) for a urban street canyon, and would like to introduce scaler transport model to simulate pollutant dispersion. I understand that ScalarTransportFoam can be used here, however i will need to modify the code to introduce a source term (i've been following this tutorial) I'm not quite clear as to how to go about the entire process, ie to link the modified code after introducing the changes , to my wind field output data(output of pisoFoam run). I'm not very thorough with C ++ hoping to get familiarized with it as soon as possible! Thank you in advance! Regards, Abhinav Last edited by asharma; January 3, 2011 at 07:01.

 January 4, 2011, 05:37 #2 New Member   Abhinav Sharma Join Date: Sep 2010 Posts: 28 Rep Power: 8 I've been trying to implement a source term to scalerTransportForm coupling it to my pisoFoam solver and have attempted to include a source term as mentioned in the tutorial(mentioned above) as follows where my T is my scaler field and my source "source":- Code: solve ( fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T) == source ); this is in my Teqn.H file , which is called in my main .C mypisoFoam file as follows:- Code: for (int corr=0; corr

 January 4, 2011, 11:28 #3 Senior Member     Santiago Marquez Damian Join Date: Aug 2009 Location: Santa Fe, Santa Fe, Argentina Posts: 430 Rep Power: 16 Abhinav, the kind of source you're using is passive, i.e. it doesn't depend on the values of T. Nevertheless this doesn't imply that this source have to be spatially constant. In the way you're defined it, it can be a completely spatially variable source. Other way is to define the source value in the transportProperties dictionary and then use: Code: solve ( fvm::ddt(T) + fvm::div(phi, T) - fvm::laplacian(DT, T) == sourceValue ); where sourceValue is the value given by the dictionary. Regards. __________________ Santiago MÁRQUEZ DAMIÁN, Ph.D. Research Scientist Research Center for Computational Methods (CIMEC) - CONICET/UNL Tel: 54-342-4511594 Int. 7032 Colectora Ruta Nac. 168 / Paraje El Pozo (3000) Santa Fe - Argentina. http://www.cimec.org.ar

 January 5, 2011, 05:30 #4 New Member   Abhinav Sharma Join Date: Sep 2010 Posts: 28 Rep Power: 8 Thank you Santiago! Yes i understand i'm using a passive source here, which is exactly what i want. However i'm getting a little confused on how to specify my source to a specific region in my geometry where i want my scaler T to get generated and subsequently dispersed with the prevailing wind flow regime. Is there a way to do that? Pardon me if my question seems silly! Thanks, Regards, Abhinav

 January 5, 2011, 11:05 #5 Senior Member     Santiago Marquez Damian Join Date: Aug 2009 Location: Santa Fe, Santa Fe, Argentina Posts: 430 Rep Power: 16 Abhinav, your question is how to set the values of the source across the domain? If it's the case you have swak4Foam (http://openfoamwiki.net/index.php/Contrib/swak4Foam) to do so. Regards __________________ Santiago MÁRQUEZ DAMIÁN, Ph.D. Research Scientist Research Center for Computational Methods (CIMEC) - CONICET/UNL Tel: 54-342-4511594 Int. 7032 Colectora Ruta Nac. 168 / Paraje El Pozo (3000) Santa Fe - Argentina. http://www.cimec.org.ar

January 5, 2011, 11:20
#6
Member

Robertas N.
Join Date: Mar 2009
Location: Kaunas, Lithuania
Posts: 53
Rep Power: 10
Quote:
 Originally Posted by asharma However i'm getting a little confused on how to specify my source to a specific region in my geometry where i want my scaler T to get generated and subsequently dispersed with the prevailing wind flow regime.
Easy: once the fields 'source' and 'T' are defined, you can manipulate them the same way as other fields; i.e.: define their initial values in the files 'thecase/0/T' and 'thecase/0/source'
and set the values at the appropriate regions of the mesh using setFields or
funkySetFields, or, in especially customized cases, assign the values straight in the code, e.g. point by point, like this:

Code:
source[mesh.findCell (point (x,y,z))] = value_at_xyz;

 January 6, 2011, 03:11 #7 New Member   Abhinav Sharma Join Date: Sep 2010 Posts: 28 Rep Power: 8 Hi Robertas and Santiago, Thanks for the help! I'm pretty sure as to how to go about it now... Regards, Abhinav

 January 14, 2011, 03:20 #8 New Member   Abhinav Sharma Join Date: Sep 2010 Posts: 28 Rep Power: 8 Robertas , if i were to assign values straight in the code like you've mentioned, where(which file) am i suppose to add the code to?

January 14, 2011, 06:53
#9
Member

Robertas N.
Join Date: Mar 2009
Location: Kaunas, Lithuania
Posts: 53
Rep Power: 10
Quote:
 Originally Posted by asharma Robertas , if i were to assign values straight in the code like you've mentioned, where(which file) am i suppose to add the code to?
It depends on the structure of your program and what you want to do. Usually, the
overall structure of the solver is like this:

Code:
// Initialization goes here;
// main loop:
while ( runTime.run() )
{
// solution steps for equations (depend on the particular solver):
#include "UEqn.H"
... // other equations, as/if needed
// output data and such...
}
// wrap up
and all this is located in the "main" file, i.e., the file where the 'main' function is located. If the source field(s) are time-dependent,
the values should be assigned inside the main loop; but then you'll probably want to define a separate function for calculating the field values, and this function can be located in a separate file, like

Code:
// in the file "updateSource.h"
void updateSource (volScalarField& Q);
Code:
// in the file "updateSource.cpp"
{
// the required assignments go here
}
Code:
#include "updateSource.h"

// Initialization goes here;
// main loop:
while ( runTime.run() )
{
// update source fields
// solution steps for equations (depend on the particular solver):
#include "UEqn.H"
... // other equations, as/if needed
// output data and such...
}
// wrap up`
It's a matter of the general program structure, so there are no strict rules -- just considerations...

January 18, 2011, 14:34
reynolds averaged passive scalar transport
#10
Senior Member

Daniel P. Combest
Join Date: Mar 2009
Location: St. Louis, USA
Posts: 605
Rep Power: 22
Quote:
 Originally Posted by asharma Hello Foamers, I've set up my flow field model using both LES and RAS ( run with pisoFoam) for a urban street canyon, and would like to introduce scaler transport model to simulate pollutant dispersion. I understand that ScalarTransportFoam can be used here, however i will need to modify the code to introduce a source term (i've been following this tutorial) I'm not quite clear as to how to go about the entire process, ie to link the modified code after introducing the changes , to my wind field output data(output of pisoFoam run). I'm not very thorough with C ++ hoping to get familiarized with it as soon as possible! Thank you in advance! Regards, Abhinav
I think the key question here is how does one model passive scalar transport in turbulent field? This should be the answer to be addressed rather than adding a source term. If you want to use a Reynolds averaged passive scalar approach then you might want to have a look at some other threads, including this one:

http://www.cfd-online.com/Forums/ope...culations.html

I had a similar question a while back and I give a snippet of code that has worked very well. If the code on that thread is used, then the difficult part is to estimate the turbulent mass diffusivity of the pollutant. Usually this is estimated with a constant global turbulent schmidt number (turbulent viscosity/ turbulent mass diffusivity) equal to 0.7 (from fluent documentation). There are some other nuances of that are covered in posts 17 and 18 in the provided link. Basically the gradient diffusion hypothesis is used to approximate the scalar-flux <u'\phi'> term produced during reynolds averaging. For an LES approach, the methods are a little different that could employ a subgrid scalar flux relationship. I hope this helps.

Dan

 January 19, 2011, 06:09 #11 New Member   Abhinav Sharma Join Date: Sep 2010 Posts: 28 Rep Power: 8 Thank you Robertas and Dan, I apologies for the late reply as i was busy with some related but different work. Yes i see the importance of modeling scaler transport in a turbulent field to be addressed here, it was also pointed out by my mentor. I've used funkysetfields to define specific patches where i would like to introduce my scaler (i found it more convenient then manually entering the points), moreover i believe usage of a source term is not apt for my particular application(?). Actually i require a constant source of scaler to be introduced in my domain at a specified location, corresponding to emissions from vehicles passing through my street canyon. Would it be reasonable to assume a constant scaler concentration at points where i have assumed vehicle to pass, and allow scaler transport foam to calculate the dispersion with the turbulent diffusivity (by adding nut term to DT) accounted for?...

January 19, 2011, 11:05
#12
Senior Member

Daniel P. Combest
Join Date: Mar 2009
Location: St. Louis, USA
Posts: 605
Rep Power: 22
Quote:
 Originally Posted by asharma Thank you Robertas and Dan, I apologies for the late reply as i was busy with some related but different work. Yes i see the importance of modeling scaler transport in a turbulent field to be addressed here, it was also pointed out by my mentor. I've used funkysetfields to define specific patches where i would like to introduce my scaler (i found it more convenient then manually entering the points), moreover i believe usage of a source term is not apt for my particular application(?). Actually i require a constant source of scaler to be introduced in my domain at a specified location, corresponding to emissions from vehicles passing through my street canyon. Would it be reasonable to assume a constant scaler concentration at points where i have assumed vehicle to pass, and allow scaler transport foam to calculate the dispersion with the turbulent diffusivity (by adding nut term to DT) accounted for?...
About your moving source, you might want to look at something called swak4foam (http://openfoamwiki.net/index.php/Contrib/swak4Foam) that has some functionality for sources (swakSourceFields, swakTopoSources) that are explained in the README file. It may offer different functionality than just funkySetFields. Turbulent diffusivity addition is important, with the relation to turbulent Schmidt. if there are regions of low nut, the turbulent diffusivity will be low and the molecular diffusivity will dominate. Hence why it is important to keep the molecular diffusivity in there too (I know some threads and books say to just drop that term, but its very simple to keep).

Dan

 Thread Tools Display Modes Linear Mode

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is OffTrackbacks are On Pingbacks are On Refbacks are On Forum Rules

 Similar Threads Thread Thread Starter Forum Replies Last Post santoo_cfd OpenFOAM Running, Solving & CFD 34 May 22, 2014 10:20 mlawson OpenFOAM 2 January 18, 2011 14:39 Frithjof OpenFOAM Running, Solving & CFD 0 December 8, 2010 05:44 panda60 OpenFOAM 2 December 2, 2009 20:50 danielr OpenFOAM Running, Solving & CFD 3 October 5, 2009 16:05

All times are GMT -4. The time now is 02:30.