summaryrefslogtreecommitdiff
path: root/Donjon/rdonjon
diff options
context:
space:
mode:
authorstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
committerstainer_t <thomas.stainer@oecd-nea.org>2025-09-08 13:48:49 +0200
commit7dfcc480ba1e19bd3232349fc733caef94034292 (patch)
tree03ee104eb8846d5cc1a981d267687a729185d3f3 /Donjon/rdonjon
Initial commit from Polytechnique Montreal
Diffstat (limited to 'Donjon/rdonjon')
-rwxr-xr-xDonjon/rdonjon166
1 files changed, 166 insertions, 0 deletions
diff --git a/Donjon/rdonjon b/Donjon/rdonjon
new file mode 100755
index 0000000..b6de49b
--- /dev/null
+++ b/Donjon/rdonjon
@@ -0,0 +1,166 @@
+#!/bin/sh
+#
+# author : A. Hebert
+# use : rdonjon [-c:|-q|-w|-p:|-i:] <file.x2m>
+# note : <file.x2m> must be located on directory ./data/
+# If <file.access> exists, it is executed.
+# -c name of compiler
+# -q quiet execution for regression testing
+# -w to execute in console (for debug purpose)
+# -p number of parallel threads (=1 by default)
+# -i name of x2m dataset (by default, use the last argument)
+#
+if [ $# = 0 ]
+ then
+ echo "usage: rdonjon [-c:|-q|-w|-p:|-i:] <file.x2m>" 1>&2
+ exit 1
+fi
+System=`uname -s`
+Sysx="`echo $System | cut -b -6`"
+if [ $Sysx = "CYGWIN" ]; then
+ MACH=`uname -o`
+elif [ $Sysx = "AIX" ]; then
+ MACH=`uname -s`
+else
+ MACH=`uname -sm | sed 's/[ ]/_/'`
+fi
+
+for last; do : ; done
+mydata=${last}
+typ='custom'
+quiet=0
+term=0
+nomp=0
+
+while getopts ":c:qwi:p:" opt; do
+ case $opt in
+ c) typ="$OPTARG"
+ ;;
+ q) quiet=1
+ ;;
+ w) term=1
+ ;;
+ p) nomp=$OPTARG
+ ;;
+ i) mydata=$OPTARG
+ ;;
+ \?) echo "Invalid option -$OPTARG" >&2
+ exit 1
+ ;;
+ esac
+
+ case $OPTARG in
+ -*) echo "Option $opt needs a valid argument"
+ exit 1
+ ;;
+ esac
+done
+
+xxx=`basename $mydata .x2m`
+Code=`basename "$PWD"`
+if [ $quiet = 0 ]; then
+ echo 'execute' $xxx 'with' $Code 'on system' $MACH 'with' $typ 'compiler'
+fi
+
+if [ -d "$MACH" ]; then
+ if [ $quiet = 0 ]; then
+ echo 'use the existing directory' $MACH
+ fi
+else
+ echo 'creation of directory' $MACH
+ mkdir "$MACH"
+fi
+CodeDir=$PWD
+
+if [ $Sysx = "AIX" ]; then
+ Tmpdir=/usr/tmp
+elif [ $Sysx = "SunOS" ]; then
+ Tmpdir=/var/tmp
+else
+ Tmpdir=/tmp
+fi
+inum=1
+while [ -d $Tmpdir/rundir$inum ]
+ do
+ inum=`expr $inum + 1 `
+done
+Rundir=$Tmpdir/rundir$inum
+mkdir $Rundir
+if [ $quiet = 0 ]; then
+ echo "RunDirectory:" $Rundir
+fi
+cd $Rundir
+
+if [ $typ = 'custom' ]; then
+ cp "$CodeDir"/bin/"$MACH"/$Code ./code
+else
+ cp "$CodeDir"/bin/"$MACH"'_'$typ/$Code ./code
+fi
+cp "$CodeDir"/data/$mydata ./mydata
+
+export NO_STOP_MESSAGE=1
+if [ -d "$CodeDir"/data/`echo $xxx`_proc ]; then
+ cp "$CodeDir"/data/`echo $xxx`_proc/*.c2m . 2> /dev/null
+fi
+if [ -f "$CodeDir"/data/$xxx.access ]; then
+ if [ $quiet = 0 ]; then
+ "$CodeDir"/data/$xxx.access "$CodeDir"
+ else
+ "$CodeDir"/data/$xxx.access "$CodeDir" > /dev/null
+ fi
+fi
+if [ -f "$CodeDir"/data/assertS.c2m ]; then
+ cp "$CodeDir"/data/assertS.c2m .
+fi
+if [ -f "$CodeDir"/data/assertV.c2m ]; then
+ cp "$CodeDir"/data/assertV.c2m .
+fi
+before=$(date +%s)
+if [ $nomp != 0 ]; then
+ echo 'number of OpenMP threads=' $nomp
+ export OMP_NUM_THREADS=$nomp
+ if command -v numactl >&2; then
+ numactl --cpunodebind=0 --membind=0 2>/dev/null
+ echo "use NUMA memory policy"
+ fi
+else
+ export OMP_NUM_THREADS=1
+fi
+if [ $term = 0 ]; then
+ ./code <mydata >$xxx.result
+elif [ $term = 1 ]; then
+ ./code <mydata
+fi
+if [ $quiet = 0 ]; then
+ time=$(( $(date +%s) - before))
+ printf 'End of execution. Total execution time: %dh %dmin %ds\n' \
+ $(($time/3600)) $(($time%3600/60)) $(($time%60))
+fi
+if [ -f "$CodeDir"/data/$xxx.save ]; then
+ if [ $quiet = 0 ]; then
+ "$CodeDir"/data/$xxx.save "$CodeDir"
+ else
+ "$CodeDir"/data/$xxx.save "$CodeDir" > /dev/null
+ fi
+fi
+mv $xxx.result "$CodeDir"/"$MACH"
+if [ $quiet = 0 ]; then
+ echo 'the listing is located on ./'$MACH
+fi
+
+cd "$CodeDir"/"$MACH"
+if [ $quiet = 0 ] && [ $term = 0 ]; then
+ tail -15 $xxx.result
+elif [ $term = 0 ]; then
+ RED='\033[0;31m'
+ GREEN='\033[0;32m'
+ NC='\033[0m' # No Color
+ if tail $xxx.result | grep -q "normal end" ; then
+ printf "${GREEN}[OK]${NC}\n"
+ else
+ printf "${RED}[FAILED]${NC}\n"
+ fi
+fi
+chmod -R 777 $Rundir
+/bin/rm -r -f $Rundir
+cd ..