Advertisement
Guest User

Untitled

a guest
Jul 28th, 2015
253
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 1.35 KB | None | 0 0
  1. # Simplified diffusion kernel
  2. function diff(at, a, visc, dxidxi, dyidyi, dzidzi, itot, jtot, ktot)
  3.     ii = 1
  4.     jj = itot
  5.     kk = itot*jtot
  6.    
  7.     # Exclude 1-cell halo
  8.     for k = 2:ktot-1
  9.         for j = 2:jtot-1
  10.             for i = 2:itot-1
  11.                 ijk = i + (j-1)*jj + (k-1)*kk
  12.                 at[ijk] += visc * (
  13.                         + ( (a[ijk+ii] - a[ijk   ])
  14.                           - (a[ijk   ] - a[ijk-ii]) ) * dxidxi
  15.                         + ( (a[ijk+jj] - a[ijk   ])
  16.                           - (a[ijk   ] - a[ijk-jj]) ) * dyidyi
  17.                         + ( (a[ijk+kk] - a[ijk   ])
  18.                           - (a[ijk   ] - a[ijk-kk]) ) * dzidzi
  19.                         )
  20.             end
  21.         end
  22.     end
  23. end
  24.  
  25. # Init fields
  26. function init(a, at, ncells)
  27.     for i = 1:ncells
  28.         a[i] = (i-1)^2 / i^2
  29.         at[i] = 0
  30.     end
  31. end
  32.  
  33. # Start benchmark
  34. nloop  = 100
  35. itot   = 128
  36. jtot   = 128
  37. ktot   = 128
  38. ncells = itot*jtot*ktot
  39.  
  40. a  = zeros(ncells)
  41. at = zeros(ncells)
  42.  
  43. init(a, at, ncells)
  44.  
  45. # Check results
  46. diff(at, a, 0.1, 0.1, 0.1, 0.1, itot, jtot, ktot)
  47. println("at=",at[itot*jtot+itot+itot/2+1]);
  48.  
  49. # Time performance
  50. tic()
  51.  
  52. for i = 1:nloop
  53.     diff(at, a, 0.1, 0.1, 0.1, 0.1, itot, jtot, ktot)
  54. end
  55.  
  56. elapsed = toq()
  57.  
  58. println("time/iter=", elapsed/nloop, " s (", nloop, " iters)")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement