5 C It has been modifiedly slightly to work with the automated MPI
23 parameter (bufsize=100)
24 character buf(bufsize)
26 integer status(MPI_STATUS_SIZE)
35 call mpi_comm_rank(MPI_COMM_WORLD, me, ierr)
36 call mpi_comm_size(MPI_COMM_WORLD, size, ierr )
38 print *, "Must have at least 2 processes"
39 call MPI_Abort( 1, MPI_COMM_WORLD, ierr )
53 call mpi_address(name,disp(1),ierr)
55 type(2)=MPI_DOUBLE_PRECISION
57 call mpi_address(x,disp(2),ierr)
59 call mpi_type_struct(2,length,disp,type,newtype,ierr)
60 call mpi_type_commit(newtype,ierr)
61 call mpi_barrier( MPI_COMM_WORLD, ierr )
62 call mpi_send(MPI_BOTTOM,1,newtype,dest,1,comm,ierr)
63 call mpi_type_free(newtype,ierr)
64 C write(*,*) "Sent ",name(1:5),x
66 C Everyone calls barrier incase size > 2
67 call mpi_barrier( MPI_COMM_WORLD, ierr )
73 call mpi_recv(buf,bufsize,MPI_PACKED, src,
74 . 1, comm, status, ierr)
76 call mpi_unpack(buf,bufsize,position,
77 . name,5,MPI_CHARACTER, comm,ierr)
78 call mpi_unpack(buf,bufsize,position,
79 . x,1,MPI_DOUBLE_PRECISION, comm,ierr)
81 1 format( " Received ", a, f7.4 )
85 call mpi_finalize(ierr)