Program mpmd_worker implicit none integer n, p, i, j, k, ierr, master real h, a, b, integral, pi integer req(1) include "mpif.h" !! This brings in pre-defined MPI constants, ... integer myid, source, dest, tag, status(MPI_STATUS_SIZE) real my_result, Total_result, result data dest/0/ !! destination of work done by workers c**Starts MPI processes ... call MPI_Init(ierr) !! starts MPI call MPI_Comm_rank(MPI_COMM_WORLD, myid, ierr) !! get current proc id call MPI_Comm_size(MPI_COMM_WORLD, p, ierr) !! get number of procs pi = acos(-1.0) !! = 3.14159... a = 0.0 !! lower limit of integration b = pi/2. !! upper limit of integration n = 500 !! number of increment within each process tag = 123 !! set the tag to identify this particular job h = (b-a)/n/p !! length of increment my_result = integral(a,myid,h,n) write(*,*)'myid=',myid,', my_result=',my_result call MPI_Send(my_result, 1, MPI_REAL, dest, tag, & MPI_COMM_WORLD, ierr) !! send my_result to intended dest. call MPI_Finalize(ierr) !! let MPI finish up ... stop end real function integral(a,i,h,n) implicit none integer n, i, j real h, h2, aij, a real fct, x fct(x) = cos(x) !! kernel of the integral integral = 0.0 !! initialize integral h2 = h/2. do j=0,n-1 !! sum over all "j" integrals aij = a + (i*n +j)*h !! lower limit of "j" integral integral = integral + fct(aij+h2)*h enddo return end