source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_mercure.ksh @ 804

Last change on this file since 804 was 804, checked in by sdipsl, 11 years ago
  • Files waiting for rebuild are stored within the relevant simulation tree. see #87

--> /IGCM_OUT/TagName/SpaceName/ExperiementName/JobName/REBUILD

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