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

geometry
{
    unit_cube.stl
    {
        name cube;
        type triSurfaceMesh;
    }

    refinementBox
    {
        type searchableBox;
        min (0.25 0.25 -1000);
        max (0.75 0.75 1000);
    }
}


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

    pointPairDistanceCoeff          0.005;

    minEdgeLenCoeff                 0.005;

    maxNotchLenCoeff                0.003;

    minNearPointDistCoeff           0.0025;

    maxQuadAngle                    125;

    // 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
    {
        cube
        {
            featureMethod           extendedFeatureEdgeMesh;
            extendedFeatureEdgeMesh "unit_cube.extendedFeatureEdgeMesh";
        }
    }

    additionalFeatures
    {}

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

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


motionControl
{
    minCellSize         0.04;

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

    shapeControlFunctions
    {
        cube
        {
            type                    searchableSurfaceControl;
            priority                1;
            mode                    bothSides;
            cellSizeFunction        linearDistance;
            linearDistanceCoeffs
            {
                distanceCellSizeCoeff    1;
                distanceCoeff            5;
            }
            surfaceCellSizeFunction uniformValue;
            uniformValueCoeffs
            {
                surfaceCellSizeCoeff     0.05;
            }
        }

        refinementBox
        {
            type                    searchableSurfaceControl;
            priority                1;
            mode                    bothSides;
            cellSizeFunction        linearDistance;
            linearDistanceCoeffs
            {
                distanceCellSizeCoeff    1;
                distanceCoeff            5;
            }
            surfaceCellSizeFunction uniformValue;
            uniformValueCoeffs
            {
                surfaceCellSizeCoeff     0.05;
            }
        }
    }

    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.25;

    // 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"
}


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