I created a mesh for a flow around a cylinder, and I want now to refine the mesh near the cylinder wall. I tried to do this by mesh grading, but when I run blockMesh I get this Error:
Create time
Creating block mesh from "system/blockMeshDict"
Using #codeStream at line 43 in file "/home/amarzooq/OpenFOAM/amarzooq-v2106/run/run/twoD_simple_1/system/blockMeshDict"
Using #codeStream with "/home/amarzooq/OpenFOAM/amarzooq-v2106/run/run/twoD_simple_1/dynamicCode/platforms/linux64GccDPInt32Opt/lib/libcodeStream_3e44164af783959a8222fab0498961b521b338db.so"
Creating block edges
No non-planar block faces defined
Creating topology blocks
Creating topology patches
Creating block mesh topology
Check topology
Basic statistics
Number of internal faces : 28
Number of boundary faces : 64
Number of defined boundary faces : 64
Number of undefined boundary faces : 0
Checking patch -> block consistency
Creating block offsets
Creating merge list (topological search)..
--> FOAM FATAL ERROR: (openfoam-2106 patch=211215)
Point merge failure between face 2 of block 10 and face 2 of block 11
Points: (0.69487913 -0.69487913 -0.5) (0.68265147 -0.68265147 -0.5)
This may be due to inconsistent grading.
From void Foam::blockMesh::calcTopologicalMerge()
in file blockMesh/blockMeshMergeTopological.C at line 453.
FOAM exiting
This is my code:
/*--------------------------------*- C++ -*----------------------------------*\
| ========= | |
| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox |
| \\ / O peration | Version: v2006 |
| \\ / A nd | Website: www.openfoam.com |
| \\/ M anipulation | |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
scale 1;
// Geometric parameters
rInner 0.5;
rOuter 1;
//xmax 7.5;
xmax_n 10*$rInner; //left wall location as a function of radius
xmax_p 50*$rInner;//right wall location as a function of radius
ymax 16*$rInner;
zmin -0.5; // Back/front locations
zmax 0.5;
// Divisions: Radial, quarter circumference, outer region and z-directions.
nRadial 20; //cylinder cells
nQuarter 10;//the region above, right and left to the cylinder (wake and drag region)
nxOuter 40;//x direction cells (cylinder not included)
nxOuterRight 200;//x direction cells (cylinder not included) in the right of the cylinder
nyOuter 50;//y direction cells (cylinder not included)
nz 1;
// ----------------
// Derived quantities
rInner45 ${{ $rInner * sqrt(0.5) }};
rOuter45 ${{ $rOuter * sqrt(0.5) }};
vertices #codeStream
{
codeInclude
#{
#include "pointField.H"
#};
code
#{
pointField points
({
/*0*/ { $rInner, 0, $zmin },
/* 1*/ { $rOuter, 0, $zmin },
/* 2*/ { $xmax_p, 0, $zmin },//right wall x positive
/* 3*/ { $xmax_p, $rOuter45, $zmin }, //right wall xpositive
/* 4*/ { $rOuter45, $rOuter45, $zmin },
/* 5*/ { $rInner45, $rInner45, $zmin },
/* 6*/ { $xmax_p, $ymax, $zmin },//right wall x positive
/* 7*/ { $rOuter45, $ymax, $zmin },
/* 8*/ { 0, $ymax, $zmin },
/* 9*/ { 0, $rOuter, $zmin },
/*10*/ { 0, $rInner, $zmin },
/*11*/ { -$rInner, 0, $zmin },
/*12*/ { -$rOuter, 0, $zmin },
/*13*/ { -$xmax_n, 0, $zmin },
/*14*/ { -$xmax_n, $rOuter45, $zmin },
/*15*/ { -$rOuter45, $rOuter45, $zmin },
/*16*/ { -$rInner45, $rInner45, $zmin }, //left wall xnegative
/*17*/ { -$xmax_n, $ymax, $zmin },//left wall xnegative
/*18*/ { -$rOuter45, $ymax, $zmin },//left wall xnegative
//*19*/ {-$rInner, 0, -$zmin }, // 19 will be exactly as point 0 // deleted
// /* 20*/ { -$rOuter, 0, -$zmin },//20 will be exactly as point 1 //deleted
// /* 21*/ { -$xmax_p, 0, -$zmin },//right wall x positive // 21 will be exactly as point 2 /deleted
/*19*/ { $xmax_p, -$rOuter45, $zmin }, //right wall xpositive
/* 20*/ { $rOuter45, -$rOuter45, $zmin },
/* 21*/ { $rInner45, -$rInner45, $zmin },
/* 22*/ { $xmax_p, -$ymax, $zmin },//right wall x positive
/* 23*/ { $rOuter45, -$ymax, $zmin },
/* 24*/ { 0, -$ymax, $zmin },
/* 25*/ { 0, -$rOuter, $zmin },
/*26*/ { 0, -$rInner, $zmin },
// /*30*/ { $rInner, 0, -$zmin },// 30 will be exactly as point 11 // deleted
// /*31*/ { $rOuter, 0, -$zmin },//31 will be exactly as point 12 //deleted
// /*32*/ { $xmax_n, 0, -$zmin },//32 will be exactly as point 13 // deleted
/*27*/ { -$xmax_n, -$rOuter45, $zmin },
/*28*/ { -$rOuter45, -$rOuter45, $zmin },
/*29*/ { -$rInner45, -$rInner45, $zmin }, //left wall xnegative
/*30*/ { -$xmax_n, -$ymax, $zmin },//left wall xnegative
/*31*/ { -$rOuter45, -$ymax, $zmin }//left wall xnegative
});
// Duplicate z points for zmax
const label sz = points.size();
points.resize(2*sz);
for (label i = 0; i < sz; ++i)
{
const point& pt = points[i];
points[i + sz] = point(pt.x(), pt.y(), $zmax);
}
os << points;
#};
};
// Can remove unneeded variables
#remove ( "r(Inner|Outer).*" "[xy](min|max)" )
blocks
(
// +Y blocks
/*0*/ hex (5 4 9 10 37 36 41 42) ($nRadial $nQuarter $nz) grading (2 1 1) //cylinder
/*1*/ hex (0 1 4 5 32 33 36 37) ($nRadial $nQuarter $nz) grading (2 1 1) //cylinder
/*2*/ hex (1 2 3 4 33 34 35 36) ($nxOuterRight $nQuarter $nz) grading (4 1 1) //+ right
/*3*/ hex (4 3 6 7 36 35 38 39) ($nxOuterRight $nyOuter $nz) grading (4 1 1) //corner right
/*4*/ hex (9 4 7 8 41 36 39 40) ($nQuarter $nyOuter $nz) grading (1 1 1) //+ top right
/*5*/ hex (15 16 10 9 47 48 42 41) ($nRadial $nQuarter $nz) grading (.5 1 1) //cylinder
/*6*/ hex (12 11 16 15 44 43 48 47) ($nRadial $nQuarter $nz) grading (.5 1 1) //cylinder
/*7*/ hex (13 12 15 14 45 44 47 46) ($nxOuter $nQuarter $nz) grading (1 1 1) //+ left left
/*8*/ hex (14 15 18 17 46 47 50 49) ($nxOuter $nyOuter $nz) grading (1 1 1) //+corner left
/*9*/ hex (15 9 8 18 47 41 40 50) ($nQuarter $nyOuter $nz) grading (1 1 1) //+ top left
//-Y blocks
/*10*/ hex (20 21 26 25 52 53 58 57) ($nRadial $nQuarter $nz) grading (2 1 1) //cylinder
/*11*/ hex (21 20 1 0 53 52 33 32) ($nRadial $nQuarter $nz) grading (2 1 1) //cylinder
/*12*/ hex (20 19 2 1 52 51 34 33) ($nxOuterRight $nQuarter $nz) grading (4 1 1) //+ right right
/*13*/ hex (23 22 19 20 55 54 51 52) ($nxOuterRight $nyOuter $nz) grading (4 1 1) //corner right
/*14*/ hex (24 23 20 25 56 55 52 57) ($nQuarter $nyOuter $nz) grading (1 1 1) //+ bottom right
/*15*/ hex (25 26 29 28 57 58 61 60) ($nRadial $nQuarter $nz) grading (0.5 1 1) //cylinder
/*16*/ hex (28 29 11 12 60 61 43 44) ($nRadial $nQuarter $nz) grading (0.5 1 1) //cylinder
/*17*/ hex (27 28 12 13 59 60 44 45) ($nxOuter $nQuarter $nz) grading (1 1 1) //+left left
/*18*/ hex (30 31 28 27 62 63 60 59) ($nxOuter $nyOuter $nz) grading (1 1 1) //corner left
/*19*/ hex (31 24 25 28 63 56 57 60) ($nQuarter $nyOuter $nz) grading (1 1 1) //+bottom left
);
edges
(
// Inner cylinder
arc 0 5 origin (0 0 $zmin)
arc 5 10 origin (0 0 $zmin)
arc 1 4 origin (0 0 $zmin)
arc 4 9 origin (0 0 $zmin)
arc 0 21 origin (0 0 $zmin)
arc 21 26 origin (0 0 $zmin)
arc 1 20 origin (0 0 $zmin)
arc 20 25 origin (0 0 $zmin)
arc 32 53 origin (0 0 $zmax)
arc 53 58 origin (0 0 $zmax)
arc 33 52 origin (0 0 $zmax)
arc 52 57 origin (0 0 $zmax)
arc 32 37 origin (0 0 $zmax)
arc 37 42 origin (0 0 $zmax)
arc 33 36 origin (0 0 $zmax)
arc 36 41 origin (0 0 $zmax)
// Intermediate cylinder
arc 11 16 origin (0 0 $zmin)
arc 16 10 origin (0 0 $zmin)
arc 12 15 origin (0 0 $zmin)
arc 15 9 origin (0 0 $zmin)
arc 43 48 origin (0 0 $zmax)
arc 48 42 origin (0 0 $zmax)
arc 44 47 origin (0 0 $zmax)
arc 47 41 origin (0 0 $zmax)
arc 11 29 origin (0 0 $zmin)
arc 29 26 origin (0 0 $zmin)
arc 12 28 origin (0 0 $zmin)
arc 28 25 origin (0 0 $zmin)
arc 43 61 origin (0 0 $zmax)
arc 61 58 origin (0 0 $zmax)
arc 44 60 origin (0 0 $zmax)
arc 60 57 origin (0 0 $zmax)
);
boundary
(
lowerWall
{
type symmetryPlane;
faces
(
(30 31 63 62)
(31 24 56 63)
(24 23 55 56)
(23 22 54 55)
);
}
outlet
{
type patch;
faces
(
(38 6 3 35)
(35 3 2 34)
(51 19 22 54)
(51 34 2 19) //This is the line that is producing the error
);
}
upperWall
{
type symmetryPlane;
faces
(
(17 18 50 49)
(18 8 40 50)
(8 7 39 40)
(7 6 38 39)
);
}
inlet
{
type patch;
faces
(
(17 14 46 49)
(14 13 45 46)
(13 27 59 45)
(27 30 62 59)
);
}
cylinder
{
type wall;
faces
(
(10 5 37 42)
(5 0 32 37)
(16 10 42 48)
(11 16 48 43)
(0 21 53 32)
(21 26 58 53)
(26 29 61 58)
(29 11 43 61)
);
}
front
{type empty;
faces
(
//up
(4 3 6 7)
(4 7 8 9)
(15 18 17 14)
(12 15 14 13)
(1 2 3 4)
(0 1 4 5)
(5 4 9 10)
(10 9 15 16)
(16 15 12 11)
(9 8 18 15)
//down
(19 2 1 20)
(22 19 20 23)
(23 20 25 24)
(24 25 28 31)
(28 12 13 27)
(28 29 11 12)
(28 25 26 29)
(25 20 21 26)
(20 1 0 21)
(30 31 28 27)
);
}
back
{type empty;
faces
(
//up
(33 34 35 36)
(36 35 38 39)
(36 39 40 41)
(41 40 50 47)
(47 50 49 46)
(47 46 45 44)
(44 43 48 47)
(48 42 41 47)
(42 37 36 41)
(37 32 33 36)
//down
(55 54 51 52)
(52 51 34 33)
(56 55 52 57)
(63 56 57 60)
(63 60 59 62)
(44 60 61 43)
(59 60 44 45)
(60 57 58 61)
(58 57 52 53)
(53 52 33 32)
);
}
);
mergePatchPairs
(
);
// ************************************************************************* //
The problem is from these two code lines, I do not get why it is wrong, as block #0 and #1 are exactly the same but symmetrical over the x-axis and they do not show this error.
/*10*/ hex (20 21 26 25 52 53 58 57) ($nRadial $nQuarter $nz) grading (2 1 1) //cylinder
/*11*/ hex (21 20 1 0 53 52 33 32) ($nRadial $nQuarter $nz) grading (2 1 1) //cylinder
I spent a lot of time thinking about it, but I did not get what is wrong. I would be grateful to any help!