# Examples of Cylindrical Flow Around OpenFOAM

Cylindrical flow around a cylinder is one of the most classical examples in fluid mechanics and is favored by many scholars.Beyond cavity and pipe flow, CFD beginners first come into contact with the flow of a cylinder. Cylindrical flow reflects all kinds of conditions when fluid flows through an obstacle: the transition of layer flow to turbulent flow, the shear and separation of fluid, boundary layer, Carmen Vortex Street phenomena, etc. It is an important example to understand the flow mechanism in depth. Because it is often necessary to calculate the flow around a cylinder, make some notes here.Record and record some details in case you forget them later. This time, do Re=200 cylindrical bypass flow example, draw grid using ICEM, CFD using open source software OpenFOAM, and post processing using tecplot. The example file can be set as follows, or you can find the uploaded package on my home page.

# 1.Preprocessing: Draw grid

Draw the grid using ICEM. The cylindrical diameter D=1m, the calculated field is 30D round. Because it is a laminar grid, there is no strict limit on the height of the first layer grid, the number of grids is 160x160. I uploaded it at station b Video process for grid drawing , you can search chansFoam for attention. The process is not detailed here.

# 2.OpenFOAM Computing

Find a template example in OpenFOAM. First copy the just drawn grid msh file into the case folder:

In terminal input:

`fluentMeshToFoam cylinder2d.msh -2D 1`

This allows you to convert fluent's grid format to something that OpenFOAM can use. The latter -2D directive sets the z-direction thickness because it's a two-dimensional grid, but there are only three examples in OpenFOAM, so you get a layer stretched in the z-direction. I set the height of this layer to 1. Next, open constant/polyMesh/boundary, modify the boundary condition type, and:

Change to:

The reason for this is that when you finish drawing the grid in ICEM to set the boundary conditions, it is more convenient to set all the boundaries as wall s first, which only needs to be modified uniformly in OpenFOAM.

### 2.2 Setting initial values and boundary conditions

Open folder 0 and set the U and p files as follows:

U:

```/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
version     2.0;
format      ascii;
class       volVectorField;
object      U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 1 -1 0 0 0 0];

internalField   uniform (17 0 0);

boundaryField
{
IN
{

type            fixedValue;
value           uniform (17 0 0);
}

OUT
{
}

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

frontAndBackPlanes
{
type            empty;
}

}

// ************************************************************************* //```

p:

```/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
version     2.0;
format      ascii;
class       volScalarField;
object      p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

dimensions      [0 2 -2 0 0 0 0];

internalField   uniform 0;

boundaryField
{
IN
{
}

OUT
{
type            fixedValue;
value			uniform 0;
}

CYLINDER
{
}

frontAndBackPlanes
{
type            empty;
}

}

// ************************************************************************* //```

These are very standard boundary conditions. At the initial value, the pressure is set to 0 and the speed is 17m/s (Ma=0.05).

### 2.3 Kinematic Viscosity

Open constant/transportProperties to modify the value of nu. When Re is 200, nu=17*1/200=0.085.

### 2.4 Numeric Format

Open system/fvSchemes and modify as follows:

```/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
version     2.0;
format      ascii;
class       dictionary;
object      fvSchemes;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
ddtSchemes
{
default         backward;
}

{
default 	     Gauss linear;
}

divSchemes
{
default         none;
}

laplacianSchemes
{
default         Gauss linear limited 1;
}

interpolationSchemes
{
default         linear corrected;
}

{
default           corrected;
}

// ************************************************************************* //```

It is worth mentioning that the convection term format. A second-order upwind is used here. If a first-order upwind is used, instead of Karman Vortex Street, it converges to the following situation: the velocity cloud in the x direction on the left and the pressure cloud in the right. The resistance coefficient tends to stabilize, and the lift factor fluctuates above and below 0 (equivalent to constant).

### Setup of 2.5 Solution Equation

stay icoFoam algorithm Within the framework of (SIMPLE), once the numerical format is set, the program constructs a very large sparse matrix. The next step is to unravel this system of linear equations:

OpenFO A M has many b uilt-in tools for solving equations, which are set in system/fvSolution:

```/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
version     2.0;
format      ascii;
class       dictionary;
object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{

p
{
solver          PCG;
preconditioner  DIC;
tolerance       1e-07;
relTol          0;

}

pFinal
{
\$p;
relTol          0;
}

U
{
solver          PBiCG;
preconditioner  DILU;
tolerance       1e-08;
relTol          0;
}

}

PISO
{
nCorrectors     2;
nNonOrthogonalCorrectors 2;
pRefCell        0;
pRefValue       0;
}

// ************************************************************************* //```

Traditionally, I use PCG more for pressure matrices than GAMG. PBiCG is also used for velocity matrices. What are these? There are problems with algorithms, so you can read some books without going into details here. Note that the following nCorrectors and nNonOrthogonal Correctors represent the number of PISO algorithm corrections and the number of non-orthogonal corrections, respectively. The cylindrical flow around the grid just drawn is strictly speakingNot orthogonal, set here twice.

### 2.6 Calculation Settings

Open system/controlDict for some settings on the calculation, including time step, time to start and end, how many steps to output once, and output some information for post-processing.

```/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  4.x                                   |
|   \\  /    A nd           | Web:      www.OpenFOAM.org                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
version     2.0;
format      ascii;
class       dictionary;
object      controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

application     icoFoam;

//startFrom       startTime;
startFrom       latestTime;

startTime       0;

stopAt          endTime;
//stopAt	  writeNow;

endTime         6;
//endTime         500;

//deltaT          0.005;
//deltaT          0.01;
//deltaT          0.02;
deltaT          0.0005;

writeControl    runTime;
/*
clockTime
cpuTime
runTime
timeStep
*/

writeInterval   0.5;

/*
secondaryWriteControl    cpuTime;
secondaryWriteInterval   1000;
secondaryPurgeWrite      1;
*/

purgeWrite      20;

writeFormat     ascii;

writePrecision  8;

writeCompression off;

timeFormat      general;

timePrecision   6;

runTimeModifiable true;

// ************************************************************************* //

functions
{

fieldAverage
{
type            fieldAverage;
functionObjectLibs ("libfieldFunctionObjects.so");
enabled         true;
writeControl   outputTime;

//writeControl   timeStep;
//writeInterval  100;

//cleanRestart true;

//timeStart       20;
//timeEnd         200;

fields
(
p
{
mean        on;
prime2Mean  on;
base        time;
}
U
{
mean        on;
prime2Mean  on;
base        time;
}

);
}
forceCoeffs
{
type forceCoeffs;
functionObjectLibs ("libforces.so");
patches (CYLINDER);
log true;
rho rhoInf;
rhoInf 1;
CofR (0 0 0);
liftDir (0 1 0);
dragDir (1 0 0);
pitchAxis (0 0 1);
magUInf 17;
lRef 1;
Aref 1;
writeControl    timeStep;
writeInterval   1;
}
};```

The calculation step and total time are specified here. Setting the calculation step is best to make the maximum Coulomb number (CFL) available for calculation.Less than 1. Although SIMPLE is a semi-implicit solution and the implicit format is unconditionally stable, we still want the flow field calculations to be more stable. Set deltaT to 0.0005 and max CFL to around 0.5. The total time is 6s, which is about 20 cycles. The calculation process is as follows:

First consider the dimensionless frequency St number of flow around a cylinder:

In general, the St of the flow around a cylinder is about 0.2, f is the frequency of actual eddy shedding, and the time of one eddy shedding cycle is calculated by taking the inverse of F:

For example, the mean field, perturbation field and lift resistance factor are considered in the cylindrical flow around a cylinder, which are set in functions behind the control Dict and are not detailed here.

### 2.7 Beginning of calculation

If you want to be parallel, you need to set decomposeParDict and then compute with mpi instructions. This is done on a single core only, with direct input at the terminal:

`icoFoam`

The calculation starts. The calculation time depends on the performance of the calculation.

# 3.Post-processing to see results

After calculating, open postProcessing/forceCoeffs/0 with tecplot to see the upward resistance coefficient curve:

It can be seen that the latter half of the section is entering a relatively stable stage, with Carmen Vortex Street appearing in the flow field and the lift resistance coefficient changing periodically. From the lift coefficient estimation to St=0.235, the average resistance coefficient is 1.35. Some literatures are compared:

There are still some inconsistencies and differences between them. The specific reasons are grid resolution, numerical format, calculation method and so on. It is a big topic to pick up a single one here and master it slowly. After slowly modifying it yourself, it will not be shown here. After that, some flow field diagrams will be shown:

Flow Average Velocity Cloud:

Mean Pressure Cloud Map:

There are also vorticity graphs, so the calculation of vorticity can see what I've done before video.

Of course, you also need to extract the stream field variables on a line and compare them with the literature. There is too much information in this article now, so I'll put it down later.

# summary

The Reynolds number 200 cylindrical flow around a cylinder is simulated completely on OpenFOAM, including grid drawing, setting up, calculation and post-processing comparison results. CFD computational fluid dynamics is a subject that covers a wide range of subjects and requires you to be proficient in each one, because improper handling of one link can affect the whole simulation result, packageBut not limited to grid resolution, selection of numeric format, selection of calculation method, setup of solution equation, etc. Everything needs to be done carefully. Fortunately, CFD is a tool to use a computer to simulate hydrodynamics in the form of a program, which has the reusability of knowledge, can also be stored in the device, and is also convenient for everyone to exchange and share.

Tags: cfd

Posted on Wed, 08 Sep 2021 15:53:04 -0400 by Dumps