#!/bin/sh
cd "${0%/*}" || exit                                # Run from this directory
. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions        # Tutorial run functions
#------------------------------------------------------------------------------

intersectSurfaces()
{
    outputName1=$(basename $1)
    outputName1=${outputName1%.*}

    outputName2=$(basename $2)
    outputName2=${outputName2%.*}

    runApplication -s $outputName1:$outputName2 \
        surfaceBooleanFeatures intersection "$@"
}


rm -rf 0


# Run the surface preparation script
./constant/triSurface/surfaceProcess.sh > log.surfaceProcess 2>&1


# Surface intersections
intersectSurfaces vessel.stl spargerShaft.stl -perturb

intersectSurfaces vessel.stl shaft.stl -perturb

intersectSurfaces spargerShaft.stl spargerInlet.stl -perturb

intersectSurfaces stirrer.stl shaftRotating.stl -perturb

intersectSurfaces stirrer_baffles.stl stirrer.stl -surf1Baffle -perturb

intersectSurfaces rotating.stl shaft.stl -surf1Baffle -perturb

# Intersect blades with the plate
for bladeI in $(seq 1 6)
do
    intersectSurfaces \
        stirrer_baffles_$bladeI.obj \
        stirrer_baffles_plate.obj   \
       -surf1Baffle -surf2Baffle
done


# Meshing
\cp system/controlDict.mesh system/controlDict

runApplication blockMesh -region backgroundMeshDecomposition

runApplication -s backgroundMeshDecomposition \
    decomposePar -region backgroundMeshDecomposition

runApplication surfaceFeatureExtract

runParallel foamyHexMesh

runParallel -s faces \
    collapseEdges -collapseFaces -latestTime \
                  -dict system/collapseDict.collapseFaces

#runParallel -s faceSet  \
#    collapseEdges -collapseFaceSet indirectPatchFaces -latestTime \
#                  -dict system/collapseDict.indirectPatchFaces

runParallel checkMesh -allTopology -allGeometry -latestTime

# Copy the mesh from the latest time folder into polyMesh and delete that
# latest time folder
latestTime=$(foamListTimes -latestTime -processor)
if [ "$latestTime" != "constant" ] && [ -d processor0/$latestTime/polyMesh ]
then
    runApplication reconstructParMesh -latestTime

    \cp -r $latestTime/polyMesh constant
    rm -rf $latestTime
fi


#------------------------------------------------------------------------------
