program ch2805 use mpi implicit none integer :: error_number integer :: this_process_number integer :: number_of_processes integer, dimension (mpi_status_size) :: status integer, allocatable, dimension (:) :: x integer :: n integer, parameter :: factor = 5 integer :: i, j, k integer :: start integer :: end integer :: recv_start call mpi_init(error_number) call mpi_comm_size(mpi_comm_world,number_of_processes,error_number) call mpi_comm_rank(mpi_comm_world,this_process_number,error_number) n = number_of_processes*factor allocate (x(1:n)) x = 0 start = (factor*this_process_number) + 1 end = factor*(this_process_number+1) print 10, this_process_number, start, end 10 format (' Process number = ',i3,' start ',i3,' end ',i3) do i = start, end x(i) = i*factor end do do i = 1, n print 20, this_process_number, i, x(i) 20 format (1x,i4,' I ',i4,' x(I) ',i4) end do if (this_process_number==0) then do i = 1, number_of_processes - 1 recv_start = (factor*i) + 1 call mpi_recv(x(recv_start),factor,mpi_integer,i,1,mpi_comm_world,status & ,error_number) end do else call mpi_send(x(start),factor,mpi_integer,0,1,mpi_comm_world,error_number) end if if (this_process_number==0) then do i = 1, n print 30, i, factor, x(i) 30 format (1x,i4,' * ',i2,' = ',i5) end do end if call mpi_finalize(error_number) end program ch2805