/*--------------------------------*- C++ -*----------------------------------*\
| =========                 |                                                 |
| \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
|  \\    /   O peration     | Version:  v1812                                 |
|   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
|    \\/     M anipulation  |                                                 |
\*---------------------------------------------------------------------------*/
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// Example configuration:
// - Cylindrical mesh along z-axis (0 < z < 10)
// - External boundary (fixed.obj) radius = 3
// - Rotating zone (rotatingZone.obj) radius = 1

backgroundMesh
{
    radOut     3.06; // larger than fixed.obj by ~ 1/cos(45/boxCells)
    radOutN   -3.06;
    radIn      1.02; // larger than rotatingZone.obj (see above)
    radInN    -1.02;
    radBox     0.30; // ~30% of rotatingZone.obj
    radBoxN   -0.30;

    zMin       0;
    zMax       10;   // External boundary axial length

    boxCells   5;    // Cells across inner box-shaped block
    inCells    5;    // Cells in radial direction, inner cylinder
    outCells   8;    // Cells in radial direction, outer cylinder
    zCells     50;   // Cells in axial direction

    outGrading 2.0;  // Expansion ratio in outer region, radial direction
}

geometry
{
    rotatingZone
    {
        type   searchableCylinder;
        point1 (0 0 -100);
        point2 (0 0  100);
        radius $:backgroundMesh.radIn;
    }

    fixed
    {
        type   searchableCylinder;
        point1 (0 0 -100);
        point2 (0 0  100);
        radius $:backgroundMesh.radOut;
    }
}

scale   1;

vertices
(
    ($:backgroundMesh.radBoxN $:backgroundMesh.radBoxN $:backgroundMesh.zMin)
    ($:backgroundMesh.radBox  $:backgroundMesh.radBoxN $:backgroundMesh.zMin)
    ($:backgroundMesh.radBox  $:backgroundMesh.radBox  $:backgroundMesh.zMin)
    ($:backgroundMesh.radBoxN $:backgroundMesh.radBox  $:backgroundMesh.zMin)

    project
    ($:backgroundMesh.radInN $:backgroundMesh.radInN $:backgroundMesh.zMin)
    (rotatingZone)

    project
    ($:backgroundMesh.radIn $:backgroundMesh.radInN $:backgroundMesh.zMin)
    (rotatingZone)

    project
    ($:backgroundMesh.radIn $:backgroundMesh.radIn $:backgroundMesh.zMin)
    (rotatingZone)

    project
    ($:backgroundMesh.radInN $:backgroundMesh.radIn $:backgroundMesh.zMin)
    (rotatingZone)

    project
    ($:backgroundMesh.radOutN $:backgroundMesh.radOutN $:backgroundMesh.zMin)
    (fixed)

    project
    ($:backgroundMesh.radOut  $:backgroundMesh.radOutN $:backgroundMesh.zMin)
    (fixed)

    project
    ($:backgroundMesh.radOut  $:backgroundMesh.radOut  $:backgroundMesh.zMin)
    (fixed)

    project
    ($:backgroundMesh.radOutN $:backgroundMesh.radOut  $:backgroundMesh.zMin)
    (fixed)

    ($:backgroundMesh.radBoxN $:backgroundMesh.radBoxN $:backgroundMesh.zMax)
    ($:backgroundMesh.radBox  $:backgroundMesh.radBoxN $:backgroundMesh.zMax)
    ($:backgroundMesh.radBox  $:backgroundMesh.radBox  $:backgroundMesh.zMax)
    ($:backgroundMesh.radBoxN $:backgroundMesh.radBox  $:backgroundMesh.zMax)

    project
    ($:backgroundMesh.radInN  $:backgroundMesh.radInN  $:backgroundMesh.zMax)
    (rotatingZone)

    project
    ($:backgroundMesh.radIn   $:backgroundMesh.radInN  $:backgroundMesh.zMax)
    (rotatingZone)

    project
    ($:backgroundMesh.radIn   $:backgroundMesh.radIn   $:backgroundMesh.zMax)
    (rotatingZone)

    project
    ($:backgroundMesh.radInN  $:backgroundMesh.radIn   $:backgroundMesh.zMax)
    (rotatingZone)

    project
    ($:backgroundMesh.radOutN $:backgroundMesh.radOutN $:backgroundMesh.zMax)
    (fixed)

    project
    ($:backgroundMesh.radOut  $:backgroundMesh.radOutN $:backgroundMesh.zMax)
    (fixed)

    project
    ($:backgroundMesh.radOut  $:backgroundMesh.radOut  $:backgroundMesh.zMax)
    (fixed)

    project
    ($:backgroundMesh.radOutN $:backgroundMesh.radOut  $:backgroundMesh.zMax)
    (fixed)
);

boxMesh
($:backgroundMesh.boxCells $:backgroundMesh.boxCells $:backgroundMesh.zCells)
simpleGrading (1 1 1);

inMesh
($:backgroundMesh.boxCells $:backgroundMesh.inCells $:backgroundMesh.zCells)
simpleGrading (1 1 1);

outMesh
($:backgroundMesh.boxCells $:backgroundMesh.outCells $:backgroundMesh.zCells)
simpleGrading (1 $:backgroundMesh.outGrading 1);

blocks
(
    hex (0 1 2 3 12 13 14 15) $boxMesh

    hex (1 0 4 5 13 12 16 17) $inMesh
    hex (0 3 7 4 12 15 19 16) $inMesh
    hex (2 1 5 6 14 13 17 18) $inMesh
    hex (3 2 6 7 15 14 18 19) $inMesh

    hex (5 4  8  9 17 16 20 21) $outMesh
    hex (4 7 11  8 16 19 23 20) $outMesh
    hex (6 5  9 10 18 17 21 22) $outMesh
    hex (7 6 10 11 19 18 22 23) $outMesh
);

edges
(
    project  4  5  (rotatingZone)
    project  5  6  (rotatingZone)
    project  6  7  (rotatingZone)
    project  7  4  (rotatingZone)
    project 16 17  (rotatingZone)
    project 17 18  (rotatingZone)
    project 18 19  (rotatingZone)
    project 19 16  (rotatingZone)

    project  8  9  (fixed)
    project  9 10  (fixed)
    project 10 11  (fixed)
    project 11  8  (fixed)
    project 20 21  (fixed)
    project 21 22  (fixed)
    project 22 23  (fixed)
    project 23 20  (fixed)
);

boundary
(
);

mergePatchPairs
(
);

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