If misalignment is the case then adding "sequence" to the data type might help.
So: type :: <whatever> sequence integer :: ... real :: ... end type Note that you cannot use the alignment on types with allocatables and pointers for obvious reasons. 2014-10-03 0:39 GMT+00:00 Kawashima, Takahiro <t-kawash...@jp.fujitsu.com>: > Hi Diego, > > I don't know what CPU/compiler you are using and what -r8 > option means, but DISPLACEMENTS(2) and DISPLACEMENTS(3) is > incorrect if integer is 4 bytes and real is 8 bytes. > In this case, usually there is a gap between ip and RP. > See description about datatype alignment in the MPI Standard. > > Regards, > Takahiro > > > Dear all. > > I have some problem with MPI_TYPE_CREATE_STRUCT and as a consequence > > with SENDRECV. > > > > I have this variable type > > > > *type particle* > > *integer :: ip* > > * real :: RP(2)* > > * real :: QQ(4)* > > *end type particle* > > > > When I compile in double precision with: > > > > *mpif90 -r8 -fpp -DPARALLEL *.f90 * > > > > So when I create my own variable type for MPI, I have > > > > > > *TYPES(1)=MPI_INTEGER !We have three variables > > type in the new varible* > > *TYPES(2)=MPI_DOUBLE_PRECISION !Integer and Real and Real* > > * TYPES(3)=MPI_DOUBLE_PRECISION !Integer and Real and Real* > > * nBLOCKS(1)=1 !number of > > element in each block * > > * nBLOCKS(2)=2* > > * nBLOCKS(3)=4* > > * !* > > * DISPLACEMENTS(1)=0* > > * DISPLACEMENTS(2)=sizeof(dummy%ip)* > > * > > > DISPLACEMENTS(3)=sizeof(dummy%ip)+sizeof(dummy%RP(1))+sizeof(dummy%RP(2))* > > * ! * > > * CALL > > MPI_TYPE_CREATE_STRUCT(3,nBLOCKS,DISPLACEMENTS,TYPES,MPI_PARTICLE_TYPE, > > PI%ierr)* > > * CALL MPI_TYPE_COMMIT(MPI_PARTICLE_TYPE,MPI%ierr)* > > > > > > Am I right? > > Thanks, in advance, for any kind of help > _______________________________________________ > 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/2014/10/25432.php > -- Kind regards Nick