Advertisement
Guest User

Jacobi

a guest
Jan 22nd, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.14 KB | None | 0 0
  1. /*
  2. * Blocked Jacobi solver: one iteration step
  3. */
  4. double relax_jacobi (double *u, double *utmp, unsigned sizex, unsigned sizey)
  5. {
  6. double sum=0.0;
  7. int nbx, bx, nby, by;
  8.  
  9. nbx = NB;
  10. bx = sizex/nbx;
  11. nby = NB;
  12. by = sizey/nby;
  13. for (int ii=0; ii<nbx; ii++){
  14. double sum2 = 0.0;
  15. #pragma omp parallel for schedule(guided, 2) firstprivate(sum2)
  16. for (int jj=0; jj<nby; jj++){
  17. for (int i=1+ii*bx; i<=min((ii+1)*bx, sizex-2); i++){
  18. for (int j=1+jj*by; j<=min((jj+1)*by, sizey-2); j++) {
  19. double diff=0.0;
  20. utmp[i*sizey+j]= 0.25 * (u[ i*sizey + (j-1) ]+ // left
  21. u[ i*sizey + (j+1) ]+ // right
  22. u[ (i-1)*sizey + j ]+ // top
  23. u[ (i+1)*sizey + j ]); // bottom
  24. diff = utmp[i*sizey+j] - u[i*sizey + j];
  25. sum2 += diff * diff;
  26. }
  27. }
  28. #pragma omp critical
  29. sum+=sum2;
  30. }
  31. }
  32.  
  33. return sum;
  34. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement