CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Running, Solving & CFD (
-   -   rhoCentralFoam Runge Kutta (

Henning86 October 23, 2013 04:04

rhoCentralFoam Runge Kutta
2 Attachment(s)

i have worked quite a lot with rhoCentralFoam and did some modification i wanted to share.

i have implemented Runge Kutta in rhoCentralFoam. It is stable for the forwardStep case until a CFL No of 1.5 and about 30% faster than the normal solver.

i also implemented local time stepping for the Runge Kutta Method (more Information about LTS can be found in the Forum) . This Solver is a lot faster than the Euler LTS. If tested with a CFL No of 1.2, which would be a speed up of more than 100% to the Euler Method. (But i havent looked at the results in detail but the first impression was good).

the Runge Kutta Method should work with different values (but not tested) (now it is Runge Kutta 4 ). Just change the values in the createFields.H.

If you find some mistakes, let me now!

it is written in vers 2.1.1

Best Regards


Henning86 October 24, 2013 03:13

rhoCentralFoam Runge Kutta 4
2 Attachment(s)
the solver for the version 2.2

eRzBeNgEl October 29, 2013 05:33

I have a problem compiling the solver with v221, my relevant output is in the following: Any suggestions?


rhoCentralFoamRK4$ ./Allwmake
+ wmake libso BCs
wmakeLnInclude: linking include files to ./lnInclude
Making dependency list for source file
I/opt/openfoam221/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linux64GccDPOpt/fixedRhoFvPatchScalarField.o
/usr/bin/ld: cannot find -lbasicThermophysicalModels
collect2: ld returned 1 exit status
make: *** [/opt/openfoam221/platforms/linux64GccDPOpt/lib/] Error 1
+ wmake

Making dependency list for source file rhoCentralFoamRK4.C
could not open file basicPsiThermo.H for source file rhoCentralFoamRK4.C
SOURCE=rhoCentralFoamRK4.C ; g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3 -DNoRepository -ftemplate-depth-100 -IBCs/lnInclude -I/opt/openfoam221/src/finiteVolume/lnInclude -I/opt/openfoam221/src/thermophysicalModels/basic/lnInclude -I/opt/openfoam221/src/thermophysicalModels/specie/lnInclude -I/opt/openfoam221/src/turbulenceModels/compressible/turbulenceModel -I/opt/openfoam221/src/dynamicMesh/lnInclude -I/opt/openfoam221/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam221/src/OpenFOAM/lnInclude -I/opt/openfoam221/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linux64GccDPOpt/rhoCentralFoamRK4.o

rhoCentralFoamRK4.C:34:28: fatal error: basicPsiThermo.H: No such file or directory

compilation terminated.
make: *** [Make/linux64GccDPOpt/rhoCentralFoamRK4.o] Error 1
+ wmake rhoCentralDyMFoam
Making dependency list for source file rhoCentralDyMFoam.C
could not open file basicPsiThermo.H for source file rhoCentralDyMFoam.C
SOURCE=rhoCentralDyMFoam.C ; g++ -m64 -Dlinux64 -DWM_DP -Wall -Wextra -Wno-unused-parameter -Wold-style-cast -Wnon-virtual-dtor -O3 -DNoRepository -ftemplate-depth-100 -I.. -I../BCs/lnInclude -I/opt/openfoam221/src/finiteVolume/lnInclude -I/opt/openfoam221/src/thermophysicalModels/basic/lnInclude -I/opt/openfoam221/src/thermophysicalModels/specie/lnInclude -I/opt/openfoam221/src/turbulenceModels/compressible/turbulenceModel -I/opt/openfoam221/src/dynamicMesh/lnInclude -I/opt/openfoam221/src/meshTools/lnInclude -IlnInclude -I. -I/opt/openfoam221/src/OpenFOAM/lnInclude -I/opt/openfoam221/src/OSspecific/POSIX/lnInclude -fPIC -c $SOURCE -o Make/linux64GccDPOpt/rhoCentralDyMFoam.o

rhoCentralDyMFoam.C:34:28: fatal error: basicPsiThermo.H: No such file or directory

Henning86 October 29, 2013 06:52

you probably download the solver for the version 2.1.1.

the class basicPsithermo doesn't exist anymore. in 2.2.x there was a huge change in the thermodynamic libary.

try the solver for version 2.2.2

konneym October 30, 2013 13:01


first of all, thanks for you code contribution.

I have implemented something equivalent a while ago, whereas there is the following issue (which is still on my todo list):

In order to be consistent, you would also need to perform the RK integration on the turbulence equations. You need to be able *write* the (let's say) k and omega of your turbulence model, because:
You also need to perform the weighted RK summation of your turbulence fields that you solve for.

This is basically only a programming issue, however, I am experiencing a strange bug related to that, see



maHein October 31, 2013 16:30

Hello Henning86,

I implemented a low-storage Runge-Kutta scheme in rhoCentralFoam as well some time ago.

I rewrote a ddt-class to account for the coefficients. So, the code in the main file was much more compact. Maybe you could try something yourself.

As a guideline, you could check out Oliver Borms density based solver, which also utilizes a low-storage Runge-Kutta scheme.



cfd.with.openfoam November 16, 2013 16:53

Hey Henning86,

Sounds really good and I will test both of them and will try to post some results as well; at some point.

A quick comment though - I am not sure if it can be done but if possible please change the name of the thread in order to incorporate words like LTS and or faster rhoCentralFoam. I think it will bring in more people here.

Thanks very much.

cfd.with.openfoam November 17, 2013 02:10

Hey Henning86,

Quickly wanted to mention that the 2.2.2 versions that you uploaded are not working with 2.2.2 - I got this error while compiling -

/opt/OpenFOAM-2.2.0/src/OpenFOAM/lnInclude/Field.C: In member function ‘void Foam::Field<Type>::operator=(const Foam::VectorSpace<Form, Cmpt, nCmpt>&)’:
/opt/OpenFOAM-2.2.0/src/OpenFOAM/lnInclude/Field.C:680:42: warning: typedef ‘VSType’ locally defined but not used [-Wunused-local-typedefs]
typedef VectorSpace<Form,Cmpt,nCmpt> VSType;
/usr/bin/ld: cannot find -lbasicThermophysicalModels
collect2: error: ld returned 1 exit status
make: *** [/opt/OpenFOAM-2.2.0/platforms/linux64GccDPOpt/lib/] Error 1

We can see the basicThermoPhysicalModels issue here. Did you check your 2.2.2 versions - looks like it needs a couple of more changes to get going on 2.2.2

It's quite late here and I'll try to see if can get around this issue tomorrow or next week but any comments will be helpful.

Thanks very much

Henning86 November 17, 2013 07:15

I'm pretty sure you compiled the solver with Allwmake.

i havent changed the rhoCentralDymFoam so you get this error.

cfd.with.openfoam November 17, 2013 13:32

Hey Henning86,

Thanks for your quick response.

Yes I saw rhoCentralDyMFoam in the Allwmake file but what I didn't pay attention to was the BCs which are also from OpenFOAM 2.1.0, I think.

So, I simply copied both BCs and the rhoCentralDyMFoam folders from the OF-2.2.0 sources and used Allwmake. It seems to have worked.

On the other hand - Did you ever use Michael Borm's densityBasedTurbo solver? If yes, then, any comments on how it performs when compared to rhoCentralFoam


cfd.with.openfoam November 17, 2013 15:01

Hey Henning86,

I just attempted to start a run with the rhoLTS... solver and I got this error -

Unknown ddt Scheme - Valid ddtschemes are -

9 (CoEuler, CrankNicolson, Euler, SLTS, backward, bounded, boundedBackward, localEuler, steadyState)

I was thinking that I could just use [rk4 (or maybe RK4) rDeltaT] option for the ddtSchemes in the fvSchemes file and it will run with rk4 local time stepping.

Am I missing something here? Please let me know.

Thanks very much

cfd.with.openfoam November 17, 2013 18:09

Hey Henning86,

Even if I use Euler it somehow works as RK4 but it diverges/stops/crashes pretty quickly in my case even with a MaxCo of 0.2. Maybe I am doing something wrong.

As a side note - I was trying to get densityBasedTurbo going with OpenFOAM 2.2.0 but it gives me an error related to the thermophysical models, which is not at all surprising since it has been developed based on OF-1.6-ext (link below)

The error looks like this -

/opt/OpenFOAM-2.2.0/src/OpenFOAM/lnInclude/Field.C: In member function ‘void Foam::Field<Type>::operator=(const Foam::VectorSpace<Form, Cmpt, nCmpt>&)’:
/opt/OpenFOAM-2.2.0/src/OpenFOAM/lnInclude/Field.C:680:42: warning: typedef ‘VSType’ locally defined but not used [-Wunused-local-typedefs]
typedef VectorSpace<Form,Cmpt,nCmpt> VSType;
localTimeStep/localTimeStep.C: In member function ‘void Foam::localTimeStep::update(Foam::scalar, Foam::Switch)’:
localTimeStep/localTimeStep.C:153:57: error: ‘const class Foam::basicThermo’ has no member named ‘psi’
(thermophysicalModel_.Cv()* i());
make: *** [Make/linux64GccDPOpt/localTimeStep.o] Error 1

Since you seem to be be quite comfortable with OpenFOAM, can you give me a couple of pointers in order to handle this problem.

I think you might also find the densityBasedTurbo as a useful alternative to rhoCentralFoam for steady state cases.

Also another thing that I don't understand is that even if we use Local Time Stepping with OpenFOAM it is still not like e.g FLUENT which can give us a 2D steady state solution within minutes. What is the difference between the LTS in OpenFOAM and that in e.g FLUENT. Is it something entirely else.

To me it seems that densityBasedTurbo will be something like FLUENT and will give real quick steady state 2D solutions.

Thanks very much

Henning86 November 19, 2013 05:13


the Runge kutta 4 loop is in the solver. You need to use Euler or localEuler rDeltaT (for local timestepping)

i dont think it is possible to adapt turbfoam to v 2.2.x without great affort.

most crashes of solvers in cfd are caused by the initialisation or the boundary conditions

best regards


fivos April 5, 2015 18:23

Hi all,

I would like to know if anyone has tried to port the rhoCentralFoamRK4/LTS to 2.3.x.

I have done some things; there are some changes to be made (e.g. at the Make file with fluidThermophysycalModels and basicThermophysicalModels) and the code compiles with OF2.3.x and runs for the tutorial case of shocktube. However, at other cases (mainly involving total pressure/temperature) the solver crashes with the following output:



    request for volScalarField psi from objectRegistry region0 failed
    available objects of type volScalarField are


    From function objectRegistry::lookupObject<Type>(const word&) const
    in file /home/fivos/OpenFOAM/OpenFOAM-2.3.x/src/OpenFOAM/lnInclude/objectRegistryTemplates.C at line 198.

FOAM aborting

#0  Foam::error::printStack(Foam::Ostream&) in "/home/fivos/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/"
#1  Foam::error::abort() in "/home/fivos/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/"
#2  Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const& Foam::objectRegistry::lookupObject<Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> >(Foam::word const&) const in "/home/fivos/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/"
#3  Foam::fixedRhoFvPatchScalarField::updateCoeffs() in "/home/fivos/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/"
#4  at EulerDdtSchemes.C:0
#5  Foam::fv::EulerDdtScheme<double>::fvmDdt(Foam::GeometricField<double, Foam::fvPatchField, Foam::volMesh> const&) in "/home/fivos/OpenFOAM/OpenFOAM-2.3.x/platforms/linux64GccDPOpt/lib/"
 at rhoCentralFoamRK4.C:0
 in "/home/fivos/OpenFOAM/fivos-2.3.x/platforms/linux64GccDPOpt/bin/rhoCentralFoamRK4"
#8  __libc_start_main in "/lib/x86_64-linux-gnu/"
 in "/home/fivos/OpenFOAM/fivos-2.3.x/platforms/linux64GccDPOpt/bin/rhoCentralFoamRK4"
Aborted (core dumped)

I am trying to find the reason behind that.. it seems it is related to the
Foam::fixedRhoFvPatchScalarField::updateCoeffs() in fixedRhoFvPatchScalarField, but I have not been able to poinpoint the exact reason..

Any ideas are welcome.
Thanks in advance.

maHein April 7, 2015 03:42

Simply use "thermo:psi" in your boundary conditions instead of just "psi". This solves this problem.



fivos April 7, 2015 19:01

Hi maHein,

Thanks for your answer

Have you done the rhoCentralFoamRK4 for OF2.3.x and it worked? Could you share it, because I may have done something wrong with mine..?

I am asking because it seems that it is not related just with replacing psi with thermo:psi in the total boundary conditions... Actually, I have the same issue with the forwardStep case (OpenFOam tutorial) where, if I remember correctly, static values are prescribed.

Thanks again.

Henning86 April 8, 2015 08:49

your are right the solver don't work with 2.3.x will upload an updated version.

fivos April 8, 2015 08:50

Dear Henning,

Thanks a lot in advance. If you don't mind, could you also briefly describe what changes you made?

Thanks again.

Henning86 April 8, 2015 09:04

2 Attachment(s)
Dear fivos,

In the folder BCs all the files where from the version 2.1, as it used the old thermodynamic library, it didn't work.

Only update it.

Hope the solver works,

Best Regards


fivos April 9, 2015 14:41

Hi Henning,

Thank you for your help, I can confirm that replacing the BCs of the old version with the new made it work.

Thanks again

All times are GMT -4. The time now is 19:54.