/*--------------------------------*- 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
rxo 2;
ryo 3;
rzo 4;

// Geometric parameters
outerRadius 1;
innerRatio  0.75;

// Divisions in x/y/z and radial directions. Can be unequal.
nx   30;
ny   24;
nz   20;
nr   6;

geometry
{
    sphere
    {
        type    sphere;
        origin  (0 0 0);
        radius  ($rxo $ryo $rzo);
    }

    innerSphere
    {
        $sphere
        radius  #eval{ $innerRatio*$[(vector) ../sphere/radius] };
    }
}


// Outer box sizes (approximate)
vxo #eval{ sqrt(1.0/3.0) * $rxo };
vyo #eval{ sqrt(1.0/3.0) * $ryo };
vzo #eval{ sqrt(1.0/3.0) * $rzo };

// Inner box sizes - % of overall dimension
vxi #eval{ $vxo * $innerRatio };
vyi #eval{ $vyo * $innerRatio };
vzi #eval{ $vzo * $innerRatio };

vertices
(
    // Inner block points
    project (-$vxi -$vyi -$vzi) (innerSphere)
    project ( $vxi -$vyi -$vzi) (innerSphere)
    project ( $vxi  $vyi -$vzi) (innerSphere)
    project (-$vxi  $vyi -$vzi) (innerSphere)
    project (-$vxi -$vyi  $vzi) (innerSphere)
    project ( $vxi -$vyi  $vzi) (innerSphere)
    project ( $vxi  $vyi  $vzi) (innerSphere)
    project (-$vxi  $vyi  $vzi) (innerSphere)

    // Outer block points
    project (-$vxo -$vyo -$vzo) (sphere)
    project ( $vxo -$vyo -$vzo) (sphere)
    project ( $vxo  $vyo -$vzo) (sphere)
    project (-$vxo  $vyo -$vzo) (sphere)
    project (-$vxo -$vyo  $vzo) (sphere)
    project ( $vxo -$vyo  $vzo) (sphere)
    project ( $vxo  $vyo  $vzo) (sphere)
    project (-$vxo  $vyo  $vzo) (sphere)
);

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
    project  8  9 (sphere)
    project 10 11 (sphere)
    project 14 15 (sphere)
    project 12 13 (sphere)

    project  8 11 (sphere)
    project  9 10 (sphere)
    project 13 14 (sphere)
    project 12 15 (sphere)

    project  8 12 (sphere)
    project  9 13 (sphere)
    project 10 14 (sphere)
    project 11 15 (sphere)

    // Inner block
    project 0 1 (innerSphere)
    project 2 3 (innerSphere)
    project 6 7 (innerSphere)
    project 4 5 (innerSphere)

    project 0 3 (innerSphere)
    project 1 2 (innerSphere)
    project 5 6 (innerSphere)
    project 4 7 (innerSphere)

    project 0 4 (innerSphere)
    project 1 5 (innerSphere)
    project 2 6 (innerSphere)
    project 3 7 (innerSphere)
);

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
(
    walls
    {
        type wall;
        faces
        (
            (1 0)  // block 1: x-min
            (2 1)  // block 2: x-max
            (3 2)  // block 3: y-min
            (4 3)  // block 4: y-max
            (5 4)  // block 5: z-min
            (6 5)  // block 6: z-max
        );
    }
);


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