source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_mercurex9.ksh @ 315

Last change on this file since 315 was 315, checked in by mafoipsl, 14 years ago

Add mail when job aborts in mercure front-end header. Correct SendMail? function on mercurex9.

  • Property svn:keywords set to Date Author Revision
File size: 33.6 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil, Martial Mancip
5# Contact: Martial.Mancip_ipsl.jussieu.fr
6# $Date$
7# $Author$
8# $Revision$
9# IPSL (2006)
10#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
11# History:
12# Modification:
13#
14#**************************************************************
15
16#=========================================================
17# The documentation of this file can be automatically generated
18# if you use the prefix #D- for comments to be extracted.
19# Extract with command: cat lib* | grep "^#D-" | cut -c "4-"
20#=========================================================
21
22#D-#==================================================
23#D-LibIGCM_sys for Mercure SX9
24#D-#==================================================
25#D-
26#D- This ksh library if a layer under some usefull
27#D-environment variables and shell commands.
28#D-All those definitions depend on host particularities.
29#D-It manages a stack mechanism and test validity of operations.
30#D-All function described bellow must be prefixed by IGCM_sys.
31
32#====================================================
33# libIGCM_sys PARAMETERS
34#====================================================
35
36# gawk specific location on SX9
37export PATH=/applications/gawk-3.0.4/bin:${PATH}
38
39#====================================================
40# set DEBUG_sys to true to output calls of function
41typeset -r DEBUG_sys=${DEBUG_sys:=true}
42
43#====================================================
44# Turn in dry run mode ? (sys_Put_Rest, sys_Put_Out, sys_Get)
45typeset -r DRYRUN=${DRYRUN:=0}
46
47# YOU MUST COMPILE YOUR EXE FILES FOR DRYRUN MODE !
48# -------------------------------------------------------------------------------------
49# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
50# |          |  Cp/Exe param files |            |  Chmod  |                           |
51# |          |      Qsub           |            |         |                           |
52# -------------------------------------------------------------------------------------
53# |    0     |       yes           |    yes     |  yes    |      yes                  |
54# -------------------------------------------------------------------------------------
55# |    1     |       yes           |    yes     |  yes    |      no                   |
56# -------------------------------------------------------------------------------------
57# |    2     |       yes           |    yes     |  no     |      no                   |
58# -------------------------------------------------------------------------------------
59# |    3     |       yes           |    no      |  no     |      no                   |
60# -------------------------------------------------------------------------------------
61
62#=====================================================
63# Global Variables :
64#=====================================================
65# Language : "fr" or "en"
66typeset -r MYLANG="fr"
67
68#=====================================================
69# Host and user names
70# $hostname ou hostname
71typeset  HOST=${HOST:=$( hostname )}
72# $username ou whoami
73typeset  LOGIN=${LOGIN:=$( whoami )}
74# $hostname of the MASTER job
75typeset -r MASTER=mercure
76
77#D-
78#D-#==================================================
79#D-Program used in libIGCM
80#D-#==================================================
81
82# rsync with path
83typeset -r RSYNC=/home/cont003/p86denv/SX_RSYNC/bin/rsync
84# RSYNC_opt args to rsync
85typeset -r RSYNC_opt="-va"
86# ie storage filesystem
87typeset -r RHOST=mercure
88
89#====================================================
90# Host specific DIRECTORIES
91#====================================================
92
93#====================================================
94#- R_EXE   (==> BIN_DIR = ${MODIPSL}/bin )
95typeset -r R_EXE="${MODIPSL}/bin"
96
97#====================================================
98#- SUBMIT_DIR : submission dir
99typeset SUBMIT_DIR=${SUBMIT_DIR:=${PBS_O_WORKDIR}}
100
101#====================================================
102#- ARCHIVE
103typeset -r ARCHIVE=${DMFDIR}
104
105# ============ CESIUM START ============ #
106
107#====================================================
108#- Mirror libIGCM from mercure to cesium if needed
109#ROOTSYS=$( echo ${libIGCM} | gawk -F"/" '{print $2}' )
110#if [ ! ${ROOTSYS} = "home" ] ; then
111#    typeset -r MirrorlibIGCM=${MirrorlibIGCM:=true}
112#else
113#    typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
114#fi
115
116#====================================================
117#- libIGCM_POST
118#if ( ${MirrorlibIGCM} ) ; then
119#    PATHlibIGCM=$( echo ${libIGCM} | gawk -F"${LOGIN}/" '{print $2}' | sed -e "s&/libIGCM&&" )
120#    typeset -r libIGCM_POST=${HOME}/MIRROR/${PATHlibIGCM}/libIGCM
121#else
122#    typeset -r libIGCM_POST=${libIGCM}
123#fi
124
125# ============ CESIUM  END  ============ #
126
127#====================================================
128#- Mirror libIGCM from mercure to cesium if needed
129typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
130
131#====================================================
132#- libIGCM_POST
133typeset -r libIGCM_POST=${libIGCM}
134
135#====================================================
136#- IN
137typeset -r R_IN=${R_IN:=/dmnfs/cont003/p86ipsl/IGCM}
138
139#====================================================
140#- OUT
141typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
142
143#====================================================
144#- OUT_POST
145typeset -r R_OUT_POST=${SCRATCHDIR}/IGCM_OUT
146
147#====================================================
148#- RUN_DIR_PATH : Temporary working directory (=> TMP)
149typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${LOCALTMPDIR}}
150
151#====================================================
152#- BIG_DIR : BIG_DIR to store files waiting for rebuild
153typeset -r BIG_DIR=${BIG_DIR:=${SCRATCHDIR}/REBUILD}
154
155#====================================================
156#- HOST_MPIRUN_COMMAND
157typeset -r HOST_MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND:="mpirun"}
158
159#====================================================
160#- Max number of arguments passed to nco operator or demigration command
161UNIX_MAX_LIMIT=360
162
163#D-#==================================================
164#D-function IGCM_sys_RshArchive
165#D-* Purpose: Archive rsh command
166#D-* Examples:
167#D-
168function IGCM_sys_RshArchive {
169    IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
170    /bin/ksh <<-EOF
171${@}
172EOF
173    if [ $? -gt 0 ] ; then
174        echo "IGCM_sys_RshArchive : erreur."
175        IGCM_debug_Exit "IGCM_sys_RshArchive"
176    fi
177    IGCM_debug_PopStack "IGCM_sys_RshArchive"
178}
179
180#D-#==================================================
181#D-function IGCM_sys_RshPost
182#D-* Purpose: Post-process rsh command
183#D-* Examples:
184#D-
185function IGCM_sys_RshPost {
186    IGCM_debug_PushStack "IGCM_sys_RshPost" $@
187    if ( $DEBUG_sys ) ; then
188        echo "IGCM_sys_RshPost :" $@
189    fi
190
191# ============ CESIUM START ============ #
192#    typeset NB_ESSAI DELAI status
193#    #nombre d'essai avant abandon
194#    NB_ESSAI=5
195#    #temps entre chaque essai
196#    DELAI=10
197#    i=0
198#    while [ $i -ne $NB_ESSAI ] ; do
199#        ssh -t mercure ssh cesium /bin/ksh ${@} 2>/dev/null
200#        status=$?
201#        if [ ${status} -ne 0 ];
202#        then
203#            sleep $DELAI
204#        else
205#            break
206#        fi
207#        let i=$i+1
208#    done
209# ============ CESIUM  END  ============ #
210
211
212    /bin/ksh ${@}
213    if [ $? -gt 0 ] ; then
214        echo "IGCM_sys_RshPost : erreur."
215        IGCM_debug_Exit "IGCM_sys_RshPost"
216    fi
217    IGCM_debug_PopStack "IGCM_sys_RshPost"
218}
219
220#D-#==================================================
221#D-function IGCM_sys_SendMail
222#D-* Purpose: Send mail when simulation is over
223#D-* Examples:
224#D-
225function IGCM_sys_SendMail {
226    IGCM_debug_PushStack "IGCM_sys_SendMailPost" $@
227    if ( $DEBUG_sys ) ; then
228        echo "IGCM_sys_SendMail :" $@
229    fi
230
231    cat  << END_MAIL > job_end.mail
232Dear ${LOGIN},
233
234  Simulation ${config_UserChoices_JobName} is finished on supercomputer `hostname`.
235  Job started : ${DateBegin}
236  Job ended   : ${DateEnd}
237  Ouput files are available in ${R_SAVE}
238  Script file and Script Outputs are available in ${SUBMIT_DIR}
239END_MAIL
240
241    if [ ! -z ${config_UserChoices_MailName} ] ; then
242       mailx -s "${config_UserChoices_JobName} completed" ${config_UserChoices_MailName} <  job_end.mail
243    elif [ -f ~/.forward ] ; then
244       mailx -s "${config_UserChoices_JobName} completed" $( cat ~/.forward ) < job_end.mail
245    fi
246
247    if [ $? -gt 0 ] ; then
248        echo "IGCM_sys_SendMail : erreur."
249        IGCM_debug_Exit "IGCM_sys_SendMail"
250    fi
251    IGCM_debug_PopStack "IGCM_sys_SendMail"
252}
253
254#D-#==================================================
255#D-function IGCM_sys_Mkdir
256#D-* Purpose: Master locale mkdir command
257#D-* Examples:
258#D-
259function IGCM_sys_Mkdir {
260    IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
261    if ( $DEBUG_sys ) ; then
262        echo "IGCM_sys_Mkdir :" $@
263    fi
264    if [ ! -d ${1} ]; then
265        \mkdir -p $1
266        if [ $? -gt 0 ] ; then
267            echo "IGCM_sys_Mkdir : erreur."
268            IGCM_debug_Exit "IGCM_sys_Mkdir"
269        fi
270    fi
271    # vérification :
272    if [ ! -d ${1} ] ; then
273        echo "IGCM_sys_Mkdir : erreur."
274        IGCM_debug_Exit "IGCM_sys_Mkdir"
275    fi
276    IGCM_debug_PopStack "IGCM_sys_Mkdir"
277}
278
279#D-#==================================================
280#D-function IGCM_sys_MkdirArchive
281#D-* Purpose: Mkdir on Archive
282#D-* Examples:
283#D-
284function IGCM_sys_MkdirArchive {
285    IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
286    if ( $DEBUG_sys ) ; then
287        echo "IGCM_sys_MkdirArchive :" $@
288    fi
289    #- creation de repertoire sur le serveur fichier
290    if [ ! -d ${1} ]; then 
291        \mkdir -p $1
292        if [ $? -gt 0 ] ; then
293            echo "IGCM_sys_MkdirArchive : erreur."
294            IGCM_debug_Exit "IGCM_sys_MkdirArchive"
295        fi
296    fi
297    IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
298}
299
300#D-#==================================================
301#D-function IGCM_sys_MkdirWork
302#D-* Purpose: Mkdir on Work
303#D-* Examples:
304#D-
305function IGCM_sys_MkdirWork {
306    IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
307    if ( $DEBUG_sys ) ; then
308        echo "IGCM_sys_MkdirWork :" $@
309    fi
310    #- creation de repertoire sur le serveur fichier
311    if [ ! -d ${1} ]; then 
312        \mkdir -p $1
313        if [ $? -gt 0 ] ; then
314            echo "IGCM_sys_MkdirWork : erreur."
315            IGCM_debug_Exit "IGCM_sys_MkdirWork"
316        fi
317    fi
318    IGCM_debug_PopStack "IGCM_sys_MkdirWork"
319}
320
321#D-#==================================================
322#D-function IGCM_sys_Cd
323#D-* Purpose: master cd command
324#D-* Examples:
325#D-
326function IGCM_sys_Cd {
327    IGCM_debug_PushStack "IGCM_sys_Cd" $@
328    if ( $DEBUG_sys ) ; then
329        echo "IGCM_sys_Cd :" $@
330    fi
331    \cd $1
332    if [ $? -gt 0 ] ; then
333        echo "IGCM_sys_Cd : erreur."
334        IGCM_debug_Exit "IGCM_sys_Cd"
335    fi
336    IGCM_debug_PopStack "IGCM_sys_Cd"
337}
338
339#D-#==================================================
340#D-function IGCM_sys_Chmod
341#D-* Purpose: Chmod
342#D-* Examples:
343#D-
344function IGCM_sys_Chmod {
345    IGCM_debug_PushStack "IGCM_sys_Chmod" -- $@
346    if ( $DEBUG_sys ) ; then
347        echo "IGCM_sys_Chmod :" $@
348    fi
349    if [ $DRYRUN -le 1 ]; then
350        \chmod $@
351        if [ $? -gt 0 ] ; then
352            echo "IGCM_sys_Chmod : erreur."
353            IGCM_debug_Exit "IGCM_sys_Chmod"
354        fi
355    else
356        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
357    fi
358    IGCM_debug_PopStack "IGCM_sys_Chmod"
359}
360
361#D-#==================================================
362#D-function IGCM_sys_FileSize
363#D-* Purpose: Filesize
364#D-* Examples:
365#D-
366function IGCM_sys_FileSize {
367    IGCM_debug_PushStack "IGCM_sys_FileSize" $@
368
369    typeset sizeF
370    set +A sizeF -- $( ls -la ${1} )
371    if [ $? -gt 0 ] ; then
372        IGCM_debug_Exit "IGCM_sys_FileSize"
373    fi
374    eval ${2}=${sizeF[4]}
375
376    IGCM_debug_PopStack "IGCM_sys_FileSize"
377}
378
379#D-#==================================================
380#D-function IGCM_sys_TestDir
381#D-* Purpose: Test Directory that must exists
382#D-* Examples:
383#D-
384function IGCM_sys_TestDir {
385    IGCM_debug_PushStack "IGCM_sys_TestDir" $@
386    if ( $DEBUG_sys ) ; then
387        echo "IGCM_sys_TestDir :" $@
388    fi
389    typeset ExistFlag
390    ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
391    IGCM_debug_PopStack "IGCM_sys_TestDir"
392
393    return ${ExistFlag}
394}
395
396#D-#==================================================
397#D-function IGCM_sys_TestDirArchive
398#D-* Purpose: Test Directory that must exists on Archive
399#D-* Examples:
400#D-
401function IGCM_sys_TestDirArchive {
402    IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
403    if ( $DEBUG_sys ) ; then
404        echo "IGCM_sys_TestDirArchive :" $@
405    fi
406    typeset ExistFlag
407    ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
408    IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
409
410    return ${ExistFlag}
411}
412
413#D-#==================================================
414#D-function IGCM_sys_TestFileArchive
415#D-* Purpose: Test file that must NOT EXISTS on Archive
416#D-* Examples:
417#D-
418function IGCM_sys_TestFileArchive {
419    IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
420    typeset ExistFlag
421    ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
422    IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
423
424    return ${ExistFlag}
425}
426
427#D-#==================================================
428#D-function IGCM_sys_CountFileArchive
429#D-* Purpose: Count files on Archive filesystem
430#D-* Examples:
431#D-
432function IGCM_sys_CountFileArchive {
433    IGCM_debug_PushStack "IGCM_sys_CountFileArchive" $@
434    ls ${@} 2>/dev/null | wc -l
435    if [ $? -gt 0 ] ; then
436        echo "IGCM_sys_CountFileArchive : erreur."
437    fi
438    IGCM_debug_PopStack "IGCM_sys_CountFileArchive"
439}
440
441#D-#==================================================
442#D-function IGCM_sys_Tree
443#D-* Purpose: Tree directories with files on ${ARCHIVE}
444#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
445#D-
446function IGCM_sys_Tree {
447    IGCM_debug_PushStack "IGCM_sys_Tree" $@
448    if ( $DEBUG_sys ) ; then
449        echo "IGCM_sys_Tree :" $@
450    fi
451
452    \ls -lR ${@}
453
454    IGCM_debug_PopStack "IGCM_sys_Tree"
455}
456
457#D-#==================================================
458#D-function IGCM_sys_Tar
459#D-* Purpose: master un-tar command
460#D-* Examples:
461#D-
462function IGCM_sys_Tar {
463    IGCM_debug_PushStack "IGCM_sys_Tar" $@
464    if ( $DEBUG_sys ) ; then
465        echo "IGCM_sys_Tar :" $@
466    fi
467    \tar xvf $1
468    if [ $? -gt 0 ] ; then
469        echo "IGCM_sys_Tar : erreur."
470        IGCM_debug_Exit "IGCM_sys_Tar"
471    fi
472    IGCM_debug_PopStack "IGCM_sys_Tar"
473}
474
475#D-#==================================================
476#D-function IGCM_sys_UnTar
477#D-* Purpose: master un-tar command
478#D-* Examples:
479#D-
480function IGCM_sys_UnTar {
481    IGCM_debug_PushStack "IGCM_sys_UnTar" $@
482    if ( $DEBUG_sys ) ; then
483        echo "IGCM_sys_UnTar :" $@
484    fi
485    \tar xvf $1
486    if [ $? -gt 0 ] ; then
487        echo "IGCM_sys_UnTar : erreur."
488        IGCM_debug_Exit "IGCM_sys_UnTar"
489    fi
490    IGCM_debug_PopStack "IGCM_sys_UnTar"
491}
492
493#D-#==================================================
494#D-function IGCM_sys_Qsub
495#D-* Purpose: Qsub new job
496#D-* Examples:
497#D-
498function IGCM_sys_Qsub {
499    IGCM_debug_PushStack "IGCM_sys_Qsub" $@
500    if ( $DEBUG_sys ) ; then
501        echo "IGCM_sys_Qsub :" $@
502    fi
503    /usr/bin/nqsII/qsub -o ${Script_Output} -N ${config_UserChoices_JobName}.${CumulPeriod} < $1
504    if [ $? -gt 0 ] ; then
505        echo "IGCM_sys_Qsub : erreur -o ${Script_Output} -N ${config_UserChoices_JobName}.${CumulPeriod} $@."
506        IGCM_debug_Exit "IGCM_sys_Qsub"
507    fi
508    IGCM_debug_PopStack "IGCM_sys_Qsub"
509}
510
511#D-#==================================================
512#D-function IGCM_sys_QsubPost
513#D-* Purpose: Qsub new job on scalaire
514#D-* Examples:
515#D-
516function IGCM_sys_QsubPost {
517    IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
518    if ( $DEBUG_sys ) ; then
519        echo "IGCM_sys_QsubPost :" $@
520    fi
521    # ============ CESIUM START ============ #
522    #/usr/local/bin/ccc_msub -o ${POST_DIR}/$1.${PeriodDateEnd}.out -e ${POST_DIR}/$1.${PeriodDateEnd}.e.out -E "-v ${listVarEnv}" ${libIGCM_POST}/$1.job
523    # ============ CESIUM  END  ============ #
524    /usr/bin/nqsII/qsub -o ${POST_DIR}/$1.${PeriodDateEnd}.out ${libIGCM}/$1.job -v ${listVarEnv}
525    if [ $? -gt 0 ] ; then
526        echo "IGCM_sys_QsubPost : erreur " $@
527        IGCM_debug_Exit "IGCM_sys_QsubPost"
528    fi
529    IGCM_debug_PopStack "IGCM_sys_QsubPost"
530}
531
532#D-*************************
533#D- File transfer functions
534#D-*************************
535#D-
536
537#D-#==================================================
538#D-function IGCM_sys_Rsync_out
539#D-* Purpose: treat return val of rsync
540#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
541#D-  Error values and explanations can depend on your system version.
542function IGCM_sys_Rsync_out {
543    RET=$1
544    if [ ! $RET ] ; then
545        echo "rsync error !"
546    fi
547
548    if [ $MYLANG = "fr" ]; then
549        case $RET in
550            0)  return ;;
551            1)  echo "Erreur de rsync ; RERR_SYNTAX : "
552                echo "Erreur de syntaxe ou d'utilisation."
553                return;;
554            2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
555                echo "Incompatibilité de protocole."
556                return;;
557            3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
558                echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
559                echo "répertoires"
560                return;;
561            4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
562                echo "Action demandée non supportée : une tentative de manipulation de"
563                echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
564                echo "été faite ; ou une option qui est supportée par le  client  mais"
565                echo "pas par le serveur a été spécifiée."
566                return;;
567            10) echo "Erreur de rsync ; RERR_SOCKETIO"
568                echo "Erreur dans le socket d'entrée sortie"
569                return;;
570            11) echo "Erreur de rsync ; RERR_FILEIO"
571                echo "Erreur d'entrée sortie fichier"
572                return;;
573            12) echo "Erreur de rsync ; RERR_STREAMIO"
574                echo "Erreur dans flux de donnée du protocole rsync"
575                return;;
576            13) echo "Erreur de rsync ; RERR_MESSAGEIO"
577                echo "Erreur avec les diagnostics du programme"
578                return;;
579            14) echo "Erreur de rsync ; RERR_IPC"
580                echo "Erreur dans le code IPC"
581                return;;
582            20) echo "Erreur de rsync ; RERR_SIGNAL"
583                echo "SIGUSR1 ou SIGINT reçu"
584                return;;
585            21) echo "Erreur de rsync ; RERR_WAITCHILD"
586                echo "Une erreur retournée par waitpid()"
587                return;;
588            22) echo "Erreur de rsync ; RERR_MALLOC"
589                echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
590                return;;
591            23) echo ""
592                echo "Erreur fichier inexistant"
593                return;;
594            30) echo "Erreur de rsync ; RERR_TIMEOUT"
595                echo "Temps d'attente écoulé dans l'envoi/réception de données"
596                return;;
597            *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
598                return;;
599        esac
600    elif [ $MYLANG = "en" ] ; then
601        case $RET in
602            0)  return;;               
603            1)  echo "rsync error : Syntax or usage error "
604                return;;
605            2)  echo "rsync error : Protocol incompatibility "
606                return;;
607            3)  echo "rsync error : Errors selecting input/output files, dirs"
608                return;;
609            4)  echo "rsync error : Requested action not supported: an attempt"
610                echo "was made to manipulate 64-bit files on a platform that cannot support"
611                echo "them; or an option was specified that is supported by the client and"
612                echo "not by the server."
613                return;;
614            5)  echo "rsync error : Error starting client-server protocol"
615                return;;
616            10) echo "rsync error : Error in socket I/O "
617                return;;
618            11) echo "rsync error : Error in file I/O "
619                return;;
620            12) echo "rsync error : Error in rsync protocol data stream "
621                return;;
622            13) echo "rsync error : Errors with program diagnostics "
623                return;;
624            14) echo "rsync error : Error in IPC code "
625                return;;
626            20) echo "rsync error : Received SIGUSR1 or SIGINT "
627                return;;
628            21) echo "rsync error : Some error returned by waitpid() "
629                return;;
630            22) echo "rsync error : Error allocating core memory buffers "
631                return;;
632            23) echo "rsync error : Partial transfer due to error"
633                return;;
634            24) echo "rsync error : Partial transfer due to vanished source files"
635                return;;
636            30) echo "rsync error : Timeout in data send/receive "
637                return;;
638            *)  echo "rsync error : return code of rsync unknown :" $RET
639                return;;
640        esac
641    else
642        echo "unknown language $MYLANG."
643        return
644    fi
645}
646   
647
648#D-#==================================================
649#D-function IGCM_sys_Miror_libIGCM
650#D-* Purpose: Mirror libIGCM PATH and lib to cesium
651#D-* Examples:
652#D-
653function IGCM_sys_Mirror_libIGCM {
654    IGCM_debug_PushStack "IGCM_sys_Mirror_libIGCM"
655    if ( $DEBUG_sys ) ; then
656        echo "IGCM_sys_Mirror_libIGCM"
657    fi
658
659    typeset RET DEST
660
661    mkdir -p ${HOME}/MIRROR/${PATHlibIGCM}
662
663    echo ${RSYNC} ${RSYNC_opt} ${libIGCM} ${HOME}/MIRROR/${PATHlibIGCM} > out_rsync 2>&1
664    ${RSYNC} ${RSYNC_opt} ${libIGCM} ${HOME}/MIRROR/${PATHlibIGCM} >> out_rsync 2>&1
665    RET=$?
666
667    if [ ${RET} -gt 0 ] ; then
668        echo "IGCM_sys_Mirror_libIGCM Warning : no libIGCM on cesium."
669        cat out_rsync
670    fi
671    IGCM_debug_PopStack "IGCM_sys_Mirror_libIGCM"
672}
673
674#====================================================
675#- Call IGCM_sys_Mirror_libIGCM now !
676if ( $MirrorlibIGCM ) ; then
677    IGCM_sys_Mirror_libIGCM
678fi
679
680#D-#==================================================
681#D-function IGCM_sys_Cp
682#D-* Purpose: generic cp
683#D-* Examples:
684#D-
685function IGCM_sys_Cp {
686    IGCM_debug_PushStack "IGCM_sys_Cp" $@
687    if ( $DEBUG_sys ) ; then
688        echo "IGCM_sys_Cp :" $@
689    fi
690
691    typeset RET
692
693    echo cp $@ > out_rsync 2>&1
694    \cp $@ >> out_rsync 2>&1
695    RET=$?
696
697    if [ ${RET} -gt 0 ] ; then
698        echo "IGCM_sys_Cp : error."
699        cat out_rsync
700        IGCM_debug_Exit "IGCM_sys_Cp"
701    fi
702    IGCM_debug_PopStack "IGCM_sys_Cp"
703}
704
705#D-#==================================================
706#D-function IGCM_sys_Rm
707#D-* Purpose: generic rm
708#D-* Examples:
709#D-
710function IGCM_sys_Rm {
711    IGCM_debug_PushStack "IGCM_sys_Rm" -- $@
712    if ( $DEBUG_sys ) ; then
713        echo "IGCM_sys_Rm :" $@
714    fi
715
716    typeset RET
717
718    echo rm $@ > out_rsync 2>&1
719    \rm $@ >> out_rsync 2>&1
720    RET=$?
721
722    if [ ${RET} -gt 0 ] ; then
723        echo "IGCM_sys_Rm : error."
724        cat out_rsync
725        IGCM_debug_Exit "IGCM_sys_Rm"
726    fi
727    IGCM_debug_PopStack "IGCM_sys_Rm"
728}
729
730#D-#==================================================
731#D-function IGCM_sys_Mv
732#D-* Purpose: generic move
733#D-* Examples:
734#D-
735function IGCM_sys_Mv {
736    IGCM_debug_PushStack "IGCM_sys_Mv" $@
737    if ( $DEBUG_sys ) ; then
738        echo "IGCM_sys_Mv :" $@
739    fi
740
741    if [ $DRYRUN = 0 ]; then
742
743        typeset RET
744           
745        echo mv $@ > out_rsync 2>&1
746        \mv $@ >> out_rsync 2>&1
747        RET=$?
748   
749        if [ ${RET} -gt 0 ] ; then
750            echo "IGCM_sys_Mv : error in mv."
751            cat out_rsync
752            IGCM_debug_Exit "IGCM_sys_Mv"
753        fi
754    else
755        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
756    fi
757
758    IGCM_debug_PopStack "IGCM_sys_Mv"
759}
760
761#D-#==================================================
762#D-function IGCM_sys_Put_Dir
763#D-* Purpose: Copy a complete directory on $(ARCHIVE)
764#D-* Examples:
765#D-
766function IGCM_sys_Put_Dir {
767    IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
768    if ( $DEBUG_sys ) ; then
769        echo "IGCM_sys_Put_Dir :" $@
770    fi
771    if [ $DRYRUN = 0 ]; then
772        if [ ! -d ${1} ] ; then
773            echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
774            IGCM_debug_PopStack "IGCM_sys_Put_Dir"
775            return
776        fi
777
778        typeset RET
779
780        # Only if we use rsync
781        #IGCM_sys_TestDirArchive $( dirname $2 )
782        #
783        #USUAL WAY
784        \cp -r $1 $2 > out_rsync 2>&1
785        RET=$?
786
787        if [ ${RET} -gt 0 ] ; then
788            echo "IGCM_sys_Put_Dir : error."
789            cat out_rsync
790            IGCM_debug_Exit "IGCM_sys_Put_Dir"
791        fi
792    else
793        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
794    fi
795    IGCM_debug_PopStack "IGCM_sys_Put_Dir"
796}
797
798#D-#==================================================
799#D-function IGCM_sys_Get_Dir
800#D-* Purpose: Copy a complete directory from $(ARCHIVE)
801#D-* Examples:
802#D-
803function IGCM_sys_Get_Dir {
804    IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
805    if ( $DEBUG_sys ) ; then
806        echo "IGCM_sys_Get_Dir :" $@
807    fi
808    if [ $DRYRUN = 0 ]; then
809        if [ ! -d ${1} ] ; then
810            echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
811            IGCM_debug_PopStack "IGCM_sys_Get_Dir"
812            return
813        fi
814
815        typeset RET
816
817        # Only if we use rsync
818        #IGCM_sys_TestDirArchive $( dirname $2 )
819        #
820        #USUAL WAY
821        \cp -r $1 $2 > out_rsync 2>&1
822        RET=$?
823
824        if [ ${RET} -gt 0 ] ; then
825            echo "IGCM_sys_Get_Dir : error."
826            cat out_rsync
827            IGCM_debug_Exit "IGCM_sys_Get_Dir"
828        fi
829    else
830        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
831    fi
832    IGCM_debug_PopStack "IGCM_sys_Get_Dir"
833}
834
835#D-#==================================================
836#D-function IGCM_sys_Put_Rest
837#D-* Purpose: Put computied restarts on $(ARCHIVE).
838#D-           File and target directory must exist.
839#D-* Examples:
840#D-
841function IGCM_sys_Put_Rest {
842    IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
843    if ( $DEBUG_sys ) ; then
844        echo "IGCM_sys_Put_Rest :" $@
845    fi
846    if [ $DRYRUN = 0 ]; then
847        if [ ! -f ${1} ] ; then
848            echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
849            IGCM_debug_Exit "IGCM_sys_Put_Rest"
850        fi
851
852        typeset RET
853        #
854        if [ X${JobType} = XRUN ] ; then
855            IGCM_sys_Chmod 444 ${1}
856        fi
857        #
858        IGCM_sys_TestDirArchive $( dirname $2 )
859        #
860        # USUAL WAY
861        putfer $1 $2 > out_rsync 2>&1
862        RET=$?
863
864#       #RSYNC WITH NETWORK SSH CALL
865#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
866#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
867
868#       #RSYNC WITH NFS USE
869#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
870#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
871
872#       RET=$?
873#       IGCM_sys_Rsync_out $RET
874
875#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
876#       (( RET=RET+$? ))
877
878        if [ ${RET} -gt 0 ] ; then
879            echo "IGCM_sys_Put_Rest : error."
880            cat out_rsync
881            IGCM_debug_Exit "IGCM_sys_Put_Rest"
882        fi
883    else
884        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
885    fi
886    IGCM_debug_PopStack "IGCM_sys_Put_Rest"
887}
888
889#D-#==================================================
890#D-function IGCM_sys_Put_Out
891#D-* Purpose: Copy a file on $(ARCHIVE) after have chmod it in readonly
892#D-* Examples:
893#D-
894function IGCM_sys_Put_Out {
895    IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
896    if ( $DEBUG_sys ) ; then
897        echo "IGCM_sys_Put_Out :" $@
898    fi
899    if [ $DRYRUN = 0 ]; then
900        if [ ! -f ${1} ] ; then
901            echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
902            IGCM_debug_PopStack "IGCM_sys_Put_Out"
903            return 1
904        fi
905        #
906        IGCM_sys_MkdirArchive $( dirname $2 )
907        #
908        typeset RET
909
910        #=====================================================
911        #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
912        #=====================================================
913
914        #echo ${2} | grep "${R_OUT}" > /dev/null 2>&1
915        #if [ $? -eq 0 ] ; then
916        #    typeset WORKPATH FILEPATH
917        #    WORKPATH=$( dirname $2 | sed -e "s|${R_OUT}|${R_OUT_SCR}|" )
918        #    IGCM_sys_MkdirWork ${WORKPATH}
919        #    FILEPATH=${WORKPATH}/$( basename $2 )
920        #    #
921        #    IGCM_sys_Cp ${1} ${FILEPATH}
922        #fi
923
924        if [ X${JobType} = XRUN ] ; then
925            if [ X${3} = X ] ; then
926                IGCM_sys_Chmod 444 ${1}
927            fi
928        fi
929        #
930        # USUAL WAY
931        putfer $1 $2 > out_rsync 2>&1
932        RET=$?
933
934#       #RSYNC WITH NETWORK SSH CALL
935#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
936#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
937
938#       #RSYNC WITH NFS USE
939#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
940#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
941
942#       RET=$?
943#       IGCM_sys_Rsync_out $RET
944
945#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
946#       (( RET=RET+$? ))
947
948        if [ ${RET} -gt 0 ] ; then
949            echo "IGCM_sys_Put_Out : error."
950            cat out_rsync
951            IGCM_debug_Exit "IGCM_sys_Put_Out"
952        fi
953    else
954        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
955    fi
956    IGCM_debug_PopStack "IGCM_sys_Put_Out"
957    return 0
958}
959
960#D-#==================================================
961#D-function IGCM_sys_Get
962#D-* Purpose: Get a file from ${ARCHIVE}
963#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
964#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
965function IGCM_sys_Get {
966    IGCM_debug_PushStack "IGCM_sys_Get" $@
967
968    typeset DEST RET dm_liste ifile target file_work
969
970    if ( $DEBUG_sys ) ; then
971        echo "IGCM_sys_Get :" $@
972    fi
973    if [ $DRYRUN -le 2 ]; then
974        if [ X${1} = X'/l' ] ; then
975            # test if the first file is present in the old computation :
976            eval set +A dm_liste \${${2}}
977        else
978            eval set +A dm_liste ${1}
979        fi
980        eval DEST=\${${#}}
981
982        #=====================================================
983        #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
984        #=====================================================
985
986        # Is it an R_OUT file (not R_IN) ?
987        #echo ${dm_liste[0]} | grep "${R_OUT}" > /dev/null 2>&1
988        #if [ $? -eq 0 ] ; then
989        #    # Yes  ? then we try to get it in SCRATCHDIR
990        #    set +A file_work $( echo ${dm_liste[*]} | sed -e "s|${R_OUT}|${R_OUT_SCR}|" )
991        #    if [ -f ${file_work[0]} ] ; then
992        #       IGCM_sys_Cp ${file_work[*]} ${DEST}
993        #       IGCM_debug_PopStack "IGCM_sys_Get"
994        #       return
995        #    fi
996        #fi
997
998        # test if the (first) file is present in the old computation :
999        IGCM_sys_TestFileArchive ${dm_liste[0]}
1000        RET=$?
1001        if [ ${RET} -gt 0 ] ; then
1002            echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
1003            IGCM_debug_Exit "IGCM_sys_Get"
1004            IGCM_debug_PopStack "IGCM_sys_Get"
1005            return
1006        fi
1007
1008        dmget ${dm_liste[*]} > out_rsync 2>&1
1009        RET=$?
1010        if [ ${RET} -gt 0 ] ; then
1011            echo "IGCM_sys_Get : demigration error."
1012            cat out_rsync
1013            IGCM_debug_Exit "IGCM_sys_Get"
1014        fi
1015
1016        #USUAL WAY
1017        if [ X${1} = X'/l' ] ; then
1018            (( RET=0 ))
1019            for target in ${dm_liste[*]} ; do
1020                local_file=$( basename ${target} )
1021                \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
1022                (( RET = RET + $? ))
1023            done
1024        else
1025            \cp ${dm_liste} ${DEST} >> out_rsync 2>&1
1026            RET=$?
1027        fi
1028
1029#       #RSYNC WITH NETWORK SSH CALL
1030#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} > out_rsync 2>&1
1031#       ${RSYNC} ${RSYNC_opt} -e ssh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} >> out_rsync 2>&1
1032
1033#       #RSYNC WITH NFS USE
1034#       echo ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} > out_rsync 2>&1
1035#       ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} >> out_rsync 2>&1
1036
1037#       RET=$?
1038#       IGCM_sys_Rsync_out $RET
1039
1040#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1041#       (( RET=RET+$? ))
1042
1043        if [ ${RET} -gt 0 ] ; then
1044            echo "IGCM_sys_Get : copy error."
1045            cat out_rsync
1046            IGCM_debug_Exit "IGCM_sys_Get"
1047        fi
1048    else
1049        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1050    fi
1051    IGCM_debug_PopStack "IGCM_sys_Get"
1052}
1053
1054############################################################## A FINIR !!
1055
1056#D-#==================================================
1057#D-function IGCM_sys_GetDate_FichWork
1058#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
1059#D-* Examples:
1060#D-
1061function IGCM_sys_GetDate_FichWork {
1062    IGCM_debug_PushStack "IGCM_sys_FichWork" $@
1063    if ( $DEBUG_sys ) ; then
1064        echo "IGCM_sys_GetDate_FichWork :" $@
1065    fi
1066    # donne la date filesys d'un fichier sur la machine work
1067    IGCM_debug_PopStack "IGCM_sys_FichWork"
1068}
1069
1070#D-#==================================================
1071#D-function IGCM_sys_GetDate_FichArchive
1072#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
1073#D-* Examples:
1074#D-
1075function IGCM_sys_GetDate_FichArchive {
1076    IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
1077    if ( $DEBUG_sys ) ; then
1078        echo "IGCM_sys_GetDate_FichArchive :" $@
1079    fi
1080    IGCM_debug_PopStack "IGCM_sys_FichArchive"
1081}
1082
1083##############################################################
1084# REBUILD OPERATOR
1085
1086function IGCM_sys_rebuild {
1087    IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
1088    if ( $DEBUG_sys ) ; then
1089        echo "IGCM_sys_rebuild :" $@
1090    fi
1091    /home/cont003/p86ipsl/SX8/bin/rebuild -f -o $@
1092    if [ $? -gt 0 ] ; then
1093       echo "IGCM_sys_rebuild : erreur ${@}."
1094       IGCM_debug_Exit "rebuild"
1095    fi
1096
1097    IGCM_debug_PopStack "IGCM_sys_rebuild"
1098}
1099
1100############################################################
1101# Activate Running Environnment Variables
1102
1103function IGCM_sys_activ_variables {
1104    IGCM_debug_PushStack "IGCM_sys_activ_variables"
1105    if ( $DEBUG_sys ) ; then
1106        echo "IGCM_sys_activ_variables"
1107    fi
1108
1109# --------------------------------------------------------------------
1110#D- MPI specifications
1111# --------------------------------------------------------------------
1112
1113#D-- MPISUSPEND
1114    export MPISUSPEND=${MPISUSPEND:=OFF}
1115
1116#D-- MPIPROGINF #other choices : ALL_DETAIL2
1117    export MPIPROGINF=ALL
1118#D- activate ftrace (with -ftrace)
1119    export F_FTRACE=YES
1120#D- communication information (with -ftrace)
1121    export MPICOMMINF=DETAIL
1122
1123# --------------------------------------------------------------------
1124#D- Other specifications
1125# --------------------------------------------------------------------
1126
1127#D- max number of character/line in output job
1128    export F_SYSLEN=5000
1129#D- number of error that can be admitted on the NEC
1130    export F_ERRCNT=0
1131#D- global performance
1132    export F_PROGINF=DETAIL
1133
1134#D- I/O performance (FORTRAN I/O only not netCDF)
1135    export F_FILEINF=${F_FILEINF:=NO}
1136#D- netCDF I/O performance
1137    export NC_FILEINF=${NC_FILEINF:=NO}
1138
1139    IGCM_debug_PopStack "IGCM_sys_activ_variables"
1140}
1141
1142############################################################
1143# Desactivate Running Environnment Variables
1144
1145function IGCM_sys_desactiv_variables {
1146    IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1147    if ( $DEBUG_sys ) ; then
1148        echo "IGCM_sys_desactiv_variables"
1149    fi
1150# --------------------------------------------------------------------
1151#D- MPI specifications
1152# --------------------------------------------------------------------
1153
1154#D-- MPIPROGINF
1155    export MPIPROGINF=NO
1156
1157# --------------------------------------------------------------------
1158#D- Other specifications
1159# --------------------------------------------------------------------
1160
1161#D- global performance
1162    export F_PROGINF=NO 
1163
1164    IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1165}
1166
1167############################################################
1168# Build run file
1169
1170function IGCM_sys_build_run_file {
1171    IGCM_debug_PushStack "IGCM_sys_build_run_file" $@
1172    if ( $DEBUG_sys ) ; then
1173        echo "IGCM_sys_build_run_file " $@
1174    fi
1175    (( NUM_PROC_ATM = BATCH_NUM_PROC_TOT - 1 ))
1176    (( NUM_PROC_OASIS = BATCH_NUM_PROC_TOT - NUM_PROC_ATM ))
1177    (( NUM_PROC_OCE = BATCH_NUM_PROC_TOT - NUM_PROC_ATM ))
1178   
1179    if [ $1 = MPI2 ]; then
1180        cat <<EOF > run_file
1181-p 1 -np 1 -e ./oasis
1182EOF
1183        (( NUM_PROCESS = BATCH_NUM_PROC_TOT + 1 ))
1184        config_UserChoices_JobRunOptions='"-max_np ${NUM_PROCESS} -f"'
1185
1186    elif [ $1 = MPI1 ]; then
1187        cat <<EOF > run_file
1188-p $NUM_PROC_OASIS -e ./oasis
1189-p $NUM_PROC_ATM -e ./lmdz.x
1190-p $NUM_PROC_OCE -e ./opa.xx
1191EOF
1192 
1193    fi
1194
1195    IGCM_debug_PopStack "IGCM_sys_build_run_file"
1196 
1197}
Note: See TracBrowser for help on using the repository browser.