Fonctions d`assemblage de l`élément fini P1 en dimension 3

Transcription

Fonctions d`assemblage de l`élément fini P1 en dimension 3
Institut
Supérieur d’
Informatique, de
Modélisation et de leurs
Applications
Complexe Universitaire des Cézeaux
BP125
63173 Aubière CEDEX
Projet de troisième année
Fonctions d’assemblage de l’élément fini
P1 en dimension 3
(TOME I)
Responsable ISIMA : Jonas KOKO
Présenté par : Pierre PETITPREZ
Mathieu LAPOINTE
2006-2007
F4
Institut
Supérieur d’
Informatique, de
Modélisation et de leurs
Applications
Complexe Universitaire des Cézeaux
BP125
63173 Aubière CEDEX
Projet de troisième année
Fonctions d’assemblage de l’élément fini
P1 en dimension 3
(TOME I)
Responsable ISIMA : Jonas KOKO
Présenté par : Pierre PETITPREZ
Mathieu LAPOINTE
2006-2007
F4
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Remerciements
Nous tenons en premier lieu à remercier Mr Jonas KOKO pour nous avoir proposé ce projet, pour
ses nombreux conseils lors de sa réalisation et pour la confiance qu’il nous a témoigné. En particulier,
merci pour nous avoir mis à disposition vos études qui nous ont largement servi dans l’étape de
compréhension des algorithmes. Merci également pour avoir su nous éclairer lorsque nous avions des
problèmes.
Nous exprimons également notre gratitude à Mr Gilles LEBORGNE, qui, en plus d’avoir su nous
inculquer les notions nécessaires à la résolution d’équations aux dérivées partielles, nous a fourni une
aide très utile lorsque nous voulions générer des maillages afin de tester nos algorithmes.
2006/2007
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Résumé
Les méthodes de résolution d’équations aux dérivées partielles qui se basent sur les éléments finis
nous permettent d’obtenir une solution approchée à un problème. Toutefois, les besoins en calcul de
telle méthode sont relativement élevés dès que l’on cherche à résoudre dans un espace de dimension
3. L’obtention d’un code Matlab rapide est alors primordiale. C’est ce à quoi essaye de répondre ce
projet. Nous adaptons la méthode de résolution proposée par Mr Jonas KOKO au cas 3D. Afin de
limiter les temps de calcul, les inversions de matrice liées au calcul seront faite de manière analytique.
De plus, nous nous efforcerons d’obtenir un code vectorisé afin d’avoir les meilleures performances
possibles.
Mots clés: éléments finis, espace de dimension 3, inversion analytique, code vectorisé
Abstract
The methods of solution of partial derivative equation which bases on finite elements allow us to
obtain a solution approached for a problem. However, the requirements in calculation for such method
are relatively high as soon as one seeks to solve in a space of dimension 3. Obtaining a fast Matlab
code is then of primary importance. It is the main purpose of our project. We adapt the method of
resolution of Mr. Jonas KOKO to the case 3D. In order to limit the computing times, the inversions
of matrix related to calculation will be made in an analytical way. Moreover, we will endeavour to
obtain a vectorized code in order to have the best possible performances.
Keywords: finite elements, space of dimension 3, analytical inversion, vectorized code
2006/2007
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Table des matières
Remerciements
Résumé / Abstract
Table des matières
Table des figures
Liste des tableaux
Introduction
6
1 Position du problème
1.1 Problème modèle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Problème de dirichlet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
7
2 Maillage
2.1 Eléments de référence . . . . . . . . . . . . .
2.2 Représentation Matlab . . . . . . . . . . . .
2.3 Approximation P 1 . . . . . . . . . . . . . .
2.3.1 Formulation du problème variationnel
2.3.2 Méthode de Galerkin . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
approché
. . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
9
9
11
11
11
12
3 Assemblage des matrices et calculs nécessaires
3.1 Assemblage de la matrice de rigidité . . . . . . . . .
3.2 Assemblage de la matrice de masse . . . . . . . . .
3.3 Assemblage du vecteur second membre . . . . . . .
3.4 Assemblage de la condition aux limites de Dirichlet
3.5 Inversion analytique d’une matrice 4 ∗ 4 . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
13
13
13
14
14
14
4 Analyse des résultats
4.1 Justification de l’inversion analytique de la matrice
4.2 Calcul de l’erreur en espace . . . . . . . . . . . . .
4.3 Cas où α et ν sont constants . . . . . . . . . . . . .
4.3.1 Erreur en espace . . . . . . . . . . . . . . .
4.3.2 Temps de calcul . . . . . . . . . . . . . . . .
4.4 Cas où α et ν non constants . . . . . . . . . . . . .
4.4.1 Erreur en espace . . . . . . . . . . . . . . .
4.4.2 Temps de calcul . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
15
15
16
16
18
19
19
Conclusion
Références bibliographiques
2006/2007
22
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Table des figures
.1
.2
.3
.4
.5
.6
A.1
Tétraèdres de référence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Temps de calcul des gradients des fonctions de base en fonction du nombre de points .
Erreur en fonction du nombre de points avec α et ν constants . . . . . . . . . . . . .
Temps de calcul en fonction du nombre de points avec α et ν constants . . . . . . . .
Erreur en fonction du nombre de points avec α et ν non constants . . . . . . . . . . .
Temps de calcul en fonction du nombre de points avec α et ν non constants . . . . . .
Les 6 tétraèdres contenus dans un cube . . . . . . . . . . . . . . . . . . . . . . . . . .
2006/2007
9
15
17
17
20
20
V
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Liste des tableaux
.1
.2
.3
.4
.5
Exemple de fichier du maillage de l’élément de référence . . . . . . . . . . .
Erreur en fonction du nombre de points avec α et ν constants . . . . . . .
Temps de calcul en fonction du nombre de points avec α et ν constants . .
Erreur en fonction du nombre de points avec α et ν non constants . . . . .
Temps de calcul en fonction du nombre de points avec α et ν non constants
2006/2007
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
16
18
19
21
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Introduction
L’évolution de l’informatique nous permet aujourd’hui de résoudre des problèmes de plus en plus
complexes. Elle permet notamment la résolution d’équations aux dérivées partielles par des méthodes
d’éléments finis. Ce projet entend reprendre la méthode de résolution d’équation aux dérivées partielles
proposée par Jonas KOKO dans son cours et de l’adapter au cas tridimensionnel [1].
Notre étude propose donc une méthode de résolution s’appuyant sur le calcul des matrices de rigidité
et de masse ramenant notre système différentiel à un système linéaire. L’objectif est la création d’un
code Matlab vectorisé. L’assemblage de la matrice de rigidité requiert le calcul des gradients des
fonctions de base. Ceux ci seront calculés de manière analytique afin de ne pas nuire à la vitesse de
calcul.
La présentation de notre étude se déroulera de la manière suivante. Dans un premier temps, nous
expliciterons les problèmes que notre méthode se propose de résoudre. Ensuite, après avoir défini les
maillages sur lesquels nous travaillerons, nous poserons le problème sous forme variationelle. Nous en
déduirons alors une expression des matrices de masse et de rigidité et du vecteur second membre,
que nous calculerons dans une troisième partie. Enfin, dans une dernière partie, nous testerons notre
algorithme sur différents problèmes et conclurons sur son efficacité, sa rapidité et sa précision.
Dans nos annexes, nous avons fait figurer les différents codes que nous avons implémentés. Tout
d’abord le code Matlab de la méthode de résolution puis un petit code C que nous avons développé
afin de générer des maillages dans l’espace.
2006/2007
page 6 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
1
Position du problème
1.1
Problème modèle
Soit Ω un domaine borné de R2 de frontière Γ suffisamment régulière. Un point de Ω sera noté
~x = (x, y).
Notre problème modèle est le suivant :
Trouver une fonction u : Ω → R solution de
~
α(~x)u(~x) − div(ν(~x)grad(u(~
x))) = f (~x), ∀~x ∈ Ω
u(~x) = 0,
∀~x ∈ Γ
(1)
(2)
Les données du problème sont les fonctions α, ν et f définies sur Ω. Nous supposons que les
fonctions f ,α et ν vérifient :
f ∈ L2 (Ω),
α ∈ L∞ (Ω)etα(~x) ≥ 0,
∀~x ∈ Ω.
∗
∃νmin , νmax ∈ R+ , 0 < νmin ≤ ν(~x) ≤ νmax , ∀~x ∈ Ω
(3)
(4)
(5)
Nous résoudrons cette équation par une méthode des éléments finis. Pour cela, nous allons avoir
besoin de la formulation variationelle du problème 1-2. En posant V = H01 (Ω), on obtient, à l’aide de
la formule de Green :
Trouver v ∈ V = H01 (Ω) tel que :
Z
Z
α(~x)u(~x)v(~x)d~x +
~
~
ν(~x)grad(u(~
x))grad(v(~
x))d~x =
f (~x)v(~x)d~x, ∀v ∈ V
(6)
Ω
Ω
Ω
Z
Les conditions du théorème de Lax-Milgram sont satisfaites grâce aux équations 4-5. La forme
bilinéaire
Z
Z
α(~x)u(~x)v(~x)d~x +
a(u, v) =
Ω
~
~
ν(~x)grad(u(~
x))grad(v(~
x))d~x
(7)
Ω
est donc continue et coercitive sur Ω. Alors le problème 10 admet une solution unique dans V .
1.2
Problème de dirichlet
Nous gardons les mêmes hypothèses sur α, ν et f . On se propose de résoudre le problème suivant.
Trouver une fonction u : Ω → R solution de
~
α(~x)u(~x) − div(ν(~x)grad(u(~
x)) = f (~x), ∀~x ∈ Ω
u(~x) = g(~x),
∀~x ∈ Γ
(8)
(9)
Posons
V D = {v ∈ H 1 (Ω), ∀~x ∈ Γ, v(~x) = v(~x)}.
2006/2007
page 7 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Sous des hypothèses de régularité supplémentaires sur g, la formulation variationelle de 8-9 est :
Trouver u ∈ V D tel que :
Z
Z
α(~x)u(~x)v(~x)d~x +
Ω
2006/2007
Ω
~
~
ν(~x)grad(u(~
x))grad(v(~
x))d~x =
Z
f (~x)v(~x)d~x, ∀v ∈ V
(10)
Ω
page 8 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
2
Maillage
2.1
Eléments de référence
Dans le cas de tetraèdres, l’élément de référence est le tétraèdre {(0, 0, 0), (1, 0, 0), (0, 1, 0), (0, 0, 1)},
figure .1. La transformation τ définit les coordonnées ~x = (x, y, z) de l’élément réel à partir des
coordonnées ξ~ = (ξ, η, γ) de l’élément de référence.
Fig. .1 – Tétraèdres de référence
La transformation τ doit générer des éléments compatibles avec les propriétés de la définition d’un
maillage. Chaque transformation τ est donc choisie de sorte qu’elle soit bijective et transforme les
noeuds géométriques de l’élément de référence en noeuds géométriques de l’élément réel. L’élément
de référence est défini par les contraintes suivantes :
ξ+η+γ
ξ
η
γ
≤
≥
≥
≥
1
0
0
0.
Plaçons nous sur un tétraèdre réel T , de sommets {~
xi = (xi , yi , zi )}i=1,2,3,4 . En posant :
~ = 1−ξ−η−γ
φ1 (ξ)
~ = ξ
φ2 (ξ)
~ = η
φ3 (ξ)
(11)
~ = γ
φ4 (ξ)
(14)
(12)
(13)
La transformation τ est définie par
~ =
~x(ξ)
4
X
~ xi
φi (ξ)~
i=1
2006/2007
page 9 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
que l’on peut encore écrire
~ = x~1 + J ξ~
~x(ξ)
(15)
où J est la matrice


x2 − x1 x3 − x1 x4 − x1
J =  y2 − y1 y3 − y1 y4 − y1 
z2 − z1 z3 − z1 z4 − z1
La matrice J est la matrice jacobienne de la transformation τ et son déterminant peut être calculé
par une méthode de type Sarrus et on a
detJ = 6 |T |
(16)
où |T | est le volume du tétraèdre T . La transformation τ est donc réversible dès lors que |T | =
6 0,
ie. le volume du tétraèdre réel T est non nul.
Sur un élément réel T , de sommets {xi }i=1,...,4 , on utilise l’approximation nodale
uh (~x) =
4
X
(17)
Φi (~x)ui
i=1
où les {Φi (~x)} sont les fonctions de base sur l’élément réel. On leur préférera les fonctions {φi },
données par les équations 11-14, définies sur l’élément de référence en remplaçant 17 par
~ =
uh (ξ)
4
X
~ i
φi (ξ)u
(18)
i=1
Les variables ~x et ξ~ se correspondant par la transformation τ −1 .
~ Pour
Puisque nous utiliserons 18 au lieu de 17, nous devons calculer les dérivations par rapport à ξ.
cela nous utilisons la formule suivante [2]


1
∇φ1
 x1
 ∇φ2 



 ∇φ3  =  y1
∇φ4
z1

1
x2
y2
z2
1
x3
y3
z3
−1 
1

x4 
 


y4
z4
0
1
0
0
0
0
1
0

0
0 

0 
1
(19)
La matrice sera inversée par une méthode analytique que nous verrons plus tard.
Les intégrales sur les éléments réels doivent être aussi transformées en intégrales sur l’élément de
référence. A l’aide de la formule de changement de variables, on a
Z
Z
f (~x)d~x =
T
2006/2007
Tr
~ |detJ| dξ~ = 6 |T |
f (ξ)
Z
~ ξ~
f (ξ)d
(20)
Tr
page 10 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
2.2
Représentation Matlab
La tétraédrisation de l’espace sera représentée de la manière suivante. Les noeuds et les tétraèdres
sont stockés dans deux tableaux p(1 : np, 1 : 3) et t(1 : nt, 1 : 4) où np et nt représentent respectivement le nombre de points et le nombre de tétraèdres du maillage de l’espace. Nos maillages seront
générés par un utilitaire que nous avons développé en C. Le code de celui ci sera fourni en annexe. Il
génère un fichier dans lequel le maillage est représenté comme suit :
– La première ligne contient le nombre de points et le nombre de tétraèdres.
– La première partie du fichier contient les coordonnées de chaque point. Sur chaque ligne figurent
les 3 coordonnées d’un point.
– Enfin, les tétraèdres sont représentés par les 4 points qui les composent.
4
0.0000
1.0000
0.0000
0.0000
1
1
0.0000
0.0000
1.0000
0.0000
2
0.0000
0.0000
0.0000
1.0000
3 4
Tab. .1 – Exemple de fichier du maillage de l’élément de référence
Approximation P 1
2.3
2.3.1
Formulation du problème variationnel approché
Définissons l’espace dans lequel nous allons résoudre le problème 10. Soit P 1 l’espace des polynômes
à 3 variables de degré inférieur ou égal à 1. Définissons les espaces variationnels discrets suivants :
Hh1 = {vh ∈ C 0 (Ω); vh |T ∈ P 1 , ∈ Th },
Vh = {vh ∈ Hh1 ; vh (x, y) = 0, ∀(x, y) ∈ Γh }.
(21)
(22)
La solution approchée uh est linéaire par morceaux sur Ωh . Les valeurs des fonctions vh de Hh
sont entièrement déterminées par leurs valeurs aux noeuds de la triangulation. La dimension de Hh
est donc égale au nombre de noeuds du maillage. Soit une base de Hh1 (Φi )i=1,...,N où les φi sont les
fonctions suivantes :
Φi (xj , yj , zj ) = δij
Pour toute fonction vh de Vh , on a donc
vh (~x) =
~
grad(v
x)) =
h (~
N
X
i=1
N
X
Φi (~x)vi ,
(23)
~
grad(Φ
x))vi .
i (~
(24)
i=1
Nous pouvons maintenant formuler le problème variationnel approché :
Trouver uh ∈ Vh tel que :
Z
Z
α(~x)uh (~x)vh (~x)d~x +
Ωh
2006/2007
Ω
~
~
ν(~x)grad(u
x))grad(v
x))d~x =
h (~
h (~
Z
f (~x)vh (~x)d~x, ∀vh ∈ Vh
(25)
Ω
page 11 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
2.3.2
Méthode de Galerkin
L’équation 25 est vraie, en particulier pour une fonction vh = Φi . Ce qui correspond au problème :
Trouver uh ∈ Vh tel que :
Z
Z
~
~
ν(~x)grad(u
x))grad(Φ
x))d~x =
h (~
i (~
α(~x)uh (~x)Φi (~x)d~x +
Ωh
Z
f (~x)vh (~x)d~x, ∀i = 1, ..., N (26)
Ωh
Ωh
N étant le nombre de noeuds internes de la triangulation. En écrivant uh dans la base des
(Φi )i=1,...,N , nous obtenons :
N Z
X
j=1
Z
α(~x)Φj (~x)Φi (~x)d~x +
Ωh
~
~
ν(~x)grad(Φ
x))grad(Φ
x))d~x ui =
j (~
i (~
Z
Ωh
f (~x)Φi (~x)d~x, ∀i = 1, ..., (N27)
Ωh
Le problème variationnel discret 25 est donc équivalent au système linéaire n ∗ n
(M + R)~u = f~.
où M = (Mij ) la matrice de masse, R = (Rij ) la matrice de rigidité ou de raideur et f~ = (fi ) le
second membre sont définis par
Z
Mij =
α(~x)Φj (~x)Φi (~x)d~x
(28)
~
~
ν(~x)grad(Φ
x))grad(Φ
x))d~x
j (~
i (~
(29)
f (~x)Φi (~x)d~x
(30)
Ωh
Z
Rij =
Ωh
Z
fi =
Ωh
On peut se ramener à des intégrales sur les triangles T . On pose :
(T )
Mij
Z
=
α(~x)Φj (~x)Φi (~x)d~x
(31)
~
~
ν(~x)grad(Φ
x))grad(Φ
x))d~x
j (~
i (~
(32)
f (~x)Φi (~x)d~x
(33)
T
(T )
Rij
(T )
fi
Z
=
ZT
=
T
On obtient alors
Mij =
X
(T )
Mij ,
T ∈Th
Rij =
X
(T )
Rij ,
T ∈Th
fi =
X
(T )
fi .
T ∈Th
2006/2007
page 12 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
3
Assemblage des matrices et calculs nécessaires
3.1
Assemblage de la matrice de rigidité
Pour un tétraèdre T de Th , soient {xi }i=1,...,4 les sommets et φi les fonctions de base correspondantes. Si le coefficient ν n’est pas une constante, nous supposons sa valeur connue pour tous les
sommets de la triangulation. Le volume du tétraèdre nous est donné par la formule 16 et les gradients
des fonctions de base par 19. En utilisant la formule du changement de variable 20, on obtient
(T )
Rij
Z
Z
ν∇φi (~x)∇φj (~x)d~x = 6 |T |
=
T
~ x φj (ξ)d
~ ξ~ i, j = 1, ..., 4
ν∇x φi (ξ)∇
Tr
où les φi sont les fonctions de base 11-14 de l’élément de référence Tr . Sachant que les ∇φi sont
constants et que |Tr | = 1/6, il vient que
(T )
~ x φj (ξ)
~
Rij = νT |T | ∇x φi (ξ)∇
où
νT =
3.2
ν
1
(ν(x~1 )
4
si
ν constant
+ ν(x~2 ) + ν(x~3 ) + ν(x~4 )) sinon
Assemblage de la matrice de masse
En utilisant la formule du changement de variable 20, un élément d’indice (i, j) de la matrice de
masse élémentaire est donné par
Z
Z
(T )
~ i (ξ)φ
~ j (ξ)d
~ ξ~
α(~x)φi (~x)φj (~x)d~x = 6 |T |
α(ξ)φ
Mij =
T
Tr
où les φi sont les fonctions de base sur l’élément de référence 11-14. De plus, d’après [3], on a la
formule suivante :
Z
1
0
Z
0
1−ξ
Z
1−ξ−η
ξ i η j γ k dγdηdξ =
0
i!j!k!
(i + j + k + 3)!
(34)
Grâce à 34, on obtient par un calcul direct
(
(T )
Mij
=
|
αT |T
si
i=j
10
|T |
αT 20 sinon
où
αT =
2006/2007
α
si
α constant
1
(α(x~1 ) + α(x~2 ) + α(x~3 ) + α(x~4 )) sinon
4
page 13 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
3.3
Assemblage du vecteur second membre
Nous supposons les valeurs de f connues pour tout les sommets du maillage. Le vecteur second
membre est alors calculé de la manière suivante
Z
Z
(T )
fi =
f φi d~x = 6 |T |
f φi dξ~
T
Tr
Et donc en utilisant la formule 34, on obtient
(T )
fi
= fT
|T |
4
(35)
où
fT =
3.4
f
1
(f (x~1 )
4
si
f constant
+ f (x~2 ) + f (x~3 ) + f (x~4 )) sinon
Assemblage de la condition aux limites de Dirichlet
Après assemblage, on obtient le système linéaire suivant :
Au = b
Il faut le modifier afin d’incorporer la condition au limite de Dirichlet. Nous utiliserons une méthode
de pénalisation car nous utiliserons une méthode de résolution directe. Soit la précision de la machine
A chaque ligne i du système, on ajoute −1 sur la diagonale et −1 uD
i au second membre.
3.5
Inversion analytique d’une matrice 4 ∗ 4
Pour inverser la matrice 4∗4 nécessaire au calcul des gradients de fonctions de base, nous utiliserons
une méthode analytique afin d’obtenir de meilleures performances dans notre implémentation Matlab.
Pour cela, nous donnons la formule suivante :
A−1 =
1
∗ com(A)T
det(A)
(36)
où com(A) est la matrice des cofacteurs de A.
2006/2007
page 14 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
4
Analyse des résultats
4.1
Justification de l’inversion analytique de la matrice
Lors du calcul du vecteur des gradients des fonctions de base, nous utilisons une formule d’inversion
analytique de la matrice afin d’éviter des calculs trop lourds. Afin de mettre en avant l’intérêt d’une
telle méthode, nous avons calculé les temps de calcul en utilisant une inversion simple de la matrice
sous Matlab. La figure .2 représente le temps de calcul des gradients des fonctions de base en fonction
du nombre de points.
Fig. .2 – Temps de calcul des gradients des fonctions de base en fonction du nombre de points
4.2
Calcul de l’erreur en espace
Soit usol la solution fournie par notre algorithme et u la fonction satisfaisant l’équation 1-2. Nous
avons calculé l’erreur en fonction du nombre de points. Pour cela, nous avons utilisé la norme classique
dans Rn :
v
u n
uX
erreur = t
usol (i)2 − u(i)2 .
i=1
Les calculs ont été effectués sur des maillages composés de 8 à 8000 points.
4.3
Cas où α et ν sont constants
Dans un premier temps, nous testerons notre algorithme sur le problème suivant.
Trouver une fonction u : [0, 1]3 → R solution de
2006/2007
page 15 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
u(~x) − ∆u(~x) = −2 ∗ ex+y+z , ∀~x ∈ Ω
u(~x) = 0,
aux bords
La solution à ce problème est la fonction
u : [0, 1]3 → R
~x
7→ ex+y+z
4.3.1
Erreur en espace
Nombre de points Erreur
8.0000 0.0000
27.0000 0.2021
64.0000 0.2263
125.0000 0.2187
216.0000 0.2059
343.0000 0.1932
512.0000 0.1818
729.0000 0.1719
1000.0000 0.1633
1331.0000 0.1557
1728.0000 0.1490
2197.0000 0.1431
2744.0000 0.1378
3375.0000 0.1330
4096.0000 0.1287
4913.0000 0.1248
5832.0000 0.1212
6859.0000 0.1178
8000.0000 0.1148
Tab. .2 – Erreur en fonction du nombre de points avec α et ν constants
La figure .3 représente l’évolution de l’erreur en fonction du nombre de points.
4.3.2
Temps de calcul
La figure .4 représente l’évolution du temps de traitement en fonction du nombre de points dans un
repère logarithmique. A partir d’un certain nombre de points, les points paraissent alignés. Cherchons
une approximation de cette droite par une regression linéaire :
y = ax + b
où
2006/2007
page 16 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Fig. .3 – Erreur en fonction du nombre de points avec α et ν constants
Fig. .4 – Temps de calcul en fonction du nombre de points avec α et ν constants
2006/2007
page 17 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Nombre de points Temps de calcul total (s) Temps de lecture (s) Temps de traitement (s)
8.0000
0.127504
0.001603
0.0125901
27.0000
0.018077
0.006092
0.011985
64.0000
0.026737
0.016720
0.010017
125.0000
0.058683
0.037113
0.02157
216.0000
0.112821
0.062057
0.050764
343.0000
0.191509
0.104569
0.08694
512.0000
0.308543
0.163872
0.144671
729.0000
0.488136
0.242643
0.245493
1000.0000
0.695576
0.343185
0.352391
1331.0000
0.984830
0.466234
0.518596
1728.0000
1.362043
0.622816
0.739227
2197.0000
1.901611
0.806430
1.095181
2744.0000
2.459966
1.027587
1.432379
3375.0000
3.459436
1.278818
2.180618
4096.0000
4.495414
1.568973
2.926441
4913.0000
5.739330
1.902805
3.836525
5832.0000
7.955548
2.280429
5.675119
6859.0000
9.799278
2.705467
7.093811
8000.0000
13.743943
3.178593
10.56535
Tab. .3 – Temps de calcul en fonction du nombre de points avec α et ν constants
cov(x, y)
V (x)
xcov(x, y)
= y − ax
b = y−
V (x)
a =
On obtient a = 1.38 et b = −10.44. La complexité de la méthode est donc O(nombre de points1.38 )
4.4
Cas où α et ν non constants
Nous appliquons notre algorithme au problème suivant : Trouver une fonction u : [0, 1]3 → R
solution de
~
α(~x)u(~x) − div(ν(~x)grad(u(~
x)) = f (~x), ∀~x ∈ Ω
u(~x) = 0,
∀~x ∈ Γ
avec
α : [0, 1]3
~x
ν : [0, 1]3
~x
→R
7→ xyz
→R
7→ 2(x + y + z)
La solution à ce problème est la fonction
2006/2007
page 18 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
u : [0, 1]3 → R
~x
7→ sin(πx)cos(πy)eπz
4.4.1
Erreur en espace
Nombre de points Erreur
8.0000 0.0000
27.0000 1.4526
64.0000 2.0067
125.0000 2.0367
216.0000 1.9356
343.0000 1.8073
512.0000 1.6837
729.0000 1.5744
1000.0000 1.4818
1331.0000 1.4055
1728.0000 1.3445
2197.0000 1.2971
2744.0000 1.2620
3375.0000 1.2375
4096.0000 1.2225
4913.0000 1.2156
5832.0000 1.2156
6859.0000 1.2215
8000.0000 1.2324
Tab. .4 – Erreur en fonction du nombre de points avec α et ν non constants
La figure .5 représente l’évolution de l’erreur en fonction du nombre de points.
4.4.2
Temps de calcul
La figure .6 représente l’évolution du temps de traitement en fonction du nombre de points dans un
repère logarithmique. De même que précedemment, on effectue une régression linéaire. Nous obtenons
a = 1, 36 et b = −10, 74. Soit une complexité en temps en O(nombre de points1,36 )
2006/2007
page 19 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Fig. .5 – Erreur en fonction du nombre de points avec α et ν non constants
Fig. .6 – Temps de calcul en fonction du nombre de points avec α et ν non constants
2006/2007
page 20 / 23
Fonctions d’assemblage de l’élément fini P1 en dimension 3
Nombre de points Temps de traitement (s)
8.0000
0.007897
27.0000
0.004502
64.0000
0.011142
125.0000
0.023900
216.0000
0.033927
343.0000
0.055696
512.0000
0.090982
729.0000
0.161817
1000.0000
0.246200
1331.0000
0.339417
1728.0000
0.449763
2197.0000
0.650939
2744.0000
0.881604
3375.0000
1.328120
4096.0000
1.795960
4913.0000
2.348859
5832.0000
3.430067
6859.0000
4.405764
8000.0000
6.536970
Tab. .5 – Temps de calcul en fonction du nombre de points avec α et ν non constants
2006/2007
page 21 / 23
Conclusion
L’objectif de ce projet était l’implémentation des méthodes d’assemblage des matrices de masse et
de rigidité grâce à un code Matlab vectorisé et performant. Ceci a pu être possible notamment grâce
à l’inversion analytique de la matrice intervenant dans le calcul des gradients des fonctions de base.
Nous avons, après avoir rappelé la méthode de résolution que nous employons, explicité l’assemblage
des différentes matrices et du second membre. Nous avons aussi intégré au système linéaire que nous
obtenions les conditions de Dirichlet. La résolution de problèmes d’équations aux dérivées partielles
nous montre alors l’efficacité de notre algorithme.
Ce projet nous a permis de coder une application de notre cours d’équation aux dérivées partielles.
Notre algorithme permet de fournir une solution approchée au système différentiel présenté au début
de notre étude.
2006/2007
page 22 / 23
Références
[1] J. Koko. Méthode des élements finis en dimension 2.
[2] S.A. Funken R. Klose J. Alberty, C. Carstensen. Matlab implementation of the finite element
method in elasticity, 2002.
[3] Gouri Dhatt Touzot. Une présentation de la méthode des élements finis, 1981.
2006/2007
page 23 / 23
Institut
Supérieur d’
Informatique, de
Modélisation et de leurs
Applications
Complexe Universitaire des Cézeaux
BP125
63173 Aubière CEDEX
Projet de troisième année
ANNEXES
(TOME II)
Responsable ISIMA : Jonas KOKO
Présenté par : Pierre PETITPREZ
Mathieu LAPOINTE
2006-2007
F4
Table des Annexes
A Code Matlab
A.1 Assemblage de la matrice de masse . . .
A.2 Assemblage de la matrice de rigidité . .
A.3 Assemblage du vecteur second membre .
A.4 Calcul des gradients de fonction de base
A.5 Lecture du maillage . . . . . . . . . . .
A.6 Calcul des données du problème . . . .
A.7 Résolution . . . . . . . . . . . . . . . .
B
.
.
.
.
.
.
.
I
I
I
II
III
IV
IV
IV
Générateur de maillage 3D
B.1 Le principe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
B.2 Le code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
V
V
V
2006/2007
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
25
A. Code Matlab
A.1 Assemblage de la matrice de masse
1
3
5
7
9
11
13
15
17
19
21
f u n c t i o n M=edp2dmss3D ( p , t , alpha )
%EDP2DMSS3D Assemblage de l a m a t r i c e de masse 3D
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
M=edp2dmss3D ( p , t , a l p h a )
% Arguments :
%
p
− c o o r d o n né e s d e s sommets , t a b l e a u np ∗3
%
t
− sommets d e s t é t r a è d r e s , t a b l e a u nt ∗4
%
a l p h a − s c a l a i r e ou v e c t e u r c o l o n n e de l o n g u e u r np ou nt
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
np=s i z e ( p , 1 ) ; nt=s i z e ( t , 1 ) ;
%1 . t r a i t e m e n t du c o e f f i c i e n t a l p h a
[ m1 , m2 ] = s i z e ( alpha ) ;
i f ( m2>1 | ( m1>1 & m1˜=nt & m1˜=np ) )
e r r o r ( ’ a l p h a d o i t e t r e un v e c t e u r c o l o n n e de l o n g u e u r np ou nt ’ )
end
i f ( m1==1 | m1==nt )
c=alpha ;
else
c=( alpha ( t ( : , 1 ) ) + alpha ( t ( : , 2 ) ) + alpha ( t ( : , 3 ) ) + alpha ( t ( : , 4 ) ) ) / 4 . ;
end
23
25
27
29
31
33
35
37
39
41
%2 . volume d e s t e t r a e d r e s
x21=p ( t ( : , 2 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ;
y21=p ( t ( : , 2 ) , 2 ) − p ( t ( : , 1 ) , 2 ) ;
z21=p ( t ( : , 2 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
x31=p ( t ( : , 3 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ;
y31=p ( t ( : , 3 ) , 2 ) − p ( t ( : , 1 ) , 2 ) ;
z31=p ( t ( : , 3 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
x41=p ( t ( : , 4 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ;
y41=p ( t ( : , 4 ) , 2 ) − p ( t ( : , 4 ) , 2 ) ;
z41=p ( t ( : , 4 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
tetr_vol =(x21 . ∗ ( y31 . ∗ z41−z31 . ∗ y41)+x31 . ∗ ( y41 . ∗ z21−z41 . ∗ y21)+x41 . ∗ ( y21 . ∗ z31−z21 . ∗ y31 ) ) / 6 . ;
%ca marche pas l a
%t e t r v o l=d e t S a r r u s ( [ x21 x31 x41 ; y21 y31 y41 ; z21 z31 z41 ] ) / 6 . ;
c=c . ∗ tetr_vol / 2 0 . ;
%4 . a s s e m b l a g e d e s é l e m e n t s sous −diagonaux
M=s p a r s e ( np , np ) ;
M=M+s p a r s e ( t ( : , 2 ) , t ( : , 1 ) , c , np , np)+ s p a r s e ( t ( : , 3 ) , t ( : , 1 ) , c , np , np)+ s p a r s e ( t ( : , 4 ) , t ( : , 1 ) , c , np , np ) . . .
+s p a r s e ( t ( : , 3 ) , t ( : , 2 ) , c , np , np)+ s p a r s e ( t ( : , 4 ) , t ( : , 2 ) , c , np , np)+ s p a r s e ( t ( : , 4 ) , t ( : , 3 ) , c , np , np ) ;
43
45
47
49
%5 . t r a n s p o s i t i o n
M = M+M . ’ ;
%6 . a s s e m b l a g e d e s é l e m e n t s de l a d i a g o n a l e
c=2∗c ;
M=M+s p a r s e ( t ( : , 1 ) , t ( : , 1 ) , c , np , np)+ s p a r s e ( t ( : , 2 ) , t ( : , 2 ) , c , np , np)+ s p a r s e ( t ( : , 3 ) , t ( : , 3 ) , c , np , np ) . . .
+s p a r s e ( t ( : , 4 ) , t ( : , 4 ) , c , np , np ) ;
A.2 Assemblage de la matrice de rigidité
2
4
6
8
10
f u n c t i o n R=edp2drgd3D ( p , t , nu )
%EDP2DRGD3D Assemblage de l a m a t r i c e de r i g i d i t é 3D
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
M=edp2drgd3D ( p , t , nu )
% Arguments :
%
p
− c o o r d o n né e s d e s sommets , t a b l e a u np ∗3
%
t
− sommets d e s t é t r a è d r e s , t a b l e a u nt ∗4
%
nu
− s c a l a i r e ou v e c t e u r c o l o n n e de l o n g u e u r np ou nt
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
np=s i z e ( p , 1 ) ; nt=s i z e ( t , 1 ) ;
12
14
%1 . t r a i t e m e n t du c o e f f i c i e n t nu
[ m1 , m2 ]= s i z e ( nu ) ;
i f ( m2>1 | ( m1>1 & m1˜=nt & m1˜=np ) )
2006/2007
I
16
18
20
22
24
26
28
30
32
e r r o r ( ’ nu d o i t e t r e un v e c t e u r c o l o n n e de l o n g u e u r np ou nt ’ )
end
i f ( m1==1 | m1==nt )
c=nu ;
else
c=(nu ( t ( : , 1 ) ) + nu ( t ( : , 2 ) ) + nu ( t ( : , 3 ) ) + nu ( t ( : , 4 ) ) ) / 4 ;
end
%2 . volume d e s t e t r a e d r e s
x21=p ( t ( : , 2 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ; y21=p ( t ( : , 2 ) , 2 ) − p ( t ( : , 1 ) , 2 ) ; z21=p ( t ( : , 2 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
x31=p ( t ( : , 3 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ; y31=p ( t ( : , 3 ) , 2 ) − p ( t ( : , 1 ) , 2 ) ; z31=p ( t ( : , 3 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
x41=p ( t ( : , 4 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ; y41=p ( t ( : , 4 ) , 2 ) − p ( t ( : , 4 ) , 2 ) ; z41=p ( t ( : , 4 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
tetr_vol =(x21 . ∗ ( y31 . ∗ z41−z31 . ∗ y41)+x31 . ∗ ( y41 . ∗ z21−z41 . ∗ y21)+x41 . ∗ ( y21 . ∗ z31−z21 . ∗ y31 ) ) / 6 . ;
%t e t r v o l=d e t S a r r u s ( [ x21 x31 x41 ; y21 y31 y41 ; z21 z31 z41 ] ) / 6 . ;
c=c . ∗ tetr_vol ;
%3 . c a l c u l d e s g r a d i e n t s de f o n c t i o n s de b a s e
[ GradPhi1 , GradPhi2 , GradPhi3 , GradPhi4 ] = GradPhi ( p , t ) ;
34
36
38
40
42
44
46
48
%4 . a s s e m b l a g e d e s é l e m e n t s sous −diagonaux
R = s p a r s e ( np , np ) ;
R = R + s p a r s e ( t ( : , 2 ) , t ( : , 1 ) , c . ∗ ( GradPhi2 ( :
. . . + GradPhi2 ( : , 3 ) . ∗ GradPhi1 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 3 ) , t ( : , 1 ) , c . ∗ ( GradPhi3 ( :
. . . + GradPhi3 ( : , 3 ) . ∗ GradPhi1 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 3 ) , t ( : , 2 ) , c . ∗ ( GradPhi3 ( :
. . . + GradPhi3 ( : , 3 ) . ∗ GradPhi2 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 4 ) , t ( : , 1 ) , c . ∗ ( GradPhi4 ( :
. . . + GradPhi4 ( : , 3 ) . ∗ GradPhi1 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 4 ) , t ( : , 2 ) , c . ∗ ( GradPhi4 ( :
. . . + GradPhi4 ( : , 3 ) . ∗ GradPhi2 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 4 ) , t ( : , 3 ) , c . ∗ ( GradPhi4 ( :
. . . + GradPhi4 ( : , 3 ) . ∗ GradPhi3 ( : , 3 ) ) , np , np ) ;
, 1 ) . ∗ GradPhi1 ( : , 1 ) + GradPhi2 ( : , 2 ) . ∗ GradPhi1 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi1 ( : , 1 ) + GradPhi3 ( : , 2 ) . ∗ GradPhi1 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi2 ( : , 1 ) + GradPhi3 ( : , 2 ) . ∗ GradPhi2 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi1 ( : , 1 ) + GradPhi4 ( : , 2 ) . ∗ GradPhi1 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi2 ( : , 1 ) + GradPhi4 ( : , 2 ) . ∗ GradPhi2 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi3 ( : , 1 ) + GradPhi4 ( : , 2 ) . ∗ GradPhi3 ( : , 2 ) . . .
50
52
54
56
58
60
62
%5 . t r a n s p o s i t i o n
R = R+R . ’ ;
%6 . a s s e m b l a g e d e s é l e m e n t s de l a d i a g o n a l e
R = R + s p a r s e ( t ( : , 1 ) , t ( : , 1 ) , c . ∗ ( GradPhi1 ( :
. . . + GradPhi1 ( : , 3 ) . ∗ GradPhi1 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 2 ) , t ( : , 2 ) , c . ∗ ( GradPhi2 ( :
. . . + GradPhi2 ( : , 3 ) . ∗ GradPhi2 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 3 ) , t ( : , 3 ) , c . ∗ ( GradPhi3 ( :
. . . + GradPhi3 ( : , 3 ) . ∗ GradPhi3 ( : , 3 ) ) , np , np ) ;
R = R + s p a r s e ( t ( : , 4 ) , t ( : , 4 ) , c . ∗ ( GradPhi4 ( :
. . . + GradPhi4 ( : , 3 ) . ∗ GradPhi4 ( : , 3 ) ) , np , np ) ;
, 1 ) . ∗ GradPhi1 ( : , 1 ) + GradPhi1 ( : , 2 ) . ∗ GradPhi1 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi2 ( : , 1 ) + GradPhi2 ( : , 2 ) . ∗ GradPhi2 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi3 ( : , 1 ) + GradPhi3 ( : , 2 ) . ∗ GradPhi3 ( : , 2 ) . . .
, 1 ) . ∗ GradPhi4 ( : , 1 ) + GradPhi4 ( : , 2 ) . ∗ GradPhi4 ( : , 2 ) . . .
A.3 Assemblage du vecteur second membre
2
4
6
8
10
f u n c t i o n fh=edp2dsmb3D ( p , t , f )
%EDP2DSMB3D Assemblage du v e c t e u r s e c o n d membre
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
M=edp2dsmb3D ( p , t , f )
% Arguments :
%
p
− c o o r d o n né e s d e s sommets , t a b l e a u np ∗3
%
t
− sommets d e s t é t r a è d r e s , t a b l e a u nt ∗4
%
f
− v a l e u r de f aux sommets du m a i l l a g e , v e c t e u r np ∗1 ou nt ∗1
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
np=s i z e ( p , 1 ) ; nt=s i z e ( t , 1 ) ;
12
22
%1 . t r a i t e m e n t de f
[ m1 , m2 ]= s i z e ( f ) ;
i f ( m2>1 | ( m1>1 & m1˜=nt & m1˜=np ) )
e r r o r ( ’ f d o i t e t r e un v e c t e u r c o l o n n e de l o n g u e u r np ou nt ’ )
end
i f ( m1==1 | m1==nt )
ff=f ;
else
ff=(f ( t ( : , 1 ) ) + f ( t ( : , 2 ) ) + f ( t ( : , 3 ) ) + f ( t ( : , 4 ) ) ) / 4 ;
end
24
%2 . volume d e s t é t r a è d r e s
14
16
18
20
2006/2007
II
26
28
30
32
x21=p ( t ( : , 2 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ; y21=p ( t ( : , 2 ) , 2 ) − p ( t ( : , 1 ) , 2 ) ; z21=p ( t ( : , 2 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
x31=p ( t ( : , 3 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ; y31=p ( t ( : , 3 ) , 2 ) − p ( t ( : , 1 ) , 2 ) ; z31=p ( t ( : , 3 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
x41=p ( t ( : , 4 ) , 1 ) − p ( t ( : , 1 ) , 1 ) ; y41=p ( t ( : , 4 ) , 2 ) − p ( t ( : , 4 ) , 2 ) ; z41=p ( t ( : , 4 ) , 3 ) − p ( t ( : , 1 ) , 3 ) ;
tetr_vol =(x21 . ∗ ( y31 . ∗ z41−z31 . ∗ y41)+x31 . ∗ ( y41 . ∗ z21−z41 . ∗ y21)+x41 . ∗ ( y21 . ∗ z31−z21 . ∗ y31 ) ) / 6 . ;
%3 . a s s e m b l a g e
ff=ff . ∗ tetr_vol / 4 ;
fh= f u l l ( s p a r s e ( t ( : , 1 ) , 1 , ff , np ,1)+ s p a r s e ( t ( : , 2 ) , 1 , ff , np , 1 ) + . . .
. . . s p a r s e ( t ( : , 3 ) , 1 , ff , np ,1)+ s p a r s e ( t ( : , 4 ) , 1 , ff , np , 1 ) ) ;
A.4 Calcul des gradients de fonction de base
1
3
5
7
9
11
13
15
17
19
21
23
25
27
29
31
33
35
37
39
41
43
45
47
49
51
53
55
57
59
61
f u n c t i o n [ GradPhi1 , GradPhi2 , GradPhi3 , GradPhi4 ]= GradPhi ( p , t )
%GRADPHI C a l c u l d e s g r a d i e n t s d e s f o n c t i o n s de b a s e
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
[ GradPhi1 , GradPhi2 , GradPhi3 , GradPhi4 ]= GradPhi ( p , t )
% Arguments :
%
p
− c o o r d o n né e s d e s sommets , t a b l e a u np ∗3
%
t
− sommets d e s t é t r a è d r e s , t a b l e a u nt ∗4
% Retour :
%
GradPhii
− v a l e u r du g r a d i e n t
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
%1 . c a l c u l du d e t e r m i n a n t
d e t =( p ( t ( : , 2 ) , 1 ) . ∗ p ( t ( : , 3 ) , 2 ) . ∗ p ( t ( : , 4 ) , 3 ) + p ( t ( : , 2 ) , 2 ) . ∗ p ( t ( : , 3 ) , 3 ) . ∗ p ( t ( : , 4 ) , 1 ) . . .
...+ p(t ( : , 2 ) , 3 ) . ∗ p(t ( : , 3 ) , 1 ) . ∗ p(t (: ,4) ,2)) − (p(t ( : , 2 ) , 3 ) . ∗ p(t ( : , 3 ) , 2 ) . ∗ p(t (: ,4) ,1) +...
. . . p(t (: ,2) ,1).∗ p(t (: ,3) ,3).∗ p(t (: ,4) ,2) + p(t (: ,2) ,2).∗ p(t (: ,3) ,1).∗ p(t (: ,4) ,3))...
... −(( p(t (: ,1) ,1).∗ p(t (: ,3) ,2).∗ p(t (: ,4) ,3)+ p(t (: ,1) ,2).∗ p(t (: ,3) ,3).∗ p(t ( : , 4 ) , 1 ) . . .
...+ p(t ( : , 1 ) , 3 ) . ∗ p(t ( : , 3 ) , 1 ) . ∗ p(t (: ,4) ,2)) − (p(t ( : , 1 ) , 3 ) . ∗ p(t ( : , 3 ) , 2 ) . ∗ p(t ( : , 4 ) , 1 ) . . .
...+ p(t (: ,1) ,1).∗ p(t (: ,3) ,3).∗ p(t (: ,4) ,2) + p(t (: ,1) ,2).∗ p(t (: ,3) ,1).∗ p(t (: ,4) ,3)))...
...+(( p(t (: ,1) ,1).∗ p(t (: ,2) ,2).∗ p(t (: ,4) ,3)+ p(t (: ,1) ,2).∗ p(t (: ,2) ,3).∗ p(t ( : , 4 ) , 1 ) . . .
...+ p(t ( : , 1 ) , 3 ) . ∗ p(t ( : , 2 ) , 1 ) . ∗ p(t (: ,4) ,2)) − (p(t ( : , 1 ) , 3 ) . ∗ p(t ( : , 2 ) , 2 ) . ∗ p(t (: ,4) ,1) +...
. . . p(t (: ,1) ,1).∗ p(t (: ,2) ,3).∗ p(t (: ,4) ,2) + p(t (: ,1) ,2).∗ p(t (: ,2) ,1).∗ p(t (: ,4) ,3)))...
... −(( p(t (: ,1) ,1).∗ p(t (: ,2) ,2).∗ p(t (: ,3) ,3)+ p(t (: ,1) ,2).∗ p(t (: ,2) ,3).∗ p(t ( : , 3 ) , 1 ) . . .
...+ p(t ( : , 1 ) , 3 ) . ∗ p(t ( : , 2 ) , 1 ) . ∗ p(t (: ,3) ,2)) − (p(t ( : , 1 ) , 3 ) . ∗ p(t ( : , 2 ) , 2 ) . ∗ p(t (: ,3) ,1) +...
. . . p(t (: ,1) ,1).∗ p(t (: ,2) ,3).∗ p(t (: ,3) ,2) + p(t (: ,1) ,2).∗ p(t (: ,2) ,1).∗ p(t (: ,3) ,3)));
%2 . c a l c u l
B12 = −(
+
+
B13 = +(
+
+
B14 = −(
+
+
B22 = +(
+
+
B23 = −(
+
+
B24 = +(
+
+
B32 = −(
+
+
B33 = +(
+
+
B34 = −(
+
+
B42 = +(
+
+
B43 = −(
+
+
B44 = +(
+
2006/2007
des c o f a c t e u r s
p(t (: ,2) ,2) .∗
p(t (: ,3) ,2) .∗
p(t (: ,4) ,2) .∗
p(t (: ,2) ,1) .∗
p(t (: ,3) ,1) .∗
p(t (: ,4) ,1) .∗
p(t (: ,2) ,1) .∗
p(t (: ,3) ,1) .∗
p(t (: ,4) ,1) .∗
p(t (: ,1) ,2) .∗
p(t (: ,3) ,2) .∗
p(t (: ,4) ,2) .∗
p(t (: ,1) ,1) .∗
p(t (: ,3) ,1) .∗
p(t (: ,4) ,1) .∗
p(t (: ,1) ,1) .∗
p(t (: ,3) ,1) .∗
p(t (: ,4) ,1) .∗
p(t (: ,1) ,2) .∗
p(t (: ,2) ,2) .∗
p(t (: ,4) ,2) .∗
p(t (: ,1) ,1) .∗
p(t (: ,2) ,1) .∗
p(t (: ,4) ,1) .∗
p(t (: ,1) ,1) .∗
p(t (: ,2) ,1) .∗
p(t (: ,4) ,1) .∗
p(t (: ,1) ,2) .∗
p(t (: ,2) ,2) .∗
p(t (: ,3) ,2) .∗
p(t (: ,1) ,1) .∗
p(t (: ,2) ,1) .∗
p(t (: ,3) ,1) .∗
p(t (: ,2) ,1) .∗
p(t (: ,3) ,1) .∗
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
(
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
p(t (:
,3)
,4)
,2)
,3)
,4)
,2)
,3)
,4)
,2)
,3)
,4)
,1)
,3)
,4)
,1)
,3)
,4)
,1)
,2)
,4)
,1)
,2)
,4)
,1)
,2)
,4)
,1)
,2)
,3)
,1)
,2)
,3)
,1)
,3)
,1)
,3)
,3)
,3)
,3)
,3)
,3)
,2)
,2)
,2)
,3)
,3)
,3)
,3)
,3)
,3)
,2)
,2)
,2)
,3)
,3)
,3)
,3)
,3)
,3)
,2)
,2)
,2)
,3)
,3)
,3)
,3)
,3)
,3)
,2)
,2)
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
−
p(t (: ,4) ,3))...
p(t (: ,2) ,3))...
p ( t ( : , 3 ) , 3 ) ) ) . / det ;
p(t (: ,4) ,3))...
p(t (: ,2) ,3))...
p ( t ( : , 3 ) , 3 ) ) ) . / det ;
p(t (: ,4) ,2))...
p(t (: ,2) ,2))...
p ( t ( : , 3 ) , 2 ) ) ) . / det ;
p(t (: ,4) ,3))...
p(t (: ,1) ,3))...
p ( t ( : , 3 ) , 3 ) ) ) . / det ;
p(t (: ,4) ,3))...
p(t (: ,1) ,3))...
p ( t ( : , 3 ) , 3 ) ) ) . / det ;
p(t (: ,4) ,2))...
p(t (: ,1) ,2))...
p ( t ( : , 3 ) , 2 ) ) ) . / det ;
p(t (: ,4) ,3))...
p(t (: ,1) ,3))...
p ( t ( : , 2 ) , 3 ) ) ) . / det ;
p(t (: ,4) ,3))...
p(t (: ,1) ,3))...
p ( t ( : , 2 ) , 3 ) ) ) . / det ;
p(t (: ,4) ,2))...
p(t (: ,1) ,2))...
p ( t ( : , 2 ) , 2 ) ) ) . / det ;
p(t (: ,3) ,3))...
p(t (: ,1) ,3))...
p ( t ( : , 2 ) , 3 ) ) ) . / det ;
p(t (: ,3) ,3))...
p(t (: ,1) ,3))...
p ( t ( : , 2 ) , 3 ) ) ) . / det ;
p(t (: ,1) ,2))...
p(t (: ,2) ,2))...
III
63
65
67
69
+ p ( t ( : , 1 ) , 1 ) . ∗ ( p ( t ( : , 2 ) , 2 ) − p ( t ( : , 3 ) , 2 ) ) ) . / det ;
%3 . c a l c u l d e s g r a d i e n t s de f o n c t i o n s de b a s e
GradPhi1 =[ B12 B13 B14 ] ;
GradPhi2 =[ B22 B23 B24 ] ;
GradPhi3 =[ B32 B33 B34 ] ;
GradPhi4 =[ B42 B43 B44 ] ;
A.5 Lecture du maillage
1
3
5
7
9
11
13
f u n c t i o n [ p , t , np , nt , icl ]= lecture ( maillage )
%LECTURE F o n c t i o n de l e c t u r e du m a i l l a g e
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
[ p , t , np , nt , i c l ]= l e c t u r e ( m a i l l a g e )
% Arguments :
%
m a i l l a g e − f i c h i e r de m a i l l a g e
% Retour :
%
p
− c o o r d o n né e s d e s sommets , t a b l e a u np ∗3
%
t
− sommets d e s t é t r a è d r e s , t a b l e a u nt ∗4
%
np
− nombre de p o i n t s du m a i l l a g e
%
nt
− nombre de t é t r a è d r e s du m a i l l a g e
%
icl
− i n d i c e d e s p o i n t s s i t u é s au bord
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
15
17
19
21
%1 . l e c t u r e du m a i l l a g e e t i n i t i a l i s a t i o n
fid=f o p e n ( maillage , ’ r ’ ) ;
np=f s c a n f ( fid , ’%d ’ , 1 ) ;
nt=f s c a n f ( fid , ’%d\n ’ , 1 ) ;
p=z e r o s ( np , 3 ) ;
t=z e r o s ( nt , 4 ) ;
k =1;
23
25
27
29
31
33
35
37
%2 . l e c t u r e d e s p o i n t s e t c a l c u l d e s p o i n t s du bord
f o r i =1: np
p ( i , : ) = s s c a n f ( f g e t l ( fid ) , ’%f ’ ) ’ ;
i f ( p ( i ,1)==0 | | p ( i ,1)==1 | | p ( i ,2)==0 | | p ( i ,2)==1 | | p ( i ,3)==0 | | p ( i ,3)==1)
icl ( k)=i ;
k=k +1;
end
end
%3 . l e c t u r e d e s t é t r a è d r e s
f o r i =1: nt
t ( i , : ) = s s c a n f ( f g e t l ( fid ) , ’%f ’ ) ’ ;
end
f c l o s e ( fid ) ;
A.6 Calcul des données du problème
2
4
6
8
10
12
14
16
18
20
f u n c t i o n [ f , alpha , nu , usol , ucl ]= secmb ( p , icl )
%SECMB c a l c u l d e s données du problème
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
[ f , alpha , nu , u s o l , u c l ]= secmb ( p , i c l )
% Arguments :
%
p
− c o o r d o n né e s d e s sommets , t a b l e a u np ∗3
%
icl
− i n d i c e d e s p o i n t s s i t u é s au bord
% Retour :
%
f
− v a l e u r de f aux sommets du m a i l l a g e , v e c t e u r np ∗1 ou nt ∗1
%
alpha
− s c a l a i r e ou v e c t e u r c o l o n n e de l o n g u e u r np ou nt
%
nu
− s c a l a i r e ou v e c t e u r c o l o n n e de l o n g u e u r np ou nt
%
usol
− vecteur solution
%
ucl
−v a l e u r d e s c o n d i t i o n s aux l i m i t e s
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
f=−2∗exp ( p ( : , 1 ) + p ( : , 2 ) + p ( : , 3 ) ) ;
usol=exp ( p ( : , 1 ) + p ( : , 2 ) + p ( : , 3 ) ) ;
alpha=ones ( s i z e ( p , 1 ) , 1 ) ;
nu=ones ( s i z e ( p , 1 ) , 1 ) ;
ucl=usol ( icl ) ;
A.7 Résolution
2006/2007
IV
2
4
6
8
10
12
f u n c t i o n [ err ]= resolve ( maillage )
%RESOLVE r é s o l u t i o n du problème
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
% Synopsis :
%
[ e r r ]= r e s o l v e ( m a i l l a g e )
% Arguments :
%
m a i l l a g e − f i c h i e r de m a i l l a g e
% Retour :
%
erreur
− v a l e u r de l ’ e r r e u r en e s p a c e
%−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
%1 . l e c t u r e du m a i l l a g e
t i c , [ p , t , np , nt , icl ]= lecture ( maillage ) ; , t o c
14
16
18
%2 . c a l c u l d e s m a t r i c e s
[ f , alpha , nu , usol , ucl ]= secmb ( p , icl ) ;
M=edp2dmss3D ( p , t , alpha ) ;
R=edp2drgd3D ( p , t , nu ) ;
b=edp2dsmb3D ( p , t , f ) ;
20
22
24
26
28
%3 . r é s o l u t i o n d u problème
A=(M+R ) ;
penalty =10ˆ15;
A ( icl , icl)=A ( icl , icl)+ penalty ∗ s p e y e ( l e n g t h ( icl ) ) ;
b ( icl)= penalty ∗ ucl ;
u=A \ b ;
%3 . c a l c u l de l ’ e r r e u r en e s p a c e
err=s q r t ( sum ( ( usol−u ) . ˆ 2 ) ) ;
B. Générateur de maillage 3D
B.1 Le principe
Afin de vérifier nos calculs, nous avons eu besoin de générer des maillages de l’espace. Pour cela,
nous avons développé une petite application C générant des maillages. Le principe est simple. Partant
d’un cube dans l’espace, nous pouvons diviser celui ci en plusieurs petits cubes. Chacun de ces cubes
est alors divisé en 6 tétraèdres comme cela est représenté sur la figure A.1. Nous obtenons ainsi un
maillage de l’espace.
Fig. A.1 – Les 6 tétraèdres contenus dans un cube
2006/2007
V
B.2 Le code
1
3
5
#include <stdio . h>
#include <stdlib . h>
int num ( int nb , int i , int j , int k )
{
r e t u r n 1+ i + j ∗ nb + k ∗ nb ∗ nb ;
}
7
9
11
13
int main ( int argc , char ∗ argv [ ] )
{
int i , j , k ;
FILE ∗ fid ;
float pas ;
int nb , imax , imin ;
char nomfich [ 1 6 ] ;
15
17
19
21
23
25
27
29
31
33
35
37
i f ( argc <2)
{
printf ( ” Use : mailleur radical imin imax \ n ” ) ;
printf ( ” Default : ∗ imin = 2\ n ” ) ;
printf ( ”
∗ imax = 9\ n ” ) ;
printf ( ” Out \” radicali . msh \” i = imin . . imax ” ) ;
return 0;
}
e l s e i f ( argc <3)
{
imin =2;
imax =9;
}
e l s e i f ( argc <4)
{
s s c a n f ( argv [ 2 ] , ”%d” ,& imin ) ;
imax =9;
}
else
{
s s c a n f ( argv [ 2 ] , ”%d” ,& imin ) ;
s s c a n f ( argv [ 3 ] , ”%d” ,& imax ) ;
}
39
41
43
45
47
49
51
53
55
57
59
61
63
65
67
69
71
f o r ( nb=imin ; nb<imax +1; nb++)
{
s p r i n t f ( nomfich , ”%s%d . msh ” , a r g v [ 1 ] , nb ) ;
printf ( ”%s \n ” , nomfich ) ;
fid=f o p e n ( nomfich , ” w ” ) ;
pas = 1 . 0 / ( ( float ) nb − 1 . ) ;
f p r i n t f ( fid , ”%d %d\n ” , nb∗nb∗nb , 6 ∗ ( nb −1)∗( nb −1)∗( nb − 1 ) ) ;
f o r ( i =0; i<nb ; i++)
{
f o r ( j =0; j<nb ; j++)
{
f o r ( k =0; k<nb ; k++)
{
f p r i n t f ( fid , ”%f %f %f \n ” , k∗ pas , j ∗ pas , i ∗ pas ) ;
}
}
}
f o r ( i =0; i<nb −1; i++)
{
f o r ( j =0; j<nb −1; j++)
{
f o r ( k =0; k<nb −1; k++)
{
f p r i n t f ( fid , ”%d %d %d %d\n ” ,num( nb , i , j , k ) , num( nb , i +1 , j , k ) ,
num ( nb , i +1 , j +1 , k ) , num ( nb , i +1 , j +1 , k + 1 ) ) ;
f p r i n t f ( fid , ”%d %d %d %d\n ” ,num( nb , i , j , k ) , num( nb , i +1 , j +1 ,k ) ,
num ( nb , i , j +1 , k ) , num ( nb , i +1 , j +1 , k + 1 ) ) ;
f p r i n t f ( fid , ”%d %d %d %d\n ” ,num( nb , i , j , k ) , num( nb , i +1 , j +1 ,k ) ,
num ( nb , i +1 , j +1 , k +1) , num ( nb , i +1 ,j , k + 1 ) ) ;
f p r i n t f ( fid , ”%d %d %d %d\n ” ,num( nb , i , j , k ) , num( nb , i , j , k +1) ,
num ( nb , i +1 ,j , k +1) , num ( nb , i +1 , j +1 , k + 1 ) ) ;
f p r i n t f ( fid , ”%d %d %d %d\n ” ,num( nb , i , j , k ) , num( nb , i , j +1 ,k ) ,
2006/2007
VI
num ( nb , i , j +1 , k +1) , num ( nb , i +1 , j +1 , k + 1 ) ) ;
f p r i n t f ( fid , ”%d %d %d %d\n ” ,num( nb , i , j , k ) , num( nb , i , j , k +1) ,
num ( nb , i +1 , j +1 , k +1) , num ( nb , i , j +1 , k + 1 ) ) ;
73
75
}
}
77
}
79
f c l o s e ( fid ) ;
printf ( ” cree \ n ” ) ;
81
}
return 0;
83
}
2006/2007
VII

Documents pareils