1 / 22

Architecture de Polyphemus

Architecture de Polyphemus. Vue d’ensemble. Comment trouver ses repères? Comment envisager des adaptations mineures? A propos des outils de développement. A venir. Vue d’ensemble. L’organisation de la future version 1.4: reflète les 3 étapes suivantes: preprocessing, processing,

bertha
Download Presentation

Architecture de Polyphemus

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Architecture de Polyphemus • Vue d’ensemble. • Comment trouver ses repères? • Comment envisager des adaptations mineures? • A propos des outils de développement. • A venir.

  2. Vue d’ensemble L’organisation de la future version 1.4: • reflète les 3 étapes suivantes: • preprocessing, • processing, • post-processing. • reflète la modularité.

  3. /wgrib /eqsam /isorropia /isorropia_aec /newran /modules /models /driver /common /atmopy /SeldonData /AtmoData /Talos /include /preprocessing /ic /bc /bio /dep emissions /ground /meteo /processing/assimilation /castor /decay /gaussian /global /local /nesting /plume-in-grid /racm /radm /siream /siream-aec /postprocessing /ensemble /optics /waterplume /config (/config) /raw data /data /results

  4. Repère: structuration • Preprocessing: intérêt à générer des données intermédiaires communes à plusieurs scenarii ou traitements particuliers (calcul d’ensemble...).

  5. Un sous-répertoire par type de traitement. A un fichier .cpp correspond un programme exécutable (partout dans Polyphemus). Ex: Dans meteo, on compilera meteo.cpp pour obtenir meteo qui exploite des données ECMWF. Si on a des données MM5, on utilisera MM5-meteo obtenu à partir de MM5-meteo.cpp. /preprocessing /ic /bc /bio /dep emissions /ground /meteo

  6. Repère: structuration • Preprocessing: intérêt à générer des données intermédiaires communes à plusieurs scenarii ou traitements particuliers (calcul d’ensemble...). • Processing: programme qui traitera le modèle considéré (gaussien, eulérien, ...) avec une méthode donnée.

  7. Idem que preprocessing mais uniquement des .cpp avec les fichiers de configuration exemples /preprocessing /ic /bc /bio /dep /emissions /ground /meteo /processing /assimilation /castor /decay /gaussian /global /local /nesting /plume-in-grid /racm /radm /siream /siream-aec

  8. Repère: structuration • Preprocessing: intérêt à générer des données intermédiaires communes à plusieurs scenarii ou traitements particuliers (calcul d’ensemble...). • Processing: programme qui traitera le modèle considéré (gaussien, eulérien, ...) avec une méthode donnée. • Post-processing: en python pour profiter, soit de l’interactivité (ipython), soit de l’automatisation (écriture de scripts).

  9. /preprocessing /ic /bc /bio /dep /emissions /ground /meteo /processing /assimilation /castor /decay /gaussian /global /local /nesting /plume-in-grid /racm /radm /siream /siream-aec /postprocessing /ensemble /optics /waterplume

  10. Repère: structuration Dans le répertoire /include: • Ce qui est voué à être partagé (librairies, fonctions, etc...) • Ce qui est externe (newran, wgrib, isorropia...)

  11. /wgrib /eqsam /isorropia /isorropia_aec /newran /modules /models /driver /common /atmopy /SeldonData /AtmoData /Talos /include /preprocessing /ic /bc /bio /dep /emissions /ground /meteo /processing /assimilation /castor /decay /gaussian /global /local /nesting /plume-in-grid /racm /radm /siream /siream-aec /postprocessing /ensemble /optics /waterplume

  12. Repère: architecture du processing • 3 niveaux: • Le « driver » (ex: résolution simple ou calcul d’ensemble ou assimilation de données etc...) est lancé par sa méthode Run (« Driver.Run() »). Opère sur • le(s) « model(s) » (ex: équation de chimie transport) est intégré à chaque pas de temps par sa méthode Forward (« Model.Forward() »). Qui est composé si nécessaire • des « modules » (ex: les termes pris en compte dans l’équation de chimie transport = advection, diffusion, chimie, etc) également intégés par Forward (« Module.Forward() »)

  13. Repère: Illustration par polair3d.cpp Driver Model Modules

  14. /modules /aerosol /chemistry /common /transport /models *.cxx, *.hxx /driver /assimilation /common /local /uncertainty /common /atmopy /SeldonData /AtmoData /Talos /wgrib /eqsam /isorropia /isorropia_aec /newran /include /preprocessing /ic /bc /bio /dep /emissions /ground /meteo /processing /assimilation /castor /decay /gaussian /global /local /nesting /plume-in-grid /racm /radm /siream /siream-aec /postprocessing /ensemble /optics /waterplume

  15. Repère: schématiquement • Dans le .cpp • On inclut les fichiers sources contenant les modules, le modèle, la méthode de sauvegarde et le pilote. • On déclare Modèle(module1, module2, ...). • On declare Pilote(modèle, méthode de sauvegarde).

  16. Clés: changer la chimie de RACM en RADM

  17. Clés: changer la chimie de RACM en RADM?

  18. Clés: passer à un modèle gaussien? #include "AtmoData.hxx" #include "PlumeDriver.cxx" #include "GaussianPlume.cxx" #include "BaseOutputSaver.cxx" ... int main(int argc, char** argv) { typedef double real; typedef GaussianPlume<real> ClassModel; PlumeDriver<real, ClassModel, BaseOutputSaver<real, ClassModel> > Driver(argv[1]); Driver.Run(); ... Pas de modules pour le gaussien, tout est implémenté dans le modèle. Cette fois, le driver est spécifique car des instructions propres au gaussien y sont (lecture de la météo dans un fichier .dat spécial).

  19. Clés: une sauvegarde spécifique? • Dans /include/driver/common se trouvent les outils disponibles qui touchent au driver, notamment les procédures de sauvegarde, dans le sous-répertoire output_saver. • Partir d’un .cxx qui est le plus proche de ce que l’on veut et en faire une copie pour modification. • Déclarer la classe obtenue au niveau de BaseOutputSaver::init() et dans le fichier de configuration.

  20. Contribuer Pour qu’un développement puisse devenir une contribution Polyphemus, il faut assurer: 1/ la cohérence avec l’architecture existante, 2/ le respect des conventions de codage, 3/ un intérêt potentiel suffisant pour d’autres que soi, 4/ et si le développement est conséquent, un test associé.

  21. Outils de développement • Pour compiler, utiliser de préférence SCons qui est plus portable et maintenable que make! (une version locale de scons est incluse dans la distribution) • Valgrind peut être utile pour les fuites de mémoire et l’analyse du temps de calcul. • Kdiff3 offre une interface conviviale pour analyser les différences entre deux fichiers texte. • Utiliser les trackers de bugs et de requêtes sur le site du projet Polyphemus dans Gforge (onglet « Suivi ») et les listes de diffusion. • Pour des développeurs plus aguerris et réguliers, l’ensemble du projet est accessible et modifiable sur le dépôt svn de la Gforge Inria.

  22. Dans les semaines et les mois à venir... • Interface graphique pour lancer et exploiter des calculs en local ou sur un serveur distant via un navigateur web. Dans un premier temps, limité à des configurations très précises (TP ParisTech). • Ajout d’un modèle lagrangien de diffusion de particules. • Passage au format netcdf.

More Related