/*
*/
#include <stdio.h>
#include <mpi.h>

extern int gsum(int summand, int root, MPI_Comm comm);


int
main(int argc, char *argv[])
{

int my_rank, nproc;
int sum;
int i, my_sum;


    MPI_Init(&argc, &argv);
    MPI_Comm_size(MPI_COMM_WORLD, &nproc);
    MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

    my_sum= 0;
    for (i= 0; i < nproc; i++)   {
	my_sum= my_sum + i;
    }

    sum= gsum(my_rank, 0, MPI_COMM_WORLD);

    if (my_rank == 0)   {
	printf("Rank %3d: Test sum is     %d\n", my_rank, my_sum);
	printf("Rank %3d: Student reports %d\n", my_rank, sum);
    }

   MPI_Barrier(MPI_COMM_WORLD);

    sum= gsum(my_rank, nproc - 1, MPI_COMM_WORLD);
    if (my_rank == nproc - 1)   {
	printf("Rank %3d: Test sum is     %d\n", my_rank, my_sum);
	printf("Rank %3d: Student reports %d\n", my_rank, sum);
    }

   MPI_Barrier(MPI_COMM_WORLD);

    sum= gsum(10, 0, MPI_COMM_WORLD);
    if (my_rank == 0)   {
	printf("Rank %3d: Test sum is     %d\n", my_rank, nproc * 10);
	printf("Rank %3d: Student reports %d\n", my_rank, sum);
    }


    MPI_Finalize();
    return 0;

}  /* end of main() */
