source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_titane.ksh @ 584

Last change on this file since 584 was 584, checked in by sdipsl, 12 years ago
  • tune ncrcat command (exclude variables that are not in all files, instead of including those that are in every file because of command line lenght issues on titane)
  • get the mesh_mask from the buffer if necessary
  • correct some typo
  • small modification due to the new .atlas_env_titane_ksh
  • pack_output works in stand-alone ==> need to revisit dependancies with asynchronous rebuild and create_ts/create_se to have it online.
  • Property svn:keywords set to Revision Author Date
File size: 50.2 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil, Martial Mancip, Arnaud Caubel
5# Contact: Arnaud.Caubel__at__lsce.ipsl.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 Titane
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=titane
71
72#D-
73#D-#==================================================
74#D-Program used in libIGCM
75#D-#==================================================
76
77# rsync with path
78typeset -r RSYNC=/usr/bin/rsync
79# RSYNC_opt args to rsync
80typeset -r RSYNC_opt="-va"
81# ie storage filesystem
82typeset -r STOREHOST=${MASTER}
83
84#====================================================
85# Source default environment
86#====================================================
87. /etc/profile
88
89#====================================================
90# Set environment tools (ferret, nco, cdo)
91#====================================================
92. /home/cont003/p86ipsl/.atlas_env_titane_ksh
93
94module switch nco/3.9.4 nco/3.9.4_netcdf4
95
96#====================================================
97# Specific for ocean additionnal diagnostic
98export FER_GO="$FER_GO /home/cont003/p86denv/IGCM_POST_UTIL/JNL /home/cont003/p86denv/GRAF /home/cont003/p86denv/GRAF/GO"
99export FER_PALETTE="$FER_PALETTE /home/cont003/p86denv/GRAF/PALET"
100
101#====================================================
102# Host specific DIRECTORIES
103#====================================================
104
105#====================================================
106#- R_EXE   (==> BIN_DIR = ${MODIPSL}/bin )
107typeset -r R_EXE="${MODIPSL}/bin"
108
109#====================================================
110#- SUBMIT_DIR : submission dir
111typeset SUBMIT_DIR=${SUBMIT_DIR:=${LS_SUBCWD}}
112
113#====================================================
114#- ARCHIVE
115typeset -r ARCHIVE=${DMFDIR}
116
117# ============ CESIUM START ============ #
118
119#====================================================
120#- Mirror libIGCM from titane to cesium if needed
121#ROOTSYS=$( echo ${libIGCM} | gawk -F"/" '{print $3}' )
122#if [ ! ${ROOTSYS} = "home" ] ; then
123#  typeset -r MirrorlibIGCM=${MirrorlibIGCM:=true}
124#else
125#  typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
126#fi
127
128#====================================================
129#- libIGCM_POST
130#if ( ${MirrorlibIGCM} ) ; then
131#  PATHlibIGCM=$( echo ${libIGCM} | gawk -F"${LOGIN}/" '{print $2}' | sed -e "s&/libIGCM&&" )
132#  typeset -r libIGCM_POST=${HOME}/MIRROR/${PATHlibIGCM}/libIGCM
133#else
134#  typeset -r libIGCM_POST=${libIGCM}
135#fi
136
137# ============ CESIUM  END  ============ #
138
139#====================================================
140#- MirrorlibIGCM for frontend
141typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
142
143#====================================================
144#- libIGCM_POST for frontend
145typeset -r libIGCM_POST=${libIGCM}
146
147#====================================================
148#- IN
149typeset -r R_IN=${R_IN:=/ccc/work/cont003/dsm/p86ipsl/IGCM}
150typeset -r R_IN_ECMWF=${R_IN_ECMWF:=/dmnfs/cont003/p24data}
151
152#====================================================
153#- R_OUT
154typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
155
156#====================================================
157#- R_BUF (ONLY FOR double copy an scratch)
158typeset -r R_BUF=${SCRATCHDIR}/IGCM_OUT
159
160#====================================================
161#- BIG_DIR : BIG_DIR to store files waiting for rebuild
162typeset -r BIG_DIR=${BIG_DIR:=${SCRATCHDIR}/REBUILD}
163
164#====================================================
165#- OUT_POST
166typeset -r R_OUT_POST=${SCRATCHDIR}/IGCM_OUT
167
168#====================================================
169#- RUN_DIR_PATH : Temporary working directory (=> TMP)
170if [ ! X${LSB_QUEUE} = Xmono ] ; then
171  typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${SCRATCHDIR}/RUN_DIR/${LSB_JOBID}}
172else
173  typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${SCRATCHDIR}/TMPDIR_IGCM/${LSB_JOBID}}
174fi
175
176#====================================================
177#- HOST_MPIRUN_COMMAND
178typeset -r HOST_MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND:="time mpirun"}
179
180#====================================================
181#- Max number of arguments passed to nco operator or demigration command
182UNIX_MAX_LIMIT=360
183
184#D-#==================================================
185#D-function IGCM_sys_RshMaster
186#D-* Purpose: Connection to frontend machine.
187#D-* Examples:
188#D-
189function IGCM_sys_RshMaster {
190  IGCM_debug_PushStack "IGCM_sys_RshMaster" $@
191  /bin/ksh <<-EOF
192    export libIGCM=${libIGCM}
193    export DEBUG_debug=${DEBUG_debug}
194    . ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
195    . ${libIGCM}/libIGCM_card/libIGCM_card.ksh
196    ${@}
197EOF
198  if [ $? -gt 0 ] ; then
199    echo "IGCM_sys_RshMaster : erreur."
200    IGCM_debug_Exit "IGCM_sys_RshMaster"
201  fi
202  IGCM_debug_PopStack "IGCM_sys_RshMaster"
203}
204
205#D-#==================================================
206#D-function IGCM_sys_RshArchive
207#D-* Purpose: Archive rsh command
208#D-* Examples:
209#D-
210function IGCM_sys_RshArchive {
211  IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
212  /bin/ksh <<-EOF
213    ${@}
214EOF
215  if [ $? -gt 0 ] ; then
216    echo "IGCM_sys_RshArchive : erreur."
217    IGCM_debug_Exit "IGCM_sys_RshArchive"
218  fi
219  IGCM_debug_PopStack "IGCM_sys_RshArchive"
220}
221
222#D-#==================================================
223#D-function IGCM_sys_RshPost
224#D-* Purpose: Post-process rsh command
225#D-* Examples:
226#D-
227function IGCM_sys_RshPost {
228  IGCM_debug_PushStack "IGCM_sys_RshPost" $@
229  if ( $DEBUG_sys ) ; then
230    echo "IGCM_sys_RshPost :" $@
231  fi
232
233  #echo cat tmp_IGCM_sys_RshPost_$$ INITIAL
234  #cat tmp_IGCM_sys_RshPost_$$
235  # keep standard input (stdin) for the loop onto temporary file
236  cat >tmp_IGCM_sys_RshPost_$$
237
238# ============ FRONTEND START ============ #
239
240  /bin/ksh <tmp_IGCM_sys_RshPost_$$
241  if [ $? -gt 0 ] ; then
242    echo "IGCM_sys_RshPost : erreur."
243    IGCM_debug_Exit "IGCM_sys_RshPost"
244  fi
245  # delete temporary file
246  \rm tmp_IGCM_sys_RshPost_$$
247
248# ============ FRONTEND  END  ============ #
249
250# ============ CESIUM START ============ #
251#  typeset NB_ESSAI DELAI status i
252#  if [ "X$( grep rebuild_from tmp_IGCM_sys_RshPost_$$ )" != "X" ] ; then
253#    #little hack so that rebuild submission is done on titane not an cesium
254#   
255#    libIGCM_POST_sed=$( echo $libIGCM_POST | sed 's/\//\\\//g' )
256#    POST_DIR_sed=$( echo ${POST_DIR} | sed 's/\//\\\//g' )
257#    sed "s/IGCM_sys_QsubPost/IGCM_sys_Qsub/g" tmp_IGCM_sys_RshPost_$$ > tmp.txt
258#    sed "s/ rebuild_fromWorkdir/ ${libIGCM_POST_sed}\/rebuild_fromWorkdir.job/g" tmp.txt > tmp_IGCM_sys_RshPost_$$
259#    sed "s/ rebuild_fromArchive/ ${libIGCM_POST_sed}\/rebuild_fromArchive.job/g" tmp_IGCM_sys_RshPost_$$ > tmp.txt
260#    sed "s/Script_Post_Output=/Script_Output=${POST_DIR_sed}\//g" tmp.txt > tmp_IGCM_sys_RshPost_$$
261#    \mv tmp.txt tmp_IGCM_sys_RshPost_$$
262#   
263#    echo cat tmp_IGCM_sys_RshPost_$$ AFTER
264#    cat tmp_IGCM_sys_RshPost_$$
265#
266#    /bin/ksh <tmp_IGCM_sys_RshPost_$$
267#    if [ $? -gt 0 ] ; then
268#      echo "IGCM_sys_RshPost : erreur."
269#      IGCM_debug_Exit "IGCM_sys_RshPost"
270#    fi
271#    # delete temporary file
272#    \rm tmp_IGCM_sys_RshPost_$$
273#
274#  else
275#    # number of tentative
276#    NB_ESSAI=10
277#    # time delay between tentative
278#    DELAI=10
279#    i=0
280#    while [ $i -ne $NB_ESSAI ] ; do
281#      ssh -t titane996 ssh cesium /bin/ksh <tmp_IGCM_sys_RshPost_$$
282#      status=$?
283#      if [ ${status} -ne 0 ];
284#      then
285#       sleep $DELAI
286#      else
287#       break
288#      fi
289#      let i=$i+1
290#    done
291#    # delete temporary file
292#    \rm tmp_IGCM_sys_RshPost_$$
293#
294#    if [ ${status} -gt 0 ] ; then
295#      echo "IGCM_sys_RshPost : erreur."
296#      IGCM_debug_Exit "IGCM_sys_RshPost"
297#    fi
298#  fi
299
300# ============ CESIUM  END  ============ #
301
302  IGCM_debug_PopStack "IGCM_sys_RshPost"
303}
304
305#D-#==================================================
306#D-function IGCM_sys_SendMail
307#D-* Purpose: Send mail when simulation is over
308#D-* Examples:
309#D-
310function IGCM_sys_SendMail {
311  IGCM_debug_PushStack "IGCM_sys_SendMail" $@
312  if ( $DEBUG_sys ) ; then
313    echo "IGCM_sys_SendMail :" $@
314  fi
315
316  if ( ${ExitFlag} ) ; then
317    status=failed
318  else
319    status=completed
320  fi
321
322    cat  << END_MAIL > job_end.mail
323Dear ${LOGIN},
324
325  Simulation ${config_UserChoices_JobName} is ${status} on supercomputer `hostname`.
326  Job started : ${DateBegin}
327  Job ended   : ${DateEnd}
328  Output files are available in ${R_SAVE}
329  Script files, Script Outputs and Debug files (if necessary) are available in ${SUBMIT_DIR}
330END_MAIL
331
332    if [ ! -z ${config_UserChoices_MailName} ] ; then
333        mail -s "${config_UserChoices_JobName} ${status}" ${config_UserChoices_MailName} < job_end.mail
334    elif [ -f ~/.forward ] ; then
335        mail -s "${config_UserChoices_JobName} ${status}" $( cat ~/.forward ) < job_end.mail
336    fi
337    sleep 10
338    rm -f job_end.mail
339
340  if [ $? -gt 0 ] ; then
341    echo "IGCM_sys_SendMail : erreur."
342    IGCM_debug_Exit "IGCM_sys_SendMail"
343  fi
344  IGCM_debug_PopStack "IGCM_sys_SendMail"
345}
346
347#D-#==================================================
348#D-function IGCM_sys_Mkdir
349#D-* Purpose: Master locale mkdir command
350#D-* Examples:
351#D-
352function IGCM_sys_Mkdir {
353  IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
354  if ( $DEBUG_sys ) ; then
355    echo "IGCM_sys_Mkdir :" $@
356  fi
357  if [ ! -d ${1} ]; then
358    \mkdir -p $1
359    if [ $? -gt 0 ] ; then
360      echo "IGCM_sys_Mkdir : erreur."
361      IGCM_debug_Exit "IGCM_sys_Mkdir"
362    fi
363  fi
364  # vérification :
365  if [ ! -d ${1} ] ; then
366    echo "IGCM_sys_Mkdir : erreur."
367    IGCM_debug_Exit "IGCM_sys_Mkdir"
368  fi
369  IGCM_debug_PopStack "IGCM_sys_Mkdir"
370}
371
372#D-#==================================================
373#D-function IGCM_sys_MkdirArchive
374#D-* Purpose: Mkdir on Archive
375#D-* Examples:
376#D-
377function IGCM_sys_MkdirArchive {
378  IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
379  if ( $DEBUG_sys ) ; then
380    echo "IGCM_sys_MkdirArchive :" $@
381  fi
382  #- creation de repertoire sur le serveur fichier
383  if [ ! -d ${1} ]; then 
384    \mkdir -p $1
385    if [ $? -gt 0 ] ; then
386      echo "IGCM_sys_MkdirArchive : erreur."
387      IGCM_debug_Exit "IGCM_sys_MkdirArchive"
388    fi
389  fi
390  IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
391}
392
393#D-#==================================================
394#D-function IGCM_sys_MkdirWork
395#D-* Purpose: Mkdir on Work
396#D-* Examples:
397#D-
398function IGCM_sys_MkdirWork {
399  IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
400  if ( $DEBUG_sys ) ; then
401    echo "IGCM_sys_MkdirWork :" $@
402  fi
403  #- creation de repertoire sur le serveur fichier
404  if [ ! -d ${1} ]; then 
405    \mkdir -p $1
406    if [ $? -gt 0 ] ; then
407      echo "IGCM_sys_MkdirWork : erreur."
408      IGCM_debug_Exit "IGCM_sys_MkdirWork"
409    fi
410  fi
411  IGCM_debug_PopStack "IGCM_sys_MkdirWork"
412}
413
414#D-#==================================================
415#D-function IGCM_sys_Cd
416#D-* Purpose: master cd command
417#D-* Examples:
418#D-
419function IGCM_sys_Cd {
420  IGCM_debug_PushStack "IGCM_sys_Cd" $@
421  if ( $DEBUG_sys ) ; then
422    echo "IGCM_sys_Cd :" $@
423  fi
424  \cd $1
425  if [ $? -gt 0 ] ; then
426    echo "IGCM_sys_Cd : erreur."
427    IGCM_debug_Exit "IGCM_sys_Cd"
428  fi
429  IGCM_debug_PopStack "IGCM_sys_Cd"
430}
431
432#D-#==================================================
433#D-function IGCM_sys_Chmod
434#D-* Purpose: Chmod
435#D-* Examples:
436#D-
437function IGCM_sys_Chmod {
438  IGCM_debug_PushStack "IGCM_sys_Chmod" -- $@
439  if ( $DEBUG_sys ) ; then
440    echo "IGCM_sys_Chmod :" $@
441  fi
442  if [ $DRYRUN -le 1 ]; then
443    \chmod $@
444    if [ $? -gt 0 ] ; then
445      echo "IGCM_sys_Chmod : erreur."
446      IGCM_debug_Exit "IGCM_sys_Chmod"
447    fi
448  else
449    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
450  fi
451  IGCM_debug_PopStack "IGCM_sys_Chmod"
452}
453
454#D-#==================================================
455#D-function IGCM_sys_FileSize
456#D-* Purpose: Filesize
457#D-* Examples:
458#D-
459function IGCM_sys_FileSize {
460  IGCM_debug_PushStack "IGCM_sys_FileSize" $@
461
462  typeset sizeF
463  set +A sizeF -- $( ls -la ${1} )
464  if [ $? -gt 0 ] ; then
465    IGCM_debug_Exit "IGCM_sys_FileSize"
466  fi
467  eval ${2}=${sizeF[4]}
468
469  IGCM_debug_PopStack "IGCM_sys_FileSize"
470}
471
472#D-#==================================================
473#D-function IGCM_sys_TestDir
474#D-* Purpose: Test Directory that must exists
475#D-* Examples:
476#D-
477function IGCM_sys_TestDir {
478  IGCM_debug_PushStack "IGCM_sys_TestDir" $@
479  if ( $DEBUG_sys ) ; then
480    echo "IGCM_sys_TestDir :" $@
481  fi
482  typeset ExistFlag
483  ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
484  IGCM_debug_PopStack "IGCM_sys_TestDir"
485
486  return ${ExistFlag}
487}
488
489#D-#==================================================
490#D-function IGCM_sys_TestDirArchive
491#D-* Purpose: Test Directory that must exists on Archive
492#D-* Examples:
493#D-
494function IGCM_sys_TestDirArchive {
495  IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
496  if ( $DEBUG_sys ) ; then
497    echo "IGCM_sys_TestDirArchive :" $@
498  fi
499  typeset ExistFlag
500  ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
501  IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
502
503  return ${ExistFlag}
504}
505
506#D-#==================================================
507#D-function IGCM_sys_IsFileArchived
508#D-* Purpose: Test file that must NOT EXISTS on Archive
509#D-* Examples:
510#D-
511function IGCM_sys_IsFileArchived {
512  IGCM_debug_PushStack "IGCM_sys_IsFileArchived" $@
513  if ( $DEBUG_sys ) ; then
514    echo "IGCM_sys_IsFileArchived :" $@
515  fi
516  typeset IsArchivedFlag
517  IsArchivedFlag=$( [ X$( echo $1 | grep ^\/dmnfs ) != X ] && echo 0 || echo 1 )
518  IGCM_debug_PopStack "IGCM_sys_IsFileArchived"
519
520  return ${IsArchivedFlag}
521}
522
523#D-#==================================================
524#D-function IGCM_sys_TestFileArchive
525#D-* Purpose: Test file that must NOT EXISTS on Archive
526#D-* Examples:
527#D-
528function IGCM_sys_TestFileArchive {
529  IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
530  if ( $DEBUG_sys ) ; then
531    echo "IGCM_sys_TestFileArchive :" $@
532  fi
533  typeset ExistFlag
534  ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
535  IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
536
537  return ${ExistFlag}
538}
539
540#D-#==================================================
541#D-function IGCM_sys_TestFileBuffer
542#D-* Purpose: Test file that must NOT EXISTS on Buffer
543#D-* Examples:
544#D-
545function IGCM_sys_TestFileBuffer {
546  IGCM_debug_PushStack "IGCM_sys_TestFileBuffer" $@
547  typeset ExistFlag
548  ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
549  IGCM_debug_PopStack "IGCM_sys_TestFileBuffer"
550
551  return ${ExistFlag}
552}
553
554#D-#==================================================
555#D-function IGCM_sys_CountFileArchive
556#D-* Purpose: Count files on Archive filesystem
557#D-* Examples:
558#D-
559function IGCM_sys_CountFileArchive {
560  IGCM_debug_PushStack "IGCM_sys_CountFileArchive" $@
561  ls ${@} 2>/dev/null | wc -l
562  if [ $? -gt 0 ] ; then
563    echo "IGCM_sys_CountFileArchive : erreur."
564  fi
565  IGCM_debug_PopStack "IGCM_sys_CountFileArchive"
566}
567
568#D-#==================================================
569#D-function IGCM_sys_CountFileBuffer
570#D-* Purpose: Count files on Scratch filesystem
571#D-* Examples:
572#D-
573function IGCM_sys_CountFileBuffer {
574  IGCM_debug_PushStack "IGCM_sys_CountFileBuffer" $@
575  ls ${@} 2>/dev/null | wc -l
576  if [ $? -gt 0 ] ; then
577    echo "IGCM_sys_CountFileBuffer : erreur."
578  fi
579  IGCM_debug_PopStack "IGCM_sys_CountFileBuffer"
580}
581
582#D-#==================================================
583#D-function IGCM_sys_Tree
584#D-* Purpose: Tree directories with files on ${ARCHIVE}
585#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
586#D-
587function IGCM_sys_Tree {
588  IGCM_debug_PushStack "IGCM_sys_Tree" $@
589  if ( $DEBUG_sys ) ; then
590    echo "IGCM_sys_Tree :" $@
591  fi
592
593  \ls -lR ${@}
594
595  IGCM_debug_PopStack "IGCM_sys_Tree"
596}
597
598#D-#==================================================
599#D-function IGCM_sys_Tar
600#D-* Purpose: master tar command
601#D-* Examples:
602#D-
603function IGCM_sys_Tar {
604  IGCM_debug_PushStack "IGCM_sys_Tar" $@
605  if ( $DEBUG_sys ) ; then
606    echo "IGCM_sys_Tar :" $@
607  fi
608  \tar cf $@
609  if [ $? -gt 0 ] ; then
610    echo "IGCM_sys_Tar : erreur."
611    IGCM_debug_Exit "IGCM_sys_Tar"
612  fi
613  IGCM_debug_PopStack "IGCM_sys_Tar"
614}
615
616#D-#==================================================
617#D-function IGCM_sys_UnTar
618#D-* Purpose: master un-tar command
619#D-* Examples:
620#D-
621function IGCM_sys_UnTar {
622  IGCM_debug_PushStack "IGCM_sys_UnTar" $@
623  if ( $DEBUG_sys ) ; then
624    echo "IGCM_sys_UnTar :" $@
625  fi
626  \tar xvf $1
627  if [ $? -gt 0 ] ; then
628    echo "IGCM_sys_UnTar : erreur."
629    IGCM_debug_Exit "IGCM_sys_UnTar"
630  fi
631  IGCM_debug_PopStack "IGCM_sys_UnTar"
632}
633
634#D-#==================================================
635#D-function IGCM_sys_Qsub
636#D-* Purpose: Qsub new job
637#D-* Examples:
638#D-
639function IGCM_sys_Qsub {
640  IGCM_debug_PushStack "IGCM_sys_Qsub" $@
641  if ( $DEBUG_sys ) ; then
642    echo "IGCM_sys_Qsub :" $@
643  fi
644  typeset options
645  if [ ${config_UserChoices_JobName}.${CumulPeriod} = "." ] ; then
646    options=" -o ${Script_Output} -e ${Script_Output}"
647  else
648    options=" -o ${Script_Output} -e ${Script_Output} -r ${config_UserChoices_JobName}.${CumulPeriod}"
649  fi
650
651  /usr/local/bin/ccc_msub ${options} < $1
652  if [ $? -gt 0 ] ; then
653    echo "IGCM_sys_Qsub : erreur ${options} $1"
654    IGCM_debug_Exit "IGCM_sys_Qsub"
655  fi
656  IGCM_debug_PopStack "IGCM_sys_Qsub"
657}
658
659#D-#==================================================
660#D-function IGCM_sys_QsubPost
661#D-* Purpose: Qsub new job on scalaire
662#D-* Examples:
663#D-
664function IGCM_sys_QsubPost {
665  IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
666  if ( $DEBUG_sys ) ; then
667    echo "IGCM_sys_QsubPost :" $@
668  fi
669
670  # Need to export listVarEnv for cesium
671  # NO Need to export listVarEnv for titane
672# ============ FRONTEND START ============ #
673
674  /usr/local/bin/ccc_msub -p ${BRIDGE_MSUB_PROJECT} -o ${POST_DIR}/${Script_Post_Output}.out -e ${POST_DIR}/${Script_Post_Output}.out ${libIGCM_POST}/$1.job
675
676# ============ FRONTEND  END  ============ #
677
678# ============ CESIUM START ============ #
679#  typeset NB_ESSAI DELAI status i
680#  # number of tentative
681#  NB_ESSAI=10
682#  # time delay between tentative
683#  DELAI=10
684#  (( i = 0 ))
685#  while [ $i -lt $NB_ESSAI ] ; do
686#    /usr/local/bin/ccc_msub -o ${POST_DIR}/${Script_Post_Output}.out -e ${POST_DIR}/${Script_Post_Output}.e.out -E "-v ${listVarEnv}" ${libIGCM_POST}/$1.job
687#    status=$?
688#    if [ ${status} -gt 0 ]; then
689#      sleep $DELAI
690#    else
691#      break
692#    fi
693#    (( i = i + 1 ))
694#  done
695# ============ CESIUM  END  ============ #
696
697  if [ $? -gt 0 ] ; then
698    echo "IGCM_sys_QsubPost : erreur " $@
699    IGCM_debug_Exit "IGCM_sys_QsubPost"
700  fi
701  IGCM_debug_PopStack "IGCM_sys_QsubPost"
702}
703
704#D-*************************
705#D- File transfer functions
706#D-*************************
707#D-
708
709#D-#==================================================
710#D-function IGCM_sys_Rsync_out
711#D-* Purpose: treat return val of rsync
712#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
713#D-  Error values and explanations can depend on your system version.
714function IGCM_sys_Rsync_out {
715  RET=$1
716  if [ ! $RET ] ; then
717    echo "rsync error !"
718  fi
719
720  if [ $MYLANG = "fr" ]; then
721    case $RET in
722    0)  return ;;
723    1)  echo "Erreur de rsync ; RERR_SYNTAX : "
724      echo "Erreur de syntaxe ou d'utilisation."
725      return;;
726    2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
727      echo "Incompatibilité de protocole."
728      return;;
729    3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
730      echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
731      echo "répertoires"
732      return;;
733    4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
734      echo "Action demandée non supportée : une tentative de manipulation de"
735      echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
736      echo "été faite ; ou une option qui est supportée par le  client  mais"
737      echo "pas par le serveur a été spécifiée."
738      return;;
739    10) echo "Erreur de rsync ; RERR_SOCKETIO"
740      echo "Erreur dans le socket d'entrée sortie"
741      return;;
742    11) echo "Erreur de rsync ; RERR_FILEIO"
743      echo "Erreur d'entrée sortie fichier"
744      return;;
745    12) echo "Erreur de rsync ; RERR_STREAMIO"
746      echo "Erreur dans flux de donnée du protocole rsync"
747      return;;
748    13) echo "Erreur de rsync ; RERR_MESSAGEIO"
749      echo "Erreur avec les diagnostics du programme"
750      return;;
751    14) echo "Erreur de rsync ; RERR_IPC"
752      echo "Erreur dans le code IPC"
753      return;;
754    20) echo "Erreur de rsync ; RERR_SIGNAL"
755      echo "SIGUSR1 ou SIGINT reçu"
756      return;;
757    21) echo "Erreur de rsync ; RERR_WAITCHILD"
758      echo "Une erreur retournée par waitpid()"
759      return;;
760    22) echo "Erreur de rsync ; RERR_MALLOC"
761      echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
762      return;;
763    23) echo ""
764      echo "Erreur fichier inexistant"
765      return;;
766    30) echo "Erreur de rsync ; RERR_TIMEOUT"
767      echo "Temps d'attente écoulé dans l'envoi/réception de données"
768      return;;
769    *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
770      return;;
771    esac
772  elif [ $MYLANG = "en" ] ; then
773    case $RET in
774    0)  return;;               
775    1)  echo "rsync error : Syntax or usage error "
776      return;;
777    2)  echo "rsync error : Protocol incompatibility "
778      return;;
779    3)  echo "rsync error : Errors selecting input/output files, dirs"
780      return;;
781    4)  echo "rsync error : Requested action not supported: an attempt"
782      echo "was made to manipulate 64-bit files on a platform that cannot support"
783      echo "them; or an option was specified that is supported by the client and"
784      echo "not by the server."
785      return;;
786    5)  echo "rsync error : Error starting client-server protocol"
787      return;;
788    10) echo "rsync error : Error in socket I/O "
789      return;;
790    11) echo "rsync error : Error in file I/O "
791      return;;
792    12) echo "rsync error : Error in rsync protocol data stream "
793      return;;
794    13) echo "rsync error : Errors with program diagnostics "
795      return;;
796    14) echo "rsync error : Error in IPC code "
797      return;;
798    20) echo "rsync error : Received SIGUSR1 or SIGINT "
799      return;;
800    21) echo "rsync error : Some error returned by waitpid() "
801      return;;
802    22) echo "rsync error : Error allocating core memory buffers "
803      return;;
804    23) echo "rsync error : Partial transfer due to error"
805      return;;
806    24) echo "rsync error : Partial transfer due to vanished source files"
807      return;;
808    30) echo "rsync error : Timeout in data send/receive "
809      return;;
810    *)  echo "rsync error : return code of rsync unknown :" $RET
811      return;;
812    esac
813  else
814    echo "unknown language $MYLANG."
815    return
816  fi
817}
818
819#D-#==================================================
820#D-function IGCM_sys_Miror_libIGCM
821#D-* Purpose: Mirror libIGCM PATH and lib to cesium
822#D-* Examples:
823#D-
824function IGCM_sys_Mirror_libIGCM {
825  IGCM_debug_PushStack "IGCM_sys_Mirror_libIGCM"
826  if ( $DEBUG_sys ) ; then
827    echo "IGCM_sys_Mirror_libIGCM"
828  fi
829
830  typeset RET DEST
831
832  mkdir -p ${HOME}/MIRROR/${PATHlibIGCM}
833
834  echo ${RSYNC} ${RSYNC_opt} ${libIGCM} ${HOME}/MIRROR/${PATHlibIGCM} > out_rsync 2>&1
835  ${RSYNC} ${RSYNC_opt} ${libIGCM} ${HOME}/MIRROR/${PATHlibIGCM} >> out_rsync 2>&1
836  RET=$?
837
838  if [ ${RET} -gt 0 ] ; then
839    echo "IGCM_sys_Mirror_libIGCM Warning : no libIGCM on cesium."
840    cat out_rsync
841  fi
842  IGCM_debug_PopStack "IGCM_sys_Mirror_libIGCM"
843}
844
845#====================================================
846#- Call IGCM_sys_Mirror_libIGCM now !
847if ( $MirrorlibIGCM ) ; then
848  IGCM_sys_Mirror_libIGCM
849fi
850
851#D-#==================================================
852#D-function IGCM_sys_Cp
853#D-* Purpose: generic cp
854#D-* Examples:
855#D-
856function IGCM_sys_Cp {
857  IGCM_debug_PushStack "IGCM_sys_Cp" $@
858  if ( $DEBUG_sys ) ; then
859    echo "IGCM_sys_Cp :" $@
860  fi
861
862  typeset RET
863
864  echo cp $@ > out_rsync 2>&1
865  \cp $@ >> out_rsync 2>&1
866  RET=$?
867
868  if [ ${RET} -gt 0 ] ; then
869    echo "IGCM_sys_Cp : error."
870    cat out_rsync
871    IGCM_debug_Exit "IGCM_sys_Cp"
872  else
873    \rm out_rsync
874  fi
875  IGCM_debug_PopStack "IGCM_sys_Cp"
876}
877
878#D-#==================================================
879#D-function IGCM_sys_Rm
880#D-* Purpose: generic rm
881#D-* Examples:
882#D-
883function IGCM_sys_Rm {
884  IGCM_debug_PushStack "IGCM_sys_Rm" -- $@
885  if ( $DEBUG_sys ) ; then
886    echo "IGCM_sys_Rm :" $@
887  fi
888
889  typeset RET
890
891  echo rm $@ > out_rsync 2>&1
892  \rm $@ >> out_rsync 2>&1
893  RET=$?
894
895  if [ ${RET} -gt 0 ] ; then
896    echo "IGCM_sys_Rm : error."
897    cat out_rsync
898    IGCM_debug_Exit "IGCM_sys_Rm"
899  else
900    \rm out_rsync
901  fi
902  IGCM_debug_PopStack "IGCM_sys_Rm"
903}
904
905#D-#==================================================
906#D-function IGCM_sys_RmRunDir
907#D-* Purpose: rm tmpdir (dummy function most of the time batch
908#D-                      scheduler will do the job)
909#D-* Examples:
910#D-
911function IGCM_sys_RmRunDir {
912  IGCM_debug_PushStack "IGCM_sys_RmRunDir" -- $@
913  if ( $DEBUG_sys ) ; then
914    echo "IGCM_sys_RmRunDir :" $@
915  fi
916
917  typeset RET
918
919  echo rm $@ > out_rsync 2>&1
920  \rm $@ >> out_rsync 2>&1
921  RET=$?
922
923  if [ ${RET} -gt 0 ] ; then
924    echo "IGCM_sys_RmRunDir : error."
925    cat out_rsync
926    IGCM_debug_Exit "IGCM_sys_RmRunDir"
927  else
928    \rm out_rsync
929  fi
930  IGCM_debug_PopStack "IGCM_sys_RmRunDir"
931}
932
933#D-#==================================================
934#D-function IGCM_sys_Mv
935#D-* Purpose: generic move
936#D-* Examples:
937#D-
938function IGCM_sys_Mv {
939  IGCM_debug_PushStack "IGCM_sys_Mv" $@
940  if ( $DEBUG_sys ) ; then
941    echo "IGCM_sys_Mv :" $@
942  fi
943
944  if [ $DRYRUN = 0 ]; then
945
946    typeset RET
947   
948    echo mv $@ > out_rsync 2>&1
949    \mv $@ >> out_rsync 2>&1
950    RET=$?
951   
952    if [ ${RET} -gt 0 ] ; then
953      echo "IGCM_sys_Mv : error in mv."
954      cat out_rsync
955      IGCM_debug_Exit "IGCM_sys_Mv"
956    else
957      \rm out_rsync
958    fi
959  else
960    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
961  fi
962
963  IGCM_debug_PopStack "IGCM_sys_Mv"
964}
965
966#D-#==================================================
967#D-function IGCM_sys_Put_Dir
968#D-* Purpose: Copy a complete directory on $(ARCHIVE)
969#D-* Examples:
970#D-
971function IGCM_sys_Put_Dir {
972  IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
973  if ( $DEBUG_sys ) ; then
974    echo "IGCM_sys_Put_Dir :" $@
975  fi
976  if [ $DRYRUN = 0 ]; then
977    if [ ! -d ${1} ] ; then
978      echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
979      IGCM_debug_PopStack "IGCM_sys_Put_Dir"
980      return
981    fi
982
983    typeset RET
984
985    # Only if we use rsync
986    #IGCM_sys_TestDirArchive $( dirname $2 )
987    #
988    #USUAL WAY
989    \cp -r $1 $2 > out_rsync 2>&1
990    RET=$?
991
992    if [ ${RET} -gt 0 ] ; then
993      echo "IGCM_sys_Put_Dir : error."
994      cat out_rsync
995      IGCM_debug_Exit "IGCM_sys_Put_Dir"
996    else
997      \rm out_rsync
998    fi
999  else
1000    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1001  fi
1002  IGCM_debug_PopStack "IGCM_sys_Put_Dir"
1003}
1004
1005#D-#==================================================
1006#D-function IGCM_sys_Get_Dir
1007#D-* Purpose: Copy a complete directory from ${ARCHIVE}
1008#D-* Examples:
1009#D-
1010function IGCM_sys_Get_Dir {
1011  IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
1012  if ( $DEBUG_sys ) ; then
1013    echo "IGCM_sys_Get_Dir :" $@
1014  fi
1015  if [ $DRYRUN = 0 ]; then
1016#    if [ ! -d ${1} ] ; then
1017#      echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
1018#      IGCM_debug_PopStack "IGCM_sys_Get_Dir"
1019#      return
1020#    fi
1021
1022    typeset RET
1023
1024    # Only if we use rsync
1025    #IGCM_sys_TestDirArchive $( dirname $2 )
1026    #
1027    # USUAL WAY
1028    # add dmfind/dmget (to demigrate all offline files) :
1029    dmfind $1 -state MIG -o -state OFL -o -state PAR | dmget
1030    \cp -r $1 $2 > out_rsync 2>&1
1031    RET=$?
1032
1033    if [ ${RET} -gt 0 ] ; then
1034      echo "IGCM_sys_Get_Dir : error."
1035      cat out_rsync
1036      IGCM_debug_Exit "IGCM_sys_Get_Dir"
1037    else
1038      \rm out_rsync
1039    fi
1040  else
1041    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1042  fi
1043  IGCM_debug_PopStack "IGCM_sys_Get_Dir"
1044}
1045
1046#D-#==================================================
1047#D-function IGCM_sys_Get_Master
1048#D-* Purpose: Copy a complete directory from MASTER filesystem
1049#D-* Examples:
1050#D-
1051function IGCM_sys_Get_Master {
1052  IGCM_debug_PushStack "IGCM_sys_Get_Master" $@
1053  if ( $DEBUG_sys ) ; then
1054    echo "IGCM_sys_Get_Master :" $@
1055  fi
1056  if [ $DRYRUN = 0 ]; then
1057    if [ ! -d ${1} ] ; then
1058      echo "WARNING : IGCM_sys_Get_Master ${1} DOES NOT EXIST ."
1059      IGCM_debug_PopStack "IGCM_sys_Get_Master"
1060      return
1061    fi
1062
1063    typeset RET
1064
1065    #USUAL WAY
1066    \cp -r $1 $2 > out_rsync 2>&1
1067    RET=$?
1068
1069    if [ ${RET} -gt 0 ] ; then
1070      echo "IGCM_sys_Get_Master : error."
1071      cat out_rsync
1072      IGCM_debug_Exit "IGCM_sys_Get_Master"
1073    else
1074      \rm out_rsync
1075    fi
1076  else
1077    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1078  fi
1079  IGCM_debug_PopStack "IGCM_sys_Get_Master"
1080}
1081
1082#D-#==================================================
1083#D-function IGCM_sys_Put_Rest
1084#D-* Purpose: Put computied restarts on ${ARCHIVE}.
1085#D-           File and target directory must exist.
1086#D-* Examples:
1087#D-
1088function IGCM_sys_Put_Rest {
1089  IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
1090  if ( $DEBUG_sys ) ; then
1091    echo "IGCM_sys_Put_Rest :" $@
1092  fi
1093  if [ $DRYRUN = 0 ]; then
1094    if [ ! -f ${1} ] ; then
1095      echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
1096      IGCM_debug_Exit "IGCM_sys_Put_Rest"
1097    fi
1098
1099    typeset RET
1100    #
1101    if [ X${JobType} = XRUN ] ; then
1102      IGCM_sys_Chmod 444 ${1}
1103    fi
1104
1105    #
1106    # USUAL WAY
1107    \cp $1 $2 > out_rsync 2>&1
1108    RET=$?
1109
1110#       #RSYNC WITH NETWORK SSH CALL
1111#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} > out_rsync 2>&1
1112#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} >> out_rsync 2>&1
1113
1114#       #RSYNC WITH NFS USE
1115#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
1116#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
1117
1118#       RET=$?
1119#       IGCM_sys_Rsync_out $RET
1120
1121#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1122#       (( RET=RET+$? ))
1123
1124    if [ ${RET} -gt 0 ] ; then
1125      echo "IGCM_sys_Put_Rest : error."
1126      cat out_rsync
1127      IGCM_debug_Exit "IGCM_sys_Put_Rest"
1128    else
1129      \rm out_rsync
1130    fi
1131  else
1132    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1133  fi
1134  IGCM_debug_PopStack "IGCM_sys_Put_Rest"
1135}
1136
1137#D-#==================================================
1138#D-function IGCM_sys_PutBuffer_Rest
1139#D-* Purpose: Put computied restarts on ${SCRATCHDIR}.
1140#D-           File and target directory must exist.
1141#D-* Examples:
1142#D-
1143function IGCM_sys_PutBuffer_Rest {
1144  IGCM_debug_PushStack "IGCM_sys_PutBuffer_Rest" $@
1145  if ( $DEBUG_sys ) ; then
1146    echo "IGCM_sys_PutBuffer_Rest :" $@
1147  fi
1148  if [ $DRYRUN = 0 ]; then
1149    if [ ! -f ${1} ] ; then
1150      echo "ERROR : IGCM_sys_PutBuffer_Rest ${1} DOES NOT EXIST ."
1151      IGCM_debug_Exit "IGCM_sys_PutBuffer_Rest"
1152    fi
1153
1154    typeset RET
1155    #
1156    if [ X${JobType} = XRUN ] ; then
1157      IGCM_sys_Chmod 444 ${1}
1158    fi
1159
1160    #
1161    # USUAL WAY
1162    \cp $1 $2 > out_rsync 2>&1
1163    RET=$?
1164
1165    if [ ${RET} -gt 0 ] ; then
1166      echo "IGCM_sys_PutBuffer_Rest : error."
1167      cat out_rsync
1168      IGCM_debug_Exit "IGCM_sys_PutBuffer_Rest"
1169    else
1170      \rm out_rsync
1171    fi
1172  else
1173    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1174  fi
1175  IGCM_debug_PopStack "IGCM_sys_PutBuffer_Rest"
1176}
1177
1178#D-#==================================================
1179#D-function IGCM_sys_Put_Out
1180#D-* Purpose: Copy a file on ${ARCHIVE} after having chmod it in readonly
1181#D-* Examples:
1182#D-
1183function IGCM_sys_Put_Out {
1184  IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
1185  if ( $DEBUG_sys ) ; then
1186    echo "IGCM_sys_Put_Out :" $@
1187  fi
1188  if [ $DRYRUN = 0 ]; then
1189    if [ ! -f ${1} ] ; then
1190      echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
1191      IGCM_debug_PopStack "IGCM_sys_Put_Out"
1192      return 1
1193    fi
1194    #
1195    IGCM_sys_MkdirArchive $( dirname $2 )
1196    #
1197    typeset RET
1198
1199    #=====================================================
1200    #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
1201    #=====================================================
1202
1203    #echo ${2} | grep "${R_OUT}" > /dev/null 2>&1
1204    #if [ $? -eq 0 ] ; then
1205    #    typeset WORKPATH FILEPATH
1206    #    WORKPATH=$( dirname $2 | sed -e "s|${R_OUT}|${R_BUF}|" )
1207    #    IGCM_sys_MkdirWork ${WORKPATH}
1208    #    FILEPATH=${WORKPATH}/$( basename $2 )
1209    #    #
1210    #    IGCM_sys_Cp ${1} ${FILEPATH}
1211    #fi
1212
1213    if [ X${JobType} = XRUN ] ; then
1214      if [ X${3} = X ] ; then
1215        IGCM_sys_Chmod 444 ${1}
1216      fi
1217    fi
1218    #
1219    # USUAL WAY
1220    \cp $1 $2 > out_rsync 2>&1
1221    RET=$?
1222
1223#       #RSYNC WITH NETWORK SSH CALL
1224#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} > out_rsync 2>&1
1225#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} >> out_rsync 2>&1
1226
1227#       #RSYNC WITH NFS USE
1228#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
1229#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
1230
1231#       RET=$?
1232#       IGCM_sys_Rsync_out $RET
1233
1234#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1235#       (( RET=RET+$? ))
1236
1237    if [ ${RET} -gt 0 ] ; then
1238      echo "IGCM_sys_Put_Out : error."
1239      cat out_rsync
1240      IGCM_debug_Exit "IGCM_sys_Put_Out"
1241    else
1242      \rm out_rsync
1243    fi
1244  else
1245    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1246  fi
1247  IGCM_debug_PopStack "IGCM_sys_Put_Out"
1248  return 0
1249}
1250
1251#D-#==================================================
1252#D-function IGCM_sys_PutBuffer_Out
1253#D-* Purpose: Copy a file on ${SCRATCHDIR} after having chmod it in readonly
1254#D-* Examples:
1255#D-
1256function IGCM_sys_PutBuffer_Out {
1257  IGCM_debug_PushStack "IGCM_sys_PutBuffer_Out" $@
1258  if ( $DEBUG_sys ) ; then
1259    echo "IGCM_sys_PutBuffer_Out :" $@
1260  fi
1261  if [ $DRYRUN = 0 ]; then
1262    if [ ! -f ${1} ] ; then
1263      echo "WARNING : IGCM_sys_PutBuffer_Out ${1} DOES NOT EXIST ."
1264      IGCM_debug_PopStack "IGCM_sys_PutBuffer_Out"
1265      return 1
1266    fi
1267    #
1268    IGCM_sys_Mkdir $( dirname $2 )
1269    #
1270    typeset RET
1271
1272    if [ X${JobType} = XRUN ] ; then
1273      if [ X${3} = X ] ; then
1274        IGCM_sys_Chmod 444 ${1}
1275      fi
1276    fi
1277    #
1278    # USUAL WAY
1279    \cp $1 $2 > out_rsync 2>&1
1280    RET=$?
1281
1282    if [ ${RET} -gt 0 ] ; then
1283      echo "IGCM_sys_PutBuffer_Out : error."
1284      cat out_rsync
1285      IGCM_debug_Exit "IGCM_sys_PutBuffer_Out"
1286    else
1287      \rm out_rsync
1288    fi
1289  else
1290    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1291  fi
1292  IGCM_debug_PopStack "IGCM_sys_PutBuffer_Out"
1293  return 0
1294}
1295
1296#D-#==================================================
1297#D-function IGCM_sys_Get
1298#D-* Purpose: Get a file from ${ARCHIVE}
1299#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
1300#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
1301function IGCM_sys_Get {
1302  IGCM_debug_PushStack "IGCM_sys_Get" $@
1303
1304  typeset DEST RET dm_liste ifile target file_work
1305
1306  if ( $DEBUG_sys ) ; then
1307    echo "IGCM_sys_Get :" $@
1308  fi
1309  if [ $DRYRUN -le 2 ]; then
1310    if [ X${1} = X'/l' ] ; then
1311      # test if the first file is present in the old computation :
1312      eval set +A dm_liste \${${2}}
1313    else
1314      eval set +A dm_liste ${1}
1315    fi
1316    eval DEST=\${${#}}
1317
1318    #=====================================================
1319    #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
1320    #=====================================================
1321
1322    # Is it an R_OUT file (not R_IN) ?
1323    #echo ${dm_liste[0]} | grep "${R_OUT}" > /dev/null 2>&1
1324    #if [ $? -eq 0 ] ; then
1325    #    # Yes  ? then we try to get it in SCRATCHDIR
1326    #    set +A file_work $( echo ${dm_liste[*]} | sed -e "s|${R_OUT}|${R_BUF}|g" )
1327    #    if [ -f ${file_work[0]} ] ; then
1328    #   IGCM_sys_Cp ${file_work[*]} ${DEST}
1329    #   IGCM_debug_PopStack "IGCM_sys_Get"
1330    #   return
1331    #    fi
1332    #fi
1333
1334    # test if the (first) file is present in the old computation :
1335    IGCM_sys_TestFileArchive ${dm_liste[0]}
1336    RET=$?
1337    if [ ${RET} -gt 0 ] ; then
1338      echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
1339      IGCM_debug_Exit "IGCM_sys_Get"
1340    fi
1341
1342    dmget ${dm_liste[*]} > out_rsync 2>&1
1343    RET=$?
1344    if [ ${RET} -gt 0 ] ; then
1345      echo "WARNING IGCM_sys_Get : demigration error."
1346      cat out_rsync
1347      echo "WARNING IGCM_sys_Get : will stop later if the cp fails."
1348    fi
1349
1350    #if [ ${RET} -gt 0 ] ; then
1351    #    if [ ! "X$( grep "Lost dmusrcmd connection" out_rsync )" = "X" ] ; then
1352    #   cat out_rsync
1353    #   echo "WARNING IGCM_sys_Get : Lost dmusrcmd connection : "
1354    #   sleep 30
1355    #   echo "We try another time"
1356    #   dmget ${dm_liste[*]} > out_rsync 2>&1
1357    #   RET=$?
1358    #   if [ ${RET} -gt 0 ] ; then
1359    #       echo "ERROR IGCM_sys_Get : again demigration error :"
1360    #       cat out_rsync
1361    #       IGCM_debug_Exit "IGCM_sys_Get"
1362    #   fi
1363    #    else
1364    #   echo "ERROR IGCM_sys_Get : demigration error :"
1365    #   cat out_rsync
1366    #   IGCM_debug_Exit "IGCM_sys_Get"
1367    #    fi
1368    #fi
1369
1370    #USUAL WAY
1371    if [ X${1} = X'/l' ] ; then
1372      (( RET=0 ))
1373      for target in ${dm_liste[*]} ; do
1374        local_file=$( basename ${target} )
1375        \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
1376        (( RET = RET + $? ))
1377      done
1378    else
1379      \cp ${dm_liste} ${DEST} >> out_rsync 2>&1
1380      RET=$?
1381    fi
1382
1383#       #RSYNC WITH NETWORK SSH CALL
1384#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${STOREHOST}:"${dm_liste}" ${STOREHOST}:${RUN_DIR}/${DEST} > out_rsync 2>&1
1385#       ${RSYNC} ${RSYNC_opt} -e ssh ${STOREHOST}:"${dm_liste}" ${STOREHOST}:${RUN_DIR}/${DEST} >> out_rsync 2>&1
1386
1387#       #RSYNC WITH NFS USE
1388#       echo ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} > out_rsync 2>&1
1389#       ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} >> out_rsync 2>&1
1390
1391#       RET=$?
1392#       IGCM_sys_Rsync_out $RET
1393
1394#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1395#       (( RET=RET+$? ))
1396
1397    if [ ${RET} -gt 0 ] ; then
1398      echo "IGCM_sys_Get : copy error."
1399      cat out_rsync
1400      IGCM_debug_Exit "IGCM_sys_Get"
1401    else
1402      \rm out_rsync
1403    fi
1404  else
1405    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1406  fi
1407  IGCM_debug_PopStack "IGCM_sys_Get"
1408}
1409
1410#D-#==================================================
1411#D-function IGCM_sys_GetBuffer
1412#D-* Purpose: Get a file from ${SCRATCHDIR}
1413#D-* Examples: IGCM_sys_GetBuffer myfile /destpath/myfile_with_PREFIX
1414#D-            IGCM_sys_GetBuffer /l Array_contain_myfiles /destpath/
1415function IGCM_sys_GetBuffer {
1416  IGCM_debug_PushStack "IGCM_sys_GetBuffer" $@
1417
1418  typeset DEST RET buf_liste ifile target file_work
1419
1420  if ( $DEBUG_sys ) ; then
1421    echo "IGCM_sys_GetBuffer :" $@
1422  fi
1423  if [ $DRYRUN -le 2 ]; then
1424    if [ X${1} = X'/l' ] ; then
1425      # test if the first file is present in the old computation :
1426      eval set +A buf_liste \${${2}}
1427    else
1428      eval set +A buf_liste ${1}
1429    fi
1430    eval DEST=\${${#}}
1431
1432    #USUAL WAY
1433    if [ X${1} = X'/l' ] ; then
1434      (( RET=0 ))
1435      for target in ${buf_liste[*]} ; do
1436        local_file=$( basename ${target} )
1437        \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
1438        (( RET = RET + $? ))
1439      done
1440    else
1441      \cp ${buf_liste} ${DEST} >> out_rsync 2>&1
1442      RET=$?
1443    fi
1444
1445    if [ ${RET} -gt 0 ] ; then
1446      echo "IGCM_sys_GetBuffer : copy error."
1447      cat out_rsync
1448      IGCM_debug_Exit "IGCM_sys_GetBuffer"
1449    else
1450      \rm out_rsync
1451    fi
1452  else
1453    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1454  fi
1455  IGCM_debug_PopStack "IGCM_sys_GetBuffer"
1456}
1457
1458#D-#==================================================
1459#D-function IGCM_sys_GetDate_FichWork
1460#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
1461#D-* Examples:
1462#D-
1463function IGCM_sys_GetDate_FichWork {
1464  IGCM_debug_PushStack "IGCM_sys_FichWork" $@
1465  if ( $DEBUG_sys ) ; then
1466    echo "IGCM_sys_GetDate_FichWork :" $@
1467  fi
1468  typeset dateF
1469  set +A dateF -- $( ls -l --full-time --time-style='+%Y%m%d%H%M%S' ${1} )
1470  eval ${2}=${dateF[5]}
1471
1472    # donne la date filesys d'un fichier sur la machine work
1473  IGCM_debug_PopStack "IGCM_sys_FichWork"
1474}
1475
1476#D-#==================================================
1477#D-function IGCM_sys_GetDate_FichArchive
1478#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
1479#D-* Examples:
1480#D-
1481function IGCM_sys_GetDate_FichArchive {
1482  IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
1483  if ( $DEBUG_sys ) ; then
1484    echo "IGCM_sys_GetDate_FichArchive :" $@
1485  fi
1486  typeset dateF
1487  set +A dateF -- $( ls -l --full-time --time-style='+%Y%m%d%H%M%S' ${1} )
1488  eval ${2}=${dateF[5]}
1489
1490  IGCM_debug_PopStack "IGCM_sys_FichArchive"
1491}
1492
1493#D-#==================================================
1494#D-function IGCM_sys_Dods_Rm
1495#D-* Purpose: DO NOTHING ! Put ${ARCHIVE} files on DODS internet protocole.
1496#D-* Examples:
1497#D-
1498function IGCM_sys_Dods_Rm {
1499  if ( $DEBUG_sys ) ; then
1500    echo "IGCM_sys_Dods_Rm :" $@
1501  fi
1502  typeset RET
1503  RET=0
1504  if [ $DRYRUN = 0 ]; then
1505    if [ ! -d /dmnfs/cont003/dods/public/${LOGIN}/${R_DODS}/${1} ] ; then
1506      echo "WARNING : IGCM_sys_Dods_Rm /dmnfs/cont003/dods/public/${LOGIN}/${R_DODS}/${1} DOES NOT EXIST ."
1507      echo "Nothing has been done."
1508      return
1509    fi
1510    dods_rm public/${LOGIN}/${R_DODS}/${1} # > out_dods_rm 2>&1
1511    RET=$?
1512   
1513#       if [ ${RET} -gt 0 ] ; then
1514#           echo "IGCM_sys_Dods_Rm : error."
1515#           cat out_dods_rm
1516#           IGCM_debug_Exit "IGCM_sys_Dods_Rm"
1517#       else
1518#           rm out_dods_rm
1519#       fi
1520
1521  else
1522    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1523  fi
1524  return $RET
1525}
1526
1527#D-#==================================================
1528#D-function IGCM_sys_Dods_Cp
1529#D-* Purpose: Copy $(ARCHIVE) files on DODS internet protocole.
1530#D-* Examples:
1531#D-
1532function IGCM_sys_Dods_Cp {
1533  if ( $DEBUG_sys ) ; then
1534    echo "IGCM_sys_Dods_Cp :" $@
1535  fi
1536  typeset RET
1537  RET=0
1538  if [ $DRYRUN = 0 ]; then
1539    if [ ! -d ${R_SAVE}/${1} ] ; then
1540      echo "WARNING : IGCM_sys_Dods_Cp ${R_SAVE}/${1} DOES NOT EXIST ."
1541      echo "Nothing has been done."
1542      return
1543    fi
1544    #
1545    dods_cp ${1} public/${LOGIN}/${R_DODS} # > out_dods_cp 2>&1
1546    RET=$?
1547
1548#       if [ ${RET} -gt 0 ] ; then
1549#           echo "IGCM_sys_Dods_Cp : error."
1550#           cat out_dods_cp
1551#           IGCM_debug_Exit "IGCM_sys_Dods_Cp"
1552#       else
1553#           rm out_dods_cp
1554#       fi
1555
1556  else
1557    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1558  fi
1559  return $RET
1560}
1561
1562#D-#==================================================
1563#D-function IGCM_sys_Put_Dods
1564#D-* Purpose: Put $(ARCHIVE) files on DODS internet protocole.
1565#D-* Examples:
1566#D-
1567function IGCM_sys_Put_Dods {
1568  IGCM_debug_PushStack "IGCM_sys_Put_Dods" $@
1569  if ( $DEBUG_sys ) ; then
1570    echo "IGCM_sys_Put_Dods :" $@
1571  fi
1572  if [ $DRYRUN = 0 ]; then
1573    if [ ! -d ${R_SAVE}/${1} ] ; then
1574      echo "WARNING : IGCM_sys_Put_Dods ${R_SAVE}/${1} DOES NOT EXIST ."
1575      IGCM_debug_PopStack "IGCM_sys_Put_Dods"
1576      return
1577    fi
1578
1579    typeset RET
1580        #
1581    cd ${R_SAVE}
1582    IGCM_sys_Dods_Rm ${1}
1583    IGCM_sys_Dods_Cp ${1}
1584    RET=0
1585   
1586    if [ ${RET} -gt 0 ] ; then
1587      echo "IGCM_sys_Put_Dods : error."
1588      IGCM_debug_Exit "IGCM_sys_Put_Dods"
1589    fi
1590  else
1591    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1592  fi
1593  IGCM_debug_PopStack "IGCM_sys_Put_Dods"
1594}
1595
1596##############################################################
1597# REBUILD OPERATOR
1598
1599function IGCM_sys_rebuild {
1600  IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
1601  if ( $DEBUG_sys ) ; then
1602    echo "IGCM_sys_rebuild :" $@
1603  fi
1604  /home/cont003/p86ipsl/X64/bin/rebuild -f -o $@
1605  if [ $? -gt 0 ] ; then
1606    echo "IGCM_sys_rebuild : erreur ${@}."
1607    IGCM_debug_Exit "rebuild"
1608  fi
1609
1610  IGCM_debug_PopStack "IGCM_sys_rebuild"
1611}
1612
1613############################################################
1614# Activate Running Environnment Variables
1615
1616function IGCM_sys_activ_variables {
1617  IGCM_debug_PushStack "IGCM_sys_activ_variables"
1618  if ( $DEBUG_sys ) ; then
1619    echo "IGCM_sys_activ_variables"
1620  fi
1621  ulimit -s 2097152
1622  IGCM_debug_PopStack "IGCM_sys_activ_variables"
1623}
1624
1625############################################################
1626# Desactivate Running Environnment Variables
1627
1628function IGCM_sys_desactiv_variables {
1629  IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1630  if ( $DEBUG_sys ) ; then
1631    echo "IGCM_sys_desactiv_variables"
1632  fi
1633  IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1634}
1635
1636############################################################
1637# Build run file
1638
1639function IGCM_sys_build_run_file {
1640  IGCM_debug_PushStack "IGCM_sys_build_run_file" $@
1641  if ( $DEBUG_sys ) ; then
1642    echo "IGCM_sys_build_run_file " $@
1643  fi
1644
1645  # set Number of processors for OCE here
1646  NUM_PROC_OCE=5
1647
1648  (( NUM_PROC_ATM = $BATCH_NUM_PROC_TOT - NUM_PROC_OCE - 1))
1649  (( nb_tot_m1    = $BATCH_NUM_PROC_TOT - NUM_PROC_OCE ))
1650  if [ $1 = MPI1 ]; then
1651    cat <<EOF > run_file
1652-np 1 ./oasis
1653-np ${NUM_PROC_ATM} ./lmdz.x
1654-np ${NUM_PROC_OCE} ./opa.xx
1655EOF
1656    config_UserChoices_JobRunOptions='"--app"'
1657    IGCM_sys_Chmod u+x run_file
1658  fi
1659  IGCM_debug_PopStack "IGCM_sys_build_run_file"
1660 
1661}
1662
1663##############################################################
1664# NCO OPERATOR
1665
1666function IGCM_sys_ncap2 {
1667  IGCM_debug_PushStack "IGCM_sys_ncap2" -- $@
1668  if ( $DEBUG_sys ) ; then
1669    echo "IGCM_sys_ncap2 :" $@
1670  fi
1671  ncap2 "$@"
1672  if [ $? -gt 0 ] ; then
1673    echo "IGCM_sys_ncap2 : erreur ${@}."
1674    IGCM_debug_Exit "ncap2"
1675  fi
1676
1677  IGCM_debug_PopStack "IGCM_sys_ncap2"
1678}
1679
1680function IGCM_sys_ncatted {
1681  IGCM_debug_PushStack "IGCM_sys_ncatted" -- $@
1682  if ( $DEBUG_sys ) ; then
1683    echo "IGCM_sys_ncatted :" $@
1684  fi
1685  ncatted "$@"
1686  if [ $? -gt 0 ] ; then
1687    echo "IGCM_sys_ncatted : erreur ${@}."
1688    IGCM_debug_Exit "ncatted"
1689  fi
1690
1691  IGCM_debug_PopStack "IGCM_sys_ncatted"
1692}
1693
1694function IGCM_sys_ncbo {
1695  IGCM_debug_PushStack "IGCM_sys_ncbo" -- $@
1696  if ( $DEBUG_sys ) ; then
1697    echo "IGCM_sys_ncbo :" $@
1698  fi
1699  ncbo $@
1700  if [ $? -gt 0 ] ; then
1701    echo "IGCM_sys_ncbo : erreur ${@}."
1702    IGCM_debug_Exit "ncbo"
1703  fi
1704
1705  IGCM_debug_PopStack "IGCM_sys_ncbo"
1706}
1707
1708function IGCM_sys_ncdiff {
1709  IGCM_debug_PushStack "IGCM_sys_ncdiff" -- $@
1710  if ( $DEBUG_sys ) ; then
1711    echo "IGCM_sys_ncdiff :" $@
1712  fi
1713  ncdiff $@
1714  if [ $? -gt 0 ] ; then
1715    echo "IGCM_sys_ncdiff : erreur ${@}."
1716    IGCM_debug_Exit "ncdiff"
1717  fi
1718
1719  IGCM_debug_PopStack "IGCM_sys_ncdiff"
1720}
1721
1722function IGCM_sys_ncea {
1723  IGCM_debug_PushStack "IGCM_sys_ncea" -- $@
1724  if ( $DEBUG_sys ) ; then
1725    echo "IGCM_sys_ncea :" $@
1726  fi
1727  ncea $@
1728  if [ $? -gt 0 ] ; then
1729    echo "IGCM_sys_ncea : erreur ${@}."
1730    IGCM_debug_Exit "ncea"
1731  fi
1732
1733  IGCM_debug_PopStack "IGCM_sys_ncea"
1734}
1735
1736function IGCM_sys_ncecat {
1737  IGCM_debug_PushStack "IGCM_sys_ncecat" -- $@
1738  if ( $DEBUG_sys ) ; then
1739    echo "IGCM_sys_ncecat :" $@
1740  fi
1741  ncecat $@
1742  if [ $? -gt 0 ] ; then
1743    echo "IGCM_sys_ncecat : erreur ${@}."
1744    IGCM_debug_Exit "ncecat"
1745  fi
1746
1747  IGCM_debug_PopStack "IGCM_sys_ncecat"
1748}
1749
1750function IGCM_sys_ncflint {
1751  IGCM_debug_PushStack "IGCM_sys_ncflint" -- $@
1752  if ( $DEBUG_sys ) ; then
1753    echo "IGCM_sys_ncflint :" $@
1754  fi
1755  ncflint $@
1756  if [ $? -gt 0 ] ; then
1757    echo "IGCM_sys_ncflint : erreur ${@}."
1758    IGCM_debug_Exit "ncflint"
1759  fi
1760
1761  IGCM_debug_PopStack "IGCM_sys_ncflint"
1762}
1763
1764function IGCM_sys_ncks {
1765  IGCM_debug_PushStack "IGCM_sys_ncks" -- $@
1766  if ( $DEBUG_sys ) ; then
1767    echo "IGCM_sys_ncks :" $@
1768  fi
1769  ncks $@
1770  if [ $? -gt 0 ] ; then
1771    echo "IGCM_sys_ncks : erreur ${@}."
1772    IGCM_debug_Exit "ncks"
1773  fi
1774
1775  IGCM_debug_PopStack "IGCM_sys_ncks"
1776}
1777
1778function IGCM_sys_ncpdq {
1779  IGCM_debug_PushStack "IGCM_sys_ncpdq" -- $@
1780  if ( $DEBUG_sys ) ; then
1781    echo "IGCM_sys_ncpdq :" $@
1782  fi
1783  ncpdq $@
1784  if [ $? -gt 0 ] ; then
1785    echo "IGCM_sys_ncpdq : erreur ${@}."
1786    IGCM_debug_Exit "ncpdq"
1787  fi
1788
1789  IGCM_debug_PopStack "IGCM_sys_ncpdq"
1790}
1791
1792function IGCM_sys_ncra {
1793  IGCM_debug_PushStack "IGCM_sys_ncra" -- $@
1794  if ( $DEBUG_sys ) ; then
1795    echo "IGCM_sys_ncra :" $@
1796  fi
1797  ncra $@
1798  if [ $? -gt 0 ] ; then
1799    echo "IGCM_sys_ncra : erreur ${@}."
1800    IGCM_debug_Exit "ncra"
1801  fi
1802
1803  IGCM_debug_PopStack "IGCM_sys_ncra"
1804}
1805
1806function IGCM_sys_ncrcat {
1807  IGCM_debug_PushStack "IGCM_sys_ncrcat" -- $@
1808  if ( $DEBUG_sys ) ; then
1809    echo "IGCM_sys_ncrcat :" $@
1810  fi
1811  ncrcat $@
1812  if [ $? -gt 0 ] ; then
1813    echo "IGCM_sys_ncrcat : erreur ${@}."
1814#       IGCM_debug_Exit "ncrcat"
1815  fi
1816
1817  IGCM_debug_PopStack "IGCM_sys_ncrcat"
1818}
1819
1820function IGCM_sys_ncrename {
1821  IGCM_debug_PushStack "IGCM_sys_ncrename" -- $@
1822  if ( $DEBUG_sys ) ; then
1823    echo "IGCM_sys_ncrename :" $@
1824  fi
1825  ncrename $@
1826  if [ $? -gt 0 ] ; then
1827    echo "IGCM_sys_ncrename : erreur ${@}."
1828    IGCM_debug_Exit "ncrename"
1829  fi
1830
1831  IGCM_debug_PopStack "IGCM_sys_ncrename"
1832}
1833
1834function IGCM_sys_ncwa {
1835  IGCM_debug_PushStack "IGCM_sys_ncwa" -- $@
1836  if ( $DEBUG_sys ) ; then
1837    echo "IGCM_sys_ncwa :" $@
1838  fi
1839  ncwa $@
1840  if [ $? -gt 0 ] ; then
1841    echo "IGCM_sys_ncwa : erreur ${@}."
1842    IGCM_debug_Exit "ncwa"
1843  fi
1844
1845  IGCM_debug_PopStack "IGCM_sys_ncwa"
1846}
1847
1848##############################################################
1849# CDO OPERATOR
1850
1851function IGCM_sys_cdo {
1852  IGCM_debug_PushStack "IGCM_sys_cdo" -- $@
1853  if ( $DEBUG_sys ) ; then
1854    echo "IGCM_sys_cdo :" $@
1855  fi
1856  \cdo $@
1857  if [ $? -gt 0 ] ; then
1858    echo "IGCM_sys_cdo : erreur ${@}."
1859    IGCM_debug_PopStack "IGCM_sys_cdo"
1860    return 1
1861  else
1862    IGCM_debug_PopStack "IGCM_sys_cdo"
1863    return 0
1864  fi
1865
1866  IGCM_debug_PopStack "IGCM_sys_cdo"
1867}
Note: See TracBrowser for help on using the repository browser.