Advertisement
Guest User

transfer.f90

a guest
Nov 26th, 2019
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program transfer_ex
  2.  
  3.   implicit none
  4.  
  5.   REAL, SAVE ::     &  ! timer indices
  6.   itim_start_tot, itim_end_tot, &
  7.   itim_start, itim_end
  8.  
  9.   INTEGER(kind=1), allocatable, target :: idata(:)
  10.  
  11.   character(len=1) :: ydata(1000000000)
  12.   integer :: length
  13.  
  14.   CALL CPU_TIME(itim_start_tot)
  15.  
  16.   ! set ydata to constant value 'a'
  17.   CALL CPU_TIME(itim_start)
  18.   ydata = 'a'
  19.   CALL CPU_TIME(itim_end)
  20.   PRINT *, "T set ydata  :", itim_end - itim_start
  21.  
  22.   ! get size of idata
  23.   CALL CPU_TIME(itim_start)
  24.   length = size(transfer(ydata, idata))
  25.   CALL CPU_TIME(itim_end)
  26.   PRINT *, "T transfer 1 :", itim_end - itim_start
  27.  
  28.   ! allocate idata
  29.   CALL CPU_TIME(itim_start)
  30.   allocate(idata(length))
  31.   CALL CPU_TIME(itim_end)
  32.   PRINT *, "T alloc      :", itim_end - itim_start
  33.  
  34.   ! transfer ydata to idata
  35.   CALL CPU_TIME(itim_start)
  36.   idata = transfer(ydata, idata)
  37.   CALL CPU_TIME(itim_end)
  38.   PRINT *, "T transfer 2 :", itim_end - itim_start
  39.  
  40.   CALL CPU_TIME(itim_end_tot)
  41.   PRINT *, "T total      :", itim_end_tot - itim_start_tot
  42.  
  43.   print *, ''
  44.   print *, 'ydata        :', ydata(1:5)
  45.   print *, 'idata        :', idata(1:5)
  46.   print *, 'loc          :', loc( ydata ), loc( idata )
  47.  
  48.   ! clean up
  49.   deallocate(idata)
  50.  
  51. end program transfer_ex
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement