next up previous contents
Next: Les Exercises de la Up: Structures de données Previous: La classe Problem

Remarque sur l'assemblage

Toutes les integrales sont calculées par la technique de l'assemblage. Par exemple soit a calculer int(f wk). On fera une boucle sur k puis une boucle sur l de 0 a nt-1:

for(int k=0; k<nv; k++) I[k] = 0;
for(int k=0; k<nv; k++)
  for(l=0; l<nt; l++)
   I[k] += Ikl;
ou Ikl est l'integrale sur Tl de fwk.

C'est interdit car cela fait O(N*N) opérations (N=nt ou nv). En revanche si on change l'ordre des boucles:

for(int k=0; k<nv; k++) I[k] = 0;
for(l=0; l<nt; l++)
 for(int k=0; k<nv; k++)
    I[k] += Ikl;

alors on remarque que Ikl est nul si k n'est pas un numero de sommet de Tl et donc la 3eme boucle peut se limiter a k=no(t[l].v[kloc]) avec kloc=0,1,2, ce qui donne

for(int k=0; k<nv; k++) I[k] = 0;
for(l=0; l<nt; l++)
 for(int kloc=0; kloc<3; kloc++)
 {
	  int k=no(t[l].v[kloc]);
   I[k] += Ikl;
  }



Olivier Pironneau
Mon May 17 17:14:42 METDST 1999