488
12 Probl` emes transitoires paraboliques et hyperboliques
Programme 89 - ipeidg0 : Euler implicite dG(0)
function [u,x]=ipeidg0(I,n,a,u0,bc)
%IPEIDG0 Euler implicite dG(0) pour l’´ equation de transport scalaire.
% [U,X]=IPEIDG0(I,N,A,U0,BC) r´ esout l’´ equation
%
DU/DT+A+DU/DX=0 X dans (I(1),I(2)), T dans (I(3),I(4))
% avec des ´ el´ ements finis en espace-temps.
nx=n(1); h=(I(2)-I(1))/nx; x=[I(1)+h/2:h:I(2)];
t=I(3); u=(eval(u0))’;
nt=n(2); k=(I(4)-I(3))/nt;
lambda=k/h;
e=ones(nx,1);
A=spdiags([-a*lambda*e, (1+a*lambda)*e],-1:0,nx,nx);
[L,U]=lu(A);
for t = I(3)+k:k:I(4)
f = u;
if a > 0
f(1) = a*bc(1)+f(1);
elseif a <= 0
f(nx) = a*bc(2)+f(nx);
end
y = L \ f; u = U \ y;
end
return
Programme 90 - ipeidg1 : Euler implicite dG(1)
function [u,x]=ipeidg1(I,n,a,u0,bc)
%IPEIDG1 Euler implicite dG(1) pour l’´ equation de transport scalaire.
% [U,X]=IPEIDG1(I,N,A,U0,BC) r´ esout l’´ equation
%
DU/DT+A+DU/DX=0 X dans (I(1),I(2)), T dans (I(3),I(4))
% avec des ´ el´ ements finis en espace-temps.
nx=n(1); h=(I(2)-I(1))/nx; x=[I(1):h:I(2)];
t=I(3); um=(eval(u0))’;
u=[]; xx=[];
for i=1:nx+1
u=[u, um(i), um(i)]; xx=[xx, x(i), x(i)];
end
u=u’; nt=n(2); k=(I(4)-I(3))/nt;
lambda=k/h;
e=ones(2*nx+2,1);
B=spdiags([1/6*e,1/3*e,1/6*e],-1:1,2*nx+2,2*nx+2);
dd=1/3+0.5*a*lambda;
du=1/6+0.5*a*lambda;
dl=1/6-0.5*a*lambda;
A=sparse([]);
A(1,1)=dd; A(1,2)=du; A(2,1)=dl; A(2,2)=dd;
Précédent

- 492/540

Suivant