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; }