Advertisement
Guest User

mwe.f08

a guest
Jul 23rd, 2013
370
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ! gfortran -O3 -fopenmp -o mwe mwe.f08
  2. program mwe
  3.     use, intrinsic :: iso_c_binding
  4.     use omp_lib
  5.     implicit none
  6.    
  7.     integer, parameter :: N = 729, threadNum = 1, iterations = 1000
  8.     integer :: i, j, k
  9.     double precision :: start, finish
  10.     complex(C_DOUBLE_COMPLEX), parameter :: im = (0.d0, 1.d0)
  11.     double precision, parameter :: dx = 1.d0/dble(N), dy = dx, dt = dx
  12.     double precision :: getFreq
  13.    
  14.     complex(C_DOUBLE_COMPLEX), allocatable, dimension(:,:) :: A, T
  15.    
  16.     allocate(A(N,N))
  17.     allocate(T(N,N))
  18.    
  19.     A = 1.d0
  20.    
  21.     call omp_set_num_threads(threadNum)
  22.    
  23.     ! T(x,y) = e^(-i/2 (px^2 + py^2) dt)
  24.     !$OMP PARALLEL DO
  25.     do j = 1, N
  26.         do i = 1, N
  27.             T(i,j) = exp(-im/2.d0 * (getFreq(i, dx)**2.d0 + getFreq(j, dy)**2.d0) * dt)
  28.         end do
  29.     end do
  30.     !$OMP END PARALLEL DO
  31.    
  32.     start = omp_get_wtime()
  33.     do k=1,iterations
  34.         !$OMP PARALLEL DO
  35.         do j = 1, N
  36.             do i = 1, N
  37.                 A(i,j) = T(i,j) * A(i,j)
  38.             end do
  39.         end do
  40.         !$OMP END PARALLEL DO
  41.         !A = T * A
  42.     end do
  43.     finish = omp_get_wtime()
  44.     print '("Time = ",f12.3," seconds.")',finish-start
  45. end program
  46.  
  47. ! returns appropriate frequency for given index:
  48. ! i/N, if i <= N/2
  49. ! (i-N)/N = i/N - 1, if N/2 < i <= N
  50. double precision function getFreq(i, d)
  51.     integer, intent(in) :: i
  52.     double precision, intent(in) :: d
  53.     if (i.le.N/2) then
  54.         getFreq = 2.d0 * pi * dble(i-1)/(d * dble(N))
  55.     else
  56.         getFreq = 2.d0 * pi * dble(i-N-1)/(d * dble(N))
  57.     endif
  58. end function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement