Ignore:
Timestamp:
08/12/09 17:31:05 (15 years ago)
Author:
sdipsl
Message:
  • New post-processing functionnality for cmip5 like post-processing
    • You can ask for fixed lenght time series (10 years chunck or 50 years chunck or ...) and specify it for each files.
    • Separation of concern between 2D and 3D fields.
    • Backward compatible with previous style comp.card
    • example : TimeSeriesVars2D = (cldt, psol, q2m, slp, SWnetOR, SWdownOR, LWdownOR, precip) ChunckJob2D = NONE TimeSeriesVars3D = (temp, theta, ovap, ovapinit, geop, vitu, vitv, vitw, pres) ChunckJob3D = 10Y
  • In case of asynchronous rebuild save patched files on archive filesystem. (so that they have good time axis)
File:
1 edited

Legend:

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

    r100 r149  
    8080        eval R_OUT_${comp}_O_Y=\${R_OUT_${comp}_O}/YE 
    8181 
    82  
    8382        # Read UserChoices section of component card 
    84         IGCM_debug_Print 1 "DefineArrayFromOption : ${compname}_UserChoices ${card}" 
     83        IGCM_debug_Print 1 "DefineArrayFromSection : ${compname}_UserChoices ${card}" 
    8584        IGCM_card_DefineArrayFromSection ${card} UserChoices 
    8685        eval first_option=\${${compname}_UserChoices[0]} > /dev/null 2>&1 
     
    9897        fi 
    9998 
     99        # Read and Build Output File stuff 
     100        IGCM_debug_Print 1 "DefineArrayFromOption  : ${compname}_OutputFiles ${card}" 
     101        IGCM_card_DefineArrayFromOption ${card} OutputFiles List 
     102        ListFilesName=${compname}_OutputFiles_List 
     103        eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 
     104        # 
     105        if [ X${FileName0} != X${NULL_STR} ] ; then 
     106            # 
     107            #IGCM_debug_Print 1 "Component      : ${compname}" 
     108            # 
     109            # INITIALISATION 
     110            # 
     111            eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 
     112            typeset i=2 
     113            # 
     114            #set -vx 
     115            until [ $i -ge $NbFiles ]; do 
     116                # 
     117                eval flag_post=\${${ListFilesName}[$i]} > /dev/null 2>&1 
     118                # 
     119                if [ X${flag_post} != XNONE ] ; then 
     120                    # A mettre demain (11/08/2009) : dépendance Dimension 2D:3D 
     121                    # Dimension = vide si vieille card. 
     122                    IGCM_card_DefineArrayFromOption ${card} ${flag_post} TimeSeriesVars 
     123                    IGCM_card_DefineArrayFromOption ${card} ${flag_post} Patches 
     124                    if [ "$( eval echo \${${compname}_${flag_post}_TimeSeriesVars[*]} )" = "Option not found ${flag_post}" ] ; then 
     125                        # New TimeSeriesVar description, with 2D, 3D and associate ChunckJob. 
     126                        ListDimension="2D 3D" 
     127                        TimeSeries=false 
     128                        for Dimension in ${ListDimension} ; do 
     129                            IGCM_card_DefineArrayFromOption ${card} ${flag_post} TimeSeriesVars${Dimension} 
     130                            IGCM_card_DefineVariableFromOption ${card} ${flag_post} ChunckJob${Dimension} 
     131                            # 
     132                            # Time series WITHOUT chunk 
     133                            # 
     134                            if [ ! $( eval echo \${${compname}_${flag_post}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 
     135                                if [ $( eval echo \${${compname}_${flag_post}_ChunckJob${Dimension}} ) = NONE ] ; then 
     136                                    IGCM_debug_Print 3 "${Dimension} time series activated for ${flag_post} according to ${card}" 
     137                                    eval TimeSeries${Dimension}=true 
     138                                fi 
     139                            fi 
     140                            # 
     141                            # Time series WITH chunk 
     142                            # 
     143                            if [ ! $( eval echo \${${compname}_${flag_post}_TimeSeriesVars${Dimension}} ) = ${NULL_STR} ] ; then 
     144                                chunck_size=$( eval echo \${${compname}_${flag_post}_ChunckJob${Dimension}} ) 
     145                                if [ ! ${chunck_size} = NONE ] ; then 
     146                                    IGCM_debug_Print 3 "${Dimension} time series activated with chunck for ${flag_post} according to ${card}" 
     147                                    eval TimeSeriesChunck${Dimension}=true 
     148                                    eval set +A CHUNCK${Dimension}_COMP \${CHUNCK${Dimension}_COMP[*]} ${comp} 
     149                                    eval set +A CHUNCK${Dimension}_FLAG \${CHUNCK${Dimension}_FLAG[*]} ${i} 
     150                                    eval set +A CHUNCK${Dimension}_SIZE \${CHUNCK${Dimension}_SIZE[*]} ${chunck_size} 
     151                                fi 
     152                            fi 
     153                        done 
     154                    else 
     155                        ListDimension="" 
     156                        TimeSeries=true 
     157                        TimeSeries2D=false 
     158                        TimeSeries3D=false 
     159                        TimeSeriesChunck2D=false 
     160                        TimeSeriesChunck3D=false 
     161                    fi 
     162                fi 
     163                (( i=i+3 )) 
     164            done 
     165            #set +vx 
     166        fi 
    100167        # Debug Print 
    101168        IGCM_debug_Print 3 "Initialize ${compname} with driver." 
     
    105172    done 
    106173    echo "-----" 
    107  
    108174    echo 
    109175    IGCM_debug_Print 1 "DefineArrayFromOption  : ListOfComponents" 
     
    640706                eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 
    641707                eval file_out=${file_out_} 
     708                (( i_ = i+2 )) 
     709                eval flag_post=\${${ListFilesName}[$i_]} > /dev/null 2>&1 
    642710                # 
    643711                generic_file_name=$( basename ${file_in} .nc ) 
     
    656724                        [ ! -d ${RUN_DIR}/REBUILD_${PeriodDateBegin} ] && IGCM_sys_Mkdir ${RUN_DIR}/REBUILD_${PeriodDateBegin} 
    657725                        IGCM_sys_Mv ${generic_file_name}_????.nc ${RUN_DIR}/REBUILD_${PeriodDateBegin} 
     726                        # Attention au quota si on tourne dans un RUN_DIR_PATH maison 
     727                        for DelFile in $( ls REBUILD_${PeriodDateBegin}/* | grep "${generic_file_name}[_0-9]*.nc" ) ; do 
     728                            eval FileToBeDeleted[${#FileToBeDeleted[@]}]=${DelFile} > /dev/null 2>&1 
     729                        done 
     730 
    658731                        # Prepare headers for the shell dedicated to offline rebuild 
    659732                        if [ ! -f ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh ] ; then 
    660                             echo \#!/bin/ksh                               > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    661                             echo function IGCM_FlushRebuild               >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    662                             echo {                                        >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    663                             echo IGCM_debug_PushStack "IGCM_FlushRebuild" >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    664                             echo echo                                     >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    665                             echo IGCM_debug_Print 1 "IGCM_FlushRebuild"   >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    666                             echo echo                                     >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     733                            echo \#!/bin/ksh                                           > ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     734                            echo function IGCM_FlushRebuild                           >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     735                            echo {                                                    >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     736                            echo IGCM_debug_PushStack "IGCM_FlushRebuild"             >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     737                            echo echo                                                 >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     738                            echo IGCM_debug_Print 1 "IGCM_FlushRebuild"               >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     739                            echo echo                                                 >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    667740                        fi 
    668741                        # Prepare the shell dedicated to offline rebuild 
    669                         echo IGCM_sys_rebuild ${file_in} ${generic_file_name}_*.nc >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    670                         echo IGCM_sys_Put_Out ${file_in} ${file_out}               >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    671                         echo IGCM_sys_Rm ${generic_file_name}_*.nc                 >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     742                        echo IGCM_sys_rebuild ${file_in} ${generic_file_name}_*.nc    >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     743                        # 
     744                        # Load Patch we need to apply and apply 
     745                        if [ X$( eval echo \${${compname}_${flag_post}_Patches[0]} ) !=  X${NULL_STR} ]; then 
     746                            for Patch in $( eval echo \${${compname}_${flag_post}_Patches[*]} ); do 
     747                                echo . ${libIGCM_POST}/libIGCM_post/IGCM_${Patch}.ksh >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     748                                echo IGCM_${Patch} ${file_in}                         >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     749                            done 
     750                        fi 
     751                        # 
     752                        echo IGCM_sys_Put_Out ${file_in} ${file_out}                  >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     753                        echo IGCM_sys_Rm ${generic_file_name}_*.nc                    >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
    672754                        SaveOnArchive=false 
    673755                    fi 
     
    675757                # 
    676758                if [ ${SaveOnArchive} = true ] ; then 
    677                     IGCM_sys_Put_Out ${file_in} ${file_out} 
    678                     [ $? -eq 0 ] && eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 
    679                     if [ ${nb_rebuild_file} -gt 1 ] ; then 
    680                         for DelFile in $( ls | grep "${generic_file_name}[_0-9]*.nc" ) ; do 
    681                             eval FileToBeDeleted[${#FileToBeDeleted[@]}]=${DelFile} > /dev/null 2>&1 
    682                         done 
     759                    # 
     760                    # If we need to apply a patch we use TMP DIRECTORY before ARCHIVING if asynchronous rebuild is on 
     761                    # 
     762                    if ( [ X$( eval echo \${${compname}_${flag_post}_Patches[0]} ) !=  X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = X${NULL_STR} ] && [ ! X${config_Post_RebuildFrequency} = XNONE ] ) ; then 
     763                        if [ -f ${file_in} ] ; then 
     764                            IGCM_sys_Mv ${file_in} ${RUN_DIR}/REBUILD_${PeriodDateBegin} 
     765                            eval FileToBeDeleted[${#FileToBeDeleted[@]}]=REBUILD_${PeriodDateBegin}/${file_in} > /dev/null 2>&1 
     766                            # 
     767                            for Patch in $( eval echo \${${compname}_${flag_post}_Patches[*]} ); do 
     768                                echo . ${libIGCM_POST}/libIGCM_post/IGCM_${Patch}.ksh     >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     769                                echo IGCM_${Patch} ${file_in}                             >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     770                            done 
     771                            # 
     772                            echo IGCM_sys_Put_Out ${file_in} ${file_out}                  >> ${RUN_DIR}/REBUILD_${PeriodDateBegin}/rebuild.ksh 
     773                            # 
     774                        fi 
     775                    else 
     776                        IGCM_sys_Put_Out ${file_in} ${file_out} 
     777                        [ $? -eq 0 ] && eval FileToBeDeleted[${#FileToBeDeleted[@]}]="${file_in}" > /dev/null 2>&1 
     778                        if [ ${nb_rebuild_file} -gt 1 ] ; then 
     779                            for DelFile in $( ls | grep "${generic_file_name}[_0-9]*.nc" ) ; do 
     780                                eval FileToBeDeleted[${#FileToBeDeleted[@]}]=${DelFile} > /dev/null 2>&1 
     781                            done 
     782                        fi 
    683783                    fi 
    684784                fi 
Note: See TracChangeset for help on using the changeset viewer.