151 строка
5.1 KiB
Fortran
151 строка
5.1 KiB
Fortran
|
! -*- f90 -*-
|
||
|
!
|
||
|
! Copyright (c) 2009-2010 Cisco Systems, Inc. All rights reserved.
|
||
|
! Copyright (c) 2009-2012 Los Alamos National Security, LLC.
|
||
|
! All rights reserved.
|
||
|
!
|
||
|
! This file provides the interface specifications for the MPI Fortran
|
||
|
! API bindings. It effectively maps between public names ("MPI_Init")
|
||
|
! and the name for tools ("MPI_Init_f08") and the back-end implementation
|
||
|
! name (e.g., "MPI_Init_f08").
|
||
|
|
||
|
module mpi_f08_interfaces
|
||
|
|
||
|
interface MPI_Comm_rank
|
||
|
subroutine MPI_Comm_rank_f08(comm,rank,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
INTEGER, INTENT(OUT) :: rank
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Comm_rank_f08
|
||
|
end interface MPI_Comm_rank
|
||
|
|
||
|
interface MPI_Comm_size
|
||
|
subroutine MPI_Comm_size_f08(comm,size,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
INTEGER, INTENT(OUT) :: size
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Comm_size_f08
|
||
|
end interface MPI_Comm_size
|
||
|
|
||
|
interface MPI_Finalize
|
||
|
subroutine MPI_Finalize_f08(ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Finalize_f08
|
||
|
end interface MPI_Finalize
|
||
|
|
||
|
interface MPI_Init
|
||
|
subroutine MPI_Init_f08(ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Init_f08
|
||
|
end interface MPI_Init
|
||
|
|
||
|
! Note that send/recv only works with specific types for buffers (2D integers)
|
||
|
! Double precision is not implemented at this time but allows compiler to do
|
||
|
! type checking so that MPI_SUBARRAYS_SUPPORTED flag can be utilized in
|
||
|
! test_send_recv.f90.
|
||
|
!
|
||
|
|
||
|
interface MPI_Recv
|
||
|
subroutine MPI_Recv_f08_desc_int_2d(buf,count,datatype,source,tag,comm,status,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
INTEGER, INTENT(IN), target :: buf(:,:)
|
||
|
INTEGER, INTENT(IN) :: count, source, tag
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
TYPE(MPI_Status) :: status
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Recv_f08_desc_int_2d
|
||
|
subroutine MPI_Recv_f08_desc_dbl_1d(buf,count,datatype,source,tag,comm,status,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
DOUBLE PRECISION, INTENT(IN), target :: buf(:)
|
||
|
INTEGER, INTENT(IN) :: count, source, tag
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
TYPE(MPI_Status) :: status
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Recv_f08_desc_dbl_1d
|
||
|
subroutine MPI_Recv_f08_desc_dbl_0d(buf,count,datatype,source,tag,comm,status,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
DOUBLE PRECISION, INTENT(IN), target :: buf
|
||
|
INTEGER, INTENT(IN) :: count, source, tag
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
TYPE(MPI_Status) :: status
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Recv_f08_desc_dbl_0d
|
||
|
end interface MPI_Recv
|
||
|
|
||
|
interface MPI_Send
|
||
|
subroutine MPI_Send_f08_desc_int_2d(buf,count,datatype,dest,tag,comm,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
INTEGER, INTENT(IN), target :: buf(:,:)
|
||
|
INTEGER, INTENT(IN) :: count, dest, tag
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Send_f08_desc_int_2d
|
||
|
subroutine MPI_Send_f08_desc_dbl_1d(buf,count,datatype,dest,tag,comm,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
DOUBLE PRECISION, INTENT(IN), target :: buf(:)
|
||
|
INTEGER, INTENT(IN) :: count, dest, tag
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Send_f08_desc_dbl_1d
|
||
|
subroutine MPI_Send_f08_desc_dbl_0d(buf,count,datatype,dest,tag,comm,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
DOUBLE PRECISION, INTENT(IN), target :: buf
|
||
|
INTEGER, INTENT(IN) :: count, dest, tag
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: datatype
|
||
|
TYPE(MPI_Comm), INTENT(IN) :: comm
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Send_f08_desc_dbl_0d
|
||
|
end interface MPI_Send
|
||
|
|
||
|
interface MPI_Type_commit
|
||
|
subroutine MPI_Type_commit_f08(datatype,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
TYPE(MPI_Datatype), INTENT(INOUT) :: datatype
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Type_commit_f08
|
||
|
end interface MPI_Type_commit
|
||
|
|
||
|
interface MPI_Type_contiguous
|
||
|
subroutine MPI_Type_contiguous_f08(count,oldtype,newtype,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
INTEGER, INTENT(IN) :: count
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: oldtype
|
||
|
TYPE(MPI_Datatype), INTENT(OUT) :: newtype
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Type_contiguous_f08
|
||
|
end interface MPI_Type_contiguous
|
||
|
|
||
|
interface MPI_Type_vector
|
||
|
subroutine MPI_Type_vector_f08(count,blocklength,stride,oldtype,newtype,ierror)
|
||
|
use :: mpi_f08_types
|
||
|
implicit none
|
||
|
INTEGER, INTENT(IN) :: count, blocklength, stride
|
||
|
TYPE(MPI_Datatype), INTENT(IN) :: oldtype
|
||
|
TYPE(MPI_Datatype), INTENT(OUT) :: newtype
|
||
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
||
|
end subroutine MPI_Type_vector_f08
|
||
|
end interface MPI_Type_vector
|
||
|
|
||
|
end module mpi_f08_interfaces
|