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

scale   1;
verbose no;

// Geometric parameters
outerRadius 1;
innerRatio  0.7;

// Divisions in x/y/z and radial directions. Can be unequal.
nx   10;
ny   $nx;
nz   $nx;
nr   6;

geometry
{
    sphere
    {
        type   sphere;
        origin (0 0 0);
        radius $outerRadius;
    }
}

// Outer box size
vo   #eval{ $outerRadius/sqrt(3) };

// Inner box size - % of overall dimension
vi   #eval{ $vo * $innerRatio };

vertices
(
    // Inner block
    (-$vi -$vi -$vi)
    ( $vi -$vi -$vi)
    ( $vi  $vi -$vi)
    (-$vi  $vi -$vi)
    (-$vi -$vi  $vi)
    ( $vi -$vi  $vi)
    ( $vi  $vi  $vi)
    (-$vi  $vi  $vi)

    // Outer blocks
    (-$vo -$vo -$vo)
    ( $vo -$vo -$vo)
    ( $vo  $vo -$vo)
    (-$vo  $vo -$vo)
    (-$vo -$vo  $vo)
    ( $vo -$vo  $vo)
    ( $vo  $vo  $vo)
    (-$vo  $vo  $vo)
);

blocks
(
    hex (0 1 2 3 4 5 6 7) ($nx $ny $nz) grading (1 1 1)  // Inner block

    // Outer blocks
    hex ( 8  0  3 11 12  4  7 15) ($nr $ny $nz) grading (1 1 1)  // x-min
    hex ( 1  9 10  2  5 13 14  6) ($nr $ny $nz) grading (1 1 1)  // x-max
    hex ( 8  9  1  0 12 13  5  4) ($nx $nr $nz) grading (1 1 1)  // y-min
    hex ( 3  2 10 11  7  6 14 15) ($nx $nr $nz) grading (1 1 1)  // y-max
    hex ( 8  9 10 11  0  1  2  3) ($nx $ny $nr) grading (1 1 1)  // z-min
    hex ( 4  5  6  7 12 13 14 15) ($nx $ny $nr) grading (1 1 1)  // z-max
);

edges
(
    // Outer blocks
    arc  8  9 origin (0 0 0)
    arc 10 11 origin (0 0 0)
    arc 14 15 origin (0 0 0)
    arc 12 13 origin (0 0 0)

    arc  8 11 origin (0 0 0)
    arc  9 10 origin (0 0 0)
    arc 13 14 origin (0 0 0)
    arc 12 15 origin (0 0 0)

    arc  8 12 origin (0 0 0)
    arc  9 13 origin (0 0 0)
    arc 10 14 origin (0 0 0)
    arc 11 15 origin (0 0 0)

    // Inner block - flattened by factor 1.1
    arc 0 1 origin 1.1 (0 0 0)
    arc 2 3 origin 1.1 (0 0 0)
    arc 6 7 origin 1.1 (0 0 0)
    arc 4 5 origin 1.1 (0 0 0)

    arc 0 3 origin 1.1 (0 0 0)
    arc 1 2 origin 1.1 (0 0 0)
    arc 5 6 origin 1.1 (0 0 0)
    arc 4 7 origin 1.1 (0 0 0)

    arc 0 4 origin 1.1 (0 0 0)
    arc 1 5 origin 1.1 (0 0 0)
    arc 2 6 origin 1.1 (0 0 0)
    arc 3 7 origin 1.1 (0 0 0)
);

faces
(
    // Outer blocks
    project (1 0) sphere  // block 1: x-min
    project (2 1) sphere  // block 2: x-max
    project (3 2) sphere  // block 3: y-min
    project (4 3) sphere  // block 4: y-max
    project (5 4) sphere  // block 5: z-min
    project (6 5) sphere  // block 6: z-max
);

boundary
(
    minX
    {
        type patch;
        faces
        (
            (1 0)  // block 1: x-min
        );
    }

    maxX
    {
        type patch;
        faces
        (
            (2 1)  // block 2: x-max
        );
    }

    minY
    {
        type patch;
        faces
        (
            (3 2)  // block 3: y-min
        );
    }

    maxY
    {
        type patch;
        faces
        (
            (4 3)  // block 4: y-max
        );
    }

    minZ
    {
        type patch;
        faces
        (
            (5 4)  // block 5: z-min
        );
    }

    maxZ
    {
        type patch;
        faces
        (
            (6 5)  // block 6: z-max
        );
    }
);


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