Elément fini $\mathbb P_3$

on construit les matrices élémentaires pour l'élément fini $\mathbb P_3$ Hermite: $$ \left\{ K= [0,1], \Sigma=\{p\to p(0), p\to p(1);~ p\to p'(0), ~p\to p'(1) \}, \mathbb P_3 \right \} $$

Les fonctions de base de l'élément $[0,h]$ sont

$$ \varphi_1(x)=(\frac x h-1)^2(2\frac x h+1). $$$$ \varphi_2(x)=(\frac x h-1)^2(\frac x h). $$$$ \varphi_3(x)=(\frac x h)^2(-2\frac x h+3). $$$$ \varphi_4(x)=(\frac x h)^2(\frac x h-1). $$

Résolution d'un problème elliptique

On veut résoudre $$ \begin{cases} -u''+u=f \text{ sur } ]0,L[ \\ u'(0)=u'(L)=0. \end {cases} $$ La formulation variationnelle s'écrit $$ \left (\mathcal V\right ) \begin {cases} \text{Trouver } u\in H^1(]0,1[)\text{ tel que }\forall v\in H^1(]0,L[)\\ \int_0^L u'(x)v'(x)\,dx+\int_0^L u(x)v(x)\,dx=\int_0^L f(x)v(x)\,dx. \end {cases} $$ Le code basé sur une approximation élément fini $\mathbb P_3$ Hermite est le suivant.

On cherche à résoudre le problème approché en dimension finie, $$ \left (\mathcal V_h\right ) \begin {cases} \text{Trouver } u_h\in V_h\text{ tel que }\forall v\in V_h\\ \int_0^L u_h'(x)v'(x)\,dx+\int_0^L u_h(x)v(x)\,dx=\int_0^L f(x)v(x)\,dx, \end {cases} $$ où $V_h\subset H^1(]0,L[)$ est de dimension finie et $$ V_h=\{ v\in \mathcal C^1(]0,L[)\text{ tel que }v_{|[x_i,x_{i+1}] } \in \mathbb P_3,~\forall 0\le i< N-1\}, $$ avec $x_i=ih$ où $h$ est le pas de la subdivision uniforme de $[0,L]$, soit $h=\frac L {N-1}$. On a vu en cours que $\dim V_h=2N$. Pour assembler le second membre, on va supposer que $f\in V_h$ et ainsi décomposé $f$ sur la base de $V_h$ constituée des fonctions de base élémentaire. Les coordonnées de $f$ dans cette base sont donc l'évaluation des degrés de liberté de $f$. Si $F_{ddl}$ est ce vecteur alors le second membre du système linéaire est alors $$ Id~ F_{ddl}, $$ où $Id$ est la matrice construite, par cet élément fini, sur la forme bilinéaire $(u,v)\to \int_0^L u(x)v(x)\,dx$.

Problème du bilaplacien

On veut résoudre $$ \begin{cases} -u^{(4)}+u=f \text{ sur } ]0,L[ \\ u"(0)=u^{(3)}(0)=u"(L)=u^{(3)}(L)=0. \end {cases} $$ Il s'agit de CL de type Neumann puisque la formulation variationnelle s'écrit $$ \left (\mathcal V\right ) \begin {cases} \text{Trouver } u\in H^2(]0,1[)\text{ tel que }\forall v\in H^2(]0,L[)\\ \int_0^L u"(x)v"(x)\,dx+\int_0^L u(x)v(x)\,dx=\int_0^L f(x)v(x)\,dx. \end {cases} $$

Automatisation de la construction des matrices élémentaires

$\mathbb P_3$ Hermite en dimension 2

On a vu que le calcul symbolique est vite incontournable pour calculer les coefficients des matrices élémentaires sans erreur ou perte de temps. On propose ici un algorithme facilement généralisable pour calculer des matrices élémentaires, de masse, de rigidité ou autre.

L'idée est de construire les fonctions de base classiques des monômes, de les évaluer sur les degré de liberté de l'élément fini choisi. Puis de procéder au changement de base. Sur l'exemple qui suit, la construction est proposée pour l'élément fini $\mathbb P_3$ Hermite: $$ \begin{align*} &\left\{ K, \Sigma_K,~ \mathbb P_3\right \}\\ &K= \widehat{S_0(0,0),S_1(1,0),S_2(0,1)}, \\ &\Sigma_K=\{p\to p(S_i),~ i=0,1,2;~ p\to \partial_x p(S_i),~ i=0,1,2;~ p\to \partial_y p(S_i),~i=0,1,2,p\to p(\frac 1 3(S_0+S_1+S_2)) \}. \end {align*} $$

$\mathbb P_3$ Hermite en dimension 3

$$ \begin{align*} &\left\{ K, \Sigma_K,~ \mathbb P_3\right \}\\ &K= K= \widehat{S_0(0,0,0),S_1(1,0,0),S_2(0,1,0),S_3(0,0,1)}, \\ &\Sigma_K=\{p\to p(S_i),~ i=0\cdots 3;~ p\to \partial_j p(S_i),~ i=0\cdots 3,~j=1\cdots 3,~p\to p(\frac 1 4(S_0+S_1+S_2+S_3)) \}. \end {align*} $$

élément fini $\mathbb P_2$ Lagrange en dimension 2 $$ \left\{ K= \widehat{S_0(0,0),S_1(1,0),S_2(0,1)}, \Sigma=\{p\to p(S_i),~ i=0\cdots 2;~ p\to p(A_i),~ i=0\cdots 2 \}, \mathbb P_2 \right \}, $$ où les $A_i$ sont les milieux des arêtes du triangle $K$.

Construire la matrice élémentaire de masse et de rigidité

Mise en oeuvre sur maillage

On va mettre en oeuvre les éléments finis pour un maillage non structuré en 2D mais néanmoins admissible (mailles pas trop applaties, une arête est arête d'au plus deux éléments). La construction des matrices est la même que celle effectuée sur des maillages simples gérés manuellement. Il convient juste de récupérer les éléments géométriques fondamentaux:

On va ici s'appuyer sur des maillages triangulaires 2D générés par la librairie matplotlib. De façon plus générale, il faudra disposer des informations ennoncées ci-dessus par un export depuis un mailleur ou par une construction manuelle (cf démo maillage de la sphère).

On peut afficher la liste des coordonnées des sommets (abscisses et ordonnées) ainsi que la liste des triangles:

On peut raffiner le maillage avant d'implémenter une méthode élément fini...

Calcul de la matrice

on pourra se référer à cette adresse: https://bthierry.pages.math.cnrs.fr/course-fem/lecture/elements-finis-triangulaires/contributions-elementaires/ pour comprendre le passage de l'élément de référence à un élément quelconque et les transformations induites sur la matrice élémentaire. On se contente ici de procéder à l'approximation $\mathbb P_1$ sommet.

Calcul du second membre

Mise en oeuvre $\mathbb P_2$

Finir le code en s'appuyant sur:

Mise en oeuvre $\mathbb P_3$ Hermite en 2D

A faire pour s'entraîner...