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

castellatedMesh true;
snap            true;
addLayers       false;

geometry
{

    AMI
    {
        type triSurfaceMesh;
	scale 0.001;
        file "AMI.stl";
    }
    door
    {
        type triSurfaceMesh;
	scale 0.001;
        file "door.stl";
    }
    fan
    {
        type triSurfaceMesh;
	scale 0.001;
        file "fan.stl";
    }
    sofa
    {
        type triSurfaceMesh;
	scale 0.001;
        file "sofa.stl";
    }
    room
    {
        type triSurfaceMesh;
	scale 0.001;
        file "room.stl";
    }
    window_1
    {
        type triSurfaceMesh;
	scale 0.001;
        file "window_1.stl";
    }
    window_2
    {
        type triSurfaceMesh;
	scale 0.001;
        file "window_2.stl";
    }

}

castellatedMeshControls
{
    maxLocalCells 100000;
    maxGlobalCells 8000000;
    minRefinementCells 0;
    nCellsBetweenLevels 2;

    features
    (
        {
		file "AMI.eMesh";
		scale 0.001;
		level 2;
	}
        {
		file "fan.eMesh";
		scale 0.001;
		level 6;
	}
        {
		file "door.eMesh";
		scale 0.001;
		level 0;
	}
        {
		file "sofa.eMesh";
		scale 0.001;
		level 2;
	}
        {
		file "room.eMesh";
		scale 0.001;
		level 0;
	}
        {
		file "window_1.eMesh";
		scale 0.001;
		level 0;
	}
        {
		file "window_2.eMesh";
		scale 0.001;
		level 0;
	}
    );

    refinementSurfaces
    {
        AMI
        {
            level (3 3); 
            faceType boundary;
            cellZone rotatingZone;
            faceZone rotatingZone;
            cellZoneInside inside;
        } 
        fan{ level (6 6);}
        door{ level (0 0);}
        window_1{ level (0 0);}
        window_2{ level (0 0);}
        room{ level (0 0);}
        sofa{ level (2 2);}
    }

    resolveFeatureAngle 30;

    refinementRegions
    {
         AMI{ mode inside; levels ((1E15 3));}
    }

    locationInMesh (0 0 0);
    allowFreeStandingZoneFaces false;
}

snapControls
{
    nSmoothPatch 3;
    tolerance 1.0; 
    nSolveIter 300;
    nRelaxIter 5;
    nFeatureSnapIter 10;
    implicitFeatureSnap true;
    explicitFeatureSnap false;
    multiRegionFeatureSnap true;
}

addLayersControls
{
    relativeSizes true;

    layers
    {
    }

    expansionRatio 1.0;
    finalLayerThickness 0.3;
    minThickness 0.1;
    nGrow 0;
    featureAngle 30;
    nRelaxIter 3;
    nSmoothSurfaceNormals 1;
    nSmoothNormals 3;
    nSmoothThickness 10;
    maxFaceThicknessRatio 0.5;
    maxThicknessToMedialRatio 0.3;
    minMedialAxisAngle 90;
    nBufferCellsNoExtrude 0;
    nLayerIter 50;
}

meshQualityControls
{
    maxNonOrtho 65;
    maxBoundarySkewness 20;
    maxInternalSkewness 4;
    maxConcave 80;
    minVol 1e-13;
    minTetQuality -1;
    minArea -1;
    minTwist 0.01;
    minDeterminant 0.001;
    minFaceWeight 0.05;
    minVolRatio 0.01;
    minTriangleTwist -1;
    nSmoothScale 4;
    errorReduction 0.75;
    relaxed
    {
        maxNonOrtho 75;
    }
}

mergeTolerance 1e-6;

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