#!/bin/ksh #************************************************************** # Author: Sebastien Denvil # Contact: Sebastien.Denvil@ipsl.jussieu.fr # $Date$ # $Author$ # $Revision$ # IPSL (2006) # This software is governed by the CeCILL licence see libIGCM/libIGCM_CeCILL.LIC # History: # Modification: # #************************************************************** #======================================================================= function IGCM_post_Initialize { IGCM_debug_PushStack "IGCM_post_Initialize" # Debug Print : echo IGCM_debug_Print 1 "IGCM_post_Initialize :" echo typeset POST NbDays PeriodEndJul PostEndJul LengthDays POST=false # READ TIME SERIES OR SEASONAL FREQUENCY # AND TURN ON THE FLAG WHEN MODULO IS ZERO for post_freq in RebuildFrequency TimeSeriesFrequency SeasonalFrequency ; do # # Initialize # eval ${post_freq}=false # # Define the variable ${config_Post_${post_freq}} # who contains frequency for specific post-treatment # IGCM_card_DefineVariableFromOption ${SUBMIT_DIR}/config.card Post ${post_freq} # # Extract frequency from above variable # config_Post_post_freq=$( eval echo \${config_Post_${post_freq}} ) # if ( [ X${config_Post_post_freq} = X${NULL_STR} ] || [ X${config_Post_post_freq} = XNONE ] ) ; then # continue # fi # # For each componant select determine which files need post-processing # for comp in ${config_ListOfComponents[*]} ; do # #echo "-----" eval compname=\${config_ListOfComponents_${comp}[0]} > /dev/null 2>&1 ListFilesName=${compname}_OutputFiles_List eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 # if [ X${FileName0} != X${NULL_STR} ] ; then # #IGCM_debug_Print 1 "Component : ${compname}" # # INITIALISATION # eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 typeset i=0 # until [ $i -eq $NbFiles ]; do # eval file_in_=\${${ListFilesName}[$i]} > /dev/null 2>&1 eval file_in=${file_in_} let $(( i_ = i+2 )) eval flag_post_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 eval flag_post=${flag_post_} # if [ X${flag_post} != XNONE ] ; then # # Initialize ${flag_post}_${compname}_${post_freq} # eval ${flag_post}_${compname}_${post_freq}=false # case ${config_Post_post_freq} in *y|*Y) PeriodYear=$( echo ${config_Post_post_freq} | sed -e "s/[yY]//" ) case ${config_UserChoices_PeriodLength} in *Y|*y) echo "POST : Y->Y = " ${CumulPeriod} ',' ${PeriodYear} "," $( expr ${CumulPeriod} % ${PeriodYear} ) if [ $( expr ${CumulPeriod} % ${PeriodYear} ) -eq 0 ] ; then eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true fi ;; 1M|1m) if [ $( expr ${CumulPeriod} % $( expr ${PeriodYear} \* 12 ) ) -eq 0 ] ; then eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true fi ;; *M|*m) PeriodMonths=$( echo ${config_UserChoices_PeriodLength} | sed -e "s/[mM]//" ) if [ $( expr $(( ${CumulPeriod} * ${PeriodMonths} )) % $(( ${PeriodYear} * 12 )) ) -eq 0 ] ; then eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true fi ;; *D|*d) LengthDays=$( echo ${config_UserChoices_PeriodLength} | sed -e "s/[dD]//" ) NbDays=$( IGCM_date_DaysInYear ${year} ) if [ ${config_UserChoices_CalendarType} = 360d ] | [ ${config_UserChoices_CalendarType} = noleap ] ; then if [ $( expr ${CumulPeriod} % $( expr \( ${NbDays} \* ${PeriodYear} \/ ${LengthDays} \) ) ) -eq 0 ] ; then eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true fi else if [ ${PeriodYear} -eq 1 ] ; then PeriodEndJul=$( IGCM_date_ConvertGregorianDateToJulian ${PeriodDateEnd} ) PostEndJul=${year}${NbDays} #echo "PeriodYear=${PeriodYear} Year ; NbDays${NbDays} PeriodEndJul=${PeriodEndJul} PostEndJul=${PostEndJul}" if [ ${PostEndJul} -le ${PeriodEndJul} ] ; then eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true fi else echo "For ${post_freq}, for ${comp} and ${file_in} :" echo "We have a daily WriteFrequency and ${post_freq}=${PeriodYear}Y." echo "No post-treatment." fi fi;; esac ;; 1M|1m) case ${config_UserChoices_PeriodLength} in *Y|*y) IGCM_debug_Print 3 "Frequency not allowed for TimeSeriesFrequency in ${flag_post}" ;; *M|*m) eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true;; *D|*d) NbDays=$( IGCM_date_DaysInMonth ${year} ${month} ) PeriodEndJul=$( IGCM_date_ConvertGregorianDateToJulian ${PeriodDateEnd} ) PostEndJul=$( IGCM_date_ConvertGregorianDateToJulian ${year}${month}${NbDays} ) #echo "year_month=${year}_${month} Month ; NbDays${NbDays} PeriodEndJul=${PeriodEndJul} PostEndJul=${PostEndJul}" if [ ${PostEndJul} -le ${PeriodEndJul} ] ; then eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true fi ;; esac ;; *M|*m) case ${config_UserChoices_PeriodLength} in *Y|*y) IGCM_debug_Print 3 "Frequency not allowed for TimeSeriesFrequency in ${flag_post}" ;; *M|*m) eval ${flag_post}_${compname}_${post_freq}=true eval ${post_freq}=true POST=true;; esac ;; NONE|none) ;; *) IGCM_debug_Print 3 "KeyWord not allowed for ${post_freq} in config.card" ;; esac fi let $(( i=i+3 )) done fi done done IGCM_debug_Print 1 "POST-TREATEMENT flag value : ${POST}" [ ${POST} = true ] && IGCM_post_Submit IGCM_debug_PopStack "IGCM_post_Initialize" } function IGCM_post_Submit { IGCM_debug_PushStack "IGCM_post_Submit" # Debug Print : echo IGCM_debug_Print 1 "IGCM_post_Submit :" echo typeset comp POST_DIR=${R_OUT_POST}/${config_UserChoices_TagName}/${config_UserChoices_JobName} echo "POST_DIR = ${POST_DIR}" #============== REBUILD POST-TREATMENT =============# if [ ${RebuildFrequency} = true ] ; then # IGCM_debug_Print 2 "REBUILD POST-TREATMENT :" echo # # BUILD A PACKED LIST FOR POST-TREATMENT JOB # BECAUSE IT'S NOT POSSIBLE TO DEFINE DYNAMICAL # VARIABLE NAME THROUGHT RSH !! # LISTE_PACK=" " # fi #============ TIME SERIES POST-TREATMENT ===========# if [ ${TimeSeriesFrequency} = true ] ; then IGCM_debug_Print 2 "TIME SERIES POST-TREATMENT :" echo # typeset listVarEnv listVarEnv="MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,DateBegin,PeriodDateEnd,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_SRF" IGCM_sys_RshPost <<-EOF export MODIPSL=${MODIPSL} export libIGCM_SX=${libIGCM} export libIGCM=${libIGCM_POST} export SUBMIT_DIR=${SUBMIT_DIR} export POST_DIR=${POST_DIR} export DateBegin=${DateBegin} export PeriodDateEnd=${PeriodDateEnd} export StandAlone=false export RESOL_ATM=${RESOL_ATM} export RESOL_OCE=${RESOL_OCE} export RESOL_ICE=${RESOL_ICE} export RESOL_SRF=${RESOL_SRF} export listVarEnv=${listVarEnv} . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh IGCM_sys_MkdirWork ${POST_DIR} IGCM_debug_Verif_Exit IGCM_sys_QsubPost create_ts EOF fi #============= SEASONAL POST-TREATMENT ============# if [ ${SeasonalFrequency} = true ] ; then # IGCM_debug_Print 2 "SEASONNAL POST-TREATMENT :" echo # typeset listVarEnv listVarEnv="MODIPSL,libIGCM,libIGCM_SX,SUBMIT_DIR,POST_DIR,DateBegin,PeriodDateEnd,StandAlone,RESOL_ATM,RESOL_OCE,RESOL_ICE,RESOL_SRF" IGCM_sys_RshPost <<-EOF export MODIPSL=${MODIPSL} export SUBMIT_DIR=${SUBMIT_DIR} export libIGCM_SX=${libIGCM} export libIGCM=${libIGCM_POST} export SUBMIT_DIR=${SUBMIT_DIR} export POST_DIR=${POST_DIR} export DateBegin=${DateBegin} export PeriodDateEnd=${PeriodDateEnd} export StandAlone=false export RESOL_ATM=${RESOL_ATM} export RESOL_OCE=${RESOL_OCE} export RESOL_ICE=${RESOL_ICE} export RESOL_SRF=${RESOL_SRF} export listVarEnv=${listVarEnv} . ${libIGCM_POST}/libIGCM_debug/libIGCM_debug.ksh . ${libIGCM_POST}/libIGCM_sys/libIGCM_sys.ksh IGCM_sys_MkdirWork ${POST_DIR} IGCM_debug_Verif_Exit IGCM_sys_QsubPost create_se EOF fi IGCM_debug_PopStack "IGCM_post_Submit" }