<div>Dear Prof. Thakur</div>
<div> </div>
<div>Hi</div>
<div> I have a simple program using IRECV and ISEND.</div>
<div>It is running ok, but there is no send and receive between threads!</div>
<div> </div>
<div>I`ve attached the program for your information.</div>
<div>also here:</div>
<div> </div>
<div><font face="courier new,monospace"> program ringtopo<br>    include &#39;mpif.h&#39;</font></div>
<div><font face="courier new,monospace">    integer numtasks, rank, next, prev, buf(2), tag1, tag2, ierr<br>    integer stats(MPI_STATUS_SIZE,2), reqs(4)<br> integer,parameter::buf_size=130<br> real CRXi(10000),CP_Sx(buf_size)<br>
 real CP_S6(6,buf_size),CP_r6(6,buf_size),xi(100000)<br> integer CP_send,CP_recv,ionsR,Max_p,n_p,LABEL_p,ions<br> <br>    tag1 = 1<br>    tag2 = 2</font></div>
<div><font face="courier new,monospace"> ions=5000<br> do i=1,10000<br>   CRxi(i)=i*1.0<br> end do<br>    call MPI_INIT(ierr)<br>    call MPI_COMM_RANK(MPI_COMM_WORLD, rank, ierr)<br>    call MPI_COMM_SIZE(MPI_COMM_WORLD, numtasks, ierr)</font></div>

<div><font face="courier new,monospace">    prev = rank - 1<br>    next = rank + 1<br>    if (rank .eq. 0) then<br>       prev = numtasks - 1<br>    endif<br>    if (rank .eq. numtasks - 1) then<br>       next = 0<br>    endif</font></div>

<div><font face="courier new,monospace"> ionsR=1120</font></div>
<div><font face="courier new,monospace">C        do some work<br> Max_p=ionsR/buf_size+1 <br>C Max_p=MAXVAL(ionsR)/buf_size+1  !change<br> LABEL_p=0<br> cp_recv=20<br> print*,cp_recv,Max_p,35335<br>C do 200 n_p=1,Max_p<br>
 CP_send=0<br> do i=1,buf_size<br> n=LABEL_p+i<br> CP_Sx(i)=CRXi(n)<br>C CP_Sy(i)=CRyi(n)<br>C CP_Sz(i)=CRzi(n)</font></div>
<div><font face="courier new,monospace">C CP_Su(i)=CRui(n)<br>C CP_Sv(i)=CRvi(n)<br>C CP_Sw(i)=CRwi(n)<br> end do<br> CP_send=buf_size<br> if(n.gt.ionsR)then<br> CP_send=ionsR - LABEL_p<br> if (CP_send.lt.0) CP_send=-CP_send<br>
 end if<br> LABEL_p=n</font></div>
<div><font face="courier new,monospace"> do i=1,buf_size<br> CP_S6(1,i)=CP_Sx(i)<br>C CP_S6(2,i)=CP_Sy(i)<br>C CP_S6(3,i)=CP_Sz(i)</font></div>
<div><font face="courier new,monospace">C CP_S6(4,i)=CP_Su(i)<br>C CP_S6(5,i)=CP_Sv(i)<br>C CP_S6(6,i)=CP_Sw(i)<br> end do</font></div>
<div><font face="courier new,monospace"></font> </div>
<div><font face="courier new,monospace"></font> </div>
<div><br><font face="courier new,monospace">C print*,mreal,mint,lgrp,CP_send,reqs,1111114<br> print*,rank,prev,next,CP_recv,CP_send,11111113</font></div>
<div><font face="courier new,monospace">    call MPI_IRECV(CP_recv, 1, MPI_INTEGER, prev, tag1, <br>     &amp;      MPI_COMM_WORLD, reqs(1), ierr)<br>    call MPI_IRECV(CP_R6, CP_recv, MPI_REAL, prev, tag2, <br>     &amp;      MPI_COMM_WORLD, reqs(2), ierr)</font></div>

<div><font face="courier new,monospace">    call MPI_ISEND(CP_S6, CP_send, MPI_REAL, next, tag2,<br>     &amp;     MPI_COMM_WORLD, reqs(3), ierr)<br>    call MPI_ISEND(CP_send, 1, MPI_INTEGER, next, tag1,<br>     &amp;     MPI_COMM_WORLD, reqs(4), ierr)</font></div>

<div><font face="courier new,monospace">C   call MPI_WAITALL(4, reqs, istatsus, ierr);</font></div>
<div><font face="courier new,monospace"> print*,rank,prev,next,CP_recv,CP_send,11111114</font></div>
<div><font face="courier new,monospace"> if (CP_recv.gt.0) then<br> do n=1,CP_recv<br> ions=ions+1<br> xi(ions)=CP_R6(1,n)<br>C yi(ions)=CP_R6(2,n)<br>C zi(ions)=CP_R6(3,n)</font></div>
<div><font face="courier new,monospace">C ui(ions)=CP_R6(4,n)<br>C vi(ions)=CP_R6(5,n)<br>C wi(ions)=CP_R6(6,n) <br> end do<br> else<br> print*,777777771,888888881<br> End if<br>C110  continue<br>C.......................</font></div>

<div><font face="courier new,monospace">C200 continue</font></div>
<div><br><font face="courier new,monospace">C   call MPI_WAITALL(4, reqs, stats, ierr);   <br>  call MPI_FINALIZE(ierr)</font></div>
<div><font face="courier new,monospace">    end</font></div>
<div> </div>
<div> </div>
<div><br> </div>
<div> </div>
<div>Kind Regards</div>
<div>Sincerely</div>
<div>Amin</div>