source: trunk/libIGCM/libIGCM_sys/libIGCM_sys_curie.ksh @ 668

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