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

Last change on this file since 550 was 550, checked in by mafoipsl, 12 years ago

titane : use titane's mail.

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