source: tags/libIGCM_v1_8-old/libIGCM_sys/libIGCM_sys_mercurex9.ksh @ 1170

Last change on this file since 1170 was 355, checked in by mmaipsl, 14 years ago

rebound frome mercurex9 nodes through mercure to cesium is OK now.

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