From OpenFOAMWiki
Revision as of 07:50, 14 October 2013 by Heimkind (Talk | contribs)

1 Introduction

In a nutshell, snappyHexMesh is a mesh generator that takes an already existing mesh (usually created with blockMesh) and chisels it into the mesh you want. But for this, it requires:

  • A very well defined dictionary, namely system/snappyHexMeshDict.
  • Good geometrical definitions, such as:
    • STL/OBJ files with well defined surfaces;
    • eMesh feature edge files, that define feature edges that have describe sharp corners.

Valid versions: OF version 15.png OF version 16.png OF version 17.png OF Version 20.png OF Version 21.png OF Version 22.png OF Version 15dev.png OF Version 16ext.png

Note: feature edges only available in: OF Version 20.png OF Version 21.png OF Version 22.png

Configuring both the dictionary file and providing good geometries can be a very arduous task. Therefore, at the moment of this writing (11:06, 18 August 2012 (CEST)), this wiki page will try to point you in the right direction, without describing each and every detail related to using snappyHexMesh. Feel free to contribute to this page!

1.1 Synopsis

snappyHexMesh [OPTIONS]

1.2 Description

snappyHexMesh is more of a mesh sculptor than a mesh generator, because it requires an already existing base mesh to work with. Depending on the options given through the file "system/snappyHexMeshDict", it can:

  • refine the mesh;
  • adjust the mesh to fit onto provided geometries;
  • and add boundary layers near the requested patches.

The following options can be used with snappyHexMesh:

-case DIR

Execute the command on the case directory DIR. If not provided, use the current directory


OF Version 22.png Check all surface geometry for quality


Skip the execution of the functionObjects


Overwrite existing mesh/results files


Run the utility in parallel

-roots "(DIR1 [...DIRN])"

Directories through which the data are distributed


Display the help and exit

2 Tutorials and Guides

Here are listed links to tutorials and guides on using snappyHexMesh:

  • A Concise Introduction to Pre-Processing, Meshing, and Running OpenFOAM® Cases with HELYX-OS - 8th OpenFOAM Workshop:
    • Original source: [1]
  • Advanced Preprocessing and Meshing with snappyHexMesh
    • Original source: [2]
  • Dedicated wiki to snappyHexMesh by Elia Agnani: snappyWiki

3 Tips

On this chapter are listed links and direct tips on using snappyHexMesh.

3.1 Can't find the resulting mesh

Creating a mesh with snappyHexMesh requires the following crucial steps:

  1. To already have a mesh ready, even if it's a simple brick-like mesh. For example, a simple mesh generated with blockMesh that has the dimensions of 10x4x2 meters and is divided in cells of 1 meter.
  2. The dictionary file snappyHexMeshDict should be properly configured. Look into the examples and tutorials for more information.
  3. snappyHexMesh must be executed with success.

If after these steps you can only find the original base mesh that was generated with blockMesh, then there are a few possibilities:

  • snappyHexMesh might not have ran with success.
  • If the option -overwrite was not used, then the resulting meshes should be in the next time folders, possibly inside the folders "1", "2" and/or "3".
  • If the location in mesh given is on the outside of the geometry, then in ParaView you should either use the filter Clip or Extract Cells by Region, for inspecting how the mesh looks inside.

3.2 Generate 2D meshes

Instructions/examples on how to generate 2D meshes using snappyHexMesh can be found in at least two places:

Other tutorials:

3.3 Multi-region meshes

There are a few instructions/examples on how to generate multi-region meshes with snappyHexMesh:

3.4 Running in parallel

Currently there are several official tutorials on how to use snappyHexMesh in parallel:

  • incompressible/windSimpleFoam/turbineSiting - Valid versions: OF Version 20.png
  • incompressible/simpleFoam/turbineSiting - Valid versions: OF Version 21.png
  • incompressible/pisoFoam/les/motorBike/motorBike - Valid versions: OF Version 21.png

Other tutorials:

3.5 GUI (Graphical User Interfaces)

Currently there are several interactive ways (using GUI) of generating meshes with snappyHexMesh. Here will only be listed the ones that are open-source:

Check the Screencasts page for more information.
A very useful plug-in for Blender for configuring snappyHexMeshDict. There is SwiftBlock for blockMeshDict as well!
A GUI for using OpenFOAM. See the video tutorials:

3.6 Another way of projection of a mesh on an STL surface

Adding boundary layers with snappyHexMesh can sometimes be very stressing, specially when it sometimes stops the layers in the wrong places. Trying to improve this feature was one of several works made in the MSc/PhD course in CFD with OpenSource software, 2011 at Chalmers, namely:

Other important links:

  • Thread dedicated to discussing on this subject: [3]
  • Adjusted code for working with the latest OpenFOAM versions: [4]

3.7 Isolate and Conquer

Since snappyHexMesh has so many mesh quality parameters, these sometimes to get in the way of the meshes you're trying to generate. The solution apparently is simple:

  1. Disable all quality controls.
  2. Diagnose visually the resulting mesh.
  3. Gradually turn back on one quality indicator at a time, while checking the resulting mesh with both checkMesh and ParaView.

For more on this, read the following posts/threads:

3.8 Valid and invalid solid names

There are 2 details to always keep in mind when exporting to STL:

  • Always export to STL in ASCII or "coded" format (this means it'll be plain text).
  • Edit the resulting file with a text editor and look for the lines that start with "solid". Next to the word "solid" is the name of said solid; that name should be a single C/C++ word.

Examples of valid words/names:

  • wall
  • ladder
  • part_001_73_

Invalid names:

  • This was generated by productnamehere
  • part 001-73:
  • 70 inch wall

3.9 Handling inclined surfaces

Q: Do you have a geometry that has an inclined surface and gets a very bad mesh, due to the cells not adjusting properly to the geometry, namely the inclined surfaces?

A: Check the following thread at CFD-Online: How to get a snapped mesh with SnappyHexMesh? post #4 and #5

3.10 Fixing STL files

If you need to fill or fix small gaps, here is a list of possible applications that can help:

Short list of topic related threads at CFD-Online's forums: