#!/bin/bash -l
### Script for running the open-closed coolings DrivAer with a static mesh
### Original authors: Charles Mockett, Hendrik Hetmann and Felix Kramer (Upstream CFD GmbH), 2022-2023
### Modified setup for OpenFOAM HPC Challenge (OHC-1): Mark Wasserman (Huawei) and Sergey Lesnik (Wikki GmbH), 2025
### Further modified for execution with SPUMA: Tommaso Zanelli (Cineca), 2025

# Based on the geometry and setup of the AutoCFD4 Workshop:
# Hupertz, B., Chalupa, K., Krueger, L., Howard, K., Glueck, H.-D., Lewington, N., . . . Shin, Y.-s. (2021). On the Aerodynamics of the Notchback Open Cooling DrivAer: A Detailed Investigation of Wind Tunnel Data for Improved Correlation and Reference. SAE Int. J. Adv. & Curr. Prac. in Mobility, 3(4), 1726-1747. doi:https://doi.org/10.4271/2021-01-0958

### example for slurm submission
# adapt to your needs or ignore if not submitting to a queuing system
##SBATCH --job-name "DrivAer_RANS"
##SBATCH --ntasks=4
##SBATCH --ntasks-per-node=4
##SBATCH --gpus-per-node=4
##SBATCH --partition=gpu
##SBATCH --output=%x-%j.out
##SBATCH --error=%x-%j.err

### Solver
solverRANS="simpleFoam"

### Used directories
logDir="logFiles"

### Misc
fileHandler=" "                 # "-fileHandler hostCollated "

# function to read parameters from caseDefinition...
caseDefinitionFile="system/include/caseDefinition"
function getInputParam ()
{
    varVal=`grep -w ${1} ${caseDefinitionFile} | cut -d ";" -f 1 | grep -v '//'`
    varVal=`echo ${varVal:${#1}}`
    echo $varVal
}

# get input parameters
nProcs=`getInputParam nCores`
TIMESTAMP=$(date "+%Y-%m-%d_%H-%M-%S")

# extra mpi flags
OMPI_FLAGS="" #  "--mca pml ucx"

# parEx="mpirun -np ${nProcs} ${OMPI_FLAGS}"
parEx="srun -n ${nProcs}"

# Memory pool type
poolType="fixedSizeMemoryPool"

# Memory pool size in GB (per process)
poolSize="32"

# Memory pool flags
poolOptions="-pool ${poolType} -poolSize ${poolSize}"


. ${WM_PROJECT_DIR:?}/bin/tools/RunFunctions

# ---- initialise & run simulation
mkdir -p $logDir

echo; echo "decomposePar"
time decomposePar $poolOptions -constant $fileHandler > $logDir/10_decomposePar.log 2>&1 || exit 1

echo; echo "restore 0 Directory"
restore0Dir -processor

echo; echo "renumberMesh"
time $parEx renumberMesh $poolOptions -constant -overwrite -parallel $fileHandler > $logDir/20_renumberMesh.log 2>&1 || exit 1

echo; echo "potentialFoam"
time $parEx potentialFoam $poolOptions -initialiseUBCs -parallel $fileHandler > $logDir/30_potentialFoam.log 2>&1 || exit 1

echo; echo "applyBoundaryLayer"
time $parEx applyBoundaryLayer $poolOptions -ybl "0.0450244" -parallel $fileHandler > $logDir/40_applyBoundaryLayer.log 2>&1 || exit 1

echo; echo $solverRANS
time $parEx $solverRANS $poolOptions -parallel $fileHandler > $logDir/50_$solverRANS.${SLURM_JOB_ID}.log 2>&1 || exit 1

echo "... done!"

