source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_vargas.ksh @ 77

Last change on this file since 77 was 77, checked in by sdipsl, 15 years ago
  • Use MASTER=vargas in libIGCM_sys_vargas.ksh
  • Adapt IGCM_sys_Get_Master command for ulam
File size: 30.2 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=$( rsh gaya -n env | grep PWD | awk "-F=" '{print $2}' )
104
105#====================================================
106#- Mirror libIGCM from vargas to ulam
107typeset -r MirrorlibIGCM=${MirrorlibIGCM:=true}
108
109#====================================================
110#- libIGCM_POST
111PATHlibIGCM=$( echo ${libIGCM} | awk -F"${LOGIN}/" '{print $2}' | sed -e "s&/libIGCM&&" )
112typeset -r HOME_POST=$(rsh ulam -n pwd)
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=$( rsh ulam -n echo \${HOME} | sed -e "s/home/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    { cd $LOADL_STEP_INITDIR ; llsubmit $1 ; }
433    if [ $? -gt 0 ] ; then
434        echo "IGCM_sys_Qsub : erreur $@."
435        IGCM_debug_Exit "IGCM_sys_Qsub"
436    fi
437    IGCM_debug_PopStack "IGCM_sys_Qsub"
438}
439
440#D-#==================================================
441#D-function IGCM_sys_QsubPost
442#D-* Purpose: Qsub new job on scalaire
443#D-* Examples:
444#D-
445function IGCM_sys_QsubPost {
446    IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
447    if ( $DEBUG_sys ) ; then
448        echo "IGCM_sys_QsubPost :" $@
449    fi
450    cd ${POST_DIR}
451    /opt/ibmll/LoadL/full/bin/llsubmit ${libIGCM_POST}/$1.job
452    cd -
453    if [ $? -gt 0 ] ; then
454        echo "IGCM_sys_QsubPost : erreur " $@
455        IGCM_debug_Exit "IGCM_sys_QsubPost"
456    fi
457    IGCM_debug_PopStack "IGCM_sys_QsubPost"
458}
459
460#D-*************************
461#D- File transfer functions
462#D-*************************
463#D-
464
465#D-#==================================================
466#D-function IGCM_sys_Rsync_out
467#D-* Purpose: treat return val of rsync
468#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
469#D-  Error values and explanations can depend on your system version.
470function IGCM_sys_Rsync_out {
471    RET=$1
472    if [ ! $RET ] ; then
473        echo "rsync error !"
474    fi
475
476    if [ $MYLANG = "fr" ]; then
477        case $RET in
478            0)  return ;;
479            1)  echo "Erreur de rsync ; RERR_SYNTAX : "
480                echo "Erreur de syntaxe ou d'utilisation."
481                return;;
482            2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
483                echo "Incompatibilité de protocole."
484                return;;
485            3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
486                echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
487                echo "répertoires"
488                return;;
489            4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
490                echo "Action demandée non supportée : une tentative de manipulation de"
491                echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
492                echo "été faite ; ou une option qui est supportée par le  client  mais"
493                echo "pas par le serveur a été spécifiée."
494                return;;
495            10) echo "Erreur de rsync ; RERR_SOCKETIO"
496                echo "Erreur dans le socket d'entrée sortie"
497                return;;
498            11) echo "Erreur de rsync ; RERR_FILEIO"
499                echo "Erreur d'entrée sortie fichier"
500                return;;
501            12) echo "Erreur de rsync ; RERR_STREAMIO"
502                echo "Erreur dans flux de donnée du protocole rsync"
503                return;;
504            13) echo "Erreur de rsync ; RERR_MESSAGEIO"
505                echo "Erreur avec les diagnostics du programme"
506                return;;
507            14) echo "Erreur de rsync ; RERR_IPC"
508                echo "Erreur dans le code IPC"
509                return;;
510            20) echo "Erreur de rsync ; RERR_SIGNAL"
511                echo "SIGUSR1 ou SIGINT reçu"
512                return;;
513            21) echo "Erreur de rsync ; RERR_WAITCHILD"
514                echo "Une erreur retournée par waitpid()"
515                return;;
516            22) echo "Erreur de rsync ; RERR_MALLOC"
517                echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
518                return;;
519            23) echo ""
520                echo "Erreur fichier inexistant"
521                return;;
522            30) echo "Erreur de rsync ; RERR_TIMEOUT"
523                echo "Temps d'attente écoulé dans l'envoi/réception de données"
524                return;;
525            *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
526                return;;
527        esac
528    elif [ $MYLANG = "en" ] ; then
529        case $RET in
530            0)  return;;               
531            1)  echo "rsync error : Syntax or usage error "
532                return;;
533            2)  echo "rsync error : Protocol incompatibility "
534                return;;
535            3)  echo "rsync error : Errors selecting input/output files, dirs"
536                return;;
537            4)  echo "rsync error : Requested action not supported: an attempt"
538                echo "was made to manipulate 64-bit files on a platform that cannot support"
539                echo "them; or an option was specified that is supported by the client and"
540                echo "not by the server."
541                return;;
542            5)  echo "rsync error : Error starting client-server protocol"
543                return;;
544            10) echo "rsync error : Error in socket I/O "
545                return;;
546            11) echo "rsync error : Error in file I/O "
547                return;;
548            12) echo "rsync error : Error in rsync protocol data stream "
549                return;;
550            13) echo "rsync error : Errors with program diagnostics "
551                return;;
552            14) echo "rsync error : Error in IPC code "
553                return;;
554            20) echo "rsync error : Received SIGUSR1 or SIGINT "
555                return;;
556            21) echo "rsync error : Some error returned by waitpid() "
557                return;;
558            22) echo "rsync error : Error allocating core memory buffers "
559                return;;
560            23) echo "rsync error : Partial transfer due to error"
561                return;;
562            24) echo "rsync error : Partial transfer due to vanished source files"
563                return;;
564            30) echo "rsync error : Timeout in data send/receive "
565                return;;
566            *)  echo "rsync error : return code of rsync unknown :" $RET
567                return;;
568        esac
569    else
570        echo "unknown language $MYLANG."
571        return
572    fi
573}
574   
575
576#D-#==================================================
577#D-function IGCM_sys_Miror_libIGCM
578#D-* Purpose: Mirror libIGCM PATH and lib to ulam
579#D-* Examples:
580#D-
581function IGCM_sys_Mirror_libIGCM {
582    IGCM_debug_PushStack "IGCM_sys_Mirror_libIGCM"
583set -x
584    if ( $DEBUG_sys ) ; then
585        echo "IGCM_sys_Mirror_libIGCM"
586    fi
587
588    typeset RET
589
590    IGCM_sys_RshPost <<-EOF
591    mkdir -p ${PATHlibIGCM}
592EOF
593    rsh ulam -n hostname > /dev/null 2>&1
594    RET=$?
595    if [ $RET -eq 0 ] ; then
596#       echo rcp -r ${libIGCM} ulam:${HOME}/${PATHlibIGCM} > out_rsync 2>&1
597#       rcp -r ${libIGCM} ulam:${HOME}/${PATHlibIGCM} >> out_rsync 2>&1
598        echo ${RSYNC} ${RSYNC_opt} -e "rsh " ${libIGCM} ulam:${HOME_POST}/${PATHlibIGCM} > out_rsync 2>&1
599        ${RSYNC} ${RSYNC_opt} -e "rsh " ${libIGCM} ulam:${HOME_POST}/${PATHlibIGCM} >> out_rsync 2>&1
600        RET=$?
601
602        if [ ${RET} -gt 0 ] ; then
603            echo "IGCM_sys_Mirror_libIGCM Warning : no libIGCM on ulam."
604            cat out_rsync
605        fi
606    else
607        echo "No POST-TREATMENT avaible because ulam is down."
608    fi
609set +x
610    IGCM_debug_PopStack "IGCM_sys_Mirror_libIGCM"
611}
612
613#====================================================
614#- Call IGCM_sys_Mirror_libIGCM now !
615if ( $MirrorlibIGCM ) ; then
616    IGCM_sys_Mirror_libIGCM
617fi
618
619#D-#==================================================
620#D-function IGCM_sys_Cp
621#D-* Purpose: generic cp
622#D-* Examples:
623#D-
624function IGCM_sys_Cp {
625    IGCM_debug_PushStack "IGCM_sys_Cp" $@
626    if ( $DEBUG_sys ) ; then
627        echo "IGCM_sys_Cp :" $@
628    fi
629
630    typeset RET
631
632    echo cp $@ > out_rsync 2>&1
633    \cp $@ >> out_rsync 2>&1
634    RET=$?
635
636    if [ ${RET} -gt 0 ] ; then
637        echo "IGCM_sys_Cp : error."
638        cat out_rsync
639        IGCM_debug_Exit "IGCM_sys_Cp"
640    fi
641    IGCM_debug_PopStack "IGCM_sys_Cp"
642}
643
644#D-#==================================================
645#D-function IGCM_sys_Mv
646#D-* Purpose: generic move
647#D-* Examples:
648#D-
649function IGCM_sys_Mv {
650    IGCM_debug_PushStack "IGCM_sys_Mv" $@
651    if ( $DEBUG_sys ) ; then
652        echo "IGCM_sys_Mv :" $@
653    fi
654
655    typeset RET
656
657    echo mv $@ > out_rsync 2>&1
658    \mv $@ >> out_rsync 2>&1
659    RET=$?
660
661    if [ ${RET} -gt 0 ] ; then
662        echo "IGCM_sys_Mv : error in mv."
663        cat out_rsync
664        IGCM_debug_Exit "IGCM_sys_Mv"
665    fi
666
667    IGCM_debug_PopStack "IGCM_sys_Mv"
668}
669
670#D-#==================================================
671#D-function IGCM_sys_Put_Dir
672#D-* Purpose: Copy a complete directory on $(ARCHIVE)
673#D-* Examples:
674#D-
675function IGCM_sys_Put_Dir {
676    IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
677    if ( $DEBUG_sys ) ; then
678        echo "IGCM_sys_Put_Dir :" $@
679    fi
680    if [ $DRYRUN = 0 ]; then
681        if [ ! -d ${1} ] ; then
682            echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
683            IGCM_debug_PopStack "IGCM_sys_Put_Dir"
684            return
685        fi
686
687        typeset RET
688
689        # Only if we use rsync
690        #IGCM_sys_TestDirArchive $( dirname $2 )
691        #
692        #USUAL WAY
693        rcp -r $1 gaya:$2 > out_rsync 2>&1
694        RET=$?
695
696        if [ ${RET} -gt 0 ] ; then
697            echo "IGCM_sys_Put_Dir : error."
698            cat out_rsync
699            IGCM_debug_Exit "IGCM_sys_Put_Dir"
700        fi
701    else
702        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
703    fi
704    IGCM_debug_PopStack "IGCM_sys_Put_Dir"
705}
706
707#D-#==================================================
708#D-function IGCM_sys_Get_Dir
709#D-* Purpose: Copy a complete directory from $(ARCHIVE)
710#D-* Examples:
711#D-
712function IGCM_sys_Get_Dir {
713    IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
714    if ( $DEBUG_sys ) ; then
715        echo "IGCM_sys_Get_Dir :" $@
716    fi
717    if [ $DRYRUN = 0 ]; then
718        if [ ! -d ${1} ] ; then
719            echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
720            IGCM_debug_PopStack "IGCM_sys_Get_Dir"
721            return
722        fi
723
724        typeset RET
725
726        #USUAL WAY
727        rcp -rp gaya:$1 $2 > out_rsync 2>&1
728        RET=$?
729
730        if [ ${RET} -gt 0 ] ; then
731            echo "IGCM_sys_Get_Dir : error."
732            cat out_rsync
733            IGCM_debug_Exit "IGCM_sys_Get_Dir"
734        fi
735    else
736        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
737    fi
738    IGCM_debug_PopStack "IGCM_sys_Get_Dir"
739}
740
741#D-#==================================================
742#D-function IGCM_sys_Put_Rest
743#D-* Purpose: Put computied restarts on $(ARCHIVE).
744#D-           File and target directory must exist.
745#D-* Examples:
746#D-
747function IGCM_sys_Put_Rest {
748    IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
749    if ( $DEBUG_sys ) ; then
750        echo "IGCM_sys_Put_Rest :" $@
751    fi
752    if [ $DRYRUN = 0 ]; then
753        if [ ! -f ${1} ] ; then
754            echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
755            IGCM_debug_Exit "IGCM_sys_Put_Rest"
756        fi
757
758        typeset RET
759        #
760        IGCM_sys_Chmod 444 ${1}
761        #
762        # Only if we use rsync
763        #IGCM_sys_MkdirArchive $( dirname $2 )
764        #
765        #USUAL WAY
766        mfput $1 $2 > out_rsync 2>&1
767        RET=$?
768
769#       #RSYNC WITH NETWORK RSH CALL
770#       echo ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
771#       ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
772
773#       #RSYNC WITH NFS USE
774#       echo ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
775#       ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
776       
777#       RET=$?
778#       IGCM_sys_Rsync_out $RET
779
780#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
781#       (( RET=RET+$? ))
782
783        if [ ${RET} -gt 0 ] ; then
784            echo "IGCM_sys_Put_Rest : error."
785            cat out_rsync
786            IGCM_debug_Exit "IGCM_sys_Put_Rest"
787        fi
788    else
789        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
790    fi
791    IGCM_debug_PopStack "IGCM_sys_Put_Rest"
792}
793
794#D-#==================================================
795#D-function IGCM_sys_Put_Out
796#D-* Purpose: Copy a file on $(ARCHIVE) after have chmod it in readonly
797#D-* Examples:
798#D-
799function IGCM_sys_Put_Out {
800    IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
801    if ( $DEBUG_sys ) ; then
802        echo "IGCM_sys_Put_Out :" $@
803    fi
804    if [ $DRYRUN = 0 ]; then
805        if [ ! -f ${1} ] ; then
806            echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
807            IGCM_debug_PopStack "IGCM_sys_Put_Out"
808            return 1
809        fi
810
811        typeset RET
812        #
813        IGCM_sys_Chmod 444 ${1}
814        #
815        # Only if we use rsync
816        #IGCM_sys_MkdirArchive $( dirname $2 )
817        #
818        #USUAL WAY
819        mfput $1 $2 > out_rsync 2>&1
820        RET=$?
821
822#       #RSYNC WITH NETWORK RSH CALL
823#       echo ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} > out_rsync 2>&1
824#       ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RUN_DIR}/$1 ${RHOST}:${2} >> out_rsync 2>&1
825
826#       #RSYNC WITH NFS USE
827#       echo ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
828#       ${RSYNC_FRONT} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
829
830#       RET=$?
831#       IGCM_sys_Rsync_out $RET
832
833#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
834#       (( RET=RET+$? ))
835
836        if [ ${RET} -gt 0 ] ; then
837            echo "IGCM_sys_Put_Out : error."
838            cat out_rsync
839            IGCM_debug_Exit "IGCM_sys_Put_Out"
840        fi
841    else
842        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
843    fi
844    IGCM_debug_PopStack "IGCM_sys_Put_Out"
845    return 0
846}
847
848#D-#==================================================
849#D-function IGCM_sys_Get
850#D-* Purpose: Get a file from ${ARCHIVE}
851#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
852#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
853function IGCM_sys_Get {
854    IGCM_debug_PushStack "IGCM_sys_Get" $@
855
856    typeset DEST RET dm_liste ifile target
857
858    if ( $DEBUG_sys ) ; then
859        echo "IGCM_sys_Get :" $@
860    fi
861    if [ $DRYRUN -le 2 ]; then
862        if [ X${1} = X'/l' ] ; then
863            # test if the first file is present in the old computation :
864            eval set +A dm_liste \${${2}}
865        else
866            dm_liste=${1}
867        fi
868        eval DEST=\${${#}}
869
870        # test if the (first) file is present in the old computation :
871        IGCM_sys_TestFileArchive ${dm_liste[0]}
872        RET=$?
873        if [ ${RET} -gt 0 ] ; then
874            echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
875            IGCM_debug_Exit "IGCM_sys_Get"
876            return
877        fi
878
879        # SD : dm_liste is not suited for computing job
880        #      because we change filename during transfert
881        #      dm_liste is better suited for post-treatment
882        #dm_liste=" "
883        #(( ifile=1 ))
884        #while [ $ifile -lt $# ] ; do
885        #    dm_liste=$( eval echo ${dm_liste} " "\${${ifile}} )
886        #    (( ifile = ifile + 1 ))
887        #done
888        #DEST=$( eval echo \${${#}} )
889
890        #USUAL WAY
891        mfget ${dm_liste[*]} ${DEST} > out_rsync 2>&1
892        #mfget $1 $2 > out_rsync 2>&1
893        RET=$?
894
895#       #RSYNC WITH NETWORK RSH CALL
896#       echo ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} > out_rsync 2>&1
897#       ${RSYNC_FRONT} ${RSYNC_opt} --rsync-path=${REMOTE_RSYNC} -e rsh ${RHOST}:"${dm_liste}" ${RHOST}:${RUN_DIR}/${DEST} >> out_rsync 2>&1
898
899#       #RSYNC WITH NFS USE
900#       echo ${RSYNC_FRONT} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} > out_rsync 2>&1
901#       ${RSYNC_FRONT} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} >> out_rsync 2>&1
902
903#       RET=$?
904#       IGCM_sys_Rsync_out $RET
905
906#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
907#       (( RET=RET+$? ))
908
909        if [ ${RET} -gt 0 ] ; then
910            echo "IGCM_sys_Get : copy error."
911            cat out_rsync
912            IGCM_debug_Exit "IGCM_sys_Get"
913        fi
914    else
915        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
916    fi
917    IGCM_debug_PopStack "IGCM_sys_Get"
918}
919
920############################################################## A REVOIR !!
921
922#D-#==================================================
923#D-function IGCM_sys_Rapatrie
924#D-* Purpose: Rapatrie
925#D-* Examples:
926#D-
927function IGCM_sys_Rapatrie {
928    IGCM_debug_PushStack "IGCM_sys_Rapatrie" $@
929    if ( $DEBUG_sys ) ; then
930        echo "IGCM_sys_Rapatrie :" $@
931    fi
932
933    typeset RET=0
934
935    IGCM_sys_Get ${R_STOCKAGE}/$2 $1 ;
936    let $(( RET=RET+$? ))
937    IGCM_sys_Cd $1 ;
938    let $(( RET=RET+$? ))
939    IGCM_sys_UnTar $2 ;
940    let $(( RET=RET+$? ))
941
942    if [ ${RET} -gt 0 ] ; then
943        echo "IGCM_sys_Rapatrie : erreur."
944        IGCM_debug_Exit "IGCM_sys_Rapatrie"
945    fi
946    IGCM_debug_PopStack "IGCM_sys_Rapatrie"
947}
948
949############################################################## A FINIR !!
950
951#D-#==================================================
952#D-function IGCM_sys_GetDate_FichWork
953#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
954#D-* Examples:
955#D-
956function IGCM_sys_GetDate_FichWork {
957    IGCM_debug_PushStack "IGCM_sys_FichWork" $@
958    if ( $DEBUG_sys ) ; then
959        echo "IGCM_sys_GetDate_FichWork :" $@
960    fi
961    # donne la date filesys d'un fichier sur la machine work
962    IGCM_debug_PopStack "IGCM_sys_FichWork"
963}
964
965#D-#==================================================
966#D-function IGCM_sys_GetDate_FichArchive
967#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
968#D-* Examples:
969#D-
970function IGCM_sys_GetDate_FichArchive {
971    IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
972    if ( $DEBUG_sys ) ; then
973        echo "IGCM_sys_GetDate_FichArchive :" $@
974    fi
975    IGCM_debug_PopStack "IGCM_sys_FichArchive"
976}
977
978##############################################################
979# REBUILD OPERATOR
980
981function IGCM_sys_rebuild {
982    IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
983    if ( $DEBUG_sys ) ; then
984        echo "IGCM_sys_rebuild :" $@
985    fi
986    /homegpfs/rech/psl/rpsl035/bin/rebuild -f -o $@
987    if [ $? -gt 0 ] ; then
988       echo "IGCM_sys_rebuild : erreur ${@}."
989       IGCM_debug_Exit "rebuild"
990    fi
991
992    IGCM_debug_PopStack "IGCM_sys_rebuild"
993}
994
995############################################################
996# Activate Running Environnment Variables
997
998function IGCM_sys_activ_variables {
999    IGCM_debug_PushStack "IGCM_sys_activ_variables"
1000    if ( $DEBUG_sys ) ; then
1001        echo "IGCM_sys_activ_variables "
1002    fi
1003
1004# --------------------------------------------------------------------
1005#D- MPI specifications
1006# --------------------------------------------------------------------
1007
1008# --------------------------------------------------------------------
1009#D- Other specifications
1010# --------------------------------------------------------------------
1011
1012    IGCM_debug_PopStack "IGCM_sys_activ_variables"
1013
1014}
1015
1016############################################################
1017# Desactivate Running Environnment Variables
1018
1019function IGCM_sys_desactiv_variables {
1020    IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1021    if ( $DEBUG_sys ) ; then
1022        echo "IGCM_sys_desactiv_variables "
1023    fi
1024# --------------------------------------------------------------------
1025#D- MPI specifications
1026# --------------------------------------------------------------------
1027
1028# --------------------------------------------------------------------
1029#D- Other specifications
1030# --------------------------------------------------------------------
1031
1032    IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1033 
1034}
1035
1036############################################################
1037# Build run file
1038
1039function IGCM_sys_build_run_file {
1040    IGCM_debug_PushStack "IGCM_sys_build_run_file" $@
1041set -x
1042    if ( $DEBUG_sys ) ; then
1043        echo "IGCM_sys_build_run_file " $@
1044    fi
1045    (( NUM_PROC_ATM = BATCH_NUM_PROC_TOT - 2 ))
1046#    (( NUM_PROC_OASIS = BATCH_NUM_PROC_TOT - NUM_PROC_ATM ))
1047#    (( NUM_PROC_OCE = BATCH_NUM_PROC_TOT - NUM_PROC_ATM ))
1048   
1049    if [ $1 = MPI2 ]; then
1050       echo "IGCM_sys_build_run_file : error - MPI2 not available on vargas. "
1051       IGCM_debug_Exit "IGCM_sys_build_run_file"
1052    elif [ $1 = MPI1 ]; then
1053        cat <<EOF > run_file
1054./oasis
1055EOF
1056
1057        (( i = 0 ))
1058        while [ ${i} -lt ${NUM_PROC_ATM} ] ; do
1059            (( i = i + 1 ))
1060            cat <<EOF >> run_file
1061./lmdz.x
1062EOF
1063        done
1064
1065        cat <<EOF >> run_file
1066./opa.xx
1067EOF
1068        wc -l run_file
1069    fi
1070set +x
1071    IGCM_debug_PopStack "IGCM_sys_build_run_file"
1072}
Note: See TracBrowser for help on using the repository browser.