Comment relancer un couplé "modipsl" pour le débugguer?

Comment lancer un couplé sur une certaine période de temps et le relancer à partir des restarts ainsi créés (i.e. le modèle se plante au 14ème jour d'une simulation, on voudrait lancer 10 jours à outputs normaux puis 4 jours avec tous les outputs activés pour essayer de comprendre ce qui se passe)

ATTENTION, cette procédure n'est plus nécessaire quand xios est activé: on peut extraire un point qui plante en modifiant simplement les *xml contrôlant xios et en relançant son job. Voir la FAQ utilisateurs

 

  1. Commencer par se créer un environnement de départ propre en modifiant le job de soummission: on rajoute un exit avant le lancement effectif de l'exécutable. On récupère ainsi sous le RUN_DIR, un répertoire contenant les fichiers et les exécutables nécessaires au lancement.
     e.g.:
      echo
      echo "#######################################"
      echo "#      DIR BEFORE RUN EXECUTION       #"
      echo "#######################################"
      echo
      ls -lrt
    
      echo "========================================================================"
      if [ ${DRYRUN} -le 1 ] ; then
        REAL_DATE_INIT=$( date )
        echo                                                                                   > ${Exe_Output}
        echo "#######################################"                                        >> ${Exe_Output}
        echo "EXECUTION of : ${EXECUTION}"
        echo "EXECUTION of : ${EXECUTION}"                                                    >> ${Exe_Output}
        echo                                                                                  >> ${Exe_Output}
    pwd   exit
    
  2. Sauvegarder ce répertoire pour ne pas avoir à répéter la manip précédente X fois:
        cd $SCRATCHDIR/RUN_DIR
        cd ...
        mv CPL6V5.10x00A.88591/ Dir_Init/  
  3. Recopier le répertoire "initial" dans un répertoire de travail
    cp -R Dir_Init/ Run_00
    
  4. Faire les modifications de pas de temps qui s'imposent dans le répertoire de travail:
    nday dans run.def (pour lmdz)
    nn_itend, nn_stock, nn_write dans namelist_cfg (pour opa9)
    e.g. pour faire un run de 10 jours avec 15 pas de temps OPA9 par jour:
        - nday = 10
        - nn_itend = nn_it000 + 10 * ORCA_NPDT_JOUR - 1 = 51690
        - nn_stock = nn_itend
        - nn_write = 10 * ORCA_NPDT_JOUR = 150
    
  5. Lancer un job qui se positionne dans le répertoire Run_00 et lance juste l'exécution. Attention, bien partir du Job qui correspond au modèle qu'on veut débugger (faire attention à l'entête et à la ligne d'exécution, il faut enlever le hostfile et rankfile) :
    e.g.
        #!/bin/ksh
        ######################
        ## CURIE   TGCC/CEA ##
        ######################
        #MSUB -r CPL6NPV5.01        # Job Name
        #MSUB -o Script_Output_CPL6NPV5.01.relance    # standard output
        #MSUB -e Script_Output_CPL6NPV5.01.relance    # error output
        #MSUB -eo
        #MSUB -n 380  # Number of cores
        #MSUB -T 86400              # Wall clock limit (seconds)
        #MSUB -q standard           # thin nodes
        #MSUB -A gencmip6
    
        # Below specific options that can be activated 
        ##MSUB -q ivybridge         # Option for Airain
        #MSUB -N 24                 # Number of nodes (16 cores per node)
        #MSUB -x                   # exclusive node
        #MSUB -E '--cpu_bind=none'
        BATCH_NUM_PROC_TOT=$BRIDGE_MSUB_NPROC
        set +x
        set -vx
        cd $SCRATCHDIR/RUN_DIR/.../Run_00
        time mpirun ... ./script_lmdz.x.ksh : ... ./script_opa.xx.ksh : -np 1 ./script_xios.x.ksh >> out_execution 2>&1    
     
  6.  Si tout s'est bien passé, on sauvegarde le répertoire dans lequel la simulation a 'bien' tourné et on prépare un nouveau répertoire dans lequel on va faire tourner le modèle à partir des restarts juste créés et avec les outputs "à fond".
    mv Run_00/ Run_00_10j
    cp -R Dir_Init/ Run_00
    
    on recopie les restarts des différents modèles dans le répertoire de travail:
    cd Run_00
    for i in 0 1 ......
    do
      cp ../Run_00_10j/XXXXX_restart_00$i.nc restartopa_00$i.nc
      cp ../Run_00_10j/XXXXX_restart_ice_00$i.nc restart_ice_in_00$i.nc
      cp ../Run_00_10j/XXXXX_restart_trc_00$i.nc restart_trc_in_00$i.nc
    done
    cp ../Run_00_10j/sechiba_rest_out.nc sechiba_rest_in.nc
    cp ../Run_00_10j/stomate_rest_out.nc stomate_rest_in.nc
    cp ../Run_00_10j/restart.nc start.nc
    cp ../Run_00_10j/restartphy.nc startphy.nc  
    on modifie les pas de temps dans run.def, namelist.cfg (ici pour refaire 5 jours)
    - nday=5
    - nn_it000 = nn_itend (du pas 4 ci-dessus) + 1
    - nn_itend = nn_it000 + 5 * ORCA_NPDT_JOUR - 1
    - nn_date0 = la bonne date
    - nn_stock = nn_itend
    - nn_write = 5 * ORCA_NPDT_JOUR = 75
    
    on modifie le output.def pour sortir uniquement un fichier "ins" à tous les pas de temps, si on utilise xios, modifier les xml appropriés
    # Noms des fichiers
    phys_out_filenames=      histmth histday histhf   histhf3h  histhf3hm histstn
    # Sortir ou non les fichiers
    phys_out_filekeys= n n   y  n n n
    # Niveaux de sorties
    phys_out_filelevels=     5       2       10        5         5         5
    ### Frequences des sorties
    phys_out_filetimesteps = 1.mth,  1.day,  1TS, 0.125day, 0.125day, 1800.s
    
    on n'oublie de faire la synchro des fichiers pour avoir les sorties jusqu'au moment du plantage
    dans physiq.def:
        ok_sync=y
    
  7. On relance le job de l'étape 5