
#include<stdio.h>

#include<mpi.h>
int main(
int argc,
char *argv[]){
int numTasks, rank, rc0, rc1, rc2, rc3;

MPI_Request request[4];

MPI_Status status[4];
char sendChar;
char receiveChar;

MPI_Init(&argc, &argv);

MPI_Comm_size(MPI_COMM_WORLD, &numTasks);
//get from -np

MPI_Comm_rank(MPI_COMM_WORLD, &rank);
//each process's ID
if(rank == 0){

sendChar = 'A';
int count = 1;
int destRank = 1;
int sourceRank = 1;
//MPI_ANY_SOURCE
int tagSendMSGID = 6;
int tagRecvMSGID = 9;

rc0 = MPI_Isend(&sendChar, count, MPI_CHAR,

destRank, tagSendMSGID, MPI_COMM_WORLD, &request[0]);

rc1 = MPI_Irecv(&receiveChar, count, MPI_CHAR,

sourceRank, tagRecvMSGID, MPI_COMM_WORLD, &request[1]);

}
else
if(rank == 1){

sendChar = 'Z';
int count = 1;
int destRank = 0;
int sourceRank = 0;
int tagRecvMSGID = 6;
int tagSendMSGID = 9;

rc2 = MPI_Isend(&sendChar, count, MPI_CHAR,

destRank, tagSendMSGID, MPI_COMM_WORLD, &request[2]);

rc3 = MPI_Irecv(&receiveChar, count, MPI_CHAR,

sourceRank, tagRecvMSGID, MPI_COMM_WORLD, &request[3]);

}
//MPI_Waitall(4, request, status);

printf(
"Rank = %d, received char = %c, send char = %c\n",

rank, receiveChar, sendChar);

printf(
"rc0 = %d, rc1 = %d, rc2 = %d, rc3 = %d\n", rc0, rc1, rc2, rc3);

MPI_Finalize();
return 0;

}