I would like to send an array A, which has different dimensions in the processors. Then the root receive these As and puts them into another array globA. I know MPI_allgatherv can do this. However, there are still some implementation issues that are not very clear for me. Thank you very much if any of you can give me some suggestions and comments. The piece of code is as follows (I am not sure if it is completely correct):
!...calculate the total size for the total size of the globA, PROCASize(myidf) is the size of array A in each processor.
PROCASize(myidf) = Asize
globAsize = sum(PROCAsize)
!...calculate the RECS and DISP for MPI_allgatherv
RECSASize(i-1) = PROCASize(i)
call mpi_type_extent(mpi_integer, extent, ierr)
DISP(i-1) = 1 + (i-1)*RECSASIze(i-1)*extent
!...allocate the size of the array globA
call mpi_allgatherv(A,ASize,MPI_INTEGER,globA, RECSASIze, DISP,MPI_INTEGER,MPI_COMM_WORLD,ierr)
1, How to allocate the globA, i.e. the receive buff's size? Should I use globASize*extent or justglobalize?