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

NCellsR 16;
ascRatio 2;

scale   0.001;
verbose no;

// Geometric parameters
outerRadius 27;
innerRadius 18.9;

// Divisions in x/y/z and radial directions. Can be unequal.
nx   #eval"2*$NCellsR";
ny   $nx;
nz   $nx;
nr   $NCellsR;


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

	innerSphere
	{
		$sphere
			radius  $innerRadius;
	}
}


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

// Inner box size - % of overall dimension
vi   #eval{ sqrt($innerRadius/3) };

vertices
(
 // Inner block points
 project (#eval"-$vi" #eval"-$vi" #eval"-$vi") (innerSphere)
 project ( $vi #eval"-$vi" #eval"-$vi") (innerSphere)
 project ( $vi  $vi #eval"-$vi") (innerSphere)
 project (#eval"-$vi"  $vi #eval"-$vi") (innerSphere)
 project (#eval"-$vi" #eval"-$vi"  $vi) (innerSphere)
 project ( $vi #eval"-$vi"  $vi) (innerSphere)
 project ( $vi  $vi  $vi) (innerSphere)
 project (#eval"-$vi"  $vi  $vi) (innerSphere)

 // Outer block points
 project (#eval"-$vo" #eval"-$vo" #eval"-$vo") (sphere)
 project ( $vo #eval"-$vo" #eval"-$vo") (sphere)
 project ( $vo  $vo #eval"-$vo") (sphere)
 project (#eval"-$vo"  $vo #eval"-$vo") (sphere)
 project (#eval"-$vo" #eval"-$vo"  $vo) (sphere)
 project ( $vo #eval"-$vo"  $vo) (sphere)
 project ( $vo  $vo  $vo) (sphere)
 project (#eval"-$vo"  $vo  $vo) (sphere)
 );

descRatio #eval"1/$ascRatio";

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


 // Outer blocks
 hex ( 8  0  3 11 12  4  7 15) ($nr $ny $nz) simpleGrading (    
	 (
	  (0.5 0.5 $ascRatio)    // 20% y-dir, 30% cells, expansion = 4
	  (0.5 0.5 $descRatio)
	 ) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
	 1 1)  // x-min
 hex ( 1  9 10  2  5 13 14  6) ($nr $ny $nz) simpleGrading (    
	 (
	  (0.5 0.5 $ascRatio)    // 20% y-dir, 30% cells, expansion = 4
	  (0.5 0.5 $descRatio) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
	 )
	 1 1)  // x-max
 hex ( 8  9  1  0 12 13  5  4) ($nx $nr $nz) simpleGrading (1         
	 (
	  (0.5 0.5 $ascRatio)    // 20% y-dir, 30% cells, expansion = 4
	  (0.5 0.5 $descRatio) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
	 )
	 1)  // y-min
	hex ( 3  2 10 11  7  6 14 15) ($nx $nr $nz) simpleGrading (1
			(
			 (0.5 0.5 $ascRatio)    // 20% y-dir, 30% cells, expansion = 4
			 (0.5 0.5 $descRatio) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
			)
			1)  // y-max
	hex ( 8  9 10 11  0  1  2  3) ($nx $ny $nr) simpleGrading (1 1 
			(
			 (0.5 0.5 $ascRatio)    // 20% y-dir, 30% cells, expansion = 4
			 (0.5 0.5 $descRatio) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
			)
			)  // z-min
	hex ( 4  5  6  7 12 13 14 15) ($nx $ny $nr) simpleGrading (1 1 
			(
			 (0.5 0.5 $ascRatio)    // 20% y-dir, 30% cells, expansion = 4
			 (0.5 0.5 $descRatio) // 20% y-dir, 30% cells, expansion = 0.25 (1/4)
			)
			)  // 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 (8 9 10 11) sphere  // block 1: x-min
	 project (12 13 14 15) sphere  // block 1: x-min
	 project (8 12 9 13) sphere  // block 1: x-min
	 project (10 14 11 15) sphere  // block 1: x-min
	 project (8 11 12 15) sphere  // block 1: x-min
	 project (9 10 13 14) sphere  // block 1: x-min

	 //Inner blocks
	 project (0 1 2 3) innerSphere  // block 1: x-min
	 project (4 5 6 7) innerSphere  // block 1: x-min
	 project (0 4 1 5) innerSphere  // block 1: x-min
	 project (2 6 3 7) innerSphere  // block 1: x-min
	 project (0 3 4 7) innerSphere  // block 1: x-min
	 project (1 2 5 6) innerSphere  // 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 (4 3) sphere  // block 5: z-min
	 //    project (5 4) sphere  // block 6: z-max
	);

	boundary
	(
	 inner
	 {
	 type wall;
	 faces
	 (
	  (0 1 2 3)  // block 1: x-min
	  (4 5 6 7)
	  (0 4 1 5)
	  (2 6 3 7)
	  (0 3 4 7)
	  (1 2 5 6)
	 );
	 }
	 outer
	 {
	 type wall;
	 faces
	 (
	  (8 9 10 11)
	  (12 13 14 15)
	  (8 12 9 13)
	  (10 14 11 15)
	  (8 11 12 15)
	  (9 10 13 14)
	 );
	 }

);

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