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

geometry
{
    jaggedBoundary.stl
    {
        name jaggedBoundary;
        type closedTriSurfaceMesh;
    }
}

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

    pointPairDistanceCoeff          0.001;

    // If area of a dual cell is less than the square of this, do not refine.
    minEdgeLenCoeff                 0.001;

    // How much cells are allowed to stick out of the surfaces before
    // points are inserted onto the boundary
    maxNotchLenCoeff                1;

    minNearPointDistCoeff           0.001;

    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
    {
        jaggedBoundary
        {
            featureMethod           extendedFeatureEdgeMesh;
            extendedFeatureEdgeMesh "jaggedBoundary.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.04;

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

    shapeControlFunctions
    {
        jaggedBoundary
        {
            type                    searchableSurfaceControl;
            priority                1;
            mode                    inside;

            cellSizeFunction        surfaceOffsetLinearDistance;
            surfaceOffsetLinearDistanceCoeffs
            {
                distanceCellSizeCoeff    1;
                totalDistanceCoeff       5;
                surfaceOffsetCoeff       1;
            }

            surfaceCellSizeFunction uniformValue;
            uniformValueCoeffs
            {
                surfaceCellSizeCoeff     0.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";
}


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