Ignore:
Timestamp:
03/07/12 10:39:55 (12 years ago)
Author:
mafoipsl
Message:

First try to merge libIGCM_MPI_OpenMP branch with libIGCM trunk revision 569. Tested on vargas with PackFrequency?=NONE included into config.card.

Location:
branches/libIGCM_MPI_OpenMP
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/libIGCM_MPI_OpenMP

  • branches/libIGCM_MPI_OpenMP/libIGCM_comp/libIGCM_comp.ksh

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