From 524481b1ad35788b69c435b645323638a8de2cc9 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Tue, 22 Jan 2019 17:34:52 +0100
Subject: [PATCH] Philippe 22/01/2019: add rules to compile with NAG compiler +
 removed old NAGf95 rules

---
 src/LIB/SURCOUCHE/src/mode_io.f90            |   8 +-
 src/Makefile                                 |   6 +-
 src/{Rules.LXNAGf95.mk => Rules.LXNAGfor.mk} | 105 +++++++++++--------
 3 files changed, 71 insertions(+), 48 deletions(-)
 rename src/{Rules.LXNAGf95.mk => Rules.LXNAGfor.mk} (55%)

diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 0077216d4..0434b5ea1 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -187,7 +187,7 @@ CONTAINS
     CHARACTER(len=5)                      :: CFILE
     INTEGER                               :: IFILE, IRANK_PROCIO
 
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
     CHARACTER(len=20)    :: YSTATUS
     CHARACTER(len=20)    :: YACCESS
     CHARACTER(len=20)    :: YFORM
@@ -257,7 +257,7 @@ CONTAINS
        RETURN
     END IF
 
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
     !JUAN
     IF (PRESENT(STATUS)) THEN
        YSTATUS=STATUS
@@ -355,7 +355,7 @@ CONTAINS
                PAD=PAD)
 
 #else
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
           !JUAN : 31/03/2000 modif pour acces direct
           IF (YACCESS=='STREAM') THEN
              OPEN(NEWUNIT=TPFILE%NLU,     &
@@ -482,7 +482,7 @@ CONTAINS
             PAD=PAD)
 
 #else
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(NAGf95) || defined(MNH_LINUX)
+#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
        IF (ACCESS=='DIRECT') THEN
           OPEN(NEWUNIT=TPFILE%NLU,                    &
                FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), &
diff --git a/src/Makefile b/src/Makefile
index 15510f080..ef4e4220c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -326,7 +326,9 @@ A64=A64
 endif
 gribapi : $(GRIBAPI_INC)
 $(GRIBAPI_INC) : 
-	cd ${DIR_GRIBAPI} && ./configure --disable-shared --disable-jpeg --prefix=${GRIBAPI_PATH} CC="$(CC)" FC="$(FC)" ${GRIBAPI_CONF} && $(MAKE) -j 1 clean && $(MAKE) -j 1 && $(MAKE) -j 1 install && $(MAKE) -j 1 clean
+	cd ${DIR_GRIBAPI} && ./configure --disable-shared --disable-jpeg --prefix=${GRIBAPI_PATH} CC="$(CC)" \
+	FC="$(FC)" FCFLAGS="$(GRIB_FLAGS)" ${GRIBAPI_CONF} && $(MAKE) -j 1 clean && \
+	$(MAKE) -j 1 && $(MAKE) -j 1 install && $(MAKE) -j 1 clean
 
 gribapi_clean :
 	- [  -d ${GRIBAPI_PATH} ] && rm -fr ${GRIBAPI_PATH} 
@@ -351,7 +353,7 @@ $(CDF_MOD) :
 	CC="$(CC)" CFLAGS="$(NETCDF_OPT)" CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lhdf5_hl -lhdf5 -lsz -laec -lz" && \
 	$(MAKE) && $(MAKE) install && $(MAKE) clean
 	cd ${DIR_CDFF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 \
-	CC="$(CC)" CFLAGS="$(NETCDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT)" FFLAGS="$(NETCDF_OPT)"  \
+	CC="$(CC)" CFLAGS="$(NETCDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT) $(NETCDF_SUPPFLAGS)" FFLAGS="$(NETCDF_OPT)"  \
 	CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz" && \
 	$(MAKE) && $(MAKE) install && $(MAKE) clean
 
diff --git a/src/Rules.LXNAGf95.mk b/src/Rules.LXNAGfor.mk
similarity index 55%
rename from src/Rules.LXNAGf95.mk
rename to src/Rules.LXNAGfor.mk
index f8ac45d58..d7a8adf96 100644
--- a/src/Rules.LXNAGf95.mk
+++ b/src/Rules.LXNAGfor.mk
@@ -1,18 +1,42 @@
-#MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+#MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 #MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+#MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 #MNH_LIC for details. version 1.
 ##########################################################
 #                                                        #
 # Compiler Options                                       #
 #                                                        #
 ##########################################################
-#OBJDIR_PATH=/home/escj/azertyuiopqsdfghjklm/wxcvbn/azertyuiopqsdfghjklmwxcvbn
 #
-OPT_BASE  = -r8 -mdir $(OBJDIR) -g -gline -kind=byte -w -maxcontin=200 -PIC
+OPT_BASE  = -g -gline -kind=byte -PIC -wmismatch=$(LIST_MISMATCH)
 OPT_PERF0 = -O0
 OPT_PERF2 = -O2
 OPT_CHECK = -C -nan
+OPT_I8    = -i8
+OPT_R8    = -r8
+#
+# Real/Integer 4/8 option
+#
+MNH_REAL  ?=8
+MNH_INT   ?=4
+LFI_RECL  ?=512
+#
+#
+ifneq "$(MNH_REAL)" "4"
+OPT_BASE           += $(OPT_R8)
+CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
+endif
+#
+OPT_BASE_I4       := $(OPT_BASE)
+ifeq "$(MNH_INT)" "8"
+OPT_BASE          += $(OPT_I8)
+LFI_INT           ?=8
+MNH_MPI_RANK_KIND ?=8
+else
+MNH_MPI_RANK_KIND ?=4
+LFI_INT           ?=4
+endif
+#
 #
 OPT       = $(OPT_BASE) $(OPT_PERF2) 
 OPT0      = $(OPT_BASE) $(OPT_PERF0) 
@@ -22,37 +46,50 @@ ifeq "$(OPTLEVEL)" "DEBUG"
 OPT       = $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK)
 OPT0      = $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK)
 OPT_NOCB  = $(OPT_BASE) $(OPT_PERF0)
+CFLAGS    += -g -O0
+endif
+#
+#  
+CC = gcc
+FC = nagfor 
+ifeq "$(VER_MPI)" "MPIAUTO"
+F90 = mpifort
+CPPFLAGS_SURCOUCHE += -DMNH_USE_MPI_STATUSES_IGNORE
+else         
+F90 = nagfor
 endif
 #
-#            
-F90 = f95
 F90FLAGS      =  $(OPT) 
 F77 = $(F90)
-#F77FLAGS      =  $(OPT) -132 -fixed
-F77FLAGS      =  $(OPT) -fixed
+F77FLAGS      =  $(OPT) -dusty
 FX90 = $(F90)
-#FX90FLAGS     =  $(OPT) -132 -fixed
 FX90FLAGS     =  $(OPT) -fixed
 #
-LDFLAGS   =  -Wl,-Xlinker,-noinhibit-exec  -Wl,-Xlinker,-warn-once
+#LDFLAGS   =  -Wl,-Xlinker,-noinhibit-exec  -Wl,-Xlinker,-warn-once
 #
 # preprocessing flags 
 #
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -DMNH_MPI_BSEND -DNAGf95
+CPPFLAGS_SURCOUCHE += -DMNH_LINUX -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
 
 #
 # Gribex flags
 #
 TARGET_GRIBEX=linux
-CNAME_GRIBEX=f95
+CNAME_GRIBEX=_nagfor
+GRIB_FLAGS = -dusty -kind=byte
 #
-# LIBTOOLS flags
+# Netcdf/HDF5 flags
+#
+HDF_CONF= CFLAGS=-std=c99
+NETCDF_SUPPFLAGS = -dusty -kind=byte
+#
+## LIBTOOLS flags
 #
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
@@ -62,7 +99,6 @@ MNH_TOOLS = yes
 # Source of MESONH PACKAGE  Distribution                 #
 #                                                        #
 ##########################################################
-#DIR_SURFEX      += ARCH_SRC/surfex
 #
 include Makefile.MESONH.mk
 #
@@ -74,31 +110,16 @@ include Makefile.MESONH.mk
 #         etc ...                                        #
 #                                                        #
 ##########################################################
-#
-#  Where to find precompiled system module for "NAGf95"
-#  like "f90_unix.mod"  , etc ...
-#MODULE_SYSTEM = /opt/F95_42/lib/bytes
-MODULE_SYSTEM = /usr/local/lib/NAGWare/bytes
-all : $(MODULE_SYSTEM)
-$(MODULE_SYSTEM) :
-	@test -d $@ || \
-        ( echo ATTENTION :: Rules.LXNAGF95 ; \
-          echo MODULE_SYSTEM=$@ n existe pas ; exit 1 )
-VPATH += $(MODULE_SYSTEM)
-INC   += -I$(MODULE_SYSTEM)
 
-#
-# non conformance des argument/routine dans les appels MPI
-#
-OBJS1 = spll_mode_exchange2_ll.o spll_mode_exchange_ll.o spll_mode_fm.o \
-spll_mode_fmread.o spll_mode_fmwrit.o spll_mode_gather_ll.o \
-spll_mode_init_ll.o spll_mode_io_ll.o spll_mode_scatter_ll.o \
-spll_mode_sum2_ll.o spll_mode_sum_ll.o spll_mode_tools_ll.o \
-spll_zdiffusetup.o spll_lapack.o spll_fm_writ_ll.o \
-spll_NEWLFI_ALL.o spll_fm_read_ll.o \
-mode_tools_ll.mod mode_gather_ll.mod \
-mode_fmwrit.mod mode_scatter_ll.mod \
-mode_fmread.mod mode_sum_ll.mod \
-mode_exchange_ll.mod
-#
-$(OBJS1): OPT = $(OPT_BASE) $(OPT_PERF0) -dusty 
+ifneq "$(findstring 8,$(LFI_INT))" ""
+OBJS_I8=spll_NEWLFI_ALL.o
+$(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
+endif
+
+ifeq "$(MNH_INT)" "8"
+OBJS_I4=spll_modd_netcdf.o
+$(OBJS_I4) : OPT = $(OPT_BASE_I4)
+endif
+# 
+LIST_MISMATCH=MPI_Allgatherv,MPI_Allreduce,MPI_Bcast,MPI_Bsend,MPI_Gather,MPI_Gatherv,MPI_Recv,LEPOLY
+
-- 
GitLab