source: branches/libIGCM_MPI_OpenMP/libIGCM_sys/libIGCM_sys_mercurex9.ksh @ 571

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

First try to merge libIGCM_MPI_OpenMP branch with libIGCM trunk revision 569. Tested on vargas with PackFrequency?=NONE included into config.card.

  • Property svn:keywords set to Revision Author Date
File size: 44.2 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Sebastien Denvil, Martial Mancip
5# Contact: Sebastien.Denvil__at__ipsl.jussieu.fr
6# $Revision::                                          $ Revision of last commit
7# $Author::                                            $ Author of last commit
8# $Date::                                              $ Date of last commit
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 Mercure SX9
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# gawk specific location on SX9
35export PATH=/applications/gawk-3.0.4/bin:${PATH}
36
37#====================================================
38# set DEBUG_sys to true to output calls of function
39typeset -r DEBUG_sys=${DEBUG_sys:=true}
40
41#====================================================
42# Turn in dry run mode ? (sys_Put_Rest, sys_Put_Out, sys_Get)
43typeset -r DRYRUN=${DRYRUN:=0}
44
45# YOU MUST COMPILE YOUR EXE FILES FOR DRYRUN MODE !
46# -------------------------------------------------------------------------------------
47# | DRYRUN=  |  Date computations, | sys_Get    |  Exe    | sys_Put_Out; sys_Put_Rest |
48# |          |  Cp/Exe param files |            |  Chmod  |                           |
49# |          |      Qsub           |            |         |                           |
50# -------------------------------------------------------------------------------------
51# |    0     |       yes           |    yes     |  yes    |      yes                  |
52# -------------------------------------------------------------------------------------
53# |    1     |       yes           |    yes     |  yes    |      no                   |
54# -------------------------------------------------------------------------------------
55# |    2     |       yes           |    yes     |  no     |      no                   |
56# -------------------------------------------------------------------------------------
57# |    3     |       yes           |    no      |  no     |      no                   |
58# -------------------------------------------------------------------------------------
59
60#=====================================================
61# Global Variables :
62#=====================================================
63# Language : "fr" or "en"
64typeset -r MYLANG="fr"
65
66#=====================================================
67# Host and user names
68# $hostname ou hostname
69typeset  HOST=${HOST:=$( hostname )}
70# $username ou whoami
71typeset  LOGIN=${LOGIN:=$( whoami )}
72# $hostname of the MASTER job
73typeset -r MASTER=mercure
74
75#D-
76#D-#==================================================
77#D-Program used in libIGCM
78#D-#==================================================
79
80# rsync with path
81typeset -r RSYNC=/home/cont003/p86denv/SX_RSYNC/bin/rsync
82# RSYNC_opt args to rsync
83typeset -r RSYNC_opt="-va"
84# ie storage filesystem
85typeset -r STOREHOST=${MASTER}
86
87#====================================================
88# Host specific DIRECTORIES
89#====================================================
90
91#====================================================
92#- R_EXE   (==> BIN_DIR = ${MODIPSL}/bin )
93typeset -r R_EXE="${MODIPSL}/bin"
94
95#====================================================
96#- SUBMIT_DIR : submission dir
97typeset SUBMIT_DIR=${SUBMIT_DIR:=${PBS_O_WORKDIR}}
98
99#====================================================
100#- ARCHIVE
101typeset -r ARCHIVE=${DMFDIR}
102
103# ============ CESIUM START ============ #
104
105#====================================================
106#- Mirror libIGCM from mercure to cesium if needed
107ROOTSYS=$( echo ${libIGCM} | gawk -F"/" '{print $3}' )
108if [ ! ${ROOTSYS} = "home" ] ; then
109  typeset -r MirrorlibIGCM=${MirrorlibIGCM:=true}
110else
111  typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
112fi
113
114#====================================================
115#- libIGCM_POST
116if ( ${MirrorlibIGCM} ) ; then
117  PATHlibIGCM=$( echo ${libIGCM} | gawk -F"${LOGIN}/" '{print $2}' | sed -e "s&/libIGCM&&" )
118  typeset -r libIGCM_POST=${HOME}/MIRROR/${PATHlibIGCM}/libIGCM
119else
120  typeset -r libIGCM_POST=${libIGCM}
121fi
122
123# ============ CESIUM  END  ============ #
124
125#====================================================
126#- MirrorlibIGCM uncomment for frontend
127#typeset -r MirrorlibIGCM=${MirrorlibIGCM:=false}
128
129#====================================================
130#- libIGCM_POST uncomment for frontend
131#typeset -r libIGCM_POST=${libIGCM}
132
133#====================================================
134#- IN
135typeset -r R_IN=${R_IN:=/ccc/work/cont003/dsm/p86ipsl/IGCM}
136typeset -r R_IN_ECMWF=${R_IN_ECMWF:=/dmnfs/cont003/p24data}
137
138#====================================================
139#- R_OUT
140typeset -r R_OUT=${ARCHIVE}/IGCM_OUT
141
142#====================================================
143#- R_BUF (ONLY FOR double copy an scratch)
144typeset -r R_BUF=${SCRATCHDIR}/IGCM_OUT
145
146#====================================================
147#- BIG_DIR : BIG_DIR to store files waiting for rebuild
148typeset -r BIG_DIR=${BIG_DIR:=${SCRATCHDIR}/REBUILD}
149
150#====================================================
151#- OUT_POST
152typeset -r R_OUT_POST=${SCRATCHDIR}/IGCM_OUT
153
154#====================================================
155#- RUN_DIR_PATH : Temporary working directory (=> TMP)
156typeset -r RUN_DIR_PATH=${RUN_DIR_PATH:=${LOCALTMPDIR}}
157
158#====================================================
159#- HOST_MPIRUN_COMMAND
160typeset -r HOST_MPIRUN_COMMAND=${HOST_MPIRUN_COMMAND:="mpirun"}
161
162#====================================================
163#- Max number of arguments passed to nco operator or demigration command
164UNIX_MAX_LIMIT=360
165
166#====================================================
167#- Default number of MPI task for IPSL coupled model
168#- required for backward compatibility
169#-
170DEFAULT_NUM_PROC_OCE=1
171DEFAULT_NUM_PROC_CPL=1
172DEFAULT_NUM_PROC_ATM=3
173DEFAULT_NUM_PROC_TOTAL=4
174
175#D-#==================================================
176#D-function IGCM_sys_RshMaster
177#D-* Purpose: Connection to frontend machine.
178#D-* Examples:
179#D-
180function IGCM_sys_RshMaster {
181  IGCM_debug_PushStack "IGCM_sys_RshMaster" $@
182  ssh -t ${MASTER} /bin/ksh <<-EOF
183  export libIGCM=${libIGCM}
184  export DEBUG_debug=${DEBUG_debug}
185  . ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh
186  . ${libIGCM}/libIGCM_card/libIGCM_card.ksh
187  ${@}
188EOF
189  if [ $? -gt 0 ] ; then
190    echo "IGCM_sys_RshMaster : erreur."
191    IGCM_debug_Exit "IGCM_sys_RshMaster"
192  fi
193  IGCM_debug_PopStack "IGCM_sys_RshMaster"
194}
195
196#D-#==================================================
197#D-function IGCM_sys_RshArchive
198#D-* Purpose: Archive rsh command
199#D-* Examples:
200#D-
201function IGCM_sys_RshArchive {
202  IGCM_debug_PushStack "IGCM_sys_RshArchive" $@
203  /bin/ksh <<-EOF
204    ${@}
205EOF
206  if [ $? -gt 0 ] ; then
207    echo "IGCM_sys_RshArchive : erreur."
208    IGCM_debug_Exit "IGCM_sys_RshArchive"
209  fi
210  IGCM_debug_PopStack "IGCM_sys_RshArchive"
211}
212
213#D-#==================================================
214#D-function IGCM_sys_RshPost
215#D-* Purpose: Post-process rsh command
216#D-* Examples:
217#D-
218function IGCM_sys_RshPost {
219  IGCM_debug_PushStack "IGCM_sys_RshPost" $@
220  if ( $DEBUG_sys ) ; then
221    echo "IGCM_sys_RshPost :" $@
222  fi
223
224  #echo cat tmp_IGCM_sys_RshPost_$$ INITIAL
225  #cat tmp_IGCM_sys_RshPost_$$
226  # keep standard input (stdin) for the loop onto temporary file
227  cat >tmp_IGCM_sys_RshPost_$$
228
229# ============ FRONTEND START ============ #
230
231#  /bin/ksh <tmp_IGCM_sys_RshPost_$$
232#  if [ $? -gt 0 ] ; then
233#    echo "IGCM_sys_RshPost : erreur."
234#    IGCM_debug_Exit "IGCM_sys_RshPost"
235#  fi
236#  \rm tmp_IGCM_sys_RshPost_$$
237
238# ============ FRONTEND  END  ============ #
239
240# ============ CESIUM START ============ #
241  typeset NB_ESSAI DELAI status i
242  # number of tentative
243  NB_ESSAI=10
244  # time delay between tentative
245  DELAI=10
246  (( i = 0 ))
247  while [ $i -lt $NB_ESSAI ] ; do
248    ssh -t mercure01 ssh cesium /bin/ksh <tmp_IGCM_sys_RshPost_$$
249    status=$?
250    if [ ${status} -gt 0 ]; then
251      IGCM_debug_Print 2 "IGCM_sys_RshPost : ssh failed ${i}/${NB_ESSAI}"
252      IGCM_debug_Print 2 "IGCM_sys_RshPost : sleep ${DELAI} seconds and try again."
253      sleep $DELAI
254    else
255      break
256    fi
257    (( i = i + 1 ))
258  done 
259  # delete temporary file
260  /bin/rm tmp_IGCM_sys_RshPost_$$
261# ============ CESIUM  END  ============ #
262
263  IGCM_debug_PopStack "IGCM_sys_RshPost"
264}
265
266#D-#==================================================
267#D-function IGCM_sys_SendMail
268#D-* Purpose: Send mail when simulation is over
269#D-* Examples:
270#D-
271function IGCM_sys_SendMail {
272  IGCM_debug_PushStack "IGCM_sys_SendMail" $@
273  if ( $DEBUG_sys ) ; then
274    echo "IGCM_sys_SendMail :" $@
275  fi
276
277  if ( ${ExitFlag} ) ; then
278    status=failed
279  else
280    status=completed
281  fi
282  cat  << END_MAIL > job_end.mail
283  Dear ${LOGIN},
284
285  Simulation ${config_UserChoices_JobName} is ${status} on supercomputer `hostname`.
286  Job started : ${DateBegin}
287  Job ended   : ${DateEnd}
288  Output files are available in ${R_SAVE}
289  Script files, Script Outputs and Debug files (if necessary) are available in ${SUBMIT_DIR}
290END_MAIL
291
292  if  [ X"${config_UserChoices_MailName}" != X ] ; then
293    mailx -s "${config_UserChoices_JobName} ${status}" ${config_UserChoices_MailName} <  job_end.mail
294  elif [ -f ~/.forward ] ; then
295    mailx -s "${config_UserChoices_JobName} ${status}" $( cat ~/.forward ) < job_end.mail
296  else
297    mailx -s "${config_UserChoices_JobName} ${status}" ${LOGIN} < job_end.mail
298  fi
299
300  if [ $? -gt 0 ] ; then
301    echo "IGCM_sys_SendMail : erreur."
302    IGCM_debug_Exit "IGCM_sys_SendMail"
303  fi
304  IGCM_debug_PopStack "IGCM_sys_SendMail"
305}
306
307#D-#==================================================
308#D-function IGCM_sys_Mkdir
309#D-* Purpose: Master locale mkdir command
310#D-* Examples:
311#D-
312function IGCM_sys_Mkdir {
313  IGCM_debug_PushStack "IGCM_sys_Mkdir" $@
314  if ( $DEBUG_sys ) ; then
315    echo "IGCM_sys_Mkdir :" $@
316  fi
317  if [ ! -d ${1} ]; then
318    \mkdir -p $1
319    if [ $? -gt 0 ] ; then
320      echo "IGCM_sys_Mkdir : erreur."
321      IGCM_debug_Exit "IGCM_sys_Mkdir"
322    fi
323  fi
324  # vérification :
325  if [ ! -d ${1} ] ; then
326    echo "IGCM_sys_Mkdir : erreur."
327    IGCM_debug_Exit "IGCM_sys_Mkdir"
328  fi
329  IGCM_debug_PopStack "IGCM_sys_Mkdir"
330}
331
332#D-#==================================================
333#D-function IGCM_sys_MkdirArchive
334#D-* Purpose: Mkdir on Archive
335#D-* Examples:
336#D-
337function IGCM_sys_MkdirArchive {
338  IGCM_debug_PushStack "IGCM_sys_MkdirArchive" $@
339  if ( $DEBUG_sys ) ; then
340    echo "IGCM_sys_MkdirArchive :" $@
341  fi
342  #- creation de repertoire sur le serveur fichier
343  if [ ! -d ${1} ]; then 
344    \mkdir -p $1
345    if [ $? -gt 0 ] ; then
346      echo "IGCM_sys_MkdirArchive : erreur."
347      IGCM_debug_Exit "IGCM_sys_MkdirArchive"
348    fi
349  fi
350  IGCM_debug_PopStack "IGCM_sys_MkdirArchive"
351}
352
353#D-#==================================================
354#D-function IGCM_sys_MkdirWork
355#D-* Purpose: Mkdir on Work
356#D-* Examples:
357#D-
358function IGCM_sys_MkdirWork {
359  IGCM_debug_PushStack "IGCM_sys_MkdirWork" $@
360  if ( $DEBUG_sys ) ; then
361    echo "IGCM_sys_MkdirWork :" $@
362  fi
363  #- creation de repertoire sur le serveur fichier
364  if [ ! -d ${1} ]; then 
365    \mkdir -p $1
366    if [ $? -gt 0 ] ; then
367      echo "IGCM_sys_MkdirWork : erreur."
368      IGCM_debug_Exit "IGCM_sys_MkdirWork"
369    fi
370  fi
371  IGCM_debug_PopStack "IGCM_sys_MkdirWork"
372}
373
374#D-#==================================================
375#D-function IGCM_sys_Cd
376#D-* Purpose: master cd command
377#D-* Examples:
378#D-
379function IGCM_sys_Cd {
380  IGCM_debug_PushStack "IGCM_sys_Cd" $@
381  if ( $DEBUG_sys ) ; then
382    echo "IGCM_sys_Cd :" $@
383  fi
384  \cd $1
385  if [ $? -gt 0 ] ; then
386    echo "IGCM_sys_Cd : erreur."
387    IGCM_debug_Exit "IGCM_sys_Cd"
388  fi
389  IGCM_debug_PopStack "IGCM_sys_Cd"
390}
391
392#D-#==================================================
393#D-function IGCM_sys_Chmod
394#D-* Purpose: Chmod
395#D-* Examples:
396#D-
397function IGCM_sys_Chmod {
398  IGCM_debug_PushStack "IGCM_sys_Chmod" -- $@
399  if ( $DEBUG_sys ) ; then
400    echo "IGCM_sys_Chmod :" $@
401  fi
402  if [ $DRYRUN -le 1 ]; then
403    \chmod $@
404    if [ $? -gt 0 ] ; then
405      echo "IGCM_sys_Chmod : erreur."
406      IGCM_debug_Exit "IGCM_sys_Chmod"
407    fi
408  else
409    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
410  fi
411  IGCM_debug_PopStack "IGCM_sys_Chmod"
412}
413
414#D-#==================================================
415#D-function IGCM_sys_FileSize
416#D-* Purpose: Filesize
417#D-* Examples:
418#D-
419function IGCM_sys_FileSize {
420  IGCM_debug_PushStack "IGCM_sys_FileSize" $@
421
422  typeset sizeF
423  set +A sizeF -- $( ls -la ${1} )
424  if [ $? -gt 0 ] ; then
425    IGCM_debug_Exit "IGCM_sys_FileSize"
426  fi
427  eval ${2}=${sizeF[4]}
428
429  IGCM_debug_PopStack "IGCM_sys_FileSize"
430}
431
432#D-#==================================================
433#D-function IGCM_sys_TestDir
434#D-* Purpose: Test Directory that must exists
435#D-* Examples:
436#D-
437function IGCM_sys_TestDir {
438  IGCM_debug_PushStack "IGCM_sys_TestDir" $@
439  if ( $DEBUG_sys ) ; then
440    echo "IGCM_sys_TestDir :" $@
441  fi
442  typeset ExistFlag
443  ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
444  IGCM_debug_PopStack "IGCM_sys_TestDir"
445
446  return ${ExistFlag}
447}
448
449#D-#==================================================
450#D-function IGCM_sys_TestDirArchive
451#D-* Purpose: Test Directory that must exists on Archive
452#D-* Examples:
453#D-
454function IGCM_sys_TestDirArchive {
455  IGCM_debug_PushStack "IGCM_sys_TestDirArchive" $@
456  if ( $DEBUG_sys ) ; then
457    echo "IGCM_sys_TestDirArchive :" $@
458  fi
459  typeset ExistFlag
460  ExistFlag=$( [ -d $1 ] && echo 0 || echo 1 )
461  IGCM_debug_PopStack "IGCM_sys_TestDirArchive"
462
463  return ${ExistFlag}
464}
465
466#D-#==================================================
467#D-function IGCM_sys_IsFileArchived
468#D-* Purpose: Test file that must NOT EXISTS on Archive
469#D-* Examples:
470#D-
471function IGCM_sys_IsFileArchived {
472  IGCM_debug_PushStack "IGCM_sys_IsFileArchived" $@
473  if ( $DEBUG_sys ) ; then
474    echo "IGCM_sys_IsFileArchived :" $@
475  fi
476  typeset IsArchivedFlag
477  IsArchivedFlag=$( [ X$( echo $1 | grep ^\/dmnfs ) != X ] && echo 0 || echo 1 )
478  IGCM_debug_PopStack "IGCM_sys_IsFileArchived"
479
480  return ${IsArchivedFlag}
481}
482
483#D-#==================================================
484#D-function IGCM_sys_TestFileArchive
485#D-* Purpose: Test file that must NOT EXISTS on Archive
486#D-* Examples:
487#D-
488function IGCM_sys_TestFileArchive {
489  IGCM_debug_PushStack "IGCM_sys_TestFileArchive" $@
490  if ( $DEBUG_sys ) ; then
491    echo "IGCM_sys_TestFileArchive :" $@
492  fi
493  typeset ExistFlag
494  ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
495  IGCM_debug_PopStack "IGCM_sys_TestFileArchive"
496
497  return ${ExistFlag}
498}
499
500#D-#==================================================
501#D-function IGCM_sys_TestFileBuffer
502#D-* Purpose: Test file that must NOT EXISTS on Buffer
503#D-* Examples:
504#D-
505function IGCM_sys_TestFileBuffer {
506  IGCM_debug_PushStack "IGCM_sys_TestFileBuffer" $@
507  typeset ExistFlag
508  ExistFlag=$( [ -f $1 ] && echo 0 || echo 1 )
509  IGCM_debug_PopStack "IGCM_sys_TestFileBuffer"
510
511  return ${ExistFlag}
512}
513
514#D-#==================================================
515#D-function IGCM_sys_CountFileArchive
516#D-* Purpose: Count files on Archive filesystem
517#D-* Examples:
518#D-
519function IGCM_sys_CountFileArchive {
520  IGCM_debug_PushStack "IGCM_sys_CountFileArchive" $@
521  ls ${@} 2>/dev/null | wc -l
522  if [ $? -gt 0 ] ; then
523    echo "IGCM_sys_CountFileArchive : erreur."
524  fi
525  IGCM_debug_PopStack "IGCM_sys_CountFileArchive"
526}
527
528#D-#==================================================
529#D-function IGCM_sys_CountFileBuffer
530#D-* Purpose: Count files on Scratch filesystem
531#D-* Examples:
532#D-
533function IGCM_sys_CountFileBuffer {
534  IGCM_debug_PushStack "IGCM_sys_CountFileBuffer" $@
535  ls ${@} 2>/dev/null | wc -l
536  if [ $? -gt 0 ] ; then
537    echo "IGCM_sys_CountFileBuffer : erreur."
538  fi
539  IGCM_debug_PopStack "IGCM_sys_CountFileBuffer"
540}
541
542#D-#==================================================
543#D-function IGCM_sys_Tree
544#D-* Purpose: Tree directories with files on ${ARCHIVE}
545#D-* Examples: IGCM_sys_Tree ${R_IN} ${R_OUT}
546#D-
547function IGCM_sys_Tree {
548  IGCM_debug_PushStack "IGCM_sys_Tree" $@
549  if ( $DEBUG_sys ) ; then
550    echo "IGCM_sys_Tree :" $@
551  fi
552
553  \ls -lR ${@}
554
555  IGCM_debug_PopStack "IGCM_sys_Tree"
556}
557
558#D-#==================================================
559#D-function IGCM_sys_Tar
560#D-* Purpose: master tar command
561#D-* Examples:
562#D-
563function IGCM_sys_Tar {
564  IGCM_debug_PushStack "IGCM_sys_Tar" $@
565  if ( $DEBUG_sys ) ; then
566    echo "IGCM_sys_Tar :" $@
567  fi
568  \tar cf $@
569  if [ $? -gt 0 ] ; then
570    echo "IGCM_sys_Tar : erreur."
571    IGCM_debug_Exit "IGCM_sys_Tar"
572  fi
573  IGCM_debug_PopStack "IGCM_sys_Tar"
574}
575
576#D-#==================================================
577#D-function IGCM_sys_UnTar
578#D-* Purpose: master un-tar command
579#D-* Examples:
580#D-
581function IGCM_sys_UnTar {
582  IGCM_debug_PushStack "IGCM_sys_UnTar" $@
583  if ( $DEBUG_sys ) ; then
584    echo "IGCM_sys_UnTar :" $@
585  fi
586  \tar xvf $1
587  if [ $? -gt 0 ] ; then
588    echo "IGCM_sys_UnTar : erreur."
589    IGCM_debug_Exit "IGCM_sys_UnTar"
590  fi
591  IGCM_debug_PopStack "IGCM_sys_UnTar"
592}
593
594#D-#==================================================
595#D-function IGCM_sys_Qsub
596#D-* Purpose: Qsub new job
597#D-* Examples:
598#D-
599function IGCM_sys_Qsub {
600  IGCM_debug_PushStack "IGCM_sys_Qsub" $@
601  if ( $DEBUG_sys ) ; then
602    echo "IGCM_sys_Qsub :" $@
603  fi
604  /usr/bin/nqsII/qsub -o ${Script_Output} -N ${config_UserChoices_JobName}.${CumulPeriod} < $1
605  if [ $? -gt 0 ] ; then
606    echo "IGCM_sys_Qsub : erreur -o ${Script_Output} -N ${config_UserChoices_JobName}.${CumulPeriod} $@."
607    IGCM_debug_Exit "IGCM_sys_Qsub"
608  fi
609  IGCM_debug_PopStack "IGCM_sys_Qsub"
610}
611
612#D-#==================================================
613#D-function IGCM_sys_QsubPost
614#D-* Purpose: Qsub new job on scalaire
615#D-* Examples:
616#D-
617function IGCM_sys_QsubPost {
618  IGCM_debug_PushStack "IGCM_sys_QsubPost" $@
619  if ( $DEBUG_sys ) ; then
620    echo "IGCM_sys_QsubPost :" $@
621  fi
622
623# ============ FRONTEND START ============ #
624
625#  /usr/bin/nqsII/qsub -o ${POST_DIR}/${Script_Post_Output}.out ${libIGCM}/$1.job -v ${listVarEnv}
626
627# ============ FRONTEND  END  ============ #
628
629# ============ CESIUM START ============ #
630  typeset NB_ESSAI DELAI status i
631  # number of tentative
632  NB_ESSAI=10
633  # time delay between tentative
634  DELAI=10
635  (( i = 0 ))
636  while [ $i -lt $NB_ESSAI ] ; do
637    /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
638    status=$?
639    if [ ${status} -gt 0 ]; then
640      sleep $DELAI
641    else
642      break
643    fi
644    (( i = i + 1 ))
645  done 
646# ============ CESIUM  END  ============ #
647
648  if [ $? -gt 0 ] ; then
649    echo "IGCM_sys_QsubPost : erreur " $@
650    IGCM_debug_Exit "IGCM_sys_QsubPost"
651  fi
652  IGCM_debug_PopStack "IGCM_sys_QsubPost"
653}
654
655#D-*************************
656#D- File transfer functions
657#D-*************************
658#D-
659
660#D-#==================================================
661#D-function IGCM_sys_Rsync_out
662#D-* Purpose: treat return val of rsync
663#D-* Examples: IGCM_sys_Rsync_out out_RET_rsync
664#D-  Error values and explanations can depend on your system version.
665function IGCM_sys_Rsync_out {
666  RET=$1
667  if [ ! $RET ] ; then
668    echo "rsync error !"
669  fi
670
671  if [ $MYLANG = "fr" ]; then
672    case $RET in
673    0)  return ;;
674    1)  echo "Erreur de rsync ; RERR_SYNTAX : "
675      echo "Erreur de syntaxe ou d'utilisation."
676      return;;
677    2)  echo "Erreur de rsync ; RERR_PROTOCOL : "
678      echo "Incompatibilité de protocole."
679      return;;
680    3)  echo "Erreur de rsync ; RERR_FILESELECT 3"
681      echo "Erreurs  lors  de  la  sélection des fichiers d'entrée sortie et"
682      echo "répertoires"
683      return;;
684    4)  echo "Erreur de rsync ; RERR_UNSUPPORTED"
685      echo "Action demandée non supportée : une tentative de manipulation de"
686      echo "fichiers  64-bits  sur une plate-forme qui ne les supporte pas a"
687      echo "été faite ; ou une option qui est supportée par le  client  mais"
688      echo "pas par le serveur a été spécifiée."
689      return;;
690    10) echo "Erreur de rsync ; RERR_SOCKETIO"
691      echo "Erreur dans le socket d'entrée sortie"
692      return;;
693    11) echo "Erreur de rsync ; RERR_FILEIO"
694      echo "Erreur d'entrée sortie fichier"
695      return;;
696    12) echo "Erreur de rsync ; RERR_STREAMIO"
697      echo "Erreur dans flux de donnée du protocole rsync"
698      return;;
699    13) echo "Erreur de rsync ; RERR_MESSAGEIO"
700      echo "Erreur avec les diagnostics du programme"
701      return;;
702    14) echo "Erreur de rsync ; RERR_IPC"
703      echo "Erreur dans le code IPC"
704      return;;
705    20) echo "Erreur de rsync ; RERR_SIGNAL"
706      echo "SIGUSR1 ou SIGINT reçu"
707      return;;
708    21) echo "Erreur de rsync ; RERR_WAITCHILD"
709      echo "Une erreur retournée par waitpid()"
710      return;;
711    22) echo "Erreur de rsync ; RERR_MALLOC"
712      echo "Erreur lors de l'allocation des tampons de mémoire de coeur"
713      return;;
714    23) echo ""
715      echo "Erreur fichier inexistant"
716      return;;
717    30) echo "Erreur de rsync ; RERR_TIMEOUT"
718      echo "Temps d'attente écoulé dans l'envoi/réception de données"
719      return;;
720    *)  echo "Erreur de rsync : code de retour de rsync inconnu :" $RET
721      return;;
722    esac
723  elif [ $MYLANG = "en" ] ; then
724    case $RET in
725    0)  return;;               
726    1)  echo "rsync error : Syntax or usage error "
727      return;;
728    2)  echo "rsync error : Protocol incompatibility "
729      return;;
730    3)  echo "rsync error : Errors selecting input/output files, dirs"
731      return;;
732    4)  echo "rsync error : Requested action not supported: an attempt"
733      echo "was made to manipulate 64-bit files on a platform that cannot support"
734      echo "them; or an option was specified that is supported by the client and"
735      echo "not by the server."
736      return;;
737    5)  echo "rsync error : Error starting client-server protocol"
738      return;;
739    10) echo "rsync error : Error in socket I/O "
740      return;;
741    11) echo "rsync error : Error in file I/O "
742      return;;
743    12) echo "rsync error : Error in rsync protocol data stream "
744      return;;
745    13) echo "rsync error : Errors with program diagnostics "
746      return;;
747    14) echo "rsync error : Error in IPC code "
748      return;;
749    20) echo "rsync error : Received SIGUSR1 or SIGINT "
750      return;;
751    21) echo "rsync error : Some error returned by waitpid() "
752      return;;
753    22) echo "rsync error : Error allocating core memory buffers "
754      return;;
755    23) echo "rsync error : Partial transfer due to error"
756      return;;
757    24) echo "rsync error : Partial transfer due to vanished source files"
758      return;;
759    30) echo "rsync error : Timeout in data send/receive "
760      return;;
761    *)  echo "rsync error : return code of rsync unknown :" $RET
762      return;;
763    esac
764  else
765    echo "unknown language $MYLANG."
766    return
767  fi
768}
769
770#D-#==================================================
771#D-function IGCM_sys_Miror_libIGCM
772#D-* Purpose: Mirror libIGCM PATH and lib to cesium
773#D-* Examples:
774#D-
775function IGCM_sys_Mirror_libIGCM {
776  IGCM_debug_PushStack "IGCM_sys_Mirror_libIGCM"
777  if ( $DEBUG_sys ) ; then
778    echo "IGCM_sys_Mirror_libIGCM"
779  fi
780
781  typeset RET DEST
782
783  mkdir -p ${HOME}/MIRROR/${PATHlibIGCM}
784
785  echo ${RSYNC} ${RSYNC_opt} ${libIGCM} ${HOME}/MIRROR/${PATHlibIGCM} > out_rsync 2>&1
786  ${RSYNC} ${RSYNC_opt} ${libIGCM} ${HOME}/MIRROR/${PATHlibIGCM} >> out_rsync 2>&1
787  RET=$?
788
789  if [ ${RET} -gt 0 ] ; then
790    echo "IGCM_sys_Mirror_libIGCM Warning : no libIGCM on cesium."
791    cat out_rsync
792  fi
793  IGCM_debug_PopStack "IGCM_sys_Mirror_libIGCM"
794}
795
796#====================================================
797#- Call IGCM_sys_Mirror_libIGCM now !
798if ( $MirrorlibIGCM ) ; then
799  IGCM_sys_Mirror_libIGCM
800fi
801
802#D-#==================================================
803#D-function IGCM_sys_Cp
804#D-* Purpose: generic cp
805#D-* Examples:
806#D-
807function IGCM_sys_Cp {
808  IGCM_debug_PushStack "IGCM_sys_Cp" $@
809  if ( $DEBUG_sys ) ; then
810    echo "IGCM_sys_Cp :" $@
811  fi
812
813  typeset RET
814
815  echo cp $@ > out_rsync 2>&1
816  \cp $@ >> out_rsync 2>&1
817  RET=$?
818
819  if [ ${RET} -gt 0 ] ; then
820    echo "IGCM_sys_Cp : error."
821    cat out_rsync
822    IGCM_debug_Exit "IGCM_sys_Cp"
823  else
824    \rm out_rsync
825  fi
826  IGCM_debug_PopStack "IGCM_sys_Cp"
827}
828
829#D-#==================================================
830#D-function IGCM_sys_Rm
831#D-* Purpose: generic rm
832#D-* Examples:
833#D-
834function IGCM_sys_Rm {
835  IGCM_debug_PushStack "IGCM_sys_Rm" -- $@
836  if ( $DEBUG_sys ) ; then
837    echo "IGCM_sys_Rm :" $@
838  fi
839
840  typeset RET
841
842  echo rm $@ > out_rsync 2>&1
843  \rm $@ >> out_rsync 2>&1
844  RET=$?
845
846  if [ ${RET} -gt 0 ] ; then
847    echo "IGCM_sys_Rm : error."
848    cat out_rsync
849    IGCM_debug_Exit "IGCM_sys_Rm"
850  else
851    \rm out_rsync
852  fi
853  IGCM_debug_PopStack "IGCM_sys_Rm"
854}
855
856#D-#==================================================
857#D-function IGCM_sys_Mv
858#D-* Purpose: generic move
859#D-* Examples:
860#D-
861function IGCM_sys_Mv {
862  IGCM_debug_PushStack "IGCM_sys_Mv" $@
863  if ( $DEBUG_sys ) ; then
864    echo "IGCM_sys_Mv :" $@
865  fi
866
867  if [ $DRYRUN = 0 ]; then
868
869    typeset RET
870   
871    echo mv $@ > out_rsync 2>&1
872    \mv $@ >> out_rsync 2>&1
873    RET=$?
874   
875    if [ ${RET} -gt 0 ] ; then
876      echo "IGCM_sys_Mv : error in mv."
877      cat out_rsync
878      IGCM_debug_Exit "IGCM_sys_Mv"
879    else
880      \rm out_rsync
881    fi
882  else
883    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
884  fi
885
886  IGCM_debug_PopStack "IGCM_sys_Mv"
887}
888
889#D-#==================================================
890#D-function IGCM_sys_Put_Dir
891#D-* Purpose: Copy a complete directory on $(ARCHIVE)
892#D-* Examples:
893#D-
894function IGCM_sys_Put_Dir {
895  IGCM_debug_PushStack "IGCM_sys_Put_Dir" $@
896  if ( $DEBUG_sys ) ; then
897    echo "IGCM_sys_Put_Dir :" $@
898  fi
899  if [ $DRYRUN = 0 ]; then
900    if [ ! -d ${1} ] ; then
901      echo "WARNING : IGCM_sys_Put_Dir ${1} DOES NOT EXIST ."
902      IGCM_debug_PopStack "IGCM_sys_Put_Dir"
903      return
904    fi
905
906    typeset RET
907
908    # Only if we use rsync
909    #IGCM_sys_TestDirArchive $( dirname $2 )
910    #
911    #USUAL WAY
912    \cp -r $1 $2 > out_rsync 2>&1
913    RET=$?
914
915    if [ ${RET} -gt 0 ] ; then
916      echo "IGCM_sys_Put_Dir : error."
917      cat out_rsync
918      IGCM_debug_Exit "IGCM_sys_Put_Dir"
919    else
920      \rm out_rsync
921    fi
922  else
923    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
924  fi
925  IGCM_debug_PopStack "IGCM_sys_Put_Dir"
926}
927
928#D-#==================================================
929#D-function IGCM_sys_Get_Dir
930#D-* Purpose: Copy a complete directory from ${ARCHIVE}
931#D-* Examples:
932#D-
933function IGCM_sys_Get_Dir {
934  IGCM_debug_PushStack "IGCM_sys_Get_Dir" $@
935  if ( $DEBUG_sys ) ; then
936    echo "IGCM_sys_Get_Dir :" $@
937  fi
938  if [ $DRYRUN = 0 ]; then
939#    if [ ! -d ${1} ] ; then
940#      echo "WARNING : IGCM_sys_Get_Dir ${1} DOES NOT EXIST ."
941#      IGCM_debug_PopStack "IGCM_sys_Get_Dir"
942#      return
943#    fi
944
945    typeset RET
946
947    # Only if we use rsync
948    #IGCM_sys_TestDirArchive $( dirname $2 )
949    #
950    # USUAL WAY
951    # add dmfind/dmget (to demigrate all offline files) :
952    dmfind $1 -state MIG -o -state OFL -o -state PAR | dmget
953    \cp -r $1 $2 > out_rsync 2>&1
954    RET=$?
955
956    if [ ${RET} -gt 0 ] ; then
957      echo "IGCM_sys_Get_Dir : error."
958      cat out_rsync
959      IGCM_debug_Exit "IGCM_sys_Get_Dir"
960    else
961      \rm out_rsync
962    fi
963  else
964    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
965  fi
966  IGCM_debug_PopStack "IGCM_sys_Get_Dir"
967}
968
969#D-#==================================================
970#D-function IGCM_sys_Put_Rest
971#D-* Purpose: Put computied restarts on ${ARCHIVE}.
972#D-           File and target directory must exist.
973#D-* Examples:
974#D-
975function IGCM_sys_Put_Rest {
976  IGCM_debug_PushStack "IGCM_sys_Put_Rest" $@
977  if ( $DEBUG_sys ) ; then
978    echo "IGCM_sys_Put_Rest :" $@
979  fi
980  if [ $DRYRUN = 0 ]; then
981    if [ ! -f ${1} ] ; then
982      echo "ERROR : IGCM_sys_Put_Rest ${1} DOES NOT EXIST ."
983      IGCM_debug_Exit "IGCM_sys_Put_Rest"
984    fi
985
986    typeset RET
987    #
988    if [ X${JobType} = XRUN ] ; then
989      IGCM_sys_Chmod 444 ${1}
990    fi
991
992    #
993    # USUAL WAY
994    \cp $1 $2 > out_rsync 2>&1
995    RET=$?
996
997#       #RSYNC WITH NETWORK SSH CALL
998#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} > out_rsync 2>&1
999#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} >> out_rsync 2>&1
1000
1001#       #RSYNC WITH NFS USE
1002#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
1003#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
1004
1005#       RET=$?
1006#       IGCM_sys_Rsync_out $RET
1007
1008#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1009#       (( RET=RET+$? ))
1010
1011    if [ ${RET} -gt 0 ] ; then
1012      echo "IGCM_sys_Put_Rest : error."
1013      cat out_rsync
1014      IGCM_debug_Exit "IGCM_sys_Put_Rest"
1015    else
1016      \rm out_rsync
1017    fi
1018  else
1019    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1020  fi
1021  IGCM_debug_PopStack "IGCM_sys_Put_Rest"
1022}
1023
1024#D-#==================================================
1025#D-function IGCM_sys_PutBuffer_Rest
1026#D-* Purpose: Put computied restarts on ${SCRATCHDIR}.
1027#D-           File and target directory must exist.
1028#D-* Examples:
1029#D-
1030function IGCM_sys_PutBuffer_Rest {
1031  IGCM_debug_PushStack "IGCM_sys_PutBuffer_Rest" $@
1032  if ( $DEBUG_sys ) ; then
1033    echo "IGCM_sys_PutBuffer_Rest :" $@
1034  fi
1035  if [ $DRYRUN = 0 ]; then
1036    if [ ! -f ${1} ] ; then
1037      echo "ERROR : IGCM_sys_PutBuffer_Rest ${1} DOES NOT EXIST ."
1038      IGCM_debug_Exit "IGCM_sys_PutBuffer_Rest"
1039    fi
1040
1041    typeset RET
1042    #
1043    if [ X${JobType} = XRUN ] ; then
1044      IGCM_sys_Chmod 444 ${1}
1045    fi
1046
1047    #
1048    # USUAL WAY
1049    \cp $1 $2 > out_rsync 2>&1
1050    RET=$?
1051
1052    if [ ${RET} -gt 0 ] ; then
1053      echo "IGCM_sys_PutBuffer_Rest : error."
1054      cat out_rsync
1055      IGCM_debug_Exit "IGCM_sys_PutBuffer_Rest"
1056    else
1057      \rm out_rsync
1058    fi
1059  else
1060    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1061  fi
1062  IGCM_debug_PopStack "IGCM_sys_PutBuffer_Rest"
1063}
1064
1065#D-#==================================================
1066#D-function IGCM_sys_Put_Out
1067#D-* Purpose: Copy a file on ${ARCHIVE} after having chmod it in readonly
1068#D-* Examples:
1069#D-
1070function IGCM_sys_Put_Out {
1071  IGCM_debug_PushStack "IGCM_sys_Put_Out" $@
1072  if ( $DEBUG_sys ) ; then
1073    echo "IGCM_sys_Put_Out :" $@
1074  fi
1075  if [ $DRYRUN = 0 ]; then
1076    if [ ! -f ${1} ] ; then
1077      echo "WARNING : IGCM_sys_Put_Out ${1} DOES NOT EXIST ."
1078      IGCM_debug_PopStack "IGCM_sys_Put_Out"
1079      return 1
1080    fi
1081    #
1082    IGCM_sys_MkdirArchive $( dirname $2 )
1083    #
1084    typeset RET
1085
1086    #=====================================================
1087    #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
1088    #=====================================================
1089
1090    #echo ${2} | grep "${R_OUT}" > /dev/null 2>&1
1091    #if [ $? -eq 0 ] ; then
1092    #    typeset WORKPATH FILEPATH
1093    #    WORKPATH=$( dirname $2 | sed -e "s|${R_OUT}|${R_BUF}|" )
1094    #    IGCM_sys_MkdirWork ${WORKPATH}
1095    #    FILEPATH=${WORKPATH}/$( basename $2 )
1096    #    #
1097    #    IGCM_sys_Cp ${1} ${FILEPATH}
1098    #fi
1099
1100    if [ X${JobType} = XRUN ] ; then
1101      if [ X${3} = X ] ; then
1102        IGCM_sys_Chmod 444 ${1}
1103      fi
1104    fi
1105    #
1106    # USUAL WAY
1107    \cp $1 $2 > out_rsync 2>&1
1108    RET=$?
1109
1110#       #RSYNC WITH NETWORK SSH CALL
1111#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} > out_rsync 2>&1
1112#       ${RSYNC} ${RSYNC_opt} -e ssh ${RUN_DIR}/$1 ${STOREHOST}:${2} >> out_rsync 2>&1
1113
1114#       #RSYNC WITH NFS USE
1115#       echo ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} > out_rsync 2>&1
1116#       ${RSYNC} ${RSYNC_opt} ${RUN_DIR}/$1 ${2} >> out_rsync 2>&1
1117
1118#       RET=$?
1119#       IGCM_sys_Rsync_out $RET
1120
1121#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1122#       (( RET=RET+$? ))
1123
1124    if [ ${RET} -gt 0 ] ; then
1125      echo "IGCM_sys_Put_Out : error."
1126      cat out_rsync
1127      IGCM_debug_Exit "IGCM_sys_Put_Out"
1128    else
1129      \rm out_rsync
1130    fi
1131  else
1132    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1133  fi
1134  IGCM_debug_PopStack "IGCM_sys_Put_Out"
1135  return 0
1136}
1137
1138#D-#==================================================
1139#D-function IGCM_sys_PutBuffer_Out
1140#D-* Purpose: Copy a file on ${SCRATCHDIR} after having chmod it in readonly
1141#D-* Examples:
1142#D-
1143function IGCM_sys_PutBuffer_Out {
1144  IGCM_debug_PushStack "IGCM_sys_PutBuffer_Out" $@
1145  if ( $DEBUG_sys ) ; then
1146    echo "IGCM_sys_PutBuffer_Out :" $@
1147  fi
1148  if [ $DRYRUN = 0 ]; then
1149    if [ ! -f ${1} ] ; then
1150      echo "WARNING : IGCM_sys_PutBuffer_Out ${1} DOES NOT EXIST ."
1151      IGCM_debug_PopStack "IGCM_sys_PutBuffer_Out"
1152      return 1
1153    fi
1154    #
1155    IGCM_sys_Mkdir $( dirname $2 )
1156    #
1157    typeset RET
1158
1159    if [ X${JobType} = XRUN ] ; then
1160      if [ X${3} = X ] ; then
1161        IGCM_sys_Chmod 444 ${1}
1162      fi
1163    fi
1164    #
1165    # USUAL WAY
1166    \cp $1 $2 > out_rsync 2>&1
1167    RET=$?
1168
1169    if [ ${RET} -gt 0 ] ; then
1170      echo "IGCM_sys_PutBuffer_Out : error."
1171      cat out_rsync
1172      IGCM_debug_Exit "IGCM_sys_PutBuffer_Out"
1173    else
1174      \rm out_rsync
1175    fi
1176  else
1177    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1178  fi
1179  IGCM_debug_PopStack "IGCM_sys_PutBuffer_Out"
1180  return 0
1181}
1182
1183#D-#==================================================
1184#D-function IGCM_sys_Get
1185#D-* Purpose: Get a file from ${ARCHIVE}
1186#D-* Examples: IGCM_sys_Get myfile /destpath/myfile_with_PREFIX
1187#D-            IGCM_sys_Get /l Array_contain_myfiles /destpath/
1188function IGCM_sys_Get {
1189  IGCM_debug_PushStack "IGCM_sys_Get" $@
1190
1191  typeset DEST RET dm_liste ifile target file_work
1192
1193  if ( $DEBUG_sys ) ; then
1194    echo "IGCM_sys_Get :" $@
1195  fi
1196  if [ $DRYRUN -le 2 ]; then
1197    if [ X${1} = X'/l' ] ; then
1198      # test if the first file is present in the old computation :
1199      eval set +A dm_liste \${${2}}
1200    else
1201      eval set +A dm_liste ${1}
1202    fi
1203    eval DEST=\${${#}}
1204
1205    #=====================================================
1206    #         COMMENT OUT DOUBLE COPY ON SCRATCHDIR
1207    #=====================================================
1208
1209    # Is it an R_OUT file (not R_IN) ?
1210    #echo ${dm_liste[0]} | grep "${R_OUT}" > /dev/null 2>&1
1211    #if [ $? -eq 0 ] ; then
1212    #    # Yes  ? then we try to get it in SCRATCHDIR
1213    #    set +A file_work $( echo ${dm_liste[*]} | sed -e "s|${R_OUT}|${R_BUF}|g" )
1214    #    if [ -f ${file_work[0]} ] ; then
1215    #   IGCM_sys_Cp ${file_work[*]} ${DEST}
1216    #   IGCM_debug_PopStack "IGCM_sys_Get"
1217    #   return
1218    #    fi
1219    #fi
1220
1221    # test if the (first) file is present in the old computation :
1222    IGCM_sys_TestFileArchive ${dm_liste[0]}
1223    RET=$?
1224    if [ ${RET} -gt 0 ] ; then
1225      echo "IGCM_sys_Get, ERROR : regular file ${dm_liste[0]} DOES NOT EXIST ."
1226      IGCM_debug_Exit "IGCM_sys_Get"
1227    fi
1228
1229    dmget ${dm_liste[*]} > out_rsync 2>&1
1230    RET=$?
1231    if [ ${RET} -gt 0 ] ; then
1232      echo "WARNING IGCM_sys_Get : demigration error."
1233      cat out_rsync
1234      echo "WARNING IGCM_sys_Get : will stop later if the cp fails."
1235    fi
1236
1237    #if [ ${RET} -gt 0 ] ; then
1238    #    if [ ! "X$( grep "Lost dmusrcmd connection" out_rsync )" = "X" ] ; then
1239    #   cat out_rsync
1240    #   echo "WARNING IGCM_sys_Get : Lost dmusrcmd connection : "
1241    #   sleep 30
1242    #   echo "We try another time"
1243    #   dmget ${dm_liste[*]} > out_rsync 2>&1
1244    #   RET=$?
1245    #   if [ ${RET} -gt 0 ] ; then
1246    #       echo "ERROR IGCM_sys_Get : again demigration error :"
1247    #       cat out_rsync
1248    #       IGCM_debug_Exit "IGCM_sys_Get"
1249    #   fi
1250    #    else
1251    #   echo "ERROR IGCM_sys_Get : demigration error :"
1252    #   cat out_rsync
1253    #   IGCM_debug_Exit "IGCM_sys_Get"
1254    #    fi
1255    #fi
1256
1257    #USUAL WAY
1258    if [ X${1} = X'/l' ] ; then
1259      (( RET=0 ))
1260      for target in ${dm_liste[*]} ; do
1261        local_file=$( basename ${target} )
1262        \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
1263        (( RET = RET + $? ))
1264      done
1265    else
1266      \cp ${dm_liste} ${DEST} >> out_rsync 2>&1
1267      RET=$?
1268    fi
1269
1270#       #RSYNC WITH NETWORK SSH CALL
1271#       echo ${RSYNC} ${RSYNC_opt} -e ssh ${STOREHOST}:"${dm_liste}" ${STOREHOST}:${RUN_DIR}/${DEST} > out_rsync 2>&1
1272#       ${RSYNC} ${RSYNC_opt} -e ssh ${STOREHOST}:"${dm_liste}" ${STOREHOST}:${RUN_DIR}/${DEST} >> out_rsync 2>&1
1273
1274#       #RSYNC WITH NFS USE
1275#       echo ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} > out_rsync 2>&1
1276#       ${RSYNC} ${RSYNC_opt} ${dm_liste} ${RUN_DIR}/${DEST} >> out_rsync 2>&1
1277
1278#       RET=$?
1279#       IGCM_sys_Rsync_out $RET
1280
1281#       ${libIGCM}/libIGCM_sys/IGCM_analyse_rsync_out.awk out_rsync
1282#       (( RET=RET+$? ))
1283
1284    if [ ${RET} -gt 0 ] ; then
1285      echo "IGCM_sys_Get : copy error."
1286      cat out_rsync
1287      IGCM_debug_Exit "IGCM_sys_Get"
1288    else
1289      \rm out_rsync
1290    fi
1291  else
1292    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1293  fi
1294  IGCM_debug_PopStack "IGCM_sys_Get"
1295}
1296
1297#D-#==================================================
1298#D-function IGCM_sys_GetBuffer
1299#D-* Purpose: Get a file from ${SCRATCHDIR}
1300#D-* Examples: IGCM_sys_GetBuffer myfile /destpath/myfile_with_PREFIX
1301#D-            IGCM_sys_GetBuffer /l Array_contain_myfiles /destpath/
1302function IGCM_sys_GetBuffer {
1303  IGCM_debug_PushStack "IGCM_sys_GetBuffer" $@
1304
1305  typeset DEST RET buf_liste ifile target file_work
1306
1307  if ( $DEBUG_sys ) ; then
1308    echo "IGCM_sys_GetBuffer :" $@
1309  fi
1310  if [ $DRYRUN -le 2 ]; then
1311    if [ X${1} = X'/l' ] ; then
1312      # test if the first file is present in the old computation :
1313      eval set +A buf_liste \${${2}}
1314    else
1315      eval set +A buf_liste ${1}
1316    fi
1317    eval DEST=\${${#}}
1318
1319    #USUAL WAY
1320    if [ X${1} = X'/l' ] ; then
1321      (( RET=0 ))
1322      for target in ${buf_liste[*]} ; do
1323        local_file=$( basename ${target} )
1324        \cp ${target} ${DEST}/${local_file} >> out_rsync 2>&1
1325        (( RET = RET + $? ))
1326      done
1327    else
1328      \cp ${buf_liste} ${DEST} >> out_rsync 2>&1
1329      RET=$?
1330    fi
1331
1332    if [ ${RET} -gt 0 ] ; then
1333      echo "IGCM_sys_GetBuffer : copy error."
1334      cat out_rsync
1335      IGCM_debug_Exit "IGCM_sys_GetBuffer"
1336    else
1337      \rm out_rsync
1338    fi
1339  else
1340    ( ${DEBUG_debug} ) && echo "DRYRUN mode = " $DRYRUN >> stack
1341  fi
1342  IGCM_debug_PopStack "IGCM_sys_GetBuffer"
1343}
1344
1345#D-#==================================================
1346#D-function IGCM_sys_GetDate_FichWork
1347#D-* Purpose: donne la date filesys d'un fichier sur le filesystem WORK
1348#D-* Examples:
1349#D-
1350function IGCM_sys_GetDate_FichWork {
1351  IGCM_debug_PushStack "IGCM_sys_FichWork" $@
1352  if ( $DEBUG_sys ) ; then
1353    echo "IGCM_sys_GetDate_FichWork :" $@
1354  fi
1355  typeset dateF
1356  set +A dateF -- $( ls -l --full-time --time-style='+%Y%m%d%H%M%S' ${1} )
1357  eval ${2}=${dateF[5]}
1358
1359    # donne la date filesys d'un fichier sur la machine work
1360  IGCM_debug_PopStack "IGCM_sys_FichWork"
1361}
1362
1363#D-#==================================================
1364#D-function IGCM_sys_GetDate_FichArchive
1365#D-* Purpose: donne la date filesys d'un fichier sur le filesystem ARCHIVE
1366#D-* Examples:
1367#D-
1368function IGCM_sys_GetDate_FichArchive {
1369  IGCM_debug_PushStack "IGCM_sys_FichArchive" $@
1370  if ( $DEBUG_sys ) ; then
1371    echo "IGCM_sys_GetDate_FichArchive :" $@
1372  fi
1373  typeset dateF
1374  set +A dateF -- $( ls -l --full-time --time-style='+%Y%m%d%H%M%S' ${1} )
1375  eval ${2}=${dateF[5]}
1376
1377  IGCM_debug_PopStack "IGCM_sys_FichArchive"
1378}
1379
1380##############################################################
1381# REBUILD OPERATOR
1382
1383function IGCM_sys_rebuild {
1384  IGCM_debug_PushStack "IGCM_sys_rebuild" -- $@
1385  if ( $DEBUG_sys ) ; then
1386    echo "IGCM_sys_rebuild :" $@
1387  fi
1388  /home/cont003/p86ipsl/SX8/bin/rebuild -f -o $@
1389  if [ $? -gt 0 ] ; then
1390    echo "IGCM_sys_rebuild : erreur ${@}."
1391    IGCM_debug_Exit "rebuild"
1392  fi
1393
1394  IGCM_debug_PopStack "IGCM_sys_rebuild"
1395}
1396
1397############################################################
1398# Activate Running Environnment Variables
1399
1400function IGCM_sys_activ_variables {
1401  IGCM_debug_PushStack "IGCM_sys_activ_variables"
1402  if ( $DEBUG_sys ) ; then
1403    echo "IGCM_sys_activ_variables"
1404  fi
1405
1406# --------------------------------------------------------------------
1407#D- MPI specifications
1408# --------------------------------------------------------------------
1409
1410#D-- MPISUSPEND
1411  export MPISUSPEND=${MPISUSPEND:=OFF}
1412
1413#D-- MPIPROGINF #other choices : ALL_DETAIL2
1414  export MPIPROGINF=ALL
1415#D- activate ftrace (with -ftrace)
1416  export F_FTRACE=YES
1417#D- communication information (with -ftrace)
1418  export MPICOMMINF=DETAIL
1419
1420# --------------------------------------------------------------------
1421#D- Other specifications
1422# --------------------------------------------------------------------
1423
1424#D- max number of character/line in output job
1425  export F_SYSLEN=5000
1426#D- number of error that can be admitted on the NEC
1427  export F_ERRCNT=0
1428#D- global performance
1429  export F_PROGINF=DETAIL
1430
1431#D- I/O performance (FORTRAN I/O only not netCDF)
1432  export F_FILEINF=${F_FILEINF:=NO}
1433#D- netCDF I/O performance
1434  export NC_FILEINF=${NC_FILEINF:=NO}
1435
1436  IGCM_debug_PopStack "IGCM_sys_activ_variables"
1437}
1438
1439############################################################
1440# Desactivate Running Environnment Variables
1441
1442function IGCM_sys_desactiv_variables {
1443  IGCM_debug_PushStack "IGCM_sys_desactiv_variables"
1444  if ( $DEBUG_sys ) ; then
1445    echo "IGCM_sys_desactiv_variables"
1446  fi
1447# --------------------------------------------------------------------
1448#D- MPI specifications
1449# --------------------------------------------------------------------
1450
1451#D-- MPIPROGINF
1452  export MPIPROGINF=NO
1453
1454# --------------------------------------------------------------------
1455#D- Other specifications
1456# --------------------------------------------------------------------
1457
1458#D- global performance
1459  export F_PROGINF=NO 
1460
1461  IGCM_debug_PopStack "IGCM_sys_desactiv_variables"
1462}
1463
1464############################################################
1465# Build MPI/OMP scripts
1466function IGCM_sys_build_execution_scripts
1467{
1468    IGCM_debug_PushStack "IGCM_sys_build_execution_scripts" $@
1469    if ( $DEBUG_sys ) ; then
1470        echo "IGCM_sys_build_execution_scripts " $@
1471    fi
1472
1473    typeset NbNodes_Job NbProc_Job comp_proc_mpi_loc comp_proc_omp_loc mpi_count
1474   
1475    if [ ! -f ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} ]  ; then
1476        IGCM_debug_Exit "IGCM_sys_mercurex9 build_execution_scripts : Job_${config_UserChoices_JobName} don't exist in SUBMIT_DIR : ${SUBMIT_DIR} "
1477    fi
1478
1479    if ( ${OK_PARA_MPMD} ) ; then
1480
1481        if [ -f run_file ] ; then
1482            IGCM_sys_Rm -f run_file
1483        fi
1484        touch run_file
1485
1486        if ( ${OK_PARA_OMP} ) ; then
1487                IGCM_debug_Print 2 "Error in config.card on SX9 : OpenMP not available"
1488                exit 1
1489        else
1490# OLD :
1491#PBS -v BATCH_NUM_PROC_TOT=4
1492#PBS -l cpunum_job=${BATCH_NUM_PROC_TOT}
1493            echo "Job_${config_UserChoices_JobName} includes BATCH_NUM_PROC_TOT = \c"
1494            cat ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} | grep -- "-v *BATCH_NUM_PROC_TOT" | sed -e "s/.*BATCH_NUM_PROC_TOT *= *//" 
1495            NbProc_Job=$( cat ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} | grep -- "-v *BATCH_NUM_PROC_TOT" | sed -e "s/.*BATCH_NUM_PROC_TOT *= *//" )
1496            NbProc_Job=${NbProc_Job:=0}
1497            if [ ${NbProc_Job} -eq 0 ] ; then
1498                IGCM_debug_Print 2 "Error in Job_${config_UserChoices_JobName} ressources : no BATCH_NUM_PROC_TOT defined with MPI only run."
1499                exit 1
1500            fi
1501        fi
1502
1503# run_file construction
1504
1505# Then first loop on the components for the coupler ie oasis
1506
1507### the coupler ie oasis must be the first one
1508    for comp in ${config_ListOfComponents[*]} ; do
1509       
1510        eval ExeNameIn=\${config_Executable_${comp}[0]}
1511        eval ExeNameOut=\${config_Executable_${comp}[1]}
1512           
1513        # for CPL component only
1514        if [ "X${comp}" = "XCPL" ] ; then
1515
1516            eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
1517            eval comp_proc_omp_loc=\${${comp}_PROC_OMP}
1518           
1519            if ( ${OK_PARA_MPI} ) ; then
1520                echo "-p ${comp_proc_mpi_loc} -e ./${ExeNameOut}" >> run_file
1521            fi
1522        fi
1523    done
1524
1525# Then second loop on the components
1526
1527    for comp in ${config_ListOfComponents[*]} ; do
1528       
1529        eval ExeNameIn=\${config_Executable_${comp}[0]}
1530        eval ExeNameOut=\${config_Executable_${comp}[1]}
1531           
1532        # Only if we really have an executable for the component and not the coupler ie oasis:
1533        if ( [ "X${ExeNameOut}" != X\"\" ] && [ "X${comp}" != "XCPL" ] ) ; then
1534
1535            eval comp_proc_mpi_loc=\${${comp}_PROC_MPI}
1536            eval comp_proc_omp_loc=\${${comp}_PROC_OMP}
1537           
1538            if ( ${OK_PARA_MPI} ) ; then
1539                    echo "-p ${comp_proc_mpi_loc} -e ./${ExeNameOut}" >> run_file
1540            fi
1541        fi
1542    done
1543
1544    EXECUTION="${HOST_MPIRUN_COMMAND} -f ./run_file"
1545
1546    IGCM_sys_Chmod u+x run_file
1547    if ( $DEBUG_sys ) ; then
1548      echo "run_file contains : "
1549      cat run_file
1550    fi
1551
1552else # Only one executable. launch it.
1553
1554    for comp in ${config_ListOfComponents[*]} ; do
1555
1556        eval ExeNameIn=\${config_Executable_${comp}[0]}
1557        eval ExeNameOut=\${config_Executable_${comp}[1]}
1558
1559        [ "X${ExeNameOut}" != X\"\" ] &&  EXECUTION="time mpirun -np ${BATCH_NUM_PROC_TOT} ./${ExeNameOut}"
1560
1561    done
1562
1563fi
1564
1565    IGCM_debug_Print 1 "sys mercurex9 : execution command is "
1566    IGCM_debug_Print 1 "$EXECUTION"
1567
1568    IGCM_debug_PopStack "IGCM_sys_build_execution_scripts"
1569
1570}
1571
1572function IGCM_sys_build_run_file {
1573
1574IGCM_debug_Print 3 " dummy function : IGCM_sys_build_run_file "
1575
1576}
1577
Note: See TracBrowser for help on using the repository browser.