0

I am trying to generate a mesh for a flow around a cylinder to model turbulence. Basically, a cylinder inside a rectangle. The problem is, with the right wall boundary (line number 215) in blockMeshDict. I cannot understand why it doesnt work because it is very logical to me.

the missing face which is causing the problem The code is:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v2212                                 |
|   \\  /    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 (1 1 1)       //cylinder
 /*1*/ hex (0 1 4 5 32 33 36 37)     ($nRadial  $nQuarter $nz) grading (1 1 1)       //cylinder
 /*2*/ hex (1 2 3 4 33 34 35 36)     ($nxOuterRight  $nQuarter $nz) grading (2 1 1)  //+ right
 /*3*/ hex (4 3 6 7 36 35 38 39)     ($nxOuterRight  $nyOuter  $nz) grading (2 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 (1 1 1)       //cylinder
 /*6*/ hex (12 11 16 15 44 43 48 47) ($nRadial  $nQuarter $nz) grading (1 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 (1 1 1)      //cylinder
 /*11*/ hex (21 20 1 0 53 52 33 32)   ($nRadial  $nQuarter $nz) grading (1 1 1)      //cylinder 
 /*12*/ hex (20 19 2 1 51 34 33 52)   ($nQuarter $nxOuterRight $nz) grading (2 1 1)   //+ right right
 /*13*/ hex (23 22 19 20 55 54 51 52) ($nxOuterRight  $nyOuter  $nz) grading (2 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 (1 1 1)      //cylinder 
 /*16*/ hex (28 29 11 12 60 61 43 44) ($nRadial  $nQuarter $nz) grading (1 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
(
    down
    {
        type symmetryPlane;
        faces
        (
            (30 31 63 62) 
            (31 24 56 63) 
            (24 23 55 56) 
            (23 22 54 55) 
        );
    }
    right
    {
        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
        );
    }
    up
    {
        type symmetryPlane;
        faces
        (
     (17 18 50 49)
     (18 8 40 50)
     (8 7 39 40)
     (7 6 38 39)
        );
    }
    
    Left
    {
        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)
        

     );
    }
);

mergePatchPairs
(
);


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


I appreciate any help or ideas to solve this problem.

Many thanks,

I tried running checkMesh, as I suspected that there might be a problem because of the mesh quality. I get the following:

Create time

Create mesh for time = 0

Time = 0

Mesh stats
    points:           66462
    internal points:  0
    faces:            130430
    internal faces:   63970
    cells:            32400
    faces per cell:   6
    boundary patches: 6
    point zones:      0
    face zones:       0
    cell zones:       0

Overall number of cells of each type:
    hexahedra:     32400
    prisms:        0
    wedges:        0
    pyramids:      0
    tet wedges:    0
    tetrahedra:    0
    polyhedra:     0

Checking topology...
    Boundary definition OK.
 ***Total number of faces on empty patches is not divisible by the number of cells in the mesh. Hence this mesh is not 1D or 2D.
    Cell to face addressing OK.
    Point usage OK.
    Upper triangular ordering OK.
    Face vertices OK.
   *Number of regions: 2
    The mesh has multiple regions which are not connected by any face.
  <<Writing region information to "0/cellToRegion"
  <<Writing region 0 with 30400 cells to cellSet region0
  <<Writing region 1 with 2000 cells to cellSet region1

Checking patch topology for multiply connected surfaces...
    Patch               Faces    Points   Surface topology
    down                260      522      ok (non-closed singly connected)
    right               110      224      ok (non-closed singly connected)
    up                  260      522      ok (non-closed singly connected)
    Left                120      242      ok (non-closed singly connected)
    cylinder            80       160      ok (non-closed singly connected)
    defaultFaces        65630    66462    ok (non-closed singly connected)

Checking faceZone topology for multiply connected surfaces...
    No faceZones found.

Checking basic cellZone addressing...
    No cellZones found.

Checking basic pointZone addressing...
    No pointZones found.

Checking geometry...
    Overall domain bounding box (-5 -8 -0.5) (25 8 0.5)
    Mesh has 0 geometric (non-empty/wedge) directions (0 0 0)
    Mesh has 0 solution (non-empty) directions (0 0 0)
 ***Number of edges not aligned with or perpendicular to non-empty directions: 34501
  <<Writing 18040 points on non-aligned edges to set nonAlignedEdges
    Boundary openness (-4.81024e-19 -2.92463e-17 9.85443e-15) OK.
    Max cell openness = 2.16877e-15 OK.
    Max aspect ratio = -1 OK.
    Minimum face area = 0.00100526. Maximum face area = 2.00203.  Face area magnitudes OK.
    Min volume = 0.00100526. Max volume = 0.0245554.  Total volume = 473.538.  Cell volumes OK.
    Mesh non-orthogonality Max: 87.9602 average: 20.2095
   *Number of severely non-orthogonal (> 70 degrees) faces: 3790.
    Non-orthogonality check OK.
  <<Writing 3790 non-orthogonal faces to set nonOrthoFaces
    Face pyramids OK.
 ***Max skewness = 58.4839, 2486 highly skew faces detected which may impair the quality of the results
  <<Writing 2486 skew faces to set skewFaces
    Coupled point location match (average 0) OK.

Failed 2 mesh checks.

End

But Honestly, I dont think that this is the case because the line that interrupts the code is not checked with checkMesh, as checkMesh will check the "blockMeshed" code , and I cannot "blockMesh" it unless I get rid of this annoying error.

  • I suspect there is something wrong with hex block number 12. You can comment it and comment the faces or "right" patch and run blockMesh. You will get a correct mesh for other blocks. – s.ouchene Mar 16 '23 at 19:16
  • thank you so much, indeed, this was the problem and i changed it to: /*12*/ hex (20 19 2 1 52 51 34 33) ($nxOuterRight $nQuarter $nz) grading (2 1 1) and it worked – Ali Marzooq Mar 19 '23 at 08:23

0 Answers0