/*  IV_Bcast.c  */

#include "../spoolesMPI.h"

/*--------------------------------------------------------------------*/
/*
   -------------------------------------------
   purpose -- to broadcast an IV object from 
              one processor to all the others.

   created -- 98sep25, cca
   -------------------------------------------
*/
IV *
IV_MPI_Bcast (
   IV         *obj, 
   int        root,
   int        msglvl,
   FILE       *msgFile,
   MPI_Comm   comm
) {
/*
   ---------------
   check the input
   ---------------
*/
if ( obj == NULL ) {
   fprintf(stderr, "\n fatal error in IV_MPI_Bcast()"
           "\n obj is NULL\n") ;
   exit(-1) ;
}
MPI_Comm_rank(comm, &myid) ;
if ( myid == root ) {
/*
   --------------------------------
   broadcast the size of the vector
   --------------------------------
*/
   MPI_Bcast((void *) &obj->size, 1, MPI_INT, root, comm) ;
   if ( obj->size > 0 ) {
/*
      ---------------------
      broadcast the entries
      ---------------------
*/
      MPI_Bcast((void *) obj->vec, obj->size, MPI_INT, root, comm) ;
   }
} else {
   int   size ;
/*
   --------------
   clear the data
   --------------
*/
   if ( obj == NULL ) {
      obj = IV_new() ;
   } else {
      IV_clearData(obj) ;
   }
/*
   ------------------------------
   receive the size of the vector
   ------------------------------
*/
   MPI_Bcast((void *) &size, 1, MPI_INT, root, comm) ;
   IV_setSize(obj, size) ;
   if ( size > 0 ) {
/*
      -------------------
      receive the entries
      -------------------
*/
      MPI_Bcast((void *) obj->vec, obj->size, MPI_INT, root, comm) ;
   }
}
return(obj) ; }

/*--------------------------------------------------------------------*/


syntax highlighted by Code2HTML, v. 0.9.1