#!/bin/sh
#-----------------------------------------------------------------------------#
# =========                 |                                                 #
# \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           #
#  \\    /   O peration     | Version:  v1912                                 #
#   \\  /    A nd           | Website:  www.openfoam.com                      #
#    \\/     M anipulation  |                                                 #
#-----------------------------------------------------------------------------#

cd "${0%/*}" || exit    # Run from this directory

# Stop on first error
set -e

x0=0.4
y0=0.1
z0=0.1
l=0.2
offset=0.3
tol=0.001

nx=1
ny=2
nz=2


tmpSetSet='patchify.setSet'
rm -f patchify.setSet


initialiseFaceSet()
{
    echo "faceSet cubeFaceSet clear" >> $tmpSetSet;
}

addToFaceSet()
{
    name=$1
    x1=$2
    x2=$3
    y1=$4
    y2=$5
    z1=$6
    z2=$7

    echo "faceSet cubeFaceSet add boxToFace ($x1 $y1 $z1) ($x2 $y2 $z2)" >> $tmpSetSet
    echo "   $name: (x1=$x1 y1=$y1 z1=$z1) (x2=$x2 y2=$y2 z2=$z2)"
}

createSetsAndZone()
{
    name=$1
    x1=$2
    x2=$3
    y1=$4
    y2=$5
    z1=$6
    z2=$7

    echo "faceSet ${name}Faces new boxToFace ($x1 $y1 $z1) ($x2 $y2 $z2)" >> $tmpSetSet
    echo "   $name: (x1=$x1 y1=$y1 z1=$z1) (x2=$x2 y2=$y2 z2=$z2)"
}

initialiseFaceSet


# loop over cubes
n=1
x=$x0
for xi in $(seq 1 1 $nx); do
   y=$y0
   for yi in $(seq 1 1 $ny); do
       z=$z0
       for zi in $(seq 1 1 $nz); do
           echo "processing cube $n"

           pad=""
           if [ $n -lt 10 ]; then
               pad="0"
           fi

           # side 1
           side=1
           x1=$(echo $x $tol | awk '{print $1 - $2}')
           x2=$(echo $x $l $tol | awk '{print $1 + $2 + $3}')
           y1=$(echo $y $tol | awk '{print $1 - $2}')
           y2=$(echo $y $l $tol | awk '{print $1 + $2 + $3}')
           z1=$(echo $z $l $tol | awk '{print $1 + $2 - $3}')
           z2=$(echo $z $l $tol | awk '{print $1 + $2 + $3}')
           addToFaceSet cube${pad}${n}_side${side} $x1 $x2 $y1 $y2 $z1 $z2

           #  side 2
           side=2
           x1=$(echo $x $l $tol | awk '{print $1 + $2 - $3}')
           x2=$(echo $x $l $tol | awk '{print $1 + $2 + $3}')
           y1=$(echo $y $tol | awk '{print $1 - $2}')
           y2=$(echo $y $l $tol | awk '{print $1 + $2 + $3}')
           z1=$(echo $z $tol  | awk '{print $1 - $2}')
           z2=$(echo $z $l $tol | awk '{print $1 + $2 + $3}')
           addToFaceSet cube${pad}${n}_side${side} $x1 $x2 $y1 $y2 $z1 $z2

           # side 3
           side=3
           x1=$(echo $x $tol | awk '{print $1 - $2}')
           x2=$(echo $x $l $tol | awk '{print $1 + $2 + $3}')
           y1=$(echo $y $tol | awk '{print $1 - $2}')
           y2=$(echo $y $l $tol | awk '{print $1 + $2 + $3}')
           z1=$(echo $z $tol | awk '{print $1 - $2}')
           z2=$(echo $z $tol | awk '{print $1 + $2}')
           addToFaceSet cube${pad}${n}_side${side} $x1 $x2 $y1 $y2 $z1 $z2

           # side 4
           side=4
           x1=$(echo $x $tol | awk '{print $1 - $2}')
           x2=$(echo $x $tol | awk '{print $1 + $2}')
           y1=$(echo $y $tol | awk '{print $1 - $2}')
           y2=$(echo $y $l $tol | awk '{print $1 + $2 + $3}')
           z1=$(echo $z $tol | awk '{print $1 - $2}')
           z2=$(echo $z $l $tol | awk '{print $1 + $2 + $3}')
           addToFaceSet cube${pad}${n}_side${side} $x1 $x2 $y1 $y2 $z1 $z2

           # side 5
           side=5
           x1=$(echo $x $tol | awk '{print $1 - $2}')
           x2=$(echo $x $l $tol | awk '{print $1 + $2 + $3}')
           y1=$(echo $y $l $tol | awk '{print $1 + $2 - $3}')
           y2=$(echo $y $l $tol | awk '{print $1 + $2 + $3}')
           z1=$(echo $z $tol | awk '{print $1 - $2}')
           z2=$(echo $z $l $tol | awk '{print $1 + $2 + $3}')
           addToFaceSet cube${pad}${n}_side${side} $x1 $x2 $y1 $y2 $z1 $z2

           # side 6
           side=6
           x1=$(echo $x $tol | awk '{print $1 - $2}')
           x2=$(echo $x $l $tol | awk '{print $1 + $2 + $3}')
           y1=$(echo $y $tol | awk '{print $1 - $2}')
           y2=$(echo $y $tol | awk '{print $1 + $2}')
           z1=$(echo $z $tol | awk '{print $1 - $2}')
           z2=$(echo $z $l $tol | awk '{print $1 + $2 + $3}')
           addToFaceSet cube${pad}${n}_side${side} $x1 $x2 $y1 $y2 $z1 $z2

           n=$((n+1))

           z=$(echo $z $offset | awk '{print $1 + $2}')
       done

       y=$(echo $y $offset | awk '{print $1 + $2}')
   done

   x=$(echo $x $offset | awk '{print $1 + $2}')
done

echo "cellSet cubeFacesCells new faceToCell cubeFaceSet owner" >> $tmpSetSet
echo "faceZoneSet cubeFaces new setsToFaceZone cubeFaceSet cubeFacesCells" >> $tmpSetSet

echo "processing floor"
floorMax=$(echo 1 $tol | awk '{print $1 + $2}')
createSetsAndZone Floor -$tol $floorMax -$tol $floorMax -$tol $tol
echo "cellSet floorCells new faceToCell FloorFaces owner" >> $tmpSetSet
echo "faceZoneSet floorFaces new setsToFaceZone FloorFaces floorCells" >> $tmpSetSet

setSet -batch $tmpSetSet > log.setSet.patchifyObstacles 2>&1

echo "End"

# *************************************************************************
