source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_obelix.ksh @ 742

Last change on this file since 742 was 742, checked in by sdipsl, 12 years ago
  • ensemble handling : remove machine specific
  • Property svn:keywords set to Revision Author Date
File size: 60.8 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil, Martial Mancip, Christian Laguerre
5# Contact: Martial.Mancip__at__ipsl.jussieu.fr
6# $Revision::                                          $ Revision of last commit
7# $Author::                                            $ Author of last commit
8# $Date::                                              $ Date of last commit
9# IPSL (2006)
10#  This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC
11#
12#**************************************************************
13
14#=========================================================
15# The documentation of this file can be automatically generated
16# if you use the prefix #D- for comments to be extracted.
17# Extract with command: cat lib* | grep "^#D-" | cut -c "4-"
18#=========================================================
19
20#D-#==================================================
21#D-LibIGCM_sys for obelix
22#D-#==================================================
23#D-
24#D- This ksh library if a layer under some usefull
25#D-environment variables and shell commands.
26#D-All those definitions depend on host particularities.
27#D-It manages a stack mechanism and test validity of operations.
28#D-All function described bellow must be prefixed by IGCM_sys.
29
30#====================================================
31# libIGCM_sys PARAMETERS
32#====================================================
33
34#====================================================
35# set DEBUG_sys to true to output calls of function
36typeset -r DEBUG_sys=${DEBUG_sys:=true}
37
38#====================================================
39# Turn in dry run mode ? (sys_Put_Rest, sys_Put_Out, sys_Get)
40typeset -r DRYRUN=${DRYRUN:=0}
41
42# YOU MUST COMPILE YOUR EXE FILES FOR DRYRUN MODE !
43# -------------------------------------------------------------------------------------
44# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
45# |          |  Cp/Exe param files |            |  Chmod  |                           |
46# |          |      Qsub           |            |         |                           |
47# -------------------------------------------------------------------------------------
48# |    0     |       yes           |    yes     |  yes    |      yes                  |
49# -------------------------------------------------------------------------------------
50# |    1     |       yes           |    yes     |  yes    |      no                   |
51# -------------------------------------------------------------------------------------
52# |    2     |       yes           |    yes     |  no     |      no                   |
53# -------------------------------------------------------------------------------------
54# |    3     |       yes           |    no      |  no     |      no                   |
55# -------------------------------------------------------------------------------------
56
57#=====================================================
58# Global Variables :
59#=====================================================
60# Language : "fr" or "en"
61typeset -r MYLANG="fr"
62
63#=====================================================
64# Host and user names
65# $hostname ou hostname
66typeset HOST=${HOST:=$( hostname )}
67# $username ou whoami
68typeset LOGIN=${LOGIN:=$( whoami )}
69# $hostname of the MASTER job
70typeset MASTER=${MASTER:=$( hostname )}
71
72#D-
73#D-#==================================================
74#D-Program used in libIGCM
75#D-#==================================================
76
77# Submit command
78typeset SUBMIT=${SUBMIT:=qsub}
79# rsync with path
80typeset -r RSYNC=/usr/bin/rsync
81# RSYNC_opt args to rsync
82typeset -r RSYNC_opt="-va"
83# ie storage filesystem
84typeset -r STOREHOST=${MASTER}
85
86#====================================================
87# Set environment tools (ferret, nco, cdo)
88#====================================================
89. /home/users/brock/.atlas_env_asterix_ksh
90
91#====================================================
92# Set lf95 environment
93#====================================================
94. /usr/local/install/lf6481/bash_laheyfort_setup
95
96#====================================================
97# Host specific DIRECTORIES
98#====================================================
99
100#====================================================
101#- MirrorlibIGCM for frontend
102typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
103
104#====================================================
105#- libIGCM_POST for frontend
106typeset -r libIGCM_POST=${libIGCM}
107
108#====================================================
109#- R_EXE   (==> BIN_DIR = ${MODIPSL}/bin )
110typeset -r R_EXE="${MODIPSL}/bin"
111
112#====================================================
113#- SCRATCHDIR (=> ${R_DONNEES})
114if [ X${PBS_O_WORKDIR} != X ] ; then
115  typeset -r SCRATCHDIR=/scratch/$PBS_O_LOGNAME.$PBS_JOBID
116#==${WORKDIR}
117# cf /usr/Local/Env sur obelix
118else
119  typeset -r SCRATCHDIR=/tmp
120fi
121#FOR DEBUG RUN :
122#typeset -r SCRATCHDIR=/home/scratch01/${LOGIN}
123
124#====================================================
125#- SUBMIT_DIR : submission dir
126if [ X${PBS_O_WORKDIR} != X ] ; then
127  typeset -r SUBMIT_DIR=${SUBMIT_DIR:=${PBS_O_WORKDIR}}
128else
129  typeset -r SUBMIT_DIR=${SUBMIT_DIR:=${PWD}}
130fi
131
132#====================================================
133#- IN
134typeset -r R_IN=${R_IN:=/home/orchidee01/mmancip/IGCM}
135
136#====================================================
137#- ARCHIVE (dedicated to large files)
138typeset -r ARCHIVE=${ARCHIVE:=/home/scratch01/${LOGIN}}
139
140#====================================================
141#- STORAGE (dedicated to small/medium files)
142typeset -r STORAGE=${ARCHIVE}
143
144#====================================================
145#- R_OUT
146typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
147
148#====================================================
149#- R_FIG (hosting figures : monitoring and atlas, and/or small files)
150typeset -r R_FIG=${STORAGE}/IGCM_OUT
151
152#====================================================
153#- R_BUF (ONLY FOR double copy an scratch)
154typeset -r R_BUF=/home/scratch01/${LOGIN}/IGCM_OUT
155
156#====================================================
157#- BIG_DIR : BIG_DIR to store files waiting for rebuild
158typeset -r BIG_DIR=${BIG_DIR:=${SCRATCHDIR}/REBUILD}
159
160#====================================================
161#- OUT_POST
162typeset -r R_OUT_POST=${R_OUT}
163
164#====================================================
165#- RUN_DIR_PATH : Temporary working directory (=> TMP)
166typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${SCRATCHDIR}/tmp$$}
167
168#====================================================
169#- HOST_MPIRUN_COMMAND
170typeset -r HOST_MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND:="time mpirun"}
171
172#=========================================================
173#- Add "time" before mpirun command
174MPIRUN_COMMAND="time "${MPIRUN_COMMAND}
175echo ${MPIRUN_COMMAND}
176
177#====================================================
178#- Max number of arguments passed to nco operator or demigration command
179UNIX_MAX_LIMIT=360
180
181#====================================================
182#- Number of core per node (max number of OpenMP task)
183NUM_COREPERNODE=1
184
185#====================================================
186#- Default number of MPI task for IPSL coupled model
187#- required for backward compatibility
188#-
189DEFAULT_NUM_PROC_OCE=1
190DEFAULT_NUM_PROC_CPL=1
191(( DEFAULT_NUM_PROC_ATM = BATCH_NUM_PROC_TOT - DEFAULT_NUM_PROC_OCE - DEFAULT_NUM_PROC_CPL ))
192DEFAULT_NUM_PROC_TOTAL=${BATCH_NUM_PROC_TOT}
193
194#D-#==================================================
195#D-function IGCM_sys_ChangeArchive
196#D-* Purpose: Just a dummy call on this machine
197#D-* Examples:
198#D-
199function IGCM_sys_ChangeArchive {
200
201  IGCM_debug_Print 1 " dummy function : IGCM_sys_ChangeArchive "
202
203}
204
205#D-#==================================================
206#D-function IGCM_sys_RshMaster
207#D-* Purpose: Just a fake command to wrapp
208#D-           IGCM_card call in post-treatment
209#D-           Ulam do not see brodie filesystem
210#D-           Cesium do not see all mercure filesystem
211#D-           That's why we need this hack.
212#D-* Examples:
213#D-
214function IGCM_sys_RshMaster {
215  IGCM_debug_PushStack "IGCM_sys_RshMaster" $@
216  ssh obelix3 /bin/ksh  <<-EOF
217    export libIGCM=${libIGCM}
218    export DEBUG_debug=${DEBUG_debug}
219    . ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
220    . ${libIGCM}/libIGCM_card/libIGCM_card.ksh
221    ${@}
222EOF
223  if [ $? -gt 0 ] ; then
224    echo "IGCM_sys_RshMaster : erreur."
225    IGCM_debug_Exit "IGCM_sys_RshMaster"
226  fi
227  IGCM_debug_PopStack "IGCM_sys_RshMaster"
228}
229
230#D-#==================================================
231#D-function IGCM_sys_RshArchive
232#D-* Purpose: Archive rsh command
233#D-* Examples:
234#D-
235function IGCM_sys_RshArchive {
236  IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
237  /bin/ksh <<-EOF
238    ${@}
239EOF
240  if [ $? -gt 0 ] ; then
241    echo "IGCM_sys_RshArchive : erreur."
242    IGCM_debug_Exit "IGCM_sys_RshArchive"
243  fi
244  IGCM_debug_PopStack "IGCM_sys_RshArchive"
245}
246
247#D-#==================================================
248#D-function IGCM_sys_RshPost
249#D-* Purpose: Post-process rsh command
250#D-* Examples:
251#D-
252(( RshPNum = 0 ))
253function IGCM_sys_RshPost {
254  IGCM_debug_PushStack "IGCM_sys_RshPost" $@
255  if ( $DEBUG_sys ) ; then
256    echo "IGCM_sys_RshPost :" $@
257  fi
258  ssh obelix3 exec /bin/ksh $@ > out_RshPost.${RshPNum}
259  if [ $? -gt 0 ] ; then
260    echo "IGCM_sys_RshPost : erreur."
261    IGCM_debug_Exit "IGCM_sys_RshPost"
262  fi
263  (( RshPNum = RshPNum + 1 ))
264  IGCM_debug_PopStack "IGCM_sys_RshPost"
265}
266
267#D-#==================================================
268#D-function IGCM_sys_SendMail
269#D-* Purpose: Send mail when simulation is over
270#D-* Examples:
271#D-
272function IGCM_sys_SendMail {
273  IGCM_debug_PushStack "IGCM_sys_SendMail" $@
274  if ( $DEBUG_sys ) ; then
275    echo "IGCM_sys_SendMail :" $@
276  fi
277
278  if ( ${ExitFlag} ) ; then
279    status=failed
280  else
281    status=completed
282  fi
283
284  cat  << END_MAIL > job_end.mail
285Dear ${LOGIN},
286
287  Simulation ${config_UserChoices_JobName} is ${status} on supercomputer `hostname`.
288  Job started : ${DateBegin}
289  Job ended   : ${DateEnd}
290  Output files are available in ${R_SAVE}
291  Script files, Script Outputs and Debug files (if necessary) are available in ${SUBMIT_DIR}
292END_MAIL
293
294  if [ ! -z ${config_UserChoices_MailName} ] ; then
295    mailx -s "${config_UserChoices_JobName} ${status}" ${config_UserChoices_MailName} <  job_end.mail
296  elif [ -f ~/.forward ] ; then
297    mailx -s "${config_UserChoices_JobName} ${status}" $( cat ~/.forward ) < job_end.mail
298  fi
299
300  if [ $? -gt 0 ] ; then
301    echo "IGCM_sys_SendMail : erreur."
302    IGCM_debug_Exit "IGCM_sys_SendMail"
303  fi
304  IGCM_debug_PopStack "IGCM_sys_SendMail"
305}
306
307#D-#==================================================
308#D-function IGCM_sys_Mkdir
309#D-* Purpose: Master locale mkdir command
310#D-* Examples:
311#D-
312function IGCM_sys_Mkdir {
313  IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
314  if ( $DEBUG_sys ) ; then
315    echo "IGCM_sys_Mkdir :" $@
316  fi
317  if [ ! -d ${1} ]; then
318    \mkdir -p $1
319    if [ $? -gt 0 ] ; then
320      echo "IGCM_sys_Mkdir : erreur."
321      IGCM_debug_Exit "IGCM_sys_Mkdir"
322    fi
323  fi
324  # vérification :
325  if [ ! -d ${1} ] ; then
326    echo "IGCM_sys_Mkdir : erreur."
327    IGCM_debug_Exit "IGCM_sys_Mkdir"
328  fi
329  IGCM_debug_PopStack "IGCM_sys_Mkdir"
330}
331
332#D-#==================================================
333#D-function IGCM_sys_MkdirArchive
334#D-* Purpose: Mkdir on Archive
335#D-* Examples:
336#D-
337function IGCM_sys_MkdirArchive {
338  IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
339  if ( $DEBUG_sys ) ; then
340    echo "IGCM_sys_MkdirArchive :" $@
341  fi
342  #- creation de repertoire sur le serveur fichier
343  if [ ! -d ${1} ]; then
344    \mkdir -p $1
345    if [ $? -gt 0 ] ; then
346      echo "IGCM_sys_MkdirArchive : erreur."
347      IGCM_debug_Exit "IGCM_sys_MkdirArchive"
348    fi
349  fi
350  IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
351}
352
353#D-#==================================================
354#D-function IGCM_sys_MkdirWork
355#D-* Purpose: Mkdir on Work
356#D-* Examples:
357#D-
358function IGCM_sys_MkdirWork {
359  IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
360  if ( $DEBUG_sys ) ; then
361    echo "IGCM_sys_MkdirWork :" $@
362  fi
363  #- creation de repertoire sur le serveur fichier
364  if [ ! -d ${1} ]; then
365    \mkdir -p $1
366    if [ $? -gt 0 ] ; then
367      echo "IGCM_sys_MkdirWork : erreur."
368      IGCM_debug_Exit "IGCM_sys_MkdirWork"
369    fi
370  fi
371  IGCM_debug_PopStack "IGCM_sys_MkdirWork"
372}
373
374#D-#==================================================
375#D-function IGCM_sys_Cd
376#D-* Purpose: master cd command
377#D-* Examples:
378#D-
379function IGCM_sys_Cd {
380  IGCM_debug_PushStack "IGCM_sys_Cd" $@
381  if ( $DEBUG_sys ) ; then
382    echo "IGCM_sys_Cd :" $@
383  fi
384  \cd $1
385  if [ $? -gt 0 ] ; then
386    echo "IGCM_sys_Cd : erreur."
387    IGCM_debug_Exit "IGCM_sys_Cd"
388  fi
389  IGCM_debug_PopStack "IGCM_sys_Cd"
390}
391
392#D-#==================================================
393#D-function IGCM_sys_Chmod
394#D-* Purpose: Chmod
395#D-* Examples:
396#D-
397function IGCM_sys_Chmod {
398  IGCM_debug_PushStack "IGCM_sys_Chmod" -- $@
399  if ( $DEBUG_sys ) ; then
400    echo "IGCM_sys_Chmod :" $@
401  fi
402  if [ $DRYRUN -le 1 ]; then
403    \chmod $@
404    if [ $? -gt 0 ] ; then
405      echo "IGCM_sys_Chmod : erreur."
406      IGCM_debug_Exit "IGCM_sys_Chmod"
407    fi
408  else
409    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
410  fi
411  IGCM_debug_PopStack "IGCM_sys_Chmod"
412}
413
414#D-#==================================================
415#D-function IGCM_sys_FileSize
416#D-* Purpose: Filesize
417#D-* Examples:
418#D-
419function IGCM_sys_FileSize {
420  IGCM_debug_PushStack "IGCM_sys_FileSize" $@
421
422  typeset sizeF
423  set +A sizeF -- $( ls -la ${1} )
424  if [ $? -gt 0 ] ; then
425    IGCM_debug_Exit "IGCM_sys_FileSize"
426  fi
427  eval ${2}=${sizeF[4]}
428
429  IGCM_debug_PopStack "IGCM_sys_FileSize"
430}
431
432#D-#==================================================
433#D-function IGCM_sys_TestDir
434#D-* Purpose: Test Directory that must exists
435#D-* Examples:
436#D-
437function IGCM_sys_TestDir {
438  IGCM_debug_PushStack "IGCM_sys_TestDir" $@
439  if ( $DEBUG_sys ) ; then
440    echo "IGCM_sys_TestDir :" $@
441  fi
442  typeset ExistFlag
443  ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
444  IGCM_debug_PopStack "IGCM_sys_TestDir"
445
446  return ${ExistFlag}
447}
448
449#D-#==================================================
450#D-function IGCM_sys_TestDirArchive
451#D-* Purpose: Test Directory that must exists on Archive
452#D-* Examples:
453#D-
454function IGCM_sys_TestDirArchive {
455  IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
456  if ( $DEBUG_sys ) ; then
457    echo "IGCM_sys_TestDirArchive :" $@
458  fi
459  typeset ExistFlag
460  ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
461  IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
462
463  return ${ExistFlag}
464}
465
466#D-#==================================================
467#D-function IGCM_sys_TestFileArchive
468#D-* Purpose: Test file that must NOT EXISTS on Archive
469#D-* Examples:
470#D-
471function IGCM_sys_TestFileArchive {
472  IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
473  typeset ExistFlag
474  ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
475  IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
476
477  return ${ExistFlag}
478}
479
480#D-#==================================================
481#D-function IGCM_sys_TestFileBuffer
482#D-* Purpose: Test file that must NOT EXISTS on Buffer
483#D-* Examples:
484#D-
485function IGCM_sys_TestFileBuffer {
486  IGCM_debug_PushStack "IGCM_sys_TestFileBuffer" $@
487  typeset ExistFlag
488  ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
489  IGCM_debug_PopStack "IGCM_sys_TestFileBuffer"
490
491  return ${ExistFlag}
492}
493
494#D-#==================================================
495#D-function IGCM_sys_CountFileArchive
496#D-* Purpose: Count files on Archive filesystem
497#D-* Examples:
498#D-
499function IGCM_sys_CountFileArchive {
500  IGCM_debug_PushStack "IGCM_sys_CountFileArchive" $@
501  ls ${@} 2>/dev/null | wc -l
502  if [ $? -gt 0 ] ; then
503    echo "IGCM_sys_CountFileArchive : erreur."
504  fi
505  IGCM_debug_PopStack "IGCM_sys_CountFileArchive"
506}
507
508#D-#==================================================
509#D-function IGCM_sys_CountFileBuffer
510#D-* Purpose: Count files on Scratch filesystem
511#D-* Examples:
512#D-
513function IGCM_sys_CountFileBuffer {
514  IGCM_debug_PushStack "IGCM_sys_CountFileBuffer" $@
515  ls ${@} 2>/dev/null | wc -l
516  if [ $? -gt 0 ] ; then
517    echo "IGCM_sys_CountFileBuffer : erreur."
518  fi
519  IGCM_debug_PopStack "IGCM_sys_CountFileBuffer"
520}
521
522#D-#==================================================
523#D-function IGCM_sys_Tree
524#D-* Purpose: Tree directories with files on ${ARCHIVE}
525#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
526#D-
527function IGCM_sys_Tree {
528  IGCM_debug_PushStack "IGCM_sys_Tree" $@
529  if ( $DEBUG_sys ) ; then
530    echo "IGCM_sys_Tree :" $@
531  fi
532
533  \tree -f $@
534
535  IGCM_debug_PopStack "IGCM_sys_Tree"
536}
537
538#D-#==================================================
539#D-function IGCM_sys_Tar
540#D-* Purpose: master tar command
541#D-* Examples:
542#D-
543function IGCM_sys_Tar {
544  IGCM_debug_PushStack "IGCM_sys_Tar" $@
545  if ( $DEBUG_sys ) ; then
546    echo "IGCM_sys_Tar :" $@
547  fi
548  \tar cf $@
549  if [ $? -gt 0 ] ; then
550    echo "IGCM_sys_Tar : erreur."
551    IGCM_debug_Exit "IGCM_sys_Tar"
552  fi
553  IGCM_debug_PopStack "IGCM_sys_Tar"
554}
555
556#D-#==================================================
557#D-function IGCM_sys_UnTar
558#D-* Purpose: master un-tar command
559#D-* Examples:
560#D-
561function IGCM_sys_UnTar {
562  IGCM_debug_PushStack "IGCM_sys_UnTar" $@
563  if ( $DEBUG_sys ) ; then
564    echo "IGCM_sys_UnTar :" $@
565  fi
566  \tar xvf $1
567  if [ $? -gt 0 ] ; then
568    echo "IGCM_sys_UnTar : erreur."
569    IGCM_debug_Exit "IGCM_sys_UnTar"
570  fi
571  IGCM_debug_PopStack "IGCM_sys_UnTar"
572}
573
574#D-#==================================================
575#D-function IGCM_sys_Qsub
576#D-* Purpose: Qsub new job
577#D-* Examples:
578#D-
579function IGCM_sys_Qsub {
580  IGCM_debug_PushStack "IGCM_sys_Qsub" $@
581  if ( $DEBUG_sys ) ; then
582    echo "IGCM_sys_Qsub :" $@
583  fi
584#    /usr/local/bin/qsub -q short -o ${Script_Output} -N ${config_UserChoices_JobName}.${CumulPeriod} < $1
585  /usr/local/bin/qsub -q medium -o ${Script_Output} -N ${config_UserChoices_JobName}.${CumulPeriod} < $1
586  if [ $? -gt 0 ] ; then
587    echo "IGCM_sys_Qsub : erreur."
588    IGCM_debug_Exit "IGCM_sys_Qsub"
589  fi
590  IGCM_debug_PopStack "IGCM_sys_Qsub"
591}
592
593#D-#==================================================
594#D-function IGCM_sys_QsubPost
595#D-* Purpose: Qsub new job on scalaire
596#D-* Examples:
597#D-
598function IGCM_sys_QsubPost {
599  IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
600  if ( $DEBUG_sys ) ; then
601    echo "IGCM_sys_QsubPost :" $@
602  fi
603  /usr/local/bin/qsub -q medium -o ${POST_DIR}/${Script_Post_Output}.out ${libIGCM_POST}/$1.job -v ${listVarEnv}
604  if [ $? -gt 0 ] ; then
605    echo "IGCM_sys_QsubPost : erreur " $@
606    IGCM_debug_Exit "IGCM_sys_QsubPost"
607  fi
608  IGCM_debug_PopStack "IGCM_sys_QsubPost"
609}
610
611#D-*************************
612#D- File transfer functions
613#D-*************************
614#D-
615
616#D-#==================================================
617#D-function IGCM_sys_Rsync_out
618#D-* Purpose: treat return val of rsync
619#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
620#D-  Error values and explanations can depend on your system version.
621function IGCM_sys_Rsync_out {
622  status=$1
623  if [ ! $status ] ; then
624    echo "rsync error !"
625  fi
626
627  if [ $MYLANG = "fr" ]; then
628    case $status in
629    0)  return ;;
630    1)  echo "Erreur de rsync ; RERR_SYNTAX : "
631      echo "Erreur de syntaxe ou d'utilisation."
632      return;;
633    2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
634      echo "Incompatibilité de protocole."
635      return;;
636    3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
637      echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
638      echo "répertoires"
639      return;;
640    4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
641      echo "Action demandée non supportée : une tentative de manipulation de"
642      echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
643      echo "été faite ; ou une option qui est supportée par le  client  mais"
644      echo "pas par le serveur a été spécifiée."
645      return;;
646    10) echo "Erreur de rsync ; RERR_SOCKETIO"
647      echo "Erreur dans le socket d'entrée sortie"
648      return;;
649    11) echo "Erreur de rsync ; RERR_FILEIO"
650      echo "Erreur d'entrée sortie fichier"
651      return;;
652    12) echo "Erreur de rsync ; RERR_STREAMIO"
653      echo "Erreur dans flux de donnée du protocole rsync"
654      return;;
655    13) echo "Erreur de rsync ; RERR_MESSAGEIO"
656      echo "Erreur avec les diagnostics du programme"
657      return;;
658    14) echo "Erreur de rsync ; RERR_IPC"
659      echo "Erreur dans le code IPC"
660      return;;
661    20) echo "Erreur de rsync ; RERR_SIGNAL"
662      echo "SIGUSR1 ou SIGINT reçu"
663      return;;
664    21) echo "Erreur de rsync ; RERR_WAITCHILD"
665      echo "Une erreur retournée par waitpid()"
666      return;;
667    22) echo "Erreur de rsync ; RERR_MALLOC"
668      echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
669      return;;
670    23) echo ""
671      echo "Erreur fichier inexistant"
672      return;;
673    30) echo "Erreur de rsync ; RERR_TIMEOUT"
674      echo "Temps d'attente écoulé dans l'envoi/réception de données"
675      return;;
676    *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $status
677      return;;
678    esac
679  elif [ $MYLANG = "en" ] ; then
680    case $status in
681    0)  return;;
682    1)  echo "rsync error : Syntax or usage error "
683      return;;
684    2)  echo "rsync error : Protocol incompatibility "
685      return;;
686    3)  echo "rsync error : Errors selecting input/output files, dirs"
687      return;;
688    4)  echo "rsync error : Requested action not supported: an attempt"
689      echo "was made to manipulate 64-bit files on a platform that cannot support"
690      echo "them; or an option was specified that is supported by the client and"
691      echo "not by the server."
692      return;;
693    5)  echo "rsync error : Error starting client-server protocol"
694      return;;
695    10) echo "rsync error : Error in socket I/O "
696      return;;
697    11) echo "rsync error : Error in file I/O "
698      return;;
699    12) echo "rsync error : Error in rsync protocol data stream "
700      return;;
701    13) echo "rsync error : Errors with program diagnostics "
702      return;;
703    14) echo "rsync error : Error in IPC code "
704      return;;
705    20) echo "rsync error : Received SIGUSR1 or SIGINT "
706      return;;
707    21) echo "rsync error : Some error returned by waitpid() "
708      return;;
709    22) echo "rsync error : Error allocating core memory buffers "
710      return;;
711    23) echo "rsync error : Partial transfer due to error"
712      return;;
713    24) echo "rsync error : Partial transfer due to vanished source files"
714      return;;
715    30) echo "rsync error : Timeout in data send/receive "
716      return;;
717    *)  echo "rsync error : return code of rsync unknown :" $status
718      return;;
719    esac
720  else
721    echo "unknown language $MYLANG."
722    return
723  fi
724}
725
726#D-#==================================================
727#D-function IGCM_sys_Cp
728#D-* Purpose: generic cp
729#D-* Examples:
730#D-
731function IGCM_sys_Cp {
732  IGCM_debug_PushStack "IGCM_sys_Cp" $@
733  if ( $DEBUG_sys ) ; then
734    echo "IGCM_sys_Cp :" $@
735  fi
736
737  typeset status
738
739  echo cp $@ > out_rsync 2>&1
740  \cp $@ >> out_rsync 2>&1
741  status=$?
742
743  if [ ${status} -gt 0 ] ; then
744    echo "IGCM_sys_Cp : error code ${status}"
745    cat out_rsync
746    IGCM_debug_Exit "IGCM_sys_Cp"
747  else
748    \rm out_rsync
749  fi
750  IGCM_debug_PopStack "IGCM_sys_Cp"
751}
752
753#D-#==================================================
754#D-function IGCM_sys_Rm
755#D-* Purpose: generic rm
756#D-* Examples:
757#D-
758function IGCM_sys_Rm {
759  IGCM_debug_PushStack "IGCM_sys_Rm" -- $@
760  if ( $DEBUG_sys ) ; then
761    echo "IGCM_sys_Rm :" $@
762  fi
763
764  typeset status
765
766  echo rm $@ > out_rsync 2>&1
767  \rm $@ >> out_rsync 2>&1
768  status=$?
769
770  if [ ${status} -gt 0 ] ; then
771    echo "IGCM_sys_Rm : error code ${status}"
772    cat out_rsync
773    IGCM_debug_Exit "IGCM_sys_Rm"
774  else
775    \rm out_rsync
776  fi
777  IGCM_debug_PopStack "IGCM_sys_Rm"
778}
779
780#D-#==================================================
781#D-function IGCM_sys_RmRunDir
782#D-* Purpose: rm tmpdir (dummy function most of the time batch
783#D-                      scheduler will do the job)
784#D-* Examples:
785#D-
786function IGCM_sys_RmRunDir {
787  IGCM_debug_PushStack "IGCM_sys_RmRunDir" -- $@
788  if ( $DEBUG_sys ) ; then
789    echo "IGCM_sys_RmRunDir :" $@
790  fi
791
792  typeset status
793
794  echo rm $@ > out_rsync 2>&1
795  \rm $@ >> out_rsync 2>&1
796  status=$?
797
798  if [ ${status} -gt 0 ] ; then
799    echo "IGCM_sys_RmRunDir : error code ${status}"
800    cat out_rsync
801    IGCM_debug_Exit "IGCM_sys_RmRunDir"
802  else
803    \rm out_rsync
804  fi
805  IGCM_debug_PopStack "IGCM_sys_RmRunDir"
806}
807
808#D-#==================================================
809#D-function IGCM_sys_Mv
810#D-* Purpose: generic move
811#D-* Examples:
812#D-
813function IGCM_sys_Mv {
814  IGCM_debug_PushStack "IGCM_sys_Mv" $@
815  if ( $DEBUG_sys ) ; then
816    echo "IGCM_sys_Mv :" $@
817  fi
818
819  if [ $DRYRUN = 0 ]; then
820
821    typeset status
822
823    echo mv $@ > out_rsync 2>&1
824    \mv $@ >> out_rsync 2>&1
825    status=$?
826
827    if [ ${status} -gt 0 ] ; then
828      echo "IGCM_sys_Mv : error code ${status}"
829      cat out_rsync
830      IGCM_debug_Exit "IGCM_sys_Mv"
831    else
832      \rm out_rsync
833    fi
834  else
835    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
836  fi
837
838  IGCM_debug_PopStack "IGCM_sys_Mv"
839}
840
841#D-#==================================================
842#D-function IGCM_sys_Put_Dir
843#D-* Purpose: Copy a complete directory on $(ARCHIVE)
844#D-* Examples:
845#D-
846function IGCM_sys_Put_Dir {
847  IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
848  if ( $DEBUG_sys ) ; then
849    echo "IGCM_sys_Put_Dir :" $@
850  fi
851  if [ $DRYRUN = 0 ]; then
852    if [ ! -d ${1} ] ; then
853      echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
854      IGCM_debug_PopStack "IGCM_sys_Put_Dir"
855      return
856    fi
857
858    typeset status
859
860    # Only if we use rsync
861    #IGCM_sys_TestDirArchive $( dirname $2 )
862    #
863    #USUAL WAY
864    \cp -r $1 $2 > out_rsync 2>&1
865    status=$?
866
867    if [ ${status} -gt 0 ] ; then
868      echo "IGCM_sys_Put_Dir : error code ${status}"
869      cat out_rsync
870      IGCM_debug_Exit "IGCM_sys_Put_Dir"
871    else
872      \rm out_rsync
873    fi
874  else
875    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
876  fi
877  IGCM_debug_PopStack "IGCM_sys_Put_Dir"
878}
879
880#D-#==================================================
881#D-function IGCM_sys_Get_Dir
882#D-* Purpose: Copy a complete directory from ${ARCHIVE}
883#D-* Examples:
884#D-
885function IGCM_sys_Get_Dir {
886  IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
887  if ( $DEBUG_sys ) ; then
888    echo "IGCM_sys_Get_Dir :" $@
889  fi
890  if [ $DRYRUN = 0 ]; then
891    if [ ! -d ${1} ] ; then
892      echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
893      IGCM_debug_PopStack "IGCM_sys_Get_Dir"
894      return
895    fi
896
897    typeset status
898
899    #USUAL WAY
900    \cp -R $1 $2 > out_rsync 2>&1
901    status=$?
902
903    if [ ${status} -gt 0 ] ; then
904      echo "IGCM_sys_Get_Dir : error."
905      cat out_rsync
906      IGCM_debug_Exit "IGCM_sys_Get_Dir"
907    else
908      \rm out_rsync
909    fi
910  else
911    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
912  fi
913  IGCM_debug_PopStack "IGCM_sys_Get_Dir"
914}
915
916#D-#==================================================
917#D-function IGCM_sys_Get_Master
918#D-* Purpose: Copy a complete directory from MASTER filesystem
919#D-* Examples:
920#D-
921function IGCM_sys_Get_Master {
922  IGCM_debug_PushStack "IGCM_sys_Get_Master" $@
923  if ( $DEBUG_sys ) ; then
924    echo "IGCM_sys_Get_Master :" $@
925  fi
926  if [ $DRYRUN = 0 ]; then
927    if ( [ ! -d ${1} ] && [ ! -f ${1} ] ) ; then
928      echo "WARNING : IGCM_sys_Get_Master ${1} DOES NOT EXIST ."
929      IGCM_debug_PopStack "IGCM_sys_Get_Master"
930      return
931    fi
932
933    typeset status
934
935    #USUAL WAY
936    cp -RL $1 $2 > out_rsync 2>&1
937    status=$?
938
939    if [ ${status} -gt 0 ] ; then
940      echo "IGCM_sys_Get_Master : error."
941      cat out_rsync
942      IGCM_debug_Exit "IGCM_sys_Get_Master"
943    else
944      rm out_rsync
945    fi
946  else
947    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
948  fi
949  IGCM_debug_PopStack "IGCM_sys_Get_Master"
950}
951
952#D-#==================================================
953#D-function IGCM_sys_Put_Rest
954#D-* Purpose: Put computied restarts on ${ARCHIVE}.
955#D-           File and target directory must exist.
956#D-* Examples:
957#D-
958function IGCM_sys_Put_Rest {
959  IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
960  if ( $DEBUG_sys ) ; then
961    echo "IGCM_sys_Put_Rest :" $@
962  fi
963  if [ $DRYRUN = 0 ]; then
964    if [ ! -f ${1} ] ; then
965      echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
966      IGCM_debug_Exit "IGCM_sys_Put_Rest"
967    fi
968
969    typeset status
970    #
971    if [ X${JobType} = XRUN ] ; then
972      IGCM_sys_Chmod 444 ${1}
973    fi
974
975    #
976    # USUAL WAY
977    \cp $1 $2 > out_rsync 2>&1
978    status=$?
979
980#       #RSYNC WITH NETWORK SSH CALL
981#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} > out_rsync 2>&1
982#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} >> out_rsync 2>&1
983
984#       #RSYNC WITH NFS USE
985#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
986#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
987
988#       status=$?
989#       IGCM_sys_Rsync_out $status
990
991#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
992#       (( status=status+$? ))
993
994    if [ ${status} -gt 0 ] ; then
995      echo "IGCM_sys_Put_Rest : cp failed error code ${status}"
996      cat out_rsync
997      IGCM_debug_Exit "IGCM_sys_Put_Rest"
998    else
999      \rm out_rsync
1000    fi
1001  else
1002    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1003  fi
1004  IGCM_debug_PopStack "IGCM_sys_Put_Rest"
1005}
1006
1007#D-#==================================================
1008#D-function IGCM_sys_PutBuffer_Rest
1009#D-* Purpose: Put computied restarts on ${SCRATCHDIR}.
1010#D-           File and target directory must exist.
1011#D-* Examples:
1012#D-
1013function IGCM_sys_PutBuffer_Rest {
1014  IGCM_debug_PushStack "IGCM_sys_PutBuffer_Rest" $@
1015  if ( $DEBUG_sys ) ; then
1016    echo "IGCM_sys_PutBuffer_Rest :" $@
1017  fi
1018  if [ $DRYRUN = 0 ]; then
1019    if [ ! -f ${1} ] ; then
1020      echo "ERROR : IGCM_sys_PutBuffer_Rest ${1} DOES NOT EXIST ."
1021      IGCM_debug_Exit "IGCM_sys_PutBuffer_Rest"
1022    fi
1023
1024    typeset status
1025    #
1026    if [ X${JobType} = XRUN ] ; then
1027      IGCM_sys_Chmod 444 ${1}
1028    fi
1029
1030    #
1031    # USUAL WAY
1032    \cp $1 $2 > out_rsync 2>&1
1033    status=$?
1034
1035    if [ ${status} -gt 0 ] ; then
1036      echo "IGCM_sys_PutBuffer_Rest : error code ${status}"
1037      cat out_rsync
1038      IGCM_debug_Exit "IGCM_sys_PutBuffer_Rest"
1039    else
1040      \rm out_rsync
1041    fi
1042  else
1043    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1044  fi
1045  IGCM_debug_PopStack "IGCM_sys_PutBuffer_Rest"
1046}
1047
1048#D-#==================================================
1049#D-function IGCM_sys_Put_Out
1050#D-* Purpose: Copy a file on ${ARCHIVE} after having chmod it in readonly
1051#D-* Examples:
1052#D-
1053function IGCM_sys_Put_Out {
1054  IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
1055  if ( $DEBUG_sys ) ; then
1056    echo "IGCM_sys_Put_Out :" $@
1057  fi
1058  if [ $DRYRUN = 0 ]; then
1059    if [ -f ${1} ] ; then
1060      if [ ! -d $( dirname $2 ) ] ; then
1061        IGCM_sys_MkdirArchive $( dirname $2 )
1062      fi
1063    else
1064      echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
1065      IGCM_debug_PopStack "IGCM_sys_Put_Out"
1066      return 1
1067    fi
1068
1069    typeset status
1070    #
1071    if [ X${JobType} = XRUN ] ; then
1072      if [ X${3} = X ] ; then
1073        IGCM_sys_Chmod 444 ${1}
1074      fi
1075    fi
1076    #
1077
1078    echo ${RSYNC} ${RSYNC_opt} $1 $2 > out_rsync 2>&1
1079    ${RSYNC} ${RSYNC_opt} $1 $2 >> out_rsync 2>&1
1080    status=$?
1081    IGCM_sys_Rsync_out $status
1082
1083    ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1084    (( status=status+$? ))
1085
1086    if [ ${status} -gt 0 ] ; then
1087      echo "IGCM_sys_Put_Out : error."
1088      cat out_rsync
1089      IGCM_debug_Exit "IGCM_sys_Put_Out"
1090    else
1091      \rm out_rsync
1092    fi
1093  else
1094    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1095  fi
1096  IGCM_debug_PopStack "IGCM_sys_Put_Out"
1097  return 0
1098}
1099
1100#D-#==================================================
1101#D-function IGCM_sys_PutBuffer_Out
1102#D-* Purpose: Copy a file on ${SCRATCHDIR} after having chmod it in readonly
1103#D-* Examples:
1104#D-
1105function IGCM_sys_PutBuffer_Out {
1106  IGCM_debug_PushStack "IGCM_sys_PutBuffer_Out" $@
1107  if ( $DEBUG_sys ) ; then
1108    echo "IGCM_sys_PutBuffer_Out :" $@
1109  fi
1110
1111  typeset status
1112
1113  if [ $DRYRUN = 0 ]; then
1114    if [ ! -f ${1} ] ; then
1115      echo "WARNING : IGCM_sys_PutBuffer_Out ${1} DOES NOT EXIST ."
1116      IGCM_debug_PopStack "IGCM_sys_PutBuffer_Out"
1117      return 1
1118    fi
1119    #
1120    IGCM_sys_Mkdir $( dirname $2 )
1121    #
1122
1123    if [ X${JobType} = XRUN ] ; then
1124      if [ X${3} = X ] ; then
1125        IGCM_sys_Chmod 444 ${1}
1126      fi
1127    fi
1128    #
1129    # USUAL WAY
1130    \cp $1 $2 > out_rsync 2>&1
1131    status=$?
1132
1133    if [ ${status} -gt 0 ] ; then
1134      echo "IGCM_sys_PutBuffer_Out : error."
1135      cat out_rsync
1136      IGCM_debug_Exit "IGCM_sys_PutBuffer_Out"
1137    else
1138      \rm out_rsync
1139    fi
1140  else
1141    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1142  fi
1143  IGCM_debug_PopStack "IGCM_sys_PutBuffer_Out"
1144  return 0
1145}
1146
1147#D-#==================================================
1148#D-function IGCM_sys_Get
1149#D-* Purpose: Get a file from ${ARCHIVE}
1150#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
1151#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
1152function IGCM_sys_Get {
1153  IGCM_debug_PushStack "IGCM_sys_Get" $@
1154
1155  typeset DEST RET status dm_liste ifile target
1156
1157  if ( $DEBUG_sys ) ; then
1158    echo "IGCM_sys_Get :" $@
1159  fi
1160  if [ $DRYRUN -le 2 ]; then
1161    if [ X${1} = X'/l' ] ; then
1162      # test if the first file is present in the old computation :
1163      eval set +A dm_liste \${${2}}
1164    else
1165      dm_liste=${1}
1166    fi
1167    eval DEST=\${${#}}
1168
1169    # test if the (first) file is present in the old computation :
1170    IGCM_sys_TestFileArchive ${dm_liste[0]}
1171    status=$?
1172    if [ ${status} -gt 0 ] ; then
1173      echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
1174      IGCM_debug_Exit "IGCM_sys_Get"
1175      #return
1176    fi
1177
1178    (( RET=0 ))
1179    for target in ${dm_liste[*]} ; do
1180      \cp ${target} ${DEST} >> out_rsync 2>&1
1181      (( RET=RET+$? ))
1182    done
1183
1184#       echo ${RSYNC} ${RSYNC_opt} $@ > out_rsync 2>&1
1185#       ${RSYNC} ${RSYNC_opt} $@ >> out_rsync 2>&1
1186#       status=$?
1187#       IGCM_sys_Rsync_out $status
1188
1189#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1190#       (( RET=RET+$? ))
1191
1192    if [ ${RET} -gt 0 ] ; then
1193      echo "IGCM_sys_Get : error"
1194      cat out_rsync
1195      \rm out_rsync
1196      IGCM_debug_Exit "IGCM_sys_Get"
1197    else
1198      \rm out_rsync
1199    fi
1200  else
1201    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1202  fi
1203  IGCM_debug_PopStack "IGCM_sys_Get"
1204}
1205
1206#D-#==================================================
1207#D-function IGCM_sys_GetBuffer
1208#D-* Purpose: Get a file from ${SCRATCHDIR}
1209#D-* Examples: IGCM_sys_GetBuffer myfile /destpath/myfile_with_PREFIX
1210#D-            IGCM_sys_GetBuffer /l Array_contain_myfiles /destpath/
1211function IGCM_sys_GetBuffer {
1212  IGCM_debug_PushStack "IGCM_sys_GetBuffer" $@
1213
1214  typeset DEST RET status buf_liste ifile target file_work
1215
1216  if ( $DEBUG_sys ) ; then
1217    echo "IGCM_sys_GetBuffer :" $@
1218  fi
1219  if [ $DRYRUN -le 2 ]; then
1220    if [ X${1} = X'/l' ] ; then
1221      # test if the first file is present in the old computation :
1222      eval set +A buf_liste \${${2}}
1223    else
1224      eval set +A buf_liste ${1}
1225    fi
1226    eval DEST=\${${#}}
1227
1228    #USUAL WAY
1229    if [ X${1} = X'/l' ] ; then
1230      (( RET=0 ))
1231      for target in ${buf_liste[*]} ; do
1232        local_file=$( basename ${target} )
1233        \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
1234        (( RET = RET + $? ))
1235      done
1236    else
1237      \cp ${buf_liste} ${DEST} >> out_rsync 2>&1
1238      status=$?
1239    fi
1240
1241    if [ ${RET} -gt 0 ] ; then
1242      echo "IGCM_sys_GetBuffer : error"
1243      cat out_rsync
1244      \rm out_rsync
1245      IGCM_debug_Exit "IGCM_sys_GetBuffer"
1246    else
1247      \rm out_rsync
1248    fi
1249  else
1250    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1251  fi
1252  IGCM_debug_PopStack "IGCM_sys_GetBuffer"
1253}
1254
1255#D-#==================================================
1256#D-function IGCM_sys_GetDate_FichWork
1257#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
1258#D-* Examples:
1259#D-
1260function IGCM_sys_GetDate_FichWork {
1261  IGCM_debug_PushStack "IGCM_sys_FichWork" $@
1262  if ( $DEBUG_sys ) ; then
1263    echo "IGCM_sys_GetDate_FichWork :" $@
1264  fi
1265  typeset dateF
1266  set +A dateF -- $( ls -l --full-time --time-style='+%Y%m%d%H%M%S' ${1} )
1267  eval ${2}=${dateF[5]}
1268
1269    # donne la date filesys d'un fichier sur la machine work
1270  IGCM_debug_PopStack "IGCM_sys_FichWork"
1271}
1272
1273#D-#==================================================
1274#D-function IGCM_sys_GetDate_FichArchive
1275#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
1276#D-* Examples:
1277#D-
1278function IGCM_sys_GetDate_FichArchive {
1279  IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
1280  if ( $DEBUG_sys ) ; then
1281    echo "IGCM_sys_GetDate_FichArchive :" $@
1282  fi
1283  typeset dateF
1284  set +A dateF -- $( ls -l --full-time --time-style='+%Y%m%d%H%M%S' ${1} )
1285  eval ${2}=${dateF[5]}
1286
1287  IGCM_debug_PopStack "IGCM_sys_FichArchive"
1288}
1289
1290#D-#==================================================
1291#D-function IGCM_sys_Dods_Rm
1292#D-* Purpose: DO NOTHING ! Put ${ARCHIVE} files on DODS internet protocole.
1293#D-* Examples:
1294#D-
1295function IGCM_sys_Dods_Rm {
1296  if ( $DEBUG_sys ) ; then
1297    echo "IGCM_sys_Dods_Rm :" $@
1298  fi
1299  return 0
1300}
1301
1302#D-#==================================================
1303#D-function IGCM_sys_Dods_Cp
1304#D-* Purpose: Copy $(ARCHIVE) files on DODS internet protocole.
1305#D-* Examples:
1306#D-
1307function IGCM_sys_Dods_Cp {
1308  if ( $DEBUG_sys ) ; then
1309    echo "IGCM_sys_Dods_Cp :" $@
1310  fi
1311  return 0
1312}
1313
1314#D-#==================================================
1315#D-function IGCM_sys_Put_Dods
1316#D-* Purpose: Put $(ARCHIVE) files on DODS internet protocole.
1317#D-* Examples:
1318#D-
1319function IGCM_sys_Put_Dods {
1320  IGCM_debug_PushStack "IGCM_sys_Put_Dods" $@
1321  if ( $DEBUG_sys ) ; then
1322    echo "IGCM_sys_Put_Dods :" $@
1323  fi
1324  IGCM_debug_PopStack "IGCM_sys_Put_Dods"
1325}
1326
1327##############################################################
1328# REBUILD OPERATOR
1329
1330function IGCM_sys_rebuild {
1331  IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
1332  if ( $DEBUG_sys ) ; then
1333    echo "IGCM_sys_rebuild :" $@
1334  fi
1335
1336  typeset status
1337
1338  /home/users/igcmg/rebuild/bin/rebuild -f -o $@
1339  status=$?
1340  if [ ${status} -gt 0 ] ; then
1341    IGCM_debug_Print 2 "IGCM_sys_rebuild : error code ${status}"
1342    IGCM_debug_Exit "rebuild"
1343  fi
1344
1345  IGCM_debug_PopStack "IGCM_sys_rebuild"
1346}
1347
1348function IGCM_sys_rebuild_station {
1349  IGCM_debug_PushStack "IGCM_sys_rebuild_station" -- $@
1350  typeset i list_opt file_in file_out prefix_invert list_invert
1351  if ( $DEBUG_sys ) ; then
1352    echo "IGCM_sys_rebuild_station :" $@
1353  fi
1354  list_opt=$@
1355
1356  # Invert Axis : t,x -> x,t
1357  #               t,pres,x -> x,t,pres
1358  # So that we can concatenate along x
1359  i=0
1360  for file_in in ${list_opt} ; do
1361    (( i = i + 1))
1362    [ ${i} = 1 ] && file_out=${file_in} && continue
1363    prefix_invert=$( basename ${file_in} .nc )
1364    IGCM_sys_ncpdq -a x,time_counter -a x,time_counter,presnivs ${file_in} ${prefix_invert}_xt.nc
1365    list_invert[${#list_invert[*]}]=${prefix_invert}_xt.nc
1366  done
1367
1368  # Concatenate
1369  IGCM_sys_ncrcat ${list_invert[*]} histstn_xt.nc
1370
1371  # Re-ivert file
1372  IGCM_sys_ncpdq -a time_counter,x -a time_counter,presnivs,x histstn_xt.nc ${file_out}
1373
1374  # Station re-ordering is too expansive to be run within libICGM
1375  # This is due to (ncpdq - nrcat - ncpdq) I/O sequence.
1376  # This re-ordering must be done "in memory" by the cmorization process
1377  # Anyway this is the best sequence using (ncpdq - nrcat - ncpdq)
1378  # BEGIN reordering
1379
1380  # Only LMDZ text output contains the exact ordering of the station.
1381  # We isolate this in the code below:
1382  #  0  38  -157.5000000000000  70.98591549295774
1383  #  0  54  27.49999999999999   67.18309859154928
1384  #  0  56  -62.50000000000001  82.39436619718309
1385  #  0  79  12.49999999999999   78.59154929577466
1386  #  0  116 -165.0000000000000  76.05633802816901
1387  #  0  117 130.0000000000000   70.98591549295774
1388  #  0  118 110.0000000000000   87.46478873239437
1389  #  1  40  4.999999999999995   51.97183098591550
1390#  typeset iStation iProc list_opt file_in file_out prefix_invert
1391#  typeset -Z4 j4
1392#  typeset -Z3 j3
1393
1394#  unset list_opt
1395#  set +A list_opt $@
1396
1397  # Filename after rebuild
1398#  file_out=${list_opt[0]}
1399  # Prefix of output files
1400#  prefix_invert=$( basename ${file_out} .nc )
1401  # Number of procs
1402#  num_proc=$( grep -i mpi_size ${PREFIX}_${Exe_Output} | wc -l )
1403
1404#  iProc=0
1405#  while [ ${iProc} -lt ${num_proc} ] ; do
1406    # Array containing Station as a number
1407#    unset proc_stn
1408#    set +A proc_stn $( grep "iophy_mpi rank ip lon lat  $iProc" ${PREFIX}_${Exe_Output} | sed -e "s/iophy_mpi rank ip lon lat //g" | awk ' {print $2}' )
1409    # Number of stations produced by processor proc
1410#    stationLast=${#proc_stn[*]}
1411    # Proc number on 4 digits
1412#    j4=${iProc}
1413    # Init
1414#    iStation=0
1415#    while [ ${iStation} -lt ${stationLast} ] ; do
1416      # Station number on 3 digits
1417#      j3=${proc_stn[${iStation}]}
1418      # Extract station
1419      # Invert Axis : t,x -> x,t
1420      #               t,pres,x -> x,t,pres
1421      # So that we can concatenate along x
1422#      IGCM_sys_ncpdq -a x,time_counter -a x,time_counter,presnivs -d x,$iStation,$iStation ${prefix_invert}_${j4}.nc ${prefix_invert}_stn_${j3}.nc
1423#      (( iStation = iStation + 1 ))
1424#    done
1425#    (( iProc = iProc + 1 ))
1426#  done
1427
1428  # Concatenate all station along x
1429#  IGCM_sys_ncrcat ${prefix_invert}_stn_???.nc ${prefix_invert}_xt.nc
1430
1431  # Re-invert file
1432#  IGCM_sys_ncpdq -a time_counter,x -a time_counter,presnivs,x ${prefix_invert}_xt.nc ${file_out}
1433
1434  # END reordering
1435
1436  IGCM_debug_PopStack "IGCM_sys_rebuild_station"
1437}
1438
1439############################################################
1440# Activate Running Environnment Variables
1441
1442function IGCM_sys_activ_variables {
1443  IGCM_debug_PushStack "IGCM_sys_activ_variables"
1444  if ( $DEBUG_sys ) ; then
1445    echo "IGCM_sys_activ_variables"
1446  fi
1447  IGCM_debug_PopStack "IGCM_sys_activ_variables"
1448}
1449
1450############################################################
1451# Desactivate Running Environnment Variables
1452
1453function IGCM_sys_desactiv_variables {
1454  IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1455  if ( $DEBUG_sys ) ; then
1456    echo "IGCM_sys_desactiv_variables"
1457  fi
1458  IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1459}
1460
1461############################################################
1462# Build run file
1463
1464function IGCM_sys_build_run_file {
1465
1466  IGCM_debug_Print 3 " dummy function : IGCM_sys_build_run_file "
1467
1468}
1469
1470############################################################
1471# Build MPI/OMP scripts
1472function IGCM_sys_build_execution_scripts
1473{
1474  IGCM_debug_PushStack "IGCM_sys_build_execution_scripts" $@
1475  if ( $DEBUG_sys ) ; then
1476    echo "IGCM_sys_build_execution_scripts " $@
1477  fi
1478  typeset nodes listnodes init_node start_num init_exec comp ExeNameIn ExeNameOut
1479  typeset node_num_current node_current comp_proc_mpi_loc comp_proc_omp_loc
1480  typeset num_corempi nombre_restant_node nombre_restant_comp
1481
1482  if [ ! -f ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} ]  ; then
1483    IGCM_debug_Exit "IGCM_sys_titane build_execution_scripts : Job_${config_UserChoices_JobName} doesn't exist in SUBMIT_DIR : ${SUBMIT_DIR} "
1484  fi
1485
1486  if ( ${OK_PARA_MPMD} ) ; then
1487
1488    if [ -f run_file ] ; then
1489      IGCM_sys_Rm -f run_file
1490    fi
1491    touch run_file
1492
1493    if ( ${OK_PARA_OMP} ) ; then
1494
1495      #  Hosts treatment
1496
1497      ${HOST_MPIRUN_COMMAND} hostname | sort | uniq > hosts.tmp
1498
1499      i=0
1500      rm -f hosts
1501      IGCM_debug_Print 1 "sys Obelix, Hosts avaible :"
1502      for nodes in `cat hosts.tmp` ; do
1503        host[$i]=$nodes
1504        echo "${host[$i]} slots=1 max_slots=1" >> hosts
1505        IGCM_debug_Print 1 ${host[$i]}
1506        i=$((i+1))
1507      done
1508      rm -f hosts.tmp
1509
1510      listnodes=${host[*]}
1511
1512      EXECUTION="${HOST_MPIRUN_COMMAND} -hostfile hosts"
1513
1514      # Initialisation
1515
1516      init_node=y
1517      node_num_current=0
1518      start_num=0
1519      init_exec=n
1520
1521      # Test : if oasis is there, we put it at the first position
1522
1523      for comp in ${config_ListOfComponents[*]} ; do
1524
1525        if [ "X${comp}" = "XCPL" ]  ; then
1526
1527          eval ExeNameIn=\${config_Executable_${comp}[0]}
1528          eval ExeNameOut=\${config_Executable_${comp}[1]}
1529
1530          echo "#!/bin/ksh" > script_${ExeNameOut}.ksh
1531          echo ""  >> script_${ExeNameOut}.ksh
1532          #echo "export KMP_STACKSIZE=3g"  >> script_${ExeNameOut}.ksh
1533          #echo "export KMP_LIBRARY=turnaround"  >> script_${ExeNameOut}.ksh
1534          #echo "export MKL_SERIAL=YES"  >> script_${ExeNameOut}.ksh
1535          echo "./${ExeNameOut} > out_${ExeNameOut}.out 2>out_${ExeNameOut}.err"  >> script_${ExeNameOut}.ksh
1536          IGCM_sys_Chmod u+x script_${ExeNameOut}.ksh
1537
1538          init_node=n
1539
1540          (( nombre_restant_node = NUM_COREPERNODE - 1 ))
1541          node_num_current=0
1542          node_current=${host[${node_num_current}]}
1543
1544          EXECUTION="${EXECUTION} -H ${node_current} -np 1 ./script_${ExeNameOut}.ksh"
1545
1546          init_exec=y
1547          start_num=1
1548
1549        fi
1550
1551      done
1552
1553      # Then loop on the components (except for oasis)
1554
1555      for comp in ${config_ListOfComponents[*]} ; do
1556
1557        eval ExeNameIn=\${config_Executable_${comp}[0]}
1558        eval ExeNameOut=\${config_Executable_${comp}[1]}
1559
1560        # Only if we really have an executable for the component :
1561        if ( [ "X${ExeNameOut}" != X\"\" ] &&  [ "X${comp}" != "XCPL" ] ) ; then
1562
1563          eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
1564          eval comp_proc_omp_loc=\${${comp}_PROC_OMP}
1565
1566          echo "#!/bin/ksh" > script_${ExeNameOut}.ksh
1567          # echo "set -vx" >> script_${ExeNameOut}.ksh
1568          echo ""  >> script_${ExeNameOut}.ksh
1569          #echo "export KMP_STACKSIZE=3g"  >> script_${ExeNameOut}.ksh
1570          #echo "export KMP_LIBRARY=turnaround"  >> script_${ExeNameOut}.ksh
1571          #echo "export MKL_SERIAL=YES"  >> script_${ExeNameOut}.ksh
1572          echo "OMP_NUM_THREADS=${comp_proc_omp_loc}" >> script_${ExeNameOut}.ksh
1573          echo "(( MYMPIRANK = OMPI_COMM_WORLD_RANK - ${start_num})) " >>  script_${ExeNameOut}.ksh
1574          echo "./${ExeNameOut} > out_${ExeNameOut}.out.\${MYMPIRANK} 2>out_${ExeNameOut}.err.\${MYMPIRANK}"  >> script_${ExeNameOut}.ksh
1575          IGCM_sys_Chmod u+x script_${ExeNameOut}.ksh
1576
1577          node_num=0
1578
1579          # We define the number of MPI process to be assigned for the component
1580
1581          nombre_restant_comp=${comp_proc_mpi_loc}
1582
1583          # Loop on the allocated nodes
1584
1585          for node in ${listnodes} ; do
1586
1587            # We go to the current node
1588            if [ ${node_num} = ${node_num_current} ] ; then
1589
1590              node_current=${host[${node_num_current}]}
1591
1592              # If first time on the node : initialisation
1593
1594              if [ ${init_node} = y ] ; then
1595                nombre_restant_node=${NUM_COREPERNODE}
1596              fi
1597
1598              # Test on the number of OMP threads
1599
1600              if [ ${comp_proc_omp_loc} -gt ${nombre_restant_node} ] ; then
1601                (( node_num = node_num + 1 ))
1602                node_num_current=${node_num}
1603                init_node=y
1604                continue
1605              fi
1606
1607              # Number of MPI process to assign
1608
1609              (( num_corempi = nombre_restant_node / comp_proc_omp_loc ))
1610
1611              if [ ${num_corempi} -gt ${nombre_restant_comp} ] ; then
1612                num_corempi=${nombre_restant_comp}
1613              fi
1614
1615              (( nombre_restant_node = nombre_restant_node - num_corempi * comp_proc_omp_loc ))
1616              (( nombre_restant_comp = nombre_restant_comp - num_corempi ))
1617
1618              if [ ${init_exec} = y ] ; then
1619                EXECUTION="${EXECUTION} : -H ${node_current} -np ${num_corempi} ./script_${ExeNameOut}.ksh"
1620              else
1621                EXECUTION="${EXECUTION} -H ${node_current} -np ${num_corempi} ./script_${ExeNameOut}.ksh"
1622                init_exec=y
1623              fi
1624
1625              ((  start_num = num_corempi + start_num ))
1626
1627            else
1628
1629              (( node_num = node_num + 1 ))
1630              continue
1631            fi
1632
1633            # Test on the number of core/process remaining on the node/component
1634
1635            if [ ${nombre_restant_node} = 0 ] ; then
1636              (( node_num = node_num + 1 ))
1637              node_num_current=${node_num}
1638              init_node=y
1639
1640              if [ ${nombre_restant_comp} = 0 ] ; then
1641                break 1
1642              fi
1643            else
1644
1645              node_num_current=${node_num}
1646              init_node=n
1647
1648              if [ ${nombre_restant_comp} = 0 ] ; then
1649                break 1
1650              fi
1651            fi
1652          done
1653        fi
1654      done
1655
1656    else
1657
1658      # Then first loop on the components for the coupler ie oasis
1659
1660      ## the coupler ie oasis must be the first one
1661      for comp in ${config_ListOfComponents[*]} ; do
1662
1663        eval ExeNameOut=\${config_Executable_${comp}[1]}
1664
1665        # for CPL component only
1666        if [ "X${comp}" = "XCPL" ] ; then
1667          eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
1668          echo "-np ${comp_proc_mpi_loc} ./${ExeNameOut} " >> run_file
1669        fi
1670      done
1671
1672        # Then second loop on the components
1673
1674      for comp in ${config_ListOfComponents[*]} ; do
1675
1676        eval ExeNameOut=\${config_Executable_${comp}[1]}
1677
1678        # Only if we really have an executable for the component and not the coupler ie oasis:
1679        if ( [ "X${ExeNameOut}" != X\"\" ] && [ "X${comp}" != "XCPL" ] ) ; then
1680          eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
1681          echo "-np ${comp_proc_mpi_loc} ./${ExeNameOut}" >> run_file
1682        fi
1683      done
1684      IGCM_sys_Chmod u+x run_file
1685
1686      EXECUTION="${HOST_MPIRUN_COMMAND} --app ./run_file"
1687
1688    fi
1689
1690  else # Only one executable. launch it.
1691
1692    for comp in ${config_ListOfComponents[*]} ; do
1693
1694      # Only if we really have an executable for the component :
1695      eval ExeNameOut=\${config_Executable_${comp}[1]}
1696      if ( [ "X${ExeNameOut}" != X\"\" ] && [ "X${ExeNameOut}" != "Xinca.dat" ] ) ; then
1697
1698        echo "#!/bin/ksh" > script_${ExeNameOut}.ksh
1699        echo ""  >> script_${ExeNameOut}.ksh
1700        if ( ${OK_PARA_OMP} ) ; then
1701          eval comp_proc_omp_loc=\${${comp}_PROC_OMP}
1702          echo "OMP_NUM_THREADS=${comp_proc_omp_loc}" >> script_${ExeNameOut}.ksh
1703        fi
1704        if  ( ${OK_PARA_MPI} ) ; then
1705          # Default : mpirun used if nb_proc gt 1
1706          # pour sortie out/err par process
1707          # echo "./${ExeNameOut} > out_${ExeNameOut}.out.\${OMPI_COMM_WORLD_RANK} 2>out_${ExeNameOut}.err.\${OMPI_COMM_WORLD_RANK}"  >> script_${ExeNameOut}.ksh
1708          echo "./${ExeNameOut}" >> script_${ExeNameOut}.ksh
1709          IGCM_sys_Chmod u+x script_${ExeNameOut}.ksh
1710          EXECUTION="${HOST_MPIRUN_COMMAND} ./script_${ExeNameOut}.ksh"
1711        else
1712          # Default : mpirun is NOT used if nb_proc eq 1
1713          # pour sortie out/err par process
1714          # echo "./${ExeNameOut} > out_${ExeNameOut}.out 2>out_${ExeNameOut}.err" >> script_${ExeNameOut}.ksh
1715          echo "./${ExeNameOut}" >> script_${ExeNameOut}.ksh
1716          IGCM_sys_Chmod u+x script_${ExeNameOut}.ksh
1717          EXECUTION="time ./script_${ExeNameOut}.ksh"
1718        fi
1719      fi
1720    done
1721
1722  fi
1723
1724  IGCM_debug_Print 1 "sys Obelix : La commande d execution est "
1725  IGCM_debug_Print 1 $EXECUTION
1726
1727  IGCM_debug_PopStack "IGCM_sys_build_execution_scripts"
1728}
1729
1730############################################################
1731# Check of space available on temporary filesytems
1732function IGCM_sys_check_quota {
1733  IGCM_debug_PushStack "IGCM_sys_check_quota"
1734  if ( $DEBUG_sys ) ; then
1735    echo "IGCM_sys_check_quota"
1736  fi
1737  IGCM_debug_PopStack "IGCM_sys_check_quota"
1738}
1739
1740##############################################################
1741# NCO OPERATOR
1742
1743
1744function IGCM_sys_ncap2 {
1745  IGCM_debug_PushStack "IGCM_sys_ncap2" -- $@
1746  if ( $DEBUG_sys ) ; then
1747    echo "IGCM_sys_ncap2 :" $@
1748  fi
1749
1750  typeset NB_ESSAI DELAI status i
1751  # number of tentative
1752  NB_ESSAI=3
1753  # time delay between tentative
1754  DELAI=2
1755
1756  i=0
1757  while [ $i -lt $NB_ESSAI ] ; do
1758    ncap2 "$@" > out_rsync 2>&1
1759    status=$?
1760    if [ ${status} -gt 0 ] ; then
1761      IGCM_debug_Print 2 "IGCM_sys_ncap2 : error code ${status}"
1762      cat out_rsync
1763      \rm out_rsync
1764      IGCM_debug_Print 2 "IGCM_sys_ncap2 : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1765    else
1766      \rm out_rsync
1767      break
1768    fi
1769    (( i = i + 1 ))
1770  done
1771
1772  if [ ${status} -gt 0 ] ; then
1773      echo "IGCM_sys_ncap2 : ncap2 error"
1774      IGCM_debug_Exit "ncap2"
1775  fi
1776
1777  IGCM_debug_PopStack "IGCM_sys_ncap2"
1778}
1779
1780function IGCM_sys_ncatted {
1781  IGCM_debug_PushStack "IGCM_sys_ncatted" -- $@
1782  if ( $DEBUG_sys ) ; then
1783    echo "IGCM_sys_ncatted :" $@
1784  fi
1785
1786  typeset NB_ESSAI DELAI status i
1787  # number of tentative
1788  NB_ESSAI=3
1789  # time delay between tentative
1790  DELAI=2
1791
1792  i=0
1793  while [ $i -lt $NB_ESSAI ] ; do
1794    ncatted "$@" > out_rsync 2>&1
1795    status=$?
1796    if [ ${status} -gt 0 ] ; then
1797      IGCM_debug_Print 2 "IGCM_sys_ncatted : error code ${status}"
1798      cat out_rsync
1799      \rm out_rsync
1800      IGCM_debug_Print 2 "IGCM_sys_ncatted : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1801    else
1802      \rm out_rsync
1803      break
1804    fi
1805    (( i = i + 1 ))
1806  done
1807
1808  if [ ${status} -gt 0 ] ; then
1809      echo "IGCM_sys_ncatted : ncatted error"
1810      IGCM_debug_Exit "ncatted"
1811  fi
1812
1813  IGCM_debug_PopStack "IGCM_sys_ncatted"
1814}
1815
1816function IGCM_sys_ncbo {
1817  IGCM_debug_PushStack "IGCM_sys_ncbo" -- $@
1818  if ( $DEBUG_sys ) ; then
1819    echo "IGCM_sys_ncbo :" $@
1820  fi
1821
1822  typeset NB_ESSAI DELAI status i
1823  # number of tentative
1824  NB_ESSAI=3
1825  # time delay between tentative
1826  DELAI=2
1827
1828  i=0
1829  while [ $i -lt $NB_ESSAI ] ; do
1830    ncbo $@ > out_rsync 2>&1
1831    status=$?
1832    if [ ${status} -gt 0 ] ; then
1833      IGCM_debug_Print 2 "IGCM_sys_ncbo : error code ${status}"
1834      cat out_rsync
1835      \rm out_rsync
1836      IGCM_debug_Print 2 "IGCM_sys_ncbo : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1837    else
1838      \rm out_rsync
1839      break
1840    fi
1841    (( i = i + 1 ))
1842  done
1843
1844  if [ ${status} -gt 0 ] ; then
1845      echo "IGCM_sys_ncbo : ncbo error"
1846      IGCM_debug_Exit "ncbo"
1847  fi
1848
1849  IGCM_debug_PopStack "IGCM_sys_ncbo"
1850}
1851
1852function IGCM_sys_ncdiff {
1853  IGCM_debug_PushStack "IGCM_sys_ncdiff" -- $@
1854  if ( $DEBUG_sys ) ; then
1855    echo "IGCM_sys_ncdiff :" $@
1856  fi
1857
1858  typeset NB_ESSAI DELAI status i
1859  # number of tentative
1860  NB_ESSAI=3
1861  # time delay between tentative
1862  DELAI=2
1863
1864  i=0
1865  while [ $i -lt $NB_ESSAI ] ; do
1866    ncdiff $@ > out_rsync 2>&1
1867    status=$?
1868    if [ ${status} -gt 0 ] ; then
1869      IGCM_debug_Print 2 "IGCM_sys_ncdiff : error code ${status}"
1870      cat out_rsync
1871      \rm out_rsync
1872      IGCM_debug_Print 2 "IGCM_sys_ncdiff : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1873    else
1874      \rm out_rsync
1875      break
1876    fi
1877    (( i = i + 1 ))
1878  done
1879
1880  if [ ${status} -gt 0 ] ; then
1881      echo "IGCM_sys_ncdiff : ncdiff error"
1882      IGCM_debug_Exit "ncdiff"
1883  fi
1884
1885  IGCM_debug_PopStack "IGCM_sys_ncdiff"
1886}
1887
1888function IGCM_sys_ncea {
1889  IGCM_debug_PushStack "IGCM_sys_ncea" -- $@
1890  if ( $DEBUG_sys ) ; then
1891    echo "IGCM_sys_ncea :" $@
1892  fi
1893
1894  typeset NB_ESSAI DELAI status i
1895  # number of tentative
1896  NB_ESSAI=3
1897  # time delay between tentative
1898  DELAI=2
1899
1900  i=0
1901  while [ $i -lt $NB_ESSAI ] ; do
1902    ncea $@ > out_rsync 2>&1
1903    status=$?
1904    if [ ${status} -gt 0 ] ; then
1905      IGCM_debug_Print 2 "IGCM_sys_ncea : error code ${status}"
1906      cat out_rsync
1907      \rm out_rsync
1908      IGCM_debug_Print 2 "IGCM_sys_ncea : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1909    else
1910      \rm out_rsync
1911      break
1912    fi
1913    (( i = i + 1 ))
1914  done
1915
1916  if [ ${status} -gt 0 ] ; then
1917      echo "IGCM_sys_ncea : ncea error"
1918      IGCM_debug_Exit "ncea"
1919  fi
1920
1921  IGCM_debug_PopStack "IGCM_sys_ncea"
1922}
1923
1924function IGCM_sys_ncecat {
1925  IGCM_debug_PushStack "IGCM_sys_ncecat" -- $@
1926  if ( $DEBUG_sys ) ; then
1927    echo "IGCM_sys_ncecat :" $@
1928  fi
1929
1930  typeset NB_ESSAI DELAI status i
1931  # number of tentative
1932  NB_ESSAI=3
1933  # time delay between tentative
1934  DELAI=2
1935
1936  i=0
1937  while [ $i -lt $NB_ESSAI ] ; do
1938    ncecat $@ > out_rsync 2>&1
1939    status=$?
1940    if [ ${status} -gt 0 ] ; then
1941      IGCM_debug_Print 2 "IGCM_sys_ncecat : error code ${status}"
1942      cat out_rsync
1943      \rm out_rsync
1944      IGCM_debug_Print 2 "IGCM_sys_ncecat : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1945    else
1946      \rm out_rsync
1947      break
1948    fi
1949    (( i = i + 1 ))
1950  done
1951
1952  if [ ${status} -gt 0 ] ; then
1953      echo "IGCM_sys_ncecat : ncecat error"
1954      IGCM_debug_Exit "ncecat"
1955  fi
1956
1957  IGCM_debug_PopStack "IGCM_sys_ncecat"
1958}
1959
1960function IGCM_sys_ncflint {
1961  IGCM_debug_PushStack "IGCM_sys_ncflint" -- $@
1962  if ( $DEBUG_sys ) ; then
1963    echo "IGCM_sys_ncflint :" $@
1964  fi
1965
1966  typeset NB_ESSAI DELAI status i
1967  # number of tentative
1968  NB_ESSAI=3
1969  # time delay between tentative
1970  DELAI=2
1971
1972  i=0
1973  while [ $i -lt $NB_ESSAI ] ; do
1974    ncflint $@ > out_rsync 2>&1
1975    status=$?
1976    if [ ${status} -gt 0 ] ; then
1977      IGCM_debug_Print 2 "IGCM_sys_ncflint : error code ${status}"
1978      cat out_rsync
1979      \rm out_rsync
1980      IGCM_debug_Print 2 "IGCM_sys_ncflint : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
1981    else
1982      \rm out_rsync
1983      break
1984    fi
1985    (( i = i + 1 ))
1986  done
1987
1988  if [ ${status} -gt 0 ] ; then
1989      echo "IGCM_sys_ncflint : ncflint error"
1990      IGCM_debug_Exit "ncflint"
1991  fi
1992
1993  IGCM_debug_PopStack "IGCM_sys_ncflint"
1994}
1995
1996function IGCM_sys_ncks {
1997  IGCM_debug_PushStack "IGCM_sys_ncks" -- $@
1998  if ( $DEBUG_sys ) ; then
1999    echo "IGCM_sys_ncks :" $@
2000  fi
2001
2002  typeset NB_ESSAI DELAI status i
2003  # number of tentative
2004  NB_ESSAI=3
2005  # time delay between tentative
2006  DELAI=2
2007
2008  i=0
2009  while [ $i -lt $NB_ESSAI ] ; do
2010    ncks $@ > out_rsync 2>&1
2011    status=$?
2012    if [ ${status} -gt 0 ] ; then
2013      IGCM_debug_Print 2 "IGCM_sys_ncks : error code ${status}"
2014      cat out_rsync
2015      \rm out_rsync
2016      IGCM_debug_Print 2 "IGCM_sys_ncks : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
2017    else
2018      \rm out_rsync
2019      break
2020    fi
2021    (( i = i + 1 ))
2022  done
2023
2024  if [ ${status} -gt 0 ] ; then
2025      echo "IGCM_sys_ncks : ncks error"
2026      IGCM_debug_Exit "ncks"
2027  fi
2028
2029  IGCM_debug_PopStack "IGCM_sys_ncks"
2030}
2031
2032function IGCM_sys_ncpdq {
2033  IGCM_debug_PushStack "IGCM_sys_ncpdq" -- $@
2034  if ( $DEBUG_sys ) ; then
2035    echo "IGCM_sys_ncpdq :" $@
2036  fi
2037
2038  typeset NB_ESSAI DELAI status i
2039  # number of tentative
2040  NB_ESSAI=3
2041  # time delay between tentative
2042  DELAI=2
2043
2044  i=0
2045  while [ $i -lt $NB_ESSAI ] ; do
2046    ncpdq $@ > out_rsync 2>&1
2047    status=$?
2048    if [ ${status} -gt 0 ] ; then
2049      IGCM_debug_Print 2 "IGCM_sys_ncpdq : error code ${status}"
2050      cat out_rsync
2051      \rm out_rsync
2052      IGCM_debug_Print 2 "IGCM_sys_ncpdq : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
2053    else
2054      \rm out_rsync
2055      break
2056    fi
2057    (( i = i + 1 ))
2058  done
2059
2060  if [ ${status} -gt 0 ] ; then
2061      echo "IGCM_sys_ncpdq : ncpdq error"
2062      IGCM_debug_Exit "ncpdq"
2063  fi
2064
2065  IGCM_debug_PopStack "IGCM_sys_ncpdq"
2066}
2067
2068function IGCM_sys_ncra {
2069  IGCM_debug_PushStack "IGCM_sys_ncra" -- $@
2070  if ( $DEBUG_sys ) ; then
2071    echo "IGCM_sys_ncra :" $@
2072  fi
2073
2074  typeset NB_ESSAI DELAI status i
2075  # number of tentative
2076  NB_ESSAI=3
2077  # time delay between tentative
2078  DELAI=2
2079
2080  i=0
2081  while [ $i -lt $NB_ESSAI ] ; do
2082    ncra $@ > out_rsync 2>&1
2083    status=$?
2084    if [ ${status} -gt 0 ] ; then
2085      IGCM_debug_Print 2 "IGCM_sys_ncra : error code ${status}"
2086      cat out_rsync
2087      \rm out_rsync
2088      IGCM_debug_Print 2 "IGCM_sys_ncra : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
2089    else
2090      \rm out_rsync
2091      break
2092    fi
2093    (( i = i + 1 ))
2094  done
2095
2096  if [ ${status} -gt 0 ] ; then
2097      echo "IGCM_sys_ncra : ncra error"
2098      IGCM_debug_Exit "ncra"
2099  fi
2100
2101  IGCM_debug_PopStack "IGCM_sys_ncra"
2102}
2103
2104function IGCM_sys_ncrcat {
2105  IGCM_debug_PushStack "IGCM_sys_ncrcat" -- $@
2106  if ( $DEBUG_sys ) ; then
2107    echo "IGCM_sys_ncrcat :" $@
2108  fi
2109
2110  typeset NB_ESSAI DELAI status i
2111  # number of tentative
2112  NB_ESSAI=3
2113  # time delay between tentative
2114  DELAI=2
2115
2116  i=0
2117  while [ $i -lt $NB_ESSAI ] ; do
2118    ncrcat $@ > out_rsync 2>&1
2119    status=$?
2120    if [ ${status} -gt 0 ] ; then
2121      IGCM_debug_Print 2 "IGCM_sys_ncrcat : error code ${status}"
2122      cat out_rsync
2123      \rm out_rsync
2124      IGCM_debug_Print 2 "IGCM_sys_ncrcat : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
2125    else
2126      \rm out_rsync
2127      break
2128    fi
2129    (( i = i + 1 ))
2130  done
2131
2132  if [ ${status} -gt 0 ] ; then
2133      echo "IGCM_sys_ncrcat : ncrcat error"
2134      #IGCM_debug_Exit "ncrcat"
2135  fi
2136
2137  IGCM_debug_PopStack "IGCM_sys_ncrcat"
2138}
2139
2140function IGCM_sys_ncrename {
2141  IGCM_debug_PushStack "IGCM_sys_ncrename" -- $@
2142  if ( $DEBUG_sys ) ; then
2143    echo "IGCM_sys_ncrename :" $@
2144  fi
2145
2146  typeset NB_ESSAI DELAI status i
2147  # number of tentative
2148  NB_ESSAI=3
2149  # time delay between tentative
2150  DELAI=2
2151
2152  i=0
2153  while [ $i -lt $NB_ESSAI ] ; do
2154    ncrename $@ > out_rsync 2>&1
2155    status=$?
2156    if [ ${status} -gt 0 ] ; then
2157      IGCM_debug_Print 2 "IGCM_sys_ncrename : error code ${status}"
2158      cat out_rsync
2159      \rm out_rsync
2160      IGCM_debug_Print 2 "IGCM_sys_ncrename : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
2161    else
2162      \rm out_rsync
2163      break
2164    fi
2165    (( i = i + 1 ))
2166  done
2167
2168  if [ ${status} -gt 0 ] ; then
2169      echo "IGCM_sys_ncrename : ncrename error"
2170      IGCM_debug_Exit "ncrename"
2171  fi
2172
2173  IGCM_debug_PopStack "IGCM_sys_ncrename"
2174}
2175
2176function IGCM_sys_ncwa {
2177  IGCM_debug_PushStack "IGCM_sys_ncwa" -- $@
2178  if ( $DEBUG_sys ) ; then
2179    echo "IGCM_sys_ncwa :" $@
2180  fi
2181
2182  typeset NB_ESSAI DELAI status i
2183  # number of tentative
2184  NB_ESSAI=3
2185  # time delay between tentative
2186  DELAI=2
2187
2188  i=0
2189  while [ $i -lt $NB_ESSAI ] ; do
2190    ncwa $@ > out_rsync 2>&1
2191    status=$?
2192    if [ ${status} -gt 0 ] ; then
2193      IGCM_debug_Print 2 "IGCM_sys_ncwa : error code ${status}"
2194      cat out_rsync
2195      \rm out_rsync
2196      IGCM_debug_Print 2 "IGCM_sys_ncwa : ${i}/${NB_ESSAI} sleep ${DELAI} seconds and try again."
2197    else
2198      \rm out_rsync
2199      break
2200    fi
2201    (( i = i + 1 ))
2202  done
2203
2204  if [ ${status} -gt 0 ] ; then
2205      echo "IGCM_sys_ncwa : ncwa error"
2206      IGCM_debug_Exit "ncwa"
2207  fi
2208
2209  IGCM_debug_PopStack "IGCM_sys_ncwa"
2210}
2211
2212##############################################################
2213# CDO OPERATOR
2214
2215function IGCM_sys_cdo {
2216  IGCM_debug_PushStack "IGCM_sys_cdo" -- $@
2217  if ( $DEBUG_sys ) ; then
2218    echo "IGCM_sys_cdo :" $@
2219  fi
2220
2221  typeset status
2222
2223  \cdo $@ > out_rsync 2>&1
2224  status=$?
2225  if [ ${status} -gt 0 ] ; then
2226    echo "IGCM_sys_cdo : error code ${status}"
2227    cat out_rsync
2228    \rm out_rsync
2229    IGCM_debug_PopStack "IGCM_sys_cdo"
2230    return 1
2231  else
2232    IGCM_debug_PopStack "IGCM_sys_cdo"
2233    return 0
2234  fi
2235
2236  IGCM_debug_PopStack "IGCM_sys_cdo"
2237}
Note: See TracBrowser for help on using the repository browser.