CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Programming & Development (https://www.cfd-online.com/Forums/openfoam-programming-development/)
-   -   Differences simpleFoam vs. pimpleFoam / RASModel.H vs turbulenceModel.H (https://www.cfd-online.com/Forums/openfoam-programming-development/107887-differences-simplefoam-vs-pimplefoam-rasmodel-h-vs-turbulencemodel-h.html)

uli October 8, 2012 19:32

Differences simpleFoam vs. pimpleFoam / RASModel.H vs turbulenceModel.H
 
hi

I am trying to get a turbulence model (for heat flux) running that was implemented in simplefoam the following way:
  • introducing a volScalarField T (temperature) in createfields
  • introducing a TEqn.H file that includes the energy equation AND the turbulence model for the heat flux, which itself includes wallfunctions for some coefficients
  • adding "include TEqn.H" to mysimpleFoam.C
  • making other *.H files (like wallFvPatch.H and nearWallDist.H) available by adding "include <filename.H>"
After some minor changes due to the newer OF version I use (2.1.1) I am able to compile and run the modified simpleFoam solver.

But for pimpleFoam it does not work (I applied the above steps on pimpleFoam). Simplefoam uses RASModel.H whereas pimpleFoam uses turbulenceModel.H. What is the difference?

Without replacing
Code:

include "turbulenceModel.H"
by
Code:

include "RASModel.H"
in the mypimpleFoam.C file I get
Code:

/home/uli/OpenFOAM/OpenFOAM-2.1.1/src/finiteVolume/lnInclude/nearWallDist.H: In function 'int main(int, char**)':
/home/uli/OpenFOAM/OpenFOAM-2.1.1/src/finiteVolume/lnInclude/nearWallDist.H:44:1: error: 'namespace' definition is not allowed here
In file included from pimpleFoamT_YSC.C:75:0:
TEqn.H:50:77: error: 'nearWallDist' was not declared in this scope

when I try to compile the solver.

So I replaced turbulenceModel.H by RASModel.H and it compiled without error message, but running a case I get:
Code:

Starting time loop
Courant Number mean: 0.0219895 max: 0.686747
Time = 0.002059
DILUPBiCG: Solving for Ux, Initial residual = 1, Final residual = 8.15401e-07, No Iterations 4
DILUPBiCG: Solving for Uy, Initial residual = 1, Final residual = 5.46016e-07, No Iterations 4
 
--> FOAM FATAL ERROR:
hanging pointer, cannot dereference
From function PtrList::operator[] const
in file /home/uli/OpenFOAM/OpenFOAM-2.1.1/src/OpenFOAM/lnInclude/PtrListI.H at line 134.
FOAM aborting
#0 Foam::error::printStack(Foam::Ostream&) in "/home/uli/OpenFOAM/OpenFOAM-2.1.1/platforms/linux64GccDPOpt/lib/libOpenFOAM.so"
#1 Foam::error::abort() in "/home/uli/OpenFOAM/OpenFOAM-2.1.1/platforms/linux64GccDPOpt/lib/libOpenFOAM.so"
#2
at pimpleFoamT_YSC.C:0
#3
in "/home/uli/OpenFOAM/uli-2.1.1/platforms/linux64GccDPOpt/bin/pimpleFoamT_YSC"
#4 __libc_start_main in "/lib64/libc.so.6"
#5
at /usr/src/packages/BUILD/glibc-2.11.3/csu/../sysdeps/x86_64/elf/start.S:116

Any help is appreciated.

I use RAS and normally pisoFoam but since the model was implemented in simpleFoam I thought it might be easier to use pimpleFoam for this case.

Uli

GerhardHolzinger October 9, 2012 09:08

Code:

include "turbulenceModel.H"
means, that the solver is using OpenFOAMs generic turbulence model. Consequently, you can use RAS or LES modelling.

When you find

Code:

include "RASModel.H"
in a solver, this solver only uses RAS modelling. So the only choice you have is whether to use RAS turbulence models or not.

uli October 11, 2012 20:23

hello Gerhard, thank you for you answer.

Your explanation is what I assumed. What I do not understand is why I get the error posted above ("error: 'namespace' definition is not allowed here") when compiling my modified solver,
but when I - instead of turbulencemodel.H - include RASModel.H, I can compile the solver. However, I get the 2nd error posted above when I run my case.

Uli

wyldckat October 13, 2012 04:51

Greetings to all!

@Uli: I would suggest that you check the buoyant solvers located at "applications/solvers/heatTransfer" for more ideas.

As for RASModel vs turbulenceModel, (I think) the access to the wall functions is a bit different, which is why you're having problems.
If you could post/attach the "TEqn.H" file, it would make it a lot easier to diagnose the problem!

Best regards,
Bruno

uli October 21, 2012 23:43

1 Attachment(s)
hi, sorry for the delay

I checked the Heat transfer solvers but they don't include "nearWallDist.H", which seems to be the source of the problem.

Attached you find the TEqn.H file. Thanks for any kind of help.

wyldckat November 4, 2012 05:12

1 Attachment(s)
Hi Uli,

Now I don't know why you're having problems :( Attached is the code resulting from these steps:
  1. Working on OpenFOAM 2.1.x.
  2. Made a copy of the source code for pimpleFoam to my user folder:
    Code:

    cd $FOAM_RUN
    cd ..
    cp -r $FOAM_SOLVERS/incompressible/pimpleFoam .
    mv pimpleFoam pimpleFoam_WT

  3. Modified the last line in "Make/files", changing the target location and name.
  4. Removed the other two derived solvers (SRF and DyM), as well as "Allwmake".
  5. Added "TEqn.H" to the folder and included it after the "for" cycle of the "pimple.loop()".
  6. In "createFields.H", I cloned the creation of the "p" scalar field and renamed the clone as "T" field.
  7. Ran wmake. Loads of problems.
  8. Added:
    Code:

    #include "wallFvPatch.H"
    To the top inclusion list in "pimpleFoam.C".
  9. Edited "TEqn.H" and commented out everything below "Wall correction for C1", because I don't have a lot of the mentioned variables, since you only provided this file ;)
  10. Ran wmake and it built without any problems!
I didn't need to include "wallDist" per-se. I based myself on the code "applications/test/nearWallDist-wave/Test-WallDist2.C", hence the inclusion of "wallFvPatch.H".


Best regards,
Bruno

sdharmar January 24, 2013 18:18

TEqn.H
 
Hi Bruno,

I looked through files you have attached in the previous post. I don't understand why the part
fvScalarMatrix TEqn
// (
// fvm::div(phi, T)
// - fvm::laplacian(kappaEff, T)
// );
//
// TEqn.relax();

is commented since it meant to solve the temperature equation.

I am also trying to include TEqn in simpleFoam solver. And I used the TEqn.H as given below.
{
volScalarField kappaEff
(
"kappaEff",
turbulence->nu()/Pr + turbulence->nut()/Prt
);

fvScalarMatrix TEqn
(
//fvm::ddt(T)
fvm::div(phi, T)
- fvm::laplacian(kappaEff, T)
);

TEqn.relax();

TEqn.solve();

//rhok = 1.0 - beta*(T - TRef);
}

Is this wrong? or what is your opinion?

Thanks and best regards,
Suranga.

wyldckat January 26, 2013 15:01

Hi Suranga,

The previous posts should have given you the hint that I'm not experienced enough in OpenFOAM's source code in order to be able to guess the problems from loose code written on a post.

If you really want us (i.e. any one on the forum) to help you, please provide the source code that you can share. Or at least, describe the exact steps you've taken so that anyone can reach the same point you're in right now.

Best regards,
Bruno

edit: I've moved Suranga's answer to a new thread, in an attempt to gather the problem in a single thread: http://www.cfd-online.com/Forums/ope...implefoam.html


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