I have a nested loop and from inside the loop I call the MPI send which I want it to send to the receiver a specific value then at the receiver takes the data and again sends MPI messages to another set of CPUs ... I used something like this but it looks like there is a problem in the receive ... and I cant see where I went wrong ..."the machine goes to infinite loop somewhere ...
I am trying to make it work like this : master CPU >> send to other CPUs >> send to slave CPUs
 . 
 . 
 . 
 int currentCombinationsCount; 
 int mp; 
 if (rank == 0)
 {
     for (int pr = 0; pr < combinationsSegmentSize; pr++)
     {
         int CblockBegin = CombinationsSegementsBegin[pr];
         int CblockEnd   = CombinationsSegementsEnd  [pr];
         currentCombinationsCount = numOfCombinationsEachLoop[pr]; 
         prossessNum = 1; //specify which processor we are sending to 
         // now substitute and send to the main Processors 
         for (mp = CblockBegin; mp <= CblockEnd; mp++)
         {
             MPI_Send(&mp , 1, MPI_INT   , prossessNum, TAG, MPI_COMM_WORLD);
             prossessNum ++; 
         }
     }//this loop goes through all the specified blocks for the combinations  
 } // end of rank 0
 else if (rank > currentCombinationsCount)
 {
       // here I want to put other receives that will take values from the else below 
 }
 else 
 {
     MPI_Recv(&mp , 1, MPI_INT   , 0, TAG, MPI_COMM_WORLD, &stat);
     // the code stuck here in infinite loop 
 }