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

geometry
{
    opencfd_text.stl
    {
        name letters;
        type closedTriSurfaceMesh;
    }

    opencfd_box.stl
    {
        name box;
        type closedTriSurfaceMesh;

        regions
        {
            back
            {
                name back;
            }
            front
            {
                name front;
            }
            bottom
            {
                name bottom;
            }
            top
            {
                name top;
            }
            inlet
            {
                name inlet;
            }
            outlet
            {
                name outlet;
            }
        }
    }
}


surfaceConformation
{
    // The z-coordinate of the plane is taken from here.
    locationInMesh                  (0 0 0);

    pointPairDistanceCoeff          0.1;

    minEdgeLenCoeff                 0.1;

    maxNotchLenCoeff                1.0;

    minNearPointDistCoeff           0.1;

    maxQuadAngle                    120;

    // Insert near-boundary point mirror or point-pairs
    insertSurfaceNearestPointPairs  yes;

    // Mirror near-boundary points rather than insert point-pairs
    mirrorPoints                    no;

    // Insert point-pairs vor dual-cell vertices very near the surface
    insertSurfaceNearPointPairs     yes;

    // Maximum number of iterations used in boundaryConform.
    maxBoundaryConformingIter       5;

    geometryToConformTo
    {
        letters
        {
            featureMethod           extendedFeatureEdgeMesh;
            extendedFeatureEdgeMesh "opencfd_text.extendedFeatureEdgeMesh";
        }

        box
        {
            featureMethod           extendedFeatureEdgeMesh;
            extendedFeatureEdgeMesh "opencfd_box.extendedFeatureEdgeMesh";
        }
    }

    additionalFeatures
    {}

    // Choose if to randomise the initial grid created by insertGrid.
    randomiseInitialGrid            yes;

    // Perturbation fraction, 1 = cell-size.
    randomPerturbation              0.1;
}


motionControl
{
    // This is a tolerance for determining whether to deal with surface
    // protrusions or not.
    minCellSize         0.02;

    // Assign a priority to all requests for cell sizes, the highest overrules.
    defaultPriority     0;

    shapeControlFunctions
    {
        letters
        {
            type                  searchableSurfaceControl;
            priority              1;
            mode                  inside;
            cellSizeFunction      uniform;

            linearDistanceCoeffs
            {
                distanceCellSizeCoeff  1;
                distanceCoeff          50;
            }
            uniformCoeffs
            {}

            surfaceCellSizeFunction uniformValue;
            uniformValueCoeffs
            {
                surfaceCellSizeCoeff   1;
            }
        }
    }

    relaxationModel     adaptiveLinear;

    adaptiveLinearCoeffs
    {
        relaxationStart 0.5;
        relaxationEnd   0.0;
    }

    objOutput           no;

    meshedSurfaceOutput yes;

    // Near-wall region where cells are aligned with the wall specified as a
    // number of cell layers
    nearWallAlignedDist 3;
}


shortEdgeFilter
{
    // Factor to multiply the average of a face's edge lengths by.
    // If an edge of that face is smaller than that value then delete it.
    shortEdgeFilterFactor           0.2;

    // Weighting for the lengths of edges that are attached to the boundaries.
    // Used when calculating the length of an edge. Default 2.0.
    edgeAttachedToBoundaryFactor    2.0;
}


extrusion
{
    extrude  off;

    #include "extrude2DMeshDict"
}


// ************************************************************************* //
