From e0fa5e6234a6a446c06eaab8ce3a214e3cbf6657 Mon Sep 17 00:00:00 2001
From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Fri, 26 Aug 2022 17:19:41 +0200
Subject: [PATCH] Juan 26/08/2022:Rules.LXnvhpc2202.mk, new file , and set CPP
 to use mnh_expand+OPENACC

---
 src/Rules.LXnvhpc2202.mk | 303 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 303 insertions(+)
 create mode 100644 src/Rules.LXnvhpc2202.mk

diff --git a/src/Rules.LXnvhpc2202.mk b/src/Rules.LXnvhpc2202.mk
new file mode 100644
index 000000000..698193af6
--- /dev/null
+++ b/src/Rules.LXnvhpc2202.mk
@@ -0,0 +1,303 @@
+#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 for details. version 1.
+##########################################################
+#                                                        #
+# Compiler Options                                       #
+#                                                        #
+##########################################################
+#OBJDIR_PATH=${WORKDIR}
+#
+# Processor type
+#TP= -tp=sandybridge, haswell, skylake
+#all x86 TP= -tp=px
+#Pentium4 64-bit: p7-64
+#Nuwa n375: Xeon E5-2680 v2: Ivy Bridge => between Sandy bridge and Haswell => sandybridge
+#aeropc45-3: Xeon W-2265: Cascade Lake (version amelioree de Skylake) => skylake
+#TP= -tp=sandybridge
+#TP= -tp=skylake
+#TP= -tp=p7-64
+TP= -tp=px
+#
+#Version of CUDA
+#(8.0 at least if compute capability >= 6.0)
+CUDALEVEL=cuda11.4
+#
+#Compute capability of GPU
+#
+#OPT_CPTCAP=cc35,cc50,cc70
+#OPT_CPTCAP=cc35,cc50,cc60,cc70
+OPT_CPTCAP=cc70
+#Aeropc45: cc50
+#Nuwa: cc35
+#Ouessant Firestone K80: cc35
+#Ouessant Minsky P100: cc60
+#
+#Compiler info level
+#OPT_INFO = -Minfo=ftn,accel,inline,ipa,loop,lre,mp,opt,par,unified,vect,ccff
+OPT_INFO = -Minfo=accel
+#
+#Compiler profiling options
+#OPT_PROF = -Mprof=ccff
+#
+#PW: if -Ktrap=fp: nvprof/pgprof do not work   OPT_BASE   =  -Ktrap=fp ...
+#PW: -g: big impact on performance
+OPT_BASE   =  $(TP) -Mbackslash -Mextend -Kieee -Mnofma  -Mallocatable=95 
+#
+OPT_PERF0  =  -O0
+OPT_PERF1  =  -O1
+OPT_PERF2  =  -O2
+#
+OPT_MANAGED    = -Mframe -Mnostack_arrays -acc=host,gpu -gpu=nofma,$(OPT_CPTCAP),$(CUDALEVEL),managed $(OPT_INFO) $(OPT_PROF)
+OPT_MULTICORE  = -acc=multicore $(OPT_INFO) $(OPT_PROF)
+OPT_NOOPENACC  = -acc=host $(OPT_INFO) $(OPT_PROF)
+OPT_OPENACC    = -Mframe -Mnostack_arrays -acc=host,gpu -gpu=nofma,$(OPT_CPTCAP),$(CUDALEVEL) $(OPT_INFO) $(OPT_PROF)
+#
+OPT_CHECK  =  -C #-Mchkfpstk -Mchkptr
+OPT_I8     =  -i8
+OPT_R8     =  -r8
+#
+ifeq "$(VER_USER)" "ZSOLVER"
+CPPFLAGS  += -DCARTESIANGEOMETRY -DPIECEWISELINEAR
+PROG_LIST += MG_MAIN MG_MAIN_MNH_ALL
+endif
+#
+IGNORE_OBJS += pgprof.o
+#
+# Real/integer 4/8 option
+#
+MNH_REAL  ?=8
+MNH_INT   ?=4
+#
+ifneq "$(MNH_REAL)" "4"
+OPT_BASE           += $(OPT_R8)
+endif
+#
+OPT_BASE_I4       := $(OPT_BASE)
+ifeq "$(MNH_INT)" "8"
+OPT_BASE          += $(OPT_I8)
+LFI_INT           ?=8
+else
+LFI_INT           ?=4
+endif
+#
+#
+OPT       = $(OPT_BASE) $(OPT_PERF2)
+OPT0      = $(OPT_BASE) $(OPT_PERF0)
+OPT_NOCB  = $(OPT_BASE) $(OPT_PERF2)
+#
+ifeq "$(OPTLEVEL)" "DEBUG"
+OPT       = -g $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK)
+OPT0      = -g $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK)
+OPT_NOCB  = -g $(OPT_BASE) $(OPT_PERF0)
+endif
+#
+ifeq "$(OPTLEVEL)" "MANAGED"
+CPPFLAGS    += -DMNH_OPENACC -DMNH_GPUDIRECT
+OPT       = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2)
+OPT0      = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF0)
+OPT_NOCB  = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) 
+CXXFLAGS = -g -acc -Kieee -Mnofma $(OPT_MANAGED)
+OBJS_REPROD= spll_mode_sum_ll.o
+$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g
+endif
+#
+ifeq "$(OPTLEVEL)" "MANAGEDO2"
+CPPFLAGS    += -DMNH_OPENACC -DMNH_GPUDIRECT
+OPT       = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2)
+OPT0      = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF0)
+OPT_NOCB  = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) 
+CXXFLAGS = -acc -Kieee -Mnofma $(OPT_MANAGED) -gpu=nofma
+OBJS_REPROD= spll_mode_sum_ll.o
+$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) -Mvect=nosimd -Minfo=all
+OBJS_OPENACC = spll_modd_halo_d.o
+$(OBJS_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
+OBJS_O1_MANAGED= spll_ice4_tendencies.o spll_turb_ver_thermo_flux.o spll_turb_hor_dyn_corr.o spll_mode_turb.o
+$(OBJS_O1_MANAGED) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF1)
+endif
+#
+ifeq "$(OPTLEVEL)" "MULTICORE"
+CPPFLAGS    += -DMNH_OPENACC
+OPT       = $(OPT_BASE) $(OPT_MULTICORE) 
+OPT0      = $(OPT_BASE) $(OPT_MULTICORE) $(OPT_PERF0)
+OPT_NOCB  = $(OPT_BASE) $(OPT_MULTICORE) 
+CXXFLAGS = -acc -Kieee -Mnofma $(OPT_MULTICORE)
+endif
+#
+ifeq "$(OPTLEVEL)" "OPENACC"
+CPPFLAGS    += -DMNH_OPENACC -DMNH_GPUDIRECT
+# -imacros MNH_OPENACC_SHUMAN_MACRO.CPP
+OPT       = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0)
+OPT0      = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0)
+OPT_NOCB  = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0) 
+CXXFLAGS =  -g -acc -Kieee -Mnofma $(OPT_OPENACC)
+OBJS_REPROD= spll_mode_sum_ll.o
+$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g
+endif
+ifeq "$(OPTLEVEL)" "OPENACCO2"
+CPPFLAGS    += -DMNH_OPENACC -DMNH_GPUDIRECT
+OPT       = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
+OPT0      = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0)
+OPT_NOCB  = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) 
+CXXFLAGS = -acc -Kieee -Mnofma $(OPT_OPENACC)
+OBJS_REPROD= spll_mode_sum_ll.o 
+$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all
+OBJS_O1_OPENACC= spll_ice4_tendencies.o spll_turb_ver_thermo_flux.o spll_mode_device.o spll_mppdb_check3d_real_mg.o \
+                 spll_mppdb_check0d_real_mg.o spll_mode_turb.o
+$(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF1)
+endif
+#
+ifeq "$(OPTLEVEL)" "OPENACCDEFONLY"
+CPPFLAGS    += -DMNH_OPENACC -D_FAKEOPENACC
+OPT       = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0)
+OPT0      = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0)
+OPT_NOCB  = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0)
+CXXFLAGS = -Kieee -Mnofma $(OPT_NOOPENACC) 
+OBJS_REPROD= spll_mode_sum_ll.o
+$(OBJS_REPROD) : OPT = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all 
+endif
+#
+ifeq "$(OPTLEVEL)" "NOOPENACC"
+#CPPFLAGS   += -D_OPT_LINEARIZED_LOOPS
+OPT       = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2)
+OPT0      = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0)
+OPT_NOCB  = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2)
+CXXFLAGS = -Kieee -Mnofma $(OPT_NOOPENACC)
+OBJS_REPROD= spll_mode_sum_ll.o
+$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -g
+endif
+#
+CC = pgcc
+CXXFLAGS += $(TP)
+CFLAGS   += $(TP)
+FC = pgf90
+ifeq "$(VER_MPI)" "MPIAUTO"
+F90 = mpif90
+CC = mpicc
+CXX = mpicxx
+else
+F90 = pgf90
+CC = pgcc
+CXX = pgcxx
+endif
+#
+F77FLAGS  =  $(OPT)
+F77 = $(F90)
+F90FLAGS  =  $(OPT)
+FX90 = $(F90)
+FX90FLAGS =  $(OPT)
+#
+LDFLAGS    =   -Wl,-warn-once $(OPT)
+#
+# preprocessing flags 
+#
+#CPP = cpp -P -traditional -Wcomment -D_OPENACC=201711 -imacros MNH_OPENACC_NV_CR.CPP
+CPP = mnh_expand -D_OPENACC=201711 -imacros MNH_OPENACC_NV_CR.CPP
+#
+CPPFLAGS_C         = -DLITTLE_endian
+CPPFLAGS_SURFEX    =
+CPPFLAGS_SURCOUCHE += -DMNH_COMPILER_NVHPC
+CPPFLAGS_RAD       =
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
+CPPFLAGS_MNH       = -DMNH -DMNH_PGI -DSFX_MNH
+CPPFLAGS_MNH      += -Uvector -Upixel
+CPPFLAGS_MNH      += -DMNH_EXPAND -DMNH_EXPAND_OPENACC
+#CPPFLAGS_MNH      += -imacros MNH_OPENACC_NV_CR.CPP
+#
+# BITREP flags
+#
+#if MNH_BITREP exists => compile with the BITREP library
+MNH_BITREP = YES
+ifeq "$(MNH_BITREP)" "YES"
+CPPFLAGS_MNH += -DMNH_BITREP
+endif
+#
+# LIBTOOLS flags
+#
+#if MNH_TOOLS exists => compile the tools
+MNH_TOOLS = yes
+#
+## IOLFI flag
+#
+#if MNH_IOLFI exists => compile the NEWLFI library (for LFI files)
+MNH_IOLFI=yes
+#
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
+## ecCodes or grib_api selection
+#MNH_GRIBAPI: if set to no:  use ecCodes
+#             if set to yes: use grib_api (deprecated library)
+#
+MNH_GRIBAPI=no
+#
+# cdf / hdf
+#
+CDF_CONF="CPP=cpp"
+HDF_CONF="CPP=cpp"
+#
+##########################################################
+#                                                        #
+# Source of MESONH PACKAGE  Distribution                 #
+#                                                        #
+##########################################################
+#DIR_SURFEX   += ARCH_SRC/surfex.MNH-462
+
+OBJS_NOCB +=  spll_isba.o
+#
+include Makefile.MESONH.mk
+#
+##########################################################
+#                                                        #
+# extra VPATH, Compilation flag modification             #
+#         systeme module , etc ...                       #
+#         external precompiled module librairie          #
+#         etc ...                                        #
+#                                                        #
+##########################################################
+OBJS_O1 += spll_modd_isba_n.o spll_mode_construct_ll.o \
+         spll_init_surf_atm_n.o spll_mode_scatter_ll.o spll_convert_patch_teb.o \
+         spll_define_mask_n.o spll_del1dfield_ll.o spll_mode_fm.o spll_mode_gather_ll.o \
+         spll_convect_updraft.o spll_convect_updraft_shal.o \
+         spll_mode_dustopt.o spll_mode_saltopt.o \
+         spll_aeroopt_get.o spll_write_lfifm1_for_diag_supp.o spll_write_lfifm1_for_diag.o spll_write_lfifm_n.o \
+
+#spll_unpack_1d_2d_from2d.o
+#spll_pack_isba_patch_n.o 
+#spll_phys_param_n.o
+$(OBJS_O1) : OPT = $(OPT_BASE) $(OPT_PERF1)
+
+OBJS_O0= spll_mode_mppdb.o \
+         spll_fft55.o spll_fft.o spll_flat_invz.o \
+         spll_mode_repro_sum.o \
+         spll_modd_les_n.o \
+         spll_default_desfm_n.o
+#default_desfmn: workaround a nvhpc 21.9 bug (run stall in default_desfmn)
+         
+
+#         spll_fast_terms.o 
+#         spll_modd_ch_solver_n.o \
+#         spll_modd_dummy_gr_field_n.o spll_modd_dyn_n.o 
+# spll_mode_sum_ll.o
+$(OBJS_O0) : OPT = -g $(OPT_BASE) $(OPT_PERF0)
+
+OBJS_O2= spll_mode_device.o
+$(OBJS_O2) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
+
+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
-- 
GitLab