Diego,

First, i recommend you redefine tParticle and add a padding integer so 
everything is aligned.


Before invoking MPI_Type_create_struct, you need to 
call MPI_Get_address(dummy, base, MPI%err)
displacements = displacements - base

MPI_Type_create_resized might be unnecessary if tParticle is aligned 
And the lower bound should be zero.

BTW, which compiler are you using ?
Is tParticle object a common ?
iirc, intel compiler aligns types automatically, but not commons, and that 
means MPI_Type_create_struct is not aligned as it should most of the time.

Cheers,

Gilles 

Diego Avesani <diego.aves...@gmail.com>さんのメール:
>dear all,
>
>
>I have a problem with MPI_Type_Create_Struct and MPI_TYPE_CREATE_RESIZED.
>
>
>I have this variable type:
>
>
>  TYPE tParticle
>
>     INTEGER  :: ip
>
>     REAL     :: RP(2)
>
>     REAL     :: QQ(2)
>
>  ENDTYPE tParticle
>
>
>Then I define:
>
>
>Nstruct=3
>
>ALLOCATE(TYPES(Nstruct))
>
>ALLOCATE(LENGTHS(Nstruct))
>
>ALLOCATE(DISPLACEMENTS(Nstruct))
>
>!set the types
>
>TYPES(1) = MPI_INTEGER
>
>TYPES(2) = MPI_DOUBLE_PRECISION
>
>TYPES(3) = MPI_DOUBLE_PRECISION
>
>!set the lengths
>
>LENGTHS(1) = 1
>
>LENGTHS(2) = 2
>
>LENGTHS(3) = 2
>
>
>As gently suggested by Nick Papior Andersen and George Bosilca some months 
>ago, I checked the variable adress to resize my struct variable to avoid empty 
>space and
>
>to have a more general definition.
>
>
> !
>
> CALL MPI_GET_ADDRESS(dummy%ip,    DISPLACEMENTS(1), MPI%iErr)
>
> CALL MPI_GET_ADDRESS(dummy%RP(1), DISPLACEMENTS(2), MPI%iErr)
>
> CALL MPI_GET_ADDRESS(dummy%QQ(1), DISPLACEMENTS(3), MPI%iErr)
>
> !
>
> CALL 
>MPI_Type_Create_Struct(Nstruct,LENGTHS,DISPLACEMENTS,TYPES,MPI_PARTICLE_TYPE_OLD,MPI%iErr)
>
> CALL MPI_Type_Commit(MPI_PARTICLE_TYPE_OLD,MPI%iErr)
>
> !
>
> CALL MPI_TYPE_CREATE_RESIZED(MPI_PARTICLE_TYPE_OLD, 
>DISPLACEMENTS(1),DISPLACEMENTS(2) - DISPLACEMENTS(1), MPI_PARTICLE_TYPE)
>
>
>
>This does not work. When my program run, I get an error:
>
>
>forrtl: severe (174): SIGSEGV, segmentation fault occurred.
>
>
>I have read the manual but probably I am not able to understand  
>MPI_TYPE_CREATE_RESIZED. 
>
>
>Someone could help me?
>
>                                                                               
>                                                              
>
>Thanks a lot
>
>Diego
>
>
>
>Diego
>

Reply via email to