Skip to content

Commit

Permalink
mpi_f08: correctly implements MPI_{COMM,TYPE,WIN}_{DUP,NULL_{COPY,DEL…
Browse files Browse the repository at this point in the history
…ETE}}_FN

Fixes open-mpi/ompi#1323

(cherry picked from commit cda094a)
  • Loading branch information
ggouaillardet committed Feb 15, 2016
1 parent 90207da commit a1bce6c
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 201 deletions.
10 changes: 4 additions & 6 deletions ompi/mpi/fortran/use-mpi-f08/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,6 @@ noinst_LTLIBRARIES = $(module_sentinel_file)
mpi-f08.lo: $(module_sentinel_file)
mpi-f08.lo: mpi-f08.F90
mpi-f08.lo: mpi-f-interfaces-bind.h pmpi-f-interfaces-bind.h
mpi-f08.lo: attr-fn-f08-callback-interfaces.h
mpi-f08.lo: conversion-fn-null-f08-interface.h
mpi-f08.lo: sizeof_f08.h

#
Expand Down Expand Up @@ -800,8 +798,6 @@ libmpi_usempif08_la_SOURCES = \
$(pmpi_api_files) \
mpi-f-interfaces-bind.h \
pmpi-f-interfaces-bind.h \
attr-fn-f08-callback-interfaces.h \
conversion-fn-null-f08-interface.h \
mpi-f08.F90 \
buffer_detach.c \
constants.h \
Expand Down Expand Up @@ -843,8 +839,6 @@ $(pmpi_api_lo_files): mpi-f08.lo

mpi-f08.lo: $(module_sentinel_file) $(SIZEOF_H)
mpi-f08.lo: mpi-f-interfaces-bind.h pmpi-f-interfaces-bind.h
mpi-f08.lo: attr-fn-f08-callback-interfaces.h
mpi-f08.lo: conversion-fn-null-f08-interface.h

###########################################################################

Expand All @@ -854,6 +848,7 @@ libforce_usempif08_internal_modules_to_be_built_la_SOURCES = \
mpi-f08-types.F90 \
mpi-f08-interfaces.F90 \
mpi-f08-interfaces-callbacks.F90 \
mpi-f08-callbacks.F90 \
pmpi-f08-interfaces.F90

config_h = \
Expand All @@ -873,6 +868,9 @@ mpi-f08-interfaces.lo: mpi-f08-interfaces-callbacks.lo
mpi-f08-interfaces-callbacks.lo: $(config_h)
mpi-f08-interfaces-callbacks.lo: mpi-f08-interfaces-callbacks.F90
mpi-f08-interfaces-callbacks.lo: mpi-f08-types.lo
mpi-f08-callbacks.lo: $(config_h)
mpi-f08-callbacks.lo: mpi-f08-callbacks.F90
mpi-f08-callbacks.lo: mpi-f08-types.lo
pmpi-f08-interfaces.lo: $(config_h)
pmpi-f08-interfaces.lo: pmpi-f08-interfaces.F90
pmpi-f08-interfaces.lo: mpi-f08-interfaces-callbacks.lo
Expand Down
152 changes: 0 additions & 152 deletions ompi/mpi/fortran/use-mpi-f08/attr-fn-f08-callback-interfaces.h

This file was deleted.

35 changes: 0 additions & 35 deletions ompi/mpi/fortran/use-mpi-f08/conversion-fn-null-f08-interface.h

This file was deleted.

142 changes: 142 additions & 0 deletions ompi/mpi/fortran/use-mpi-f08/mpi-f08-callbacks.F90
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
! -*- f90 -*-
! Copyright (c) 2016 Research Organization for Information Science
! and Technology (RIST). All rights reserved.
! $COPYRIGHT$

#include "ompi/mpi/fortran/configure-fortran-output.h"

module mpi_f08_callbacks

! MPI3.1, p270, 5-19

contains

subroutine MPI_COMM_DUP_FN(oldcomm,comm_keyval,extra_state, &
attribute_val_in,attribute_val_out,flag,ierror)
use mpi_f08_types
implicit none
type(MPI_Comm) :: oldcomm
integer :: comm_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
logical :: flag

flag = .true.
attribute_val_out = attribute_val_in
ierror = MPI_SUCCESS
end subroutine

subroutine MPI_COMM_NULL_COPY_FN(oldcomm,comm_keyval,extra_state, &
attribute_val_in,attribute_val_out,flag,ierror)
use mpi_f08_types
implicit none
type(MPI_Comm) :: oldcomm
integer :: comm_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
logical :: flag

flag = .false.
ierror = MPI_SUCCESS
end subroutine

subroutine MPI_COMM_NULL_DELETE_FN(comm,comm_keyval, &
attribute_val, extra_state, ierror)
use mpi_f08_types
implicit none
type(MPI_Comm) :: comm
integer :: comm_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: attribute_val, extra_state

ierror = MPI_SUCCESS
end subroutine

subroutine MPI_TYPE_DUP_FN(oldtype,type_keyval,extra_state, &
attribute_val_in,attribute_val_out,flag,ierror)
use mpi_f08_types
implicit none
type(MPI_Datatype) :: oldtype
integer :: type_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
logical :: flag

flag = .true.
attribute_val_out = attribute_val_in
ierror = MPI_SUCCESS
end subroutine

subroutine MPI_TYPE_NULL_COPY_FN(oldtype,type_keyval,extra_state, &
attribute_val_in,attribute_val_out,flag,ierror)
use mpi_f08_types
implicit none
type(MPI_Datatype) :: oldtype
integer :: type_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
logical :: flag

flag = .false.
ierror = MPI_SUCCESS
end subroutine

subroutine MPI_TYPE_NULL_DELETE_FN(datatype,type_keyval, &
attribute_val, extra_state, ierror)
use mpi_f08_types
implicit none
type(MPI_Datatype) :: datatype
integer :: type_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: attribute_val, extra_state

ierror = MPI_SUCCESS
end subroutine

subroutine MPI_WIN_DUP_FN(oldwin,win_keyval,extra_state, &
attribute_val_in,attribute_val_out,flag,ierror)
use mpi_f08_types
implicit none
type(MPI_Win) :: oldwin
integer :: win_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
logical :: flag

flag = .true.
attribute_val_out = attribute_val_in
ierror = MPI_SUCCESS
end subroutine

subroutine MPI_WIN_NULL_COPY_FN(oldwin,win_keyval,extra_state, &
attribute_val_in,attribute_val_out,flag,ierror)
use mpi_f08_types
implicit none
type(MPI_Win) :: oldwin
integer :: win_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: extra_state, attribute_val_in, attribute_val_out
logical :: flag

flag = .false.
ierror = MPI_SUCCESS
end subroutine

subroutine MPI_WIN_NULL_DELETE_FN(win,win_keyval, &
attribute_val, extra_state, ierror)
use mpi_f08_types
implicit none
type(MPI_Win) :: win
integer :: win_keyval, ierror
integer(kind=MPI_ADDRESS_KIND) :: attribute_val, extra_state

ierror = MPI_SUCCESS
end subroutine

subroutine MPI_CONVERSION_FN_NULL(userbuf, datatype, count, &
filebuf, position, extra_state, ierror)
use, intrinsic :: iso_c_binding, only : c_ptr
use mpi_f08_types
implicit none
type(c_ptr), value :: userbuf, filebuf
type(MPI_Datatype) :: datatype
integer :: count, ierror
integer(kind=MPI_OFFSET_KIND) :: position
integer(kind=MPI_ADDRESS_KIND) :: extra_state

! Do nothing
end subroutine

end module mpi_f08_callbacks
Loading

0 comments on commit a1bce6c

Please sign in to comment.