Advertisement
Guest User

Untitled

a guest
Apr 29th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program main_mpi
  2.   include 'mpif.h'
  3.   integer rank, tag, cnt, ierr, status(MPI_STATUS_SIZE)
  4.  
  5.   integer buffsize
  6.   character rcvbuf1(100)
  7.  
  8.   integer newtype
  9.   integer blocks, position
  10.   integer disp(2), blen(2), type(2)
  11.   integer address(2)
  12.   integer data1, data3
  13.   complex data2, data4
  14.  
  15.   buffsize = 100
  16.  
  17.   cnt = 1
  18.   tag = 0
  19.  
  20.   call MPI_INIT(ierr)
  21.   call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
  22.  
  23.   if (rank.eq.0) then
  24.     blen(1) = 1
  25.     blen(2) = 1
  26.     type(1) = MPI_INTEGER
  27.     type(2) = MPI_COMPLEX
  28.     blocks = 2
  29.  
  30.     call MPI_ADDRESS(data1, address(1), ierr)
  31.     disp(1) = address(1)
  32.     call MPI_ADDRESS(data2, address(2), ierr)
  33.     disp(2) = address(2)
  34.  
  35.     call MPI_TYPE_STRUCT(blocks, blen, disp, type, newtype, ierr)
  36.     call MPI_TYPE_COMMIT(newtype, ierr)
  37.  
  38.     data1 = 3
  39.     data2 = (1., 3.)
  40.  
  41.     call MPI_SEND(MPI_BOTTOM, cnt, newtype, 1, tag, MPI_COMM_WORLD, ierr)
  42.     print *, "process ", rank,  " send ", data1, " and ", data2
  43.     call MPI_TYPE_FREE(newtype, ierr)
  44.   else
  45.     position = 0
  46.     call MPI_RECV(rcvbuf1, buffsize, mpi_packed, 0, tag, mpi_comm_world, status, ierr)
  47.     call MPI_UNPACK(rcvbuff1, buffsize, position, data3, 1, mpi_integer, mpi_comm_world, ierr)
  48.     call MPI_UNPACK(rcvbuff1, buffsize, position, data4, 1, mpi_complex, mpi_comm_world, ierr)
  49.  
  50.     print *, " process ", rank, " received ", data3, " and ", data4
  51.   end if
  52.   call MPI_FINALIZE(ierr)
  53.   stop
  54. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement