CreatePatch

From OpenFOAMWiki

1 Name

createPatch - Utility to create patches out of selected boundary faces. Faces come either from existing patches or from a faceSet.

Valid versions: OF Version 21.png

2 Synopsis

createPatch [OPTIONS]

3 Description

Create patch from patch or faceSet. The parameters are read from a dictionary system/createPatchDict. The example shipped with the source code (in $FOAM_UTILITIES/mesh/manipulation/createPatch/createPatchDict) is reproduced below.

More specifically it:

  • Creates new patches (from selected boundary faces). Synchronise faces on coupled patches.
  • Synchronises points on coupled boundaries
  • Remove patches with 0 faces in them

-overwrite

Overwrite the existing mesh files

-parallel

Run the utility in parallel

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

Directories through which the data are distributed

-region NAME

Specify a mesh region by its "NAME"

-case DIR

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

-noFunctionObjects

Skip the execution of the functionObjects

-help

Display the help and exit

This utility is used in the following tutorials:

  • combustion/fireFoam/les/oppositeBurningPanels
  • combustion/fireFoam/les/smallPoolFire2D
  • combustion/fireFoam/les/smallPoolFire3D
  • incompressible/pimpleDyMFoam/propeller
  • incompressible/pimpleDyMFoam/wingMotion
  • incompressible/pimpleFoam/elipsekkLOmega
  • lagrangian/reactingParcelFilmFoam/cylinder
  • lagrangian/reactingParcelFilmFoam/rivuletPanel
  • lagrangian/reactingParcelFilmFoam/splashPanel

4 createPatchDict description

FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      createPatchDict;
}

// This application/dictionary controls:
// - optional: create new patches from boundary faces (either given as
//   a set of patches or as a faceSet)
// - always: order faces on coupled patches such that they are opposite. This
//   is done for all coupled faces, not just for any patches created.
// - optional: synchronise points on coupled patches.

// 1. Create cyclic:
// - specify where the faces should come from
// - specify the type of cyclic. If a rotational specify the rotationAxis
//   and centre to make matching easier
// - always create both halves in one invocation with correct 'neighbourPatch'
//   setting.
// - optionally pointSync true to guarantee points to line up. 

// 2. Correct incorrect cyclic:
// This will usually fail upon loading:
//  "face 0 area does not match neighbour 2 by 0.0100005%"
//  " -- possible face ordering problem."
// - in polyMesh/boundary file:
//      - loosen matchTolerance of all cyclics to get case to load
//      - or change patch type from 'cyclic' to 'patch'
//        and regenerate cyclic as above

// Do a synchronisation of coupled points after creation of any patches.
// Note: this does not work with points that are on multiple coupled patches
//       with transformations (i.e. cyclics).
pointSync false;

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

        // Dictionary to construct new patch from
        patchInfo
        {   
            type cyclic;
            neighbourPatch cyc_half1;

            // Optional: explicitly set transformation tensor.
            // Used when matching and synchronising points.
            transform rotational;
            rotationAxis (1 0 0);
            rotationCentre (0 0 0);
            // transform translational;
            // separationVector (1 0 0);

            // Optional non-default tolerance to be able to define cyclics
            // on bad meshes
            //matchTolerance 1E-2;
        }

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

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (periodic1);

        // If constructFrom = set : name of faceSet
        set f0;
    }
    {
        // Name of new patch
        name cyc_half1;

        // Dictionary to construct new patch from
        patchInfo
        {
            type cyclic;
            neighbourPatch cyc_half0;

            // Optional: explicitly set transformation tensor.
            // Used when matching and synchronising points.
            transform rotational;
            rotationAxis    ( 0 0 1 );
            rotationCentre  ( 0.3 0 0 );
        }

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

        // If constructFrom = patches : names of patches. Wildcards allowed.
        patches (periodic2);

        // If constructFrom = set : name of faceSet
        set f0;
    }
);