Bonjour j'ai un petit projet à faire à l'aide du logiciel FreeFem, et je bloque sur 1 question ...
A partir de ce programme qui calcule la convergence de l'équation de la chaleur :

Code:
macro Grad(u) [dx(u),dy(u)] //
macro uex(t) (sin(pi*x)*sin(pi*y)*exp(sin(t))) //
macro f(t) (sin(pi*x) * sin (pi*y) * exp(sin(t))*(cos(t) + 0.2e1 * mu * pi ^ 2 ) ) //
real t, dt, h, T=.1, mu=1., CFL=1., theta=0. ;
int nref=4;
real[int] L2error(nref); 
real [int] Dx(nref);
real[int] DT(nref);

for (int n=0; n<nref;n++) {
int N=2^(n+4);
t=0;
h=1./N;
Dx[n]=h;
if (theta<.5)
dt=CFL*h^2/4./(1.-2.*theta)/mu;
else if (theta==.5)
dt=h;
else
dt=h^2;
DT[n]=dt;
mesh Th=square(N,N);
fespace Vh(Th,P1);
Vh u,u0,B;
varf a(u,v)=int2d(Th,qft=qf1pTlump)(u*v/dt+ Grad(u)'*Grad(v)*theta*mu) + on(1,2,3,4,u=0);
matrix A = a (Vh,Vh);
varf b(u,v)=int2d (Th,qft=qf1pTlump)(u0*v/dt - Grad(u0)'* Grad(v)*(1.-theta)*mu) + int2d(Th,qft=qf1pTlump)((f(t+
dt)*theta+f(t)*(1.-theta))*v)+ on(1,2,3,4,u=0);
u=uex(t);
for (t=0;t<=T;t+=dt){
u0=u;
B[] = b(0,Vh);
set (A,solver=sparsesolver);
u[] =A^-1*B[];
}
L2error[n]=sqrt(int2d(Th)(abs(u-uex(t))^2));
}
for(int n=0;n<nref;n++)
cout<<"L2error" <<n<<"="<<L2error[n] <<endl;
for(int n=1;n<nref;n++){
cout << "Space convergence rate = " << log(L2error[n-1]/L2error[n])/log(Dx[n-1]/Dx[n]) <<endl;
cout << "Time convergence rate = " << log(L2error[n-1]/L2error[n])/log(DT[n-1]/DT[n]) <<endl;
}
je dois :

Nom : photo eqution de la chaleur.jpg
Affichages : 319
Taille : 59,1 Ko

Si quelqu'un pouvait m'aider s'il vous plait j'ai un peu de mal avec la programmation...