Hi everybody,

I'm trying to write a routine that, if a certain condition is met, it transfers a specific string from processor A to processor B. However, during this transfer, I have to access the  processor B within the same function (the function was accessed on A, but I need to go to B to put the transferred string on it's right place). The problem is that I have no idea how to change between processors while using one of them. Here's a sample of the code:

for ( int j = 0; j < atom->nlocal; j++ )
    {
        if ( rank != atom->tag[j] ) //condition for transfer
        {
            dest = atom->tag[j];       //the one who needs to deliver to receive

            atom->tag[j] = rank;

            MPI_Isend( noisez[j], noisesize, MPI_DOUBLE, rank, 0, world, &request);
        }
    }

/*  I know this doesn't work, but it's just to get the idea of what I'm trying to do  */

    if( rank == dest ) //trying to access the destination processor
        {
             for ( int n = 0; n < atom->nlocal; n++ )
            {
              if( n =! atomtag[n] )   
              {

                MPI_Irecv( noisez[n], noisesize, MPI_DOUBLE, flag2, 0, world, &request);
                MPI_Wait(&request,&stat);
                for ( int m = n; m < atom->nlocal; m++ )
                    atomtag[m] = m;
                break;
              }
              else if ( n == atom->nlocal -1)
              {

                MPI_Irecv( noisez[atom->nlocal], noisesize, MPI_DOUBLE, flag2, 0, world, &request);
                MPI_Wait(&request,&stat);
             }
            }
        }

Is there any function to call another processor while using one of them?

Regards,

Alexandre