Ignore:
Timestamp:
12/22/11 16:04:47 (12 years ago)
Author:
sdipsl
Message:
  • Prepare libIGCM for TGCC migration. For now work for CCRT machines ONLY
  • SX8, SX9 and Titane are independant from DMNFS
    • 30 seconds between execution instead of at least 3 minutes ; sometimes hours
  • SX8, SX9 and Titane use their SCRATCHDIR as a BUFFER (for restart and text)
  • Titane simulations are entirely post-processed on titane mono
    • Working except create_se and atlas (missing software : ncap2, openpbm, ImageMagick?)
  • Cards are the same up to now
  • New indentation to ease readability ("svn diff -x -b" to ignore space when differencing)
  • Project (gen2211) is inherited from AA_job by post-processing jobs
    • will stop during config_check if Project is empty
  • Prepare easy switching (submitting post-processing here or there)
  • Homogenize CCRTs libIGCM_sys
  • Bugfixes
  • Cosmetics

First steps and still a long way to go.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libIGCM/libIGCM_comp/libIGCM_comp.ksh

    r522 r544  
    1515function IGCM_comp_Initialize 
    1616{ 
    17     IGCM_debug_PushStack "IGCM_comp_Initialize" 
     17  IGCM_debug_PushStack "IGCM_comp_Initialize" 
    1818 
    1919    # 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 
    20226    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" 
    210230} 
    211231 
     
    213233function IGCM_comp_PrepareDeletedFiles 
    214234{ 
    215     IGCM_debug_PushStack "IGCM_comp_PrepareDeletedFiles" $@ 
    216      
    217     if [ X${2} != X. ] ; then 
    218         eval FileToBeDeleted[${#FileToBeDeleted[@]}]=$( basename ${2} ) > /dev/null 2>&1 
    219     else 
    220         eval FileToBeDeleted[${#FileToBeDeleted[@]}]=$( basename ${1} ) > /dev/null 2>&1 
    221     fi 
    222  
    223     IGCM_debug_PopStack "IGCM_comp_PrepareDeletedFiles" 
     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" 
    224244} 
    225245 
     
    227247function IGCM_comp_GetInputInitialStateFiles 
    228248{ 
    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 
    243274          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" 
    292312} 
    293313 
     
    311331function IGCM_SmoothModulo 
    312332{ 
    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 
    342354    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 
    348366} 
    349367 
     
    351369function IGCM_comp_GetInputSmoothFiles 
    352370{ 
    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 
    354385 
    355386    # 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} 
    408423        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" 
    412430} 
    413431 
     
    415433function IGCM_comp_GetInputBoundaryFiles 
    416434{ 
    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 
    418454 
    419455    # 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 
    427483    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" 
    497515} 
    498516 
     
    500518function IGCM_comp_DelFixeBoundaryFiles 
    501519{ 
    502     IGCM_debug_PushStack "IGCM_comp_DelFixeBoundaryFiles" 
    503  
    504     # Debug Print : 
    505     echo 
    506     IGCM_debug_Print 1 "IGCM_comp_DelFixeBoundaryFiles" 
    507     echo 
    508  
    509     ls -l ${ListFixBoundary} 
    510     rm -f ${ListFixBoundary} 
    511  
    512     IGCM_debug_PopStack "IGCM_comp_DelFixeBoundaryFiles" 
     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" 
    513531} 
    514532 
     
    516534function IGCM_comp_GetInputParametersFiles 
    517535{ 
    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 
    519548 
    520549    # 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" 
    560578} 
    561579 
     
    563581function IGCM_comp_GetInputRestartFiles 
    564582{ 
    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 
    566605 
    567606    # 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 
    600673            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} 
    711734            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}." 
    718746        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" 
    728757} 
    729758 
     
    731760function IGCM_comp_PeriodStart 
    732761{ 
    733     IGCM_debug_PushStack "IGCM_comp_PeriodStart" 
    734  
    735     # Debug Print : 
    736     echo 
    737     IGCM_debug_Print 1 "IGCM_comp_PeriodStart" 
    738     echo 
    739  
    740     typeset ExeNameIn ExeNameOut  
    741     typeset comp compname comptagname 
    742     for comp in ${config_ListOfComponents[*]} ; do 
    743         # Define component  
    744         eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 
    745         eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 
    746  
    747         # Copy executable for this component 
    748         eval ExeNameIn=\${config_Executable_${comp}[0]} 
    749         eval ExeNameOut=\${config_Executable_${comp}[1]} 
    750  
    751         # Debug Print 
    752         IGCM_debug_Print 3 "PeriodStart ${compname} Driver Function (if any)." 
    753         # UPDATE component 
    754         ${comp}_PeriodStart 2> /dev/null 
    755  
    756     done 
    757  
    758     IGCM_debug_PopStack "IGCM_comp_PeriodStart" 
     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" 
    759788} 
    760789 
     
    762791function IGCM_comp_Update 
    763792{ 
    764     IGCM_debug_PushStack "IGCM_comp_Update" 
     793  IGCM_debug_PushStack "IGCM_comp_Update" 
    765794 
    766795    # Debug Print : 
    767     echo 
    768     IGCM_debug_Print 1 "IGCM_comp_Update" 
    769     echo 
    770  
    771     typeset ExeNameIn ExeNameOut  
    772     typeset comp compname comptagname 
    773     for comp in ${config_ListOfComponents[*]} ; do 
    774         # Define component  
    775         eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 
    776         eval comptagname=\${config_ListOfComponents_${comp}[1]} > /dev/null 2>&1 
    777  
    778         # Copy executable for this component 
    779         eval ExeNameIn=\${config_Executable_${comp}[0]} 
    780         eval ExeNameOut=\${config_Executable_${comp}[1]} 
    781  
    782         # If missing executable then stop! 
    783         #if [ ! X${ExeNameIn} = X ] && [ ! -f ${R_EXE}/${ExeNameIn} ] ; then 
    784         #    IGCM_debug_Exit "IGCM_comp_Update missing executable ${ExeNameIn}" 
    785         #fi  
    786  
    787         if [ ${Period} -eq 1 ] && [ -f ${R_EXE}/${ExeNameIn} ] ; then 
    788             eval IGCM_sys_Cp ${R_EXE}/${ExeNameIn} ${ExeNameOut} 
    789             if [ -f ${RUN_DIR}/${ExeNameOut} ] ; then 
    790                 eval IGCM_sys_Chmod +rx ${RUN_DIR}/${ExeNameOut} 
    791             fi 
    792         elif [ -f ${R_EXE}/${ExeNameIn} ] && [ ! -f ${RUN_DIR}/${ExeNameOut} ] ; then 
    793             eval IGCM_sys_Cp ${R_EXE}/${ExeNameIn} ${ExeNameOut} 
    794             if [ -f ${RUN_DIR}/${ExeNameOut} ] ; then 
    795                 eval IGCM_sys_Chmod +rx ${RUN_DIR}/${ExeNameOut} 
    796             fi 
    797         fi 
    798  
    799         # Debug Print 
    800         IGCM_debug_Print 1 "Update ${compname} Parameter Files." 
    801         # UPDATE component 
    802         ${comp}_Update 
    803  
    804     done 
    805  
    806     IGCM_debug_PopStack "IGCM_comp_Update" 
     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" 
    807836} 
    808837 
     
    810839function IGCM_comp_Finalize 
    811840{ 
    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 
    8151155    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" 
    11191158} 
Note: See TracChangeset for help on using the changeset viewer.