From 9a519391744b74c8fa73ef5a18e6aa96a50df821 Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Mon, 5 Mar 2018 15:31:56 +0100
Subject: [PATCH] J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE
 for use of true MPI_STATUSES_IGNORE & bypass bug with ifort+openmpi

---
 src/LIB/SURCOUCHE/src/modd_mpif.f90          |  9 ++++++++-
 src/LIB/SURCOUCHE/src/modd_var_ll.f90        | 11 ++++++++---
 src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 |  8 +++++---
 src/Rules.LXgfortran.mk                      |  1 +
 src/Rules.LXifort.mk                         |  4 +++-
 5 files changed, 25 insertions(+), 8 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/modd_mpif.f90 b/src/LIB/SURCOUCHE/src/modd_mpif.f90
index b2d11175f..a36b3748a 100644
--- a/src/LIB/SURCOUCHE/src/modd_mpif.f90
+++ b/src/LIB/SURCOUCHE/src/modd_mpif.f90
@@ -7,7 +7,9 @@
 !-----------------------------------------------------------------
 ! $Source$
 ! $Name$ 
-! $Revision$ 
+! $Revision$
+!  J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE
+!                        & bypass bug with ifort+openmpi
 ! $Date$
 !-----------------------------------------------------------------
 !-----------------------------------------------------------------
@@ -19,5 +21,10 @@ MODULE MODD_MPIF
 #else
   IMPLICIT NONE
   INCLUDE 'mpif.h'
+#ifdef MNH_USE_MPI_STATUSES_IGNORE
+  ! bypass ifort bug with use only MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE
+  double precision XXXXXX
+  equivalence ( MPI_STATUSES_IGNORE , XXXXXX )
+#endif
 #endif
 END MODULE MODD_MPIF
diff --git a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 b/src/LIB/SURCOUCHE/src/modd_var_ll.f90
index d78105df9..8ce4b7d18 100644
--- a/src/LIB/SURCOUCHE/src/modd_var_ll.f90
+++ b/src/LIB/SURCOUCHE/src/modd_var_ll.f90
@@ -44,11 +44,14 @@
 !!    -------------
 !
 !    Original 04/05/99
-
+!    Modifications
+!    J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE
 !-------------------------------------------------------------------------------
 !  
   USE MODD_STRUCTURE_ll
-  !USE MODD_MPIF, ONLY : MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE
+#ifdef MNH_USE_MPI_STATUSES_IGNORE
+  USE MODD_MPIF, ONLY : MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE 
+#endif
 ! 
   IMPLICIT NONE
 !
@@ -138,6 +141,8 @@ INTEGER,SAVE      :: NZ_PROC_ll = 0  ! Number of proc to use in the Z splitting
 !
   INTEGER, PARAMETER :: NMODULO_MSSGTAG = 10
 !
-  INTEGER, POINTER, DIMENSION(:,:) :: MNH_STATUSES_IGNORE 
+#ifndef MNH_USE_MPI_STATUSES_IGNORE
+  INTEGER, POINTER, DIMENSION(:,:) :: MNH_STATUSES_IGNORE
+#endif 
 !
 END MODULE MODD_VAR_ll
diff --git a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
index d01789808..6f7b7342a 100644
--- a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
@@ -104,6 +104,7 @@ CONTAINS
     !     R. Guivarch 29/11/99  x and y splitting -> YSPLITTING 
     !     J. Escobar  24/09/2013 : temp patch for problem of gridnesting with different SHAPE
     !     M.Moge      10/02/2015 construct halo extended (needed for an interpolation in SPAWNING)
+    !     J. Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE
     !
     !-------------------------------------------------------------------------------
     !
@@ -197,10 +198,11 @@ CONTAINS
     MPI_PRECISION  = MNH_MPI_REAL
     MPI_2PRECISION = MNH_MPI_2REAL
     !
-    ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_INGORE
+    ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_IGNORE
     !
-    ALLOCATE(MNH_STATUSES_IGNORE(MPI_STATUS_SIZE,NPROC))
-    !MNH_STATUSES_IGNORE => MPI_STATUSES_IGNORE
+#ifndef MNH_USE_MPI_STATUSES_IGNORE
+    ALLOCATE(MNH_STATUSES_IGNORE(MPI_STATUS_SIZE,NPROC*2))
+#endif
     !
     !-------------------------------------------------------------------------------
     !
diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk
index b11b8f9fc..3f10c0ae0 100644
--- a/src/Rules.LXgfortran.mk
+++ b/src/Rules.LXgfortran.mk
@@ -60,6 +60,7 @@ endif
 FC = gfortran 
 ifeq "$(VER_MPI)" "MPIAUTO"
 F90 = mpif90
+CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE -DUSE_MPI
 else         
 F90 = gfortran
 endif
diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk
index d39475068..3bb26ea7a 100644
--- a/src/Rules.LXifort.mk
+++ b/src/Rules.LXifort.mk
@@ -9,7 +9,7 @@
 ##########################################################
 #OBJDIR_PATH=/home/escj/azertyuiopqsdfghjklm/wxcvbn/azertyuiopqsdfghjklmwxcvbn
 #
-OPT_BASE   =  -g -w -assume nosource_include -assume byterecl -fpe0 -ftz -fpic -traceback  -fp-model precise -switch fe_inline_all_arg_copy_inout
+OPT_BASE   =  -g -w -assume nosource_include -assume byterecl -fpe0 -ftz -fpic -traceback  -fp-model precise -switch fe_inline_all_arg_copy_inout -fno-common
 OPT_PERF0  =  -O0
 OPT_PERF2  =  -O2
 OPT_PERF3  =  -O3 -xHost
@@ -74,6 +74,7 @@ export TAU_MAKEFILE?=/home/escj/PATCH/TAU/TAU-2.21.1-IFORT10-OMPI152-THREAD/x86_
 LIBS += -lz 
 else
 F90 = mpif90
+CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE
 endif
 else
 ifeq "$(VER_MPI)" "MPIINTEL"
@@ -83,6 +84,7 @@ export TAU_MAKEFILE?=/home/escj/PATCH/TAU/TAU-2.21.1-IFORT10-OMPI152-THREAD/x86_
 LIBS += -lz 
 else
 F90 = mpiifort
+CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE -DUSE_MPI
 endif
 ifeq "$(MNH_INT)" "8"
 OPT_BASE         += -ilp64
-- 
GitLab