État d'avancement de la plate-forme OpenPalm Réunion d'avancement projet AquiFR 21 avril 2015 État d'avancement de la plate-forme OpenPalm
Applications incorporées dans la maquette version du 29 janvier 2015 Plate-forme OpenPalm comprenant: 4 applications EauDyssée : Basse Normandie, Loire, Seine, Somme Pas de temps journalier Résolution de 125 m à 8000 m 1 application Marthe : Poitou-Charente (POC) Pas de temps mensuel Résolution 1000 m Code d'EauDyssée: Instruction PALM pour couplage avec sorties SURFEX Code Marthe: Librairie MARTHE tourne sous PALM
Rappel hiérarchie des répertoires Répertoire des codes AquiFR EauDyssée Marthe Basse Normandie Somme Poitou-Charente Loire Seine EauDyssée : Sortie binaire, texte Palm rundir Marthe : Sortie binaire, texte
Rappel carte des applications 255463 mailles 255463 mailles Somme Basse Normandie Seine Loire Poitou-Charente
Application Palm d'AquiFR version du 29 janvier 2015 Lecture fichier SURFEX grille SAFRAN 8 km sur la France au pas de temps journalier - Variables d'entrées (pas de temps, etc.) : initialement inscrites dans fichiers d'entrée du modèle - Forçage :Infiltration et ruissellement à chaque pas de temps 4 Applications EauDyssée avec directives Palm 1 Application Marthe indépendante Synchronisation des applications à chaque pas de temps Communique 1 entier de synchronisation
Application openPalm d'AquiFR version du 21 avril 2015 Marthe est couplé avec instructions Palms au pas de temps journalier - Application sur la Somme - POC en journalier pas encore testé EauDyssée MARTHE Synchronisation des applications à chaque pas de temps Communique 1 entier de synchronisation
Application openPalm d'AquiFR version du 21 avril 2015 Regroupement des 4 branches EauDyssée dans 1 seule branche EauDyssée MARTHE EauDyssée tourne en parallèle au sein de la même branche. - nécessite de connaître le répertoire de run de l'application en fonction du numéro de processeur
Regroupement des 4 branches EauDyssée Mise en parallèle d'EauDyssée dans sa carte d'idendité !PALM_UNIT -name eaudyssee\ ! -functions {F90 SUB_ODIC}\ ! -object_files {../EauDyssee/src/dir_obj/libeaudyssee_aquifer.a}\ ! -parallel mpi\ ! -minproc 1\ ! -maxproc 10\ ! -comment {librairie ODIC} ! …........ !PALM_OBJECT -name ruissellement\ ! -space NULL\ ! -localisation REPLICATED_ON_ALL_PROCS\ ! -intent IN\ ! -time ON\ ! -comment {Ruissellement SURFEX 1D} …...... Constante nb_appli_odic définie dans prepalm (nb_appli_odic = 4 pour 4 applications tournant en parallèle sur 4 processeurs)
Regroupement des 4 branches EauDyssée Au tout début du code d'EauDyssée : Lecture des répertoires de simulations de chaque applications à partir d'un fichier texte nommé “working_directory_eaudyssee” : Nb_mailles Working_directory 63226 ../rundir/somme 37620 ../rundir/loire 37667 ../rundir/basse_normandie 41609 ../rundir/seine_6_couches_ISBA_AGS OPEN(10, FILE='working_directory_eaudyssee', FORM='FORMATTED', STATUS='OLD') READ(10, *) DO I = 1, nb_appli_odic READ(10, '(I5, 1x, A100)') INBSOU, YTABAPPLI(I) ENDDO CLOSE(10) Changement de répertoire de run en fonction du numéro de processeur numéroté de 0 à 3 CALL MPI_Comm_rank(PL_COMM_EXEC, il_rank, il_err) CALL CHDIR(TRIM(YTABAPPLI(il_rank + 1)))
Application openPalm d'AquiFR version du 21 avril 2015 Regroupement des 4 branches EauDyssée dans 1 seule branche EauDyssée MARTHE Communique un tableau contenant les hauteurs de nappe les échanges nappe-rivière
Transmission des données hauteurs nappe et échange nappe/rivière EauDyssée parallèle sur 1 branche Somme Seine Loire Basse normandie Nb de mailles 63226 41609 37620 37667 4 tableaux produits de taille (2, nombre de mailles de l'appli) Coté Palm, utilisation d'un distributeur de type « custom » décrivant la répartition des tableaux locaux de chaque appli dans le tableau global. Distributeur Palm Hauteur nappe Qnappe/riv 1 tableau global de taille (2, nbsou_global) Constante Palm : nbsou_global = nombre de mailles totales des applis = 180122
Transmission des données hauteurs nappe et échange nappe/rivière Modification de la carte d'idendité d'EauDyssée !PALM_DISTRIBUTOR -name distr_aquifer\ ! -type custom\ ! -shape (nbsou_global, 2)\ ! -nbproc nb_appli_odic\ ! -function distr_aquifer\ ! -object_files {distr_aquifer.o domain_aquifer.o}\ ! -comment {} ! !PALM_SPACE -name size_aquifer\ ! -shape (nbsou_global, 2)\ ! -element_size PL_DOUBLE_PRECISION\ ! -comment {size aquifer} !PALM_OBJECT -name hauteur_qnapriv\ ! -space size_aquifer\ ! -distributor distr_aquifer\ ! -localisation DISTRIBUTED_ON_ALL_PROCS\ ! -time ON\ ! -intent OUT\ ! -comment {Matrice hnappe et qnapperiv} Description du distributeur basé sur les subroutines Fortran distr_aquifer.f90 et domain_aquifer.f90 Dans l'objet transmis, indication du distributeur utilisé et localisation
Transmission des données hauteurs nappe et échange nappe/rivière Dans le code EauDyssée, un seul PUT du tableau local de l'appli à rajouter à chaque pas de temps en remplacement de l'entier de synchronisation : ZHQ_OUT(:, 1) = ZH_PIEZO ZHQ_OUT(:, 2) = ZQNAPPE_RIV cl_object = 'hauteur_qnapriv' cl_space = 'size_aquifer' CALL PALM_PUT(cl_space, cl_object, JSTEP, PL_NO_TAG, ZHQ_OUT, il_err) Plus besoin de « tags » dans les communications → répartition des vecteurs locaux gérés dans « distr_aquifer.f90 » et « domain_aquifer.f90 »
Transmission des données hauteurs nappe et échange nappe/rivière Unité de Synchro OPEN(10, FILE='sortie_test.bin', FORM='unformatted', ACCESS='SEQUENTIAL', ACTION='write') DO JSTEP=1, INB_STEP ! cl_space = 'size_aquifer' cl_object = 'hauteur_qnapriv' CALL PALM_GET(cl_space, cl_object, JSTEP, PL_NO_TAG, ZHQ_OUT, il_err) WRITE(10) ZHQ_OUT ! Marthe DO ITAG = 1, nb_appli_marthe cl_space = 'one_integer' cl_object = 'synchro_Marthe' CALL PALM_GET(cl_space, cl_object, JSTEP, ITAG, ISYNCHRO_MARTHE, il_err) ENDDO … …. CLOSE(10)
Résumé 4 applications EauDyssée en journalier : Basse Normandie, Loire, Seine, Somme 2 applications Marthe : 1 Somme en journalier intégré à la nouvelle version 1 POC en mensuel Ajout d'une application EauDyssée : Rajouter une ligne au fichier “working_directory_eaudyssee” Modifier la constante Palm nb_appli_odic Modifier la constante Palm nbsou_global
Suite Modifications à incorporer dans le code de Marthe Regroupement des sorties, 1 seule branche Couplage avec le vrai SURFEX S'occuper du réseau hydrographique (maillage différent du réseau souterrain) Méthodologie similaire au maillage souterrain Identifier les recouvrements Adaptation des post-procs au nouvelles sorties regroupées
Installation du code via GIT Git : logiciel de gestion de version Partage du code et des applications entre tous les développeurs du projet Chacun peut soumettre ses modifications de manière cohérentes En ligne de commande sous ubuntu, git est disponible dans les dépôts : sudo apt-get install git Sous linux, le code peut etre récupéré à partir d'un serveur via la commande (accès ssh) : git clone utilisateur@serveur:/serveurgit/aquifr.git On obtient un répertoire aquifr contenant tous le projet AquiFR.
Installation du code via GIT Répertoire à la racine du projet aquifr: External : contient les fichiers .tgz correspondant à mpich, palm et prepalm 4 répertoires des sources d'Eaudyssée, de Marthe, de Synchro et Forçage Palm qui contient l'appli aquifr.ppl Results contenant les post-proc python Rundir contenant les répertoires de chaque applications Fichier ebauche_install_aquifr.sh Installation de l'application décrite dans le fichier ebauche_install_aquifr.sh : Compilation de PALM Compiltation d'EauDyssée Compilation de Marthe Génération du makefile Palm et compilation du palm_main