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

// If on, after collapsing check the quality of the mesh. If bad faces are
// generated then redo the collapsing with stricter filtering.
controlMeshQuality      on;

collapseEdgesCoeffs
{
    // Edges shorter than this absolute value will be merged
    minimumEdgeLength   1e-6;

    // The maximum angle between two edges that share a point attached to
    // no other edges
    maximumMergeAngle   180;
}


collapseFacesCoeffs
{
    // The initial face length factor
    initialFaceLengthFactor                 1;

    // If the face can't be collapsed to an edge, and it has a span less than
    // the target face length multiplied by this coefficient, collapse it
    // to a point.
    maxCollapseFaceToPointSideLengthCoeff   0.3;

    // Allow early collapse of edges to a point
    allowEarlyCollapseToPoint               on;

    // Fraction to premultiply maxCollapseFaceToPointSideLengthCoeff by if
    // allowEarlyCollapseToPoint is enabled
    allowEarlyCollapseCoeff                 0.2;

    // Defining how close to the midpoint (M) of the projected
    // vertices line a projected vertex (X) can be before making this
    // an invalid edge collapse
    //
    // X---X-g----------------M----X-----------g----X--X
    //
    // Only allow a collapse if all projected vertices are outwith
    // guardFraction (g) of the distance form the face centre to the
    // furthest vertex in the considered direction
    guardFraction                           0.1;
}


controlMeshQualityCoeffs
{
    // Name of the dictionary that has the mesh quality coefficients used
    // by motionSmoother::checkMesh
    #include                    "meshQualityDict"

    // The amount that minimumEdgeLength will be reduced by for each
    // edge if that edge's collapse generates a poor quality face
    edgeReductionFactor         0.5;

    // The amount that initialFaceLengthFactor will be reduced by for each
    // face if its collapse generates a poor quality face
    faceReductionFactor         0.5;

    // Maximum number of outer iterations is mesh quality checking is enabled
    maximumIterations           10;

    maximumSmoothingIterations  1;

    maxPointErrorCount          3;
}


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