Formation MARS3D

Exercice de création du maillage

Exercice :

Créer deux rangs imbriqués en méthode “non-agrif” :

  1. Créer un nouveau projet

  2. Créer une première grille (RootGrid) avec l’outil de création de grille et les caractéristiques suivantes

    lonmin=-20. lonmax=15.
    
    latmin=40.  latmax=60.
    
    ni=421 nj=501
    

On vient de créer un grille couvrant toute l’Atlantique Nord est à 6 km de résolution environ

  1. Créer une seconde grille (ChildGrid) dans cette grande grille avec les caractéristiques suivantes :

    • Dessiner avec l’outil de création une grille avec des limites quelconques

    • Choisir pour le type d’emboîtement la méthode Non-AGRIF

    • Choisir la grille définie par Taille de maille curviligne avec dx=dy=1000 m

    • Dans le carré des Couches sur la gauche de l’interface sélectionner Child Grid 1 et dans le menu déroulant en dessous choisir le mode Caractéristiques des mailles

    • En dessous cliquer sur le volet permettant de choisir les bornes (I Min / J min & I Max / J Max) au sein de la RootGrid qui vont délimiter l’emprise de cette grille

      Imin=180 Imax=190
      
      Jmin=158 Jmax=167
      

La nouvelle grille est à 1KM et couvre les baies de Douarnenez et Audierne

  1. Sauvegarder le projet (laisser nom par défaut) et éditer le fichier head.TEST et vérifier qu’il est bien comme celui là

    TEST0  65.0000000  40.0000000  15.0000000 -20.0000000   0.0500000   0.0833333        5662.40   5563.84 421 501 167 158 190 180 TEST
    TEST1  48.2996555  47.8500000  -4.2611386  -5.0833333   0.0089931   0.0134786        1004.48    999.96  62  51   0   0   0   0 TEST
    
_images/formation_bmg1.png
  1. Générer la bathymétrie du rang1 (ChildGrid1_TEST.nc) avec INTERP_BATHY.exe en mode interp_grid2grid et le catalogue de MNT suivant

    /home13/dedale/BATHY/MNT/IFR_MBAN_MANCHEATL_100_02_R/BN-depth2010.mnt.bmg.nc
    /home13/dedale/BATHY/MNT/IFR_MBAN_MANCHEATL_100_02_R/BS-depth2010.mnt.etendu_nord_sud.bmg.nc
    
  2. Ouvrir le fichier résultat avec le module CheckBMG pour visualiser la bathy

_images/formation_bmg2.png
  1. Avec les outils de retouche mettre à terre les points dans la rade de Brest (terre=-999)
_images/formation_bmg3.png
  1. Sauvegarder le projet et donc les modifications de changement de grille

La bathy du rang1 est maintenant prête !

Pour un gain de temps la bathymétrie du rang0 est déjà prête et disponible sous

/home1/caparmor/spetton/MARS/FORMATION/BATHY/bathy_rang0.nc

L’étape suivante est la mise en place de la configuration

Mise en place d’une configuration

  • Ouverture terminal

  • Connexion sur Datarmor

    ssh -X login@datarmor
    

1.Installation et compilation

On va se baser ici sur une configuration à deux rangs (cf. grilles crées avec CreateBMG). Le rang0 sera une configuration 2D avec juste la marée et le rang1 une configuration 3D avec aux frontières la marée du rang0 et la température,salinité d’un modèle de plus grande emprise.

  1. Positionnement de l’environnement :

    • Création des répertoires de configuration

      mkdir /home1/datahome/${USER}/MARS
      mkdir /home1/datahome/${USER}/MARS/MARS_CONFIG  ($UDIR)
      mkdir /home1/datawork/${USER}/MARS
      mkdir /home1/datawork/${USER}/MARS/COMPILE_MARS ($CDIR)
      mkdir /home1/datawork/${USER}/MARS/RUN_MARS ($RDIR)
      
    • Positionnement de l’environnement unix

      source /home1/datahome/mcaillau/MARS/FORMATION/env_V11.1.sh
      
    • Vérification

      echo $HOMEMARS
      
  2. Mise en place des répertoires de travail pour la config ($UDIR,$CDIR,$RDIR) et création des makefiles

    mkconfdir TEST V11.1 2
    
  3. Aller dans le répertoire de compilation

    cd $UDIR/TEST/TEST-V11.1
    
  4. Installer le modèle (rappatriement des sources du HOMEMARS vers le CDIR)

    make install
    
  5. Edition des parameters.F90 (nombre de mailles et de niveaux verticaux)

    • Editer le parameter.F90_rank0 et compléter le nombre de mailles

      CHARACTER(len=4),PARAMETER :: nrac='TEST'
      imin=0,imax=421,jmin=0,jmax=501 ! configuration rang_0
      INTEGER,PARAMETER :: kmax=1,obc_width=2  ! kmax=1 => modele 2D !!
      
    • Editer de la même manière le parameter.F90_rank1 et mettre 10 niveaux sur la verticale pour ce rang en 3D

      CHARACTER(len=4),PARAMETER :: nrac='TEST'
      imin=0,imax=63,jmin=0,jmax=51 ! configuration rang_1
      INTEGER,PARAMETER :: kmax=10,obc_width=3 ! kmax=10 => modele 3D à 10 couches
      
  6. Sortir la routine bathy.F90 pour “modification” :

    • Regarder les routines présentes dans le répertoire WORK

      ls WORK/*
      
    • Extraire la routine de lecture de la bathy

      getfile bathy.F90
      
  1. Edition du fichier key_CPP.list:

Note

Ce fichier contient des “clés” de compilation permettant d’activer des fonctionnalités physiques ou numériques du code. Elles sont toutes listées et il existe des combinaisons par défaut selon le type de modèle que l’on veut faire. Deux jeux de clés sont proposés ci dessous dans le cas hydro en 2D ou en 3D

  1. Edition des Makefiles

    • Editer le Makefile.datarmor_rank0 et ajouter les clés CPP pour un modèle 2D qui utilise la composition harmonique aux frontières à partir du modèle FES2004

      CPPFLAGS      = -Dkey_tide_fes2004 -Dkey_sflx_turb_default -Dkey_sflx_ir_swimbank -Dkey_sflx_solar_luyten  -Dkey_dyn_adv_quick
      
    • Editer le Makefile.datarmor_rank1 et ajouter les clés CPP suivantes pour un modèle 3D

      CPPFLAGS      = -Dkey_sflx_turb_default -Dkey_sflx_ir_swimbank -Dkey_sflx_solar_luyten -Dkey_dyn_adv_quick -Dkey_tssub_adv_ultimatequickestmacho -Dkey_tssub_wcompact
      
    • Dans les 2 Makefiles mettre loption de lancement sequentiel (1proc) :

      SCHEME = seq (version sequentielle)

    • Dans les 2 Makefiles mettre les options de compilation :

      PREC = precise (version optimisee)

  2. Compilation des deux rangs (génération d’un exécutable par rang)

    • Compiler le premier rang en tapant la commande suivante dans le terminal

      qsub -v rank=0 compile
      
    • S’assurer que l’exécutable du rang0 a bien été généré

      ls $RDIR/TEST/TEST-V11.1/rank_0/mars_exe_rank0
      
    • Compiler le deuxième rang en tapant la commande suivante dans le terminal

      qsub -v rank=1 compile
      
    • S’assurer que l’exécutable du rang1 a bien été généré

      ls $RDIR/TEST/TEST-V11.1/rank_1/mars_exe_rank1
      

Note

Maintenant que la compilation du modèle est effectuée il faut passer à la paramétrisation des deux configurations et à l’exécution

2. Copie d’une configuration existante

  1. Mise en place des répertoires de travail pour la config ($UDIR,$CDIR,$RDIR) et création des makefiles

    mkconfdir TEST V11.1_bis 2
    
  1. Aller dans le répertoire de compilation

    cd $UDIR/TEST/TEST-V11.1_bis
    
  1. Editer le fichier makefile et indiquer le chemin de la configuration précédente à copier

    PREV_CONFIG = '/home1/datahome/mcaillau/MARS/MARS_CONFIG/TEST/TEST-V11.1'
    
  2. Lancer la commande de copie de config pour le rappattriement des makefile et routines du UDIR

    gmake copyconfig
    
  3. Vérifier que vous avez bien les mêmes subroutines & Makefiles que dans la config précédente

  4. Installer le modèle (rappatriement des sources du HOMEMARS vers le CDIR)

    make install
    

3. Paramétrisation et exécution

La paramétrisation consiste à renseigner dans les fichiers de configurations (paracom.txt, paramain.txt et parsapec.txt) les fichiers d’entrée de chaque rang ainsi que certaines formulations physiques ou numériques.

  1. Rappatrier les fichiers d’entrée dans le répertoire inputs :

    Après avoir fait le mkconfdir, un répertoire inputs est crée dans $RDIR/TEST/. Il va contenir tous les fichiers d’entrée au modèle.

    Copier dans $RDIR/TEST/inputs les fichiers suivants :

    • Bathy et fichier head

      cp /home1/datahome/mcaillau/MARS/FORMATION/BATHY/head.TEST $RDIR/TEST/inputs/
      cp /home1/datahome/mcaillau/MARS/FORMATION/BATHY/bathy_rang0.nc $RDIR/TEST/inputs/
      cp /home1/datahome/mcaillau/MARS/FORMATION/BATHY/bathy_rang1_ZH.nc $RDIR/TEST/inputs/
      
  • OBC3D

    cp /home1/datahome/mcaillau/MARS/FORMATION/OBC3D/Extract/obc_*.nc $RDIR/TEST/inputs/
    cp /home1/datahome/mcaillau/MARS/FORMATION/OBC3D/Extract/ic.nc $RDIR/TEST/inputs/
    
  • riviere

    cp /home1/datahome/mcaillau/MARS/FORMATION/RIVIERE/river.dat $RDIR/TEST/inputs/
    

  1. Paramétrisation du paramain.txt

    C’est un des 2 fichiers de paramètres communs aux 2 rangs.

    Il se situe dans le répertoire $RDIR/TEST/TEST-V11.1/ On va le copier depuis le répertoire de formation

    cd $RDIR/TEST/TEST-V11.1/
    cp /home1/datahome/mcaillau/MARS/FORMATION/PARA/paramain.txt $RDIR/TEST/TEST-V11.1/
    

    Les valeurs par défaut conviennent dans la plupart des cas.


  1. Paramétrisation du fichier paracom.txt

    C’est le deuxième fichier de paramètres commun. On va le copier depuis le répertoire de formation

    cp /home1/datahome/mcaillau/MARS/FORMATION/PARA/paracom.txt $RDIR/TEST/TEST-V11.1/
    

    Les champ suivants doivent être modifiés :

    • Dates de début et fin de run

      date_start = '01/05/2014 00:00:00'
      date_end = '05/05/2014 00:00:00'
      
    • Chemin vers le fichier head.TEST

      file_head = '../../inputs/head.TEST'
      

      Il décrit l’emprise géographique et la résolution des rangs

    • Section météo

      l_meteo_stat = .true.
      l_meteo_hom = .true.
      wind_veloc = 0.0
      wind_dir = 275.0
      file_meteo  = ''
      
    • Section marée

      file_tide_harmcp='/home/datawork-mars/DATA/TIDES/FES2004/fes2004_oco1.2.nc'
      
  2. Paramétrisation des fichiers paraspec.txt

    Ce fichier est propre à chaque rang.

    Copier les 2 fichiers paraspec.txt du rang0 et du rang1 dans leur répertoire respectifs

    cd $RDIR/TEST/TEST-V11.1/rank_0
    cp /home1/datahome/mcaillau/MARS/FORMATION/PARA/paraspec_rank0.txt paraspec.txt
    cd $RDIR/TEST/TEST-V11.1/rank_1
    cp /home1/datahome/mcaillau/MARS/FORMATION/PARA/paraspec_rank1_3D.txt paraspec.txt
    

    Voici les principaux éléments à modifier :

    • Section bathy (nambathy)
    • Section init (namrestart)
    • Section obc (namobc)
    • Section meteo (nammeteo)
    • Section restart (namesaverestart)
    • Section output (namoutput)
    • Section viscosité (namvisc)
    • Section turbidité (namturb)
    • Section diffusion 2D (namdiff)
    • Section sigma (namgridsig)
    • Section rivière (namriver)
    • Section paramètres numériques (namparam)
    • Section paramètres thermique (namthermo)
    • Section trajectoire (namtraj)
    • Section diagnostics (namdiag)

  1. Edition du fichier de gestion des sorties output.dat

    Il est propre à chaque rang.

    Ce fichier indique quelles variables physique on demande au modèle de sortir , à quelle fréquence et sur quelle période

    1. Aller dans le répertoire de chaque rang et éditer le fichier output.dat
    2. Corriger les dates de début et de fin pour cohérence avec les dates de la simulation
    3. Pour le rang0 activer la sortie de XE,U,V (l_ssh & l_ubt)
    4. Pour le rang1 activer la sortie de XE,UZ,VZ,T,S (l_ssh, l_u3d, l_sal, l_temp)

  1. Execution en séquentiel

    1. Aller dans le répertoire rank_0

      cd $RDIR/TEST/TEST-V11.1/rank_0
      
    2. Editer le fichier batch_seq_no_scratch et modifier le walltime

    #!/bin/csh
    #PBS -l mem=1g
    #PBS -l walltime=HH:MM:00
    
    # modify walltime
    
    # cd to the directory you submitted your job
    cd $PBS_O_WORKDIR
    
    # load the libraries
    source /usr/share/Modules/3.2.10/init/csh
    module purge
    module load NETCDF/4.3.3.1-mpt-intel2016
    
    if ( $?rank ) then
    echo "Simu with rank number:"$rank
    endif
    
    # submit job
    date
    echo "submit sequential job with $NETCDF_MODULE "
    time ./mars_exe.$NETCDF_MODULE > & mars_seq.out
    date
    
    
    
    1. Lancer l’executable en batch séquentiel sur le calculateur

      qsub -N nom_du_job batch_seq_no_scratch
      
    2. Aller dans le répertoire rank_1

      cd $RDIR/TEST/TEST-V11.1/rank_1
      
    3. Editer le fichier batch_seq_no_scratch

    4. Lancer le modèle en séquentiel

      qsub batch_seq_no_scratch
      
    5. vérifier que son run est bien lancé sur le calculateur

      qstat
      qstat -u votre_login
      

  1. Suivi du run et des erreurs

    Au début de chaque run un ensemble de fichier logs est crée

    • simu.log : Récapitulation des paramètres utilisés pour la simulation

    • waring.log : Fichier de warning contenant des avertissements à consulter mais pas bloquant pour le déroulement du modèle

    • error.log : Fichier d’erreur généré par le modèle lui même et stoppant la simulation si une erreur est détectée

      Warning

      Toujours verifier le fichier error.log en premier !!!!

    Au cours du run :

    • listing : fichier imprimant à chaque pas de temps modèle la date et les vitesses max dans le modèle

      Warning

      Toujours regarder l’avancement du modèle avec ce fichier. Si des vitesses très grandes apparaissent c’est que le modèle risque de planter.

    • output ou mars_out_mpi : fichier imprimant quelques informations en début et fin de simu et également les plantages de la simulation

      Warning

      Fichier important à consulter pour voir si la simulation se déroule bien et s’est bien terminée.

    • champs.nc : Fichier netcdf contenant les sorties du modèle et remplit au fur et à mesure à une fréquence définie dans le output.dat

      Warning

      il peut être consulté au cours du run pour voir si les champs de sortie sont cohérents

4. Recompilation en parallèle et exécution

  • Aller dans le UDIR

    cd $UDIR/TEST/TEST-V11.1
    
  • Editer le Makefile._rank0 :

    • Modifier les lignes suivantes

      SCHEME=mpi
      
    • ajouter la clé CPP suivante dans la section CPPFLAGS

      -Dkey_MPI_2D
      
  • recompiler le modèle

    qsub -v rank=0 compile
    
  • Recommencer la même procédure pour le rang1 et recompiler

  • Aller dans le RDIR

    cd $RDIR/TEST/TEST-V11.1/rank_0
    
  • Editer le script batch_mpt_no_scratch et le configurer pour lancer sur 2 noeuds (56 procs)

#!/bin/csh
#PBS -q mpi_NN
#PBS -l mem=6gb
#PBS -l walltime=HH:MM:00

# modify mpi_NN, walltime
# NN =Number of nodes (one node= 28 cpus)
# NN= 1 for 28 cores, NN= 2 for 56...

# cd to the directory you submitted your job
cd $PBS_O_WORKDIR

# load the libraries
source /usr/share/Modules/3.2.10/init/csh
module purge
module load NETCDF/4.3.3.1-mpt-intel2016

if ( $?rank ) then
echo "Simu with rank number:"$rank
endif

# submit job
date
echo "submit MPI job with  $NETCDF_MODULE "
setenv mpiproc `cat $PBS_NODEFILE  | wc -l`
echo Number of MPI cpus : $mpiproc
time $MPI_LAUNCH ./mars_exe.$NETCDF_MODULE >& mars_mpi.out
date

  • Lancer le modèle sur 28 procs (1 noeud) avec la commande suivante dans le terminal

    qsub batch_mpt_no_scratch
    

Warning

Par défaut le modèle découpe le domaine en bande selon le nombre de procs demandés. Il faut faire attention à la cohérence nombre de mailles selon Y / nombre de procs en pensant à toujours avoir au moins 10 mailles par bande 2 solutions pour parer à ce problème:

Faire un découpage 2D en utilisant l'outil *decoupe* disponible sous /home/datawork-mars/TOOLS/MPI2D_DOMAIN
Faire du hybride (MPI+OMP) en répartissant au sein d'un noeud les procs pour le MPI et l'OpenMP

Refaire l'exercice de compilation MPI sur le rang1 et expliquer pourquoi ça marche ou pas

5. Recompilation en hybride (OMP+MPI) et exécution

  • Aller dans le UDIR

    cd $UDIR/TEST/TEST-V11.1
    
  • Editer le Makefile._rank1 :

    • Modifier les lignes suivantes

      SCHEME=hyb
      
    • ajouter les clés CPP suivante dans la section CPPFLAGS

      -Dkey_MPI_2D -Dkey_MPIOMP
      
  • recompiler le modèle

    qsub -v rank=1 compile
    
  • Aller dans le RDIR

    cd $RDIR/TEST/TEST-V11.1/rank_1
    
  • Editer le script batch_hyb_no_scratch et configurer pour lancer sur 2 noeuds, 2procs MPI & 14procs OMP

#!/bin/csh
#PBS -q mpi_NN
#PBS -l select=NN:ncpus=28:mpiprocs=YY:ompthreads=XX:mem=60g
#PBS -l walltime=HH:MM:00

# specify NN : 1 to use 28 cores in total
#             2        56
#             3        84 etc...
#
# YY*XX=28
# specify how many mpi procs (Y) you want to put on each node in 'mpiprocs'
# Y can be 1,2,4,7,14
# consequently ompthreads is automatically set to 28,14,7,2
# specify the walltime

# cd to the directory you submitted your job
cd $PBS_O_WORKDIR

# load the libraries
source /usr/share/Modules/3.2.10/init/csh
module purge
module load NETCDF/4.3.3.1-mpt-intel2016  

# OMP
# #default OMP_SCHEDULE  is "static", instead use dynamic for mars
setenv OMP_SCHEDULE "dynamic,1"

if ( $?rank ) then
echo "Simu with rank number:"$rank
endif
# submit job
date
echo "submit HYBRID job with  $NETCDF_MODULE "
setenv mpiproc `cat $PBS_NODEFILE  |wc -l`
echo Number of MPI procs in total : $mpiproc
echo Number of OpenMP threads for each MPI procs: $OMP_NUM_THREADS
echo "The number of cores in in total is MPI_nb*OMP_nb*select"
time $HYB_LAUNCH ./mars_exe.$NETCDF_MODULE >& mars_hyb.out
date

  • Lancer le modèle avec la commande suivante dans le terminal

    qsub batch_hyb_no_scratch
    

6. Ajout d’un fichier météo

  • Editer le fichier paracom.txt

  • Désactiver la météo homogène spatiale et temporelle

    l_meteo_stat = .false.
    l_meteo_hom = .false.
    
  • Ajouter le chemin dans la section meteo

    file_meteo  = '/home1/datahome/mcaillau/MARS/FORMATION/METEO/meteo.nc'
    
  • Modifier les champs suivants dans le paraspec.txt

    l_sflx_rpa=.true.
    l_sflx_rwind=.true.
    
  • Modifier les fichiers output.dat pour sortir dans le fichier résultat la tension du vent (l_outwind)

  • relancer le rang0 et le rang1

7. Utilisation d’un fichier restart

  • S’assurer que le modèle produise des fichiers de reprise en modifiant les champs suivants dans le paraspec.txt

    l_saverestart_1file = .false.
    l_saverestart_bydate = .true.
    file_saverestart= 'save.nc'
    saverestart_step = 1.0d0 /
    
  • sauvegarder le paraspec.txt

    cp paraspec.txt paraspec.txt.init
    
  • modifier les champs suivants dans le paraspec.txt du rang1 pour une reprise à partir d’un des fichiers save (le 02/05 par exemple)

    l_initfromfile = .true.
    file_init = 'save_20140502000106.nc'
    l_init_restart=.true.
    l_init_rtime=.true.
    l_init_rdt=.true.
    l_init_rssh=.true.
    l_init_rbtvel=.true.
    l_init_r3dvel=.true.
    l_init_rwz=.true.
    l_init_rturb=.true.
    l_init_rsal=.true.
    l_init_rtemp=.true. /
    
  • modifier la datestart3d dans la section namdate du paraspec.txt

    date_start3d = '02/05/2014 00:01:06'
    

8. En cas de debbugage

Il faut recompiler le modèle avec des options de compilations différentes et activer les options de debuggage

  • Aller dans le UDIR

    cd $UDIR/TEST/TEST-V11.1
    
  • Editer le Makefile.datarmor_rank1 et décommenter la lignes suivante

    DBUG          = -CB -O0 -fpe0 -fp-model source -traceback -assume byterecl -convert big_endian -p -pg -g -check bounds -check uninit -ftrapuv -warn -warn interface -fno-alias -fno-fnalias -debug -check all  -implicitnone -warn all -fp-stack-check -heap-arrays -gen-interface
    
  • Recompiler le modèle

    qsub compile
    

CHAINOP

La chaine opérationnelle est une librairie permettant de générer de façon automatique des forçages Météo,Rivières,OBC3D pour les configurations MARS3D

Elle permet aussi le lancement de Runs et de simulations longues en gérants la reprise (restart) de manière automatique. Elle a été conçue à la base pour les runs opérationnels et est aussi utilisée pour les Hindcast.

Elle est basée sur des scripts python et pilotée par un fichier de configuration unique et propre à chaque config : fichier cfg

Ce fichier cfg est composé de plusieurs sections décrivant l’environnement de travail et chacune des tâches (météo,obc,rivières,...etc) réalisables avec la chainop

  • création du repertoire de config

    mkdir $DATAWORK/CHAINOP/
    cd $DATAWORK/CHAINOP/
    cp -r /home1/datawork/mcaillau/chainop/tools_fortran .
    cp /home1/datawork/mcaillau/chainop/config_test.cfg .
    ln -s /home/datawork-mars/TOOLS/lib_operational_chain/launcher.py launch_config
    
  • Edition du fichier de configuration

    La description complète des sections de la chaine opérationnelle est disponible ici here

Principaux champs à changer :

  • Section directories
    • operational_dir : chemin vers le répertoire chainop (/home1/datawork/user/CHAINOP ?)
  • Section XML : Le fichier XML est un fichier vous rapportant l’état des tâches en cours (en run, fini ou erreur)
    • name : nom que vous voulez donner à votre fichier de rapport
    • directory : Path vers le répertoire XML obligatoirement sur le disque /home1/datahome
  • Section treatments : section qui liste les tâches que l’on veut faire faire par la chainop. Chaque nom correspond à une sous section décrite en dessous.
  • Sous Section meteo_test : exemple de traitement de la météo au format MARS.
    • name : nom du job
    • launch : nom de la fonction de la librairie qui va faire le traitement
    • startshift : décalage temporel par rapport à la date demandée
    • function : fonction dans la librairie pour le traitement météo (voir doc chainop)
    • memory : mémoire allouée au JOB PBS. paramètre très important en cas de plantage
    • walltime : temps du Job PBS pour le traitement. attention à donner suffisament de temps pour finir le Job
    • arguments:
      • model : nom du modèle à utiliser (arome,arpegeHR cf doc chainop)
      • lonmin,lonmax,latmin,latmax : emprise du domaine sur lequel on veut extraire la météo
      • out : nom du fichier de sortie
  • répertoire XML à créer impérativement sur le /home1/datahome

    mkdir /home1/datahome/${USER}/XML
    
  • Chargement des modules dans le .cshrc

    vi ~/.cshrc
    
    # CHAINE OPERATIONNELLE
    module load vacumm
    
  • lancement

    ./launch_config config_test.cfg -s 2016-01-01,00:00 -e 2016-01-05,00:00
    
  • lien du XML

    ln -s ~/XML/test.xml .
    

Warning

Si plantage dans le XML TOUJOURS REGARDER DANS LE LOG DU JOB CORRESPONDANT SITUE DANS LE REPERTOIRE logs automatiquement crée

Formation MARS3D Module Substance

Exercice de modification de la configuration hydrodynamique

  1. reprenez la configuration hydrodynamique TEST

  2. faites une modification dans un fichier (par exemple bathy.F90)
    • getfile WORK/bathy.F90

    • modificaton pour test. Exemple : ligne 219

      IF(no==1) THEN
           h0_g(50:53,35)=-valmanq
           hx_g(49:53,35)=-valmanq -h0fond
           hy_g(50:53,34:35)=-valmanq -h0fond
      ENDIF
      
  3. rajouter une subroutine bidon.F90 (ici pour exemple ne marchera qu’avec la cle key_substance)
    • recopier une subroutine

      cp /home1/datahome/bthouve/MARS/MARS_CONFIG/TEST/TEST-V11.1subs/bidon.F90 PHYS/TRA
      ln -s PHYS/TRA/bidon.F90
      
    • modifier main.F90 (apres un getfile)

    • exemple : apres la ligne 287

      write(*,*)'appel a bidon'
      CALL bidon
      
    • rajouter le nom de la routine bidon dans la liste des routines à compiler (dans Make_OBJS.h) avant main.F90

  4. compiler et verifier

Reprise d’une configuration Hydrodynamique

  1. Choisir la version dans laquelle vous voulez travailler (Elle peut être plus récente que celle de la configuration hydrodynamique)

    • changer votre $HOMEMARS dans .cshrc

    • n’oubliez pas de taper ensuite

      source .cshrc
      
  2. Installer votre nouvelle configuration

    • créer un nouveau projet (mkconfdir..) dans cette version. Par exemple

      mkconfdir TEST V11.1_subs 2
      
    • installer le modèle

    • copier la configuration hydrodynamique (si il y a des routines modifiees ou ajoutees dans cette configuration) :

      . dans makefile : PREV_CONFIG =

      gmake copyconfig
      
      . Si vous utilisez une version plus récente, faire la mise à jour des subroutines qui ont été modifiées dans la configuration hydrodynamique [ voir la documention
      : doc_update. ].

      Exemple

      vimdiff parameters.F90_rank1 $HOMEMARS/INC/
      
      . Les Makefile_datarmor sont également à verifier. Ils peuvent avoir changé d’une version à l’autre et vous avez recopié avec copyconfig l’ancien Makefile.

      Donc il faut les corriger en se référant au Makefile.datarmor_ref. Ne pas modifier ce qui attrait au rang, ni aux clés CPP choisies pour la configuration hydrodynamique

      vimdiff Makefile.datarmor_rank0   Makefile.datarmor_ref
      vimdiff Makefile.datarmor_rank1   Makefile.datarmor_ref
      

      . De même pour le Make_OBJS.h, si il y a des routines qui ont été ajoutées dans la configuration, il faut les rajouter.

    • choisir une compilation en MPI (dans Makefile.datarmor), avec la clé -Dkey_MPI_2D:

      SCHEME= mpi
      
    • Compiler le rang 0 après avoir modifier le makefile (RANK=0)

      qsub -v rank=0 compile
      
  3. paramétrisation générale

    • Aller dans le $RDIR correspondant à votre configuration

    • Modifier vos para*.txt en se référant aux fichiers de la configuration hydrodynamique

      • paramain.txt : XE
      • paracom.txt : dates de debut et fin de simu; fichier meteo
  4. Faire tourner le rang 0

    • Modifier vos para*.txt dans rank_0 et le fichier output.dat

      • rank_0/paraspec.txt : date_startshift, file_bathy,meteo, etc...
      • rank_0/output.dat
      • indiquer le temps max de simulation dans le fichier batch que vous voulez utiliser.

        Ici : batch_mpt_no_scratch (run mpi avec ecriture des résultats dans le repertoire $RDIR courant)

        #PBS -l mem=10g
        #PBS -l walltime=01:00:00
        
      • Lancer la simulation

        qsub batch_mpt_no_scratch
        

TEST 0 : Tester le module Substance sur le rang 1

  1. preparer le rang 1 avec le module substance ($UDIR)

    • Modifier le rang dans makefile

    • Rajouter les clés CPP dont vous avez besoin dans Makefile.datarmor_rank1 pour activer le module substance et les options voulues

      (-Dkey_substance -Dkey_parsub_wquickupwind ..). Mettre un antislash pour une suite de ligne

      Rappel : les cles disponibles sont listées dans le fichier key_CPP.list

    • donner le nombre total exact de variables (nb_var_base) que vous allez simuler dans parameters.F90_rank1. Attention : choisir la definition de nb_var_base correspondant aux clés choisies (ici = pas de cle key_sedim et pas de clé key_biolo)

          #ifdef key_sedim
          ----
          #else
      INTEGER,PARAMETER :: nb_var_sedconstit=0
      !!********************************************************************************************
      !! for not sediment module  :
      !! exact number of simulate variables (if NOT key_biolo & NOT key_castestsub ou castestconta)
      !! sum of state (dissolved and particulate) + fixed +intermediate + driving variables
      !!===========================================================================================
          #if ! defined key_biolo
      INTEGER,PARAMETER :: nb_var_base=3
      #endif
      ----
      
    • Pour les premiers essais, on laisse le Makefile.datarmor avec une compilation en sequentiel

      et avec des options de compilation permettant de voir les lignes où il y une erreur ou pour debugger si besoin

      • avec PREC= ozero (au lieu de PREC = precise) et

      • soit avec FTN = -cpp -C -i4 -r8 (vérification des dépassements de tableaux)

      • soit en décommentant la ligne DBUG (enlever le #)

        DBUG          = -CB -O0 -fpe0 -fp-model source...
        
    • compiler

      qsub -v rank=1 compile
      
  2. preparer les fichiers de données pour la simulation de rang 1 avec le module substance

Note

L’objectif ici est de simuler 4 variables : 1 dissoute, 2 particulaires, l’une avec une faible vitesse de chute, l’autre avec une forte vitesse de chute. Elles sont rejetées à la côte par la riviere.


  • Aller dans le $RDIR de votre configuration (rank_1)
    • Modifier le paraspec.txt en comparant avec le paraspec de la configuration hydrodynamique
  • Remplir le fichier parasubs.txt, les noms des fichiers de données à lire pour les rejets et les variables

    file_outflow = '../../inputs/outflow_TEST0.dat',
    name_filesubs = '../../inputs/variable_TEST0.dat'
    filevardiag = '../../inputs/vardiag.dat'
    date_startsub = '01/05/2014 00:00:00'
    
  • aller dans inputs et créer le fichier variable_TEST0.dat en vous aidant du fichier donné pour exemple (recopier SUBS/variable.dat dans variable_TEST0.dat)

    • 1 variable dissoute : DISS1 avec une concentration initiale = 0.5
    • 1 variable particulaire : PART_leg avec une concentration initiale = 0.5 et une vitesse de chute de 0.00001 m/s
    • 1 variable particulaire : MES avec une concentration initiale = 0.01 et une vitesse de chute de 0.0001 m/s
  • dans inputs, récupérer le fichier river.dat de la configuration hydrodynamique (si besoin)

  • dans inputs, créer le fichier outflow_TEST0.dat en vous aidant du fichier donné pour exemple (recopier SUBS/outflow.dat dans outflow_TEST0.dat)

    • créer dans outflow_TEST0.dat un apport par la riviere “riviere” (voir river.dat) pour laquelle on donne la concentration de chaque substance rejetée. (donner les mêmes noms de riviere et la même position exactement).

    • Donner des noms pour les fichiers de valeurs de concentrations dans la rivière pour chaque substance rejetée. Exemple

      riv
      .true.
      42 19 1
      .false.
      riviere
      1
      DISS1
      ../../inputs/concentrations/DISS1_riviere.dat
      2
      PART_leg
      ../../inputs/concentrations/PARTleg_riviere.dat
      3
      MES
      ../../inputs/concentrations/MES_riviere.dat
      
  • créer les fichiers de données pour les concentrations (Attention les fichiers doivent être placés au bon endroit).

    Même format que pour les fichiers de debit. Voir exemple dans $HOMEMARS/../EXAMPLES/conc_fleuve.dat

    concentrations en DISS1 dans la riviere "riviere"
    simulation TEST0 formation MARS decembre 2016
    "unite: g/l"
    ---------------------------------------
    01/04/2014 12:00:00 0.1
    01/05/2014 12:00:00 0.1
    02/05/2014 12:00:00 0.2
    03/05/2014 12:00:00 0.5
    04/05/2014 12:00:00 1.0
    05/05/2014 12:00:00 2.0
    06/05/2014 12:00:00 0.1
    
  • remplir le fichier output.dat dans rank_1 (nom du fichier resultats, date de début, zones de sortie)

  • tester en lançant en sequentiel et en local apres avoir rempli le fichier batch_seq_no_scratch

    qsub -v rank=1 batch_seq_no_scratch
    
  • stopper la simulation si ça a l’air de tourner (qdel ..) (pas de message d’erreur, error_suffix.log vide.., voir mars_seq.out, listing ..))
  1. Faire tourner la simulaton en seq

    • Revenir dans $UDIR/ votre configuration et modifier le Makefile.datarmor_rank1 pour compiler en seq, sans debuggage et avec les options d’optimisation

      SCHEME = seq
      ----
      PREC = precise
      ----
      #DBUG          = -CB -O0 -fpe0 -fp-model source...
      
    • compiler : qsub -v rank=1 compile

    • aller dans $RDIR/...

    • lancer en seq en remplissant le fichier batch correspondant batch_seq_no_scratch

      #PBS -l mem=10gb
      #PBS -l walltime=01:00:00
      
    • Vous pouvez verifier en cours de route le simu_suffix.log , warning_suffix.log

    • A la fin, vous pouvez verifier si il y a bien “fin normale” dans mars_seq.out

    • Quand tout a bien marché, analyser les resultats avec ncview ou ferret :

      . le panache de DISS1 liée aux apports de la riviere . la chute des particules legeres et lourdes (les fortes concentrations au fond et faibles en surface) . les problèmes à la côte de profil vertical de MES avec un fort gradient conduisant à des instabilités (pas de dépôt dans les sédiments)

TEST 1 : Module Substance sur le rang 1 : ajouts d’apports

  1. Recommencer une simulation en rajoutant un rejet et un apport par l’atmosphere

Note

L’objectif ici est de rajouter un rejet en flux (sans riviere) pour une des variables et un apport par l’atmosphere.


  • Toujours avec 3 variables simulées et sans modification des options de compilation, ce n’est donc pas la peine de recompiler.

  • dans $RDIR : Modification du nom du fichier résultat dans output.dat

  • Garder en memoire le parasubs.txt du test0 : cp parasubs.txt parasubs_test0.txt

  • Modification du nom du fichier variable.dat dans parasubs.txt : variable_TEST1.dat

  • Modification du nom du fichier des apports : outflow.dat dans parasubs.txt : outflow_TEST1.dat

  • Dans inputs : création d’un nouveau fichier pour la caractérisation des variables : variable_TEST1.dat

    • mettre une valeur non nulle pour le flux de dépôt sec pour la variable Part_leg par exemple (1.e-9)
  • Dans inputs : création d’un nouveau fichier pour les apports : outflow_TEST1.dat

    • rajouter deux apports, non associés à une riviere, en un autre point, à un certain niveau et donner les noms des fichiers de valeurs de flux pour chaque variable rejetée.

      Ici on tente une variable rejetée au fond et une en surface au même point (deux apports) par exemple

      emissaire_fond
      .true.
      50 29 1
      .true.
      em
      1
      DISS1
      ../../inputs/concentrations/Flux_DISS1_emiss.dat
      ************************************************
      emissaire_surf
      .true.
      50 29 10
      .true.
      em
      1
      DISS1
      ../../inputs/concentrations/Flux_DISS1_emiss.dat
      ************************************************
      
  • créer une fichier de flux pour l’apport que vous venez de créer. Par exemple Flux_DISS1_emiss.dat

    Flux de DISS1 apporte par un emissaire fictif en i=50, j=29
    simulation TEST0 formation MARS decembre 2017
    "unite: kg/s"
    ---------------------------------------
    01/04/2014 12:00:00 2.0
    06/05/2014 12:00:00 2.0
    
  • dans $RDIR et rank_1 : sauvegarder le simu.log du test précédent

    cp simu_suffix.log simu_TEST0.log
    
  • relancer le run

  • analyser les resultats :

    . panache de l’émissaire pour la variable dissoute en surface et au fond . comparaison des résultats pour Part_leg entre le test0 et le test1

TEST 2 : Module Substance sur le rang 1 : Exercice sur la sauvegarde et les conditions initiales

  1. Recommencer une simulation en sauvegardant les resultats toutes les 24h et repartir d’un fichier de sauvegarde en conditions initiales

Note

L’objectif ici est de tester la sauvegarde, puis la réinitialisation d’un run, avec les mêmes variables, puis de nouvelles substances (test du l_restart_sub). La durée du run test pour les besoins de la formation étant très courte, cet exercice n’a pas de sens en soi ; cette démarche est utilisée lorsque les runs sont évidemment longs.


  • faire tourner le modèle en sauvegardant les resultats toutes les 24h [dans paraspec.txt : l_saverestart_bydate=.true. ; saverestart_step= 1 (jour)]

    • ==> vous obtenez deux fichiers de sauvegarde save_*.nc
  • faire une reprise après 2 jours de simu.

    • d’abord avec le même variable.dat, sans le modifier.

      • Changer le nom du fichier resultats dans output.dat

      • recopier paraspec.txt dans un paraspec_test1.txt pour le sauvegarder

      • dans paraspec.txt, modifier le nom du fichier initial file_init et tous les booleens de telle sorte qu’il reprenne la simulation comme une suite veritable (tout à .true.) + la nouvelle date de depart de la simu date_start3d]

        • ==> analyser les resultats en comparant avec le fichier resultats de toute la période.
    • puis recommencer mais cette fois modifier dans parasubs.txt : l_restart_subs =.true. et changer le nom du fichier resultat.

      • ==> analyser les resultats en comparant avec le fichier resultats de celle du test précédent. Voir l’effet du l_restart_subs
    • refaire ce même test (partant du 3 mai) en rajoutant une variable dissoute DISS2.

      • ==> vous devez faire plusieurs modifications. testez...

TEST 3 : Module Substance sur le rang 1 : Calcul de flux à travers des frontières

  1. Recommencer une simulation en utilisant la fonctionnalité “Bilan”

Note

L’objectif ici est de faire des calculs de flux et de bilans dans 2 zones plus une frontière ouverte.


  • Modification du nom du fichier résultat dans output.dat

  • Recopier le paraspec.txt du test2 dans paraspec_test2.txt et reprendre le paraspec.txt du test 1.

  • Garder en memoire le parasubs.txt du test2 : cp parasubs.txt parasubs_test2.txt

  • Choisir l’option l_bilan dans parasubs.txt

    l_bilan=.true.
    name_bilfil = '../../inputs/biltest.dat'
    dtout_budget = 1.0
    date_start_budget='01/01/2014 00:00:00'
    nb_border=3 /
    
  • dans inputs : créer une fichier définissant les zones de bilan; s’appuyer sur la documentation. et sur le fichier subbudgetdomain.dat donné comme exemple et avec des explications. On va créer pour le test :

    • une frontière ouverte à travers laquelle on voudrait évaluer les flux entrants dans la baie de Douarnenez (en i=36, j=25 à 37)

    • une zone de bilan couvrant toute la zone

    • une zone de bilan autour de la rivière jusqu’au raz de Sein

      1            , number of the border
      limite_baie_douarnenez        , name of the border
      .false.      , l_border_close
      1            , total number of horizontal (W-E) or vertical (N-S) segments
      36,25,37,W
      ***************************************************
      2            , number of the border
      total_zone        , name of the border
      .true.      , l_border_close
      4            , total number of horizontal (W-E) or vertical (N-S) segments
      1,63,1,S
      63,1,51,E
      63,1,51,N
      1,51,1,W
      ***************************************************
      3            , number of the border
      zone_sud_raz_de_sein        , name of the border
      .true.      , l_border_close
      4            , total number of horizontal (W-E) or vertical (N-S) segments
      17,55,22,N
      55,22,14,E
      55,17,14,S
      17,14,22,W
      ***************************************************
      
  • lancer le run

  • verifier la zone en regardant le ficverif_zone_budget ou en utilisant le script python de B. Mengual ($HOMEMARS/../TOOLS/PARSERVAR/ficverif_zone_budget_v2.py). Pour utiliser Python

    module load vacumm ; source $ACTIVATE vacumm
    python ficverif_zone_budget_v2.py  (apres avoir modifie votre chemin d'acces (PATH) dans le programme)
    

    Exemple de tracer de la zone 2 :

_images/figure_exple_zone_bilan.png
  • tracer les flux et bilans (fichiers .csv) avec matlab ou excel ou python..