Diego,

Did you change your compiler options?

Cheers,

Gilles

----- Original Message -----
> Dear all,
> 
> I would like to share with what I have done in oder to create my own 
MPI
> data type. The strange thing is that it worked until some day ago and 
then
> it stopped working. This because probably I have changed my data type 
and I
> miss some knowledge about MPI data type
> 
> This is my data type:
> ******
>   TYPE tParticle
>     SEQUENCE
>     INTEGER          :: ip
>     INTEGER         :: mc
>     INTEGER         :: bcflag
>     INTEGER         :: cpu
>     REAL               :: RP(di)
>     REAL               :: QQ(nVar)
>     REAL               :: UU0(2*(1+di+nVar))
>     REAL               :: lij
>     REAL               :: lmls
>     REAL               :: vol
>     REAL               :: mm
>   ENDTYPE tParticle
> ******
> 
> Then I have this variables in order to create mine:
> 
> ******
>   INTEGER,                   ALLOCATABLE,DIMENSION(:)   :: TYPES,
LENGTHS
>   INTEGER(MPI_ADDRESS_KIND), ALLOCATABLE,DIMENSION(:)   :: 
DISPLACEMENTS
>   TYPE(tParticle) :: dummy(2)
> ******
> 
> Having 5 structures:  Nstruct=5
> 
> In the following how I create my MPI data TYPE
> 
> ******
> ALLOCATE(TYPES          (Nstruct)    )
> ALLOCATE(LENGTHS        (Nstruct)    )
> ALLOCATE(DISPLACEMENTS  (0:nstruct+1))
> !set the types
> TYPES(1)   = MPI_INTEGER
> TYPES(2)   = MPI_DOUBLE_PRECISION
> TYPES(3)   = MPI_DOUBLE_PRECISION
> TYPES(4)   = MPI_DOUBLE_PRECISION
> TYPES(5)   = MPI_DOUBLE_PRECISION
> !set the lengths
> LENGTHS(1) = 4
> LENGTHS(2) = SIZE(dummy(1)%RP)
> LENGTHS(3) = SIZE(dummy(1)%QQ)
> LENGTHS(4) = SIZE(dummy(1)%UU0)
> LENGTHS(5) = 4
>   !
>   CALL MPI_GET_ADDRESS(dummy(1)        ,DISPLACEMENTS(0),MPIdata%iErr)
>   CALL MPI_GET_ADDRESS(dummy(1)%ip     ,DISPLACEMENTS(1),MPIdata%iErr)
>   CALL MPI_GET_ADDRESS(dummy(1)%RP(1)  ,DISPLACEMENTS(2),MPIdata%iErr)
>   CALL MPI_GET_ADDRESS(dummy(1)%QQ(1)  ,DISPLACEMENTS(3),MPIdata%iErr)
>   CALL MPI_GET_ADDRESS(dummy(1)%UU0(1) ,DISPLACEMENTS(4),MPIdata%iErr)
>   CALL MPI_GET_ADDRESS(dummy(1)%lij    ,DISPLACEMENTS(5),MPIdata%iErr)
>   CALL MPI_GET_ADDRESS(dummy(2)        ,DISPLACEMENTS(6),MPIdata%iErr)
>   !
>   DISPLACEMENTS(1:nstruct+1)= DISPLACEMENTS(1:nstruct+1)-DISPLACEMENTS
(0)
>   !
>   CALL
> MPI_TYPE_CREATE_STRUCT(nstruct,lengths,DISPLACEMENTS(1:nstruct+1),
types,MPI_PARTICLE_TYPE_OLD,MPIdata%iErr)
>   CALL MPI_TYPE_COMMIT(MPI_PARTICLE_TYPE_OLD,MPIdata%iErr)
>   !
>   CALL MPI_TYPE_CREATE_RESIZED(MPI_PARTICLE_TYPE_OLD, DISPLACEMENTS(1),
> DISPLACEMENTS(6), MPI_PARTICLE_TYPE, MPIdata%iErr)
>   CALL MPI_TYPE_COMMIT(MPI_PARTICLE_TYPE,MPIdata%iErr)
> 
> 
> Do you see something wrong, maybe related to the DISPLACEMENTS. This
> beacuse, As already told you, something has happend and I have just 
added
> "    REAL               :: mm  "
>  in my type and consequently set "LENGTHS(5) = 4 ".
> 
> What do you think?
> Thanks in advance for any kind of help.
> 
> Best,
> 
> Diego
> 


Reply via email to