subroutine slave(my_rank) include "mpif.h" parameter (l=500) integer my_rank,ne,icn(l,3),icn1(l),icn2(l),icn3(l) integer status(MPI_STATUS_SIZE) real*8 x(l),y(l),z(l) real*8 h1(l),g1(l),xn(l,3),ar real*8 xc1,yc1,zc1 integer itag1,itag2,ipos,idest parameter (BUFSIZE=50000) character buf(50000) ik=100 do while(ik.ne.-1) l3=l*3 ipos=0 isrc=0 itag1=10 call MPI_Recv(buf,BUFSIZE,MPI_PACKED,isrc,itag1, 1 MPI_COMM_WORLD,status,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,nproc,1,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,ne,1,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,np,1,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,icn1,ne,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,icn2,ne,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,icn3,ne,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,x,np,MPI_DOUBLE_PRECISION, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,y,np,MPI_DOUBLE_PRECISION, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,z,np,MPI_DOUBLE_PRECISION, 1 MPI_COMM_WORLD,ierr) call MPI_Unpack(buf,BUFSIZE,ipos,n,1,MPI_INTEGER, 1 MPI_COMM_WORLD,ierr) ik=n if(ik.ne.-1) then write(*,*) 'my_rank=',my_rank,' ik=',ik do i=1,ne icn(i,1)=icn1(i) icn(i,2)=icn2(i) icn(i,3)=icn3(i) enddo call potn(ik,ne,icn,x,y,z,xc1,yc1,zc1,xn,h1,g1,l,ar,np) l3=l*3 ipos=0 iflag2=20 idest=0 call MPI_Pack(xc1,1,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(yc1,1,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(zc1,1,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(xn,l3,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(ar,1,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(ne,1,MPI_INTEGER,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(h1,ne,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(g1,ne,MPI_DOUBLE_PRECISION,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(my_rank,1,MPI_INTEGER,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Pack(ik,1,MPI_INTEGER,buf,BUFSIZE,ipos, * MPI_COMM_WORLD,ierr) call MPI_Send(buf,ipos,MPI_PACKED,idest,itag2, * MPI_COMM_WORLD,ierr) endif enddo return end