Dear Nick, thanks again. After reading your post I have thought to compile as
mpif90 -r8 *.f90 and to have this type variable TYPE tParticle SEQUENCE INTEGER :: ip INTEGER :: fake REAL :: RP(2) REAL :: QQ(4) END TYPE tParticle where I use fake to have 4 + 4 bytes, and then I have TYPES(1)=MPI_INTEGER TYPES(2)=MPI_DOUBLE_PRECISION TYPES(3)=MPI_DOUBLE_PRECISION nBLOCKS(1)=2 nBLOCKS(2)=2 nBLOCKS(3)=4 Am I wrong? Do I have correctly understood? Really Really thanks Diego On 3 October 2014 15:10, Nick Papior Andersen <nickpap...@gmail.com> wrote: > > > 2014-10-03 13:00 GMT+00:00 Diego Avesani <diego.aves...@gmail.com>: > >> Dear all, dear Nick, >> thanks lot. >> I have understood something, so I have create this variable type: >> >> TYPE tParticle >> SEQUENCE >> INTEGER :: ip >> INTEGER :: fake >> REAL :: RP(2) >> REAL :: QQ(4) >> END TYPE tParticle >> > But did it work? :) Remember to tell mpi about the padding (add one more > type). > Also, for cosmetic reasons I would do this: > TYPE tParticle > sequence > integer :: ip > real :: rp(2), qq(4) > ! THIS IS A PADDING VARIABLE (SHOULD NEVER BE USED) > integer :: pad > end type > >> >> In the point number 2, do you mean to insert some align options? >> > Search around for your compiler. However, this will be "forcing" your > program to certain compilers, I would not recommend this (unless you have > specific reasons anyway). > >> >> For the point number 3, I do not understand where where I am wrong. This >> is my code >> >> >> TYPES(1)=MPI_INTEGER >> > Here it is wrong. > If you compile with -i8 your integer is not an integer, but a long. Your > displacements should be correct, but not your designation of the data-type > for mpi. > >> >> TYPES(2)=MPI_DOUBLE_PRECISION >> TYPES(3)=MPI_DOUBLE_PRECISION >> nBLOCKS(1)=2 >> nBLOCKS(2)=2 >> nBLOCKS(3)=4 >> >> DISPLACEMENTS(1)=0 >> DISPLACEMENTS(2)=sizeof(dummy%ip)+sizeof(dummy%fake) >> >> >> DISPLACEMENTS(3)=sizeof(dummy%ip)+sizeof(dummy%fake)+sizeof(dummy%RP(1))+sizeof(dummy%RP(2)) >> >> CALL >> MPI_TYPE_CREATE_STRUCT(3,nBLOCKS,DISPLACEMENTS,TYPES,MPI_PARTICLE_TYPE,MPI%ierr) >> >> This is how I compile >> >> mpif90 -r8 *.f90 >> > No, that was not what you said! > You said you compiled it using: > mpif90 -r8 -i8 *.f90 > > >> Again, really really Thanks >> >> Diego >> >> >> On 3 October 2014 14:30, Nick Papior Andersen <nickpap...@gmail.com> >> wrote: >> >>> I would never compile a fortran program relying on a specific compiler >>> option! I would never use r8/i8! >>> I would highly encourage you to explicitly set the precision of each >>> variable if you need specific variable precision. There are plenty of >>> tutorials around for this (selected_real/int_kind). >>> >>> Secondly, the warning of mis-alignment is due to the data type not being >>> a multiple of 8. You can pad it with additional bytes to reach a multiple >>> of 8 (in this case add a fake integer, or character(len=4)). >>> I do not know if sequence is needed for the mpi data type (I guess it is >>> needed when dealing with arrays of types, but again, I am not fully sure >>> about this...). >>> >>> A couple of options: >>> 1) I think sequence should work if you pad it to align with 8 bytes. >>> 2) add code that is directive specified against the compiler to tell the >>> exact alignment of the data type >>> 3) Your compilation of -r8 -i8 does probably not work due to the integer >>> being long, and hence your data type of MPI_INTEGER (you did not tell us >>> whether you corrected this) >>> >>> >>> >>> >>> 2014-10-03 11:07 GMT+00:00 Diego Avesani <diego.aves...@gmail.com>: >>> >>>> Dears, >>>> First of all. Really really thanks for you help, I am learning a lot. >>>> Second: >>>> I try to study the MPI_TYPE_CREATE_STRUCT and all the things look >>>> correct. >>>> >>>> I use Intel Fortran compiler and when I compile with -r8 means that I >>>> am compiling in double precision. >>>> >>>> About Nick suggestion: >>>> Coding >>>> >>>> TYPE tParticle >>>> SEQUENCE >>>> INTEGER :: ip >>>> REAL :: RP(2) >>>> REAL :: QQ(4) >>>> END TYPE tParticle >>>> >>>> >>>> if I compile with >>>> mpif90 -r8 *.f90 >>>> >>>> I get the following error: >>>> warning #6379: The structure contains one or more misaligned fields. >>>> [TPARTICLE] TYPE tParticle >>>> >>>> >>>> I can only compile as: >>>> mpif90 -r8 -i8 *.f90 >>>> >>>> But I get the same error: >>>> >>>> An error occurred in MPI_Cart_create >>>> [diedroLap:12267] *** reported by process >>>> [139817172008961,139814070386689] >>>> [diedroLap:12267] *** on communicator MPI_COMM_WORLD >>>> [diedroLap:12267] *** MPI_ERR_OTHER: known error not in list >>>> [diedroLap:12267] *** MPI_ERRORS_ARE_FATAL (processes in this >>>> communicator will now abort, >>>> [diedroLap:12267] *** and potentially your MPI job) >>>> >>>> >>>> >>>> What I can do? >>>> Thanks a lot >>>> >>>> >>>> >>>> On 3 October 2014 08:15, Nick Papior Andersen <nickpap...@gmail.com> >>>> wrote: >>>> >>>>> sequence >>>> >>>> >>>> >>>> >>>> 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/2014/10/25434.php >>>> >>> >>> >>> >>> -- >>> Kind regards Nick >>> >>> _______________________________________________ >>> 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/25435.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/2014/10/25436.php >> > > > > -- > Kind regards Nick > > _______________________________________________ > 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/25437.php >