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 :
je dois :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; }
Si quelqu'un pouvait m'aider s'il vous plait j'ai un peu de mal avec la programmation...
-----