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