openfoam/tutorials/incompressible/pimpleFoam/RAS/oscillatingInletACMI2D
2021-12-20 14:18:01 +00:00
..
0.orig RELEASE: Updated headers for v2112 2021-12-20 14:18:01 +00:00
constant RELEASE: Updated headers for v2112 2021-12-20 14:18:01 +00:00
system RELEASE: Updated headers for v2112 2021-12-20 14:18:01 +00:00
Allclean TUT: incompressible: clean up tutorials 2021-06-08 20:15:47 +00:00
Allrun TUT: incompressible: clean up tutorials 2021-06-08 20:15:47 +00:00
README ENH: blockMesh: generate duplicate boundary faces. Fixes #1516 2020-05-13 11:59:47 +01:00

oscillatingInletACMI2D

This tutorial case gives an example of the Arbitrarily Coupled Mesh Interface
(ACMI) usage.  The mesh is composed of two mesh regions: an inlet channel which
oscillates in the +/- Y-direction, and a fixed mesh region.

Each ACMI patch requires the specification of a 'non-overlapping' patch.  In
this example, the non-overlapping patches are described as walls, e.g. taken
from the constant/polyMesh/boundary file:

    1. First ACMI patch pair applied to the inlet channel outlet

        ACMI1_couple
        {
            type            cyclicACMI;
            nFaces          40;
            startFace       43720;
            matchTolerance  0.0001;
            transform       noOrdering;
            neighbourPatch  ACMI2_couple;
            nonOverlapPatch ACMI1_blockage;
        }
        ACMI1_blockage
        {
            type            wall;
            nFaces          40;
            startFace       43680;
        }


    1. Second ACMI patch pair applied to the fixed mesh region inlet

        ACMI2_couple
        {
            type            cyclicACMI;
            nFaces          96;
            startFace       43856;
            matchTolerance  0.0001;
            transform       noOrdering;
            neighbourPatch  ACMI1_couple;
            nonOverlapPatch ACMI2_blockage;
        }
        ACMI2_blockage
        {
            type            wall;
            nFaces          96;
            startFace       43760;
        }


In the above, the ACMI1_blockage and ACMI1_couple patches occupy the same space,
with duplicate points, edges and faces.  The ACMI2_blockage and ACMI2_couple
patches are created similarly.

The duplicate patches are either created within blockMesh or using the
createBaffles utility. Using the blockMesh path will result in a warning
message of the form

    'Trying to specify a boundary face '
    'already belongs to some other patch'

since there are now in total 7 faces defined for the hex shape and blockMesh
does not yet know whether the definition is incorrect.

Using the createBaffles utility is slightly more work.
Firstly, the original (non-duplicated) patch faces are collected into zones
using the topoSet utility.

Note: when specifying the ACMI patch-pairs, the coupled patch must be specified
before its associated non-overlapping patch.

Each ACMI/non-overlapping patch pair is specified using a master-slave approach.
However, since we are generating boundary patches (which are always master
patches) the slave patches are simply defined using 'dummy' entries, e.g.:

    type        faceZone;
    zoneName    couple1Faces;

    patches
    {
        // create cyclic ACMI patch
        master
        {
            //- Master side patch
            name            ACMI1_couple;
            type            cyclicACMI;
            matchTolerance  0.0001;
            neighbourPatch  ACMI2_couple;
            nonOverlapPatch ACMI1_blockage;
            transform       noOrdering;
        }
        slave // dummy entries only
        {
            //- Slave side patch
            name            ACMI1_couple;
            type            patch;
        }
        // create blockage patch
        master2
        {
            //- Master side patch
            name            ACMI1_blockage;
            type            wall;
        }
        slave12 // dummy entries only
        {
            //- Slave side patch
            name            ACMI1_blockage;
            type            wall;
        }

    }

Boundary conditions must then be applied to all geometric patches in the usual,
manner, and the cases can be executed in parallel (as shown when running the
Allrun-parallel script) without any speacial treatment, i.e. the case set-up is
the same as when operating in serial mode.


checkMesh
---------
Older versions of checkMesh would see the 'duplicate' boundary faces before
the area factors were know so would complain:

     ***Boundary openness (-0.0103092 2.3845e-17 3.80774e-17) possible hole in boundary description.
     ***Open cells found, max cell openness: 0.333333, number of open cells 136
      <<Writing 136 non closed cells to set nonClosedCells

As long as these non-closed cells are on the ACMI they can be ignored.

In current checkMesh the area factors are updated before the check:

    AMI: Creating addressing and weights between 40 source faces and 96 target faces
    AMI: Patch source sum(weights) min:1 max:1 average:1
    AMI: Patch target sum(weights) min:0 max:1 average:0.4
    ACMI: Patch source uncovered/blended/covered = 0, 0, 40
    ACMI: Patch target uncovered/blended/covered = 56, 2, 38


pimpleFoam
----------
In the 'createBaffles' method the ACMI patches would be created after
the 'empty' patch. In the 'blockMesh' method however the 'empty' patch
will be last. This results in a slight difference in face ordering which
is enough to give a slightly different truncation error in the geometry
calculation and hence in the results. For all practical purposes however the
results are the same. For cases which do not have 'empty' patches (i.e. 2D)
this limitation does not apply.


paraFoam
--------
- display: it will not display the outside of the ACMI, there will be a hole.
- cuttingPlanes: they leave out the duplicate faces (i.e. the cells on
  the ACMI patches)
- interpolation: the interpolation does not take into account the
area-weights on the ACMI.


pointFields
-----------
Same as paraFoam: the interpolation does not take into account the
area-weights on the ACMI.