source: tags/libIGCM_v1_3/libIGCM_sys/libIGCM_sys_vargas.ksh

Last change on this file was 132, checked in by sdipsl, 15 years ago

Minimize rsh from vargas to others machine
Reflect the fact that Ulam can see Gaya filesystem
Manage AIX vargas system time soi that run.card is filled properly.

File size: 30.9 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sébastien Denvil
5# Contact: sebastien.denvil.@ipsl.jussieu.fr
6# $Date: 2008-09-18 17:46:57 +0200 (Thu, 18 Sep 2008) $
7# $Author: mmaipsl $
8# $Revision: 17 $
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 Vargas
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#====================================================
37# set DEBUG_sys to true to output calls of function
38typeset -r DEBUG_sys=${DEBUG_sys:=true}
39
40#====================================================
41# Turn in dry run mode ? (sys_Put_Rest, sys_Put_Out, sys_Get)
42typeset -r DRYRUN=${DRYRUN:=0}
43
44# YOU MUST COMPILE YOUR EXE FILES FOR DRYRUN MODE !
45# -------------------------------------------------------------------------------------
46# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
47# |          |  Cp/Exe param files |            |  Chmod  |                           |
48# |          |      Qsub           |            |         |                           |
49# -------------------------------------------------------------------------------------
50# |    0     |       yes           |    yes     |  yes    |      yes                  |
51# -------------------------------------------------------------------------------------
52# |    1     |       yes           |    yes     |  yes    |      no                   |
53# -------------------------------------------------------------------------------------
54# |    2     |       yes           |    yes     |  no     |      no                   |
55# -------------------------------------------------------------------------------------
56# |    3     |       yes           |    no      |  no     |      no                   |
57# -------------------------------------------------------------------------------------
58
59#=====================================================
60# Global Variables :
61#=====================================================
62# Language : "fr" or "en"
63typeset -r MYLANG="fr"
64
65#=====================================================
66# Host and user names
67# $hostname ou hostname
68typeset -r HOST=$( hostname )
69# $username ou whoami
70typeset -r LOGIN=$( whoami )
71# $hostname of the MASTER job
72typeset -r MASTER=vargas
73
74#D-
75#D-#==================================================
76#D-Program used in libIGCM
77#D-#==================================================
78
79# rsync with path
80typeset -r RSYNC=/usr/local/bin/rsync
81# RSYNC_opt args to "local rsync"
82typeset -r RSYNC_FRONT="rsh ulam /usr/bin/rsync "
83# RSYNC_opt args to rsync
84typeset -r RSYNC_opt="-va"
85# RSYNC_opt args to "remote rsync"
86typeset -r RHOST=gaya.idris.fr
87typeset -r REMOTE_RSYNC=/u/rech/ces/rces452/RSYNC/bin/rsync
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:=${LOADL_STEP_INITDIR}}
100
101#====================================================
102#- ARCHIVE
103typeset -r ARCHIVE=$( echo ${HOME} | sed -e "s/homegpfs/u/" )
104
105#====================================================
106#- Mirror libIGCM from vargas to ulam
107typeset -r MirrorlibIGCM=${MirrorlibIGCM:=true}
108
109#====================================================
110#- libIGCM_POST
111PATHlibIGCM=$( echo ${libIGCM} | gawk -F"${LOGIN}/" '{print $2}' | sed -e "s&/libIGCM&&" )
112typeset -r HOME_POST=$( echo ${HOME} | sed -e "s/homegpfs/home/" )
113typeset -r libIGCM_POST=${HOME_POST}/${PATHlibIGCM}/libIGCM
114
115#====================================================
116#- IN
117typeset -r R_IN=${R_IN:=/u/rech/psl/rpsl035/IGCM}
118
119#====================================================
120#- OUT
121typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
122
123#====================================================
124#- OUT_POST
125typeset -r R_OUT_POST=$( echo ${HOME} | sed -e "s/homegpfs/workdir/" )/IGCM_OUT
126
127#====================================================
128#- RUN_DIR_PATH : Temporary working directory (=> TMP)
129typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${TMPDIR}}
130
131#====================================================
132#- HOST_MPIRUN_COMMAND
133typeset -r HOST_MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND:="time poe"}
134
135#====================================================
136#- Max number of arguments passed to nco operator or demigration command
137UNIX_MAX_LIMIT=360
138
139#D-#==================================================
140#D-function IGCM_sys_RshArchive
141#D-* Purpose: Archive rsh command
142#D-* Examples:
143#D-
144function IGCM_sys_RshArchive {
145    IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
146    rsh gaya exec /bin/ksh <<-EOF
147    ${@}
148EOF
149    if [ $? -gt 0 ] ; then
150        echo "IGCM_sys_RshArchive : erreur."
151        IGCM_debug_Exit "IGCM_sys_RshArchive"
152    fi
153    IGCM_debug_PopStack "IGCM_sys_RshArchive"
154}
155
156#D-#==================================================
157#D-function IGCM_sys_RshPost
158#D-* Purpose: Post-process rsh command
159#D-* Examples:
160#D-
161function IGCM_sys_RshPost {
162    IGCM_debug_PushStack "IGCM_sys_RshPost" $@
163    if ( $DEBUG_sys ) ; then
164        echo "IGCM_sys_RshPost :" $@
165    fi
166    rsh ulam exec /bin/ksh ${@}
167    if [ $? -gt 0 ] ; then
168        echo "IGCM_sys_RshPost : erreur."
169        IGCM_debug_Exit "IGCM_sys_RshPost"
170    fi
171    IGCM_debug_PopStack "IGCM_sys_RshPost"
172}
173
174#D-#==================================================
175#D-function IGCM_sys_Mkdir
176#D-* Purpose: Master locale mkdir command
177#D-* Examples:
178#D-
179function IGCM_sys_Mkdir {
180    IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
181    if ( $DEBUG_sys ) ; then
182        echo "IGCM_sys_Mkdir :" $@
183    fi
184    if [ ! -d ${1} ]; then
185        \mkdir -p $1
186        if [ $? -gt 0 ] ; then
187            echo "IGCM_sys_Mkdir : erreur."
188            IGCM_debug_Exit "IGCM_sys_Mkdir"
189        fi
190    fi
191    # vérification :
192    if [ ! -d ${1} ] ; then
193        echo "IGCM_sys_Mkdir : erreur."
194        IGCM_debug_Exit "IGCM_sys_Mkdir"
195    fi
196    IGCM_debug_PopStack "IGCM_sys_Mkdir"
197}
198
199#D-#==================================================
200#D-function IGCM_sys_MkdirArchive
201#D-* Purpose: Mkdir on Archive
202#D-* Examples:
203#D-
204function IGCM_sys_MkdirArchive {
205    IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
206    if ( $DEBUG_sys ) ; then
207        echo "IGCM_sys_MkdirArchive :" $@
208    fi
209    #- creation de repertoire sur le serveur fichier
210    rsh gaya -n mkdir -p $1
211
212    if [ $? -gt 0 ] ; then
213        echo "IGCM_sys_MkdirArchive : erreur."
214        IGCM_debug_Exit "IGCM_sys_MkdirArchive"
215    fi
216    IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
217}
218
219#D-#==================================================
220#D-function IGCM_sys_MkdirWork
221#D-* Purpose: Mkdir on Work
222#D-* Examples:
223#D-
224function IGCM_sys_MkdirWork {
225    IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
226    if ( $DEBUG_sys ) ; then
227        echo "IGCM_sys_MkdirWork :" $@
228    fi
229    #- creation de repertoire sur le serveur fichier
230    if [ ! -d ${1} ]; then 
231        \mkdir -p $1
232        if [ $? -gt 0 ] ; then
233            echo "IGCM_sys_MkdirWork : erreur."
234            IGCM_debug_Exit "IGCM_sys_MkdirWork"
235        fi
236    fi
237    # vérification ?? :
238    if [ ! -d ${1} ] ; then
239        echo "IGCM_sys_MkdirWork : erreur."
240        IGCM_debug_Exit "IGCM_sys_MkdirWork"
241    fi
242    IGCM_debug_PopStack "IGCM_sys_MkdirWork"
243}
244#IGCM_sys_MkdirWork ${RUN_DIR_PATH}
245#echo "RUN_DIR_PATH ${RUN_DIR_PATH} ok."
246
247#D-#==================================================
248#D-function IGCM_sys_Cd
249#D-* Purpose: master cd command
250#D-* Examples:
251#D-
252function IGCM_sys_Cd {
253    IGCM_debug_PushStack "IGCM_sys_Cd" $@
254    if ( $DEBUG_sys ) ; then
255        echo "IGCM_sys_Cd :" $@
256    fi
257    \cd $1
258    if [ $? -gt 0 ] ; then
259        echo "IGCM_sys_Cd : erreur."
260        IGCM_debug_Exit "IGCM_sys_Cd"
261    fi
262    IGCM_debug_PopStack "IGCM_sys_Cd"
263}
264
265#D-#==================================================
266#D-function IGCM_sys_Chmod
267#D-* Purpose: Chmod
268#D-* Examples:
269#D-
270function IGCM_sys_Chmod {
271    IGCM_debug_PushStack "IGCM_sys_Chmod" -- $@
272    if ( $DEBUG_sys ) ; then
273        echo "IGCM_sys_Chmod :" $@
274    fi
275    if [ $DRYRUN -le 1 ]; then
276        \chmod $@
277        if [ $? -gt 0 ] ; then
278            echo "IGCM_sys_Chmod : erreur."
279            IGCM_debug_Exit "IGCM_sys_Chmod"
280        fi
281    else
282        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
283    fi
284    IGCM_debug_PopStack "IGCM_sys_Chmod"
285}
286
287#D-#==================================================
288#D-function IGCM_sys_FileSize
289#D-* Purpose: Filesize
290#D-* Examples:
291#D-
292function IGCM_sys_FileSize {
293    IGCM_debug_PushStack "IGCM_sys_FileSize" $@
294
295    typeset sizeF
296    set +A sizeF -- $( ls -la ${1} )
297    if [ $? -gt 0 ] ; then
298        IGCM_debug_Exit "IGCM_sys_FileSize"
299    fi
300    eval ${2}=${sizeF[4]}
301
302    IGCM_debug_PopStack "IGCM_sys_FileSize"
303}
304
305#D-#==================================================
306#D-function IGCM_sys_TestDir
307#D-* Purpose: Test Directory that must exists
308#D-* Examples:
309#D-
310function IGCM_sys_TestDir {
311    IGCM_debug_PushStack "IGCM_sys_TestDir" $@
312    if ( $DEBUG_sys ) ; then
313        echo "IGCM_sys_TestDir :" $@
314    fi
315    typeset ExistFlag
316    ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
317    IGCM_debug_PopStack "IGCM_sys_TestDir"
318
319    return ${ExistFlag}
320}
321
322#D-#==================================================
323#D-function IGCM_sys_TestDirArchive
324#D-* Purpose: Test Directory that must exists on Archive
325#D-* Examples:
326#D-
327function IGCM_sys_TestDirArchive {
328    IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
329    if ( $DEBUG_sys ) ; then
330        echo "IGCM_sys_TestDirArchive :" $@
331    fi
332    typeset ExistFlag
333    ExistFlag=$( IGCM_sys_RshArchive "[ -d $1 ] && echo 0 || echo 1" )
334    IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
335
336    return ${ExistFlag}
337}
338
339#D-#==================================================
340#D-function IGCM_sys_TestFileArchive
341#D-* Purpose: Test file that must NOT EXISTS on Archive
342#D-* Examples:
343#D-
344function IGCM_sys_TestFileArchive {
345    IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
346    if ( $DEBUG_sys ) ; then
347        echo "IGCM_sys_TestFileArchive :" $@
348    fi
349    typeset ExistFlag
350    ExistFlag=$( IGCM_sys_RshArchive "[ -f $1 ] && echo 0 || echo 1" )
351    IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
352
353    return ${ExistFlag}
354}
355
356#D-#==================================================
357#D-function IGCM_sys_CountFileArchive
358#D-* Purpose: Count files on Archive filesystem
359#D-* Examples:
360#D-
361function IGCM_sys_CountFileArchive {
362    IGCM_debug_PushStack "IGCM_sys_CountFileArchive" $@
363    IGCM_sys_RshArchive "ls ${@} 2>/dev/null | wc -l"
364    if [ $? -gt 0 ] ; then
365        echo "IGCM_sys_CountFileArchive : erreur."
366    fi
367    IGCM_debug_PopStack "IGCM_sys_CountFileArchive"
368}
369
370#D-#==================================================
371#D-function IGCM_sys_Tree
372#D-* Purpose: Tree directories with files on ${ARCHIVE}
373#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
374#D-
375function IGCM_sys_Tree {
376    IGCM_debug_PushStack "IGCM_sys_Tree" $@
377    if ( $DEBUG_sys ) ; then
378        echo "IGCM_sys_Tree :" $@
379    fi
380
381    \mfls -r $@
382
383    IGCM_debug_PopStack "IGCM_sys_Tree"
384}
385
386#D-#==================================================
387#D-function IGCM_sys_Tar
388#D-* Purpose: master un-tar command
389#D-* Examples:
390#D-
391function IGCM_sys_Tar {
392    IGCM_debug_PushStack "IGCM_sys_Tar" $@
393    if ( $DEBUG_sys ) ; then
394        echo "IGCM_sys_Tar :" $@
395    fi
396    \tar xvf $1
397    if [ $? -gt 0 ] ; then
398        echo "IGCM_sys_Tar : erreur."
399        IGCM_debug_Exit "IGCM_sys_Tar"
400    fi
401    IGCM_debug_PopStack "IGCM_sys_Tar"
402}
403
404#D-#==================================================
405#D-function IGCM_sys_UnTar
406#D-* Purpose: master un-tar command
407#D-* Examples:
408#D-
409function IGCM_sys_UnTar {
410    IGCM_debug_PushStack "IGCM_sys_UnTar" $@
411    if ( $DEBUG_sys ) ; then
412        echo "IGCM_sys_UnTar :" $@
413    fi
414    \tar xvf $1
415    if [ $? -gt 0 ] ; then
416        echo "IGCM_sys_UnTar : erreur."
417        IGCM_debug_Exit "IGCM_sys_UnTar"
418    fi
419    IGCM_debug_PopStack "IGCM_sys_UnTar"
420}
421
422#D-#==================================================
423#D-function IGCM_sys_Qsub
424#D-* Purpose: Qsub new job
425#D-* Examples:
426#D-
427function IGCM_sys_Qsub {
428    IGCM_debug_PushStack "IGCM_sys_Qsub" $@
429    if ( $DEBUG_sys ) ; then
430        echo "IGCM_sys_Qsub :" $@
431    fi
432    {
433      [ ${#@} = 1 ] &&  { cd $LOADL_STEP_INITDIR ; /usr/local/bin/llsubmit $1 ; ERROR=$? ; cd - ; }
434      [ ${#@} = 2 ] &&  { cd $2 ; /usr/local/bin/llsubmit $1 ; ERROR=$? ; cd - ; }
435    }
436    if [ ${ERROR} -gt 0 ] ; then
437        echo "IGCM_sys_Qsub : erreur $@."
438        IGCM_debug_Exit "IGCM_sys_Qsub"
439    fi
440    IGCM_debug_PopStack "IGCM_sys_Qsub"
441}
442
443#D-#==================================================
444#D-function IGCM_sys_QsubPost
445#D-* Purpose: Qsub new job on scalaire
446#D-* Examples:
447#D-
448function IGCM_sys_QsubPost {
449    IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
450    if ( $DEBUG_sys ) ; then
451        echo "IGCM_sys_QsubPost :" $@
452    fi
453    cd ${POST_DIR}
454    /opt/ibmll/LoadL/full/bin/llsubmit ${libIGCM_POST}/$1.job
455    cd -
456    if [ $? -gt 0 ] ; then
457        echo "IGCM_sys_QsubPost : erreur " $@
458        IGCM_debug_Exit "IGCM_sys_QsubPost"
459    fi
460    IGCM_debug_PopStack "IGCM_sys_QsubPost"
461}
462
463#D-*************************
464#D- File transfer functions
465#D-*************************
466#D-
467
468#D-#==================================================
469#D-function IGCM_sys_Rsync_out
470#D-* Purpose: treat return val of rsync
471#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
472#D-  Error values and explanations can depend on your system version.
473function IGCM_sys_Rsync_out {
474    RET=$1
475    if [ ! $RET ] ; then
476        echo "rsync error !"
477    fi
478
479    if [ $MYLANG = "fr" ]; then
480        case $RET in
481            0)  return ;;
482            1)  echo "Erreur de rsync ; RERR_SYNTAX : "
483                echo "Erreur de syntaxe ou d'utilisation."
484                return;;
485            2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
486                echo "Incompatibilité de protocole."
487                return;;
488            3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
489                echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
490                echo "répertoires"
491                return;;
492            4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
493                echo "Action demandée non supportée : une tentative de manipulation de"
494                echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
495                echo "été faite ; ou une option qui est supportée par le  client  mais"
496                echo "pas par le serveur a été spécifiée."
497                return;;
498            10) echo "Erreur de rsync ; RERR_SOCKETIO"
499                echo "Erreur dans le socket d'entrée sortie"
500                return;;
501            11) echo "Erreur de rsync ; RERR_FILEIO"
502                echo "Erreur d'entrée sortie fichier"
503                return;;
504            12) echo "Erreur de rsync ; RERR_STREAMIO"
505                echo "Erreur dans flux de donnée du protocole rsync"
506                return;;
507            13) echo "Erreur de rsync ; RERR_MESSAGEIO"
508                echo "Erreur avec les diagnostics du programme"
509                return;;
510            14) echo "Erreur de rsync ; RERR_IPC"
511                echo "Erreur dans le code IPC"
512                return;;
513            20) echo "Erreur de rsync ; RERR_SIGNAL"
514                echo "SIGUSR1 ou SIGINT reçu"
515                return;;
516            21) echo "Erreur de rsync ; RERR_WAITCHILD"
517                echo "Une erreur retournée par waitpid()"
518                return;;
519            22) echo "Erreur de rsync ; RERR_MALLOC"
520                echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
521                return;;
522            23) echo ""
523                echo "Erreur fichier inexistant"
524                return;;
525            30) echo "Erreur de rsync ; RERR_TIMEOUT"
526                echo "Temps d'attente écoulé dans l'envoi/réception de données"
527                return;;
528            *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
529                return;;
530        esac
531    elif [ $MYLANG = "en" ] ; then
532        case $RET in
533            0)  return;;               
534            1)  echo "rsync error : Syntax or usage error "
535                return;;
536            2)  echo "rsync error : Protocol incompatibility "
537                return;;
538            3)  echo "rsync error : Errors selecting input/output files, dirs"
539                return;;
540            4)  echo "rsync error : Requested action not supported: an attempt"
541                echo "was made to manipulate 64-bit files on a platform that cannot support"
542                echo "them; or an option was specified that is supported by the client and"
543                echo "not by the server."
544                return;;
545            5)  echo "rsync error : Error starting client-server protocol"
546                return;;
547            10) echo "rsync error : Error in socket I/O "
548                return;;
549            11) echo "rsync error : Error in file I/O "
550                return;;
551            12) echo "rsync error : Error in rsync protocol data stream "
552                return;;
553            13) echo "rsync error : Errors with program diagnostics "
554                return;;
555            14) echo "rsync error : Error in IPC code "
556                return;;
557            20) echo "rsync error : Received SIGUSR1 or SIGINT "
558                return;;
559            21) echo "rsync error : Some error returned by waitpid() "
560                return;;
561            22) echo "rsync error : Error allocating core memory buffers "
562                return;;
563            23) echo "rsync error : Partial transfer due to error"
564                return;;
565            24) echo "rsync error : Partial transfer due to vanished source files"
566                return;;
567            30) echo "rsync error : Timeout in data send/receive "
568                return;;
569            *)  echo "rsync error : return code of rsync unknown :" $RET
570                return;;
571        esac
572    else
573        echo "unknown language $MYLANG."
574        return
575    fi
576}
577   
578
579#D-#==================================================
580#D-function IGCM_sys_Miror_libIGCM
581#D-* Purpose: Mirror libIGCM PATH and lib to ulam
582#D-* Examples:
583#D-
584function IGCM_sys_Mirror_libIGCM {
585    IGCM_debug_PushStack "IGCM_sys_Mirror_libIGCM"
586    if ( $DEBUG_sys ) ; then
587        echo "IGCM_sys_Mirror_libIGCM"
588    fi
589
590    typeset RET
591
592    IGCM_sys_RshPost <<-EOF
593    mkdir -p ${PATHlibIGCM}
594EOF
595    rsh ulam -n hostname > /dev/null 2>&1
596    RET=$?
597    if [ $RET -eq 0 ] ; then
598#       echo rcp -r ${libIGCM} ulam:${HOME}/${PATHlibIGCM} > out_rsync 2>&1
599#       rcp -r ${libIGCM} ulam:${HOME}/${PATHlibIGCM} >> out_rsync 2>&1
600        echo ${RSYNC} ${RSYNC_opt} -e "rsh " ${libIGCM} ulam:${HOME_POST}/${PATHlibIGCM} > out_rsync 2>&1
601        ${RSYNC} ${RSYNC_opt} -e "rsh " ${libIGCM} ulam:${HOME_POST}/${PATHlibIGCM} >> out_rsync 2>&1
602        RET=$?
603
604        if [ ${RET} -gt 0 ] ; then
605            echo "IGCM_sys_Mirror_libIGCM Warning : no libIGCM on ulam."
606            cat out_rsync
607        fi
608    else
609        echo "No POST-TREATMENT avaible because ulam is down."
610    fi
611    IGCM_debug_PopStack "IGCM_sys_Mirror_libIGCM"
612}
613
614#====================================================
615#- Call IGCM_sys_Mirror_libIGCM now !
616if ( $MirrorlibIGCM ) ; then
617    IGCM_sys_Mirror_libIGCM
618fi
619
620#D-#==================================================
621#D-function IGCM_sys_Cp
622#D-* Purpose: generic cp
623#D-* Examples:
624#D-
625function IGCM_sys_Cp {
626    IGCM_debug_PushStack "IGCM_sys_Cp" $@
627    if ( $DEBUG_sys ) ; then
628        echo "IGCM_sys_Cp :" $@
629    fi
630
631    typeset RET
632
633    echo cp $@ > out_rsync 2>&1
634    \cp $@ >> out_rsync 2>&1
635    RET=$?
636
637    if [ ${RET} -gt 0 ] ; then
638        echo "IGCM_sys_Cp : error."
639        cat out_rsync
640        IGCM_debug_Exit "IGCM_sys_Cp"
641    fi
642    IGCM_debug_PopStack "IGCM_sys_Cp"
643}
644
645#D-#==================================================
646#D-function IGCM_sys_Rm
647#D-* Purpose: generic rm
648#D-* Examples:
649#D-
650function IGCM_sys_Rm {
651    IGCM_debug_PushStack "IGCM_sys_Rm" -- $@
652    if ( $DEBUG_sys ) ; then
653        echo "IGCM_sys_Rm :" $@
654    fi
655
656    typeset RET
657
658    echo rm $@ > out_rsync 2>&1
659    \rm $@ >> out_rsync 2>&1
660    RET=$?
661
662    if [ ${RET} -gt 0 ] ; then
663        echo "IGCM_sys_Rm : error."
664        cat out_rsync
665        IGCM_debug_Exit "IGCM_sys_Rm"
666    fi
667    IGCM_debug_PopStack "IGCM_sys_Rm"
668}
669
670#D-#==================================================
671#D-function IGCM_sys_Mv
672#D-* Purpose: generic move
673#D-* Examples:
674#D-
675function IGCM_sys_Mv {
676    IGCM_debug_PushStack "IGCM_sys_Mv" $@
677    if ( $DEBUG_sys ) ; then
678        echo "IGCM_sys_Mv :" $@
679    fi
680
681    typeset RET
682
683    echo mv $@ > out_rsync 2>&1
684    \mv $@ >> out_rsync 2>&1
685    RET=$?
686
687    if [ ${RET} -gt 0 ] ; then
688        echo "IGCM_sys_Mv : error in mv."
689        cat out_rsync
690        IGCM_debug_Exit "IGCM_sys_Mv"
691    fi
692
693    IGCM_debug_PopStack "IGCM_sys_Mv"
694}
695
696#D-#==================================================
697#D-function IGCM_sys_Put_Dir
698#D-* Purpose: Copy a complete directory on $(ARCHIVE)
699#D-* Examples:
700#D-
701function IGCM_sys_Put_Dir {
702    IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
703    if ( $DEBUG_sys ) ; then
704        echo "IGCM_sys_Put_Dir :" $@
705    fi
706    if [ $DRYRUN = 0 ]; then
707        if [ ! -d ${1} ] ; then
708            echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
709            IGCM_debug_PopStack "IGCM_sys_Put_Dir"
710            return
711        fi
712
713        typeset RET
714
715        # Only if we use rsync
716        #IGCM_sys_TestDirArchive $( dirname $2 )
717        #
718        #USUAL WAY
719        rcp -r $1 gaya:$2 > out_rsync 2>&1
720        RET=$?
721
722        if [ ${RET} -gt 0 ] ; then
723            echo "IGCM_sys_Put_Dir : error."
724            cat out_rsync
725            IGCM_debug_Exit "IGCM_sys_Put_Dir"
726        fi
727    else
728        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
729    fi
730    IGCM_debug_PopStack "IGCM_sys_Put_Dir"
731}
732
733#D-#==================================================
734#D-function IGCM_sys_Get_Dir
735#D-* Purpose: Copy a complete directory from $(ARCHIVE)
736#D-* Examples:
737#D-
738function IGCM_sys_Get_Dir {
739    IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
740    if ( $DEBUG_sys ) ; then
741        echo "IGCM_sys_Get_Dir :" $@
742    fi
743    if [ $DRYRUN = 0 ]; then
744        if [ ! -d ${1} ] ; then
745            echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
746            IGCM_debug_PopStack "IGCM_sys_Get_Dir"
747            return
748        fi
749
750        typeset RET
751
752        #USUAL WAY
753        rcp -rp gaya:$1 $2 > out_rsync 2>&1
754        RET=$?
755
756        if [ ${RET} -gt 0 ] ; then
757            echo "IGCM_sys_Get_Dir : error."
758            cat out_rsync
759            IGCM_debug_Exit "IGCM_sys_Get_Dir"
760        fi
761    else
762        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
763    fi
764    IGCM_debug_PopStack "IGCM_sys_Get_Dir"
765}
766
767#D-#==================================================
768#D-function IGCM_sys_Put_Rest
769#D-* Purpose: Put computied restarts on $(ARCHIVE).
770#D-           File and target directory must exist.
771#D-* Examples:
772#D-
773function IGCM_sys_Put_Rest {
774    IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
775    if ( $DEBUG_sys ) ; then
776        echo "IGCM_sys_Put_Rest :" $@
777    fi
778    if [ $DRYRUN = 0 ]; then
779        if [ ! -f ${1} ] ; then
780            echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
781            IGCM_debug_Exit "IGCM_sys_Put_Rest"
782        fi
783
784        typeset RET
785        #
786        if [ X${JobType} = XRUN ] ; then
787            IGCM_sys_Chmod 444 ${1}
788        fi
789        #
790        # Only if we use rsync
791        #IGCM_sys_MkdirArchive $( dirname $2 )
792        #
793        #USUAL WAY
794        mfput $1 $2 > out_rsync 2>&1
795        RET=$?
796
797#       #RSYNC WITH NETWORK RSH CALL
798#       echo ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
799#       ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
800
801#       #RSYNC WITH NFS USE
802#       echo ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
803#       ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
804       
805#       RET=$?
806#       IGCM_sys_Rsync_out $RET
807
808#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
809#       (( RET=RET+$? ))
810
811        if [ ${RET} -gt 0 ] ; then
812            echo "IGCM_sys_Put_Rest : error."
813            cat out_rsync
814            IGCM_debug_Exit "IGCM_sys_Put_Rest"
815        fi
816    else
817        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
818    fi
819    IGCM_debug_PopStack "IGCM_sys_Put_Rest"
820}
821
822#D-#==================================================
823#D-function IGCM_sys_Put_Out
824#D-* Purpose: Copy a file on $(ARCHIVE) after have chmod it in readonly
825#D-* Examples:
826#D-
827function IGCM_sys_Put_Out {
828    IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
829    if ( $DEBUG_sys ) ; then
830        echo "IGCM_sys_Put_Out :" $@
831    fi
832    if [ $DRYRUN = 0 ]; then
833        if [ ! -f ${1} ] ; then
834            echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
835            IGCM_debug_PopStack "IGCM_sys_Put_Out"
836            return 1
837        fi
838
839        typeset RET
840        #
841        if [ X${JobType} = XRUN ] ; then
842            IGCM_sys_Chmod 444 ${1}
843        fi
844        #
845        # Only if we use rsync
846        #IGCM_sys_MkdirArchive $( dirname $2 )
847        #
848        #USUAL WAY
849        mfput $1 $2 > out_rsync 2>&1
850        RET=$?
851
852#       #RSYNC WITH NETWORK RSH CALL
853#       echo ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
854#       ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
855
856#       #RSYNC WITH NFS USE
857#       echo ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
858#       ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
859
860#       RET=$?
861#       IGCM_sys_Rsync_out $RET
862
863#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
864#       (( RET=RET+$? ))
865
866        if [ ${RET} -gt 0 ] ; then
867            echo "IGCM_sys_Put_Out : error."
868            cat out_rsync
869            IGCM_debug_Exit "IGCM_sys_Put_Out"
870        fi
871    else
872        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
873    fi
874    IGCM_debug_PopStack "IGCM_sys_Put_Out"
875    return 0
876}
877
878#D-#==================================================
879#D-function IGCM_sys_Get
880#D-* Purpose: Get a file from ${ARCHIVE}
881#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
882#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
883function IGCM_sys_Get {
884    IGCM_debug_PushStack "IGCM_sys_Get" $@
885
886    typeset DEST RET dm_liste ifile target
887
888    if ( $DEBUG_sys ) ; then
889        echo "IGCM_sys_Get :" $@
890    fi
891    if [ $DRYRUN -le 2 ]; then
892        if [ X${1} = X'/l' ] ; then
893            # test if the first file is present in the old computation :
894            eval set +A dm_liste \${${2}}
895        else
896            dm_liste=${1}
897        fi
898        eval DEST=\${${#}}
899
900        # test if the (first) file is present in the old computation :
901        IGCM_sys_TestFileArchive ${dm_liste[0]}
902        RET=$?
903        if [ ${RET} -gt 0 ] ; then
904            echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
905            IGCM_debug_Exit "IGCM_sys_Get"
906            return
907        fi
908
909        # SD : dm_liste is not suited for computing job
910        #      because we change filename during transfert
911        #      dm_liste is better suited for post-treatment
912        #dm_liste=" "
913        #(( ifile=1 ))
914        #while [ $ifile -lt $# ] ; do
915        #    dm_liste=$( eval echo ${dm_liste} " "\${${ifile}} )
916        #    (( ifile = ifile + 1 ))
917        #done
918        #DEST=$( eval echo \${${#}} )
919
920        #USUAL WAY
921        mfget ${dm_liste[*]} ${DEST} > out_rsync 2>&1
922        #mfget $1 $2 > out_rsync 2>&1
923        RET=$?
924
925#       #RSYNC WITH NETWORK RSH CALL
926#       echo ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} > out_rsync 2>&1
927#       ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} >> out_rsync 2>&1
928
929#       #RSYNC WITH NFS USE
930#       echo ${RSYNC_FRONT} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} > out_rsync 2>&1
931#       ${RSYNC_FRONT} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} >> out_rsync 2>&1
932
933#       RET=$?
934#       IGCM_sys_Rsync_out $RET
935
936#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
937#       (( RET=RET+$? ))
938
939        if [ ${RET} -gt 0 ] ; then
940            echo "IGCM_sys_Get : copy error."
941            cat out_rsync
942            IGCM_debug_Exit "IGCM_sys_Get"
943        fi
944    else
945        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
946    fi
947    IGCM_debug_PopStack "IGCM_sys_Get"
948}
949
950############################################################## A REVOIR !!
951
952#D-#==================================================
953#D-function IGCM_sys_Rapatrie
954#D-* Purpose: Rapatrie
955#D-* Examples:
956#D-
957function IGCM_sys_Rapatrie {
958    IGCM_debug_PushStack "IGCM_sys_Rapatrie" $@
959    if ( $DEBUG_sys ) ; then
960        echo "IGCM_sys_Rapatrie :" $@
961    fi
962
963    typeset RET=0
964
965    IGCM_sys_Get ${R_STOCKAGE}/$2 $1 ;
966    let $(( RET=RET+$? ))
967    IGCM_sys_Cd $1 ;
968    let $(( RET=RET+$? ))
969    IGCM_sys_UnTar $2 ;
970    let $(( RET=RET+$? ))
971
972    if [ ${RET} -gt 0 ] ; then
973        echo "IGCM_sys_Rapatrie : erreur."
974        IGCM_debug_Exit "IGCM_sys_Rapatrie"
975    fi
976    IGCM_debug_PopStack "IGCM_sys_Rapatrie"
977}
978
979############################################################## A FINIR !!
980
981#D-#==================================================
982#D-function IGCM_sys_GetDate_FichWork
983#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
984#D-* Examples:
985#D-
986function IGCM_sys_GetDate_FichWork {
987    IGCM_debug_PushStack "IGCM_sys_FichWork" $@
988    if ( $DEBUG_sys ) ; then
989        echo "IGCM_sys_GetDate_FichWork :" $@
990    fi
991    # donne la date filesys d'un fichier sur la machine work
992    IGCM_debug_PopStack "IGCM_sys_FichWork"
993}
994
995#D-#==================================================
996#D-function IGCM_sys_GetDate_FichArchive
997#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
998#D-* Examples:
999#D-
1000function IGCM_sys_GetDate_FichArchive {
1001    IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
1002    if ( $DEBUG_sys ) ; then
1003        echo "IGCM_sys_GetDate_FichArchive :" $@
1004    fi
1005    IGCM_debug_PopStack "IGCM_sys_FichArchive"
1006}
1007
1008##############################################################
1009# REBUILD OPERATOR
1010
1011function IGCM_sys_rebuild {
1012    IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
1013    if ( $DEBUG_sys ) ; then
1014        echo "IGCM_sys_rebuild :" $@
1015    fi
1016    /homegpfs/rech/psl/rpsl035/bin/rebuild -f -o $@
1017    if [ $? -gt 0 ] ; then
1018       echo "IGCM_sys_rebuild : erreur ${@}."
1019       IGCM_debug_Exit "rebuild"
1020    fi
1021
1022    IGCM_debug_PopStack "IGCM_sys_rebuild"
1023}
1024
1025############################################################
1026# Activate Running Environnment Variables
1027
1028function IGCM_sys_activ_variables {
1029    IGCM_debug_PushStack "IGCM_sys_activ_variables"
1030    if ( $DEBUG_sys ) ; then
1031        echo "IGCM_sys_activ_variables "
1032    fi
1033
1034# --------------------------------------------------------------------
1035#D- MPI specifications
1036# --------------------------------------------------------------------
1037
1038# --------------------------------------------------------------------
1039#D- Other specifications
1040# --------------------------------------------------------------------
1041
1042    IGCM_debug_PopStack "IGCM_sys_activ_variables"
1043
1044}
1045
1046############################################################
1047# Desactivate Running Environnment Variables
1048
1049function IGCM_sys_desactiv_variables {
1050    IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1051    if ( $DEBUG_sys ) ; then
1052        echo "IGCM_sys_desactiv_variables "
1053    fi
1054# --------------------------------------------------------------------
1055#D- MPI specifications
1056# --------------------------------------------------------------------
1057
1058# --------------------------------------------------------------------
1059#D- Other specifications
1060# --------------------------------------------------------------------
1061
1062    IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1063 
1064}
1065
1066############################################################
1067# Build run file
1068
1069function IGCM_sys_build_run_file {
1070    IGCM_debug_PushStack "IGCM_sys_build_run_file" $@
1071set -x
1072    if ( $DEBUG_sys ) ; then
1073        echo "IGCM_sys_build_run_file " $@
1074    fi
1075    (( NUM_PROC_ATM = BATCH_NUM_PROC_TOT - 2 ))
1076#    (( NUM_PROC_OASIS = BATCH_NUM_PROC_TOT - NUM_PROC_ATM ))
1077#    (( NUM_PROC_OCE = BATCH_NUM_PROC_TOT - NUM_PROC_ATM ))
1078   
1079    if [ $1 = MPI2 ]; then
1080       echo "IGCM_sys_build_run_file : error - MPI2 not available on vargas. "
1081       IGCM_debug_Exit "IGCM_sys_build_run_file"
1082    elif [ $1 = MPI1 ]; then
1083        cat <<EOF > run_file
1084./oasis
1085EOF
1086
1087        (( i = 0 ))
1088        while [ ${i} -lt ${NUM_PROC_ATM} ] ; do
1089            (( i = i + 1 ))
1090            cat <<EOF >> run_file
1091./lmdz.x
1092EOF
1093        done
1094
1095        cat <<EOF >> run_file
1096./opa.xx
1097EOF
1098        wc -l run_file
1099    fi
1100set +x
1101    IGCM_debug_PopStack "IGCM_sys_build_run_file"
1102}
Note: See TracBrowser for help on using the repository browser.