CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Mesh Utilities (http://www.cfd-online.com/Forums/openfoam-meshing-utilities/)
-   -   stitchMesh: multiple meshes (http://www.cfd-online.com/Forums/openfoam-meshing-utilities/129202-stitchmesh-multiple-meshes.html)

GerhardHolzinger January 30, 2014 14:07

stitchMesh: multiple meshes
 
1 Attachment(s)
This is more of a how-to than a question but I want to share the thing I learned today.

In the attached image you see a large cylinder which is joined by four smaller cylinders, like four pipes joining a large tank.

I created the mesh with blockMesh and after the blockMesh run I have 5 unconnected mesh regions. Thus I have to use stitchMesh to join these five meshes.

I do not want to let blockMesh join the pipes with the tank (mergePatchPairs) because I want to apply some mesh modification on the mesh of the large cylinder only.

The small elliptical surfaces at the near end of the pipes are named intersectSlaveN (N is the running index. In this case 0, 1, 2 or 3). The patches on the large cylinder (two of them are not shown and two of them are displayed as wire frame) are named intersectMasterN.

When I use
Code:

stitchMesh intersectMaster0 intersectSlave0
to merge the first pair, everthing works as expected.

When I call
Code:

stitchMesh intersectMaster1 intersectSlave1
to merge the second pair, stitchMesh aborts the operation with this error message

Code:

--> FOAM FATAL ERROR:
Master or slave face zone contain no faces.  Please check your mesh definition.

    From function void slidingInterface::checkDefinition()
    in file slidingInterface/slidingInterface.C at line 97.

FOAM aborting

An old post [http://www.cfd-online.com/Forums/ope...tml#post183551] in this forum brought me to the solution of my problem.

After the operation on the large cylinder's mesh, the mesh was written to the 0.001 directory. stitchMesh, however, read the mesh at time 0. In fact, stitchMesh reads the mesh from the time that is stated in controlDict at startTime.

So, I had to change the entry at startTime in controlDict. This made stitchMesh read the mesh from the 0.001 folder. However, the second call of stitchMesh again resulted in the above-posted error message.

The solution to this problem was to delete the file meshModifiers in the 0.001/polyMesh directory. Then it worked.

So, my workflow for stitching my mesh was as follows
  1. Set startTime to the latest time step
  2. call stitchMesh
  3. delete meshModifiers from the polyMesh folder in the latest time step
  4. Repeat 1-3 until finshed

GerhardHolzinger January 30, 2014 14:43

Addendum: createPatch
 
As nobody wants to specify boundary conditions for several wall-patches (in my case the intersectMaster patches and the walls patch that contains all wall patches not involved in any stitching) createPatch can be used to join all wall patches to a single wall patch.

With createPatch I join all intersectMasterN and walls to a new patch named WALL. So I only need one entry in the files of the 0 directory for the boundary condition on the wall.

In my case this createPatchDict does the trick. Again, the parameter startTime in controlDict has to be set to the latest time step.

Code:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                |                                                |
| \\      /  F ield        | OpenFOAM: The Open Source CFD Toolbox          |
|  \\    /  O peration    | Version:  2.2.2                                |
|  \\  /    A nd          | Web:      www.OpenFOAM.org                      |
|    \\/    M anipulation  |                                                |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version    2.0;
    format      ascii;
    class      dictionary;
    object      createPatchDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

pointSync false;

// Patches to create.
patches
(
    {
        // Name of new patch
        name WALL;

        // Dictionary to construct new patch from
        patchInfo
        {
            type wall;
        }

        // How to construct: either from 'patches' or 'set'
        constructFrom patches;

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (walls intersectMaster0 intersectMaster1 intersectMaster2 intersectMaster3);
    }
);



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