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

convertToMeters 1e-3;

/****************** config ************************/
wedgeDegree           2.0;            // in deg  / has to be < 5°
wallThickness         1.06;        // in mm    / self explanatory
diameter              48.3;        // in mm    / diameter of the storage pipe
metalFillHeight       100;         // in mm    / height to which the powder is filled in
hydrogenHeightAbove   10;          // in mm    / height of hydrogen/filter above metal powder
cellScalingNumber     1;              //         / a scaling factor for the number of cells used
/**************************************************/

// pipe parameter calculation
radius          #calc "floor((($diameter / 2) - $wallThickness)*10000)/10000";
radWedgeDegree  #calc "floor((degToRad($wedgeDegree))*100)/100";
x               #calc "floor(($radius*cos($radWedgeDegree))*10000)/10000";
y               #calc "floor(($radius*sin($radWedgeDegree))*10000)/10000";
yNeg            #calc "-1.0*$y";
pipeLength      #calc "floor(($metalFillHeight + $hydrogenHeightAbove)*10000)/10000";

// cell scaling calculation
nCellX          #calc "ceil( $x * $cellScalingNumber)";
nCellZMetal     #calc "$metalFillHeight * $cellScalingNumber";
nCellZHydrogen  #calc "$hydrogenHeightAbove * $cellScalingNumber";


vertices
(
    (0    0       0)                  // 0
    ($x	  $y      0)                  // 1
    ($x   $y      $metalFillHeight) // 2
    (0    0       $metalFillHeight) // 3
    ($x   $yNeg   0)                  // 4
    ($x   $yNeg   $metalFillHeight) // 5

    (0    0       $pipeLength)        // 6
    ($x   $y      $pipeLength)        // 7
    ($x   $yNeg   $pipeLength)        // 8
);

blocks
(
    hex (0 4 1 0 3 5 2 3) metalArea ($nCellX 1 $nCellZMetal) simpleGrading (1 1 1)
    hex (3 5 2 3 6 8 7 6) hydrogenArea ($nCellX 1 $nCellZHydrogen) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    front
    {
          type wedge;
          faces
          (
              (0 3 5 4) // front hydrideArea
              (3 6 8 5) // front hydrogenArea
          );
     }

   back
   {
         type wedge;
         faces
         (
             (0 1 2 3) // back hydrideArea
             (3 2 7 6) // back hydrogenArea
         );
    }

   tankWall
   {
         type wall;
         faces
         (
             (1 4 5 2) // wall hydrideArea
             (0 4 1 0) // pipe bottom
             (2 5 8 7) // wall hydrogenArea
         );
    }

   inlet
   {
         type patch;
         faces
         (
            (6 8 7 6) // top
         );
    }

   axis
   {
         type empty;
         faces
         (
             (0 3 3 0)   // symmetry axis hydrideArea
             (3 6 6 3)   // symmetry axis hydrogenArea
         );
    }
);

mergePatchPairs
(
);

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