Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- program main_mpi
- include 'mpif.h'
- integer rank, tag, cnt, ierr, status(MPI_STATUS_SIZE)
- integer buffsize
- character rcvbuf1(100)
- integer newtype
- integer blocks, position
- integer disp(2), blen(2), type(2)
- integer address(2)
- integer data1, data3
- complex data2, data4
- buffsize = 100
- cnt = 1
- tag = 0
- call MPI_INIT(ierr)
- call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)
- if (rank.eq.0) then
- blen(1) = 1
- blen(2) = 1
- type(1) = MPI_INTEGER
- type(2) = MPI_COMPLEX
- blocks = 2
- call MPI_ADDRESS(data1, address(1), ierr)
- disp(1) = address(1)
- call MPI_ADDRESS(data2, address(2), ierr)
- disp(2) = address(2)
- call MPI_TYPE_STRUCT(blocks, blen, disp, type, newtype, ierr)
- call MPI_TYPE_COMMIT(newtype, ierr)
- data1 = 3
- data2 = (1., 3.)
- call MPI_SEND(MPI_BOTTOM, cnt, newtype, 1, tag, MPI_COMM_WORLD, ierr)
- print *, "process ", rank, " send ", data1, " and ", data2
- call MPI_TYPE_FREE(newtype, ierr)
- else
- position = 0
- call MPI_RECV(rcvbuf1, buffsize, mpi_packed, 0, tag, mpi_comm_world, status, ierr)
- call MPI_UNPACK(rcvbuff1, buffsize, position, data3, 1, mpi_integer, mpi_comm_world, ierr)
- call MPI_UNPACK(rcvbuff1, buffsize, position, data4, 1, mpi_complex, mpi_comm_world, ierr)
- print *, " process ", rank, " received ", data3, " and ", data4
- end if
- call MPI_FINALIZE(ierr)
- stop
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement