X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/18831c99f9114246958847f3648d49e5e2c97533..4137195804cd6cf88d6077d42a80cd6b41e09814:/teshsuite/smpi/mpich3-test/f90/datatype/get_elem_u.f90 diff --git a/teshsuite/smpi/mpich3-test/f90/datatype/get_elem_u.f90 b/teshsuite/smpi/mpich3-test/f90/datatype/get_elem_u.f90 new file mode 100644 index 0000000000..aa9f8feaaa --- /dev/null +++ b/teshsuite/smpi/mpich3-test/f90/datatype/get_elem_u.f90 @@ -0,0 +1,72 @@ +! -*- Mode: Fortran; -*- +! +! (C) 2013 by Argonne National Laboratory. +! See COPYRIGHT in top-level directory. +! + +! Based on a test written by Jim Hoekstra on behalf of Cray, Inc. +! see ticket #884 https://trac.mpich.org/projects/mpich/ticket/884 + +PROGRAM get_elem_u + + USE mpi + IMPLICIT NONE + INTEGER RANK, SIZE, IERR, COMM, errs + INTEGER MAX, I, K, dest + INTEGER STATUS(MPI_STATUS_SIZE) + + INTEGER, PARAMETER :: nb=2 + INTEGER :: blklen(nb)=(/1,1/) + INTEGER :: types(nb)=(/MPI_DOUBLE_PRECISION,MPI_CHAR/) + INTEGER(kind=MPI_ADDRESS_KIND) :: disp(nb)=(/0,8/) + + INTEGER, PARAMETER :: amax=200 + INTEGER :: type1, type2, extent + REAL :: a(amax) + + errs = 0 + CALL MPI_Init( ierr ) + COMM = MPI_COMM_WORLD + CALL MPI_Comm_rank(COMM,RANK,IERR) + CALL MPI_Comm_size(COMM,SIZE,IERR) + dest=size-1 + + CALL MPI_Type_create_struct(nb, blklen, disp, types, type1, ierr) + CALL MPI_Type_commit(type1, ierr) + CALL MPI_Type_extent(type1, extent, ierr) + + CALL MPI_Type_contiguous(4, Type1, Type2, ierr) + CALL MPI_Type_commit(Type2, ierr) + CALL MPI_Type_extent(Type2, extent, ierr) + + DO k=1,17 + + IF(rank .EQ. 0) THEN + + ! send k copies of datatype Type1 + CALL MPI_Send(a, k, Type1, dest, 0, comm, ierr) + + ELSE IF (rank == dest) THEN + + CALL MPI_Recv(a, 200, Type2, 0, 0, comm, status, ierr) + CALL MPI_Get_elements(status, Type2, i, ierr) + IF (i .NE. 2*k) THEN + errs = errs+1 + PRINT *, "k=",k," MPI_Get_elements returns", i, ", but it should be", 2*k + END IF + + ELSE + ! thix rank does not particupate + END IF + enddo + + CALL MPI_Type_free(type1, ierr) + CALL MPI_Type_free(type2, ierr) + + CALL MPI_Finalize( ierr ) + + IF(rank .EQ. 0 .AND. errs .EQ. 0) THEN + PRINT *, " No Errors" + END IF + +END PROGRAM get_elem_u