- int success=1;
- int sendcount=size;
- int recvcount=1;
- int i;
- double *sndbuf =NULL;
- double rcvd;
- int root=0; // arbitrary choice
-
- // on root, initialize sendbuf
- if (root == rank ) {
- sndbuf = malloc( sendcount*sizeof(double));
- for (i=0; i<sendcount;i++) {
- sndbuf[i] = (double) rank;
- }
- }
-
- MPI_Scatter(sndbuf, sendcount, MPI_DOUBLE, &rcvd,recvcount,MPI_DOUBLE,root,MPI_COMM_WORLD);
-
- return(success);
+ int success=1;
+ int retval;
+ int sendcount=1; // one double to each process
+ int recvcount=1;
+ int i;
+ double *sndbuf =NULL;
+ double rcvd;
+ int root=0; // arbitrary choice
+
+ // on root, initialize sendbuf
+ if (root == rank ) {
+ sndbuf = malloc( size * sizeof(double));
+ for (i=0; i< size;i++) {
+ sndbuf[i] = (double) i;
+ }
+ }
+
+ retval=MPI_Scatter(sndbuf, sendcount, MPI_DOUBLE, &rcvd,recvcount,MPI_DOUBLE,root,MPI_COMM_WORLD);
+ if (retval != MPI_SUCCESS) {
+ fprintf(stderr,"(%s:%d) MPI_Scatter() returned retval=%d\n",__FILE__,__LINE__,retval);
+ return 0;
+ }
+
+ // verification
+ if ((double)rank != rcvd) {
+ fprintf(stderr,"[%d] has %lf instead of %d\n",rank,rcvd,rank);
+ success=0;
+ }
+ return(success);