FreeFem++ : un outil libre pour la résolution d’EDP par la méthode des Eléments Finis Arnaud Lejeune Pôle Calcul Scientifique – Département Mécanique Appliquée 20 Février 2014 Logiciels Libres et/ou OpenSource https://www.projet-plume.org/relier Logiciels Libres http://www.gnu.org/philosophy/fre e-sw.fr.html « Logiciel libre » [free software] désigne des logiciels qui respectent la liberté des utilisateurs. En gros, cela veut dire que les utilisateurs ont la liberté d'exécuter, copier, distribuer, étudier, modifier et améliorer ces logiciels. OpenSource http://opensource.org/ Un logiciel OpenSource est un logiciel qui peut être librement utilisé, modifié et partagé (avant ou après modifications) par quiconque Solveurs Eléments finis Outils de CAO • FreeCAD http://www.freecadweb.org/ • • http://www.freefem.org/ff++/ LibreCAD (2D) FreeFEM++, http://librecad.org/cms/home.html • Mailleurs • GMSH http://geuz.org/gmsh/ • MESHLAB (3D) http://meshlab.sourceforge.net/ POST-TRAITEMENT • http://fenicsproject.org/ • GETFEM++, http://download.gna.org/getfem/html/ho mepage/ • ELMER, http://www.csc.fi/english/pages/elmer Paraview http://geuz.org/gmsh/ • FENICS, VISIT • FEEL++, http://www.feelpp.org/ https://wci.llnl.gov/codes/visit/home.html ….. Les licences Gnu GPL, BSD, …. sont des licences OpenSource créées initialement aux USA Les licences CeCILL sont une adaptation au droit français (http://www.cecill.info/) FREEFEM++: Tour d’horizon Caractéristiques • Environnement intégré FreeFem++-cs •Langage de script basé sur la syntaxe du C/C++ •Librairie Eléments Finis avec éléments standards et non standards • Résolution de systèmes linéaires performante ( SuperLU, MUMPS,UMFPACK,….) • Raffinement adaptatif et partition de maillage • Calcul de valeurs propres • Interface MPI dispo • Post-traitement inclus en version allégée • Disponible sous Linux/Mac OSX et Windows Processus Elément Fini Un élément fini est défini par (Raviart) : • Un domaine (connexe, compact , d’intérieur non vide) • Un ensemble fini de points • Un ensemble de fonctions d’interpolation Un processus EF nécessite la connaissance de : • L’espace de définition de la solution recherchée (test function) u et de la fonction test v (trial function) • Géométrie de l’élément de référence et le type d’interpolation (ordre, nœuds, continuité) • La méthode d’intégration numérique Principe de base d’un solveur éléments finis Création du modèle Nœud 3 Trouver u V tel que KU F u.d d k11 x x k n1 x x x k1n x x x x k nn x x Nœud 1 f .v d Nœud 2 Choix de l’élément Pt Intégration 3 x x x x x x Pt Intégration 2 Pt Intégration 1 Choix de l’intégration L’utilisateur se concentre sur : • la formulation du problème • le choix des éléments (espace fonctionnel, ordre, type d’interpolation) •Le choix des méthodes d’approximation et de résolution FREEFEM++: Tour d’horizon Sorties graphiques/co nsole/dans un fichier Fichier .edp Création/ Import Géométrie/Maillage FREEFEM++ Résolution Traitement Numérique (lié à la discrétisation) A la différence des logiciels commerciaux, • Pas de mode « Clic-bouton » • l’utilisateur doit maîtriser son modèle • l’utilisateur maîtrise / a conscience des techniques de résolution utilisées Analyse Formulation Faible FREEFEM++: Tour d’horizon Construction/ Définition d’un maillage Forme prédéfinie: mesh nomMaillage = square ( n ,m , [x0+(x1-x0)*x, y0+(y1-y0)*y]) : génération d’un maillage régulier sur un carré [x0,x1]x[y0,y1] A partir de frontières définies par des courbes paramétrées: border nomBord1 (t=debut, fin){x=f(t), y=g(t), label=numLabel } mesh nomMaillage = buildmesh(nomBord1(valeur1)+nomBord2(valeur2)+…) 1: border a(t=0,2*pi){ x=cos(t); y=sin(t);label=1;} 2: border b(t=0,2*pi){ x=0.3+0.3*cos(t); y=0.3*sin(t);label=2;} 3: plot(a(50)+b(+30)) ; // to see a plot of the border mesh 4: mesh Thwithouthole= buildmesh(a(50)+b(+30)); 5: mesh Thwithhole = buildmesh(a(50)+b(-30)); 6: plot(Thwithouthole,wait=1,ps="Thwithouthole.eps"); 7: plot(Thwithhole,wait=1,ps="Thwithhole.eps"); Note : Exemple repris du manuel utilisateur FreeFEM++ FREEFEM++: Tour d’horizon Définition de l’espace d’interpolation fespace nomEspace (nomMaillage, type Elément Finis) Familles FreeFEM ne connaît pas : •Les éléments coque/plaque Crouzeix-Raviart Lagrange Discontinu Lagrange Nédélec Définition du problème variationnel Raviart-Thomas problem nomProblem (u,v, [solver]) a(u,v)-l(v) + (cdl) Note : On peut également utiliser la commande varf pour définir séparément les formes bilinéaires et linéaires FREEFEM++: Exemple Simpliste Exemple Basique : u f sur le domaine Ω u u d sur le bord Γ d u g sur le bord Γ n n Formulation faible: Trouver u V tel que u.v d f .v d N g.v d v V0 Elément Fini utilisé: Lagrange - 3 nœuds – ordre 1 // Creation du maillage mesh nomMail= square(10,20,[1+2*x,-1+3*y]); // Creation de l’espace d’interpolation fespace Vh(nomMail, P1); // Definition de l’inconnue et de la variable virtuelle Vh u,v; // Definition de la formulation variationnelle problem problem1(u,v) = int2d(nomMail)(dx(u)*dx(v)+dy(u)*dy(v)) – int2d(nomMail) (1*v) + on(2, u=5); // Résolution problem1; // Sortie graphique plot(u,fill=1,wait=1,value=true,ps="simpliste.eps"); ud 5 g x 0 f x, y 1 Elasticité linéaire Trouver u V tel que v V0 div f sur Ω u u sur Γ d u . v d f .v d g.v d d n0 .n g sur le bord Γ n0 .n 0 sur le bord Γ n1 ux 0 d 20 g g x g ( 20 y ) // Création du maillage mesh barrage= buildmesh(horizontal(10)+diagonal(15)+vertical(-20)); plot(barrage,wait=1,ps="barrage.eps"); gy 0 f x, y 0 E 40e9 0.2 // Création du domaine int Dirichlet=1,Neumann=2; border horizontal(t=0,1){ x=10*t; y=0;label=Dirichlet;} border vertical(t=0,1){ x=0; =20*t; label=Neumann;} border diagonal(t=0,1){ x=10*t; y=-20*t+20;} 10 // Création de l’espace variationnel fespace Vh(barrage,P1); Vh ux,uy,vx,vy; // Définition des paramètres real rho=1000.0; real gravite=9.81; real longueur=10.0; func gx= rho*gravite*(20-y); real f=0.; real E = 40e9, nu = 0.2, mu= E/(2*(1+nu)); real lambda = E*nu/((1+nu)*(1-2*nu)); Elasticité linéaire Trouver u V tel que v V0 // Définition de la fonction de calcul des déformations macro epsilon(ux,uy) [dx(ux),dy(uy),(dy(ux)+dx(uy))] // Définition de la fonction divergence macro div(ux,uy) ( dx(ux)+dy(uy) ) // Definition et resolution de la formulation variationnelle solve problemeBarrage([ux,uy],[vx,vy])= int2d(barrage)(lambda*div(ux,uy)*div(vx,vy) +2.*mu*( epsilon(ux,uy)‘ * epsilon(vx,vy) ) ) - int2d(barrage)(f*vy) - int1d(barrage,Neumann)(gx*vx) + on(Dirichlet,ux=0,uy=0); // sauvegarde des deplacement en x et y plot(ux,wait=1,value=1,fill=1,ps="barrageUx.eps"); plot(uy,wait=1,value=1,fill=1,ps="barrageUy.eps"); // sauvegarde du maillage déformé real coef =10000 ; mesh barrage1 = movemesh(barrage, [x+ux*coef, y+uy*coef]); plot(barrage1,wait=1,value=1, fill=1, ps=« deform.eps"); real dxmax = ux[].max; real dymax = uy[].max; // Sortie console des deplacements max cout << " - ux max = "<< dxmax<< " uy=" << dymax << endl; u . v d f .v d n0 g .v d Conclusions et Regrets Bilan • Résolution d’edp par MEF: • linéaire, non linéaire, • statique, quasi-statique, d’évolution, • multi-domaines, • maillage adaptatif, •… • Solveurs actuels et parallélisation disponibles Point fort • descendance de Pironneau 1987 • http://www.um.es/freefem/ff++/pmwiki.php • • Large Communauté d’utilisateurs/développeurs • Evolution pernanente : freefem++-cs Applications : • Fluides incompressibles • Navier-Stokes incompressible • Elasticité • Interaction fluide-structure • ….. REGRETS • Absence d’éléments quadrangle, hexaèdre • Manque éléments coque et plaque (ajout non trivial) • Post-traitement parfois délicat
© Copyright 2024 ExpyDoc