CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Programming & Development (
-   -   Modifying density update in fireFoam (

anfho February 22, 2011 18:54

Modifying density update in fireFoam
Hi All,
I am trying to substitute the density calcultaion that OpenFoam uses in fireFoam with my own density calculation model.

Since I am a newbie in OF and a newbie in C++ also, I haven't completely understood, how the functionalities and the dependencies are in OF-fireFoam. :confused:. For example, I am even confused what

rho = thermo.rho()

exactly means, what exactly happens there and where the thermo class is located at...

So my questions are:
(1) can the density calculation be easily swaped with a different model?
(2) where is the thermo class located?
(3) does anyone know how the density update works in OF? Is it based on the recursive beta PDF integration and where are the actual calculations happening?

Any help is greatly appreciated,

Chris Lucas February 28, 2011 12:10


rho = thermo.rho() returns the density field. Have a look at basicThermo.C, basicPsiThermo.C or basicRhoThermo.C

About (1), depends what you want to do. But most of the time, you have to rewrite the entire thermo library

About(2) src/thermophsyicalModels

About (3) have a look at the classes above.


anfho March 19, 2011 20:48

1 Attachment(s)
Hallo Christian,
I am still puzzled how the density update works for the case of the fireFoam solver. The presentation attached states that the density calculation is based on the recursive beta integration in fireFoam. So far, I have not been able to locate where this is happening. When I start from the main file of the fireFoam solver (fireFoam.C), I find that:

00087        rho = thermo.rho();
And I will end up looking at “basicPsiThermo.H”, which defines the “thermo” class called in “fireFoam.C”. In the lines 98-101, I find that:

00097            //- Density [kg/m^3] - uses current value of pressure
00098            virtual tmp<volScalarField> rho() const
00099            {
00100                return p_*psi();
00101            }

Where both, p_ and psi() are of type volScalarField. I am wondering now: Where does p_ and psi() get their values from, how does the type volSclarField work and what is the difference between rho_, rho(); p_, p(); psi_, psi(). Another question I have would be: How is this rho passed on to the governing equations (ft-, fuhs-, p-, U-Eqns.) of the solver?
I would really appreciate if you could give me some hints on how to understand the density update process.
Gruß, Andreas

Chris Lucas March 22, 2011 04:02


p_ -> from the solver. In the solver, the p field is a pointer,

psi-> equation of state.


All times are GMT -4. The time now is 11:56.