Difference between revisions of "Contrib gmsh2ToFoam"

From OpenFOAMWiki
m
Line 23: Line 23:
 
====Mesh data structure optimizations====
 
====Mesh data structure optimizations====
 
* Removal of the <tt>defaultFaces</tt> patch (if its size is determined to be zero) and faceZones from polyMesh/boundary. You don't have to write dummy <tt>defaultFaces</tt> or faceZone entries in boundary description.
 
* Removal of the <tt>defaultFaces</tt> patch (if its size is determined to be zero) and faceZones from polyMesh/boundary. You don't have to write dummy <tt>defaultFaces</tt> or faceZone entries in boundary description.
* Removal of unreferred points (points which do not belong to any of faces nor cells; e. g. spline control points or the center of a circular arc). <tt>CheckMesh</tt> test of the converted mesh does not fail anymore due to "Unused points." <b>The feature is considered highly experimental thus can be disabled by the <tt>-noUnusedPointRemoval</tt> option.</b>
+
* Removal of unreferred points (points which do not belong to any of faces nor cells; e. g. spline control points or the center of a circular arc). <tt>CheckMesh</tt> test of the converted mesh will no longer fail due to "Unused points" error. <b>The feature is considered highly experimental thus can be disabled by the <tt>-noUnusedPointRemoval</tt> option.</b>
 
* Matrix bandwidth compression. This is basically what the <tt>renumberMesh</tt> utility does, plus cell/face-Zone/Set handling and minus field file renumbering. <b>The feature is considered highly experimental thus can be disabled by the <tt>-noRenumberMesh</tt> option.</b>
 
* Matrix bandwidth compression. This is basically what the <tt>renumberMesh</tt> utility does, plus cell/face-Zone/Set handling and minus field file renumbering. <b>The feature is considered highly experimental thus can be disabled by the <tt>-noRenumberMesh</tt> option.</b>
  
Line 38: Line 38:
  
 
==Example==
 
==Example==
First write a .geo file called <tt>cube.geo</tt> as follows and put it under <tt>cubeTetra/constant</tt> directory. Especially note that at the last part surface patches and a volume are given their names (not numbers) of "inlet," "outlet," "bottomTop" and "internalField" except the two lateral surfaces given a common number of 10. Additionally, the "bottomTop" patch is given a base patch type of "symmetryPlane" by the second word of its string label. Other patches where the second words are omitted default to the "patch" type.
+
First write a .geo file called <tt>cube.geo</tt> as follows and put it under <tt>cubeTetra/constant</tt> directory. Especially note that at the last part surface patches and a volume are given their names (not numbers) of "inlet," "outlet," "bottomTop" and "internalField" except the two lateral surfaces given a common number of 10. In addition, the "bottomTop" patch is given a base patch type of "symmetryPlane" by the second word of its string label. Other patches where the second words are omitted default to the "patch" type.
 
<pre>
 
<pre>
 
// A cube of side lengths 1
 
// A cube of side lengths 1
Line 90: Line 90:
 
> gmsh2ToFoam ../.. cubeTetra cube.msh
 
> gmsh2ToFoam ../.. cubeTetra cube.msh
 
</pre>
 
</pre>
After that you can access the patches named "inlet," "outlet" and "bottomTop" by their names instead of automatically generated "patch0," "patch1," ... names. Besides, the patches labeled by the number of 10 is named "patch10," which means the number is retained in the suffix of automatically generated name. The bottomTop patch must have the symmetryPlane boundary condition because it has been given the base patch type of symmetryPlane. For example you can write the boundaryField of <tt>cubeTetra/0/U</tt> as follows.
+
After that you can access the patches named "inlet," "outlet" and "bottomTop" by their names instead of automatically generated "patch0," "patch1," ... names. The patches labeled by the number of 10 are named "patch10," which means the number is retained in the suffix of automatically generated name. The bottomTop patch must have the symmetryPlane boundary condition because it has been given the base patch type of symmetryPlane. Taking all these into consideration, for example you can write the boundaryField of <tt>cubeTetra/0/U</tt> as follows.
 
<pre>
 
<pre>
 
boundaryField
 
boundaryField
Line 97: Line 97:
 
     {
 
     {
 
         type            fixedValue;
 
         type            fixedValue;
value          uniform 0;
+
value          uniform (1.0 0.0 0.0);
 
     }
 
     }
 
     outlet
 
     outlet
Line 110: Line 110:
 
     patch10
 
     patch10
 
     {
 
     {
         type            zeroGradient;
+
         type            fixedValue;
 +
value          uniform (0.0 0.0 0.0);
 
     }
 
     }
 
}
 
}

Revision as of 09:10, 12 March 2007

Valid versions: OF version 13.png

1 Short Description

A modified gmshToFoam with .msh file format version 2.0 (ASCII type only) support which became the standard in Gmsh 2.0. Gmsh2ToFoam can also handle the conventional version 1.0 format.

2 Usage

Identical to the original gmshToFoam. Gmsh2ToFoam automatically detects and handles the format versions.

In addition to the options which the original gmshToFoam has, gmsh2ToFoam has two options (for details, see the Features section below):

  • -noUnusedPointRemoval: disables removal of unreferred points.
  • -noRenumberMesh: disables renumberMesh matrix bandwidth compression.

3 Features

Other than the .msh version 2.0 format handling, gmsh2ToFoam has several features highly focused on practical usability over the original gmshToFoam that comes with OF 1.3:

3.1 Patch and cell/face-Zone/Set labeling

  • Assignment of physical region names ("inlet," "outlet," ...) defined in a .geo file insted of automatically generated names ("patch0," "patch1," ...) for patches and cell/face-Zones/Sets. Base patch types (patch, wall, symmetryPlane, empty, wedge, cyclic) can also be specified.
  • Assignment of suffix numbers of automatically generated names ("patch1," ...) based on the region numbers defined in a .geo file, instead of the order of their appearance in a .msh file, if the physical regions are labeled by numbers.

The above two should contribute easy correspondence between the .geo file and the final converted mesh. For details see the example below.

3.2 Mesh data structure optimizations

  • Removal of the defaultFaces patch (if its size is determined to be zero) and faceZones from polyMesh/boundary. You don't have to write dummy defaultFaces or faceZone entries in boundary description.
  • Removal of unreferred points (points which do not belong to any of faces nor cells; e. g. spline control points or the center of a circular arc). CheckMesh test of the converted mesh will no longer fail due to "Unused points" error. The feature is considered highly experimental thus can be disabled by the -noUnusedPointRemoval option.
  • Matrix bandwidth compression. This is basically what the renumberMesh utility does, plus cell/face-Zone/Set handling and minus field file renumbering. The feature is considered highly experimental thus can be disabled by the -noRenumberMesh option.

3.3 Others

  • Compatibility with .msh files generated by Windows versions of Gmsh.
  • Producing a fatal error if a mesh contains second-order elements, instead of silently ignoring them.

4 Technical

  • Be sure to label at least one physical region by a number other than 0 (zero) if all the physical regions are to be labeled by numbers. This restriction comes from gmsh2ToFoam following one of the Gmsh authors' suggestion. See Gmsh mailing list archive for details.
  • Beware that if physical regions are defined in a .geo file, Gmsh writes .msh file only with those elements that belong to the physical regions. Read Section 4.1 of Gmsh 2.0 Reference Manual carefully before using the labeling features of gmsh2ToFoam.
  • Gmsh2ToFoam still has not been well tested.

For feedback and discussion go to this thread on the Message Board.

5 Example

First write a .geo file called cube.geo as follows and put it under cubeTetra/constant directory. Especially note that at the last part surface patches and a volume are given their names (not numbers) of "inlet," "outlet," "bottomTop" and "internalField" except the two lateral surfaces given a common number of 10. In addition, the "bottomTop" patch is given a base patch type of "symmetryPlane" by the second word of its string label. Other patches where the second words are omitted default to the "patch" type.

// A cube of side lengths 1

// Create edges
lc = 0.1;
Point(1) = {-0.5, -0.5, -0.5, lc}; Point(2) = { 0.5, -0.5, -0.5, lc};
Point(3) = { 0.5,  0.5, -0.5, lc}; Point(4) = {-0.5,  0.5, -0.5, lc};
Point(5) = {-0.5, -0.5,  0.5, lc}; Point(6) = { 0.5, -0.5,  0.5, lc};
Point(7) = { 0.5,  0.5,  0.5, lc}; Point(8) = {-0.5,  0.5,  0.5, lc};
Line(9) = {1,2}; Line(10) = {2,3}; Line(11) = {3,4}; Line(12) = {4,1};
Line(13) = {5,6}; Line(14) = {6,7}; Line(15) = {7,8}; Line(16) = {8,5};
Line(17) = {1,5}; Line(18) = {2,6}; Line(19) = {3,7}; Line(20) = {4,8};
// Create surface patches
Line Loop(21) = {9,10,11,12}; Line Loop(22) = {17,13,-18,-9};
Line Loop(23) = {18,14,-19,-10}; Line Loop(24) = {19,15,-20,-11};
Line Loop(25) = {20,16,-17,-12}; Line Loop(26) = {-16,-15,-14,-13};
Plane Surface(27)={21}; Plane Surface(28)={22}; Plane Surface(29)={23};
Plane Surface(30)={24}; Plane Surface(31)={25}; Plane Surface(32)={26};
// Create a volume
Surface Loop(33) = {27,28,29,30,31,32}; Volume(34) = {33};

// Naming physical entities is a new key feature in Gmsh 2.0.
// To use the feature you really do need to read the Section 4.1 of Gmsh 2.0
// Reference Manual carefully.

// Generate surface patches with name.
// Base patch types (patch, wall, symmetryPlane, empty, wedge, cyclic) can be
// specified by the second word of the string labels. If omitted the type
// defaults to patch. If a surface is generated inside of the volume it will be
// recognized as a faceZone/faceSet.
Physical Surface("inlet") = {31};
Physical Surface("outlet") = {29};
Physical Surface("bottomTop symmetryPlane") = {27,32};

// You can also use numbers for physical region definition. This patch will be
// named "patch10."
Physical Surface(10) = {28,30}; // lateral patches

// Generate volume with cellZone/cellSet definition.
// Don't forget to make the entire volume defined because Gmsh writes only
// parts of the mesh where physical regions are defined.
Physical Volume("internalField") = {34};

Next generate a 3D mesh with Gmsh >= 2.0 by executing the following command under cubeTetra/constant directory.

> gmsh -3 -optimize cube.geo

And finally convert to OpenFOAM polyMesh by

> gmsh2ToFoam ../.. cubeTetra cube.msh

After that you can access the patches named "inlet," "outlet" and "bottomTop" by their names instead of automatically generated "patch0," "patch1," ... names. The patches labeled by the number of 10 are named "patch10," which means the number is retained in the suffix of automatically generated name. The bottomTop patch must have the symmetryPlane boundary condition because it has been given the base patch type of symmetryPlane. Taking all these into consideration, for example you can write the boundaryField of cubeTetra/0/U as follows.

boundaryField
{
    inlet
    {
        type            fixedValue;
	value           uniform (1.0 0.0 0.0);
    }
    outlet
    {
        type            convectiveOutlet;
	convectiveVelocity uniform 343.704;
    }
    bottomTop
    {
        type            symmetryPlane;
    }
    patch10
    {
        type            fixedValue;
	value           uniform (0.0 0.0 0.0);
    }
}

Similarly the "internalField" is accessible with its name as a cellZone or a cellSet instead of automatically generated name of "cellZone_0."

6 Download

Current version:


Past versions:

7 History

7islands 09:25, 12 Mar 2007 (CET):

  • RenumberMesh matrix bandwidth compression with cell/face-Zone/Set handling.
  • Deletes zero-sized patches (internal faceZones).
  • Base patch types can be defined by the second word of the string labels.

7islands 15:19, 5 Mar 2007 (CET):

  • Following one of the Gmsh authors' suggestion, another modification is made to physical/elementary region (entity) number handling. See Gmsh mailing list archive for details.
  • Automatically generated patche/cellZone/faceZone names ("patch1," ...) are now labeled by numbers based on original region numbers given in a .geo file, instead of the order of their appearence in a .msh file.
  • Deletes the defaultFaces patch if its size is determined to be zero.
  • Removes unreferred points.

7islands 08:10, 19 Feb 2007 (CET):

  • Assign physical entity names instead of automatically generating them (such as "patch0") for patches / cellZones / faceZones if a $PhysicalNames section is present in a version 2.0 .msh file.

7islands 03:32, 18 Feb 2007 (CET):

  • Incorporated primitivePatch::meshPointMap() call optimization from Bernhard's gmshToFoamMod.
  • Fixed correspondence between OpenFOAM cellZone/patch numbering and Gmsh physical/elementary entity tagging. The meaning of physical entity tag seems to be different between .msh file format versions.

7islands 03:30, 17 Feb 2007 (CET): Improved compatibility with .msh files generated by Windows versions of Gmsh.

7islands 13:28, 16 Feb 2007 (CET): First upload.