[Gmsh] gmsh or gmshToFoam problem?

Mattijs Janssens mjanssens at sgi.com
Wed Jun 20 15:23:53 CEST 2012


Hi Madeleine,

not too familiar with gmsh but I just loaded your case in gmsh (2.5.0), press '3D' in the Mesh module and 'Save'. Convert using gmshToFoam (2.1.x), checkMesh is ok:

    ..
    tetrahedra:    91669                                                                                                                                                                                                          
    ..
    Mesh non-orthogonality Max: 77.1369 average: 20.9579                                                                                                                                                                          

From your checkMesh output it looks like you have 3 fully flat cells. You can visualise those in paraFoam (enable 'sets', load highAspectRatioCells).

Kind regards,

Mattijs


> gmsh friends -
> 
> I have a question regarding gmsh and the gmshToFoam utility within
> OpenFOAM, one of which seems to be not acting as I had presumed.
> 
> I have a simple mesh problem which I've distilled down to the it's basic
> form.
> I am running a gmsh script (.geo) to create a 3D rectangular flow field
> with a circular cylinder in the middle.
> When I run gmsh, it meshes succesfully.  However, when I run gmshToFoam
> (conversion to the OpenFOAM polyMesh format), I end up with a mesh that is
> not usable.
> 
> First of all, I get a warning saying:
> 
> 
> [warning]
> --> FOAM Warning :
>     From function polyMesh::polyMesh(... construct from shapes...)
>     in file meshes/polyMesh/polyMeshFromShapeMesh.C at line 619
>     Found 9022 undefined faces in mesh; adding to default patch.
> [/warning]
> 
> 
> 
> Invoking the "checkMesh" utility results in the following errors:
> 
> 
> [error]
> Checking geometry...
>     Overall domain bounding box (0 0 -0.75) (9 6 0.75)
>     Mesh (non-empty, non-wedge) directions (1 1 1)
>     Mesh (non-empty) directions (1 1 1)
>     Boundary openness (1.15651e-17 5.07766e-19 9.032e-18) OK.
>  ***High aspect ratio cells found, Max aspect ratio: 7.58943e+198, number
> of cells 3
>   <<Writing 3 cells with high aspect ratio to set highAspectRatioCells
>     Minumum face area = 6.81219e-06. Maximum face area = 0.177405.  Face
> area magnitudes OK.
>     Min volume = 1.33333e-300. Max volume = 0.0208743.  Total volume =
> 80.8949.  Cell volumes OK.
>     Mesh non-orthogonality Max: 89.2144 average: 30.4407
>    *Number of severely non-orthogonal faces: 1046.
>     Non-orthogonality check OK.
>   <<Writing 1046 non-orthogonal faces to set nonOrthoFaces
>  ***Error in face pyramids: 8 faces are incorrectly oriented.
>   <<Writing 8 faces with incorrect orientation to set wrongOrientedFaces
>     Max skewness = 2.23263 OK.
>     Coupled point location match (average 0) OK.
> 
> Failed 2 mesh checks.
> [/error]
> 
> 
> 
> The gmsh script (.geo file) is as follows:
> 
> 
> [script]
> // Everything is parameterized on the cylinder radius
> rad = 0.15;
> 
> //Characteristic length - used for mesh sizing
> lc = 4*rad;
> 
> //Plane dimesions
> planeLength = 60*rad;
> planeWidth = 40*rad;
> 
> //Cyclinder constants
> cir_x = 15*rad;          //The absolute X distance of the center
> cir_y = planeWidth / 2;  //The absolute Y distance of the center
> 
> //The bottom plane number
> bottomPlaneNum = 16;
> 
> //The extrusion thickness
> extThickness = rad*10;
> zBottom = -(extThickness/2.0);
> zTop    =  (extThickness/2.0);
> z = zBottom;   //The z-height of this plane.
>                // NOTE - For 2D, the plane is centered at 0, so
>                // the z value used will be -(h/2)
> 
> //Rectangular plane (Counter-clockwise, starting in lower left corner)
> Point(1) = {0,           0,          z, lc};
> Point(2) = {planeLength, 0,          z, lc};
> Point(3) = {planeLength, planeWidth, z, lc};
> Point(4) = {0,           planeWidth, z, lc};
> 
> //Circle
> Point(5) = {cir_x,       cir_y,       z, lc};    // Center point
> Point(6) = {cir_x,       cir_y + rad, z, lc};    // 12 o'clock
> Point(7) = {cir_x + rad, cir_y,       z, lc};    // 3
> Point(8) = {cir_x,       cir_y - rad, z, lc};    // 6
> Point(9) = {cir_x - rad, cir_y,       z, lc};    // 9
> 
> //Lines
> Line(1) = {1, 2};
> Line(2) = {2, 3};
> Line(3) = {3, 4};
> Line(4) = {4, 1};
> Circle(5) = {6, 5, 7};
> Circle(6) = {7, 5, 8};
> Circle(7) = {8, 5, 9};
> Circle(8) = {9, 5, 6};
> Line Loop(9) = {1, 2, 3, 4};
> Line Loop(10) = {5, 6, 7, 8};
> 
> //Surface
> // Don't add any line loop(s) specific to meshing
> Plane Surface(bottomPlaneNum) = {9, 10};
> 
> //Extrude the bottom surface in the z direction a total of extThickness
> units.
> // This extrusion is centered on 0 (from -h/2 to +h/2)
> newSurfs[] = Extrude {0,0,extThickness} {
>   Surface{bottomPlaneNum};
> };
> 
> //Name the surfaces
> Physical Surface("topAndBottom") = {bottomPlaneNum, newSurfs[0]};
> Physical Surface("nearAndFar") = {newSurfs[2], newSurfs[4]};
> Physical Surface("outlet") = {newSurfs[3]};
> Physical Surface("inlet") = {newSurfs[5]};
> Physical Surface("cylinder") = {newSurfs[9], newSurfs[8], newSurfs[7],
> newSurfs[6]};
> 
> Physical Volume(1) = {newSurfs[1]};
> 
> //Meshing
> fineness = 15;
> 
> Field[4] = Cylinder;
> Field[4].Radius = 1.5*rad;
> Field[4].VIn = lc / fineness;
> Field[4].VOut = lc / 2;
> Field[4].XAxis = 0.0;
> Field[4].XCenter = cir_x;
> Field[4].YAxis = 0.0;
> Field[4].YCenter = cir_y;
> Field[4].ZAxis = 1.0;
> Field[4].ZCenter = 0.0;
> 
> Field[6] = Box;
> Field[6].VIn = lc / (fineness / 3);
> Field[6].VOut = lc;
> Field[6].XMin = cir_x - 3*rad;
> Field[6].XMax = cir_x + 10*rad;
> Field[6].YMin = cir_y - 3*rad;
> Field[6].YMax = cir_y + 3*rad;
> Field[6].ZMin = zBottom -0.000001;
> Field[6].ZMax = zTop    +0.000001;
> 
> // Use minimum of all the fields as the background field
> Field[100] = Min;
> Field[100].FieldsList = {4, 6};
> Background Field = 100;
> 
> [/script]
> 
> 
> 
> I have no problem with the 2D case -- I use Layers{1} and Recombine within
> the extrusion command. This works well.
> 
> I have also seen that using many layers within the 3D case will also
> produce a mesh that passes the checkMesh utility.  But this doesn't provide
> a good 3D mesh, as the domain is segregated throughout in these distinct
> layers, and it doesn't take into account the finer meshing (in the Z
> direction) around the cylinder.
> 
> So I'm wondering if this is an issue in the meshing of gmsh, or the
> gmshToFoam utility?  And what remedy might be available.
> 
> Thank you very much for any help you are able to provide.
> 
> Madeleine P. Vincent
>