Week 12 - Validation studies of Symmetry BC vs Wedge BC in OpenFOAM vs Analytical H.P equation
Validation Studies Of Symmetry BC vs Wedge BC In OpenFOAM vs Analytical H.P Equation
AIM: to simulate the given angles using both symmetry and wedge boundary conditions and validate them with HP equations like you did in the week 11 challenge.
OBJECTIVE:
- simulation for the below-mentioned angles using both symmetry and wedge boundary conditions and validate them with HP equations like you did in the week 11 challenge.
- Angles to test:
- 10
- 25o">25
- 45o">45
- Validate Hydro-dynamic length with the numerical result
- Validate the fully developed flow velocity profile with its analytical profile
- Validate maximum velocity and pressure drop for fully developed flow
- Post-process Shear stress and validate wall shear stress for fully developed flow
- Highlight the differences in both boundary conditions in terms of their usage and application.
CODE AND EXPLANATION:
In the last project, flow through a pipe was simulated and results were presented for wedge boundary conditions. So in this project, we consider the previous results and work on the symmetry boundary conditions and compare them(this includes the same theory).
- Will start with copying the cavity file from the tutorial to the FOAM_RUN folder.
- In the run folder only we are going to simulate and whatever we want to do the changes in the blockMeshDict file which we supposedly programmed in the Matlab as per different requirements in different angles and pressure and velocity files and controlDict files we will be doing here.
- creating the block in the OpenFoam here we are creating the wedge after making the required changes in the blockMeshDict file to check the geometry run the blockMesh command.
- After creating the wedge assign the boundary conditions, and also sitting the simulation end time and time-step in such a way that the courant number should be less than 0.5 and also in the transportProperties enter the kinematic viscosity as the water at 25-degree celsius the kinematic viscosity of water would be 8.9268e-04/10^3 = 8.9268e-07 m^2/s.
-
Run the simulation using the icoFoam solver after calculating the time needed for the fluid to travel from inlet to outlet
-
After the simulation, use paraFoam to view the flow inside the wedge and use plot over line command to plot the velocity and shear stress changes at a point after the hydrodynamical entry region so that we analyze the fully developed region of the fluid.
clear all
close all
clc
% inputs
Re=2100;
rho=997;
D=0.02;
r=D/2;mu=0.89*10^-3;
% kinematic viscosity of the water at 25 degree celcius
v=0.88927*10^-6;
theta=input('Enter the value of the wedge angle= ');
L_h=0.06*Re*D;
L=L_h+0.5;
% Analytical solutions
V_avg=(Re*mu)/(rho*D);
V_max=2*V_avg;
P_drop=(32*mu*L*V_avg)/D^2;
P_kinematic=(P_drop)/rho;
% vertices
v0=[0 0 0];
v1=[0 r*cosd(theta/2) r*sind(theta/2)];
v2=[0 r*cosd(theta/2) -r*sind(theta/2)];
v3=[L 0 0];
v4=[L r*cosd(theta/2) r*sind(theta/2)];
v5=[L r*cosd(theta/2) -r*sind(theta/2)];
% calculating shear stress
R = linspace(0,(D/2),1000);
for i = 1:length(R)
tau(i) = 2*mu*V_max*(abs(R(i)))/r^2;
end
plot(R,tau)
xlabel('Radius')
ylabel('Shear stress')
grid on
legend ('Shear stress')
% PRINTING THE blockMeshDict FILE
H1='/*--------------------------------*- C++ -*----------------------------------*';
H2=' ========= |';
H3=' \ / F ield | OpenFOAM: The Open Source CFD Toolbox';
H4=' \ / O peration | Website: https://openfoam.org';
H5=' \ / A nd | Version: 8';
H6=' \/ M anipulation |';
H7='*---------------------------------------------------------------------------*/';
H8='FoamFile';
H9='{'
H10=' version 2.0;';
H11=' format ascii;';
H12=' class dictionary;';
H13=' object blockMeshDict;';
H14='}'
H15='// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //';
% opening the file
f1=fopen('blockMeshDict_new.text','wt');
fprintf(f1,'%s \n',H1);
fprintf(f1,'%s \n',H2);
fprintf(f1,'%s \n',H3);
fprintf(f1,'%s \n',H4);
fprintf(f1,'%s \n',H5);
fprintf(f1,'%s \n',H6);
fprintf(f1,'%s \n',H7);
fprintf(f1,'%s \n',H8);
fprintf(f1,'%s \n',H9);
fprintf(f1,'%s \n',H10);
fprintf(f1,'%s \n',H11);
fprintf(f1,'%s \n',H12);
fprintf(f1,'%s \n',H13);
fprintf(f1,'%s \n',H14);
fprintf(f1,'%s \n',H15);
fprintf(f1,'n');
fprintf(f1,'%s \n','convertToMeters 1;');
fprintf(f1,'%s \n','vertices');
fprintf(f1,'%s \n','(');
fprintf(f1,'%s (%f %f %f) \n',blanks(5),v0(1),v0(2),v0(3));
fprintf(f1,'%s (%f %f %f) \n',blanks(5),v1(1),v1(2),v1(3));
fprintf(f1,'%s (%f %f %f) \n',blanks(5),v2(1),v2(2),v2(3));
fprintf(f1,'%s (%f %f %f) \n',blanks(5),v3(1),v3(2),v3(3));
fprintf(f1,'%s (%f %f %f) \n',blanks(5),v4(1),v4(2),v4(3));
fprintf(f1,'%s (%f %f %f) \n',blanks(5),v5(1),v5(2),v5(3));
fprintf(f1,'%s \n',');');
fprintf(f1,'%s \n','blocks');
fprintf(f1,'%s \n','(');
fprintf(f1,'%s %s \n',blanks(5),'hex (0 2 1 0 3 5 4 3) (40 1 500) simpleGrading (1 1 1)');
fprintf(f1,'%s \n',');');
fprintf(f1,'%s \n','edges');
fprintf(f1,'%s \n','(');
fprintf(f1,'arc 1 2 (%f %f %f) \n',0,r,0);
fprintf(f1,'arc 4 5 (%f %f %f)\n',L,r,0);
fprintf(f1,'%s \n',');');
fprintf(f1,'%s \n','boundary');
fprintf(f1,'( \n');
fprintf(f1,'%s %s \n',blanks(5),'inlet');
fprintf(f1,'%s %s',blanks(5),'{');
fprintf(f1,'%s %s\n',blanks(10),'type patch;');
fprintf(f1,' %s\n','faces');
fprintf(f1,' %s\n','(');
fprintf(f1,' (%d %d %d %d)\n',0, 1, 2, 0);
fprintf(f1,' );\n');
fprintf(f1,' }\n');
fprintf(f1,' %s\n','outlet');
fprintf(f1,' {\n');
fprintf(f1,' %s\n','type patch;');
fprintf(f1,' %s\n','faces');
fprintf(f1,' (\n');
fprintf(f1,' (%d %d %d %d)\n',3, 4, 5, 3);
fprintf(f1,' );\n');
fprintf(f1,' }\n');
fprintf(f1,' %s\n','wedge_front');
fprintf(f1,' {\n');
fprintf(f1,' %s\n','type symmetry;');
fprintf(f1,' %s\n','faces');
fprintf(f1,' (\n');
fprintf(f1,' (%d %d %d %d)\n',2, 5, 3, 0);
fprintf(f1,'\n');
fprintf(f1,' );\n');
fprintf(f1,' }\n');
fprintf(f1,' %s\n','wedge_back');
fprintf(f1,' {\n');
fprintf(f1,'%s\n',' type symmetry;');
fprintf(f1,'%s\n',' faces');
fprintf(f1,' (\n');
fprintf(f1,'\n');
fprintf(f1,' (%d %d %d %d)\n',0, 3, 4, 1);
fprintf(f1,' );\n');
fprintf(f1,' }\n');
fprintf(f1,' %s\n','top');
fprintf(f1,' {\n');
fprintf(f1,' %s\n','type wall;');
fprintf(f1,' %s\n','faces');
fprintf(f1,' (\n');
fprintf(f1,' (%d %d %d %d)\n',1, 4, 5, 2);
fprintf(f1,' );\n');
fprintf(f1,' }\n');
fprintf(f1,' %s\n','axis');
fprintf(f1,' {\n');
fprintf(f1,' %s\n','type empty;');
fprintf(f1,' %s\n','faces');
fprintf(f1,' (\n');
fprintf(f1,' (%d %d %d %d)\n',0, 3, 3, 0);
fprintf(f1,' );\n');
fprintf(f1,' }\n');
fprintf(f1,' );\n');
fprintf(f1,'\n');
fprintf(f1,' %s\n','mergePatchPairs');
fprintf(f1,'(\n');
fprintf(f1,' );\n');
fprintf(f1,'\n');
fprintf(f1,' // ************************************************************************* //\n');
fclose(f1);
CONTROLDICT from the OpenFOAM.
/--------------------------------- C++ -----------------------------------\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\---------------------------------------------------------------------------/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "system";
object controlDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
application icoFoam;
startFrom latestTime;
startTime 0;
stopAt endTime;
endTime 10;
deltaT 0.005;
writeControl timeStep;
writeInterval 20;
purgeWrite 0;
writeFormat ascii;
writePrecision 6;
writeCompression off;
timeFormat general;
timePrecision 6;
runTimeModifiable true;
// ************************* //
Pressure parameters from the OpenFOAM.
/--------------------------------- C++ -----------------------------------\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\---------------------------------------------------------------------------/
FoamFile
{
version 2.0;
format ascii;
class volScalarField;
object p;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
inlet
{
type zeroGradient;
}
outlet
{
type fixedValue;
value uniform 0;
}
wedge_front
{
type symmetry;
}
wedge_back
{
type symmetry;
}
top
{
type zeroGradient;
}
axis
{
type empty;
}
}
// ************************* //
Velocity parameters from the OpenFOAM.
/--------------------------------- C++ -----------------------------------\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\---------------------------------------------------------------------------/
FoamFile
{
version 2.0;
format ascii;
class volVectorField;
object U;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
inlet
{
type fixedValue;
value uniform (0.09373 0 0);
}
outlet
{
type zeroGradient;
}
top
{
type noSlip;
}
wedge_front
{
type symmetry;
}
wedge_back
{
type symmetry;
}
axis
{
type empty;
}
}
// ************************* //
Transport properties from the OpenFOAM.
/--------------------------------- C++ -----------------------------------\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\---------------------------------------------------------------------------/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
location "constant";
object transportProperties;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nu [0 2 -1 0 0 0 0] 8.9268e-07;
// ************************* //
1. FOR ANGLE 10 DEGREES.
blockMeshDict from the openFoam
/*--------------------------------*- C++ -*----------------------------------*
========= |
\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\ / O peration | Website: https://openfoam.org
\ / A nd | Version: 8
\/ M anipulation |
*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nconvertToMeters 1;
vertices
(
(0.000000 0.000000 0.000000)
(0.000000 0.009962 0.000872)
(0.000000 0.009962 -0.000872)
(3.020000 0.000000 0.000000)
(3.020000 0.009962 0.000872)
(3.020000 0.009962 -0.000872)
);
blocks
(
hex (0 2 1 0 3 5 4 3) (40 1 500) simpleGrading (1 1 1)
);
edges
(
arc 1 2 (0.000000 0.010000 0.000000)
arc 4 5 (3.020000 0.010000 0.000000)
);
boundary
(
inlet
{ type patch;
faces
(
(0 1 2 0)
);
}
outlet
{
type patch;
faces
(
(3 4 5 3)
);
}
wedge_front
{
type symmetry;
faces
(
(2 5 3 0)
);
}
wedge_back
{
type symmetry;
faces
(
(0 3 4 1)
);
}
top
{
type wall;
faces
(
(1 4 5 2)
);
}
axis
{
type empty;
faces
(
(0 3 3 0)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //
RESULTS OF THE ABOVE ANGLE
GENERAL GEOMETRY

VELOCITY PROFILE

PLOT OF VELOCITY FLOW THROUGH X-AXIS

PLOT OF PRESSURE FLOW THROUGH Y-AXIS

PLOT OF SHEAR STRESS

2. FOR ANGLE 25 DEGREES.
blockMeshDict from the openFoam
/*--------------------------------*- C++ -*----------------------------------*
========= |
\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\ / O peration | Website: https://openfoam.org
\ / A nd | Version: 8
\/ M anipulation |
*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nconvertToMeters 1;
vertices
(
(0.000000 0.000000 0.000000)
(0.000000 0.009763 0.002164)
(0.000000 0.009763 -0.002164)
(3.020000 0.000000 0.000000)
(3.020000 0.009763 0.002164)
(3.020000 0.009763 -0.002164)
);
blocks
(
hex (0 2 1 0 3 5 4 3) (40 1 500) simpleGrading (1 1 1)
);
edges
(
arc 1 2 (0.000000 0.010000 0.000000)
arc 4 5 (3.020000 0.010000 0.000000)
);
boundary
(
inlet
{ type patch;
faces
(
(0 1 2 0)
);
}
outlet
{
type patch;
faces
(
(3 4 5 3)
);
}
wedge_front
{
type symmetry;
faces
(
(2 5 3 0)
);
}
wedge_back
{
type symmetry;
faces
(
(0 3 4 1)
);
}
top
{
type wall;
faces
(
(1 4 5 2)
);
}
axis
{
type empty;
faces
(
(0 3 3 0)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //
RESULTS OF THE ABOVE ANGLE
GENERAL GEOMETRY

VELOCITY PROFILE

PLOT OF VELOCITY FLOW THROUGH X-AXIS

PLOT OF PRESSURE FLOW THROUGH Y-AXIS

PLOT OF SHEAR STRESS

3. FOR ANGLE 45 DEGREES.
blockMeshDict from the openFoam
/*--------------------------------*- C++ -*----------------------------------*
========= |
\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\ / O peration | Website: https://openfoam.org
\ / A nd | Version: 8
\/ M anipulation |
*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
nconvertToMeters 1;
vertices
(
(0.000000 0.000000 0.000000)
(0.000000 0.009239 0.003827)
(0.000000 0.009239 -0.003827)
(3.020000 0.000000 0.000000)
(3.020000 0.009239 0.003827)
(3.020000 0.009239 -0.003827)
);
blocks
(
hex (0 2 1 0 3 5 4 3) (40 1 500) simpleGrading (1 1 1)
);
edges
(
arc 1 2 (0.000000 0.010000 0.000000)
arc 4 5 (3.020000 0.010000 0.000000)
);
boundary
(
inlet
{ type patch;
faces
(
(0 1 2 0)
);
}
outlet
{
type patch;
faces
(
(3 4 5 3)
);
}
wedge_front
{
type symmetry;
faces
(
(2 5 3 0)
);
}
wedge_back
{
type symmetry;
faces
(
(0 3 4 1)
);
}
top
{
type wall;
faces
(
(1 4 5 2)
);
}
axis
{
type empty;
faces
(
(0 3 3 0)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //
RESULTS OF THE ABOVE ANGLE
GENERAL GEOMETRY

VELOCITY PROFILE

PLOT OF VELOCITY FLOW THROUGH X-AXIS

PLOT OF PRESSURE FLOW THROUGH Y-AXIS

PLOT OF SHEAR STRESS

CONCLUSION:
| 10 degree | 25 degree | 45 degree | |
| Velocity | 0.4153 | 0.4158 | 0.4174 |
| Pressure | 0.0722 | 0.075 | 0.0836 |
The values of pressure and velocity calculated using Hagen Poisuelle's equation are given below:
Velocity: 0.4214 m/s
Pressure: 0.07107 (Kinematic Pressure)
It is observed that with an increase in wedge angle, the velocity and pressure near the exact solution.
The computational time for the symmetric BC is more than that of wedge BC
The velocity dipped to 0 at the boundary walls testifies the no-slip BC for all the cases.
We have performed Simulation for two Boundary Conditions; those are Symmetry Boundary Condition and the Wedge Boundary Condition(As performed in the previous challenge). During the Wedge Boundary condition simulation, the simulation across the arc of the wedge is not done, but whereas in the case of Symmetry Boundary Condition, the calculation across the arc of the wedge is done; hence the simulation time is higher in that case. The Courant number is increasing slightly in the case of wedge Boundary Condition and hence the Symmetry Boundary Condition will be slightly more accurate. The Symmetry Boundary condition considers the Mesh as 3D and the calculation is done along all the three global axes.
We understand the results should not change due to the change in the Boundary conditions, and this is because the Physics of the problem does not change and remains the same.