Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
1
Partie 1
Soit Ω = (0, 1) nous considérons le problème de diusion non-stationnaire
suivant :
2 u(x, t) = 0,
∂t u(x, t) − µ∂xx (x, t) ∈ Ω × (0, 1),
u(0, t) = 0, u(1, t) = 1, t ∈ (0, 1), (1)
u(x, 0) = u0 (x) x ∈ Ω,
1 Formulation faible
Dans le problème (1) les conditions au bord ne sont pas homogènes, pour se
ramener au cas des conditions au bord homogènes, on dénit une fonction
aussi simple que possible R ∈ L(Ω × R∗ ), R(x, t) = x, dite relèvement, qui
satisfait les conditions au bord données. Avec ceci on récrit u = u
e + R où u
e
appartient à V , et V = {v ∈ H 1 (Ω)|v = 0 si x = 1}.
Ensuite nous multiplions l'équation par une fonction test v ∈ V et nous
calculons l'intégral sur le domaine (0, 1).
Z 1
2
(∂t u(x, t) − µ∂xx u(x, t))vdx = 0
0
Z 1
2
u(x, t) + R(x, t)) − µ∂xx
(∂t (e (e
u(x, t) + R(x, t)))vdx = 0
0
Z 1
2
u(x, t) + x) − µ∂xx
(∂t (e (e
u(x, t) + x))vdx = 0
0
Z 1
2
u(x, t)v − µ∂xx
(∂t (e (eu(x, t))vdx = 0
0
Z 1 Z 1
e(x, t)vdx − [µv∂x u
∂t u e(x, t)]10 + µ ∂x u
e(x, t)∂x vdx = 0
0 0
Z 1 Z 1
e(x, t)vdx + µ
∂t u ∂x u
e(x, t)∂x vdx 0 . (2)
= |{z}
|0 {z } | 0 {z } F (v)
(∂t u
e(x,t),v) a(e
u(x,t),v)
2
Donc la forme faible du problème s'écrit :
Dans la série 6 exercice 2 nous avons déjà calculé les coecients aij , mij ,
nous avons trouvé :
Z 1
aij = a(ϕj , ϕi ) = µϕ0j (x)ϕ0i (x)dx
0
µ
− si i=j−1
2µh
si i = j
= h
µ
− si i = j + 1
h
0 sinon,
3
et donc la matrice A s'écrit :
2µ −µ
h h
−µ 2µ −µ
h h h
−µ 2µ −µ
h h h
A= .. .. .. .
. . .
−µ −µ
2µ
h h h
−µ 2µ
h h
Avec ceci le problème (4) peut s'écrire de façon équivalente comme un sys-
tème d'équations diérentielles :
3 La θ-méthode
Puisque la matrice M est inversible, nous pouvons récrire le système d'équa-
tions diérentielles ordinaires (5) sous la forme normale
u̇(t) = −M −1 Au(t).
4
Pour résoudre ce système nous pouvons utiliser la θ-méthode, qui introduit
une discrétisation de la dérivée temporelle par un rapport incrémental et
remplace les autres termes par une combinaison linéaire, dépendante du pa-
ramètre réel θ (0 ≤ θ ≤ 1) et des valeurs au temps tk , tk+1 :
uk+1 − uk h i
M + A θuk+1 + (1 − θ)uk = 0. (6)
∆t
uk+1 − uk
M + Auk = 0 ⇔ uk+1 = (I − ∆tM −1 A)uk . (7)
∆t
uk+1 − uk
k+1
+ uk
u
M +A = 0
∆t 2
m
∆t −1 ∆t −1
(I + M A)uk+1 = (I − M A)uk . (8)
2 2
uk+1 − uk
M + Auk+1 = 0 ⇔ (I + ∆tM −1 A)uk+1 = uk (9)
∆t
5
Analyse de stabilité de la θ-méthode
Dans ce paragraphe nous allons rappeler des résultat de convergence qui ont
été démontrés au cours et qui sont expliqués en détail dans le polycopié au
chapitre (6.7).
Résultat 1 En appliquant la θ -méthode au problème de Galerkin dans le
cas f = 0 et θ = 1, nous avons montré que
% Mu' + Au = f =0 : calcul de M et A
m=n-1;
6
% Calcul de la matrice A
10 A=diag(ones(m,1),0)*(2*mu/h)+diag(ones(m-1,1),1)*(-mu/h)
+diag(ones(m-1,1),-1)*(-mu/h);
% Calcul de la matrice M
M=diag(ones(m,1),0)*(2*h/3)+diag(ones(m-1,1),1)*(h/6)
+diag(ones(m-1,1),-1)*(h/6);
u_ini=zeros(1,nt+1);
u_fin=ones(1,nt+1);
v=vertcat(u_ini,u,u_fin);
x=linspace(0,1,n+1);
return
7
de diusion non-stationnaire en prenant comme condition initiale et para-
mètres : µ = 61 , u0 (x) = 1 − cos(3π x2 ). Nous allons également faire varier le
paramètre θ en lui attribuant les valeurs 0, 12 et 1, ainsi que la longueur de la
subdivision temporelle. Par souci de commodité, nous allons représenter les
solutions en fonction de la méthode, c'est à dire pour les diérentes valeurs de
θ, nous avons respectivement la méthode d'Euler progressive, Crank-Nicolson
et Euler rétrograde. On donne le code pour une exécution du programme :
1 mu=1/6; u0=inline('1-cos(3*pi*x/2)'); h=1/10
theta=1; dt=h;
[u] = EDOsys(mu,theta,h,dt,u0)
x=linspace(0,1,n+1);
y=0.5/dt+1;
plot(x,u(:,y),'b');hold on;
8
Pour ∆t = h, la solution présente de très fortes oscillations, tandis que pour
∆t = h2 , elle est régulière et stable. Rappelons que la méthode d'Euler
progressive est conditionnellement stable, et la condition est : ∆t ≤ λmax2
. Il
semble qu'ici dans un cas elle est dans le domaine de stabilité, et dans l'autre
en dehors. Pour ce faire, il faudrait calculer λmax
2
.
On constate qu'en faisant varier ∆t, on ne change pas la stabilité des solu-
tions, ceci est du au fait que la méthode d'Euler rétrograde est incondition-
nellement stable, donc stable pour tout ∆t.
9
5.0.3 Crank-Nicolson
si x < 0.2
0
u0 (x) = 2 si x ≥ 0.2 si x ≤ 0.6
1 si x > 0.6
10
Le code de la fonction sur MATLAB donne :
1 function f = u1(x)
if(x<0.2)
f=0;
end
if( (x>=0.2) & (x<=0.6) )
f=2;
end
if( x > 0.6)
f=1;
10 end
return
11
Fig. 18 Solution avec ∆t = h Fig. 19 Solution avec ∆t = h2
Fig. 20 Représentation graphique de uh (x, 21 ) et uh (x, 1) en variant ∆t
12
Fig. 23 Solution avec ∆t = h Fig. 24 Solution avec ∆t = h2
Fig. 25 Représentation graphique de uh (x, 12 ) et uh (x, 1) en variant ∆t
6.0.6 Crank-Nicolson
13
Fig. 28 Solution avec ∆t = h Fig. 29 Solution avec ∆t = h2
Fig. 30 Représentation graphique de uh (x, 21 ) et uh (x, 1) en variant ∆t
[v] = EDOsys(mu,theta,h,dt,u0)
for i=1:N+1
plot(i-1,sqrt((1/6*(v(N+1,i)^2+4*v(N/2+1,i)^2+v(1,i)^2))),'-');
hold on;
end
10
theta=0;
[w] = EDOsys(mu,theta,h,dt,u0)
for i=1:N+1
plot(i-1,sqrt((1/6*(w(N+1,i)^2+4*w(N/2+1,i)^2+w(1,i)^2))),'b*');
hold on;
end
14
Fig. 31 Norme L2 pour Euler rétrograde et progressive
Partie 2
Soit Ω = (0, 1) nous considérons le problème de diusion-advection non-
stationnaire suivant :
2 u(x, t) + b∂ u(x, t) = 0, (x, t) ∈ Ω × (0, 1)
∂t u(x, t) − µ∂xx x
u(0, t) = u(1, t) = 0 t ∈ (0, 1) (bc1)
(10)
u(0, t) = ∂x u(1, t) = 0 t ∈ (0, 1) (bc2)
u(x, 0) = u0 (x) x∈Ω
8 Formulation faible
Nous multiplions l'équation (10) par une fonction test v ∈ V et nous cal-
culons l'intégrale sur le domaine (0, 1). Nous dénissons deux espaces V
15
diérentes pour le deux conditions au bord :
V = H01 pour (bc1) et V = {v ∈ L2 (0, 1)|v(0) = 0} pour (bc2).
Z 1
2
(∂t u(x, t) − µ∂xx u(x, t) + b∂x u(x, t)vdx = 0
0
Il faut remarquer qu'on obtient le même résultat pour le deux type des
conditions au bord. Finalement nous obtenons :
Z 1 Z 1 Z 1
∂t u(x, t)vdx + µ ∂x u(x, t)∂x vdx + b ∂x u(x, t)vdx = |{z}
0
0 0 0
| {z } | {z } F (v)
(∂t u(x,t),v) a(u(t),v)
16
coecients {uj (t)} sont les inconnues du problème (12).
En remplaçant uh (x, t) ainsi déni et en prenant vh = ϕj (t) dans (12) nous
obtenons pour i = 1, · · · , N :
XN Z 1 N
X Z 1
u̇j (t) ϕj (x)ϕi (x)dx + uj (t) [µϕ0j (x)ϕ0i (x) + bϕ0j (x)ϕi (x)]dx = 0
j=1 |0 {z } j=1 |0 {z }
mij aij
Nous voyons tout suite que la matrice M ne change pas par rapport à la
matrice M du problème (1), nous allons donc calculer la matrice de raideur
A qui est la seul chose qui change par rapport au première problème.
Z 1
aij = a(ϕj , ϕi ) = [µϕ0j (x)ϕ0i (x) + bϕ0j (x)ϕi (x)]dx
0
µ b
−
2µh 2
+ si i = j − 1
si i = j
= h
µ
− − b
si i=j+1
h 2
0 sinon,
et donc la matrice A s'écrit :
2µ −µ b
h h + 2
−µ − b 2µ −µ b
h + 2
h 2
−µ
h
2µ −µ
b b
h − 2 +
h h 2
A= .. .. .. .
. . .
−µ −µ
2µ
b b
h − h + 2
2 h
−µ b 2µ
h − 2 h
Enn avec ceci le problème (12) peut s'écrire de façon équivalente comme
un système d'équations diérentielles :
Chercher u(t) ∈ RN tel que :
17
en posant C = I + ∆t
2 M
−1 A et D = I − ∆t M −1 A, la méthode s'écrit alors :
2
uk+1 = C −1 Duk .
10 % Calcul de la matrice A
A=diag(ones(m,1),0)*(2*mu/h)+diag(ones(m-1,1),1)
*(-mu/h+b/2)+diag(ones(m-1,1),-1)*(-mu/h-b/2);
% Calcul de la matrice M
M=diag(ones(m,1),0)*(2*h/3)+diag(ones(m-1,1),1)
*(h/6)+diag(ones(m-1,1),-1)*(h/6);
18
% Solution avec les conditions initiales en espace
v=vertcat(u_ini,u,u_fin);
40 else
% si l'utilisateur choisi d'utiliser bc2 le programme faira:
% Mu' + Au = f =0 : calcul de M et A
m=n;
% Calcul de la matrice A
A=diag(ones(m,1),0)*(2*mu/h)+diag(ones(m-1,1),1)
*(-mu/h+b/2)+diag(ones(m-1,1),-1)*(-mu/h-b/2);
% Calcul de la matrice M
50 M=diag(ones(m,1),0)*(2*h/3)+diag(ones(m-1,1),1)
*(h/6)+diag(ones(m-1,1),-1)*(h/6);
19
12 Application de la fonction précédent
Nous allons enn résoudre avec le programme de la section précédent un der-
nier système d'EDO's avec b = 0.5, u0 (x) = 1 − cos(2πx), h = 1/n = 1/100
et ∆t = h. Ensuite nous allons faire varier µ = 1/60, 1/600 et les conditions
au bord. Pour chaque cas possible nous allons représenter graphiquement les
diérentes solutions pour uh (x, 0.5) et uh (x, 1).
[u] = EDO_CrankNicol(mu,b,h,dt,u0,0)
x=linspace(0,1,n+1);
y=0.5/dt+1;
plot(x,u(:,y),'b');hold on;
Résultat pour µ = 1
60
Les deux graphes, représentant la solution uh pour les deux types de condi-
tions aux bords, sont stables et ont la même allure (ils se chevauchent même
jusqu'à x = 0.9). Calculons le nombre de Péclet pour justier sa stabilité :
1 1
bh
Pe = = 2 100
1 = 0.3,
2µ 2 60
20
Résultat pour µ = 1
600
Références
Cours élément ni hiver 2007, donné par Alo Quarteroni.
adresse web : http ://iacs.ep.ch/cmcs/Teaching/FEM.php3
21