Changeset 544 for trunk/libIGCM/libIGCM_comp/libIGCM_comp.ksh
- Timestamp:
- 12/22/11 16:04:47 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libIGCM/libIGCM_comp/libIGCM_comp.ksh
r522 r544 15 15 function IGCM_comp_Initialize 16 16 { 17 17 IGCM_debug_PushStack "IGCM_comp_Initialize" 18 18 19 19 # Debug Print : 20 echo 21 IGCM_debug_Print 1 "IGCM_comp_Initialize" 22 echo 23 24 typeset comp compname comptagname CompatibilityTag auxprint card_UserChoices first_option option i j 25 for comp in ${config_ListOfComponents[*]} ; do 26 # Debug Print 27 IGCM_debug_Print 1 "Initialize ${comp} : ${compname} component." 28 29 # Define component 30 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/config.card ListOfComponents ${comp} 31 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 32 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 33 34 # Read libIGCM compatibility version in ${compname}.card 35 card=${SUBMIT_DIR}/COMP/${compname}.card 36 IGCM_card_DefineVariableFromOption ${card} Compatibility libIGCM 37 38 eval CompatibilityTag=\${${compname}_Compatibility_libIGCM} > /dev/null 2>&1 39 if [ ! "${CompatibilityTag}" = "${libIGCM_CurrentTag}" ] ; then 40 IGCM_debug_Exit "${compname}.card is not compatible with libIGCM version ${libIGCM_CurrentTag} see libIGCM FAQ http://wiki.ipsl.jussieu.fr/wiki_ipsl/IGCMG/libIGCM/DocUtilisateur/FAQ ." 41 fi 42 43 # Manage component executable 44 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/config.card Executable ${comp} 45 46 # Read component Write Frequency in config.card 47 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} WriteFrequency 48 # Debug Print : 49 eval auxprint=\${config_${comp}_WriteFrequency} 50 IGCM_debug_Print 1 "Write frequency for ${compname} : ${auxprint} " 51 #2> /dev/null 52 53 # Debug Print : 54 IGCM_debug_Print 2 "Initialize following component library" 55 56 # Source drivers in directory DRIVER if it exist 57 # else source them from directory COMP 58 if [ -d ${SUBMIT_DIR}/DRIVER ] ; then 59 IGCM_debug_Print 2 ${SUBMIT_DIR}/DRIVER/${compname}.driver 60 # Source component library 61 . ${SUBMIT_DIR}/DRIVER/${compname}.driver 62 else 63 IGCM_debug_Print 2 ${SUBMIT_DIR}/COMP/${compname}.driver 64 # Source component library 65 . ${SUBMIT_DIR}/COMP/${compname}.driver 66 fi 67 IGCM_debug_Print 3 "With tag : ${comptagname}" 68 69 # Debug Print 70 IGCM_debug_Print 3 "Initialize ${comp} output directory." 71 72 # Define ARCHIVED Dirs 73 eval R_OUT_${comp}=${R_SAVE}/${comp} 74 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}} 75 76 eval R_OUT_${comp}_O=\${R_OUT_${comp}}/Output 77 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}_O} 78 79 eval R_OUT_${comp}_R=\${R_OUT_${comp}}/Restart 80 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}_R} 81 82 eval R_OUT_${comp}_D=\${R_OUT_${comp}}/Debug 83 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}_D} 84 85 eval R_OUT_${comp}_O_I=\${R_OUT_${comp}_O}/INS 86 eval R_OUT_${comp}_O_H=\${R_OUT_${comp}_O}/HF 87 eval R_OUT_${comp}_O_D=\${R_OUT_${comp}_O}/DA 88 eval R_OUT_${comp}_O_M=\${R_OUT_${comp}_O}/MO 89 eval R_OUT_${comp}_O_Y=\${R_OUT_${comp}_O}/YE 90 91 # Define BUFFERED Dirs 92 eval R_BUF_${comp}=${R_BUFR}/${comp} 93 eval IGCM_sys_Mkdir \${R_BUF_${comp}} 94 95 eval R_BUF_${comp}_O=\${R_BUF_${comp}}/Output 96 eval IGCM_sys_Mkdir \${R_BUF_${comp}_O} 97 98 eval R_BUF_${comp}_R=\${R_BUF_${comp}}/Restart 99 eval IGCM_sys_Mkdir \${R_BUF_${comp}_R} 100 101 eval R_BUF_${comp}_D=\${R_BUF_${comp}}/Debug 102 eval IGCM_sys_Mkdir \${R_BUF_${comp}_D} 103 104 eval R_BUF_${comp}_O_I=\${R_BUF_${comp}_O}/INS 105 eval R_BUF_${comp}_O_H=\${R_BUF_${comp}_O}/HF 106 eval R_BUF_${comp}_O_D=\${R_BUF_${comp}_O}/DA 107 eval R_BUF_${comp}_O_M=\${R_BUF_${comp}_O}/MO 108 eval R_BUF_${comp}_O_Y=\${R_BUF_${comp}_O}/YE 109 110 # Read UserChoices section of component card 111 IGCM_debug_Print 2 "DefineArrayFromSection : ${compname}_UserChoices ${card}" 112 IGCM_card_DefineArrayFromSection ${card} UserChoices 113 eval first_option=\${${compname}_UserChoices[0]} > /dev/null 2>&1 114 # If section is not empty we define corresponding variables 115 if [ X${first_option} != X"Error:" ] ; then 116 if [ X${card_UserChoices[0]} != X ] ; then 117 unset card_UserChoices 118 fi 119 eval set +A card_UserChoices -- \${${compname}_UserChoices[*]} > /dev/null 2>&1 120 IGCM_debug_Print 3 "${compname}_UserChoices_values:" 121 for option in ${card_UserChoices[*]} ; do 122 IGCM_card_DefineVariableFromOption ${card} UserChoices ${option} 123 eval IGCM_debug_Print 3 "${option}=\${${compname}_UserChoices_${option}}" 124 done 125 fi 126 127 # Read and Build Output File stuff 128 IGCM_debug_Print 2 "DefineArrayFromOption : ${compname}_OutputFiles ${card}" 129 IGCM_card_DefineArrayFromOption ${card} OutputFiles List 130 ListFilesName=${compname}_OutputFiles_List 131 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 132 # 133 if [ X${FileName0} != X${NULL_STR} ] ; then 134 # 135 #IGCM_debug_Print 1 "Component : ${compname}" 136 # 137 # INITIALISATION 138 # 139 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 140 # 141 i=2 142 # 143 until [ $i -ge $NbFiles ]; do 144 # 145 eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1 146 # 147 if [ X${flag_post} != XNONE ] ; then 148 # 149 # First of all 150 # 151 IGCM_card_DefineArrayFromSection ${card} ${flag_post} 152 # 153 # Seasonal case : If option Seasonal is not found (old cards) put SEASONAL ON by default 154 # 155 # variable option allready typeset above 156 for option in $( eval echo \${${compname}_${flag_post}[*]} ) ; do 157 if [ ${option} = Seasonal ] ; then 158 FoundSeasonal=true 159 IGCM_card_DefineVariableFromOption ${card} ${flag_post} Seasonal 160 fi 161 done 162 # 163 if [ ! X${FoundSeasonal} = Xtrue ] ; then 164 eval ${compname}_${flag_post}_Seasonal=ON 165 fi 166 # 167 if [ $( eval echo \${${compname}_${flag_post}_Seasonal} ) = ON ] ; then 168 Seasonal=true 169 fi 170 171 # Dimension = vide si vieille card. 172 IGCM_card_DefineArrayFromOption ${card} ${flag_post} TimeSeriesVars 173 IGCM_card_DefineArrayFromOption ${card} ${flag_post} Patches 174 if [ X"$( eval echo \${${compname}_${flag_post}_TimeSeriesVars[*]} )" = X"Option not" ] ; then 175 # New TimeSeriesVar description, with 2D, 3D and associate ChunckJob. 176 ListDimension[0]=2D 177 ListDimension[1]=3D 178 TimeSeries=false 179 iLoop=${#ListDimension[*]} 180 j=0 181 until [ $j -ge ${iLoop} ]; do 182 Dimension=${ListDimension[${j}]} 183 IGCM_card_DefineArrayFromOption ${card} ${flag_post} TimeSeriesVars${Dimension} 184 IGCM_card_DefineVariableFromOption ${card} ${flag_post} ChunckJob${Dimension} 185 # 186 # Time series WITHOUT chunk 187 # 188 if [ ! $( eval echo \${${compname}_${flag_post}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 189 if [ $( eval echo \${${compname}_${flag_post}_ChunckJob${Dimension}} ) = NONE ] ; then 190 IGCM_debug_Print 3 "${Dimension} time series activated for ${flag_post}" 191 eval TimeSeries${Dimension}=true 192 fi 193 fi 194 # 195 # Time series WITH chunk 196 # 197 if [ ! $( eval echo \${${compname}_${flag_post}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 198 chunck_size=$( eval echo \${${compname}_${flag_post}_ChunckJob${Dimension}} ) 199 if [ ! ${chunck_size} = NONE ] && [ ! ${chunck_size} = OFF ] ; then 200 IGCM_debug_Print 3 "${Dimension} time series activated with chunck for ${flag_post}" 201 eval TimeSeriesChunck${Dimension}=true 202 eval set +A CHUNCK${Dimension}_COMP \${CHUNCK${Dimension}_COMP[*]} ${comp} 203 eval set +A CHUNCK${Dimension}_FLAG \${CHUNCK${Dimension}_FLAG[*]} ${i} 204 eval set +A CHUNCK${Dimension}_NAME \${CHUNCK${Dimension}_NAME[*]} ${flag_post} 205 eval set +A CHUNCK${Dimension}_SIZE \${CHUNCK${Dimension}_SIZE[*]} ${chunck_size} 206 fi 207 fi 208 (( j=j+1 )) 209 done 210 else 211 ListDimension[0]="" 212 TimeSeries=true 213 TimeSeries2D=false 214 TimeSeries3D=false 215 TimeSeriesChunck2D=false 216 TimeSeriesChunck3D=false 217 fi 218 fi 219 (( i=i+3 )) 220 done 221 fi 222 # Debug Print 223 IGCM_debug_Print 3 "Initialize ${compname} with driver." 224 # INIT component 225 ${comp}_Initialize 20 226 echo 21 IGCM_debug_Print 1 "IGCM_comp_Initialize" 22 echo 23 24 typeset comp compname comptagname CompatibilityTag auxprint card_UserChoices first_option option i j 25 for comp in ${config_ListOfComponents[*]} ; do 26 # Debug Print 27 IGCM_debug_Print 1 ${comp} 28 # Define component 29 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/config.card ListOfComponents ${comp} 30 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 31 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 32 33 # Read libIGCM compatibility version in ${compname}.card 34 card=${SUBMIT_DIR}/COMP/${compname}.card 35 IGCM_card_DefineVariableFromOption ${card} Compatibility libIGCM 36 37 eval CompatibilityTag=\${${compname}_Compatibility_libIGCM} > /dev/null 2>&1 38 if [ ! "${CompatibilityTag}" = "${libIGCM_CurrentTag}" ] ; then 39 IGCM_debug_Exit "${compname}.card is not compatible with libIGCM version ${libIGCM_CurrentTag} see libIGCM FAQ http://wiki.ipsl.jussieu.fr/wiki_ipsl/IGCMG/libIGCM/DocUtilisateur/FAQ ." 40 fi 41 42 # Manage component executable 43 IGCM_card_DefineArrayFromOption ${SUBMIT_DIR}/config.card Executable ${comp} 44 45 # Read component Write Frequency in config.card 46 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} WriteFrequency 47 # Debug Print : 48 eval auxprint=\${config_${comp}_WriteFrequency} 49 IGCM_debug_Print 1 "Write frequency for ${compname} : ${auxprint} " 50 #2> /dev/null 51 52 # Debug Print : 53 IGCM_debug_Print 2 "Initialize following component library" 54 55 # Source drivers in directory DRIVER if it exist 56 # else source them from directory COMP 57 if [ -d ${SUBMIT_DIR}/DRIVER ] ; then 58 IGCM_debug_Print 2 ${SUBMIT_DIR}/DRIVER/${compname}.driver 59 # Source component library 60 . ${SUBMIT_DIR}/DRIVER/${compname}.driver 61 else 62 IGCM_debug_Print 2 ${SUBMIT_DIR}/COMP/${compname}.driver 63 # Source component library 64 . ${SUBMIT_DIR}/COMP/${compname}.driver 65 fi 66 IGCM_debug_Print 3 "With tag : ${comptagname}" 67 68 69 # Debug Print 70 IGCM_debug_Print 3 "Initialize ${comp} output directory." 71 # Define Dirs 72 eval R_OUT_${comp}=${R_SAVE}/${comp} 73 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}} 74 75 eval R_OUT_${comp}_O=\${R_OUT_${comp}}/Output 76 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}_O} 77 78 eval R_OUT_${comp}_R=\${R_OUT_${comp}}/Restart 79 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}_R} 80 81 eval R_OUT_${comp}_D=\${R_OUT_${comp}}/Debug 82 eval IGCM_sys_MkdirArchive \${R_OUT_${comp}_D} 83 84 eval R_OUT_${comp}_O_I=\${R_OUT_${comp}_O}/INS 85 eval R_OUT_${comp}_O_H=\${R_OUT_${comp}_O}/HF 86 eval R_OUT_${comp}_O_D=\${R_OUT_${comp}_O}/DA 87 eval R_OUT_${comp}_O_M=\${R_OUT_${comp}_O}/MO 88 eval R_OUT_${comp}_O_Y=\${R_OUT_${comp}_O}/YE 89 90 # Read UserChoices section of component card 91 IGCM_debug_Print 2 "DefineArrayFromSection : ${compname}_UserChoices ${card}" 92 IGCM_card_DefineArrayFromSection ${card} UserChoices 93 eval first_option=\${${compname}_UserChoices[0]} > /dev/null 2>&1 94 # If section is not empty we define corresponding variables 95 if [ X${first_option} != X"Error:" ] ; then 96 if [ X${card_UserChoices[0]} != X ] ; then 97 unset card_UserChoices 98 fi 99 eval set +A card_UserChoices -- \${${compname}_UserChoices[*]} > /dev/null 2>&1 100 IGCM_debug_Print 3 "${compname}_UserChoices_values:" 101 for option in ${card_UserChoices[*]} ; do 102 IGCM_card_DefineVariableFromOption ${card} UserChoices ${option} 103 eval IGCM_debug_Print 3 "${option}=\${${compname}_UserChoices_${option}}" 104 done 105 fi 106 107 # Read and Build Output File stuff 108 IGCM_debug_Print 2 "DefineArrayFromOption : ${compname}_OutputFiles ${card}" 109 IGCM_card_DefineArrayFromOption ${card} OutputFiles List 110 ListFilesName=${compname}_OutputFiles_List 111 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 112 # 113 if [ X${FileName0} != X${NULL_STR} ] ; then 114 # 115 #IGCM_debug_Print 1 "Component : ${compname}" 116 # 117 # INITIALISATION 118 # 119 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 120 # 121 i=2 122 # 123 until [ $i -ge $NbFiles ]; do 124 # 125 eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1 126 # 127 if [ X${flag_post} != XNONE ] ; then 128 # 129 # First of all 130 # 131 IGCM_card_DefineArrayFromSection ${card} ${flag_post} 132 # 133 # Seasonal case : If option Seasonal is not found (old cards) put SEASONAL ON by default 134 # 135 # variable option allready typeset above 136 for option in $( eval echo \${${compname}_${flag_post}[*]} ) ; do 137 if [ ${option} = Seasonal ] ; then 138 FoundSeasonal=true 139 IGCM_card_DefineVariableFromOption ${card} ${flag_post} Seasonal 140 fi 141 done 142 # 143 if [ ! X${FoundSeasonal} = Xtrue ] ; then 144 eval ${compname}_${flag_post}_Seasonal=ON 145 fi 146 # 147 if [ $( eval echo \${${compname}_${flag_post}_Seasonal} ) = ON ] ; then 148 Seasonal=true 149 fi 150 151 # Dimension = vide si vieille card. 152 IGCM_card_DefineArrayFromOption ${card} ${flag_post} TimeSeriesVars 153 IGCM_card_DefineArrayFromOption ${card} ${flag_post} Patches 154 if [ X"$( eval echo \${${compname}_${flag_post}_TimeSeriesVars[*]} )" = X"Option not" ] ; then 155 # New TimeSeriesVar description, with 2D, 3D and associate ChunckJob. 156 ListDimension[0]=2D 157 ListDimension[1]=3D 158 TimeSeries=false 159 iLoop=${#ListDimension[*]} 160 j=0 161 until [ $j -ge ${iLoop} ]; do 162 Dimension=${ListDimension[${j}]} 163 IGCM_card_DefineArrayFromOption ${card} ${flag_post} TimeSeriesVars${Dimension} 164 IGCM_card_DefineVariableFromOption ${card} ${flag_post} ChunckJob${Dimension} 165 # 166 # Time series WITHOUT chunk 167 # 168 if [ ! $( eval echo \${${compname}_${flag_post}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 169 if [ $( eval echo \${${compname}_${flag_post}_ChunckJob${Dimension}} ) = NONE ] ; then 170 IGCM_debug_Print 3 "${Dimension} time series activated for ${flag_post}" 171 eval TimeSeries${Dimension}=true 172 fi 173 fi 174 # 175 # Time series WITH chunk 176 # 177 if [ ! $( eval echo \${${compname}_${flag_post}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 178 chunck_size=$( eval echo \${${compname}_${flag_post}_ChunckJob${Dimension}} ) 179 if [ ! ${chunck_size} = NONE ] && [ ! ${chunck_size} = OFF ] ; then 180 IGCM_debug_Print 3 "${Dimension} time series activated with chunck for ${flag_post}" 181 eval TimeSeriesChunck${Dimension}=true 182 eval set +A CHUNCK${Dimension}_COMP \${CHUNCK${Dimension}_COMP[*]} ${comp} 183 eval set +A CHUNCK${Dimension}_FLAG \${CHUNCK${Dimension}_FLAG[*]} ${i} 184 eval set +A CHUNCK${Dimension}_NAME \${CHUNCK${Dimension}_NAME[*]} ${flag_post} 185 eval set +A CHUNCK${Dimension}_SIZE \${CHUNCK${Dimension}_SIZE[*]} ${chunck_size} 186 fi 187 fi 188 (( j=j+1 )) 189 done 190 else 191 ListDimension[0]="" 192 TimeSeries=true 193 TimeSeries2D=false 194 TimeSeries3D=false 195 TimeSeriesChunck2D=false 196 TimeSeriesChunck3D=false 197 fi 198 fi 199 (( i=i+3 )) 200 done 201 fi 202 # Debug Print 203 IGCM_debug_Print 3 "Initialize ${compname} with driver." 204 # INIT component 205 ${comp}_Initialize 206 echo 207 done 208 209 IGCM_debug_PopStack "IGCM_comp_Initialize" 227 done 228 229 IGCM_debug_PopStack "IGCM_comp_Initialize" 210 230 } 211 231 … … 213 233 function IGCM_comp_PrepareDeletedFiles 214 234 { 215 216 217 218 219 220 221 222 223 235 IGCM_debug_PushStack "IGCM_comp_PrepareDeletedFiles" $@ 236 237 if [ X${2} != X. ] ; then 238 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=$( basename ${2} ) > /dev/null 2>&1 239 else 240 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=$( basename ${1} ) > /dev/null 2>&1 241 fi 242 243 IGCM_debug_PopStack "IGCM_comp_PrepareDeletedFiles" 224 244 } 225 245 … … 227 247 function IGCM_comp_GetInputInitialStateFiles 228 248 { 229 IGCM_debug_PushStack "IGCM_comp_GetInputInitialStateFiles" 230 231 # Debug Print : 232 echo 233 IGCM_debug_Print 1 "IGCM_comp_GetInputInitialStateFiles" 234 echo 235 236 # Only the first time step need InitialStateFiles 237 # otherwise it's BoundaryConditions 238 if ( ${FirstInitialize} ) ; then 239 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ 240 typeset file_in_ file_in file_out_ file_out do_init 241 for comp in ${config_ListOfComponents[*]} ; do 242 # Initialize 249 IGCM_debug_PushStack "IGCM_comp_GetInputInitialStateFiles" 250 251 # Debug Print : 252 echo 253 IGCM_debug_Print 1 "IGCM_comp_GetInputInitialStateFiles" 254 echo 255 256 # Only the first time step need InitialStateFiles 257 # otherwise it's BoundaryConditions 258 if ( ${FirstInitialize} ) ; then 259 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ 260 typeset file_in_ file_in file_out_ file_out do_init 261 for comp in ${config_ListOfComponents[*]} ; do 262 # Initialize 263 do_init="y" 264 # Do we need to bring initial state file for this component 265 if [ "${config_Restarts_OverRule}" = "y" ] ; then 266 eval do_init="n" 267 else 268 # Read component Restarts parameters 269 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} Restart 270 eval do_start=\${config_${comp}_Restart} > /dev/null 2>&1 271 if [ "${do_start}" = "y" ] ; then 272 do_init="n" 273 else 243 274 do_init="y" 244 # Do we need to bring initial state file for this component 245 if [ "${config_Restarts_OverRule}" = "y" ] ; then 246 eval do_init="n" 247 else 248 # Read component Restarts parameters 249 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} Restart 250 eval do_start=\${config_${comp}_Restart} > /dev/null 2>&1 251 if [ "${do_start}" = "y" ] ; then 252 do_init="n" 253 else 254 do_init="y" 255 fi 256 fi 257 258 if [ "${do_init}" = "y" ] ; then 259 # Define component 260 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 261 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 262 263 # Debug Print : 264 IGCM_debug_Print 3 "Initialisation files ${compname}" 265 266 card=${SUBMIT_DIR}/COMP/${compname}.card 267 268 IGCM_card_DefineArrayFromOption ${card} InitialStateFiles List 269 ListFilesName=${compname}_InitialStateFiles_List 270 271 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 272 if [ X${FileName0} != X${NULL_STR} ] ; then 273 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 274 (( i=0 )) 275 until [ $i -ge $NbFiles ]; do 276 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 277 eval file_in=${file_in_} 278 (( i_ = i+1 )) 279 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 280 eval file_out=${file_out_} 281 282 IGCM_sys_Get ${file_in} ${file_out} 283 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 284 285 (( i=i+2 )) 286 done 287 fi 288 fi 289 done 290 fi 291 IGCM_debug_PopStack "IGCM_comp_GetInputInitialStateFiles" 275 fi 276 fi 277 278 if [ "${do_init}" = "y" ] ; then 279 # Define component 280 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 281 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 282 283 # Debug Print : 284 IGCM_debug_Print 3 "Initialisation files ${compname}" 285 286 card=${SUBMIT_DIR}/COMP/${compname}.card 287 288 IGCM_card_DefineArrayFromOption ${card} InitialStateFiles List 289 ListFilesName=${compname}_InitialStateFiles_List 290 291 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 292 if [ X${FileName0} != X${NULL_STR} ] ; then 293 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 294 (( i=0 )) 295 until [ $i -ge $NbFiles ]; do 296 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 297 eval file_in=${file_in_} 298 (( i_ = i+1 )) 299 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 300 eval file_out=${file_out_} 301 302 IGCM_sys_Get ${file_in} ${file_out} 303 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 304 305 (( i=i+2 )) 306 done 307 fi 308 fi 309 done 310 fi 311 IGCM_debug_PopStack "IGCM_comp_GetInputInitialStateFiles" 292 312 } 293 313 … … 311 331 function IGCM_SmoothModulo 312 332 { 313 IGCM_debug_PushStack "IGCM_SmoothModulo" 314 typeset defVector ModValue 315 316 eval set +A defVector -- $( echo "${1}" | \ 317 gawk -F ':' '{print ($1 == "" ? 1 : $1) " " (NF==3 ? ($2 == "" ? 1 : $2) : 1) " " (NF==3 ? ($3 == "" ? -1 : $3) : ($2 == "" ? -1 : $2))}' ) 318 319 # Save Smooth Min and Max. Needed to call IGCM_sys_Get when appropriate 320 arr[1]=${defVector[0]} 321 arr[2]=${defVector[2]} 322 323 # Test limits : 324 # ${defVector[0]} <= ${2} <= ${defVector[2]} 325 # or ${defVector[2]} == -1 326 if ( [ ${2} -ge ${defVector[0]} ] && \ 327 ( [ ${2} -le ${defVector[2]} ] || \ 328 [ ${defVector[2]} -lt 0 ] ) ) ; then 329 # Test modulo 330 ModValue=$( expr \( ${2} - ${defVector[0]} \) % ${defVector[1]} ) 331 if [ ${ModValue} -eq 0 ] ; then 332 arr[3]=true 333 echo ${arr[@]} 334 IGCM_debug_PopStack "IGCM_SmoothModulo" 335 return 1 336 else 337 arr[3]=false 338 echo ${arr[@]} 339 IGCM_debug_PopStack "IGCM_SmoothModulo" 340 return 0 341 fi 333 IGCM_debug_PushStack "IGCM_SmoothModulo" 334 typeset defVector ModValue 335 336 eval set +A defVector -- $( echo "${1}" | \ 337 gawk -F ':' '{print ($1 == "" ? 1 : $1) " " (NF==3 ? ($2 == "" ? 1 : $2) : 1) " " (NF==3 ? ($3 == "" ? -1 : $3) : ($2 == "" ? -1 : $2))}' ) 338 339 # Save Smooth Min and Max. Needed to call IGCM_sys_Get when appropriate 340 arr[1]=${defVector[0]} 341 arr[2]=${defVector[2]} 342 343 # Test limits : 344 # ${defVector[0]} <= ${2} <= ${defVector[2]} 345 # or ${defVector[2]} == -1 346 if ( [ ${2} -ge ${defVector[0]} ] && ( [ ${2} -le ${defVector[2]} ] || [ ${defVector[2]} -lt 0 ] ) ) ; then 347 # Test modulo 348 ModValue=$( expr \( ${2} - ${defVector[0]} \) % ${defVector[1]} ) 349 if [ ${ModValue} -eq 0 ] ; then 350 arr[3]=true 351 echo ${arr[@]} 352 IGCM_debug_PopStack "IGCM_SmoothModulo" 353 return 1 342 354 else 343 arr[3]=false 344 echo ${arr[@]} 345 IGCM_debug_PopStack "IGCM_SmoothModulo" 346 return 0 347 fi 355 arr[3]=false 356 echo ${arr[@]} 357 IGCM_debug_PopStack "IGCM_SmoothModulo" 358 return 0 359 fi 360 else 361 arr[3]=false 362 echo ${arr[@]} 363 IGCM_debug_PopStack "IGCM_SmoothModulo" 364 return 0 365 fi 348 366 } 349 367 … … 351 369 function IGCM_comp_GetInputSmoothFiles 352 370 { 353 IGCM_debug_PushStack "IGCM_comp_GetInputSmoothFiles" 371 IGCM_debug_PushStack "IGCM_comp_GetInputSmoothFiles" 372 373 # Debug Print : 374 echo 375 IGCM_debug_Print 1 "IGCM_comp_GetInputSmoothFiles" 376 echo 377 378 typeset comp compname comptagname card ListFilesName FileName0 NbFiles j i i_ i__ 379 typeset file_in_ file_in file_out_ file_out ret SmoothDef aux val 380 381 for comp in ${config_ListOfComponents[*]} ; do 382 # Define component 383 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 384 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 354 385 355 386 # Debug Print : 356 echo 357 IGCM_debug_Print 1 "IGCM_comp_GetInputSmoothFiles" 358 echo 359 360 typeset comp compname comptagname card ListFilesName FileName0 NbFiles j i i_ i__ 361 typeset file_in_ file_in file_out_ file_out ret SmoothDef aux val 362 363 for comp in ${config_ListOfComponents[*]} ; do 364 # Define component 365 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 366 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 367 368 # Debug Print : 369 IGCM_debug_Print 3 "Smooth files ${compname}" 370 371 card=${SUBMIT_DIR}/COMP/${compname}.card 372 373 IGCM_card_DefineArrayFromOption ${card} SmoothFiles List 374 ListFilesName=${compname}_SmoothFiles_List 375 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 376 377 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != X"Section" ] ) ; then 378 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 379 380 (( i=0 )) 381 until [ $i -ge $NbFiles ]; do 382 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 383 eval file_in=${file_in_} 384 (( i_ = i+1 )) 385 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 386 eval file_out=${file_out_} 387 388 # define CumulPeriod definition for this file 389 (( i__ = i+2 )) 390 eval SmoothDef=\${${ListFilesName}[$i__]} 391 IGCM_debug_Print 3 " ${file_in} ${SmoothDef}" 392 aux=$( IGCM_SmoothModulo ${SmoothDef} ${CumulPeriod} ) 393 j=1 394 for val in ${aux} ; do 395 [ ${j} -eq 1 ] && SmoothMin=${val} 396 [ ${j} -eq 2 ] && SmoothMax=${val} 397 [ ${j} -eq 3 ] && ret=${val} 398 (( j=j+1 )) 399 done 400 [ ${SmoothMax} -eq -1 ] && SmoothMax=${CumulPeriod} 401 if ( [ X${ret} = Xtrue ] || ( [ ${Period} -eq 1 ] && [ ${CumulPeriod} -ge ${SmoothMin} ] && [ ${CumulPeriod} -le ${SmoothMax} ] ) ) ; then 402 #if ( [ X${ret} = Xtrue ] || [ ${Period} -eq 1 ] ) ; then 403 IGCM_sys_Get ${file_in} ${file_out} 404 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 405 fi 406 (( i=i+3 )) 407 done 387 IGCM_debug_Print 3 "Smooth files ${compname}" 388 389 card=${SUBMIT_DIR}/COMP/${compname}.card 390 391 IGCM_card_DefineArrayFromOption ${card} SmoothFiles List 392 ListFilesName=${compname}_SmoothFiles_List 393 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 394 395 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != X"Section" ] ) ; then 396 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 397 398 (( i=0 )) 399 until [ $i -ge $NbFiles ]; do 400 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 401 eval file_in=${file_in_} 402 (( i_ = i+1 )) 403 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 404 eval file_out=${file_out_} 405 406 # define CumulPeriod definition for this file 407 (( i__ = i+2 )) 408 eval SmoothDef=\${${ListFilesName}[$i__]} 409 IGCM_debug_Print 3 " ${file_in} ${SmoothDef}" 410 aux=$( IGCM_SmoothModulo ${SmoothDef} ${CumulPeriod} ) 411 j=1 412 for val in ${aux} ; do 413 [ ${j} -eq 1 ] && SmoothMin=${val} 414 [ ${j} -eq 2 ] && SmoothMax=${val} 415 [ ${j} -eq 3 ] && ret=${val} 416 (( j=j+1 )) 417 done 418 [ ${SmoothMax} -eq -1 ] && SmoothMax=${CumulPeriod} 419 if ( [ X${ret} = Xtrue ] || ( [ ${Period} -eq 1 ] && [ ${CumulPeriod} -ge ${SmoothMin} ] && [ ${CumulPeriod} -le ${SmoothMax} ] ) ) ; then 420 #if ( [ X${ret} = Xtrue ] || [ ${Period} -eq 1 ] ) ; then 421 IGCM_sys_Get ${file_in} ${file_out} 422 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 408 423 fi 409 done 410 411 IGCM_debug_PopStack "IGCM_comp_GetInputSmoothFiles" 424 (( i=i+3 )) 425 done 426 fi 427 done 428 429 IGCM_debug_PopStack "IGCM_comp_GetInputSmoothFiles" 412 430 } 413 431 … … 415 433 function IGCM_comp_GetInputBoundaryFiles 416 434 { 417 IGCM_debug_PushStack "IGCM_comp_GetInputBoundaryFiles" 435 IGCM_debug_PushStack "IGCM_comp_GetInputBoundaryFiles" 436 437 # Debug Print : 438 echo 439 IGCM_debug_Print 1 "IGCM_comp_GetInputBoundaryFiles" 440 echo 441 442 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ 443 typeset file_in_ file_in file_out_ file_out 444 445 if [ ${Period} = 1 ]; then 446 ListFixBoundary=" " 447 fi 448 449 for comp in ${config_ListOfComponents[*]} ; do 450 451 # Define component 452 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 453 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 418 454 419 455 # Debug Print : 420 echo 421 IGCM_debug_Print 1 "IGCM_comp_GetInputBoundaryFiles" 422 echo 423 424 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ 425 typeset file_in_ file_in file_out_ file_out 426 456 IGCM_debug_Print 3 "Boundary files ${compname}" 457 458 card=${SUBMIT_DIR}/COMP/${compname}.card 459 460 IGCM_card_DefineArrayFromOption ${card} BoundaryFiles List 461 ListFilesName=${compname}_BoundaryFiles_List 462 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 463 464 if [ X${FileName0} != X${NULL_STR} ] ; then 465 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 466 467 (( i=0 )) 468 until [ $i -ge $NbFiles ]; do 469 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 470 eval file_in=${file_in_} 471 (( i_ = i+1 )) 472 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 473 eval file_out=${file_out_} 474 475 IGCM_sys_Get ${file_in} ${file_out} 476 IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 477 478 (( i=i+2 )) 479 done 480 fi 481 482 # Get non deleted files 427 483 if [ ${Period} = 1 ]; then 428 ListFixBoundary=" " 429 fi 430 431 for comp in ${config_ListOfComponents[*]} ; do 432 433 # Define component 434 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 435 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 436 437 # Debug Print : 438 IGCM_debug_Print 3 "Boundary files ${compname}" 439 440 card=${SUBMIT_DIR}/COMP/${compname}.card 441 442 IGCM_card_DefineArrayFromOption ${card} BoundaryFiles List 443 ListFilesName=${compname}_BoundaryFiles_List 444 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 445 446 if [ X${FileName0} != X${NULL_STR} ] ; then 447 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 448 449 (( i=0 )) 450 until [ $i -ge $NbFiles ]; do 451 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 452 eval file_in=${file_in_} 453 (( i_ = i+1 )) 454 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 455 eval file_out=${file_out_} 456 457 IGCM_sys_Get ${file_in} ${file_out} 458 IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 459 460 (( i=i+2 )) 461 done 462 fi 463 464 # Get non deleted files 465 if [ ${Period} = 1 ]; then 466 467 IGCM_card_DefineArrayFromOption ${card} BoundaryFiles ListNonDel 468 ListFilesName=${compname}_BoundaryFiles_ListNonDel 469 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 470 471 if [ X${FileName0} != X${NULL_STR} ] ; then 472 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 473 474 (( i=0 )) 475 until [ $i -ge $NbFiles ]; do 476 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 477 eval file_in=${file_in_} 478 (( i_ = i+1 )) 479 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 480 eval file_out=${file_out_} 481 482 IGCM_sys_Get ${file_in} ${file_out} 483 484 if [ X${file_out} != X. ] ; then 485 ListFixBoundary=${ListFixBoundary}" "${file_out} 486 else 487 ListFixBoundary=${ListFixBoundary}" "$( basename ${file_in} ) 488 fi 489 490 (( i=i+2 )) 491 done 492 fi 493 fi 494 done 495 496 IGCM_debug_PopStack "IGCM_comp_GetInputBoundaryFiles" 484 485 IGCM_card_DefineArrayFromOption ${card} BoundaryFiles ListNonDel 486 ListFilesName=${compname}_BoundaryFiles_ListNonDel 487 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 488 489 if [ X${FileName0} != X${NULL_STR} ] ; then 490 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 491 492 (( i=0 )) 493 until [ $i -ge $NbFiles ]; do 494 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 495 eval file_in=${file_in_} 496 (( i_ = i+1 )) 497 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 498 eval file_out=${file_out_} 499 500 IGCM_sys_Get ${file_in} ${file_out} 501 502 if [ X${file_out} != X. ] ; then 503 ListFixBoundary=${ListFixBoundary}" "${file_out} 504 else 505 ListFixBoundary=${ListFixBoundary}" "$( basename ${file_in} ) 506 fi 507 508 (( i=i+2 )) 509 done 510 fi 511 fi 512 done 513 514 IGCM_debug_PopStack "IGCM_comp_GetInputBoundaryFiles" 497 515 } 498 516 … … 500 518 function IGCM_comp_DelFixeBoundaryFiles 501 519 { 502 503 504 505 506 507 508 509 510 511 512 520 IGCM_debug_PushStack "IGCM_comp_DelFixeBoundaryFiles" 521 522 # Debug Print : 523 echo 524 IGCM_debug_Print 1 "IGCM_comp_DelFixeBoundaryFiles" 525 echo 526 527 ls -l ${ListFixBoundary} 528 rm -f ${ListFixBoundary} 529 530 IGCM_debug_PopStack "IGCM_comp_DelFixeBoundaryFiles" 513 531 } 514 532 … … 516 534 function IGCM_comp_GetInputParametersFiles 517 535 { 518 IGCM_debug_PushStack "IGCM_comp_GetInputParametersFiles" 536 IGCM_debug_PushStack "IGCM_comp_GetInputParametersFiles" 537 538 # Debug Print : 539 echo 540 IGCM_debug_Print 1 "IGCM_comp_GetInputParametersFiles" 541 echo 542 543 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ file_in file_out 544 for comp in ${config_ListOfComponents[*]} ; do 545 # Define component 546 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 547 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 519 548 520 549 # Debug Print : 521 echo 522 IGCM_debug_Print 1 "IGCM_comp_GetInputParametersFiles" 523 echo 524 525 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ file_in file_out 526 for comp in ${config_ListOfComponents[*]} ; do 527 # Define component 528 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 529 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 530 531 # Debug Print : 532 IGCM_debug_Print 3 "Parameters ${compname}" 533 534 card=${SUBMIT_DIR}/COMP/${compname}.card 535 536 IGCM_card_DefineArrayFromOption ${card} ParametersFiles List 537 ListFilesName=${compname}_ParametersFiles_List 538 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 539 540 if [ X${FileName0} != X${NULL_STR} ] ; then 541 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 542 543 (( i=0 )) 544 until [ $i -ge $NbFiles ]; do 545 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 546 eval file_in=${file_in_} 547 (( i_ = i+1 )) 548 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 549 eval file_out=${file_out_} 550 551 IGCM_sys_Cp ${file_in} ${file_out} 552 IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 553 554 (( i=i+2 )) 555 done 556 fi 557 done 558 559 IGCM_debug_PopStack "IGCM_comp_GetInputParametersFiles" 550 IGCM_debug_Print 3 "Parameters ${compname}" 551 552 card=${SUBMIT_DIR}/COMP/${compname}.card 553 554 IGCM_card_DefineArrayFromOption ${card} ParametersFiles List 555 ListFilesName=${compname}_ParametersFiles_List 556 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 557 558 if [ X${FileName0} != X${NULL_STR} ] ; then 559 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 560 561 (( i=0 )) 562 until [ $i -ge $NbFiles ]; do 563 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 564 eval file_in=${file_in_} 565 (( i_ = i+1 )) 566 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 567 eval file_out=${file_out_} 568 569 IGCM_sys_Cp ${file_in} ${file_out} 570 IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 571 572 (( i=i+2 )) 573 done 574 fi 575 done 576 577 IGCM_debug_PopStack "IGCM_comp_GetInputParametersFiles" 560 578 } 561 579 … … 563 581 function IGCM_comp_GetInputRestartFiles 564 582 { 565 IGCM_debug_PushStack "IGCM_comp_GetInputRestartFiles" 583 IGCM_debug_PushStack "IGCM_comp_GetInputRestartFiles" 584 585 # Debug Print : 586 echo 587 IGCM_debug_Print 1 "IGCM_comp_GetInputRestartFiles" 588 echo 589 590 typeset Date_tmp Date_r Path_r do_start CompOldName Path_OUT Path_BUF Buffered 591 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ 592 typeset file_in file_out file_in_ file_out_ file_in_Name 593 typeset -Z4 j4 594 595 for comp in ${config_ListOfComponents[*]} ; do 596 # Define component 597 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 598 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 599 # 600 card=${SUBMIT_DIR}/COMP/${compname}.card 601 # 602 IGCM_card_DefineArrayFromOption ${card} RestartFiles List 603 ListFilesName=${compname}_RestartFiles_List 604 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 566 605 567 606 # Debug Print : 568 echo 569 IGCM_debug_Print 1 "IGCM_comp_GetInputRestartFiles" 570 echo 571 572 typeset Date_tmp Date_r Path_r do_start CompOldName Path_temp 573 typeset comp compname comptagname card ListFilesName FileName0 NbFiles i i_ 574 typeset file_in file_out file_in_ file_out_ file_in_Name 575 typeset -Z4 j4 576 577 for comp in ${config_ListOfComponents[*]} ; do 578 # Define component 579 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 580 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 581 # 582 card=${SUBMIT_DIR}/COMP/${compname}.card 583 # 584 IGCM_card_DefineArrayFromOption ${card} RestartFiles List 585 ListFilesName=${compname}_RestartFiles_List 586 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 587 588 # Debug Print : 589 IGCM_debug_Print 3 "restart ${compname}" 590 591 if ( ${FirstInitialize} ) ; then 592 593 if [ "${config_Restarts_OverRule}" = "y" ] ; then 594 eval config_${comp}_Restart="y" 595 eval config_${comp}_RestartDate=${config_Restarts_RestartDate} 596 eval config_${comp}_RestartJobName=${config_Restarts_RestartJobName} 597 eval config_${comp}_RestartPath=${config_Restarts_RestartPath} 598 eval do_start=\${config_${comp}_Restart} > /dev/null 2>&1 599 eval CompOldName=${comp} 607 IGCM_debug_Print 3 "restart ${compname}" 608 609 if ( ${FirstInitialize} ) ; then 610 611 if [ "${config_Restarts_OverRule}" = "y" ] ; then 612 eval config_${comp}_Restart="y" 613 eval config_${comp}_RestartDate=${config_Restarts_RestartDate} 614 eval config_${comp}_RestartJobName=${config_Restarts_RestartJobName} 615 eval config_${comp}_RestartPath=${config_Restarts_RestartPath} 616 eval do_start=\${config_${comp}_Restart} > /dev/null 2>&1 617 eval CompOldName=${comp} 618 else 619 # Read component Restarts parameters 620 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} Restart 621 eval do_start=\${config_${comp}_Restart} > /dev/null 2>&1 622 623 if [ "${do_start}" = "y" ] ; then 624 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} RestartDate 625 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} RestartJobName 626 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} RestartPath 627 else 628 eval config_${comp}_RestartDate=-1 629 eval config_${comp}_RestartJobName=${NULL_STR} 630 eval config_${comp}_RestartPath=${NULL_STR} 631 fi 632 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} OldName 633 eval CompOldName=\${config_${comp}_OldName} 634 if [ X${CompOldName} = X ] ; then 635 eval CompOldName=${comp} 636 fi 637 fi 638 639 if [ "${do_start}" = "y" ] ; then 640 641 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 642 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 643 644 (( i=1 )) 645 until [ $i -gt $NbFiles ]; do 646 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 647 eval file_in=${file_in_} 648 649 (( i_ = i+1 )) 650 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 651 eval file_out=${file_out_} 652 653 eval Date_tmp=\${config_${comp}_RestartDate} 654 Date_r=$( IGCM_date_ConvertFormatToGregorian ${Date_tmp} ) 655 eval Path_r=\${config_${comp}_RestartPath}/\${config_${comp}_RestartJobName}/${CompOldName}/Restart 656 eval file_in_Name=\${config_${comp}_RestartJobName}_${Date_r}_${file_in} 657 658 generic_restart_file_name_in=$( basename ${file_in_Name} .nc ) 659 generic_restart_file_name_out=$( basename ${file_out} .nc ) 660 661 eval Path_OUT=\${Path_r}/${generic_restart_file_name_in} 662 nb_restart_file=$(IGCM_sys_CountFileArchive ${Path_OUT}_????.nc) 663 664 if [ ${nb_restart_file} -gt 1 ] ; then 665 j=0 666 until [ $j -ge $nb_restart_file ]; do 667 j4=${j} 668 eval IGCM_sys_Get ${Path_r}/${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 669 #IGCM_comp_PrepareDeletedFiles ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 670 #eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${generic_restart_file_name_out}_${j4}.nc" > /dev/null 2>&1 671 (( j=j+1 )) 672 done 600 673 else 601 # Read component Restarts parameters 602 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} Restart 603 eval do_start=\${config_${comp}_Restart} > /dev/null 2>&1 604 605 if [ "${do_start}" = "y" ] ; then 606 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} RestartDate 607 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} RestartJobName 608 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} RestartPath 609 else 610 eval config_${comp}_RestartDate=-1 611 eval config_${comp}_RestartJobName=${NULL_STR} 612 eval config_${comp}_RestartPath=${NULL_STR} 613 fi 614 IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card ${comp} OldName 615 eval CompOldName=\${config_${comp}_OldName} 616 if [ X${CompOldName} = X ] ; then 617 eval CompOldName=${comp} 618 fi 619 fi 620 621 if [ "${do_start}" = "y" ] ; then 622 623 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 624 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 625 626 (( i=1 )) 627 until [ $i -gt $NbFiles ]; do 628 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 629 eval file_in=${file_in_} 630 631 (( i_ = i+1 )) 632 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 633 eval file_out=${file_out_} 634 635 eval Date_tmp=\${config_${comp}_RestartDate} 636 Date_r=$( IGCM_date_ConvertFormatToGregorian ${Date_tmp} ) 637 eval Path_r=\${config_${comp}_RestartPath}/\${config_${comp}_RestartJobName}/${CompOldName}/Restart 638 eval file_in_Name=\${config_${comp}_RestartJobName}_${Date_r}_${file_in} 639 640 generic_restart_file_name_in=$( basename ${file_in_Name} .nc ) 641 generic_restart_file_name_out=$( basename ${file_out} .nc ) 642 643 eval Path_temp=\${Path_r}/${generic_restart_file_name_in} 644 nb_restart_file=$(IGCM_sys_CountFileArchive ${Path_temp}_????.nc) 645 646 if [ ${nb_restart_file} -gt 1 ] ; then 647 j=0 648 until [ $j -ge $nb_restart_file ]; do 649 j4=${j} 650 eval IGCM_sys_Get ${Path_r}/${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 651 #IGCM_comp_PrepareDeletedFiles ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 652 #eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${generic_restart_file_name_out}_${j4}.nc" > /dev/null 2>&1 653 (( j=j+1 )) 654 done 655 else 656 eval IGCM_sys_Get ${Path_r}/${file_in_Name} ${file_out} 657 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 658 fi 659 660 (( i=i+3 )) 661 done 662 else 663 if [ X${FileName0} != XNONE ] ; then 664 IGCM_debug_Exit "IGCM_comp_GetInputRestartFiles : No file in list for ${compname}." 665 else 666 IGCM_debug_Print 1 "IGCM_comp_GetInputRestartFiles : NONE specified in Restart List ${compname}." 667 fi 668 fi 669 fi 670 elif [ ${Period} -eq 1 ] ; then 671 # if not FirstInitialize and first loop of this job 672 673 # Restore Restarts files 674 #----------------------- 675 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 676 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 677 678 (( i=1 )) 679 until [ $i -gt $NbFiles ]; do 680 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 681 eval file_in=${file_in_} 682 (( i_ = i+1 )) 683 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 684 eval file_out=${file_out_} 685 686 file_in_Name=${run_Configuration_OldPrefix}_${file_in} 687 688 generic_restart_file_name_in=$( basename ${file_in_Name} .nc ) 689 generic_restart_file_name_out=$( basename ${file_out} .nc ) 690 691 eval Path_temp=\${R_OUT_${comp}_R}/${generic_restart_file_name_in} 692 nb_restart_file=$(IGCM_sys_CountFileArchive ${Path_temp}_????.nc) 693 694 if [ ${nb_restart_file} -gt 1 ] ; then 695 j=0 696 until [ $j -ge $nb_restart_file ]; do 697 j4=${j} 698 eval IGCM_sys_Get \${R_OUT_${comp}_R}/${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 699 #IGCM_comp_PrepareDeletedFiles ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 700 #eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${generic_restart_file_name_out}_${j4}.nc" > /dev/null 2>&1 701 702 (( j=j+1 )) 703 done 704 else 705 eval IGCM_sys_Get \${R_OUT_${comp}_R}/${file_in_Name} ${file_out} 706 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 707 fi 708 709 (( i=i+3 )) 710 done 674 eval IGCM_sys_Get ${Path_r}/${file_in_Name} ${file_out} 675 #IGCM_comp_PrepareDeletedFiles ${file_in} ${file_out} 676 fi 677 678 (( i=i+3 )) 679 done 680 else 681 if [ X${FileName0} != XNONE ] ; then 682 IGCM_debug_Exit "IGCM_comp_GetInputRestartFiles : No file in list for ${compname}." 683 else 684 IGCM_debug_Print 1 "IGCM_comp_GetInputRestartFiles : NONE specified in Restart List ${compname}." 685 fi 686 fi 687 fi 688 elif [ ${Period} -eq 1 ] ; then 689 # if not FirstInitialize and first loop of this job 690 691 # Restore Restarts files 692 #----------------------- 693 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 694 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 695 696 (( i=1 )) 697 until [ $i -gt $NbFiles ]; do 698 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 699 eval file_in=${file_in_} 700 (( i_ = i+1 )) 701 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 702 eval file_out=${file_out_} 703 704 file_in_Name=${run_Configuration_OldPrefix}_${file_in} 705 706 generic_restart_file_name_in=$( basename ${file_in_Name} .nc ) 707 generic_restart_file_name_out=$( basename ${file_out} .nc ) 708 709 eval Path_BUF=\${R_BUF_${comp}_R}/${generic_restart_file_name_in} 710 eval Path_OUT=\${R_OUT_${comp}_R}/${generic_restart_file_name_in} 711 712 if [ -f ${Path_BUF}*.nc ] ; then 713 Buffered=true 714 nb_restart_file=$(IGCM_sys_CountFileBuffer ${Path_BUF}_????.nc) 715 else 716 Buffered=false 717 nb_restart_file=$(IGCM_sys_CountFileArchive ${Path_OUT}_????.nc) 718 fi 719 720 if [ ${nb_restart_file} -gt 1 ] ; then 721 j=0 722 until [ $j -ge $nb_restart_file ]; do 723 j4=${j} 724 if [ ${Buffered} ] ; then 725 IGCM_sys_GetBuffer ${Path_BUF}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 726 else 727 IGCM_sys_Get ${Path_OUT}_${j4}.nc ${generic_restart_file_name_out}_${j4}.nc 728 fi 729 (( j=j+1 )) 730 done 731 else 732 if [ ${Buffered} ] ; then 733 eval IGCM_sys_GetBuffer \${R_BUF_${comp}_R}/${file_in_Name} ${file_out} 711 734 else 712 if [ X${FileName0} != XNONE ] ; then 713 IGCM_debug_Exit "IGCM_comp_GetInputRestartFiles : No file in list for ${compname}." 714 else 715 IGCM_debug_Print 1 "IGCM_comp_GetInputRestartFiles : NONE specified in Restart List ${compname}." 716 fi 717 fi 735 eval IGCM_sys_Get \${R_OUT_${comp}_R}/${file_in_Name} ${file_out} 736 fi 737 fi 738 739 (( i=i+3 )) 740 done 741 else 742 if [ X${FileName0} != XNONE ] ; then 743 IGCM_debug_Exit "IGCM_comp_GetInputRestartFiles : No file in list for ${compname}." 744 else 745 IGCM_debug_Print 1 "IGCM_comp_GetInputRestartFiles : NONE specified in Restart List ${compname}." 718 746 fi 719 done 720 721 typeset NbFichs 722 NbFiles=$( ls * 2> /dev/null | wc -l ) 723 if [ ${NbFiles} -gt 0 ] ; then 724 IGCM_sys_Chmod u+rw * 725 fi 726 727 IGCM_debug_PopStack "IGCM_comp_GetInputRestartFiles" 747 fi 748 fi 749 done 750 751 NbFiles=$( ls * 2> /dev/null | wc -l ) 752 if [ ${NbFiles} -gt 0 ] ; then 753 IGCM_sys_Chmod u+rw * 754 fi 755 756 IGCM_debug_PopStack "IGCM_comp_GetInputRestartFiles" 728 757 } 729 758 … … 731 760 function IGCM_comp_PeriodStart 732 761 { 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 762 IGCM_debug_PushStack "IGCM_comp_PeriodStart" 763 764 # Debug Print : 765 echo 766 IGCM_debug_Print 1 "IGCM_comp_PeriodStart" 767 echo 768 769 typeset ExeNameIn ExeNameOut 770 typeset comp compname comptagname 771 for comp in ${config_ListOfComponents[*]} ; do 772 # Define component 773 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 774 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 775 776 # Copy executable for this component 777 eval ExeNameIn=\${config_Executable_${comp}[0]} 778 eval ExeNameOut=\${config_Executable_${comp}[1]} 779 780 # Debug Print 781 IGCM_debug_Print 3 "PeriodStart ${compname} Driver Function (if any)." 782 # UPDATE component 783 ${comp}_PeriodStart 2> /dev/null 784 785 done 786 787 IGCM_debug_PopStack "IGCM_comp_PeriodStart" 759 788 } 760 789 … … 762 791 function IGCM_comp_Update 763 792 { 764 793 IGCM_debug_PushStack "IGCM_comp_Update" 765 794 766 795 # Debug Print : 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 796 echo 797 IGCM_debug_Print 1 "IGCM_comp_Update" 798 echo 799 800 typeset ExeNameIn ExeNameOut 801 typeset comp compname comptagname 802 for comp in ${config_ListOfComponents[*]} ; do 803 # Define component 804 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 805 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 806 807 # Copy executable for this component 808 eval ExeNameIn=\${config_Executable_${comp}[0]} 809 eval ExeNameOut=\${config_Executable_${comp}[1]} 810 811 # If missing executable then stop! 812 #if [ ! X${ExeNameIn} = X ] && [ ! -f ${R_EXE}/${ExeNameIn} ] ; then 813 # IGCM_debug_Exit "IGCM_comp_Update missing executable ${ExeNameIn}" 814 #fi 815 816 if [ ${Period} -eq 1 ] && [ -f ${R_EXE}/${ExeNameIn} ] ; then 817 eval IGCM_sys_Cp ${R_EXE}/${ExeNameIn} ${ExeNameOut} 818 if [ -f ${RUN_DIR}/${ExeNameOut} ] ; then 819 eval IGCM_sys_Chmod +rx ${RUN_DIR}/${ExeNameOut} 820 fi 821 elif [ -f ${R_EXE}/${ExeNameIn} ] && [ ! -f ${RUN_DIR}/${ExeNameOut} ] ; then 822 eval IGCM_sys_Cp ${R_EXE}/${ExeNameIn} ${ExeNameOut} 823 if [ -f ${RUN_DIR}/${ExeNameOut} ] ; then 824 eval IGCM_sys_Chmod +rx ${RUN_DIR}/${ExeNameOut} 825 fi 826 fi 827 828 # Debug Print 829 IGCM_debug_Print 1 "Update ${compname} Parameter Files." 830 # UPDATE component 831 ${comp}_Update 832 833 done 834 835 IGCM_debug_PopStack "IGCM_comp_Update" 807 836 } 808 837 … … 810 839 function IGCM_comp_Finalize 811 840 { 812 IGCM_debug_PushStack "IGCM_comp_Finalize" 813 814 # Debug Print : 841 IGCM_debug_PushStack "IGCM_comp_Finalize" 842 843 # Debug Print : 844 echo 845 IGCM_debug_Print 1 "IGCM_comp_Finalize" 846 echo 847 848 typeset ListTextName TextName0 849 typeset comp compname comptagname card ListFilesName FileName0 NbFiles SaveOnArchive 850 typeset i i_ file_in file_in_ file_out file_out_ file_outin file_outin_ generic_file_name nb_rebuild_file 851 typeset -Z4 j4 852 typeset list_file nlist_file 853 typeset compactoutputs 854 855 compactoutputs=false 856 if [ X${JobType} != XRUN ] ; then 857 compactoutputs=true 858 elif [ X${config_UserChoices_CompactText} != Xn ] ; then 859 compactoutputs=true 860 fi 861 862 for comp in ${config_ListOfComponents[*]} ; do 863 # Define component 864 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 865 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 866 867 # Debug Print 868 IGCM_debug_Print 1 "Finalize ${comp} : ${compname} component." 869 # FINALIZE component 870 ${comp}_Finalize 871 872 card=${SUBMIT_DIR}/COMP/${compname}.card 873 874 # Save Restarts files 875 #-------------------- 876 IGCM_debug_Print 2 "Save Restart files for ${comp} : ${compname} component." 877 IGCM_card_DefineArrayFromOption ${card} RestartFiles List 878 ListFilesName=${compname}_RestartFiles_List 879 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 880 881 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 882 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 883 884 (( i=0 )) 885 until [ $i -ge $NbFiles ]; do 886 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 887 eval file_in=${file_in_} 888 889 (( i_ = i+1 )) 890 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 891 eval file_out=${file_out_} 892 893 (( i_ = i+2 )) 894 eval file_outin_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 895 eval file_outin=${file_outin_} 896 897 generic_restart_file_name_in=$( basename ${file_in} .nc ) 898 generic_restart_file_name_out=$( basename ${config_UserChoices_JobName}_${PeriodDateEnd}_${file_out} .nc ) 899 generic_restart_file_name_outin=$( basename ${file_outin} .nc ) 900 901 nb_restart_file=$( ls ${generic_restart_file_name_in}_????.nc 2>/dev/null | wc -l ) 902 if [ ${nb_restart_file} -gt 1 ] ; then 903 j=0 904 until [ $j -ge $nb_restart_file ]; do 905 j4=${j} 906 #eval IGCM_sys_Put_Rest ${generic_restart_file_name_in}_${j4}.nc \${R_OUT_${comp}_R}/${generic_restart_file_name_out}_${j4}.nc 907 eval IGCM_sys_PutBuffer_Rest ${generic_restart_file_name_in}_${j4}.nc \${R_BUF_${comp}_R}/${generic_restart_file_name_out}_${j4}.nc 908 if [ ! ${file_in} = ${file_outin} ] ; then 909 if ( ${ExitFlag} ) ; then 910 echo "IGCM_sys_Mv ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_outin}_${j4}.nc not executed." 911 else 912 IGCM_sys_Mv ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_outin}_${j4}.nc 913 fi 914 fi 915 (( j=j+1 )) 916 done 917 else 918 #eval IGCM_sys_Put_Rest ${file_in} \${R_OUT_${comp}_R}/${config_UserChoices_JobName}_${PeriodDateEnd}_${file_out} 919 eval IGCM_sys_PutBuffer_Rest ${file_in} \${R_BUF_${comp}_R}/${config_UserChoices_JobName}_${PeriodDateEnd}_${file_out} 920 if [ ! ${file_in} = ${file_outin} ] ; then 921 if ( ${ExitFlag} ) ; then 922 echo "IGCM_sys_Mv ${file_in} ${file_outin} not executed." 923 else 924 IGCM_sys_Mv ${file_in} ${file_outin} 925 fi 926 fi 927 fi 928 929 (( i=i+3 )) 930 done 931 else 932 if [ X${FileName0} != XNONE ] ; then 933 IGCM_debug_Exit "IGCM_comp_Finalize : No file in restart list for ${compname}." 934 else 935 IGCM_debug_Print 1 "IGCM_comp_Finalize : NONE specified in Restart List ${compname}." 936 fi 937 fi 938 939 # Save Output files 940 #------------------ 941 IGCM_debug_Print 2 "Save Output files for ${comp} : ${compname} component." 942 IGCM_card_DefineArrayFromOption ${card} OutputFiles List 943 ListFilesName=${compname}_OutputFiles_List 944 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 945 946 if [ X${FileName0} != X${NULL_STR} ] ; then 947 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 948 949 (( i=0 )) 950 until [ $i -ge $NbFiles ]; do 951 SaveOnArchive=true 952 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 953 eval file_in=${file_in_} 954 (( i_ = i+1 )) 955 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 956 eval file_out=${file_out_} 957 (( i_ = i+2 )) 958 eval flag_post=\${${ListFilesName}[$i_]} > /dev/null 2>&1 959 # 960 generic_file_name=$( basename ${file_in} .nc ) 961 nb_rebuild_file=$( ls | grep "^${generic_file_name}_[0-9]*.nc" | wc -l ) 962 # 963 if ( [ ${nb_rebuild_file} -eq 1 ] && [ -f ${generic_file_name}_0000.nc ] ) ; then 964 IGCM_debug_Print 2 "Parallelism with 1 process. Rebuilding ${file_in} not needed" 965 IGCM_sys_Mv ${generic_file_name}_0000.nc ${file_in} 966 elif [ ${nb_rebuild_file} -gt 1 ] ; then 967 IGCM_debug_Print 2 "Parallelism detected rebuilding ${file_in} is needed" 968 if ( [ X${config_Post_RebuildFrequency} = X${NULL_STR} ] || [ X${config_Post_RebuildFrequency} = XNONE ] ) ; then 969 IGCM_debug_Print 2 "Rebuilding ${file_in} online" 970 IGCM_sys_rebuild ${file_in} ${generic_file_name}_*.nc 971 else 972 IGCM_debug_Print 2 "Preparing offline rebuild for ${file_in}" 973 [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 974 IGCM_sys_Mv ${generic_file_name}_????.nc ${RUN_DIR}/REBUILD_${PeriodDateBegin} 975 976 # Prepare headers for the shell dedicated to offline rebuild 977 if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 978 if [ $DRYRUN -le 1 ]; then 979 echo "#!/bin/ksh " > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 980 echo "function IGCM_FlushRebuild " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 981 echo "{ " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 982 echo "IGCM_debug_PushStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 983 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 984 echo "IGCM_debug_Print 1 \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 985 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 986 echo "export R_SAVE=${R_SAVE} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 987 echo "export config_UserChoices_JobName=${config_UserChoices_JobName} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 988 fi 989 fi 990 # Prepare the shell dedicated to offline rebuild 991 if [ $DRYRUN -le 1 ]; then 992 echo "IGCM_sys_rebuild ${file_in} ${generic_file_name}_*.nc" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 993 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 994 fi 995 # 996 # Load Patch we need to apply and apply 997 if [ $DRYRUN -le 1 ]; then 998 if [ X$( eval echo \${${compname}_${flag_post}_Patches[0]} ) != X${NULL_STR} ]; then 999 for Patch in $( eval echo \${${compname}_${flag_post}_Patches[*]} ); do 1000 echo ". ${libIGCM_POST}/libIGCM_post/IGCM_${Patch}.ksh" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1001 echo "IGCM_${Patch} ${file_in} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1002 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1003 done 1004 fi 1005 fi 1006 # 1007 if [ $DRYRUN -le 1 ]; then 1008 echo "IGCM_sys_Put_Out ${file_in} ${file_out} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1009 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1010 echo "IGCM_sys_Rm ${generic_file_name}_*.nc " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1011 fi 1012 SaveOnArchive=false 1013 fi 1014 fi 1015 # 1016 if [ ${SaveOnArchive} = true ] ; then 1017 # 1018 # If we need to apply a patch we use TMP DIRECTORY before ARCHIVING if asynchronous rebuild is on 1019 # 1020 thereisapatch=$( eval echo \${${compname}_${flag_post}_Patches[0]} ) 1021 1022 if ( [ ! X${thereisapatch} = X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = X ] && [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then 1023 if [ -f ${file_in} ] ; then 1024 [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 1025 1026 IGCM_sys_Mv ${file_in} ${RUN_DIR}/REBUILD_${PeriodDateBegin} 1027 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=REBUILD_${PeriodDateBegin}/${file_in} > /dev/null 2>&1 1028 # 1029 if [ $DRYRUN -le 1 ]; then 1030 if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 1031 echo "#!/bin/ksh " > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1032 echo "function IGCM_FlushRebuild " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1033 echo "{ " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1034 echo "IGCM_debug_PushStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1035 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1036 echo "IGCM_debug_Print 1 \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1037 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1038 echo "export R_SAVE=${R_SAVE} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1039 echo "export config_UserChoices_JobName=${config_UserChoices_JobName} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1040 fi 1041 # 1042 for Patch in $( eval echo \${${compname}_${flag_post}_Patches[*]} ); do 1043 echo ". ${libIGCM_POST}/libIGCM_post/IGCM_${Patch}.ksh" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1044 echo "IGCM_${Patch} ${file_in} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1045 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1046 done 1047 # 1048 echo "IGCM_sys_Put_Out ${file_in} ${file_out} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1049 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1050 # 1051 fi 1052 fi 1053 else 1054 [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 1055 if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 1056 echo "#!/bin/ksh " > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1057 echo "function IGCM_FlushRebuild " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1058 echo "{ " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1059 echo "IGCM_debug_PushStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1060 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1061 echo "IGCM_debug_Print 1 \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1062 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1063 echo "export R_SAVE=${R_SAVE} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1064 echo "export config_UserChoices_JobName=${config_UserChoices_JobName} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1065 fi 1066 1067 IGCM_sys_Put_Out ${file_in} ${file_out} 1068 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 1069 if [ ${nb_rebuild_file} -gt 1 ] ; then 1070 for DelFile in $( ls | grep "${generic_file_name}[_0-9]*.nc" ) ; do 1071 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=${DelFile} > /dev/null 2>&1 1072 done 1073 fi 1074 fi 1075 fi 1076 (( i=i+3 )) 1077 done 1078 fi 1079 1080 # Save Output Text files of models 1081 #--------------------------------- 1082 IGCM_debug_Print 2 "Save Output Text files for ${comp} : ${compname} component." 1083 IGCM_card_DefineArrayFromOption ${card} OutputText List 1084 ListTextName=${compname}_OutputText_List 1085 1086 eval TextName0=\${${ListTextName}[0]} > /dev/null 2>&1 1087 if [ X${TextName0} != X${NULL_STR} ] ; then 1088 eval NbFiles=\${#${ListTextName}[@]} > /dev/null 2>&1 1089 1090 (( i=0 )) 1091 until [ $i -eq $NbFiles ]; do 1092 eval file_in=\${${ListTextName}[$i]} > /dev/null 2>&1 1093 eval file_out=${PREFIX}_${file_in} 1094 1095 (( i=i+1 )) 1096 1097 unset list_file 1098 #set +A list_file -- $( ls ${file_in}* | sort 2>/dev/null ) 1099 # result for a a1 a10 a2 with file_in=a a a1 a2 a10 1100 set +A list_file -- $( [ -f ${file_in} ] && ls ${file_in} ; for i in $(ls ${file_in}* 2>/dev/null | sed "s/${file_in}//" | sort -n) ; do ls ${file_in}$i ; done ) 1101 nlist_file=${#list_file[@]} 1102 if [ ${nlist_file} -gt 1 ] ; then 1103 if ( ${compactoutputs} ) ; then 1104 IGCM_debug_Print 2 "Parallelism of Text Output with ${nlist_file} files." 1105 IGCM_debug_Print 2 "Compact files in ${file_out} : " ${list_file[*]} 1106 echo ${list_file[*]} > ${file_out} 1107 echo " 1108 " >> ${file_out} 1109 1110 (( i_ = 0 )) 1111 for file in ${list_file[@]} 1112 do 1113 echo "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " >> ${file_out} 1114 echo "| " ${i_} " " ${file} >> ${file_out} 1115 echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " >> ${file_out} 1116 cat ${file} | sed "s/\(.*\)/${i_}\1/" ${file} >> ${file_out} 1117 echo " 1118 " >> ${file_out} 1119 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file}" > /dev/null 2>&1 1120 (( i_ = i_ + 1 )) 1121 done 1122 #eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}_D}/${file_out} 1123 eval IGCM_sys_PutBuffer_Out ${file_out} \${R_BUF_${comp}_D}/${file_out} 1124 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_out}" > /dev/null 2>&1 1125 1126 if ( ${ExecutionFail} ) ; then 1127 IGCM_sys_Cp ${file_out} ${SUBMIT_DIR}/Debug 1128 fi 1129 else 1130 for file in ${list_file[@]} 1131 do 1132 #eval IGCM_sys_Put_Out ${file} \${R_OUT_${comp}_D}/${PREFIX}_${file} 1133 eval IGCM_sys_PutBuffer_Out ${file} \${R_BUF_${comp}_D}/${PREFIX}_${file} 1134 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file}" > /dev/null 2>&1 1135 1136 if ( ${ExecutionFail} ) ; then 1137 IGCM_sys_Cp ${file} ${SUBMIT_DIR}/Debug/${PREFIX}_${file} 1138 fi 1139 done 1140 fi 1141 else 1142 if ( [ -f ${file_in}_0000 ] || [ -f ${file_in}0 ] ) ; then 1143 eval IGCM_sys_Mv ${file_in}* ${file_in} 1144 fi 1145 #eval IGCM_sys_Put_Out ${file_in} \${R_OUT_${comp}_D}/${file_out} 1146 eval IGCM_sys_PutBuffer_Out ${file_in} \${R_BUF_${comp}_D}/${file_out} 1147 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 1148 1149 if ( ${ExecutionFail} ) ; then 1150 IGCM_sys_Cp ${file_in} ${SUBMIT_DIR}/Debug/${file_out} 1151 fi 1152 fi 1153 done 1154 fi 815 1155 echo 816 IGCM_debug_Print 1 "IGCM_comp_Finalize" 817 echo 818 819 typeset ListTextName TextName0 820 typeset comp compname comptagname card ListFilesName FileName0 NbFiles SaveOnArchive 821 typeset i i_ file_in file_in_ file_out file_out_ file_outin file_outin_ generic_file_name nb_rebuild_file 822 typeset -Z4 j4 823 typeset list_file nlist_file 824 typeset compactoutputs 825 826 compactoutputs=false 827 if [ X${JobType} != XRUN ] ; then 828 compactoutputs=true 829 elif [ X${config_UserChoices_CompactText} != Xn ] ; then 830 compactoutputs=true 831 fi 832 833 for comp in ${config_ListOfComponents[*]} ; do 834 # Define component 835 eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 836 eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 837 838 # Debug Print 839 IGCM_debug_Print 1 "Finalize ${compname} component." 840 # FINALIZE component 841 ${comp}_Finalize 842 843 card=${SUBMIT_DIR}/COMP/${compname}.card 844 845 # Save Restarts files 846 #-------------------- 847 IGCM_card_DefineArrayFromOption ${card} RestartFiles List 848 ListFilesName=${compname}_RestartFiles_List 849 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 850 851 if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 852 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 853 854 (( i=0 )) 855 until [ $i -ge $NbFiles ]; do 856 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 857 eval file_in=${file_in_} 858 859 (( i_ = i+1 )) 860 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 861 eval file_out=${file_out_} 862 863 (( i_ = i+2 )) 864 eval file_outin_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 865 eval file_outin=${file_outin_} 866 867 generic_restart_file_name_in=$( basename ${file_in} .nc ) 868 generic_restart_file_name_out=$( basename ${config_UserChoices_JobName}_${PeriodDateEnd}_${file_out} .nc ) 869 generic_restart_file_name_outin=$( basename ${file_outin} .nc ) 870 871 nb_restart_file=$( ls ${generic_restart_file_name_in}_????.nc 2>/dev/null | wc -l ) 872 if [ ${nb_restart_file} -gt 1 ] ; then 873 j=0 874 until [ $j -ge $nb_restart_file ]; do 875 j4=${j} 876 eval IGCM_sys_Put_Rest ${generic_restart_file_name_in}_${j4}.nc \${R_OUT_${comp}_R}/${generic_restart_file_name_out}_${j4}.nc 877 if [ ! ${file_in} = ${file_outin} ] ; then 878 if ( ${ExitFlag} ) ; then 879 echo "IGCM_sys_Mv ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_outin}_${j4}.nc not executed." 880 else 881 IGCM_sys_Mv ${generic_restart_file_name_in}_${j4}.nc ${generic_restart_file_name_outin}_${j4}.nc 882 fi 883 fi 884 #eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${generic_restart_file_name_in}_${j4}.nc" > /dev/null 2>&1 885 (( j=j+1 )) 886 done 887 else 888 eval IGCM_sys_Put_Rest ${file_in} \${R_OUT_${comp}_R}/${config_UserChoices_JobName}_${PeriodDateEnd}_${file_out} 889 if [ ! ${file_in} = ${file_outin} ] ; then 890 if ( ${ExitFlag} ) ; then 891 echo "IGCM_sys_Mv ${file_in} ${file_outin} not executed." 892 else 893 IGCM_sys_Mv ${file_in} ${file_outin} 894 fi 895 fi 896 #eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 897 fi 898 899 (( i=i+3 )) 900 done 901 else 902 if [ X${FileName0} != XNONE ] ; then 903 IGCM_debug_Exit "IGCM_comp_Finalize : No file in restart list for ${compname}." 904 else 905 IGCM_debug_Print 1 "IGCM_comp_Finalize : NONE specified in Restart List ${compname}." 906 fi 907 fi 908 909 # Save Output files 910 #------------------ 911 IGCM_card_DefineArrayFromOption ${card} OutputFiles List 912 ListFilesName=${compname}_OutputFiles_List 913 eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 914 915 if [ X${FileName0} != X${NULL_STR} ] ; then 916 eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 917 918 (( i=0 )) 919 until [ $i -ge $NbFiles ]; do 920 SaveOnArchive=true 921 eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 922 eval file_in=${file_in_} 923 (( i_ = i+1 )) 924 eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 925 eval file_out=${file_out_} 926 (( i_ = i+2 )) 927 eval flag_post=\${${ListFilesName}[$i_]} > /dev/null 2>&1 928 # 929 generic_file_name=$( basename ${file_in} .nc ) 930 nb_rebuild_file=$( ls | grep "^${generic_file_name}_[0-9]*.nc" | wc -l ) 931 # 932 if ( [ ${nb_rebuild_file} -eq 1 ] && [ -f ${generic_file_name}_0000.nc ] ) ; then 933 IGCM_debug_Print 2 "Parallelism with 1 process. Rebuilding ${file_in} not needed" 934 IGCM_sys_Mv ${generic_file_name}_0000.nc ${file_in} 935 elif [ ${nb_rebuild_file} -gt 1 ] ; then 936 IGCM_debug_Print 2 "Parallelism detected rebuilding ${file_in} is needed" 937 if ( [ X${config_Post_RebuildFrequency} = X${NULL_STR} ] || [ X${config_Post_RebuildFrequency} = XNONE ] ) ; then 938 IGCM_debug_Print 2 "Rebuilding ${file_in} online" 939 IGCM_sys_rebuild ${file_in} ${generic_file_name}_*.nc 940 else 941 IGCM_debug_Print 2 "Preparing offline rebuild for ${file_in}" 942 [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 943 IGCM_sys_Mv ${generic_file_name}_????.nc ${RUN_DIR}/REBUILD_${PeriodDateBegin} 944 945 # Prepare headers for the shell dedicated to offline rebuild 946 if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 947 if [ $DRYRUN -le 1 ]; then 948 echo "#!/bin/ksh " > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 949 echo "function IGCM_FlushRebuild " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 950 echo "{ " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 951 echo "IGCM_debug_PushStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 952 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 953 echo "IGCM_debug_Print 1 \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 954 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 955 echo "export R_SAVE=${R_SAVE} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 956 echo "export config_UserChoices_JobName=${config_UserChoices_JobName} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 957 fi 958 fi 959 # Prepare the shell dedicated to offline rebuild 960 if [ $DRYRUN -le 1 ]; then 961 echo "IGCM_sys_rebuild ${file_in} ${generic_file_name}_*.nc " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 962 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 963 fi 964 # 965 # Load Patch we need to apply and apply 966 if [ $DRYRUN -le 1 ]; then 967 if [ X$( eval echo \${${compname}_${flag_post}_Patches[0]} ) != X${NULL_STR} ]; then 968 for Patch in $( eval echo \${${compname}_${flag_post}_Patches[*]} ); do 969 echo ". ${libIGCM_POST}/libIGCM_post/IGCM_${Patch}.ksh" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 970 echo "IGCM_${Patch} ${file_in} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 971 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 972 done 973 fi 974 fi 975 # 976 if [ $DRYRUN -le 1 ]; then 977 echo "IGCM_sys_Put_Out ${file_in} ${file_out} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 978 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 979 echo "IGCM_sys_Rm ${generic_file_name}_*.nc " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 980 fi 981 SaveOnArchive=false 982 fi 983 fi 984 # 985 if [ ${SaveOnArchive} = true ] ; then 986 # 987 # If we need to apply a patch we use TMP DIRECTORY before ARCHIVING if asynchronous rebuild is on 988 # 989 thereisapatch=$( eval echo \${${compname}_${flag_post}_Patches[0]} ) 990 991 if ( [ ! X${thereisapatch} = X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = X ] && [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then 992 if [ -f ${file_in} ] ; then 993 [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 994 995 IGCM_sys_Mv ${file_in} ${RUN_DIR}/REBUILD_${PeriodDateBegin} 996 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=REBUILD_${PeriodDateBegin}/${file_in} > /dev/null 2>&1 997 # 998 if [ $DRYRUN -le 1 ]; then 999 if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 1000 echo "#!/bin/ksh " > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1001 echo "function IGCM_FlushRebuild " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1002 echo "{ " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1003 echo "IGCM_debug_PushStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1004 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1005 echo "IGCM_debug_Print 1 \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1006 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1007 fi 1008 # 1009 for Patch in $( eval echo \${${compname}_${flag_post}_Patches[*]} ); do 1010 echo ". ${libIGCM_POST}/libIGCM_post/IGCM_${Patch}.ksh " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1011 echo "IGCM_${Patch} ${file_in} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1012 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1013 done 1014 # 1015 echo "IGCM_sys_Put_Out ${file_in} ${file_out} " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1016 echo "IGCM_debug_Verif_Exit_Post " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1017 # 1018 fi 1019 fi 1020 else 1021 [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 1022 if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 1023 echo "#!/bin/ksh " > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1024 echo "function IGCM_FlushRebuild " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1025 echo "{ " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1026 echo "IGCM_debug_PushStack \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1027 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1028 echo "IGCM_debug_Print 1 \"IGCM_FlushRebuild\" " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1029 echo "echo " >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 1030 fi 1031 1032 IGCM_sys_Put_Out ${file_in} ${file_out} 1033 [ $? -eq 0 ] && eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 1034 if [ ${nb_rebuild_file} -gt 1 ] ; then 1035 for DelFile in $( ls | grep "${generic_file_name}[_0-9]*.nc" ) ; do 1036 eval FileToBeDeleted[${#FileToBeDeleted[@]}]=${DelFile} > /dev/null 2>&1 1037 done 1038 fi 1039 fi 1040 fi 1041 (( i=i+3 )) 1042 done 1043 fi 1044 1045 # Save Output Text files of models 1046 #--------------------------------- 1047 1048 IGCM_card_DefineArrayFromOption ${card} OutputText List 1049 ListTextName=${compname}_OutputText_List 1050 1051 eval TextName0=\${${ListTextName}[0]} > /dev/null 2>&1 1052 if [ X${TextName0} != X${NULL_STR} ] ; then 1053 eval NbFiles=\${#${ListTextName}[@]} > /dev/null 2>&1 1054 1055 (( i=0 )) 1056 until [ $i -eq $NbFiles ]; do 1057 eval file_in=\${${ListTextName}[$i]} > /dev/null 2>&1 1058 (( i=i+1 )) 1059 1060 unset list_file 1061 #set +A list_file -- $( ls ${file_in}* | sort 2>/dev/null ) 1062 # result for a a1 a10 a2 with file_in=a a a1 a2 a10 1063 set +A list_file -- $( [ -f ${file_in} ] && ls ${file_in} ; for i in $(ls ${file_in}* 2>/dev/null | sed "s/${file_in}//" | sort -n) ; do ls ${file_in}$i ; done ) 1064 nlist_file=${#list_file[@]} 1065 if [ ${nlist_file} -gt 1 ] ; then 1066 if ( ${compactoutputs} ) ; then 1067 eval file_out=${PREFIX}_${file_in} 1068 1069 IGCM_debug_Print 2 "Parallelism of Text Output with ${nlist_file} files." 1070 IGCM_debug_Print 2 "Compact files in ${file_out} : " ${list_file[*]} 1071 echo ${list_file[*]} > ${file_out} 1072 echo " 1073 " >> ${file_out} 1074 1075 (( i_ = 0 )) 1076 for file in ${list_file[@]} 1077 do 1078 echo "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ " >> ${file_out} 1079 echo "| " ${i_} " " ${file} >> ${file_out} 1080 echo "- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - " >> ${file_out} 1081 cat ${file} | sed "s/\(.*\)/${i_}\1/" ${file} >> ${file_out} 1082 echo " 1083 " >> ${file_out} 1084 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file}" > /dev/null 2>&1 1085 (( i_ = i_ + 1 )) 1086 done 1087 eval IGCM_sys_Put_Out ${file_out} \${R_OUT_${comp}_D}/${file_out} 1088 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_out}" > /dev/null 2>&1 1089 1090 if ( ${ExecutionFail} ) ; then 1091 IGCM_sys_Cp ${file_out} ${SUBMIT_DIR}/Debug 1092 fi 1093 else 1094 for file in ${list_file[@]} 1095 do 1096 eval IGCM_sys_Put_Out ${file} \${R_OUT_${comp}_D}/${PREFIX}_${file} 1097 eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file}" > /dev/null 2>&1 1098 done 1099 if ( ${ExecutionFail} ) ; then 1100 IGCM_sys_Cp ${file} ${SUBMIT_DIR}/Debug/${PREFIX}_${file} 1101 fi 1102 fi 1103 else 1104 if ( [ -f ${file_in}_0000 ] || [ -f ${file_in}0 ] ) ; then 1105 eval IGCM_sys_Mv ${file_in}* ${file_in} 1106 fi 1107 eval IGCM_sys_Put_Out ${file_in} \${R_OUT_${comp}_D}/${PREFIX}_${file_in} 1108 [ $? -eq 0 ] && eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 1109 1110 if ( ${ExecutionFail} ) ; then 1111 IGCM_sys_Cp ${file_in} ${SUBMIT_DIR}/Debug/${PREFIX}_${file_in} 1112 fi 1113 fi 1114 done 1115 fi 1116 done 1117 1118 IGCM_debug_PopStack "IGCM_comp_Finalize" 1156 done 1157 IGCM_debug_PopStack "IGCM_comp_Finalize" 1119 1158 }
Note: See TracChangeset
for help on using the changeset viewer.