2013-04-29 93 views
3

我有這段代碼但我得到這個錯誤。MPI狀態FORTRAN

我試着聲明地位

INTEGER ::狀態

但MPI_SENDRECV(即等級= 0所有處理器)之後發生改變我的等級值

PROGRAM testsendrecv 
    IMPLICIT NONE 

    INTEGER :: i, k, nx, nz 
    INTEGER :: ierror, comm, p, rank, npr, prev 
    INTEGER :: status(MPI_STATUS_SIZE) 
    REAL(KIND = 8), ALLOCATABLE :: A(:,:), B(:), C(:) 

    include 'mpif.h' 

    nx = 5 
    nz = 5 

    ALLOCATE(A(nx,nz), B(nx)) 

    CALL MPI_INIT(ierror) 
    comm = MPI_COMM_WORLD 
    !Get rank 
    CALL MPI_COMM_RANK(comm, rank, ierror) 
    !Get number of processors 
    CALL MPI_COMM_SIZE(comm, p, ierror) 

    A(:,:) = rank 

    IF(rank==0) THEN 
    prev = p-1 
    ELSE 
    prev = rank-1 
    END IF 


    CALL MPI_SENDRECV(A(:,1), nx, MPI_DOUBLE_PRECISION, MOD(rank+1,p), 1, & 
     B(:), nx, MPI_DOUBLE_PRECISION, prev, 1, comm, status, ierror) 

    WRITE(*,*) rank 
    WRITE(*,*) B(1) 

    CALL MPI_FINALIZE(ierror) 

END PROGRAM testsendrecv 

的上面的代碼給我以下錯誤

bash-4.1$ mpif90 testsendr.f90 
mpif.h:79.35: 
    Included at testsendr.f90:9: 

     PARAMETER (MPI_STATUS_SIZE=5) 
            1 
Error: VARIABLE attribute of 'mpi_status_size' conflicts with PARAMETER attribute at (1) 
mpif.h:80.33: 
    Included at testsendr.f90:9: 

     INTEGER MPI_STATUS_IGNORE(MPI_STATUS_SIZE) 
           1 
Error: Variable 'mpi_status_size' cannot appear in the expression at (1) 
mpif.h:80.49: 
    Included at testsendr.f90:9: 

     INTEGER MPI_STATUS_IGNORE(MPI_STATUS_SIZE) 
               1 
Error: The module or main program array 'mpi_status_ignore' at (1) must have constant shape 
mpif.h:81.35: 
    Included at testsendr.f90:9: 

     INTEGER MPI_STATUSES_IGNORE(MPI_STATUS_SIZE,1) 
            1 
Error: Variable 'mpi_status_size' cannot appear in the expression at (1) 
mpif.h:81.53: 
    Included at testsendr.f90:9: 

     INTEGER MPI_STATUSES_IGNORE(MPI_STATUS_SIZE,1) 
                1 
Error: The module or main program array 'mpi_statuses_ignore' at (1) must have constant shape 
testsendr.f90:6.20: 

    INTEGER :: status(MPI_STATUS_SIZE) 
        1 
Error: Variable 'mpi_status_size' cannot appear in the expression at (1) 
testsendr.f90:6.36: 

    INTEGER :: status(MPI_STATUS_SIZE) 
            1 
Error: The module or main program array 'status' at (1) must have constant shape 

任何想法。這是一個非常簡單的程序。

感謝

回答

4

我認爲在你的程序語句錯序出現你的問題。行

include mpif.h 

之前已經聲明瞭一個變量,它利用在該文件中定義的常量之一,在該行

INTEGER :: status(MPI_STATUS_SIZE) 

無論是移動include語句來IMPLICIT NONE或之後,更好地,將這些包含完全刪除,並在隱式聲明之前插入USE MPI,然後整理修訂代碼的鏈接。