Overview of 3D meshing methods using open source tools

Learn how to use Salome and Gmsh to build beautiful 3D mesh.

The Internet is full of beautiful 3D mesh examples, but it is difficult to get clues about how they were constructed. In fact, creating a good 3D mesh can be very painful without the right tools or training. Furthermore, most of commercial pre-processing software have been improving and propose powerful 3D meshing algorithm, capable of building hybrid or full hexahedron mesh. The aim of this article is to give an overview of the constraints involved when building a 3D mesh for structural finite element, as well as exposing various meshing methods relying on free and open source tools.

Introduction

Before we start, let’s give some background information about 3D mesh construction. Usually a 3D mesh can be composed of 4 types of elements:

  • tetrahedron (4 corners),

  • wedge (6 corners),

  • hexahedron (8 corners),

  • and rarely pyramids (5 corners).

3D mesh element types

The goal is to get a mesh with the lowest number of degrees of freedom (“dofs”), while maintaining a good representative capability. We may be tempted to race for tetrahedrons, which have only 4 nodes (for a linear element). But reality is more involved: certain types of elements behave better than others. Without entering to much into the details, we can provide some hints about this:

  • 4-node tetrahedron (linear element) must be avoided as mush as possible. It behaves poorly and a lot of them are needed to get meaningful results. If you have no other choice, try to convert them to 10-node tetrahedron which is much better.

  • if you want to stay with linear elements, you must aim towards hexahedron. Most finite element software (you can guess that SesamX is part of them) propose an improved version of the hexahedron element. That makes it a better choice than the other elements.

  • 6-node wedge (linear element) is better than 4-node tetrahedron but worse than 8-node hexahedron. It is ok to use them, but go for hexahedron wherever possible.

  • I have not tested the pyramid enough to give relevant advice. Nevertheless, from the fact that this element is seldom used in 3D mesh, this article will not shed light on it.

It is easy to build a full tetrahedron mesh using an automatic mesher (and it is widespread among various software). On the contrary, full hexahedron or hybrid automatic meshers are more involved and harder to find (you can find them among commercial solutions but almost not among free ones).

However, using only free and open source tools, we are still able to build quality 3D meshes.

The remaining of this article exhibits 4 methods to build 3D meshes using Salome or Gmsh. The goal is not to enter into every detail about the options used, but to give an overview of how 3D meshes can be built. Whatever the tool we use, changing the element order is usually a trivial task (either linear or quadratic). Therefore I will not detail it here. Instead, I will focus on controlling the element shapes while meshing.

For each method, I provide a step by step guide with illustrative screenshots. And, when appropriate, I also provide the final result file that you can edit and modify on your own.

Geometry used

I will use the following con rod to showcase how to build each mesh.

Con rod geometry

One important feature to mention here, is that this con rod geometry is made of a compound of 3 solids (this reason will make sense when talking about the hybrid mesh generation method) corresponding to each color on the image above.

You can find the corresponding step file here.

Full tetrahedron automatic meshing method

As mentioned before, it is pretty straightforward to get a full tetrahedron
mesh
. To build this mesh, we use Salome.

First, we go to the geometry module and import the step file. The Salome tree should look like this:

Salome import tree

Then we have to explode the compound geometry into its 3 sub-solids and create a partition from these solids. This step is necessary to ensure that Salome will merge coincident nodes from each solid faces. The result tree is then:

Salome partition

Next we go to the mesh module, and create a new mesh on the partition. Under algorithm we can select “NETGEN 1D-2D-3D” and under hypothesis “NETGEN 3D Simple Parameters”. Finally we have to input the edge size that our elements should have.

Salome tetrahedron mesh parameters

Eventually we have to right click on the mesh and hit “Compute”. The mesh should look like this:

Salome tetrahedron mesh

As you can see, the mesh is made of tetrahedron but also triangles and edges elements. To get rid of the 2D and 1D elements, the first step is to click on the mesh and select “Create Group”. A panel appear and we can create one group containing all the 2D elements (as shown on the picture below) and similarly for the 1D elements.

Salome create group

Next to delete these elements, we have to right click on each group and select “Delete Group with Content”. And we get the following full tetrahedron mesh.

Salome final tetrahedron mesh

Finally, to check that the mesh does not contain any duplicated nodes we have to select the mesh and use “Controls / Node Controls / Double Nodes”.

Tetrahedron duplicated nodes check

If you want to manipulate this mesh, you can find the corresponding Salome database here.

Full hexahedron automatic meshing method

Next come the full hexahedron mesh. To build this mesh, we use Gmsh.

First, it is necessary to create a volume physical group containing the 3 solids of the model. It ensure afterwards that the mesh export will, in fact, export only the 3D elements.

Gmsh volume physical group

Next we go to “Tools / Options” then “Mesh / General” to select the meshing parameters. We can choose whatever makes it for the 2D algorithm, 3D algorithm and 2D recombination algorithm. These parameters influence how the mesh is built, feel free to change them to notice the difference in the mesh. As a first guess, we can stay with “Delaunay” and “Blossom”. However, make sure to select “All Hexas” as the “Subdivision algorithm” so that the volumes will be filled with hexahedron only.

Finally under “Min/Max element size” we can fix the element size.

Gmsh meshing parameters

Eventually, we have to go back to the Gmsh tree and click “3D” under “Mesh” to build the mesh.

Gmsh mesh creation

We can check the mesh content under “Tools / Statistics”. As you can see, the mesh is made of 1D, 2D and 3D-hexahedron elements. Because we have created a physical group for the 3 volumes, only the 3D mesh will be exported.

Gmsh mesh creation

If you have troubles visualizing the 3D elements, you can adjust the visibility parameters in the “Mesh” options window under the “Visibility” tab.

Unfortunately, there is a trap here. The mesh obtained has duplicated nodes at the interfaces between the 3 solids. To visualize them, we can export the mesh as a .med file, import it in Salome, and use the “double nodes” tool mentioned previously.

Hexahedron duplicated nodes

Finally, to solve this issue, we have to use the “Merge Nodes” tool under “Modification / Transformation”.

Hexahedron remove duplicated nodes

Hybrid meshing method

Next I am showcasing how to build an efficient hybrid mesh with Salome. This method is my favorite because it leads to a well structured mesh, which can capture more efficiently the details of the geometry (if you have a close look to the automatic tetrahedron and hexadreon meshes, you can see that the fillet is not always “well captured” for instance). The drawback of this method is that it does not lead to a full hexahedron mesh but an hybrid mesh made with a majority of hexahedrons, and a minority of wedges used to fill gaps.

The 3D mesh will be built first by meshing 2D surfaces and then by extruding them. To make this process workable, the geometry has been split into 3 solids beforehand. Each of these solids can then be meshed as an extrusion of the surface meshes.

Solid 1 Solid 2 Solid 3
Solid 1
Solid 2
Solid 3

As explained for the full-tetrahedron mesh, we first need to explode the compound geometry and build a partition.

Then, in order to build the 2D meshes on the surfaces and the 3D extrusion meshes, we need to extract (using explode) the relevant geometries from this partition:

  • the 3 solids geometries,
  • the top face of solid 1 (red face on solid 1 image), that will drive the 3D mesh on solid 1,
  • the “fillet face” of solid 2 and 3 (red face on solid 3 image) that will drive the 3D mesh on solid 2 and solid 3.

The Salome tree should look like this:

Salome tree for hybrid mesh

Next, we go to the mesh module. The meshing process is the following:

  • Create a mesh object and assign default 3D mesh parameters to the whole partition,

  • Create 2 sub-meshes for the 2 surfaces to mesh,

  • Create 3 sub-meshes for the 3 solids to mesh.

The default 3D meshing parameters will not be used while computing the mesh, because the sub-meshes definition will cover the whole partition. Nevertheless, Salome still requires these default parameters.

Salome import tree

To create the faces sub-meshes, we have to right click on the mesh and select “Create Sub-mesh”. We then need to select one of the faces and choose the “NETGEN 1D-2D” algorithm with “NETGEN 2D Simple Parameters”. Then we can input the element size and make sure to check “Quad-dominated” (to avoid at most triangles).

Salome face submesh parameters

To compute the sub-mesh, we have to right click on it and select “Compute Sub-mesh”. And we repeat these operations for the second face.

Creating the 3D sub-meshes is similar. Once we have selected the solid to mesh, we choose “Extrusion 3D” as the meshing algorithm and no hypothesis needs to be associated. However, we have to provide the 1D algorithm and hypothesis to define how the mesh extrusion should behave.

We select “Wire Discretisation” as the 1D algorithm, and the previous local length used for the 2D sub-meshes as the hypothesis.

Hybrid 3D submesh parameters Hybrid 1D submesh parameters
3D submesh parameters
1D submesh parameters

We repeat this for the 2 other solids. The mesh tree should look like this:

Salome hybrid mesh tree

Before computing the mesh, we need to tell Salome in which order the sub-meshes should be computed. To avoid meshing conflict while extruding, it is best in our case, to fully mesh solid 1 before meshing the driving surface of solid 2 and solid 3. We have to right click on the mesh and select “Change sub-mesh Priority”. The meshing order should be the following:

Salome hybrid mesh tree

After computation is complete, we can do the same trick as for the full tetrahedron method to remove useless 1D and 2D elements.

Salome hybrid mesh

As you can see, this mesh is much more regular than the 2 previous automatic meshes, and the fillet details are better captured.

If you want to manipulate this mesh, you can find the corresponding Salome database here.

Hexahedron block mesh

From my point of view, this method is not practical to use on complex shapes. But it is an important one that deserves some explanations. This method allows to build well structured full hexahedron mesh by splitting the volume into blocks.

It is often used for CFD mesh. Applying this method to structural finite element is a bit harder and requires time and efforts to build the blocks from the CAD geometry.

Some tools offered by Salome allow you to build more efficiently a “block-ready” geometry, but I believe that conceptually they break the whole design workflow. Usually, we start building a CAD model and then we start the meshing process. During this process, we may have to simplify the geometry (removing small holes for instance), to finally mesh it with methods like the ones exposed previously.

On the other hand, when using “block-ready” geometry tools during the meshing process, we are constructing geometries from scratch at the meshing level. Which is not among the duties of the meshing process. And the link between the mesh and the CAD is lost.

Nevertheless, it is still interesting to illustrate what a block mesh is, using Salome. Creating blocks for the con rod model is painful, I prefer to use the tools offered to build directly a cylinder block geometry as an example.

First, we go to geometry and under “New Entity / Blocks” select “Divided Cylinder”. Then we input a radius and an height for the cylinder, and check the “Square Division pattern” (this pattern tells Salome how it should divide the cylinder into blocks).

Salome cylinder block creation

As we can see from the subdivision on the previous image, each block is in fact a solid made of 8 corners, 12 edges and 6 faces. I let you check that our solid as a whole is made of valid blocks using the tool “Check Compounds of Blocks” under the “Inspection” menu.

Salome block check

Next we go to the mesh module and add a new mesh. For the 3D algorithm we select “Hexahedron (i,j,k)”. For the 2D algorithm we select “Quadrangle: Mapping” and choose the “Standard meshing pattern” under Hypothesis. For the 1D algorithm we select “Wire Discretisation” and “Number of Segments” as the hypothesis. We have to input the number of segments instead of a length, because each edge of the block must have the same number of nodes (otherwise Salome will not be able to build the mesh).

Block mesh 3D parameters Block mesh 2D parameters Block mesh 1D parameters
3D mesh parameters
2D mesh parameters
1D mesh parameters


Salome block hexahedron mesh

Eventually, we can compute the mesh and check its content. Volumes are made of hexahedron only, and yes, I was lazy and I have not removed the 1D and 2D
elements :).

If you want to manipulate this mesh, you can find the corresponding Salome database here.

Conclusion

I hope you have gained a better insight about how to build 3D meshes from these examples. Of course, when building a complete assembly you can mix these methods depending on the part you are trying to mesh. From my personal experience, I use the following rules:

  • if the part can be described as a compound of extruded solids, I will use the hybrid extrusion method with linear elements.

  • if the part has a complex geometry but is not crucial to the whole model, I will use the automatic tetrahedron method with linear elements (and make sure
    after the computation that in fact, stress gradient are small).

  • if the part has a complex geometry and is crucial to the whole model, I will use the automatic hexahedron method with linear elements. If the mesh computation fails (sometimes it can on complex geometries), then I will fall back to the automatic tetrahedron method using quadratic elements.

And of course, do not forget to perform a convergence analysis to validate your mesh.

I hope you had a pleasant reading. You can contact me if you have any question
or want to share your experience.


Did you like this content?

Register to our newsletter and get notified of new articles