Sig Turbomachinery / Organize the next meeting

From OpenFOAMWiki

1 Next meeting

The next meeting will be at the Turbomachinery session of the third OpenFOAM workshop in Milano, July 10-11, 2008.

The proposed ERCOFTAC conical diffuser case-study can be found below.

2 Previous meetings

The group was officially started at the second OpenFOAM workshop in Zagreb, 2007.

The planning of the group started at the first OpenFOAM workshop in Zagreb, 2006.

3 The ERCOFTAC conical diffuser case-study

H�?¥kan Nilsson, Chalmers University of Technology, G�?¶teborg, Sweden

Maryse Page, Hydro-Québec, Montréal, Canada

The ERCOFTAC conical diffuser testcase [1] is a swirling boundary layer developing in a conical diffuser (axi-symmetric expansion of a circular pipe). A description of the measurements made by Clausen, Koh and Wood is available in references [1]. The experimental set-up is such that the inlet swirl prevents boundary layer separation but is just insufficient to cause recirculation in the core of the flow. Experimental results are available in the ERCOFTAC Classic database (Case 60: Swirling Boundary Layer in Conical Diffuser). The testcase was included in the ERCOFTAC Workshop on Data Bases and Testing of Calculation Methods for Turbulent Flows held in Karlsruhe in 1995 [2]. The testcase is also part of the QNET-CFD Knowledge Base (Swirling diffuser flow).

Figure ERCOFTACdiffuser.1 shows a 3D view of the geometry. The inlet is in this case located at the beginning of the honeycomb that was used in the experiments to generate a plug flow with a solid body rotation/swirl. In the experiments it was open air after the end of the expansion.

Several two-dimensional flow computations were submitted to the ERCOFTAC Workshop in 1995 [2]. Two-dimensional computations [3] and three-dimensional [4] computations using the experimental data at the inlet of the conical diffuser were also published in 1996 and 1997. More recently, results were presented using OpenFOAM at the Second OpenFOAM Workshop [5]. Computations reflecting more the experimental set-up were presented in 2006 [6].

Experimental results related to the same conical diffuser were also presented in 1987 by Clausen and Wook in the conference paper [7]. Prediction of turbulence quantities for this swirling flow were presented by Armfield, Cho and Fletcher in [8].

A conclusion of the work in this case study will be presented at the third OpenFOAM workshop 2008, and at the 24th IAHR Symposium 2008. Future work on the case study, using the original files mentioned below, should refer to these publications.

ERCOFTAC geometry.jpg

Figure ERCOFTACdiffuser.1. 3D view of the ERCOFTAC diffuser geometry.

3.1 How to get the files

The OpenFOAM ERCOFTAC conical diffuser case described below was developed as a case-study for the third OpenFOAM workshop, Milano, 2008, and it can be found at the OpenFOAM-extend SourceForge project. It includes parametrizations of the geometry and the O-grid, complete OpenFOAM cases that solves the flow in the domain, automatic post-processing of the results, and xfig files for generation of the figures below. The parametrization is made using m4, and instructions on how to run m4 are included below.

Get all the current files by doing:

 
run
svn checkout http://openfoam-extend.svn.sourceforge.net/svnroot/openfoam-extend/trunk/Breeder/OSIG/TurboMachinery/ercoftacConicalDiffuser ercoftacConicalDiffuser

In the descriptions below we thus assume that the ercoftacConicalDiffuser directory is located in the $FOAM_RUN directory

Update your files every now and then by doing:

 
cd $FOAM_RUN/ercoftacConicalDiffuser
svn update

See further info at the OpenFOAM-extend project

3.2 Case0: Base case

The case is set up according to the instructions in the ERCOFTAC database. Note however that we here use the z-axis as the main flow axis instead of the x-axis. The measured profiles at z=-25mm are used as inlet boundary conditions, and the outlet is located at the position where the diffuser ends into open air.

3.2.1 Case0, mesh parametrization

Figure Case0.1 shows the definitions of the parameters rIn, diffuserLength and openingAngle. It is thus easy to modify the geometry in terms of these parameters.

ERCOFTAC base case BCD 2dView.jpg

Figure Case0.1. 2D view of Case0. The radius is here doubled for visualization reasons.

The grid generation in blockMesh is based on a number of cross-sections. It is easy to add or delete cross-sections in the m4 file if anyone would like to study another version of the same case. Figure Case0.2 shows cross-sections A-C, that are used when making the mesh for the base case. The cross-sections refer to:

A: The inlet of the computational domain, where measurements are available.

B: The inlet of the expansion.

C: The outlet of the expansion, and the outlet of the computational domain.

The number of cells in the z-direction between each cross-section is specified in the m4 file using parameters zABnumberOfCells (for the number of cells between cross-sections A and B), and zBCnumberOfCells (for the number of cells between cross-sections B and C). The grid spacing in the z-direction is uniform.

ERCOFTACdiffuser planes Case0.jpg

Figure Case0.2. Planes used in the parametrization of Case0. The radius is here according to the ERCOFTAC description.

Figure Case0.3 shows the parameters used for defining the O-grid throughout the domain. The figure is an example of the grid plane at cross-section A, but the parametrization at other planes are defined with parameters where 'A' is exchanged with the letter of the other cross-section. The number of cells in the radial direction in the O-grid is specified using parameter rNumberOfCells, and the number of cells in the tangential direction is specified using parameter tNumberOfCells (these must be integers!). The center block will thus get tNumberOfCells in both directions. These numbers are the same for all cross-sections. The grid point distribution of the center block, and thus in the tangential direction of the O-grid is uniform. The grid point distribution in the radial direction in the O-grid is defined using parameter rGrading, which is the same at all cross-sections. rGrading is the ratio between the size of the radially innermost cell in the O-grid to that of the outermost cell. That is how blockMesh generates non-uniform meshes.

The location of cross-section A in the z-direction is specified using parameter zA. The outer radius of cross-section A is specified using parameter rA. The radius of the vertices of the center block, relative to rA, is specified using the parameter rRelA, which should be between 0 and 1. In other words, the radius of the vertices may be anything from 0 (rRelA = 0, but that would make no sense) to rA (rRelA = 1). The radius of the center point of each edge of the center block is specified relative to the radius of the vertices of the center block. The edge between two vertices is thus an arc with a center radius of rRelAc * rRelA * rA. rRelAc should be between 0 and 1, where 1 gives a center block with circular edges. These definitions make it easy to modify the O-grid thickness relative to the outer radius, while keeping a high quality shape of the O-grid.

ERCOFTAC base case o-grid.jpg

Figure Case0.3. O-grid used in the parametrization of the base case.

3.2.2 Case0, how to run the case

Generate the grid by typing:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case0/constant/polyMesh
m4 -P blockMeshDict.m4 > blockMeshDict
blockMesh $FOAM_RUN/ercoftacConicalDiffuser/cases Case0

Make sure that there is a 0 directory. An original 0 directory is named 0_orig, and it is a good idea to keep this untouched. If there is no 0 directory, or if the 0 directory has been modified, type:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case0
rm -r 0
cp -r 0_orig 0

To impose the inlet BC based on the measured profile at z=-25mm, the profile1DfixedValue boundary condition is used. The source of the BC is located at the OpenFOAM-extend project on SourceForge the OpenFOAM-extend project under the TurboWG subversion directory: trunk/Breeder/OSIG/Turbomachinery.

How to get the source, how to compile it and how to generate the library is described in the following section of the Wiki: Library OpenFoamTurbo.

The name of the library is libOpenFoamTurbo.so. In order to use it with OpenFOAM 1.4.1 and 1.4.1-dev, it is important to add this line in the system/controlDict file:

 
libs ("libOpenFoamTurbo.so");

The file OFturboWGcase0.csv (located in the constant directory) contains the inlet values for the reference testcase Case0. The inlet cylindrical radial profile for the velocity components and the turbulent quantities is based directly on the available measurements of Clausen, Koh and Wood (reference 1) at z=-25mm: Velocity Axial, Velocity Circumferential and Turbulent Kinetic Energy. The unmeasured radial component of the velocity is imposed to 0. The turbulent dissipation Epsilon corresponds to turbulent viscosity ratio of \mu_t/\mu=14.5. More info about it can be found in reference 3.

Run the case by typing

 
simpleFoam $FOAM_RUN/ercoftacConicalDiffuser/cases Case0

The basic set-up is made for OpenFOAM 1.4.1 version from OpenCFD. The testcase can also run with OpenFOAM 1.4.1-dev available from OpenFOAM-extend project. It is only necessary to update the file system/fvSolution. The following commands should be done for user using OpenFOAM 1.4.1-dev:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case0/system
cp fvSolution-1.4.1-dev fvSolution
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case0
simpleFoam $FOAM_RUN/ercoftacConicalDiffuser/cases Case0

3.2.3 Case0, how to post-process the case

We have set up an automatic post-processing procedure using the experimental data. Follow these instructions to post-process the results:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case0/postProcessing
sample ../.. Case0 -time 500
gnuplot compareAll.gplt
mozilla file://$PWD/compareAll.html

There is also a README file describing this in the case distribution.

3.3 Case1: Extended base case set-up

This case is similar to Case0, but with extensions before and after the diffuser. The inlet extension is added to generate a plug flow with a solid body rotation swirl (see the addSwirlAndRotation utility). The outlet extension is added to better approximate the outlet of the diffuser into open air.

3.3.1 Case1, mesh parametrization

Figure Case1.1 shows the definitions of the parameters rIn, diffuserLength, extensionLength and openingAngle. It is thus easy to modify the geometry in terms of these parameters.

ERCOFTAC base case 2dView.jpg

Figure Case1.1. 2D view of the ERCOFTAC conical diffuser base case. The radius is here doubled for visualization reasons.

Figure Case1.2 shows cross-sections A-F, that are used when making the mesh for the base case. The cross-sections refer to:

A: The beginning of the honeycomb, and the inlet of the computational domain.

B: The edge of a rotating part of the wall.

C: A measurement plane (the one used as inlet in Case0).

D: The inlet of the expansion.

E: The outlet of the expansion.

F: The outlet of the artificial extension, and the outlet of the computational domain.

ERCOFTACdiffuser planes Case1.jpg

Figure Case1.2. Planes used in the parametrization of the base case. The radius is here according to the ERCOFTAC description.

3.3.2 Case1, how to run the case

Generate the grid by typing:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case1/constant/polyMesh
m4 -P blockMeshDict.m4 > blockMeshDict
blockMesh $FOAM_RUN/ercoftacConicalDiffuser/cases Case1

Make sure that there is a 0 directory. An original 0 directory is named 0_orig, and it is a good idea to keep this untouched. If there is no 0 directory, or if the 0 directory has been modified, type:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case1
rm -r 0
cp -r 0_orig 0

Compile the addSwirlAndRotation utility, which is located in the attached OpenFOAM directory:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/OpenFOAM-1.4.1/applications/utilities/preProcessing/addSwirlAndRotation/
wclean
wmake

See a description of the addSwirlAndRotation utility further down at this page.

Set the swirl and rotation at the inlet and at the rotating walls, and initialize the internal field by typing:

 
addSwirlAndRotation $FOAM_RUN/ercoftacConicalDiffuser/cases Case1

Note that addSwirlAndRotation ADDS the swirls and rotation, so if you run it again on the same time directory you will ADD again!

Run the case by typing

 
simpleFoam $FOAM_RUN/ercoftacConicalDiffuser/cases Case1

3.3.3 Case1, how to post-process the case

We have set up an automatic post-processing procedure using the experimental data. Follow these instructions to post-process the results:

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case1/postProcessing
sample ../.. Case1 -time 1000
gnuplot compareAll.gplt
mozilla file://$PWD/compareAll.html

There is also a README file describing this in the case distribution.

3.3.4 Case1, how to visualize the residuals

Do the following to visualize the residuals: (this requires that you have a 'log' file in the Case1 directory)

 
cd $FOAM_RUN/ercoftacConicalDiffuser/cases/Case1/postProcessing
foamLog ../.. Case1 ../log
gnuplot plotResiduals.gplt
mozilla file://$PWD/residuals.png

There is also a README file describing this in the case distribution.

3.4 Contributed cases

Here you can add sections with case definitions that are of general interest, or that is needed for discussions in the sections below. Keep the Wiki nice and tidy! Co-organize your case definitions with those from other contributors!

Suggestions:

3.4.1 Suggestion: Case1.1: Case1 in a rotating coordinate system

Same settings as Case1, but computed in a rotating coordinate system.

3.4.2 Suggestion: Case1.2: Case1 with sliding grid / GGI

Same as Case1, but with a rotating domain in the region of the swirl generator, and a sliding grid or General Grid Interface (GGI) between that and the rest of the stationary domain.

3.4.3 Suggestion: Case1.3: Case1 with Multiple Frames of Reference

Same as Case1, but with a rotating domain in the region of the swirl generator and a stationary domain in the rest of the geometry.

3.4.4 Suggestion: Case2: Body force honeycomb

Extend the inlet even further and add the honeycomb as a body force.

3.5 References

[1] P.D. Clausen, S.G. Koh and D.H. Wood. Measurements of a swirling turbulent boundary layer developing in a conical diffuser. Experimental Thermal and Fluid Science, 6:39-48, 1993.

[2]: W.Rodi, J.-C. Bonnin and T.Buchal (organizers), ERCOFTAC Workshop on Data Bases and Testing of Calculation Methods for Turbulent Flows. Karlsruhe, Germany, April 3-7, 1995.

[3]: M.Page, A.-M.Giroux and B.Massé. Turbulent swirling flow computation in a conical diffuser with two commercial codes. CFD'96, Fourth Annual Conference of the CFD Society of Canada, Ottawa, Canada, June 2-6, 1996.

[4]: M.Page, B.Massé and A.-M.Giroux. Turbulent swirling flow computations in a conical diffuser. FIDAP User's Meeting, Burlington, USA, June 17-19, 1997.

[5]: M.Page and M.Beaudoin. Adapting OpenFOAM for Turbomachinery Applications. Second OpenFOAM Workshop, Zagreb, Croatia, June 7-9, 2007 (slides).

[6] W. Gyllenram and H. Nilsson. Very Large Eddy Simulation of Draft Tube Flow. In Proceedings of 23rd IAHR Symposium, Yokohama, 2006.

[7] P.D. Clausen and D.H. Wood. Some measurements of swirling flow through an axisymmetric diffuser. Proceedings of Sixth Symposium on Turbulent Shear Flows, Paul Sabatier University, Toulouse, France, Sept 7-9, 1987.

[8] S.W. Armfield, N.-H. Cho and C.A.J. Fletcher. Prediction of Turbulence Quantities for Swirling Flow in Conical Diffusers. AIAA J., Vol.28, No.3, pp..453-460, March 1990.

Please add more relevant references!

4 Specific studies

Some discussions related to the ERCOFTAC conical diffuser test-case can be found on OpenFOAM Message Board in the thread Sig Turbomachinery / Organize the next meeting.

4.1 Case0: Reference case

The parameters that are used to the reference Case0 are described in the following table:

Case Case0
Version 1.4.1

1.4.1-dev

Date March 2008
Inlet profile1DfixedValue, with OFturboWGcase0.csv

 Vaxial = V_{EXP axial} at CS Z=-25mm

 Vcirc = V_{EXP circ} at CS Z=-25mm

 Vradial = 0

 k = k_{EXP} at CS Z=-25mm

 epsilon = c_{\mu} k^2 / \nu (\mu_T/\mu) , with \mu_T/\mu = 14.5,  c_{\mu}=0.09  \nu=1.5e-05

Outlet fixedValue, p = 0
Solver simpleFoam
Discretization div(phi,U) Gauss linearUpwind Gauss;

div(phi,k) Gauss upwind;

div(phi,epsilon) Gauss upwind;

Mesh parameters rNumberOfCells=15

tNumberOfCells=20

zABnumberOfCells=6

zBCnumberOfCells=30

rGrading=5

rRelA=0.7

rRelAc, 0.8

Mesh characteristics  \delta \sim 1.5mm

Output from checkYPlus for 500: Patch 2 named wallDiffuser y+ : min: 19.4774 max: 35.2016 average: 26.6765

Final residuals

7.73074e-07 (Ux)

7.32412e-07 (Uy)

9.43714e-07 (Uz)

1.98768e-06 (p)

5.58873e-07 (k)

5.7994e-07 (epsilon)

--MP 15:00, 19 March 2008 (CET)

4.2 Case1: Reference case

The parameters that are used to the reference Case1 are described in the following table:

Case Case1
Version 1.4.1

1.4.1-dev

Date March 2008
Inlet addSwirlAndRotation, solid body swirl and plug flow (dictionary swirlAndRotationProperties)

 Vaxial = 11.6m/s at CS Z=-0.5m

 Vcirc = \Omega r = 52.646*r m/s at CS Z=-0.5m

 Vradial = 0

 k = 3/2 (Vaxial*I)^2 = 2.0184 m^2/s^2 at CS Z=-0.5m (I=0.1: 10 % turbulence intensity)

 epsilon = k^{1.5}/l_t = 896.10908 m^2/s^3 at CS Z=-0.5m (l_t = 0.0032m turbulence length scale)

Outlet fixedValue, p = 0
Walls Wall functions, solid body rotation at rotSwirlWall (dictionary swirlAndRotationProperties)
Solver simpleFoam
Discretization div(phi,U) Gauss linearUpwind Gauss;

div(phi,k) Gauss upwind;

div(phi,epsilon) Gauss upwind;

Mesh parameters rNumberOfCells=15

tNumberOfCells=20

zABnumberOfCells=10

zBCnumberOfCells=4

zCDnumberOfCells=6

zDEnumberOfCells=30

zEFnumberOfCells=10

rGrading=5

rRelA=0.7

rRelAc, 0.8

Mesh characteristics  \delta \sim 1.5mm

Output from checkYPlus for 1000: Patch 3 named wallDiffuser y+ : min: 19.3279 max: 31.7086 average: 25.7445

Final residuals

1.30233e-06 (Ux)

1.33281e-06 (Uy)

3.11419e-06 (Uz)

4.17731e-05 (p)

1.17483e-05 (k)

9.77574e-07 (epsilon)

4.3 Geometry and grid generation

Recommended settings of the parametrization. Recommended geometry. Discussions about the artificial extension, and how to treat the outlet into open air.

4.4 Validation

Validations against measurements. Development of implementations for automatic extraction and plotting.

4.5 Visualization

Development of implementations for automatic visualization of the results.

4.6 Boundary conditions

Discussions on different boundary conditions and different implementations. Comparisons, verifications, validations.

4.6.1 Inlet

4.6.1.1 Case1

Gyllenram and Nilsson (Yokohama 2006) used the following inlet boundary conditions at the location of the honeycomb. These settings yield quite good velocity and turbulent kinetic energy profiles.

Variable Value Dimension Expression Description
\Omega 52.646 rad/s Honeycomb rotation
 U_z 11.6  m/s Axial velocity
 U_\theta nonuniform  m/s  \Omega * r Tangential velocity
 U_r 0  m/s Radial velocity
 k 13.456  m^2/s^2  0.1 * U_z^2 10 % turbulence intensity
 l_t 0.0032  m Turbulence length scale (honeycomb cell diameter)
 C_\mu 0.09  [-]
 \omega 12736.95169  s^{-1} k^{0.5}/(C_\mu l_t) Specific dissipation
 \varepsilon 15424.95797  m^2/s^3 k^{1.5}/l_t Dissipation
 \frac{\nu_t}{\nu} 70.43  [-] \frac{k}{\omega \nu} = C_\mu \frac{k^2}{\varepsilon \nu}

Usually a different definition of turbulence intensity is used (see cfd-online), which yields the following values differing from the above values. These settings yield basically equivalent results as those using the settings by Gyllenram and Nilsson. Since the turbulence intensity is specified in a more general way, these settings have been chosen for the default settings in Case1.

Variable Value Dimension Expression Description
 k 2.0184  m^2/s^2  \frac{3}{2} (U_z*I)^2 I=0.1: 10 % turbulence intensity
 \omega 4933.0  s^{-1} k^{0.5}/(C_\mu l_t) Specific dissipation
 \varepsilon 896.10908  m^2/s^3 k^{1.5}/l_t Dissipation
 \frac{\nu_t}{\nu} 27.28  [-] \frac{k}{\omega \nu} = C_\mu \frac{k^2}{\varepsilon \nu}

Fluent uses the following definitions. These settings yield basically equivalent results for the velocity profiles as those using the settings by Gyllenram and Nilsson, but the centerline turbulent kinetic energy is too high.

Variable Value Dimension Expression Description
 k 2.0184  m^2/s^2  \frac{3}{2} (U_z*I)^2 I=0.1: 10 % turbulence intensity
 \varepsilon 147.2457  m^2/s^3 C_\mu^{3/4}k^{3/2}/l_t Dissipation
 \frac{\nu_t}{\nu} 166.0  [-] \frac{k}{\omega \nu} = C_\mu \frac{k^2}{\varepsilon \nu}

The settings for Case0 prescribes the ratio between turbulence viscosity to viscosity as 14.5, yielding the following values for Case1. The results using this are quite similar to those by Gyllenram and Nilsson, and the default one for Case1, but the centerline turbulence kinetic energy is lower than the measurements.

Variable Value Dimension Expression Description
 k 2.0184  m^2/s^2  \frac{3}{2} (U_z*I)^2 I=0.1: 10 % turbulence intensity
 \varepsilon 1685.76768  m^2/s^3 C_\mu \frac{k^2}{14.5 \nu} Dissipation

4.6.2 Walls

4.6.2.1 Stationary
4.6.2.2 Rotating

4.6.3 Outlet

4.6.4 Implementations

4.6.4.1 addSwirlAndRotation

Usage: addSwirlAndRotation <root> <case> [-parallel]

This utility adds solid body swirl/rotation at patches listed in the constant/swirlAndRotationProperties dictionary. This means that you first set the non-swirling/rotating component in the time directory U file, and that the tangential component is ADDED. If you run the utility twice the tangential component will be added twice etc. The utility can thus be used both on swirling inlets (only solid body swirl, but any axial component profile) and rotating walls. In the current implementation it is assumed that this solid body swirl should be added at the inlet (the inlet must still be in the list), so the swirl is added also to the internal nodes in order to have a reasonably good initial velocity field. Other variables than the velocity field are unaffected, and those values should be set in the time directory as usual. The utility reads and modifies the U file in the time directory specified by the startFrom/startTime entries in the controlDict.

In the swirlAndRotationProperties dictionary you also specify the swirl/rotation in terms of the omega[radians per second] vector and the center of rotation vector. The switches modifyBoundaries and modifyInterior can be modified to control if both the boundaries and the interior should be modified, or only one of them.

An example of the swirlAndRotationProperties dictionary can be found in Case1.

--Hani 07:00, 30 Jan 2008 (CET)

4.7 Turbulence models

4.8 Solver settings for fast computations

It is always of interest to increase the computational speed, and the stability of the simulations... But it is of also of interest that the different settings give accurate results.

4.9 Parallel efficiency

Comparisons using different hardware configurations.

Scripts for automatic scaling tests.

4.10 Discretization schemes

Studies of the influence of different discretization schemes

  • The first-order upwind scheme does not even preserve the solid body rotation between the honeycomb and the measurement section at -0.025m. --Hani 06:58, 30 Jan 2008 (CET)
  • The GammaV and Gamma schemes with factor 1.0 and 0.2 on U an k/epsilon respectively give good and equivalent results. --Hani 06:58, 30 Jan 2008 (CET)

4.11 Rotating frame of reference

Do you get the same results in a rotating frame of reference?

4.12 Multiple frames of reference

Even if it is not necessary for ths case, it is possible to verify the concept of Multiple Frames of Reference assuming that some parts of the domain is rotating while other aren't.

4.13 Sliding grid

See above

4.14 GGI interface

See above

4.15 Other

Please come with more ideas...

Back to Sig Turbomachinery