Vous êtes sur la page 1sur 21

Programme en Matlab pour les lments finis

Par : Grari et Korikache 1/21



Plan :

1. Introduction,

2. Le problme exact,

3. Discrtisation de Galerkin,

4. Reprsentation de la triangulation,

5. La matrice de rigidit A,

6. Le ct droit b de lquation,

7. tats dincorporation de Dirichlet,

8. Calcul de la solution numrique,

9. quation de chaleur,

10. Conclusion et exemples de problmes traiter,

11. Bibliographie.
Programme en Matlab pour les lments finis

Par : Grari et Korikache 2/21
Implmentation des lments finis en Matlab

1. Introduction :

Une courte excution sous Matlab pour les lments finis P1-Q1 sur des triangles et
des paralllogrammes est donne pour la rsolution numrique des problmes elliptiques avec
des conditions aux frontires mixtes sur des grilles non structures. Selon la brivet du
programme et de la documentation donne, n'importe quelle adaptation des exemples modles
simples, des problmes plus complexes, peut facilement tre excut. Les exemples
numriques prouvent la flexibilit de l'outil sous Matlab.

Les programmes proposs sous Matlab utilisent la mthode des lments finis pour
calculer une solution numrique U approche de la solution u du problme bidimensionnel
de Laplace ) (P avec des conditions mixtes aux frontires:


2. Le problme exact :

Soit
2
9 e O un domaine ouvert born et Lipschitzien de frontire polygonale I.
Sur un certain sous-ensemble ferm de la frontire
D
I de longueur positive, nous considrons
des conditions de Dirichlet, alors que nous avons les conditions de Neumann sur la partie
restante : I = I
N
\
D
I
Soient ) (
2
O eL f , ) (
1
O eH u
D
et ) (
2
N
L g I e .
Cherchons ) (
1
O eH u avec :






Daprs le thorme de Lax-Milgram, il existe toujours une solution faible de (1)-(3)
ce qui donne la rgularit intrieure (i.e., ) (
2
O e
loc
H u ), et on a des frontires lisses et aussi un
changement de conditions la frontire.
Les conditions non homognes de Dirichlet (2) sont associes la dcomposition :



Alors, la formulation faible (ou variationnelle) du problme ( P ) est de :
Rechercher ) (
1
O e
D
H v tel que :

f u = A Dans O (1)

D
u u = Sur
D
I (2)
g
n
u
=
c
c
Sur
N
I (3)
D
u u v = donc 0 = v sur
D
I , i.e.,
= O e ) (
1
D
H v {
D
sur H I = O e 0 / ) (
1
e e }

} } } }
O O I O
V V + + = V V , . . . . wdx u wds g wdx f wdx v
D
N
) (
1
O e
D
H w
(4)
(P)
Programme en Matlab pour les lments finis

Par : Grari et Korikache 3/21
3. Discrtisation de Galerkin du problme :

Pour limplmentation, le problme (4) est discrtis en utilisant la mthode standard
de Galerkin ou ) (
1
O H et ) (
1
O
D
H sont remplaces par des sous-espaces de dimensions finis S
et
1
D D
H S S = , respectivement,

Soit S U
D
e une approximation de
D
u sur
D
I (On dfinit
D
U comme tant un interpolant
(relatif au nud) de
D
u sur
D
I ).

Donc le problme discret ) (
S
P est de : chercher
D
S V e tel que ;




Soit ) ,........, (
1 N
q q une base de lespace S de dimension fini, et soit ) ,........, (
1 M
i i
q q une base de
D
S ou N} ., {1,....... } i , ,......... {i I
M 1
_ = est un ensemble d'index de cardinale 2 s N M .
Lquation (5) est quivalente :
En outre soit,



Donc, lquation (6) donne le systme linaire des quations :

Les coefficients de la matrice
M M
k j jk
A A

9 e =
,
) ( et le cot droit
M
I j j
b b 9 e =
e
) ( sont dfinit
par :

La matrice A est creuse, symtrique, dfinie positive, donc, le systme (7) a exactement
une solution
M
x 9 e ce qui dtermine la solution de Galerkin :






} } } }
O O O I
V V + = V V , . . Wdx U gWds fWdx Wdx V
D
N

D
S W e (5)
, . .
} } } }
O I O O
V V + = V V dx U ds g dx f dx V
j D j j j
N
q q q q I j e (6)

}
O
V V = dx A
k j jk
q q . et

} } }
=
O I O
V V + =
N
k
k j k j j j
dx U ds g dx f b
N
1
. q q q q (8)

e
=
I k
k k
x V q
et

=
=
N
k
k k D
U U
1
q
.

b Ax =
(7)

e =
+ = + =
I k
k k
N
j
j j D
x U V U U q q
1

Programme en Matlab pour les lments finis

Par : Grari et Korikache 4/21
Figure 1. Exemple de maillage
4. Reprsentation des donnes de la triangulation
O
:

Supposant que le domaine Oa une frontire polygonale I, nous pouvons recouvrir O
par une triangulation rgulire T forme de triangles et de quadrilatres, i.e., t
T te
= O o
chaque t est un triangle ferm ou un quadrilatre ferm.




coordinates.dat contient les coordonnes de chaque nud de maillage.
Chaque ligne est de la forme :
node# x-coord y-coord

Notre subdivision de O

est forme de triangles et de quadrilatres. Dans les deux cas, les
nuds sont numrots dans le sens contraire des aiguilles d'une montre.

Pour les triangles ; elements3.dat contient pour chacun triangle le nombre de nuds
(sommets).
Chaque ligne est de la forme :
element# node1 node2 node3.

De mme, les donnes pour les quadrilatres sont donnes dans elements4.dat.
Ici, nous employons le format :
element# node1 node2 node3 node4.









elements3.dat
1 2 3 13
2 3 4 13
3 4 5 15
4 5 6 15
elements4.dat
1 1 2 13 12
2 12 13 14 11
3 13 4 15 14
4 11 14 9 10
5 14 15 8 9
6 15 6 7 8
Cordinates.dat
1 0.00 0.00
2 1.00 0.00
3 1.59 0.00
4 2.00 1.00
5 3.00 1.41
6 3.00 2.00
7 3.00 3.00
8 2.00 3.00
9 1.00 3.00
10 0.00 3.00
11 0.00 2.00
12 0.00 1.00
13 1.00 1.00
14 1.00 2.00
15 2.00 2.00
Programme en Matlab pour les lments finis

Par : Grari et Korikache 5/21
Les deux fichiers Neumann.dat et Dirichlet.dat contiennent dans chaque ligne les
deux numro des nuds attachs aux bords de la frontire :

Neumann edge# node1 node2 resp., Dirichlet edge # node1 node2.



















Dans la figure2, deux fonctions chapeau typiques
j
q dfinies pour chaque nud ) , (
j j
y x du
maillage par :


Le sous espace S S
D
c est lespace des splines engendr par tout les
j
q pour tout ) , (
j j
y x qui
ne se sont pas sur
D
I . Dautre part
D
U est dfinit comme tant un interpolant nodal de
D
u ,
dans S .

Avec ces espaces S et
D
S et leurs bases correspondantes, les intgrales dans la relation (8)
peuvent tre calcul comme somme de tous les lments et aussi somme de tous les bords de
larc
N
I .

C.--d.,







Figue2 : fonction chapeau

neumann.dat
1 5 6
2 6 7
3 1 2
4 2 3
dirichlet.dat
1 3 4
2 4 5
3 7 8
4 8 9
5 9 10
6 10 11
7 11 12
8 12 1
jk k k j
y x o q = ) , (
, . ,......., 1 , N k j =

}
e
V V =
T t
t
k j jk
dx A q q .
(9)

}

}

}
e = I c e
V V + =
T t
t
k j
N
k
k
E
E
j
T t
t
j j
dx U ds g dx f b
N
q q q q
1
(10)
Programme en Matlab pour les lments finis

Par : Grari et Korikache 6/21
5. la matrice de rigidit :

La matrice locale de rigidit est dtermine par les coordonnes des sommets de
l'lment correspondant, elle est calcul par les fonctions stima3.m et stima4.m.

Pour un lment de la triangulation T, soient ) , (
1 1
y x , ) , (
2 2
y x et ) , (
3 3
y x des sommets et
1
q ,
2
q
et
3
q les fonctions de base correspondantes dans S ,i.e.,


On a :









Avec T est donn par :


L'entre rsultante de la matrice de rigidit est :



Avec lindex modulo 3. Ceci est crit simultanment pour tous les index :
t
GG
t
M .
2
=
avec
|
|
|
.
|

\
|
|
|
|
.
|

\
|
=

1
0
0
0
1
0 1 1 1
1
3 2 1
3 2 1
y y y
x x x G

Puisque nous obtenons les formules semblables pour trois dimensions, le programme en
Matlab est simultanment pour d=2 et d=3



jk k k j
y x o q = ) , (
, . 3 , 2 , 1 , = k j
|
|
|
.
|

\
|
|
|
|
.
|

\
|
=
+ +
+ +
+ +
+ +
2 2
1 1
2 2
1 1
1
1
1
det /
1
1
1
det ) , (
j j
j j
j j
j j
j j j
y x
y x
y x
y x
y x
y x
y x q

(11)

Do
|
|
.
|

\
|

= V
+ +
+ +
1 2
2 1
2
1
) , (
j j
j j
j
x x
y y
T
y x q

\
|

=
1 2
1 2
det 2
y y
x x
T
|
|
.
|

1 3
1 3
y y
x x

( )
|
|
.
|

\
|

= V V =
+ +
+ +
+ + + +
}
1 2
2 1
1 2 2 1 2
,
) 2 (
) (
k k
k k
j j j j
t
t
k j jk
x x
y y
x x y y
T
T
dx M q q
function M = stima3(vertices)
d = size(vertices,2);
G = [ones(1,d+1);vertices] \ [zeros(1,d);eye(d)];
M = det([ones(1,d+1);vertices]) * G * G / prod(1:d);
Programme en Matlab pour les lments finis

Par : Grari et Korikache 7/21
( )
|
|
|
|
|
.
|

\
|
+ + + +
+ + + +
+ + + +
+ + + +
u
=
) ( 2 3 2 ) ( 3 2
2 ) ( 2 3 2 ) ( 3
) ( 2 3 2 ) ( 2 3 2
2 ) ( 3 2 ) ( 2 3
6
det
c a b c a c a b c a
c a c a b c a c a b
c a b c a c a b c a
c a c a b c a c a b
D
M
T

Pour un lment quadrilatral T soient ) , ( , ),........ , (
4 4 1 1
y x y x les sommets avec les fonctions
chapeau correspondantes
4 1
,......., q q .
Puisque T est un paralllogramme, il y a un quadrillage

Pour les lments
2
] 1 , 0 [ sur T. puis )) , ( ( ) , (
1
y x y x
T j j

u = q avec les fonctions de la forme



Selon la loi de substitution il suit pour les intgrales (9) :


On rsout ces intgrales partir de la matrice locale de rigidit, pour un lment de quadrilatre on
aura :








Avec,







}
V V =
T
k j jk
y x d y x y x M ) , ( ) , ( ). , ( q q
( )
}
u u u V u u V =

2
1 , 0
1 1
) , ( det )) , ( ))( ( ))( , ( )( ( , , , d D M
T
T
T k T jk

( )
( )
) , ( )) , ( ( ) ) )(( , ( det
2
1 , 0
1
, , , d D D D M
T
k T
T
T j T jk
}
V u u V u =


), 1 )( 1 ( : ) , (
1
, , = ), 1 ( : ) , (
2
, , =
, : ) , (
3
, , = . ) 1 ( : ) , (
4
, , =
|
|
.
|

\
|
+
|
|
.
|

\
|
|
|
.
|

\
|

= u =
|
|
.
|

\
|
1
1
1 4
1 4
1 2
1 2
) , (
y
x
y y
x x
y y
x x
y
x
T
,

,
,
|
|
.
|

\
|
= u u

c
b
b
a
D D
T
T
T
1
) ) ((
function M = stima4(vertices)
D_Phi = [vertices(2,:)-vertices(1,:); vertices(4,:)- ...
vertices(1,:)];
B = inv(D_Phi*D_Phi);
C1 = [2,-2;-2,2]*B(1,1)+[3,0;0,-3]*B(1,2)+[2,1;1,2]*B(2,2);
C2 = [-1,1;1,-1]*B(1,1)+[-3,0;0,3]*B(1,2)+[-1,-2;-2,-1]*B(2,2);
M = det(D_Phi) * [C1 C2; C2 C1] / 6;
Programme en Matlab pour les lments finis

Par : Grari et Korikache 8/21
6. Assembler le ct droit de lquation :

Les forces de volume sont employes pour assembler le ct droit. Utilisons la valeur de
f au centre de gravit ) , (
S S
y x de T l'intgrale
dx f
j
T
q
}
en (10) est approxime par :




Tel que 6 =
T
k si T est un triangle et 4 =
T
k si T est un paralllogramme.


Les valeurs de f sont donnes partir de la fonction f.m qui dpend du problme.
La fonction est dfinit par les coordonnes des points qui se trouve dans et elle renvoie la
force de volume a ces endroits.

Pour lexemple numrique reprsent sur le schma 3 nous avons employ



De mme, les conditions de Neumann contribuent au cot droit. En utilisant la valeur de g au
centre ) , (
M M
y x de E avec la longueur E , lintgrale
ds g
E
j
}
q
dans (10) est approch par











Ici, nous employons le fait que dans Matlab la taille dune matrice vide est gale zro et
qu'une boucle de 1 0 est totalement omis. De cette faon, la question de l'existence des
donnes de frontire de Neumann doit tre renonce.
% Volume Forces
for j = 1:size(elements3,1)
b(elements3(j,:)) = b(elements3(j,:)) + ...
det([1 1 1; coordinates(elements3(j,:),:)]) * ...
f(sum(coordinates(elements3(j,:),:))/3)/6;
end
for j = 1:size(elements4,1)
b(elements4(j,:)) = b(elements4(j,:)) + ...
det([1 1 1; coordinates(elements4(j,1:3),:)]) * ...
f(sum(coordinates(elements4(j,:),:))/4)/4;
end
function VolumeForce = f(x);
VolumeForce = ones(size(x,1),1);
% Neumann conditions
for j = 1 : size(neumann,1)
b(neumann(j,:))=b(neumann(j,:)) + ...
norm(coordinates(neumann(j,1),:) - ...
coordinates(neumann(j,2),:)) * ...
g(sum(coordinates(neumann(j,:),:))/2)/2;
end
) , ( det
1
1 3
1 3
1 2
1 2
S S
T
j
T
y x f
y y
x x
y y
x x
k
dx f
|
|
.
|

\
|

~
}
q

). , (
2
M M
E
j
y x g
E
ds g ~
}
q
Programme en Matlab pour les lments finis

Par : Grari et Korikache 9/21
Les valeurs de g sont donns par la fonction g.m qui dpend encore du problme. La
fonction est dfinit avec les coordonnes des points sur
N
I et retours les efforts
correspondants. Pour l'exemple numrique g.m tait




7. Incorporation des tats de Dirichlet :

Avec une numrotation approprie des nuds, le systme des quations linaires
rsultant de la construction dcrite dans la section prcdente sans incorporer des tats de
Dirichlet peut tre crit comme suit :




Avec ;
M
U 9 e ,
M N
D
U

9 e .
Ici, U sont les valeurs aux nuds libres qui sont dterminer,
D
U sont les valeurs aux nuds
qui sont sur la frontire de Dirichlet ainsi sont connus a priori.
Par consquent, le premier bloc d'quations peut tre rcrit :



C'est la formulation de (6) avec 0 =
D
U aux nuds de non-Dirichlet.
Dans le deuxime bloc d'quations dans (12) l'inconnu est
D
b mais puisqu'il n'a pas dintrt,
il est omis dans la suite.






Les valeurs
D
u aux nuds sur
D
I sont donnes par la fonction u_d.m qui dpend du
problme.
La fonction est appele par les coordonnes aux points sur
D
I et retourne les valeurs aux
endroits correspondants.

Pour l'exemple numrique u_d.m tait :



function Stress = g(x)
Stress = zeros(size(x,1),1);
% Dirichlet conditions
u = sparse(size(coordinates,1),1);
u(unique(dirichlet)) = u_d(coordinates(unique(dirichlet),:));
b = b - A * u;
function DirichletBoundaryValue = u_d(x)
DirichletBoundaryValue = zeros(size(x,1),1);
|
|
.
|

\
|
=
|
|
.
|

\
|
|
|
.
|

\
|
D D
T
b
b
U
U
A
A
A
A
.
22
12
12
11
, (12)
D
U A b U A . .
12 11
=
Programme en Matlab pour les lments finis

Par : Grari et Korikache 10/21
8. Calcul de la solution numrique :

Les lignes de l'quation
b Ax =
correspondant aux M premires lignes du systme
(12) qui rduit le systme des quations avec une matrice dfinie symtrique et positive de
coefficient
11
A


Il est obtenu du systme original des quations en prenant les lignes et les colonnes et
on les fait correspondant les nuds libres du problme. La restriction peut tre ralise dans
Matlab travers lindexation approprie.
Le systme des quations est rsolu par l'oprateur binaire (install dans Matlab) qui donne
l'inverse gauche d'une matrice.




Matlab se sert des proprits d'une matrice dfinie positive, symtrique pour rsoudre le
systme des quations efficacement.
Une reprsentation graphique de la solution est donne par la fonction show.m.


























Dans Matlab trisurf(ELEMENTS,X,Y,U) est utilise pour dessiner des triangulations
pour les lments de types gaux. Chaque ligne de la matrice ELEMENTS dtermine un
polygone o les x-, y-, et z- coordonnes de chaque sommet de ce polygone est donne par la
correspondance avec X, Y et U respectivement. La couleur des polygones est donne par des
valeurs de U. Les paramtres additionnels, 'facecolor', 'interp', mnent une coloration
interpole. La figure 3 illustre la solution pour le maillage dfinie dans la section 4 et les
fichiers de donnes f.m, g.m, et u_d.m donns dans les sections 6 et 7 .
FreeNodes=setdiff(1:size(coordinates,1),unique(dirichlet));
u(FreeNodes)=A(FreeNodes,FreeNodes)\b(FreeNodes);
function show(elements3,elements4,coordinates,u)
trisurf(elements3,coordinates(:,1),coordinates(:,2),u,...
facecolor,interp)
hold on
trisurf(elements4,coordinates(:,1),coordinates(:,2),u,...
facecolor,interp)
hold off
view(10,40);
title(Solution of the Problem)
Figure3.solution du problme de Laplace
Programme en Matlab pour les lments finis

Par : Grari et Korikache 11/21
Rcapitulation : le programme principal, qui est numr dans l'annexe A, est structur
comme suit (les lignes rfrences sont selon la numrotation dans l'annexe A) :

- Lignes 3-10: Chargement de la gomtrie et initialisation du
maillage.
- Lignes 11-19: Assemble la matrice de rigidit dans deux boucles,
d'abord aux lments des triangulaires, puis aux lments des
quadrilatres.
- Lignes 20-30: Incorporation de la force de volume dans deux boucles,
d'abord aux lments des triangulaires, puis aux lments des
quadrilatres.
- Lignes 31-35: Incorporation de l'tat de Neumann.
- Lignes 36-39: Incorporation de l'tat de Dirichlet.
- Lignes 40-41: Solution du systme linaire rduit.
- Lignes 42-43: Reprsentation graphique de la solution numrique.
Programme en Matlab pour les lments finis

Par : Grari et Korikache 12/21
.

}
T e
=
T
T
k j jk
dx B q q

9. L'quation de la chaleur :

Pour des mthodes numriques de l'quation de la chaleur,



avec un procd implicite en temps d'Euler, nous subdivisons l'intervalle de temps [0, T] en
N sous-intervalles ] , [
1 n n
t t


(n tant un nombre entier positif ou nul) tels que:


avec
1
=
n n
t t dt dnote le pas de temps fixe. nous dsignons par
n
u lapproximation de la
temprature u au temps n t
n
= .Pour lapproximation de
t
u
c
c
au temps n t
n
= , nous utilisons
la formule suivante :
dt
u u
u
n n
n
) (
1

= c

o
1 n
u est lapproximation de la temprature u au temps
1 n
t ,ce qui mne l'quation :



o ) , (
n n
t x f f =

.
La forme faible de (13) est :




Avec ) , (
n n
t x g g = et les notations dans la section 2.
Pour chaque tape, cette quation est rsolue en utilisant les lments finis qui mne au
systme linaire suivant :



La matrice de rigidits A et le ct droit b sont comme avant. La matrice de masse B est le
rsultat des limites , i.e.,




Pour la triangulation, affinez par morceaux les lments que nous obtenons :





L'annexe B montre le programme modifi de l'quation de la chaleur.


}
O
vdx u
n
f u
t
u
+ A =
c
c
sur | | T , 0 O
1
) (

+ = A
n n n
u dtf u dt id , (13)
dx v u vdx g vdx f dt vdx u dt dx v u
n n n n n
} } } } }
O

O O O O
+ + = V V +
1
) ( .
1
) (

+ = +
n n
BU dtb U B dtA
|
|
|
.
|

\
|
|
|
.
|

\
|

=
}
2 1 1
1 2 1
1 1 2
det
24
1
1 3
1 3
1 2
1 2
y y
x x
y y
x x
dx
T
k j
q q
T t t t
N n
= s s s s = ...... ..... 0
0

Programme en Matlab pour les lments finis

Par : Grari et Korikache 13/21
Lexemple numrique a t bas sur le domaine dans la figure1, cette fois avec 0 f et
1 =
D
u sur la frontire externe. La valeur sur le cercle (intrieur) est toujours 0 =
D
u .
Sur les frontire de Neumann, nous avons toujours ) , (
n n
t x f f = , La figure 4 montre la
solution pendant quatre fois diffrentes (T = 0:1, 0:2, 0:5 et T = 1). (T est la variable dans la
ligne 10 du programme principal.)
Le programme principal, list dans l'annexe B, est structur comme suit (les lignes rfrence
ont la mme numrotation dans l'annexe B) :


Lexemple numrique a t bas sur le domaine dans la figure1, cette fois avec 0 f et
1 =
D
u sur la frontire externe. La valeur sur le cercle (intrieur) est toujours 0 =
D
u . Sur la
frontire de Neumann, nous avons toujours 0 g .





- Lignes 3-11 : Chargement de la gomtrie et initialisation du maillage
- Lignes 12-16 : Assemble la matrice de rigidits A dans une boucle en tous
les lments triangulaires.
- Lignes 17-20 : Assemble la matrice de masse B dans une boucle en tous les
lments triangulaires.
- Lignes 21-22 : Dfinir l'tat initial du discret U.
- Lignes 23-48 : Boucle (aux au-dessus) tapes de temps.En particulier :
- Ligne 25 : (Dgager) le vecteur du ct droit.
- Lignes 26-31 : Incorporation de la force de volume l'tape de temps n.
- Lignes 32-37 : Incorporation de la condition de Neumann l'tape de temps
n.
- Lignes 38-39 : Incorporation de la solution l'tape prcdente de temps
n -1.
- Lignes 40-43 : Incorporation de la condition de Dirichlet l'tape de
temps n.
- Lignes 44-47 : Solution du systme linaire rduit pour la solution
l'tape de temps n.
- Lignes 49-50 : Reprsentation graphique de la solution numrique ltape
temps final
Programme en Matlab pour les lments finis

Par : Grari et Korikache 14/21

), , ( ) ; , (
1
v u J u u v u DJ
n n n n
=
+

) (
1
0
O e H v

) 17 (

10. Conclusion :
Dautres problmes peuvent tre trait par la mthode des lments finis, laide de
Matlab, tels que :
- Le problme non-linaire :

Comme application simple du problme variationnel non convexe, nous considrons
l'quation de Ginzburg-Landau


La formulation faible est donne par :




Nous pouvons considrer galement la condition ncessaire pour minimiser le problme
variationnel





Nous rsoudrons (15) avec la mthode de Newton-Raphson's.
Commenant par un certain
0
u , dans chacun tape d'itration, nous calculons
) (
1
0
1
O e
+
H u u
n n
satisfaisant :



Les intgrales locales rsultantes peuvent tre calcules analytiquement et sont implments
en localj.m, respectivement localdj.m, comme donn dans l'annexe C.
Le programme en Matlab a besoin encore de petites modifications, montres dans l'annexe C.

Les solutions ne sont pas uniques. En effet, pour tout minimum local u, -u est galement un
minimum et 0 rsout aussi le problme. La fonction constante 1 = u mne l'nergie nulle,
mais viole la continuit ou on a les conditions aux frontires.
Dans le problme en dimension finie, les diffrentes valeurs initiales
0
u peut mener
diffrentes approximations numriques.
La figure 5 montre deux solutions possibles trouves pour deux diffrentes valeurs aprs
environ 20-30 itrations. La figure du ct gauche est ralise en des valeurs comme tant
choisies dans le programme dans l'annexe C.









u u u = A
3
c

dans O , 0 = u

sur I

(14)



0 ) ( . : ) , (
3
= V V =
} }
O O
dx v u u dx v u v u J c

) (
1
0
O e H v

) 15 (

( ) ! 1
4
1
2
min
2
2
2
dx u u
}
O
(

+ V
c

) 16 (

Figure 5. Solution de lquation non-linaire
Programme en Matlab pour les lments finis

Par : Grari et Korikache 15/21
- Problmes tridimensionnels :

Avec quelques modifications, le programme de Matlab pour des problmes linaires en deux
dimensions tudi dans les sections 5-8 peut tre prolong aux problmes trois dimensions.
Ttradres sont utiliss en tant qu'lments finis.
Les fonctions de base sont correspondantes celles dfinie en deux dimensions, par exemple,
pour un lment de ttradre T soient ) 4 ,......, 1 )( , , ( = j z y x
j j j
les sommets et
j
q les
fonctions de base correspondantes, c.--d.,



Chacun des dossiers *.dat obtient une entre additionnelle par ligne.
Dans coordinates.dat, cest le zme-composant de chaque nud ) , , (
j j j j
z y x P =

Une entre typique dans elements3.dat se relit maintenant :
j k l m n,

Tel que k, l, m, n, sont les nombres de sommets
n k
P P ,......., du jme lment.
elements4.dat n'est pas utilis pour des problmes trois dimensions.

L'ordre des nuds est organis tels que le ct droit de







est positif.
La reprsentation graphique pour des problmes trois dimensions peut tre faite par
raccourcis version de show.m.






La distribution de la temprature d'un piston simplifi est prsente sur le schma 6.
Calcul de la distribution de la temprature avec 3728 nuds et 15111 lments (y compris le
rendement graphique) prend quelques minutes sur un poste de travail.










function showsurface(surface,coordinates,u)
trisurf(surface,coordinates(:,1),coordinates(:,2),...
coordinates(:,3),u, facecolor,interp)
axis off
view(160,-30)
, ) , , (
jk k k k j
z y x o q =

. 4 , ,......... 1 , = k j

|
|
|
|
|
.
|

\
|
=
n m l k
n m l k
n m l k
z z z z
y y y y
x x x x
T
1 1 1 1
det 6

Figure 6. La distribution de la temprature d'un piston
Programme en Matlab pour les lments finis

Par : Grari et Korikache 16/21


Annexe
A. Le code complet de Matlab pour le problme deux dimensions de Laplace

Le programme suivant peut tre trouv dans le paquet, sous le chemin acf/fem2d.
Il s'appelle fem2d.m. Les autres dossiers sous ce chemin sont les fonctions fixes stima3.m,
stima4.m, et show.m aussi bien que les fichiers de fonctions et de donnes cela dcrivez la
discrtisation et les donnes du problme, savoir coordinates.dat, elements3.dat,
elements4.dat, dirichlet.dat, neumann.dat, f.m, g.m, et u_d.m. Ces problmes-
qui dcrivent des dossiers doivent tre adapts par l'utilisateur pour d'autres gomtries,
discrtisations, et/ou donnes.


1 % de FEM2D de mthode d'lment fini bidimensionnelle pour Laplacian.
2 % d'initialisation
3 charge coordinates.dat ; coordonnes (: , 1) = [] ;
4 eval (' charge elements3.dat ; elements3 (: , 1) = [] ; ',' elements3= [] ; ')
;
5 eval (' charge elements4.dat ; elements4 (: , 1) = [] ; ',' elements4= [] ; ')
;
6 eval (' charge neumann.dat ; neumann (: , 1) = [] ; ',' neumann= [] ; ') ;
7 charge dirichlet.dat ; dirichlet (: , 1) = [] ;
8 FreeNodes=setdiff (1 : taille (coordonnes, 1), unique (dirichlet));
9 A = clairsem (taille (coordonnes, 1), taille (coordonnes, 1));
10 b = clairsem (taille (coordonnes, 1), 1) ;
11 % d'Assemble
12 pour j = 1 : taille (elements3,1)
13 A (elements3 (j :), elements3 (j :)) = A (elements3 (j :),
14 elements3 (j :)) + stima3 (coordonnes (elements3 (j :) :));
extrmit 15
16 pour j = 1 : taille (elements4,1)
17 A (elements4 (j :), elements4 (j :)) = A (elements4 (j :),
18 elements4 (j :)) + stima4 (coordonnes (elements4 (j :) :));
extrmit 19
20 % de forces de volume
21 pour j = 1 : taille (elements3,1)
22 b (elements3 (j :)) = b (elements3 (j :)) +
det 23 ([1.1.1 ; coordonnes (elements3 (j :) :)']) *
24 f (somme (coordonnes (elements3 (j :) :))/3) /6 ;
extrmit 25
26 pour j = 1 : taille (elements4,1)
27 b (elements4 (j :)) = b (elements4 (j :)) +
det 28 ([1.1.1 ; coordonnes (elements4 (j, 1 : 3) :)']) *
29 f (somme (coordonnes (elements4 (j :) :))/4) /4 ;
extrmit 30
31 % d'tats de Neumann
32 pour j = 1 : taille (neumann, 1)
33 b (neumann (j :))=b (neumann (j :)) +
norme 34 (coordonnes (neumann (j, 1) :)- coordonnes (neumann (j, 2) :))*
g (somme (coordonnes (neumann (j :) :))/2) /2 ;
extrmit 35
36 % d'tats de Dirichlet
37 u = clairsem (taille (coordonnes, 1), 1) ;
38 u (uniques (dirichlet)) = u_d (coordonnes (uniques (dirichlet) :));
39 b = b - A * u ;
40 % de calcul de la solution
41 u (FreeNodes) = A) (de FreeNodes, de FreeNodes \ b (FreeNodes) ;
42 % de reprsentation de graphique
exposition 43 (elements3, elements4, coordonnes, pleines (u));

Programme en Matlab pour les lments finis

Par : Grari et Korikache 17/21
B. Code de Matlab pour l'quation de la chaleur

Le programme suivant peut tre trouv dans le paquet, sous le chemin acf/fem2d la
chaleur. Il s'appelle fem2d heat.m. Les autres dossiers sous ce chemin sont les fixes
fonctions stima3.m et show.m aussi bien que les fichiers de fonctions et de donnes qui
dcrivent la discrtisation et les donnes du problme, savoir coordinates.dat,
elements3.dat, dirichlet.dat,neumann.dat,f.m,g.m,et u_d.m.Ces problmes-qui
dcrivent des dossiers doivent tre adapts par l'utilisateur pour d'autres gomtries,
discrtisations, et/ou donnes.

1 mthode d'lment fini de %FEM2D_HEAT pour l'quation bidimensionnelle de la
chaleur.
2 %Initialisation
3 charge coordinates.dat ; coordonnes (: , 1) = [] ;
4 charge elements3.dat ; elements3 (: , 1) = [] ;
5 eval (' charge neumann.dat ; neumann (: , 1) = [] ; ',' neumann= [] ; ') ;
6 charge dirichlet.dat ; dirichlet (: , 1) = [] ;
7 FreeNodes=setdiff (1 : taille (coordonnes, 1), unique (dirichlet));
8 A = clairsem (taille (coordonnes, 1), taille (coordonnes, 1));
9 B = clairsem (taille (coordonnes, 1), taille (coordonnes, 1));
10 T = 1 ; dcollement = 0.01 ; N = T/dt ;
11 U = zros (taille (coordonnes, 1), N+1) ;
12 % d'Assemble
13 pour j = 1 : taille (elements3,1)
14 A (elements3 (j :), elements3 (j :)) = A (elements3 (j :),
15 elements3 (j :)) + stima3 (coordonnes (elements3 (j :) :));
extrmit 16
17 pour j = 1 : taille (elements3,1)
18 B (elements3 (j :), elements3 (j :)) = B (elements3 (j :),
19 elements3 (j :)) + det ([1.1.1 ; coordonnes (elements3 (j :) :)'])
* [2.1.1 ; 1.2.1 ; 1.1.2] /24 ;
extrmit 20
21 % d'tat initial
22 U (: , 1) = zros (taille (coordonnes, 1), 1) ;
23 % d'tapes de temps
24 pour n = 2 : N+1
25 b = clairsem (taille (coordonnes, 1), 1) ;
26 % de forces de volume
27 pour j = 1 : taille (elements3,1)
28 b (elements3 (j :)) = b (elements3 (j :)) +
det 29 ([1.1.1 ; coordonnes (elements3 (j :) :)']) *
dt*f 30 (somme (coordonnes (elements3 (j :) :))/3, n*dt) /6 ;
extrmit 31
32 % d'tats de Neumann
33 pour j = 1 : taille (neumann, 1)
34 b (neumann (j :)) = b (neumann (j :)) +
norme 35 (coordonnes (neumann (j, 1) :)- coordonnes (neumann (j, 2) :))*
dt*g 36 (somme (coordonnes (neumann (j :) :))/2, n*dt) /2 ;
extrmit 37
38 % de timestep prcdent
39 b = b + B * U (: , n-1) ;
40 % d'tats de Dirichlet
41 u = clairsem (taille (coordonnes, 1), 1) ;
42 u (uniques (dirichlet)) = u_d (coordonnes (uniques (dirichlet) :), n*dt) ;
43 b = b - (dcollement * A + B) * u ;
44 % de calcul de la solution
45 u (FreeNodes) = (dt*A (FreeNodes, FreeNodes) +
46 B (FreeNodes, FreeNodes))\ b (FreeNodes) ;
47 U (: , n) = u ;
extrmit 48
49 % de reprsentation de graphique
exposition 50 (elements3, [], coordonnes, compltement (U (: , N+1)));
Programme en Matlab pour les lments finis

Par : Grari et Korikache 18/21
C. Code de Matlab pour le problme non-linaire

Le programme suivant peut tre trouv dans le paquet, sous le chemin acf/fem2d non-
linaire. Il s'appelle fem2d nonlinear.m. Les autres dossiers sous ce chemin sont la
fonction fixe show.m aussi bien que les fichiers de fonctions et de donnes qui dcrivent le
fonctionnel J, son driv DJ, la discrtisation et les donnes du problme, savoir,
localj.m, localdj.m, coordinates.dat, elements3.dat,dirichlet.dat, f.m, et
u_d.m. Ces problmes-qui dcrivent des dossiers doivent tre adapts par l'utilisateur pour
d'autres problmes, gomtries, discrtisations, et/ou donnes non-linaires (y compris ajouter
probablement les dossiers appropris neumann.dat et g.m).
1 % de FEM2D_NONLINEAR de mthode d'lment fini pour bidimensionnel
% d'quation non-linaire.
2 % d'initialisation
3 charge coordinates.dat ; coordonnes (: , 1) = [] ;
4 charge elements3.dat ; elements3 (: , 1) = [] ;
5 eval (' charge neumann.dat ; neumann (: , 1) = [] ; ',' neumann= [] ; ') ;
6 charge dirichlet.dat ; dirichlet (: , 1) = [] ;
7 FreeNodes=setdiff (1 : taille (coordonnes, 1), unique (dirichlet));
8 % de valeur initiale
9 U = - ceux (taille (coordonnes, 1), 1) ;
10 U (uniques (dirichlet)) = u_d (coordonnes (uniques (dirichlet) :));
11 % d'itration de Newton-Raphson
12 pour i=1 : 50
13 % d'Assemble de DJ (U)
14 A = clairsem (taille (coordonnes, 1), taille (coordonnes, 1));
15 pour j = 1 : taille (elements3,1)
16 A (elements3 (j :), elements3 (j :)) = A (elements3 (j :),
elements3 (j :))
17 + localdj (coordonnes (elements3 (j :) :), U (elements3 (j :)));
extrmit 18
19 % d'Assemble de J (U)
20 b = clairsem (taille (coordonnes, 1), 1) ;
21 pour j = 1 : taille (elements3,1) ;
22 b (elements3 (j :)) = b (elements3 (j :))
23 + localj (coordonnes (elements3 (j :) :), U (elements3 (j :)));
24 extrmits
25 % de forces de volume
26 pour j = 1 : taille (elements3,1)
27 b (elements3 (j :)) = b (elements3 (j :)) +
det 28 ([1 1 1 ; coordonnes (elements3 (j :) :)']) *
29 f (somme (coordonnes (elements3 (j :) :))/3) /6 ;
extrmit 30
31 % d'tats de Neumann
32 pour j = 1 : taille (neumann, 1)
33 b (neumann (j :))=b (neumann (j :))
- norme (coordonnes (neumann (j, 1) :)-
34 coordonnes (neumann (j, 2) :)) *
*g (somme (coordonnes (neumann (j :) :))/2) /2 ;
extrmit 35
36 % d'tats de Dirichlet
37 W = zros (taille (coordonnes, 1), 1) ;
38 W (uniques (dirichlet)) = 0 ;
39 % rsolvant une tape de newton
40 W (FreeNodes) = A) (de FreeNodes, de FreeNodes \ b (FreeNodes) ;
41 U = U - W ;
42 si norme (W) < 10(-10)
coupure 43
extrmit 44
extrmit 45
46 % de reprsentation de graphique
exposition 47 (elements3, [], coordonnes, pleines (U));
fonction b = localj (sommets, U)
Eps = 1/100 ;
Programme en Matlab pour les lments finis

Par : Grari et Korikache 19/21






G = [ceux (1.3) ; ] de sommets' \ [zros (1.2) ; oeil (2)];
Secteur = det ([ceux (1.3) ; ) de sommets']/2 ;
b=Area* ((Eps*G*G' - [2.1.1 ; 1.2.1 ; 1.1.2] /12) *U+
[4*U (1) 3+ U (2) 3+U (3) 3+3*U (1) 2* (U (2) +U (3))+2*U (1)
* (U (2) 2+U (3) 2) *U de +U (2) (3) * (U (2) +U (3))1) *U du *U de +2*U ((2) (3) ;
4*U (2) 3+ U (1) 3+U (3) 3+3*U (2) 2* (U (1) +U (3))+2*U (2)
* (U (1) 2+U (3) 2) 1) *U de +U ((3) * (U (1) +U (3))1) *U du *U de +2*U ((2) (3) ;
4*U (3) 3+ U (2) 3+U (1) 3+3*U (3) 2* (U (2) +U (1))+2*U (3)
* (U (2) 2+U (1) 2) *U de +U (2) (1) * (U (2) +U (1))1) *U du *U de +2*U ((2) (3)]/60) ;
fonction M = localdj (sommets, U)
Eps = 1/100 ;
G = [ceux (1.3) ; ] de sommets' \ [zros (1.2) ; oeil (2)];
Secteur = det ([ceux (1.3) ; ) de sommets']/2 ;
M = Area* (Eps*G*G' - [2.1.1 ; 1.2.1 ; 1.1.2] /12 +
[12*U (1) 2+2* *U (d'U (2) 2+U (3) 2+U (2) (3))+6*U (1) * (U (2) +U (3)),
*U de 3* (U (1) 2+U (2) 2) +U (3) 2+4*U (1) (2) +2*U (3) * (U (1) +U (2)),
*U de 3* (U (1) 2+U (3) 2) +U (2) 2+4*U (1) (3) +2*U (2) * (U (1) +U (3));
*U de 3* (U (1) 2+U (2) 2) +U (3) 2+4*U (1) (2) +2*U (3) * (U (1) +U (2)),
12*U (2) 2+2* *U (d'U (1) 2+U (3) 2+U (1) (3))+6*U (2) * (U (1) +U (3)),
*U de 3* (U (2) 2+U (3) 2) +U (1) 2+4*U (2) (3) +2*U (1) * (U (2) +U (3));
*U de 3* (U (1) 2+U (3) 2) +U (2) 2+4*U (1) (3) +2*U (2) * (U (1) +U (3)),
*U de 3* (U (1) 2+U (3) 2) +U (2) 2+4*U (1) (3) +2*U (2) * (U (1) +U (3)),
*U de 3* (U (2) 2+U (3) 2) +U (1) 2+4*U (2) (3) +2*U (1) * (U (2) +U (3)),
12*U (3) 2+2* *U (d'U (1) 2+U (2) 2+U (1) (2))+6*U (3) * (U (1) +U (2))]/60) ;
Programme en Matlab pour les lments finis

Par : Grari et Korikache 20/21
D. Code de Matlab pour le problme trois dimensions

Le programme suivant peut tre trouv dans le paquet, sous le chemin acf/fem3d. Il s'appelle
fem3d.m. Les autres dossiers sous ce chemin sont les fonctions fixes stima3.m, et
showsurface.m aussi bien que les fichiers de fonctions et de donnes qui dcrivent la
discrtisation et les donnes du problme, savoir coordinates.dat, elements3.dat,
dirichlet.dat, neumann.dat, f.m, g.m, et u_d.m. Ces problmes-qui dcrivent des
dossiers doivent tre adapts par l'utilisateur pour d'autres gomtries, discrtisations, et/ou
donnes.




1 % de FEM3D de mthode d'lment fini tridimensionnelle pour Laplacian.
2 % d'initialisation
3 charge coordinates.dat ; coordonnes (: , 1) = [] ;
4 charge elements3.dat ; elements3 (: , 1) = [] ;
5 eval (' charge neumann.dat ; neumann (: , 1) = [] ; ',' neumann= [] ; ') ;
6 charge dirichlet.dat ; dirichlet (: , 1) = [] ;
7 FreeNodes=setdiff (1 : taille (coordonnes, 1), unique (dirichlet));
8 A = clairsem (taille (coordonnes, 1), taille (coordonnes, 1));
9 b = clairsem (taille (coordonnes, 1), 1) ;
10 % d'Assemble
11 pour j = 1 : taille (elements3,1)
12 A (elements3 (j :), elements3 (j :)) = A (elements3 (j :),
13 elements3 (j :)) + stima3 (coordonnes (elements3 (j :) :));
extrmit 14
15 % de forces de volume
16 pour j = 1 : taille (elements3,1)
17 b (elements3 (j :)) = b (elements3 (j :)) +
det 18 ([1.1.1.1 ; coordonne (elements3 (j :) :)'])
19 * f (somme (coordonnes (elements3 (j :) :))/4)/24 ;
extrmit 20
21 % d'tats de Neumann
22 pour j = 1 : taille (neumann, 1)
23 b (neumann (j :)) = b (neumann (j :)) +
24 normes (croix (coordonnes (neumann (j, 3) :)-
coordonnes (neumann (j, 1) :),
25 coordonnes (neumann (j, 2) :)- coordonnes (neumann (j, 1) :)))
26 * g (somme (coordonnes (neumann (j :) :))/3) /6 ;
extrmit 27
28 % d'tats de Dirichlet
29 u = clairsem (taille (coordonnes, 1), 1) ;
30 u (uniques (dirichlet)) = u_d (coordonnes (uniques (dirichlet) :));
31 b = b - A * u ;
32 % de calcul de la solution
33 u (FreeNodes) = A) (de FreeNodes, de FreeNodes \ b (FreeNodes) ;
34 % de reprsentation de graphique
showsurface 35 ([dirichlet ; neumann], coordonnes, pleines (u));
Programme en Matlab pour les lments finis

Par : Grari et Korikache 21/21
Rfrences :
[1] S.C. Brenner et L.R. Scott, La thorie mathmatique de mthodes d'lment fini, Textes
dans Mathmatiques appliques, vol. 15 (Springer, New York, 1994).
[2] P.G. Ciarlet, La mthode d'lment fini pour des problmes elliptiques (la Nord-Hollande,
Amsterdam, 1978).
[3] L. Langemyr et autres., Le guide d'quation de l'utilisateur partiel de bote outils ( Math
Works, Inc. 1995).
[4] H.R. Schwarz, Der Finiten Elemente de Methode (Teubner, Stuttgart, 1991).