source: trunk/libIGCM/AA_move-and-rename @ 727

Last change on this file since 727 was 712, checked in by aclsce, 12 years ago
  • Added TaskType? variable in jobs to specify the type of the job (computing or post-processing).
  • Added the use of TaskType? variable in Curie libsys to source the appropriate .atlas_env* configuration file.
  • Property svn:keywords set to Revision Author Date
File size: 16.4 KB
Line 
1#!/bin/ksh
2
3#**************************************************************
4# Author: Martial Mancip
5# Contact: Martial.Mancip__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#D- Task type (computing or post-processing)
15TaskType=post-processing
16
17# Change SpaceName/ExperimentName/JobName names and path for a simulation during the run.
18# !! Be careful that the job is suspended before using this script !!
19# You may call this script with those four variables already defined, or modify directly
20# default values under here :
21
22# New Name Space of this experience
23NEW_SpaceName=${NEW_SpaceName:=DEVT}
24
25# New Expericence class of the run
26NEW_ExperimentName=${NEW_ExperimentName:=NEWExperimentName}
27
28# New JobName of the run
29NEW_JobName=${NEW_JobName:=NEWJobName}
30
31SUBMIT_DIR=${SUBMIT_DIR:=my_path_to_my_SUBMIT_DIR}
32
33# verbosity
34Verbosity=3
35
36########################################################################
37
38# Path to modipsl
39MODIPSL=${MODIPSL:=::modipsl::}
40
41#D- Path to libIGCM
42#D- Default : value from AA_job if any
43# WARNING For StandAlone use : To run this script on some machine (ulam and cesium)
44# WARNING you must check MirrorlibIGCM variable in sys library.
45# WARNING If this variable is true, you must use libIGCM_POST path instead
46# WARNING of your running libIGCM directory.
47libIGCM=${libIGCM:=::modipsl::/libIGCM}
48
49DEBUG_sys=false
50DEBUG_debug=false
51
52########################################################################
53
54. ${libIGCM}/libIGCM_debug/libIGCM_debug.ksh ;
55. ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh     #; IGCM_debug_Check
56. ${libIGCM}/libIGCM_card/libIGCM_card.ksh   #; IGCM_card_Check
57. ${libIGCM}/libIGCM_date/libIGCM_date.ksh   #; IGCM_date_Check
58. ${libIGCM}/libIGCM_config/libIGCM_config.ksh
59
60########################################################################
61# define local functions
62
63# Function to replace OLD JobName in file
64
65function REPLACE_sed
66{
67    IGCM_debug_PushStack "REPLACE_sed"
68    typeset RET
69   
70    FILEIN=${1}
71    FILEOUT=$( basename ${FILEIN} )
72
73    sed -e "s&${R_SAVE}&${NEW_R_SAVE}&g" -e "s/${config_UserChoices_JobName}/${NEW_JobName}/g" \
74        ${1} > ${RUN_DIR_PATH}/${FILEOUT}
75    RET=$?
76
77    touch --reference=${1} ${RUN_DIR_PATH}/${FILEOUT}
78    IGCM_sys_Mv ${RUN_DIR_PATH}/${FILEOUT} ${2}
79    chmod --reference=${1} ${2}/${FILEOUT}
80
81    IGCM_sys_Rm -f ${1}
82
83    IGCM_debug_Print 3 "REPLACE_sed : ${1} ${2}"
84   
85    IGCM_debug_PopStack "REPLACE_sed"
86    return $RET
87}
88
89function MOVE_and_RENAME_files
90{
91    IGCM_debug_PushStack "MOVE_and_RENAME_files"
92
93    typeset VAR_files FILE_OUT file i RET
94
95    VAR_files=${1}
96    eval VAR1=\${${VAR_files[0]}}
97
98    if [ X$( echo ${NEW_R_SAVE} | grep ${config_UserChoices_JobName} ) != X ]; then
99        set +A FILE_OUT -- $( eval echo \${${VAR_files}[*]} | sed -e "s&${R_SAVE}&${NEW_R_SAVE}&g" )
100        ((i=0))
101        for file in ${FILE_OUT[@]} ; do
102            FILE_OUT[$i]=$( dirname $file )/$( echo $( basename $file ) | sed -e "s/${config_UserChoices_JobName}/${NEW_JobName}/g" )
103            (( i = i + 1 ))
104        done
105    else
106        set +A FILE_OUT -- $( eval echo \${${VAR_files}[*]} | sed -e "s&${R_SAVE}&${NEW_R_SAVE}&g" -e "s/${config_UserChoices_JobName}/${NEW_JobName}/g" )
107    fi
108    IGCM_debug_Print 3 "MOVE_and_RENAME_files all : ${VAR1}"
109    IGCM_debug_Print 3 "    to     ${FILE_OUT}." 
110
111    (( ifile = 0 ))
112    for file_o in ${FILE_OUT[@]} ; do
113        eval IGCM_sys_Mv \${${VAR_files}[${ifile}]} ${file_o}
114        RET=$?
115        (( ifile = ifile + 1 ))
116    done   
117
118    IGCM_debug_PopStack "MOVE_and_RENAME_files"
119    return $RET
120}
121
122function MY_DODS_Cp
123{
124    IGCM_debug_PushStack "MY_DODS_Cp"
125
126    typeset old_JobName old_R_DODS
127    IGCM_sys_Cd ${NEW_R_SAVE}
128    old_JobName=${config_UserChoices_JobName}
129    old_R_DODS=${R_DODS}
130    old_R_SAVE=${R_SAVE}
131
132    config_UserChoices_JobName=${NEW_JobName}
133    R_DODS=${NEW_R_DODS}
134    R_SAVE=${NEW_R_SAVE}
135
136    IGCM_sys_Dods_Cp ${1}
137    IGCM_debug_Print 3 "MY_DODS_Cp : ${config_UserChoices_JobName}/${1}"
138    IGCM_sys_Cd ${RUN_DIR_PATH}
139
140    config_UserChoices_JobName=${old_JobName}
141    R_DODS=${old_R_DODS}
142    R_SAVE=${old_R_SAVE}
143
144    IGCM_debug_PopStack "MY_DODS_Cp"
145}
146
147function MY_DODS_Rm
148{
149    IGCM_debug_PushStack "MY_DODS_Rm"
150    DEBUG_debug=false
151
152    IGCM_sys_Cd ${R_SAVE}
153    IGCM_sys_Dods_Rm ${1}
154    IGCM_debug_Print 3 "MY_DODS_Rm : ${config_UserChoices_JobName}/${1}"
155    IGCM_sys_Cd ${RUN_DIR_PATH}
156
157    IGCM_debug_PopStack "MY_DODS_Rm"
158}
159########################################################################
160
161if [ ! -d ${SUBMIT_DIR} ]; then
162    IGCM_debug_Print 1 "No ${SUBMIT_DIR}, we stop here"
163    exit 1
164fi
165
166# We temporary change ${run_Configuration_PeriodState} to
167if [ -f ${SUBMIT_DIR}/run.card ] ; then
168    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodState
169    if ( [ ${run_Configuration_PeriodState} != "Start" ] && [ ${run_Configuration_PeriodState} != "Running" ] && [ ${run_Configuration_PeriodState} != "OnQueue" ] && [ ${run_Configuration_PeriodState} != "Continue" ] ) ; then
170        old_run_Configuration_PeriodState=${run_Configuration_PeriodState}
171        IGCM_debug_PrintVariables 2 old_run_Configuration_PeriodState
172        IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "OnQueue"
173    fi
174fi
175
176IGCM_config_Initialize
177
178if [ -f ${SUBMIT_DIR}/run.card ] ; then
179    IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration OldPrefix
180    IGCM_debug_PrintVariables 2 run_Configuration_OldPrefix
181    if [ X${old_run_Configuration_PeriodState} != X"Completed" ] ; then
182        DateEnd=$( IGCM_date_ConvertFormatToGregorian $( echo ${run_Configuration_OldPrefix} | awk -F'_' '{print $2}' ) )
183    else
184        DateEnd=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} )
185    fi
186else
187    DateEnd=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} )
188fi
189
190IGCM_debug_Print 1 ""
191IGCM_debug_Print 1 "DateEnd for MoveJob_Checker : " ${DateEnd}
192IGCM_date_GetYearMonth ${DateEnd}   YearEnd   MonthEnd
193IGCM_debug_Print 1 "YearEnd MonthEnd for TimeSeries_Checker : " ${YearEnd} ${MonthEnd}
194IGCM_debug_Print 1 ""
195
196#set -vx
197
198#====================================================
199#DEFINE NEW_R_SAVE
200if [ X${config_UserChoices_SpaceName} != X ] ; then
201    NEW_SAVE=${config_UserChoices_TagName}/${NEW_SpaceName}
202else
203    NEW_SAVE=${config_UserChoices_TagName}
204fi
205if [ X${config_UserChoices_ExperimentName} != X ] ; then
206    NEW_SAVE=${NEW_SAVE}/${NEW_ExperimentName}
207fi
208
209NEW_R_SAVE=${R_OUT}/${NEW_SAVE}/${NEW_JobName}
210
211IGCM_debug_Print 1 "Move ${R_SAVE} to ${NEW_R_SAVE}"
212if [ -d ${NEW_R_SAVE} ] ; then
213    IGCM_debug_Print 1 "ERROR : ${NEW_R_SAVE} directory already exist !"
214    IGCM_debug_Print 1 "We won't try to  We stop here."
215    exit 1
216fi
217IGCM_sys_MkdirArchive ${NEW_R_SAVE}
218
219# ------------------------------------------------------------------
220# Test if all was right before proceeding further
221# ------------------------------------------------------------------
222IGCM_debug_Verif_Exit_Post
223
224#DEFINE NEW_R_DODS
225NEW_R_DODS=${NEW_SAVE}/${NEW_JobName}
226
227# Define NEW_REBUILD_DIR
228if [ -d ${REBUILD_DIR} ] ; then
229    if [ X${config_Post_RebuildFromArchive} = Xtrue ] ; then
230        NEW_REBUILD_DIR=${NEW_R_SAVE}/TMP
231        IGCM_sys_MkdirArchive ${NEW_REBUILD_DIR}
232    else
233        NEW_REBUILD_DIR=${BIG_DIR}/${config_UserChoices_TagName}/${NEW_JobName}
234        IGCM_sys_MkdirWork ${NEW_REBUILD_DIR}
235    fi
236fi
237
238#====================================================
239# SAVE LOCAL WORKING DIR
240IGCM_sys_Cd ${RUN_DIR_PATH}
241
242#====================================================
243#Exe
244IGCM_debug_Print 1 "Move Exe"
245set +A listfiles -- $( find ${R_SAVE}/Exe -type f )
246
247IGCM_sys_MkdirArchive ${NEW_R_SAVE}/Exe
248MOVE_and_RENAME_files "listfiles"
249
250#====================================================
251#Out
252IGCM_debug_Print 1 "Move Out"
253OutinDir=${R_SAVE}/Out
254OutNEWDir=${NEW_R_SAVE}/Out
255IGCM_sys_MkdirArchive ${OutNEWDir}
256
257# Change JobName and copy run.card
258if [ -f ${OutinDir}/run.card ] ; then
259    sed -e "s/OldPrefix=\ *${config_UserChoices_JobName}/OldPrefix= ${NEW_JobName}/g" \
260        ${OutinDir}/run.card > ${RUN_DIR_PATH}/run.card
261    RET=$?
262    if [ ${RET} = 0 ] ; then
263        IGCM_sys_Mv -f ${RUN_DIR_PATH}/run.card ${OutNEWDir}
264        IGCM_sys_Rm -f ${OutinDir}/run.card
265    fi
266fi
267
268# Just copy historical run.card
269unset listfiles
270set +A listfiles -- $( find ${OutinDir} -type f -name "run.card\.[0-9]*\.[0-9]*" )
271if [ ${#listfiles[*]} -gt 0 ] ; then
272    IGCM_sys_Cp ${listfiles[*]} ${OutNEWDir}
273    RET=$?
274    if [ ${RET} = 0 ] ; then
275        IGCM_sys_Rm -f ${listfiles[*]}
276    fi
277fi
278
279# Move and Rename OLD Script_Output
280unset listfiles
281set +A listfiles -- $( find ${OutinDir} -type f -name "Script_Output_*\.[0-9]*\.[0-9]*" )
282MOVE_and_RENAME_files "listfiles"
283
284# Move and Rename OLD Executable Output
285unset listfiles
286set +A listfiles -- $( find ${OutinDir} -type f -name "*_out_execution" )
287MOVE_and_RENAME_files "listfiles"
288
289#====================================================
290IGCM_debug_Print 1 "For components"
291IGCM_debug_Print 1 "=============="
292
293#====================================================
294#Output
295# loop over components and frequencies
296IGCM_debug_Print 1 "Move Output"
297for comp in ${config_ListOfComponents[*]} ; do
298    IGCM_debug_Print 2 "------------------"
299    IGCM_debug_Print 2 "for component ${comp}"
300
301    unset FREQDIR
302    set +A FREQDIR -- $( find ${R_SAVE}/${comp}/Output -type d -not -name "*Output" )
303
304    IGCM_debug_Print 3 "List of WriteFrequencies : ${FREQDIR[*]}"
305
306    for ThisfreqDir in ${FREQDIR[*]} ; do
307        freq=$( basename ${ThisfreqDir} )
308        IGCM_debug_Print 2 "${freq}."
309
310        NEW_freqDir=${NEW_R_SAVE}/${comp}/Output/${freq}
311        IGCM_sys_MkdirArchive ${NEW_freqDir}
312
313        unset listfiles
314        set +A listfiles -- $( find ${ThisfreqDir} -type f )
315       
316        MOVE_and_RENAME_files "listfiles"
317    done
318
319    unset COMPFILES
320    set +A COMPFILES -- $( find ${R_SAVE}/${comp}/Output -type f )
321   
322    if [ ${#COMPFILES[*]} -gt 0 ] ; then
323        IGCM_debug_Print 2 "simple Output FILES : ${COMPFILES[*]}."
324
325        MOVE_and_RENAME_files "COMPFILES"
326    fi
327done
328
329#====================================================
330#Restart
331# loop over components
332IGCM_debug_Print 1 "Move Restart"
333for comp in ${config_ListOfComponents[*]} ; do
334    IGCM_debug_Print 2 "------------------"
335    IGCM_debug_Print 2 "for component ${comp}"
336
337    ThisRestDir=${R_SAVE}/${comp}/Restart
338    NEW_RestDir=${NEW_R_SAVE}/${comp}/Restart
339    IGCM_sys_MkdirArchive ${NEW_RestDir}
340
341    unset listfiles
342    set +A listfiles -- $( find ${ThisRestDir} -type f )
343   
344    MOVE_and_RENAME_files "listfiles"
345done
346
347#====================================================
348#DEBUG
349# Move and Rename OLD Executable Output
350# loop over components
351IGCM_debug_Print 1 "Move Debug"
352for comp in ${config_ListOfComponents[*]} ; do
353    IGCM_debug_Print 2 "------------------"
354    IGCM_debug_Print 2 "for component ${comp}"
355
356    ThisDebugDir=${R_SAVE}/${comp}/Debug
357    NEW_DebugDir=${NEW_R_SAVE}/${comp}/Debug
358    IGCM_sys_MkdirArchive ${NEW_DebugDir}
359
360    unset listfiles
361    set +A listfiles -- $( find ${ThisDebugDir} -type f )
362   
363    MOVE_and_RENAME_files "listfiles"
364done
365
366#====================================================
367#POST
368# loop over components and frequencies
369IGCM_debug_Print 1 "Move Analyse"
370for comp in ${config_ListOfComponents[*]} ; do
371    IGCM_debug_Print 2 "------------------"
372    IGCM_debug_Print 2 "for component ${comp}"
373   
374    if [ -d ${R_SAVE}/${comp}/Analyse ] ; then
375        unset TSDIR
376        set +A TSDIR -- $( find ${R_SAVE}/${comp}/Analyse -name "TS_*" -type d )
377       
378        for ThisTSDir in ${TSDIR[*]} ; do
379            TS_Dir=$( basename ${ThisTSDir} )
380            IGCM_debug_Print 2 "${TS_Dir}."
381           
382            NEW_TSDir=${NEW_R_SAVE}/${comp}/Analyse/${TS_Dir}
383            IGCM_sys_MkdirArchive ${NEW_TSDir}
384           
385            MY_DODS_Rm ${comp}/Analyse/${TS_Dir}
386           
387            unset listfiles
388            set +A listfiles -- $( find ${ThisTSDir} -type f )
389           
390            MOVE_and_RENAME_files "listfiles"
391           
392            MY_DODS_Cp ${comp}/Analyse/${TS_Dir}
393        done
394
395        ThisSEDir=${R_SAVE}/${comp}/Analyse/SE
396        IGCM_sys_TestDirArchive ${ThisSEDir}
397        if [ $? = 0 ] ; then
398            IGCM_debug_Print 2 "SE."
399            NEW_SEDir=${NEW_R_SAVE}/${comp}/Analyse/SE
400            IGCM_sys_MkdirArchive ${NEW_SEDir}
401           
402            MY_DODS_Rm ${comp}/Analyse/SE
403           
404            unset listfiles
405            set +A listfiles -- $( find ${ThisSEDir} -type f )
406           
407            MOVE_and_RENAME_files "listfiles"
408           
409            MY_DODS_Cp ${comp}/Analyse/SE
410        fi
411
412        MY_DODS_Rm ${comp}/Analyse
413        MY_DODS_Rm ${comp}
414    else
415        IGCM_debug_Print 2 "nothing to do without Analyse."
416    fi
417
418done
419
420#====================================================
421#GRAPHS
422IGCM_debug_Print 1 "Move ATLAS"
423R_ATLAS=ATLAS
424IGCM_sys_TestDirArchive ${R_SAVE}/${R_ATLAS}
425if [ $? = 0 ] ; then
426#    REPLACE_sed ${NEW_R_SAVE}/${R_ATLAS}/*/*/index.html ${NEW_R_SAVE}/${R_ATLAS}
427
428    MY_DODS_Rm ${R_ATLAS}
429
430    IGCM_sys_Mv ${R_SAVE}/${R_ATLAS} ${NEW_R_SAVE}/${R_ATLAS}
431
432    MY_DODS_Cp ${R_ATLAS}
433fi
434
435IGCM_debug_Print 1 "Move MONITORING"
436R_MONITORING=MONITORING
437IGCM_sys_TestDirArchive ${R_SAVE}/${R_MONITORING}
438if [ $? = 0 ] ; then
439    IGCM_sys_MkdirArchive ${NEW_R_SAVE}/${R_MONITORING}
440    REPLACE_sed ${R_SAVE}/${R_MONITORING}/index.html ${NEW_R_SAVE}/${R_MONITORING}
441    sed -e "s/OldPrefix=\ *${config_UserChoices_JobName}/OldPrefix= ${NEW_JobName}/g" \
442        ${R_SAVE}/${R_MONITORING}/run.card > ${RUN_DIR_PATH}/run.card
443    IGCM_sys_Mv -f ${RUN_DIR_PATH}/run.card ${NEW_R_SAVE}/${R_MONITORING}
444    RET=$?
445    if [ ${RET} = 0 ] ; then
446        IGCM_sys_Rm -f ${R_SAVE}/${R_MONITORING}/run.card
447    fi
448    REPLACE_sed ${R_SAVE}/${R_MONITORING}/config.card ${NEW_R_SAVE}/${R_MONITORING}
449    IGCM_sys_Cp -rp ${R_SAVE}/${R_MONITORING} ${NEW_R_SAVE}
450
451    MY_DODS_Rm ${R_MONITORING}
452    IGCM_sys_Rm -rf ${R_SAVE}/${R_MONITORING}
453
454    MY_DODS_Cp ${R_MONITORING}
455fi
456
457
458#====================================================
459#REBUILD
460
461if [ -d ${REBUILD_DIR} ] ; then
462
463    IGCM_debug_Print 1 "Move REBUILD"
464    set +A LISTREBUILDS -- $( find ${REBUILD_DIR} -type d  -not -name "*${config_UserChoices_JobName}" -a -not -name "*TMP" )
465
466    for ThisREBDir in ${LISTREBUILDS[*]} ; do
467        rebdir=$( basename ${ThisREBDir} )
468        IGCM_debug_Print 2 "${rebdir}."
469        if [ X${config_Post_RebuildFromArchive} = Xtrue ] ; then
470            IGCM_sys_MkdirArchive ${NEW_REBUILD_DIR}/${rebdir}
471        else
472            IGCM_sys_MkdirWork ${NEW_REBUILD_DIR}/${rebdir}
473        fi
474        REPLACE_sed ${REBUILD_DIR}/${rebdir}/rebuild.ksh ${NEW_REBUILD_DIR}/${rebdir}
475        IGCM_sys_Mv -f ${REBUILD_DIR}/${rebdir}/* ${NEW_REBUILD_DIR}/${rebdir}/
476    done
477fi
478
479#====================================================
480#List OLD R_SAVE and Ask for erase it !
481
482IGCM_debug_Print 1 "ls of SAVE DIR :"
483ls --color -lR ${R_SAVE}
484
485echo "\033[1;31mPlease verify that ALL OLD DIRECTORY LISTED IS COMPLETLY EMPTY !"
486echo "\033[1;32mIf It is NOT EMPTY, you can TRY AGAIN this script."
487echo "\033[1;31mDo you REALLY want to erase all this directory ?"
488echo -n " Your answer (y/n) : \033[m"
489if [ X${reponse} = X ] ; then
490    read reponse
491fi
492case ${reponse} in
493           
494    oui|OUI|o|y|yes|YES)
495        echo "OK. It will be erased."
496        IGCM_sys_Rm -Rf ${R_SAVE}
497        echo "done."
498        ;;
499    non|NON|n|no|NO)
500        echo "Nothing to do !"
501        ;;
502esac
503
504
505#############################################################################################################
506# Edit config.card, run.card and Job_${NewJobName}
507
508IGCM_debug_Print 1 "edit config.card"
509if [ X${config_UserChoices_SpaceName} != X ] ; then
510    IGCM_card_WriteOption ${SUBMIT_DIR}/config.card UserChoices SpaceName ${NEW_SpaceName}
511fi
512if [ X${config_UserChoices_ExperimentName} != X ] ; then
513    IGCM_card_WriteOption ${SUBMIT_DIR}/config.card UserChoices ExperimentName ${NEW_ExperimentName}
514fi
515IGCM_card_WriteOption ${SUBMIT_DIR}/config.card UserChoices JobName ${NEW_JobName}
516
517if [ -f ${SUBMIT_DIR}/run.card ] ; then
518    IGCM_debug_Print 1 "edit run.card"
519    sed -e "s/OldPrefix=\ *${config_UserChoices_JobName}/OldPrefix= ${NEW_JobName}/g" \
520        ${SUBMIT_DIR}/run.card > ${RUN_DIR_PATH}/run.card
521    IGCM_sys_Mv -f ${RUN_DIR_PATH}/run.card ${SUBMIT_DIR}/run.card
522
523    if [ X${old_run_Configuration_PeriodState} != X ] ; then
524        IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState ${old_run_Configuration_PeriodState}
525    fi
526fi
527
528if [ -f ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} ] ; then
529    IGCM_debug_Print 1 "edit Job_${NEW_JobName}"
530    sed -e "s&${R_SAVE}&${NEW_R_SAVE}&g" -e "s/${config_UserChoices_JobName}/${NEW_JobName}/g" \
531        ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} > ${SUBMIT_DIR}/Job_${NEW_JobName}
532    chmod --reference=${SUBMIT_DIR}/Job_${config_UserChoices_JobName} ${SUBMIT_DIR}/Job_${NEW_JobName}
533    ls -la ${SUBMIT_DIR}/Job_${NEW_JobName}
534fi
Note: See TracBrowser for help on using the repository browser.