Meflab V1
Meflab V1
Meflab V1
MEFLAB est un ensemble de scripts1 MATLAB permettant d’illustrer les différents chapitres
du cours éléments finis. Cet ensemble est ouvert et évolutif, vous pouvez l’utiliser tel quel
comme un applicatif du cours et ne traiter que les exemples proposés dans les différents
chapitres. Ou bien à partir de l’étude des scripts proposés développer vos propres scripts pour
d’autres types, d’éléments, de structure, ou de problèmes, que ceux abordés dans le cadre de
ce cours.
Le principal intérêt de ce programme est de permettre une utilisation rapide et directe des
scripts existants avec une interface utilisateur simple, ce qui facilite les premières utilisations
de cet outil. La définition des chemins d’accès aux différents répertoires est indispensable
pour pouvoir utiliser les scripts éléments finis que nous proposons.
1
Fichier M-file « nom.m », contenant une séquence d’instructions MATLAB qui sera exécutée en tapant
« nom » dans la fenêtre de commande de MATLAB
1
Les treillis
Ce script illustre le chapitre II du cours, utiliser ce script sans avoir étudié le cours est
illusoire. Par contre ne pas l’utiliser et ne pas analyser la structure des programmes
proposés vous fera inévitablement passer à coté de certaines compétences.
L’objectif principal du script « function treillis » est le calcul statique des structures
treillis bidimensionnelles telles que celles que vous avez eu l’occasion de traiter à la main en
TD et en TA. Le second objectif du programme est d’illustrer nos propos sur la notion
d’erreur d’approximation en lui permettant de traiter le cas des colonnes (treillis 1D) que nous
présentons dans le chapitre II-3 du cours, avec la comparaison à la solution analytique.
Analysons le script
Les variables globales :
global nddln nnod nddlt nelt nnode ndim ncld
global Coord Connec Nprop Prop Ncl Vcl F
Notez dès à présent que ces variables globales sont communes à tous nos scripts éléments
finis. Pour les problèmes de physique « Vcl : représentera les valeurs du champ imposé » et
« F : les valeurs des flux imposés ».
Ces variables globales sont définies par un « pré-processeur ». C’est le rôle du script de
données du problème (l’analyse de ces scripts est proposée dans le paragraphe suivant).
La boucle de calcul :
for iel=1:nelt %boucle sur les éléments
[Ke,Fe] = feval('barre_ke',iel); %calcul des matrices élémentaires
loce=[];
for i=1:nnode %localisation des ddl de l'élément
loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];
end
K(loce,loce)=K(loce,loce) + Ke; %assemblage
Fg(loce)=Fg(loce) + Fe;
end
2
ddl : « degrés de liberté » ce sont les variables nodales du modèle éléments finis
2
Notez que cette boucle est caractéristique de la méthode des éléments finis. Si le maillage
ne contient que des éléments de même type elle est rigoureusement de cette forme. Vous
pouvez regarder les scripts « portiques », « vibrations » et « EDP1D » vous retrouverez
exactement ces lignes de programmation, seule la fonction élémentaire est changée.
L’assemblage des matrices élémentaires nécessite de localiser la position des ddl de l’élément
dans le vecteur global, pour chaque nœud de l’élément on place dans le vecteur «loce» la
position des ddl du nœud dans la matrice globale.
Exemple
Soit l’élément 7-9 d’un treillis 2D
Les variables élémentaires (ddl) sont : u7 v7 u9 v9
Qui occupent respectivement les positions [13 14 17 18] = loce
Les commandes MATLAB permettent de manipuler globalement les matrices, ce qui rend très
simple la création du vecteur «loce» et l’assemblage ensuite des matrices élémentaires dans
les matrices globales.
Exercice 1:
Proposez une simple modification de la boucle sur les nœuds qui permettent de créer
le vecteur «loce» pour des éléments ayant un nombre de nœuds différents.
Indication : «nnode» représente alors le nombre maxi de nœuds des éléments utilisés
3
Le premier bloc d'équations nous donne le vecteur des déplacements nodaux inconnus:
En reportant dans le second nous obtenons le vecteurs des efforts de liaison inconnus:
{Fi } = K 22 − K 21 K11−1 K12 {U d } + K 21 K11−1 {Fd }
Programation
ir = 0;
for i=1:nddlt
if ( Ncl(i) == 1 ) %déplacements imposés dans F
F = F - K(:,i)*Vcl(i); ir=ir+1;
end
end
for i=nddlt:-1:1
if ( Ncl(i) == 1 )
Kr(ir,:) = K(i,:); %pour le calcul des réactions
Kr(:,i) = []; R(ir,1) = -F(i); ir = ir-1;
K(i,:) = []; K(:,i) = []; %supression ligne colonne dans K
F(i)=[]; %suppression ligne dans F
end
end
Nous modifions dans un premier temps le vecteur du chargement en tenant compte des
déplacements imposés. Notez que cette opération est inutile si tous les déplacements imposés
sont nuls.
Variables globales
Nddlt : nombre de degré de liberté total
Ncl : vecteur de dimension nddlt qui vaut 1 si le ddl est imposé
Vcl : vecteur de dimension nddlt des valeurs des déplacements imposés
La boucle suivante remonte le système d’équations pour supprimer les lignes et les colonnes
de K et les lignes de F permettant ainsi d’obtenir le système réduit (ou premier bloc du
système global). Avant cette opération nous stockons dans une matrice Kr les éléments de K
qui seront utiles pour calculer les réactions aux appuis (second bloc du système global).
Comme vous pouvez le voir l’intérêt de MATLAB est de pouvoir manipuler globalement les
matrices, ce qui nous donne une programmation simple et efficace.
Remarques :
Notez que cette partie du programme ce retrouve dans tous les scripts éléments
finis pour les problèmes de statique «portiques», «EDP1D» et «statique2D». Pour
le script «vibrations» c’est encore plus simple puisqu’il suffit d’éliminer les lignes
et colonnes de K et M correspondant aux degrés de liberté imposés.
Il existe d’autres méthodes pour prendre en compte les conditions aux limites en
déplacement sans avoir à réduire le système d’équations ce qui évite ensuite d’avoir à
réintroduire les déplacements imposés dans le vecteur solution. La plus efficace est
celle du terme unité sur la diagonale voir (G. Dhatt - G. Touzot & E Lefrancois :
méthode des éléments finis. Hermes Lavoisier, 2005).
Exercice 2 :
Modifier le programme pour appliquer la méthode du terme unité sur la diagonale.
Intérêt : cet exercice vous fera assimiler la structure du programme en manipulant les
variables utilisées. Pour tester vos modifications, imposez un déplacement en x de 0.5
au nœud 2 de l’exemple II_1, vous devez retrouver les mêmes résultats.
Correction : me demander les lignes de script correspondant par mail.
4
Résolution :
On ne peut plus simple avec MATLAB : Sol =K\ F en statique
Ayant une matrice symétrique définie positive la méthode utilisée est celle de Choleski.
Attention si vous laissez des modes rigides le programme affichera un message d’erreur
indiquant que la matrice est singulière, c’est donc à vous de modifier le jeu de données pour
éliminer les modes rigides de la structure.
Pour calculer les «n» premières fréquences et modes propres de vibrations d’une structure
nous aurions les commandes MATLAB suivantes :
[modes,omega] = eigs(K,M,n,'sm'); script «vibrations»
f = sqrt(diag(omega))/(2*pi);
Post-traitement :
Impressions des résultats du calcul
On insert les déplacements imposés dans le vecteur solution et on imprime ce vecteur.
On calcul les efforts aux appuis et on étend ce vecteur à l’ensemble des nœuds avant
impression.
On affiche les résultantes des charges nodales, des efforts répartis et des réactions ainsi
que les résidus d’équilibre.
Calcul des contraintes sur les éléments
Pour chaque élément appel de la fonction «barre_stress» qui affiche l’effort normal
calculé dans l’élément barre, ce script est simple à étudier et à comprendre, il reprend
les résultats du cours.
Figure de la déformée de la structure
Pour les structures 2D la fonction «plotdef» permet de tracer sur une figure l’état
initial (en vert) et l’état déformé de la structure (en bleu). Le facteur d’échelle est
calculé pour avoir une flèche maximale égale au 20ème de la dimension maximale de la
structure.
Comparaison avec la solution analytique
Pour la colonne étudiée dans le chapitre II_3 du cours, la fonction «barre_compar»
permet de tracer sur une figure les champs de déplacements et de contraintes du
modèle éléments finis et de la solution analytique.
Notez que si vous changez de colonne il faudra changer l’expression de la solution
analytique dans ce script
fplot('-(6*x/1000)*(1-x/1200)',[0 600],'r'), % déplacements
fplot('-6*(1-x/600)',[0 600],'r'), % contraintes
5
Les données : création des variables globales
Ncl=zeros(1,nddlt);ncld=0;
Vcl=zeros(1,nddlt); % Valeurs des déplacements imposés
%Vcl(3)=0.5; % à utiliser pour imposer une valeur non nulle
sur un ddl i
for i=1:size(CL,1)
for j=1:nddln
if CL(i,1+j)==1
Ncl(1,(CL(i,1)-1)*nddln+j)=1;
ncld=ncld+1;
end
end
end
for iclf=1:size(Charg,1)
noeud=Charg(iclf,1);
for i=1:nddln
F((noeud-1)*nddln+i)=F((noeud-1)*nddln+i) + Charg(iclf,i+1);
end
end
Il est simple de modifier cette partie du script pour créer un nouveau jeu de données. On peut
éventuellement programmer le calcul de la position des nœuds et du tableau de connectivité
des éléments si le maillage est important. En général un programme éléments finis utilisera
des outils de génération de maillage pour réaliser ce type de jeu de données.
Conseil :
Le plus simple pour créer un nouveau script de données est de partir d’un script fourni
dans MEFLAB et de ne modifier que les données du problème en conservant les
déclarations des variables globales, les calculs relatifs à ces variables, ainsi que les
appels aux fonctions de tracé et de calcul.
6
Exercice 3:
Effectuez la mise en données de la structure suivante (en acier E=210000 Mpa)
3m 2m
Intérêt : cette structure nécessite 2
groupes de propriétés mécaniques
S 2 = 25cm 2
Chargement 1 :
1.5 m
S1 = 49cm 2
S1 = 49cm 2 F uniquement
yo Chargement 2 : Poids propre
g = 9.81 m/s2 3
ρ = 7800 Kg / m
xo F=950KN
Exercice 4:
Effectuez la mise en données de la structure suivante (en acier E=210000 Mpa)
0.5 m
A
yo 1m 1m 1m
xo
Barres de section 36 cm 2
Indications :
Testez le programme avec le mode rigide … Eliminez le.
Vous pouvez simplifier la structure, car certaines barres ne servent à rien.
Symétrie :
Proposez une modélisation tenant compte de la symétrie en précisant les
conditions de symétrie en A
Peut-on les traiter directement avec cette version du programme ?
a- Effectuez les modifications nécessaires.
b-Y a-t-il une solution plus simple si l’on considère la forme de la
matrice raideur élémentaire.
Bilan
Si vous avez lu en détail cette présentation en cherchant à traiter les différents
exercices proposés vous devez avoir compris le fonctionnement de l’application
MEFLAB, et le principe d’utilisation des différents scripts proposés.
A vous de jouer en utilisant les autres scripts pour les modifier en fonction des
problèmes que vous souhaitez traiter.