From ca0b1f1dd04817d2af34e2ecd03f213f07d00e7b Mon Sep 17 00:00:00 2001
From: Juan ESCOBAR <juan.escobar@aero.obs-mip.fr>
Date: Fri, 16 Dec 2022 14:09:29 +0100
Subject: [PATCH] Juan 16/12/2022:Makefile & CO:New spll_lst/spll_new command
 for 1 time compilation in master & user mode

---
 bin/spll_lst             |   9 +-
 bin/spll_new             | 174 +++++++++++++++++++++++++++++++++++++++
 src/Makefile             |  16 ++--
 src/Rules.LXcray.mk      |  45 +++++-----
 src/Rules.LXnvhpc2202.mk |  80 +++++++++++-------
 5 files changed, 263 insertions(+), 61 deletions(-)
 create mode 100755 bin/spll_new

diff --git a/bin/spll_lst b/bin/spll_lst
index 372f3cac0..5d8e69438 100755
--- a/bin/spll_lst
+++ b/bin/spll_lst
@@ -140,8 +140,13 @@ fi
 dep=`egrep -i "^[[:space:]]*use "    $spllfile | sed -e 's/,/ /g' | awk '{ print '${TOCASE}'($2)".mod"}' | sort -u `
 mod=`egrep -i "^[[:space:]]*module " $spllfile | sed -e 's/,/ /g' | awk '{ print '${TOCASE}'($2)".mod"}' | sort -u | grep -iv procedure `
 
-echo $mod        : $spllbase.o    >> $DIRNAME/$BASENAME2.D
-echo $spllbase.o : $spllfile $dep >> $DIRNAME/$BASENAME2.D
+if [ "x$mod" != "x" ]
+then
+echo $spllbase.o :                >> $DIRNAME/$BASENAME2.D
+echo $mod        : $spllfile $dep >> $DIRNAME/$BASENAME2.D
+else
+echo $spllbase.o : $spllfile $dep >> $DIRNAME/$BASENAME2.D    
+fi
 
 if [ "$SUF" = "f90" ]
 then
diff --git a/bin/spll_new b/bin/spll_new
new file mode 100755
index 000000000..1db545d54
--- /dev/null
+++ b/bin/spll_new
@@ -0,0 +1,174 @@
+#!/bin/bash
+#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.
+#set -x
+if [ $# -ne 2 ]
+then
+echo ERROR USAGE :: spll NSOURCE file
+exit 1
+fi
+NSOURCE=$1
+file=$2
+DIRNAME=`dirname $file`
+BASENAME=`basename $file`
+SUF=`echo $BASENAME | awk -F'.' '{print$2}'`
+BASENAME2=`basename $BASENAME .$SUF`
+LOCAL=$PWD
+TOCASE=${TOCASE-"tolower"}
+#
+export PERL5LIB=$SRC_MESONH/bin
+export FILE_WITHOUT_INTERFACE_NEDEED="\
+rttov.*.F90|rttvi.F90|tstrad.*.F90|\
+ch_f77.fx90|nband_model.fx90|BASIC.f90|mode_tmat.f90|\
+ini_cmfshall.f90|mode_double_double.f90|mode_fgau.f90|\
+extern_usersurc_ll.f90|\
+extern_userio.f90|fmreadwrit.f90|fm_read_ll.f90|poub.f90|\
+mode_glt.*.F90|\
+rrtm_.*.F90|srtm_.*.F90|\
+libs4py.f90|\
+ec_meminfo.F90"
+#
+
+if [ "$SUF" = "f" ]
+then
+
+echo "!depfile:$BASENAME2.D" > $DIRNAME/spll_$BASENAME
+cat $file                   >> $DIRNAME/spll_$BASENAME
+echo "#" $file > $DIRNAME/$BASENAME2.D
+
+else
+
+TMP=/tmp/split.${USER}.$$
+mkdir $TMP 
+trap "[ -d $TMP ] && rm -rf $TMP" 0
+
+export LOC_INTFBDIR=$TMP
+export INTFBDIR=$TMP
+
+#cp $file $TMP/fichier_a_split.f90
+cp  $file $TMP/$BASENAME
+echo DIRNAME=$DIRNAME BASENAME=$BASENAME
+
+#
+# Split des sources  
+#
+( 
+cd $TMP 
+spl ${BASENAME} > liste_file
+)
+#
+#generation de l'interface
+#
+(
+cd $TMP
+if [ "`ls  modi_* 2>/dev/null`" = ""  ] 
+then
+if [ "`echo $BASENAME | egrep  -i $FILE_WITHOUT_INTERFACE_NEDEED `" = "" ]
+then
+    for sfile in `cat liste_file`
+    do 
+	if [ "`egrep -i '^ *module|^ *program' $sfile`" = "" ]
+        then
+	if [ "$SUF" = "f90" ]
+	then
+	    if [ "${CHECK_MODI}" != "" ] 
+            then
+	    #echo "HELLO JUAN OK :: $sfile " 
+	    BASENAME_MODI=$( basename $sfile .$SUF )
+	    echo "!auto_modi_in_contains" > $sfile.tmp
+	    echo "module modi_${BASENAME_MODI}" >> $sfile.tmp
+	    echo " contains " >>  $sfile.tmp
+            cat $sfile >> $sfile.tmp
+	    echo "end module modi_${BASENAME_MODI}" >> $sfile.tmp
+	    mv $sfile.tmp $sfile
+            else
+	    make_intfbl_f90.pl $sfile
+            fi
+	elif [ "$SUF" = "fx90" ]
+	then
+	    make_intfbl_f77.pl $sfile
+	fi
+        fi
+    done
+fi
+fi
+ls -1 $TMP > liste_file
+egrep -v "liste_file"  liste_file > liste_file2
+)
+#
+# génération des dependances
+#
+( 
+cd $TMP 
+echo "#===========  $BASENAME2.$SUF dependence ==========================" > $DIRNAME/$BASENAME2.D
+
+for sfile in `cat liste_file2`
+do 
+#
+# preparation of splitted file 
+#
+base=`echo $sfile | awk -F'.' '{print$1}'`
+spllbase="spll_$base"
+spllfile="$spllbase.$SUF"
+echo "#---------------------- splitted $spllfile dependence -----------" >> $DIRNAME/$BASENAME2.D
+#
+echo "!depfile:$BASENAME2.D" > $spllfile
+#
+    if [ "`grep -l '^[^\!]*\$n' $sfile`" != "" ]  
+    then 
+#   clonage of "$n" file 
+	let iloop=0
+        while [ $iloop -lt $NSOURCE ] 
+        do 
+            let iloop=iloop+1
+	    sed -e 's/$n/'$iloop'/g' $sfile >> $spllfile
+        done 
+    else
+    cat $sfile >> $spllfile
+    fi 
+#
+# if splitted file differente of old one, update ...
+# 
+
+if [ "`diff $spllfile $DIRNAME/$spllfile 2>&1 `" != "" ]
+then
+  cp $spllfile $DIRNAME/$spllfile
+  touch $DIRNAME/$BASENAME2.D
+fi 
+dep=`egrep -i "^[[:space:]]*use "    $spllfile | sed -e 's/,/ /g' | awk '{ print '${TOCASE}'($2)".mod"}' | sort -u `
+mod=`egrep -i "^[[:space:]]*module " $spllfile | sed -e 's/,/ /g' | awk '{ print '${TOCASE}'($2)".mod"}' | sort -u | grep -iv procedure `
+
+if [ "x$mod" != "x" ]
+then
+echo $spllbase.o :                >> $DIRNAME/$BASENAME2.D
+echo $mod        : $spllfile $dep >> $DIRNAME/$BASENAME2.D
+else
+echo $spllbase.o : $spllfile $dep >> $DIRNAME/$BASENAME2.D    
+fi
+
+if [ "$SUF" = "f90" ]
+then
+echo "	"' $(F90) -I$(OBJDIR)/MOD  $(INC) -c $(F90FLAGS) $<' >> $DIRNAME/$BASENAME2.D
+else
+echo "	"' cp $< $(OBJDIR)/$(*F).f ' >> $DIRNAME/$BASENAME2.D
+echo "	"' $(FX90) -I$(OBJDIR)/MOD $(INC) -c $(FX90FLAGS) $(OBJDIR)/$(*F).f ' >> $DIRNAME/$BASENAME2.D
+echo "	"' rm $(OBJDIR)/$(*F).f '    >> $DIRNAME/$BASENAME2.D
+fi
+echo "	 -mv  $spllbase.o"' $(OBJDIR)/. || '"echo OK $spllbase.o " >> $DIRNAME/$BASENAME2.D
+for filemod in $mod
+do
+echo "	 -mv  $filemod "' $(OBJDIR)/MOD/. || '"echo OK $filemod " >> $DIRNAME/$BASENAME2.D
+done
+
+unset dep mod
+
+done
+touch $DIRNAME/$BASENAME2.D
+
+)
+rm -fr $TMP
+
+fi
+
diff --git a/src/Makefile b/src/Makefile
index 7d41aea42..ef8e3f155 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -549,20 +549,20 @@ SPLL ?= spll
 # GENERATION OF OBJET FILES : *.o
 #
 
-%.o:%.f90
-	echo "inc=$(INC)"
-	$(F90) -I$(OBJDIR) $(INC) -c $(F90FLAGS) $< 
-	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
+#%.o:%.f90
+#	echo "inc=$(INC)"
+#	$(F90) -I$(OBJDIR) $(INC) -c $(F90FLAGS) $< 
+#	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
 
 %.o:%.f
 	echo "inc=$(INC)"
 	$(F77) -I$(OBJDIR) $(INC) -c $(F77FLAGS)  $<  
 	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
 
-%.o:%.fx90
-	cp $< $(OBJDIR)/$(*F).f 
-	$(FX90) -I$(OBJDIR) $(INC) -c $(FX90FLAGS) $(OBJDIR)/$(*F).f   
-	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
+#%.o:%.fx90
+#	cp $< $(OBJDIR)/$(*F).f 
+#	$(FX90) -I$(OBJDIR) $(INC) -c $(FX90FLAGS) $(OBJDIR)/$(*F).f   
+#	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
 
 %.o : %.c
 	$(CC) $(INC) $(CFLAGS) $(CPPFLAGS_C) -c $< -o $(OBJDIR)/$(*F).o
diff --git a/src/Rules.LXcray.mk b/src/Rules.LXcray.mk
index dca9106d0..7e2e711f0 100644
--- a/src/Rules.LXcray.mk
+++ b/src/Rules.LXcray.mk
@@ -78,8 +78,9 @@ OPT_NOCB  = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC)
 #             spll_advection_uvw.o spll_resolved_cloud.o
 #$(OBJS_ASYNAll) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC) -h acc_model=auto_async_all
 
-OBJS_CONCURRENT=spll_multigrid.o spll_turb_ver_thermo_flux.o spll_resolved_cloud.o 
-$(OBJS_CONCURRENT) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC) -h concurrent
+OBJS_CONCURRENT=spll_multigrid.o spll_turb_ver_thermo_flux.o
+#spll_resolved_cloud.o 
+$(OBJS_CONCURRENT) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC) -h concurrent -rdimo
 
 endif
 ifeq "$(OPTLEVEL)" "OPENACCNOBITREP"
@@ -102,8 +103,9 @@ OPT_NOCB  = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC)
 #             spll_advection_uvw.o spll_resolved_cloud.o
 #$(OBJS_ASYNAll) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC) -h acc_model=auto_async_all
 
-OBJS_CONCURRENT=spll_multigrid.o spll_turb_ver_thermo_flux.o spll_resolved_cloud.o 
-$(OBJS_CONCURRENT) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC) -h concurrent
+OBJS_CONCURRENT=spll_multigrid.o spll_turb_ver_thermo_flux.o
+# spll_resolved_cloud.o 
+$(OBJS_CONCURRENT) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_OPENACC) -h concurrent -rdimo
 
 endif
 #
@@ -279,11 +281,11 @@ include Makefile.MESONH.mk
 ##########################################################
 # Juan & Maud 20/03/2008 --> Ifort 10.1.008 Bug O2 optimization
 #OPT_PERF1  =  -O1
-OBJS_O1= spll_schu.o spll_ps2str.o spll_ini_one_way_n.o spll_urban_solar_abs.o spll_mode_ekf.o
+OBJS_O1= spll_schu.o spll_ps2str.o spll_ini_one_way_n.o spll_urban_solar_abs.o spll_mode_ekf.o mode_ekf.mod
 #spll_p_abs.o
 $(OBJS_O1) : OPT = $(OPT_BASE) $(OPT_PERF1)
-OBJS_O0= spll_mode_gridproj.o spll_ini_dynamics.o spll_sunpos_n.o spll_average_diag.o spll_write_lfifm1_for_diag.o \
-         spll_write_aircraft_balloon.o spll_mode_write_les_n.o
+OBJS_O0= mode_gridproj.mod spll_mode_gridproj.o spll_ini_dynamics.o spll_sunpos_n.o spll_average_diag.o spll_write_lfifm1_for_diag.o \
+         spll_write_aircraft_balloon.o spll_mode_write_les_n.o mode_write_les_n.mod modd_mnh_surfex_n.mod
 # spll_ground_param_n.o
 
 $(OBJS_O0) : OPT = $(OPT_BASE) $(OPT_PERF0)
@@ -294,18 +296,19 @@ $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
 ifeq "$(MNH_INT)" "8"
-OBJS_I4=spll_modd_netcdf.o
+OBJS_I4=spll_modd_netcdf.o modd_netcdf.mod
 $(OBJS_I4) : OPT = $(OPT_BASE_I4)
 endif
 
-OBJS_LST = spll_condensation.o spll_turb_ver_thermo_flux.o spll_rotate_wind.o spll_mode_mnh_zwork.o spll_contrav_device.o \
+OBJS_LST = spll_condensation.o spll_turb_ver_thermo_flux.o spll_rotate_wind.o spll_mode_mnh_zwork.o mode_mnh_zwork.mod spll_contrav_device.o \
            spll_advection_metsv.o \
            spll_mym_device.o spll_myf_device.o spll_dyf_device.o \
            spll_gx_m_u_device.o spll_gy_m_v_device.o \
            spll_gravity.o spll_gravity_impl.o \
-           spll_advection_uvw.o spll_resolved_cloud.o spll_mode_tools.o spll_mode_rain_ice_sedimentation_split.o spll_ice_adjust.o \
+           spll_advection_uvw.o spll_resolved_cloud.o spll_mode_tools.o mode_tools.mod \
+           spll_mode_rain_ice_sedimentation_split.o mode_rain_ice_sedimentation_split.mod spll_ice_adjust.o \
            spll_countjv1d_device.o spll_countjv2d_device.o spll_countjv3d_device.o \
-           spll_mode_turb.o spll_phys_param_n.o spll_model_n.o spll_tridiag_tke.o \
+           spll_mode_turb.o mode_turb.mod spll_phys_param_n.o spll_model_n.o spll_tridiag_tke.o \
            spll_turb_ver_thermo_corr.o spll_tke_eps_sources.o spll_turb_ver_dyn_flux.o \
            spll_turb_hor_uv.o spll_turb_hor_uw.o spll_turb_hor_vw.o \
            spll_turb_hor_dyn_corr.o spll_turb_hor_thermo_flux.o \
@@ -314,16 +317,20 @@ OBJS_LST = spll_condensation.o spll_turb_ver_thermo_flux.o spll_rotate_wind.o sp
            spll_get_halo_start_d.o spll_get_halo_stop_d.o spll_mass_leak.o \
            spll_ppm_01_x.o spll_ppm_01_y.o spll_ppm_01_z.o \
            spll_ppm_s0_x.o spll_ppm_s0_y.o spll_ppm_s0_z.o \
-           spll_mode_rain_ice_slow.o spll_mode_rain_ice_fast_rs.o \
-           spll_prandtl.o spll_mode_rain_ice_fast_rg.o spll_mode_rain_ice_fast_ri.o \
-           spll_mode_rain_ice.o spll_mode_rain_ice_warm.o \
+           spll_mode_rain_ice_slow.o mode_rain_ice_slow.mod spll_mode_rain_ice_fast_rs.o mode_rain_ice_fast_rs.mod \
+           spll_prandtl.o spll_mode_rain_ice_fast_rg.o mode_rain_ice_fast_rg.mod spll_mode_rain_ice_fast_ri.o mode_rain_ice_fast_ri.mod \
+           spll_mode_rain_ice.o mode_rain_ice.mod spll_mode_rain_ice_warm.o mode_rain_ice_warm.mod \
            spll_ground_param_n.o spll_advec_ppm_algo.o \
-           spll_turb_hor_sv_corr.o spll_rain_ice.o spll_mode_rain_ice_nucleation.o \
-           spll_mode_prandtl.o spll_turb_ver.o spll_mode_repro_sum.o \
+           spll_turb_hor_sv_corr.o spll_rain_ice.o spll_mode_rain_ice_nucleation.o mode_rain_ice_nucleation.mod \
+           spll_mode_prandtl.o mode_prandtl.mod spll_turb_ver.o spll_mode_repro_sum.o mode_repro_sum.mod \
            spll_tridiag_thermo.o spll_tridiag_wind.o spll_tridiag_w.o \
-           spll_tridiag_tke.o
+           spll_tridiag_tke.o spll_advec_weno_k_2_my.o spll_advec_weno_k_2_mx.o \
+           spll_advec_weno_k_2_vy.o spll_advec_weno_k_2_ux.o spll_mxm_device.o \
+           spll_mym_device.o spll_mzm_device.o
            
-$(OBJS_LST) : OPT += -rdimo
- 
+#$(OBJS_LST) : OPT += -rdimo
+
+OPT += -rimo
+
 SPLL = spll_lst
 
diff --git a/src/Rules.LXnvhpc2202.mk b/src/Rules.LXnvhpc2202.mk
index 698193af6..eb9ad893b 100644
--- a/src/Rules.LXnvhpc2202.mk
+++ b/src/Rules.LXnvhpc2202.mk
@@ -22,7 +22,7 @@ TP= -tp=px
 #
 #Version of CUDA
 #(8.0 at least if compute capability >= 6.0)
-CUDALEVEL=cuda11.4
+CUDALEVEL=cuda11.0
 #
 #Compute capability of GPU
 #
@@ -87,6 +87,15 @@ OPT       = $(OPT_BASE) $(OPT_PERF2)
 OPT0      = $(OPT_BASE) $(OPT_PERF0)
 OPT_NOCB  = $(OPT_BASE) $(OPT_PERF2)
 #
+#
+# List of Files with compilation problem in O2
+#
+OBJS_REPROD= spll_mode_sum_ll.o mode_sum_ll.mod
+
+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
+#
+#
 ifeq "$(OPTLEVEL)" "DEBUG"
 OPT       = -g $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK)
 OPT0      = -g $(OPT_BASE) $(OPT_PERF0) $(OPT_CHECK)
@@ -99,7 +108,6 @@ 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
 #
@@ -109,12 +117,10 @@ 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 = spll_modd_halo_d.o modd_halo_d.mod
 $(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)
+$(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_MANAGED) $(OPT_PERF1)
 endif
 #
 ifeq "$(OPTLEVEL)" "MULTICORE"
@@ -124,16 +130,16 @@ 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
+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)
 endif
 ifeq "$(OPTLEVEL)" "OPENACCO2"
 CPPFLAGS    += -DMNH_OPENACC -DMNH_GPUDIRECT
@@ -141,10 +147,17 @@ 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)" "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
 $(OBJS_O1_OPENACC) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF1)
 endif
 #
@@ -154,7 +167,6 @@ 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
 #
@@ -164,7 +176,6 @@ 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
 #
@@ -208,7 +219,7 @@ CPPFLAGS_MNH      += -DMNH_EXPAND -DMNH_EXPAND_OPENACC
 # BITREP flags
 #
 #if MNH_BITREP exists => compile with the BITREP library
-MNH_BITREP = YES
+MNH_BITREP ?= YES
 ifeq "$(MNH_BITREP)" "YES"
 CPPFLAGS_MNH += -DMNH_BITREP
 endif
@@ -263,11 +274,12 @@ include Makefile.MESONH.mk
 #         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 \
+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 \
          spll_convect_updraft.o spll_convect_updraft_shal.o \
-         spll_mode_dustopt.o spll_mode_saltopt.o \
+         spll_mode_dustopt.o mode_dustopt.mod spll_mode_saltopt.o mode_saltopt.mod \
          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
@@ -275,22 +287,24 @@ OBJS_O1 += spll_modd_isba_n.o spll_mode_construct_ll.o \
 #spll_phys_param_n.o
 $(OBJS_O1) : OPT = $(OPT_BASE) $(OPT_PERF1)
 
-OBJS_O0= spll_mode_mppdb.o \
+OBJS_O0= spll_mode_mppdb.o mode_mppdb.mod \
          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_mode_repro_sum.o mode_repro_sum.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
+$(OBJS_O0) : OPT = -g $(OPT_BASE) $(OPT_PERF0)
 
+#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= spll_mode_device.o mode_device.mod
 $(OBJS_O2) : OPT = $(OPT_BASE) $(OPT_OPENACC) $(OPT_PERF2)
+endif
 
 ifneq "$(findstring 8,$(LFI_INT))" ""
 OBJS_I8=spll_NEWLFI_ALL.o
@@ -298,6 +312,8 @@ $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_I8)
 endif
 
 ifeq "$(MNH_INT)" "8"
-OBJS_I4=spll_modd_netcdf.o
+OBJS_I4=spll_modd_netcdf.o modd_netcdf.mod
 $(OBJS_I4) : OPT = $(OPT_BASE_I4)
 endif
+
+SPLL = spll_new
-- 
GitLab