mirror of
https://github.com/ParticulateFlow/CFDEMcoupling-PFM.git
synced 2025-12-08 06:37:44 +00:00
171 lines
5.1 KiB
Bash
Executable File
171 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#===================================================================#
|
|
# compile routine for CFDEMcoupling solvers, part of CFDEMproject
|
|
# Christoph Goniva - May. 2012, DCS Computing GmbH
|
|
#===================================================================#
|
|
|
|
whitelist="solver-list.txt"
|
|
|
|
#- include functions
|
|
source $CFDEM_PROJECT_DIR/etc/functions.sh
|
|
logDir="log"
|
|
cd $CFDEM_PROJECT_DIR/etc
|
|
mkdir -p $logDir
|
|
|
|
#- remove old success/fail logs
|
|
rm $logDir/log_compile_results_success
|
|
rm $logDir/log_compile_results_fail
|
|
|
|
CWD="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")"
|
|
NOW="$(date +"%Y-%m-%d-%H:%M")"
|
|
|
|
echo ""
|
|
echo "This routine will compile the solvers specified in solver-list.txt"
|
|
echo ""
|
|
#echo "Are the variables CFDEM_SOLVER_DIR=$CFDEM_SOLVER_DIR"
|
|
#echo "and CFDEM_SRC_DIR=$CFDEM_SRC_DIR/lagrangian/cfdemParticle correct? (y/n)"
|
|
#read YN
|
|
#if [ "$YN" != "y" ];then
|
|
# echo "Aborted by user."
|
|
# exit 1
|
|
#fi
|
|
|
|
echo ""
|
|
echo "Please provide the solvers to be compiled in the $CWD/$whitelist file."
|
|
echo "structure:"
|
|
echo "path to provide the path relative to CFDEM_SOLVER_DIR"
|
|
echo ""
|
|
echo "example:"
|
|
echo "cfdemSolverPiso/dir"
|
|
echo ""
|
|
|
|
if [ ! -f "$CWD/$whitelist" ];then
|
|
echo "$whitelist does not exist in $CWD"
|
|
else
|
|
njobs=`wc -l < $CWD/$whitelist`
|
|
echo ""
|
|
echo "running compilation in pseudo-parallel mode of $njobs solvers"
|
|
|
|
#--------------------------------------------------------------------------------#
|
|
logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
|
|
|
|
##number of solvers compiled at a time
|
|
|
|
if [[ $WM_NCOMPPROCS == "" ]] || [ $WM_NCOMPPROCS -eq 1 ]; then
|
|
nsteps=1
|
|
let nchunk=$njobs+1 # +1, to wait for the last compilation too
|
|
echo "do compilation in serial"
|
|
else
|
|
nsteps=$WM_NCOMPPROCS
|
|
nchunk=`echo $njobs/$nsteps+1 | bc`
|
|
echo "do compilation on $nsteps procs in $nchunk chunks"
|
|
let nchunk++ # +1, to wait for the last compilation too
|
|
fi
|
|
|
|
counter=0
|
|
for i in `seq $nchunk`
|
|
do
|
|
|
|
#wait until prev. compilation is finished
|
|
echo "waiting..."
|
|
until [ `ps -C make | wc -l` -eq 1 ];
|
|
do
|
|
sleep 2
|
|
done
|
|
|
|
for j in `seq $nsteps`
|
|
do
|
|
let solNr=($i-1)*$nsteps+$j
|
|
LINE=`head -n $solNr $CWD/$whitelist | tail -1`
|
|
|
|
# white lines
|
|
if [[ "$LINE" == "" ]]; then
|
|
continue
|
|
# comments
|
|
elif [[ "$LINE" == \#* ]]; then
|
|
continue
|
|
# paths
|
|
elif [[ "$LINE" == */dir ]]; then
|
|
#echo "change path"
|
|
LINE=$(echo "${LINE%????}")
|
|
path="$CFDEM_SOLVER_DIR/$LINE"
|
|
#cd $path
|
|
let solNr++
|
|
fi
|
|
|
|
if [[ "$counter" -lt "$njobs" ]]; then
|
|
#--------------------------------------------------------------------------------#
|
|
#- define variables
|
|
#logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
|
|
logfileName="log_compileCFDEMcoupling""_$LINE"
|
|
casePath="$CFDEM_SOLVER_DIR/$LINE"
|
|
headerText="$logfileName""_$LINE""-$NOW"
|
|
parallel="true"
|
|
#--------------------------------------------------------------------------------#
|
|
|
|
#echo "compiling $LINE"
|
|
compileSolver $logpath $logfileName $casePath $headerText $parallel
|
|
let counter++
|
|
fi
|
|
done
|
|
|
|
sleep 1 # wait a second until compilation starts
|
|
done
|
|
|
|
echo "compilation done."
|
|
fi
|
|
|
|
#--------------------------------------------------------------------------------#
|
|
# loop all solvers and collect the logs
|
|
#--------------------------------------------------------------------------------#
|
|
|
|
#wait until prev. compilation is finished
|
|
echo "waiting..."
|
|
until [ `ps -C make | wc -l` -eq 1 ];
|
|
do
|
|
sleep 2
|
|
done
|
|
|
|
if [ ! -f "$CWD/$whitelist" ];then
|
|
echo "$whitelist does not exist in $CWD"
|
|
else
|
|
NLINES=`wc -l < $CWD/$whitelist`
|
|
COUNT=0
|
|
|
|
for masterLogFile in "$masterLogName"
|
|
do
|
|
|
|
while [ $COUNT -lt $NLINES ]
|
|
do
|
|
let COUNT++
|
|
LINE=`head -n $COUNT $CWD/$whitelist | tail -1`
|
|
|
|
# white lines
|
|
if [[ "$LINE" == "" ]]; then
|
|
continue
|
|
# comments
|
|
elif [[ "$LINE" == \#* ]]; then
|
|
continue
|
|
# paths
|
|
elif [[ "$LINE" == */dir ]]; then
|
|
LINE=$(echo "${LINE%????}")
|
|
path="$CFDEM_SOLVER_DIR/$LINE"
|
|
#continue
|
|
fi
|
|
|
|
#- execute tutorial
|
|
echo "collecting log of $path"
|
|
|
|
#--------------------------------------------------------------------------------#
|
|
#- define variables
|
|
#logpath="$(dirname "$(readlink -f ${BASH_SOURCE[0]})")/$logDir"
|
|
logfileName="log_compileCFDEMcoupling""_$LINE"
|
|
casePath="$CFDEM_SOLVER_DIR/$LINE"
|
|
#--------------------------------------------------------------------------------#
|
|
collectLogCFDEMcoupling_sol $logpath $logfileName $casePath
|
|
done
|
|
done
|
|
fi
|
|
|