Vous êtes sur la page 1sur 7

MEFLAB

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 programme principal MEFLAB


Affiche les programmes (scripts) existants en bibliothèque
La bibliothèque initiale est la suivante :
Treillis : étude statique des treillis (1D ou 2D)
Portiques : étude statique des portiques (1D ou 2D)
Vibrations : modes de vibration d'un portique (1D ou 2D)
EDP1D : résolution d'une équation différentielle sur [0,L]
statique2D : structures en élasticité plane (éléments T3 et Q4)
Défini les chemins d’accès aux répertoires
L’organisation des répertoires est la suivante
Dessin : fonctions d'affichage graphique
Elements : fonctions élémentaires (matrices Ke Me Fe)
Generaux : gestion de l'information (scripts éléments finis)
Sol_analytique : comparaison avec les solutions analytiques connues
Data : jeux de données relatifs au cours et exercices proposés
Work : vos jeux de données
Liste et propose les jeux de données existants dans le répertoire Data
Il attend ensuite le nom d’un jeu de données en entrée.

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.

Ce programme nécessite d’avoir préalablement défini un script de données, c’est pourquoi


nous fournissons plusieurs jeux de données pour chaque application éléments finis que nous
proposons. La structure de ces scripts présentée plus loin permettra, dans un second temps, à
l’utilisateur de définir les modèles éléments finis qu’il souhaite calculer avec cet outil.

L’organigramme général est le suivant


MEFLab
Fonctions

Script de données Affichage graphique

Calcul au niveau élémentaire


Script éléments finis Affichage graphique
Solutions analytiques connues

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

% nddln : nb de ddl2 par noeud (ndim)


% nnod : nb de noeuds
% nddlt : nb de ddl total (=ndln*nnod)
% nelt : nb d'éléments
% nnode : nb de noeuds par élément (2)
% ndim : dimension du problème (1D,2D ou 3D)
% ncld : nb de conditions en déplacement imposé
%
% Coord(nnod,ndim) : coordonnées des noeuds
% Connec(nelt,2) : connectivités des éléments
% Nprop(nelt) : N° de caractéristique pour chaque élément
% Prop(nprop,ncar) : Tableau des caractéristiques mécaniques (ES,fx,fy)
% Ncl(1,nddlt) : vaut 1 si le déplacement est imposé
% Vcl(1,nddlt) : valeur des déplacements imposés
% F (nddlt,1) : vecteur des charges nodales données

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.

La fonction «barre_ke» calcule la matrice raideur élémentaire et le vecteur force généralisé


d’une charge répartie pour un élément barre. Les variables globales utilisées par cette fonction
sont : la table de coordonnées des nœuds (Coord), la table de connectivité des éléments
(Connec), les tables des caractéristiques mécaniques (Nprop et Prop) donnant les valeurs de la
raideur ES et les pressions linéiques fx et fy appliquées sur l’élément, et la dimension du
problème (ndim).
Regardez et analyser le script de cette fonction vous y retrouverez tous les résultats du cours
que nous utilisons pour effectuer les calculs à la main (voir le lexique).
Vous pouvez modifier ce script pour faire afficher les matrices élémentaires si vous souhaitez
utiliser ce programme pour vérifier vos calculs.

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

Correction : voir le script statique2D (éléments à 3 et 4 nœuds)

Prise en compte du chargement :


Il suffit de sommer les charges nodales données (variable globale «F ») et le vecteur des
charges réparties sur les éléments (variable «Fg»). Nous en profitons pour calculer la
résultante des charges (fonction «resultante(F)»). Ce calcul permet ensuite de vérifier les
résidus d’équilibre lorsque nous aurons calculé les efforts aux appuis.

Prise en compte des déplacements imposés :


Nous proposons ici la méthode vue en cours et en TD qui est basée sur une résolution par bloc
du système d’équations global.
[ K11 ] [ K12 ]  {U i }  = {Fd }

[ K 21 ] [ K 22 ] {U d }  {Fi } 

3
Le premier bloc d'équations nous donne le vecteur des déplacements nodaux inconnus:

{U i } = [ K11 ] {{Fd } − [ K12 ]{U d }}


−1
C’est le système réduit

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

Script de données pour les treillis


Ce script
Défini les valeurs des variables globales (données du modèle éléments finis)
Propose un tracé du maillage fonction «plot2D» avec visualisation
des numéros des nœuds et des éléments
des charges nodales et des déplacements imposés
Si vous validez ce maillage le programme appel alors la fonction «treillis»

5
Les données : création des variables globales

Coord=[ 0 , 0 ; ... % définition des coordonnées des nœuds X , Y


2*h , 0 ; ...
h , h ];
[nnod,ndim]=size(Coord);
nddln=2; nddlt=nddln*nnod;

Connec=[ 1 , 2 ; ... % définition de la matrice de connectivite i, j


1 , 3 ; ...
2 , 3 ];
[nelt,nnode]=size(Connec);

% définition des caractéristiques mécaniques élémentaires (ES fx fy)


Nprop=[1;1;1]; % pour chaque élément N° de la propriété
Prop=[ 100*sqrt(2) 0 0 % tableau des différentes valeurs de ES fx fy
];

% définition des CL en déplacement


CL=[ 1 , 1 , 1 ; ... % N° du nœud, type sur u et v (1 ddl imposé ,
2 , 0 , 1 ]; 0 ddl libre)

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

% définition des charges nodales


Charg=[ 3 40. 0 ]; % N° du noeud , Fx , Fy
F=zeros(nddlt,1); % vecteur sollicitation

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

Correction : envoyez moi votre script de données par mail si nécessaire.

Exercice 4:
Effectuez la mise en données de la structure suivante (en acier E=210000 Mpa)

1,5T 1,5T 1,5T

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.

Correction : envoyez moi vos scripts de données par mail si nécessaire.

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.