#!/bin/sh # #----------------------------------------------------------------------- # initialize procedure parameters #----------------------------------------------------------------------- # input= npmpi=1 npomp=1 export OMP_NUM_THREADS=1 # #----------------------------------------------------------------------- # read procedure parameters from run call #----------------------------------------------------------------------- # while [ $# -ge 2 ] do case $1 in -input) input=`basename $2 .swn`;; -omp) npomp=$2;; -mpi) npmpi=$2;; *) echo unknown parameter: $1 echo ' Usage: swanrun -input file [-omp n | -mpi n]' echo exit ;; esac shift 2 done # #----------------------------------------------------------------------- # if input file is not given, produce error #----------------------------------------------------------------------- # if [ -z "$input" ]; then echo echo '***ERROR: no name SWAN input file given!' echo echo ' Usage: swanrun -input file [-omp n | -mpi n]' echo exit 1 fi # #----------------------------------------------------------------------- # check whether MPI is available in case of parallel MPI run #----------------------------------------------------------------------- # IFS="${IFS= }"; IFS="${IFS}:" for dir in $PATH; do test -z "$dir" && dir=. if test -f $dir/mpirun; then mpi=1 break fi done if [ $npmpi -gt 1 -a -z "$mpi" ]; then echo echo "***ERROR: MPI is not available!" echo exit 1 fi # #----------------------------------------------------------------------- # check whether machinefile is available (if necessary) #----------------------------------------------------------------------- # # Note: no machinefile is needed on small multi-core shared-memory Linux machine or on SGI platform # os=`uname -s` if [ "$os" = Linux ]; then ncore=`grep -ic ^processor /proc/cpuinfo` if [ $ncore -le 8 ]; then nmf=1 fi fi os=`echo $os | tr "[a-z]" "[A-Z]" | awk '{print substr($0,1,4)}'` if [ "$os" = IRIX ]; then nmf=1 fi if [ $npmpi -gt 1 -a ! -z "$mpi" -a -z "$nmf" ]; then if [ ! -f machinefile -a ! -h machinefile ]; then echo echo "***ERROR: no machinefile is present in current directory!" echo exit 1 fi fi # #----------------------------------------------------------------------- # run SWAN #----------------------------------------------------------------------- # # adapt PATH to ensure a locally present executable is executed PATH=.:$PATH type swan.exe if [ -r $input.swn ]; then orig=n cp $input.swn INPUT if [ $npomp -gt 1 ]; then export OMP_NUM_THREADS=$npomp swan.exe elif [ $npmpi -gt 1 -o ! -z "$mpi" ]; then if [ ! -f swan.exe ]; then ln -s `which swan.exe` swan.exe orig=y fi if [ -z "$nmf" ]; then if [ $npmpi -gt 1 ]; then mpirun -np $npmpi -machinefile machinefile swan.exe else swan.exe fi else mpirun -np $npmpi swan.exe fi else swan.exe fi if [ $npmpi -gt 1 ]; then inode=0 while [ $inode -lt $npmpi ]; do inode=`expr $inode + 1` inode=`echo $inode | awk '{ printf "%03.0f", $0 }'` if [ -f PRINT-$inode ]; then mv PRINT-$inode $input.prt-$inode fi if [ -r Errfile-$inode ]; then mv Errfile-$inode $input.erf-$inode fi done else if [ -f PRINT ]; then mv PRINT $input.prt fi if [ -r Errfile ]; then mv Errfile $input.erf fi fi if [ -r ERRPTS ]; then mv ERRPTS $input.erp fi if [ -f norm_end ]; then cat norm_end fi if [ -h swan.exe -a "$orig" = y ]; then rm -f swan.exe fi rm -f INPUT else echo "file $input.swn does not exist" exit 1 fi #