Newer
Older

WAUTELET Philippe
committed
#MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier

ESCOBAR MUNOZ Juan
committed
#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
TP ?= -tp=native

ESCOBAR MUNOZ Juan
committed
#
#Version of CUDA
#(8.0 at least if compute capability >= 6.0)
CUDALEVEL ?= cuda11.0

ESCOBAR MUNOZ Juan
committed
#
#Compute capability of GPU
#
#OPT_CPTCAP=cc35,cc50,cc70
#OPT_CPTCAP=cc35,cc50,cc60,cc70
OPT_CPTCAP ?= cc70

ESCOBAR MUNOZ Juan
committed
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#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)
#

ESCOBAR MUNOZ Juan
committed
#
# List of Files with compilation problem in O2
#
OBJS_REPROD= spll_mode_sum_ll.o mode_sum_ll.mod spll_mode_repro_sum.o mode_repro_sum.mod

ESCOBAR MUNOZ Juan
committed
OBJS_O1_OPENACC= spll_ice4_tendencies.o spll_turb_ver_thermo_flux.o spll_mode_device.o mode_device.mod spll_mppdb_check3d_real_mg.o \
spll_mppdb_check0d_real_mg.o spll_mode_turb.o mode_turb.mod spll_modd_les_n.o modd_les_n.mod
#
#

ESCOBAR MUNOZ Juan
committed
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) : 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) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF2) -Mvect=nosimd -Minfo=all

ESCOBAR MUNOZ Juan
committed
OBJS_OPENACC = spll_modd_halo_d.o modd_halo_d.mod

ESCOBAR MUNOZ Juan
committed
$(OBJS_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)

ESCOBAR MUNOZ Juan
committed
$(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF1)

ESCOBAR MUNOZ Juan
committed
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

ESCOBAR MUNOZ Juan
committed

ESCOBAR MUNOZ Juan
committed
ifeq "$(OPTLEVEL)" "OPENACC"
CPPFLAGS += -DMNH_OPENACC -DMNH_GPUDIRECT
# -imacros MNH_OPENACC_SHUMAN_MACRO.CPP

ESCOBAR MUNOZ Juan
committed
OPT = -gopt $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
OPT0 = -gopt $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF0)
OPT_NOCB = -gopt $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
CXXFLAGS = -gopt -acc -Kieee -Mnofma $(OPT_OPENACC)
$(OBJS_REPROD) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all -gopt
$(OBJS_O1_OPENACC) : OPT = -gopt $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF1)

ESCOBAR MUNOZ Juan
committed
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) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all

ESCOBAR MUNOZ Juan
committed
$(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF1)
endif
ifeq "$(OPTLEVEL)" "OPENACCO2NOBITREP"
MNH_BITREP = NO
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) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2) -Mvect=nosimd -Minfo=all

ESCOBAR MUNOZ Juan
committed
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
$(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) : 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) : 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=MNH -DMNH_PGI -DSFX_MNH

ESCOBAR MUNOZ Juan
committed
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

ESCOBAR MUNOZ Juan
committed
MNH_BITREP ?= YES

ESCOBAR MUNOZ Juan
committed
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
#

WAUTELET Philippe
committed
## MGSOLVER flag (multigrid solver)
#
#if MNH_MGSOLVER exists => compile the multigrid solver
MNH_MGSOLVER ?= YES
#

ESCOBAR MUNOZ Juan
committed
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
## 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 ... #
# #
##########################################################

ESCOBAR MUNOZ Juan
committed
ifneq "$(OPTLEVEL)" "DEBUG"
OBJS_O1 += spll_modd_isba_n.o modd_isba_n.mod spll_mode_construct_ll.o mode_construct_ll.mod \
spll_init_surf_atm_n.o spll_mode_scatter_ll.o mode_scatter_ll.mod spll_convert_patch_teb.o \
spll_define_mask_n.o spll_del1dfield_ll.o spll_mode_fm.o mode_fm.mod spll_mode_gather_ll.o mode_gather_ll.mod \

ESCOBAR MUNOZ Juan
committed
spll_convect_updraft.o spll_convect_updraft_shal.o \

ESCOBAR MUNOZ Juan
committed
spll_mode_dustopt.o mode_dustopt.mod spll_mode_saltopt.o mode_saltopt.mod \

ESCOBAR MUNOZ Juan
committed
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)

ESCOBAR MUNOZ Juan
committed
OBJS_O0= spll_mode_mppdb.o mode_mppdb.mod \
spll_modd_les_n.o modd_les_n.mod \
spll_default_desfm_n.o \
spll_modd_pack_gr_field_n.o modd_pack_gr_field_n.mod

WAUTELET Philippe
committed
# spll_fft55.o spll_fft.o spll_flat_invz.o \

ESCOBAR MUNOZ Juan
committed
$(OBJS_O0) : OPT = -g $(OPT_BASE) $(OPT_PERF0)

ESCOBAR MUNOZ Juan
committed

ESCOBAR MUNOZ Juan
committed
#default_desfmn: workaround a nvhpc 21.9 bug (run stall in default_desfmn)

ESCOBAR MUNOZ Juan
committed
# 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

ESCOBAR MUNOZ Juan
committed
OBJS_O2= spll_mode_device.o mode_device.mod

ESCOBAR MUNOZ Juan
committed
$(OBJS_O2) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)

ESCOBAR MUNOZ Juan
committed
endif

ESCOBAR MUNOZ Juan
committed
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"

ESCOBAR MUNOZ Juan
committed
OBJS_I4=spll_modd_netcdf.o modd_netcdf.mod

ESCOBAR MUNOZ Juan
committed
$(OBJS_I4) : OPT = $(OPT_BASE_I4)
endif

ESCOBAR MUNOZ Juan
committed
SPLL = spll_new