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
#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

Juan Escobar
committed
OPT_BASE = $(TP) -Mbackslash -Mextend -Kieee -Mnofma -Mallocatable=95

ESCOBAR MUNOZ Juan
committed
#
OPT_PERF0 = -O0
OPT_PERF1 = -O1
OPT_PERF2 = -O2
#

ESCOBAR MUNOZ Juan
committed
OPT_MANAGED = -Mframe -Mnostack_arrays -acc=host,gpu -gpu=nofma,$(OPT_CPTCAP),$(CUDALEVEL),managed,lineinfo $(OPT_INFO) $(OPT_PROF)

ESCOBAR MUNOZ Juan
committed
OPT_MULTICORE = -acc=multicore $(OPT_INFO) $(OPT_PROF)
OPT_NOOPENACC = -acc=host $(OPT_INFO) $(OPT_PROF)

ESCOBAR MUNOZ Juan
committed
OPT_OPENACC = -Mframe -Mnostack_arrays -acc=host,gpu -gpu=nofma,$(OPT_CPTCAP),$(CUDALEVEL),lineinfo $(OPT_INFO) $(OPT_PROF)

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

Juan Escobar
committed
OBJS_OPENACC = spll_modd_halo_d.o modd_halo_d.mod spll_mode_mnh_allocate_mg_halo.o mode_mnh_allocate_mg_halo.mod
$(OBJS_OPENACC) : OPT = -g $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
$(OBJS_O1_OPENACC) : OPT = -g $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF1)

ESCOBAR MUNOZ Juan
committed
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 spll_mode_mnh_allocate_mg_halo.o mode_mnh_allocate_mg_halo.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
$(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF1)
endif
#
ifeq "$(OPTLEVEL)" "OPENACCDEFONLY"
CPPFLAGS += -DMNH_OPENACC -D_FAKEOPENACC

ESCOBAR MUNOZ Juan
committed
OPT = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2)

ESCOBAR MUNOZ Juan
committed
OPT0 = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF0)

ESCOBAR MUNOZ Juan
committed
OPT_NOCB = -g $(OPT_BASE) $(OPT_NOOPENACC) $(OPT_PERF2)

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

ESCOBAR Juan
committed
CC = gcc

ESCOBAR MUNOZ Juan
committed
CXXFLAGS += $(TP)

ESCOBAR Juan
committed
#CFLAGS += $(TP)

ESCOBAR MUNOZ Juan
committed
FC = pgf90
ifeq "$(VER_MPI)" "MPIAUTO"
F90 = mpif90

ESCOBAR Juan
committed
#CC = mpicc

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

ESCOBAR MUNOZ Juan
committed
# ArmForge/MAP/DDT: Exemple of LDFLAGS for executable directly linked with MAP,lib
#
#VERMPI=3.1.5
#VERMPI ?= 4.0.5
#LDFLAGS += -L/users/m23008/escobar/MAP/$(VERMPI) -lmap-sampler-pmpi -lmap-sampler -Wl,--eh-frame-hdr -Wl,-rpath=/users/m23008/escobar/MAP/$(VERMPI)
#

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

WAUTELET Philippe
committed
CPPFLAGS_MNH = -DMNH=MNH -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
## 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"

ESCOBAR MUNOZ Juan
committed
HDF_OPT ?= -g
NETCDF_OPT ?= -g

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

Juan Escobar
committed
$(OBJS_O1) : OPT = -g $(OPT_BASE) $(OPT_PERF1)

ESCOBAR MUNOZ Juan
committed

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

Juan Escobar
committed

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

RODIER Quentin
committed
PHYEX_OPTDEFAULT = --addMPPDB_CHECKS --addStack MESONH --stopScopes toto --mathFunctoBRFunc

RODIER Quentin
committed
PHYEX_LIST = $(notdir $(shell find PHYEX/micro PHYEX/turb -follow -type f -name "*.f*" -not -name "minpack.f90" | sed -e 's/\(.*\)\(\.\).*/\1.D/g' ))
$(PHYEX_LIST) : PYFT = pyft_tool.py $(PHYEX_OPTDEFAULT)

RODIER Quentin
committed
PHYEX_SHUMAN = mode_tke_eps_sources.D mode_turb_ver_thermo_flux.D mode_turb_ver_thermo_corr.D mode_turb_ver_dyn_flux.D mode_turb_hor_splt.D mode_turb_ver_sv_corr.D mode_turb_ver_sv_flux.D mode_turb_hor_thermo_flux.D mode_turb_hor_thermo_corr.D mode_turb_hor_uv.D

RODIER Quentin
committed
$(PHYEX_SHUMAN) : PYFT = pyft_tool.py --shumanFUNCtoCALL --expandAllArraysConcurrent $(PHYEX_OPTDEFAULT)