/*--------------------------------*- 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
hydrogenDiameter      10;          // in mm    - diameter of the central gas filter
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
/**************************************************/


radius          #calc "floor((( $diameter / 2) - $wallThickness ) * 10000) / 10000";
radiusHydrogen  #calc "floor(( $hydrogenDiameter / 2) * 10000) / 10000";
radWedgeDegree  #calc "floor((degToRad( $wedgeDegree )) * 100) / 100";
x               #calc "floor(( $radius *cos( $radWedgeDegree ))*10000)/10000";
xInner          #calc "floor(( $radiusHydrogen *cos( $radWedgeDegree ))*10000)/10000";
y               #calc "floor(( $radius *sin( $radWedgeDegree ))*10000)/10000";
yInner          #calc "floor(( $radiusHydrogen *sin( $radWedgeDegree ))*10000)/10000";
yNeg            #calc "-1.0 * $y";
yInnerNeg       #calc "-1.0 * $yInner";
pipeLength      #calc "floor(($metalFillHeight + $hydrogenHeightAbove)*10000)/10000";


nCellX            #calc "ceil( $cellScalingNumber*( $x ))";
nCellXInner       #calc "ceil( $cellScalingNumber*( $xInner ))";
nCellxOuter       #calc "ceil( $nCellX - $nCellXInner)";
nCellZMetal       #calc "$metalFillHeight * $cellScalingNumber";
nCellZHydrogen    #calc "$hydrogenHeightAbove * $cellScalingNumber";


vertices
(
    (0        0           0)                  // 0
    ($xInner  $yInner     0)                  // 1
    ($xInner  $yInner     $metalFillHeight) // 2
    (0        0           $metalFillHeight) // 3
    ($xInner  $yInnerNeg  0)                  // 4
    ($xInner  $yInnerNeg  $metalFillHeight) // 5

    (0        0           $pipeLength)        // 6
    ($xInner  $yInner     $pipeLength)        // 7
    ($xInner  $yInnerNeg  $pipeLength)        // 8

    ($x  $y     0)                            // 9
    ($x  $y     $metalFillHeight)           // 10
    ($x  $yNeg  0)                            // 11
    ($x  $yNeg  $metalFillHeight)           // 12
    ($x  $y     $pipeLength)                  // 13
    ($x  $yNeg  $pipeLength)                  // 14
);

blocks
(
    hex (0 4 1 0 3 5 2 3) hydrogenArea ($nCellXInner 1 $nCellZMetal) simpleGrading (1 1 1)
    hex (3 5 2 3 6 8 7 6) hydrogenArea ($nCellXInner 1 $nCellZHydrogen) simpleGrading (1 1 1)
    hex (1 4 11 9 2 5 12 10) metalArea (1 $nCellxOuter $nCellZMetal) simpleGrading (1 1 1)
    hex (2 5 12 10 7 8 14 13) hydrogenArea (1 $nCellxOuter $nCellZHydrogen) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    front
    {
          type wedge;
          faces
          (
              (0 3 5 4) // front hydrogenArea1 hydrideArea
              (3 6 8 5) // front hydrogenArea2
              (4 5 12 11) // front hydrideArea
              (5 8 14 12) // front hydrogenArea3
          );
     }

   back
   {
         type wedge;
         faces
         (
             (0 1 2 3) // back hydrogenArea1
             (3 2 7 6) // back hydrogenArea2
             (1 9 10 2) // back hydrideArea
             (2 10 13 7) // back hydrogenArea3
         );
    }

   tankWall
   {
         type wall;
         faces
         (
             (9 11 12 10) // wall hydrideArea
             (0 4 1 0) // bottom inner
             (1 4 11 9) // bottom outer
             (10 12 14 13) // wall hydrogenArea
         );
    }

   inlet
   {
         type patch;
         faces
         (
            (6 8 7 6) // topInner
            (7 8 14 13) // topOuter
         );
    }

   axis
   {
         type empty;
         faces
         (
             (0 3 3 0)   // symmetrie axis Lower
             (3 6 6 3)   // symmetrie axis Upper
         );
    }
);

mergePatchPairs
(
);

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