Vous êtes sur la page 1sur 7

MEFLAB

MEFLAB est un ensemble de scripts1 MATLAB permettant dillustrer les diffrents chapitres
du cours lments finis, cet ensemble est ouvert et volutif.
Vous pouvez lutiliser tel quel comme un applicatif du cours et ne traiter que les exemples
proposs dans les diffrents chapitres, il est alors inutile de lire ce document.
Vous pouvez, partir de ltude des scripts proposs, dvelopper vos propres scripts pour
dautres problmes, que ceux abords dans le cadre de ce cours.
Ce document vous prsente : Analyse des scripts lments finis
Description des scripts de donnes
Le programme principal MEFLAB
Dfini les chemins daccs aux rpertoires
Lorganisation des rpertoires est la suivante :
[Dessin]
Fonctions d'affichage graphique
[Elements] Fonctions lmentaires (matrices Ke Me Fe)
[Generaux] Scripts lments finis de rsolution du problme.
[Sol_analytique] Solutions analytiques connues (comparaison)
[Data]
Jeux de donnes relatifs au cours et exercices proposs
[Work]
Pour vos jeux de donnes personnels
[Mailleur] Interface avec GMSH (maillage et post-traitement)

Affiche les diffrents jeux de donnes (scripts) existants en bibliothque


Lest thmes abords sont les suivants :
tude statique des Treillis (1D ou 2D)
tude statique des Portiques (1D ou 2D)
modes de vibration d'un portique (1D ou 2D)
rsolution par la MEF d'une quation diffrentielle EDP sur [0,L]
tude des structures en lasticit plane (lments T3 et Q4)

Il attend ensuite le nom dun jeu de donnes en entre.


Le seul intrt de ce programme est de permettre une utilisation rapide et directe des scripts
existants avec une interface utilisateur simple, ce qui facilite les premires utilisations de cet
outil. La dfinition des chemins daccs aux diffrents rpertoires est indispensable pour
pouvoir utiliser les scripts lments finis que nous proposons.
Ce programme ncessite davoir pralablement dfini un script de donnes, cest pourquoi
nous fournissons plusieurs jeux de donnes pour chaque thme abord dans les cours lments
finis. La structure de ces scripts, prsente plus loin, permettra dans un second temps
lutilisateur de dfinir ses propres modles lments finis.
Lorganigramme gnral est le suivant
MEFLab

Script de donnes
Fonctions Mise en donnes
Rsolution
Post-traitement

Calcul au niveau lmentaire

Scripts lments finis

Assemblage et CL
Rsolution

Fichier M-file nom.m , contenant une squence dinstructions MATLAB qui sera excute en tapant
nom dans la fentre de commande de MATLAB

I Analyse des scripts lments finis


Les scripts lments finis sont placs dans le rpertoire [Generaux] et [Elements]
Ces scripts illustrent le cours EF, analyser ces scripts sans avoir tudi le cours est
illusoire. Et ne pas analyser la structure de ces programmes vous fera invitablement
passer cot de certaines comptences.
Lobjectif principal des scripts statiqueU, statiqueUR, statique est la rsolution
d'un problme linaire statique ou stationnaire. Ils peuvent tre utilis pour le calcul statique
des structures treillis ou portiques telles que celles que vous avez eu loccasion de traiter la
main en TD et en TA. Mais aussi pour les problmes d'lasticit plane ou les problmes
stationnaires 2D.
StatiqueU
: Ne donne en sortie que les valeurs nodales du champ.
StatiqueUR : Mme script complt par le calcul des ractions (flux inconnus).
Statique
: quivalent au prcdent avec un autre algorithme de rsolution.
Le script vibrations calcule les frquences et modes de vibration d'une poutre ou d'un
portique 2D. Pour les poutres le script propose de comparer avec la solution analytique1.

Analysons le script StatiqueUR


Les variables globales :
global nddln nnod nddlt nelt nnode ndim ncld
global Coord Connec Typel Nprop Prop Ncl Vcl F
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

nddln
nnod
nddlt
nelt
nnode
ndim
ncld

:
:
:
:
:
:
:

nb de ddl2 par noeud


nb de noeuds
nb de ddl total (= ndln*nnod)
nb d'lments
nb de noeuds par lment
dimension du problme (1D,2D ou 3D)
nb de conditions en dplacement impos

Coord(nnod,ndim) :
Connec(nelt,nnode):
Typel(nelt)
:
Nprop(nelt)
:
Prop(nprop,ncar) :
Ncl(nddlt)
:
Vcl(nddlt)
:
F(nddlt)
:

coordonnes des noeuds


connectivits des lments
Type des lments (barre, poutre, )
N de caractristique pour chaque lment
Tableau des caractristiques mcaniques ()
vaut 1 si le dplacement est impos
valeur des dplacements imposs
vecteur des charges nodales donnes

Ces variables globales sont communes tous nos scripts lments finis. Ces variables
globales sont dfinies par un pr-processeur . Cest le premier rle du script de mise en
donnes du problme (lanalyse de ce script est propose dans le paragraphe suivant).
Le type Typel caractrise le type d'lment utilis pour rsoudre le problme physique
EF-treillis, EF-portique, EF-lasticit plane, EF-thermique, ext
Le tableau de proprits Prop dpendra bien entendu du type des lments utiliss
Pour les problmes de physique Vcl reprsente les valeurs du champ impos et F :
les valeurs des flux imposs.
1

Les solutions analytiques de ces problmes de flexion sont proposes sur le site :
https://pedagogie.ec-nantes.fr/meefi/Vibra/vibra.htm
2
ddl : degrs de libert ce sont les variables nodales du modle lments finis

La boucle de calcul, caractristique de la mthode des lments finis:


for iel=1:nelt
%boucle sur les lments
[Ke,Fe] = feval(Typel(iel,:),iel); %calcul des matrices lmentaires
loce=[];
for i=1:nnode
%localisation des ddl de l'lment
loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];
end
K(loce,loce)=K(loce,loce) + Ke;
%assemblage
Fg(loce)=Fg(loce) + Fe;
end

Analyse:
Lassemblage des matrices lmentaires ncessite de localiser la position des ddl de llment
dans le vecteur global. La boucle interne consiste placer dans le vecteur loce la position
des ddl de chaque nud de llment.
Exemple
Soit llment 7-9 dun treillis 2D
Les variables lmentaires (ddl) sont :
Qui occupent respectivement les positions

u7

[13

v7

u9

v9

14 17 18] = loce

Les instructions MATLAB permettent de manipuler globalement les matrices, ce qui


rend trs simple la cration du vecteur loce.
Exercice :
Ces lignes de programmation conviennent pour des lments de mme type
nnode = Cte
Proposez une simple modification de la boucle qui permette de crer le vecteur loce
pour des lments ayant un nombre de nuds diffrents.
Indication : nnode sera le nombre maxi de nuds des lments utiliss. 1
Lassemblage consiste ensuite placer matrice et vecteur lmentaires dans la matrice
globale, en manipulant globalement les matrices merci Matlab.
Matrice et vecteur lmentaires
La fonction Matlab script effectuant le calcul porte le nom Typel(iel) il est dans le
rpertoire [Elements]
Exemple barre_ke
Calcul de la matrice raideur lmentaire et du vecteur force gnralis dune charge
rpartie pour un lment barre. Les variables globales utilises par cette fonction sont :
la table de coordonnes des nuds (Coord), la table de connectivit des lments
(Connec), les tables des caractristiques mcaniques (Nprop et Prop) donnant les
valeurs de la raideur ES et les pressions liniques fx et fy appliques sur llment, et
la dimension du problme (ndim).
Regardez et analyser le script de cette fonction, vous identifierez aisment les formules
que nous avons utiliss pour effectuer les calculs la main (voir le lexique).
Vous pouvez modifier ce script pour faire afficher les matrices lmentaires si
vous souhaitez utiliser ce programme pour vrifier vos calculs.
Les autres scripts proposs concernent:
poutre_ke
EF poutre (1D, 2D et 3D) pour le calcul statique des portiques
1

Correction : voir un des scripts "statique" rellement propos

poutre_keme
Q4_ep
TR_ep
Q4_th

EF poutre (1D, 2D) pour le calcul dynamique des portiques


EF quadrilatre 4 noeuds pour l'lasticit plane en statique
EF triangle 3 noeuds pour l'lasticit plane en statique
EF quadrilatre 4 noeuds de thermique stationnaire

La prise en compte des conditions aux limites


F = F + Fg;
ir = 0;
for i=1:nddlt
if ( Ncl(i) == 1 )
%dplacements imposs 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 ractions
Kr(:,i) = []; R(ir,1) = -F(i); ir = ir-1;
K(i,:) = []; K(:,i) = [];
%suppression ligne colonne dans K
F(i)=[];
%suppression ligne dans F
end
end

On commence par sommer les charges nodales donnes (variable globale F) avec le vecteur
des charges rparties sur les lments (variable Fg).
L'algorithme propos ici est bas sur une rsolution par bloc du systme dquations global,
c'est la mthode vue en cours et utilise en TD.

[ K11 ]

[ K 21 ]

[ K12 ] {U i } = {Fd }
[ K 22 ] {U d } {Fi }

Le premier bloc d'quations nous donne le vecteur des dplacements nodaux inconnus:

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


1

Cest le systme rduit

En reportant dans le second nous obtenons le vecteurs des efforts de liaison inconnus:

{Fi } =

K 22 K 21 K111 K12 {U d } + K 21 K111 { Fd }

Nous modifions dans un premier temps le vecteur du chargement en tenant compte des
dplacements imposs. Notez que cette opration est inutile si tous les dplacements imposs
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 dplacements imposs

La boucle suivante remonte le systme dquations pour supprimer les lignes et les colonnes
de K et les lignes de F permettant ainsi dobtenir le systme rduit (ou premier bloc du
systme global). Avant cette opration nous stockons dans une matrice Kr les lments de K
qui seront utiles pour calculer les ractions aux appuis (second bloc du systme global).
Comme vous pouvez le voir lintrt de MATLAB est de pouvoir manipuler globalement les
matrices, ce qui nous donne une programmation simple et efficace.
Remarque :
Pour le script vibrations il suffit dliminer les lignes et colonnes de K et M.
Il existe dautres mthodes pour prendre en compte les conditions aux limites en dplacement
sans avoir rduire le systme dquations ce qui vite ensuite davoir rintroduire les

dplacements imposs dans le vecteur solution. La plus efficace est celle du terme unit sur la
diagonale voir (G. Dhatt - G. Touzot & E Lefrancois : mthode des lments finis. Hermes
Lavoisier, 2005).
Exercice :
tudier l'algorithme de la mthode du terme unit sur la diagonale propos par Dhatt
& Touzot, puis programmer le script correspondant.
Correction : regardez le script statique.
La rsolution Sol =K\ F en statique
Ayant une matrice symtrique dfinie positive la mthode utilise est celle de Choleski.

Attention si vous laissez des modes rigides le programme affichera un message derreur
indiquant que la matrice est singulire, cest donc vous de modifier le jeu de donnes pour
liminer les modes rigides de la structure.
Pour calculer les n premires frquences et modes propres de vibrations dune structure
nous aurions les commandes MATLAB suivantes :
[modes,omega] = eigs(K,M,n,'sm');
f = sqrt(diag(omega))/(2*pi);

Le script se termine en replaant les valeurs imposes dans le vecteur U et en calculant les
ractions (flux) inconnus correspondants.
Sauf dvelopper la bibliothque des programmes ou lments finis proposs vous n'aurez
pas modifier ces scripts pour utiliser MEFlab. L'tude de ces scripts vous permettra
d'approfondir vos connaissances en EF et de vous perfectionner dans l'utilisation de MATLAB.

II- Description des scripts de donnes


Ces scripts prsentent deux parties :
Dfinition des donnes du problme : travail effectuer
Post-traitement : calculs complmentaires & sorties listing ou graphique des rsultats
La mise en donnes se termine logiquement par une reprsentation graphique du maillage
script plotstr et l'appel du script de rsolution du problme.
Ce sont les lignes suivantes :
clc;disp(' ');
disp('Les variables globales sont initialises');
disp('Fin de lecture des donnes');
close all
plotstr % trac du maillage pour validation des donnes
disp(' ');
disp('Etude du Portique 2D de l''exercice Po2');
disp('=================');
U = zeros(nddlt,1);
R = zeros(nddlt,1);
[U(:,1),R(:,1)] = statiqueUR;
% ----- rsolution du problme

Post traitement

Le post traitement effectue une mise en forme des rsultats (formats d'impression) et liste les
variables afficher.
Pour les problmes de mcanique
En statique : trac de la dforme fonction plotdef et listing des dplacements et
des efforts nodaux.
En dynamique : trac des modes de vibrations fonction plotmodes

En statique le calcul des contraintes sur les lments est systmatiquement effectu car
comme vous l'avez vu en cours l'analyse de ces rsultats nous donne une information
sur la qualit de notre modle numrique. Exemple, la fonction barre_stress
affiche leffort normal calcul dans llment barre.
Comparaison avec une solution analytique
Lorsqu'elle existe il peut tre intressant de programmer la solution analytique du problme
pour la comparer au modle lments finis, c'est ce qui est fait entre autre pour:
barre_compar : colonne du chapitre II.
poutre_compar : poutre tudie dans l'exercice III-1.
poutre_modes : modes de vibrations d'une poutre.
Vous pouvez donc complter les lignes du script de donnes pour programmer, partir des
rsultats du modle lments finis, les calculs que vous devez effectuer pour rpondre aux
objectifs de votre tude.
Ci-dessous les lignes de post-traitement d'un script treillis
%----- format d'impression des vecteurs
form =' %8.3e
%8.3e
%8.3e '; format = [form(1:8*nddln),' \n'];
disp(' ');disp('------- dplacements nodaux sur (x,y,z) ----------');
fprintf(format,U)
plotdef(U)
%----- post-traitement
disp(' ');disp('------- Efforts aux appuis ----------');
fprintf(format,R(:,1));
[Rx,Ry,Rz] = feval('resultante',R);
%----- rsultantes et ractions
disp(' ');
fprintf('La rsultante des charges nodales
en (x,y,z) est : %8.3e
\n',Fx,Fy,Fz);
fprintf('La rsultante des charges rparties en (x,y,z) est : %8.3e
\n',-Rx-Fx,-Ry-Fy,-Rz-Fz);
fprintf('La rsultante des efforts aux appuis en (x,y,z) est : %8.3e
\n',Rx,Ry,Rz);

%8.3e

%8.3e

%8.3e

%8.3e

%8.3e

%8.3e

disp(' ');disp('------- Contraintes sur les lments ----------');


for iel=1:nelt
%----- boucle sur les lments
loce=[]; for i=1:nnode loce=[loce,(Connec(iel,i)-1)*nddln+[1:nddln]];end
Ue=U(loce);
feval('barre_stress',iel,Ue);
end

Question :
Que pensez-vous du calcul des charges rparties ?

Rponse

Donnes du problme
Cette premire partie du script sert dfinir les valeurs des variables globales, donnes du
modle lments finis, qui sont utilises dans les scripts EF. Ce sont ces lignes qu'il faut
modifier pour les adapter la structure que vous souhaitez tudier. Regardons l'exemple 1
propos dans le chapitre sur les treillis.
EFbarre_chapII_1
Coord=[ 0 , 0 ; ...
2*h , 0 ; ...
h , h ];
[nnod,ndim]=size(Coord);
nddln=2; nddlt=nddln*nnod;

% dfinition des coordonnes des nuds X , Y

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

% dfinition de la matrice de connectivit

% dimension du tableau
% Nombre de ddl par nuds et total

% dimension du tableau

Ce calcul est bas sur l'quilibre global de la structure, il faudra donc vrifier que le rsultat affich
correspond effectivement au chargement appliqu.

Typel = 'barre_ke';
% dfinition du type des lments
for i=1:nelt
Typel = str2mat('barre_ke',Typel);
end
% dfinition des caractristiques mcaniques
Nprop=[1;1;1];
% pour chaque lment N de la proprit
Prop=[ 100*sqrt(2) 0 0];
% tableau des diffrentes valeurs de ES fx fy
% dfinition des CL en dplacement
% N du nud, type sur u et v (1 ddl impos ,
0 ddl libre)

CL=[ 1 , 1 , 1 ; ...
2 , 0 , 1 ];
Ncl=zeros(1,nddlt);
Vcl=zeros(1,nddlt);
%Vcl(2)=1;

% Valeurs des dplacements imposs


% utiliser pour imposer une valeur non nulle

for i=1:size(CL,1)
% Variables globales associes
for j=1:nddln
if CL(i,1+j)==1 Ncl(1,(CL(i,1)-1)*nddln+j)=1; end
end
end
% dfinition 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 crer un nouveau jeu de donnes. On peut
ventuellement programmer le calcul de la position des nuds et du tableau de connectivit
des lments si le maillage est important.
Exercice :
Effectuez la mise en donnes de la structure suivante (en acier E=210000 Mpa)
2m

3m

Intrt : cette structure ncessite 2


groupes de proprits mcaniques

G
yo

S1 = 49cm

G
xo

S1 = 49cm

F=950KN

1.5 m

S 2 = 25cm 2

Chargement 1 :
F uniquement
Chargement 2 : Poids propre
g = 9.81 m/s2 3
= 7800 Kg / m

Pour allez plus loin crivez le script permettant d'afficher les rsultats du chargement 2
(conditions vide) puis d'y ajouter le chargement 1 (conditions normales) et les conditions
extrmes : poids propres plus F= 1425KN de chargement.
Correction : envoyez-moi, par mail, votre script de donnes pour correction.
En gnral un programme lments finis utilisera des outils de gnration de maillage pour
raliser ce type de jeu de donnes. Dans le document interface GMSH nous prsentons
comment utiliser les scripts du dossier [Mailleur] pour raliser le maillage et le post
traitement sous GMSH.

Bilan
Si vous avez lu en dtail cette prsentation et trait les diffrents exercices proposs vous avez
compris le fonctionnement de lapplication MEFlab, et le principe dutilisation des diffrents
scripts proposs.
A vous de jouer.

Si vous effectuez de nouveau dveloppement sous MEFlab n'hsitez pas m'en faire part pour
les mettre en ligne et les partager.

Vous aimerez peut-être aussi