Le Laplacien
On s’instéresse dans cette section à l’approximation élément fini conforme du problème suivant:
1. Cadre Mathematique
On suppose que \(f \in L^2(\Omega)\).
La formulation faible du problème Problème: Formulation forte du Laplacien est la suivante:
2. Problème bien posé
Introduisons
-
\(V = H^1_0(\Omega)\) doté de la norme \(\|\cdot\|_{1,\Omega}\) telle que \(\|v\|_{1,\Omega} = (\|v\|^2_{0,\Omega} + \|\nabla v\|^2_{0,\Omega})^{1/2}\)
-
la forme bilinéaire \(a \in \mathcal{L}(V \times V, \RR)\) telle que \(a(u,v) = \int_\Omega \nabla u \cdot \nabla v \)
-
la forme linéaire \(\ell \in \mathcal{L}(V, \RR)\) telle que \(l(v) = \int_\Omega f \nabla v \)
Le problème Formulation faible pour des conditions de Dirichlet homogènes s’écrit sous forme abstraite
L’espace \(V\) est un espace de Hilbert et les formes \(a\) et \(\ell\) sont continues sur \(V\times V\) et \(V\) respectivement.
Il ne reste plus qu’à vérifier si le problème est bien posé (existence d’une solution unique).
Pour cela on utilise démontre la coercivité de la forme bilinéaire \(a\) sur \(V \equiv H^1_0(\Omega)\).
Ceci se fait grâce au lemme suivant:
\(c_\Omega\) est homogène à une longeur et peut être interprétée comme une mesure caractéristique de \(\Omega\). |
Grâce à l’inégalité de Poincaré, on a le résultat suivant
3. Approximation conforme
On utilise une approximation conforme par éléments finis de Lagrange.
On considère \(\Omega\) un polygone ou polyhèdre régulier de \(\RR^2\) ou \(\RR^3\) respectivement et un maillage \(\calTh = \{K_e\}_{e=1...\Ne}\) de \(\Omega\).
On considère un élément fini de référence \((\hat{K},\hat{P},\hat{\Sigma})\) tel que \(\Pk \subset \hat{P}\) et \(k+1 > \frac{d}{2}\), voir le théorème [thr:16].
On note
où \(T_K\) est la tranformation géométrique de \(\hat{K}\) dans \(K\).
-
Si on utilise \(\hat{P}=\Pk{k}\) on a \(L^k_{c,h} = P^k_{c,h}\).
-
Si on utilise \(\hat{P}=\Qk{k}\) on a \(L^k_{c,h} = Q^k_{c,h}\).
Afin de construire un espace d’approximation conforme \(V_h \subset V =H^1_0(\Omega)\) on prend
c’est à dire que les fonctions de \(V_h\) satisfont les conditions aux limites outre le fait d’être dans \(L^k_{c,h}\).
Le problème discret s’écrit alors
qui est bien posé (existence et unicité de \(u_h\)) car \(a\) est coercive sur \(V\) et que \(V_h \subset V\).
On a le résultat suivant:
4. Implémentation avec Feel++
Avec Feel++, on ne construit pas explicitement l’espace \(V_h\) mais \(L^k_{c,h}\).
Le traitement des conditions aux limites de Dirichlet du problème ([eq:64]) peut être effectué de diverses façons, nous en verrons une.
Commencons par le maillage, dans un premier temps nous définissons le type du maillage contenant soit des éléments de type simplexe (segment,triangle, tetrahèdre) ou de type hypercube (segment, quadrangle, hexahèdre).
Le mot clé auto permet de faire de l’inférence de type, pour plus de détails consultez
la page C++11 de Wikipedia.
|
Ensuite nous pouvons définir l’espace \(L^k_{c,h}\),
À présent, nous définissons les formes bilinéaires \(a\) et \(\ell\) qui sont respectivement des formes bilinéaires et linéaires.
1 | \(a \in \mathcal{L}(V_h \times V_h,\ \RR)\) |
2 | \(a = \sum_{e=1...\Ne} \int_{K_e} \nabla \varphi_j \cdot \nabla \varphi_i,\quad i,j=1...,\dim{V_h}\) |
3 | \(\ell \in \mathcal{L}(V_h,\ \RR)\) |
4 | \(\ell = \sum_{e=1...\Ne} \int_{K_e} f \varphi_i,\quad i=1...,\dim{V_h}\) |
Afin de traiter les conditions aux limites de Dirichlet homogènes, on peut utiliser le mot-clé on
qui permet de les imposer de manière forte.
Le mot-clé constant permet de transformer une type numérique ( entier, flottant) en une expression utilisable par le langage de Feel++.
Notez également l’opération += qui permet de rajouter le traitement des conditions de Dirichlet tout en gardant les contributions précédentes.
L’opération = aurait d’abord remis à \(0\) les entrées de la matrice associée à \(a\).
|
Enfin nous pouvons résoudre le problème Problème
a.solve( _rhs=l, _solution=u );
Le listing complet
5. Conditions aux limites
5.1. Conditions aux limites de Dirichlet non homogène
On suppose toujours \(f \in L^2(\Omega)\) et on se donne une fonction \(g \in C^{0,1}(\partial \Omega)\)
[\(g\) est Lipschitzienne sur \(\partial \Omega\)].
On s’intéresse au problème suivant:
L’hypothèse \(g \in C^{0,1}(\partial \Omega)\) permet d’affirmer qu’il existe \(u_g \in H^1(\Omega)\) telle que \(u_{g_{|\partial \Omega}} = g\). |
On se ramène au problème avec conditions de Dirichlet homogène en faisant le change d’inconnue \(u_0=u-u_g\) et on s’intéresse au problème suivant:
Ce problème est bien posé d’après Lax-Milgram, voir section précédente.
Avec Feel++, les conditions Dirichlet non-homogènes sont traitées par exemple avec le mot-clé on
.
1 | définition de la fonction, p.ex \(g=sin(2 \pi x)\) |
2 | définition de \(a\) |
3 | ajout des conditions de Dirichlet non-homogènes |
Il n’y a pas besoin de rajouter le terme \(a(u_g,v)\) au second membre \(\ell(v)\), il est pris en compte automatiquement par on .
|
Voici le listing complet de l’exemple du laplacien avec conditions de Dirichlet non-homogène
5.2. Condition aux limites de Neumann
Étant donnés un réel \(\mu\) strictement positif, \(f \in L^2(\Omega)\) et \(g \in L^2(\partial \Omega)\), on s’intéresse au problème suivant:
où \(\partial_\Next u = \nabla u \cdot \Next = \sum_{i=1}^d n_i \partial_i u\) dénote la dérivée normale de \(u\) avec \(\Next=(n_1,...,n_d) \in \RR^d\) la normale extérieure unitaire en un point du bord de \(\Omega\).
La formulation faible s’écrit
On a
ce qui nous permet d’affirmer que \(a\) est coercive sur \(H^1(\Omega)\) et que le problème [prob:13] est bien posé grâce à Lax-Milgram.
On peut approcher le problème [prob:13] par des éléments finis de Lagrange.
On utilise la formulation développée dans la section Approximation conforme
Par rapport aux conditions de Dirichet, les conditions de Neumann sont directement (naturellement) traitées par la formulation faible. Elles ne sont pas directement imposées dans l’espace et les fonctions tests peuvent prendre des valeurs non-nulles au bord. Ces conditions sont traitées de manière approchée et non pas exacte. |
L’analyse du problème Problème est identique par le théorème Théorème aux mêmes estimations que dans le cas Dirichlet homogène.
5.2.1. Cas \(\mu=0\)
Le cas \(\mu=0\) présente quelques difficultés techniques.
On a
On observe ici qu’une condition nécessaire d’existence de solution est que |
de par le théorème de la divergence.
la deuxième observation est que la solution de Problème est connue à une constante additive près: si \(u\) est solution et \(c\in \RR\) alors \(u+c\) est également solution. |
Il convient alors de chercher la solution dans l’espace fonctionel suivant
La formulation faible du problème Problème s’écrit alors
Le caractère bien posé du problème Problème résulte de la coercivité de \(a\) sur \(H^1_*(\Omega)\) qui elle-même résulte du Lemme suivante
Le problème Problème peut être approché par des éléments finis de Lagrange ce qui conduit au problème discret suivant
L’espace d’approximation \(P^k{c,h}\) n’est pas conforme dans \(H^1_*(\Omega)\) |
le problème Problème est singulier, il a une infinité de solution. L’une d’entre elle peut être approchée par une méthode itérative de type gradient conjugué. Notons \(u^*_h\) cette solution alors la solution à moyenne nulle est
\[u_h=u^*_h-\frac{1}{|\Omega|}\int_\Omega u^*_h\]
Il s’agit donc d’effectuer a posteriori du calcul un post-processing pour se ramener à la solution à moyenne nulle.
Dans Feel++ on utilisera la fonction |
5.3. Conditions aux limites de Robin
Étant donnés un réel \(\mu\) strictement positif, \(f \in L^2(\Omega)\) et \(g \in L^2(\partial \Omega)\), on s’intéresse au problème suivant:
La formulation faible s’écrit
On a
La forme bilinéaire \(a\) est donc coercive et le problème Problème est bien posé grâce à Lax-Milgram.
On considère le problème discret suivant
Le problème est bien posé (\(P^k_{c,h} \subset H^1(\Omega)\)).
Comme pour le problème avec conditions de Neumann, les fonctions tests peuvent prendre des valeurs non nulles au bord. Les conditions de Robin(ou Fourier) ne sont satisfaites que de manière approchée et non pas exacte. |
La convergence de \(u_h\) est donnée par le théorème Théorème.
Considérons \(\Omega=[0,1\)^2] et les données \(\mu=0.01\), \(f=1\) et \(g=0\).
6. Et après ?
Les étapes suivantes sont par exemple:
-
L’étude des expériences numeriques sur le Laplacien
-
L’étude de l’équation d’advection-diffusion
-
L’étude de l’équation d’élasticité linéaire
-
L’étude de méthode de Nitsche pour imposer faiblement les conditions de Dirichlet