220 likes | 378 Views
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,
E N D
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, • post-processing. • reflète la modularité.
/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
Repère: structuration • Preprocessing: intérêt à générer des données intermédiaires communes à plusieurs scenarii ou traitements particuliers (calcul d’ensemble...).
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
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.
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
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).
/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
Repère: structuration Dans le répertoire /include: • Ce qui est voué à être partagé (librairies, fonctions, etc...) • Ce qui est externe (newran, wgrib, isorropia...)
/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
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() »)
Repère: Illustration par polair3d.cpp Driver Model Modules
/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
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).
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).
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.
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é.
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.
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.