SALSA Analysis Modules
utils.c
Go to the documentation of this file.
00001 /*! \file utils.c \ingroup implementation */
00002 #include <stdlib.h>
00003 #include "petsc.h"
00004 #include "anamodutils.h"
00005 
00006 #undef __FUNCT__
00007 #define __FUNCT__ "MPIAllGatherDammit"
00008 int MPIAllGatherIntV(int *array,int n,int **Array,int *N,MPI_Comm comm)
00009 {
00010   int *sizes,*offsets,*result_array,ntids,i,ierr,s;
00011 
00012   PetscFunctionBegin;
00013   MPI_Comm_size(comm,&ntids);
00014   ierr = PetscMalloc(ntids*sizeof(int),&sizes); CHKERRQ(ierr);
00015   ierr = PetscMalloc(ntids*sizeof(int),&offsets); CHKERRQ(ierr);
00016   MPI_Allgather(&n,1,MPI_INT,sizes,1,MPI_INT,comm);
00017   s=0; for (i=0; i<ntids; i++) {offsets[i]=s; s+=sizes[i];} *N = s;
00018   ierr = PetscMalloc((*N+1)*sizeof(int),&result_array); CHKERRQ(ierr);
00019   result_array[0] = *N;
00020   ierr = MPI_Allgatherv
00021     ((void*)array,n,MPI_INT,(void*)(result_array+1),
00022      sizes,offsets,MPI_INT,comm); CHKERRQ(ierr);
00023   ierr = PetscFree(sizes); CHKERRQ(ierr);
00024   ierr = PetscFree(offsets); CHKERRQ(ierr);
00025   *Array = result_array;
00026 
00027   PetscFunctionReturn(0);
00028 }