CFD Online Discussion Forums

CFD Online Discussion Forums (
-   OpenFOAM Meshing & Mesh Conversion (
-   -   [snappyHexMesh] multiple regions (

Tobi February 15, 2013 09:33


Originally Posted by wyldckat (Post 408006)
Hi Tobi,

My guess is that the base mesh needs a little bump in one of the directions, because an edge might be in the wrong place, leading snappy to have difficulties aligning the final mesh onto the surface of the pipes.

Best regards,

Hi Bruno

thanks for your answer. Can you explain the quoted sentence of you in a other way? What do you mean with "bump" ?


wyldckat February 15, 2013 10:24

Hi Tobi,


Originally Posted by Tobi (Post 408044)
thanks for your answer. Can you explain the quoted sentence of you in a other way? What do you mean with "bump" ?

Sorry, I should have been more clearer. I meant "by bump" that you should try and shift the edges a few millimetres or centimetres.
You can do this, for example:
  • By adding 1 more cell on each direction in blockMesh.
  • And/or extending or reducing the length of the limits of the base mesh.
Best regards,

PS: Moved aerogt3's post to here:

Tobi February 15, 2013 13:50

3 Attachment(s)
Hi Bruno

I played a bit with the whole thing.
Here are three pics of the problem zones (red).

Tomorrow I ll try:

- refine the mesh there more
- refine the STL more
- changing snap controls (but what setting?)
- changing mesh quality parameters (but what parameter?)


Tobi February 17, 2013 06:05

Hi Bruno

I played a bit with the s ettings but the problem still exists.

To refine the STL does not make any difference. Further more using a accurate cell refinement from (3 3) to (4 4) does not make any differences.

I also tried so make the background cell one or a few cells more to change the lines in that section ... welll - that does not work too.

I played a bit with the snapControls but the problem still occures.
Now I am trying to make a new case in which I am trying something.

If its working I ll let you know it.

wyldckat February 17, 2013 06:41

Hi Tobi,

I forgot to mention this here, but have you tried using SwiftBlock and SwiftSnap to help prepare the mesh? And have you check the presentation "A Comprehensive Tour of snappyHexMesh" for more ideas?

Since yesterday I've been playing around with snappyHexMesh and porous zones and I haven't managed to get very far as well. But I did things manually, i.e. without the help of SwiftBlock and SwiftSnap...

Good luck!

Tobi February 17, 2013 07:09


Originally Posted by wyldckat (Post 408276)
Hi Tobi,

I forgot to mention this here, but have you tried using SwiftBlock and SwiftSnap to help prepare the mesh? And have you check the presentation "A Comprehensive Tour of snappyHexMesh" for more ideas?

Since yesterday I've been playing around with snappyHexMesh and porous zones and I haven't managed to get very far as well. But I did things manually, i.e. without the help of SwiftBlock and SwiftSnap...

Good luck!

Hi Bruno,

I ll have a look at switft* and share my results.
The new case and my new idea is not working. But the meshing in my testcase is been very far ... still there is the problem with the single cells and the additional regions I get.

I know the documentation of sHM and the slides are very good.

Tobi February 19, 2013 10:46

Hi Bruno,

1. I make my backgroundmesh with Salome Meco.
2. I tried everything in:
- changing snapping parameters
- changing all quality parameters
- changing backgroundmesh
- changing refinement levels

- - - - - - - - - - - - - - - - - - - - - - - - - - -
Problem still persists.

If I make a finer mesh in the region of the pipes I get more and more "domains*". A coarsar mesh works better (i dont know why).

I have a setting now in which I only get one cell into a other domain. With these setting I played with the snap and quality parameters. The one cell is there all the time.

At the moment I am out of ideas and `ll leave that topic open.
Maybe I find a day when god tells me the solution :D

Thanks for all your help!

Tobi February 19, 2013 12:37

Hi Bruno and all other guys,

I think I have solved the problem.

If you are using a complex geometry like I do you have to declare all walls which belong to a interface with the same refinement level.

So you have to use STL with regions. I ll test it now with a complexer mesh system but I think its working :) ...

Tobi February 19, 2013 14:48



created 'test.OpenFOAM'
created 'test{domain0}.OpenFOAM'
created 'test{kanal1}.OpenFOAM'
created 'test{kanal2}.OpenFOAM'
created 'test{luftkanal}.OpenFOAM'
created 'test{rohr1}.OpenFOAM'
created 'test{rohr2}.OpenFOAM'
created 'test{rohr3}.OpenFOAM'
created 'test{rohr4}.OpenFOAM'
created 'test{rohr5}.OpenFOAM'
created 'test{rohr6}.OpenFOAM'

Tobi February 19, 2013 16:40

1 Attachment(s)
Hi all,

I ll tell you how to mesh a complex geomety with several and seperated regions with snappyHexMesh.

Very important
- - - - - - - - - - - - - - - - - -
like in the snappyMultiRegion tutorial you have to build your STL files with regions. Therefor you should have the interfaces named as a single region in the STL file (e.g. in the attachement).

- The picture I added is important for the "splitMeshRegion -cellZone" command. If you are using one whole STL its possible that you `ll get 10 or more other regions named domain** after splitting.

It doesn't matter to change the snap or quality control settings. To get only the domains you want to have you have to use the STL as region STL.

After that you should set the refinement of the interface to the same levels. With that knowledge you are able to mesh complex gemoetries with snappyHexMesh without creating other domains.

For more information have a look at that complete thread.
My case is avaiable on my homepage soon.

Thanks for all the infos bruno! :)

Tobi February 20, 2013 10:01

1 Attachment(s)
Hi everybody & bruno,

I share my complex geometric meshing case with you. In the case you are meshing:

- a hot air pipe
- two cold water channels
- the connection between air/water with solids (steel) by six pipes

At the end you have nine regions and a case you can solve with chtMultiRegionSimpleFoam. Just execute the file to build everything by the script (Attachement).

Warning | Important
- - - - - - - - - - - - - - - - - -
My maschine works with 20 GB memory space and while meshing that case I get a total load of about 75%. I reduced the cellrefinement just to see how the meshing process is working but the mesh is not very accurate then.

Anyway be sure you have more then 8 GB memory on your computer to be sure that everything is working fine. Otherwise your computer get overloaded by sHM and I think you know what that means :p

Unfortunately the script is written in germany but I think everyone understand the things I have done.

I will add that tutorial into the OpenFOAM-Wiki SnappyHexMesh for downloading :)

Thanks to all. New experiance and good work.

Download [activated]:


Tobi February 20, 2013 12:58

1 Attachment(s)
Hi all,

at least there is one problem left. I realised that the last few minutes.

Have a look at the picture. Can someone imagine why that is happening?


The first pipes above are refined a level more and everything is working.
If I want to refine the pipe with the cutten cells I get problems by splitting the mesh. --> more regions (domain**)...

Hmmmm :confused:

wyldckat February 20, 2013 17:00

Hi Tobi,

Have you tried checking your STL files with OpenFOAM's surfaceCheck? It should give you some diagnostics on the validity of the STL files.

Best regards,

Tobi February 20, 2013 18:38

yes everything is fine!

Tobi February 22, 2013 09:41

Hi Bruno,

just set one more cell into the mesh and everything is working now.

Here my Run script:


echo "Feature Edge erzeugen"
surfaceFeatureExtract -includedAngle 130 constant/triSurface/kanal1.stl kanal1  > log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/kanal2.stl kanal2  >> log.Run
surfaceFeatureExtract -includedAngle 120 constant/triSurface/luftkanal.stl luftkanal  >> log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/rohr1.stl rohr  >> log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/rohr2.stl rohr  >> log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/rohr3.stl rohr  >> log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/rohr4.stl rohr  >> log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/rohr5.stl rohr  >> log.Run
surfaceFeatureExtract -includedAngle 130 constant/triSurface/rohr6.stl rohr  >> log.Run

echo "Feature Edge für Paraview konvertieren"
surfaceFeatureConvert constant/triSurface/kanal1.eMesh constant/triSurface/kanal1FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/kanal2.eMesh constant/triSurface/kanal2FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/luftkanal.eMesh constant/triSurface/luftkanalFeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/rohr1.eMesh constant/triSurface/rohr1FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/rohr2.eMesh constant/triSurface/rohr2FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/rohr3.eMesh constant/triSurface/rohr3FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/rohr4.eMesh constant/triSurface/rohr4FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/rohr5.eMesh constant/triSurface/rohr5FeatureEdge.obj >> log.Run
surfaceFeatureConvert constant/triSurface/rohr6.eMesh constant/triSurface/rohr6FeatureEdge.obj >> log.Run

echo "Hintergrundnetz erstellen"
ideasUnvToFoam files/blockMesh.unv >> log.Run

echo "Skaliere Hintergrundnetz"
transformPoints -scale "(1000 1000 1000)" >> log.Run

echo "Netz zerlegen"
decomposePar >> log.Run

echo "Vernetzen"
mpirun -np 8 snappyHexMesh -parallel >> log.Run

echo "Netz zusammenfügen"
reconstructParMesh -latestTime -mergeTol 1e-6 >> log.Run

echo "Prozessorordner löschen"
rm -rf processor*

echo "Netz in Regionen splitten"
splitMeshRegions -cellZones >> log.Run

echo "Nicht benötigte Zonen löschen"
rm -r 3/domain0

echo "Regionen verschieben"
mv 3/* constant

echo "Patches der Regionen ändern"
cp files/createPatchDict.kanal1 system/kanal1/createPatchDict
cp files/createPatchDict.kanal2 system/kanal2/createPatchDict
cp files/createPatchDict.luftkanal system/luftkanal/createPatchDict
cp files/createPatchDict.rohr1 system/rohr1/createPatchDict
cp files/createPatchDict.rohr2 system/rohr2/createPatchDict
cp files/createPatchDict.rohr3 system/rohr3/createPatchDict
cp files/createPatchDict.rohr4 system/rohr4/createPatchDict
cp files/createPatchDict.rohr5 system/rohr5/createPatchDict
cp files/createPatchDict.rohr6 system/rohr6/createPatchDict

createPatch -region kanal1 -overwrite >> log.Run
createPatch -region kanal2 -overwrite >> log.Run
createPatch -region luftkanal -overwrite >> log.Run
createPatch -region rohr1 -overwrite >> log.Run
createPatch -region rohr2 -overwrite >> log.Run
createPatch -region rohr3 -overwrite >> log.Run
createPatch -region rohr4 -overwrite >> log.Run
createPatch -region rohr5 -overwrite >> log.Run
createPatch -region rohr6 -overwrite >> log.Run

echo "Patchtypen ändern"
cp files/changeDictionaryDict.kanal2 system/kanal2/changeDictionaryDict

changeDictionary -region kanal2 >> log.Run

echo "Numerische Schemen und Verfahren aktualisieren"
cp files/fvSolution.kanal system/kanal1/fvSolution
cp files/fvSolution.kanal system/kanal2/fvSolution
cp files/fvSchemes.kanal system/kanal1/fvSchemes
cp files/fvSchemes.kanal system/kanal2/fvSchemes
cp files/fvSolution.luftkanal system/luftkanal/fvSolution
cp files/fvSchemes.luftkanal system/luftkanal/fvSchemes
cp files/fvSolution.rohr system/rohr1/fvSolution
cp files/fvSolution.rohr system/rohr2/fvSolution
cp files/fvSolution.rohr system/rohr3/fvSolution
cp files/fvSolution.rohr system/rohr4/fvSolution
cp files/fvSolution.rohr system/rohr5/fvSolution
cp files/fvSolution.rohr system/rohr6/fvSolution
cp files/fvSchemes.rohr system/rohr1/fvSchemes
cp files/fvSchemes.rohr system/rohr2/fvSchemes
cp files/fvSchemes.rohr system/rohr3/fvSchemes
cp files/fvSchemes.rohr system/rohr4/fvSchemes
cp files/fvSchemes.rohr system/rohr5/fvSchemes
cp files/fvSchemes.rohr system/rohr6/fvSchemes

echo "Zeitornder vorbereiten"
rm -rf 1 2 3
cp -r 0
cd 0
cp -r rohr rohr1
cp -r rohr rohr2
cp -r rohr rohr3
cp -r rohr rohr4
cp -r rohr rohr5
mv  rohr rohr6
cd ..

echo "Update der Einträge von rohr.*"
sed -i s/rohr_to_kanal/rohr1_to_kanal2/g 0/rohr1/T
sed -i s/rohr_to_kanal/rohr2_to_kanal1/g 0/rohr2/T
sed -i s/rohr_to_kanal/rohr3_to_kanal2/g 0/rohr3/T
sed -i s/rohr_to_kanal/rohr4_to_kanal1/g 0/rohr4/T
sed -i s/rohr_to_kanal/rohr5_to_kanal2/g 0/rohr5/T
sed -i s/rohr_to_kanal/rohr6_to_kanal1/g 0/rohr6/T
sed -i s/rohr_to_l/rohr1_to_l/g 0/rohr1/T
sed -i s/rohr_to_l/rohr2_to_l/g 0/rohr2/T
sed -i s/rohr_to_l/rohr3_to_l/g 0/rohr3/T
sed -i s/rohr_to_l/rohr4_to_l/g 0/rohr4/T
sed -i s/rohr_to_l/rohr5_to_l/g 0/rohr5/T
sed -i s/rohr_to_l/rohr6_to_l/g 0/rohr6/T

echo "Vorbereitung für Paraview"
paraFoam -touchAll

echo "Physikalische Daten vorbereiten"
cp files/g  constant/kanal1
cp files/g  constant/kanal2
cp files/g  constant/luftkanal*
cp files/RASProperties.kanal constant/kanal1/RASProperties
cp files/RASProperties.kanal constant/kanal2/RASProperties
cp files/RASProperties.luftkanal constant/luftkanal/RASProperties
cp files/turbulenc* constant/kanal1
cp files/turbulenc* constant/kanal2
cp files/turbulenc* constant/luftkanal
cp files/radiation* constant/kanal1
cp files/radiation* constant/kanal2
cp files/radiation* constant/luftkanal
cp files/solid* constant/rohr1
cp files/solid* constant/rohr2
cp files/solid* constant/rohr3
cp files/solid* constant/rohr4
cp files/solid* constant/rohr5
cp files/solid* constant/rohr6
cp files/thermophysicalProperties.kanal constant/kanal1/thermophysicalProperties
cp files/thermophysicalProperties.kanal constant/kanal2/thermophysicalProperties
cp files/thermophysicalProperties.luftkanal constant/luftkanal/thermophysicalProperties

echo "PolyMesh Ordner löschen"
rm -r constant/polyMesh

echo "Netz zurückskalieren"
transformPoints -scale "(0.001 0.001 0.001)" -region kanal1 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region kanal2 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region luftkanal >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region rohr1 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region rohr2 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region rohr3 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region rohr4 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region rohr5 >> log.Run
transformPoints -scale "(0.001 0.001 0.001)" -region rohr6 >> log.Run

echo "Simulationsfall zur Simulation bereit
Befehl >> chtMultiRegionSimpleFoam > log &"

Everything is build automatically in that script. I think some commands or the way I do a few things is unconfortable but in a way everyone will understand :)

I upload the file in a few minutes

Tobi February 22, 2013 11:07

Okay now it's gonna be a monolog :)

1. Download Link activated above.

2. Reduce the mesh refinements to reduce the memory load

3. Updated the openfoamwiki with that link


Kind regard

Haces April 4, 2013 06:27

add layers
1 Attachment(s)

I need some help!

I want to add layers to a multi-region case, in the interface between the water and the pipes. You can see the geometry in the attached document. The grey parts are the pipes and the blue part is the water.

I was able to create the castellated mesh and snap it in the multi-region case. I can also add layers if I am working only with the water. The problem is that snappyHexMesh doesn't recognize the boundaries between the surfaces when is working with several STL files.

What I thought to solve this problem is to:

Option 1:
1-Create the mesh without layers using several STL files.
2-Split the mesh with splitMeshRegions.
3-Add layers only to the water.
4-Put everything again together.
5-Eliminate the domains I don't want since the geometry is complex and blockmesh is a prism.

The step number 4 I don't know how to do it. I've thought using stitchMesh or mergeMeshes but i don't know if it will work to create a multi-region mesh.

Option 2:
Adding layers using only one STL file but the result won't be a multi-region case any more. Is possible to generate a multiregion case from only one STL file?

Any suggestions in order to help me with the 2 options? Do you have another idea to add layers?

Thanks for your help!


Tobi April 4, 2013 07:01


why you want to put the mesh together again ?

Haces April 4, 2013 07:13

Hi toby,

The problem is that if I modify the blockmesh of the water the new points are only in this blockmesh and not in the general blockmesh. Later when I run the cht this is not going to work properly, right? It is a little bit difficult to understand how works the cht solver for me...

Tobi April 4, 2013 07:21

No :)

You can have 1000 faces from fluid_to_solid
and 13000 faces to solid_to_fluid

A lot of people do not use snappy for using several domains.
You can mesh every domain itselfs and connecting them later with the patchType mappedWall.

The points dont have to be at the same possition from mesh1 compared to mesh2.

All times are GMT -4. The time now is 22:03.