1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| close all % Pour bien commencer...
tic % Si on veut mesurer par la suite le temps d'exécution (avec alors toc)
c=10; % célérité de l'onde
% Domaine et grille de calcul
Lx=100;Ly=100;
T=10;
dx=Lx/200;
dy=Ly/200;
dt=sqrt(dx^2+dy^2)/(2*c);
gax=(c*dt)^2/(dx^2);
gay=(c*dt)^2/(dy^2);
% Grille de calcul et nombre de points
xx=0:dx:Lx ;nx=length(xx);
yy=0:dy:Ly ;ny=length(yy);
tt=0:dt:T ;nt=length(tt);
% F(i,j+1)=-F(i,j-1)+2*F(i,j)+(F(i-1,j)+F(i+1,j)-2*F(i,j))*(2*b+3*d*(F(i+1,j)-F(i-1,j))/deltax)*((F(i+1,j)-F(i-1,j))/deltax-1);
% Fréquence: 2Hz, de la source
nu=2;
% Pour initialiser une matrice en Matlab, on la remplit de zeros
u=zeros(nx,ny,nt);
for i=2:nx-1
for j=2:ny-1
u(i,j,2)=u(i,j,1)+...
gax/2*(u(i-1,j,1)+u(i+1,j,1)-2*u(i,j,1))+...
gay/2*(u(i,j-1,1)+u(i,j+1,1)-2*u(i,j,1));
end
end
for k=3:nt-1
for i=2:nx-1
for j=2:ny-1
u(i,j,k+1)=2*u(i,j,k)-u(i,j,k-1)+...
gax*(u(i-1,j,k)+u(i+1,j,k)-2*u(i,j,k))+...
gay*(u(i,j-1,k)+u(i,j+1,k)-2*u(i,j,k));
end
end
% et on impose la source à chaque instant:
sx=nx/3;
sy=ny;
% de calcul de la source
u(sx,sy,k+1)= u(sx,sy,k)+ sin(2*pi*nu*k*dt);
u(50,160,k)=0;
% % u(100,70,k)=0;
% u(160,60,k)=0;
% et on impose aussi ici les conditions aux limites:
% conditions sur les bords du domaine
% et sur l'éventelle obstacle
% (fente simple ou double dans le TP)
u(1,:,k+1)=u(2,:,k);
u(13,:,k+1)=u(4,:,k);
u(:,1,k+1)=u(:,2,k);
u(:,6,k+1)=u(:,17,k);
end
figure(1);clf;whitebg('w');
for k=1:nt
pcolor(u(:,:,k));
% Les axes n'ont ici aucun sens physique, on les retire
axis on;
% On fixe l'échelle des couleurs
caxis([-0.1 0.8]);
% On lisse la représentation par interpolation des données
shading interp;
% Et on laisse un peu de temps entre chaque affichage
pause(0.1)
end |
Partager