#! /bin/sh
NAME=VP
if [ $# -ne 1 ] && [ $# -ne 3 ];
then
  echo "Usage: \"$0 CLASS [MODE]\""
  echo "   CLASS:             S, W, or A"
  echo "   MODE:  -u:         unformatted data files"
  #echo "          -v:         verbose mode"
  #echo "          -uv or -vu: unformatted data files + verbose mode"
  echo  "-i		Numero de iteracion"
  exit
fi

if [ $# -eq 3 ];
then
  MODE=$2
else
  MODE=default
fi

#PID=$$
PID=0
CLASS=$1
LOG_FILE=____LOG_$NAME.$PID
ERR=____ERR.$PID
#The default script behavior is nonverbose
VERBOSE=0
# the default data file format is ASCII
ASCII=1
ITER=0
case $MODE  in
  -i        )  ITER=$3;				  ;;
  -u        )  ASCII=0;                           ;;
  -v        )  VERBOSE=1                          ;;
  -vu | -uv )  ASCII=0; VERBOSE=1                 ;;
  default   )                                     ;;
  *         )  echo Error, wrong mode $MODE; exit ;;
esac

if [ $VERBOSE -eq 1 ];
then
  THROWIT="tee"
else
  THROWIT="cat >"
fi

case $CLASS in 
  S )   DEPTH=3
        BTXSIZE=12;  BTYSIZE=12;  BTZSIZE=12
        MGXSIZE=32;  MGYSIZE=32;  MGZSIZE=32
        FTXSIZE=64;  FTYSIZE=64;  FTZSIZE=64
        ;;
  W )   DEPTH=3
        BTXSIZE=24;  BTYSIZE=24;  BTZSIZE=24
        MGXSIZE=64;  MGYSIZE=64;  MGZSIZE=64
        FTXSIZE=128; FTYSIZE=128; FTZSIZE=32
        ;;
  A )   DEPTH=3
        BTXSIZE=64;  BTYSIZE=64;  BTZSIZE=64
        MGXSIZE=256; MGYSIZE=256; MGZSIZE=256
        FTXSIZE=256; FTYSIZE=256; FTZSIZE=128
        ;;
  B )   DEPTH=6
        BTXSIZE=102; BTYSIZE=102; BTZSIZE=102
        MGXSIZE=256; MGYSIZE=256; MGZSIZE=256
        FTXSIZE=512; FTYSIZE=256; FTZSIZE=256
        ;;
  C )   DEPTH=9
        BTXSIZE=162; BTYSIZE=162; BTZSIZE=162
        MGXSIZE=512; MGYSIZE=512; MGZSIZE=512
        FTXSIZE=512; FTYSIZE=512; FTZSIZE=512
        ;;
  * )   echo Error, wrong class; exit ;;
esac
    
WIDTH=3
MAX_ITER=`expr $WIDTH \* $DEPTH`
#ITER=0
    
echo Running GridNPB3.0-SHF-SER code $NAME                     
echo Class is $CLASS                       
echo Number of iterations is $MAX_ITER     
echo Names of executables are \{bt,mg,ft\  echo "          -uv or -vu: unformatted data files + verbose mode"}.$CLASS     
    
set SECONDS=0
#while :
#do

#if [ ${ITER} -eq `expr $MAX_ITER - 1` ]
if [ $ITER -ge 3 ]
then

echo Iteration number $ITER, code ft.$CLASS -- being verified
#The last node in the graph does the verification test
chmod +x ft.$CLASS
eval "(./ft.$CLASS <<-EOF; echo $? > $ERR;) | $THROWIT $LOG_FILE
        $ASCII
	$NAME
	$CLASS
	$ITER
	$WIDTH
	$DEPTH
	$PID
	$VERBOSE
	EOF"
cp $NAME.$ITER.$PID.IN $NAME.`expr $ITER + 1`.$PID.IN
#rm -f $NAME.$ITER.$PID.IN

ERROR_STATUS=`cat $ERR`
LINE_COUNT=`cat $LOG_FILE | grep "Verification successful" | wc -l`

####
#if [ $LINE_COUNT -eq 0 ] || [ $ERROR_STATUS -ne 0 ];
#then
#  echo Failure to verify last iteration of benchmark $NAME.$CLASS
#else
#  echo Benchmark $NAME.$CLASS completed successfully
#fi

#echo Turnaround time: $SECONDS seconds

#rm -f $LOG_FILE $ERR

###


else

#==========================FT=================================
chmod +x ft.$CLASS
  echo Iteration number $ITER, code ft.$CLASS -- no verification being performed
	
eval "(./ft.$CLASS <<-EOF ) | $THROWIT /dev/null
        $ASCII
	$NAME
	$CLASS
	$ITER
	$WIDTH
	$DEPTH
	$PID
	$VERBOSE
	EOF"

  cp $NAME.$ITER.$PID.IN $NAME.`expr $ITER + 1`.$PID.IN
  #rm -f $NAME.$ITER.$PID.IN
  ITER=`expr $ITER + 1`
  
  ####
  #echo Interpolate ft solution onto grid
 # eval "(./ft.$CLASS<<-EOF ) | $THROWIT /dev/null
#	$ASCII
#	s  
#	$NAME.$ITER.$PID.IN
#	$FTXSIZE $FTYSIZE SFTZSIZE
#	1
#	$NAME.`expr $ITER - 1`.$PID
#	$MGXSIZE $MGYSIZE $MGZSIZE
#	EOF"
    #rm -f $NAME.`expr $ITER - 1`.$PID

fi
