#!/bin/sh
# Script de soumission Loadleveler, job MPI
# CRIHAN v 3.00 - janvier 2006
# crihan-sci@crihan.fr
#
# Nom du job
# @ job_name = resub
#
# Nom du fichier de sortie standard
# @ output = $(job_name).o$(jobid)
#
# Nom du fichier d'erreur  standard
# @ error  = $(job_name).e$(jobid)
#
# Type du job
# @ cri_job_type = mpi
#
# Nombre de processus MPI
# @ cri_total_tasks = 16 
#
# temps de restitution (heures[:minutes[:secondes]])
# @ wall_clock_limit = 48:00:00
#
# Memoire maximale par processus (mb, gb, mw, gw,..)
# @ data_limit = 1000mb
#
# Stack maximale par processus (mb)
# @ stack_limit = 256mb 
#
# Repertoire de travail
# @ cri_initialdir = /work/crihan/pbousq01/jobs_mpi_280708 
# @ cri_finaldir = /work/crihan/pbousq01/jobs_mpi_280708
#
# Politique d'envoi des mels
# @ notification = complete
#
# Adresse d'envoi des mels
# @ notify_user = pbm@crihan.fr
#
# Obligatoire
# @ queue

###
### Commandes utilisateur
###

# On lance ce script depuis le "cri_initialdir" 
# qui sera le repertoire de travail dans lequel
# la sequence de jobs s'executera. 
# L'input du premier job doit s'y trouver.
# Ne pas y placer de fichiers inutiles. 
# Il est conseille de changer de repertoire
# "cri_initialdir" d'une sequence de jobs a une autre.

cd $CRI_INITDIR

# L'indice du job (iteration) est place dans un fichier step.dat
# cree par le script.
# Si on ne modifie pas la variable RESTART, le nombre de jobs executes 
# sera egal a MAXJOBS.
# En cours d'execution, pour stopper l'enchainement des jobs,
# il suffit d'editer le script pour y mettre 
# "RESTART=NO" a la place de "RESTART=YES"
# puis de le sauvegarder : le calcul en cours se terminera 
# et ne lancera pas d'autre job.
# Dans ce cas, ne pas oublier de reinitialiser RESTART a la valeur YES
# si on lance le meme script pour une nouvelle sequence.
 
if ! test -f step.dat; then echo 1 > step.dat; fi
isub0=`cat step.dat`
echo Run $isub0
 
###############################
RESTART=YES

# Nom de ce fichier
SCRIPT=ll_mpi_recursive

# Nombre maximal de jobs
MAXJOBS=4

# Execution du calcul 
./a.out < input_reprise.dat > a.log 

# Repertoire de sauvegarde du calcul
OUTPUT=RESULT                    
mkdir -p $OUTPUT.$isub0
mv a.log $OUTPUT.$isub0              # Rangement de ce qui ne sert pas pour le job suivant
cp input_reprise.dat $OUTPUT.$isub0  # Copie du ou des fichier(s) de reprise 
################################ 
 
# On incremente l'indice du run
isub=`expr $isub0 + 1`
echo $isub > step.dat
 
# On lance le run suivant
if test $isub -le $MAXJOBS && test `grep ^RESTART $SCRIPT | sed 's/.*=//'` = YES
then
	llsubmit $SCRIPT 
else
	echo DONE
	mv step.dat step.dat_old
fi
