développer des codes de simulation numérique avec une équipe "non geek" à l'ulg

58
Développer du code avec une équipe de « non-geeks » à l'ULg Romain BOMAN Université de Liège Département d’aérospatiale et mécanique Geeks Anonymes – 17 juin 2016

Upload: romain-boman

Post on 15-Apr-2017

477 views

Category:

Software


3 download

TRANSCRIPT

Amlioration des performances de Metafor

Dvelopper du code avec une quipe de non-geeks l'ULgRomain BOMANUniversit de LigeDpartement darospatiale et mcanique

Geeks Anonymes 17 juin 2016

1

Plan2

Contexte et passEnvironnement de travailInterface pythonGestion du code sourceDocumentationBatterie de testsGestion mmoireVisualisationFutur

Trouvons un compromisEspce de geek!

2

3J.-P. Ponthot

Position du labo lULgSimulation numrique.Mcanique du solide.Mthode des lments finis.Dveloppement de logiciels.

Mcanique Numrique Non Linaire

hydroformage dun tubeDpartementArospatiale & Mcanique

3

Notre logiciel : Metafor4Code de calcul Element Fini implicite pour la simulation de grandes dformations de solides

Formalisme ALE, remaillage. Schmas dintgration thermomcaniques.Modlisation de fissures, rupture.Algorithmes de contact.Loi constitutives non linaires.Gnration de maillages partir dimages mdicales.

Elments fluides.Schmasmonolithiques.Applications Metal FormingCrash / ImpactBiomcaniqueInteractionfluide/structure

4

Simulations phares5

Simulation dune ligne de profilage mise forme de poutrelles partir de tles dacier

5

Simulations phares6Test obligatoire trs coteux. On essaye ici de prdire le comportement avant le test rel.Une aube se dtache suite un impact doiseau par exemple.Laube perdue et les dbris doivent rester contenus dans le carter.

Simulation dun test de certification de moteur davion (perte daube)soufflante (fan)Turboracteur double flux

6

Simulations phares7Suite une perte daube laxe du moteur vibre (balourd).Les aubes du compresseur basse-pression (Techspace Aero) scrasent sur le carter.Le carter ne doit pas cder.Nanmoins, on aimerait un carter le plus lger possible.Metafor permet de modliser finement le comportement non linaire du matriau pour prdire une charge de flambement plus faible que les modles lastiques linaires traditionnels... On espre donc un gain de poids.

Compresseur

7

Equipe actuelle8D. BoemerR. BomanC. CanalesM.L. CerquagliaY. Carretta

Y. CrutzenG. DeligeC. HennuyerP. JorisL. PapeleuxG. Wautelet

5 thsards 4 ingnieurs de recherche 1 scientifique permanent

8

Anciens dveloppeurs9

http://metafor.ltas.ulg.ac.be/dokuwiki/team

A. StephanyE. BiotteauC. LaurentJ. XhardezL. VigneronL. AdamL. NoelsL. ZianeM. MengoniO. KarasevaP. BussettaP.-P. JeunechampsR. KoeuneS. HannayS. TrichonV.Q. BuiV. dOtreppeW. Guocontribution au code actuel uniquement depuis 2000

9

10Partenaires industriels

dtient une licence de Metafor

10

Metafor... de 1992 aujourdhui11

images de http://geek-and-poke.com/Jai eu une super ide de projet:On va combiner les rsultats de notre projet A et de la thse B pour dvelopper C!Je ne sais pas, mais le projet est accept!On dmarre demain!On a gard le code source de A et B?

11

Mon arrive au labo en 199712Projet RW emboutissageprrequisprrequisMon projet de thse!

Good luck,have fun!prrequisprrequisprrequis

Metafor PhD Ponthotdoc

1992

Metafor +poudreMetafor +contactMetafor +optimisation1997

Metafor +coquesMetafor +thermique, +3Dtests

Metafor +remaillage1996

12

Etat de Metafor en 199713Code sourceFortran 77Gestionmanuelle des rvisions (cp/tar partir un rpertoire NFS partag).

DocumentationUne vieille note technique de 1992 imprime.

TestsProcdure non systmatique et incomplte.

CompilationUn Makefile mal foutu (compilation en debug par dfaut).

PortabilitNulle: le code dpend troitement dune lib propritaire dont on na pas les sources.Compilation uniquement sous DEC Alpha / VAX.

Institut de Mcanique du Val BenotTerminal VT220

13

Etat de Metafor en 199714Trs longue tradition de Fortran 77 en simulation par lments finis...

...et mme en calcul numrique plus gnralement...(cfr BLAS: http://www.netlib.org/blas/ )

En 2016, tous les grands frres de Metafor sont toujours crits en Fortran 77!

14

Etat de Metafor en 199715Le Fortran 77 dans les mains de non-geeks:

pas dallocation de mmoire:modification trs intrusives (mmoire alloue en C et passe en argument),tentation de rutiliser des variables temporairement non utilises pour un but diffrent du but initial,tentation dutiliser des variables globales.

ncessit dapprendre un autre langage pour accder certaines fonctionnalits (allocation mmoire, widgets GUI, autres bibliothques, etc.)bnfice de simplicit de syntaxe perdu!Il est bien videmment possible dcrire un bon code en Fortran. La rigueur ncessaire et leffort de maintenance sont juste colossaux!

aperu dun appel dune routine de Metafor Fortran

O est le problme?

15

Metafor se marie Oofelie16En 2001, jenvisage dabandonner ma thse...

Je suis contact par le WSL et Igor Klapka pour crer Open Engineering dont le but est de commercialiser Oofelie, un code lments finis crit en C++.

Je dcide de rcrire Metafor dans Oofelie!

Le succs est norme tel point que trop dacteurs entrent en jeu (WSL, Interface, ULg, LTAS, Samtech, Ansys) et se partagent le gteau...

...sans moi! Ils mont oubli dans le partage... Je dcide de me retirer du projet.

Aprs une ngociation dure, jobtiens le droit dutiliser mon propre code source pour continuer ma thse (mais pas de le mettre en open source).

16

Aujourdhui17

Nanmoins, tout nest pas rose!Plus de 230k lignes de C++.1400 classes.33 modules (.dll/.so).~3100 modles EF tests.OS: Windows/Linux.Une version unique depuis 2001. Quasiment aucun dveloppement perdu!

17

Environnement de travail18

images de http://geek-and-poke.com/Cest gnial! jai trouv une super lib qui va me permettre de calculer le volume dun cube.Tu peux me la compiler rapidement sur toutes les machines? Je tenvoie le lien...Essay quoi?Tas essay sur ton PC?

18

Environnement de travail19Cursus ULg des ingnieurs aro-mca (et physiciens)Pas de cours de programmation/informatique.De moins en moins de projets o il faut programmer.

De plus:Connaissance OS limite (y compris Windows!)La programmation, cest pas de la science!

Au mieux:Connaissance (trs sommaire) de Matlab.Parfois: connaissance dun peu de python, C.

PROBLEME: Ils veulent faire du High-Performance Computing!

venez en section physique!

19

Environnement de travail20Utilisateurs:Chercheur lambda.Etudiants.Industriels.WindowsLinuxUtilisation:Calculs intensifs (clusters du CECI).Avantages:Excution ~10% plus rapide.Rien installer en plus du systme.Prototypes/essais simplifis:apt-get install new-lib

Avantages:IDE plus convivial (Visual Studio).Visualisation des rsultats plus fluide (drivers graphiques optimiss).Pas besoin dun deuxime OS pour MS Office, SolidEdge, etc.Compilation trs rapide.

Inconvnient:Convivialit IDE? Inconvnient:Compilation des bibliothques.

20

Environnement de travail21Le code source est scind en 33 bibliothques dynamiques (.dll)lib HPClib GUIlib CADOn isole les chercheurs/les projets dans LEUR bibliothque. risque de conflit limit.code pourri/dupliqu localis.vite lutilisation dobjets de haut niveau dans du code de bas niveau.

pas compil sur clusterMetafor.exeexcutablemtGeo.dllgomtriemtMath.dlloutils mathsmtFEM.dllmthode EFmtMaterials.dlllois constitutivesmtViz.dllvisualisationmtKernel.dllaccs aux donnesNDA

pas distribu (NDA)

mtSabca.dlllois dun industrielmtThixo.dlllois dun thsard

21

Environnement de travail22Compilation multiplateforme

CMakeLists.txt

http://www.cmake.org/ makeVisual Studio

Metafor

Metafor.exe

(exe linux)(exe windows)

seul fichier crer!CMake permet de gnrer un fichier Makefile qui sera utilis par le programme make pour effectuer la compilation.

CMake est multiplateforme. Il est par exemple capable de gnrer de projets "Visual studio" sous Windows ou des projets Eclipse" sous Linux.

CMake utilise un fichier CMakeLists.txt dont la syntaxe est trs simple.

Makefile

cmake

Metafor.sln

gnrgnr

22

Environnement de travail23

cmake_minimum_required(VERSION 2.6)

project(Metafor CXX)

set(SRCS main.cpp class1.cpp class2.cpp)

add_executable(Metafor ${SRCS})CMakeLists.txtExemple de fichier CMakeLists.txt et compilation

On dfinit la version minimale de CMake utiliser

On dfinit un projet nomm Metafor. il est cod en C++ (CXX). Un projet peut contenir plusieurs programmes, des bibliothques, etc.

On cre une variable SRCS qui contient la liste des 3 fichiers (*.cpp) compiler.

On dclare un programme excutable nomm Metafor et compos des sources dfinies par la variable SRCS.mkdir buildcd buildcmake ..make./Metafor

23

Environnement de travail24Choix des bibliothques externesLinux:on utilise les versions disponibles sous Ubuntu LTScompiler metafor = sudo apt-get ... + svn co ... + cmake + makepython 2.7 et pas python 3.x

Windows:on fournit des versions binaires release/debug de ces mmes versions compiles avec le visual studio 2012, ainsi quun script dinstallation.Quelles versions utilise-t-on?

Je dois lancer setup.py?Pfffff a se fait pas tout seul?

24

Environnement de travail25Gnralement la rponse est non.

Questions quon se pose avant de dire oui:Possibilit de compilation Windows MSVC (release/debug)?La fonctionnalit voulue est-elle disponible dans une lib dj utilise?Quel risque et quel cot de maintenance sur le long terme?Et alors, ma nouvelle lib?

Choix des bibliothques externes

25

Environnement de travail26Compilation Windows distribue

full build: 25min 4min3052 CPUs169,8 GHzhttps://www.incredibuild.com/ 300$+24$/an(prix univ par agent 8 curs)

26

Interface python27

images de http://geek-and-poke.com/Ca fait 3 heures que mon code ne compile plus! Je ne comprends pas, Faut que tu viennes voirAh? Je sais pas, jai pas lu, il y en a beaucoup! Viens, viens... tu vas voirAttends, cest quoi le message derreur?

27

Interface python28Les objets C++ de Metafor sont accessibles travers une interface python dans 2 buts prcis: Ecriture des jeux de donnes des simulationsMoins de code: pas besoin de parseur maison (toujours bugu).Langage complet: utilisation de boucles, branchements conditionnels, objets dans le jeu de donnes.Extensibilit: appel des libs externes (Qt, wxWidgets, numpy, )Glue language: appel de codes externes (gmsh, SAMCEF, Abaqus, Matlab, etc.)Scurit: erreurs correctement traites (y compris les exceptions C++!)

Extension du code (user subroutines)Beaucoup de classes C++ (conditions aux limites, commandes de postprocessing, ntits gomtriques, matriaux, mailleurs, etc.) peuvent tre drives en python et utilises dans le jeu de donnes.

28

Interface python29Scripts Python comme jeux de donnesUne classe Python est cre automatiquement par SWIG pour chaque classe C++materials.i%module materials%{#include "ElasticMat.h"%}

%include "ElasticMat.h"Ajouter un nouveau matriau revient ajouter seulement 2 lignes dans le fichier dentre de SWIG (materials.i) pour le rendre accessible en Python!

from materials import *

mat = ElasticMat(E, nu)

model.setMaterial(mat)model.run()

JEU DE DONNEES

materials.py_materials.pyd

(Module python compil)(Shadow classes)

29

Interface python30Hritage de classes C++ en python : user subroutinesSWIG peut gnrer le code (norme et complexe) requis pour driver un classe C++ en Python!

class ElasticMat{public: virtual T computeStress(T &strain);};

MATERIAU C++ ELASTIQUE

from materials import *

class ElasticPlasticMat(ElasticMat):

def computeStress(self, strain): # compute stresses # from strains # using python cmds here return stress

MATERIAU PYTHON ELASTO-PLASTIQUE

Ce code python sera appel partir du code C++!Trs utile pour les tudiants (TFE)

Une nouvelle loi de comportement est disponible sans compilateur!

30

Interface python31Le code source scind en 33 bibliothques dynamiques (.dll) ... et 33 bibliothques dinterface python python.exeexcutableNDAmtGeo.dllgomtriemtMath.dlloutils mathsmtFEM.dllmthode EFmtMaterials.dlllois constitutivesmtSabca.dlllois dun industrielmtThixo.dlllois dun thsardmtKernel.dllaccs aux donneslib HPClib CAD

distribu sabca uniqtmtFEM.pymthode EFmtMaterials.pylois constitutivesmtThixo.pylois dun thsardmtSabca.pylois dun industrielmtMath.pyoutils mathsmtGeo.pygomtriemtKernel.pyaccs aux donnesimport mtFEMimport mtThixo...

test_thesard.py

import mtFEMimport mtSabca...

test_sabca.pyChaque script de test va piocher les fonctionnalits voulues.

31

Gestion du code source32

images de http://geek-and-poke.com/Cest quand que tu fais ton commit? Jaurais besoin de tes nouveaux trucs pour ma thse.Ah? Heu... Oui, oui mais pas maintenant; jai un papier rviser lDemain, ce sera fait.Et toi? ton commit?

32

Gestion du code source33A relire: svn/git aux Geeks AnonymesSbastien Jodogne : Programming practices and project management for professional software development, mai 2013.Cyril Soldani : Git your life for fun and profit, juin 2013.

Buts Gestion de lhistorique des modifications du code.Une seule version de rfrence pour tout le monde (~10 personnes).Conserver un maximum de dveloppements du pass.

Historique de MetaforCVS jusquavril 2007SVN depuis lorsQuelques sous-projets sous git depuis 2015

33

Gestion du code source34Lutilisation quotidienne doit tre trs simple car le non-geek ne lira pas le manuel...

...et menacera implicitement de ne pas commiter son travail si on insiste.On nutilise pas de branches.La version commite est toujours stable.Procdure de dveloppement trs rigide.

svn checkout[modifs locales]svn updatebatterie de tests [1 nuit] (voir plus loin) criture dune page web de commit (voir plus loin)svn commit

COMPROMIS TROUVE

34

Gestion du code source35

Tortoise SVNmon code marche pas... Jai pourtant rien modifi...Utilisation instinctive.

Bien utile pour rsoudre dun coup dil ceci:Seul bmol:

jai fait un svn blame! a plante dans ton code...https://tortoisesvn.net/

Pas besoin de mmoriser les commandes!

Les modifs sautent aux yeux!

35

Gestion du code source36SVN peut tre utilis sans lire un manuel.Chaque commit possde un seul numro de version qui sincrmente automatiquement.Pas de pull request : on observe la qualit du code aprs commit.La mthode utilise ne pousse pas le non-geek commiter.En tude actuellement:Utilisation de branches de dveloppement git avec commits quotidiens.Ncessit de dfinir une mthode dutilisation qui se rsume en quelques commandes simples et figes. Avantages SVN

Inconvnients SVN

36

Documentation37

images de http://geek-and-poke.com/Tu sais que la doc sur la classe Machin nest pas crite? Pfff, quel guignol cet ancien thsard...Cest bien possibleTiens, propos, tas crit la doc de ton dernier commit?Ah ben non, jai pas eu le temps, tu sais, je pars en conf la semaine prochaine...

37

Documentation38

documentation des commits Quest ce qui a t modifi? Quand? Par qui? Pourquoi?documentation du code sourcedocumentation utilisateur Utilisation de lexcutable

3 types de documentation

Int ConferencePLASTICITY 2017

svn log!

Doxygen!

LaTeX! (+svn)

38

Documentation39Compromis trouvs

Fonctions de base documentes (pour le reste, utilise grep dans la batterie de tests ou svn blame sur le source).

Rgle: Utilise une langue que tu maitrises (mieux vaut une bonne doc en franais que de langlais incomprhensible).Nom de classes, fonctions, variables dautant plus explicites quelles sont visibles.

Code source compltement document (Doxygen).

Version en ligne sur wiki.

Mathjax sur le wiki.

1 powerpoint mis jour chaque anne.

Doc utilisateur complte.Langue: en anglais et franais.Version papier et en ligne.Rappels thoriques avec quations LaTeX.Tutoriels, vidos, etc.

39

Documentation40Systme de wiki choisi depuis 10 ans: Dokuwiki

https://www.dokuwiki.org/

Points forts:Installation trs simple (DB format texte).Compatible LDAP.Nombreux plugins.Mises jour rgulires et automatiques.Dispo sur NAS Synology.

... et pas besoin de lire un long manuel pour diter une page

http://metafor.ltas.ulg.ac.be/

40

Documentation41

Comme tout wiki:Edition en ligne.Conservation de lhistorique.Ajout dimages, vidos, etc.

moteur javascript de rendu dquations

Impression

Vue en ligneEditeur en ligne

41

Documentation42

Documentation des commits

svn log est peu utile vu la procdure de commit utilise.

Chaque commit est longuement document par son auteur sur le wiki.

42

Batterie de tests43

images de http://geek-and-poke.com/Jai mis jour ma version aprs le commit de mon abruti de collgue et mes dveloppements ne marchent plus du tout!Ah oui, cest vrai faudra que je commite un jour des tests, jai pas encore eu le temps Tu sais... la conf, le papier, etc. Mmm?.. Bizarre a Tes sr que tes tests sont suffisants?

43

Batterie de tests44Buts:Assurer la non-rgression du code et des modles numriques.Eviter les conflits entre personnes.Principe:Gre par un script python maison.Srie denviron 3100 modles EF, lancs en parallle si la machine le permet.Tourne en moins dune nuit sur un PC classique (~75000s CPU = ~5h30 sur un quad core).3 configurations:Windows x64, Visual Studio 2012 (gnralement le PC de travail)Linux Debian x64, gccLinux Debian x64, intelChaque test extrait des valeurs de rsultats bien choisis qui seront vrifies avec les rsultats de la version officielle du code (rsultats commits dans le dpt avec les sources).

44

Batterie de tests45Interdiction de commiter sans vrifier intgralement la batterie de tests.Tout dveloppement non test peut tre dtruit (inutile de se plaindre).Risque:Solution actuellement mise en place:La procdure documente et scripte.2 rgles simples

Cest trop difficile, je commite pas

... mais je vais faire un svn update.

45

Batterie de tests46En 5min:Zipper ses sources modifies (dans lexplorer Windows).Transfert sur les machines de test (Filezilla).ssh sur les machines (putty).Lancer comp.py.

Ensuite:rentrer chez soi

Procdure scripte

dure = 1 nuit

46

Batterie de tests47Le lendemain, les rsultats sont reus par e-mail.

Etape finale:vrifier que les diffs observes ne sont pas significatives avant commit.

Les rsultats sont tris en catgories On voit le nombre de diffs avec la dernire version commite

dtail pour chaque diff

47

Gestion mmoire48

images de http://geek-and-poke.com/Faut que je me rachte un PC avec plus de RAM; mes calculs sont tellement gros que jarrive plus travaillerHeuu, cest quoi a?A mon avis, les destructeurs de tes classes ne sont pas correctement appels...

48

Gestion mmoire49

Compromis trouvToute mmoire alloue doit tre libre.Pas de memory leak en cours de calcul.

Inacceptable!TolrcalculcalculExemple:

49

Gestion mmoire50Garde-fousDe temps en temps:Intel Inspector.GUI:Dtection de fuites via vtkDebugLeaks.

RAM limite sur machines de test.

Certains objets sont compts (et le compteur est un rsultat de batterie).

50

Visualisation51

images de http://geek-and-poke.com/Aha! Jai trouv un bug dans tes routines de visu!Quand je visualise mon nouveau type de maillage, il y a tout qui plante!Tu crois que jai le temps de mamuser avec du graphisme?Ca ne mtonne pas, jai crit a bien avant tes dveloppements. Mais je peux texpliquer comment a marche...

51

Visualisation52

Visualisation continue des rsultats en cours de calcul

Initialement 2 buts:Voir tout moment ce quon fait.Faciliter lutilisation pour les tudiants et les industriels.

Particularits:1 thread graphique ct du/des thread(s) de calcul. On affiche simplement en 3D ltat de la mmoire.Pas daccs disque.

Consquence:Plus besoin doutil externe de post-processing.

Interprteur python

Affichage du problme en 3D

52

Visualisation53Gestion des widgets avec QtPoints forts de Qt:Portable (Windows, Linux, etc.) sans tre trop laid.Nombreux utilisateurs (base de KDE).Open source (LGPL).Interface python (PySide PyQt).Moderne : Orient objet (C++), mcanisme signal/slot.Bien document.Framework complet (p. expl. QThread, QDataStream, etc.).The Qt companyhttp://www.qt.io/

Essays et abandonns:wxWidgets, GTK+, Tcl/Tk

Boutons, listes droulantes, cases cocher, etc.

53

Visualisation54

Affichage 3D des rsultats sur maillage avec VTK(Kitware)http://www.vtk.org/ Points forts de VTK:voir Qt+ interface Qt/pythonDataSet1Mapper1Actor1RenderWindowMapper2Actor2Pipeline de visualisation (principe):

DataSet2Filter

Maillage + rsultatsExtrusion,Extraction diso-valeurs,Numrotation, Conversion en primitives graphiques

54

Conclusion et perspectives55

images de http://geek-and-poke.com/Ca y est: je suis docteur!Jai pu rutiliser les acquis du pass. La collaboration a port ses fruits.Merci pour ton travail. Les projets suivants sont dj en route!

Espce de geek!

55

Conclusion et perspectives56Exemple de collaboration plus large (dpartement)

David ThomasMetaforSolveur solideSolveur fluide structure

metafor.pySU2.pySU2Solveur fluideCouplage fluide-structure

Labo Prof. V. Terrapon

Labo Prof. J.-P. Ponthot

56

Conclusion et perspectives57Metafor en Open Source?Extraction de certains composants gnriques de Metafor en vue dun dpt sur github (en cours)MetaforBatterie de test

Solveur EF basique

Mailleur biomec

Interface CAD

Mailleur quad

57

Merci!58

gource -s .4 -p 0.001 -1280x720 --auto-skip-seconds .4 --multi-sampling --stop-at-end --highlight-users --hide mouse,progress --file-idle-time 0 --max-files 1000 --background-colour 111111 --font-size 20 --title "Metafor" --output-ppm-stream - --output-framerate 60 | avconv -y -r 60 -f image2pipe -vcodec ppm -i - -b 8192K movie.mp4

58