source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_claude.ksh @ 37

Last change on this file since 37 was 37, checked in by sdipsl, 16 years ago

ACa/SD : Function IGCM_sys_RshArchive will be use to manage NEMO restart in the parallel case

  • Property licence set to
    The following licence information concerns ONLY the libIGCM tools
    ==================================================================

    Copyright © Centre National de la Recherche Scientifique CNRS
    Commissariat à l'Énergie Atomique CEA

    libIGCM : Library for Portable Models Computation of IGCM Group.

    IGCM Group is the french IPSL Global Climate Model Group.

    This library is a set of shell scripts and functions whose purpose is
    the management of the initialization, the launch, the transfer of
    output files, the post-processing and the monitoring of datas produce
    by any numerical program on any plateforme.

    This software is governed by the CeCILL license under French law and
    abiding by the rules of distribution of free software. You can use,
    modify and/ or redistribute the software under the terms of the CeCILL
    license as circulated by CEA, CNRS and INRIA at the following URL
    "http://www.cecill.info".

    As a counterpart to the access to the source code and rights to copy,
    modify and redistribute granted by the license, users are provided only
    with a limited warranty and the software's author, the holder of the
    economic rights, and the successive licensors have only limited
    liability.

    In this respect, the user's attention is drawn to the risks associated
    with loading, using, modifying and/or developing or reproducing the
    software by the user in light of its specific status of free software,
    that may mean that it is complicated to manipulate, and that also
    therefore means that it is reserved for developers and experienced
    professionals having in-depth computer knowledge. Users are therefore
    encouraged to load and test the software's suitability as regards their
    requirements in conditions enabling the security of their systems and/or
    data to be ensured and, more generally, to use and operate it in the
    same conditions as regards security.

    The fact that you are presently reading this means that you have had
    knowledge of the CeCILL license and that you accept its terms.
  • Property svn:keywords set to Date Author Revision
File size: 32.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 claude and other LMD computers
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
72#D-
73#D-#==================================================
74#D-Program used in libIGCM
75#D-#==================================================
76
77# rsync with path
78typeset -r RSYNC=/usr/bin/rsync 
79#RSYNC_opt args to rsync
80typeset -r RSYNC_opt="-Lt -v"
81
82#====================================================
83# Source Ferret
84#. /home/${LOGIN}/.atlas_env_${HOST}_ksh
85export FER_ATLAS /usr/local/atlas
86export FER_GO "$FER_GO $FER_ATLAS"
87export FER_DATA "$FER_DATA $FER_ATLAS"
88export FER_PALETTE "$FER_PALETTE $FER_ATLAS"
89export FER_EXTERNAL_FUNCTIONS "$FER_EXTERNAL_FUNCTIONS $FER_ATLAS"
90export PATH {$FER_ATLAS}:{$PATH}
91
92#====================================================
93# Host specific DIRECTORIES
94#====================================================
95
96#====================================================
97#- R_EXE   (==> BIN_DIR = ${MODIPSL}/bin )
98typeset -r R_EXE="${MODIPSL}/bin"
99
100#====================================================
101#- libIGCM_POST
102typeset -r libIGCM_POST=${libIGCM}
103
104#====================================================
105#- SCRATCHDIR (=> ${R_DONNEES})
106typeset -r SCRATCHDIR=${TMPDIR}
107
108#====================================================
109#- RUN_DIR_PATH : Temporary working directory (=> TMP)
110typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${SCRATCHDIR}/tmp$$}
111
112#====================================================
113#- SUBMIT_DIR : submission dir
114typeset -r SUBMIT_DIR=${SUBMIT_DIR:=${PWD}}
115
116#====================================================
117#- ARCHIVE : ENVIRONEMENT VARIABLE
118set +A tmpARCH $( find /d* -maxdepth 1 -type d -name $LOGIN )
119typeset -r ARCHIVE=${ARCHIVE:=${tmpARCH[0]}}
120# if [ -z ${ARCHIVE} ] ; then
121#     echo "   ARCHIVE variable was not set on claude."
122#     echo "On this computer, you must set :"
123#     echo "export ARCHIVE=/d1"
124#     echo "(syntaxe depends of your shell)."
125#     echo "Then your IGCM_OUT dir will be on \"/d1/${LOGIN}/\" ."
126#     exit 1
127# fi
128
129#====================================================
130#- IN
131typeset -r R_IN=${R_IN:=/sanipsl/IGCM}
132
133#====================================================
134#- OUT
135typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
136
137#====================================================
138#- OUT_POST
139typeset -r R_OUT_POST=${R_OUT}
140
141#====================================================
142#- RUN_DIR_PATH : Temporary working directory (=> TMP)
143typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${SCRATCHDIR}/tmp$$}
144
145#=========================================================
146#- Add "time" before mpirun command
147MPIRUN_COMMAND="time "${MPIRUN_COMMAND}
148echo ${MPIRUN_COMMAND}
149
150#D-#==================================================
151#D-function IGCM_sys_RshMaster
152#D-* Purpose: Master rsh command
153#D-* Examples:
154#D-
155function IGCM_sys_RshMaster {
156    IGCM_debug_PushStack "IGCM_sys_RshMaster" $@
157    ssh ${HOST} /bin/ksh  <<-EOF
158    export libIGCM=${libIGCM}
159    . ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
160    . ${libIGCM}/libIGCM_card/libIGCM_card.ksh
161    ${@}
162EOF
163    if [ $? -gt 0 ] ; then
164        echo "IGCM_sys_RshMaster : erreur."
165        IGCM_debug_Exit "IGCM_sys_RshMaster"
166    fi
167    IGCM_debug_PopStack "IGCM_sys_RshMaster"
168}
169
170#D-#==================================================
171#D-function IGCM_sys_RshArchive
172#D-* Purpose: Archive rsh command
173#D-* Examples:
174#D-
175function IGCM_sys_RshArchive {
176    IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
177    /bin/ksh ${@}
178    if [ $? -gt 0 ] ; then
179        echo "IGCM_sys_RshArchive : erreur."
180        IGCM_debug_Exit "IGCM_sys_RshArchive"
181    fi
182    IGCM_debug_PopStack "IGCM_sys_RshArchive"
183}
184
185#D-#==================================================
186#D-function IGCM_sys_RshPost
187#D-* Purpose: Master rsh command
188#D-* Examples:
189#D-
190(( RshPNum = 0 ))
191function IGCM_sys_RshPost {
192    IGCM_debug_PushStack "IGCM_sys_RshPost" $@
193    if ( $DEBUG_sys ) ; then
194        echo "IGCM_sys_RshPost :" $@
195    fi
196    #ssh ${HOST} exec /bin/ksh -vx $@ > out_RshPost.${RshPNum}
197    ssh ${HOST} exec /bin/ksh $@ > out_RshPost.${RshPNum}
198    if [ $? -gt 0 ] ; then
199        echo "IGCM_sys_RshPost : erreur."
200        IGCM_debug_Exit "IGCM_sys_RshPost"
201    fi
202    (( RshPNum = RshPNum + 1 ))
203    IGCM_debug_PopStack "IGCM_sys_RshPost"
204}
205
206#D-#==================================================
207#D-function IGCM_sys_Mkdir
208#D-* Purpose: Master locale mkdir command
209#D-* Examples:
210#D-
211function IGCM_sys_Mkdir {
212    IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
213    if ( $DEBUG_sys ) ; then
214        echo "IGCM_sys_Mkdir :" $@
215    fi
216    if [ ! -d ${1} ]; then
217        \mkdir -p $1
218        if [ $? -gt 0 ] ; then
219            echo "IGCM_sys_Mkdir : erreur."
220            IGCM_debug_Exit "IGCM_sys_Mkdir"
221        fi
222    fi
223    # vérification :
224    if [ ! -d ${1} ] ; then
225        echo "IGCM_sys_Mkdir : erreur."
226        IGCM_debug_Exit "IGCM_sys_Mkdir"
227    fi
228    IGCM_debug_PopStack "IGCM_sys_Mkdir"
229}
230
231#D-#==================================================
232#D-function IGCM_sys_MkdirArchive
233#D-* Purpose: Mkdir on Archive
234#D-* Examples:
235#D-
236function IGCM_sys_MkdirArchive {
237    IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
238    if ( $DEBUG_sys ) ; then
239        echo "IGCM_sys_MkdirArchive :" $@
240    fi
241    #- creation de repertoire sur le serveur fichier
242    if [ ! -d ${1} ]; then 
243        \mkdir -p $1
244        if [ $? -gt 0 ] ; then
245            echo "IGCM_sys_MkdirArchive : erreur."
246            IGCM_debug_Exit "IGCM_sys_MkdirArchive"
247        fi
248    fi
249    # vérification ?? :
250    if [ ! -d ${1} ] ; then
251        echo "IGCM_sys_MkdirArchive : erreur."
252        IGCM_debug_Exit "IGCM_sys_MkdirArchive"
253    fi
254    IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
255}
256
257#D-#==================================================
258#D-function IGCM_sys_MkdirWork
259#D-* Purpose: Mkdir on Work
260#D-* Examples:
261#D-
262function IGCM_sys_MkdirWork {
263    IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
264    if ( $DEBUG_sys ) ; then
265        echo "IGCM_sys_MkdirWork :" $@
266    fi
267    #- creation de repertoire sur le serveur fichier
268    if [ ! -d ${1} ]; then 
269        \mkdir -p $1
270        if [ $? -gt 0 ] ; then
271            echo "IGCM_sys_MkdirWork : erreur."
272            IGCM_debug_Exit "IGCM_sys_MkdirWork"
273        fi
274    fi
275    # vérification ?? :
276    if [ ! -d ${1} ] ; then
277        echo "IGCM_sys_MkdirWork : erreur."
278        IGCM_debug_Exit "IGCM_sys_MkdirWork"
279    fi
280    IGCM_debug_PopStack "IGCM_sys_MkdirWork"
281}
282IGCM_sys_MkdirWork ${RUN_DIR_PATH}
283echo "RUN_DIR_PATH ${RUN_DIR_PATH} ok."
284
285#D-#==================================================
286#D-function IGCM_sys_Cd
287#D-* Purpose: master cd command
288#D-* Examples:
289#D-
290function IGCM_sys_Cd {
291    IGCM_debug_PushStack "IGCM_sys_Cd" $@
292    if ( $DEBUG_sys ) ; then
293        echo "IGCM_sys_Cd :" $@
294    fi
295    \cd $1
296    if [ $? -gt 0 ] ; then
297        echo "IGCM_sys_Cd : erreur."
298        IGCM_debug_Exit "IGCM_sys_Cd"
299    fi
300    IGCM_debug_PopStack "IGCM_sys_Cd"
301}
302
303#D-#==================================================
304#D-function IGCM_sys_Chmod
305#D-* Purpose: Chmod
306#D-* Examples:
307#D-
308function IGCM_sys_Chmod {
309    IGCM_debug_PushStack "IGCM_sys_Chmod" $@
310    if ( $DEBUG_sys ) ; then
311        echo "IGCM_sys_Chmod :" $@
312    fi
313    if [ $DRYRUN -le 1 ]; then
314        \chmod $@
315        if [ $? -gt 0 ] ; then
316            echo "IGCM_sys_Chmod : erreur."
317            IGCM_debug_Exit "IGCM_sys_Chmod"
318        fi
319    else
320        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
321    fi
322    IGCM_debug_PopStack "IGCM_sys_Chmod"
323}
324
325#D-#==================================================
326#D-function IGCM_sys_FileSize
327#D-* Purpose: Filesize
328#D-* Examples:
329#D-
330function IGCM_sys_FileSize {
331    IGCM_debug_PushStack "IGCM_sys_FileSize" $@
332
333    typeset sizeF
334    set +A sizeF -- $( ls -la ${1} )
335    if [ $? -gt 0 ] ; then
336        IGCM_debug_Exit "IGCM_sys_FileSize"
337    fi
338    eval ${2}=${sizeF[4]}
339
340    IGCM_debug_PopStack "IGCM_sys_FileSize"
341}
342
343#D-#==================================================
344#D-function IGCM_sys_TestDir
345#D-* Purpose: Test Directory that must exists
346#D-* Examples:
347#D-
348function IGCM_sys_TestDir {
349    IGCM_debug_PushStack "IGCM_sys_TestDir" $@
350    if ( $DEBUG_sys ) ; then
351        echo "IGCM_sys_TestDir :" $@
352    fi
353    if [ ! -d ${1} ]; then
354        echo "IGCM_sys_TestDir : Directory $1 does not exist."
355        IGCM_debug_Exit "IGCM_sys_TestDir"
356    fi
357    IGCM_debug_PopStack "IGCM_sys_TestDir"
358}
359
360#D-#==================================================
361#D-function IGCM_sys_TestDirArchive
362#D-* Purpose: Test Directory that must exists on Archive
363#D-* Examples:
364#D-
365function IGCM_sys_TestDirArchive {
366    IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
367    if ( $DEBUG_sys ) ; then
368        echo "IGCM_sys_TestDirArchive :" $@
369    fi
370    if [ ! -d ${1} ]; then
371        echo "IGCM_sys_TestDirArchive : Directory $1 does not exist on ${ARCHIVE}."
372        IGCM_debug_Exit "IGCM_sys_TestDirArchive"
373    fi
374    IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
375}
376
377#D-#==================================================
378#D-function IGCM_sys_TestFileArchive
379#D-* Purpose: Test file that must NOT EXISTS on Archive
380#D-* Examples:
381#D-
382function IGCM_sys_TestFileArchive {
383    IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
384    if ( $DEBUG_sys ) ; then
385        echo "IGCM_sys_TestFileArchive :" $@
386    fi
387    if [ ! -f ${1} ]; then
388        IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
389        return 1
390    else
391        IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
392        return 0
393    fi
394}
395
396#D-#==================================================
397#D-function IGCM_sys_Tree
398#D-* Purpose: Tree directories with files on ${ARCHIVE}
399#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
400#D-
401function IGCM_sys_Tree {
402    IGCM_debug_PushStack "IGCM_sys_Tree" $@
403    if ( $DEBUG_sys ) ; then
404        echo "IGCM_sys_Tree :" $@
405    fi
406
407    \tree -f $@
408
409    IGCM_debug_PopStack "IGCM_sys_Tree"
410}
411
412#D-#==================================================
413#D-function IGCM_sys_Tar
414#D-* Purpose: master un-tar command
415#D-* Examples:
416#D-
417function IGCM_sys_Tar {
418    IGCM_debug_PushStack "IGCM_sys_Tar" $@
419    if ( $DEBUG_sys ) ; then
420        echo "IGCM_sys_Tar :" $@
421    fi
422    \tar cvf $@
423    if [ $? -gt 0 ] ; then
424        echo "IGCM_sys_Tar : erreur."
425        IGCM_debug_Exit "IGCM_sys_Tar"
426    fi
427    \tar tvf $1
428
429    IGCM_debug_PopStack "IGCM_sys_Tar"
430}
431
432#D-#==================================================
433#D-function IGCM_sys_UnTar
434#D-* Purpose: master un-tar command
435#D-* Examples:
436#D-
437function IGCM_sys_UnTar {
438    IGCM_debug_PushStack "IGCM_sys_UnTar" $@
439    if ( $DEBUG_sys ) ; then
440        echo "IGCM_sys_UnTar :" $@
441    fi
442    \tar xvf $1
443    if [ $? -gt 0 ] ; then
444        echo "IGCM_sys_UnTar : erreur."
445        IGCM_debug_Exit "IGCM_sys_UnTar"
446    fi
447    IGCM_debug_PopStack "IGCM_sys_UnTar"
448}
449
450#D-#==================================================
451#D-function IGCM_sys_Qsub
452#D-* Purpose: Qsub new job
453#D-* Examples:
454#D-
455function IGCM_sys_Qsub {
456    IGCM_debug_PushStack "IGCM_sys_Qsub" $@
457    if ( $DEBUG_sys ) ; then
458        echo "IGCM_sys_Qsub :" $@
459    fi
460    echo "ssh -l ${LOGIN} ${HOST} ""cd ${SUBMIT_DIR} ; ${@}"" > ${Script_Output} 2>&1 &"
461    ssh -l ${LOGIN} ${HOST} "cd ${SUBMIT_DIR} ; ${@}" > ${Script_Output} 2>&1 &
462    if [ $? -gt 0 ] ; then
463        echo "IGCM_sys_Qsub : erreur."
464        IGCM_debug_Exit "IGCM_sys_Qsub"
465    fi
466    IGCM_debug_PopStack "IGCM_sys_Qsub"
467}
468
469#D-#==================================================
470#D-function IGCM_sys_QsubPost
471#D-* Purpose: Qsub new job on scalaire
472#D-* Examples:
473#D-
474function IGCM_sys_QsubPost {
475    IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
476    if ( $DEBUG_sys ) ; then
477        echo "IGCM_sys_QsubPost :" $@
478    fi
479    #echo "ssh -x -l ${LOGIN} ${HOST} ${3} > ${2} 2>&1 &"
480    #    ssh -x -l ${LOGIN} ${HOST}
481    echo "${3} > ${2} 2>&1 &"
482    ${3} > ${2} 2>&1 &
483    if [ $? -gt 0 ] ; then
484        echo "IGCM_sys_QsubPost : erreur."
485        IGCM_debug_Exit "IGCM_sys_QsubPost"
486    fi
487    IGCM_debug_PopStack "IGCM_sys_QsubPost"
488}
489
490#D-*************************
491#D- File transfer functions
492#D-*************************
493#D-
494
495#D-#==================================================
496#D-function IGCM_sys_Rsync_out
497#D-* Purpose: treat return val of rsync
498#D-* Examples:  IGCM_sys_Rsync_out out_RET_rsync
499#D-  Error values and explanations can depend on your system version.
500function IGCM_sys_Rsync_out {
501    RET=$1
502    if [ ! $RET ] ; then
503        echo "rsync error !"
504    fi
505
506    if [ $MYLANG = "fr" ]; then
507        case $RET in
508            0)  return ;;
509            1)  echo "Erreur de rsync ; RERR_SYNTAX : "
510                echo "Erreur de syntaxe ou d'utilisation."
511                return;;
512            2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
513                echo "Incompatibilité de protocole."
514                return;;
515            3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
516                echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
517                echo "répertoires"
518                return;;
519            4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
520                echo "Action demandée non supportée : une tentative de manipulation de"
521                echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
522                echo "été faite ; ou une option qui est supportée par le  client  mais"
523                echo "pas par le serveur a été spécifiée."
524                return;;
525            10) echo "Erreur de rsync ; RERR_SOCKETIO"
526                echo "Erreur dans le socket d'entrée sortie"
527                return;;
528            11) echo "Erreur de rsync ; RERR_FILEIO"
529                echo "Erreur d'entrée sortie fichier"
530                return;;
531            12) echo "Erreur de rsync ; RERR_STREAMIO"
532                echo "Erreur dans flux de donnée du protocole rsync"
533                return;;
534            13) echo "Erreur de rsync ; RERR_MESSAGEIO"
535                echo "Erreur avec les diagnostics du programme"
536                return;;
537            14) echo "Erreur de rsync ; RERR_IPC"
538                echo "Erreur dans le code IPC"
539                return;;
540            20) echo "Erreur de rsync ; RERR_SIGNAL"
541                echo "SIGUSR1 ou SIGINT reçu"
542                return;;
543            21) echo "Erreur de rsync ; RERR_WAITCHILD"
544                echo "Une erreur retournée par waitpid()"
545                return;;
546            22) echo "Erreur de rsync ; RERR_MALLOC"
547                echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
548                return;;
549            23) echo ""
550                echo "Erreur fichier inexistant"
551                return;;
552            30) echo "Erreur de rsync ; RERR_TIMEOUT"
553                echo "Temps d'attente écoulé dans l'envoi/réception de données"
554                return;;
555            *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
556                return;;
557        esac
558    elif [ $MYLANG = "en" ] ; then
559        case $RET in
560            0)  return;;               
561            1)  echo "rsync error : Syntax or usage error "
562                return;;
563            2)  echo "rsync error : Protocol incompatibility "
564                return;;
565            3)  echo "rsync error : Errors selecting input/output files, dirs"
566                return;;
567            4)  echo "rsync error : Requested action not supported: an attempt"
568                echo "was made to manipulate 64-bit files on a platform that cannot support"
569                echo "them; or an option was specified that is supported by the client and"
570                echo "not by the server."
571                return;;
572            5)  echo "rsync error : Error starting client-server protocol"
573                return;;
574            10) echo "rsync error : Error in socket I/O "
575                return;;
576            11) echo "rsync error : Error in file I/O "
577                return;;
578            12) echo "rsync error : Error in rsync protocol data stream "
579                return;;
580            13) echo "rsync error : Errors with program diagnostics "
581                return;;
582            14) echo "rsync error : Error in IPC code "
583                return;;
584            20) echo "rsync error : Received SIGUSR1 or SIGINT "
585                return;;
586            21) echo "rsync error : Some error returned by waitpid() "
587                return;;
588            22) echo "rsync error : Error allocating core memory buffers "
589                return;;
590            23) echo "rsync error : Partial transfer due to error"
591                return;;
592            24) echo "rsync error : Partial transfer due to vanished source files"
593                return;;
594            30) echo "rsync error : Timeout in data send/receive "
595                return;;
596            *)  echo "rsync error : return code of rsync unknown :" $RET
597                return;;
598        esac
599    else
600        echo "unknown language $MYLANG."
601        return
602    fi
603}
604   
605#D-#==================================================
606#D-function IGCM_sys_Cp
607#D-* Purpose: generic cp
608#D-* Examples:
609#D-
610function IGCM_sys_Cp {
611    IGCM_debug_PushStack "IGCM_sys_Cp" $@
612    if ( $DEBUG_sys ) ; then
613        echo "IGCM_sys_Cp :" $@
614    fi
615
616    typeset RET
617
618    echo cp --preserve=timestamps $@ > out_rsync 2>&1
619    \cp --preserve=timestamps $@ >> out_rsync 2>&1
620    RET=$?
621   
622    if [ ${RET} -gt 0 ] ; then
623        echo "IGCM_sys_Cp : error."
624        cat out_rsync
625        IGCM_debug_Exit "IGCM_sys_Cp"
626    fi
627    IGCM_debug_PopStack "IGCM_sys_Cp"
628}
629
630#D-#==================================================
631#D-function IGCM_sys_Rm
632#D-* Purpose: generic rm
633#D-* Examples:
634#D-
635function IGCM_sys_Rm {
636    IGCM_debug_PushStack "IGCM_sys_Rm" $@
637    if ( $DEBUG_sys ) ; then
638        echo "IGCM_sys_Rm :" $@
639    fi
640
641    typeset RET
642
643    echo rm $@ > out_rsync 2>&1
644    \rm $@ >> out_rsync 2>&1
645    RET=$?
646   
647    if [ ${RET} -gt 0 ] ; then
648        echo "IGCM_sys_Rm : error."
649        cat out_rsync
650        IGCM_debug_Exit "IGCM_sys_Rm"
651    fi
652    IGCM_debug_PopStack "IGCM_sys_Rm"
653}
654
655#D-#==================================================
656#D-function IGCM_sys_Mv
657#D-* Purpose: generic move
658#D-* Examples:
659#D-
660function IGCM_sys_Mv {
661    IGCM_debug_PushStack "IGCM_sys_Mv" $@
662    if ( $DEBUG_sys ) ; then
663        echo "IGCM_sys_Mv :" $@
664    fi
665
666    typeset RET
667
668    echo mv $@ > out_rsync 2>&1
669    \mv $@ >> out_rsync 2>&1
670    RET=$?
671
672    if [ ${RET} -gt 0 ] ; then
673        echo "IGCM_sys_Mv : error in mv."
674        cat out_rsync
675        IGCM_debug_Exit "IGCM_sys_Mv"
676    fi
677
678    IGCM_debug_PopStack "IGCM_sys_Mv"
679}
680
681#D-#==================================================
682#D-function IGCM_sys_Put_Dir
683#D-* Purpose: Copy a complete directory on $(ARCHIVE)
684#D-* Examples:
685#D-
686function IGCM_sys_Put_Dir {
687    IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
688    if ( $DEBUG_sys ) ; then
689        echo "IGCM_sys_Put_Dir :" $@
690    fi
691    if [ $DRYRUN = 0 ]; then
692        if [ ! -d ${1} ] ; then
693            echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
694            IGCM_debug_PopStack "IGCM_sys_Put_Dir"
695            return
696        fi
697
698        typeset RET
699
700        # Only if we use rsync
701        #IGCM_sys_TestDirArchive $( dirname $2 )
702        #
703        #USUAL WAY
704        \cp -R $1 $2 > out_rsync 2>&1
705        RET=$?
706
707        if [ ${RET} -gt 0 ] ; then
708            echo "IGCM_sys_Put_Dir : error."
709            cat out_rsync
710            IGCM_debug_Exit "IGCM_sys_Put_Dir"
711        fi
712    else
713        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
714    fi
715    IGCM_debug_PopStack "IGCM_sys_Put_Dir"
716}
717
718#D-#==================================================
719#D-function IGCM_sys_Get_Dir
720#D-* Purpose: Copy a complete directory from $(ARCHIVE)
721#D-* Examples:
722#D-
723function IGCM_sys_Get_Dir {
724    IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
725    if ( $DEBUG_sys ) ; then
726        echo "IGCM_sys_Get_Dir :" $@
727    fi
728    if [ $DRYRUN = 0 ]; then
729        if [ ! -d ${1} ] ; then
730            echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
731            IGCM_debug_PopStack "IGCM_sys_Get_Dir"
732            return
733        fi
734
735        typeset RET
736
737        #USUAL WAY
738        \cp -R $1 $2 > out_rsync 2>&1
739        RET=$?
740
741        if [ ${RET} -gt 0 ] ; then
742            echo "IGCM_sys_Get_Dir : error."
743            cat out_rsync
744            IGCM_debug_Exit "IGCM_sys_Get_Dir"
745        fi
746    else
747        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
748    fi
749    IGCM_debug_PopStack "IGCM_sys_Get_Dir"
750}
751
752#D-#==================================================
753#D-function IGCM_sys_Get_Master
754#D-* Purpose: Copy a complete directory from MASTER filesystem
755#D-* Examples:
756#D-
757function IGCM_sys_Get_Master {
758    IGCM_debug_PushStack "IGCM_sys_Get_Master" $@
759    if ( $DEBUG_sys ) ; then
760        echo "IGCM_sys_Get_Master :" $@
761    fi
762    if [ $DRYRUN = 0 ]; then
763        if [ ! -d ${1} ] ; then
764            echo "WARNING : IGCM_sys_Get_Master ${1} DOES NOT EXIST ."
765            IGCM_debug_PopStack "IGCM_sys_Get_Master"
766            return
767        fi
768
769        typeset RET
770
771        #USUAL WAY
772        cp -R $1 $2 > out_rsync 2>&1
773        RET=$?
774
775        if [ ${RET} -gt 0 ] ; then
776            echo "IGCM_sys_Get_Master : error."
777            cat out_rsync
778            IGCM_debug_Exit "IGCM_sys_Get_Master"
779        fi
780    else
781        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
782    fi
783    IGCM_debug_PopStack "IGCM_sys_Get_Master"
784}
785
786#D-#==================================================
787#D-function IGCM_sys_Put_Rest
788#D-* Purpose: commande de transfert des restarts $(ARCHIVE).
789#D-           Quitte si le fichier ou si le répertoire d'arriver n'existe pas.
790#D-* Examples:
791#D-
792function IGCM_sys_Put_Rest {
793    IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
794    if ( $DEBUG_sys ) ; then
795        echo "IGCM_sys_Put_Rest :" $@
796    fi
797    if [ $DRYRUN = 0 ]; then
798
799        IGCM_sys_TestDirArchive $( dirname $2 )
800
801        if [ ! -f ${1} ] ; then
802            echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
803            IGCM_debug_Exit "IGCM_sys_Put_Rest"
804        fi
805        IGCM_sys_Chmod 444 ${1}
806
807        typeset RET
808
809        echo ${RSYNC} ${RSYNC_opt} $1 $2 > out_rsync 2>&1
810        ${RSYNC} ${RSYNC_opt} $1 $2 >> out_rsync 2>&1
811        RET=$?
812        IGCM_sys_Rsync_out $RET
813
814        ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
815        (( RET=RET+$? ))
816
817        if [ ${RET} -gt 0 ] ; then
818            echo "IGCM_sys_Put_Rest : error."
819            cat out_rsync
820            IGCM_debug_Exit "IGCM_sys_Put_Rest"
821        fi
822    else
823        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
824    fi
825    IGCM_debug_PopStack "IGCM_sys_Put_Rest"
826}
827
828#D-#==================================================
829#D-function IGCM_sys_Put_Out
830#D-* Purpose: Copy a file on $(ARCHIVE) after have chmod it in readonly
831#D-* Examples:
832#D-
833function IGCM_sys_Put_Out {
834    IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
835    if ( $DEBUG_sys ) ; then
836        echo "IGCM_sys_Put_Out :" $@
837    fi
838    if [ $DRYRUN = 0 ]; then
839        if [ -f ${1} ] ; then
840            if [ ! -d $( dirname $2 ) ] ; then
841                IGCM_sys_MkdirArchive $( dirname $2 )
842            fi
843        else
844            echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
845            IGCM_debug_PopStack "IGCM_sys_Put_Out"
846            return 1
847        fi
848
849        typeset RET
850        #
851        IGCM_sys_Chmod 444 ${1}
852        #
853
854        echo ${RSYNC} ${RSYNC_opt} $1 $2 > out_rsync 2>&1
855        ${RSYNC} ${RSYNC_opt} $1 $2 >> out_rsync 2>&1
856        RET=$?
857        IGCM_sys_Rsync_out $RET
858
859        ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
860        (( RET=RET+$? ))
861
862        if [ ${RET} -gt 0 ] ; then
863            echo "IGCM_sys_Put_Out : error."
864            cat out_rsync
865            IGCM_debug_Exit "IGCM_sys_Put_Out"
866        fi
867    else
868        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
869    fi
870    IGCM_debug_PopStack "IGCM_sys_Put_Out"
871    return 0
872}
873
874#D-#==================================================
875#D-function IGCM_sys_Get
876#D-* Purpose: Get a file from ${ARCHIVE}
877#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
878#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
879function IGCM_sys_Get {
880    IGCM_debug_PushStack "IGCM_sys_Get" $@
881
882    typeset DEST RET dm_liste ifile target
883
884    if ( $DEBUG_sys ) ; then
885        echo "IGCM_sys_Get :" $@
886    fi
887    if [ $DRYRUN -le 2 ]; then
888        if [ X${1} = X'/l' ] ; then
889            # test if the first file is present in the old computation :
890            eval set +A dm_liste \${${2}}
891        else
892            dm_liste=${1}
893        fi
894        eval DEST=\${${#}}
895
896        # test if the (first) file is present in the old computation :
897        IGCM_sys_TestFileArchive ${dm_liste[0]}
898        RET=$?
899        if [ ${RET} -gt 0 ] ; then
900            echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
901            IGCM_debug_Exit "IGCM_sys_Get"
902            return
903        fi
904
905        (( RET=0 ))
906        for target in ${dm_liste[*]} ; do
907          ln -s ${target} ${DEST} >> out_rsync 2>&1
908          (( RET=RET+$? ))
909        done
910
911#       echo ${RSYNC} ${RSYNC_opt} $@ > out_rsync 2>&1
912#       ${RSYNC} ${RSYNC_opt} $@ >> out_rsync 2>&1
913#       RET=$?
914#       IGCM_sys_Rsync_out $RET
915
916#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
917#       (( RET=RET+$? ))
918
919        if [ ${RET} -gt 0 ] ; then
920            echo "IGCM_sys_Get : copy error."
921            cat out_rsync
922            IGCM_debug_Exit "IGCM_sys_Get"
923        fi
924    else
925        ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
926    fi
927    IGCM_debug_PopStack "IGCM_sys_Get"
928}
929
930#D-#==================================================
931#D-function IGCM_sys_Put_Dods
932#D-* Purpose: DO NOTHING ! Put $(ARCHIVE) files on DODS internet protocole.
933#D-* Examples:
934#D-
935function IGCM_sys_Put_Dods {
936    IGCM_debug_PushStack "IGCM_sys_Put_Dods" $@
937    if ( $DEBUG_sys ) ; then
938        echo "IGCM_sys_Put_Dods :" $@
939    fi
940    if [ $DRYRUN = 0 ]; then
941        if [ ! -f ${1} ] ; then
942            echo "WARNING : IGCM_sys_Put_Dods ${1} DOES NOT EXIST ."
943            IGCM_debug_PopStack "IGCM_sys_Put_Dods"
944            return
945        fi
946        #DO NOTHING
947    else
948        IGCM_err "DRYRUN mode = " $DRYRUN
949    fi
950    IGCM_debug_PopStack "IGCM_sys_Put_Dods"
951}
952
953############################################################## A REVOIR !!
954
955#D-#==================================================
956#D-function IGCM_sys_Rapatrie
957#D-* Purpose: Rapatrie
958#D-* Examples:
959#D-
960function IGCM_sys_Rapatrie {
961    IGCM_debug_PushStack "IGCM_sys_Rapatrie" $@
962    if ( $DEBUG_sys ) ; then
963        echo "IGCM_sys_Rapatrie :" $@
964    fi
965
966    typeset RET=0
967
968    IGCM_sys_Get ${R_STOCKAGE}/$2 $1 ;
969    let $(( RET=RET+$? ))
970    IGCM_sys_Cd $1 ;
971    let $(( RET=RET+$? ))
972    IGCM_sys_UnTar $2 ;
973    let $(( RET=RET+$? ))
974
975    if [ ${RET} -gt 0 ] ; then
976        echo "IGCM_sys_Rapatrie : erreur."
977        IGCM_debug_Exit "IGCM_sys_Rapatrie"
978    fi
979    IGCM_debug_PopStack "IGCM_sys_Rapatrie"
980}
981
982############################################################## A FINIR !!
983
984#D-#==================================================
985#D-function IGCM_sys_GetDate_FichWork
986#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
987#D-* Examples:
988#D-
989function IGCM_sys_GetDate_FichWork {
990    IGCM_debug_PushStack "IGCM_sys_FichWork" $@
991    if ( $DEBUG_sys ) ; then
992        echo "IGCM_sys_GetDate_FichWork :" $@
993    fi
994    # donne la date filesys d'un fichier sur la machine work
995    IGCM_debug_PopStack "IGCM_sys_FichWork"
996}
997
998#D-#==================================================
999#D-function IGCM_sys_GetDate_FichArchive
1000#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
1001#D-* Examples:
1002#D-
1003function IGCM_sys_GetDate_FichArchive {
1004    IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
1005    if ( $DEBUG_sys ) ; then
1006        echo "IGCM_sys_GetDate_FichArchive :" $@
1007    fi
1008    IGCM_debug_PopStack "IGCM_sys_FichArchive"
1009}
1010
1011
1012##############################################################
1013# NCO OPERATOR
1014
1015function IGCM_sys_ncap {
1016    IGCM_debug_PushStack "IGCM_sys_ncap" -- $@
1017    if ( $DEBUG_sys ) ; then
1018        echo "IGCM_sys_ncap :" $@
1019    fi
1020    /usr/bin/ncap $@
1021    if [ $? -gt 0 ] ; then
1022       echo "IGCM_sys_ncap : erreur ${@}."
1023#       IGCM_debug_Exit "ncap"
1024    fi
1025
1026    IGCM_debug_PopStack "IGCM_sys_ncap"
1027}
1028
1029ncatted=/usr/bin/ncatted
1030# Problem with ksh and string passed in this function to ncatted !
1031# function IGCM_sys_ncatted {
1032#     IGCM_debug_PushStack "IGCM_sys_ncatted" -- $@
1033#     if ( $DEBUG_sys ) ; then
1034#       echo "IGCM_sys_ncatted :" $@
1035#     fi
1036#     /usr/bin/ncatted $@
1037#     if [ $? -gt 0 ] ; then
1038#        echo "IGCM_sys_ncatted : erreur ${@}."
1039#        IGCM_debug_Exit "ncatted"
1040#     fi
1041
1042#     IGCM_debug_PopStack "IGCM_sys_ncatted"
1043# }
1044
1045function IGCM_sys_ncbo {
1046    IGCM_debug_PushStack "IGCM_sys_ncbo" -- $@
1047    if ( $DEBUG_sys ) ; then
1048        echo "IGCM_sys_ncbo :" $@
1049    fi
1050    /usr/bin/ncbo $@
1051    if [ $? -gt 0 ] ; then
1052       echo "IGCM_sys_ncbo : erreur ${@}."
1053#       IGCM_debug_Exit "ncbo"
1054    fi
1055
1056    IGCM_debug_PopStack "IGCM_sys_ncbo"
1057}
1058
1059function IGCM_sys_ncdiff {
1060    IGCM_debug_PushStack "IGCM_sys_ncdiff" -- $@
1061    if ( $DEBUG_sys ) ; then
1062        echo "IGCM_sys_ncdiff :" $@
1063    fi
1064    /usr/bin/ncdiff $@
1065    if [ $? -gt 0 ] ; then
1066       echo "IGCM_sys_ncdiff : erreur ${@}."
1067#       IGCM_debug_Exit "ncdiff"
1068    fi
1069
1070    IGCM_debug_PopStack "IGCM_sys_ncdiff"
1071}
1072
1073function IGCM_sys_ncea {
1074    IGCM_debug_PushStack "IGCM_sys_ncea" -- $@
1075    if ( $DEBUG_sys ) ; then
1076        echo "IGCM_sys_ncea :" $@
1077    fi
1078    /usr/bin/ncea $@
1079    if [ $? -gt 0 ] ; then
1080       echo "IGCM_sys_ncea : erreur ${@}."
1081#       IGCM_debug_Exit "ncea"
1082    fi
1083
1084    IGCM_debug_PopStack "IGCM_sys_ncea"
1085}
1086
1087function IGCM_sys_ncecat {
1088    IGCM_debug_PushStack "IGCM_sys_ncecat" -- $@
1089    if ( $DEBUG_sys ) ; then
1090        echo "IGCM_sys_ncecat :" $@
1091    fi
1092    /usr/bin/ncecat $@
1093    if [ $? -gt 0 ] ; then
1094       echo "IGCM_sys_ncecat : erreur ${@}."
1095#       IGCM_debug_Exit "ncecat"
1096    fi
1097
1098    IGCM_debug_PopStack "IGCM_sys_ncecat"
1099}
1100
1101function IGCM_sys_ncflint {
1102    IGCM_debug_PushStack "IGCM_sys_ncflint" -- $@
1103    if ( $DEBUG_sys ) ; then
1104        echo "IGCM_sys_ncflint :" $@
1105    fi
1106    /usr/bin/ncflint $@
1107    if [ $? -gt 0 ] ; then
1108       echo "IGCM_sys_ncflint : erreur ${@}."
1109#       IGCM_debug_Exit "ncflint"
1110    fi
1111
1112    IGCM_debug_PopStack "IGCM_sys_ncflint"
1113}
1114
1115function IGCM_sys_ncks {
1116    IGCM_debug_PushStack "IGCM_sys_ncks" -- $@
1117    if ( $DEBUG_sys ) ; then
1118        echo "IGCM_sys_ncks :" $@
1119    fi
1120    /usr/bin/ncks $@
1121    if [ $? -gt 0 ] ; then
1122       echo "IGCM_sys_ncks : erreur ${@}."
1123#       IGCM_debug_Exit "ncks"
1124    fi
1125
1126    IGCM_debug_PopStack "IGCM_sys_ncks"
1127}
1128
1129function IGCM_sys_ncpdq {
1130    IGCM_debug_PushStack "IGCM_sys_ncpdq" -- $@
1131    if ( $DEBUG_sys ) ; then
1132        echo "IGCM_sys_ncpdq :" $@
1133    fi
1134    /usr/bin/ncpdq $@
1135    if [ $? -gt 0 ] ; then
1136       echo "IGCM_sys_ncpdq : erreur ${@}."
1137#       IGCM_debug_Exit "ncpdq"
1138    fi
1139
1140    IGCM_debug_PopStack "IGCM_sys_ncpdq"
1141}
1142
1143function IGCM_sys_ncra {
1144    IGCM_debug_PushStack "IGCM_sys_ncra" -- $@
1145    if ( $DEBUG_sys ) ; then
1146        echo "IGCM_sys_ncra :" $@
1147    fi
1148    /usr/bin/ncra $@
1149    if [ $? -gt 0 ] ; then
1150       echo "IGCM_sys_ncra : erreur ${@}."
1151#       IGCM_debug_Exit "ncra"
1152    fi
1153
1154    IGCM_debug_PopStack "IGCM_sys_ncra"
1155}
1156
1157function IGCM_sys_ncrcat {
1158    IGCM_debug_PushStack "IGCM_sys_ncrcat" -- $@
1159    if ( $DEBUG_sys ) ; then
1160        echo "IGCM_sys_ncrcat :" $@
1161    fi
1162    /usr/bin/ncrcat $@
1163    if [ $? -gt 0 ] ; then
1164       echo "IGCM_sys_ncrcat : erreur ${@}."
1165#       IGCM_debug_Exit "ncrcat"
1166    fi
1167
1168    IGCM_debug_PopStack "IGCM_sys_ncrcat"
1169}
1170
1171function IGCM_sys_ncrename {
1172    IGCM_debug_PushStack "IGCM_sys_ncrename" -- $@
1173    if ( $DEBUG_sys ) ; then
1174        echo "IGCM_sys_ncrename :" $@
1175    fi
1176    /usr/bin/ncrename $@
1177    if [ $? -gt 0 ] ; then
1178       echo "IGCM_sys_ncrename : erreur ${@}."
1179#       IGCM_debug_Exit "ncrename"
1180    fi
1181
1182    IGCM_debug_PopStack "IGCM_sys_ncrename"
1183}
1184
1185function IGCM_sys_ncwa {
1186    IGCM_debug_PushStack "IGCM_sys_ncwa" -- $@
1187    if ( $DEBUG_sys ) ; then
1188        echo "IGCM_sys_ncwa :" $@
1189    fi
1190    /usr/bin/ncwa $@
1191    if [ $? -gt 0 ] ; then
1192       echo "IGCM_sys_ncwa : erreur ${@}."
1193#       IGCM_debug_Exit "ncwa"
1194    fi
1195
1196    IGCM_debug_PopStack "IGCM_sys_ncwa"
1197}
1198
1199############################################################
1200# Activate Running Environnment Variables
1201
1202function IGCM_sys_activ_variables {
1203    IGCM_debug_PushStack "IGCM_sys_activ_variables"
1204    if ( $DEBUG_sys ) ; then
1205        echo "IGCM_sys_activ_variables"
1206    fi
1207    IGCM_debug_PopStack "IGCM_sys_activ_variables"
1208}
1209
1210############################################################
1211# Desactivate Running Environnment Variables
1212
1213function IGCM_sys_desactiv_variables {
1214    IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1215    if ( $DEBUG_sys ) ; then
1216        echo "IGCM_sys_desactiv_variables"
1217    fi
1218    IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1219}
1220
1221############################################################
1222# Build run file
1223
1224function IGCM_sys_build_run_file {
1225    IGCM_debug_PushStack "IGCM_sys_build_run_file"
1226    if ( $DEBUG_sys ) ; then
1227        echo "IGCM_sys_build_run_file"
1228    fi
1229    IGCM_debug_PopStack "IGCM_sys_build_run_file"
1230}
Note: See TracBrowser for help on using the repository browser.