Changeset 544 for trunk/libIGCM/libIGCM_config
- Timestamp:
- 12/22/11 16:04:47 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libIGCM/libIGCM_config/libIGCM_config.ksh
r541 r544 15 15 function IGCM_config_Initialize 16 16 { 17 IGCM_debug_PushStack "IGCM_config_Initialize" 18 19 # Debug Print : 17 IGCM_debug_PushStack "IGCM_config_Initialize" 18 19 # Debug Print : 20 echo 21 IGCM_debug_Print 1 "IGCM_config_Initialize" 22 23 if [ ! -r ${SUBMIT_DIR}/run.card ]; then 24 #================================================# 25 # The file run.card doesn't exist # 26 #================================================# 27 FirstInitialize=true 28 #copy initial run.card 29 IGCM_sys_Cp ${SUBMIT_DIR}/run.card.init ${SUBMIT_DIR}/run.card 30 IGCM_debug_Print 2 "run.card copied from run.card.init" 31 else 32 FirstInitialize=false 33 IGCM_debug_Print 2 "run.card exists" 34 fi 35 36 # Test modipsl tree existence. 37 IGCM_sys_TestDir ${MODIPSL} 38 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 39 IGCM_sys_TestDir ${libIGCM} 40 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 41 IGCM_sys_TestDir ${R_EXE} 42 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 43 IGCM_sys_TestDir ${SUBMIT_DIR} 44 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 45 46 if ( $DEBUG_debug ) ; then 47 echo "Keep trace of inital SUBMIT_DIR : " 48 ls -lta ${SUBMIT_DIR} 49 fi 50 51 #================================== 52 53 typeset option auxprint CompatibilityTag 54 # Read libIGCM compatibility version in config.card 55 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Compatibility libIGCM 56 eval CompatibilityTag=${config_Compatibility_libIGCM} > /dev/null 2>&1 57 58 if [ ! "${CompatibilityTag}" = "${libIGCM_CurrentTag}" ] ; then 59 IGCM_debug_Exit "config.card is not compatible with libIGCM version ${libIGCM_CurrentTag} see libIGCM FAQ http://wiki.ipsl.jussieu.fr/wiki_ipsl/IGCMG/libIGCM/DocUtilisateur/FAQ ." 60 fi 61 62 #================================== 63 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card UserChoices 64 65 for option in ${config_UserChoices[*]} ; do 66 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card UserChoices ${option} 67 done 68 echo 69 IGCM_debug_Print 1 "DefineArrayFromOption : config_UserChoices" 70 # Name Space of this experience 71 if [ X${config_UserChoices_SpaceName} != X ] ; then 72 IGCM_debug_PrintVariables 3 config_UserChoices_SpaceName 73 fi 74 # Expericence class of the run 75 if [ X${config_UserChoices_ExperimentName} != X ] ; then 76 IGCM_debug_PrintVariables 3 config_UserChoices_ExperimentName 77 fi 78 IGCM_debug_PrintVariables 3 config_UserChoices_JobName 79 if [ 3 -le ${Verbosity} ] ; then 80 echo "--------------Debug3-->" "config_UserChoices_LongName=" 81 echo "--------------Debug3-->" \"${config_UserChoices_LongName}\" 82 fi 83 IGCM_debug_PrintVariables 3 config_UserChoices_TagName 84 IGCM_debug_PrintVariables 3 config_UserChoices_CalendarType 85 IGCM_debug_PrintVariables 3 config_UserChoices_DateBegin 86 IGCM_debug_PrintVariables 3 config_UserChoices_DateEnd 87 IGCM_debug_PrintVariables 3 config_UserChoices_PeriodLength 88 89 #================================== 90 91 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card ListOfComponents 92 for comp in ${config_ListOfComponents[*]} ; do 93 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/config.card ListOfComponents ${comp} 94 done 95 96 echo 97 IGCM_debug_Print 1 "DefineArrayFromSection : ListOfComponents" 98 IGCM_debug_Print 3 ${config_ListOfComponents[*]} 99 100 NbComponents=${#config_ListOfComponents[*]} 101 102 #================================== 103 # Define principal executable 104 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card Executable 105 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Executable Name 106 107 #================================== 108 # Define Outputs Name 109 IGCM_debug_Print 2 "Define Script_Output_Prefix and Exe_Output" 110 eval Script_Output_Prefix=${config_UserChoices_Script_Output_Prefix:='Script_Output'} 111 IGCM_debug_Print 3 "Script_Output_Prefix = ${Script_Output_Prefix}" 112 eval Exe_Output=out_${config_Executable_Name} 113 IGCM_debug_Print 3 "Exe_Output = ${Exe_Output}" 114 115 #================================== 116 117 #===================================================================# 118 # Prepare variables available for ${COMP}.card and ${COMP}.driver # 119 # But available to any son functions # 120 #===================================================================# 121 122 # Convert yyyy-mm-dd date to gregorian yyyymmdd 123 DateBegin=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateBegin} ) 124 DateEnd=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} ) 125 126 # Period Length In Days between DateBegin and DateEnd 127 (( ExperienceLengthInDays=$( IGCM_date_DaysBetweenGregorianDate ${DateEnd} ${DateBegin} ) + 1 )) 128 if [ ${ExperienceLengthInDays} -lt 0 ] ; then 129 IGCM_debug_Print 1 "Problem with dates in config.card : ${DateEnd} < ${DateBegin} ! You must check that." 130 IGCM_debug_Exit "IGCM_config_Initialize" " Wrong Dates." 131 IGCM_debug_Verif_Exit 132 fi 133 134 # Day and Year of Initial State (Given in julian format) 135 InitDay=$(( $( IGCM_date_ConvertGregorianDateToJulian $DateBegin ) % 1000 )) 136 InitYear=$(( $( IGCM_date_ConvertGregorianDateToJulian $DateBegin ) / 1000 )) 137 138 #================================== 139 # Restarts : Gerneral rule or local for each component ? 140 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card Restarts 141 142 echo 143 IGCM_debug_Print 1 "DefineArrayFromOption : config_Restarts" 144 145 for option in ${config_Restarts[*]} ; do 146 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Restarts ${option} 147 eval auxprint=\${config_Restarts_${option}} 148 IGCM_debug_Print 3 "${option} : ${auxprint}" 149 done 150 151 #================================================================# 152 # Test and Prepare directories # 153 #================================================================# 154 155 # ==> 4 kinds of input files : 156 # 1) R_INIT : Initial State Files (Etat0, carteveg) 157 # 2) R_BC : Boundary Conditions (Forcages, lai) 158 # 3) Parameters files (allready define through ${SUBMIT_DIR}) 159 # 4) Restarts files (allready define in IGCM_config_Initialize) 160 161 # Here we offer the possibility to redefine R_INIT, R_BC 162 # and PeriodNb through config.card 163 R_INIT=${config_UserChoices_R_INIT:=${R_IN}/INIT} 164 IGCM_debug_Print 2 "(Re)Define R_INIT, R_BC and PeriodNb" 165 IGCM_debug_Print 3 "R_INIT=${R_INIT}" 166 R_BC=${config_UserChoices_R_BC:=${R_IN}/BC} 167 IGCM_debug_Print 3 "R_BC=${R_BC}" 168 PeriodNb=${config_UserChoices_PeriodNb:=${PeriodNb}} 169 IGCM_debug_Print 3 "Loop in main Job with ${PeriodNb} period(s)" 170 171 # Test Archive input/output. 172 IGCM_sys_TestDirArchive ${ARCHIVE} 173 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDirArchive" 174 IGCM_sys_TestDirArchive ${R_IN} 175 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDirArchive" 176 177 #==================================================== 178 #R_SAVE : Job output directory 179 if ( [ ! X${config_UserChoices_SpaceName} = X ] && [ ! X${config_UserChoices_ExperimentName} = X ] ) ; then 180 FreeName=$( echo ${config_UserChoices_JobName} | sed 's/.*_//' ) 181 R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName} 182 R_BUFR=${R_BUF}/${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName} 183 R_DODS=${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName} 184 else 185 R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 186 R_BUFR=${R_BUF}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 187 R_DODS=${config_UserChoices_TagName}/${config_UserChoices_JobName} 188 fi 189 190 if ( ${FirstInitialize} ) ; then 191 IGCM_sys_MkdirArchive ${R_SAVE} 192 IGCM_sys_Mkdir ${R_BUFR} 193 else 194 IGCM_sys_TestDirArchive ${R_SAVE} 195 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDirArchive ${R_SAVE}" 196 197 IGCM_sys_TestDir ${R_BUFR} 198 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir ${R_BUFR}" 199 #Test state of run in run.card 200 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodState 201 202 if ( [ ${run_Configuration_PeriodState} != "Start" ] && [ ${run_Configuration_PeriodState} != "Running" ] && [ ${run_Configuration_PeriodState} != "OnQueue" ] && [ ${run_Configuration_PeriodState} != "Continue" ] ) ; then 203 echo 204 IGCM_debug_Print 1 "!! Error in run.card with PeriodState : " ${run_Configuration_PeriodState} "!!" 205 IGCM_debug_Print 1 "Try running ${libIGCM}/clean_month.job to fix this" 206 IGCM_debug_Exit 207 IGCM_debug_Verif_Exit 208 fi 209 fi 210 211 #================================== 212 # Post : 213 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card Post 214 215 echo 216 IGCM_debug_Print 1 "DefineArrayFromOption : config_Post" 217 218 for option in ${config_Post[*]} ; do 219 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Post ${option} 220 eval auxprint=\${config_Post_${option}} 221 IGCM_debug_Print 3 "${option} : ${auxprint}" 222 done 223 224 #==================================================== 225 # Define REBUILD_DIR : where we store files needing rebuild process 226 if [ X${config_Post_RebuildFromArchive} = Xtrue ] ; then 227 REBUILD_DIR=${R_SAVE}/TMP 228 IGCM_sys_MkdirArchive ${REBUILD_DIR} 229 else 230 REBUILD_DIR=${BIG_DIR}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 231 IGCM_sys_MkdirWork ${REBUILD_DIR} 232 fi 233 234 #==================================================== 235 # Experience type : DEB(ug), DEV(elopment), RUN 236 if [ X${JobType} != XRUN ] ; then 20 237 echo 21 IGCM_debug_Print 1 "IGCM_config_Initialize" 22 23 if [ ! -r ${SUBMIT_DIR}/run.card ]; then 24 #================================================# 25 # The file run.card doesn't exist # 26 #================================================# 27 FirstInitialize=true 28 #copy initial run.card 29 IGCM_sys_Cp ${SUBMIT_DIR}/run.card.init ${SUBMIT_DIR}/run.card 30 IGCM_debug_Print 2 "run.card copied from run.card.init" 31 else 32 FirstInitialize=false 33 IGCM_debug_Print 2 "run.card exists" 238 echo "====================================================" 239 echo "libIGCM JOB is NOT in RUN type mode." 240 echo "!! OUTPUT files will NOT be PROTECTED !!" 241 echo "Be carefull : you can ERASE the result of this job !" 242 243 case ${JobType} in 244 DEB) 245 echo "DEBUG mode : activation of 'set -vx' mode." 246 echo "DEBUG mode : no protection for output files." 247 echo "DEBUG mode : if active force asynchronous rebuild frequency to PeriodLength frequency." 248 ;; 249 DEV) 250 echo "DEVelopment mode : no protection for output files." 251 echo "DEVelopment mode : if active force asynchronous rebuild frequency to PeriodLength frequency." 252 ;; 253 esac 254 255 if ( [ X${config_Post_RebuildFrequency} != XNONE ] && [ ${DRYRUN} -eq 0 ] ) ; then 256 if [ X${config_Post_RebuildFrequency} != X${config_UserChoices_PeriodLength} ] ; then 257 echo "------------" 258 echo "WARNING : Job is NOT in RUN mode then we will force REBUILD Frequency" 259 echo " to PeriodLength : ${config_UserChoices_PeriodLength}" 260 echo "------------" 261 config_Post_RebuildFrequency=${config_UserChoices_PeriodLength} 262 fi 34 263 fi 35 36 # Test modipsl tree existence. 37 IGCM_sys_TestDir ${MODIPSL} 38 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 39 IGCM_sys_TestDir ${libIGCM} 40 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 41 IGCM_sys_TestDir ${R_EXE} 42 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 43 IGCM_sys_TestDir ${SUBMIT_DIR} 44 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDir" 45 46 if ( $DEBUG_debug ) ; then 47 echo "Keep trace of inital SUBMIT_DIR : " 48 ls -lta ${SUBMIT_DIR} 49 fi 50 51 #================================== 52 53 typeset option auxprint CompatibilityTag 54 # Read libIGCM compatibility version in config.card 55 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Compatibility libIGCM 56 eval CompatibilityTag=${config_Compatibility_libIGCM} > /dev/null 2>&1 57 58 if [ ! "${CompatibilityTag}" = "${libIGCM_CurrentTag}" ] ; then 59 IGCM_debug_Exit "config.card is not compatible with libIGCM version ${libIGCM_CurrentTag} see libIGCM FAQ http://wiki.ipsl.jussieu.fr/wiki_ipsl/IGCMG/libIGCM/DocUtilisateur/FAQ ." 60 fi 61 62 #================================== 63 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card UserChoices 64 65 for option in ${config_UserChoices[*]} ; do 66 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card UserChoices ${option} 67 done 264 echo "====================================================" 68 265 echo 69 IGCM_debug_Print 1 "DefineArrayFromOption : config_UserChoices" 70 # Name Space of this experience 71 if [ X${config_UserChoices_SpaceName} != X ] ; then 72 IGCM_debug_PrintVariables 3 config_UserChoices_SpaceName 73 fi 74 # Expericence class of the run 75 if [ X${config_UserChoices_ExperimentName} != X ] ; then 76 IGCM_debug_PrintVariables 3 config_UserChoices_ExperimentName 77 fi 78 IGCM_debug_PrintVariables 3 config_UserChoices_JobName 79 if [ 3 -le ${Verbosity} ] ; then 80 echo "--------------Debug3-->" "config_UserChoices_LongName=" 81 echo "--------------Debug3-->" \"${config_UserChoices_LongName}\" 82 fi 83 IGCM_debug_PrintVariables 3 config_UserChoices_TagName 84 IGCM_debug_PrintVariables 3 config_UserChoices_CalendarType 85 IGCM_debug_PrintVariables 3 config_UserChoices_DateBegin 86 IGCM_debug_PrintVariables 3 config_UserChoices_DateEnd 87 IGCM_debug_PrintVariables 3 config_UserChoices_PeriodLength 88 89 #================================== 90 91 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card ListOfComponents 92 for comp in ${config_ListOfComponents[*]} ; do 93 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/config.card ListOfComponents ${comp} 94 done 95 96 echo 97 IGCM_debug_Print 1 "DefineArrayFromSection : ListOfComponents" 98 IGCM_debug_Print 3 ${config_ListOfComponents[*]} 99 100 NbComponents=${#config_ListOfComponents[*]} 101 102 #================================== 103 # Define principal executable 104 105 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card Executable 106 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Executable Name 107 108 #================================== 109 # Define Outputs Name 110 IGCM_debug_Print 2 "Define Script_Output_Prefix and Exe_Output" 111 eval Script_Output_Prefix=${config_UserChoices_Script_Output_Prefix:='Script_Output'} 112 IGCM_debug_Print 3 "Script_Output_Prefix = ${Script_Output_Prefix}" 113 eval Exe_Output=out_${config_Executable_Name} 114 IGCM_debug_Print 3 "Exe_Output = ${Exe_Output}" 115 116 #================================== 117 118 #===================================================================# 119 # Prepare variables available for ${COMP}.card and ${COMP}.driver # 120 # But available to any son functions # 121 #===================================================================# 122 123 # Convert yyyy-mm-dd date to gregorian yyyymmdd 124 DateBegin=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateBegin} ) 125 DateEnd=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} ) 126 127 # Period Length In Days between DateBegin and DateEnd 128 (( ExperienceLengthInDays=$( IGCM_date_DaysBetweenGregorianDate ${DateEnd} ${DateBegin} ) + 1 )) 129 if [ ${ExperienceLengthInDays} -lt 0 ] ; then 130 IGCM_debug_Print 1 "Problem with dates in config.card : ${DateEnd} < ${DateBegin} ! You must check that." 131 IGCM_debug_Exit "IGCM_config_Initialize" " Wrong Dates." 132 IGCM_debug_Verif_Exit 133 fi 134 135 # Day and Year of Initial State (Given in julian format) 136 InitDay=$(( $( IGCM_date_ConvertGregorianDateToJulian $DateBegin ) % 1000 )) 137 InitYear=$(( $( IGCM_date_ConvertGregorianDateToJulian $DateBegin ) / 1000 )) 138 139 #================================== 140 # Restarts : Gerneral rule or local for each component ? 141 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card Restarts 142 143 echo 144 IGCM_debug_Print 1 "DefineArrayFromOption : config_Restarts" 145 146 for option in ${config_Restarts[*]} ; do 147 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Restarts ${option} 148 eval auxprint=\${config_Restarts_${option}} 149 IGCM_debug_Print 3 "${option} : ${auxprint}" 150 done 151 152 #================================================================# 153 # Test and Prepare directories # 154 #================================================================# 155 156 # ==> 4 kinds of input files : 157 # 1) R_INIT : Initial State Files (Etat0, carteveg) 158 # 2) R_BC : Boundary Conditions (Forcages, lai) 159 # 3) Parameters files (allready define through ${SUBMIT_DIR}) 160 # 4) Restarts files (allready define in IGCM_config_Initialize) 161 162 # Here we offer the possibility to redefine R_INIT, R_BC 163 # and PeriodNb through config.card 164 R_INIT=${config_UserChoices_R_INIT:=${R_IN}/INIT} 165 IGCM_debug_Print 2 "(Re)Define R_INIT, R_BC and PeriodNb" 166 IGCM_debug_Print 3 "R_INIT=${R_INIT}" 167 R_BC=${config_UserChoices_R_BC:=${R_IN}/BC} 168 IGCM_debug_Print 3 "R_BC=${R_BC}" 169 PeriodNb=${config_UserChoices_PeriodNb:=${PeriodNb}} 170 IGCM_debug_Print 3 "Loop in main Job with ${PeriodNb} period(s)" 171 172 # Test Archive input/output. 173 IGCM_sys_TestDirArchive ${ARCHIVE} 174 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDirArchive" 175 IGCM_sys_TestDirArchive ${R_IN} 176 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDirArchive" 177 178 #==================================================== 179 #R_SAVE : Job output directory 180 if ( [ ! X${config_UserChoices_SpaceName} = X ] && [ ! X${config_UserChoices_ExperimentName} = X ] ) ; then 181 FreeName=$( echo ${config_UserChoices_JobName} | sed 's/.*_//' ) 182 R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName} 183 R_DODS=${config_UserChoices_TagName}/${config_UserChoices_SpaceName}/${config_UserChoices_ExperimentName}/${FreeName} 184 else 185 R_SAVE=${R_OUT}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 186 R_DODS=${config_UserChoices_TagName}/${config_UserChoices_JobName} 187 fi 188 189 if ( ${FirstInitialize} ) ; then 190 IGCM_sys_MkdirArchive ${R_SAVE} 191 else 192 IGCM_sys_TestDirArchive ${R_SAVE} 193 [ $? != 0 ] && IGCM_debug_Exit "IGCM_sys_TestDirArchive" 194 #Test state of run in run.card 195 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodState 196 197 if ( [ ${run_Configuration_PeriodState} != "Start" ] && [ ${run_Configuration_PeriodState} != "Running" ] && [ ${run_Configuration_PeriodState} != "OnQueue" ] && [ ${run_Configuration_PeriodState} != "Continue" ] ) ; then 198 echo 199 IGCM_debug_Print 1 "!! Error in run.card with PeriodState : " ${run_Configuration_PeriodState} "!!" 200 IGCM_debug_Print 1 "Try running ${libIGCM}/clean_month.job to fix this" 201 IGCM_debug_Exit 202 IGCM_debug_Verif_Exit 203 fi 204 fi 205 206 #================================== 207 # Post : 208 IGCM_card_DefineArrayFromSection ${SUBMIT_DIR}/config.card Post 209 210 echo 211 IGCM_debug_Print 1 "DefineArrayFromOption : config_Post" 212 213 for option in ${config_Post[*]} ; do 214 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Post ${option} 215 eval auxprint=\${config_Post_${option}} 216 IGCM_debug_Print 3 "${option} : ${auxprint}" 217 done 218 219 #==================================================== 220 # Define REBUILD_DIR : where we store files needing rebuild process 221 if [ X${config_Post_RebuildFromArchive} = Xtrue ] ; then 222 REBUILD_DIR=${R_SAVE}/TMP 223 IGCM_sys_MkdirArchive ${REBUILD_DIR} 224 else 225 REBUILD_DIR=${BIG_DIR}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 226 IGCM_sys_MkdirWork ${REBUILD_DIR} 227 fi 228 229 #==================================================== 230 # Experience type : DEB(ug), DEV(elopment), RUN 231 if [ X${JobType} != XRUN ] ; then 232 echo 233 echo "====================================================" 234 echo "libIGCM JOB is NOT in RUN type mode." 235 echo "!! OUTPUT files will NOT be PROTECTED !!" 236 echo "Be carefull : you can ERASE the result of this job !" 237 238 case ${JobType} in 239 DEB) 240 echo "DEBUG mode : activation of 'set -vx' mode." 241 echo "DEBUG mode : no protection for output files." 242 echo "DEBUG mode : if active force asynchronous rebuild frequency to PeriodLength frequency." 243 ;; 244 DEV) 245 echo "DEVelopment mode : no protection for output files." 246 echo "DEVelopment mode : if active force asynchronous rebuild frequency to PeriodLength frequency." 247 ;; 248 esac 249 250 if ( [ X${config_Post_RebuildFrequency} != XNONE ] && [ ${DRYRUN} -eq 0 ] ) ; then 251 if [ X${config_Post_RebuildFrequency} != X${config_UserChoices_PeriodLength} ] ; then 252 echo "------------" 253 echo "WARNING : Job is NOT in RUN mode then we will force REBUILD Frequency" 254 echo " to PeriodLength : ${config_UserChoices_PeriodLength}" 255 echo "------------" 256 config_Post_RebuildFrequency=${config_UserChoices_PeriodLength} 257 fi 258 fi 259 echo "====================================================" 260 echo 261 fi 262 263 #==================================================== 264 #R_OUT_KSH : Storage place for job output 265 #R_OUT_EXE : Storage place for binary used during simulation 266 R_OUT_KSH=${R_SAVE}/Out 267 R_OUT_EXE=${R_SAVE}/Exe 268 269 IGCM_debug_PopStack "IGCM_config_Initialize" 266 fi 267 268 #==================================================== 269 #R_OUT_KSH : Storage place for job output 270 #R_OUT_EXE : Storage place for binary used during simulation 271 R_OUT_KSH=${R_SAVE}/Out 272 R_OUT_EXE=${R_SAVE}/Exe 273 274 #==================================================== 275 #R_BUF_KSH : Buffer place for job output 276 #R_BUF_EXE : Buffer place for binary used during simulation 277 R_BUF_KSH=${R_BUFR}/Out 278 R_BUF_EXE=${R_BUFR}/Exe 279 280 IGCM_debug_PopStack "IGCM_config_Initialize" 270 281 } 271 282 … … 273 284 function IGCM_config_Analyse_PeriodLength 274 285 { 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 286 IGCM_debug_PushStack "IGCM_config_Analyse_PeriodLength" 287 288 typeset i 289 290 # Determine number of day(s) in PeriodLength : 291 case ${config_UserChoices_PeriodLength} in 292 *Y|*y) 293 PeriodLengthInYears=$( echo ${config_UserChoices_PeriodLength} | sed -e 's/[yY]//' ) 294 IGCM_debug_Print 2 "Number of years for PeriodLength : ${PeriodLengthInYears}" 295 PeriodLengthInDays=0 296 i=0 297 until [ $i -ge $PeriodLengthInYears ] ; do 298 (( PeriodLengthInDays = PeriodLengthInDays + $( IGCM_date_DaysInYear $(( year + i )) ) )) 299 (( i=i+1 )) 300 done 301 ;; 302 *M|*m) 303 PeriodLengthInMonths=$( echo ${config_UserChoices_PeriodLength} | sed -e 's/[mM]//' ) 304 IGCM_debug_Print 2 "Number of months for PeriodLength : ${PeriodLengthInMonths}" 305 PeriodLengthInDays=0 306 i=0 307 until [ $i -ge $PeriodLengthInMonths ] ; do 308 if [ $(( month + i )) -lt 13 ] ; then 309 (( PeriodLengthInDays = PeriodLengthInDays + $( IGCM_date_DaysInMonth $year $(( month + i )) ) )) 310 else 311 (( PeriodLengthInDays = PeriodLengthInDays + $( IGCM_date_DaysInMonth $year $(( month + i - 12 )) ) )) 312 fi 313 (( i=i+1 )) 314 done 315 ;; 316 *D|*d) 317 PeriodLengthInMonths=0 318 PeriodLengthInDays=$( echo ${config_UserChoices_PeriodLength} | sed -e 's/[dD]//' );; 319 *) 320 IGCM_debug_Exit "IGCM_config_Analyse_PeriodLength " ${config_UserChoices_PeriodLength} " invalid period length : choose in *Y, *M, *D." 321 IGCM_debug_Verif_Exit ;; 322 esac 323 324 IGCM_debug_PopStack "IGCM_config_Analyse_PeriodLength" 314 325 } 315 326 … … 317 328 function IGCM_config_Check 318 329 { 319 IGCM_debug_PushStack "IGCM_config_Check" 320 321 # If one of the following modulo is not zero : 322 # we will issue an error then explain and exit in 323 # AA_job IGCM_debug_Verif_Exit call before binary submission 324 330 IGCM_debug_PushStack "IGCM_config_Check" 331 332 # If one of the following modulo is not zero : 333 # we will issue an error then explain and exit in 334 # AA_job IGCM_debug_Verif_Exit call before binary submission 335 336 echo 337 IGCM_debug_Print 1 "IGCM_config_Check" 338 echo 339 340 typeset i 341 342 if ( [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] || [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then 343 AsynchronousRebuild=true 344 IGCM_debug_Print 1 "Asynchronous rebuild has been activated." 325 345 echo 326 IGCM_debug_Print 1 "IGCM_config_Check" 346 # modulo (RebuildFrequency and PeriodLength/TimeSeriesFrequency/SeasonalFrequency) must be zero 347 IGCM_debug_Print 1 "Check coherence between RebuildFrequency and PeriodLength" 348 IGCM_post_CheckModuloFrequency config_Post_RebuildFrequency config_UserChoices_PeriodLength 349 IGCM_debug_Print 1 "Check coherence between TimeSeriesFrequency and RebuildFrequency" 350 IGCM_post_CheckModuloFrequency config_Post_TimeSeriesFrequency config_Post_RebuildFrequency 351 IGCM_debug_Print 1 "Check coherence between SeasonalFrequency and RebuildFrequency" 352 IGCM_post_CheckModuloFrequency config_Post_SeasonalFrequency config_Post_RebuildFrequency 353 else 354 AsynchronousRebuild=false 355 IGCM_debug_Print 1 "Asynchronous rebuild has not been activated" 356 IGCM_debug_Print 1 "Proceed with standard post-treatment pathway" 327 357 echo 328 329 typeset i 330 331 if ( [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] || [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then 332 AsynchronousRebuild=true 333 IGCM_debug_Print 1 "Asynchronous rebuild has been activated." 334 echo 335 # modulo (RebuildFrequency and PeriodLength/TimeSeriesFrequency/SeasonalFrequency) must be zero 336 IGCM_debug_Print 1 "Check coherence between RebuildFrequency and PeriodLength" 337 IGCM_post_CheckModuloFrequency config_Post_RebuildFrequency config_UserChoices_PeriodLength 338 IGCM_debug_Print 1 "Check coherence between TimeSeriesFrequency and RebuildFrequency" 339 IGCM_post_CheckModuloFrequency config_Post_TimeSeriesFrequency config_Post_RebuildFrequency 340 IGCM_debug_Print 1 "Check coherence between SeasonalFrequency and RebuildFrequency" 341 IGCM_post_CheckModuloFrequency config_Post_SeasonalFrequency config_Post_RebuildFrequency 342 else 343 AsynchronousRebuild=false 344 IGCM_debug_Print 1 "Asynchronous rebuild has not been activated" 345 IGCM_debug_Print 1 "Proceed with standard post-treatment pathway" 346 echo 347 #modulo (TimeSeriesFrequency/SeasonalFrequency and PeriodLenght) must be zero 348 IGCM_debug_Print 1 "Check coherence between TimeSeriesFrequency and PeriodLength" 349 IGCM_post_CheckModuloFrequency config_Post_TimeSeriesFrequency config_UserChoices_PeriodLength 350 IGCM_debug_Print 1 "Check coherence between SeasonalFrequency and PeriodLength" 351 IGCM_post_CheckModuloFrequency config_Post_SeasonalFrequency config_UserChoices_PeriodLength 352 fi 353 354 #modulo (TimeSeriesFrequency and all Chunck2D) must be zero 355 NbJob=${#CHUNCK2D_SIZE[@]} 356 i=0 357 until [ $i -ge $NbJob ]; do 358 value=${CHUNCK2D_SIZE[${i}]} 359 IGCM_debug_Print 1 "Check coherence between All Chunck2D frequency and TimeSeriesFrequency" 360 IGCM_post_CheckModuloFrequency value config_Post_TimeSeriesFrequency 361 case ${value} in 362 *Y|*y) ;; 363 *) IGCM_debug_Print 1 "All ChunckJob2D frequency must be expressed in year *Y|*y in comp.card" 364 IGCM_debug_Exit "This will stop the job" ;; 365 esac 366 (( i=i+1 )) 367 done 368 369 #modulo (TimeSeriesFrequency and all Chunck3D) must be zero 370 NbJob=${#CHUNCK3D_SIZE[@]} 371 i=0 372 until [ $i -ge $NbJob ]; do 373 value=${CHUNCK3D_SIZE[${i}]} 374 IGCM_debug_Print 1 "Check coherence between All Chunck3D frequency and TimeSeriesFrequency" 375 IGCM_post_CheckModuloFrequency value config_Post_TimeSeriesFrequency 376 case ${value} in 377 *Y|*y) ;; 378 *) IGCM_debug_Print 1 "All ChunckJob3D frequency must be expressed in year *Y|*y in comp.card" 379 IGCM_debug_Exit "This will stop the job" ;; 380 esac 381 (( i=i+1 )) 382 done 383 384 IGCM_debug_PopStack "IGCM_config_Check" 358 #modulo (TimeSeriesFrequency/SeasonalFrequency and PeriodLenght) must be zero 359 IGCM_debug_Print 1 "Check coherence between TimeSeriesFrequency and PeriodLength" 360 IGCM_post_CheckModuloFrequency config_Post_TimeSeriesFrequency config_UserChoices_PeriodLength 361 IGCM_debug_Print 1 "Check coherence between SeasonalFrequency and PeriodLength" 362 IGCM_post_CheckModuloFrequency config_Post_SeasonalFrequency config_UserChoices_PeriodLength 363 fi 364 365 #modulo (TimeSeriesFrequency and all Chunck2D) must be zero 366 NbJob=${#CHUNCK2D_SIZE[@]} 367 i=0 368 until [ $i -ge $NbJob ]; do 369 value=${CHUNCK2D_SIZE[${i}]} 370 IGCM_debug_Print 1 "Check coherence between All Chunck2D frequency and TimeSeriesFrequency" 371 IGCM_post_CheckModuloFrequency value config_Post_TimeSeriesFrequency 372 case ${value} in 373 *Y|*y) ;; 374 *) IGCM_debug_Print 1 "All ChunckJob2D frequency must be expressed in year *Y|*y in comp.card" 375 IGCM_debug_Exit "This will stop the job" ;; 376 esac 377 (( i=i+1 )) 378 done 379 380 #modulo (TimeSeriesFrequency and all Chunck3D) must be zero 381 NbJob=${#CHUNCK3D_SIZE[@]} 382 i=0 383 until [ $i -ge $NbJob ]; do 384 value=${CHUNCK3D_SIZE[${i}]} 385 IGCM_debug_Print 1 "Check coherence between All Chunck3D frequency and TimeSeriesFrequency" 386 IGCM_post_CheckModuloFrequency value config_Post_TimeSeriesFrequency 387 case ${value} in 388 *Y|*y) ;; 389 *) IGCM_debug_Print 1 "All ChunckJob3D frequency must be expressed in year *Y|*y in comp.card" 390 IGCM_debug_Exit "This will stop the job" ;; 391 esac 392 (( i=i+1 )) 393 done 394 395 IGCM_debug_PopStack "IGCM_config_Check" 385 396 } 386 397 … … 388 399 function IGCM_config_PeriodStart 389 400 { 390 IGCM_debug_PushStack "IGCM_config_PeriodStart" 391 392 echo 393 IGCM_debug_Print 1 "IGCM_config_PeriodStart" 394 echo 395 396 if ( ${FirstInitialize} ) ; then 397 #================================================# 398 # Initialize date/period information # 399 #================================================# 400 401 IGCM_date_GetYearMonthDay $DateBegin year month day 402 IGCM_config_Analyse_PeriodLength 403 404 eval PeriodDateBegin=${DateBegin} > /dev/null 2>&1 405 PeriodDateEnd=$( IGCM_date_AddDaysToGregorianDate ${DateBegin} $(( ${PeriodLengthInDays} - 1 )) ) 406 eval CumulPeriod=1 > /dev/null 2>&1 407 408 #=================================================# 409 # Write updated run.card # 410 #=================================================# 411 412 #Correct run.card Configuration for this period 413 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodDateBegin ${PeriodDateBegin} 414 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodDateEnd ${PeriodDateEnd} 415 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration CumulPeriod ${CumulPeriod} 416 if [ X$( grep "SubmitPath" ${SUBMIT_DIR}/run.card ) != X ] ; then 417 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration SubmitPath ${SUBMIT_DIR} 418 fi 419 420 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "Running" 421 401 IGCM_debug_PushStack "IGCM_config_PeriodStart" 402 403 echo 404 IGCM_debug_Print 1 "IGCM_config_PeriodStart" 405 echo 406 407 if ( ${FirstInitialize} ) ; then 408 #================================================# 409 # Initialize date/period information # 410 #================================================# 411 412 IGCM_date_GetYearMonthDay $DateBegin year month day 413 IGCM_config_Analyse_PeriodLength 414 415 eval PeriodDateBegin=${DateBegin} > /dev/null 2>&1 416 PeriodDateEnd=$( IGCM_date_AddDaysToGregorianDate ${DateBegin} $(( ${PeriodLengthInDays} - 1 )) ) 417 eval CumulPeriod=1 > /dev/null 2>&1 418 419 #=================================================# 420 # Write updated run.card # 421 #=================================================# 422 423 #Correct run.card Configuration for this period 424 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodDateBegin ${PeriodDateBegin} 425 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodDateEnd ${PeriodDateEnd} 426 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration CumulPeriod ${CumulPeriod} 427 if [ X$( grep "SubmitPath" ${SUBMIT_DIR}/run.card ) != X ] ; then 428 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration SubmitPath ${SUBMIT_DIR} 429 fi 430 431 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "Running" 432 433 else 434 #================================================# 435 # The file run.card allready exist # 436 #================================================# 437 438 #Test state of run in run.card 439 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodState 440 if ( [ ${run_Configuration_PeriodState} != "Running" ] && [ ${run_Configuration_PeriodState} != "OnQueue" ] && [ ${run_Configuration_PeriodState} != "Continue" ] ) ; then 441 echo 442 IGCM_debug_Print 1 "!! Error in run.card with PeriodState : " ${run_Configuration_PeriodState} "!!" 443 IGCM_debug_Print 1 "Try running ${libIGCM}/clean_month.job to fix this" 444 echo 445 IGCM_debug_Exit 446 IGCM_debug_Verif_Exit 447 fi 448 449 #===================================# 450 # Read updated run.card # 451 #===================================# 452 453 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration OldPrefix 454 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodDateBegin 455 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodDateEnd 456 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration CumulPeriod 457 458 PeriodDateBegin=$( IGCM_date_ConvertFormatToGregorian ${run_Configuration_PeriodDateBegin} ) 459 PeriodDateEnd=$( IGCM_date_ConvertFormatToGregorian ${run_Configuration_PeriodDateEnd} ) 460 eval CumulPeriod="${run_Configuration_CumulPeriod}" > /dev/null 2>&1 461 462 LastPeriodDateEnd=$( echo ${run_Configuration_OldPrefix} | sed -e "s/${config_UserChoices_JobName}_//" ) 463 464 typeset LastDate 465 set +A LastDate -- $( echo ${LastPeriodDateEnd} | sed -e "s/\([0-9]\{${dY}\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1 \2 \3/" ) 466 LastYearDateEnd=${LastDate[0]} 467 LastMonthDateEnd=${LastDate[1]} 468 LastDayDateEnd=${LastDate[2]} 469 470 if [ ${Period} = 1 ]; then 471 # save last Job output 472 typeset LastPeriod iLastPeriod Last_Script_Output_Name 473 (( LastPeriod=CumulPeriod-PeriodNb )) 474 iLastPeriod=$( printf "%06d" ${LastPeriod} ) 475 Last_Script_Output_Name="${Script_Output_Prefix}_${config_UserChoices_JobName}.${iLastPeriod}" 476 Last_run_card="run.card.${iLastPeriod}" 477 #eval ls -l ${SUBMIT_DIR}/${Last_Script_Output_Name} 478 #eval IGCM_sys_Put_Out ${SUBMIT_DIR}/${Last_Script_Output_Name} ${R_BUF_KSH}/${Last_Script_Output_Name} > /dev/null 2>&1 479 IGCM_debug_Print 2 "Try to save previous ksh job output" 480 IGCM_sys_Cd ${SUBMIT_DIR}/ 481 IGCM_sys_PutBuffer_Out ${Last_Script_Output_Name} ${R_BUF_KSH}/${Last_Script_Output_Name}.$$ rw 482 483 IGCM_card_CheckConflict run.card 484 IGCM_sys_PutBuffer_Out ${SUBMIT_DIR}/run.card ${R_BUF_KSH}/${Last_run_card}.$$ rw 485 486 IGCM_sys_Cd ${RUN_DIR} 422 487 else 423 #================================================# 424 # The file run.card allready exist # 425 #================================================# 426 427 #Test state of run in run.card 428 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodState 429 if ( [ ${run_Configuration_PeriodState} != "Running" ] && [ ${run_Configuration_PeriodState} != "OnQueue" ] && [ ${run_Configuration_PeriodState} != "Continue" ] ) ; then 430 echo 431 IGCM_debug_Print 1 "!! Error in run.card with PeriodState : " ${run_Configuration_PeriodState} "!!" 432 IGCM_debug_Print 1 "Try running ${libIGCM}/clean_month.job to fix this" 433 echo 434 IGCM_debug_Exit 435 IGCM_debug_Verif_Exit 436 fi 437 438 #===================================# 439 # Read updated run.card # 440 #===================================# 441 442 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration OldPrefix 443 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodDateBegin 444 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration PeriodDateEnd 445 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/run.card Configuration CumulPeriod 446 447 PeriodDateBegin=$( IGCM_date_ConvertFormatToGregorian ${run_Configuration_PeriodDateBegin} ) 448 PeriodDateEnd=$( IGCM_date_ConvertFormatToGregorian ${run_Configuration_PeriodDateEnd} ) 449 eval CumulPeriod="${run_Configuration_CumulPeriod}" > /dev/null 2>&1 450 451 LastPeriodDateEnd=$( echo ${run_Configuration_OldPrefix} | sed -e "s/${config_UserChoices_JobName}_//" ) 452 453 typeset LastDate 454 set +A LastDate -- $( echo ${LastPeriodDateEnd} | sed -e "s/\([0-9]\{${dY}\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1 \2 \3/" ) 455 LastYearDateEnd=${LastDate[0]} 456 LastMonthDateEnd=${LastDate[1]} 457 LastDayDateEnd=${LastDate[2]} 458 459 if [ ${Period} = 1 ]; then 460 # save last Job output 461 typeset LastPeriod iLastPeriod Last_Script_Output_Name 462 (( LastPeriod=CumulPeriod-PeriodNb )) 463 iLastPeriod=$( printf "%06d" ${LastPeriod} ) 464 Last_Script_Output_Name="${Script_Output_Prefix}_${config_UserChoices_JobName}.${iLastPeriod}" 465 Last_run_card="run.card.${iLastPeriod}" 466 #eval ls -l ${SUBMIT_DIR}/${Last_Script_Output_Name} 467 #eval IGCM_sys_Put_Out ${SUBMIT_DIR}/${Last_Script_Output_Name} ${R_OUT_KSH}/${Last_Script_Output_Name} > /dev/null 2>&1 468 IGCM_debug_Print 2 "Try to save previous ksh job output" 469 IGCM_sys_Cd ${SUBMIT_DIR}/ 470 IGCM_sys_Put_Out ${Last_Script_Output_Name} ${R_OUT_KSH}/${Last_Script_Output_Name}.$$ rw 471 472 IGCM_card_CheckConflict run.card 473 IGCM_sys_Put_Out ${SUBMIT_DIR}/run.card ${R_OUT_KSH}/${Last_run_card}.$$ rw 474 475 IGCM_sys_Cd ${RUN_DIR} 476 else 477 unset FileToBeDeleted 478 fi 479 480 IGCM_date_GetYearMonthDay $PeriodDateBegin year month day 481 IGCM_config_Analyse_PeriodLength 482 483 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "Running" 484 485 fi 486 OldPrefix=${config_UserChoices_JobName}_${PeriodDateEnd} 487 488 # BEGIN: SHOULD GO IN A FUNCTION FROM libIGCM_date.ksh 489 # Compute year_m1 and year_p1 (year minus 1Y and year plus 1Y) 490 year_m1=$(( year - 1 )) 491 year_p1=$(( year + 1 )) 492 # Compute month_m1 (month minus 1M) 493 # Compute yyyymm_m1 (yyyymm minus 1M) 494 month_m1=$(( month - 1 )) 495 if [ ${month_m1} = 0 ]; then 496 month_m1=12 497 yyyymm_m1=${year_m1}12 498 elif [ ${month_m1} -le 9 ]; then 499 month_m1=0${month_m1} 500 yyyymm_m1=${year}${month_m1} 501 else 502 yyyymm_m1=${year}${month_m1} 488 unset FileToBeDeleted 503 489 fi 504 # Compute month_p1 (month plus 1M) 505 # Compute yyyymm_p1 (yyyymm plus 1M) 506 month_p1=$(( month + 1 )) 507 if [ ${month_p1} = 13 ]; then 508 month_p1=01 509 yyyymm_p1=${year_p1}01 510 elif [ ${month_p1} -le 9 ]; then 511 month_p1=0${month_p1} 512 yyyymm_p1=${year}${month_p1} 513 else 514 yyyymm_p1=${year}${month_p1} 490 491 IGCM_date_GetYearMonthDay $PeriodDateBegin year month day 492 IGCM_config_Analyse_PeriodLength 493 494 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "Running" 495 496 fi 497 OldPrefix=${config_UserChoices_JobName}_${PeriodDateEnd} 498 499 # BEGIN: SHOULD GO IN A FUNCTION FROM libIGCM_date.ksh 500 # Compute year_m1 and year_p1 (year minus 1Y and year plus 1Y) 501 year_m1=$(( year - 1 )) 502 year_p1=$(( year + 1 )) 503 # Compute month_m1 (month minus 1M) 504 # Compute yyyymm_m1 (yyyymm minus 1M) 505 month_m1=$(( month - 1 )) 506 if [ ${month_m1} = 0 ]; then 507 month_m1=12 508 yyyymm_m1=${year_m1}12 509 elif [ ${month_m1} -le 9 ]; then 510 month_m1=0${month_m1} 511 yyyymm_m1=${year}${month_m1} 512 else 513 yyyymm_m1=${year}${month_m1} 514 fi 515 # Compute month_p1 (month plus 1M) 516 # Compute yyyymm_p1 (yyyymm plus 1M) 517 month_p1=$(( month + 1 )) 518 if [ ${month_p1} = 13 ]; then 519 month_p1=01 520 yyyymm_p1=${year_p1}01 521 elif [ ${month_p1} -le 9 ]; then 522 month_p1=0${month_p1} 523 yyyymm_p1=${year}${month_p1} 524 else 525 yyyymm_p1=${year}${month_p1} 526 fi 527 #IGCM_debug_Print 1 "jg 1 month_m1 = ${month_m1} month_p1 = ${month_p1} " 528 #IGCM_debug_Print 1 "jg 1 calculate yyyymm_m1 = ${yyyymm_m1} " 529 #IGCM_debug_Print 1 "jg 1 calculate yyyymm_p1 = ${yyyymm_p1} " 530 531 # END: SHOULD GO IN A FUNCTION FROM libIGCM_date.ksh 532 533 #===================================================================# 534 # Prepare variables available for ${COMP}.card and ${COMP}.driver # 535 # But available to any son functions # 536 #===================================================================# 537 538 # Period Length In Days between DateBegin and DateCurrent (at end of period == PeriodDateEnd !) 539 (( SimulationLengthInDays = $( IGCM_date_DaysBetweenGregorianDate ${PeriodDateEnd} ${DateBegin} ) + 1 )) 540 541 # Debug Print : 542 IGCM_debug_Print 1 "IGCM_config_PeriodStart : Before Execution" 543 IGCM_debug_Print 1 "Year of simulation : ${year}" 544 IGCM_debug_Print 1 "Month of simulation : ${month}" 545 IGCM_debug_Print 1 "PeriodLengthInDays : ${PeriodLengthInDays}" 546 IGCM_debug_Print 1 "PeriodDateBegin : ${PeriodDateBegin}" 547 IGCM_debug_Print 1 "PeriodDateEnd : ${PeriodDateEnd}" 548 IGCM_debug_Print 1 "SimulationLengthInDays : ${SimulationLengthInDays}" 549 IGCM_debug_Print 1 "ExperienceLengthInDays : ${ExperienceLengthInDays}" 550 551 #================================================================# 552 # Prepare variables available for comp_finalyze # 553 #================================================================# 554 555 # Period for save files 556 eval DatesPeriod=${PeriodDateBegin}_${PeriodDateEnd} > /dev/null 2>&1 557 558 # Prefix for save files of this period 559 eval PREFIX=${config_UserChoices_JobName}_${DatesPeriod} > /dev/null 2>&1 560 561 # List of files that will be deleted in RUN_DIR after run 562 [ -f stack ] && FileToBeDeleted[0]="stack" 563 564 # Test if the same run as already been saved : 565 if [ X${JobType} = XRUN ] ; then 566 if [ ${DRYRUN} -le 0 ] ; then 567 if ( IGCM_sys_TestFileBuffer ${R_BUF_KSH}/${PREFIX}_${Exe_Output} ) ; then 568 IGCM_debug_Exit "IGCM_config_PeriodStart" "You are currently RErunning an old job." 569 IGCM_debug_Print 1 "Because of readonly permissions, you can't RErun a job when saved files" 570 IGCM_debug_Print 1 " are still in the ARCHIVE directory. You must deleted those files, or " 571 IGCM_debug_Print 1 " the whole ${R_SAVE} tree. See clean_month.job in ${libIGCM} directory." 572 IGCM_debug_Print 1 " This exit has been initiated because at least ${R_BUF_KSH}/${PREFIX}_${Exe_Output} exists." 573 IGCM_debug_Verif_Exit 574 fi 515 575 fi 516 #IGCM_debug_Print 1 "jg 1 month_m1 = ${month_m1} month_p1 = ${month_p1} " 517 #IGCM_debug_Print 1 "jg 1 calculate yyyymm_m1 = ${yyyymm_m1} " 518 #IGCM_debug_Print 1 "jg 1 calculate yyyymm_p1 = ${yyyymm_p1} " 519 520 # END: SHOULD GO IN A FUNCTION FROM libIGCM_date.ksh 521 522 #===================================================================# 523 # Prepare variables available for ${COMP}.card and ${COMP}.driver # 524 # But available to any son functions # 525 #===================================================================# 526 527 # Period Length In Days between DateBegin and DateCurrent (at end of period == PeriodDateEnd !) 528 (( SimulationLengthInDays = $( IGCM_date_DaysBetweenGregorianDate ${PeriodDateEnd} ${DateBegin} ) + 1 )) 529 530 # Debug Print : 531 IGCM_debug_Print 1 "IGCM_config_PeriodStart : Before Execution" 532 IGCM_debug_Print 1 "Year of simulation : ${year}" 533 IGCM_debug_Print 1 "Month of simulation : ${month}" 534 IGCM_debug_Print 1 "PeriodLengthInDays : ${PeriodLengthInDays}" 535 IGCM_debug_Print 1 "PeriodDateBegin : ${PeriodDateBegin}" 536 IGCM_debug_Print 1 "PeriodDateEnd : ${PeriodDateEnd}" 537 IGCM_debug_Print 1 "SimulationLengthInDays : ${SimulationLengthInDays}" 538 IGCM_debug_Print 1 "ExperienceLengthInDays : ${ExperienceLengthInDays}" 539 540 #================================================================# 541 # Prepare variables available for comp_finalyze # 542 #================================================================# 543 544 # Period for save files 545 eval DatesPeriod=${PeriodDateBegin}_${PeriodDateEnd} > /dev/null 2>&1 546 547 # Prefix for save files of this period 548 eval PREFIX=${config_UserChoices_JobName}_${DatesPeriod} > /dev/null 2>&1 549 550 # List of files that will be deleted in RUN_DIR after run 551 [ -f stack ] && FileToBeDeleted[0]="stack" 552 553 # Test if the same run as already been saved : 554 if [ X${JobType} = XRUN ] ; then 555 if [ ${DRYRUN} -le 0 ] ; then 556 if ( IGCM_sys_TestFileArchive ${R_OUT_KSH}/${PREFIX}_${Exe_Output} ) ; then 557 IGCM_debug_Exit "IGCM_config_PeriodStart" "You are currently RErunning an old job." 558 IGCM_debug_Print 1 "Because of readonly permissions, you can't RErun a job when saved files" 559 IGCM_debug_Print 1 " are still in the ARCHIVE directory. You must deleted those files, or " 560 IGCM_debug_Print 1 " the whole ${R_SAVE} tree. See clean_month.job in ${libIGCM} directory." 561 IGCM_debug_Print 1 " This exit has been initiated because at least ${R_OUT_KSH}/${PREFIX}_${Exe_Output} exists." 562 IGCM_debug_Verif_Exit 563 fi 564 fi 565 else 566 if ( IGCM_sys_TestFileArchive ${R_OUT_KSH}/${PREFIX}_${Exe_Output} ) ; then 567 IGCM_debug_Print 1 "IGCM_config_PeriodStart" "RErun an old job. Allowed in DEBUG or DEV mode." 568 fi 576 else 577 if ( IGCM_sys_TestFileBuffer ${R_BUF_KSH}/${PREFIX}_${Exe_Output} ) ; then 578 IGCM_debug_Print 1 "IGCM_config_PeriodStart" "RErun an old job. Allowed in DEBUG or DEV mode." 569 579 fi 570 571 ExecutionFail=false 572 573 IGCM_debug_PopStack "IGCM_config_PeriodStart" 580 fi 581 582 ExecutionFail=false 583 584 IGCM_debug_PopStack "IGCM_config_PeriodStart" 574 585 } 575 586 … … 577 588 function IGCM_config_SaveSourceModifications 578 589 { 579 580 581 582 583 584 585 590 IGCM_debug_PushStack "IGCM_config_SaveSourceModifications" 591 592 typeset ExeOutDateMax listVarEnv 593 ExeOutDateMax=$1 594 595 listVarEnv="ExeOutDateMax,R_OUT_EXE,PREFIX,SUBMIT_DIR" 596 IGCM_sys_RshMaster "\ 586 597 . ${libIGCM}/libIGCM_sys/libIGCM_sys.ksh; \ 587 598 export ExeOutDateMax=${ExeOutDateMax};\ 588 599 export R_OUT_EXE=${R_OUT_EXE};\ 589 600 export PREFIX=${PREFIX};\ … … 593 604 IGCM_sys_Qsub ${libIGCM}/SaveSourceModifications.job ${ExeOutDateMax} ${R_OUT_EXE} ${PREFIX} ${SUBMIT_DIR}" 594 605 595 606 IGCM_debug_PopStack "IGCM_config_SaveSourceModifications" 596 607 } 597 608 … … 599 610 function IGCM_config_PeriodEnd 600 611 { 601 602 603 604 605 606 607 608 609 610 IGCM_sys_Put_Out ${Exe_Output} ${R_OUT_KSH}/${PREFIX}_${Exe_Output}611 612 613 IGCM_card_CheckConflict run.card614 IGCM_sys_Put_Out ${SUBMIT_DIR}/run.card ${R_OUT_KSH}/run.card rw615 616 IGCM_debug_Print 1 "Check components binary : size and creation date"617 618 typeset LS_comp LS_bin ExeDate ExeCpuLog NextExeSize LastCompExeSize619 typeset comp i620 typeset ExeNameIn ExeNameOut UpdateExe ExeSecDateMax621 622 #==================================#623 # Get last Exe Size #624 #==================================#625 626 (( i=0 ))627 if ( ${FirstInitialize} ) ; then612 IGCM_debug_PushStack "IGCM_config_PeriodEnd" 613 614 echo 615 IGCM_debug_Print 1 "IGCM_config_PeriodEnd" 616 echo 617 618 #==================================# 619 # Save Job output # 620 #==================================# 621 IGCM_sys_PutBuffer_Out ${Exe_Output} ${R_BUF_KSH}/${PREFIX}_${Exe_Output} 622 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${Exe_Output}" 623 624 IGCM_card_CheckConflict run.card 625 IGCM_sys_PutBuffer_Out ${SUBMIT_DIR}/run.card ${R_BUF_KSH}/run.card rw 626 627 IGCM_debug_Print 1 "Check components binary : size and creation date" 628 629 typeset LS_comp LS_bin ExeDate ExeCpuLog NextExeSize LastCompExeSize 630 typeset comp i 631 typeset ExeNameIn ExeNameOut UpdateExe ExeSecDateMax 632 633 #==================================# 634 # Get last Exe Size # 635 #==================================# 636 637 (( i=0 )) 638 if ( ${FirstInitialize} ) ; then 628 639 run_Log_LastExeSize="" 629 640 for comp in ${config_ListOfComponents[*]} ; do 630 631 641 run_Log_LastExeSize[$i]=0 642 (( i=i+1 )) 632 643 done 633 else644 else 634 645 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/run.card Log LastExeSize 635 fi636 #==================================#637 # And Build ExeDate #638 #==================================#639 640 # ExeDate = ATM_Jun_12_09:34-SRF_Jun_12_09:34-OCE_Jun_12_09:34-ICE_Jun_12_09:34-CPL_Jun_12_09:33641 # Would be nice to have next line but no way to format ls output (need to ls -l --time-style "+%Y-%m-%dT%H:%M")642 # ExeDate = ATM_2009-06-12T09:34+SRF_2009-06-12T09:34+OCE_2009-06-12T09:34+ICE_2009-06-12T09:34+CPL_2009-06-12T09:34643 ExeDate=""644 NextExeSize="( "645 (( i=0 ))646 UpdateExe=false647 (( ExeSecDateMax = 0 ))648 for comp in ${config_ListOfComponents[*]} ; do646 fi 647 #==================================# 648 # And Build ExeDate # 649 #==================================# 650 651 # ExeDate = ATM_Jun_12_09:34-SRF_Jun_12_09:34-OCE_Jun_12_09:34-ICE_Jun_12_09:34-CPL_Jun_12_09:33 652 # Would be nice to have next line but no way to format ls output (need to ls -l --time-style "+%Y-%m-%dT%H:%M") 653 # ExeDate = ATM_2009-06-12T09:34+SRF_2009-06-12T09:34+OCE_2009-06-12T09:34+ICE_2009-06-12T09:34+CPL_2009-06-12T09:34 654 ExeDate="" 655 NextExeSize="( " 656 (( i=0 )) 657 UpdateExe=false 658 (( ExeSecDateMax = 0 )) 659 for comp in ${config_ListOfComponents[*]} ; do 649 660 650 661 IGCM_debug_Print 3 ${comp} … … 654 665 # Only if we really have an executable for the component : 655 666 if [ X${ExeNameIn} = X\"\" ] ; then 656 657 667 # If there is no exe file for this component 668 (( ExeSize=0 )) 658 669 else 659 660 661 662 663 664 665 666 667 668 669 670 eval LS_bin=${R_EXE}/${ExeNameIn} 671 IGCM_sys_FileSize ${LS_bin} ExeSize 672 673 set +A LS_comp -- $( LC_TIME=en_US ls -l ${LS_bin} ) 674 if [ X${ExeDate} = X ] ; then 675 # First component exe date 676 ExeDate=${comp}_${LS_comp[5]}_${LS_comp[6]} 677 else 678 ExeDate=${ExeDate}-${comp}_${LS_comp[5]}_${LS_comp[6]} 679 fi 680 ExeDate=${ExeDate}_${LS_comp[7]} 670 681 fi 671 682 672 683 if [ ${i} -eq 0 ] ; then 673 674 684 # First component 685 NextExeSize="( "${ExeSize} 675 686 else 676 687 NextExeSize=${NextExeSize}", "${ExeSize} 677 688 fi 678 689 eval LastCompExeSize=${run_Log_LastExeSize[$i]} … … 680 691 681 692 if [ ${ExeSize} -ne ${LastCompExeSize} ] ; then 682 683 684 685 686 687 688 689 690 691 692 693 694 695 693 if ( ${FirstInitialize} ) ; then 694 IGCM_debug_Print 1 "Save first ${ExeNameIn} in ${R_OUT_EXE} !" 695 else 696 IGCM_debug_Print 1 "${ExeNameIn} has changed in ${R_EXE} !" 697 IGCM_debug_Print 1 "Save latest ${ExeNameIn} in ${R_OUT_EXE} !" 698 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=${ExeNameOut} 699 fi 700 eval IGCM_sys_Put_Out ${ExeNameOut} ${R_OUT_EXE}/${PREFIX}_${ExeNameIn} rw 701 UpdateExe=true 702 703 IGCM_sys_GetDate_FichWork ${LS_bin} ExeSecDate 704 if [ $ExeSecDateMax -lt $ExeSecDate ] ; then 705 ExeSecDateMax=$ExeSecDate 706 fi 696 707 fi 697 done 698 699 if ( ${UpdateExe} ) ; then 700 echo "Launch SaveSourceModifications." 701 IGCM_config_SaveSourceModifications ${ExeSecDateMax} 702 fi 703 704 NextExeSize=${NextExeSize}" )" 705 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Log LastExeSize "${NextExeSize}" 706 707 if [ ${DRYRUN} -le 1 ] ; then 708 done 709 710 # SD : switch off for now 711 # if ( ${UpdateExe} ) ; then 712 # echo "Launch SaveSourceModifications." 713 # IGCM_config_SaveSourceModifications ${ExeSecDateMax} 714 # fi 715 716 NextExeSize=${NextExeSize}" )" 717 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Log LastExeSize "${NextExeSize}" 718 719 if [ ${DRYRUN} -le 1 ] ; then 708 720 tail -1500 ${Exe_Output} > ${Exe_Output}_tail.txt 709 721 ExeCpuLog=$( gawk -f ${libIGCM}/libIGCM_sys/IGCM_add_out.awk ${Exe_Output}_tail.txt ) 710 722 RET=$? 711 723 if [ $RET -eq 0 ] ; then 712 713 714 715 724 # ExeCpuLog variable contents 5 fields 725 echo "${CumulPeriod} ${PeriodDateBegin} ${PeriodDateEnd} ${ExeCpuLog} ${ExeDate}" | \ 726 gawk '{printf("# %11d | %15s | %15s | %19s | %19s | %15.5f | %15.5f | %15.5f | %s\n", \ 727 $1,$2,$3,$4,$5,$6,$7,$8,$9)}' >> ${SUBMIT_DIR}/run.card 716 728 fi 717 729 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${Exe_Output}_tail.txt" 718 fi719 720 # All was right ? no ? then we stop.721 IGCM_debug_Verif_Exit722 723 # If all was OK, we can delete all files not necessary for next Job724 echo725 IGCM_debug_Print 1 "Files that will be deleted before next period-run : "726 727 if [ ${DRYRUN} -le 2 ] ; then730 fi 731 732 # All was right ? no ? then we stop. 733 IGCM_debug_Verif_Exit 734 735 # If all was OK, we can delete all files not necessary for next Job 736 echo 737 IGCM_debug_Print 1 "Files that will be deleted before next period-run : " 738 739 if [ ${DRYRUN} -le 2 ] ; then 728 740 for f in ${FileToBeDeleted[@]} ; do [ -f ${f} ] && ls -la $f ; [ -f ${f} ] && rm -f $f ; done 729 else741 else 730 742 echo ${FileToBeDeleted[@]} 731 fi732 733 #=================================================#734 # Modification of libIGCM behaviour #735 #=================================================#736 737 # To use this function, one must copy libIGCM.card from ${libIGCM} directory738 # and put it in ${SUBMIT_DIR} directory. After modifications of ${SUBMIT_DIR}/libIGCM.card,739 # variables define inside [UserChanges] will be modified for next Period of libIGCM main loop.740 if [ -f ${SUBMIT_DIR}/libIGCM.card ] ; then743 fi 744 745 #=================================================# 746 # Modification of libIGCM behaviour # 747 #=================================================# 748 749 # To use this function, one must copy libIGCM.card from ${libIGCM} directory 750 # and put it in ${SUBMIT_DIR} directory. After modifications of ${SUBMIT_DIR}/libIGCM.card, 751 # variables define inside [UserChanges] will be modified for next Period of libIGCM main loop. 752 if [ -f ${SUBMIT_DIR}/libIGCM.card ] ; then 741 753 echo 742 754 echo "########################################################################" … … 750 762 # Special treatments for libIGCM internals 751 763 for option in ${libIGCM_UserChanges[*]} ; do 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 764 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/libIGCM.card UserChanges ${option} 765 766 echo "We will change : ${option}." 767 eval echo "Previous value : " \${${option}} 768 eval echo "Change to : " \${libIGCM_UserChanges_${option}} 769 770 eval ${option}=\${libIGCM_UserChanges_${option}} 771 772 case ${option} in 773 config_UserChoices_DateEnd) 774 IGCM_debug_PrintVariables 1 config_UserChoices_DateEnd 775 DateEnd=$( IGCM_date_ConvertFormatToGregorian ${config_UserChoices_DateEnd} ) 776 777 # Period Length In Days between DateBegin and DateEnd 778 (( ExperienceLengthInDays=$( IGCM_date_DaysBetweenGregorianDate ${DateEnd} ${DateBegin} ) + 1 )) 779 if [ ${ExperienceLengthInDays} -lt 0 ] ; then 780 IGCM_debug_Print 1 "Problem with dates in libIGCM.card : ${DateEnd} < ${DateBegin} ! You must check that." 781 IGCM_debug_Exit "IGCM_PeriodEnd" " Wrong Dates." 782 IGCM_debug_Verif_Exit 783 fi 784 ;; 785 config_UserChoices_PeriodLength) 786 IGCM_debug_Print 1 "Change config_UserChoices_PeriodLength=${config_UserChoices_PeriodLength}" 787 ;; 788 PeriodNb) 789 IGCM_debug_Print 1 "Loop in main Job with ${PeriodNb} period(s)" 790 ;; 791 config_Post_RebuildFrequency) 792 IGCM_debug_Print 1 "Change config_Post_RebuildFrequency=${config_Post_RebuildFrequency} : IGCM_post_Configure" 793 IGCM_post_Configure 794 ;; 795 config_Post_TimeSeriesFrequency) 796 IGCM_debug_Print 1 "Change config_Post_TimeSeriesFrequency = ${config_Post_TimeSeriesFrequency} : IGCM_post_Initialize" 797 IGCM_post_Configure 798 ;; 799 config_Post_SeasonalFrequency) 800 IGCM_debug_Print 1 "Change config_Post_SeasonalFrequency = ${config_Post_SeasonalFrequency} : IGCM_post_Initialize" 801 IGCM_post_Configure 802 ;; 803 esac 804 done 805 806 echo 807 echo "########################################################################" 808 echo 809 fi 810 811 #=================================================# 812 # Determine next computed period # 813 #=================================================# 814 815 PeriodDateBegin=$( IGCM_date_AddDaysToGregorianDate ${PeriodDateEnd} 1 ) 816 IGCM_date_GetYearMonthDay $PeriodDateBegin year month day 817 year_m1=$(( year - 1 )) 818 year_p1=$(( year + 1 )) 819 IGCM_config_Analyse_PeriodLength 820 PeriodDateEnd=$( IGCM_date_AddDaysToGregorianDate ${PeriodDateBegin} $(( ${PeriodLengthInDays} - 1 )) ) 821 822 # Debug Print : 823 echo 824 IGCM_debug_Print 1 "IGCM_config_PeriodEnd : Preparing Next Execution" 825 IGCM_debug_Print 1 "PeriodDateBegin : ${PeriodDateBegin}" 826 IGCM_debug_Print 1 "PeriodDateEnd : ${PeriodDateEnd}" 827 IGCM_debug_Print 1 "PeriodLengthInDays : ${PeriodLengthInDays}" 828 829 PeriodDateBegin=$( IGCM_date_ConvertFormatToHuman ${PeriodDateBegin} ) 830 PeriodDateEnd=$( IGCM_date_ConvertFormatToHuman ${PeriodDateEnd} ) 831 832 (( CumulPeriod = CumulPeriod + 1 )) 833 834 # Debug Print : 835 echo 836 IGCM_debug_Print 3 "PeriodDateBegin Human : ${PeriodDateBegin}" 837 IGCM_debug_Print 3 "PeriodDateEnd Human : ${PeriodDateEnd}" 838 IGCM_debug_Print 3 "CumulPeriod : ${CumulPeriod}" 839 840 #=================================================# 841 # Write updated run.card # 842 #=================================================# 843 844 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration OldPrefix ${OldPrefix} 845 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodDateBegin ${PeriodDateBegin} 846 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodDateEnd ${PeriodDateEnd} 847 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration CumulPeriod ${CumulPeriod} 848 849 if ( ${FirstInitialize} ) ; then 850 # It's no more the first time 851 FirstInitialize=false 852 fi 853 854 IGCM_debug_PopStack "IGCM_config_PeriodEnd" 843 855 } 844 856 … … 846 858 function IGCM_config_Finalize 847 859 { 848 IGCM_debug_PushStack "IGCM_config_Finalize" 849 850 echo 851 IGCM_debug_Print 1 "IGCM_config_Finalize" 852 echo 853 854 if [ ${SimulationLengthInDays} -ge ${ExperienceLengthInDays} ] ; then 855 #==========================# 856 # End of entire simulation # 857 #==========================# 858 859 # Mail notification 860 IGCM_sys_SendMail 861 862 # 863 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "Completed" 864 IGCM_debug_Print 1 "Normal End of computation." 865 if ( $DEBUG_debug ) ; then 866 echo 867 IGCM_debug_Print 1 "Your files on ${R_OUT} :" 868 IGCM_sys_Tree ${R_SAVE} 869 fi 870 else 871 #=================# 872 # Submit next job # 873 #=================# 874 875 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "OnQueue" 876 877 # Name of next Ksh Script output : 878 eval Script_Output="${Script_Output_Prefix}_${config_UserChoices_JobName}.$( printf "%06d" ${CumulPeriod} )" 879 880 IGCM_debug_Print 1 "Submit next job" 881 # SUBMIT NEXT JOB from SUBMIT_DIR and come back in RUN_DIR 882 IGCM_sys_Cd ${SUBMIT_DIR} 883 # Keep only the 5 latest ${Script_Output_Prefix}_${config_UserChoices_JobName} 884 ScriptTot=$( ls ${Script_Output_Prefix}_${config_UserChoices_JobName}.?????? 2>/dev/null | wc -l ) 885 [ ${ScriptTot} -gt 5 ] && rm -f $( ls ${Script_Output_Prefix}_${config_UserChoices_JobName}.?????? | head -$(( ${ScriptTot} - 5 )) ) 886 # Submit next job and come back 887 IGCM_sys_Qsub ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} 888 IGCM_sys_Cd - 860 IGCM_debug_PushStack "IGCM_config_Finalize" 861 862 echo 863 IGCM_debug_Print 1 "IGCM_config_Finalize" 864 echo 865 866 if [ ${SimulationLengthInDays} -ge ${ExperienceLengthInDays} ] ; then 867 #==========================# 868 # End of entire simulation # 869 #==========================# 870 871 # Mail notification 872 IGCM_sys_SendMail 873 874 # 875 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "Completed" 876 IGCM_debug_Print 1 "Normal End of computation." 877 if ( $DEBUG_debug ) ; then 878 echo 879 IGCM_debug_Print 1 "Your files on ${R_SAVE} :" 880 IGCM_sys_Tree ${R_SAVE} 881 882 IGCM_debug_Print 1 "Your files on ${R_BUFR} :" 883 IGCM_sys_Tree ${R_BUFR} 889 884 fi 890 891 # Supress Non Deleted Boundary files 892 if [ ${DRYRUN} -le 2 ] ; then 893 IGCM_comp_DelFixeBoundaryFiles 894 ls -la 895 fi 896 897 # Clean ${RUN_DIR}=${RUN_DIR_PATH}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 898 # Only for production run (No clean up in DEV or DEB mode) 899 # and command sent from .. directory. 900 IGCM_sys_Cd .. 901 [ X${JobType} = XRUN ] && IGCM_sys_Rm -rf ${RUN_DIR} 902 903 IGCM_debug_PopStack "IGCM_config_Finalize" 885 else 886 #=================# 887 # Submit next job # 888 #=================# 889 890 IGCM_card_WriteOption ${SUBMIT_DIR}/run.card Configuration PeriodState "OnQueue" 891 892 # Name of next Ksh Script output : 893 eval Script_Output="${Script_Output_Prefix}_${config_UserChoices_JobName}.$( printf "%06d" ${CumulPeriod} )" 894 895 IGCM_debug_Print 1 "Submit next job" 896 # SUBMIT NEXT JOB from SUBMIT_DIR and come back in RUN_DIR 897 IGCM_sys_Cd ${SUBMIT_DIR} 898 # Keep only the 5 latest ${Script_Output_Prefix}_${config_UserChoices_JobName} 899 ScriptTot=$( ls ${Script_Output_Prefix}_${config_UserChoices_JobName}.?????? 2>/dev/null | wc -l ) 900 [ ${ScriptTot} -gt 5 ] && rm -f $( ls ${Script_Output_Prefix}_${config_UserChoices_JobName}.?????? | head -$(( ${ScriptTot} - 5 )) ) 901 # Submit next job and come back 902 IGCM_sys_Qsub ${SUBMIT_DIR}/Job_${config_UserChoices_JobName} 903 IGCM_sys_Cd - 904 fi 905 906 # Supress Non Deleted Boundary files 907 if [ ${DRYRUN} -le 2 ] ; then 908 IGCM_comp_DelFixeBoundaryFiles 909 ls -la 910 fi 911 912 # Clean ${RUN_DIR}=${RUN_DIR_PATH}/${config_UserChoices_TagName}/${config_UserChoices_JobName} 913 # Only for production run (No clean up in DEV or DEB mode) 914 # and command sent from .. directory. 915 IGCM_sys_Cd .. 916 [ X${JobType} = XRUN ] && IGCM_sys_Rm -rf ${RUN_DIR} 917 918 IGCM_debug_PopStack "IGCM_config_Finalize" 904 919 } 905 920
Note: See TracChangeset
for help on using the changeset viewer.