diff --git a/ompi/mpi/fortran/mpif-h/Makefile.am b/ompi/mpi/fortran/mpif-h/Makefile.am index d14985e821..c9fc687e2f 100644 --- a/ompi/mpi/fortran/mpif-h/Makefile.am +++ b/ompi/mpi/fortran/mpif-h/Makefile.am @@ -396,7 +396,7 @@ libmpi_mpifh_la_SOURCES += \ win_attach_f.c \ win_call_errhandler_f.c \ win_complete_f.c \ - win_create_dynamic_errhandler_f.c \ + win_create_dynamic_f.c \ win_create_errhandler_f.c \ win_create_f.c \ win_create_keyval_f.c \ diff --git a/ompi/mpi/fortran/mpif-h/win_create_dynamic_f.c b/ompi/mpi/fortran/mpif-h/win_create_dynamic_f.c new file mode 100644 index 0000000000..35ac451dc1 --- /dev/null +++ b/ompi/mpi/fortran/mpif-h/win_create_dynamic_f.c @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2015 Research Organization for Information Science + * and Technology (RIST). All rights reserved. + * $COPYRIGHT$ + * + * Additional copyrights may follow + * + * $HEADER$ + */ + +#include "ompi_config.h" + +#include "ompi/mpi/fortran/mpif-h/bindings.h" + +#if OPAL_HAVE_WEAK_SYMBOLS && OMPI_PROFILE_LAYER +#pragma weak PMPI_WIN_CREATE_DYNAMIC = ompi_win_create_dynamic_f +#pragma weak pmpi_win_create_dynamic = ompi_win_create_dynamic_f +#pragma weak pmpi_win_create_dynamic_ = ompi_win_create_dynamic_f +#pragma weak pmpi_win_create_dynamic__ = ompi_win_create_dynamic_f + +#pragma weak PMPI_Win_create_dynamic_f = ompi_win_create_dynamic_f +#pragma weak PMPI_Win_create_dynamic_f08 = ompi_win_create_dynamic_f +#elif OMPI_PROFILE_LAYER +OMPI_GENERATE_F77_BINDINGS (PMPI_WIN_CREATE_DYNAMIC, + pmpi_win_create_dynamic, + pmpi_win_create_dynamic_, + pmpi_win_create_dynamic__, + pompi_win_create_dynamic_f, + (MPI_Fint *info, MPI_Fint *comm, MPI_Fint *win, MPI_Fint *ierr), + (info, comm, win, ierr) ) +#endif + +#if OPAL_HAVE_WEAK_SYMBOLS +#pragma weak MPI_WIN_CREATE_DYNAMIC = ompi_win_create_dynamic_f +#pragma weak mpi_win_create_dynamic = ompi_win_create_dynamic_f +#pragma weak mpi_win_create_dynamic_ = ompi_win_create_dynamic_f +#pragma weak mpi_win_create_dynamic__ = ompi_win_create_dynamic_f + +#pragma weak MPI_Win_create_dynamic_f = ompi_win_create_dynamic_f +#pragma weak MPI_Win_create_dynamic_f08 = ompi_win_create_dynamic_f +#endif + +#if ! OPAL_HAVE_WEAK_SYMBOLS && ! OMPI_PROFILE_LAYER +OMPI_GENERATE_F77_BINDINGS (MPI_WIN_CREATE_DYNAMIC, + mpi_win_create_dynamic, + mpi_win_create_dynamic_, + mpi_win_create_dynamic__, + ompi_win_create_dynamic_f, + (MPI_Fint *info, MPI_Fint *comm, MPI_Fint *win, MPI_Fint *ierr), + (info, comm, win, ierr) ) +#endif + + +#if OMPI_PROFILE_LAYER && ! OPAL_HAVE_WEAK_SYMBOLS +#include "ompi/mpi/fortran/mpif-h/profile/defines.h" +#endif + +void ompi_win_create_dynamic_f(MPI_Fint *info, MPI_Fint *comm, MPI_Fint *win, + MPI_Fint *ierr) +{ + int c_ierr; + MPI_Win c_win; + MPI_Info c_info; + MPI_Comm c_comm; + + c_comm = MPI_Comm_f2c(*comm); + c_info = MPI_Info_f2c(*info); + + c_ierr = MPI_Win_create_dynamic(c_info, c_comm, &c_win); + if (NULL != ierr) *ierr = OMPI_INT_2_FINT(c_ierr); + + if (MPI_SUCCESS == c_ierr) { + *win = MPI_Win_c2f(c_win); + } +} diff --git a/ompi/mpi/fortran/use-mpi-f08/profile/pwin_create_dynamic_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/profile/pwin_create_dynamic_f08.F90 new file mode 100644 index 0000000000..b36900dcbb --- /dev/null +++ b/ompi/mpi/fortran/use-mpi-f08/profile/pwin_create_dynamic_f08.F90 @@ -0,0 +1,23 @@ +! -*- f90 -*- +! +! Copyright (c) 2015 Research Organization for Information Science +! and Technology (RIST). All rights reserved. +! $COPYRIGHT$ + +#include "ompi/mpi/fortran/configure-fortran-output.h" + +subroutine PMPI_Win_create_dynamic_f08(info,comm,win,ierror) + use :: mpi_f08_types, only : MPI_Info, MPI_Comm, MPI_Win + use :: mpi_f08, only : ompi_win_create_dynamic_f + implicit none + TYPE(MPI_Info), INTENT(IN) :: info + TYPE(MPI_Comm), INTENT(IN) :: comm + TYPE(MPI_Win), INTENT(OUT) :: win + INTEGER, OPTIONAL, INTENT(OUT) :: ierror + integer :: c_ierror + + call ompi_win_create_dynamic_f(info%MPI_VAL,& + comm%MPI_VAL,win%MPI_VAL,c_ierror) + if (present(ierror)) ierror = c_ierror + +end subroutine PMPI_Win_create_dynamic_f08 diff --git a/ompi/mpi/fortran/use-mpi-f08/win_create_dynamic_f08.F90 b/ompi/mpi/fortran/use-mpi-f08/win_create_dynamic_f08.F90 new file mode 100644 index 0000000000..576aa1a0e5 --- /dev/null +++ b/ompi/mpi/fortran/use-mpi-f08/win_create_dynamic_f08.F90 @@ -0,0 +1,23 @@ +! -*- f90 -*- +! +! Copyright (c) 2015 Research Organization for Information Science +! and Technology (RIST). All rights reserved. +! $COPYRIGHT$ + +#include "ompi/mpi/fortran/configure-fortran-output.h" + +subroutine MPI_Win_create_dynamic_f08(info,comm,win,ierror) + use :: mpi_f08_types, only : MPI_Info, MPI_Comm, MPI_Win + use :: mpi_f08, only : ompi_win_create_dynamic_f + implicit none + TYPE(MPI_Info), INTENT(IN) :: info + TYPE(MPI_Comm), INTENT(IN) :: comm + TYPE(MPI_Win), INTENT(OUT) :: win + INTEGER, OPTIONAL, INTENT(OUT) :: ierror + integer :: c_ierror + + call ompi_win_create_dynamic_f(info%MPI_VAL,& + comm%MPI_VAL,win%MPI_VAL,c_ierror) + if (present(ierror)) ierror = c_ierror + +end subroutine MPI_Win_create_dynamic_f08