From 6175af5e9d3a029e977cb2fb185245a873577d15 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Fri, 22 Mar 2019 15:08:58 +0100
Subject: [PATCH] Philippe 22/03/2019: replace MPI_PRECISION and MPI_2PRECISION
 by MNHREAL_MPI and MNH2REAL_MPI

---
 src/LIB/SURCOUCHE/src/modd_var_ll.f90        |  17 +-
 src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90  |  27 ++-
 src/LIB/SURCOUCHE/src/mode_exchange_ll.f90   |  75 +++++----
 src/LIB/SURCOUCHE/src/mode_init_ll.f90       |   6 -
 src/LIB/SURCOUCHE/src/mode_mppdb.f90         |  25 ++-
 src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 |  22 +--
 src/LIB/SURCOUCHE/src/mode_sum2_ll.f90       |  27 +--
 src/LIB/SURCOUCHE/src/mode_sum_ll.f90        | 163 +++++++------------
 src/LIB/SURCOUCHE/src/mode_tools_ll.f90      |  86 ++++------
 src/MNH/clustering.f90                       |  19 ++-
 src/MNH/extend_grid_parameter_mnh.f90        |  18 +-
 src/MNH/flash_geom_elec.f90                  |  96 +++++------
 src/MNH/modd_precision.f90                   |  29 +++-
 src/MNH/mode_elec_ll.f90                     |  15 +-
 src/MNH/prep_ideal_case.f90                  |   8 +-
 src/MNH/pressurez.f90                        |   5 +-
 src/MNH/retrieve2_nest_infon.f90             |  55 ++++---
 src/MNH/spawn_model2.f90                     |   3 +-
 src/MNH/spawn_zs.f90                         |  11 +-
 src/MNH/write_lfifm1_for_diag.f90            |   3 +-
 src/SURFEX/mode_gridtype_conf_proj.F90       |   7 +-
 21 files changed, 312 insertions(+), 405 deletions(-)

diff --git a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 b/src/LIB/SURCOUCHE/src/modd_var_ll.f90
index b0688132f..cffb275aa 100644
--- a/src/LIB/SURCOUCHE/src/modd_var_ll.f90
+++ b/src/LIB/SURCOUCHE/src/modd_var_ll.f90
@@ -1,17 +1,8 @@
-
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1999-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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for CVS information
-!-----------------------------------------------------------------
-! $Source$
-! $Name$ 
-! $Revision$ 
-! $Date$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
 
 !      ##################
        MODULE MODD_VAR_ll
@@ -46,6 +37,7 @@
 !    Original 04/05/99
 !    Modifications
 !    J.Escobar 5/06/2018 : add cpp key MNH_USE_MPI_STATUSES_IGNORE for use of true MPI_STATUSES_IGNORE
+!  P. Wautelet 22/03/2019: remove MPI_PRECISION and MPI_2PRECISION (replaced by MNHREAL_MPI and MNH2REAL_MPI in modd_precision)
 !-------------------------------------------------------------------------------
 !  
   USE MODD_STRUCTURE_ll
@@ -118,11 +110,6 @@ INTEGER,SAVE      :: NZ_PROC_ll = 0  ! Number of proc to use in the Z splitting
 ! DIMX = NIMAX + 2*JPHEXT ...
 !
   INTEGER :: DIMX,DIMY,DIMZ
-!
-! MPI_PRECISION, MPI_2PRECISION
-!
-  INTEGER :: MPI_PRECISION
-  INTEGER :: MPI_2PRECISION
 !
   INTEGER, PARAMETER :: NTMAX = 100
 !
diff --git a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
index 767482a5c..dec89ca37 100644
--- a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
@@ -1,14 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for CVS information
-!-----------------------------------------------------------------
-! $Source$
-! $Name$ 
-! $Revision$ 
-! $Date$
 !-----------------------------------------------------------------
 !Correction :
 !  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
@@ -61,14 +55,14 @@
 !                       and local processor
 !       NHALO2_COM - MPI communicator for halo 2
 !       NCOMBUFFSIZE2 - buffer size
-!       MPI_PRECISION - mpi precision
+!       MNHREAL_MPI - mpi precision
 !       NNEXTTAG, NMAXTAG - variable to define message tag
 !
 !!    Modifications
 !!    -------------
 !       Original    May 19, 1998
 !       R. Guivarch June 24, 1998 _ll
-!       R. Guivarch June 29, 1998 MPI_PRECISION
+!       R. Guivarch June 29, 1998 MNHREAL_MPI
 !       N. Gicquel  October 30, 1998 COPY_CRSPD2
 !       J.Escobar 10/02/2012 : Bug , in MPI_RECV replace 
 !            MPI_STATUSES_IGNORE with MPI_STATUS_IGNORE
@@ -691,7 +685,6 @@
 !     Module MODD_VAR_ll
 !       IP - Number of local processor=subdomain
 !       NCOMBUFFSIZE2 - buffer size
-!       MPI_PRECISION - mpi precision
 !       NNEXTTAG, NMAXTAG - variable to define message tag
 !               
 !!    Reference
@@ -707,8 +700,8 @@
 !
   USE MODD_STRUCTURE_ll, ONLY : CRSPD_ll, ZONE_ll
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll
-!
-  USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE2, IP, MPI_PRECISION, NNEXTTAG, NMAXTAG
+  use modd_precision, only: MNHREAL_MPI
+  USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE2, IP, NNEXTTAG, NMAXTAG
   USE MODE_EXCHANGE_ll, ONLY : FILLIN_BUFFERS
   USE MODD_MPIF
 !JUANZ
@@ -829,13 +822,13 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !JUAN
 !if defined(MNH_MPI_BSEND)
  IF (LMNH_MPI_BSEND) THEN
-           CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, &
+           CALL MPI_BSEND(TZBUFFER, JINC, MNHREAL_MPI, &
                 TZZONESEND%NUMBER - 1, TZZONESEND%MSSGTAG + ITAGOFFSET, &
                 KMPI_COMM, KERROR)
 else
 !JUAN
 !if defined(MNH_MPI_ISEND)
-           CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, &
+           CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MNHREAL_MPI, &
                 TZZONESEND%NUMBER - 1, TZZONESEND%MSSGTAG + ITAGOFFSET, &
                 KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
 
@@ -864,12 +857,12 @@ else
 !if defined (MNH_MPI_ISEND)
  IF ( .NOT. LMNH_MPI_BSEND) THEN
         NB_REQ = NB_REQ + 1
-        CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE2, MPI_PRECISION, &
+        CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE2, MNHREAL_MPI, &
              TPMAILRECV%TELT%NUMBER-1, &
              TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
              KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
 else
-        CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE2, MPI_PRECISION, &
+        CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE2, MNHREAL_MPI, &
              TPMAILRECV%TELT%NUMBER-1, &
              TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
              KMPI_COMM, MPI_STATUS_IGNORE, KERROR)
diff --git a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90
index 0dff8c59c..6e85037bd 100644
--- a/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_exchange_ll.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-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.
 !-----------------------------------------------------------------
 ! Modifications:
@@ -37,7 +37,6 @@
 !       IP - Number of local processor=subdomain
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                       and local processor
-!       MPI_PRECISION - mpi precision
 !       JPHALO - size of the halo
 !       NCOMBUFFSIZE1 - buffer sizs
 !       NHALO_COM - mpi communicator
@@ -68,7 +67,7 @@
 !!    Modifications
 !!    -------------
 !       Original     May 19, 1998
-!       R. Guivarch June 29, 1998 MPI_PRECISION
+!       R. Guivarch June 29, 1998 MNHREAL_MPI
 !       N. Gicquel, P. Kloos - October 01, 1998 - COPY_CRSPD, 
 !                 COPY_ZONE, COPY_CRSPD_TRANS, COPY_ZONE_TRANS
 !       M. Moge  01/12/14   UPDATE_HALO_EXTENDED
@@ -398,7 +397,6 @@
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                        and local processor
-!       MPI_PRECISION - mpi precision
 !       JPHALO - size of the halo
 !
 !     Module MODD_DIM_ll
@@ -418,7 +416,8 @@
 !*       0.    DECLARATIONS
 !
   USE MODD_DIM_ll, ONLY : CLBCX, CLBCY
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION, JPHALO
+  use modd_precision, only: MNHREAL_MPI
+  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, JPHALO
 !
   USE MODE_TOOLS_ll, ONLY : GET_INDICE_ll, LEAST_ll, LWEST_ll
 !JUANZ
@@ -475,12 +474,12 @@ INTEGER                                               :: NB_REQ
 !
 !if defined(MNH_MPI_BSEND)
      IF (LMNH_MPI_BSEND) THEN
-        CALL MPI_BSEND(PFIELD(IXOR), JPHALO, MPI_PRECISION, &
+        CALL MPI_BSEND(PFIELD(IXOR), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NSEND_WEST(J)-1, &
              1, NMNH_COMM_WORLD, KINFO)
      else
         NB_REQ = NB_REQ + 1
-        CALL MPI_ISEND(PFIELD(IXOR), JPHALO, MPI_PRECISION, &
+        CALL MPI_ISEND(PFIELD(IXOR), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NSEND_WEST(J)-1, &
              1, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
         
@@ -492,14 +491,14 @@ INTEGER                                               :: NB_REQ
 !
 !if defined(MNH_MPI_BSEND)
      IF (LMNH_MPI_BSEND) THEN
-        CALL MPI_BSEND(PFIELD(IXEND-JPHALO+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_BSEND(PFIELD(IXEND-JPHALO+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NSEND_EAST(J)-1, &
              2, NMNH_COMM_WORLD, KINFO) 
      else
         !JUAN
         !if defined(MNH_MPI_ISEND)
         NB_REQ = NB_REQ + 1
-        CALL MPI_ISEND(PFIELD(IXEND-JPHALO+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_ISEND(PFIELD(IXEND-JPHALO+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NSEND_EAST(J)-1, &
              2, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO) 
         
@@ -519,11 +518,11 @@ INTEGER                                               :: NB_REQ
 !if defined(MNH_MPI_ISEND)
      IF ( .NOT. LMNH_MPI_BSEND) THEN
         NB_REQ = NB_REQ + 1
-        CALL MPI_IRECV(PFIELD(IXEND+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_IRECV(PFIELD(IXEND+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NRECV_EAST-1, 1, &
              NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
      else
-        CALL MPI_RECV(PFIELD(IXEND+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_RECV(PFIELD(IXEND+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NRECV_EAST-1, 1, &
              NMNH_COMM_WORLD, ISTATUS, KINFO)
      endif
@@ -537,11 +536,11 @@ INTEGER                                               :: NB_REQ
 !if defined(MNH_MPI_ISEND)
      IF ( .NOT. LMNH_MPI_BSEND) THEN
         NB_REQ = NB_REQ + 1
-        CALL MPI_IRECV(PFIELD(1), JPHALO, MPI_PRECISION, &
+        CALL MPI_IRECV(PFIELD(1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NRECV_WEST-1, 2, &
              NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
      else
-        CALL MPI_RECV(PFIELD(1), JPHALO, MPI_PRECISION, &
+        CALL MPI_RECV(PFIELD(1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DX%NRECV_WEST-1, 2, &
              NMNH_COMM_WORLD, ISTATUS, KINFO)
      endif
@@ -586,7 +585,6 @@ INTEGER                                               :: NB_REQ
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                        and local processor
-!       MPI_PRECISION - mpi precision
 !       JPHALO - size of the halo
 !
 !     Module MODD_DIM_ll
@@ -598,7 +596,8 @@ INTEGER                                               :: NB_REQ
 !*       0.    DECLARATIONS
 !
   USE MODD_DIM_ll, ONLY : CLBCX, CLBCY
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, JPHALO, MPI_PRECISION
+  use modd_precision, only: MNHREAL_MPI
+  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, JPHALO
 !
   USE MODE_TOOLS_ll, ONLY : GET_INDICE_ll, LNORTH_ll, LSOUTH_ll
 !
@@ -654,13 +653,13 @@ INTEGER                                               :: NB_REQ
 !
 !if defined(MNH_MPI_BSEND)
      IF (LMNH_MPI_BSEND) THEN
-        CALL MPI_BSEND(PFIELD(IYOR), JPHALO, MPI_PRECISION, &
+        CALL MPI_BSEND(PFIELD(IYOR), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NSEND_SOUTH(J)-1, &
              1, NMNH_COMM_WORLD, KINFO)
      else
         
         NB_REQ = NB_REQ + 1
-        CALL MPI_ISEND(PFIELD(IYOR), JPHALO, MPI_PRECISION, &
+        CALL MPI_ISEND(PFIELD(IYOR), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NSEND_SOUTH(J)-1, &
              1, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
         
@@ -672,14 +671,14 @@ INTEGER                                               :: NB_REQ
 !
 !if defined(MNH_MPI_BSEND)
      IF (LMNH_MPI_BSEND) THEN
-        CALL MPI_BSEND(PFIELD(IYEND-JPHALO+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_BSEND(PFIELD(IYEND-JPHALO+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NSEND_NORTH(J)-1, &
              2, NMNH_COMM_WORLD, KINFO) 
      else
         !JUAN
         !if defined(MNH_MPI_ISEND)
         NB_REQ = NB_REQ + 1
-        CALL MPI_ISEND(PFIELD(IYEND-JPHALO+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_ISEND(PFIELD(IYEND-JPHALO+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NSEND_NORTH(J)-1, &
              2, NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
         
@@ -698,11 +697,11 @@ INTEGER                                               :: NB_REQ
 !if defined(MNH_MPI_ISEND)
      IF ( .NOT. LMNH_MPI_BSEND) THEN
         NB_REQ = NB_REQ + 1
-        CALL MPI_IRECV(PFIELD(IYEND+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_IRECV(PFIELD(IYEND+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NRECV_NORTH-1, 1, &
              NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
      else
-        CALL MPI_RECV(PFIELD(IYEND+1), JPHALO, MPI_PRECISION, &
+        CALL MPI_RECV(PFIELD(IYEND+1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NRECV_NORTH-1, 1, &
              NMNH_COMM_WORLD, ISTATUS, KINFO)
      endif
@@ -716,11 +715,11 @@ INTEGER                                               :: NB_REQ
 !if defined(MNH_MPI_ISEND)
      IF ( .NOT. LMNH_MPI_BSEND) THEN
         NB_REQ = NB_REQ + 1
-        CALL MPI_IRECV(PFIELD(1), JPHALO, MPI_PRECISION, &
+        CALL MPI_IRECV(PFIELD(1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NRECV_SOUTH-1, 2, &
              NMNH_COMM_WORLD, REQ_TAB(NB_REQ), KINFO)
      else
-        CALL MPI_RECV(PFIELD(1), JPHALO, MPI_PRECISION, &
+        CALL MPI_RECV(PFIELD(1), JPHALO, MNHREAL_MPI, &
              TCRRT_COMDATA%HALO1DY%NRECV_SOUTH-1, 2, &
              NMNH_COMM_WORLD, ISTATUS, KINFO)
      endif
@@ -1898,7 +1897,6 @@ INTEGER                                               :: NB_REQ
 !       IP - Number of local processor=subdomain
 !       NCOMBUFFSIZE1 - buffer size
 !       NTRANS_COM - mpi communicator
-!       MPI_PRECISION - mpi precision
 !       NNEXTTAG, NMAXTAG - variable to define message tag
 !
 !     Module MODD_PARAMETERS_ll
@@ -1921,8 +1919,9 @@ INTEGER                                               :: NB_REQ
 !              ------------
 !
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+  use modd_precision,    only: MNHREAL_MPI
   USE MODD_STRUCTURE_ll, ONLY : CRSPD_ll, ZONE_ll
-  USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, NTRANS_COM, MPI_PRECISION, &
+  USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, NTRANS_COM, &
                           NNEXTTAG, NMAXTAG
   USE MODD_PARAMETERS_ll, ONLY : JPVEXT
   USE MODD_DIM_ll, ONLY : NKMAX_TMP_ll
@@ -2095,11 +2094,11 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !
 !if defined(MNH_MPI_BSEND)
            IF (LMNH_MPI_BSEND) THEN
-              CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1, &
+              CALL MPI_BSEND(TZBUFFER, JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1, &
                    TZZONESEND%MSSGTAG + ITAGOFFSET, NTRANS_COM, KERROR)
            else
               
-              CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1, &
+              CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1, &
                    TZZONESEND%MSSGTAG + ITAGOFFSET, NTRANS_COM, REQ_TAB(NB_REQ), KERROR)
               
            endif
@@ -2127,13 +2126,13 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
         !if defined (MNH_MPI_ISEND)
         IF ( .NOT. LMNH_MPI_BSEND) THEN
            NB_REQ = NB_REQ + 1
-           !JUAN NZ   CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE1, MPI_PRECISION, &
-           CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MPI_PRECISION, &
+           !JUAN NZ   CALL MPI_IRECV(TZBUFFER(1,NB_REQ), NCOMBUFFSIZE1, MNHREAL_MPI, &
+           CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MNHREAL_MPI, &
                 TZZONERECV%NUMBER-1, TZZONERECV%MSSGTAG + ITAGOFFSET, &
                 NTRANS_COM, REQ_TAB(NB_REQ), KERROR)
         else
-           !JUAN NZ        CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE1, MPI_PRECISION, TZZONERECV%NUMBER-1, &
-           CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MPI_PRECISION, TZZONERECV%NUMBER-1, &
+           !JUAN NZ        CALL MPI_RECV(TZBUFFER, NCOMBUFFSIZE1, MNHREAL_MPI, TZZONERECV%NUMBER-1, &
+           CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MNHREAL_MPI, TZZONERECV%NUMBER-1, &
                 TZZONERECV%MSSGTAG + ITAGOFFSET, NTRANS_COM, IRECVSTATUS, KERROR)
            !JUAN 
            !       Z axe
@@ -2291,7 +2290,6 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !       IP - Number of local processor=subdomain
 !       NCOMBUFFSIZE1 - buffer size
 !       NTRANS_COM - mpi communicator
-!       MPI_PRECISION - mpi precision
 !       NNEXTTAG, NMAXTAG - variable to define message tag
 !
 !     Module MODD_PARAMETERS_ll
@@ -2310,8 +2308,9 @@ INTEGER                                               :: NB_REQ,NFIRST_REQ_RECV
 !-------------------------------------------------------------------------------
 !
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+  use modd_precision, only: MNHREAL_MPI
   USE MODD_STRUCTURE_ll, ONLY : CRSPD_ll, ZONE_ll
-  USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, MPI_PRECISION, NNEXTTAG, NMAXTAG
+  USE MODD_VAR_ll, ONLY : NCOMBUFFSIZE1, IP, NNEXTTAG, NMAXTAG
   USE MODD_DIM_ll, ONLY : NKMAX_TMP_ll
   USE MODD_PARAMETERS_ll, ONLY : JPVEXT
 !
@@ -2454,12 +2453,12 @@ endif
           ! JUAN 
 !if defined(MNH_MPI_BSEND)
           IF (LMNH_MPI_BSEND) THEN
-             CALL MPI_BSEND(TZBUFFER, JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1,  &
+             CALL MPI_BSEND(TZBUFFER, JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1,  &
                   TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM,  KERROR)
           else
              ! JUAN
              !if defined (MNH_MPI_ISEND)
-             CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MPI_PRECISION, TZZONESEND%NUMBER - 1,  &
+             CALL MPI_ISEND(TZBUFFER(1,NB_REQ), JINC, MNHREAL_MPI, TZZONESEND%NUMBER - 1,  &
                   TZZONESEND%MSSGTAG + ITAGOFFSET, KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
              
           endif
@@ -2485,12 +2484,12 @@ endif
 !if defined (MNH_MPI_ISEND)
         IF ( .NOT. LMNH_MPI_BSEND) THEN
            NB_REQ = NB_REQ + 1
-           CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MPI_PRECISION, &
+           CALL MPI_IRECV(TZBUFFER(1,NB_REQ), IBUFFSIZE, MNHREAL_MPI, &
                 TPMAILRECV%TELT%NUMBER -1 , &
                 TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
                 KMPI_COMM, REQ_TAB(NB_REQ), KERROR)
         else
-           CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MPI_PRECISION, &
+           CALL MPI_RECV(TZBUFFER, IBUFFSIZE, MNHREAL_MPI, &
                 TPMAILRECV%TELT%NUMBER -1 , &
                 TPMAILRECV%TELT%MSSGTAG + ITAGOFFSET, &
                 KMPI_COMM, IRECVSTATUS, KERROR)
diff --git a/src/LIB/SURCOUCHE/src/mode_init_ll.f90 b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
index 58bd9cb4c..e76b19ed7 100644
--- a/src/LIB/SURCOUCHE/src/mode_init_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
@@ -50,11 +50,8 @@
 !-------------------------------------------------------------------------------
 !
   USE MODD_MPIF
-  use modd_precision, only: MNHREAL_MPI, MNH2REAL_MPI
 !
   IMPLICIT NONE
-!
-!  INCLUDE 'mpif.h'
 !
   CONTAINS
 !
@@ -547,9 +544,6 @@
         !
         IP = IP + 1
         !
-        MPI_PRECISION  = MNHREAL_MPI
-        MPI_2PRECISION = MNH2REAL_MPI
-        !
         !-------------------------------------------------------------------------------
         !
         !*       2.    SET OUTPUT FILE :
diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
index 575fb7b8e..12fab3263 100644
--- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90
+++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
@@ -267,7 +267,7 @@ CONTAINS
   SUBROUTINE MPPDB_CHECK3D(PTAB,MESSAGE,PRECISION)
 
     USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION
+    use modd_precision, only: MNHREAL_MPI
     USE MODD_MPIF      , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM
     USE MODE_GATHER_ll
 
@@ -347,7 +347,7 @@ CONTAINS
     
           ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll,IKU_SON_ll))
           !
-          CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, &
+          CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MNHREAL_MPI,I_FIRST_SON, &
                ITAG2, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll)
           !
 
@@ -409,7 +409,7 @@ CONTAINS
           CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, &
                ITAG1, MPPDB_INTRA_COMM, IINFO_ll)
 
-          CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MPI_PRECISION,I_FIRST_FATHER, &
+          CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MNHREAL_MPI,I_FIRST_FATHER, &
                ITAG2, MPPDB_INTRA_COMM, IINFO_ll)
  
        END IF
@@ -463,8 +463,8 @@ CONTAINS
 
     USE MODD_PARAMETERS_ll, ONLY : JPHEXT
     USE MODE_GATHER_ll
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION
     USE MODD_MPIF      , ONLY : MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM
+    use modd_precision, only: MNHREAL_MPI
 
     USE  MODD_VAR_ll    , ONLY :  NMNH_COMM_WORLD
 
@@ -537,7 +537,7 @@ CONTAINS
           ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll))
 
           !
-          CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, &
+          CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MNHREAL_MPI,I_FIRST_SON, &
                ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll)
           !
  
@@ -594,7 +594,7 @@ CONTAINS
           I_FIRST_FATHER = 0
           CALL MPI_BSEND(JPHEXT,1,MPI_INTEGER,I_FIRST_FATHER, &
                ITAG, MPPDB_INTRA_COMM, IINFO_ll)
-          CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MPI_PRECISION,I_FIRST_FATHER, &
+          CALL MPI_BSEND(TAB_ll,SIZE(TAB_ll),MNHREAL_MPI,I_FIRST_FATHER, &
                ITAG, MPPDB_INTRA_COMM, IINFO_ll)
        END IF
     END IF
@@ -611,9 +611,10 @@ CONTAINS
   SUBROUTINE MPPDB_CHECKLB(PLB,MESSAGE,PRECISION,HLBTYPE,KRIM)
 
     USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION ,  NMNH_COMM_WORLD
+    USE MODD_VAR_ll    , ONLY : NMNH_COMM_WORLD
     USE MODD_IO_ll,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
     USE MODD_MPIF      , ONLY   : MPI_INTEGER, MPI_STATUS_IGNORE
+    use modd_precision, only: MNHREAL_MPI
 
     USE MODE_DISTRIB_LB
     USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
@@ -680,7 +681,7 @@ CONTAINS
              IF (IIB /= 0) THEN
                 TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
                 IF (ISP /= JI) THEN
-                   CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_PRECISION,JI-1 &
+                   CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1 &
                         ,99,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll) 
                 ELSE
                    CALL GET_DISTRIB_LB(HLBTYPE,JI,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE)
@@ -696,7 +697,7 @@ CONTAINS
           CALL GET_DISTRIB_LB(HLBTYPE,ISP,'LOC','WRITE',KRIM,IIB,IIE,IJB,IJE)
           IF (IIB /= 0) THEN
              TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
-             CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_PRECISION,0,99,NMNH_COMM_WORLD,IINFO_ll)
+             CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,0,99,NMNH_COMM_WORLD,IINFO_ll)
           END IF
        END IF
 
@@ -727,7 +728,7 @@ CONTAINS
           !
           ALLOCATE(TAB_SON_ll(IIU_SON_ll,IJU_SON_ll,IKU_SON_ll))
           !
-          CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MPI_PRECISION,I_FIRST_SON, &
+          CALL MPI_RECV(TAB_SON_ll,SIZE(TAB_SON_ll),MNHREAL_MPI,I_FIRST_SON, &
                ITAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll)
           !
           IDIFF_HEXT = MIN(JPHEXT,IHEXT_SON_ll)
@@ -780,7 +781,7 @@ CONTAINS
           IHEXT_SON_ll = JPHEXT
           CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, &
                ITAG, MPPDB_INTRA_COMM, IINFO_ll)
-          CALL MPI_BSEND(PLB,SIZE(PLB),MPI_PRECISION,I_FIRST_FATHER, &
+          CALL MPI_BSEND(PLB,SIZE(PLB),MNHREAL_MPI,I_FIRST_FATHER, &
                ITAG, MPPDB_INTRA_COMM, IINFO_ll)
        END IF
     END IF
@@ -794,7 +795,6 @@ CONTAINS
   SUBROUTINE MPPDB_CHECK_SURFEX2D(PTAB,MESSAGE,PRECISION,KLUOUT,HTYPE,KIU,KJU)
 
     USE MODD_PARAMETERS, ONLY : JPHEXT
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION
     USE MODI_GET_1D_MASK
     USE MODI_UNPACK_SAME_RANK
     USE MODI_GET_SURF_MASK_n
@@ -892,7 +892,6 @@ CONTAINS
   SUBROUTINE MPPDB_CHECK_SURFEX3D(PTAB,MESSAGE,PRECISION,KLUOUT,HTYPE,KZSIZE)
 
     USE MODD_PARAMETERS, ONLY : JPHEXT
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION
     USE MODI_GET_1D_MASK
     USE MODI_UNPACK_SAME_RANK
     USE MODI_GET_SURF_MASK_n
diff --git a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
index f16a0b180..5461edc4c 100644
--- a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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.
 !-----------------------------------------------------------------
 !       ########################
@@ -31,7 +31,6 @@ MODULE MODE_SPLITTINGZ_ll
   ! Modifications:
   !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
   USE MODD_MPIF
-  use modd_precision, only: MNHREAL_MPI, MNH2REAL_MPI
   !
   USE MODE_SPLITTING_ll
   !
@@ -172,9 +171,6 @@ CONTAINS
     !
     CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NGRID_COM, KINFO_ll)
     !
-    MPI_PRECISION  = MNHREAL_MPI
-    MPI_2PRECISION = MNH2REAL_MPI
-    !
     ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_IGNORE
     !
 #ifndef MNH_USE_MPI_STATUSES_IGNORE
@@ -1821,12 +1817,10 @@ END FUNCTION LSOUTHZ_ll
     SUBROUTINE ALL_SEND_RECV(TSEND_BOX_FROM,TRECV_BOX_TO, &
          PFIELDIN, PFIELDOUT, KINFO)
       !
-      USE MODD_STRUCTURE_ll , ONLY : BOX_ll
-      USE MODD_VAR_ll       , ONLY : MPI_PRECISION
-      !JUANZ
-      !USE MODD_MPIF         , ONLY : MPI_COMM_WORLD
-      USE MODD_VAR_ll        , ONLY : NMNH_COMM_WORLD
-      !JUANZ
+      use modd_precision,    only: MNHREAL_MPI
+      USE MODD_STRUCTURE_ll, ONLY: BOX_ll
+      USE MODD_VAR_ll,       ONLY: NMNH_COMM_WORLD
+      !
       IMPLICIT NONE
       !
       ! Argument
@@ -1859,8 +1853,8 @@ END FUNCTION LSOUTHZ_ll
          END IF
       END DO
       !
-      CALL mpi_alltoallv(ZSEND,TSEND_BOX_FROM%NCNT,TSEND_BOX_FROM%NSTRT,MPI_PRECISION,&
-                         ZRECV,TRECV_BOX_TO%NCNT  ,TRECV_BOX_TO%NSTRT  ,MPI_PRECISION,&
+      CALL mpi_alltoallv(ZSEND,TSEND_BOX_FROM%NCNT,TSEND_BOX_FROM%NSTRT,MNHREAL_MPI,&
+                         ZRECV,TRECV_BOX_TO%NCNT  ,TRECV_BOX_TO%NSTRT  ,MNHREAL_MPI,&
                          TSEND_BOX_FROM%NCOM,KINFO)
       !
       JCNT = 0
diff --git a/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90
index 1580724bd..23638d194 100644
--- a/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_sum2_ll.f90
@@ -1,16 +1,8 @@
-!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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for CVS information
-!-----------------------------------------------------------------
-! $Source$
-! $Name$ 
-! $Revision$ 
-! $Date$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
 
 !     ###################
       MODULE MODE_SUM2_ll
@@ -576,7 +568,6 @@ ENDIF
 !
 !     Module MODD_VAR_ll
 !       IP -
-!       MPI_2PRECISION
 !
 !!    Author
 !!    ------
@@ -590,7 +581,8 @@ ENDIF
 !
 !*       0.    DECLARATIONS
 !
-  USE MODD_VAR_ll, ONLY : IP, MPI_2PRECISION
+  use modd_precision, only: MNH2REAL_MPI
+  USE MODD_VAR_ll,    ONLY: IP
 !
   IMPLICIT NONE
 !
@@ -623,7 +615,7 @@ ENDIF
 !
   ZBUFIN (1) = PVALUE
   ZBUFIN (2) = IP
-  CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MPI_2PRECISION, MPI_MAXLOC, &
+  CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MNH2REAL_MPI, MPI_MAXLOC, &
                      NMNH_COMM_WORLD, IERR)
 !
 !
@@ -675,7 +667,6 @@ ENDIF
 !     Module MODD_VAR_ll
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_2PRECISION
 !
 !!    Author
 !!    ------
@@ -689,9 +680,9 @@ ENDIF
 !
 !*       0.    DECLARATIONS
 !
-  USE MODD_VAR_ll, ONLY : IP, MPI_2PRECISION, TCRRT_PROCONF
-!
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+  use modd_precision,    only: MNH2REAL_MPI
+  USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,       ONLY: IP, TCRRT_PROCONF
 !
   IMPLICIT NONE
 !
@@ -731,7 +722,7 @@ ENDIF
   ZBUFIN (1) = PVALUE
   ZBUFIN (2) = IP
 ! 
-  CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MPI_2PRECISION, MPI_MAXLOC, &
+  CALL MPI_ALLREDUCE(ZBUFIN, ZBUFOUT, 1, MNH2REAL_MPI, MPI_MAXLOC, &
                      NMNH_COMM_WORLD, INFO_ll)
 !
 !-------------------------------------------------------------------------------
diff --git a/src/LIB/SURCOUCHE/src/mode_sum_ll.f90 b/src/LIB/SURCOUCHE/src/mode_sum_ll.f90
index 0fb298150..9f588cfa2 100644
--- a/src/LIB/SURCOUCHE/src/mode_sum_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_sum_ll.f90
@@ -1,15 +1,8 @@
-!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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for CVS information
-!-----------------------------------------------------------------
-! $Source$
-! $Name$ 
-! $Revision$ 
-! $Date$
-!-----------------------------------------------------------------
 !Correction :
 !  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !-----------------------------------------------------------------
@@ -57,7 +50,6 @@
 !       NPROC -
 !       IP -
 !       JPHALO -
-!       MPI_PRECISION - 
 !
 !     Module MODD_STRUCTURE_ll
 !       type MODELSPLITTING_ll
@@ -65,11 +57,8 @@
 !------------------------------------------------------------------------------
 !
    USE MODD_MPIF
-   !JUANZ
-   USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
-   !JUANZ
-!
-!  INCLUDE 'mpif.h'
+   use modd_precision, only: MNHREAL_MPI
+   USE MODD_VAR_ll,    ONLY: NMNH_COMM_WORLD
 !
   CONTAINS
 !
@@ -110,7 +99,6 @@
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                       and local processor
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -127,9 +115,9 @@
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
-  USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_VAR_ll,        ONLY: TCRRT_COMDATA
+  USE MODE_TOOLS_ll,      ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   IMPLICIT NONE
 !
@@ -299,7 +287,7 @@
 !
 !*        3.4    Summation with all the processors
 !
-    CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MPI_PRECISION, &
+    CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MNHREAL_MPI, &
                        MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
 !*        3.5    Return the result
@@ -357,7 +345,6 @@
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                       and local processor
-!       MPI_PRECISION - 
 !
 !!    Implicit Arguments
 !!    ------------------
@@ -377,10 +364,10 @@
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_VAR_ll,        ONLY: TCRRT_COMDATA
 !
-  USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODE_TOOLS_ll,      ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   IMPLICIT NONE
 !
@@ -601,7 +588,7 @@
 !
 !*        3.4    Summation with all the processors
 !
-    CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MPI_PRECISION, &
+    CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MNHREAL_MPI, &
                        MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
 !*        3.5    Return the result
@@ -659,7 +646,6 @@
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                       and local processor
-!       MPI_PRECISION - 
 !
 !!    Implicit Arguments
 !!    ------------------
@@ -680,10 +666,10 @@
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_VAR_ll,        ONLY: TCRRT_COMDATA
 !
-  USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODE_TOOLS_ll,      ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   IMPLICIT NONE
 !
@@ -903,7 +889,7 @@
 !
 !*        3.4    Summation with all the processors
 !
-    CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MPI_PRECISION, &
+    CALL MPI_ALLREDUCE(ZBUF, ZBUFD, IDIM, MNHREAL_MPI, &
                        MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
 !*        3.5    Return the result
@@ -961,7 +947,6 @@
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                       and local processor
-!       MPI_PRECISION - 
 !
 !!    Implicit Arguments
 !!    ------------------
@@ -982,10 +967,10 @@
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_VAR_ll,        ONLY: TCRRT_COMDATA
 !
-  USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODE_TOOLS_ll,      ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   USE MODE_TOOLS_ll
 !
@@ -1136,7 +1121,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        3.4    Summation with all the processors
 !
-!!$    CALL MPI_ALLREDUCE(ZSUM3D, SUM3D_ll, 1, MPI_PRECISION, &
+!!$    CALL MPI_ALLREDUCE(ZSUM3D, SUM3D_ll, 1, MNHREAL_MPI, &
 !!$                       MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !!$!
 !!$! gathers the total 2D field
@@ -1197,7 +1182,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       NPROC -
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1216,11 +1200,11 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
-  USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, NPROC, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+  USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,        ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, NPROC
 !
-  USE MODE_TOOLS_ll, ONLY :  LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODE_TOOLS_ll,      ONLY:  LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   IMPLICIT NONE
 !
@@ -1339,8 +1323,8 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
   ALLOCATE(ZGLOBFIELD(IGE-IGB+1))
   CALL MPI_ALLGATHERV(PFIELD(IB-IORE(IDIR)+1:), ISIZE, &
-                      MPI_PRECISION, ZGLOBFIELD, ISIZES, IDISPL, &
-                      MPI_PRECISION, NMNH_COMM_WORLD, IERR)
+                      MNHREAL_MPI, ZGLOBFIELD, ISIZES, IDISPL, &
+                      MNHREAL_MPI, NMNH_COMM_WORLD, IERR)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1399,7 +1383,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       NPROC -
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1418,10 +1401,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_VAR_ll,        ONLY: TCRRT_COMDATA
 !
-  USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODE_TOOLS_ll,      ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   IMPLICIT NONE
 !
@@ -1560,7 +1543,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        3.4    Reduction with all the processors
 !
-    CALL MPI_ALLREDUCE(ZMAX, MAX_ll, 1, MPI_PRECISION, &
+    CALL MPI_ALLREDUCE(ZMAX, MAX_ll, 1, MNHREAL_MPI, &
                        MPI_MAX, NMNH_COMM_WORLD, KINFO)
 !
   ENDIF
@@ -1612,7 +1595,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       NPROC -
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1631,10 +1613,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_VAR_ll,        ONLY: TCRRT_COMDATA
 !
-  USE MODE_TOOLS_ll, ONLY : LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
+  USE MODE_TOOLS_ll,      ONLY: LNORTH_ll, LSOUTH_ll, LEAST_ll, LWEST_ll
 !
   IMPLICIT NONE
 !
@@ -1773,7 +1755,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !        3.4    Reduction with all the processors
 !
-    CALL MPI_ALLREDUCE(ZMIN, MIN_ll, 1, MPI_PRECISION, &
+    CALL MPI_ALLREDUCE(ZMIN, MIN_ll, 1, MNHREAL_MPI, &
                        MPI_MIN, NMNH_COMM_WORLD, KINFO)
 !
   ENDIF
@@ -1809,7 +1791,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !     Module MODD_VAR_ll
 !       TCRRT_COMDATA - Current communication data structure for current model
 !                       and local processor
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1826,7 +1807,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA, MPI_PRECISION
+  USE MODD_VAR_ll, ONLY : TCRRT_COMDATA
 !
 !
   IMPLICIT NONE
@@ -1862,7 +1843,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !              ---------------------------------
 !
   CALL MPI_ALLREDUCE(ZBUF, ZBUFD, SIZE(PFIELD,3), &
-                     MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD, KINFO)
+                     MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1899,8 +1880,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1916,8 +1895,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !-------------------------------------------------------------------------------
 !
 !*        0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -1953,7 +1930,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !*        2.    REDUCTION WITH ALL THE PROCESSORS :
 !               ---------------------------------
 !
-  CALL MPI_ALLREDUCE(ZSUM, SUMMASKCOMP_ll, 1, MPI_PRECISION, &
+  CALL MPI_ALLREDUCE(ZSUM, SUMMASKCOMP_ll, 1, MNHREAL_MPI, &
                      MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
 !-------------------------------------------------------------------------------
@@ -1995,7 +1972,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_PRECISION -
 !       JPHALO -
 !
 !!    Author
@@ -2010,12 +1986,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+  USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,       ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO
 !
-  USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, &
-                          MPI_PRECISION
-!
-  USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll
+  USE MODE_TOOLS_ll,     ONLY: LWEST_ll, LEAST_ll
 !
   IMPLICIT NONE
 !
@@ -2071,7 +2045,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !*        3.    MERGE LOCAL SUMS
 !               ----------------
 !
-  CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES), MPI_PRECISION, MPI_SUM, &
+  CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES), MNHREAL_MPI, MPI_SUM, &
                      NMNH_COMM_WORLD,KINFO)
 !
 !-----------------------------------------------------------------
@@ -2113,7 +2087,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_PRECISION -
 !       JPHALO -
 !
 !!    Author
@@ -2129,14 +2102,11 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
-!
-  USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, &
-                          MPI_PRECISION
-!
-  USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
+  USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,       ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO
 !
- USE MODE_REPRO_SUM
+  USE MODE_REPRO_SUM
+  USE MODE_TOOLS_ll,     ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
 !
 !*       0.    DECLARATIONS
 !              ------------
@@ -2282,7 +2252,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_PRECISION -
 !       JPHALO -
 !
 !!    Author
@@ -2298,12 +2267,10 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*        0.    DECLARATIONS
 !
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+  USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,       ONLY: IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO
 !
-  USE MODD_VAR_ll, ONLY : IP, TCRRT_COMDATA, TCRRT_PROCONF, JPHALO, &
-                          MPI_PRECISION
-!
-  USE MODE_TOOLS_ll, ONLY : LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
+  USE MODE_TOOLS_ll,     ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
 !
 !*       0.    DECLARATIONS
 !              ------------
@@ -2364,7 +2331,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*       2.    Merge local sums
 !
-     CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES, 2), MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD,KINFO)
+     CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES, 2), MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD,KINFO)
 !
 !-----------------------------------------------------------------
   ELSE
@@ -2396,7 +2363,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*       2.    Merge local sums
 !
-        CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES,2), MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD,KINFO)       
+        CALL MPI_ALLREDUCE(ZBUF, PRES, SIZE(PRES, 1) * SIZE(PRES,2), MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD,KINFO)
      ENDIF
   ENDIF
   
@@ -2429,8 +2396,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2445,7 +2410,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*       0.    DECLARATIONS
 !
- USE MODE_REPRO_SUM 
+  USE MODE_REPRO_SUM
 !
   IMPLICIT NONE
 !
@@ -2502,8 +2467,6 @@ END SUBROUTINE REDUCE_SUM_0DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2517,8 +2480,6 @@ END SUBROUTINE REDUCE_SUM_0DD_ll
 !-----------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2537,7 +2498,7 @@ END SUBROUTINE REDUCE_SUM_0DD_ll
 !*       1. CALL THE MPI_ALLREDUCE ROUTINE
 !           ------------------------------
 !
-  CALL MPI_ALLREDUCE(PRES, ZRES, 1, MPI_PRECISION, &
+  CALL MPI_ALLREDUCE(PRES, ZRES, 1, MNHREAL_MPI, &
                      MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
   PRES = ZRES
@@ -2620,8 +2581,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2635,8 +2594,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2655,7 +2612,7 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !*       1. CALL THE MPI_ALLREDUCE ROUTINE
 !           ------------------------------
 !
-  CALL MPI_ALLREDUCE(PRES, ZRES, SIZE(PRES,1), MPI_PRECISION, &
+  CALL MPI_ALLREDUCE(PRES, ZRES, SIZE(PRES,1), MNHREAL_MPI, &
                      MPI_SUM, NMNH_COMM_WORLD, KINFO)
 !
   PRES = ZRES
@@ -2692,8 +2649,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2707,8 +2662,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 ! 
 !*       0.    DECLARATIONS 
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2731,7 +2684,7 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !
   IDIM = SIZE(PRES,1) * SIZE(PRES,2)
 !
-  CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MPI_PRECISION, MPI_SUM, &
+  CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MNHREAL_MPI, MPI_SUM, &
                      NMNH_COMM_WORLD, KINFO)
 !
   PRES = ZRES
@@ -2768,8 +2721,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2783,8 +2734,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 ! 
 !*       0.    DECLARATIONS 
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2808,7 +2757,7 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !
   IDIM = SIZE(PRES,1) * SIZE(PRES,2) * SIZE(PRES,3)
 !
-  CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MPI_PRECISION, MPI_SUM, &
+  CALL MPI_ALLREDUCE(PRES, ZRES, IDIM, MNHREAL_MPI, MPI_SUM, &
                      NMNH_COMM_WORLD, KINFO)
 !
   PRES = ZRES
@@ -3046,8 +2995,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
diff --git a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90 b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
index 158d53136..ba2dc9c36 100644
--- a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
@@ -1,15 +1,8 @@
-!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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for CVS information
-!-----------------------------------------------------------------
-! $Source$
-! $Name$ 
-! $Revision$ 
-! $Date$
-!-----------------------------------------------------------------
 !Correction :
 !  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !-----------------------------------------------------------------
@@ -52,8 +45,9 @@
 !     Juan/Didier 12/03/2009: array bound bug correction with 1proc/MPIVIDE
 !     J. Escobar  27/06/2011  correction for gridnesting with different SHAPE 
 ! 
-  USE MODD_STRUCTURE_ll
   USE MODD_MPIF
+  use modd_precision, only: MNHREAL_MPI
+  USE MODD_STRUCTURE_ll
   !JUANZ
   USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
   !JUANZ  
@@ -1098,7 +1092,6 @@ ENDIF
 !        NPROC - Number of processors
 !        TCRRT_PROCONF -  Current configuration for current model
 !        IP - Number of the local processor
-!        MPI_PRECISION - mpi precision
 !
 !      Module MODD_PARAMETERS_ll
 !        JPHEXT - halo size
@@ -1120,16 +1113,12 @@ ENDIF
 !
 !*       0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
-  USE MODD_VAR_ll, ONLY : NPROC, TCRRT_PROCONF, IP, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+  USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,        ONLY: NPROC, TCRRT_PROCONF, IP
 !
   IMPLICIT NONE
 !
-!*       0.099 Include MPI parameters
-!
-!  INCLUDE 'mpif.h'
-!
 !*       0.1   declarations of arguments
 !
   REAL, DIMENSION(:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field
@@ -1332,8 +1321,8 @@ ENDIF
 !*        3.3     Have the values of the local slice on each proc known
 !                 by all procs on the global slice
 !
-    CALL MPI_ALLGATHERV(ZPTR, ISIZE, MPI_PRECISION, PGLOBALSLICE, &
-                        ISIZES, IDISPL, MPI_PRECISION, ICOMM_GLOBALSLICE, IERR)
+    CALL MPI_ALLGATHERV(ZPTR, ISIZE, MNHREAL_MPI, PGLOBALSLICE, &
+                        ISIZES, IDISPL, MNHREAL_MPI, ICOMM_GLOBALSLICE, IERR)
 !
 !*        3.4     Delete slice communicator
 !
@@ -1364,7 +1353,7 @@ ENDIF
   IF (ICOMM .NE. MPI_COMM_NULL) THEN
 !
     CALL MPI_BCAST(IGLOBALSLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR)
-    CALL MPI_BCAST(PGLOBALSLICE(IDISPL1+1), IGLOBALSLICELENGTH, MPI_PRECISION, &
+    CALL MPI_BCAST(PGLOBALSLICE(IDISPL1+1), IGLOBALSLICELENGTH, MNHREAL_MPI, &
                     IPROCS(1), ICOMM, IERR)
 !
     CALL MPI_COMM_FREE(ICOMM, IERR)
@@ -1416,7 +1405,6 @@ ENDIF
 !        NPROC - Number of processors
 !        TCRRT_PROCONF -  Current configuration for current model
 !        IP - Number of the local processor
-!        MPI_PRECISION - mpi precision
 !
 !      Module MODD_PARAMETERS_ll
 !        JPHEXT, JPVEXT - halo size
@@ -1438,16 +1426,12 @@ ENDIF
 !
 !*       0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
-  USE MODD_VAR_ll, ONLY : NPROC, TCRRT_PROCONF, IP, MPI_PRECISION
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,        ONLY: NPROC, TCRRT_PROCONF, IP
 !
   IMPLICIT NONE
 !
-!*       0.099 Include MPI parameters
-!
-!  INCLUDE 'mpif.h'
-!
 !*       0.1   declarations of arguments
 !
   REAL, DIMENSION(:,:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field
@@ -1668,9 +1652,9 @@ ENDIF
 !                 by all procs on the global slice
 !
     DO JK = 1, IGLOBALSLICEHEIGHT
-      CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MPI_PRECISION, &
+      CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MNHREAL_MPI, &
                           PGLOBALSLICE(1,JK), ISIZES, IDISPL, &
-                          MPI_PRECISION, ICOMM_GLOBALSLICE, IERR)
+                          MNHREAL_MPI, ICOMM_GLOBALSLICE, IERR)
     ENDDO
 !
 !*        3.4     Delete slice communicator
@@ -1704,7 +1688,7 @@ ENDIF
 !
     CALL MPI_BCAST(IGLOBALSLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR)
     DO JK = 1, IGLOBALSLICEHEIGHT
-      CALL MPI_BCAST(PGLOBALSLICE(1,JK), IGLOBALSLICELENGTH, MPI_PRECISION, &
+      CALL MPI_BCAST(PGLOBALSLICE(1,JK), IGLOBALSLICELENGTH, MNHREAL_MPI, &
                     IPROCS(1), ICOMM, IERR)
     ENDDO
 !
@@ -1764,7 +1748,6 @@ ENDIF
 !        NPROC - Number of processors
 !        TCRRT_PROCONF -  Current configuration for current model
 !        IP - Number of the local processor
-!        MPI_PRECISION - mpi precision
 !
 !      Module MODD_PARAMETERS_ll
 !        JPHEXT, JPVEXT - halo size
@@ -1785,16 +1768,12 @@ ENDIF
 !
 !*       0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-  USE MODD_VAR_ll, ONLY : NPROC,TCRRT_PROCONF,IP,MPI_PRECISION
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+  USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,        ONLY: NPROC, TCRRT_PROCONF, IP
 !
   IMPLICIT NONE
 !
-!*       0.099 Include MPI parameters
-!
-!  INCLUDE 'mpif.h'
-!
 !*       0.1   declarations of arguments
 !
   REAL, DIMENSION(:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field
@@ -2024,8 +2003,8 @@ ENDIF
 !*        3.3     Have the values of the local slice on each proc known
 !                 by all procs on the global slice
 !
-    CALL MPI_ALLGATHERV(ZPTR, ISIZE, MPI_PRECISION, ITOTALSLICE, ISIZES, &
-                        IDISPL, MPI_PRECISION, ICOMM_SLICE, IERR)
+    CALL MPI_ALLGATHERV(ZPTR, ISIZE, MNHREAL_MPI, ITOTALSLICE, ISIZES, &
+                        IDISPL, MNHREAL_MPI, ICOMM_SLICE, IERR)
 !
     DEALLOCATE(ISIZES, IDISPL)
 !
@@ -2058,7 +2037,7 @@ ENDIF
   IF (ICOMM .NE. MPI_COMM_NULL) THEN
 !
     CALL MPI_BCAST(ISLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR)
-    CALL MPI_BCAST(ITOTALSLICE, ISLICELENGTH, MPI_PRECISION, &
+    CALL MPI_BCAST(ITOTALSLICE, ISLICELENGTH, MNHREAL_MPI, &
                     IPROCS(1), ICOMM, IERR)
     CALL MPI_COMM_FREE(ICOMM, IERR)
   ENDIF
@@ -2112,7 +2091,6 @@ ENDIF
 !        NPROC - Number of processors
 !        TCRRT_PROCONF -  Current configuration for current model
 !        IP - Number of the local processor
-!        MPI_PRECISION - mpi precision
 !
 !      Module MODD_PARAMETERS_ll
 !        JPHEXT, JPVEXT - halo size
@@ -2133,16 +2111,12 @@ ENDIF
 !
 !*       0.    DECLARATIONS
 !
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT, JPVEXT
-  USE MODD_VAR_ll, ONLY : NPROC,TCRRT_PROCONF,IP,MPI_PRECISION
-  USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
+  USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+  USE MODD_VAR_ll,        ONLY: NPROC, TCRRT_PROCONF, IP
 !
   IMPLICIT NONE
 !
-!*       0.099 Include MPI parameters
-!
-!  INCLUDE 'mpif.h'
-!
 !*       0.1   declarations of arguments
 !
   REAL, DIMENSION(:,:,:), TARGET, INTENT(IN) :: PARRAY ! horizontal field
@@ -2384,9 +2358,9 @@ ENDIF
 !                 by all procs on the global slice
 !
     DO JK = 1, ISLICEHEIGHT
-      CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MPI_PRECISION, &
+      CALL MPI_ALLGATHERV(ZPTR(1,JK), ISIZE, MNHREAL_MPI, &
                           ITOTALSLICE(1,JK), &
-                          ISIZES, IDISPL, MPI_PRECISION, ICOMM_SLICE, IERR)
+                          ISIZES, IDISPL, MNHREAL_MPI, ICOMM_SLICE, IERR)
     ENDDO
 !
 !*        3.4     Delete slice communicator
@@ -2420,7 +2394,7 @@ ENDIF
 !
     CALL MPI_BCAST(ISLICELENGTH, 1, MPI_INTEGER, IPROCS(1), ICOMM, IERR)
     DO JK = 1, ISLICEHEIGHT
-      CALL MPI_BCAST(ITOTALSLICE(1,JK), ISLICELENGTH, MPI_PRECISION, &
+      CALL MPI_BCAST(ITOTALSLICE(1,JK), ISLICELENGTH, MNHREAL_MPI, &
                     IPROCS(1), ICOMM, IERR)
     ENDDO
 !
@@ -3298,8 +3272,6 @@ ENDIF
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -3319,7 +3291,7 @@ ENDIF
 !-------------------------------------------------------------------------------
 !
 IMEANSQRTLOC = SUM(SQRT(PARRAY))
-CALL MPI_ALLREDUCE(IMEANSQRTLOC, PMEANSQRT, 1, MPI_PRECISION, MPI_SUM, NMNH_COMM_WORLD,IINFO)
+CALL MPI_ALLREDUCE(IMEANSQRTLOC, PMEANSQRT, 1, MNHREAL_MPI, MPI_SUM, NMNH_COMM_WORLD,IINFO)
 PMEANSQRT = PMEANSQRT / KSIZEGLB
 !
 !-----------------------------------------------------------------------
diff --git a/src/MNH/clustering.f90 b/src/MNH/clustering.f90
index a42562bbb..882de5a75 100644
--- a/src/MNH/clustering.f90
+++ b/src/MNH/clustering.f90
@@ -1,3 +1,8 @@
+!MNH_LIC Copyright 2013-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.
+!-----------------------------------------------------------------
 !    ################
      MODULE MODI_CLUSTERING
 !    ################
@@ -60,13 +65,13 @@ END MODULE MODI_CLUSTERING
 !
 !*       0.     DECLARATIONS
 !               ------------
- USE MODD_MPIF , ONLY : MPI_INTEGER
+USE MODD_ARGSLIST_ll, ONLY: LIST_ll
+USE MODD_DYN_n,       ONLY: XDXHATM, XDYHATM
+USE MODD_MPIF ,       ONLY: MPI_INTEGER
+use MODD_PRECISION,   only: MNHREAL_MPI
+USE MODD_VAR_ll,      ONLY: NPROC, IP, NMNH_COMM_WORLD
+!
 USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_VAR_ll, ONLY : MPI_PRECISION, NPROC, IP, NMNH_COMM_WORLD
-USE MODD_DYN_n, ONLY : XDXHATM, XDYHATM
-!USE&
-!      MPI
 !
 IMPLICIT NONE
 !
@@ -670,7 +675,7 @@ CALL MPI_ALLGATHERV(ILOCLISTLVL2, ICPT, MPI_INTEGER, IGLBLISTLVL, ICLUSNBR, IPRO
                     NMNH_COMM_WORLD, INFO)
 CALL MPI_ALLGATHERV(ILOCLISTSEC2, ICPT, MPI_INTEGER, IGLBLISTSEC, ICLUSNBR, IPROCDPL, MPI_INTEGER, &
                     NMNH_COMM_WORLD, INFO)
-CALL MPI_ALLGATHERV(ZLOCLISTFLD2, ICPT, MPI_PRECISION, ZGLBLISTFLD, ICLUSNBR, IPROCDPL, MPI_PRECISION, &
+CALL MPI_ALLGATHERV(ZLOCLISTFLD2, ICPT, MNHREAL_MPI, ZGLBLISTFLD, ICLUSNBR, IPROCDPL, MNHREAL_MPI, &
                     NMNH_COMM_WORLD, INFO)
 !
 !*       6.3    EACH PROC COMPUTES GLOBAL SECTIONS AND FIELD AVERAGE OF ITS CLUSTERS
diff --git a/src/MNH/extend_grid_parameter_mnh.f90 b/src/MNH/extend_grid_parameter_mnh.f90
index 09d062990..3d5fc09a1 100644
--- a/src/MNH/extend_grid_parameter_mnh.f90
+++ b/src/MNH/extend_grid_parameter_mnh.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2015-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.
+!-----------------------------------------------------------------
 !     #############################################################
       SUBROUTINE EXTEND_GRID_PARAMETERX1_MNH(HGRID,HREC,KDIM,KSIZE,KIMAX,KJMAX,PFIELD,PFIELD_EXTEND)
 !     #############################################################
@@ -16,10 +17,13 @@
 !  07/2015   (M.Moge) initializing ZY and ZY to zero
 !  08/2015   (M.Moge) bug fix in the call to UPDATE_NHALO1D : IIMAX_ll instead of IJMAX_ll
 !
-USE MODD_IO_SURF_MNH, ONLY : NHALO
-USE MODD_VAR_ll, ONLY : NPROC, IP, MPI_PRECISION, NMNH_COMM_WORLD
+USE MODD_IO_SURF_MNH, ONLY: NHALO
 USE MODD_MPIF
-USE MODE_TOOLS_ll, ONLY : INTERSECTION, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
+use MODD_PRECISION,   only: MNHREAL_MPI
+USE MODD_VAR_ll,      ONLY: NPROC, IP, NMNH_COMM_WORLD
+!
+USE MODE_TOOLS_ll,    ONLY: INTERSECTION, LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
+!
 USE MODI_UPDATE_NHALO1D
 !
 IMPLICIT NONE
@@ -76,7 +80,7 @@ IF (HREC=='XX' .OR. HREC=='DX') THEN
     IF (NIMAX>1) ZDX = PFIELD(2) - PFIELD(1)
     IF (NIMAX==1) ZDX = PFIELD(1) ! in 1D conf, one assumes that grid
                                      ! is located between X=DX/2 and X=3DX/2
-    CALL MPI_BCAST(ZDX, 1, MPI_PRECISION, 0, NMNH_COMM_WORLD, IINFO_ll)
+    CALL MPI_BCAST(ZDX, 1, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IINFO_ll)
     IF( LWEST_ll() ) THEN
       DO JI=NHALO,1,-1
 	ZX(JI) = ZX(JI+1) - ZDX
@@ -119,7 +123,7 @@ ELSEIF (HREC=='YY' .OR. HREC=='DY') THEN
     IF (NJMAX>1) ZDY = PFIELD(1+KIMAX) - PFIELD(1)
     IF (NJMAX==1) ZDY = PFIELD(1) ! in 1D or 2D conf, one assumes that grid
                                      ! is located between Y=DY/2 and Y=3DY/2
-    CALL MPI_BCAST(ZDY, 1, MPI_PRECISION, 0, NMNH_COMM_WORLD, IINFO_ll)
+    CALL MPI_BCAST(ZDY, 1, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IINFO_ll)
     IF( LSOUTH_ll() ) THEN
       DO JJ=NHALO,1,-1
 	ZY(JJ) = ZY(JJ+1) - ZDY
diff --git a/src/MNH/flash_geom_elec.f90 b/src/MNH/flash_geom_elec.f90
index cc467d1dd..2c7e576aa 100644
--- a/src/MNH/flash_geom_elec.f90
+++ b/src/MNH/flash_geom_elec.f90
@@ -100,44 +100,44 @@ END MODULE MODI_FLASH_GEOM_ELEC_n
 !*      0.      DECLARATIONS
 !               ------------
 !
-USE MODD_CST, ONLY : XAVOGADRO, XMD
-USE MODD_CONF, ONLY : CEXP, LCARTESIAN
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
-USE MODD_GRID, ONLY : XLATORI,XLONORI
-USE MODD_GRID_n, ONLY : XXHAT, XYHAT, XZHAT
-USE MODD_DYN_n, ONLY : XDXHATM, XDYHATM, NSTOP
-USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ ! in linox_production
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
+USE MODD_CONF,           ONLY: CEXP, LCARTESIAN
+USE MODD_CST,            ONLY: XAVOGADRO, XMD
+USE MODD_DYN_n,          ONLY: XDXHATM, XDYHATM, NSTOP
 USE MODD_ELEC_DESCR 
-USE MODD_ELEC_PARAM, ONLY : XFQLIGHTR, XEXQLIGHTR, &
-                            XFQLIGHTI, XEXQLIGHTI, &
-                            XFQLIGHTS, XEXQLIGHTS, &
-                            XFQLIGHTG, XEXQLIGHTG, &
-                            XFQLIGHTH, XEXQLIGHTH, &
-                            XFQLIGHTC
-USE MODD_RAIN_ICE_DESCR, ONLY : XLBR, XLBEXR, XLBS, XLBEXS, &
-                                XLBG, XLBEXG, XLBH, XLBEXH, &
-                                XRTMIN
-USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELECEND, NSV_ELEC
-USE MODD_VAR_ll, ONLY : NPROC,NMNH_COMM_WORLD
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODD_ELEC_PARAM,     ONLY: XFQLIGHTR, XEXQLIGHTR, &
+                               XFQLIGHTI, XEXQLIGHTI, &
+                               XFQLIGHTS, XEXQLIGHTS, &
+                               XFQLIGHTG, XEXQLIGHTG, &
+                               XFQLIGHTH, XEXQLIGHTH, &
+                               XFQLIGHTC
+USE MODD_ELEC_FLASH
+USE MODD_GRID,           ONLY: XLATORI,XLONORI
+USE MODD_GRID_n,         ONLY: XXHAT, XYHAT, XZHAT
+USE MODD_IO_ll,          ONLY: TFILEDATA
+USE MODD_LMA_SIMULATOR
+USE MODD_METRICS_n,      ONLY: XDXX, XDYY, XDZZ ! in linox_production
+USE MODD_NSV,            ONLY: NSV_ELECBEG, NSV_ELECEND, NSV_ELEC
+USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
+use MODD_PRECISION,      only: MNHREAL_MPI
+USE MODD_RAIN_ICE_DESCR, ONLY: XLBR, XLBEXR, XLBS, XLBEXS, &
+                               XLBG, XLBEXG, XLBH, XLBEXH, &
+                               XRTMIN
 USE MODD_SUB_ELEC_n
 USE MODD_TIME_n
-USE MODD_LMA_SIMULATOR
-USE MODD_ELEC_FLASH
-!
-USE MODI_SHUMAN
-USE MODI_TO_ELEC_FIELD_n
-USE MODI_ION_ATTACH_ELEC
+USE MODD_VAR_ll,         ONLY: NPROC,NMNH_COMM_WORLD
 !
+USE MODE_ELEC_ll
+USE MODE_GRIDPROJ
+USE MODE_ll
+USE MODE_MPPDB
 #ifdef MNH_PGI
 USE MODE_PACK_PGI
 #endif
 !
-USE MODE_ll
-USE MODE_ELEC_ll
-USE MODE_GRIDPROJ
-USE MODE_MPPDB
+USE MODI_ION_ATTACH_ELEC
+USE MODI_SHUMAN
+USE MODI_TO_ELEC_FIELD_n
 !
 IMPLICIT NONE
 !
@@ -853,9 +853,9 @@ ENDIF
        CALL MPPDB_CHECK3DM("flash:: 5. ZFLASH(IL)",PRECISION,&
              ZFLASH(:,:,:,IL))
 !
-        CALL MPI_BCAST (GNEW_FLASH(IL),1, MPI_LOGICAL, IPROC_TRIG(IL), &
+        CALL MPI_BCAST (GNEW_FLASH(IL),1,   MPI_LOGICAL, IPROC_TRIG(IL), &
                         NMNH_COMM_WORLD, IERR)
-        CALL MPI_BCAST (ZEM_TRIG(IL), 1, MPI_PRECISION, IPROC_TRIG(IL), &
+        CALL MPI_BCAST (ZEM_TRIG(IL), 1,    MNHREAL_MPI, IPROC_TRIG(IL), &
                         NMNH_COMM_WORLD, IERR)
         CALL MPI_BCAST (INB_FL_REAL(IL), 1, MPI_INTEGER, IPROC_TRIG(IL), &
                         NMNH_COMM_WORLD, IERR)
@@ -1690,11 +1690,11 @@ DO IL = 1, INB_CELL
 !               ----------------------------
 !
     CALL MPI_BCAST (ZEM_TRIG(IL), 1, &
-                    MPI_PRECISION, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR)
-    CALL MPI_BCAST (ISEG_LOC(:,IL), 3*SIZE(PRT,3), &     
+                    MNHREAL_MPI, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR)
+    CALL MPI_BCAST (ISEG_LOC(:,IL), 3*SIZE(PRT,3), &
                     MPI_INTEGER, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR)
     CALL MPI_BCAST (ZCOORD_TRIG(:,IL), 3, &
-                    MPI_PRECISION, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR)
+                    MNHREAL_MPI, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR)
     CALL MPI_BCAST (ISIGNE_EZ(IL), 1, &
                     MPI_INTEGER, IPROC_TRIG(IL), NMNH_COMM_WORLD, IERR)
 !
@@ -1960,7 +1960,7 @@ DO IL = 1, INB_CELL
     END DO
   END IF
 !
-  CALL MPI_BCAST (ZSIGN(IL), 1, MPI_PRECISION, IPROC_TRIG(IL), &
+  CALL MPI_BCAST (ZSIGN(IL), 1, MNHREAL_MPI, IPROC_TRIG(IL), &
                   NMNH_COMM_WORLD, IERR)
 END DO
 !
@@ -2308,8 +2308,8 @@ IF (IPROC .EQ. 0) THEN
   INBSEG_PROC_X3(:) = 3 * INBSEG_PROC(:)
 END IF
 !
-CALL MPI_GATHERV (ZSEND, 3*INSEGPROC, MPI_PRECISION, ZRECV, INBSEG_PROC_X3, &
-                  IDECAL3, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR)
+CALL MPI_GATHERV (ZSEND, 3*INSEGPROC, MNHREAL_MPI, ZRECV, INBSEG_PROC_X3, &
+                  IDECAL3, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR)
 !
 IF (IPROC .EQ. 0) THEN
   ZCOORD_SEG_ALL(1:3*INSEGCELL,IL) = ZRECV(1:3*INSEGCELL)
@@ -2381,15 +2381,15 @@ IF (LLMA) THEN
 !
   ALLOCATE (ZRECV(INSEGCELL))
 !
-  CALL MPI_GATHERV (ZLMAPOS, INSEGPROC, MPI_PRECISION, ZRECV, INBSEG_PROC,  &
-                    IDECAL, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR)
+  CALL MPI_GATHERV (ZLMAPOS, INSEGPROC, MNHREAL_MPI, ZRECV, INBSEG_PROC,  &
+                    IDECAL, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR)
 !
   IF (IPROC .EQ. 0) THEN
     ZLMA_NEUT_POS(1:INSEGCELL,IL) = ZRECV(1:INSEGCELL)
   END IF
 !
-  CALL MPI_GATHERV (ZLMANEG, INSEGPROC, MPI_PRECISION, ZRECV, INBSEG_PROC,  &
-                    IDECAL, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR)
+  CALL MPI_GATHERV (ZLMANEG, INSEGPROC, MNHREAL_MPI, ZRECV, INBSEG_PROC,  &
+                    IDECAL, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR)
 !
   IF (IPROC .EQ. 0) THEN
     ZLMA_NEUT_NEG(1:INSEGCELL,IL) = ZRECV(1:INSEGCELL)
@@ -2409,17 +2409,17 @@ IF (LLMA) THEN
     INBSEG_PROC_XNSV(:) = NSV_ELEC * INBSEG_PROC(:)
   END IF
 !
-  CALL MPI_GATHERV (ZLMAQMT, NSV_ELEC*INSEGPROC, MPI_PRECISION, ZRECV, &
-                    INBSEG_PROC_XNSV,                                  &
-                    IDECALN, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR    )
+  CALL MPI_GATHERV (ZLMAQMT, NSV_ELEC*INSEGPROC, MNHREAL_MPI, ZRECV, &
+                    INBSEG_PROC_XNSV,                                &
+                    IDECALN, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR   )
 !
   IF (IPROC .EQ. 0) THEN
     ZLMA_QMT(1:NSV_ELEC*INSEGCELL,IL) = ZRECV(1:NSV_ELEC*INSEGCELL)
   END IF
 !
-  CALL MPI_GATHERV (ZLMAPRT, NSV_ELEC*INSEGPROC, MPI_PRECISION, ZRECV, &
-                    INBSEG_PROC_XNSV,                                  &
-                    IDECALN, MPI_PRECISION, 0, NMNH_COMM_WORLD, IERR)
+  CALL MPI_GATHERV (ZLMAPRT, NSV_ELEC*INSEGPROC, MNHREAL_MPI, ZRECV, &
+                    INBSEG_PROC_XNSV,                                &
+                    IDECALN, MNHREAL_MPI, 0, NMNH_COMM_WORLD, IERR   )
 !
   IF (IPROC .EQ. 0) THEN
     ZLMA_PRT(1:NSV_ELEC*INSEGCELL,IL) = ZRECV(1:NSV_ELEC*INSEGCELL)
diff --git a/src/MNH/modd_precision.f90 b/src/MNH/modd_precision.f90
index afd0a3a21..421eec5f6 100644
--- a/src/MNH/modd_precision.f90
+++ b/src/MNH/modd_precision.f90
@@ -6,7 +6,7 @@
 ! Author:
 !  P. Wautelet 08/03/2019
 ! Modifications:
-!
+!  P. Wautelet 22/03/2019: add MNHINT/REAL32/64_MPI, MNH2REAL32/64_MPI + more public parameters
 !-----------------------------------------------------------------
 module modd_precision
 
@@ -20,6 +20,12 @@ implicit none
 
 private
 
+public :: MNHINT32, MNHINT64, MNHREAL32, MNHREAL64, MNHREAL128
+
+public :: MNHINT32_MPI,   MNHINT64_MPI
+public :: MNHREAL32_MPI,  MNHREAL64_MPI
+public :: MNH2REAL32_MPI, MNH2REAL64_MPI
+
 public :: MNHINT, MNHREAL
 public :: MNHINT_MPI, MNHREAL_MPI, MNH2REAL_MPI
 
@@ -37,26 +43,35 @@ integer, parameter :: MNHREAL32  = selected_real_kind( p = 6,  r = 37 )
 integer, parameter :: MNHREAL64  = selected_real_kind( p = 15, r = 307 )
 integer, parameter :: MNHREAL128 = selected_real_kind( p = 33, r = 4931 )
 
+integer, parameter :: MNHINT32_MPI  = MPI_INTEGER4
+integer, parameter :: MNHINT64_MPI  = MPI_INTEGER8
+
+integer, parameter :: MNHREAL32_MPI  = MPI_REAL4
+integer, parameter :: MNHREAL64_MPI  = MPI_REAL8
+
+integer, parameter :: MNH2REAL32_MPI  = MPI_2REAL
+integer, parameter :: MNH2REAL64_MPI  = MPI_2DOUBLE_PRECISION
+
 
 ! Kinds for MesoNH
 #if ( MNH_INT == 4 )
 integer, parameter :: MNHINT     = MNHINT32
-integer, parameter :: MNHINT_MPI = MPI_INTEGER4
+integer, parameter :: MNHINT_MPI = MNHINT32_MPI
 #elif ( MNH_INT == 8 )
 integer, parameter :: MNHINT     = MNHINT64
-integer, parameter :: MNHINT_MPI = MPI_INTEGER8
+integer, parameter :: MNHINT_MPI = MNHINT64_MPI
 #else
 #error "Invalid MNH_INT"
 #endif
 
 #if ( MNH_REAL == 4 )
 integer, parameter :: MNHREAL      = MNHREAL32
-integer, parameter :: MNHREAL_MPI  = MPI_REAL4
-integer, parameter :: MNH2REAL_MPI = MPI_2REAL
+integer, parameter :: MNHREAL_MPI  = MNHREAL32_MPI
+integer, parameter :: MNH2REAL_MPI = MNH2REAL32_MPI
 #elif ( MNH_REAL == 8 )
 integer, parameter :: MNHREAL      = MNHREAL64
-integer, parameter :: MNHREAL_MPI  = MPI_REAL8
-integer, parameter :: MNH2REAL_MPI = MPI_2DOUBLE_PRECISION
+integer, parameter :: MNHREAL_MPI  = MNHREAL64_MPI
+integer, parameter :: MNH2REAL_MPI = MNH2REAL64_MPI
 #elif ( MNH_REAL == 16 )
 integer, parameter :: MNHREAL     = MNHREAL128
 integer, parameter :: MNHREAL_MPI = MPI_REAL16
diff --git a/src/MNH/mode_elec_ll.f90 b/src/MNH/mode_elec_ll.f90
index dc4f100ef..0f613fff8 100644
--- a/src/MNH/mode_elec_ll.f90
+++ b/src/MNH/mode_elec_ll.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2010-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.
+!------------------------------------------------------------------------
 !     ###################
       MODULE MODE_ELEC_ll
 !     ###################
@@ -24,7 +25,8 @@
 !------------------------------------------------------------------------
 !
 USE MODD_MPIF
-USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+use modd_precision, only: MNHREAL_MPI
+USE MODD_VAR_ll,    ONLY: NMNH_COMM_WORLD
 !
 IMPLICIT NONE
 !
@@ -32,7 +34,6 @@ IMPLICIT NONE
 !
 !
 INTEGER, PARAMETER :: IFIRST_PROC = 0   ! 0/1 to increase numerotation of proc number 
-INTEGER, PARAMETER :: MPI_PRECISION = MPI_DOUBLE_PRECISION
 !
 !
 INTERFACE SUM_ELEC_ll
@@ -115,7 +116,7 @@ ZTAB = PSUM_INOUT
 INFO = -1
 !
 ! Sum(Proc)
-CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MPI_PRECISION, &
+CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MNHREAL_MPI, &
                    MPI_SUM, NMNH_COMM_WORLD, INFO)
 !
 END SUBROUTINE RSUM_ELEC_ll
@@ -152,7 +153,7 @@ INFO = -1
 !
 !*     1.1    max(Proc)
 !
-CALL MPI_ALLREDUCE(ZTAB, PMIN_INOUT, IDIM, MPI_PRECISION, &
+CALL MPI_ALLREDUCE(ZTAB, PMIN_INOUT, IDIM, MNHREAL_MPI, &
                    MPI_MIN, NMNH_COMM_WORLD, INFO)
 !
 !*     1.2    find the proc number of the maximum
@@ -202,7 +203,7 @@ INFO = -1
 !
 !*     1.1    max(Proc)
 !
-CALL MPI_ALLREDUCE(ZTAB, PMAX_INOUT, IDIM, MPI_PRECISION, &
+CALL MPI_ALLREDUCE(ZTAB, PMAX_INOUT, IDIM, MNHREAL_MPI, &
                    MPI_MAX, NMNH_COMM_WORLD, INFO)
 !
 !*     1.2    find the proc number of the maximum
@@ -420,7 +421,7 @@ INFO = -1
 !
 !*     1.1    sum(Proc)
 !
-CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MPI_PRECISION, &
+CALL MPI_ALLREDUCE(ZTAB, PSUM_INOUT, IDIM, MNHREAL_MPI, &
                    MPI_SUM, NMNH_COMM_WORLD, INFO)
 !
 END SUBROUTINE RSUM0_ELEC_ll
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 3faed5ea6..e1581455a 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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.
 !-----------------------------------------------------------------
 !     #######################
@@ -349,7 +349,7 @@ USE MODD_IO_ll,     ONLY: NIO_VERB,NVERB_DEBUG,TFILE_DUMMY,TFILE_OUTPUTLISTING
 USE MODD_CONF_n
 USE MODD_NSV,      ONLY : NSV,NSV_CHEM,           &
                           NSV_DSTEND, NSV_DSTBEG
-use modd_precision, only: LFIINT
+use modd_precision, only: LFIINT, MNHREAL_MPI
 !
 USE MODN_BLANK
 !
@@ -1212,7 +1212,7 @@ IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN
 ! determine whether the model is flat or no
 !
   ZZS_MAX = ABS( MAXVAL(XZS(NIB:NIU-JPHEXT,NJB:NJU-JPHEXT)))
-  CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MPI_PRECISION, MPI_MAX,  &
+  CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MNHREAL_MPI, MPI_MAX,  &
                      NMNH_COMM_WORLD,IINFO_ll)
   IF( ABS(ZZS_MAX_ll)  < 1.E-10 ) THEN
     LFLAT=.TRUE.
diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90
index ae75dc536..16fe93871 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -230,8 +230,9 @@ USE MODD_DYN_n,       ONLY: LRES, XRES
 USE MODD_LUNIT_n,     ONLY: TLUOUT
 USE MODD_MPIF
 USE MODD_PARAMETERS
+use modd_precision,   only: MNHREAL_MPI
 USE MODD_REF,         ONLY: LBOUSS
-USE MODD_VAR_ll,      ONLY: MPI_PRECISION, NMNH_COMM_WORLD , NPROC
+USE MODD_VAR_ll,      ONLY: NMNH_COMM_WORLD , NPROC
 !
 USE MODE_IO_ll,       ONLY: CLOSE_ll
 USE MODE_ll
@@ -687,7 +688,7 @@ IF (LBUDGET_W) CALL BUDGET (PRWS,3,'PRES_BU_RW')
 !              -----------------------------
 !
 ZMAX = MAXVAL(ABS ( PRHODREF(:,:,IKB)-PRHODREF(:,:,IKE)) )
-CALL MPI_ALLREDUCE(ZMAX, ZMAX_ll, 1, MPI_PRECISION, MPI_MAX,  &
+CALL MPI_ALLREDUCE(ZMAX, ZMAX_ll, 1, MNHREAL_MPI, MPI_MAX,  &
                    NMNH_COMM_WORLD, KINFO)
 !IF (      ABS(PRHODREF(IIB,IJB,IKB)-PRHODREF(IIB,IJB,IKE)) > 1.E-12 &
 !  .AND. KTCOUNT >0 ) THEN
diff --git a/src/MNH/retrieve2_nest_infon.f90 b/src/MNH/retrieve2_nest_infon.f90
index 9464e0431..5a12a1f46 100644
--- a/src/MNH/retrieve2_nest_infon.f90
+++ b/src/MNH/retrieve2_nest_infon.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-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.
@@ -89,7 +89,7 @@ END MODULE MODI_RETRIEVE2_NEST_INFO_n
 !!      J Stein         04/07/01 add cartesian case
 !!      M.Faivre            2014
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
-!!      J.Escobar : 01/06/2016 : Bug in type of ZBUF INTEGER => REAL & use MPI_PRECISION for r4/R8 compatibility
+!!      J.Escobar : 01/06/2016 : Bug in type of ZBUF INTEGER => REAL & use MNHREAL_MPI for r4/R8 compatibility
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !-------------------------------------------------------------------------------
 !
@@ -106,8 +106,9 @@ USE MODD_MPIF
 USE MODD_PARAMETERS
 USE MODD_PGDDIM
 USE MODD_PGDGRID
+use modd_precision,    only: MNHREAL_MPI
 USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
-USE MODD_VAR_ll,       ONLY: YSPLITTING, NMNH_COMM_WORLD, MPI_PRECISION
+USE MODD_VAR_ll,       ONLY: YSPLITTING, NMNH_COMM_WORLD
 !
 USE MODE_GRIDPROJ
 USE MODE_MODELN_HANDLER 
@@ -302,13 +303,13 @@ ENDIF
 ! get the value of XXHAT and XYHAT at the origin of global son model
   ZXHATFIRSTENTRY_C = XXHAT(JPHEXT+1)
   ZYHATFIRSTENTRY_C = XYHAT(JPHEXT+1)
-  CALL MPI_ALLREDUCE(XXHAT(JPHEXT+1), ZXHATFIRSTENTRY_C, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
-  CALL MPI_ALLREDUCE(XYHAT(JPHEXT+1), ZYHATFIRSTENTRY_C, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
+  CALL MPI_ALLREDUCE(XXHAT(JPHEXT+1), ZXHATFIRSTENTRY_C, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
+  CALL MPI_ALLREDUCE(XYHAT(JPHEXT+1), ZYHATFIRSTENTRY_C, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
 ! get the latitude and longitude ZLAT2 and ZLON2 at the origin of global son model
   ZLAT2GLB = ZLAT2
   ZLON2GLB = ZLON2
-  CALL MPI_ALLREDUCE(ZLAT2, ZLAT2GLB, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
-  CALL MPI_ALLREDUCE(ZLON2, ZLON2GLB, 1,MPI_PRECISION, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
+  CALL MPI_ALLREDUCE(ZLAT2, ZLAT2GLB, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
+  CALL MPI_ALLREDUCE(ZLON2, ZLON2GLB, 1,MNHREAL_MPI, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll)
 
   ! identify the process that own the origin of global son model, and communicate the global indices of the origin to all processes
   IF ( ZXHATFIRSTENTRY_C > XPGDXHAT(JPHEXT+1) .AND. ZXHATFIRSTENTRY_C <= XPGDXHAT(SIZE(XPGDXHAT)-JPHEXT) .AND. &
@@ -365,8 +366,8 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
   ZXHATFIRSTENTRY_C = XXHAT(JPHEXT+1)
   ZYHATFIRSTENTRY_C = XYHAT(JPHEXT+1)
   ! broadcast XXHAT(JPHEXT+1) and find which process' father subdomain contains the coords of the first physical entry of local son subdomain
-  CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll )
-  CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll )
+  CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll )
+  CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll )
   !
   ! communicating the value of XPGDXHAT (X direction) at the origin of local son subdomain
   IF (  IPROC == ISP-1 .AND. ZXHATFIRSTENTRY_C >= XPGDXHAT(JPHEXT+1) &
@@ -389,9 +390,9 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
     ! the index of the first physical point of the local son subdomain of IPROC is II on the current process
     ! send XPGDXHAT(II) to process IPROC
     ZSENDBUF = XPGDXHAT(II)
-    CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
+    CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
   ELSE IF ( IPROC == ISP-1 ) THEN
-    CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
+    CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
     ZPGDXHATIXY1 = ZRECVBUF
   ELSE
     ! the other processes do nothing...
@@ -418,9 +419,9 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
     ! the index of the first physical point of the local son subdomain is II on the current process
     ! send XPGDYHAT(II) to process IPROC
     ZSENDBUF = XPGDYHAT(II)
-    CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
+    CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
   ELSE IF ( IPROC == ISP-1 ) THEN
-    CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
+    CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
     ZPGDYHATIXY1 = ZRECVBUF
   ELSE
     ! the other processes do nothing...
@@ -437,8 +438,8 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
   ZXHATFIRSTENTRY_C = XXHAT(JPHEXT+1)
   ZYHATFIRSTENTRY_C = XYHAT(JPHEXT+1)
   ! broadcast XXHAT(JPHEXT+1) and find which process' father subdomain contains the coords of the first physical entry of local son subdomain
-  CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll )
-  CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll )
+  CALL MPI_BCAST( ZXHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll )
+  CALL MPI_BCAST( ZYHATFIRSTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll )
   !
   ! communicating the value of XPGDXHAT (X direction) at the origin of local son subdomain
   IF (  IPROC == ISP-1 .AND. ZXHATFIRSTENTRY_C >= XPGDXHAT(JPHEXT+1) &
@@ -462,9 +463,9 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
     ! XPGDXHAT(II+1) is also defined on current process since HALO is at least 1
     ! send XPGDXHAT(II+1) to process IPROC
     ZSENDBUF = XPGDXHAT(II+1)
-    CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll )
+    CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll )
   ELSE IF ( IPROC == ISP-1 ) THEN
-    CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
+    CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
     ZPGDXHATIXY1_1 = ZRECVBUF
   ELSE
     ! the other processes do nothing...
@@ -492,9 +493,9 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
     ! XPGDYHAT(II+1) is also defined on current process since HALO is at least 1
     ! send XPGDYHAT(II+1) to process IPROC
     ZSENDBUF = XPGDYHAT(II+1)
-    CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll )
+    CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II+1,NMNH_COMM_WORLD,IINFO_ll )
   ELSE IF ( IPROC == ISP-1 ) THEN
-    CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
+    CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
     ZPGDYHATIXY1_1 = ZRECVBUF
   ELSE
     ! the other processes do nothing...
@@ -534,8 +535,8 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
   ZXHATLASTENTRY_C = XXHAT(SIZE(XXHAT)-JPHEXT)
   ZYHATLASTENTRY_C = XYHAT(SIZE(XYHAT)-JPHEXT)
   ! broadcast XXHAT(SIZE(XXHAT)-JPHEXT) and find which process' father subdomain contains the coords of the last physical entry of local son subdomain
-  CALL MPI_BCAST( ZXHATLASTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll )
-  CALL MPI_BCAST( ZYHATLASTENTRY_C, 1, MPI_PRECISION, IPROC, NMNH_COMM_WORLD, IINFO_ll )
+  CALL MPI_BCAST( ZXHATLASTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll )
+  CALL MPI_BCAST( ZYHATLASTENTRY_C, 1, MNHREAL_MPI, IPROC, NMNH_COMM_WORLD, IINFO_ll )
   !
   ! communicating the value of XPGDXHAT (X direction) at the origin of local son subdomain
   IF (  IPROC == ISP-1 .AND. ZXHATLASTENTRY_C >= XPGDXHAT(JPHEXT+1) &
@@ -565,9 +566,9 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
     ! send XPGDXHAT(II) to process IPROC
     ! XPGDYHAT(II+1) is also defined on current process since HALO is at least 1
     ZSENDBUF = XPGDXHAT(II)
-    CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
+    CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
   ELSE IF ( IPROC == ISP-1 ) THEN
-    CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
+    CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
     ZPGDXHATIXY2_1 = ZRECVBUF
   ELSE
     ! the other processes do nothing...
@@ -600,9 +601,9 @@ DO IPROC = 0,ISNPROC-1  !loop on all processes
     ! the index of the last physical point of the local son subdomain is II on the current process
     ! send XPGDYHAT(II) to process IPROC
     ZSENDBUF = XPGDYHAT(II)
-    CALL MPI_SEND( ZSENDBUF,1,MPI_PRECISION,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
+    CALL MPI_SEND( ZSENDBUF,1,MNHREAL_MPI,IPROC,ISP+II,NMNH_COMM_WORLD,IINFO_ll )
   ELSE IF ( IPROC == ISP-1 ) THEN
-    CALL MPI_RECV( ZRECVBUF,1,MPI_PRECISION,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
+    CALL MPI_RECV( ZRECVBUF,1,MNHREAL_MPI,MPI_ANY_SOURCE,MPI_ANY_TAG,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll )
     ZPGDYHATIXY2_1 = ZRECVBUF
   ELSE
     ! the other processes do nothing...
@@ -616,8 +617,8 @@ ENDDO
 
 ! 3.3 - now we have the coordinates (ZPGDXHATIXY2_1, ZPGDYHATIXY2_1) of the point in father grid just right+north of the LOCAL son subdomain
 !       We compute the coordinates of the last point in father grid of the GLOBAL son subdomain
-CALL MPI_ALLREDUCE(ZPGDXHATIXY2_1, IXSUPCOORD1, 1,MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll)
-CALL MPI_ALLREDUCE(ZPGDYHATIXY2_1, IYSUPCOORD1, 1,MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll)
+CALL MPI_ALLREDUCE(ZPGDXHATIXY2_1, IXSUPCOORD1, 1,MNHREAL_MPI, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll)
+CALL MPI_ALLREDUCE(ZPGDYHATIXY2_1, IYSUPCOORD1, 1,MNHREAL_MPI, MPI_MAX, NMNH_COMM_WORLD, IINFO_ll)
 
 !     we compute the index of this point in local father grid
 IF ( IXSUPCOORD1 >= XPGDXHAT(1+JPHEXT) .AND. IXSUPCOORD1 <= XPGDXHAT(SIZE(XPGDXHAT)-JPHEXT) .AND. &
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 02a6f8a47..90c8a7e35 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -230,6 +230,7 @@ USE MODD_PASPOL_n
 !$20140515
 USE MODD_VAR_ll, ONLY : NPROC
 USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX
+use modd_precision, only: MNHREAL_MPI
 !
 USE MODE_GRIDCART         ! Executive modules
 USE MODE_GRIDPROJ
@@ -1158,7 +1159,7 @@ ZTIME1  = ZTIME2
 !* vertical interpolation
 !
 ZZS_MAX = ABS( MAXVAL(XZS(:,:)))
-CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MPI_PRECISION, MPI_MAX,  &
+CALL MPI_ALLREDUCE(ZZS_MAX, ZZS_MAX_ll, 1, MNHREAL_MPI, MPI_MAX,  &
                      NMNH_COMM_WORLD,IINFO_ll)
 IF ( (ZZS_MAX_ll>0.) .AND. (NDXRATIO/=1 .OR. NDYRATIO/=1) )  THEN
   CALL MPPDB_CHECK3D(XUT,"SPAWN_M2 before VER_INTERP_FIELD:XUT",PRECISION)
diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90
index 63bd460af..b351b8d84 100644
--- a/src/MNH/spawn_zs.f90
+++ b/src/MNH/spawn_zs.f90
@@ -103,9 +103,10 @@ END MODULE MODI_SPAWN_ZS
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_PARAMETERS, ONLY : JPHEXT       ! Declarative modules
-USE MODD_CONF,       ONLY : NVERB
+USE MODD_PARAMETERS, ONLY: JPHEXT       ! Declarative modules
+USE MODD_CONF,       ONLY: NVERB
 USE MODD_LUNIT_n,    ONLY: TLUOUT
+use modd_precision,  only: MNHREAL_MPI
 !
 USE MODD_BIKHARDT_n
 !
@@ -192,7 +193,7 @@ INTEGER                :: KDXRATIO_C, KDYRATIO_C
 !$20140704
 !$20140711 not INT, REAL !!
 REAL                   :: ZMAXVAL
-REAL                   :: LOCMAXVAL
+REAL                   :: ZLOCMAXVAL
 !$20140801
 INTEGER                :: IORX, IORY, IIBINT,IJBINT,IIEINT,IJEINT
 INTEGER                :: IXOR_C_ll, IXEND_C_ll  ! origin and end of the local subdomain of the child model 2
@@ -414,8 +415,8 @@ IF (KDXRATIO/=1 .OR. KDYRATIO/=1) THEN
 !
     ALLOCATE(ZDZS_3D(SIZE(ZDZS_C,1),SIZE(ZDZS_C,2),1))  ! WARNING : this is highly inefficient, this copy is unecessary
     ZDZS_3D(:,:,1)=ZDZS_C(:,:)                          ! We could write a function MAX2D_ll or use a POINTER for ZDZS_3D
-    LOCMAXVAL=MAXVAL(ABS(ZDZS_C))
-    CALL MPI_ALLREDUCE(LOCMAXVAL,ZMAXVAL,1,MPI_PRECISION,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll)
+    ZLOCMAXVAL=MAXVAL(ABS(ZDZS_C))
+    CALL MPI_ALLREDUCE(ZLOCMAXVAL,ZMAXVAL,1,MNHREAL_MPI,MPI_MAX,NMNH_COMM_WORLD,IINFO_ll)
     IF (ZMAXVAL<1.E-3) THEN
       EXIT
     ENDIF
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 188a9f0c6..dd015ccae 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -203,6 +203,7 @@ USE MODD_RADAR, ONLY: XLAT_RAD,XELEV,&
      NCURV_INTERPOL,LATT,LCART_RAD,NPTS_H,NPTS_V,XGRID,&
      LREFR,LDNDZ,NMAX,CNAME_RAD,NDIFF,&
      XLON_RAD,XALT_RAD,XLAM_RAD,XDT_RAD,LWBSCS,LWREFL
+use modd_precision,       only: MNHREAL_MPI
 !
 USE MODI_RADAR_SIMULATOR
 !
@@ -3854,7 +3855,7 @@ IF(LRADAR .AND. LUSERR) THEN
         DEALLOCATE(CLATLON)
       END DO
     ELSE ! polar output
-       CALL MPI_ALLREDUCE(ZWORK42, ZWORK42_BIS, SIZE(ZWORK42), MPI_PRECISION, MPI_MAX, NMNH_COMM_WORLD, IERR)
+       CALL MPI_ALLREDUCE(ZWORK42, ZWORK42_BIS, SIZE(ZWORK42), MNHREAL_MPI, MPI_MAX, NMNH_COMM_WORLD, IERR)
       DO JI=1,NBRAD
         IEL=NBELEV(JI)
         DO JEL=1,IEL
diff --git a/src/SURFEX/mode_gridtype_conf_proj.F90 b/src/SURFEX/mode_gridtype_conf_proj.F90
index ef3407628..4e8893414 100644
--- a/src/SURFEX/mode_gridtype_conf_proj.F90
+++ b/src/SURFEX/mode_gridtype_conf_proj.F90
@@ -41,10 +41,11 @@ CONTAINS
 !
 USE MODD_SURF_PAR, ONLY : XUNDEF, NUNDEF
 #ifdef MNH_PARALLEL
-USE MODD_VAR_ll, ONLY : NPROC, IP, MPI_PRECISION, NMNH_COMM_WORLD, YSPLITTING
 USE MODD_MPIF
+use modd_precision, only: MNHREAL_MPI
 USE MODE_SPLITTINGZ_ll, ONLY : LINI_PARAZ
 USE MODE_TOOLS_ll, ONLY : GET_OR_ll
+USE MODD_VAR_ll, ONLY : NPROC, IP, NMNH_COMM_WORLD, YSPLITTING
 #endif
 !
 IMPLICIT NONE
@@ -136,7 +137,7 @@ IF ( NPROC > 1 .AND. LINI_PARAZ) THEN
   ENDIF
   CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) 
 ! Then this process broadcasts the space steps in X direction in order to have the same space steps on all processes
-  CALL MPI_BCAST(PGRID_PAR(9), 1, MPI_PRECISION, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll)
+  CALL MPI_BCAST(PGRID_PAR(9), 1, MNHREAL_MPI, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll)
   !
   ! get the processes with IL>0 with the southmost points
   CALL MPI_ALLREDUCE(IYOR, IYORMIN, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) 
@@ -147,7 +148,7 @@ IF ( NPROC > 1 .AND. LINI_PARAZ) THEN
   ENDIF
   CALL MPI_ALLREDUCE(IROOT, IROOTPROC, 1, MPI_INTEGER, MPI_MIN, NMNH_COMM_WORLD, IINFO_ll) 
 ! Then this process broadcasts the space steps in Y direction in order to have the same space steps on all processes
-  CALL MPI_BCAST(PGRID_PAR(10), 1, MPI_PRECISION, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll)
+  CALL MPI_BCAST(PGRID_PAR(10), 1, MNHREAL_MPI, IROOTPROC, NMNH_COMM_WORLD, IINFO_ll)
 ENDIF
 #endif
 !
-- 
GitLab