Changeset 864


Ignore:
Timestamp:
05/31/13 15:58:18 (11 years ago)
Author:
sdipsl
Message:
  • hindcast/forecast : can apply perturbation to any component. See #89
File:
1 edited

Legend:

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

    r829 r864  
    8787    IGCM_debug_Print 1 "periodic start not active" 
    8888    CastPeriodicStart=false 
    89     return 
    9089    ;; 
    9190  *[Yy]|*[Mm]) 
     
    116115      IGCM_debug_Print 1 "non-periodic start not active" 
    117116      CastNonPeriodicStart=false 
    118       return 
    119117      ;; 
    120118    *[Yy]|*[Mm]) 
     
    129127    (( DateNum = DateNum + 1 )) 
    130128  done 
     129 
     130  # Need to know all the restart filename of the component we will apply the noise to 
     131  IGCM_card_DefineArrayFromOption config.card ListOfComponents ${PerturbComp} 
     132  eval compname=\${config_ListOfComponents_${PerturbComp}[0]} > /dev/null 2>&1 
     133 
     134  # Target the component's card we apply the noise to 
     135  card=${SUBMIT_DIR}/COMP/${compname}.card 
     136 
     137  # Read the restart file list. To be used later 
     138  IGCM_card_DefineArrayFromOption ${card} RestartFiles List 
     139  ListFilesName=${compname}_RestartFiles_List 
     140  eval FileName0=\${${ListFilesName}[0]} > /dev/null 2>&1 
     141  eval NbFiles=\${#${ListFilesName}[@]} > /dev/null 2>&1 
     142 
     143  # Check 
     144  IGCM_debug_Print 1 "Nb Restart Files  = ${NbFiles}" 
    131145 
    132146  IGCM_debug_PopStack "IGCM_ensemble_CastInit" 
     
    415429  IGCM_debug_PushStack "IGCM_ensemble_CastPerturbFile" 
    416430 
     431  typeset i i_ j j4 file_out file_out_ 
     432 
    417433  #.. Debug Print .. 
    418434  echo 
     
    433449 
    434450  FileOut="${MemberDir}_${RestartDate}_${PerturbFile}" 
     451  IGCM_debug_Print 1 "FileIn  = ${DirIn}/${FileIn}" 
    435452  IGCM_debug_Print 1 "FileOut = ${DirOut}/${FileOut}.nc" 
    436  
    437   #IGCM_debug_Print 1 "FileIn  = ${DirIn}/${FileIn}" 
    438453 
    439454  IGCM_sys_TestFileArchive ${DirOut}/${FileOut}.nc 
     
    442457 
    443458    # * Look for the restart file we apply the noise to 
     459 
     460    # restart file list pertaining to the component we apply the noise to 
     461    # but not being the precise restart file we will apply the noise to 
     462    unset OtherFileInList 
     463    # generic restart filename list (like flxat, sstoc, restart, ...) 
     464    unset OtherGenericList 
     465 
     466    if ( [ X${FileName0} != X${NULL_STR} ] && [ X${FileName0} != XNONE ] ) ; then 
     467      (( i=0 )) 
     468      until [ $i -ge ${NbFiles} ]; do 
     469 
     470        (( i_ = i+1 )) 
     471        eval file_out_=\${${ListFilesName}[$i_]} > /dev/null 2>&1 
     472        eval file_out=${file_out_} 
     473 
     474        generic_restart_file_name_out=$( basename ${file_out} .nc ) 
     475 
     476        if [ ! ${generic_restart_file_name_out} = ${PerturbFile} ] ; then 
     477          set +A OtherFileInList ${OtherFileInList[*]} ${PerturbComp}_${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic_restart_file_name_out}\*.nc 
     478          set +A OtherGenericList ${OtherGenericList[*]} ${generic_restart_file_name_out} 
     479        fi 
     480 
     481        (( i=i+3 )) 
     482      done 
     483    fi 
     484    # How many restart files other than the one we will apply the noise to 
     485    NbOtherFiles=${#OtherGenericList[*]} 
    444486 
    445487    ########################## 
     
    464506      Archived=false 
    465507      Tared=true 
     508 
    466509      # Look for the tar file we want if we did not found it already 
    467       #if [ X${IsMatching} = X ] ; then 
    468         for PotentialTarFile in $( find ${ensemble_Ens_PERTURB_INITPATH}/${ensemble_Ens_PERTURB_INITFROM}/RESTART -name "${ensemble_Ens_PERTURB_INITFROM}_*_restart.tar" -print ) ; do 
    469           IsMatching=$( echo ${PotentialTarFile##*/} | sed "s:^${ensemble_Ens_PERTURB_INITFROM}_::" | sed "s:\.restart\.tar$::" | gawk -F_ -v restartdate=${RestartDate} '{if (($1 < restartdate) && ($2 >= restartdate)) {print $1"_"$2}}' ) 
    470           if [ ! X${IsMatching} = X ] ; then 
    471             TarFileFound=${PotentialTarFile} 
    472             break 
    473           fi 
    474         done 
    475       #fi 
    476       # already specialized for CPL sstoc and flxat! 
    477       IGCM_debug_Print 1 "tar xvf ${TarFileFound} ${PerturbComp}_${FileIn}*.nc ${PerturbComp}_${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_flxat.nc" 
    478       tar xvf ${TarFileFound} ${PerturbComp}_${FileIn}*.nc ${PerturbComp}_${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_flxat.nc 
     510      for PotentialTarFile in $( find ${ensemble_Ens_PERTURB_INITPATH}/${ensemble_Ens_PERTURB_INITFROM}/RESTART -name "${ensemble_Ens_PERTURB_INITFROM}_*_restart.tar" -print ) ; do 
     511        IsMatching=$( echo ${PotentialTarFile##*/} | sed "s:^${ensemble_Ens_PERTURB_INITFROM}_::" | sed "s:\.restart\.tar$::" | gawk -F_ -v restartdate=${RestartDate} '{if (($1 < restartdate) && ($2 >= restartdate)) {print $1"_"$2}}' ) 
     512        if [ ! X${IsMatching} = X ] ; then 
     513          TarFileFound=${PotentialTarFile} 
     514          break 
     515        fi 
     516      done 
     517 
     518      # Extract relevant restart files 
     519      IGCM_debug_Print 1 "tar xvf ${TarFileFound} ${PerturbComp}_${FileIn}*.nc ${OtherFileInList[*]}" 
     520      tar xvf ${TarFileFound} ${PerturbComp}_${FileIn}*.nc ${OtherFileInList[*]} 
    479521      nb_restart_file=$( IGCM_sys_CountFileBuffer ${PerturbComp}_${FileIn}_????.nc ) 
    480522    fi 
    481523 
     524    # Move around and perturb restart files so as to be able to start hindcast/forecast simulation members 
    482525    if [ ${nb_restart_file} -gt 1 ] ; then 
    483526      j=0 
    484       until [ $j -ge $nb_restart_file ]; do 
     527      until [ $j -ge ${nb_restart_file} ]; do 
    485528        j4=${j} 
    486529        if [ X${Buffered} = Xtrue ] ; then 
    487530          IGCM_sys_GetBuffer ${DirIn}/${FileIn}_${j4}.nc ${RUN_DIR}/${FileOut}_${j4}.nc 
     531 
     532          cd ${DirOut} 
     533          for generic in ${OtherGenericList[*]} ; do 
     534            ln -s ${DirIn}/${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic}.nc ${MemberDir}_${RestartDate}_${generic}_${j4}.nc 
     535          done 
     536          cd - 
     537 
    488538        elif [ X${Archived} = Xtrue ] ; then 
    489539          IGCM_sys_Get ${DirIn}/${FileIn}_${j4}.nc ${RUN_DIR}/${FileOut}_${j4}.nc 
     540 
     541          for generic in ${OtherGenericList[*]} ; do 
     542            IGCM_sys_RshArchive "cd ${DirOut} ; ln -s ${DirIn}/${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic}.nc ${MemberDir}_${RestartDate}_${generic}_${j4}.nc" 
     543          done 
     544 
    490545        elif [ X${Tared} = Xtrue ] ; then 
    491546          IGCM_sys_Mv ${PerturbComp}_${FileIn}_${j4}.nc ${RUN_DIR}/${FileOut}_${j4}.nc 
     547 
     548          for generic in ${OtherGenericList[*]} ; do 
     549            IGCM_sys_Mv ${PerturbComp}_${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic}.nc ${DirOut}/${MemberDir}_${RestartDate}_${generic}_${j4}.nc 
     550          done 
     551 
    492552        fi 
    493553        (( j=j+1 )) 
     
    496556      if [ X${Buffered} = Xtrue ] ; then 
    497557        IGCM_sys_GetBuffer ${DirIn}/${FileIn}.nc ${RUN_DIR}/${FileOut}.nc 
    498         # already specialized for CPL sstoc and flxat! 
    499         IGCM_sys_RshArchive "cd ${DirOut} ; ln -s ${DirIn}/${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_flxat.nc ${MemberDir}_${RestartDate}_flxat.nc" 
     558 
     559        cd ${DirOut} 
     560        for generic in ${OtherGenericList[*]} ; do 
     561          ln -s ${DirIn}/${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic}.nc ${MemberDir}_${RestartDate}_${generic}.nc 
     562        done 
     563        cd - 
     564 
    500565      elif [ X${Archived} = Xtrue ] ; then 
    501566        IGCM_sys_Get ${DirIn}/${FileIn}.nc ${RUN_DIR}/${FileOut}.nc 
    502         # already specialized for CPL sstoc and flxat! 
    503         IGCM_sys_RshArchive "cd ${DirOut} ; ln -s ${DirIn}/${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_flxat.nc ${MemberDir}_${RestartDate}_flxat.nc" 
     567 
     568        for generic in ${OtherGenericList[*]} ; do 
     569          IGCM_sys_RshArchive "cd ${DirOut} ; ln -s ${DirIn}/${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic}.nc ${MemberDir}_${RestartDate}_${generic}.nc" 
     570        done 
     571 
    504572      elif [ X${Tared} = Xtrue ] ; then 
    505573        IGCM_sys_Mv ${PerturbComp}_${FileIn}.nc ${RUN_DIR}/${FileOut}.nc 
    506         # already specialized for CPL sstoc and flxat! 
    507         IGCM_sys_Mv ${PerturbComp}_${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_flxat.nc ${DirOut}/${MemberDir}_${RestartDate}_flxat.nc 
     574 
     575        for generic in ${OtherGenericList[*]} ; do 
     576          IGCM_sys_Mv ${PerturbComp}_${ensemble_Ens_PERTURB_INITFROM}_${RestartDate}_${generic}.nc ${DirOut}/${MemberDir}_${RestartDate}_${generic}.nc 
     577        done 
     578 
    508579      fi 
    509580    fi 
Note: See TracChangeset for help on using the changeset viewer.