Académique Documents
Professionnel Documents
Culture Documents
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 1/12
29/11/2023 14:10 EF2D
⎧ − Δu + u = f , dans Ω,
(P N ) ⎨ ∂ u
⎩
= 0, dans ∂ Ω,
∂n
¯
¯¯¯ 2 2
où f : Ω ⟶ R est une fonction de classe C donnée et où Ω est un ouvert de R
u ∈ V tel que
(P N v) {
a(v, u) = L(v), ∀ v ∈ V,
1
où V = H (Ω), a est une forme bilinéaire dans V et L une forme linéaire de V , que
l'on explicitera.
l'intersection de chaque deux triangles est soit vide, soit une arête complète des 2
triangles, soit un sommet des deux triangles. L'indice h note le diamètre maximal
des triangles de Th .
1
On considère l'espace Vh corespondant à l'approximation de H (Ω) par des
1
éléments finis P associés à la triangulation Th :
0 ¯
¯¯¯ 1
Vh = {Φ ∈ C (Ω ) | Φ|T ∈ P , pour tout T ∈ Th }.
ΦI (S J ) = δ I J , I , J = 1, … , NSom .
Les fonctions ΦI sont l'analogue en dimension 2 des fonctions chapeaux que l'on a
vu en dimension 1.
1
H (Ω) de dimension finie NSom .
N Som
I =1
T
seulement si le vecteur U = (u1 , … , uN Som ) est solution d'un système linéaire
KU + MU = F ,
N Som ×N Som
où K et M sont les matrices de M (R) définies par
K I ,J = ∫ ∇ΦI ⋅ ∇ΦJ , M I ,J = ∫ ΦI ΦJ ,
Ω Ω
N Som
et où F est le vecteur de R défini par
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 2/12
29/11/2023 14:10 EF2D
FI = ∫ f ΦI .
Ω
Maillage de Ω.
Pour se répérer dans le maillage du domaine Ω, les triangles et les sommets des
l'on appellera dans le programme python T abT ri, contient la liste des triangles. Il
s'agit d'une matrice de taille NT ri × 3 que, dans chaque ligne N , contient les 3
indices I des sommets du triangle TN . La deuxième, que l'on appellera T abS om,
de taille NSom × 2 que, dans chaque ligne I contient les coordonnées du sommet S I .
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 3/12
29/11/2023 14:10 EF2D
Nx=18
Ny=18
x_m=0.
x_M=2.
y_m=0.
y_M=2.
x=np.linspace(x_m,x_M,Nx+2)
y=np.linspace(y_m,y_M,Ny+2)
X,Y=np.meshgrid(x,y)
X=X.flatten()
Y=Y.flatten()
triang = tri.Triangulation(X, Y)
NTri=np.shape(triang.triangles)[0]
NSom=np.shape(triang.x)[0]
# Représentation du maillage
plt.figure(1)
plt.gca().set_aspect('equal')
plt.triplot(X,Y,triang.triangles, 'b-', lw=0.5)
plt.title('maillage')
plt.show()
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 4/12
29/11/2023 14:10 EF2D
[[ 1 0]
[ 2 1]
[ 3 2]
...,
[399 378]
[399 379]
[399 398]]
SI , SI et S I , de calculer
1 2 3
˙ ˙
∫ ∇ΦI ∇ΦI et ∫ ΦI ΦI
i j i j
TN TN
Pour calculer la matrice de masse élémentaire sur le triangle T , on peut utiliser les
formules ci-dessous.
par
1 1
λ1 (x, y) = (y23 (x − x3 ) − x23 (y − y3 )), λ2 (x, y) = (y31 (x − x1 ) − x31 (y − y1 )), λ3 (x,
D D
où xij = xi − xj , yij = yi − yj et D = x23 y31 − x31 y23 . |D| est égal à deux fois la
surface du triangle.
k1 k2 k3
k 1 !k 2 !k 3 !
∫ λ λ λ = 2 aire(T ).
1 2 3
T (k1 + k2 + k3 + 2)!
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 5/12
29/11/2023 14:10 EF2D
def K_elem(S1,S2,S3):
# A compléter
Dans cette partie on met en oeuvre un algorithme pour construire les matrices M et
M I ,J = ∑ ∫ ΦI ΦJ = ∑ ∫ ΦI ΦJ .
TN TN
N =1 N :SI ,SJ ∈TN
Pour N= 1...NTri
Détérmination des sommets S_I1, S_I2 et S_I3 du triangle T_N
Calcul des matrices élémentaires associées au triangle T_N
Pour i=1..3
Pour j=1...3
Rajouter à M(Ii,Ij) la contribution venue du triangle T_N
In [5]: # A compléter
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 6/12
29/11/2023 14:10 EF2D
Ici on fait le choix de remplacer f par son interpolé P1 aux points du maillage, i.e. on
N Som
I =1
On admet que cette approximation ne change pas l'approximation par éléments finis
du problème.
méthode des élements finis et utiliser le code suivant pour la visualiser. Visualiser
In [3]: # A compléter
#plt.figure(2)
#plt.gca().set_aspect('equal')
#plt.tripcolor(triang.x,triang.y,triang.triangles, u, shading='flat')
#plt.colorbar()
#plt.title('solution approchee par EF P1')
N Som
I =1
2 1
aux points S I . Calculer, pour différentes valeurs de h, les normes L et H de
Vous pouvez remplacer le debut de votre programme par le code ci-dessus, pour
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 7/12
29/11/2023 14:10 EF2D
In [5]: Nx=18
Ny=18
x_m=0.
x_M=2.
y_m=0.
y_M=2.
Rx=rd.random([Nx+2,Nx+2])
Rx[:,0]=0
Rx[:,-1]=0
Ry=rd.random([Ny+2,Ny+2])
Ry[0,:]=0
Ry[-1,:]=0
x=np.linspace(x_m,x_M,Nx+2)#+4*((x_M-x_m)/(5*(Nx+2)))*Rx
y=np.linspace(y_m,y_M,Ny+2)#+4*((y_M-y_m)/(5*(Ny+2)))*Ry
X,Y=np.meshgrid(x,y)
X=X+0.9*((x_M-x_m)/((Nx+2)))*Rx
Y=Y+0.9*((y_M-y_m)/((Ny+2)))*Ry
X=X.flatten()
Y=Y.flatten()
triang = tri.Triangulation(X, Y)
NTri=np.shape(triang.triangles)[0]
NSom=np.shape(triang.x)[0]
plt.figure(1)
plt.gca().set_aspect('equal')
plt.triplot(X,Y,triang.triangles, 'b-', lw=0.5)
plt.title('maillage')
plt.show()
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 8/12
29/11/2023 14:10 EF2D
... Ou par celui-ci, pour discrétiser le problème (P N ) posé dans une coronne.
[x,y,T] = triangulation_couronne(8,36)
NTri=np.shape(T)[0]
NSom=np.shape(x)[0]
TabSom=np.zeros([NSom,2])
TabSom[:,0]=x
TabSom[:,1]=y
plt.figure(1)
plt.gca().set_aspect('equal')
plt.triplot(x,y,T, 'b-', lw=0.5)
plt.title('maillage')
plt.show()
# .... Le programme
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 9/12
29/11/2023 14:10 EF2D
pour l'équation de Poisson, cette fois-ci avec conditions aux limites de Dirichlet
homogène :
− Δu + u = f , dans Ω,
(P ) {
u = 0, dans ∂ Ω
¯
¯¯¯ 2 2
où f : Ω ⟶ R est une fonction de classe C donnée et où Ω est un ouvert de R
donné.
u ∈ V tel que
(P v) {
a(v, u) = L(v), ∀ v ∈ V,
1
où V = H (Ω), a est une forme bilinéaire dans V et L une forme linéaire de V , que
0
l'on explicitera.
On note {TN } N =1,…,N tri les triangles de Th , {S I } I =1,…,N Som les sommets des
par ΦI (S J ) = δ I J , I , J = 1, … , N S om.
0 1
L'espace V que l'on considèrera pour approcher H sera constitué des éléments
h 0
Pour cela, il faut tout d'abord référencer les sommets I qui sont dans le bord.
génère le maillage et les tableaux T abT ri, contenant la liste des triangles, et
créer un tableau Ref S om, de taille N S om × 1 , que dans chaque ligne I prendra la
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 10/12
29/11/2023 14:10 EF2D
On note
S 0 = {I ∈ {1, … , N S om} : S I ∉ ∂ Ω}
On définit alors
0
V = V ect({ΦI : I ∈ S 0 }).
h
0
Le problème discret consiste alors à chercher uh ∈ V tel que
h
U I = 0.
(Ph ).
dans une autre figure la différence, en valeur absolue, entre les deux solutions.
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 11/12
29/11/2023 14:10 EF2D
Réfléchir dans cette partie comment adapter la méthode à un problème aux limites
⎧ − Δu + u = f , dans Ω,
~
(P ) ⎨ ∂ u
⎩ + pu = g, dans ∂ Ω,
∂n
Pour cela :
Il faut pour cela accéder au tableau triang.edges qui donne dans chaque ligne les
sommets des arêtes des triangles composant la triangulation, et créer un tableau qui
https://www.imo.universite-paris-saclay.fr/~filipa.caetano/EF2D.html 12/12