// Program:primeiro.c
// Programado: Edson/Siang
// Data: 27/02/2003
// Este programa envia o seu rank para a tarefa p-1-rank e recebe o rank da 
// tarefa p-1-rank.

// Bibliotecas utilizadas
#include <stdio.h>
#include "mpi.h"

// Inicio da funcao principal
main(int argc, char* argv[]) {
// declaracao das variaveis locais
    int         my_rank;       /* rank of process      */
    int         p;             /* number of processes  */
    int         source;        /* rank of sender       */
    int         dest;          /* rank of receiver     */
    int         tag = 0;       /* tag for messages     */
    MPI_Status  status;        /* return status for    */
                               /* receive              */
// Passo 1. Inicializacao
// Passo 1.1. Inicilialize o MPI
    MPI_Init(&argc, &argv);
// Passo 1.2. Determine o numero da tarefa
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
// Passo 1.3. Determine o numero de tarefas
    MPI_Comm_size(MPI_COMM_WORLD, &p);
// Passo 2. Envie/receba o rank
// Passo 2.1.Envia o seu rank para a tarefa p-1-rank
    MPI_Send(&my_rank, 1, MPI_INT, p-1-my_rank, tag, MPI_COMM_WORLD);
// Passo 2.2. Receba o rank da tarefa p-1-rank 
    MPI_Recv(&dest, 1, MPI_INT, p-1-my_rank, tag, MPI_COMM_WORLD, &status);
// Passo 3. Imprima o rank recebido
    printf("Meu rank %d rank recebido %d\n", my_rank, dest);
// Passo 4. Finalize o MPI
    MPI_Finalize();
} /* main */


