Index: TOOLS/PACK_IPSL/DEM_utilities.sh
===================================================================
--- TOOLS/PACK_IPSL/DEM_utilities.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/DEM_utilities.sh	(revision 1822)
@@ -132,2 +132,382 @@
 }
 
+# gpdebug : fonctions de gestion des erreurs ########################################################
+function DEM_errorSend {
+    # Envoi d'un msg d'erreur au programme principal. 
+    # Suppression des processus du programme principal au fils emetteur de l'erreur
+    
+    echo "########## DEM_errorSend : Error detected ==> Sending an error..."
+    
+    msgToSend=${1}
+    listPIDtoKill=${2}
+    if [ "x${listPIDtoKill}" == "x" ]
+    then
+        listPIDtoKill=${listPID}
+    fi
+    # --------------------------------
+    # Verif du format de listPIDtoKill
+    # --------------------------------
+    listPIDformat='^[[:digit:]]*\([[:blank:]][[:digit:]]*\)*$'
+    isListPIDformatOK=`echo ${listPIDtoKill} | grep -e ${listPIDformat} | wc -l `
+    if [ "x$isListPIDformatOK" == "x0" ]
+    then
+       echo "	   Attention : le format de la liste de PID est incorrecte :"
+       echo "	   $listPIDtoKill"
+       kill -TERM ${listPID}
+    fi
+
+    
+    # -----------------------------------
+    # Verif du Format du ${msgToSend}
+    # -----------------------------------
+    errorFormat='^[^:]*\.sh:[[:digit:]]*:.*$'
+    isErrorFormatOK=`echo ${msgToSend} | grep -e ${errorFormat} | wc -l `
+    if [ "x$isErrorFormatOK" == "x0" ]
+    then
+       echo "      Attention : le format du message d'erreur est incorrect :"
+       echo "      $msgToSend"
+    fi
+    
+    # Envoi du msg dans le fichier d'erreur
+    # -------------------------------------
+    #    test sur la var contenant le nom du fichier d'erreur
+    if [ "x${errorMsgFile}" != "x${PWD}/errorMsg.txt" ]
+    then
+        echo "      Le fichier d'erreur a un nom incorrect"
+    fi
+    
+    echo $msgToSend > $errorMsgFile
+    
+    echo "killing ${listPIDtoKill}"
+    kill -TERM ${listPIDtoKill}
+    
+    exit -1 # utile : sinon le script qui appelle cette fonction continue un peu l'exec --> pas propre
+}
+
+function DEM_errorReceive {
+    # Récupération et affichage du msg d'erreur emis par un processus fils 
+    
+    # Lecture du msg dans le fichier d'erreur
+    # ---------------------------------------
+    #    test sur la var contenant le nom du fichier d'erreur
+    if [ "x${errorMsgFile}" != "x${PWD}/errorMsg.txt" ]
+    then
+       echo "      Le fichier d'erreur a un nom incorrect"
+       exit -1	
+    fi
+    
+    #    Lecture    
+    errorReceived=`cat $errorMsgFile `
+    
+    # -----------------------------------
+    # Verif du Format du ${errorReceived}
+    # -----------------------------------
+    errorFormat='^[^:]*\.sh:[[:digit:]]*:.*$'
+    isErrorFormatOK=`echo ${errorReceived} | grep -e ${errorFormat} | wc -l `
+    if [ "x$isErrorFormatOK" == "x0" ]
+    then
+       echo "      Attention : le format du message d'erreur est incorrect :"
+       echo "      $errorReceived"
+       exit -1
+    fi
+    
+    echo "########## DEM_errorReceive : $SCRIPT_NAME received an error..."
+    echo $errorReceived
+    
+    # echo "Current PID:$$"
+    # echo "FatherPID:$FatherPID"
+    # On fait un bilan de la progression seulement si c'est une erreur bloquante : lorsque le proc pere est tue.
+    if [ "x${FatherPID}" == "x$$" ]
+    then
+        ./showListsProgress.sh $FileParam
+    fi
+       
+    exit -1 
+}
+
+# Verification de la version de nco chargee
+function check_nco_version
+{
+   # nom du présent prog (pour gestion des erreurs) 
+   PROGNAME="DEM_utilities.sh" #########
+   . /etc/profile 
+   module list >& myModuleList.txt
+   
+   if [ "x$?" != "x0" ]
+   then
+       # echo "La commande module list a rencontre un pb !"
+       DEM_errorSend "${PROGNAME}:${LINENO}:La commande module list a rencontre un pb !"
+   fi
+   
+   if [ ! -e myModuleList.txt ]
+   then
+       # echo "Le fichier 'myModuleList.txt'  n existe pas"
+       DEM_errorSend "${PROGNAME}:${LINENO}:Le fichier 'myModuleList.txt' n'existe pas."
+   fi   
+   
+   # Presence de la chaine "n) nco/" ou n est un nombre  
+   ncoLines=` grep -e '[[:digit:]]*) nco/' myModuleList.txt `
+   # ncoLines=` grep -e '[[:digit:]]*) nco/' moduleList.txt `
+   # echo "ncoLines=${ncoLines}|"
+   # echo "----------------------------------------"
+
+   # Plus besoin du myModuleList.txt
+   rm -f myModuleList.txt
+ 
+   # La chaine "nco" est remplacee par le caractere "#"
+   temp1=`echo $ncoLines | sed 's;nco;#;g' `
+   # echo "$temp1"
+   # echo "----------------------------------------"
+
+   # On supprime tout ce qui n'est pas "n) #/..." avec n un nombre et "..." une chaine sans blanc 
+   temp2=`echo $temp1 | sed 's;[[:blank:]]*[[:digit:]]*) [^#][^[:blank:]]*;;g' `
+   # echo "$temp2"
+   # echo "----------------------------------------"
+
+
+   # Recuperation du numero de version du nco au format x.y.z
+   # C'est une liste de num de version (a priori ici, il pourrait y en avoir plusieurs, 
+   # mais dans les faits, les nco s'excluent les uns les autres)
+   temp3=`echo $temp2 | sed 's;[[:blank:]]*[[:digit:]]*) #/;|;g' `
+   temp3=`echo $temp3 | sed 's;^|;;g' `
+   temp3=`echo $temp3 | sed 's;|; ;g' `
+   # echo "$temp3"
+   # echo "----------------------------------------"
+   
+   # comptage du nombre de nco
+   versionNCO=
+   count=0
+   for ver in $temp3
+   do
+     # echo "ver=$ver"
+     versionNCO=$ver
+     count=$(( $count + 1 ))
+   done
+   # echo "count=$count"
+   
+   # si aucun nco n'est charge, on sort.
+   if [ $count -eq 0 ]
+   then
+     # echo "nco pas charge"
+     DEM_errorSend "${PROGNAME}:${LINENO}:Aucun nco n'est charge"
+   fi
+   
+   # si plus d'un nco sont charges, on sort (n'arrive jamais en pratique).
+   if [ $count -gt 1 ]
+   then
+     DEM_errorSend "${PROGNAME}:${LINENO}:Au moins 2 versions de nco sont chargees"
+   fi
+   
+   # Si un seul nco est charge, on supprime les "." de son numero de version (x.y.z ==> xyz)
+   verNCOnumber=`echo $versionNCO | sed 's;[^[:digit:]];;g' `
+   # echo "versionNCO=$versionNCO"
+   
+   # On verifie que xyz est un nombre a 3 chiffres
+   if ! [[ "$verNCOnumber" =~ ^[0-9]\{3\}$ ]]
+   then
+      # echo "verNCOnumber is not a number"
+      DEM_errorSend "${PROGNAME}:${LINENO}:La variable verNCOnumber n'est pas un nombre --> $verNCOnumber"
+   fi
+   
+   
+   # On verifie que le num de version est >= 4.1.0
+   if [ $verNCOnumber -lt 410 ]
+   then
+       # echo "version < 4.1.0 . STOP."
+       DEM_errorSend "${PROGNAME}:${LINENO}:La version de nco < 4.1.0 ==> $versionNCO"
+   fi
+   
+   echo "La version de nco chargee est : $versionNCO"
+   
+}
+
+function prepareMonitoringDir
+{
+   # nom du présent prog (pour gestion des erreurs) 
+   PROGNAME="DEM_utilities.sh" #########
+   
+   MonitoringDirDefined=`echo $MonitoringDir | grep "SuiviListes" | wc -l `
+   if [ "x${workFlowDirDefined}" == "x0" ]
+   then
+      DEM_errorSend "${PROGNAME}:${LINENO}:Le repertoire de suivi est mal defini."
+   fi
+   
+   #  Si l'option de forcage de toute les etapes est activee,
+   #  on vide le fichier
+   if [ "x${execEveryStep}" == "x1" ]
+   then
+      echo "${MonitoringDir}:destruction..."
+      rm -rf ${MonitoringDir}
+   fi
+   
+   # Si le rep de suivi n'existe pas, on le créé.
+   if [ ! -d ${MonitoringDir} ]
+   then
+      mkdir ${MonitoringDir}
+   fi
+
+}
+
+function generalMonitoring
+{  
+   # Si l'etape courante a ete executee (correctement), on sort du script appelant cette fonction
+   
+   # nom du présent prog (pour gestion des erreurs) 
+   PROGNAME="DEM_utilities.sh" #########
+   
+   currentStep=${1}
+   
+   stepMsg=`echo $currentStep | grep -e '^.*\.sh-->OK$' | wc -l `
+   if [ "x{stepMsg}" == "x0" ]
+   then
+      DEM_errorSend "${PROGNAME}:${LINENO}:Le nom de l'etape courante n'est pas au bon format !"
+   fi
+   
+   currentStepScriptName=`echo $currentStep | sed 's;\.sh-->OK;;' `
+   
+   # si le fichier de suivi general n'existe pas, il n'y a pas eu de passage de script de liste avant.
+   # ==> on sort normalement
+   if [ ! -e ${generalMonitorFile} ]
+   then
+      return 0
+   fi
+   
+   currentStepPassed=`grep ${currentStep} ${generalMonitorFile} | wc -l `
+      
+   if [ "x${currentStepPassed}" != "x0" ]
+   then
+      echo "${currentStepScriptName} a deja ete passee ..."
+      exit 0
+   fi
+
+}
+
+function createListingMonitoring_Check
+{
+   
+   # La presence de createListingOK.txt dans le sous rep (associe a un rep de param_AC.txt) du rep de suivi
+   # indique que le bon deroulement de l'action de create_listing.sh sur le repertoire de param_AC.txt
+   DIR=$(basename ${1})   
+   MonitSubDir=${MonitoringDir}/${DIR}
+   
+   createListingOK=${MonitSubDir}/createListingOK.txt
+   
+   if [ -e $createListingOK ]
+   then
+      echo "create_listing a deja ete passe pour ${DIR}..."
+      exit 0      
+   fi   
+
+}
+
+function createListingMonitoring_OK
+{
+   
+   # A partir du nom du rep courant (contenant des res de simulation), creation d'un sous rep de suivi
+   DIR=$(basename ${1})
+   MonitSubDir=${MonitoringDir}/${DIR}
+   mkdir $MonitSubDir
+   
+   # dans ce sous rep de suivi, creation d'un fichier dont la presence indique le bon deroulement
+   # de l'action de create_listing.sh sur le repertoire en argument (celui contenant des simus) 
+   createListingOK=${MonitSubDir}/createListingOK.txt  
+   touch $createListingOK  
+
+}
+
+function simuMonitoring_check
+{
+   # nom du présent prog (pour gestion des erreurs) 
+   PROGNAME="DEM_utilities.sh" #########
+   
+   currentStep=${1}
+   config=${2}
+   # echo "######### simuMonitoring_check --> config:$config"
+   # former le nom du fichier de suivi de la simu a partir de "config"
+   getSimuMonitFileName $config
+   
+   # si le fichier de suivi de simu n'existe pas, il n'y a pas eu de passage de script de liste avant.
+   # ==> on sort normalement
+   if [ ! -e ${simuMonitoringFile} ]
+   then
+      return 0
+   fi
+   
+   stepMsg=`echo $currentStep | grep -e '^.*\.sh-->OK$' | wc -l `
+   if [ "x{stepMsg}" == "x0" ]
+   then
+      DEM_errorSend "${PROGNAME}:${LINENO}:Le nom de l'etape courante n'est pas au bon format !"
+   fi
+   
+   currentStepScriptName=`echo $currentStep | sed 's;\.sh-->OK;;' `
+   
+   currentStepPassed=`grep ${currentStep} ${simuMonitoringFile} | wc -l `
+   
+   # echo "######### simuMonitoring_check --> currentStep:$currentStep"
+   # echo "######### simuMonitoring_check --> simuMonitoringFile:$simuMonitoringFile"
+   # echo "######### simuMonitoring_check --> currentStepPassed:$currentStepPassed"
+   if [ "x${currentStepPassed}" != "x0" ]
+   then
+      echo "${currentStepScriptName} a deja ete passee ..."
+      # echo "-----------------------------------------------------------------------------"
+      exit 0
+   fi
+   
+}
+
+function simuMonitoring_OK
+{
+   currentStep=${1}
+   config=${2}
+   # echo "######### simuMonitoring_OK --> config:$config"
+   # former le nom du fichier de suivi de la simu a partir de "config"
+   getSimuMonitFileName $config
+   
+   echo $currentStep >> $simuMonitoringFile
+}
+
+function getSimuMonitFileName
+{
+   # nom du présent prog (pour gestion des erreurs) 
+   PROGNAME="DEM_utilities.sh" #########
+   
+   config=${1}
+   # echo "######### getSimuMonitFileName --> config:$config"
+   configBaseName=$(basename ${config})
+      
+   # On cherche dans quel sous rep du rep de suivi on va chercher le fichier de suivi de la simu
+   listMonitSubDir=`ls -l ${MonitoringDir} | grep -e '^d' | awk '{print $NF}' `
+   
+   # echo "######### getSimuMonitFileName --> listMonitSubDir:$listMonitSubDir"
+   
+   searchedDir=
+   for dir in $listMonitSubDir
+   do
+       found=`echo $config | grep "/${dir}/" | wc -l `
+       if [ "x${found}" != "x0" ]
+       then
+          searchedDir=$dir
+	  break
+       fi
+   done
+   
+   if [ "x$searchedDir" == "x" ]
+   then
+      DEM_errorSend "${PROGNAME}:${LINENO}:Sous rep de suivi non trouve !"
+   fi
+   
+   # On forme le nom du fichier de suivi pour la simu courante
+   # ... on debarasse config du fichier de config
+   repConfig=$(dirname $config)
+   # ... on supprime du path tout ce qui est devant le nom du sous rep
+   simu=`echo $repConfig | sed "s;^.*/$searchedDir;$searchedDir;" `
+   # ... remplacement des "/" par des "_#_" (les "/" ne sont pas acceptes dans les noms de fichiers)
+   simuMonitoringFile=`echo $simu | sed 's;/;_#_;g' `
+   # ... On rajoute un ".txt" a la fin du nom de fichier
+   simuMonitoringFile="${simuMonitoringFile}.txt"
+   
+   simuMonitoringFile="${MonitoringDir}/${searchedDir}/${simuMonitoringFile}"
+}
+
+# gpdebug : fin #####################################################################################
+
Index: TOOLS/PACK_IPSL/archive_debug.sh
===================================================================
--- TOOLS/PACK_IPSL/archive_debug.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/archive_debug.sh	(revision 1822)
@@ -22,4 +22,8 @@
 
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+simuMonitoring_check "$MonitoringInfo" "$config_card"
 
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
@@ -167,2 +171,5 @@
 
 cd ${EXE_DIR}
+
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+simuMonitoring_OK "$MonitoringInfo" "$config_card"
Index: TOOLS/PACK_IPSL/archive_restart.sh
===================================================================
--- TOOLS/PACK_IPSL/archive_restart.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/archive_restart.sh	(revision 1822)
@@ -39,4 +39,8 @@
 
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+simuMonitoring_check "$MonitoringInfo" "$config_card"
 
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
@@ -160,2 +164,5 @@
 
 cd ${EXE_DIR}
+
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+simuMonitoring_OK "$MonitoringInfo" "$config_card"
Index: TOOLS/PACK_IPSL/calcul_size_simul.sh
===================================================================
--- TOOLS/PACK_IPSL/calcul_size_simul.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/calcul_size_simul.sh	(revision 1822)
@@ -17,4 +17,9 @@
 SCRIPT_NAME=$(basename ${0} )
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+simuMonitoring_check "$MonitoringInfo" "$config_card"
+
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
 
@@ -44,3 +49,7 @@
 
 fi
+
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+simuMonitoring_OK "$MonitoringInfo" "$config_card"
+
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
Index: TOOLS/PACK_IPSL/create_config_card.sh
===================================================================
--- TOOLS/PACK_IPSL/create_config_card.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/create_config_card.sh	(revision 1822)
@@ -25,5 +25,14 @@
 SCRIPT_NAME=$(basename ${0} )
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+generalMonitoring "$MonitoringInfo"
+
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
+
+# gpdebug : on augmente la liste des proc à détruire en cas d'erreur bloquante du présent proc
+export listPID="$$ ${listPID}" #########
+
 cd ${JOB_DIR}
 # ----
@@ -212,4 +221,7 @@
 done
 
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+echo $MonitoringInfo >> $generalMonitorFile
+
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
 
Index: TOOLS/PACK_IPSL/create_listing.sh
===================================================================
--- TOOLS/PACK_IPSL/create_listing.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/create_listing.sh	(revision 1822)
@@ -14,6 +14,14 @@
 
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout, sinon on sort #########
+createListingMonitoring_Check "$REPtoList"
+
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
 
+# gpdebug : on augmente la liste des proc à détruire en cas d'erreur bloquante du présent proc
+export listPID="$$ ${listPID}" #########
+
+echo "gpdebug : REPtoList=$REPtoList" # gpdebug : a virer
 find $REPtoList -printf "%y %s %p \n" >> ${IGCM_DEM}/Listing.txt
 
@@ -31,4 +39,7 @@
 
 
+# gpdebug : le script n'a pas rencontre d'erreur. On créé un fichier de suivi pour create_listing dans le rep de suivi ##########
+createListingMonitoring_OK "$REPtoList"
+
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
 
Index: TOOLS/PACK_IPSL/enlarge_my_files.sh
===================================================================
--- TOOLS/PACK_IPSL/enlarge_my_files.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/enlarge_my_files.sh	(revision 1822)
@@ -89,4 +89,39 @@
 }
 
+# gpdebug : pour test showPackProgress.sh *************************
+export RANDOM=$$
+
+function gives_0_or_1
+{
+   bit=-1
+   let "bit = RANDOM % 2"
+   echo $bit
+}
+
+resultCmd=
+# gpdebug : ****************************** fin ********************
+
+
+#********** gpdebug : mesure d'intervalles de temps ***************
+function getDateMilliSeconds
+{
+   test=`date +%s%N`
+   testnum=${#test}
+   millisec=${test:0:$testnum-6}
+   echo "$millisec"
+}
+
+function getTimeDiffSeconds
+{
+   startTimeMilliSec=$1
+   endTimeMilliSec=$( getDateMilliSeconds )
+   
+   diffMilliSec=$(( $endTimeMilliSec - $startTimeMilliSec ))
+   
+   diffSeconds=$(awk 'BEGIN { print '$diffMilliSec'/'1000' }')
+   echo "$diffSeconds"  
+
+}
+# gpdebug : ****************************** fin ********************
 #------------------------------------------------------
 for set in $( ls $PATH_SIMU/output_ncrcat/*list ) ; do
@@ -158,9 +193,16 @@
 	# Try 2 times before fire "FAILED"
 	ncrcatcmd=ncrcat
-	ncrcatoptions="--md5_digest"
-#	ncrcatoptions=""
-
-	cat $set | $ncrcatcmd $ncrcatoptions -O -x -v $varstoexclude -o $outputfile > $logfile 2>&1
+#	ncrcatoptions="--md5_digest"
+	ncrcatoptions=""
+
+	startTime=$( getDateMilliSeconds ) # gpdebug : time
+	cat $set | $ncrcatcmd $ncrcatoptions -O -x -v $varstoexclude -o $outputfile > $logfile 2>&1 # gpdebug : a retablir
+	meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
+	
+	# resultCmd=$( gives_0_or_1 )
+	# resultCmd=1
+	# if [ $resultCmd -eq 0 ] ; then
 	if [ $? -eq 0 ] ; then
+	        sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 		datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 		echo "DONE ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
@@ -169,6 +211,12 @@
 	else
 		# Add --md5_digest
-		cat $set | $ncrcatcmd $ncrcatoptions -O -x -v $varstoexclude -o $outputfile > $logfile 2>&1
+		startTime=$( getDateMilliSeconds ) # gpdebug : time
+		cat $set | $ncrcatcmd $ncrcatoptions -O -x -v $varstoexclude -o $outputfile > $logfile 2>&1 # gpdebug : a retablir
+		meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
+	        # resultCmd=$( gives_0_or_1 )
+		# resultCmd=1
+	        # if [ $resultCmd -eq 0 ] ; then
 		if [ $? -eq 0 ] ; then
+		        sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 			datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 			echo "DONE ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
@@ -178,9 +226,9 @@
 			datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 			echo "====> FAILED at try #$nbtries" 
-			echo "FAILED ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
+			echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; cat $set | $ncrcatcmd $ncrcatoptions -O -x -v '$varstoexclude' -o $outputfile ; $logfile ; $extratar" >> $statusfile
 			if [ $nbtries -ge $maxtries ] ; then
 				echo "====> DELEGATE to tar command after $nbtries tries (maxtries=$maxtries)"
 				echo "DELEGATE to tar command after $nbtries tries (maxtries=$maxtries)" >> $statusfile
-				cp $set $PATH_SIMU/output_tar
+				# cp $set $PATH_SIMU/output_tar # gpdebug : a retablir
 			fi
 		fi
@@ -238,6 +286,6 @@
 	# Waiting for CCRT command
 	tarcmd=tar
-	taroptions="--format=posix -W -cf"
-	
+#	taroptions="--format=posix -W -cf"
+	taroptions="--format=posix -cf"
 	cd $dirinputfile
 
@@ -248,7 +296,12 @@
 	    
 # 	#-----------------------------------
-
-	$tarcmd $taroptions $outputfile --dereference --files-from $set.local > $logfile 2>&1
+        startTime=$( getDateMilliSeconds ) # gpdebug : time
+	$tarcmd $taroptions $outputfile --dereference --files-from $set.local > $logfile 2>&1 # gpdebug : a retablir
+	meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
+	
+	# resultCmd=$( gives_0_or_1 )
+	# if [ $resultCmd -eq 0 ] ; then
 	if [ $? -eq 0 ] ; then
+	    sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
@@ -258,5 +311,5 @@
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "====> FAILED at try #$nbtries" 
-	    echo "FAILED ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
+	    echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
 
 	fi
@@ -314,11 +367,17 @@
 	# Waiting for CCRT command
 	tarcmd=tar
-	taroptions="--format=posix -W -cf"
-	
+#	taroptions="--format=posix -W -cf"
+	taroptions="--format=posix -cf"
 	cd $dirin1
 #	ls
 	
-	$tarcmd $taroptions $outputfile --dereference --files-from $set > $logfile 2>&1
+	startTime=$( getDateMilliSeconds ) # gpdebug : time
+	$tarcmd $taroptions $outputfile --dereference --files-from $set > $logfile 2>&1 # gpdebug : a retablir
+	meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
+	
+	# resultCmd=$( gives_0_or_1 )
+	# if [ $resultCmd -eq 0 ] ; then
 	if [ $? -eq 0 ] ; then
+	    sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
@@ -328,5 +387,5 @@
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "====> FAILED at try #$nbtries" 
-	    echo "FAILED ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
+	    echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
 
 	fi
@@ -382,11 +441,17 @@
 	# Waiting for CCRT command
 	tarcmd=tar
-	taroptions="--format=posix -W -cf"
-	
+#	taroptions="--format=posix -W -cf"
+	taroptions="--format=posix -cf"
 	cd $dirin1
 #	ls
-	
-	$tarcmd $taroptions $outputfile --dereference --files-from $set > $logfile 2>&1
+
+	startTime=$( getDateMilliSeconds ) # gpdebug : time
+	$tarcmd $taroptions $outputfile --dereference --files-from $set > $logfile 2>&1 # gpdebug : a retablir
+	meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
+	
+	# resultCmd=$( gives_0_or_1 )
+	# if [ $resultCmd -eq 0 ] ; then
 	if [ $? -eq 0 ] ; then
+	    sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "DONE ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set); $logfile" >> $statusfile
@@ -396,5 +461,5 @@
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "====> FAILED at try #$nbtries" 
-	    echo "FAILED ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
+	    echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $tarcmd $taroptions $outputfile $(cat $set) ; $logfile" >> $statusfile
 
 	fi
@@ -447,8 +512,13 @@
 	    cpcmd="cp "
 	    cpoptions="-rf"
-	    $cpcmd $cpoptions $file $diroutputfile > $logfile 2>&1
+	    startTime=$( getDateMilliSeconds ) # gpdebug : time
+	    $cpcmd $cpoptions $file $diroutputfile > $logfile 2>&1 # gpdebug : a retablir
+	    meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : time
 	done
-
+	
+	# resultCmd=$( gives_0_or_1 )
+	# if [ $resultCmd -eq 0 ] ; then
 	if [ $? -eq 0 ] ; then
+	    sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "DONE ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
@@ -458,5 +528,5 @@
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "====> FAILED at try #$nbtries" 
-	    echo "FAILED ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
+	    echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
 
 	fi
@@ -509,8 +579,13 @@
 	    cpcmd="cp "
 	    cpoptions="-rf"
-	    $cpcmd $cpoptions $file $diroutputfile > $logfile 2>&1
+	    startTime=$( getDateMilliSeconds ) # gpdebug : time
+	    $cpcmd $cpoptions $file $diroutputfile > $logfile 2>&1  # gpdebug : a retablir
+	    meantime=$( getTimeDiffSeconds $startTime ) # gpdebug : timeS
 	done
-
+	
+	# resultCmd=$( gives_0_or_1 )
+	# if [ $resultCmd -eq 0 ] ; then
 	if [ $? -eq 0 ] ; then
+	    sed -i "1i\meantime:${meantime}" $statusfile # gpdebug : time
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "DONE ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
@@ -520,5 +595,5 @@
 	    datestr2=`LC_ALL=C date +"%Y-%m-%dT%H:%M:%S"`
 	    echo "====> FAILED at try #$nbtries" 
-	    echo "FAILED ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
+	    echo "FAILED at try #$nbtries ; $datestr1 ; $datestr2 ; $cpcmd $cpoptions $file $diroutputfile ; $logfile" >> $statusfile
 
 	fi
Index: TOOLS/PACK_IPSL/find_directory_simul.sh
===================================================================
--- TOOLS/PACK_IPSL/find_directory_simul.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/find_directory_simul.sh	(revision 1822)
@@ -1,4 +1,4 @@
 #!/bin/bash
-
+# set -vx # gpdebug : a virer ########
 # prend en argument le path et le nom d'un fichier param (argument de la commande
 # ccc_archive avec option ipsl_pack) 
@@ -23,7 +23,18 @@
 SCRIPT_NAME=$(basename ${0} )
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+generalMonitoring "$MonitoringInfo"
+
 DEM_log -0 "Demmarrage de ${SCRIPT_NAME}"
+
 cd ${JOB_DIR}
 # ----
+# gpdebug : Execute la function errorReceive() si reception d'un signal TERM
+trap 'DEM_errorReceive' TERM ########
+
+# gpdebug : on augmente la liste des proc à détruire en cas d'erreur bloquante du présent proc
+export listPID="$$ ${listPID}" #########
 
 LISTE_SIMUL=${1}
@@ -32,13 +43,51 @@
 LISTE_SIMUL_NAME=$(basename ${LISTE_SIMUL} )
 
-
+echo "gpdebug : ${IGCM_TMP}/${$}.liste_Restart.txt" # gpdebug : a virer  #######
 
 # Pour tous les fichiers ou repertoires contenus dans le fichier de parametres 
 for DIR in $( awk '{print $0}' ${LISTE_SIMUL} ) ; do 
     DEM_log -1 ${SCRIPT_NAME} - Inspection de ${DIR}"/"
-    # trouve la liste des rÃ©pertoires restart sous l'arborescence
-    grep ${DIR}"/" ${LISTE_DMNFS} | grep Restart | awk '{print $3}' | sed 's%/Restart.*%%'  >> ${IGCM_TMP}/${$}.liste_Restart.txt
+    # trouve la liste des repertoires restart sous l'arborescence    
+    
+    # grep ${DIR}"/" ${LISTE_DMNFS} | grep Restart | awk '{print $3}' | sed 's%/Restart.*%%'  >> ${IGCM_TMP}/${$}.liste_Restart.txt # gpdebug : suppr
+    
+    # gpdebug : s'il n'y a pas de rep Restart, on saute ###############################################################################
+    listRestart=`grep ${DIR}"/" ${LISTE_DMNFS} | grep Restart | awk '{print $3}' | sed 's%/Restart.*%%' `
+    # arnaud : on teste si il y a des fichiers dans les repertoires Restart
+    nb_restart_non_vide=0
+    for irestart in $listRestart
+    do
+	if [ `find $irestart/Restart -type f | wc -l` -ne 0 ] ;
+	then
+	    ((  nb_restart_non_vide = nb_restart_non_vide + 1 ))
+	    continue
+	fi
+    done
+    
+    if ( [ "x${listRestart}" == "x" ] || [ $nb_restart_non_vide -eq 0 ] ) ;
+    then
+        # DEM_errorSend "${SCRIPT_NAME}:${LINENO}:Pas de Repertoire Restart dans ${DIR}" "${$}" # gpdebug : a virer ########
+	echo "########## Attention :"
+	echo "${SCRIPT_NAME}:${LINENO}:Pas de Repertoire Restart ou de fichiers Restart dans ${DIR}"
+	continue
+    fi
+    echo "${listRestart}" >> ${IGCM_TMP}/${$}.liste_Restart.txt
+    # gpdebug : fin #########################################################################################################################    
+done
+# DEM_errorSend "${SCRIPT_NAME}:${LINENO}:On arrete expres !" $$ # gpdebug : a virer ########
 
-done
+# Pour le cas ou aucune simu n aurait ete detectee
+if [ -e  ${IGCM_TMP}/${$}.liste_Restart.txt ]
+then
+   listRestartNbLines=`cat ${IGCM_TMP}/${$}.liste_Restart.txt | wc -l `
+   if [ "x${listRestartNbLines}" == "x0" ]
+   then
+      DEM_errorSend "${SCRIPT_NAME}:${LINENO}:Il n existe aucune simulation !" # "${$}"
+   fi
+else
+   DEM_errorSend "${SCRIPT_NAME}:${LINENO}:Il n existe aucune simulation !" # "${$}"
+fi
+
+
  
 # On cherche le path (deux crans au dessus des repertoires Restart) 
@@ -67,8 +116,15 @@
 rm -f liste_simul_${LISTE_SIMUL_NAME}
 
+# gpdebug : envoi du nombre de simu dans un "nbSimu.txt" du rep de suivi
+echo `cat ${IGCM_DEM}/liste_simul_${LISTE_SIMUL_NAME} | wc -l ` > $nbSimuFile
+
 DEM_log -1 "Fichier cree : liste_simul_${LISTE_SIMUL_NAME}"
+
 
 [[ "${clean_tmp}" = "yes" ]] && rm -f ${IGCM_TMP}/${$}.path_simul.txt
 [[ "${clean_tmp}" = "yes" ]] && rm -f ${IGCM_TMP}/${$}.liste_Restart.txt
 
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+echo $MonitoringInfo >> $generalMonitorFile
+
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
Index: TOOLS/PACK_IPSL/find_size_pack.sh
===================================================================
--- TOOLS/PACK_IPSL/find_size_pack.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/find_size_pack.sh	(revision 1822)
@@ -26,4 +26,15 @@
 SCRIPT_NAME=$(basename ${0} )
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+simuMonitoring_check "$MonitoringInfo" "$config_card"
+
+# gpdebug : Execute la function errorReceive() si reception d'un signal TERM
+trap 'DEM_errorReceive' TERM ########
+
+# gpdebug : on augmente la liste des proc à détruire en cas d'erreur bloquante du présent proc
+export listPID="$$ ${listPID}" #########
+
 DEM_log -0 "Demmarrage de ${SCRIPT_NAME}"
 cd ${JOB_DIR}
@@ -37,7 +48,8 @@
 
 DEM_state=$( DEM_read_state ${IGCM_DEM}/config_card.liste ${config_card} )
-if [[ "${DEM_state}" != "ListToBeDone" ]] ; then
-    DEM_log -0 "Attention : Etat incorrect dans ${IGCM_DEM}/config_card.liste"
-    exit -1
+# gpdebug : si c'est une premiere exec (pas une reprise)
+if [[ "x${execEveryStep}" == "1" ]] && [[ "${DEM_state}" != "ListToBeDone" ]] ; then
+    echo "gpdebug : DEM_state=${DEM_state}"
+    DEM_errorSend "${SCRIPT_NAME}:${LINENO}:Etat incorrect dans ${IGCM_DEM}/config_card.liste"
 fi
 
@@ -242,4 +254,7 @@
 DEM_write_state ${IGCM_DEM}/config_card.liste ${config_card} FindSizePackDone
 
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+simuMonitoring_OK "$MonitoringInfo" "$config_card"
+
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
 
Index: TOOLS/PACK_IPSL/launch_ipsl_enlarge.sh
===================================================================
--- TOOLS/PACK_IPSL/launch_ipsl_enlarge.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/launch_ipsl_enlarge.sh	(revision 1822)
@@ -11,4 +11,20 @@
 
 # ex : ./launch_ipsl_enlarge.sh
+
+# gpdebug : pour option -f
+restartExecFromZero=0
+while [ $# -gt 0 ]
+do
+   echo "boucle sur les arguments du script ..."
+   echo "@=$@"
+   case $1 in
+   -f)  restartExecFromZero=1 
+        echo "force restart from the beginning ..."
+	;;
+   esac
+   shift
+done
+export restartExecFromZero=${restartExecFromZero}
+# gpdebug : end
 
 export JOB_DIR=${LS_SUBCWD:-${PWD}}
@@ -29,7 +45,43 @@
 export config_card=${IGCM_DEM}/config_card.liste
 
+
+############## gpdebug : Pour gestion des erreurs ######################################### 
+# Execute la function errorReceive() si reception d'un signal TERM
+trap 'DEM_errorReceive' TERM
+# liste des processus à détruire en cas d'erreur bloquante
+export listPID=$$
+# fichier pour la transmission des messages d'erreur d'un fils au prog principal
+export errorMsgFile="${PWD}/errorMsg.txt"
+############## gpdebug : fin ############################################################## 
+
 source ${EXE_DIR}/DEM_utilities.sh
 
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
+
+check_nco_version # gpdebug : verification de la version de nco #######################
+
+# gpdebug : si l'option -f est activee, on detruit tous les fichiers status
+if [ "x$restartExecFromZero" == "x1" ]
+then
+    echo "Deleting  all status files ..."
+    for CONFIG in $( awk '{print $1}' ${IGCM_DEM}/config_card.liste )
+    do
+       PATH_SIMU=$( dirname $CONFIG )
+       ListStatFileInSimu=`find $PATH_SIMU -type f -name "*status" `
+       if [ "x$ListStatFileInSimu" != "x" ]
+       then
+           for file in $ListStatFileInSimu
+           do
+              if [ -e $file ]
+	      then
+	         rm -f $file
+	      fi
+       
+           done      
+       fi   
+    done
+    echo "Deletion done."
+fi
+# gpdebug : end
 
 for CONFIG in $( awk '{print $1}' ${IGCM_DEM}/config_card.liste ) ; do 
Index: TOOLS/PACK_IPSL/launch_ipsl_pack.sh
===================================================================
--- TOOLS/PACK_IPSL/launch_ipsl_pack.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/launch_ipsl_pack.sh	(revision 1822)
@@ -17,5 +17,40 @@
 export EXE_DIR=${JOB_DIR}
 
-LISTE_SIMUL=${1}
+##### gpdebug : addition ##################################
+# Boucle qui gere les parametres du script (permet l'introduction d'une option -f 
+# qui force l'execution de toute les etapes du script de listes)
+execEveryStep=0
+LISTE_SIMUL=
+while [ $# -gt 0 ]
+do
+   echo "boucle sur les arguments du script ..."
+   echo "@=$@"
+   case $1 in
+   -f)  execEveryStep=1 
+        echo "force..."
+	;;
+   *)  LISTE_SIMUL=${1} 
+       echo "autres..."
+       ;;
+   
+   esac
+   shift
+done
+echo "Fin boucle sur arguments"
+export execEveryStep=${execEveryStep}
+
+# fichier de progression d'execution
+extSuiviListes=`echo ${LISTE_SIMUL} | sed 's;\.[[:alnum:]]*$;;' `
+# echo "extSuiviListes=$extSuiviListes" # gpdebug : a virer
+export MonitoringDir="${PWD}/SuiviListes_${extSuiviListes}"
+# echo "MonitoringDir=$MonitoringDir" # gpdebug : a virer
+# exit 0  # gpdebug : a virer
+
+export generalMonitorFile=${MonitoringDir}/general.txt
+export nbSimuFile=${MonitoringDir}/nbSimu.txt
+
+##### gpdebug : fin #####################################
+
+# LISTE_SIMUL=${1} # gpdebug : suppr --> cette affectation est maintenant faite dans la boucle while des arg du script ################
 
 #LISTE_SIMUL=${JOB_DIR}/param_SL.txt 
@@ -33,6 +68,21 @@
 export DEM_LOG=${JOB_DIR}/dem_${LSB_JOBID:-${$}}.log
 export LOG_LEV=2
+export FileParam=${LISTE_SIMUL} # gpdebug : pour appel (dans DEM_utilities.sh) a showListsProgress.sh
+export FatherPID=$$ # gpdebug : pour appel (dans DEM_utilities.sh) a showListsProgress.sh
 
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : prepare le fichier de suivi de la progression
+prepareMonitoringDir
+# exit 0 # gpdebug : a virer ##############
+
+# gpdebug : Execute la function errorReceive() si reception d'un signal TERM
+trap 'DEM_errorReceive' TERM ########
+
+# gpdebug : liste des processus à détruire en cas d'erreur bloquante
+export listPID=$$ ########
+
+# gpdebug : fichier pour la transmission des messages d'erreur d'un fils au prog principal
+export errorMsgFile="${PWD}/errorMsg.txt" ########
 
 DEM_log -0 "Demarrage de ${SCRIPT_NAME}"
@@ -46,5 +96,12 @@
 # 0- on cree le listing correspondant au fichier param 
 # on efface les tests precedents
-rm -f ${IGCM_DEM}/Listing.txt
+
+# rm -f ${IGCM_DEM}/Listing.txt # gpdebug : en cas de reprise, on ne peut pas laisser ca en l'etat --> suppr
+# gpdebug : Donc on rajoute le if qui suit
+if [ "x${execEveryStep}" == "x1" ]
+then
+    rm -f ${IGCM_DEM}/Listing.txt
+fi
+
 for DIR in $( awk '{print $0}' ${LISTE_SIMUL} ) ; do 
     ./create_listing.sh $DIR
@@ -58,4 +115,11 @@
 ${EXE_DIR}/find_directory_simul.sh ${LISTE_SIMUL} ${LISTE_DMNFS}
 
+# sleep 2 # gpdebug : a virer
+# echo "Le script principal continue..." # gpdebug : a virer
+# exit 0 # gpdebug : a virer 
+
+####################################################################
+# gpdebug : partie vidée pour simplifier.  Voir le fichier original.
+
 # 2- Pour chacune des simulations listees on cree un fichier config.card correspondant
 # ces fichiers seront stockes dans ${IGCM_DEM}/arborescence/
@@ -63,4 +127,6 @@
 
 ${EXE_DIR}/create_config_card.sh ${IGCM_DEM}/liste_simul_${LISTE_SIMUL_NAME}  ${LISTE_DMNFS}
+
+# exit 0 # gpdebug : a virer #########
 
 #3- recherche de la taille ideale de pack pour chacune des simulations - puis creation des listes
@@ -72,5 +138,5 @@
     eval $(grep IGCM_DEM_SIMU ${CONFIG})
     ${EXE_DIR}/calcul_size_simul.sh ${CONFIG} ${LISTE_DMNFS}
-
+    # exit 0 # gpdebug : a virer #########
     DEM_state=$( DEM_read_state ${IGCM_DEM}/config_card.liste ${CONFIG} )
     if [[ "${DEM_state}" != "WriteListTarDone" ]] ; then
@@ -80,8 +146,10 @@
 	${EXE_DIR}/write_liste_pack.sh ${CONFIG} ${LISTE_DMNFS}
 	${EXE_DIR}/archive_restart.sh ${CONFIG} ${LISTE_DMNFS}
+	# DEM_errorSend "${SCRIPT_NAME}:${LINENO}:On arrete expres !" # gpdebug : a virer ########
 	${EXE_DIR}/archive_debug.sh ${CONFIG} ${LISTE_DMNFS}
 
     fi
 done
+####################################################################
 
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
Index: TOOLS/PACK_IPSL/showListsProgress.sh
===================================================================
--- TOOLS/PACK_IPSL/showListsProgress.sh	(revision 1822)
+++ TOOLS/PACK_IPSL/showListsProgress.sh	(revision 1822)
@@ -0,0 +1,220 @@
+#!/bin/bash
+
+
+function waitingFor
+{
+   waitedFile=$1
+   
+   # verif que la variable MonitoringDir est bien define
+   if [ "x${MonitoringDir}" == "x" ] 
+   then
+      echo "variable MonitoringDir not defined. stop."
+      exit -1
+   fi
+   
+   # Le fichier teste doit etre dans le rep de suivi
+   isWaitedFileName_In_MonitoringDir=`echo $waitedFile | grep ${MonitoringDir} | wc -l `
+   if [ "x${isWaitedFileName_In_MonitoringDir}" == "x0" ]
+   then
+      echo "The waited file name :"
+      echo "$waitedFile"
+      echo "is incorrect. The location of the file must be in the monitoring dir."
+      exit -1
+   fi
+   
+   waitedFileBasename=$(basename ${waitedFile})
+   # echo "On verifie la presence de ${waitedFileBasename}..."
+   iter=0
+   found=0
+   while [ ${iter} -lt 60 ]
+   do
+      if [ -e $waitedFile ]
+      then
+         found=1
+         break
+      fi      
+      iter=$(( $iter + 1 ))
+      echo "waiting for ${waitedFileBasename}...${iter}..."
+      sleep 1
+   done
+   
+   if [ "x${found}" == "x0"  ]
+   then
+      echo "Le fichier ${waitedFileBasename} n'a pas ete trouve. stop."
+      exit -1
+   fi
+   
+   # echo "fichier trouve !"
+
+}
+
+
+#######################
+# Main program ########
+#######################
+
+# fichier de progression d'execution
+# Le seul arg du script doit etre un fichier param
+paramFile=$(basename ${1})
+if [ ! -e $paramFile ] || [ "x${paramFile}" == "x" ]
+then
+    echo "Le repertoire en argument n existe pas"
+    exit 0
+fi
+extSuiviListes=`echo ${paramFile} | sed 's;\.[[:alnum:]]*$;;' `
+export MonitoringDir="${PWD}/SuiviListes_${extSuiviListes}"
+# echo "MonitoringDir=$MonitoringDir"
+export generalMonitorFile=${MonitoringDir}/general.txt
+export nbSimuFile=${MonitoringDir}/nbSimu.txt
+
+declare -a tabGeneralSteps=()
+tabGeneralSteps[0]="find_directory_simul.sh-->OK"
+tabGeneralSteps[1]="create_config_card.sh-->OK"
+
+declare -a tabSimuSteps=()
+tabSimuSteps[0]="calcul_size_simul.sh-->OK"
+tabSimuSteps[1]="find_size_pack.sh-->OK"
+tabSimuSteps[2]="write_liste_pack.sh-->OK"
+tabSimuSteps[3]="archive_restart.sh-->OK"
+tabSimuSteps[4]="archive_debug.sh-->OK"
+
+echo "#################################################"
+echo "###  ETAT D'AVANCEMENT DES SCRIPTS DE lISTES  ###"
+echo "#################################################"
+echo
+
+# Si le rep de suivi n'existe pas, stop.
+if [ ! -d ${MonitoringDir} ]
+then
+   echo "${MonitoringDir} n'existe pas. stop."
+   exit -1 
+fi
+
+cd ${MonitoringDir}
+if [ "x$?" != "x0" ]
+then
+  echo "Pb avec cd ${MonitoringDir}"
+  exit -1
+fi
+
+# Etapes generales
+# ----------------
+echo "--------------------------------------------------"
+echo "---------------- Etapes generales ----------------"
+echo "--------------------------------------------------"
+waitingFor "${generalMonitorFile}"
+
+
+generalStepsDoneList=`cat ${generalMonitorFile} `
+for ((i = 0; i < ${#tabGeneralSteps[*]}; i += 1))
+do
+  isEltInDoneList=`echo $generalStepsDoneList | grep "${tabGeneralSteps[$i]}" | wc -l `
+  if [ "x$isEltInDoneList" == "x0" ]
+  then
+     stringKO=`echo ${tabGeneralSteps[$i]} | sed 's;OK;?? #####;' `
+     echo "$stringKO"
+  else
+     echo "${tabGeneralSteps[$i]}"
+  fi
+  
+done
+
+
+# Etapes createListing
+# --------------------
+echo
+echo "--------------------------------------------------" 
+echo "---------------- Etape createListing -------------"
+echo "--------------------------------------------------" 
+listSubDir=`ls -l | grep -e '^d' | awk '{print $NF}' `
+if [ "x$listSubDir" == "x" ]
+then
+   echo "Aucune liste n'est prete."
+fi
+
+# echo "listSubDir=$listSubDir"
+for rep in $listSubDir
+do
+   cd $rep
+   if [ ! -e createListingOK.txt ]
+   then
+      echo "${rep}: createListing.sh-->?? #####"
+   else
+      echo "${rep}: createListing.sh-->OK"
+   fi
+   
+   cd ..
+done
+echo
+
+echo "--------------------------------------------------" 
+echo "---------------  Etape par simu ------------------"
+echo "--------------------------------------------------"
+if [ "x$listSubDir" == "x" ]
+then
+   echo "Aucune simu n'a ete traitee."
+fi
+
+nbSimuOK=0
+for rep in $listSubDir
+do
+   cd $rep
+   listSimu=`ls -1 | grep -v "createListingOK.txt" `
+   if [ ! -e createListingOK.txt ] || [ "x${listSimu}" == "x" ]
+   then
+      echo "${rep}: Pas de simu traitee"
+   fi
+   # echo "listSimu=$listSimu"
+   for simu in $listSimu
+   do
+       simuDone=1
+       simuName=`echo $simu | sed 's;_#_;/;g' | sed 's;\.txt;;' `
+       echo $simuName
+       simuStepsDoneList=`cat ${simu} `
+       for ((i = 0; i < ${#tabSimuSteps[*]}; i += 1))
+       do
+           isEltInDoneList=`echo $simuStepsDoneList | grep "${tabSimuSteps[$i]}" | wc -l `
+           if [ "x$isEltInDoneList" == "x0" ]
+           then
+              stringKO=`echo ${tabSimuSteps[$i]} | sed 's;OK;?? #####;' `
+	      simuDone=$(( $simuDone && 0 ))
+              echo "    $stringKO"
+           else
+              echo "    ${tabSimuSteps[$i]}"
+           fi         
+       done
+       
+       # si toutes les operations sur la simu sont OK, on incremente le nb de simu OK
+       if [ "x$simuDone" == "x1" ]
+       then
+          nbSimuOK=$(( $nbSimuOK + 1 ))
+       fi                 
+   done   
+   cd ..
+done
+
+
+waitingFor "${nbSimuFile}"
+
+nbSimuTot=`cat ${nbSimuFile} `
+nbSimuFormatOK=`echo $nbSimuTot | grep -e '^[0-9]\{1,4\}$' | wc -l`
+if [ "x$nbSimuFormatOK" == "x0" ]
+then
+   echo "Le nombre de simulation contenues dans le fichier $nbSimuFile est incorrect."
+   exit -1
+fi
+
+echo
+echo "============================================="
+echo "nbre de simu OK : $nbSimuOK / $nbSimuTot"
+echo "============================================="
+
+
+
+
+
+
+
+
+
+
Index: TOOLS/PACK_IPSL/showPackProgress.sh
===================================================================
--- TOOLS/PACK_IPSL/showPackProgress.sh	(revision 1822)
+++ TOOLS/PACK_IPSL/showPackProgress.sh	(revision 1822)
@@ -0,0 +1,205 @@
+#!/bin/bash
+
+export JOB_DIR=${LS_SUBCWD:-${PWD}}
+export EXE_DIR=${JOB_DIR}
+
+export INPUT_DMF_DATA=${SCRATCHDIR}/PSEUDO_DMNFS_light
+export OUTPUT_STORE=${SCRATCHDIR}/PSEUDO_DMNFS_STORE
+export OUTPUT_WORK=${SCRATCHDIR}/PSEUDO_DMNFS_WORK
+
+SCRIPT_NAME=$(basename ${0} )
+
+export IGCM_DEM=${SCRATCHDIR}/IGCM_DEM
+export IGCM_TMP=${SCRATCHDIR}/IGCM_DEM/tmp
+
+export config_card=${IGCM_DEM}/config_card.liste
+
+source ${EXE_DIR}/DEM_utilities.sh
+
+
+function getSimuName
+{   
+   config_card=$1
+   
+   baseName=$( basename $config_card )
+   simuName=`echo ${baseName} | sed 's;config_card_;;' `
+   echo $simuName
+
+}
+
+function getTimeTaken
+{
+   statFile=$1
+   if [ ! -e $statFile ]
+   then
+      echo "inconnu : pas de fichier status"
+      return
+   fi
+   
+   timeLine=`sed -n '1p' $statFile `
+   goodFormat=`echo $timeLine | grep -e '^meantime:[[:digit:]]*\.[[:digit:]]\{1,3\}$' | wc -l `
+   if [ "x$goodFormat" == "x0" ]
+   then
+       echo "inconnu : mauvais format du temps"
+       return
+   fi
+   
+   timeTaken=`echo $timeLine | sed 's;^meantime:;;' `
+   echo $timeTaken
+   
+}
+
+function progressStatus
+{
+   statFile=$1
+   echo "statFile=$1" >> showPackProgress.log
+   if [ ! -e $statFile ]
+   then
+      echo "Non traitee"
+      return
+   fi
+   echo "blabla" >> showPackProgress.log
+   echo "----------------------------------------------" >> showPackProgress.log
+   # echo "progressStatus..." # gpdebug : a virer
+   
+   # ------------------------------------------------------------------------------------------------
+   listLineNumWithKey=`grep -n -E '(COMPLETED|FAILED|DELEGATE)' $statFile | awk -F":" '{print $1}' ` 
+   # echo "listLineNumWithKey=$listLineNumWithKey" # gpdebug : a virer
+   
+  if [ "x$listLineNumWithKey" == "x" ]
+  then
+     echo "Statut illisible"
+     return
+  fi
+
+   # On trouve la derniere ligne du fichier status comportant un mot cle 
+   max=0
+   for lineNum in $listLineNumWithKey
+   do
+      if [ $lineNum -gt $max ]
+      then
+          max=$lineNum
+      fi
+   done
+
+   # echo "max=$max" # gpdebug : a virer
+
+   lastLineWithKey=`sed -n "${max}p" $statFile `
+   # echo "lastLineWithKey=$lastLineWithKey" # gpdebug : a virer   
+   # ------------------------------------------------------------------------------------------------
+     
+   # lastLine=`tail -1 $statFile ` # gpdebug : a virer
+   
+   completed=`echo $lastLineWithKey | grep COMPLETED | sed 's; (.*)$;;' `
+   if [ "x${completed}" != "x" ]
+   then 
+      echo $completed
+      return
+   fi
+   
+  failed=`echo $lastLineWithKey | grep FAILED | cut -d";" -f1 `
+  if [ "x${failed}" != "x" ]
+  then
+     echo $failed
+     return         
+  fi
+  
+  delegate=`echo $lastLineWithKey | grep DELEGATE `
+  if [ "x${delegate}" != "x" ]
+  then
+     echo "DELEGATE"
+     return
+  fi
+  
+}
+
+
+#################################
+####### Main script #############
+#################################
+> showPackProgress.log # vider le fichier de log
+
+totalNbOfList=0
+for CONFIG in $( awk '{print $1}' ${IGCM_DEM}/config_card.liste )
+do
+   PATH_SIMU=$( dirname $CONFIG )
+   nbListInConfig=`find $PATH_SIMU -name "*list" | wc -l `
+   totalNbOfList=$(( $totalNbOfList + $nbListInConfig ))
+done
+
+# echo "totalNbOfList=$totalNbOfList"
+# exit 0 # gpdebug : a virer
+
+nbOfListsPacked=0
+nbOfListsFailed=0
+
+for CONFIG in $( awk '{print $1}' ${IGCM_DEM}/config_card.liste ) ; do 
+
+    DEM_state=$( DEM_read_state ${IGCM_DEM}/config_card.liste ${CONFIG} )
+
+    if [[ "${DEM_state}" != "WriteListTarDone" ]] ; then
+
+	 simuName=$( getSimuName $CONFIG )
+	 echo "*******************************************"
+	 echo "simulation : $simuName"
+	 echo "*******************************************"
+	 export PATH_SIMU=$( dirname $CONFIG )
+	 # echo "PATH_SIMU = $PATH_SIMU"
+	
+	 listOfDir="output_ncrcat output_tar restart_tar debug_tar store_cp work_cp"
+	 for dir in $listOfDir
+	 do
+	     echo "   ${dir} :"
+	     if [ ! -d $PATH_SIMU/${dir} ]
+	     then
+	        echo "      ${dir} n'existe pas pour cette simu"
+	        continue
+	     fi
+	   
+	     listFilesInDir=`find $PATH_SIMU/${dir} -name "*list" | wc -l `
+	     if [ "x$listFilesInDir" == "x0" ]
+	     then
+	        echo "       -- no list --"
+	        continue	   
+	     fi
+	   
+	     setList=$( ls $PATH_SIMU/${dir}/*list )
+
+	     for set in $setList
+	     do
+	          listName=`echo $(basename $set) | sed 's;\.list$;;' | sed 's;\.nc$;;' `
+	    
+	          statusfile=${set%%.list}.status
+	          status=$( progressStatus $statusfile ) # gpdebug : a retablir
+		  timeTaken="???"
+		  # progressStatus $statusfile # gpdebug : a virer
+		  # exit 0 # gpdebug : a virer
+	       
+	          packFailed=`echo $status | grep -E '(DELEGATE|FAILED|illisible)' | wc -l `
+	          if [ "x${packFailed}" != "x0" ]
+	          then
+		     nbOfListsFailed=$(( $nbOfListsFailed + 1 ))
+	          fi
+	       
+	          packSuccess=`echo $status | grep "COMPLETED" | wc -l `
+	          if [ "x${packSuccess}" != "x0" ]
+	          then
+		     timeTaken=$( getTimeTaken $statusfile )
+	             nbOfListsPacked=$(( $nbOfListsPacked + 1 ))
+	          fi
+		  
+		  echo "       $listName : $status | time : $timeTaken"
+	     done
+         done
+    fi
+done
+echo
+echo "##################"
+echo "#####  BILAN #####"
+echo "##################"
+echo "nb of Lists packed with success : ${nbOfListsPacked} / ${totalNbOfList}"
+echo "nb of fails : $nbOfListsFailed"
+
+
+
+
Index: TOOLS/PACK_IPSL/write_liste_pack.sh
===================================================================
--- TOOLS/PACK_IPSL/write_liste_pack.sh	(revision 1774)
+++ TOOLS/PACK_IPSL/write_liste_pack.sh	(revision 1822)
@@ -28,4 +28,15 @@
 SCRIPT_NAME=$(basename ${0} )
 source ${EXE_DIR}/DEM_utilities.sh
+
+# gpdebug : verif si le present script a ete execute jusqu'au bout #########
+MonitoringInfo="${SCRIPT_NAME}-->OK"
+simuMonitoring_check "$MonitoringInfo" "$config_card"
+
+# gpdebug : Execute la function errorReceive() si reception d'un signal TERM
+trap 'DEM_errorReceive' TERM ########
+
+# gpdebug : on augmente la liste des proc à détruire en cas d'erreur bloquante du présent proc
+export listPID="$$ ${listPID}" #########
+
 DEM_log -0 "Demmarrage de ${SCRIPT_NAME}"
 cd ${JOB_DIR}
@@ -43,9 +54,11 @@
 SIMUL=${PATH_SIMUL_FULL}/${JobName}
 
+
 DEM_state=$( DEM_read_state ${IGCM_DEM}/config_card.liste ${config_card} )
-if [[ "${DEM_state}" != "FindSizePackDone" ]] ; then
-    DEM_log -0 "Attention : Etat incorrect dans ${IGCM_DEM}/config_card.liste"
-    exit -1
+# gpdebug : si c'est une premiere exec (pas une reprise)
+if [[ "x${execEveryStep}" == "1" ]] && [[ "${DEM_state}" != "FindSizePackDone" ]] ; then
+    DEM_errorSend "${SCRIPT_NAME}:${LINENO}:Etat incorrect dans ${IGCM_DEM}/config_card.liste"
 fi
+
 
 DEM_write_state ${IGCM_DEM}/config_card.liste ${config_card} WriteListPackRunning
@@ -244,4 +257,7 @@
 DEM_write_state ${IGCM_DEM}/config_card.liste ${config_card} WriteListPackDone
 
+# gpdebug : le script n'a pas rencontre d'erreur. On l'inscrit dans le fichier de suivi
+simuMonitoring_OK "$MonitoringInfo" "$config_card"
+
 DEM_log -0 "Fin de ${SCRIPT_NAME}"
 
