Creating a solver for the nondimensionalized NavierStokes equation
1 Attachment(s)
Hi everyone,
I have recently started using OpenFoam. I want to resolve the nondimensionalized NavierStakes equation (in which appears the Reynolds number). My equation is ( you can also find it attached ) : Re . (U . div) U + grad(meanP)  laplacian(U) =  grad(fluctP) http://www.cfdonline.com/Forums/dat...AASUVORK5CYII= meanP is a unit vector which is constant and P=meanP+fluctP Re is the reynolds number I want to resolve my equation for U and fluctP For this, I have modified the IcoFoam solver as follows, but it seems that there is an error ( may be with the '' meanP '' ) fvVectorMatrix UEqn ( fvm::ddt(U) + Re*(fvm::div(phi, U))  fvm::laplacian(U) + magSqr(meanP) ); solve(UEqn == fvc::grad(fluctP)); I will be thankfull If someone can help me to create this solver or share a web site which treated the implementation of the nondimensionalized NS equation. Best regards Mehrez 
Hi
Can someone help me please. Thank you 
1 Attachment(s)
please find attached the OpenFoam files of the solver (I have proceeded by modifying the IcoFoam solver to myIcoFoamB solver).

Hi,
there are many errors: Code:
fvVectorMatrix UEqn Code:
laplacian(nu, U) OF do not know what meanP is. So you have to define Re meanP and the other variables you implemented! The following example is working: Code:

Hi Mehrez,
First it would be better if you modify the Make/files as in the user guide chapter 3 to be: Code:
myIcoFoamB.C Code:
createFields.H: In function ‘int main(int, char**)’: Code:
volVectorField gradP Code:
volVectorField gradP Code:
myIcoFoamB.C:61:18: error: no match for ‘operator+’ in ‘Foam::operator(const Foam::tmp<Foam::fvMatrix<Type> >&, const Foam\ Code:
fvVectorMatrix UEqn Best regards, Hisham 
Quote:
I just had a very short look into the code and dont see the declaration of the other variables :) Well nice replay! Code:
( 
Hi guys
Thank you for your help. I think that it is better if you take a look to my equation (which I have attached in my first message). You can see that I don't have : nu . laplacian (U) but I just have : laplacian (U) Concerning the declaration of the variables : I have declared " Re " and " gradP " in the file createFields.H dimensionedScalar Re ( transportProperties.lookup("Re") ); volVectorField gradP ( transportProperties.lookup("gradP") ); 
Oh sorry,
the laplacian(U) class existis! So its working :) 
Hi Hisham
Thank you for your answer. I think that I don't have to declare " gradP " like this : volVectorField gradP ( IOobject ( "gradP", runTime.timeName(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), fvc::grad(p) ); As I said before, the '' gradP '' is a unit vector which is constant and which I put it like an input (so this is why OF don't have to compute it). I have just to declare it like a vector which I will specify the value in constantProperties file. 
Quote:
But how whould you get the information of the "vector" couse the pressure is just a scalar without a direction. 
Hi Tobi
As you can see in my equation gradP is the gradient of the nondimensionalized mean pressure. I have it like an input (I will study my flow in function of given values of Re and gradP) I think that the problem is how to define this vector (gradP) in the equation 
I think that it is more clear like this
Equation : Re . (U . div) U + gradP  laplacian(U) =  grad(fluctP) OF syntax : fvVectorMatrix UEqn ( fvm::ddt(U) + Re*(fvm::div(phi, U))  fvm::laplacian(U) + magSqr(gradP) ); solve(UEqn == fvc::grad(fluctP)); Input : Re : scalar gradP : vector output (after computation) U : vector field fluctP : vector field 
If gradP is a constant vector, you should not store it in a volVectorField, but in a dimensionedVector from the transportproperties.
Two more things:  Are you sure Reynolds should appear like you wrote it. As far as I know, in the dimensionless NS equations, you have 1/Re in the diffusive terms.  You're now adding magSqr(gradP), which is a scalar, to a vector equation. This can not be correct. 
2 Attachment(s)
Dear Bernhard,
I'm sure that I have a right equation (attached here) Thank you very much for your help. Actually I can compile my solver with your corrections. fvVectorMatrix UEqn ( fvm::ddt(U) Re*(fvm::div(phi, U))  fvm::laplacian(U) + gradP ); and : dimensionedVector gradP ( transportProperties.lookup("gradP") ); To test this solver, I've taken the attached example "cavity" after putting U, p, Re, and gradP in a dimensionless form. I've done the same with the domain (I've commented the line " conversion to meters " ). Executing "cavity" with "myIcoFoamB" solver, OpenFoam returns an error message on the dimensions: > FOAM FATAL ERROR: incompatible dimensions for operation [U [0 1 0 0 0 0 0]]  [U [0 2 0 0 0 0 0]] I think it comes from the operators (grad gives : L ^ 1 and Laplacian gives : L ^ 2). Is there a way to put the components (x, y, z) of the domain in a dimensionless form in order to get dimensionless values by applying one of the operators? Thank you very much for your help. Best regards. Mehrez 
Complicated one, you can choose to ignore the dimensionchecking. I think you can do this in the controlDict you find in ..../OpenFOAM2.1.x/etc/ .
Maybe you can put it in your own controlDict as well. I never tested this, but you can look here. 
Hi,
you can put a dimensionSet on your p vector that the dimension check is working! Tobi 
Hi guys,
Again thanks for your precious help. @ Bernhard : I have found the file " controlDict " , can you please precise me how to proceed. @ Tobi : I've tried what you said but it doesn't work. it returns each time a different dimensions error ! I can't understand Mehrez 
Post your dimenionSet and the output error.

Re Re [ 0 0 0 0 0 0 0 ] 0.01;
gradP gradP [ 0 0 0 0 0 0 0 ] (0.9 0.2 0); U : dimensions [0 0 0 0 0 0 0]; p : dimensions [0 0 0 0 0 0 0]; In the blockMeshDict, I have commented the following line : //convertToMeters 0.1; and this is what I get : Create time Create mesh for time = 0 Reading transportProperties Reading field p Reading field U Reading/calculating face flux field phi Starting time loop Time = 0.005 Courant Number mean: 0 max: 0 > FOAM FATAL ERROR: incompatible dimensions for operation [U[0 1 0 0 0 0 0] ]  [U[0 2 0 0 0 0 0] ] From function checkMethod(const fvMatrix<Type>&, const fvMatrix<Type>&) in file /opt/openfoam211/src/finiteVolume/lnInclude/fvMatrix.C at line 1316. FOAM aborting #0 Foam::error::printStack(Foam::Ostream&) in "/opt/openfoam211/platforms/linuxGccDPOpt/lib/libOpenFOAM.so" #1 Foam::error::abort() in "/opt/openfoam211/platforms/linuxGccDPOpt/lib/libOpenFOAM.so" #2 in "/opt/openfoam211/platforms/linuxGccDPOpt/bin/myIcoFoamB" #3 in "/opt/openfoam211/platforms/linuxGccDPOpt/bin/myIcoFoamB" #4 in "/opt/openfoam211/platforms/linuxGccDPOpt/bin/myIcoFoamB" #5 __libc_start_main in "/lib/i386linuxgnu/libc.so.6" #6 in "/opt/openfoam211/platforms/linuxGccDPOpt/bin/myIcoFoamB" Aborted (core dumped) ubuntu@ubuntuVirtualBox:~/OpenFOAM/mehrez2.1.1/test/cavity$ 
What is that:
U : dimensions [0 0 0 0 0 0 0]; p : dimensions [0 0 0 0 0 0 0]; ??? I dont understand the two lines. Set pGrad pGrad [0 1 0 0 0 0 0] 
All times are GMT 4. The time now is 02:41. 