Dear Gus, Dear all, Thanks a lot. MPI_Type_Struct works well for the first part of my problem, so I am very happy to be able to use it.
Regarding MPI_TYPE_VECTOR. I have studied it and for simple case it is clear to me what id does (at least I believe). Foe example if I have a matrix define as: REAL, ALLOCATABLE (AA(:,:)) ALLOCATE AA(100,5) I could send part of it defining CALL MPI_TYPE_VECTOR(5,1,5,MPI_DOUBLE_PRECISION,*MY_NEW_TYPE*) after that I can send part of it with CALL MPI_SEND( AA(1:*10*,:), *10*, *MY_NEW_TYPE*, 1, 0, MPI_COMM_WORLD ); Have I understood correctly? What I can do in case of three dimensional array? for example AA(:,:,:), I am looking to MPI_TYPE_CREATE_SUBARRAY. Is that the correct way? Thanks again Diego On 13 January 2015 at 19:04, Gus Correa <g...@ldeo.columbia.edu> wrote: > Hi Diego > I guess MPI_Type_Vector is the natural way to send and receive Fortran90 > array sections (e.g. your QQMLS(:,50:100,:)). > I used that before and it works just fine. > I think that is pretty standard MPI programming style. > I guess MPI_Type_Struct tries to emulate Fortran90 and C structures > (as you did in your previous code, with all the surprises regarding > alignment, etc), not array sections. > Also, MPI type vector should be more easy going (and probably more > efficient) than MPI type struct, with less memory alignment problems. > I hope this helps, > Gus Correa > > PS - These books have a quite complete description and several examples > of all MPI objects and functions, including MPI types (native and user > defined): > http://mitpress.mit.edu/books/mpi-complete-reference-0 > http://mitpress.mit.edu/books/mpi-complete-reference-1 > > [They cover MPI 1 and 2. I guess there is a new/upcoming book > with MPI 3, but for what you're doing 1 and 2 are more than enough.] > > > On 01/13/2015 09:22 AM, Diego Avesani wrote: > >> Dear all, >> >> I had some wonderful talking about MPI_type_create_struct adn >> isend\irecv with >> Gilles, Gustavo, George, Gus, Tom and Jeff. Now all is more clear and my >> program works. >> >> Now I have another question. In may program I have matrix: >> >> /QQMLS(:,:,:) /that is allocate as >> >> /ALLOCATE(QQMLS(9,npt,18)/), where npt is the number of particles >> >> QQMLS is double precision. >> >> I would like to sent form a CPU to another part of it, for example, >> sending QQMLS(:,50:100,:). I mean sending the QQMLS of the particles >> between 50 to 100. >> I suppose that i could use MPI_Type_vector but I am not sure. The >> particle that I want to sent could be from 25 to 50 ecc.. ecc..so >> blocklength changes everytime. >> >> Do I have to use MPI_type_create_struct? >> Do I have correctly understood MPI_Type_vector? >> >> Thanks a lot >> >> >> Diego >> >> >> >> _______________________________________________ >> users mailing list >> us...@open-mpi.org >> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users >> Link to this post: http://www.open-mpi.org/community/lists/users/2015/01/ >> 26171.php >> >> > _______________________________________________ > users mailing list > us...@open-mpi.org > Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users > Link to this post: http://www.open-mpi.org/community/lists/users/2015/01/ > 26172.php >