Changeset 1007


Ignore:
Timestamp:
07/02/14 18:24:56 (10 years ago)
Author:
sdipsl
Message:

add-on for ensemble:

  • generate 2 new files « Qclean.month.XXX.sh » and « Qclean.year.XXX.sh » to clean ensemble members at once.
  • new args INITFROM_NONPERIODIC for ensembleDATE to be able to give a list of simulation where to take restart from (if empty use INITFROM for every members)
  • ensemble merbers from ensembleDATE sre compsoed this way [ENSEMBLENAME][NUMBER]A instead of "simualation we start from"+DateBegin? ==> easier to follow and to determine who's missing.
File:
1 edited

Legend:

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

    r1001 r1007  
    1717  IGCM_debug_PushStack "IGCM_ensemble_Init" 
    1818 
    19   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB active 
    20   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE active 
    21   IGCM_card_DefineVariableFromOption ${FileName} Ens_PARAMETRIC active 
    22    
     19  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB active 
     20  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE active 
     21  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PARAMETRIC active 
     22 
    2323  IGCM_debug_Print 1 "Ens_PERTURB ACTIVE       = ${ensemble_Ens_PERTURB_active}" 
    2424  IGCM_debug_Print 1 "Ens_DATE ACTIVE       = ${ensemble_Ens_DATE_active}" 
    2525  IGCM_debug_Print 1 "Ens_PARAMETRIC ACTIVE  = ${ensemble_Ens_PARAMETRIC_active}" 
    2626  echo "" 
    27    
     27 
    2828  IGCM_debug_PopStack "IGCM_ensemble_Init" 
    2929} 
     
    3333{ 
    3434  IGCM_debug_PushStack "IGCM_ensemble_SetAlpha" 
    35    
     35 
    3636  set -A Alpha      A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
    3737  set -A AlphaMonth a b c d e f g h i j k l 
     
    5454      IGCM_sys_Cp ${SUBMIT_DIR}/Qsub.*        ${RUN_DIR} 
    5555  fi 
    56    
     56  if [ -f ${SUBMIT_DIR}/Qclean.* ]; then 
     57      IGCM_sys_Cp ${SUBMIT_DIR}/Qclean.*      ${RUN_DIR} 
     58  fi 
     59 
    5760  # Useful? 
    5861  #if [ -f  ${SUBMIT_DIR}/CreatedDir.txt ] ; then 
     
    6063  #fi 
    6164  # Useful? 
    62   #if [ -f  ${SUBMIT_DIR}/Qsub.txt ] ; then 
    63   #  IGCM_sys_Cp ${SUBMIT_DIR}/Qsub.txt ${RUN_DIR} 
     65  #if [ -f  ${SUBMIT_DIR}/Qsub.sh ] ; then 
     66  #  IGCM_sys_Cp ${SUBMIT_DIR}/Qsub.sh ${RUN_DIR} 
    6467  #fi 
    65  
    66   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB NAME 
    67   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB BEGIN_INIT 
    68   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB END_INIT 
    69   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB PERIODICITY 
    70   IGCM_card_DefineArrayFromOption    ${FileName} Ens_PERTURB NONPERIODIC 
    71   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB LENGTH 
    72   IGCM_card_DefineArrayFromOption    ${FileName} Ens_PERTURB LENGTH_NONPERIODIC 
    73   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB MEMBER 
    74   IGCM_card_DefineArrayFromOption    ${FileName} Ens_PERTURB PERTURB_BIN 
    75   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB INITFROM 
    76   IGCM_card_DefineVariableFromOption ${FileName} Ens_PERTURB INITPATH 
     68  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB NAME 
     69  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB BEGIN_INIT 
     70  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB END_INIT 
     71  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB PERIODICITY 
     72  IGCM_card_DefineArrayFromOption    ${F_CFG_ENS} Ens_PERTURB NONPERIODIC 
     73  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB LENGTH 
     74  IGCM_card_DefineArrayFromOption    ${F_CFG_ENS} Ens_PERTURB LENGTH_NONPERIODIC 
     75  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB MEMBER 
     76  IGCM_card_DefineArrayFromOption    ${F_CFG_ENS} Ens_PERTURB PERTURB_BIN 
     77  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB INITFROM 
     78  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_PERTURB INITPATH 
    7779  IGCM_card_DefineVariableFromOption config.card UserChoices JobName 
    7880  IGCM_card_DefineVariableFromOption config.card UserChoices TagName 
     
    98100  IGCM_debug_Print 1 "CalendarType      = ${config_UserChoices_CalendarType}" 
    99101  IGCM_debug_Print 1 "ListOfComponents  = ${config_ListOfComponents[*]}" 
    100    
     102 
    101103  PerturbExe=${ensemble_Ens_PERTURB_PERTURB_BIN[0]} 
    102104  PerturbComp=${ensemble_Ens_PERTURB_PERTURB_BIN[1]} 
     
    110112  IGCM_debug_Print 1 "PerturbVar  = ${PerturbVar}" 
    111113  IGCM_debug_Print 1 "PerturbAmp  = ${PerturbAmp}" 
    112    
     114 
    113115  IGCM_ensemble_SetAlpha ${ensemble_Ens_PERTURB_MEMBER} 
    114    
     116 
    115117  # A few checks Period case: 
    116118 
     
    252254 
    253255        # Dump command to be lauched 
    254         echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qsub.${StartDir}.txt 
    255         echo "${SUBMIT} ${JobName} ; cd -"     >> ${RUN_DIR}/Qsub.${StartDir}.txt 
    256  
    257         # * Update files : config.card, Job_, COMP/comp.card 
    258         IGCM_ensemble_CastFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
    259          
    260         # * Apply noise on restart file 
    261         IGCM_ensemble_CastPerturbFile 
     256        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qsub.${StartDir}.sh 
     257        echo "${SUBMIT} ${JobName} ; cd -"     >> ${RUN_DIR}/Qsub.${StartDir}.sh 
     258 
     259        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     260        echo "${libIGCM}/clean_month.job ; cd -"     >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     261 
     262        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     263        echo "${libIGCM}/clean_year.job ; cd -"     >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     264 
     265        # * Update files : config.card, Job_, COMP/comp.card 
     266        IGCM_ensemble_CastFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
     267 
     268        # * Apply noise on restart file 
     269        IGCM_ensemble_CastPerturbFile 
    262270      fi 
    263        
     271 
    264272      (( i = i + 1 )) 
    265273    done 
    266274 
    267275    # Done. Save ${StartDir} submission text file 
    268     IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.txt ${SUBMIT_DIR} 
     276    IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.sh ${SUBMIT_DIR} 
     277    IGCM_sys_Cp ${RUN_DIR}/Qclean.month.${StartDir}.sh ${SUBMIT_DIR} 
     278    IGCM_sys_Cp ${RUN_DIR}/Qclean.year.${StartDir}.sh ${SUBMIT_DIR} 
    269279 
    270280  # - Next DateBegin 
     
    362372 
    363373        # Dump command to be lauched 
    364         echo "cd ${StartDir}/${MemberDir}/ ;"  >> Qsub.${StartDir}.txt 
    365         echo "${SUBMIT} ${JobName} ; cd -"     >> Qsub.${StartDir}.txt 
    366  
    367         # * Update files : config.card, Job_, COMP/comp.card 
    368         echo "${PeriodDateEnd} ? ${DateEnd}" 
    369         if [ ${PeriodDateEnd} -gt ${DateEnd} ] ; then 
     374        echo "cd ${StartDir}/${MemberDir}/ ;"  >> Qsub.${StartDir}.sh 
     375        echo "${SUBMIT} ${JobName} ; cd -"     >> Qsub.${StartDir}.sh 
     376 
     377        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     378        echo "${libIGCM}/clean_month.job ; cd -"     >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     379 
     380        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     381        echo "${libIGCM}/clean_year.job ; cd -"     >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     382 
     383        # * Update files : config.card, Job_, COMP/comp.card 
     384        echo "${PeriodDateEnd} ? ${DateEnd}" 
     385        if [ ${PeriodDateEnd} -gt ${DateEnd} ] ; then 
    370386            DateEnd=${PeriodDateEnd} 
    371         fi 
    372         IGCM_ensemble_CastFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
    373          
    374         # * Apply noise on restart file 
    375         IGCM_ensemble_CastPerturbFile 
     387        fi 
     388        IGCM_ensemble_CastFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
     389 
     390        # * Apply noise on restart file 
     391        IGCM_ensemble_CastPerturbFile 
    376392      fi 
    377        
     393 
    378394      (( i = i + 1 )) 
    379395    done 
    380396 
    381397    # Done. Save ${StartDir} submission text file 
    382     IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.txt ${SUBMIT_DIR} 
     398    IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.sh ${SUBMIT_DIR} 
     399    IGCM_sys_Cp ${RUN_DIR}/Qclean.month.${StartDir}.sh ${SUBMIT_DIR} 
     400    IGCM_sys_Cp ${RUN_DIR}/Qclean.year.${StartDir}.sh ${SUBMIT_DIR} 
    383401 
    384402    (( DateNum = DateNum + 1 )) 
     
    637655  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card ${PerturbComp} RestartPath    ${RestartDir}/ 
    638656  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Ensemble EnsembleType "Ens_PERTURB" 
    639    
     657 
    640658  IGCM_debug_PopStack "IGCM_ensemble_CastPerturbFile" 
    641659} 
     
    655673        IGCM_sys_Cp ${SUBMIT_DIR}/Qsub.*        ${RUN_DIR} 
    656674  fi 
    657    
    658   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE active 
    659   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE NAME 
    660   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE BEGIN_INIT 
    661   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE BEGIN_RESTART 
    662   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE END_INIT 
    663   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE PERIODICITY 
    664   IGCM_card_DefineArrayFromOption    ${FileName} Ens_DATE NONPERIODIC 
    665   IGCM_card_DefineArrayFromOption    ${FileName} Ens_DATE RESTART_NONPERIODIC 
    666   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE LENGTH 
    667   IGCM_card_DefineArrayFromOption    ${FileName} Ens_DATE LENGTH_NONPERIODIC 
    668   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE INITFROM 
    669   IGCM_card_DefineVariableFromOption ${FileName} Ens_DATE INITPATH 
     675  if [ -f ${SUBMIT_DIR}/Qclean.* ]; then 
     676        IGCM_sys_Cp ${SUBMIT_DIR}/Qclean.*      ${RUN_DIR} 
     677  fi 
     678 
     679  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE active 
     680  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE NAME 
     681  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE BEGIN_INIT 
     682  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE BEGIN_RESTART 
     683  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE END_INIT 
     684  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE PERIODICITY 
     685  IGCM_card_DefineArrayFromOption    ${F_CFG_ENS} Ens_DATE NONPERIODIC 
     686  IGCM_card_DefineArrayFromOption    ${F_CFG_ENS} Ens_DATE RESTART_NONPERIODIC 
     687  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE LENGTH 
     688  IGCM_card_DefineArrayFromOption    ${F_CFG_ENS} Ens_DATE LENGTH_NONPERIODIC 
     689  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE INITFROM 
     690  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE INITFROM_NONPERIODIC 
     691  IGCM_card_DefineVariableFromOption ${F_CFG_ENS} Ens_DATE INITPATH 
    670692  IGCM_card_DefineVariableFromOption config.card UserChoices JobName 
    671693  IGCM_card_DefineVariableFromOption config.card UserChoices TagName 
     
    675697  echo 
    676698  IGCM_debug_Print 1 "[Ens_DATE]" 
    677   IGCM_debug_Print 1 "ACTIVE             = ${ensemble_Ens_DATE_active}" 
    678   IGCM_debug_Print 1 "NAME               = ${ensemble_Ens_DATE_NAME}" 
    679   IGCM_debug_Print 1 "BEGIN_INIT         = ${ensemble_Ens_DATE_BEGIN_INIT}" 
    680   IGCM_debug_Print 1 "END_INIT           = ${ensemble_Ens_DATE_END_INIT}" 
    681   IGCM_debug_Print 1 "PERIODICITY        = ${ensemble_Ens_DATE_PERIODICITY}" 
    682   IGCM_debug_Print 1 "BEGIN_RESTART      = ${ensemble_Ens_DATE_BEGIN_RESTART}" 
    683   IGCM_debug_Print 1 "NONPERIODIC        = ${ensemble_Ens_DATE_NONPERIODIC[*]}" 
    684   IGCM_debug_Print 1 "RESTART_NONPERIODIC= ${ensemble_Ens_DATE_RESTART_NONPERIODIC[*]}" 
    685   IGCM_debug_Print 1 "LENGTH             = ${ensemble_Ens_DATE_LENGTH}" 
    686   IGCM_debug_Print 1 "LENGTH_NONPERIODIC = ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[*]}" 
    687   IGCM_debug_Print 1 "INITFROM           = ${ensemble_Ens_DATE_INITFROM}" 
    688   IGCM_debug_Print 1 "INITPATH           = ${ensemble_Ens_DATE_INITPATH}" 
    689   IGCM_debug_Print 1 "JobName            = ${config_UserChoices_JobName}" 
    690   IGCM_debug_Print 1 "TagName            = ${config_UserChoices_TagName}" 
    691   IGCM_debug_Print 1 "CalendarType       = ${config_UserChoices_CalendarType}" 
    692   IGCM_debug_Print 1 "ListOfComponents   = ${config_ListOfComponents[*]}" 
     699  IGCM_debug_Print 1 "ACTIVE               = ${ensemble_Ens_DATE_active}" 
     700  IGCM_debug_Print 1 "NAME                 = ${ensemble_Ens_DATE_NAME}" 
     701  IGCM_debug_Print 1 "BEGIN_INIT           = ${ensemble_Ens_DATE_BEGIN_INIT}" 
     702  IGCM_debug_Print 1 "END_INIT             = ${ensemble_Ens_DATE_END_INIT}" 
     703  IGCM_debug_Print 1 "PERIODICITY          = ${ensemble_Ens_DATE_PERIODICITY}" 
     704  IGCM_debug_Print 1 "BEGIN_RESTART        = ${ensemble_Ens_DATE_BEGIN_RESTART}" 
     705  IGCM_debug_Print 1 "NONPERIODIC          = ${ensemble_Ens_DATE_NONPERIODIC[*]}" 
     706  IGCM_debug_Print 1 "RESTART_NONPERIODIC  = ${ensemble_Ens_DATE_RESTART_NONPERIODIC[*]}" 
     707  IGCM_debug_Print 1 "LENGTH               = ${ensemble_Ens_DATE_LENGTH}" 
     708  IGCM_debug_Print 1 "LENGTH_NONPERIODIC   = ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[*]}" 
     709  IGCM_debug_Print 1 "INITFROM             = ${ensemble_Ens_DATE_INITFROM}" 
     710  IGCM_debug_Print 1 "INITFROM_NONPERIODIC = ${ensemble_Ens_DATE_INITFROM_NONPERIODIC[*]}" 
     711  IGCM_debug_Print 1 "INITPATH             = ${ensemble_Ens_DATE_INITPATH}" 
     712  IGCM_debug_Print 1 "JobName              = ${config_UserChoices_JobName}" 
     713  IGCM_debug_Print 1 "TagName              = ${config_UserChoices_TagName}" 
     714  IGCM_debug_Print 1 "CalendarType         = ${config_UserChoices_CalendarType}" 
     715  IGCM_debug_Print 1 "ListOfComponents     = ${config_ListOfComponents[*]}" 
    693716  echo "" 
    694    
     717 
    695718  ensemble_Ens_DATE_MEMBER=1 # actually use only 1 member 
    696719  IGCM_ensemble_SetAlpha ${ensemble_Ens_DATE_MEMBER} 
    697    
     720 
    698721  IGCM_debug_Print 1 "Check args..." 
    699722  DatePeriodicStart=false 
    700723  DateNonPeriodicStart=false 
    701    
     724 
    702725  # ... Check LENGTH ... 
    703726  case ${ensemble_Ens_DATE_LENGTH} in 
     
    716739  totalPeriodArgs=4 
    717740  periodFillArgs=0 
    718    
     741 
    719742  if [[ X${ensemble_Ens_DATE_BEGIN_RESTART} != "X" ]]; then 
    720743      (( periodFillArgs = periodFillArgs + 1 )) 
    721744  fi 
    722    
     745 
    723746  if [[ X${ensemble_Ens_DATE_BEGIN_INIT} != "X" ]]; then 
    724747      (( periodFillArgs = periodFillArgs + 1 )) 
     
    731754  if [[ X${ensemble_Ens_DATE_PERIODICITY} != "X" ]]; then 
    732755      (( periodFillArgs = periodFillArgs + 1 )) 
    733        
     756 
    734757      # ... Check PERIODICITY ... 
    735758      case ${ensemble_Ens_DATE_PERIODICITY} in 
    736           *[Yy]|*[Mm]) 
    737               IGCM_debug_Print 1 "Periodic length : ${ensemble_Ens_DATE_PERIODICITY}" ;; 
    738           *) 
    739               IGCM_debug_Exit "IGCM_ensemble_DateInit ${ensemble_Ens_DATE_PERIODICITY} : invalid PERIODICITY" 
    740               IGCM_debug_Exit "Choose a value in *Y or *M" 
    741               IGCM_debug_Verif_Exit ;; 
     759          *[Yy]|*[Mm]) 
     760              IGCM_debug_Print 1 "Periodic length : ${ensemble_Ens_DATE_PERIODICITY}" ;; 
     761          *) 
     762              IGCM_debug_Exit "IGCM_ensemble_DateInit ${ensemble_Ens_DATE_PERIODICITY} : invalid PERIODICITY" 
     763              IGCM_debug_Exit "Choose a value in *Y or *M" 
     764              IGCM_debug_Verif_Exit ;; 
    742765      esac 
    743766  fi # if periodicity 
    744    
     767 
    745768  if [[ ${periodFillArgs} = ${totalPeriodArgs} ]]; then 
    746769      DatePeriodicStart=true 
    747770  else 
    748771      if [[ ${periodFillArgs} = 0 ]]; then 
    749           IGCM_debug_Print 1 "Periodic start NOT ACTIVE" 
    750           DatePeriodicStart=false 
     772          IGCM_debug_Print 1 "Periodic start NOT ACTIVE" 
     773          DatePeriodicStart=false 
    751774      else 
    752           IGCM_debug_Exit "IGCM_ensemble_DateInit missing arguments for Periodic mode!" 
    753           IGCM_debug_Exit "Get only ${periodFillArgs} on ${totalPeriodArgs} args. Check ${FileName} file." 
    754           IGCM_debug_Verif_Exit 
     775          IGCM_debug_Exit "IGCM_ensemble_DateInit missing arguments for Periodic mode!" 
     776          IGCM_debug_Exit "Get only ${periodFillArgs} on ${totalPeriodArgs} args. Check ${F_CFG_ENS} file." 
     777          IGCM_debug_Verif_Exit 
    755778      fi 
    756779  fi 
    757    
     780 
    758781  # *************************************** 
    759782  # A few checks for the Non-Periodic case: 
     
    763786      IGCM_debug_Verif_Exit 
    764787  fi 
    765    
    766   # Use LENGTH if no NONPERIODIC_LENGTH given 
     788 
    767789  if [[ ${#ensemble_Ens_DATE_NONPERIODIC[*]} > 0 ]] && [[ ${ensemble_Ens_DATE_NONPERIODIC[*]} != _0_ ]]; then 
    768790      DateNonPeriodicStart=true 
    769        
     791 
     792      # Use LENGTH if no NONPERIODIC_LENGTH given 
    770793      if [[ ${#ensemble_Ens_DATE_LENGTH_NONPERIODIC[*]} < ${#ensemble_Ens_DATE_NONPERIODIC[*]} ]] ; then 
    771           IGCM_debug_Print 1 "WARNING: LENGTH_NONPERIODIC is not fill (or not correctly). Use LENGTH value '${ensemble_Ens_DATE_LENGTH}' for all NONPERIODIC runs" 
    772           DateNum=0 
    773           while [ $DateNum -lt ${#ensemble_Ens_DATE_NONPERIODIC[*]} ] ; do 
    774               ensemble_Ens_DATE_LENGTH_NONPERIODIC[DateNum]=${ensemble_Ens_DATE_LENGTH} 
    775               (( DateNum = DateNum + 1 )) 
    776           done 
     794          IGCM_debug_Print 1 "WARNING: LENGTH_NONPERIODIC is not fill (or not correctly). Use LENGTH value '${ensemble_Ens_DATE_LENGTH}' for all NONPERIODIC runs" 
     795          DateNum=0 
     796          while [ $DateNum -lt ${#ensemble_Ens_DATE_NONPERIODIC[*]} ] ; do 
     797              ensemble_Ens_DATE_LENGTH_NONPERIODIC[DateNum]=${ensemble_Ens_DATE_LENGTH} 
     798              (( DateNum = DateNum + 1 )) 
     799          done 
     800      fi 
     801 
     802      # Use INITFROM if no NONPERIODIC_INITFROM given 
     803      if [[ ${#ensemble_Ens_DATE_INITFROM_NONPERIODIC[*]} < ${#ensemble_Ens_DATE_NONPERIODIC[*]} ]] ; then 
     804          IGCM_debug_Print 1 "WARNING: INITFROM_NONPERIODIC is not fill (or not correctly). Use INITFROM value '${ensemble_Ens_DATE_INITFROM}' for all NONPERIODIC runs" 
     805          DateNum=0 
     806          while [ $DateNum -lt ${#ensemble_Ens_DATE_NONPERIODIC[*]} ] ; do 
     807              ensemble_Ens_DATE_INITFROM_NONPERIODIC[DateNum]=${ensemble_Ens_DATE_INITFROM} 
     808              (( DateNum = DateNum + 1 )) 
     809          done 
    777810      fi 
    778811  else 
     
    780813      DateNonPeriodicStart=false 
    781814  fi 
    782    
     815 
    783816  if [[ ${DateNonPeriodicStart} = true ]]; then 
    784817      DateNum=0 
    785818      while [ $DateNum -lt ${#ensemble_Ens_DATE_NONPERIODIC[*]} ] ; do 
    786           # - Check LENGTH_NONPERIODIC 
    787           case ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]} in 
    788               *[Yy]|*[Mm]) 
    789                   IGCM_debug_Print 1 "Non-periodic duration $DateNum: ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]}" 
    790                   ;; 
    791               *) 
    792                   IGCM_debug_Exit "IGCM_ensemble_DateInit ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]} : invalid NON PERIODIC LENGTH" 
    793                   IGCM_debug_Exit "choose in *Y or *M" 
    794                   IGCM_debug_Verif_Exit ;; 
    795           esac 
    796  
    797           # - Check RESTART_NONPERIODIC 
    798           case ${ensemble_Ens_DATE_RESTART_NONPERIODIC[$DateNum]} in 
    799               _0_) 
    800                   IGCM_debug_Exit "IGCM_ensemble_DateInit ${ensemble_Ens_DATE_RESTART_NONPERIODIC[$DateNum]} : invalid NON PERIODIC RESTART" 
    801                   IGCM_debug_Verif_Exit ;; 
    802           esac 
    803            
    804           (( DateNum = DateNum + 1 )) 
     819          # - Check LENGTH_NONPERIODIC 
     820          case ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]} in 
     821              *[Yy]|*[Mm]) 
     822                  IGCM_debug_Print 1 "Non-periodic duration $DateNum: ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]}" 
     823                  ;; 
     824              *) 
     825                  IGCM_debug_Exit "IGCM_ensemble_DateInit ${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]} : invalid NON PERIODIC LENGTH" 
     826                  IGCM_debug_Exit "choose in *Y or *M" 
     827                  IGCM_debug_Verif_Exit ;; 
     828          esac 
     829 
     830          # - Check RESTART_NONPERIODIC 
     831          case ${ensemble_Ens_DATE_RESTART_NONPERIODIC[$DateNum]} in 
     832              _0_) 
     833                  IGCM_debug_Exit "IGCM_ensemble_DateInit ${ensemble_Ens_DATE_RESTART_NONPERIODIC[$DateNum]} : invalid NON PERIODIC RESTART" 
     834                  IGCM_debug_Verif_Exit ;; 
     835          esac 
     836 
     837          (( DateNum = DateNum + 1 )) 
    805838      done 
    806839  fi # DateNonPeriodicStart = true 
    807    
     840 
    808841  IGCM_debug_PopStack "IGCM_ensemble_DateInit" 
    809842} 
     
    823856  # - Build directory name 
    824857  StartDir="${ensemble_Ens_DATE_NAME}" 
    825    
     858 
    826859  # - Create directory for current DateBegin 
    827860  if [ ! -d  ${StartDir} ] ; then 
     
    832865      IGCM_sys_Cd ${RUN_DIR} 
    833866  fi 
    834    
     867 
    835868  # ... Loop over DateBegin ... 
    836869  eval DateBegin=\${ensemble_Ens_DATE_BEGIN_INIT} 
    837870  eval RestartDate=\${ensemble_Ens_DATE_BEGIN_RESTART} 
    838871 
     872  DateNum=0 
    839873  while [ ${DateBegin} -le ${ensemble_Ens_DATE_END_INIT} ] ; do 
    840874    IGCM_date_GetYearMonth ${DateBegin} year month 
    841      
     875 
    842876    echo "========================================================================" 
    843877    echo "New DateBegin = $DateBegin" 
    844      
     878 
    845879  # - Determine number of day(s) in PERIODICITY 
    846880    PeriodLengthInDays=$( IGCM_date_DaysInCurrentPeriod ${DateBegin} ${ensemble_Ens_DATE_PERIODICITY} ) 
    847      
     881 
    848882  # - Determine number of day(s) in LENGTH 
    849883    DureeLengthInDays=$(( $( IGCM_date_DaysInCurrentPeriod ${DateBegin} ${ensemble_Ens_DATE_LENGTH} ) - 1 )) 
     
    851885  # - Determine DateEnd 
    852886    (( DateEnd = $( IGCM_date_AddDaysToGregorianDate ${DateBegin} ${DureeLengthInDays} ) )) 
    853      
     887 
    854888    IGCM_debug_Print 2 "${DateBegin} => ${DateEnd} : ${StartDir}" 
    855889    echo "${DateBegin} ${DateEnd} ${StartDir}" >> ${RUN_DIR}/CreatedDir.txt 
    856          
     890 
    857891  # - Loop over members (default =1 no member) 
    858892    i=0 
    859893    while [ $i -lt ${ensemble_Ens_DATE_MEMBER} ] ; do 
    860       MemberDir="${ensemble_Ens_DATE_INITFROM}${RestartDate}${Alpha[$i]}" 
     894      MemberDir="${ensemble_Ens_DATE_NAME}${DateNum}${Alpha[$i]}_per" 
    861895      echo 
    862896      IGCM_debug_Print 3 "${MemberDir}" 
    863        
     897 
    864898      JobName="Job_${MemberDir}" 
    865899 
     
    875909        IGCM_sys_Cp config.card run.card.init ${SUBMIT_DIR}/${StartDir}/${MemberDir} 
    876910        IGCM_sys_Cp Job_${config_UserChoices_JobName} ${SUBMIT_DIR}/${StartDir}/${MemberDir}/${JobName} 
    877          
     911 
    878912        # Dump command to be lauched 
    879         echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qsub.${StartDir}.txt 
    880         echo "${SUBMIT} ${JobName} ; cd -"     >> ${RUN_DIR}/Qsub.${StartDir}.txt 
    881        
    882         # * Update files : config.card, Job_, COMP/comp.card 
    883         IGCM_ensemble_DateFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
     913        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qsub.${StartDir}.sh 
     914        echo "${SUBMIT} ${JobName} ; cd -"     >> ${RUN_DIR}/Qsub.${StartDir}.sh 
     915 
     916        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     917        echo "${libIGCM}/clean_month.job ; cd -"     >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     918 
     919        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     920        echo "${libIGCM}/clean_year.job ; cd -"     >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     921 
     922        # * Update files : config.card, Job_, COMP/comp.card 
     923        IGCM_ensemble_DateFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
    884924      fi 
    885        
     925 
    886926      (( i = i + 1 )) 
    887927    done 
     
    896936    esac 
    897937 
     938    (( DateNum = DateNum + 1 )) # increment number of restart date 
    898939  done 
    899940 
    900941  # Done. Save ${StartDir} submission text file 
    901   IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.txt ${SUBMIT_DIR} 
    902    
     942  IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.sh ${SUBMIT_DIR} 
     943  IGCM_sys_Cp ${RUN_DIR}/Qclean.month.${StartDir}.sh ${SUBMIT_DIR} 
     944  IGCM_sys_Cp ${RUN_DIR}/Qclean.year.${StartDir}.sh ${SUBMIT_DIR} 
     945 
    903946  IGCM_debug_PopStack "IGCM_ensemble_DatePeriodicStarts" 
    904947} 
     
    930973      IGCM_sys_Cd ${RUN_DIR} 
    931974  fi 
    932    
     975 
    933976  DateNum=0 
    934977  # ... Loop over ensemble_Ens_DATE_NONPERIODIC ... 
     
    937980    Duree=${ensemble_Ens_DATE_LENGTH_NONPERIODIC[$DateNum]} 
    938981    RestartDate=${ensemble_Ens_DATE_RESTART_NONPERIODIC[$DateNum]} 
    939      
     982    InitFrom=${ensemble_Ens_DATE_INITFROM_NONPERIODIC[$DateNum]} 
     983 
    940984  # - Determine number of day(s) in LENGTH_NONPERIODIC 
    941985    IGCM_date_GetYearMonth ${DateBegin} year month 
     
    944988  # - Determine DateEnd 
    945989    (( DateEnd = $( IGCM_date_AddDaysToGregorianDate ${DateBegin} ${DureeLengthInDays} ) )) 
    946      
     990 
    947991    IGCM_debug_Print 2 "${DateBegin} => ${DateEnd} : ${StartDir}" 
    948     echo "${DateBegin} ${DateEnd} ${StartDir}" >> ${RUN_DIR}/CreatedDir.txt   
    949      
     992    echo "${DateBegin} ${DateEnd} ${StartDir}" >> ${RUN_DIR}/CreatedDir.txt 
     993 
    950994    PeriodDateEnd=$( grep -m1 ${StartDir} ${RUN_DIR}/CreatedDir.txt | cut -f2 -d\  ) 
    951      
     995 
    952996  # - Loop over members 
    953997    i=0 
    954998    while [ $i -lt ${ensemble_Ens_DATE_MEMBER} ] ; do 
    955       MemberDir="${ensemble_Ens_DATE_INITFROM}${RestartDate}${Alpha[$i]}" 
     999      MemberDir="${ensemble_Ens_DATE_NAME}${DateNum}${Alpha[$i]}" 
    9561000      IGCM_debug_Print 3 "${MemberDir}" 
    957        
     1001 
    9581002      JobName="Job_${MemberDir}" 
    9591003 
     
    9711015 
    9721016        # Dump command to be lauched 
    973         echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qsub.${StartDir}.txt 
    974         echo "${SUBMIT} ${JobName} ; cd -"     >> ${RUN_DIR}/Qsub.${StartDir}.txt 
    975  
    976         # * Update files : config.card, Job_, COMP/comp.card 
    977         IGCM_ensemble_DateFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} 
     1017        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qsub.${StartDir}.sh 
     1018        echo "${SUBMIT} ${JobName} ; cd -"     >> ${RUN_DIR}/Qsub.${StartDir}.sh 
     1019 
     1020        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     1021        echo "${libIGCM}/clean_month.job ; cd -"     >> ${RUN_DIR}/Qclean.month.${StartDir}.sh 
     1022 
     1023        echo "cd ${StartDir}/${MemberDir}/ ;"  >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     1024        echo "${libIGCM}/clean_year.job ; cd -"     >> ${RUN_DIR}/Qclean.year.${StartDir}.sh 
     1025 
     1026        # * Update files : config.card, Job_, COMP/comp.card 
     1027        IGCM_ensemble_DateFilesUpdate ${DateBegin} ${DateEnd} ${RestartDate} ${InitFrom} 
    9781028      fi 
    979        
     1029 
    9801030      (( i = i + 1 )) 
    9811031    done 
    9821032 
    9831033    # Done. Save ${StartDir} submission text file 
    984     IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.txt ${SUBMIT_DIR} 
     1034    IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.sh ${SUBMIT_DIR} 
     1035    IGCM_sys_Cp ${RUN_DIR}/Qclean.month.${StartDir}.sh ${SUBMIT_DIR} 
     1036    IGCM_sys_Cp ${RUN_DIR}/Qclean.year.${StartDir}.sh ${SUBMIT_DIR} 
    9851037 
    9861038    (( DateNum = DateNum + 1 )) 
     
    9881040 
    9891041  # Done. Save ${StartDir} submission text file 
    990   IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.txt ${SUBMIT_DIR} 
    991    
     1042  IGCM_sys_Cp ${RUN_DIR}/Qsub.${StartDir}.sh ${SUBMIT_DIR} 
     1043  IGCM_sys_Cp ${RUN_DIR}/Qclean.month.${StartDir}.sh ${SUBMIT_DIR} 
     1044  IGCM_sys_Cp ${RUN_DIR}/Qclean.year.${StartDir}.sh ${SUBMIT_DIR} 
     1045 
    9921046  IGCM_debug_PopStack "IGCM_ensemble_DateNonPeriodicStarts" 
    9931047} 
     
    10041058  HumanDateEnd=$(     IGCM_date_ConvertFormatToHuman ${2} ) 
    10051059  HumanRestartDate=$( IGCM_date_ConvertFormatToHuman ${3} ) 
     1060  if [[ X${4} != "X" ]]; then 
     1061      initFrom=${4} # non periodic config (INITFROM could be different between members) 
     1062  else 
     1063      initFrom=${ensemble_Ens_DATE_INITFROM} # periodic (same INITFROM value) 
     1064  fi 
     1065 
    10061066  # ==> config.card 
    10071067  # [ENSEMBLE] 
     
    10101070  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Ensemble EnsembleDate ${HumanDateBegin} 
    10111071  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Ensemble EnsembleType "Ens_DATE" 
    1012    
     1072 
    10131073  # [UserChoices] 
    10141074  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card UserChoices JobName   ${MemberDir} 
    10151075  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card UserChoices DateBegin ${HumanDateBegin} 
    10161076  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card UserChoices DateEnd   ${HumanDateEnd} 
    1017    
     1077 
    10181078  # [Restarts] 
    10191079  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Restarts OverRule "y" 
    10201080  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Restarts RestartDate ${HumanRestartDate} 
    1021   IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Restarts RestartJobName ${ensemble_Ens_DATE_INITFROM} 
     1081  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Restarts RestartJobName ${initFrom} 
    10221082  IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card Restarts RestartPath ${ensemble_Ens_DATE_INITPATH} 
    10231083 
     
    10261086    IGCM_card_WriteOption ${SUBMIT_DIR}/${StartDir}/${MemberDir}/config.card ${comp} Restart "n" 
    10271087  done 
    1028    
     1088  unset initFrom 
     1089 
    10291090  # ==> Job 
    10301091  sed -e "s/\(#.*\)${config_UserChoices_JobName}\( *#.*\)/\1${MemberDir} \2/"            \ 
Note: See TracChangeset for help on using the changeset viewer.