#!?SHELL_EXECUTION?

#########################################################################
# COPYRIGHT (C) 2003         EDF R&D              WWW.CODE-ASTER.ORG    #
#                                                                       #
# THIS PROGRAM IS FREE SOFTWARE; YOU CAN REDISTRIBUTE IT AND/OR         #
# MODIFY IT UNDER THE TERMS OF THE GNU GENERAL PUBLIC LICENSE AS        #
# PUBLISHED BY THE FREE SOFTWARE FOUNDATION; EITHER VERSION 2 OF THE    #
# LICENSE, OR (AT YOUR OPTION) ANY LATER VERSION.                       #
# THIS PROGRAM IS DISTRIBUTED IN THE HOPE THAT IT WILL BE USEFUL,       #
# BUT WITHOUT ANY WARRANTY; WITHOUT EVEN THE IMPLIED WARRANTY OF        #
# MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SEE THE GNU      #
# GENERAL PUBLIC LICENSE FOR MORE DETAILS.                              #
#                                                                       #
# YOU SHOULD HAVE RECEIVED A COPY OF THE GNU GENERAL PUBLIC LICENSE     #
# ALONG WITH THIS PROGRAM; IF NOT, WRITE TO : EDF R&D CODE_ASTER,       #
#    1 AVENUE DU GENERAL DE GAULLE, 92141 CLAMART CEDEX, FRANCE.        #
#########################################################################

# $Id: sub_script 2075 2006-08-31 16:39:31Z courtois $
# sub_script : ajoute les cartes ncessaires au fichier btc et le soumet.
#              retourne le numro de job
# gestionnaires de batch connu :
#  - LSF

#########################################################################
# rpertoire qui accueille output+error (on ajoute $HOME devant)
FLASH=`egrep '^[ ]*flash_srv[ ]+:' $SCON/config | awk -F' ' '{print $3}'`

# gestionnaire de batch
batch_nom=`egrep '^[ ]*batch_nom[ ]+:' $SCON/config | awk -F' ' '{print $3}'`

# rpertoire temporaire (criture pour tous)
TMP=`egrep '^[ ]*rep_tmp[ ]+:' $SCON/config | awk -F' ' '{print $3}'`

#########################################################################
# arguments
err=-1
if [ $# -eq 2 ]; then
   pr_astk=$1
   fbtc=$2
   err=0
fi

if [ $err -lt 0 ]; then
   echo "usage : sub_script pr_astk fich_btc"
   exit 1
fi

#########################################################################
# temporaire as_exec
jn=$$
if [ -n "$USER" ]; then
   who=$USER
else
   if [ -n "$LOGNAME" ]; then
      who=$LOGNAME
   else
      who=`whoami`
   fi
fi
TMP=$TMP/astk_$who
if [ ! -d $TMP ]; then
   mkdir -p $TMP
fi

# rpertoire flash
FLASH=$HOME/$FLASH
if [ ! -d $FLASH ]; then
   mkdir -p $FLASH
fi

#########################################################################
# paramtre du job
memjob=`egrep '^P[ ]+memjob[ ]+' $pr_astk | awk -F' ' '{print $3}'`
tpsjob=`egrep '^P[ ]+tpsjob[ ]+' $pr_astk | awk -F' ' '{print $3}'`
nomjob=`egrep '^P[ ]+nomjob[ ]+' $pr_astk | awk -F' ' '{print $3}'`
classe=`egrep '^P[ ]+classe[ ]+' $pr_astk | awk -F' ' '{print $3}'`
depart=`egrep '^P[ ]+depart[ ]+' $pr_astk | awk -F' ' '{print $3}'`

# selon le gestionnaire de batch...
if [ $batch_nom = "LSF" ]; then
# complte le script
   ftmp=$TMP/btc_sub.$$
   fmsg=$TMP/msg_sub.$$
   if [ -f $ftmp ]; then
      \rm -f $ftmp
   fi
   if [ -f $fmsg ]; then
      \rm -f $fmsg
   fi
   echo "#BSUB -J $nomjob"            >  $ftmp
   echo "#BSUB -c $tpsjob"            >> $ftmp
   echo "#BSUB -M $memjob"            >> $ftmp
   echo "#BSUB -e $FLASH/$nomjob.e%J" >> $ftmp
   echo "#BSUB -o $FLASH/$nomjob.o%J" >> $ftmp
   if [ -n "$classe" ]; then
      echo "#BSUB -q $classe"         >> $ftmp
   fi
   if [ -n "$depart" ]; then
      echo "#BSUB -b $depart"         >> $ftmp
   fi
   cat $fbtc                          >> $ftmp
# initialisation de l'environnement LSF
   batch_ini=`egrep '^[ ]*batch_ini[ ]+:' $SCON/config | awk -F' ' '{print $3}'`
   . $batch_ini
# soumission
   batch_sub=`egrep '^[ ]*batch_sub[ ]+:' $SCON/config | awk -F' ' '{print $3}'`
   $batch_sub < $ftmp 1> $fmsg 2>&1
   iret=$?
   if [ $iret -ne 0 ]; then
      echo "Failure during submitting"
      exit 3
   else
      cat $fmsg | grep "Job" | tr "<>" "  " | tr '\012' ' ' \
         | sed -e 's/ default//' -e 's/Job/JOBID=/' -e 's/ is submitted to queue/ QUEUE=/' -e 's/= /=/' -e 's/\.//'
   fi
else
   if [ $batch_nom = "PBS" ]; then
      # temps en secondes
      tpsjob=`egrep '^A[ ]+tpmax[ ]+' $pr_astk | awk -F' ' '{print $3}'`
   # complte le script
      ftmp=$TMP/btc_sub.$$
      fmsg=$TMP/msg_sub.$$
      if [ -f $ftmp ]; then
         \rm -f $ftmp
      fi
      if [ -f $fmsg ]; then
         \rm -f $fmsg
      fi
      # heure de depart : [[MM]DD]HHmm
      depart=`echo $depart | sed s/://g`
      head -1 $fbtc                           >  $ftmp
      echo "#PBS -N $nomjob"                  >> $ftmp
      echo "#PBS -l cput=$tpsjob,mem=$memjob" >> $ftmp
      if [ -n "$classe" ]; then
         echo "#PBS -q $classe"                  >> $ftmp
      fi
      if [ -n "$depart" ]; then
         echo "#PBS -a $depart"                  >> $ftmp
      fi
      # l'output et l'error s'appelleront $nomjob.o$jobid (ou .e)
      # dans le rpertoire o le qsub est fait
      #echo "#PBS -e $FLASH/$nomjob.e%J"       >> $ftmp
      #echo "#PBS -o $FLASH/$nomjob.o%J"       >> $ftmp
      tail +2 $fbtc                           >> $ftmp
   # soumission
      batch_sub=`egrep '^[ ]*batch_sub[ ]+:' $SCON/config | awk -F' ' '{print $3}'`
      cd $FLASH
      $batch_sub < $ftmp 1> $fmsg 2>&1
      iret=$?
      if [ $iret -ne 0 ]; then
         echo "Failure during submitting"
         exit 3
      else
         awk -F'.' '{printf("JOBID=%s QUEUE=unknown\n",$1);}' $fmsg
      fi
   else
      if [ $batch_nom = "SunGE" ]; then
      # initialisation de l'environnement Sun Grid Engine
         batch_ini=`egrep '^[ ]*batch_ini[ ]+:' $SCON/config | awk -F' ' '{print $3}'`
         . $batch_ini
         # temps en secondes
         tpsjob=`egrep '^A[ ]+tpmax[ ]+' $pr_astk | awk -F' ' '{print $3}'`
      # complte le script
         ftmp=$TMP/btc_sub.$$
         fmsg=$TMP/msg_sub.$$
         if [ -f $ftmp ]; then
            \rm -f $ftmp
         fi
         if [ -f $fmsg ]; then
            \rm -f $fmsg
         fi
         # heure de depart : [[MM]DD]HHmm -->  voir MM et DD obligatoires ?
         depart=`echo $depart | sed s/://g`
         echo "#$ -N $nomjob"                         >  $ftmp
         echo "#$ -l s_cpu=$tpsjob,s_rss="$memjob"K" >> $ftmp
         echo "#$ -e $FLASH/$nomjob.e\$JOB_ID"        >> $ftmp
         echo "#$ -o $FLASH/$nomjob.o\$JOB_ID"        >> $ftmp
         if [ -n "$classe" ]; then
            echo "#$ -q $classe"                      >> $ftmp
         fi
         if [ -n "$depart" ]; then
            echo "#$ -a $depart"                      >> $ftmp
         fi
         cat $fbtc                                    >> $ftmp
      # soumission
         batch_sub=`egrep '^[ ]*batch_sub[ ]+:' $SCON/config | awk -F' ' '{print $3}'`
         cd $FLASH
         $batch_sub -S /bin/sh < $ftmp 1> $fmsg 2>&1
         iret=$?
         if [ $iret -ne 0 ]; then
            echo "Failure during submitting."
            cat $fmsg
            exit 3
         else
            #Your job 7 ("mon_job") has been submitted.
            awk -F' ' '{printf("JOBID=%s QUEUE=unknown\n",$3);}' $fmsg
         fi
      else
      # gestionnaire inconnu
         echo "Batch scheduler unknown"
         exit 2
      fi
   fi
fi

\rm -f $fmsg $ftmp
exit 0
