CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Running, Solving & CFD

LiftDrag tool

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

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   November 24, 2007, 10:42
Default I'm working on a NACA0012 in 2
  #1
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
I'm working on a NACA0012 in 2D and i must calculate the lift and drag coefficent. Can someone post here a complete liftDrag tool with all files needed to compile and install it? Not only the files under directory src/postProcessing/incompressible/liftDrag but also the files under application/utilities/postProcessing/miscellaneous/liftDrag
.Can someone explain me how the tool calculate the lift and drag coefficents? In the forum there are many thread on this argument but no one is complete.

Thanks a lot

Emanuele
nuovodna is offline   Reply With Quote

Old   November 25, 2007, 12:54
Default Everything that you've asked f
  #2
Senior Member
 
Srinath Madhavan (a.k.a pUl|)
Join Date: Mar 2009
Location: Edmonton, AB, Canada
Posts: 703
Rep Power: 21
msrinath80 is on a distinguished road
Everything that you've asked for (and more) is in this board already. Please use the search utility to the left to find it.
msrinath80 is offline   Reply With Quote

Old   December 3, 2007, 10:45
Default I think the question can be re
  #3
Senior Member
 
Alberto Passalacqua
Join Date: Mar 2009
Location: Ames, Iowa, United States
Posts: 1,912
Rep Power: 36
alberto will become famous soon enoughalberto will become famous soon enough
I think the question can be reformulated as "How can I compile liftDrag on OpenFOAM 1.4 and following?" ;-)

Regards,
Alberto
__________________
Alberto Passalacqua

GeekoCFD - A free distribution based on openSUSE 64 bit with CFD tools, including OpenFOAM. Available as in both physical and virtual formats (current status: http://albertopassalacqua.com/?p=1541)
OpenQBMM - An open-source implementation of quadrature-based moment methods.

To obtain more accurate answers, please specify the version of OpenFOAM you are using.
alberto is offline   Reply With Quote

Old   December 3, 2007, 16:34
Default Dear Emanuele, I have been
  #4
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Dear Emanuele,

I have been working on a naca0012 as well.
These are the things I found out so far:

1. The solution is very very sensitive to your mesh quality. At the moment, I am using a structured mesh with maximum non-orthogonality of 9 deg, average 4 deg. Maximum aspect ratio 808. Max skewness 0.28. You can find out this information by running checkMesh.

2. You should initialize your case with potential foam to get good initial conditions for velocity. Copy potentialFoam/yourcase/0/U into simpleFoam/yourCase/0

3. At this point you should start your simulation with turbulence off (simpleFoam/yourCase/constant/tubulenceProperties)
Let the pressure and velocity initial residuals drop to say 1e-3, and then turn the turbulence on.
Remember that to be able to have your code see changes as it is running you need to have runTimeModifiable yes in simpleFoam/yourcase/system/controlDict.

4. You should converge your results in simpleFoam with very conservative schemes, i.e.:

file simpleFoam/yourCase/system/fvSchemes

divSchemes
{
default none;
div(phi,U) Gauss upwind;
div(phi,k) Gauss upwind;
div(phi,epsilon) Gauss upwind;
div(phi,omega) Gauss limitedLinear 1;
div(phi,R) Gauss upwind;
div(R) Gauss linear;
div(phi,nuTilda) Gauss upwind;
div((nuEff*dev(grad(U).T()))) Gauss linear;
}

5. After your solution has converged to 1e-6 (residual for all variables), you can go more aggressive with the discretization schemes. for example:

file simpleFoam/yourCase/system/fvSchemes

divSchemes
{
default none;
div(phi,U) Gauss limitedLinearV 1;
div(phi,k) Gauss limitedLinear 1;
div(phi,epsilon) Gauss limitedLinear 1;
div(phi,omega) Gauss limitedLinear 1;
div(phi,R) Gauss linear;
div(R) Gauss linear;
div(phi,nuTilda) Gauss linear;
div((nuEff*dev(grad(U).T()))) Gauss linear;
}

If you compute your drag at steps 4 and 5, you may notice a difference of 20%. This is due to the better results you get with the more aggressive discretization schemes.

6. Your drag estimate is going to be very sensitive to your boundary conditions at the airfoil also. At the moment I am having very satisfactory results using nutWallFunctions for the airfoil with a y+ of about 7. You can check your y+ during your solution or when the solution is converged issuing checkYplus.

I hope this is a good start.
Keep me posted about your findings,

Alessandro
gtg627e is offline   Reply With Quote

Old   December 5, 2007, 06:34
Default Good morning Alessandro! I hav
  #5
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
Good morning Alessandro! I have followed your advices but i have a problem with the boundary conditions: where should i set the nutWallFunctions ?

Thanks in advance

Emanuele
nuovodna is offline   Reply With Quote

Old   December 5, 2007, 06:58
Default what turbulence model do you u
  #6
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
what turbulence model do you use?
nuovodna is offline   Reply With Quote

Old   December 5, 2007, 08:41
Default Emanuele, At the moment, I
  #7
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

At the moment, I am experimenting with:

1. kOmegaSST (High-Re) meaning you use wall functions.


2. LaunderSharmaKe (Low-Re) meaning you do not use wall functions.

To set wall functions, edit /simpleFoam/yourCase/constant/polymesh/boundary.

For case 1:

frontAndBack
{
type empty;
...
...
}

inlet
{
type patch;
physicalType inlet;
...
...
}

outlet
{
type patch
physicalType outlet;
}

airfoil
{
type wall;
physicalType nutWallFunctions;
(or physicalType wallFunctions);
...
...
}

/simpleFoam/yourCase/0/p

frontAnfback
{
type empty;
}

inlet
{
type zeroGradient;
}

outlet
{
type fixedValue;
value uniform 0;
}

airfoil
{
type zeroGradient;
}

/simpleFoam/yourCase/0/U

frontAnfback
{
type empty;
}

inlet
{
type fixedValue;
value uniform (50 0 0)
}

outlet
{
type zeroGradient;
}

airfoil
{
type fixedValue;
value uniform (0 0 0)
}

/simpleFoam/yourCase/0/k

frontAnfback
{
type empty;
}

inlet
{
type fixedValue;
value uniform 0.375;
}

outlet
{
type zeroGradient;
}

airfoil
{
type zeroGradient;
}


/simpleFoam/yourCase/0/omega

frontAnfback
{
type empty;
}

inlet
{
type fixedValue;
value uniform 12800;
}

outlet
{
type zeroGradient;
}

airfoil
{
type zeroGradient;
}


For case 2, I am not so sure about how to enforce no wall functions but I think it is like this:

frontAndBack
{
type empty;
...
...
}

inlet
{
type patch;
physicalType inlet;
...
...
}

outlet
{
type patch
physicalType outlet;
}

airfoil
{
type wall;
physicalType wall;
...
...
}

/simpleFoam/yourCase/0/p

frontAnfback
{
type empty;
}

inlet
{
type zeroGradient;
}

outlet
{
type fixedValue;
value uniform 0;
}

airfoil
{
type zeroGradient;
}

/simpleFoam/yourCase/0/U

frontAnfback
{
type empty;
}

inlet
{
type fixedValue;
value uniform (50 0 0)
}

outlet
{
type zeroGradient;
}

airfoil
{
type fixedValue;
value uniform (0 0 0)
}

/simpleFoam/yourCase/0/k

frontAnfback
{
type empty;
}

inlet
{
type fixedValue;
value uniform 0.375;
}

outlet
{
type zeroGradient;
}

airfoil
{
type fixedValue;
value uniform 1.0e-10;
}


/simpleFoam/yourCase/0/omega or epsilon (since I use LaunderSharmaKE)

frontAnfback
{
type empty;
}

inlet
{
type fixedValue;
value uniform 12800; Make sure this value is consistent with your analysis
}

outlet
{
type zeroGradient;
}

airfoil
{
type fixedValue;
value uniform 1.0e-10;
}

I hope this helps,

Alessandro
gtg627e is offline   Reply With Quote

Old   December 5, 2007, 11:35
Default Hello, I thought physicalTy
  #8
Member
 
Rosario Russo
Join Date: Mar 2009
Location: Trieste, Italy
Posts: 56
Rep Power: 17
ariorus is on a distinguished road
Hello,

I thought physicalType was only used in FoamX and that it didn't have any effect on solvers.

Wall functions should be used only if an high Reynolds turbulent model is employed otherwise they are not used, regardless of what physicalType" one is using.

Please correct me if I'm wrong or something has been changed in openfoam about this.

Ciao.
ariorus is offline   Reply With Quote

Old   December 6, 2007, 09:11
Default this is the output of checkYPl
  #9
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
this is the output of checkYPlus:

Create mesh for time = 1000

Time = 1000
Reading field p

Reading field U

Reading/calculating face flux field phi

Selecting incompressible transport model Newtonian
Selecting turbulence model kOmegaSST
Patch 3 named ala y+ : min: 0.0658652 max: 102.546 average: 65.7859

End
nuovodna is offline   Reply With Quote

Old   December 6, 2007, 10:24
Default Emanuele, The inlet velocit
  #10
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

The inlet velocity seems very low. What Re are you trying to obtain?
What is your kinematic viscosity?

Also, remember that in liftDrag a value of Aref is computed, which is equivalent to the wetted area of your wing, but your are interested in your
sectional drag coefficient I assume. This is what I do:

1. Set Aref=1 in src/postProcessing/incompressible/liftDrag/liftDrag.C
recomplile your liftdrag tool by issuing ./Allwmake.
Then divide the drag coefficient that you obtain this way by your depth in the z-direction.

Make sure that in applications/postProcessing/miscellaneous/liftDrag/liftdrag.C
turbDragCoeffcient is called, instead of the default dragCoefficient. If you change the function call I mentioned, recompile by issuing wclean && wmake.

As an after thought, does your velocity field look reasonable?
What about your pressure field?

From "Theory of wing sections", you get the maximum velocity over a naca0012 at 0-deg aoa as v_local/Vinf = 1.188. Does your velocity field agree with this?


Let me know,

Alessandro
gtg627e is offline   Reply With Quote

Old   December 6, 2007, 11:58
Default Hi Alessandro, in transportPr
  #11
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
Hi Alessandro,
in transportProperties file there is this line:

nu nu [0 2 -1 0 0 0 0] 1.4e-06;

I'm trying to obtain Re = 1e+06


If my depth in the z-direction is 1, can i unchange the liftDrag.C file?

The velocity field looks reasonable in paraView also the pressure field.
nuovodna is offline   Reply With Quote

Old   December 6, 2007, 12:15
Default Emanuele, What is the chord
  #12
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

What is the chord length of your airfoil?
To get Re=1e6, given your nu, it looks like the chord is ~ 0.72.

So, the aspect ratio of your faces in the z-direction is very high. If you search the postings, you will find a posting where Dr. Jasak mentioned the procedure that is used to compute the drag coefficient; he also mentioned that while making your z-depth = 1 is appealing, since you don't have do recompute your Cd (by normalizing about z-direction, if Aref = 1), this leads to significant errors.

I think you should reduce your z-dimension to something like 1%-10% of your chord, to be safe.

Furthermore, I do not know the details of the Navier-stokes formulation in OpenFOAM, but I remember reading that solving the Navier-Stokes equations at really low speed may be difficult (I think there are special formulations for this, but look this up I am not a CFD expert). So I would suggest changing the inlet velocity to something reasonable like 50, and playing with nu to get your desired Re.

Alessandro
gtg627e is offline   Reply With Quote

Old   December 6, 2007, 12:18
Default Emanuele, Sorry about the c
  #13
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

Sorry about the chord length;
This is what I mean Re=chord*U/nu; I messed that up in my previous posting.
I see your chord must be 1, right?

Alessandro
gtg627e is offline   Reply With Quote

Old   December 6, 2007, 13:01
Default i have change my z-depth to 1%
  #14
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
i have change my z-depth to 1% of chord (my chord's lenght is 1 ---> z-depth 0.01) and i've adjusted nu to obtain Re = 1e6 with a velocity inlet of (50*cos(18°), 50*sin(18°), 0) supposing an aoa = 18 degree but the lift coefficent is too low.
nuovodna is offline   Reply With Quote

Old   December 6, 2007, 13:13
Default Emanuele, With aoa = 18 deg
  #15
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

With aoa = 18 deg, you have massive separation. SimpleFoam, being a steady solver, is not applicable to this case. You should use turbFoam.

For a naca0012, I think you are safe using simpleFoam up to 8-9 deg maximum.

Alessandro
gtg627e is offline   Reply With Quote

Old   December 10, 2007, 13:48
Default Alessandro, with simpleFoam
  #16
Senior Member
 
Emanuele
Join Date: Mar 2009
Posts: 110
Rep Power: 17
nuovodna is on a distinguished road
Alessandro,

with simpleFoam now i obtain a reasonable value of lift coefficent from 0 to 6 deg. I'm traying to use turbFoam for aoa > 6 deg but i have always the floating point error. In what way can i solve this error??
Thanks a lot

Emanuele
nuovodna is offline   Reply With Quote

Old   December 10, 2007, 17:06
Default Emanuele, Could you be more
  #17
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

Could you be more specific about your turbFoam case:

1. turbulence model
2. checkMesh output and y+
3. Boundary conditions
4. Initial conditions
5. deltaT and Courant number you observe during the simulation.
6. fvSchemes and fvSolution specifications.

Alessandro
gtg627e is offline   Reply With Quote

Old   December 11, 2007, 21:19
Default Emanuele, I don't know whet
  #18
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Emanuele,

I don't know whether or not the spalartAllmaras uses wall functions. If it does, you should set zeroGradient for all turbulence variables at the boundary patch ala like you have done. If spalartAllmaras does not use wall functions, you should set all turbulence variables to 1e-10 at the patch ala. I think there is something wrong since your y+ is 0 everywhere.

How do you specify nuTilda?
I think you need nuTilda for the spalartAllmaras turbulence model. In order to find out which variables you need to specify for the SpalartAllmaras turbulence model edit /src/turbulenceModels/incompressible/SpalartAllmaras/SpalartAllmaras.C

At line 125 you can see that this turbulence model definitely wants to read nuTilda, so you need to specify it. for external flows, (please double check what I am saying) nuTilda = beta * nu, where 1 <= beta <= 10.
For more details see:

http://www.cfd-online.com/OpenFOAM_D...es/1/3476.html

fvSchemes and fvSolutions look good. Later on when you get your model working you might what to tighten up convergence tolerances to at least 1e-6.

I am no expert in CFD and much less in turbulence modeling, but are you sure you can use spalartAllmaras for separated flows? (I assume you are still trying to analyze your naca0012 at 18-deg aoa).

If you are still trying to simulate a naca0012 at 18-deg aoa, I think you would be better off with kOmegaSST.

I assume you farfield1 patch is the inlet correct?

I hope this helps,

Alessandro
gtg627e is offline   Reply With Quote

Old   December 12, 2007, 11:31
Default Hello, yPlus are equal to
  #19
Member
 
Rosario Russo
Join Date: Mar 2009
Location: Trieste, Italy
Posts: 56
Rep Power: 17
ariorus is on a distinguished road
Hello,

yPlus are equal to

yPlus_* =Cmu^0.25 sqrt(k) yp / nu

so for Spalart Allmaras the field is always zero since in that model k is not used and its value is set to zero.

On the other hand I think it could be useful to have the "other" yPlus (without *):

yPlus= u_* yp / nu

yPlus_* and yPlus should be comparable in equilibrium turbulent boundary layers.

I'm attaching here an application which computes both yPlus* and yPlus and writes them on files so that the fields can be visualized by paraFoam. I hope it can be useful to anybody, and/or that anybody will correct it if I made some mistakes ;-) .

computeYplus.tgz

Just one more thing:
in the liftDrag utility the computation of the turbulent force is mesleading it is better to compute laminar and turbulent forces at the same time:

laminarTurbForce += gSum ( -turbulence->nuEff()().boundaryField()[patchI]* U.boundaryField()[patchI].snGrad()* mesh.magSf().boundaryField()[patchI] );

This explains why in the automotive test case thread I mentioned strange values obtained for turbulent forces.


Ciao.
ariorus is offline   Reply With Quote

Old   December 12, 2007, 23:50
Default Rosario, Thank you for your
  #20
Member
 
Alessandro Spadoni
Join Date: Mar 2009
Location: Atlanta, GA
Posts: 65
Rep Power: 17
gtg627e is on a distinguished road
Rosario,

Thank you for your elucidations on the Spalart-Allmaras model, and the associated method to compute y+.

Now I have a question for you. I have been going crazy with trying to understand wallFunctions. I now understand that there are Hi-Re models that do use wallFunctions such as kOmega, kEpsilon on so forth. I experimented with LaunderSharma (no wallFunctions) but I get a really bad looking velocity field at the leading edge of my naca0012.

I went through all threads discussing wallFunctions, and the only thing I saw was people enforcing the use of them with physicalType ....

As you have pointed out though, physicalType specifications are only used by FoamX. Do hi-Re turbulence models automatically use wallFunctions, no matter what you specify?

what about low-Re turbulence models? Do you set you wall patch as type wall?

Thank you,

Alessandro
gtg627e is offline   Reply With Quote

Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

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 Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Question to liftDrag hoochie OpenFOAM Post-Processing 29 September 19, 2014 03:38
LiftDrag for 141 ryan_m OpenFOAM Running, Solving & CFD 2 August 24, 2009 21:26
Liftdrag calculation marco OpenFOAM Post-Processing 10 March 6, 2009 09:51
LiftDrag coefficient in LES fabian_korn OpenFOAM Post-Processing 1 September 22, 2008 02:34
LiftDrag utility not available guggi OpenFOAM Running, Solving & CFD 1 August 2, 2006 12:36


All times are GMT -4. The time now is 13:36.