diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
index 5bdb80c881f23805975422a43c13060985167c48..7a4d853e97417d32893df6b8ba3d94a9d8af2e8a 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
@@ -9,8 +9,9 @@
 !-----------------------------------------------------------------
 MODULE mode_util
   USE MODD_IO,         ONLY: TFILE_ELT
-  USE MODD_NETCDF,     ONLY: DIMCDF, IDCDF_KIND
+  USE MODD_NETCDF,     ONLY: DIMCDF, CDFINT
   USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH, NMNHNAMELGTMAX
+  use modd_precision,  only: LFIINT
 
   USE MODE_FIELD
   USE MODE_IO_FIELD_READ
@@ -50,8 +51,8 @@ MODULE mode_util
      TYPE(DIMCDF),DIMENSION(:),ALLOCATABLE :: TDIMS  ! Dimensions of the field
   END TYPE workfield
 
-  LOGICAL(KIND=LFI_INT), PARAMETER :: ltrue  = .TRUE.
-  LOGICAL(KIND=LFI_INT), PARAMETER :: lfalse = .FALSE.
+  LOGICAL(KIND=LFIINT), PARAMETER :: ltrue  = .TRUE.
+  LOGICAL(KIND=LFIINT), PARAMETER :: lfalse = .FALSE.
 
   CHARACTER(LEN=6) :: CPROGRAM_ORIG
 
@@ -87,9 +88,9 @@ CONTAINS
     INTEGER                                  :: leng
     INTEGER                                  :: IID, IRESP, IDATES, ICURDATE
     INTEGER                                  :: IDXDATE, IDXTIME
-    INTEGER(KIND=LFI_INT)                    :: iresp2,ilu,ileng,ipos
-    INTEGER(KIND=IDCDF_KIND)                 :: kcdf_id, kcdf_id2, var_id
-    INTEGER(KIND=IDCDF_KIND)                 :: status
+    INTEGER(KIND=LFIINT)                     :: iresp2,ilu,ileng,ipos
+    INTEGER(KIND=CDFINT)                     :: kcdf_id, kcdf_id2, var_id
+    INTEGER(KIND=CDFINT)                     :: status
     LOGICAL                                  :: ladvan
     LOGICAL                                  :: GOK
     TYPE(TLFIDATE),DIMENSION(MAXDATES)       :: TLFIDATES
@@ -629,8 +630,8 @@ END DO
     CHARACTER(LEN=16) :: YMNHVERSION
     CHARACTER(LEN=:),ALLOCATABLE :: YHISTORY
     INTEGER :: ilen, ji
-    INTEGER(KIND=IDCDF_KIND) :: status
-    INTEGER(KIND=IDCDF_KIND) :: kcdf_id
+    INTEGER(KIND=CDFINT) :: status
+    INTEGER(KIND=CDFINT) :: kcdf_id
 
 
     CALL PRINT_MSG(NVERB_DEBUG,'IO','def_ncdf','called')
@@ -683,7 +684,7 @@ END DO
     INTEGER                                  :: IDIMS
     INTEGER                                  :: INSRC
     INTEGER                                  :: ISRC
-    INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMLEN
+    INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMLEN
     logical,dimension(knaf)                  :: gtimedep_in, gtimedep_out
 
     CHARACTER(LEN=:),       ALLOCATABLE :: YTAB0D
@@ -959,10 +960,10 @@ END DO
     TYPE(option),DIMENSION(:),   INTENT(IN)  :: options
     INTEGER,                     INTENT(IN)  :: runmode
 
-    INTEGER                     :: idx, IRESP2
-    INTEGER(KIND=IDCDF_KIND)    :: omode
-    INTEGER(KIND=IDCDF_KIND)    :: status
-    INTEGER(KIND=LFI_INT)       :: ilu,iresp
+    INTEGER              :: idx, IRESP2
+    INTEGER(KIND=CDFINT) :: omode
+    INTEGER(KIND=CDFINT) :: status
+    INTEGER(KIND=LFIINT) :: ilu,iresp
 
 
     CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_FILES','called')
@@ -1112,8 +1113,8 @@ END DO
     CHARACTER(LEN=NMNHNAMELGTMAX),DIMENSION(nbvar) :: YVARS
     INTEGER                  :: ji
     INTEGER                  :: idx1, idx2
-    INTEGER(KIND=IDCDF_KIND) :: status
-    INTEGER(KIND=IDCDF_KIND) :: omode
+    INTEGER(KIND=CDFINT)     :: status
+    INTEGER(KIND=CDFINT)     :: omode
 
     CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_SPLIT_NCFILES_OUT','called')
 
@@ -1184,14 +1185,14 @@ END DO
     USE MODD_DIM_n,      ONLY: NKMAX
     USE MODD_PARAMETERS, ONLY: JPVEXT
 
-    INTEGER(KIND=IDCDF_KIND), INTENT(IN)    :: KFILE_ID
-    INTEGER(KIND=IDCDF_KIND), INTENT(IN)    :: KVAR_ID
-    TYPE(workfield),          INTENT(INOUT) :: TPREC
+    INTEGER(KIND=CDFINT), INTENT(IN)    :: KFILE_ID
+    INTEGER(KIND=CDFINT), INTENT(IN)    :: KVAR_ID
+    TYPE(workfield),      INTENT(INOUT) :: TPREC
 
     INTEGER                                  :: ILENG
     INTEGER                                  :: JDIM
-    INTEGER(KIND=IDCDF_KIND)                 :: ISTATUS
-    INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMS_ID
+    INTEGER(KIND=CDFINT)                     :: ISTATUS
+    INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMS_ID
 
     CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Metadata_get_nc4','called')
 
diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 32fc2c42a5556604329dde08bf3a1bc4b0e56a7b..a27528eebe0f92b06e94ef1464a3f3f11396d382 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -13,8 +13,9 @@
 
 MODULE MODD_IO
 !
-USE MODD_NETCDF,     ONLY: IDCDF_KIND, IOCDF, TPTR2DIMCDF
+USE MODD_NETCDF,     ONLY: IOCDF, TPTR2DIMCDF
 USE MODD_PARAMETERS, ONLY: NDIRNAMELGTMAX, NFILENAMELGTMAX
+use modd_precision,  only: CDFINT, LFIINT
 !
 IMPLICIT NONE 
 !
@@ -94,20 +95,20 @@ TYPE TFILEDATA
   INTEGER,DIMENSION(3) :: NMNHVERSION = (/0,0,0/) !MesoNH version used to create the file
   !
   ! Fields for LFI files
-  INTEGER(KIND=LFI_INT) :: NLFININAR = 0  !Number of articles of the LFI file (only accurate if file opened in read mode)
-  INTEGER(KIND=LFI_INT) :: NLFINPRAR = 0  !Number of predicted articles of the LFI file (non crucial)
-  INTEGER               :: NLFITYPE  = -1 !Type of the file (used to generate list of files to transfer)
-  INTEGER               :: NLFIVERB  = 1  !LFI verbosity level
-  INTEGER(KIND=LFI_INT) :: NLFIFLU   = -1 !File identifier
+  INTEGER(KIND=LFIINT) :: NLFININAR = 0  !Number of articles of the LFI file (only accurate if file opened in read mode)
+  INTEGER(KIND=LFIINT) :: NLFINPRAR = 0  !Number of predicted articles of the LFI file (non crucial)
+  INTEGER              :: NLFITYPE  = -1 !Type of the file (used to generate list of files to transfers)
+  INTEGER              :: NLFIVERB  = 1  !LFI verbosity level
+  INTEGER(KIND=LFIINT) :: NLFIFLU   = -1 !File identifier
   !
   ! Fields for netCDF files
-  INTEGER(KIND=IDCDF_KIND) :: NNCID = -1 !File identifier
-  INTEGER(KIND=IDCDF_KIND) :: NNCNAR = 0 !Number of articles of the netCDF file (only accurate if file opened in read mode)
-  LOGICAL                  :: LNCREDUCE_FLOAT_PRECISION = .FALSE. ! Reduce the precision of floats to single precision
+  INTEGER(KIND=CDFINT) :: NNCID = -1 !File identifier
+  INTEGER(KIND=CDFINT) :: NNCNAR = 0 !Number of articles of the netCDF file (only accurate if file opened in read mode)
+  LOGICAL              :: LNCREDUCE_FLOAT_PRECISION = .FALSE. ! Reduce the precision of floats to single precision
                                                                   ! instead of double precision
-  LOGICAL                  :: LNCCOMPRESS = .FALSE. ! Do compression on fields
-  INTEGER(KIND=IDCDF_KIND) :: NNCCOMPRESS_LEVEL = 0 ! Compression level
-  TYPE(IOCDF),POINTER      :: TNCDIMS => NULL()     ! Structure containing netCDF dimensions
+  LOGICAL              :: LNCCOMPRESS = .FALSE. ! Do compression on fields
+  INTEGER(KIND=CDFINT) :: NNCCOMPRESS_LEVEL = 0 ! Compression level
+  TYPE(IOCDF),POINTER  :: TNCDIMS => NULL()     ! Structure containing netCDF dimensions
   TYPE(TPTR2DIMCDF),DIMENSION(:,:),ALLOCATABLE :: TNCCOORDS ! Structure pointing to the coordinates variables
   !
   !Fields for other files
diff --git a/src/LIB/SURCOUCHE/src/modd_netcdf.f90 b/src/LIB/SURCOUCHE/src/modd_netcdf.f90
index 24541396d350d2544517e86aaef83918b1bc81f0..b73380b5636a81333b7eeafce263fc062f56bf5d 100644
--- a/src/LIB/SURCOUCHE/src/modd_netcdf.f90
+++ b/src/LIB/SURCOUCHE/src/modd_netcdf.f90
@@ -7,9 +7,10 @@
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !-----------------------------------------------------------------
 MODULE MODD_NETCDF
-IMPLICIT NONE 
 
-INTEGER,PARAMETER :: IDCDF_KIND = SELECTED_INT_KIND(8)
+use modd_precision, only: CDFINT
+
+IMPLICIT NONE
 
 TYPE IOCDF
    TYPE(DIMCDF), POINTER :: DIM_NI      => NULL()
@@ -26,10 +27,10 @@ TYPE IOCDF
 END TYPE IOCDF
 
 TYPE DIMCDF
-   CHARACTER(LEN=32)        :: NAME = ''
-   INTEGER(KIND=IDCDF_KIND) :: LEN  = 0
-   INTEGER(KIND=IDCDF_KIND) :: ID   = -1
-   TYPE(DIMCDF), POINTER    :: NEXT => NULL()
+   CHARACTER(LEN=32)     :: NAME = ''
+   INTEGER(KIND=CDFINT)  :: LEN  = 0
+   INTEGER(KIND=CDFINT)  :: ID   = -1
+   TYPE(DIMCDF), POINTER :: NEXT => NULL()
 END TYPE DIMCDF
 
 TYPE TPTR2DIMCDF
diff --git a/src/LIB/SURCOUCHE/src/modd_var_ll.f90 b/src/LIB/SURCOUCHE/src/modd_var_ll.f90
index b0688132fb2fb390fe09fa702f175279b3817949..cffb275aa3389461dd575d1c32ea877980898af4 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_double_double.f90 b/src/LIB/SURCOUCHE/src/mode_double_double.f90
index 19f0b36104e273539c2579bf71471b2806546eef..809944ce84da22fcc09397b1a5ff0542bc96b098 100644
--- a/src/LIB/SURCOUCHE/src/mode_double_double.f90
+++ b/src/LIB/SURCOUCHE/src/mode_double_double.f90
@@ -43,24 +43,13 @@ MODULE mode_repro_sum
 CONTAINS
 
   SUBROUTINE INIT_DD(KINFO)
+    use modd_precision, only: MNHREAL_MPI
     IMPLICIT NONE
     INTEGER, INTENT(OUT) :: KINFO ! MPI return status
-    REAL                 :: REAL_DEFAULT
-    INTEGER,PARAMETER    :: REAL_KIND=KIND(REAL_DEFAULT)
-    INTEGER              :: MNH_MPI_REAL
-
-    !
-    ! find the default type of REAL for MESONH on MPI
-    !
-     IF (REAL_KIND .EQ. 4 ) THEN
-        MNH_MPI_REAL = MPI_REAL4
-     ELSE
-        MNH_MPI_REAL = MPI_REAL8
-    END IF
     !
     ! define the double-double for MPI
     !
-    CALL MPI_TYPE_CONTIGUOUS(2, MNH_MPI_REAL ,MNH_DOUBLE_DOUBLE , KINFO)
+    CALL MPI_TYPE_CONTIGUOUS(2, MNHREAL_MPI ,MNH_DOUBLE_DOUBLE , KINFO)
     CALL MPI_TYPE_COMMIT(MNH_DOUBLE_DOUBLE , KINFO)
     !
     ! define the double-double sum = MNH_SUM_DD  for MPI 
diff --git a/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90 b/src/LIB/SURCOUCHE/src/mode_exchange2_ll.f90
index 767482a5ccab76a4db3d721566ebbc2e0e097dcc..dec89ca379f9b9850675115ac64a81174c89ab45 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 0dff8c59c7e7fbb228ee7097a15b0a2f8aa54d9e..6e85037bdcbf621066df782bc2ed394fcf89fb0c 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_gather.f90 b/src/LIB/SURCOUCHE/src/mode_gather.f90
index adf0d740107fe9ac44bec0bb6f6e564a9303f2d5..fc88e913300251140d65b5f1786e4503868c4567 100644
--- a/src/LIB/SURCOUCHE/src/mode_gather.f90
+++ b/src/LIB/SURCOUCHE/src/mode_gather.f90
@@ -11,18 +11,11 @@
 !
 !-----------------------------------------------------------------
 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
-
 MODULE MODE_GATHER_ll
 
 USE MODD_MPIF
-!JUANZ
-USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD
-!JUANZ
+use modd_precision, only: MNHREAL_MPI
+USE MODD_VAR_ll,    ONLY: NMNH_COMM_WORLD
 
 IMPLICIT NONE 
 
@@ -74,7 +67,7 @@ ELSE
   PRINT *,'Error GATHERALL_X1'
 END IF
 ! PRECV variable of IROOT processor contains the global field
-CALL MPI_BCAST(PRECV,SIZE(PRECV),MPI_FLOAT,IROOT-1,NMNH_COMM_WORLD,KRESP)
+CALL MPI_BCAST(PRECV,SIZE(PRECV),MNHREAL_MPI,IROOT-1,NMNH_COMM_WORLD,KRESP)
 
 END SUBROUTINE GATHERALL_X1
 
@@ -99,7 +92,7 @@ ELSE
   PRINT *,'Error GATHERALL_X2'
 END IF
 ! PRECV variable of IROOT processor contains the global field
-CALL MPI_BCAST(PRECV,SIZE(PRECV),MPI_FLOAT,IROOT-1,NMNH_COMM_WORLD,KRESP)
+CALL MPI_BCAST(PRECV,SIZE(PRECV),MNHREAL_MPI,IROOT-1,NMNH_COMM_WORLD,KRESP)
 
 END SUBROUTINE GATHERALL_X2
 
@@ -125,7 +118,7 @@ ELSE
   KRESP = -1
 END IF
 ! PRECV variable of IROOT processor contains the global field
-CALL MPI_BCAST(PRECV,SIZE(PRECV),MPI_FLOAT,IROOT-1,NMNH_COMM_WORLD,KRESP)
+CALL MPI_BCAST(PRECV,SIZE(PRECV),MNHREAL_MPI,IROOT-1,NMNH_COMM_WORLD,KRESP)
 
 END SUBROUTINE GATHERALL_X3
 
@@ -220,7 +213,7 @@ IF (ISP == KROOT)  THEN
       IF (JI == KROOT) THEN 
         XP = PSEND(IXO:IXE)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
 
     ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN 
@@ -228,7 +221,7 @@ IF (ISP == KROOT)  THEN
       IF (JI==KROOT) THEN 
         XP = PSEND(IYO:IYE)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -241,15 +234,15 @@ ELSE
   IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN
     XP=>PSEND(IXO:IXE)
     NB_REQ = 1
-    CALL MPI_ISEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR)
+    CALL MPI_ISEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR)
     CALL MPI_WAITALL(NB_REQ,REQ,MNH_STATUSES_IGNORE,IERR)
-    !CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    !CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN
     XP=>PSEND(IYO:IYE)
     NB_REQ = 1
-    CALL MPI_ISEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR)
+    CALL MPI_ISEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR)
     CALL MPI_WAITALL(NB_REQ,REQ,MNH_STATUSES_IGNORE,IERR)
-    !CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    !CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -290,7 +283,7 @@ IF (ISP == KROOT)  THEN
       IF (JI == KROOT) THEN 
         XP = PSEND(IXO:IXE,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
 
     ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN 
@@ -298,7 +291,7 @@ IF (ISP == KROOT)  THEN
       IF (JI==KROOT) THEN 
         XP = PSEND(IYO:IYE,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -310,10 +303,10 @@ ELSE
   
   IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN
     XP=>PSEND(IXO:IXE,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN
     XP=>PSEND(IYO:IYE,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -353,7 +346,7 @@ IF (ISP == KROOT)  THEN
       IF (JI == KROOT) THEN 
         XP = PSEND(IXO:IXE,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
 
     ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN 
@@ -361,7 +354,7 @@ IF (ISP == KROOT)  THEN
       IF (JI==KROOT) THEN 
         XP = PSEND(IYO:IYE,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -373,10 +366,10 @@ ELSE
   
   IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN
     XP=>PSEND(IXO:IXE,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN
     XP=>PSEND(IYO:IYE,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -416,7 +409,7 @@ IF (ISP == KROOT)  THEN
       IF (JI == KROOT) THEN 
         XP = PSEND(IXO:IXE,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
 
     ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN 
@@ -424,7 +417,7 @@ IF (ISP == KROOT)  THEN
       IF (JI==KROOT) THEN 
         XP = PSEND(IYO:IYE,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -436,10 +429,10 @@ ELSE
   
   IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN
     XP=>PSEND(IXO:IXE,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN
     XP=>PSEND(IYO:IYE,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -479,7 +472,7 @@ IF (ISP == KROOT)  THEN
       IF (JI == KROOT) THEN 
         XP = PSEND(IXO:IXE,:,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
 
     ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN 
@@ -487,7 +480,7 @@ IF (ISP == KROOT)  THEN
       IF (JI==KROOT) THEN 
         XP = PSEND(IYO:IYE,:,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -499,10 +492,10 @@ ELSE
   
   IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN
     XP=>PSEND(IXO:IXE,:,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN
     XP=>PSEND(IYO:IYE,:,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -542,7 +535,7 @@ IF (ISP == KROOT)  THEN
       IF (JI == KROOT) THEN 
         XP = PSEND(IXO:IXE,:,:,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
 
     ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN 
@@ -550,7 +543,7 @@ IF (ISP == KROOT)  THEN
       IF (JI==KROOT) THEN 
         XP = PSEND(IYO:IYE,:,:,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -562,10 +555,10 @@ ELSE
   
   IF (HDIR == 'XX' .AND. IYM <= IGYE .AND. IYM >= IGYO) THEN
     XP=>PSEND(IXO:IXE,:,:,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   ELSE IF (HDIR == 'YY' .AND. IXM <= IGXE .AND. IXM >= IGXO) THEN
     XP=>PSEND(IYO:IYE,:,:,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -862,7 +855,7 @@ IF (ISP == KROOT)  THEN
         CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
         XP = PSEND(IXO:IXE,IYO:IYE)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -874,10 +867,10 @@ ELSE
     NB_REQ = 1
     ALLOCATE(X_2DP(IXO:IXE,IYO:IYE))
     X_2DP=XP
-    CALL MPI_ISEND(X_2DP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR)   
+    CALL MPI_ISEND(X_2DP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,REQ(NB_REQ),IERR)
     CALL MPI_WAITALL(NB_REQ,REQ,MNH_STATUSES_IGNORE,IERR)
     DEALLOCATE(X_2DP)
-    !CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    !CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -911,7 +904,7 @@ IF (ISP == KROOT)  THEN
         CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
         XP = PSEND(IXO:IXE,IYO:IYE,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -920,7 +913,7 @@ ELSE
   CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
   IF (IXO /= 0) THEN ! intersection is not empty
     XP=>PSEND(IXO:IXE,IYO:IYE,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -954,7 +947,7 @@ IF (ISP == KROOT)  THEN
         CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
         XP = PSEND(IXO:IXE,IYO:IYE,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -963,7 +956,7 @@ ELSE
   CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
   IF (IXO /= 0) THEN ! intersection is not empty
     XP=>PSEND(IXO:IXE,IYO:IYE,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -997,7 +990,7 @@ IF (ISP == KROOT)  THEN
         CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
         XP = PSEND(IXO:IXE,IYO:IYE,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -1006,7 +999,7 @@ ELSE
   CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
   IF (IXO /= 0) THEN ! intersection is not empty
     XP=>PSEND(IXO:IXE,IYO:IYE,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -1040,7 +1033,7 @@ IF (ISP == KROOT)  THEN
         CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
         XP = PSEND(IXO:IXE,IYO:IYE,:,:,:,:)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -1049,7 +1042,7 @@ ELSE
   CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
   IF (IXO /= 0) THEN ! intersection is not empty
     XP=>PSEND(IXO:IXE,IYO:IYE,:,:,:,:)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
@@ -1159,7 +1152,7 @@ IF (ISP == KROOT)  THEN
         CALL GET_DOMWRITE_ll(JI,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX)
         XP = PSEND(IXO:IXE,IYO:IYE)
       ELSE 
-        CALL MPI_RECV(XP,SIZE(XP),MPI_FLOAT,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
+        CALL MPI_RECV(XP,SIZE(XP),MNHREAL_MPI,JI-1,99+KROOT,KCOMM,MPI_STATUS_IGNORE,IERR)
       END IF
     END IF
   END DO
@@ -1168,7 +1161,7 @@ ELSE
   CALL GET_DOMWRITE_ll(ISP,'local',IXO,IXE,IYO,IYE,KXOBOX,KXEBOX,KYOBOX,KYEBOX)
   IF (IXO /= 0) THEN ! intersection is not empty
     XP=>PSEND(IXO:IXE,IYO:IYE)
-    CALL MPI_BSEND(XP,SIZE(XP),MPI_FLOAT,KROOT-1,99+KROOT,KCOMM,IERR)
+    CALL MPI_BSEND(XP,SIZE(XP),MNHREAL_MPI,KROOT-1,99+KROOT,KCOMM,IERR)
   END IF
 END IF
 
diff --git a/src/LIB/SURCOUCHE/src/mode_init_ll.f90 b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
index aa0d0c7c4363984001844a9c87944afceef626d3..f6d436cf531b13fbc527b896b125050a3acb53a3 100644
--- a/src/LIB/SURCOUCHE/src/mode_init_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
@@ -3,15 +3,6 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MNH_MPI_REAL MPI_DOUBLE_PRECISION
-#define MNH_MPI_2REAL MPI_2DOUBLE_PRECISION
-#else
-#define MNH_MPI_REAL MPI_REAL
-#define MNH_MPI_2REAL MPI_2REAL
-#endif
-
 !     ###################
       MODULE MODE_INIT_ll
 !     ###################
@@ -61,8 +52,6 @@
   USE MODD_MPIF
 !
   IMPLICIT NONE
-!
-!  INCLUDE 'mpif.h'
 !
   CONTAINS
 !
@@ -555,9 +544,6 @@
         !
         IP = IP + 1
         !
-        MPI_PRECISION  = MNH_MPI_REAL
-        MPI_2PRECISION = MNH_MPI_2REAL
-        !
         !-------------------------------------------------------------------------------
         !
         !*       3.    ALLOCATION :
diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
index 495fc3bbb45cdee27ac1596694f394d928c120ec..879ac1ab6641c1701a6aec1a8f7f82933cd6471f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
@@ -14,16 +14,11 @@
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
-
 MODULE MODE_IO_FIELD_READ
 !
 USE MODD_IO, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
 USE MODD_MPIF
+use modd_precision, only: MNHREAL_MPI
 !
 USE MODE_FIELD
 USE MODE_IO_READ_LFI
@@ -183,7 +178,7 @@ IF (IRESP==0) THEN
     IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     ! Broadcast Field
-    CALL MPI_BCAST(PFIELD,1,MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+    CALL MPI_BCAST(PFIELD,1,MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
 END IF
 !
@@ -282,7 +277,7 @@ IF (IRESP==0) THEN
     !
     IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN
       ! Broadcast Field
-      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     ELSE
       !Scatter Field
       CALL SCATTER_XXFIELD(TPFIELD%CDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM,TPSPLITTING)
@@ -452,7 +447,7 @@ IF (IRESP==0) THEN
 #endif
       END IF
     ELSE
-      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     END IF
     CALL SECOND_MNH2(T2)
     TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1
@@ -614,7 +609,7 @@ IF (IRESP==0) THEN
       END IF
     ELSE
       ! Broadcast Field
-      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     END IF
   ELSE  ! multiprocesses execution & // IO
 !
@@ -734,9 +729,9 @@ IF (IRESP==0) THEN
               NB_REQ = NB_REQ + 1
               ALLOCATE(T_TX2DP(NB_REQ)%X(IXO:IXE,IYO:IYE))
               T_TX2DP(NB_REQ)%X=TX2DP
-              CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,JI-1,199+IK_RANK, &
+              CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+IK_RANK, &
                              TZFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
-              !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+IK_RANK,TZFILE%NMPICOMM,IERR)
+              !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+IK_RANK,TZFILE%NMPICOMM,IERR)
             ELSE
               PFIELD(:,:,JKK) = TX2DP(:,:)
             END IF
@@ -783,7 +778,7 @@ IF (IRESP==0) THEN
             ZSLICE => PFIELD(:,:,JKK)
             !CALL SCATTER_XYFIELD(ZSLICE_ll,ZSLICE,TZFILE%NMASTER_RANK,TZFILE%NMPICOMM)
             IF (ISP .NE. IK_RANK) THEN
-              CALL MPI_RECV(ZSLICE,SIZE(ZSLICE),MPI_FLOAT,IK_RANK-1,199+IK_RANK, &
+              CALL MPI_RECV(ZSLICE,SIZE(ZSLICE),MNHREAL_MPI,IK_RANK-1,199+IK_RANK, &
                             TZFILE%NMPICOMM,STATUS,IERR)
             END IF
             TZFILE => NULL()
@@ -794,7 +789,7 @@ IF (IRESP==0) THEN
       ELSE
         ! Broadcast Field
         call Print_msg( NVERB_FATAL, 'GEN', 'IO_Field_read_byfield_X3', 'broadcast field not yet planned on Blue Gene' )
-        CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+        CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
       END IF
       CALL SECOND_MNH2(T0)
       IF (NB_REQ .GT.0 ) THEN
@@ -942,7 +937,7 @@ IF (IRESP==0) THEN
         CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
       END IF
     ELSE
-      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     END IF
   END IF
 END IF
@@ -1067,7 +1062,7 @@ IF (IRESP==0) THEN
         CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
       END IF
     ELSE
-      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     END IF
   END IF
 END IF
@@ -1174,7 +1169,7 @@ IF (IRESP==0) THEN
       ! XY Scatter Field
       CALL SCATTER_XYFIELD(ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
     ELSE
-      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     END IF
   END IF
 END IF
@@ -1459,7 +1454,7 @@ IF (IRESP==0) THEN
       ! XX or YY Scatter Field
       CALL SCATTER_XXFIELD(TPFIELD%CDIR,IFIELDP,KFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
       ! Broadcast Field
-      CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+      CALL MPI_BCAST(KFIELD,SIZE(KFIELD),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     ELSE IF (TPFIELD%CDIR == 'XY') THEN
       IF (LPACK .AND. L2D) THEN
         ! 2D compact case
@@ -1779,7 +1774,7 @@ IF (IRESP==0) THEN
     IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(ITDATE,     3,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
-    CALL MPI_BCAST(TPDATA%TIME,1,MPI_FLOAT,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+    CALL MPI_BCAST(TPDATA%TIME,1,MNHREAL_MPI,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     TPDATA%TDATE%YEAR  = ITDATE(1)
     TPDATA%TDATE%MONTH = ITDATE(2)
     TPDATA%TDATE%DAY   = ITDATE(3)
@@ -1962,8 +1957,8 @@ IF (IRESP==0) THEN
             NB_REQ = NB_REQ + 1
             ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU))
             T_TX3DP(NB_REQ)%X=Z3D(IIB:IIE,IJB:IJE,:)
-            CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
-            !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,IERR)
+            CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MNHREAL_MPI,JI-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
+            !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MNHREAL_MPI,JI-1,99,TPFILE%NMPICOMM,IERR)
           ELSE
             CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
             PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:)
@@ -1990,9 +1985,9 @@ IF (IRESP==0) THEN
       CALL GET_DISTRIB_lb(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
       IF (IIB /= 0) THEN
         TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
-        CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,STATUS,IERR)
+        CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,STATUS,IERR)
         !NB_REQ = NB_REQ + 1
-        !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
+        !CALL MPI_IRECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
         !IF (NB_REQ .GT.0 ) CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
       END IF
       CALL SECOND_MNH2(T1)
diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index a3e33e2c93fab49425ab05e0f6edf8d01739824a..44504116599a419365056964944265dfcbf11104 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -12,18 +12,13 @@
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
-
 #define MNH_SCALARS_IN_SPLITFILES 0
 
 MODULE MODE_IO_FIELD_WRITE
 
+  USE MODD_IO,        ONLY: TFILEDATA, TOUTBAK
   USE MODD_MPIF
-  USE MODD_IO, ONLY: TFILEDATA, TOUTBAK
+  use modd_precision, only: MNHINT_MPI, MNHREAL_MPI
 
   USE MODE_FIELD
   USE MODE_IO_WRITE_LFI
@@ -319,7 +314,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocesses execution
 #if MNH_SCALARS_IN_SPLITFILES
        IF (TPFILE%NSUBFILES_IOZ>0) THEN
@@ -420,11 +415,7 @@ CONTAINS
           IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
           IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
        ELSE ! multiprocesses execution
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -447,7 +438,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocesses execution
     END IF
     !
@@ -564,11 +555,7 @@ CONTAINS
           END IF
        ELSE ! multiprocesses execution
           CALL SECOND_MNH2(T0)
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -628,7 +615,7 @@ CONTAINS
           CALL SECOND_MNH2(T2)
           TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -767,11 +754,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSEIF ( TPFILE%NSUBFILES_IOZ==0 .OR. YDIR=='--' ) THEN  ! multiprocesses execution & 1 proc IO
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -801,14 +784,10 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
           !
        ELSE ! multiprocesses execution & // IO
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -919,9 +898,9 @@ CONTAINS
                             ZSLICE => PFIELD(:,:,JKK)
                             TX2DP=>ZSLICE(IXO:IXE,IYO:IYE)
                             T_TX2DP(NB_REQ)%X=ZSLICE(IXO:IXE,IYO:IYE)
-                            CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,IK_RANK-1,99+IK_RANK &
+                            CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MNHREAL_MPI,IK_RANK-1,99+IK_RANK &
                                           & ,TZFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
-                            !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,IK_RANK-1,99+IK_RANK,TZFILE%NMPICOMM,IERR)
+                            !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,IK_RANK-1,99+IK_RANK,TZFILE%NMPICOMM,IERR)
                          END IF
                       END IF
                       CALL SECOND_MNH2(T1)
@@ -957,7 +936,7 @@ CONTAINS
                             ZSLICE => PFIELD(:,:,JKK)
                             TX2DP = ZSLICE(IXO:IXE,IYO:IYE)
                          ELSE 
-                            CALL MPI_RECV(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,99+IK_RANK,TZFILE%NMPICOMM,STATUS,IERR)
+                            CALL MPI_RECV(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,99+IK_RANK,TZFILE%NMPICOMM,STATUS,IERR)
                          END IF
                       END IF
                    END DO
@@ -1090,11 +1069,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSE
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -1123,7 +1098,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocess execution
     END IF
     !
@@ -1228,11 +1203,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSE
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -1262,7 +1233,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocess execution
     END IF
     !
@@ -1356,11 +1327,7 @@ CONTAINS
           IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
           IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
        ELSE
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -1385,7 +1352,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocess execution
     END IF
     !
@@ -1468,7 +1435,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocess execution
 #if MNH_SCALARS_IN_SPLITFILES
        IF (TPFILE%NSUBFILES_IOZ>0) THEN
@@ -1568,11 +1535,7 @@ CONTAINS
           IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
           IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
        ELSE ! multiprocesses execution
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -1595,7 +1558,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -1706,11 +1669,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
           END IF
        ELSE ! multiprocesses execution
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -1745,7 +1704,7 @@ CONTAINS
           CALL SECOND_MNH2(T2)
           TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -1856,11 +1815,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
           END IF
        ELSE ! multiprocesses execution
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -1890,7 +1845,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -1977,7 +1932,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocesses execution
 #if MNH_SCALARS_IN_SPLITFILES
        IF (TPFILE%NSUBFILES_IOZ>0) THEN
@@ -2077,11 +2032,7 @@ CONTAINS
           IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
           IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
        ELSE ! multiprocesses execution
-#if ( MNH_INT == 4 )
-          CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#else
-          CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
-#endif
+          CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MNHINT_MPI,MPI_MAX,TPFILE%NMPICOMM,IRESP)
           IF (ISIZEMAX==0) THEN
              CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
@@ -2104,7 +2055,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,GFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -2191,7 +2142,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -2296,7 +2247,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -2378,7 +2329,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TFIELD,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -2511,7 +2462,7 @@ CONTAINS
                 IF (IIB /= 0) THEN
                    TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
                    IF (ISP /= JI) THEN
-                      CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,STATUS,IERR)
+                      CALL MPI_RECV(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,99,TPFILE%NMPICOMM,STATUS,IERR)
                    ELSE
                       CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
                       TX3DP = PLB(IIB:IIE,IJB:IJE,:)
@@ -2537,9 +2488,9 @@ CONTAINS
                 NB_REQ = NB_REQ + 1
                 ALLOCATE(T_TX3DP(NB_REQ)%X(IIB:IIE,IJB:IJE,IKU))  
                 T_TX3DP(NB_REQ)%X=PLB(IIB:IIE,IJB:IJE,:)
-                CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99, &
+                CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99, &
                                TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
-                !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,IERR)
+                !CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,IERR)
              END IF
              IF (NB_REQ .GT.0 ) THEN
                 CALL MPI_WAITALL(NB_REQ,REQ_TAB,MNH_STATUSES_IGNORE,IERR)
@@ -2548,7 +2499,7 @@ CONTAINS
              DEALLOCATE(T_TX3DP,REQ_TAB)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF
     END IF
     !
@@ -2632,7 +2583,7 @@ CONTAINS
              IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
-          CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+          CALL MPI_BCAST(IRESP,1,MNHINT_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
        END IF ! multiprocesses execution
     END IF
     !
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
index f8645e9ca4a287eeb9d79986b552a59f5e5dca2c..1d07379957d7f74d8d407d23b450d51f87f96067 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
@@ -19,6 +19,7 @@
 module mode_io_file_lfi
 
 use modd_io,     only: tfiledata
+use modd_precision, only: LFIINT
 
 use mode_msg
 
@@ -45,9 +46,9 @@ subroutine IO_File_create_lfi(tpfile, kstatus)
 
   character(len=:), allocatable :: yfilem        ! name of the file
   character(len=:), allocatable :: yforstatus    ! Status for open of a file (for LFI) ('OLD','NEW','UNKNOWN','SCRATCH','REPLACE')
-  integer(kind=LFI_INT)         :: iresou, inumbr
-  integer(kind=LFI_INT)         :: imelev, inprar
-  integer(kind=LFI_INT)         :: ininar        ! Number of articles present in LFI file
+  integer(kind=LFIINT)          :: iresou, inumbr
+  integer(kind=LFIINT)          :: imelev, inprar
+  integer(kind=LFIINT)          :: ininar        ! Number of articles present in LFI file
   logical                       :: gnewfi
   logical                       :: gnamfi, gfater, gstats
 
@@ -92,7 +93,7 @@ subroutine IO_File_close_lfi(tpfile, kstatus)
 
   character(len=*), parameter :: YSTATUS = 'KEEP'
 
-  integer(kind=LFI_INT) :: istatus
+  integer(kind=LFIINT) :: istatus
 
   call print_msg(NVERB_DEBUG,'IO','IO_File_close_lfi','called for '//trim(tpfile%cname))
 
@@ -124,9 +125,9 @@ subroutine IO_File_open_lfi(tpfile, kstatus)
   character(len=:),allocatable :: yfilem        ! name of the file
   character(len=:),allocatable :: yforstatus    ! Status for open of a file (for LFI) ('OLD','NEW','UNKNOWN','SCRATCH','REPLACE')
   integer                      :: istatus
-  integer(kind=LFI_INT)        :: iresou, inumbr
-  integer(kind=LFI_INT)        :: imelev, inprar
-  integer(kind=LFI_INT)        :: ininar        ! Number of articles present in LFI file
+  integer(kind=LFIINT)         :: iresou, inumbr
+  integer(kind=LFIINT)         :: imelev, inprar
+  integer(kind=LFIINT)         :: ininar        ! Number of articles present in LFI file
   logical                      :: gnewfi
   logical                      :: gnamfi, gfater, gstats
 
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
index 160a79a6d876974572730b761cc578b785a75d48..746e5746e59b97bb174194ac81d125d22a6f9a1f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
@@ -21,15 +21,15 @@
 #if defined(MNH_IOCDF4)
 module mode_io_file_nc4
 
-use modd_io,     only: tfiledata
-use modd_netcdf, only: IDCDF_KIND
+use modd_io,           only: tfiledata
+use modd_precision,    only: CDFINT
 
 use mode_io_tools_nc4, only: IO_Err_handle_nc4, IO_Knowndims_set_nc4, IO_Iocdf_alloc_nc4
 use mode_msg
 
-use NETCDF,      only: NF90_CLOBBER, NF90_GLOBAL, NF90_NETCDF4, NF90_NOERR, NF90_NOWRITE,  &
-                       NF90_CLOSE, NF90_CREATE, NF90_GET_ATT, NF90_INQUIRE, NF90_INQUIRE_ATTRIBUTE, &
-                       NF90_OPEN, NF90_PUT_ATT, NF90_STRERROR
+use NETCDF,            only: NF90_CLOBBER, NF90_GLOBAL, NF90_NETCDF4, NF90_NOERR, NF90_NOWRITE,  &
+                             NF90_CLOSE, NF90_CREATE, NF90_GET_ATT, NF90_INQUIRE, NF90_INQUIRE_ATTRIBUTE, &
+                             NF90_OPEN, NF90_PUT_ATT, NF90_STRERROR
 
 implicit none
 
@@ -47,7 +47,7 @@ subroutine IO_File_create_nc4(tpfile,hprogram_orig)
   character(len=*),optional, intent(in)    :: hprogram_orig !to emulate a file coming from this program
 
   character(len=:),allocatable :: yfilem  ! name of the file
-  integer(kind=IDCDF_KIND)     :: istatus
+  integer(kind=CDFINT)         :: istatus
 
   call print_msg(NVERB_DEBUG,'IO','IO_File_create_nc4','called for '//trim(tpfile%cname))
 
@@ -69,10 +69,10 @@ end subroutine IO_File_create_nc4
 subroutine IO_File_close_nc4(tpfile,kstatus)
   use mode_io_tools_nc4, only: IO_Iocdf_dealloc_nc4
 
-  type(tfiledata),                    intent(inout) :: tpfile
-  integer(kind=IDCDF_KIND), optional, intent(out)   :: kstatus
+  type(tfiledata),                intent(inout) :: tpfile
+  integer(kind=CDFINT), optional, intent(out)   :: kstatus
 
-  integer(kind=IDCDF_KIND) :: istatus
+  integer(kind=CDFINT) :: istatus
 
   call print_msg(NVERB_DEBUG,'IO','IO_File_close_nc4','called for '//trim(tpfile%cname))
 
@@ -103,7 +103,7 @@ subroutine IO_File_open_nc4(tpfile)
   type(tfiledata), intent(inout) :: tpfile
 
   character(len=:),allocatable :: yfilem  ! name of the file
-  integer(kind=IDCDF_KIND)     :: istatus
+  integer(kind=CDFINT)         :: istatus
 
   call print_msg(NVERB_DEBUG,'IO','IO_File_open_nc4','called for '//trim(tpfile%cname))
 
@@ -134,8 +134,8 @@ subroutine IO_Cleanly_closed_check_nc4(tpfile)
   type(tfiledata), intent(in) :: tpfile
 
   character(len=:), allocatable :: yclean
-  integer(kind=IDCDF_KIND) :: ilen, istatus
-  integer, dimension(3) :: imnhversion
+  integer(kind=CDFINT)          :: ilen, istatus
+  integer, dimension(3)         :: imnhversion
 
   call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4','called for '//trim(tpfile%cname))
 
@@ -177,7 +177,7 @@ end subroutine IO_Cleanly_closed_check_nc4
 subroutine IO_Cleanly_closed_set_nc4(tpfile)
   type(tfiledata), intent(in) :: tpfile
 
-  integer(kind=IDCDF_KIND) :: istatus
+  integer(kind=CDFINT) :: istatus
 
   call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_set_nc4','called for '//trim(tpfile%cname))
 
@@ -189,7 +189,7 @@ end subroutine IO_Cleanly_closed_set_nc4
 subroutine IO_Not_cleanly_closed_set_nc4(tpfile)
   type(tfiledata), intent(in) :: tpfile
 
-  integer(kind=IDCDF_KIND) :: istatus
+  integer(kind=CDFINT) :: istatus
 
   call print_msg(NVERB_DEBUG,'IO','IO_Not_cleanly_closed_set_nc4','called for '//trim(tpfile%cname))
 
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index 31ccdc17a3460c90a5406797b24a62afe5a1a397..4e6bce3f26e7f74836495171a3da9dcab91a5e6b 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -20,6 +20,8 @@
 MODULE MODE_IO_MANAGE_STRUCT
 !
 USE MODD_IO
+use modd_precision, only: LFIINT
+!
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -660,7 +662,7 @@ CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORM     !Formatted/unformatt
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HACCESS   !Direct/sequential/stream
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORMAT   !Fileformat (NETCDF4, LFI, LFICDF4...)
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HDIRNAME  !File directory
-INTEGER(KIND=LFI_INT),  OPTIONAL,INTENT(IN)    :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial)
+INTEGER(KIND=LFIINT),   OPTIONAL,INTENT(IN)    :: KLFINPRAR !Number of predicted articles of the LFI file (non crucial)
 INTEGER,                OPTIONAL,INTENT(IN)    :: KLFITYPE  !Type of the file (used to generate list of files to transfers)
 INTEGER,                OPTIONAL,INTENT(IN)    :: KLFIVERB  !LFI verbosity level
 INTEGER,                OPTIONAL,INTENT(IN)    :: KRECL     !Record length
@@ -673,7 +675,7 @@ LOGICAL,                OPTIONAL,INTENT(IN)    :: OOLD      !FALSE if new file (
 logical,                optional,intent(in)    :: osplit_ioz !Is the file split vertically
 !
 INTEGER :: IMI,IRESP
-INTEGER(KIND=LFI_INT) :: ILFINPRAR
+INTEGER(KIND=LFIINT) :: ILFINPRAR
 INTEGER :: ILFITYPE
 INTEGER :: ILFIVERB
 LOGICAL :: GOLD
diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
index 7b2f6e855fa12299b491035f84887da5805f4bcb..525930eefaaacc6ab5082f76e814085488220ca2 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
@@ -14,6 +14,7 @@ module mode_io_read_lfi
 !
 USE MODD_IO
 USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH
+use modd_precision,  only: LFIINT
 !
 USE MODE_FIELD, ONLY : TFIELDDATA
 USE MODE_MSG
@@ -55,7 +56,7 @@ INTEGER,          INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -94,7 +95,7 @@ INTEGER,          INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -128,7 +129,7 @@ INTEGER,            INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -162,7 +163,7 @@ INTEGER,              INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -196,7 +197,7 @@ INTEGER,                INTENT(OUT)   :: KRESP   ! return-code if problems occur
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -230,7 +231,7 @@ INTEGER,                  INTENT(OUT)   :: KRESP   ! return-code if problems occ
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -264,7 +265,7 @@ INTEGER,                    INTENT(OUT)   :: KRESP   ! return-code if problems o
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -298,7 +299,7 @@ INTEGER,         INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -332,7 +333,7 @@ INTEGER,             INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -366,7 +367,7 @@ INTEGER,               INTENT(OUT)   :: KRESP   ! return-code if problems occure
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -400,7 +401,7 @@ INTEGER,         INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER                                  :: IFIELD
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
@@ -447,7 +448,7 @@ INTEGER,             INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG
 INTEGER                                  :: JI
 INTEGER, DIMENSION(SIZE(OFIELD))         :: IFIELD
@@ -502,7 +503,7 @@ INTEGER,         INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP,ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP,ITOTAL
 INTEGER                                  :: ILENG, ILENGMAX, JLOOP
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -552,7 +553,7 @@ INTEGER,         INTENT(OUT)   :: KRESP   ! return-code if problems occured
 !
 !*      0.2   Declarations of local variables
 !
-INTEGER(KIND=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP, ITOTAL
 INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
@@ -616,13 +617,13 @@ TYPE(TFILEDATA),                         INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),                        INTENT(INOUT) :: TPFIELD
 INTEGER,                                 INTENT(IN)    :: KLENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE,INTENT(OUT)   :: KWORK
-INTEGER(KIND=LFI_INT),                   INTENT(OUT)   :: KTOTAL
-INTEGER(KIND=LFI_INT),                   INTENT(OUT)   :: KRESP
+INTEGER(KIND=LFIINT),                    INTENT(OUT)   :: KTOTAL
+INTEGER(KIND=LFIINT),                    INTENT(OUT)   :: KRESP
 LOGICAL,                                 INTENT(OUT)   :: OGOOD
 !
 INTEGER                      :: IERRLEVEL,IROW,J
 INTEGER,DIMENSION(JPXKRK)    :: ICOMMENT
-INTEGER(KIND=LFI_INT)        :: ICOMLEN,INUMBR,IPOSEX
+INTEGER(KIND=LFIINT)         :: ICOMLEN,INUMBR,IPOSEX
 CHARACTER(LEN=:),ALLOCATABLE :: YMSG
 CHARACTER(LEN=12)            :: YRECLENGTH_FILE, YRECLENGTH_MEM
 CHARACTER(LEN=12)            :: YVAL_FILE, YVAL_MEM
diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
index 0f82d0974bae14151ce9f0ffec94f030953528d8..3aaed8fb95ca02eccf016fb1b8256d33b3dc435f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
@@ -16,7 +16,7 @@
 module mode_io_read_nc4
 
 use modd_io,           only: tfiledata
-use modd_netcdf,       only: IDCDF_KIND
+use modd_precision,    only: CDFINT
 
 use mode_field,        only: tfielddata
 use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Err_handle_nc4
@@ -53,15 +53,15 @@ USE MODD_PARAMETERS, ONLY: NGRIDUNKNOWN
 !
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),         INTENT(INOUT) :: TPFIELD
-INTEGER(KIND=IDCDF_KIND), INTENT(IN)    :: KVARID
+INTEGER(KIND=CDFINT),     INTENT(IN)    :: KVARID
 INTEGER,                  INTENT(OUT)   :: KRESP  ! return-code
 CHARACTER(LEN=*),OPTIONAL,INTENT(IN)    :: HCALENDAR
 !
 INTEGER                      :: IERRLEVEL
 INTEGER                      :: ILEN
 INTEGER                      :: IGRID
-INTEGER(KIND=IDCDF_KIND)     :: INCID
-INTEGER(KIND=IDCDF_KIND)     :: STATUS
+INTEGER(KIND=CDFINT)         :: INCID
+INTEGER(KIND=CDFINT)         :: STATUS
 CHARACTER(LEN=12)            :: YVAL_FILE, YVAL_MEM
 CHARACTER(LEN=:),ALLOCATABLE :: YVALUE
 LOGICAL                      :: GOLDMNH !if old version of MesoNH (<5.4, old files without complete and correct metadata)
@@ -263,13 +263,13 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 REAL,             INTENT(INOUT) :: PFIELD
 INTEGER,          INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER                  :: IRESP
+INTEGER(KIND=CDFINT) :: STATUS
+INTEGER(KIND=CDFINT) :: INCID
+INTEGER(KIND=CDFINT) :: IVARID
+INTEGER(KIND=CDFINT) :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT) :: IDIMS   ! number of dimensions
+CHARACTER(LEN=30)    :: YVARNAME
+INTEGER              :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -318,15 +318,15 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:),INTENT(INOUT) :: PFIELD
 INTEGER,          INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
-INTEGER                  :: IRESP
+INTEGER(KIND=CDFINT) :: STATUS
+INTEGER(KIND=CDFINT) :: INCID
+INTEGER(KIND=CDFINT) :: IVARID
+INTEGER(KIND=CDFINT) :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT) :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+CHARACTER(LEN=30)    :: YVARNAME
+INTEGER(KIND=CDFINT) :: IDIMLEN
+INTEGER              :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -385,15 +385,15 @@ TYPE(TFIELDDATA),   INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:),INTENT(INOUT) :: PFIELD
 INTEGER,            INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN
-INTEGER                  :: IRESP
+INTEGER(KIND=CDFINT) :: STATUS
+INTEGER(KIND=CDFINT) :: INCID
+INTEGER(KIND=CDFINT) :: IVARID
+INTEGER(KIND=CDFINT) :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT) :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+CHARACTER(LEN=30)    :: YVARNAME
+INTEGER(KIND=CDFINT),DIMENSION(3) :: IDIMLEN
+INTEGER              :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -467,15 +467,15 @@ TYPE(TFIELDDATA),     INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD
 INTEGER,              INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND)                              :: STATUS
-INTEGER(KIND=IDCDF_KIND)                              :: INCID
-INTEGER(KIND=IDCDF_KIND)                              :: IVARID
-INTEGER(KIND=IDCDF_KIND)                              :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND)                              :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-INTEGER(KIND=IDCDF_KIND),DIMENSION(3)                 :: IDIMLEN
-CHARACTER(LEN=30)                                     :: YVARNAME
-INTEGER                                               :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+INTEGER(KIND=CDFINT),DIMENSION(3)                 :: IDIMLEN
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -538,15 +538,15 @@ TYPE(TFIELDDATA),       INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:,:),INTENT(INOUT) :: PFIELD
 INTEGER,                INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND)                              :: STATUS
-INTEGER(KIND=IDCDF_KIND)                              :: INCID
-INTEGER(KIND=IDCDF_KIND)                              :: IVARID
-INTEGER(KIND=IDCDF_KIND)                              :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND)                              :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-INTEGER(KIND=IDCDF_KIND),DIMENSION(4)                 :: IDIMLEN
-CHARACTER(LEN=30)                                     :: YVARNAME
-INTEGER                                               :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+INTEGER(KIND=CDFINT),DIMENSION(4)                 :: IDIMLEN
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -612,15 +612,15 @@ TYPE(TFIELDDATA),         INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD
 INTEGER,                  INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND)                              :: STATUS
-INTEGER(KIND=IDCDF_KIND)                              :: INCID
-INTEGER(KIND=IDCDF_KIND)                              :: IVARID
-INTEGER(KIND=IDCDF_KIND)                              :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND)                              :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-INTEGER(KIND=IDCDF_KIND),DIMENSION(5)                 :: IDIMLEN
-CHARACTER(LEN=30)                                     :: YVARNAME
-INTEGER                                               :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+INTEGER(KIND=CDFINT),DIMENSION(5)                 :: IDIMLEN
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -689,15 +689,15 @@ TYPE(TFIELDDATA),           INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PFIELD
 INTEGER,                    INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND)                              :: STATUS
-INTEGER(KIND=IDCDF_KIND)                              :: INCID
-INTEGER(KIND=IDCDF_KIND)                              :: IVARID
-INTEGER(KIND=IDCDF_KIND)                              :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND)                              :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-INTEGER(KIND=IDCDF_KIND),DIMENSION(6)                 :: IDIMLEN
-CHARACTER(LEN=30)                                     :: YVARNAME
-INTEGER                                               :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+INTEGER(KIND=CDFINT),DIMENSION(6)                 :: IDIMLEN
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -768,13 +768,13 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 INTEGER,          INTENT(INOUT) :: KFIELD
 INTEGER,          INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER                  :: IRESP
+INTEGER(KIND=CDFINT) :: STATUS
+INTEGER(KIND=CDFINT) :: INCID
+INTEGER(KIND=CDFINT) :: IVARID
+INTEGER(KIND=CDFINT) :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT) :: IDIMS   ! number of dimensions
+CHARACTER(LEN=30)    :: YVARNAME
+INTEGER              :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -824,15 +824,15 @@ TYPE(TFIELDDATA),        INTENT(INOUT) :: TPFIELD
 INTEGER, DIMENSION(:),   INTENT(INOUT) :: KFIELD
 INTEGER,                 INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
-INTEGER                  :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER(KIND=CDFINT)                              :: IDIMLEN
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -892,15 +892,15 @@ TYPE(TFIELDDATA),        INTENT(INOUT) :: TPFIELD
 INTEGER, DIMENSION(:,:), INTENT(INOUT) :: KFIELD
 INTEGER,                 INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN
-INTEGER                  :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER(KIND=CDFINT),DIMENSION(3)                 :: IDIMLEN
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -974,14 +974,14 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 LOGICAL,          INTENT(INOUT) :: OFIELD
 INTEGER,          INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER                  :: IRESP
-INTEGER                  :: IFIELD
+INTEGER(KIND=CDFINT) :: STATUS
+INTEGER(KIND=CDFINT) :: INCID
+INTEGER(KIND=CDFINT) :: IVARID
+INTEGER(KIND=CDFINT) :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT) :: IDIMS   ! number of dimensions
+CHARACTER(LEN=30)    :: YVARNAME
+INTEGER              :: IRESP
+INTEGER              :: IFIELD
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -1044,17 +1044,17 @@ TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
 LOGICAL,DIMENSION(:),INTENT(INOUT) :: OFIELD
 INTEGER,             INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND) :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
-CHARACTER(LEN=30)        :: YVARNAME
-INTEGER                  :: IRESP
-INTEGER                  :: JI
-INTEGER,DIMENSION(SIZE(OFIELD)) :: IFIELD
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+INTEGER(KIND=CDFINT)                              :: IDIMLEN
+CHARACTER(LEN=30)                                 :: YVARNAME
+INTEGER                                           :: IRESP
+INTEGER                                           :: JI
+INTEGER,DIMENSION(SIZE(OFIELD))                   :: IFIELD
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -1131,16 +1131,16 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 CHARACTER(LEN=*), INTENT(INOUT) :: HFIELD
 INTEGER,          INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND)     :: STATUS
-INTEGER(KIND=IDCDF_KIND)     :: INCID
-INTEGER(KIND=IDCDF_KIND)     :: IVARID
-INTEGER(KIND=IDCDF_KIND)     :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND)     :: IDIMS   ! number of dimensions
-INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
-CHARACTER(LEN=30)            :: YVARNAME
-CHARACTER(LEN=:),ALLOCATABLE :: YSTR
-INTEGER(KIND=IDCDF_KIND)     :: IDIMLEN
-INTEGER                      :: IRESP
+INTEGER(KIND=CDFINT)                              :: STATUS
+INTEGER(KIND=CDFINT)                              :: INCID
+INTEGER(KIND=CDFINT)                              :: IVARID
+INTEGER(KIND=CDFINT)                              :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)                              :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT),DIMENSION(NF90_MAX_VAR_DIMS) :: IVDIMS
+CHARACTER(LEN=30)                                 :: YVARNAME
+CHARACTER(LEN=:),ALLOCATABLE                      :: YSTR
+INTEGER(KIND=CDFINT)                              :: IDIMLEN
+INTEGER                                           :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
@@ -1200,14 +1200,14 @@ TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 TYPE (DATE_TIME), INTENT(INOUT) :: TPDATA
 INTEGER,          INTENT(OUT)   :: KRESP  ! return-code
 
-INTEGER(KIND=IDCDF_KIND)     :: STATUS
-INTEGER(KIND=IDCDF_KIND)     :: INCID
-INTEGER(KIND=IDCDF_KIND)     :: IVARID
-INTEGER(KIND=IDCDF_KIND)     :: ITYPE   ! variable type
-INTEGER(KIND=IDCDF_KIND)     :: IDIMS   ! number of dimensions
+INTEGER(KIND=CDFINT)         :: STATUS
+INTEGER(KIND=CDFINT)         :: INCID
+INTEGER(KIND=CDFINT)         :: IVARID
+INTEGER(KIND=CDFINT)         :: ITYPE   ! variable type
+INTEGER(KIND=CDFINT)         :: IDIMS   ! number of dimensions
 CHARACTER(LEN=30)            :: YVARNAME
 CHARACTER(LEN=:),ALLOCATABLE :: YSTR
-INTEGER(KIND=IDCDF_KIND)     :: IDIMLEN
+INTEGER(KIND=CDFINT)         :: IDIMLEN
 INTEGER                      :: IDX,IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
index 8b666ab4631bdf4c9ff584485cf91288872ee57e..b4d2a3d5fd80491940d3e6e0bb281ef086894af0 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
@@ -25,8 +25,8 @@ FUNCTION IO_Level2filenumber_get(k,nb_proc_io)
   ! return the file number where to write the K level of data
   !
   IMPLICIT NONE
-  INTEGER(kind=MNH_MPI_RANK_KIND)                   :: k,nb_proc_io
-  INTEGER(kind=MNH_MPI_RANK_KIND)                   :: IO_Level2filenumber_get
+  INTEGER :: k,nb_proc_io
+  INTEGER :: IO_Level2filenumber_get
 
   IO_Level2filenumber_get = MOD ((k-1) , nb_proc_io )
 
@@ -37,12 +37,12 @@ FUNCTION IO_Rank_master_get(IFILE,nb_proc,nb_proc_io,offset_rank)
   ! return the proc number which must write the 'IFILE' file
   !
   IMPLICIT NONE
-  INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IFILE,nb_proc,nb_proc_io
-  INTEGER(kind=MNH_MPI_RANK_KIND),OPTIONAL         :: offset_rank
+  INTEGER,           INTENT(IN) :: IFILE, nb_proc, nb_proc_io
+  INTEGER, OPTIONAL, INTENT(IN) :: offset_rank
 
-  INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IO_Rank_master_get
+  INTEGER                       :: IO_Rank_master_get
 
-  INTEGER(kind=MNH_MPI_RANK_KIND)                  :: ipas,irest
+  INTEGER                       :: ipas, irest
 
   ipas  =        nb_proc / nb_proc_io
   irest =  MOD ( nb_proc , nb_proc_io )
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
index c320a2c7d96366591a506bf7345f9e1a88dd2b88..d9af6e616af8b6383004d278fa2b644a6d277334 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
@@ -10,7 +10,8 @@
 !-----------------------------------------------------------------
 module mode_io_tools_lfi
 
-use modd_io, only: tfiledata
+use modd_io,        only: tfiledata
+use modd_precision, only: LFIINT
 
 implicit none
 
@@ -21,9 +22,9 @@ public :: IO_Verbosity_prepare_lfi
 contains
 
 subroutine IO_Verbosity_prepare_lfi(tpfile, kmelev, ostats)
-  type(tfiledata),       intent(in)  :: tpfile
-  integer(kind=LFI_INT), intent(out) :: kmelev
-  logical,               intent(out) :: ostats
+  type(tfiledata),      intent(in)  :: tpfile
+  integer(kind=LFIINT), intent(out) :: kmelev
+  logical,              intent(out) :: ostats
 
   select case (tpfile%nlfiverb)
     case(:2)
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
index 638340f2306717b389265f8cbec96e448a78afb3..21734960714a0e90b1f0376525c179b08705d1a0 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
@@ -14,8 +14,9 @@
 #if defined(MNH_IOCDF4)
 module mode_io_tools_nc4
 
-use modd_io,     only: tfiledata
-use modd_netcdf, only: dimcdf, IDCDF_KIND, iocdf, tdim_dummy
+use modd_io,        only: tfiledata
+use modd_netcdf,    only: dimcdf, iocdf, tdim_dummy
+use modd_precision, only: CDFINT
 
 use mode_field,  only: tfielddata
 use mode_msg
@@ -329,7 +330,7 @@ END SUBROUTINE IO_Knowndims_set_nc4
 SUBROUTINE IO_Iocdf_dealloc_nc4(PIOCDF)
 TYPE(IOCDF),  POINTER :: PIOCDF
 
-INTEGER(KIND=IDCDF_KIND) :: IRESP
+INTEGER(KIND=CDFINT) :: IRESP
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Iocdf_dealloc_nc4','called')
 
@@ -357,10 +358,10 @@ END SUBROUTINE IO_Iocdf_dealloc_nc4
 
 
 SUBROUTINE IO_Vdims_fill_nc4(TPFILE, TPFIELD, KSHAPE, KVDIMS)
-TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
-TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
-INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN)  :: KSHAPE
-INTEGER(KIND=IDCDF_KIND),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: KVDIMS
+TYPE(TFILEDATA),                              INTENT(IN)  :: TPFILE
+TYPE(TFIELDDATA),                             INTENT(IN)  :: TPFIELD
+INTEGER(KIND=CDFINT),DIMENSION(:),            INTENT(IN)  :: KSHAPE
+INTEGER(KIND=CDFINT),DIMENSION(:),ALLOCATABLE,INTENT(OUT) :: KVDIMS
 !
 INTEGER               :: IGRID
 INTEGER               :: JI
@@ -431,19 +432,19 @@ END SUBROUTINE IO_Vdims_fill_nc4
 
 
 FUNCTION IO_Dimcdf_get_nc4(TPFILE, KLEN, HDIMNAME)
-TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
-INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
-CHARACTER(LEN=*), OPTIONAL :: HDIMNAME ! When provided don't search but
-                                       ! simply create with name HDIMNAME
+TYPE(TFILEDATA),            INTENT(IN) :: TPFILE
+INTEGER(KIND=CDFINT),       INTENT(IN) :: KLEN
+CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HDIMNAME ! When provided don't search but
+                                                   ! simply create with name HDIMNAME
 TYPE(DIMCDF), POINTER   :: IO_Dimcdf_get_nc4
 
 TYPE(DIMCDF), POINTER :: TMP
 INTEGER               :: COUNT
 CHARACTER(LEN=16)     :: YSUFFIX
 CHARACTER(LEN=20)     :: YDIMNAME
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-LOGICAL                  :: GCHKLEN !Check if KLEN is valid
-TYPE(IOCDF), POINTER     :: PIOCDF
+INTEGER(KIND=CDFINT)  :: STATUS
+LOGICAL               :: GCHKLEN !Check if KLEN is valid
+TYPE(IOCDF), POINTER  :: PIOCDF
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimcdf_get_nc4','called')
 
@@ -497,14 +498,14 @@ END FUNCTION IO_Dimcdf_get_nc4
 
 
 FUNCTION IO_Strdimid_get_nc4(TPFILE,KLEN)
-TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
-INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
-INTEGER(KIND=IDCDF_KIND)            :: IO_Strdimid_get_nc4
+TYPE(TFILEDATA),      INTENT(IN) :: TPFILE
+INTEGER(KIND=CDFINT), INTENT(IN) :: KLEN
+INTEGER(KIND=CDFINT)             :: IO_Strdimid_get_nc4
 
 TYPE(DIMCDF), POINTER :: TMP
 TYPE(IOCDF),  POINTER :: TZIOCDF
 CHARACTER(LEN=16)     :: YSUFFIX
-INTEGER(KIND=IDCDF_KIND) :: STATUS
+INTEGER(KIND=CDFINT)  :: STATUS
 
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Strdimid_get_nc4','called')
 
@@ -557,11 +558,11 @@ END FUNCTION IO_Iocdf_alloc_nc4
 
 
 subroutine IO_Err_handle_nc4(kstatus,hsubr,hncsubr,hvar,kresp)
-integer(kind=IDCDF_KIND),intent(in)  :: kstatus
-character(len=*),        intent(in)  :: hsubr
-character(len=*),        intent(in)  :: hncsubr
-character(len=*),        intent(in)  :: hvar
-integer, optional,       intent(out) :: kresp
+integer(kind=CDFINT), intent(in)  :: kstatus
+character(len=*),     intent(in)  :: hsubr
+character(len=*),     intent(in)  :: hncsubr
+character(len=*),     intent(in)  :: hvar
+integer, optional,    intent(out) :: kresp
 
 ! Don't stop (by default) the code when kresp is present
 ! and ensure kresp is a negative integer
diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
index 5dc2195e007b0a9b675c98dc743747bbf74957af..26f18bc04cee5ec685bbc4d1d07d1c83964aa6fa 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
@@ -14,6 +14,7 @@ module mode_io_write_lfi
 !
 USE MODD_IO
 USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH
+use modd_precision,  only: LFIINT
 !
 USE MODE_FIELD,      ONLY: TFIELDDATA
 USE MODE_MSG
@@ -56,7 +57,7 @@ INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(KIND=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(KIND=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -95,7 +96,7 @@ INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -142,7 +143,7 @@ INTEGER,OPTIONAL,      INTENT(IN) :: KZFILE     ! Number of the Z-level splitted
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=4)                         :: YSUFFIX
 CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4)   :: YVARNAME
@@ -206,7 +207,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -251,7 +252,7 @@ INTEGER,                  INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -296,7 +297,7 @@ INTEGER,                  INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -341,7 +342,7 @@ INTEGER,                    INTENT(OUT):: KRESP  ! return-code if problems arais
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -386,7 +387,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -425,7 +426,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -470,7 +471,7 @@ INTEGER,               INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -515,7 +516,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -561,7 +562,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
 INTEGER                                  :: IFIELD
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -608,7 +609,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !
 INTEGER, DIMENSION(SIZE(OFIELD))         :: IFIELD
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -662,7 +663,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG, ILENGMAX, JLOOP
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
@@ -720,7 +721,7 @@ INTEGER,                 INTENT(OUT):: KRESP  ! return-code if problems araised
 !*      0.2   Declarations of local variables
 !
 INTEGER                                  :: ILENG
-INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
+INTEGER(kind=LFIINT)                     :: IRESP, ITOTAL
 TYPE(TFIELDDATA)                         :: TZFIELD
 INTEGER, DIMENSION(3)                    :: ITDATE    ! date array
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
@@ -785,8 +786,8 @@ SUBROUTINE WRITE_PREPARE(TPFIELD,KLENG,KWORK,KTOTAL,KRESP)
 TYPE(TFIELDDATA),                        INTENT(IN)    :: TPFIELD
 INTEGER,                                 INTENT(IN)    :: KLENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE,INTENT(INOUT) :: KWORK
-INTEGER(kind=LFI_INT),                   INTENT(OUT)   :: KTOTAL
-INTEGER(kind=LFI_INT),                   INTENT(OUT)   :: KRESP
+INTEGER(kind=LFIINT),                    INTENT(OUT)   :: KTOTAL
+INTEGER(kind=LFIINT),                    INTENT(OUT)   :: KRESP
 !
 INTEGER                   :: ICOMLEN
 INTEGER                   :: J
diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
index 0fc391c6989e19a5b08bfcbbe14161f223159974..ebd476354fc5dba27d7ebfd8eb33b5adc5f3cf80 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
@@ -17,13 +17,14 @@
 module mode_io_write_nc4
 
 use modd_io,           only: gsmonoproc, tfiledata
-use modd_netcdf,       only: dimcdf, IDCDF_KIND, iocdf
+use modd_netcdf,       only: dimcdf, iocdf
+use modd_precision,    only: CDFINT, MNHINT_NF90, MNHREAL_NF90
 
 use mode_field,        only: tfielddata
 use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Vdims_fill_nc4, IO_Dimcdf_get_nc4, IO_Strdimid_get_nc4, IO_Err_handle_nc4
 use mode_msg
 
-use NETCDF,            only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64, &
+use NETCDF,            only: NF90_CHAR, NF90_FLOAT, NF90_INT1,                                    &
                              NF90_GLOBAL, NF90_NOERR,                                             &
                              NF90_DEF_VAR, NF90_DEF_VAR_DEFLATE, NF90_GET_ATT, NF90_INQ_VARID,    &
                              NF90_INQUIRE_ATTRIBUTE, NF90_PUT_ATT, NF90_PUT_VAR
@@ -49,8 +50,8 @@ END INTERFACE IO_Field_write_nc4
 integer,parameter :: NSTRINGCHUNKSIZE = 16 !Dimension of the chunks of strings
                                            !(to limit the number of dimensions for strings)
 
-integer(kind=IDCDF_KIND),parameter :: SHUFFLE = 1 !Set to 1 for (usually) better compression
-integer(kind=IDCDF_KIND),parameter :: DEFLATE = 1
+integer(kind=CDFINT),parameter :: SHUFFLE = 1 !Set to 1 for (usually) better compression
+integer(kind=CDFINT),parameter :: DEFLATE = 1
 
 contains
 
@@ -61,16 +62,16 @@ USE MODD_CONF_n, ONLY: CSTORAGE_TYPE
 !
 USE MODE_FIELD,  ONLY: TYPEINT, TYPEREAL
 !
-TYPE(TFILEDATA),                               INTENT(IN) :: TPFILE
-TYPE(TFIELDDATA),                              INTENT(IN) :: TPFIELD
-INTEGER(KIND=IDCDF_KIND),                      INTENT(IN) :: KVARID
-LOGICAL,                                       INTENT(IN) :: OEXISTED !True if variable was already defined
-INTEGER(KIND=IDCDF_KIND),DIMENSION(:),OPTIONAL,INTENT(IN) :: KSHAPE
-CHARACTER(LEN=*),                     OPTIONAL,INTENT(IN) :: HCALENDAR
-LOGICAL,                              OPTIONAL,INTENT(IN) :: OISCOORD   ! Is a coordinate variable (->do not write coordinates attribute)
+TYPE(TFILEDATA),                              INTENT(IN) :: TPFILE
+TYPE(TFIELDDATA),                             INTENT(IN) :: TPFIELD
+INTEGER(KIND=CDFINT),                         INTENT(IN) :: KVARID
+LOGICAL,                                      INTENT(IN) :: OEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT), DIMENSION(:), OPTIONAL, INTENT(IN) :: KSHAPE
+CHARACTER(LEN=*),                   OPTIONAL, INTENT(IN) :: HCALENDAR
+LOGICAL,                            OPTIONAL, INTENT(IN) :: OISCOORD   ! Is a coordinate variable (->do not write coordinates attribute)
 !
-INTEGER(KIND=IDCDF_KIND)     :: INCID
-INTEGER(KIND=IDCDF_KIND)     :: STATUS
+INTEGER(KIND=CDFINT)         :: INCID
+INTEGER(KIND=CDFINT)         :: STATUS
 CHARACTER(LEN=:),ALLOCATABLE :: YCOORDS
 LOGICAL                      :: GISCOORD
 !
@@ -255,13 +256,13 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 REAL,                  INTENT(IN) :: PFIELD
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -278,22 +279,14 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
      ! Define the variable
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_DEF_VAR',trim(YVARNAME))
      DEALLOCATE(IVDIMS)
    ELSE
      ! Define the scalar variable
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVARID)
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
@@ -318,13 +311,13 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 REAL,DIMENSION(:),     INTENT(IN) :: PFIELD   ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4)          :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -346,17 +339,13 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
    ELSE
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
    END IF
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
@@ -391,16 +380,16 @@ INTEGER,OPTIONAL,      INTENT(IN) :: KVERTLEVEL ! Number of the vertical level (
 INTEGER,OPTIONAL,      INTENT(IN) :: KZFILE     ! Number of the Z-level splitted file
 LOGICAL,OPTIONAL,      INTENT(IN) :: OISCOORD   ! Is a coordinate variable (->do not write coordinates attribute)
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=4)         :: YSUFFIX
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-TYPE(TFIELDDATA)         :: TZFIELD
-TYPE(TFILEDATA),POINTER  :: TZFILE
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=4)                                :: YSUFFIX
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)+4)          :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+TYPE(TFIELDDATA)                                :: TZFIELD
+TYPE(TFILEDATA),POINTER                         :: TZFILE
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
@@ -441,17 +430,13 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
    ELSE
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
    END IF
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
@@ -465,7 +450,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
+CALL IO_Field_attr_write_nc4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT),OISCOORD=OISCOORD)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -483,13 +468,13 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 REAL,DIMENSION(:,:,:), INTENT(IN) :: PFIELD   ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -512,17 +497,13 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
    ELSE
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
    END IF
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_DEF_VAR',trim(YVARNAME))
 
@@ -537,7 +518,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -555,13 +536,13 @@ TYPE(TFIELDDATA),          INTENT(IN) :: TPFIELD
 REAL,DIMENSION(:,:,:,:),   INTENT(IN) :: PFIELD   ! array containing the data field
 INTEGER,                   INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -584,17 +565,13 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
    ELSE
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
    END IF
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_DEF_VAR',trim(YVARNAME))
 
@@ -609,7 +586,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -627,13 +604,13 @@ TYPE(TFIELDDATA),          INTENT(IN) :: TPFIELD
 REAL,DIMENSION(:,:,:,:,:), INTENT(IN) :: PFIELD   ! array containing the data field
 INTEGER,                   INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -656,17 +633,13 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
    ELSE
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
    END IF
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_DEF_VAR',trim(YVARNAME))
 
@@ -681,7 +654,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -699,13 +672,13 @@ TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
 REAL,DIMENSION(:,:,:,:,:,:), INTENT(IN) :: PFIELD   ! array containing the data field
 INTEGER,                     INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
@@ -728,17 +701,13 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
    ELSE
-#if (MNH_REAL == 8)
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIMS, IVARID)
    END IF
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_DEF_VAR',trim(YVARNAME))
 
@@ -753,7 +722,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=CDFINT))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -778,14 +747,14 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 INTEGER,               INTENT(IN) :: KFIELD
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
-TYPE(IOCDF), POINTER     :: TZIOCDF
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
+TYPE(IOCDF), POINTER                            :: TZIOCDF
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -802,22 +771,14 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS)
      ! Define the variable
-#if ( MNH_INT == 4 )
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT,   IVDIMS, IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID)
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_DEF_VAR',trim(YVARNAME))
      DEALLOCATE(IVDIMS)
    ELSE
      ! Define the scalar variable
-#if ( MNH_INT == 4 )
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT,   IVARID)
-#else
-     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVARID)
-#endif
+     STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVARID)
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
@@ -847,7 +808,7 @@ END IF
 #endif
 IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_LEVEL)) THEN
   TZIOCDF => TPFILE%TNCDIMS
-  TZIOCDF%DIM_LEVEL=>IO_Dimcdf_get_nc4(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
+  TZIOCDF%DIM_LEVEL=>IO_Dimcdf_get_nc4(TPFILE,INT(KFIELD+2*JPVEXT,KIND=CDFINT),'Z')
 END IF
 
 KRESP = IRESP
@@ -868,13 +829,13 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 INTEGER, DIMENSION(:), INTENT(IN) :: KFIELD
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -896,15 +857,11 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
-#if ( MNH_INT == 4 )
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID)
-#else
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
-#endif
-     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N1','NF90_DEF_VAR',trim(YVARNAME))
+   STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID)
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_WRITE_FIELD_NC4_N1','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
@@ -929,13 +886,13 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 INTEGER,DIMENSION(:,:),INTENT(IN) :: KFIELD   ! array containing the data field
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
@@ -958,14 +915,10 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
-#if ( MNH_INT == 4 )
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID)
-#else
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
-#endif
+   STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID)
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
@@ -978,7 +931,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=CDFINT))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -995,13 +948,13 @@ TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
 INTEGER,DIMENSION(:,:,:),INTENT(IN) :: KFIELD   ! array containing the data field
 INTEGER,                 INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
@@ -1024,14 +977,10 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
-#if ( MNH_INT == 4 )
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT, IVDIMS, IVARID)
-#else
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
-#endif
+   STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHINT_NF90, IVDIMS, IVARID)
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
@@ -1044,7 +993,7 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=CDFINT))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
 IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
@@ -1063,14 +1012,14 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 LOGICAL,               INTENT(IN) :: OFIELD
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER                  :: IFIELD
-INTEGER(KIND=IDCDF_KIND) :: STATUS
-INTEGER(KIND=IDCDF_KIND) :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
-INTEGER(KIND=IDCDF_KIND) :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE      :: IVDIMS
-INTEGER                  :: IRESP
-LOGICAL                  :: GEXISTED !True if variable was already defined
+INTEGER                                         :: IFIELD
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1087,7 +1036,7 @@ STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
+     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=CDFINT), IVDIMS)
      ! Define the variable
      ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID)
@@ -1129,14 +1078,14 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 LOGICAL, DIMENSION(:), INTENT(IN) :: OFIELD
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER, DIMENSION(SIZE(OFIELD))                         :: IFIELD
-INTEGER(KIND=IDCDF_KIND)                                 :: STATUS
-INTEGER(KIND=IDCDF_KIND)                                 :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))                     :: YVARNAME
-INTEGER(KIND=IDCDF_KIND)                                 :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE      :: IVDIMS
-INTEGER                                                  :: IRESP
-LOGICAL                                                  :: GEXISTED !True if variable was already defined
+INTEGER, DIMENSION(SIZE(OFIELD))                :: IFIELD
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMS
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1158,7 +1107,7 @@ IF (STATUS /= NF90_NOERR) THEN
    END IF
 
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
@@ -1195,14 +1144,14 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 CHARACTER(LEN=*),      INTENT(IN) :: HFIELD
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND)               :: STATUS
-INTEGER(KIND=IDCDF_KIND)               :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))   :: YVARNAME
-INTEGER(KIND=IDCDF_KIND)               :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS
-INTEGER                                :: IRESP, ILEN
-CHARACTER(LEN=:),ALLOCATABLE           :: YFIELD
-LOGICAL                                :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                 :: STATUS
+INTEGER(KIND=CDFINT)                 :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
+INTEGER(KIND=CDFINT)                 :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(1)   :: IVDIMS
+INTEGER                              :: IRESP, ILEN
+CHARACTER(LEN=:),ALLOCATABLE         :: YFIELD
+LOGICAL                              :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1228,7 +1177,7 @@ IF (TPFIELD%LTIMEDEP) &
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id
-   IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,INT(ILEN,KIND=IDCDF_KIND))
+   IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,INT(ILEN,KIND=CDFINT))
    ! Define the variable
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID)
      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C0','NF90_DEF_VAR',trim(YVARNAME))
@@ -1259,17 +1208,17 @@ TYPE(TFIELDDATA),             INTENT(IN)  :: TPFIELD
 CHARACTER(LEN=*),DIMENSION(:),INTENT(IN)  :: HFIELD
 INTEGER,                      INTENT(OUT) :: KRESP
 !
-INTEGER(KIND=IDCDF_KIND),PARAMETER :: IONE = 1
+INTEGER(KIND=CDFINT),PARAMETER :: IONE = 1
 !
-INTEGER(KIND=IDCDF_KIND)               :: STATUS
-INTEGER(KIND=IDCDF_KIND)               :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))   :: YVARNAME
-INTEGER(KIND=IDCDF_KIND)               :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(2) :: IVDIMS
-INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMSTMP
-INTEGER(KIND=IDCDF_KIND)               :: ILEN, ISIZE
-INTEGER                                :: IRESP
-LOGICAL                                :: GEXISTED !True if variable was already defined
+INTEGER(KIND=CDFINT)                            :: STATUS
+INTEGER(KIND=CDFINT)                            :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))            :: YVARNAME
+INTEGER(KIND=CDFINT)                            :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(2)              :: IVDIMS
+INTEGER(KIND=CDFINT), DIMENSION(:), ALLOCATABLE :: IVDIMSTMP
+INTEGER(KIND=CDFINT)                            :: ILEN, ISIZE
+INTEGER                                         :: IRESP
+LOGICAL                                         :: GEXISTED !True if variable was already defined
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1331,17 +1280,17 @@ TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
 TYPE (DATE_TIME),      INTENT(IN) :: TPDATA
 INTEGER,               INTENT(OUT):: KRESP
 !
-INTEGER(KIND=IDCDF_KIND)               :: STATUS
-INTEGER(KIND=IDCDF_KIND)               :: INCID
-CHARACTER(LEN=LEN(TPFIELD%CMNHNAME))   :: YVARNAME
-INTEGER(KIND=IDCDF_KIND)               :: IVARID
-INTEGER(KIND=IDCDF_KIND), DIMENSION(1) :: IVDIMS
-INTEGER                                :: IRESP
-TYPE(TFIELDDATA)                       :: TZFIELD
-CHARACTER(LEN=40)                      :: YUNITS
-LOGICAL                                :: GEXISTED !True if variable was already defined
-REAL                                   :: ZDELTATIME !Distance in seconds since reference date and time
-TYPE(DATE_TIME)                        :: TZREF
+INTEGER(KIND=CDFINT)                 :: STATUS
+INTEGER(KIND=CDFINT)                 :: INCID
+CHARACTER(LEN=LEN(TPFIELD%CMNHNAME)) :: YVARNAME
+INTEGER(KIND=CDFINT)                 :: IVARID
+INTEGER(KIND=CDFINT), DIMENSION(1)   :: IVDIMS
+INTEGER                              :: IRESP
+TYPE(TFIELDDATA)                     :: TZFIELD
+CHARACTER(LEN=40)                    :: YUNITS
+LOGICAL                              :: GEXISTED !True if variable was already defined
+REAL                                 :: ZDELTATIME !Distance in seconds since reference date and time
+TYPE(DATE_TIME)                      :: TZREF
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
@@ -1383,12 +1332,8 @@ IF (TPFIELD%LTIMEDEP) &
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Define the scalar variable
-#if (MNH_REAL == 8)
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVARID)
-#else
-   STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVARID)
-#endif
-     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(YVARNAME))
+   STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVARID)
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
@@ -1424,7 +1369,7 @@ TZFIELD%CCOMMENT  = 'YYYYMMDD'
 STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=CDFINT), IVDIMS)
 
    ! Define the variable
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID)
@@ -1454,11 +1399,7 @@ TZFIELD%CCOMMENT  = 'SECONDS'
 STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Define the scalar variable
-#if (MNH_REAL == 8)
-   STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_DOUBLE, IVARID)
-#else
-   STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_FLOAT,  IVARID)
-#endif
+   STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, MNHREAL_NF90, IVARID)
    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
    CALL IO_Field_attr_write_nc4(TPFILE,TZFIELD,IVARID,GEXISTED)
 ELSE
@@ -1494,7 +1435,7 @@ CHARACTER(LEN=:),ALLOCATABLE    :: YPROGRAM
 INTEGER                         :: IIU, IJU, IKU
 INTEGER                         :: ID, IID, IRESP
 INTEGER                         :: IMI
-INTEGER(KIND=IDCDF_KIND)        :: INCID
+INTEGER(KIND=CDFINT)            :: INCID
 LOGICAL                         :: GCHANGEMODEL
 LOGICAL,POINTER                 :: GSLEVE
 REAL,DIMENSION(:),POINTER       :: ZXHAT, ZYHAT, ZZHAT
@@ -1656,9 +1597,9 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND
   INTEGER                       :: IRESP
   INTEGER                       :: ISIZE
   INTEGER                       :: JI
-  INTEGER(KIND=IDCDF_KIND)      :: IVARID
-  INTEGER(KIND=IDCDF_KIND)      :: IVDIM
-  INTEGER(KIND=IDCDF_KIND)      :: STATUS
+  INTEGER(KIND=CDFINT)          :: IVARID
+  INTEGER(KIND=CDFINT)          :: IVDIM
+  INTEGER(KIND=CDFINT)          :: STATUS
   LOGICAL                       :: GALLOC
   REAL,DIMENSION(:),POINTER     :: ZTAB
 
@@ -1702,11 +1643,7 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND
     STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
     IF (STATUS /= NF90_NOERR) THEN
       ! Define the coordinate variable
-#if (MNH_REAL == 8)
-      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID)
-#else
-      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIM, IVARID)
-#endif
+      STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIM, IVARID)
       IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_DEF_VAR',trim(YVARNAME))
     ELSE
       CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_HOR_COORD',TRIM(YVARNAME)//' already defined')
@@ -1802,9 +1739,9 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB
   INTEGER                       :: IRESP
   INTEGER                       :: ISIZE
   INTEGER                       :: JI
-  INTEGER(KIND=IDCDF_KIND)      :: IVARID
-  INTEGER(KIND=IDCDF_KIND)      :: IVDIM
-  INTEGER(KIND=IDCDF_KIND)      :: STATUS
+  INTEGER(KIND=CDFINT)          :: IVARID
+  INTEGER(KIND=CDFINT)          :: IVDIM
+  INTEGER(KIND=CDFINT)          :: STATUS
 
   ISIZE = TDIM%LEN
   YVARNAME = TRIM(TDIM%NAME)
@@ -1813,11 +1750,7 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB
   STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
   IF (STATUS /= NF90_NOERR) THEN
     ! Define the coordinate variable
-#if (MNH_REAL == 8)
-    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID)
-#else
-    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIM, IVARID)
-#endif
+    STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIM, IVARID)
     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_DEF_VAR',trim(YVARNAME))
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_VER_COORD',TRIM(YVARNAME)//' already defined')
@@ -1884,9 +1817,9 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
   REAL                         :: ZDELTATIME
   CHARACTER(LEN=40)            :: YUNITS
   CHARACTER(LEN=:),ALLOCATABLE :: YVARNAME
-  INTEGER(KIND=IDCDF_KIND)     :: IVARID
-  INTEGER(KIND=IDCDF_KIND)     :: IVDIM
-  INTEGER(KIND=IDCDF_KIND)     :: STATUS
+  INTEGER(KIND=CDFINT)         :: IVARID
+  INTEGER(KIND=CDFINT)         :: IVDIM
+  INTEGER(KIND=CDFINT)         :: STATUS
   TYPE(DATE_TIME)              :: TZREF
 
 
@@ -1897,11 +1830,7 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
     STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
     IF (STATUS /= NF90_NOERR) THEN
       ! Define the coordinate variable
-#if (MNH_REAL == 8)
-      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIM, IVARID)
-#else
-      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIM, IVARID)
-#endif
+      STATUS = NF90_DEF_VAR(INCID, YVARNAME, MNHREAL_NF90, IVDIM, IVARID)
       IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_DEF_VAR',trim(YVARNAME))
     ELSE
       CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_TIME_COORD',TRIM(YVARNAME)//' already defined')
@@ -1941,7 +1870,7 @@ SUBROUTINE IO_Header_write_nc4(TPFILE)
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE ! File structure
 !
-INTEGER(KIND=IDCDF_KIND)     :: ISTATUS
+INTEGER(KIND=CDFINT) :: ISTATUS
 !
 IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN
 !
@@ -1993,7 +1922,7 @@ INTEGER,PARAMETER :: YEAR=1, MONTH=2, DAY=3, HH=5, MM=6, SS=7
 CHARACTER(len=5)             :: YZONE
 CHARACTER(LEN=:),ALLOCATABLE :: YCMD, YHISTORY, YHISTORY_NEW, YHISTORY_PREV
 INTEGER                      :: ILEN_CMD, ILEN_PREV
-INTEGER(KIND=IDCDF_KIND)     :: ISTATUS
+INTEGER(KIND=CDFINT)         :: ISTATUS
 INTEGER,DIMENSION(8)         :: IDATETIME
 !
 IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN
diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
index 78ef176e9b855366bfa5dcc56f48dfc174268254..e283130d55260372751aab4f92cbba07611cb468 100644
--- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90
+++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
@@ -273,7 +273,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
 
@@ -353,7 +353,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)
           !
 
@@ -415,7 +415,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
@@ -469,8 +469,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
 
@@ -543,7 +543,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)
           !
  
@@ -600,7 +600,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
@@ -619,7 +619,8 @@ CONTAINS
     USE MODD_IO,            ONLY: GSMONOPROC, ISP, ISNPROC, L2D, LPACK
     USE MODD_MPIF,          ONLY: MPI_INTEGER, MPI_STATUS_IGNORE
     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_precision,     only: MNHREAL_MPI
 
     USE MODE_DISTRIB_LB
     USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
@@ -687,7 +688,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)
@@ -703,7 +704,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
 
@@ -734,7 +735,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)
@@ -787,7 +788,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
@@ -801,7 +802,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
@@ -899,7 +899,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_scatter.f90 b/src/LIB/SURCOUCHE/src/mode_scatter.f90
index 8ee7b755f4c09e4ca64ac16573865ba1b7477090..12518db8bd6a1bd8222d637aee2de2264bf163a3 100644
--- a/src/LIB/SURCOUCHE/src/mode_scatter.f90
+++ b/src/LIB/SURCOUCHE/src/mode_scatter.f90
@@ -4,12 +4,6 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
-
 MODULE MODE_SCATTER_ll
 
 !
@@ -18,6 +12,7 @@ MODULE MODE_SCATTER_ll
 !
 
 USE MODD_MPIF
+use modd_precision, only: MNHREAL_MPI
 
 IMPLICIT NONE 
 
@@ -87,9 +82,9 @@ IF (ISP == KROOT) THEN
          NB_REQ = NB_REQ + 1
          ALLOCATE(T_TX1DP(NB_REQ)%X(SIZE(TX1DP)))
          T_TX1DP(NB_REQ)%X=TX1DP
-         CALL MPI_ISEND(T_TX1DP(NB_REQ)%X,SIZE(TX1DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+         CALL MPI_ISEND(T_TX1DP(NB_REQ)%X,SIZE(TX1DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
               & ,REQ_TAB(NB_REQ),IERR) 
-         !CALL MPI_BSEND(T12DP,SIZE(T12DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+         !CALL MPI_BSEND(T12DP,SIZE(T12DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
          !     & ,IERR)
       ELSE 
          PRECV(:) = TX1DP(:)
@@ -102,7 +97,7 @@ IF (ISP == KROOT) THEN
    DEALLOCATE(T_TX1DP)
    DEALLOCATE(REQ_TAB)
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
   
@@ -142,14 +137,14 @@ IF (ISP == KROOT) THEN
     END IF
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:) = TX2DP(:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
@@ -179,14 +174,14 @@ IF (ISP == KROOT) THEN
     END IF
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:) = TX2DP(:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
   
@@ -216,14 +211,14 @@ IF (ISP == KROOT) THEN
     END IF
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:,:) = TX2DP(:,:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
@@ -253,14 +248,14 @@ IF (ISP == KROOT) THEN
     END IF
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:,:,:) = TX2DP(:,:,:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
   
@@ -290,14 +285,14 @@ IF (ISP == KROOT) THEN
     END IF
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:,:,:,:) = TX2DP(:,:,:,:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
@@ -409,9 +404,9 @@ IF (ISP == KROOT) THEN
          NB_REQ = NB_REQ + 1
          ALLOCATE(T_TX2DP(NB_REQ)%X(IXO:IXE,IYO:IYE))
          T_TX2DP(NB_REQ)%X=TX2DP
-         CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+         CALL MPI_ISEND(T_TX2DP(NB_REQ)%X,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
               & ,REQ_TAB(NB_REQ),IERR)
-         !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+         !CALL MPI_BSEND(TX2DP,SIZE(TX2DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
          !     & ,IERR)
       ELSE 
          PRECV(:,:) = TX2DP(:,:)
@@ -424,7 +419,7 @@ IF (ISP == KROOT) THEN
    DEALLOCATE(T_TX2DP)
    DEALLOCATE(REQ_TAB)
 ELSE
-   CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+   CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
   
@@ -449,14 +444,14 @@ IF (ISP == KROOT) THEN
     TX3DP=>PSEND(IXO:IXE,IYO:IYE,:)
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:) = TX3DP(:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
@@ -481,14 +476,14 @@ IF (ISP == KROOT) THEN
     TX3DP=>PSEND(IXO:IXE,IYO:IYE,:,:)
         
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:,:) = TX3DP(:,:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
@@ -513,14 +508,14 @@ IF (ISP == KROOT) THEN
     TX3DP=>PSEND(IXO:IXE,IYO:IYE,:,:,:)
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:,:,:) = TX3DP(:,:,:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
@@ -545,14 +540,14 @@ IF (ISP == KROOT) THEN
     TX3DP=>PSEND(IXO:IXE,IYO:IYE,:,:,:,:)
     
     IF (ISP /= JI) THEN 
-      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,199+KROOT,KCOMM&
+      CALL MPI_BSEND(TX3DP,SIZE(TX3DP),MNHREAL_MPI,JI-1,199+KROOT,KCOMM&
            & ,IERR)
     ELSE 
       PRECV(:,:,:,:,:,:) = TX3DP(:,:,:,:,:,:)
     END IF
   END DO
 ELSE
-  CALL MPI_RECV(PRECV,SIZE(PRECV),MPI_FLOAT,KROOT-1,199+KROOT,KCOMM&
+  CALL MPI_RECV(PRECV,SIZE(PRECV),MNHREAL_MPI,KROOT-1,199+KROOT,KCOMM&
        & ,MPI_STATUS_IGNORE,IERR)
 END IF
 
diff --git a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
index 7b1b5680a3ddc49ba167bd504198d24b701477d5..fc5c40069db48cc06299afa288b986b0cf1d54db 100644
--- a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
@@ -3,15 +3,6 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MNH_MPI_REAL MPI_DOUBLE_PRECISION
-#define MNH_MPI_2REAL MPI_2DOUBLE_PRECISION
-#else
-#define MNH_MPI_REAL MPI_REAL
-#define MNH_MPI_2REAL MPI_2REAL
-#endif
-
 !       ########################
 MODULE MODE_SPLITTINGZ_ll
   !     ########################
@@ -180,9 +171,6 @@ CONTAINS
     !
     CALL MPI_COMM_DUP(NMNH_COMM_WORLD, NGRID_COM, KINFO_ll)
     !
-    MPI_PRECISION  = MNH_MPI_REAL
-    MPI_2PRECISION = MNH_MPI_2REAL
-    !
     ! For bug with intelmpi+ilp64+i8 declare MNH_STATUSES_IGNORE
     !
 #ifndef MNH_USE_MPI_STATUSES_IGNORE
@@ -1813,12 +1801,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
@@ -1851,8 +1837,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 1580724bde78a06009543ca6cfc72bdcc3b7e87a..23638d194e3273217719c90a1de448a05a7ec9e0 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 0fb29815036b842f1abdd0421a85e933b2eac5a1..9f588cfa24ba1c630a33bbeb1152e0b995ac5504 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 6e450dffbec00d2f642c1764b78fca22a4ab3b5b..626cc3614f8a594ac5dfcb5b7f25af6c99dfd506 100644
--- a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
@@ -46,8 +46,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
@@ -1094,7 +1095,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
@@ -1116,16 +1116,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
@@ -1328,8 +1324,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
 !
@@ -1360,7 +1356,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)
@@ -1412,7 +1408,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
@@ -1434,16 +1429,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
@@ -1664,9 +1655,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
@@ -1700,7 +1691,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
 !
@@ -1760,7 +1751,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
@@ -1781,16 +1771,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
@@ -2020,8 +2006,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)
 !
@@ -2054,7 +2040,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
@@ -2108,7 +2094,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
@@ -2129,16 +2114,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
@@ -2380,9 +2361,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
@@ -2416,7 +2397,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
 !
@@ -3294,8 +3275,6 @@ ENDIF
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -3315,7 +3294,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/advection.f90 b/src/MNH/advection.f90
deleted file mode 100644
index 363bd919cf0e3357588eecae9c4120610ff8b6e8..0000000000000000000000000000000000000000
--- a/src/MNH/advection.f90
+++ /dev/null
@@ -1,181 +0,0 @@
-!MNH_LIC Copyright 1994-2014 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_ADVECTION
-!     #####################
-!
-INTERFACE
-      SUBROUTINE ADVECTION (HUVW_ADV_SCHEME,HMET_ADV_SCHEME,HSV_ADV_SCHEME,    &
-                           KLITER, HLBCX, HLBCY,KRR, KSV, KTCOUNT,             &
-                           PTSTEP_MET, PTSTEP_SV,                              & 
-                           PUM, PVM, PWM, PTHM, PRM, PTKEM, PSVM,              &
-                           PUT, PVT, PWT, PTHT, PRT, PTKET, PSVT,              &
-                           PRHODJ, PDXX, PDYY, PDZZ, PDZX, PDZY,               &
-                           PRUS,PRVS, PRWS, PRTHS, PRRS, PRTKES, PRSVS         )
-!
-!
-CHARACTER(LEN=6),         INTENT(IN)    :: HMET_ADV_SCHEME, & ! Control of the 
-                                           HSV_ADV_SCHEME,  & ! scheme applied 
-                                           HUVW_ADV_SCHEME     ! to the selected
-                                                              ! variables 
-!
-INTEGER,                  INTENT(IN)    :: KLITER        ! Iteration number for
-                                                         ! the MPDATA scheme
-!
-CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY  ! X- and Y-direc LBC
-!
-INTEGER,                  INTENT(IN)    :: KRR  ! Number of moist variables
-INTEGER,                  INTENT(IN)    :: KSV  ! Number of Scalar Variables
-INTEGER,                  INTENT(IN)    :: KTCOUNT  ! iteration count
-REAL,                     INTENT(IN)    :: PTSTEP_MET !  Effective time step for
-                                                ! meteorological scalar variables 
-                                                ! (depending on advection scheme)
-REAL,                     INTENT(IN)    :: PTSTEP_SV !  Effective time step for
-                                                ! tracer scalar variables 
-                                                ! (depending on advection scheme)
-REAL, DIMENSION(:,:,:),   INTENT(IN) :: PTHM, PTKEM
-REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM , PSVM
-                                                  ! Variables at t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUM, PVM, PWM
-                                                  ! Variables at t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT , PVT  , PWT, PRHODJ
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT , PSVT
-                                                  ! Variables at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX,PDYY,PDZZ,PDZX,PDZY
-                                                  !  metric coefficients
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS , PRVS  , PRWS
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS, PRTKES
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS , PRSVS
-                                                  ! Sources terms 
-!
-!
-END SUBROUTINE ADVECTION
-!
-END INTERFACE
-!
-END MODULE MODI_ADVECTION 
-!     ##########################################################################
-      SUBROUTINE ADVECTION (HUVW_ADV_SCHEME,HMET_ADV_SCHEME,HSV_ADV_SCHEME,    &
-                           KLITER, HLBCX, HLBCY,KRR, KSV, KTCOUNT,             &
-                           PTSTEP_MET, PTSTEP_SV,                              & 
-                           PUM, PVM, PWM, PTHM, PRM, PTKEM, PSVM,              &
-                           PUT, PVT, PWT, PTHT, PRT, PTKET, PSVT,              &
-                           PRHODJ, PDXX, PDYY, PDZZ, PDZX, PDZY,               &
-                           PRUS,PRVS, PRWS, PRTHS, PRRS, PRTKES, PRSVS         )
-!     ##########################################################################
-!
-!!****  *ADVECTION * - routine to call the specialized advection routines
-!!
-!!    PURPOSE
-!!    -------
-!!      The purpose of this routine is to control the advection routines.
-!!    For that, it is first necessary to compute the metric coefficients
-!!    and the contravariant components of the momentum.
-!!
-!!**  METHOD
-!!    ------
-!!      The advection of momenta is calculated using a centred (second order) 
-!!    scheme. Three schemes can be used to calculated the advection of a 
-!!    scalar: centred (2nd) (ADVECSCALAR), Flux-Corrected Transport Scalar
-!!    (FCT_SCALAR) and a Multidimensional Positive Definite Advection Transport
-!!    Algorithm (MPDATA).
-!!      Once the scheme is selected, it is applied to the following group of
-!!    variables: METeorologicals (temperature, water substances, TKE,
-!!    dissipation TKE) and Scalar Variables. It is possible to select different
-!!    advection schemes for each group of variables.
-!!
-!!    EXTERNAL
-!!    --------
-!!      Functions MXM,MYM,MZM  : computes the averages along the 3 directions
-!!      CONTRAV              : computes the contravariant components.
-!!      ADVECUVW             : computes the advection terms for momentum.
-!!      ADVECSCALAR          : computes the advection terms for scalar fields.
-!!      ADD3DFIELD_ll        : add a field to 3D-list
-!!      ADVEC_4TH_ORDER      : 4th order advection scheme
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!      NONE
-!!
-!!    REFERENCE
-!!    ---------
-!!      Book1 and book2 ( routine ADVECTION )
-!!
-!!    AUTHOR
-!!    ------
-!!	J.-P. Pinty      * Laboratoire d'Aerologie*
-!!	J.-P. Lafore     * Meteo France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    06/07/94 
-!!                  01/04/95 (Ph. Hereil J. Nicolau) add the model number
-!!                  23/10/95 (J. Vila and JP Lafore) advection schemes scalar
-!!                  16/01/97 (JP Pinty)              change presentation 
-!!                  30/04/98 (J. Stein P Jabouille)  extrapolation for the cyclic
-!!                                                   case and parallelisation
-!!                  24/06/99 (P Jabouille)           case of NHALO>1
-!!                  25/10/05 (JP Pinty)              4th order scheme
-!!                  24/04/06 (C.Lac)                 Split scalar and passive
-!!                                                   tracer routines
-!!                  08/06    (T.Maric)               PPM scheme
-!!
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-!
-!
-!-------------------------------------------------------------------------------
-!
-IMPLICIT NONE
-!
-!*       0.1   Declarations of dummy arguments :
-!
-CHARACTER(LEN=6),         INTENT(IN)    :: HMET_ADV_SCHEME, & ! Control of the 
-                                           HSV_ADV_SCHEME,  & ! scheme applied 
-                                           HUVW_ADV_SCHEME     ! to the selected
-                                                              ! variables 
-!
-INTEGER,                  INTENT(IN)    :: KLITER        ! Iteration number for
-                                                         ! the MPDATA scheme
-!
-CHARACTER(LEN=4),DIMENSION(2),INTENT(IN):: HLBCX, HLBCY  ! X- and Y-direc LBC
-!
-INTEGER,                  INTENT(IN)    :: KRR  ! Number of moist variables
-INTEGER,                  INTENT(IN)    :: KSV  ! Number of Scalar Variables
-!
-INTEGER,                  INTENT(IN)    :: KTCOUNT  ! iteration count
-REAL,                     INTENT(IN)    :: PTSTEP_MET !  Effective time step for
-                                                ! meteorological scalar variables 
-                                                ! (depending on advection scheme)
-REAL,                     INTENT(IN)    :: PTSTEP_SV !  Effective time step for
-                                                ! tracer scalar variables 
-                                                ! (depending on advection scheme)
-!
-REAL, DIMENSION(:,:,:),   INTENT(IN) :: PTHM, PTKEM
-REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PRM , PSVM
-                                                  ! Variables at t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUM, PVM, PWM
-                                                  ! Variables at t-dt
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PUT , PVT  , PWT
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT, PTKET, PRHODJ
-REAL, DIMENSION(:,:,:,:), INTENT(IN)    :: PRT , PSVT
-                                                  ! Variables at t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDXX,PDYY,PDZZ,PDZX,PDZY
-                                                  !  metric coefficients
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRUS , PRVS, PRWS
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRTHS, PRTKES
-REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRRS , PRSVS
-                                                  ! Sources terms 
-!
-!
-! ROUTINE TO REMOVE
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE ADVECTION
diff --git a/src/MNH/aeroopt_get.f90 b/src/MNH/aeroopt_get.f90
index c58b83a01cf31d2828f9cf3190bea346100b6bd1..485e87b687a9f0bbaf59085bedd73a4dd3d3a4aa 100644
--- a/src/MNH/aeroopt_get.f90
+++ b/src/MNH/aeroopt_get.f90
@@ -1,6 +1,6 @@
-!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.
 !        ###################
          MODULE MODI_AEROOPT_GET
@@ -68,7 +68,8 @@
 !!    ------
 !!      Benjamin Aouizerats (CNRM/GMEI)
 !!
-!!
+! Modifications:
+!  P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -160,48 +161,48 @@
 
   DO JMDE=1,NMODE_AER
 
-      Ri(1,1)=CMPLX(1.80,-7.40E-1)
-      Ri(1,2)=CMPLX(1.80,-7.40E-1)
-      Ri(1,3)=CMPLX(1.83,-7.40E-1)
-      Ri(1,4)=CMPLX(1.88,-6.90E-1)
-      Ri(1,5)=CMPLX(1.97,-6.80E-1)
-      Ri(1,6)=CMPLX(2.10,-7.20E-1)
-
-      Ri(2,1)=CMPLX(1.45,-1.00E-3)
-      Ri(2,2)=CMPLX(1.45,-1.00E-3)
-      Ri(2,3)=CMPLX(1.45,-1.00E-3)
-      Ri(2,4)=CMPLX(1.46,-1.00E-3)
-      Ri(2,5)=CMPLX(1.49,-1.00E-3)
-      Ri(2,6)=CMPLX(1.42,-1.26E-2)
-
-      Ri(3,1)=CMPLX(1.36,-3.60E-8)
-      Ri(3,2)=CMPLX(1.34,-3.00E-9)
-      Ri(3,3)=CMPLX(1.33,-1.80E-8)
-      Ri(3,4)=CMPLX(1.33,-5.75E-7)
-      Ri(3,5)=CMPLX(1.31,-1.28E-4)
-      Ri(3,6)=CMPLX(1.42,-2.54E-1)
+      Ri(1,1)=CMPLX(1.80,-7.40E-1,kind=kind(Ri(1,1)))
+      Ri(1,2)=CMPLX(1.80,-7.40E-1,kind=kind(Ri(1,1)))
+      Ri(1,3)=CMPLX(1.83,-7.40E-1,kind=kind(Ri(1,1)))
+      Ri(1,4)=CMPLX(1.88,-6.90E-1,kind=kind(Ri(1,1)))
+      Ri(1,5)=CMPLX(1.97,-6.80E-1,kind=kind(Ri(1,1)))
+      Ri(1,6)=CMPLX(2.10,-7.20E-1,kind=kind(Ri(1,1)))
+
+      Ri(2,1)=CMPLX(1.45,-1.00E-3,kind=kind(Ri(1,1)))
+      Ri(2,2)=CMPLX(1.45,-1.00E-3,kind=kind(Ri(1,1)))
+      Ri(2,3)=CMPLX(1.45,-1.00E-3,kind=kind(Ri(1,1)))
+      Ri(2,4)=CMPLX(1.46,-1.00E-3,kind=kind(Ri(1,1)))
+      Ri(2,5)=CMPLX(1.49,-1.00E-3,kind=kind(Ri(1,1)))
+      Ri(2,6)=CMPLX(1.42,-1.26E-2,kind=kind(Ri(1,1)))
+
+      Ri(3,1)=CMPLX(1.36,-3.60E-8,kind=kind(Ri(1,1)))
+      Ri(3,2)=CMPLX(1.34,-3.00E-9,kind=kind(Ri(1,1)))
+      Ri(3,3)=CMPLX(1.33,-1.80E-8,kind=kind(Ri(1,1)))
+      Ri(3,4)=CMPLX(1.33,-5.75E-7,kind=kind(Ri(1,1)))
+      Ri(3,5)=CMPLX(1.31,-1.28E-4,kind=kind(Ri(1,1)))
+      Ri(3,6)=CMPLX(1.42,-2.54E-1,kind=kind(Ri(1,1)))
       
-      Ri(4,1)=CMPLX(1.52,-5.00E-4)
-      Ri(4,2)=CMPLX(1.52,-5.00E-4)
-      Ri(4,3)=CMPLX(1.52,-5.00E-4)
-      Ri(4,4)=CMPLX(1.52,-5.00E-4)
-      Ri(4,5)=CMPLX(1.51,-5.00E-4)
-      Ri(4,6)=CMPLX(1.35,-1.40E-2)
+      Ri(4,1)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1)))
+      Ri(4,2)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1)))
+      Ri(4,3)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1)))
+      Ri(4,4)=CMPLX(1.52,-5.00E-4,kind=kind(Ri(1,1)))
+      Ri(4,5)=CMPLX(1.51,-5.00E-4,kind=kind(Ri(1,1)))
+      Ri(4,6)=CMPLX(1.35,-1.40E-2,kind=kind(Ri(1,1)))
       
-      Ri(5,1)=CMPLX(1.53,-5.00E-3)
-      Ri(5,2)=CMPLX(1.53,-5.00E-3)
-      Ri(5,3)=CMPLX(1.53,-6.00E-3)
-      Ri(5,4)=CMPLX(1.52,-1.30E-2)
-      Ri(5,5)=CMPLX(1.52,-1.30E-2)
-      Ri(5,6)=CMPLX(1.45,-5.00E-1)
+      Ri(5,1)=CMPLX(1.53,-5.00E-3,kind=kind(Ri(1,1)))
+      Ri(5,2)=CMPLX(1.53,-5.00E-3,kind=kind(Ri(1,1)))
+      Ri(5,3)=CMPLX(1.53,-6.00E-3,kind=kind(Ri(1,1)))
+      Ri(5,4)=CMPLX(1.52,-1.30E-2,kind=kind(Ri(1,1)))
+      Ri(5,5)=CMPLX(1.52,-1.30E-2,kind=kind(Ri(1,1)))
+      Ri(5,6)=CMPLX(1.45,-5.00E-1,kind=kind(Ri(1,1)))
 
 
-      Ri(6,1)=CMPLX(1.448,-0.00292)
-      Ri(6,2)=CMPLX(1.448,-0.00292)
-      Ri(6,3)=CMPLX(1.4777,-0.01897)
-      Ri(6,4)=CMPLX(1.44023,-0.00116)
-      Ri(6,5)=CMPLX(1.41163,-0.00106)
-      Ri(6,6)=CMPLX(1.41163,-0.00106)
+      Ri(6,1)=CMPLX(1.448,-0.00292,kind=kind(Ri(1,1)))
+      Ri(6,2)=CMPLX(1.448,-0.00292,kind=kind(Ri(1,1)))
+      Ri(6,3)=CMPLX(1.4777,-0.01897,kind=kind(Ri(1,1)))
+      Ri(6,4)=CMPLX(1.44023,-0.00116,kind=kind(Ri(1,1)))
+      Ri(6,5)=CMPLX(1.41163,-0.00106,kind=kind(Ri(1,1)))
+      Ri(6,6)=CMPLX(1.41163,-0.00106,kind=kind(Ri(1,1)))
 
 ! Computation of the refractive index for the whole aerosol mode according to
 ! Maxwell-Garnett mixing rule
@@ -235,17 +236,18 @@
      
      
      DO JWVL=1,KSWB                    !Number of SW wavelengths
-     eps1(:,:,:)=CMPLX((Ri(1,JWVL)*VBC(:,:,:)+Ri(2,JWVL)*VOC(:,:,:)+VDDST(:,:,:)*Ri(6,JWVL))/(VBC(:,:,:)+VOC(:,:,:)))**2
-     Req(:,:,:,JWVL)=sqrt(CMPLX(eps1(:,:,:)))
+     eps1(:,:,:)=CMPLX((Ri(1,JWVL)*VBC(:,:,:)+Ri(2,JWVL)*VOC(:,:,:)+VDDST(:,:,:)*Ri(6,JWVL))/(VBC(:,:,:)+VOC(:,:,:)), &
+                       kind=kind(eps1(1,1,1)))**2
+     Req(:,:,:,JWVL)=sqrt(CMPLX(eps1(:,:,:),kind=kind(eps1(1,1,1))))
 
      WHERE (VEXTR(:,:,:).NE.0. )
      eps2(:,:,:)=CMPLX((VSOA(:,:,:)*Ri(2,JWVL)+VH2O(:,:,:)*Ri(3,JWVL)+VAM(:,:,:)*Ri(4,JWVL)&
                  +VSU(:,:,:)*Ri(4,JWVL)+VNI(:,:,:)*Ri(5,JWVL))/&
-                 (VSOA(:,:,:)+VH2O(:,:,:)+VAM(:,:,:)+VSU(:,:,:)+VNI(:,:,:)))**2
+                 (VSOA(:,:,:)+VH2O(:,:,:)+VAM(:,:,:)+VSU(:,:,:)+VNI(:,:,:)),kind=kind(eps2(1,1,1)))**2
      f1(:,:,:)=(VOC(:,:,:)+VBC(:,:,:))/(VSOA(:,:,:)+VH2O(:,:,:)+VAM(:,:,:)+VSU(:,:,:)+VNI(:,:,:)+VOC(:,:,:)+VBC(:,:,:))
      eps3(:,:,:)=CMPLX(eps2(:,:,:)*(eps1(:,:,:)+2*eps2(:,:,:)+2*f1(:,:,:)*(eps1(:,:,:)-eps2(:,:,:)))/&
-                      (eps1(:,:,:)+2*eps2(:,:,:)-f1(:,:,:)*(eps1(:,:,:)-eps2(:,:,:))))
-     Req(:,:,:,JWVL)=sqrt(CMPLX(eps3(:,:,:)))
+                      (eps1(:,:,:)+2*eps2(:,:,:)-f1(:,:,:)*(eps1(:,:,:)-eps2(:,:,:))),kind=kind(eps3(1,1,1)))
+     Req(:,:,:,JWVL)=sqrt(CMPLX(eps3(:,:,:),kind=kind(eps3(1,1,1))))
      ENDWHERE
 
      ENDDO   
@@ -254,8 +256,8 @@
                          +ZMASS(:,:,:,8,JMDE)+ZMASS(:,:,:,9,JMDE)+ZMASS(:,:,:,10,JMDE)+ZMASS(:,:,:,11,JMDE)&
                          +ZMASS(:,:,:,12,JMDE)+ZMASS(:,:,:,13,JMDE)+ZMASS(:,:,:,14,JMDE)+ZMASS(:,:,:,15,JMDE)&
                          +ZMASS(:,:,:,16,JMDE)    
-     PII(:,:,:,:) = aimag(CMPLX(Req(:,:,:,:))) 
-     PIR(:,:,:,:) = real(CMPLX(Req(:,:,:,:))) 
+     PII(:,:,:,:) = aimag(CMPLX(Req(:,:,:,:),kind=kind(PII(1,1,1,1))))
+     PIR(:,:,:,:) = real( CMPLX(Req(:,:,:,:),kind=kind(PIR(1,1,1,1))))
      !Get aerosol optical properties from look up tables
 
 
diff --git a/src/MNH/bhmie.f90 b/src/MNH/bhmie.f90
index 5e1d0e340da78c6e97a3b1ad2262b172155834c4..8aeb78f034168f8f402e5f1edb9e4c9f96cd92d6 100644
--- a/src/MNH/bhmie.f90
+++ b/src/MNH/bhmie.f90
@@ -63,7 +63,8 @@ END MODULE MODI_BHMIE
 !!                 portable.  In event that portable version is
 !!                 needed, use src/bhmie_f77.f
 !! 93/06/01 (BTD): Changed AMAX1 to generic function MAX
-!! 22/01/2019 (P.Wautelet): correct kind of complex datatype
+!  P. Wautelet 22/01/2019: correct kind of complex datatype
+!  P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision)
 !!***********************************************************************
 !
 !*       0.    DECLARATIONS
@@ -151,11 +152,11 @@ ZPSI0 = COS(PSIZE_PARAM)
 ZPSI1 = SIN(PSIZE_PARAM)
 ZCHI0 =-SIN(PSIZE_PARAM)
 ZCHI1 = COS(PSIZE_PARAM)
-ZZXI1 = CMPLX(ZPSI1,-ZCHI1)
+ZZXI1 = CMPLX(ZPSI1,-ZCHI1,kind=kind(ZZXI1))
 ZONE = -1.
 !
-ZZAN1 = CMPLX(0.0,0.0)
-ZZBN1 = CMPLX(0.0,0.0)
+ZZAN1 = CMPLX(0.0d0,0.0d0,kind=kind(ZZAN1))
+ZZBN1 = CMPLX(0.0d0,0.0d0,kind=kind(ZZBN1))
 DO J = 1,ISTOP
   ZEN = FLOAT(J)
   ZFN = (2.0*ZEN+1.0)/(ZEN*(ZEN+1.0))
@@ -167,7 +168,7 @@ DO J = 1,ISTOP
 !
   ZPSI = (2.0*ZEN-1.0)*ZPSI1/PSIZE_PARAM-ZPSI0
   ZCHI = (2.0*ZEN-1.0)*ZCHI1/PSIZE_PARAM-ZCHI0
-  ZZXI = CMPLX(ZPSI,-ZCHI)
+  ZZXI = CMPLX(ZPSI,-ZCHI,kind=kind(ZZXI))
 !
 !*** Compute AN and BN:
 !
@@ -206,7 +207,7 @@ DO J = 1,ISTOP
   ZPSI1 = ZPSI
   ZCHI0 = ZCHI1
   ZCHI1 = ZCHI
-  ZZXI1 = CMPLX(ZPSI1,-ZCHI1)
+  ZZXI1 = CMPLX(ZPSI1,-ZCHI1,kind=kind(ZZXI1))
 !
 !*** Compute pi_n for next value of n
 !    For each angle J, compute pi_n+1
diff --git a/src/MNH/bhmie_bhcoat.f90 b/src/MNH/bhmie_bhcoat.f90
index 6f315742c24959b912f69f0b1abe4b63e1cb555c..c235f2ab1bbdb94b9b7aa90b53c1f8207c08033a 100644
--- a/src/MNH/bhmie_bhcoat.f90
+++ b/src/MNH/bhmie_bhcoat.f90
@@ -1,6 +1,6 @@
-!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.
 !      ########################
        MODULE MODI_BHMIE_BHCOAT
@@ -46,6 +46,7 @@ END MODULE MODI_BHMIE_BHCOAT
 !!
 !! History:
 !! 92/11/24 (BTD) Explicit declaration of all variables
+!  P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision)
 !!***********************************************************************
 !
 !*       0.    DECLARATIONS
@@ -114,8 +115,8 @@ ZPSI0Y = COS(PSIZE_PARAM_COAT)
 ZPSI1Y = SIN(PSIZE_PARAM_COAT)
 ZCHI0Y =-SIN(PSIZE_PARAM_COAT)
 ZCHI1Y = COS(PSIZE_PARAM_COAT)
-ZZXI0Y = CMPLX(ZPSI0Y,-ZCHI0Y)
-ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y)
+ZZXI0Y = CMPLX(ZPSI0Y,-ZCHI0Y,kind=kind(ZZXI0Y))
+ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y,kind=kind(ZZXI1Y))
 !
 ZZCHI0Y2 =-SIN(ZZY2)
 ZZCHI1Y2 = COS(ZZY2)
@@ -130,7 +131,7 @@ DO JJ = 1,ISTOP
   ZEN = FLOAT(JJ)
   ZPSIY = (2.0*ZEN-1.)*ZPSI1Y/PSIZE_PARAM_COAT - ZPSI0Y
   ZCHIY = (2.0*ZEN-1.)*ZCHI1Y/PSIZE_PARAM_COAT - ZCHI0Y
-  ZZXIY = CMPLX(ZPSIY,-ZCHIY)
+  ZZXIY = CMPLX(ZPSIY,-ZCHIY,kind=kind(ZZXIY))
 !
   ZZD1Y2 = 1.0/(ZEN/ZZY2-ZZD0Y2) - ZEN/ZZY2
 !
@@ -179,7 +180,7 @@ DO JJ = 1,ISTOP
   ZPSI1Y = ZPSIY
   ZCHI0Y = ZCHI1Y
   ZCHI1Y = ZCHIY
-  ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y)
+  ZZXI1Y = CMPLX(ZPSI1Y,-ZCHI1Y,kind=kind(ZZXI1Y))
 !
   ZZCHI0X2 = ZZCHI1X2
   ZZCHI1X2 = ZZCHIX2
diff --git a/src/MNH/bl89.f90 b/src/MNH/bl89.f90
index 6835f449241cc58aed7328184012f2d70bd5036c..860afcf7985344f55f85f9b8efc2314ceb658774 100644
--- a/src/MNH/bl89.f90
+++ b/src/MNH/bl89.f90
@@ -81,6 +81,7 @@ USE MODD_CONF, ONLY: CPROGRAM
 USE MODD_CST
 USE MODD_CTURB
 USE MODD_PARAMETERS
+use modd_precision, only: MNHREAL
 !
 !
 IMPLICIT NONE
@@ -347,13 +348,8 @@ DO JK=IKTB,IKTE
 !*       7.  final mixing length
 !
   DO J1D=1,IIU*IJU
-#if (MNH_REAL == 8)
-    ZLWORK1=MAX(ZLMDN(J1D,JK),1.E-10)
-    ZLWORK2=MAX(ZLWORK(J1D),1.E-10)
-#else
-    ZLWORK1=MAX(ZLMDN(J1D,JK),1.D-10)
-    ZLWORK2=MAX(ZLWORK(J1D),1.D-10)
-#endif
+    ZLWORK1=MAX(ZLMDN(J1D,JK),1.E-10_MNHREAL)
+    ZLWORK2=MAX(ZLWORK(J1D),1.E-10_MNHREAL)
     ZPOTE = ZLWORK1 / ZLWORK2
     ZLWORK2=1.d0 + ZPOTE**(2./3.)
     ZLM(J1D,JK) = Z2SQRT2*ZLWORK1/(ZLWORK2*SQRT(ZLWORK2))
diff --git a/src/MNH/ch_ph_polyroot.f90 b/src/MNH/ch_ph_polyroot.f90
index c041941588f47f8666268289c14d087e71435b1e..1ae312322653d95160aca63c61bb343769fc91e3 100644
--- a/src/MNH/ch_ph_polyroot.f90
+++ b/src/MNH/ch_ph_polyroot.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2007-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.
@@ -34,6 +34,7 @@ END MODULE MODI_CH_PH_POLYROOT
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    26/03/07
+!  P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -66,10 +67,10 @@ ZZDEFLATED_COEF(:) = PPCOEF(:)
 !  First estimate of the roots
 !
 DO JJ=KORDER,1,-1
-  ZROOT = CMPLX(0.0,0.0)
+  ZROOT = CMPLX(0.0d0,0.0d0,kind=kind(ZROOT))
   CALL LAGUERRE(ZZDEFLATED_COEF, JJ, ZROOT, IITER)
   IF( ABS(AIMAG(ZROOT))<=2.0*ZEPS**(2*ABS(REAL(ZROOT))) ) THEN
-    ZROOT = CMPLX(REAL(ZROOT),0.0)
+    ZROOT = CMPLX(REAL(ZROOT,kind=kind(ZROOT)),0.0d0,kind=kind(ZROOT))
   END IF
   PPALL_ROOTS(JJ) = ZROOT
   ZB = ZZDEFLATED_COEF(JJ+1)
@@ -125,8 +126,8 @@ CONTAINS
     IITS = JITER
     ZZB  = PA(IM+1)
     ZERR = ABS(ZZB)
-    ZZD  = CMPLX(0.0,0.0)
-    ZZF  = CMPLX(0.0,0.0)
+    ZZD  = CMPLX(0.0d0,0.0d0,kind=kind(ZZD))
+    ZZF  = CMPLX(0.0d0,0.0d0,kind=kind(ZZF))
     ZABX = ABS(PX)
     DO JJ=IM,1,-1
       ZZF = PX*ZZF+ZZD
@@ -154,7 +155,7 @@ CONTAINS
       IF(MAX(ZABP,ZABM) > 0.0) THEN
         ZZDX = FLOAT(IM)/ZZGP
         ELSE
-        ZZDX = EXP(CMPLX(LOG(1.0+ZABX),FLOAT(JITER)))
+        ZZDX = EXP(CMPLX(LOG(1.0+ZABX),REAL(JITER,kind=kind(ZZDX)),kind=kind(ZZDX)))
       END IF 
     END IF
     ZZX1 = PX-ZZDX
diff --git a/src/MNH/ch_solve_ph.f90 b/src/MNH/ch_solve_ph.f90
index f9b994cdf4c09e497aaa3dc9d9e887cb9bbd09c0..5662675448f93e31415070fdd57f08e60b6e1b5e 100644
--- a/src/MNH/ch_solve_ph.f90
+++ b/src/MNH/ch_solve_ph.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2007-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 RCS information
-!-----------------------------------------------------------------
-! $Source: /home//MESONH/MNH-V4-6-5/src/SRC_CHIMAQ/ch_solve_ph.f90
-!-----------------------------------------------------------------
 !!    #######################
       MODULE MODI_CH_SOLVE_PH
 !!    #######################
@@ -63,6 +59,7 @@ END MODULE MODI_CH_SOLVE_PH
 !!    M. Leriche 16/11/07 add sulfuric acid
 !!    J.-P. Pinty 11/07/07 add CO3-- and SO3--
 !!    M. Leriche 05/06/08 add sum of ions
+!  P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision)
 !!
 !!    EXTERNAL
 !!    --------
@@ -217,9 +214,7 @@ ZCOEFS(:,2) = ZCOEFS(:,2) -2.0*(K11*K21*K3*KW*K22*(C1*K12+K12*C2))
 !
 ALLOCATE(ZZCOEFS(KLW,IORDER+1))
 ALLOCATE(ZZROOTS(KLW,IORDER))
-DO JJ=1,IORDER+1
-  ZZCOEFS(:,JJ) = CMPLX(ZCOEFS(:,JJ),0.0)
-END DO
+ZZCOEFS(:,:) = CMPLX(ZCOEFS(:,:),0.0d0,kind=kind(ZCOEFS(1,1)))
 GPOLISH=.TRUE.
 !
 DO JI = 1, KLW
diff --git a/src/MNH/clustering.f90 b/src/MNH/clustering.f90
index a42562bbb7640e36ba3f9d2f2cf0702691bbba1d..882de5a753ef9996e2b6b0aaed370d1d39bfd646 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/diag.f90 b/src/MNH/diag.f90
index b9feff89e8ae375a275254a369052cda6d5bded6..93b355bd51876b3a7c9ae170af87d4fb8d0bb0af 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -90,6 +90,7 @@
 !!  11/2017      (D. Ricard, P. Marquet) add diagnostics for THETAS 
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 11/02/2019: added missing use of MODI_CH_MONITOR_n
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -125,6 +126,7 @@ USE MODD_PARAM_LIMA,       ONLY: LLIMA_DIAG
 USE MODD_PARAM_MFSHALL_n
 USE MODD_PARAM_n
 USE MODD_PARAM_RAD_n
+use modd_precision,        only: LFIINT, MNHTIME
 USE MODD_PROFILER_n
 USE MODD_RADAR
 USE MODD_RADIATIONS_n
@@ -184,10 +186,10 @@ CHARACTER (LEN=4)  :: YTURB     ! initial flag to call to turbulence schemes
 CHARACTER (LEN=40) :: YFMT,YFMT2! format for cpu analysis printing
 INTEGER  :: IRESP               ! return code in FM routines
 INTEGER  :: ILUOUT0             ! Logical unit number for the output listing
-REAL*8,DIMENSION(2)     :: ZTIME0,ZTIME1,ZTIME2,ZRAD,ZDCONV,ZSHADOWS,ZGROUND, &
-                         ZTRACER,ZDRAG,ZTURB,ZMAFL,ZCHEM,ZTIME_BU ! CPU time 
-REAL*8,DIMENSION(2)     :: ZSTART,ZINIT,ZWRIT,ZBALL,ZPHYS,ZSURF,ZWRITS,ZTRAJ ! storing variables
-INTEGER(KIND=LFI_INT) :: INPRAR ! number of articles predicted  in the LFIFM file
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME0, ZTIME1, ZTIME2, ZRAD, ZDCONV, ZSHADOWS, ZGROUND, &
+                                    ZTRACER, ZDRAG, ZTURB, ZMAFL, ZCHEM, ZTIME_BU ! CPU times
+REAL(kind=MNHTIME), DIMENSION(2) :: ZSTART, ZINIT, ZWRIT, ZBALL, ZPHYS, ZSURF, ZWRITS, ZTRAJ ! storing variables
+INTEGER(KIND=LFIINT) :: INPRAR ! number of articles predicted  in the LFIFM file
 LOGICAL :: GCLOSE_OUT = .FALSE. ! conditional closure of the OUTPUT FM-file
 INTEGER :: ISTEPBAL   ! loop indice for balloons and aircraft
 INTEGER :: ILUNAM      ! Logical unit numbers for the namelist file
@@ -675,18 +677,18 @@ END IF
 !* call to physics monitor
 !
 GCLOSE_OUT=.TRUE.
-ZRAD=0.
-ZSHADOWS=0.
-ZDCONV=0.
-ZGROUND=0.
-ZTRACER=0.
-ZTURB=0.
-ZDRAG=0.
-ZMAFL=0.
-ZCHEM=0.
-XTIME_LES=0.
-XTIME_LES_BU_PROCESS=0.
-XTIME_BU_PROCESS=0.
+ZRAD                 = 0.0_MNHTIME
+ZSHADOWS             = 0.0_MNHTIME
+ZDCONV               = 0.0_MNHTIME
+ZGROUND              = 0.0_MNHTIME
+ZTRACER              = 0.0_MNHTIME
+ZTURB                = 0.0_MNHTIME
+ZDRAG                = 0.0_MNHTIME
+ZMAFL                = 0.0_MNHTIME
+ZCHEM                = 0.0_MNHTIME
+XTIME_LES            = 0.0_MNHTIME
+XTIME_LES_BU_PROCESS = 0.0_MNHTIME
+XTIME_BU_PROCESS     = 0.0_MNHTIME
 CALL PHYS_PARAM_n(1,TOUTDATAFILE,GCLOSE_OUT,                      &
                   ZRAD,ZSHADOWS,ZDCONV,ZGROUND,ZMAFL,ZDRAG, &
                   ZTURB,ZTRACER, ZTIME_BU,ZWETDEPAER,GMASKkids,GCLOUD_ONLY)
diff --git a/src/MNH/diagnos_les_mf.f90 b/src/MNH/diagnos_les_mf.f90
index 2f2cecafcc1a1a9b72075a2d2983090f00d4c35a..31fa13da74a1fc2c0444f1495a15a465801a4214 100644
--- a/src/MNH/diagnos_les_mf.f90
+++ b/src/MNH/diagnos_les_mf.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2009-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.
+!-----------------------------------------------------------------
 !    ###########################
      MODULE MODI_DIAGNOS_LES_MF
 !    ###########################
@@ -20,10 +21,10 @@ INTERFACE
 !
 !*                    1.1  Declaration of Arguments
 !
-!
+use modd_precision, only: MNHTIME
 !
 INTEGER,                INTENT(IN)  :: KIU, KJU, KKU ! 3D grid size
-REAL*8,DIMENSION(2),                   INTENT(OUT) :: PTIME_LES
+REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES
 REAL, DIMENSION(:,:),   INTENT(IN)  :: PTHL_UP,PRT_UP,PRV_UP,&
                                        PRC_UP,PRI_UP   ! updraft properties
 REAL, DIMENSION(:,:),   INTENT(IN)  :: PU_UP, PV_UP
@@ -74,20 +75,23 @@ END MODULE MODI_DIAGNOS_LES_MF
 !!     AUTHOR
 !!     ------
 !!     J.pergaud
-!!     V.Masson : Optimization 09/2010
+!
+! Modifications:
+!  V. Masson      09/2010: Optimization
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
 USE MODD_LES
+use modd_precision, only: MNHTIME
+!
+USE MODE_MNH_TIMING
 !
 USE MODI_LES_VER_INT
 USE MODI_LES_MEAN_ll
 USE MODI_SHUMAN
-!JUANZ
-USE MODE_MNH_TIMING
-!JUANZ
 !
 IMPLICIT NONE
 
@@ -95,7 +99,7 @@ IMPLICIT NONE
 !
 !
 INTEGER,                INTENT(IN)  :: KIU, KJU, KKU ! 3D grid size
-REAL*8,DIMENSION(2),                   INTENT(OUT) :: PTIME_LES
+REAL(kind=MNHTIME), DIMENSION(2), INTENT(OUT) :: PTIME_LES
 REAL, DIMENSION(:,:),   INTENT(IN)  :: PTHL_UP,PRT_UP,PRV_UP,&
                                        PRC_UP,PRI_UP   ! updraft properties
 REAL, DIMENSION(:,:),   INTENT(IN)  :: PU_UP, PV_UP
@@ -119,7 +123,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZTHLUP_MF_LES,ZRTUP_MF_LES, &
                                          ZWUP_MF_LES,ZFRACUP_MF_LES, &
                                          ZTHVUP_MF_LES,ZRVUP_MF_LES, &
                                          ZRIUP_MF_LES
-REAL*8,DIMENSION(2) :: ZTIME1, ZTIME2
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2
 !------------------------------------------------------------------------
 !
 
diff --git a/src/MNH/error_on_temperature.f90 b/src/MNH/error_on_temperature.f90
index 50b3d4d1865f438d30a1d75ddbc94f40eb6ef31c..bcdbb9aaeb8034aa6d4bf020fef48fdc7b097cc4 100644
--- a/src/MNH/error_on_temperature.f90
+++ b/src/MNH/error_on_temperature.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######spl
@@ -60,6 +60,7 @@ END MODULE MODI_ERROR_ON_TEMPERATURE
 !!                  26/08/97 (V. Masson) call to new linear vertical
 !!                                       interpolation routine
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -198,7 +199,7 @@ WRITE(ILUOUT0,*) ''
 WRITE(ILUOUT0,*) 'Temperature RMS between begin and end of PREP_REAL_CASE :'
 WRITE(ILUOUT0,*) ''
 DO JP=20,1,-1
-  WRITE(ILUOUT0,'(6Hlevel ,F5.0,7H hPa : ,F5.3,2H K)') ZPLEVELS(JP)/100.,ZTRMS(JP)
+  WRITE(ILUOUT0,'( "level", F5.0, " hPa : ", F5.3, " K")') ZPLEVELS(JP)/100.,ZTRMS(JP)
 END DO
 WRITE(ILUOUT0,*) ''
 !
diff --git a/src/MNH/extend_grid_parameter_mnh.f90 b/src/MNH/extend_grid_parameter_mnh.f90
index 09d06299039e54a684cf25c7ef023918ebc132f2..3d5fc09a13966b120e77dbb6db3755d0e3a69ed0 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/fft.f b/src/MNH/fft.f
index 92b071484c38a33cc41395b80eef96731cb1f94a..b0fa5e744f3412393c4203053420bed13b5b414d 100644
--- a/src/MNH/fft.f
+++ b/src/MNH/fft.f
@@ -1,12 +1,10 @@
-!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 RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 solver 2006/05/18 13:07:25
+! Modifications:
+!  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !-----------------------------------------------------------------
       SUBROUTINE SET99(TRIGS,IFAX,N)
       IMPLICIT LOGICAL (L)
@@ -55,7 +53,7 @@ C     LOOK FOR SIXES FIRST, STORE FACTORS IN DESCENDING ORDER
       IF (IFAC.GT.1) GO TO 20
 C
       WRITE(6,40) N
-   40 FORMAT(4H1N =,I4,27H - CONTAINS ILLEGAL FACTORS)
+   40 FORMAT('1N =', I4, ' - CONTAINS ILLEGAL FACTORS')
       RETURN
 C
 C     NOW REVERSE ORDER OF FACTORS
diff --git a/src/MNH/flash_geom_elec.f90 b/src/MNH/flash_geom_elec.f90
index 0cfaf8ddd18a7635f618bfc1efdd52aaf9b20835..d2a5b05e6522074b2500c6902501bc488b29c4e7 100644
--- a/src/MNH/flash_geom_elec.f90
+++ b/src/MNH/flash_geom_elec.f90
@@ -92,8 +92,9 @@ END MODULE MODI_FLASH_GEOM_ELEC_n
 !!      J.Escobar : 20/06/2018 : Correction of computation of global index I8VECT
 !!      J.Escobar : 10/12/2018 : // Correction , mpi_bcast CG & CG_POS parameter 
 !!                               & initialize INBLIGHT on all proc for filling/saving AREA* arrays
-!!      Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!!      Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics!!
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!  P. Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics!!
+!  P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard)
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
@@ -119,6 +120,7 @@ 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
@@ -852,9 +854,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)
@@ -1689,11 +1691,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)
 !
@@ -1959,7 +1961,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
 !
@@ -2192,7 +2194,7 @@ DO WHILE (IM .LE. IDELTA_IND .AND. ISTOP .NE. 1)
                  IF (IRANK_LL(IORDER_LL(ICHOICE)) .EQ. IPROC) THEN
                     JK = 1 +     (I8VECT_LL(ICHOICE)-1) / ( IJU_ll*IIU_ll ) 
                     JJ = 1 + (   (I8VECT_LL(ICHOICE)-1) - IJU_ll*IIU_ll*(JK-1) ) / IIU_ll  - IYOR +1
-                    JI = 1 + MOD((I8VECT_LL(ICHOICE)-1)                          , IIU_ll) - IXOR +1
+                    JI = 1 + MOD((I8VECT_LL(ICHOICE)-1)                          , int(IIU_ll,kind(I8VECT_LL(1)))) - IXOR +1
                     !print*,"OUT => I8VECT_LL(ICHOICE)=",I8VECT_ll(ICHOICE),JI,JJ,JK,ICHOICE
                     ZFLASH(JI,JJ,JK,IL) = 2.
                  END IF
@@ -2307,8 +2309,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)
@@ -2380,15 +2382,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)
@@ -2408,17 +2410,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/flat_invz.f90 b/src/MNH/flat_invz.f90
index e253264a9e229a59c4c9bf7f3caedfe1283b4167..b7b38a84621ae4f99a90aba6f437f0b71b6b6f78 100644
--- a/src/MNH/flat_invz.f90
+++ b/src/MNH/flat_invz.f90
@@ -1,12 +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 RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
-!-----------------------------------------------------------------
 !     ####################
 MODULE MODI_FLAT_INVZ
   !     ####################
@@ -130,13 +126,15 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
   !!                                points under the ground and out of the domain  
   !!      Modification   Lugato, Guivarch (June 1998) Parallelisation
   !!                     Escobar, Stein   (July 2000) optimisation
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
   !-------------------------------------------------------------------------------
   !
   !*       0.    DECLARATIONS
   !              ------------
   !
-  USE MODD_PARAMETERS
   USE MODD_CONF
+  USE MODD_PARAMETERS
+  use modd_precision,     only: MNHTIME
   !
   USE MODE_ll
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll
@@ -258,7 +256,7 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
   REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBAND_YT  ! array in Y slices distribution transpose
   REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZBAND_YRT ! array in Y slices distribution transpose
   !
-  REAL*8,DIMENSION(2) :: T0,T1
+  REAL(kind=MNHTIME), DIMENSION(2) :: ZT0,ZT1
   !JUAN Z_SPLITTING
   !
   !
@@ -481,13 +479,13 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
 !!$     print*,"IP=",IP," SIZE(ZBAND_SXP1_YP2_Z)=",SIZE(ZBAND_SXP1_YP2_Z,1),SIZE(ZBAND_SXP1_YP2_Z,2)
      ZBAND_SXP1_YP2_Z = ZY_B (IIBI:IIEI,IJBI:IJEI,:)
      ZBAND_SX_YP2_ZP1 = 0.0
-     CALL SECOND_MNH2(T0)
+     CALL SECOND_MNH2(ZT0)
 
      CALL REMAP_SXP1_YP2_Z_SX_YP2_ZP1_ll(ZBAND_SXP1_YP2_Z,ZBAND_SX_YP2_ZP1,IINFO_ll)
      !CALL REMAP_B_SX_YP2_ZP1_ll(ZBAND_B,ZBAND_SX_YP2_ZP1,IINFO_ll)
      !ZWORK_SX_YP2_ZP1 = ZWORK_SX_YP2_ZP1 - ZBAND_SX_YP2_ZP1
-     CALL SECOND_MNH2(T1)
-     TIMEZ%T_MAP_B_SX_YP2_ZP1  = TIMEZ%T_MAP_B_SX_YP2_ZP1 + T1 - T0
+     CALL SECOND_MNH2(ZT1)
+     TIMEZ%T_MAP_B_SX_YP2_ZP1  = TIMEZ%T_MAP_B_SX_YP2_ZP1 + ZT1 - ZT0
   END IF ! NZ_SPLITTING
   !
   !JUAN Z_SPLITTING
@@ -527,10 +525,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
              IIMAX,ILOT_SX_YP2_ZP1,-1 )
      END IF
      ZBAND_SXP2_Y_ZP1=0.0
-     CALL SECOND_MNH2(T0)
+     CALL SECOND_MNH2(ZT0)
      CALL REMAP_SX_YP2_ZP1_SXP2_Y_ZP1_ll(ZBAND_SX_YP2_ZP1,ZBAND_SXP2_Y_ZP1,IINFO_ll)
-     CALL SECOND_MNH2(T1)
-     TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1  = TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 + T1 - T0
+     CALL SECOND_MNH2(ZT1)
+     TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1  = TIMEZ%T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 + ZT1 - ZT0
   END IF ! NZ_SPLITTING
   !
   !JUAN Z_SPLITTING
@@ -612,10 +610,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
 !!$  IF (( IAND(NZ_SPLITTING,2) > 0 ) .AND. ( IAND(NZ_SPLITTING,16) > 0 ) ) THEN
 !!$     CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1T,ZBAND_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,II_SXP2_Y_ZP1,IK_SXP2_Y_ZP1)
 !!$     ZBAND_B  = 0.0 
-!!$     CALL SECOND_MNH2(T0)
+!!$     CALL SECOND_MNH2(ZT0)
 !!$     CALL REMAP_SXP2_Y_ZP1_B_ll(ZBAND_SXP2_Y_ZP1,ZBAND_B,IINFO_ll)
-!!$     CALL SECOND_MNH2(T1)
-!!$     TIMEZ.T_MAP_SXP2_Y_ZP1_B  = TIMEZ.T_MAP_SXP2_Y_ZP1_B + T1 - T0
+!!$     CALL SECOND_MNH2(ZT1)
+!!$     TIMEZ.T_MAP_SXP2_Y_ZP1_B  = TIMEZ.T_MAP_SXP2_Y_ZP1_B + ZT1 - ZT0
 !!$     !    
 !!$     !       singular matrix case : the last term is computed by setting the 
 !!$     !       average of the pressure field equal to zero.
@@ -646,10 +644,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
   IF  ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND. (  IAND(NZ_SPLITTING,8) > 0 )) THEN
      CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1T,ZBAND_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,II_SXP2_Y_ZP1,IK_SXP2_Y_ZP1)
      ZBAND_SXP2_YP1_Z  = 0.0 
-     CALL SECOND_MNH2(T0)
+     CALL SECOND_MNH2(ZT0)
      CALL REMAP_SXP2_Y_ZP1_SXP2_YP1_Z_ll(ZBAND_SXP2_Y_ZP1,ZBAND_SXP2_YP1_Z,IINFO_ll)
-     CALL SECOND_MNH2(T1)
-     TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z  = TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z + T1 - T0
+     CALL SECOND_MNH2(ZT1)
+     TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z  = TIMEZ%T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z + ZT1 - ZT0
      !    
      !       singular matrix case : the last term is computed by setting the 
      !       average of the pressure field equal to zero.
@@ -718,19 +716,19 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
 
 !!$  IF  ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND.(  IAND(NZ_SPLITTING,16) > 0 ) ) THEN
 !!$     !
-!!$     CALL SECOND_MNH2(T0)
+!!$     CALL SECOND_MNH2(ZT0)
 !!$     CALL REMAP_B_SXP2_Y_ZP1_ll(ZBAND_BR,ZBAND_SXP2_Y_ZP1R,IINFO_ll)
-!!$     CALL SECOND_MNH2(T1)
-!!$     TIMEZ.T_MAP_B_SXP2_Y_ZP1  = TIMEZ.T_MAP_B_SXP2_Y_ZP1 + T1 - T0
+!!$     CALL SECOND_MNH2(ZT1)
+!!$     TIMEZ.T_MAP_B_SXP2_Y_ZP1  = TIMEZ.T_MAP_B_SXP2_Y_ZP1 + ZT1 - ZT0
 !!$  ENDIF
   ! JUAN P1/P2 SPLITTING
   IF  ( ( IAND(NZ_SPLITTING,2) > 0 ) .AND. (  IAND(NZ_SPLITTING,8) > 0 ) ) THEN
      !
-     CALL SECOND_MNH2(T0)
+     CALL SECOND_MNH2(ZT0)
      CALL REMAP_SXP2_YP1_Z_SXP2_Y_ZP1_ll(ZBAND_SXP2_YP1_ZR,ZBAND_SXP2_Y_ZP1R,IINFO_ll)
      !TEST     CALL REMAP_SXP2_YP1_Z_SXP2_Y_ZP1_ll(ZBAND_SXP2_YP1_ZR,ZBAND_SXP2_Y_ZP1RBIS,IINFO_ll)
-     CALL SECOND_MNH2(T1)
-     TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1  = TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 + T1 - T0
+     CALL SECOND_MNH2(ZT1)
+     TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1  = TIMEZ%T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1 + ZT1 - ZT0
   ENDIF
   IF (  IAND(NZ_SPLITTING,2) > 0 )  THEN
      CALL FAST_TRANSPOSE(ZBAND_SXP2_Y_ZP1R,ZBAND_SXP2_Y_ZP1RT,II_SXP2_Y_ZP1,IJ_SXP2_Y_ZP1+2,IK_SXP2_Y_ZP1)
@@ -754,10 +752,10 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
      ! Transposition Y-> X
      !
      ZBAND_SX_YP2_ZP1=0
-     CALL SECOND_MNH2(T0)
+     CALL SECOND_MNH2(ZT0)
      CALL  REMAP_SXP2_Y_ZP1_SX_YP2_ZP1_ll(ZBAND_SXP2_Y_ZP1R,ZBAND_SX_YP2_ZP1,IINFO_ll)
-     CALL SECOND_MNH2(T1)
-     TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1  = TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 + T1 - T0
+     CALL SECOND_MNH2(ZT1)
+     TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1  = TIMEZ%T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 + ZT1 - ZT0
      !
      IF (HLBCX(1) == 'CYCL') THEN
         ! re-set (N+1) values with (2) values ( stored here to avoid to lost them )
@@ -787,11 +785,11 @@ SUBROUTINE FLAT_INVZ(HLBCX,HLBCY,PDXHATM,PDYHATM,PRHOM,PAF,PBF,PCF,   &
   !JUAN Z_SPLITTING
   !
   IF (  IAND(NZ_SPLITTING,2) > 0 ) THEN
-     CALL SECOND_MNH2(T0)
+     CALL SECOND_MNH2(ZT0)
      !CALL REMAP_SX_YP2_ZP1_B_ll(ZBAND_SX_YP2_ZP1,ZBAND_B,IINFO_ll)
      CALL REMAP_SX_YP2_ZP1_SXP1_YP2_Z_ll(ZBAND_SX_YP2_ZP1,ZBAND_SXP1_YP2_Z,IINFO_ll)
-     CALL SECOND_MNH2(T1)
-     TIMEZ%T_MAP_SX_YP2_ZP1_B  = TIMEZ%T_MAP_SX_YP2_ZP1_B + T1 - T0
+     CALL SECOND_MNH2(ZT1)
+     TIMEZ%T_MAP_SX_YP2_ZP1_B  = TIMEZ%T_MAP_SX_YP2_ZP1_B + ZT1 - ZT0
      IF (  IAND(NZ_SPLITTING,1) > 0 ) THEN
         ! for test save 2D value
         CALL GET_HALO(ZBAND_B)
diff --git a/src/MNH/ini_cst.f90 b/src/MNH/ini_cst.f90
index 0e422740d9b8d8c76f467a92a5bc04977456ed41..91526bed4b1eb67a892802e447ef6ca75e0b6428 100644
--- a/src/MNH/ini_cst.f90
+++ b/src/MNH/ini_cst.f90
@@ -71,6 +71,7 @@ END MODULE MODI_INI_CST
 !              ------------
 !
 USE MODD_CST
+use modd_precision, only: MNHREAL
 !
 IMPLICIT NONE
 !  
@@ -159,18 +160,20 @@ XMNH_EPSILON = EPSILON (XMNH_EPSILON )
 XMNH_HUGE    = HUGE    (XMNH_HUGE )
 XMNH_HUGE_12_LOG = LOG ( SQRT(XMNH_HUGE)  )
 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-XMNH_TINY      = 1.0e-80
-XEPS_DT        = 1.0e-5
-XRES_FLAT_CART = 1.0e-12
-XRES_OTHER     = 1.0e-9
-XRES_PREP      = 1.0e-8
-#else
+#if (MNH_REAL == 8)
+XMNH_TINY      = 1.0e-80_MNHREAL
+XEPS_DT        = 1.0e-5_MNHREAL
+XRES_FLAT_CART = 1.0e-12_MNHREAL
+XRES_OTHER     = 1.0e-9_MNHREAL
+XRES_PREP      = 1.0e-8_MNHREAL
+#elif (MNH_REAL == 4)
 XMNH_TINY      = TINY    (XMNH_TINY    )
-XEPS_DT        = 1.5e-4
-XRES_FLAT_CART = 1.0e-12
-XRES_OTHER     = 1.0e-7
-XRES_PREP      = 1.0e-4
+XEPS_DT        = 1.5e-4_MNHREAL
+XRES_FLAT_CART = 1.0e-12_MNHREAL
+XRES_OTHER     = 1.0e-7_MNHREAL
+XRES_PREP      = 1.0e-4_MNHREAL
+#else
+#error "Invalid MNH_REAL"
 #endif
 XMNH_TINY_12 = SQRT    (XMNH_TINY    )
 
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index e14a50045c919d1d5b6ce8ee87c4eebca97d96f3..62002a731c199d67d89665d367de2054bcd26f83 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -371,6 +371,7 @@ USE MODD_PASPOL_n
 USE MODD_DRAG_n
 USE MODD_BLOWSNOW
 USE MODD_BLOWSNOW_n
+use modd_precision, only: LFIINT
 !
 !
 USE MODI_INI_BUDGET
@@ -1674,9 +1675,9 @@ IF (KMI == 1) THEN
   DO IMI = 1 , NMODEL
     WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))
     WRITE(YNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000'
-    CALL IO_File_add2list(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE',  &
-                          HDIRNAME=CIO_DIR,                                         &
-                          KLFINPRAR=INT(50,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=NVERB, &
+    CALL IO_File_add2list(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE', &
+                          HDIRNAME=CIO_DIR,                                        &
+                          KLFINPRAR=INT(50,KIND=LFIINT),KLFITYPE=1,KLFIVERB=NVERB, &
                           TPDADFILE=LUNIT_MODEL(NDAD(IMI))%TDIAFILE )
   END DO
   !
diff --git a/src/MNH/modd_precision.f90 b/src/MNH/modd_precision.f90
new file mode 100644
index 0000000000000000000000000000000000000000..e302e46b96e79d9a950ebb5a1cf3f9f39db68547
--- /dev/null
+++ b/src/MNH/modd_precision.f90
@@ -0,0 +1,120 @@
+!MNH_LIC Copyright 2019-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.
+!-----------------------------------------------------------------
+! Author:
+!  P. Wautelet 08/03/2019
+! Modifications:
+!  P. Wautelet 22/03/2019: add MNHINT/REAL32/64_MPI, MNH2REAL32/64_MPI + more public parameters
+!  P. Wautelet 27/03/2019: add MNHTIME and MNHTIME_MPI
+!-----------------------------------------------------------------
+module modd_precision
+
+use modd_mpif
+
+#ifdef MNH_IOCDF4
+use NETCDF, only: NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT64
+#endif
+
+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
+public :: MNHTIME, MNHTIME_MPI
+
+public :: LFIINT
+
+#ifdef MNH_IOCDF4
+public :: CDFINT, MNHINT_NF90, MNHREAL_NF90
+#endif
+
+
+integer, parameter :: MNHINT32 = selected_int_kind( r = 9 )
+integer, parameter :: MNHINT64 = selected_int_kind( r = 18 )
+
+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 = MNHINT32_MPI
+#elif ( MNH_INT == 8 )
+integer, parameter :: MNHINT     = MNHINT64
+integer, parameter :: MNHINT_MPI = MNHINT64_MPI
+#else
+#error "Invalid MNH_INT"
+#endif
+
+#if ( MNH_REAL == 4 )
+integer, parameter :: MNHREAL      = MNHREAL32
+integer, parameter :: MNHREAL_MPI  = MNHREAL32_MPI
+integer, parameter :: MNH2REAL_MPI = MNH2REAL32_MPI
+#elif ( MNH_REAL == 8 )
+integer, parameter :: MNHREAL      = MNHREAL64
+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
+#error "No MNH2REAL_MPI for MNH_REAL=16"
+#else
+#error "Invalid MNH_REAL"
+#endif
+
+integer, parameter :: MNHTIME     = MNHREAL64
+integer, parameter :: MNHTIME_MPI = MNHREAL64_MPI
+
+
+! Kinds for LFI
+#if ( LFI_INT == 4 )
+integer, parameter :: LFIINT = MNHINT32
+#elif ( LFI_INT == 8 )
+integer, parameter :: LFIINT = MNHINT64
+#else
+#error "Invalid LFI_INT"
+#endif
+
+
+#ifdef MNH_IOCDF4
+! Kinds for netCDF
+integer, parameter :: CDFINT = selected_int_kind( r = 9 )
+
+#if (MNH_INT == 4)
+integer, parameter :: MNHINT_NF90 = NF90_INT
+#elif (MNH_INT == 8)
+integer, parameter :: MNHINT_NF90 = NF90_INT64
+#else
+#error "Invalid MNH_INT"
+#endif
+
+#if (MNH_REAL == 4)
+integer, parameter :: MNHREAL_NF90 = NF90_FLOAT
+#elif (MNH_REAL == 8)
+integer, parameter :: MNHREAL_NF90 = NF90_DOUBLE
+#else
+#error "Invalid MNH_REAL"
+#endif
+#endif
+
+end module modd_precision
diff --git a/src/MNH/modd_sub_modeln.f90 b/src/MNH/modd_sub_modeln.f90
index 48bfede318410cd24a6a6431857a57c50da89ed0..b6e364b2222e189bce38a1b8f00314c1b815b2bc 100644
--- a/src/MNH/modd_sub_modeln.f90
+++ b/src/MNH/modd_sub_modeln.f90
@@ -4,17 +4,19 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  J. Escobar : 18/06/2018 , bug compile R*4 => real*8 pointer XT_VISC  
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  J. Escobar  18/06/2018: bug compile R*4 => real*8 pointer XT_VISC
 !  P. Wautelet 08/02/2019: add missing NULL association for pointers
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
 !-----------------------------------------------------------------
 !     #################
       MODULE MODD_SUB_MODEL_n
 !     #################
 !
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll
-!
-USE MODD_PARAMETERS, ONLY: JPMODELMAX
+USE MODD_ARGSLIST_ll, ONLY: LIST_ll, HALO2LIST_ll
+USE MODD_PARAMETERS,  ONLY: JPMODELMAX
+use modd_precision,   only: MNHTIME
+
 IMPLICIT NONE
 
 TYPE SUB_MODEL_t
@@ -32,18 +34,18 @@ TYPE SUB_MODEL_t
   TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll => NULL()
   TYPE(HALO2LIST_ll), POINTER :: TZHALO2SC_ll => NULL()
   INTEGER :: IBAK, IOUT          ! number of the backup / output
-  REAL*8,DIMENSION(2)    :: XT_START
-  REAL*8,DIMENSION(2)    :: XT_STORE,XT_BOUND,XT_GUESS
-  REAL*8,DIMENSION(2)    :: XT_ADV,XT_SOURCES,XT_DRAG
-  REAL*8,DIMENSION(2)    :: XT_ADVUVW,XT_GRAV,XT_VISC
-  REAL*8,DIMENSION(2)    :: XT_DIFF,XT_RELAX,XT_PARAM,XT_SPECTRA
-  REAL*8,DIMENSION(2)    :: XT_HALO,XT_RAD_BOUND,XT_PRESS
-  REAL*8,DIMENSION(2)    :: XT_CLOUD,XT_STEP_SWA,XT_STEP_MISC
-  REAL*8,DIMENSION(2)    :: XT_ELEC                          
-  REAL*8,DIMENSION(2)    :: XT_COUPL,XT_1WAY,XT_STEP_BUD
-  REAL*8,DIMENSION(2)    :: XT_RAD,XT_DCONV,XT_GROUND,XT_TRACER,XT_MAFL
-  REAL*8,DIMENSION(2)    :: XT_TURB,XT_2WAY,XT_SHADOWS
-  REAL*8,DIMENSION(2)    :: XT_FORCING,XT_NUDGING,XT_CHEM
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_START
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_STORE, XT_BOUND, XT_GUESS
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_ADV, XT_SOURCES, XT_DRAG
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_ADVUVW, XT_GRAV, XT_VISC
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_DIFF, XT_RELAX, XT_PARAM, XT_SPECTRA
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_HALO, XT_RAD_BOUND, XT_PRESS
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_CLOUD, XT_STEP_SWA, XT_STEP_MISC
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_ELEC
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_COUPL, XT_1WAY, XT_STEP_BUD
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_RAD, XT_DCONV, XT_GROUND, XT_TRACER, XT_MAFL
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_TURB, XT_2WAY, XT_SHADOWS
+  REAL(kind=MNHTIME), DIMENSION(2) :: XT_FORCING, XT_NUDGING, XT_CHEM
 
   REAL, DIMENSION(:,:,:), POINTER :: ZWT_ACT_NUC=>NULL()
                              ! Vertical motion used for ACTivation/NUCleation
@@ -60,19 +62,19 @@ TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll=>NULL(), TZLSHALO2_ll=>NULL()
 TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll=>NULL(), TZHALO2MT_ll=>NULL(), TZHALO2SC_ll=>NULL()
 INTEGER, POINTER :: IBAK=>NULL()
 INTEGER, POINTER :: IOUT=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_START=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_STORE=>NULL(),XT_BOUND=>NULL(),XT_GUESS=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_ADV=>NULL(),XT_SOURCES=>NULL(),XT_DRAG=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_ADVUVW=>NULL(),XT_GRAV=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_DIFF=>NULL(),XT_RELAX=>NULL(),XT_PARAM=>NULL(),XT_SPECTRA=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_HALO=>NULL(),XT_RAD_BOUND=>NULL(),XT_PRESS=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_VISC=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_CLOUD=>NULL(),XT_STEP_SWA=>NULL(),XT_STEP_MISC=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_ELEC=>NULL(),XT_SHADOWS=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_COUPL=>NULL(),XT_1WAY=>NULL(),XT_STEP_BUD=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_RAD=>NULL(),XT_DCONV=>NULL(),XT_GROUND=>NULL(),XT_MAFL=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_TURB=>NULL(),XT_2WAY=>NULL(),XT_TRACER=>NULL()
-REAL*8,DIMENSION(:), POINTER :: XT_FORCING=>NULL(),XT_NUDGING=>NULL(),XT_CHEM=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_START=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_STORE=>NULL(), XT_BOUND=>NULL(), XT_GUESS=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ADV=>NULL(), XT_SOURCES=>NULL(), XT_DRAG=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ADVUVW=>NULL(), XT_GRAV=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_DIFF=>NULL(), XT_RELAX=>NULL(), XT_PARAM=>NULL(), XT_SPECTRA=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_HALO=>NULL(), XT_RAD_BOUND=>NULL(), XT_PRESS=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_VISC=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_CLOUD=>NULL(), XT_STEP_SWA=>NULL(), XT_STEP_MISC=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_ELEC=>NULL(), XT_SHADOWS=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_COUPL=>NULL(), XT_1WAY=>NULL(), XT_STEP_BUD=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_RAD=>NULL(), XT_DCONV=>NULL(), XT_GROUND=>NULL(), XT_MAFL=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_TURB=>NULL(), XT_2WAY=>NULL(), XT_TRACER=>NULL()
+REAL(kind=MNHTIME), DIMENSION(:), POINTER :: XT_FORCING=>NULL(), XT_NUDGING=>NULL(), XT_CHEM=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: ZWT_ACT_NUC=>NULL()
 LOGICAL, DIMENSION(:,:), POINTER :: GMASKkids=>NULL()
 LOGICAL, POINTER :: GCLOSE_OUT=>NULL()
diff --git a/src/MNH/modd_timez.f90 b/src/MNH/modd_timez.f90
index 9c9235ed4da7b7779e6ac6cbd3007a64e2b62dff..3c44998639d52ba7647196195ecb8080f404c027 100644
--- a/src/MNH/modd_timez.f90
+++ b/src/MNH/modd_timez.f90
@@ -5,51 +5,54 @@
 !-----------------------------------------------------------------
 ! Modifications
 !  P. Wautelet 08/02/2019: add missing NULL association for pointers
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
+!-----------------------------------------------------------------
 MODULE MODD_TIMEZ
 
   USE MODD_PARAMETERS, ONLY: JPMODELMAX
+  use modd_precision,  only: MNHTIME
 
   TYPE SUB_TIMEZ_T
-     REAL*8,DIMENSION(2) :: T_MAP_B_SX_YP2_ZP1  = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1 = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_B  = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_B_SXP2_Y_ZP1  = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1 = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_B  = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1  = 0.0
-          
-     REAL*8,DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SX_YP2_ZP1 = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP1_YP2_Z  = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SXP2_Y_ZP1  = 0.0
-     REAL*8,DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP1_YP2_Z  = 0.0
-          
-     REAL*8,DIMENSION(2) :: T_WRIT3D_RECV = 0.0
-     REAL*8,DIMENSION(2) :: T_WRIT3D_SEND = 0.0
-     REAL*8,DIMENSION(2) :: T_WRIT3D_WRIT = 0.0
-     REAL*8,DIMENSION(2) :: T_WRIT3D_WAIT = 0.0
-     REAL*8,DIMENSION(2) :: T_WRIT3D_ALL  = 0.0
-
-     REAL*8,DIMENSION(2) :: T_WRIT2D_GATH = 0.0
-     REAL*8,DIMENSION(2) :: T_WRIT2D_WRIT = 0.0
-     REAL*8,DIMENSION(2) :: T_WRIT2D_ALL  = 0.0
-
-     REAL*8,DIMENSION(2) :: T_READ3D_RECV = 0.0
-     REAL*8,DIMENSION(2) :: T_READ3D_SEND = 0.0
-     REAL*8,DIMENSION(2) :: T_READ3D_READ = 0.0
-     REAL*8,DIMENSION(2) :: T_READ3D_WAIT = 0.0
-     REAL*8,DIMENSION(2) :: T_READ3D_ALL  = 0.0
-     
-     REAL*8,DIMENSION(2) :: T_READ2D_SCAT = 0.0
-     REAL*8,DIMENSION(2) :: T_READ2D_READ = 0.0
-     REAL*8,DIMENSION(2) :: T_READ2D_ALL  = 0.0
-
-     REAL*8,DIMENSION(2) :: T_READLB_RECV = 0.0
-     REAL*8,DIMENSION(2) :: T_READLB_SEND = 0.0
-     REAL*8,DIMENSION(2) :: T_READLB_READ = 0.0
-     REAL*8,DIMENSION(2) :: T_READLB_WAIT = 0.0
-     REAL*8,DIMENSION(2) :: T_READLB_ALL  = 0.0
-     
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_B_SX_YP2_ZP1           = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP2_Y_ZP1  = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_B           = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_B_SXP2_Y_ZP1           = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SX_YP2_ZP1  = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_B           = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP2_YP1_Z  = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_YP1_Z_SXP2_Y_ZP1  = 0.0_MNHTIME
+
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SX_YP2_ZP1  = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP2_Y_ZP1_SXP1_YP2_Z  = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SXP1_YP2_Z_SXP2_Y_ZP1  = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_MAP_SX_YP2_ZP1_SXP1_YP2_Z  = 0.0_MNHTIME
+
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_RECV = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_SEND = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_WRIT = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_WAIT = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT3D_ALL  = 0.0_MNHTIME
+
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_GATH = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_WRIT = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_WRIT2D_ALL  = 0.0_MNHTIME
+
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_RECV = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_SEND = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_READ = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_WAIT = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ3D_ALL  = 0.0_MNHTIME
+
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_SCAT = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_READ = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READ2D_ALL  = 0.0_MNHTIME
+
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_RECV = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_SEND = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_READ = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_WAIT = 0.0_MNHTIME
+     REAL(kind=MNHTIME), DIMENSION(2) :: T_READLB_ALL  = 0.0_MNHTIME
+
  END TYPE SUB_TIMEZ_T
 
 TYPE(SUB_TIMEZ_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: SUB_TIMEZN
diff --git a/src/MNH/mode_RBK90_Integrator.f90 b/src/MNH/mode_RBK90_Integrator.f90
index f1e50b243763abbc3ca480862584fc761c81ee29..ae11720e3cd8fdc1ce7ab60d602dd20a5e4ce0d5 100644
--- a/src/MNH/mode_RBK90_Integrator.f90
+++ b/src/MNH/mode_RBK90_Integrator.f90
@@ -61,6 +61,7 @@ MODULE MODE_RBK90_Integrator
   USE MODD_RBK90_JacobianSP_n, ONLY: LU_DIM_SPECIES
   USE MODD_RBK90_Parameters_n, ONLY: NVAR
   USE MODD_RBK90_Global_n,     ONLY: STEPMIN
+  use modd_precision,          only: MNHREAL
   IMPLICIT NONE
   PUBLIC
   SAVE
@@ -737,11 +738,7 @@ Stage: DO istage = 1, ros_S
    END DO
    Err  = SQRT(Err/N)
 
-#if (MNH_REAL == 8)
-   ros_ErrorNorm = MAX(Err,1.0e-10)
-#else
-   ros_ErrorNorm = MAX(Err,1.0d-10)
-#endif
+   ros_ErrorNorm = MAX(Err,1.0e-10_MNHREAL)
 
   END FUNCTION ros_ErrorNorm
 
diff --git a/src/MNH/mode_RBK90_linearalgebra.f90 b/src/MNH/mode_RBK90_linearalgebra.f90
index ac5dc5fa499a92341e9b5cc42b1a92852f9d1eb7..8fd23aa139e89b8c906915ccda98c36e80e102e0 100644
--- a/src/MNH/mode_RBK90_linearalgebra.f90
+++ b/src/MNH/mode_RBK90_linearalgebra.f90
@@ -1,10 +1,11 @@
-!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 for details. version 1.
-
-!******************************************************************
-
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 22/02/2019: DOUBLE COMPLEX -> COMPLEX(kind(0.0d0)) to respect Fortran standard
+!-----------------------------------------------------------------
 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ! 
 ! Linear Algebra Data and Routines File
@@ -97,7 +98,7 @@ SUBROUTINE KppDecompCmplx( JVS, IER )
   USE MODD_RBK90_JacobianSP_n
 
       INTEGER        :: IER
-      DOUBLE COMPLEX :: JVS(LU_NONZERO), W(NVAR), a
+      COMPLEX (KIND(0.0D0)) :: JVS(LU_NONZERO), W(NVAR), a
       REAL  :: b = 0.0
       INTEGER        :: k, kk, j, jj
 
@@ -243,7 +244,7 @@ SUBROUTINE KppSolveCmplx( JVS, X )
   USE MODD_RBK90_JacobianSP_n
 
       INTEGER        :: i, j
-      DOUBLE COMPLEX :: JVS(LU_NONZERO), X(NVAR), sum
+      COMPLEX (KIND(0.0D0)) :: JVS(LU_NONZERO), X(NVAR), sum
 
       DO i=1,NVAR
          DO j = LU_CROW(i), LU_DIAG(i)-1 
@@ -305,7 +306,7 @@ SUBROUTINE KppSolveTRCmplx( JVS, X )
   USE MODD_RBK90_JacobianSP_n
 
       INTEGER        :: i, j
-      DOUBLE COMPLEX :: JVS(LU_NONZERO), X(NVAR)
+      COMPLEX (KIND(0.0D0)) :: JVS(LU_NONZERO), X(NVAR)
 
       DO i=1,NVAR
         X(i) = X(i)/JVS(LU_DIAG(i))
diff --git a/src/MNH/mode_datetime.f90 b/src/MNH/mode_datetime.f90
index a09557b7873d37e4cccc9963726b9041bde6b123..2684e11d48a4426dea6321524ba93edc6ebe080a 100644
--- a/src/MNH/mode_datetime.f90
+++ b/src/MNH/mode_datetime.f90
@@ -1,8 +1,11 @@
-!MNH_LIC Copyright 2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2018-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.
 !-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 22/02/2019: use MOD intrinsics with same kind for all arguments (to respect Fortran standard)
+!-----------------------------------------------------------------
 MODULE MODE_DATETIME
 !
 USE MODD_TYPE_DATE
@@ -57,7 +60,7 @@ IDAY_CUR   = TZDATE%TDATE%DAY
 ZSEC = TZDATE%TIME
 !
 !Compute number of days since beginning of the year
-IF ( ((MOD(IYEAR_CUR,4)==0).AND.(MOD(IYEAR_CUR,100)/=0)) .OR. (MOD(IYEAR_CUR,400)==0)) ILEAPS=1
+IF ( ((MOD(IYEAR_CUR,4_8)==0).AND.(MOD(IYEAR_CUR,100_8)/=0)) .OR. (MOD(IYEAR_CUR,400_8)==0)) ILEAPS=1
 SELECT CASE(IMONTH_CUR)
   CASE(1)
     IDAYS = IDAY_CUR-1
diff --git a/src/MNH/mode_elec_ll.f90 b/src/MNH/mode_elec_ll.f90
index dc4f100ef866a173dba2e57f4fbd8596b477c9aa..0f613fff81e6cdac7597973e73827849d8cf4fd6 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/mode_mnh_timing.f90 b/src/MNH/mode_mnh_timing.f90
index 35d7c559ad4193581e19a2e885659d9287214e37..23c09916f99873b55b4e47dba0c2a45538611ad8 100644
--- a/src/MNH/mode_mnh_timing.f90
+++ b/src/MNH/mode_mnh_timing.f90
@@ -2,42 +2,56 @@
 !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_MNH_TIMING
 !
-! Modification :
-! J.ESCOBAR 13/11/2008 : change (2) in (:) for bug in IBM-SP6 compiler
-! J.Escobar 1/09/2011  : reduce 'timing' format
-! J.Escobar 12/02/2013 : tribulle to slow on large BG partition , inhib it by a early return in the code 
-! Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!
+! Modifications:
+!  J. escobar  13/11/2008: change (2) in (:) for bug in IBM-SP6 compiler
+!  J. Escobar  01/09/2011: reduce 'timing' format
+!  J. Escobar  12/02/2013: triabulle too slow on large BG partition, inhib it by a early return in the code
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!  P. Wautelet 22/03/2019: use MNHREAL64 and MNHREAL64_MPI + typo corrections
+!  P. Wautelet 27/03/2019: use MNHTIME and MNHTIME_MPI instead of MNHREAL64 and MNHREAL64_MPI
+!  P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing
+!------------------------------------------------------------------------
+
+implicit none
 
-INTEGER     :: NLUOUT_TIMING
+private
+
+public :: SECOND_MNH2, SET_ILUOUT_TIMING, TIME_HEADER_ll, TIME_STAT_ll
+public :: TIMING_SEPARATOR, TIMING_LEGEND
+
+INTEGER :: NLUOUT_TIMING
 
 CONTAINS
 
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+subroutine second_mnh2(xt)
 
-SUBROUTINE SECOND_MNH2(XT)
-!
 USE modd_mpif
-!
-REAL*8,DIMENSION(2)           :: XT
-!
-CALL CPU_TIME(XT(1))
-XT(2) = MPI_Wtime()
-END SUBROUTINE SECOND_MNH2
+use modd_precision, only: MNHTIME
+
+real(kind=MNHTIME),dimension(2) :: xt
 
+call cpu_time( xt(1) )
+xt(2) = MPI_WTIME()
+
+end subroutine second_mnh2
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+subroutine set_iluout_timing(tfile)
 
-!JUAN
-      SUBROUTINE SET_ILUOUT_TIMING(KLUOUT)
-        IMPLICIT NONE
-        INTEGER, INTENT(IN) :: KLUOUT
-        NLUOUT_TIMING = KLUOUT
-      END SUBROUTINE SET_ILUOUT_TIMING
+use modd_io, only: tfiledata
+
+implicit none
 
+type(tfiledata), intent(in) :: tfile
+
+nluout_timing = tfile%nlu
+
+end subroutine set_iluout_timing
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
@@ -53,7 +67,7 @@ END SUBROUTINE SECOND_MNH2
       
       SUBROUTINE TIMING_LEGEND()
         CALL  TIMING_SEPARATOR('-')
-        WRITE(NLUOUT_TIMING,FMT="( '|     CPUTIM/ELAPSE                     |&
+        WRITE(NLUOUT_TIMING,FMT="( '|     CPUTIME/ELAPSED                   |&
          &|   SUM(PROC)   |MEAN(PROC)| MIN(PROC | MAX(PROC)| PERCENT %|')" ) 
         CALL  TIMING_SEPARATOR('-')
       END SUBROUTINE TIMING_LEGEND
@@ -84,33 +98,30 @@ END SUBROUTINE SECOND_MNH2
 !*       0.    DECLARATIONS
 !
   USE MODD_MPIF
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION, NPROC, IP
-  !JUANZ
-  USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
-  !JUANZ
+  use modd_precision, only: MNHTIME, MNHTIME_MPI
+  USE MODD_VAR_ll,    ONLY: IP, NMNH_COMM_WORLD, NPROC
   !
   IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 ! 
-  REAL*8,DIMENSION(:), INTENT(IN)         :: PRES ! (1)=CPU & (2)=ELAPSE Proccessors Timing
-!
-  REAL*8,DIMENSION(:), INTENT(INOUT)      :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSE) Timing
-!
-  CHARACTER(len=*),  INTENT(IN),OPTIONAL :: HPRINT
-  CHARACTER       ,  INTENT(IN),OPTIONAL :: HSEP
-  CHARACTER(len=*),  INTENT(IN),OPTIONAL :: HFULL
+  REAL(kind=MNHTIME), DIMENSION(:), INTENT(IN)    :: PRES ! (1)=CPU & (2)=ELAPSED Processes Timing
+  REAL(kind=MNHTIME), DIMENSION(:), INTENT(INOUT) :: PSUM ! (1)=SUM(CPU) & (2)=SUM(ELAPSED) Timing
+  CHARACTER(len=*), OPTIONAL,       INTENT(IN)    :: HPRINT
+  CHARACTER       , OPTIONAL,       INTENT(IN)    :: HSEP
+  CHARACTER(len=*), OPTIONAL,       INTENT(IN)    :: HFULL
 !
 !*       0.2   Declarations of local variables :
 !
   INTEGER,PARAMETER         :: NSTAT=5
-  REAL*8,DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Purcent(1)
+
   INTEGER                   :: INFO,IROOT,JP
   CHARACTER(len=30)         :: VIDE = ""
-  CHARACTER(len=30)        :: FILE = ""
+  CHARACTER(len=30)         :: FILE = ""
   INTEGER                   :: IC
 
-  REAL*8,DIMENSION(2,NPROC)   :: ZSTAT_ALL 
+  REAL(kind=MNHTIME), DIMENSION(2,NSTAT) :: ZSTAT ! (1)=Sum(proc),(2)=Sum/Nproc,(3)=Min(proc),(4)=Max(proc),(5)=Percent(1)
+  REAL(kind=MNHTIME), DIMENSION(2,NPROC) :: ZSTAT_ALL
   INTEGER, DIMENSION(NPROC) :: IND
   INTEGER :: ILU
 !
@@ -120,15 +131,15 @@ END SUBROUTINE SECOND_MNH2
 !           ------------------------------
 INFO = -1
 ! 1.1 Sum(Proc)
-  CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MPI_REAL8, &
+  CALL MPI_ALLREDUCE(PRES, ZSTAT(:,1), 2, MNHTIME_MPI, &
                      MPI_SUM, NMNH_COMM_WORLD, INFO)
 ! 1.2 Sum/Proc
   ZSTAT(:,2) = ZSTAT(:,1 ) / NPROC
 ! 1.3 Min(Proc)
-  CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MPI_REAL8, &
+  CALL MPI_ALLREDUCE(PRES, ZSTAT(:,3), 2, MNHTIME_MPI, &
                      MPI_MIN, NMNH_COMM_WORLD, INFO)
 ! 1.4 Max(Proc)
-  CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MPI_REAL8, &
+  CALL MPI_ALLREDUCE(PRES, ZSTAT(:,4), 2, MNHTIME_MPI, &
                      MPI_MAX, NMNH_COMM_WORLD, INFO)
 
 
@@ -138,8 +149,8 @@ INFO = -1
   !
 
   ELSEIF ( ZSTAT(1,1) > 0.0 ) THEN
-   ! use Psum , for print stat & pourcent
-   ! Purcent
+   ! use Psum , for print stat & percent
+   ! Percent
      WHERE ( PSUM /= 0.0 )
         ZSTAT(:,5) = 100.0 * ZSTAT(:,1) / PSUM(:)
      ELSEWHERE
@@ -148,14 +159,14 @@ INFO = -1
    ! print stat
    !
    IF (PRESENT(HSEP)) CALL  TIMING_SEPARATOR(HSEP)
-   WRITE(NLUOUT_TIMING,FMT= "('|',A30,'| CPUTIM ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(1,:)
-   WRITE(NLUOUT_TIMING,FMT= "('|',A30,'| ELAPSE ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(2,:)
+   WRITE(NLUOUT_TIMING,FMT= "('|',A29,'| CPUTIME ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(1,:)
+   WRITE(NLUOUT_TIMING,FMT= "('|',A29,'| ELAPSED ||',F15.3,'|',4(F10.3,'|'),F7.3,'|')" ) HPRINT//VIDE,ZSTAT(2,:)
 
    IF (PRESENT(HFULL)) THEN
       ! gather all data
       !CALL  TIMING_SEPARATOR(HSEP)
       IROOT = 0
-      CALL MPI_GATHER(PRES(:),2,MPI_REAL8,ZSTAT_ALL(:,1),2,MPI_REAL8,&
+      CALL MPI_GATHER(PRES(:),2,MNHTIME_MPI,ZSTAT_ALL(:,1),2,MNHTIME_MPI,&
            IROOT,NMNH_COMM_WORLD, INFO)
       IF (IP.EQ.1) THEN
          FILE = trim(adjustl(HPRINT))
@@ -188,17 +199,17 @@ INFO = -1
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
 
 subroutine triabulle(vec,ind)
-implicit none
-
-real*8   , intent(inout)   :: vec(:)
-integer, intent(out)  :: ind(:)
+use modd_precision, only: MNHTIME
 
+implicit none
 
-integer               :: n 
+real(kind=MNHTIME), dimension(:), intent(inout) :: vec
+integer,            dimension(:), intent(out)   :: ind
 
 logical :: a
 integer :: i
 integer :: mem
+integer :: n
 
 n = size(vec)
 a = .true.
@@ -207,7 +218,7 @@ do i=1,n
 enddo
 
 return
-!JUAN TO SLOW ON BG !!!
+!JUAN TOO SLOW ON BG !!!
 
 do while (a)
    a=.false.
diff --git a/src/MNH/mode_tmat.f90 b/src/MNH/mode_tmat.f90
index 361bc6f9b9f99526b751e36c782776b4bb06f202..9de6651339a1a9b187f10cde8f36629bf357b551 100644
--- a/src/MNH/mode_tmat.f90
+++ b/src/MNH/mode_tmat.f90
@@ -15,7 +15,8 @@
 !
 !     Modif par Olivier Caumont (04/2008) pour interfa�age avec diagnostic 
 !     radar de M�so-NH.
-!     P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler)
+!  P. Wautelet 22/01/2019: replace double precision declarations by real(kind(0.0d0)) (to allow compilation by NAG compiler)
+!  P. Wautelet 22/02/2019: add kind parameter for CMPLX intrinsics (if not it default to single precision)
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !****************************************************************************
@@ -1385,8 +1386,8 @@
                DV1N=M*DV1(N)
                DV2N=DV2(N)
                
-               CT11=CMPLX(XRT11(M1,N,NN),XIT11(M1,N,NN))
-               CT22=CMPLX(XRT22(M1,N,NN),XIT22(M1,N,NN))
+               CT11=CMPLX(XRT11(M1,N,NN),XIT11(M1,N,NN),kind=kind(CT11))
+               CT22=CMPLX(XRT22(M1,N,NN),XIT22(M1,N,NN),kind=kind(CT22))
                
                IF (M.EQ.0) THEN
                   
@@ -1397,8 +1398,8 @@
                   
                ELSE
                   
-                  CT12=CMPLX(XRT12(M1,N,NN),XIT12(M1,N,NN))
-                  CT21=CMPLX(XRT21(M1,N,NN),XIT21(M1,N,NN))
+                  CT12=CMPLX(XRT12(M1,N,NN),XIT12(M1,N,NN),kind=kind(CT12))
+                  CT21=CMPLX(XRT21(M1,N,NN),XIT21(M1,N,NN),kind=kind(CT21))
                   
                   CN1=CAL(N,NN)*FC
                   CN2=CAL(N,NN)*FS
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 44fde5f596477bcc1cbcaa3d7b283a8a9b1130a8..37e126a8af2544f9c6302e4ea5bcfd042fa6db1d 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -257,6 +257,8 @@ END MODULE MODI_MODEL_n
 !                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !!                   02/2019 C.Lac add rain fraction as an output field
 !!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
+!  P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -325,6 +327,7 @@ USE MODD_PARAM_MFSHALL_n
 USE MODD_PARAM_n
 USE MODD_PAST_FIELD_n
 USE MODD_PRECIP_n
+use modd_precision,      only: MNHTIME
 USE MODD_PROFILER_n
 USE MODD_RADIATIONS_n,   ONLY: XTSRAD,XSCAFLASWD,XDIRFLASWD,XDIRSRFSWD, XAER, XDTHRAD
 USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
@@ -443,9 +446,8 @@ INTEGER :: IVERB                ! LFI verbosity level
 LOGICAL :: GSTEADY_DMASS        ! conditional call to mass computation
 !
                                 ! for computing time analysis
-REAL*8,DIMENSION(2)         :: ZTIME,ZTIME1,ZTIME2,ZEND,ZTOT,ZALL,ZTOT_PT
-!
-REAL*8,DIMENSION(2)         :: ZTIME_STEP,ZTIME_STEP_PTS
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME, ZTIME1, ZTIME2, ZEND, ZTOT, ZALL, ZTOT_PT
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS
 CHARACTER                 :: YMI
 INTEGER                   :: IPOINTS
 CHARACTER(len=16)         :: YTCOUNT,YPOINTS
@@ -713,45 +715,45 @@ IF (KTCOUNT == 1) THEN
   !
 !
   !
-  XT_START = 0.0
-  ! 
-  XT_STORE     = 0.0
-  XT_BOUND     = 0.0
-  XT_GUESS     = 0.0
-  XT_FORCING   = 0.0
-  XT_NUDGING   = 0.0
-  XT_ADV       = 0.0
-  XT_ADVUVW    = 0.0
-  XT_GRAV      = 0.0
-  XT_SOURCES   = 0.0
+  XT_START     = 0.0_MNHTIME
+  !
+  XT_STORE     = 0.0_MNHTIME
+  XT_BOUND     = 0.0_MNHTIME
+  XT_GUESS     = 0.0_MNHTIME
+  XT_FORCING   = 0.0_MNHTIME
+  XT_NUDGING   = 0.0_MNHTIME
+  XT_ADV       = 0.0_MNHTIME
+  XT_ADVUVW    = 0.0_MNHTIME
+  XT_GRAV      = 0.0_MNHTIME
+  XT_SOURCES   = 0.0_MNHTIME
   !
-  XT_DIFF      = 0.0
-  XT_RELAX     = 0.0
-  XT_PARAM     = 0.0
-  XT_SPECTRA   = 0.0
-  XT_HALO      = 0.0
-  XT_VISC      = 0.0  
-  XT_RAD_BOUND = 0.0
-  XT_PRESS     = 0.0
+  XT_DIFF      = 0.0_MNHTIME
+  XT_RELAX     = 0.0_MNHTIME
+  XT_PARAM     = 0.0_MNHTIME
+  XT_SPECTRA   = 0.0_MNHTIME
+  XT_HALO      = 0.0_MNHTIME
+  XT_VISC      = 0.0_MNHTIME
+  XT_RAD_BOUND = 0.0_MNHTIME
+  XT_PRESS     = 0.0_MNHTIME
   !
-  XT_CLOUD     = 0.0
-  XT_STEP_SWA  = 0.0
-  XT_STEP_MISC = 0.0
-  XT_COUPL     = 0.0
-  XT_1WAY      = 0.0
-  XT_STEP_BUD  = 0.0
+  XT_CLOUD     = 0.0_MNHTIME
+  XT_STEP_SWA  = 0.0_MNHTIME
+  XT_STEP_MISC = 0.0_MNHTIME
+  XT_COUPL     = 0.0_MNHTIME
+  XT_1WAY      = 0.0_MNHTIME
+  XT_STEP_BUD  = 0.0_MNHTIME
   !
-  XT_RAD       = 0.0
-  XT_DCONV     = 0.0
-  XT_GROUND    = 0.0
-  XT_TURB      = 0.0
-  XT_MAFL      = 0.0
-  XT_DRAG      = 0.0
-  XT_TRACER    = 0.0
-  XT_SHADOWS   = 0.0
-  XT_ELEC      = 0.0
-  XT_CHEM      = 0.0
-  XT_2WAY      = 0.0
+  XT_RAD       = 0.0_MNHTIME
+  XT_DCONV     = 0.0_MNHTIME
+  XT_GROUND    = 0.0_MNHTIME
+  XT_TURB      = 0.0_MNHTIME
+  XT_MAFL      = 0.0_MNHTIME
+  XT_DRAG      = 0.0_MNHTIME
+  XT_TRACER    = 0.0_MNHTIME
+  XT_SHADOWS   = 0.0_MNHTIME
+  XT_ELEC      = 0.0_MNHTIME
+  XT_CHEM      = 0.0_MNHTIME
+  XT_2WAY      = 0.0_MNHTIME
   !
 END IF
 !
@@ -2126,7 +2128,7 @@ IF (OEXIT) THEN
 !
   ! Set File Timing OUTPUT
   !
-  CALL SET_ILUOUT_TIMING(ILUOUT)
+  CALL SET_ILUOUT_TIMING(TLUOUT)
   !
   ! Compute global time
   !
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 9fa7c447d60013f2be4909fd3ef6048edb9bcc23..a722563f12d687a12b26e24453a9b0e8be2c21a8 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -4,7 +4,7 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ########################
-     MODULE MODI_PHYS_PARAM_n  
+     MODULE MODI_PHYS_PARAM_n
 !    ########################
 !
 !
@@ -14,18 +14,17 @@ INTERFACE
                               PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER,       &
                               PTIME_BU, PWETDEPAER, OMASKkids,OCLOUD_ONLY                  )           
 !
-USE MODD_IO, ONLY: TFILEDATA
+USE MODD_IO,        ONLY: TFILEDATA
+use modd_precision, only: MNHTIME
 !
 INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
 TYPE(TFILEDATA),   INTENT(IN)     :: TPFILE    ! Synchronous output file
 LOGICAL,           INTENT(IN)     :: OCLOSE_OUT! conditional closure of the 
                                                ! OUTPUT FM-file
-! advection schemes                   
-REAL*8,DIMENSION(2), INTENT(INOUT)  :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU
-                                               ! time for computing time
-                                        
-REAL*8,DIMENSION(2),              INTENT(INOUT)  :: PTIME_BU  ! time used in budget&LES budgets
-     !        statistics
+! advection schemes
+REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU
+                                                                                                         ! time for computing time
+REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU  ! time used in budget&LES budgets statistics
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT)  :: PWETDEPAER
 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask
 LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for
@@ -231,8 +230,9 @@ END MODULE MODI_PHYS_PARAM_n
 !!      C.Lac  10/2017 : ch_monitor and aer_monitor extracted from phys_param
 !!                       to be called directly by modeln as the last process 
 !!                   02/2018 Q.Libois ECRAD
-!!     28/03/2018 P. Wautelet: replace TEMPORAL_DIST by DATETIME_DISTANCE
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 28/03/2018: replace TEMPORAL_DIST by DATETIME_DISTANCE
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -292,6 +292,7 @@ USE MODD_PARAM_MFSHALL_n
 USE MODI_SHALLOW_MF_PACK
 USE MODD_CLOUD_MF_n
 USE MODD_ADV_n,            ONLY : XRTKEMS
+use modd_precision,        only: MNHTIME
 !
 USE MODI_SURF_RAD_MODIF
 USE MODI_GROUND_PARAM_n
@@ -345,11 +346,10 @@ INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
 TYPE(TFILEDATA),   INTENT(IN)     :: TPFILE    ! Synchronous output file
 LOGICAL,           INTENT(IN)     :: OCLOSE_OUT! conditional closure of the 
                                                ! OUTPUT FM-file
-! advection schemes                   
-REAL*8,DIMENSION(2), INTENT(INOUT)  :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU
-                                               ! time for computing time
-                                               !        statistics
-REAL*8,DIMENSION(2),              INTENT(INOUT)  :: PTIME_BU  ! time used in budget&LES budgets
+! advection schemes
+REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PRAD,PSHADOWS,PKAFR,PGROUND,PTURB,PMAFL,PDRAG,PTRACER ! to store CPU
+                                                                                                         ! time for computing time
+REAL(kind=MNHTIME), DIMENSION(2), INTENT(INOUT) :: PTIME_BU  ! time used in budget&LES budgets statistics
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT)  :: PWETDEPAER
 LOGICAL, DIMENSION(:,:), INTENT(IN) :: OMASKkids ! kids domains mask
 LOGICAL, INTENT(OUT) :: OCLOUD_ONLY ! conditionnal radiation computations for
@@ -401,8 +401,8 @@ REAL    :: ZRAD_GLOB_ll         ! 'real' global parallel mask of 'GRAD'
 INTEGER :: INFO_ll              ! error report of parallel routines
                                 !      the only cloudy columns
 !
-REAL*8,DIMENSION(2)    :: ZTIME1,ZTIME2,ZTIME3,ZTIME4       ! for computing time analysis
-REAL*8,DIMENSION(2)    :: ZTIME_LES_MF         ! time spent in LES computation in shallow conv.
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZTIME3, ZTIME4 ! for computing time analysis
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_LES_MF                   ! time spent in LES computation in shallow conv.
 LOGICAL :: GDCONV               ! conditionnal call for the deep convection
                                 !         computations
 REAL, DIMENSION(:,:,:), ALLOCATABLE  :: ZRC, ZRI, ZWT ! additional dummies
@@ -452,12 +452,12 @@ IKB = 1 + JPVEXT
 IKE = IKU - JPVEXT
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
 !
-ZTIME1 = 0.0
-ZTIME2 = 0.0
-ZTIME3 = 0.0
-ZTIME4 = 0.0
-PTIME_BU = 0.
-ZTIME_LES_MF = 0.0
+ZTIME1 = 0.0_MNHTIME
+ZTIME2 = 0.0_MNHTIME
+ZTIME3 = 0.0_MNHTIME
+ZTIME4 = 0.0_MNHTIME
+PTIME_BU = 0._MNHTIME
+ZTIME_LES_MF = 0.0_MNHTIME
 PWETDEPAER(:,:,:,:) = 0.
 !
 !* allocation of variables used in more than one parameterization
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index f14b703c0ac66d82eb86dba4e3e4a5bb184d9a97..b5aba7c9534ab6f71a48987110735d6947f14f3e 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -310,9 +310,11 @@
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!      P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!  01/2018      (G.Delautier) SURFEX 8.1
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
+!  P. Wautelet 28/03/2019: use TFILE instead of unit number for set_iluout_timing
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -351,6 +353,7 @@ USE MODD_IO,        ONLY: NIO_VERB, NVERB_DEBUG, TFILE_DUMMY, TFILE_OUTPUTLISTIN
 USE MODD_CONF_n
 USE MODD_NSV,      ONLY : NSV,NSV_CHEM,           &
                           NSV_DSTEND, NSV_DSTBEG
+use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME
 !
 USE MODN_BLANK
 !
@@ -449,7 +452,7 @@ INTEGER :: NLUPRE,NLUOUT           ! Logical unit numbers for EXPRE file
                                    ! and for output_listing file
 INTEGER :: NRESP                   ! return code in FM routines
 INTEGER :: NTYPE                   ! type of file (cpio or not)
-INTEGER(KIND=LFI_INT) :: NNPRAR    ! number of articles predicted in the LFIFM file
+INTEGER(KIND=LFIINT) :: NNPRAR     ! number of articles predicted in the LFIFM file
 LOGICAL :: GFOUND                  ! Return code when searching namelist
 !
 INTEGER :: JLOOP,JILOOP,JJLOOP     ! Loop indexes
@@ -555,7 +558,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZTHL,ZT,ZRT,ZFRAC_ICE,&
 REAL                :: ZDIST
 !
 !JUAN TIMING
-REAL*8,DIMENSION(2)         :: ZTIME1,ZTIME2,ZEND,ZTOT
+REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME1, ZTIME2, ZEND, ZTOT
 CHARACTER                 :: YMI
 INTEGER                   :: IMI
 INTEGER::JK                                 
@@ -623,8 +626,8 @@ CALL VERSION
 CPROGRAM='IDEAL '
 !
 !JUAN TIMING
-  XT_START     = 0.0
-  XT_STORE     = 0.0
+  XT_START     = 0.0_MNHTIME
+  XT_STORE     = 0.0_MNHTIME
 !
   CALL SECOND_MNH2(ZEND)
 !
@@ -1211,7 +1214,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.
@@ -1872,7 +1875,7 @@ END IF
   !
   ! Set File Timing OUTPUT
   !
-  CALL SET_ILUOUT_TIMING(NLUOUT)
+  CALL SET_ILUOUT_TIMING(TLUOUT0)
   !
   ! Compute global time
   !
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 81ab9dd5e885dd79aafacac0f8d1db8aba6edeb9..86b375631f93207762fa91052e5412c6c11d7679 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -90,6 +90,7 @@ USE MODD_LUNIT,  ONLY : TLUOUT0
 USE MODD_LUNIT_n,ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS, ONLY : XUNDEF
 USE MODD_IO,   ONLY : NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX
+use modd_precision,   only: LFIINT
 USE MODD_IO_SURF_MNH, ONLY : NHALO
 USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR
 !
@@ -248,7 +249,7 @@ CALL PGD_SURF_ATM(YSURF_CUR,'MESONH','                            ','      ',.FA
 !*    3.      Writes the physiographic fields
 !             -------------------------------
 !
-CALL IO_File_add2list(TZFILE,CPGDFILE,'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5)
+CALL IO_File_add2list(TZFILE,CPGDFILE,'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFIINT),KLFITYPE=1,KLFIVERB=5)
 !
 CALL IO_File_open(TZFILE)
 !
diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90
index 70969b1e7532d5dec626903af516c6c763c00c28..c9eca886954b3cf6d30b5b7690592d9a635f182e 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -231,8 +231,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_ll
 USE MODE_MPPDB
@@ -685,7 +686,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/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index 6e63593d2a7bc74009222b4c0bb1154d551e3aa9..778b9e29c97c92e0e4d788fff847280ba6944660 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -104,10 +104,10 @@ USE MODD_GRID_n
 USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT,      ONLY: TLUOUT0
 USE MODE_MODELN_HANDLER
-USE MODD_NETCDF,     ONLY:IDCDF_KIND
 USE MODD_NSV  
 USE MODD_PARAMETERS
-USE MODD_PARAM_n,    ONLY : CTURB
+USE MODD_PARAM_n,    ONLY: CTURB
+USE MODD_PRECISION,  ONLY: CDFINT
 USE MODD_PREP_REAL
 USE MODD_TIME
 USE MODD_TIME_n
@@ -190,12 +190,12 @@ TYPE(TFILEDATA),POINTER                       :: TZFILE
 !
 ! For netcdf 
 !
-integer(kind=IDCDF_KIND) :: status, ncid, varid
-integer(kind=IDCDF_KIND) :: lat_varid, lon_varid, lev_varid, time_varid 
-integer(kind=IDCDF_KIND) :: hyam_varid, hybm_varid, p0_varid, t_varid, q_varid, ps_varid 
-integer(kind=IDCDF_KIND) :: recid, latid, lonid, levid, timeid
-integer(kind=IDCDF_KIND) :: latlen, lonlen, levlen, nrecs,timelen
-integer(kind=IDCDF_KIND) :: itimeindex, KILEN, jrec
+integer(kind=CDFINT) :: status, ncid, varid
+integer(kind=CDFINT) :: lat_varid, lon_varid, lev_varid, time_varid
+integer(kind=CDFINT) :: hyam_varid, hybm_varid, p0_varid, t_varid, q_varid, ps_varid
+integer(kind=CDFINT) :: recid, latid, lonid, levid, timeid
+integer(kind=CDFINT) :: latlen, lonlen, levlen, nrecs,timelen
+integer(kind=CDFINT) :: itimeindex, KILEN, jrec
 CHARACTER(LEN=40)                     :: recname
 REAL, DIMENSION(:), ALLOCATABLE       :: lats
 REAL, DIMENSION(:), ALLOCATABLE       :: lons 
@@ -767,7 +767,7 @@ CONTAINS
 ! #############################
     use mode_msg
 
-    integer(kind=IDCDF_KIND) status
+    integer(kind=CDFINT) status
 
     if ( status /= NF90_NOERR ) then
       call Print_msg( NVERB_FATAL, 'IO', 'HANDLE_ERR', NF90_STRERROR(status) )
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index 862e27e31c8b6b0fa185592f4c76e5df620c007e..e274f4d85c008a739630af86561798170bc3d9fb 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -5,6 +5,7 @@
 !-----------------------------------------------------------------
 ! Modifications:
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 22/02/2019: set HCOMMENT for all subroutines (dummy argument with intent OUT)
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 MODULE MODE_READ_SURF_MNH_TOOLS
@@ -158,7 +159,7 @@ IMPLICIT NONE
 CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
 REAL,                   INTENT(OUT) :: PFIELD   ! the real scalar to be read
 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT) :: HCOMMENT ! comment
 !
 !*      0.2   Declarations of local variables
 !
@@ -176,6 +177,7 @@ TYPE(TFIELDDATA)  :: TZFIELD
 CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFX0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
 !
 ILUOUT = TOUT%NLU
+HCOMMENT=''
 !
 IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN
   IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN
@@ -232,6 +234,7 @@ IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA'  &
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEREAL,0,'READ_SURFX0_MNH',TZFIELD)
   CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
 END IF
 
 IF (KRESP /=0) THEN
@@ -312,7 +315,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN) :: HREC     ! name of the article to be read
 INTEGER,                INTENT(IN) :: KL       !  number of points
 REAL, DIMENSION(KL),    INTENT(OUT):: PFIELD   ! array containing the data field
 INTEGER,                INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT):: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT):: HCOMMENT ! comment
 CHARACTER(LEN=1),       INTENT(IN) :: HDIR     ! type of field :
 !                                           ! 'H' for HOR : with hor. dim.; and  distributed.
 !                                           ! 'A' for ALL : with hor. dim.; and not distributed.
@@ -344,6 +347,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFX1_MNH',TRIM(TPINFILE%CNAME)//': readi
 !
 KRESP = 0
 ILUOUT = TOUT%NLU
+HCOMMENT = ' '
 !
 IF (HDIR=='A'.OR.HDIR=='E') THEN
   IIU = NIU_ALL
@@ -380,7 +384,6 @@ ELSE IF (HREC=='LON') THEN
 ELSE IF (HREC=='MESH_SIZE') THEN
 
   PFIELD(:) = 0.
-  HCOMMENT = ' '
 
 ELSE IF (HREC=='XX') THEN
 !! reading of a 1D field along X in the file
@@ -395,6 +398,7 @@ ELSE IF (HREC=='XX') THEN
     TZFIELD%CDIR       = '--'
   END IF
   CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
   DO JJ = 1,IJU
     ZWORK(IIB:IIE,JJ) = 0.5 * ZWORK1D(IIB:IIE) + 0.5 * ZWORK1D(IIB+1:IIE+1)
   END DO
@@ -414,6 +418,7 @@ ELSE IF (HREC=='DX') THEN
     TZFIELD%CDIR       = '--'
   END IF
   CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
   DO JJ = 1,IJU
     ZWORK(IIB:IIE,JJ) = - ZWORK1D(IIB:IIE) + ZWORK1D(IIB+1:IIE+1)
   END DO
@@ -433,6 +438,7 @@ ELSE IF (HREC=='YY') THEN
     TZFIELD%CDIR       = '--'
   END IF
   CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
   DO JI = 1,IIU
     ZWORK(JI,IJB:IJE) = 0.5 * ZWORK1D(IJB:IJE) + 0.5 * ZWORK1D(IJB+1:IJE+1)
   END DO
@@ -452,6 +458,7 @@ ELSE IF (HREC=='DY') THEN
     TZFIELD%CDIR       = '--'
   END IF
   CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
   DO JI = 1,IIU
     ZWORK(JI,IJB:IJE) = - ZWORK1D(IJB:IJE) + ZWORK1D(IJB+1:IJE+1)
   END DO
@@ -501,6 +508,7 @@ ELSE
     CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,1,'READ_SURFX1_MNH',TZFIELD)
     CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
   END IF
+  HCOMMENT = TZFIELD%CCOMMENT
 !
   IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
@@ -595,7 +603,7 @@ INTEGER,                 INTENT(IN)  :: KL1      ! number of points
 INTEGER,                 INTENT(IN)  :: KL2      ! second dimension
 REAL, DIMENSION(KL1,KL2),INTENT(OUT) :: PFIELD   ! array containing the data field
 INTEGER,                 INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),      INTENT(OUT) :: HCOMMENT ! comment
+CHARACTER(LEN=*),        INTENT(OUT) :: HCOMMENT ! comment
 CHARACTER(LEN=1),        INTENT(IN)  :: HDIR     ! type of field :
 !                                                ! 'H' for HOR : with hor. dim.; and  distributed.
 !                                                ! 'A' for ALL : with hor. dim.; and not distributed.
@@ -638,6 +646,8 @@ ELSE
   CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
 END IF
 !
+HCOMMENT = TZFIELD%CCOMMENT
+!
 IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
     WRITE(ILUOUT,*) '-------'
@@ -731,7 +741,7 @@ INTEGER,                   INTENT(IN) :: KL1,KL2  !  number of points
 REAL, DIMENSION(KL1,KL2),  INTENT(OUT):: PFIELD   ! array containing the data field
 LOGICAL,DIMENSION(JPCOVER),INTENT(IN) :: OFLAG    ! mask for array filling
 INTEGER,                   INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),        INTENT(OUT):: HCOMMENT ! comment
+CHARACTER(LEN=*),          INTENT(OUT):: HCOMMENT ! comment
 CHARACTER(LEN=1),          INTENT(IN) :: HDIR     ! type of field :
 !                                           ! 'H' for HOR : with hor. dim.; and  distributed.
 !                                           ! 'A' for ALL : with hor. dim.; and not distributed.
@@ -839,6 +849,8 @@ ELSE
   CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP)
 END IF
 !
+HCOMMENT = TZFIELD%CCOMMENT
+!
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
   WRITE(ILUOUT,*) '-------'
@@ -923,7 +935,7 @@ INTEGER,                INTENT(IN) :: KL1      !  number of points
 INTEGER,                INTENT(IN) :: KCOVER   ! index of the vertical level, it should be a index such that LCOVER(KCOVER)=.TRUE.
 REAL, DIMENSION(KL1),   INTENT(OUT):: PFIELD   ! array containing the data field
 INTEGER,                INTENT(OUT):: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT):: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT):: HCOMMENT ! comment
 CHARACTER(LEN=1),       INTENT(IN) :: HDIR     ! type of field :
 !                                           ! 'H' for HOR : with hor. dim.; and  distributed.
 !                                           ! 'A' for ALL : with hor. dim.; and not distributed.
@@ -1024,6 +1036,8 @@ ELSE
   call Print_msg( NVERB_FATAL, 'IO', 'READ_SURFX2COV_1COV_MNH', 'GCOVER_PACKED=TRUE and we try to read the covers one by one' )
 END IF
 !
+HCOMMENT = TZFIELD%CCOMMENT
+!
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
   WRITE(ILUOUT,*) '-------'
@@ -1100,7 +1114,7 @@ IMPLICIT NONE
 CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
 INTEGER,                INTENT(OUT) :: KFIELD   ! the integer to be read
 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT) :: HCOMMENT ! comment
 !
 !*      0.2   Declarations of local variables
 !
@@ -1114,6 +1128,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFN0_MNH',TRIM(TPINFILE%CNAME)//': readi
 !
 KRESP=0
 ILUOUT = TOUT%NLU
+HCOMMENT=''
 !
 IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR.  &
                                   CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN
@@ -1123,6 +1138,7 @@ IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR.  &
 ELSE
    CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD)
    CALL IO_Field_read(TPINFILE,TZFIELD,KFIELD,KRESP)
+   HCOMMENT = TZFIELD%CCOMMENT
 
     IF (KRESP /=0) THEN
       WRITE(ILUOUT,*) 'WARNING'
@@ -1195,7 +1211,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
 INTEGER,                INTENT(IN)  :: KL       ! number of points
 INTEGER, DIMENSION(KL), INTENT(OUT) :: KFIELD   ! the integer to be read
 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT) :: HCOMMENT ! comment
 CHARACTER(LEN=1),       INTENT(IN)  :: HDIR     ! type of field :
 !                                               ! 'H' : field with
 !                                               !       horizontal spatial dim.
@@ -1236,9 +1252,11 @@ ELSE IF (HDIR=='H') THEN
     CALL PACK_2D_1D(NMASK,IWORK(NIB:NIE,NJB:NJE),KFIELD)
  END IF
 !
-DEALLOCATE(IWORK)
-
+ DEALLOCATE(IWORK)
 ENDIF
+
+HCOMMENT = TZFIELD%CCOMMENT
+
 !-------------------------------------------------------------------------------
 END SUBROUTINE READ_SURFN1_MNH
 !
@@ -1302,7 +1320,7 @@ IMPLICIT NONE
 CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC      ! name of the article to be read
 CHARACTER(LEN=40),      INTENT(OUT) :: HFIELD    ! the integer to be read
 INTEGER,                INTENT(OUT) :: KRESP     ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT  ! comment
+CHARACTER(LEN=*),       INTENT(OUT) :: HCOMMENT  ! comment
 !
 !*      0.2   Declarations of local variables
 !
@@ -1325,6 +1343,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': readi
 !
 KRESP = 0
 ILUOUT = TOUT%NLU
+HCOMMENT = ''
 !
 IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN
   SELECT CASE(TRIM(HREC))
@@ -1387,6 +1406,7 @@ ELSE IF ( HREC=='GRID_TYPE'.AND. ( &
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD)
   CALL IO_Field_read(TPINFILE,TZFIELD,HFIELD,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
   !
   IF (KRESP /=0) THEN
         CALL PRINT_MSG(NVERB_FATAL,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': error when reading article '//TRIM(HREC)// &
@@ -1458,7 +1478,7 @@ CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
 INTEGER,                INTENT(IN)  :: KL       ! number of points
 LOGICAL, DIMENSION(KL), INTENT(OUT) :: OFIELD   ! array containing the data field
 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT) :: HCOMMENT ! comment
 CHARACTER(LEN=1),       INTENT(IN)  :: HDIR     ! type of field :
 !                                               ! 'H' : field with
 !                                               !       horizontal spatial dim.
@@ -1510,6 +1530,9 @@ ELSE IF (HDIR=='H') THEN
 !
   DEALLOCATE(GWORK)
 END IF
+
+HCOMMENT = TZFIELD%CCOMMENT
+
 !-------------------------------------------------------------------------------
 END SUBROUTINE READ_SURFL1_MNH
 !
@@ -1568,7 +1591,7 @@ IMPLICIT NONE
 CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to be read
 LOGICAL,                INTENT(OUT) :: OFIELD   ! array containing the data field
 INTEGER,                INTENT(OUT) :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT) :: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT) :: HCOMMENT ! comment
 !
 !*      0.2   Declarations of local variables
 !
@@ -1668,7 +1691,7 @@ INTEGER,                INTENT(OUT)   :: KMONTH   ! month
 INTEGER,                INTENT(OUT)   :: KDAY     ! day
 REAL,                   INTENT(OUT)   :: PTIME    ! time
 INTEGER,                INTENT(OUT)   :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),     INTENT(OUT)   :: HCOMMENT ! comment
+CHARACTER(LEN=*),       INTENT(OUT)   :: HCOMMENT ! comment
 
 !*      0.2   Declarations of local variables
 !
@@ -1687,6 +1710,7 @@ TYPE(DATE_TIME)        :: TZDATETIME
 CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT0_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
 !
 ILUOUT = TOUT%NLU
+HCOMMENT = ''
 !
 IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN
   CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
@@ -1792,7 +1816,7 @@ INTEGER, DIMENSION(KL1), INTENT(OUT)   :: KMONTH   ! month
 INTEGER, DIMENSION(KL1), INTENT(OUT)   :: KDAY     ! day
 REAL,    DIMENSION(KL1), INTENT(OUT)   :: PTIME    ! time
 INTEGER,                 INTENT(OUT)   :: KRESP    ! KRESP  : return-code if a problem appears
-CHARACTER(LEN=100),      INTENT(OUT)   :: HCOMMENT ! comment
+CHARACTER(LEN=*),        INTENT(OUT)   :: HCOMMENT ! comment
 
 !*      0.2   Declarations of local variables
 !
@@ -1810,6 +1834,7 @@ TYPE(TFIELDDATA)       :: TZFIELD
 CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': reading '//TRIM(HREC))
 !
 ILUOUT = TOUT%NLU
+HCOMMENT = ''
 !
 IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN
   CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
@@ -1842,7 +1867,7 @@ TZFIELD%CSTDNAME   = ''
 TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
 TZFIELD%CUNITS     = ''
 TZFIELD%CDIR       = '--'
-TZFIELD%CCOMMENT   = TRIM(HCOMMENT)
+TZFIELD%CCOMMENT   = ''
 TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEINT
 TZFIELD%NDIMS      = 2
@@ -1867,7 +1892,7 @@ TZFIELD%CSTDNAME   = ''
 TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
 TZFIELD%CUNITS     = ''
 TZFIELD%CDIR       = '--'
-TZFIELD%CCOMMENT   = TRIM(HCOMMENT)
+TZFIELD%CCOMMENT   = ''
 TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 1
diff --git a/src/MNH/retrieve2_nest_infon.f90 b/src/MNH/retrieve2_nest_infon.f90
index 1e3b0776c7e6ce2162b703f1c5b9aa4541fa2424..b974932530682ad0186d3465847a2dbb0b6597e9 100644
--- a/src/MNH/retrieve2_nest_infon.f90
+++ b/src/MNH/retrieve2_nest_infon.f90
@@ -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/rms_at_z.f90 b/src/MNH/rms_at_z.f90
index 94cbf821132f48c0a728a64e953881cddbca3e41..3e2b11a93f91901a81b4a46c2aec087dabe7c3da 100644
--- a/src/MNH/rms_at_z.f90
+++ b/src/MNH/rms_at_z.f90
@@ -1,6 +1,6 @@
-!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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !###################
@@ -62,6 +62,7 @@ END MODULE MODI_RMS_AT_Z
 !!                  26/08/97 (V. Masson) call to new linear vertical
 !!                                       interpolation routine
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -172,7 +173,7 @@ WRITE(ILUOUT0,*) ''
 WRITE(ILUOUT0,*) HTITLE
 WRITE(ILUOUT0,*) ''
 DO JZ=1,40
-  WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F9.3)') ZZLEVELS(JZ),ZRMS(JZ)
+  WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F9.3 )') ZZLEVELS(JZ),ZRMS(JZ)
 END DO
 WRITE(ILUOUT0,*) ''
 !
diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90
index 7ffbbb145b9383d1f7bbbe47d9a7f1938478afaf..5e76f58c51e5632ec4c68795e8c7457b3d025a16 100644
--- a/src/MNH/shallow_mf_pack.f90
+++ b/src/MNH/shallow_mf_pack.f90
@@ -2,6 +2,7 @@
 !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_SHALLOW_MF_PACK
 !    ######################
@@ -21,10 +22,11 @@ INTERFACE
                 PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF  )
 !     #################################################################
 !!
-USE MODD_IO, ONLY: TFILEDATA
-!               
+use MODD_IO,        only: TFILEDATA
+use modd_precision, only: MNHTIME
+!
 !*               1.1  Declaration of Arguments
-!                
+!
 !
 INTEGER,                INTENT(IN)   :: KRR        ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL       ! number of liquid water var.
@@ -39,7 +41,7 @@ LOGICAL,                INTENT(IN)   :: OCLOSE_OUT ! switch for synchronous
 LOGICAL,                INTENT(IN)   :: OMF_FLX    ! switch to write the
                                                    ! MF fluxes in the synchronous FM-file
 TYPE(TFILEDATA),        INTENT(IN)   :: TPFILE     ! Output file
-REAL*8,DIMENSION(2),    INTENT(OUT)  :: PTIME_LES  ! time spent in LES computations
+REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT)  :: PTIME_LES  ! time spent in LES computations
 REAL,                   INTENT(IN)   :: PIMPL_MF   ! degre of implicitness
 REAL,                   INTENT(IN)   :: PTSTEP     ! Dynamical timestep 
 
@@ -110,32 +112,35 @@ END MODULE MODI_SHALLOW_MF_PACK
 !!     AUTHOR
 !!     ------
 !!      V.Masson 09/2010
-!!      Modification R. Honnert 07/2012 : introduction of vertical wind 
-!!                                        for the height of the thermal
-!!                   M. Leriche 02/2017 : avoid negative values for sv tendencies
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!                   S. Riette 11/2016: support for CFRAC_ICE_SHALLOW_MF
-!! --------------------------------------------------------------------------
+! --------------------------------------------------------------------------
+! Modifications:
+!  R. Honnert     07/2012: introduction of vertical wind for the height of the thermal
+!  M. Leriche     02/2017: avoid negative values for sv tendencies
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  S. Riette      11/2016: support for CFRAC_ICE_SHALLOW_MF
+!  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
+! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_PARAMETERS
-USE MODD_CST
+USE MODD_BUDGET
 USE MODD_CONF
+USE MODD_CST
 USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_NSV
+USE MODD_PARAMETERS
 USE MODD_PARAM_ICE,       ONLY: CFRAC_ICE_SHALLOW_MF
 USE MODD_PARAM_MFSHALL_n
-USE MODD_BUDGET
+use modd_precision,       only: MNHTIME
 
 USE MODE_FIELD,           ONLY: TFIELDDATA, TYPEREAL
 USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 
-USE MODI_SHALLOW_MF
 USE MODI_BUDGET
-USE MODI_SHUMAN
 USE MODI_DIAGNOS_LES_MF
+USE MODI_SHALLOW_MF
+USE MODI_SHUMAN
 !
 IMPLICIT NONE
 
@@ -156,7 +161,7 @@ LOGICAL,                INTENT(IN)   :: OCLOSE_OUT ! switch for synchronous
 LOGICAL,                INTENT(IN)   :: OMF_FLX    ! switch to write the
                                                    ! MF fluxes in the synchronous FM-file
 TYPE(TFILEDATA),        INTENT(IN)   :: TPFILE     ! Output file
-REAL*8,DIMENSION(2),    INTENT(OUT)  :: PTIME_LES  ! time spent in LES computations
+REAL(kind=MNHTIME),DIMENSION(2), INTENT(OUT)  :: PTIME_LES  ! time spent in LES computations
 REAL,                   INTENT(IN)   :: PIMPL_MF   ! degre of implicitness
 REAL,                   INTENT(IN)   :: PTSTEP     ! Dynamical timestep 
 
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 6fc15703de06b2be114f0bb9c24b1281c78a5b94..33c2a15786a8a92e74f21b6969f1b52bf10baa54 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -193,7 +193,8 @@ END MODULE MODI_SPAWN_MODEL2
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  S. Bielli      02/2019:  sea salt: significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
@@ -234,6 +235,7 @@ USE MODD_PASPOL_n
 !$20140515
 USE MODD_VAR_ll, ONLY : NPROC
 USE MODD_IO, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX
+use modd_precision, only: MNHREAL_MPI
 !
 USE MODE_GRIDCART         ! Executive modules
 USE MODE_GRIDPROJ
@@ -290,6 +292,7 @@ USE MODD_PASPOL, ONLY : LPASPOL
 !
 USE MODD_MPIF
 USE MODD_VAR_ll
+use modd_precision, only: LFIINT
 !
 IMPLICIT NONE
 !
@@ -317,7 +320,7 @@ LOGICAL,               INTENT(IN) :: OSPAWN_SURF  ! flag to spawn surface fields
 !
 !
 INTEGER :: ILUOUT   ! Logical unit number for the output listing 
-INTEGER(KIND=LFI_INT) :: INPRAR ! Number of articles predicted in the LFIFM file
+INTEGER(KIND=LFIINT) :: INPRAR ! Number of articles predicted in the LFIFM file
 !
 !
 INTEGER             :: IIU            ! Upper dimension in x direction
@@ -1158,7 +1161,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)
@@ -1203,7 +1206,7 @@ IF (NVERB>=2) THEN
   WRITE(ILUOUT,*) ' '
   WRITE(ILUOUT,*) 'humidity     (I=',IIJ(1),';J=',IIJ(2),')'
   DO JK=IKB,IKE
-    WRITE(ILUOUT,'(F6.2,2H %)') ZHUT(IIJ(1),IIJ(2),JK)
+    WRITE(ILUOUT,'(F6.2," %")') ZHUT(IIJ(1),IIJ(2),JK)
   END DO
 END IF
 !*       5.8    Retrieve model thermodynamical variables :
diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90
index f015f586f890fc2f8cd16ac26ab4ae5f4e2d05e5..ea7ad57684df040d48e490829a65991582d45b1c 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
 !
@@ -191,7 +192,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
@@ -413,8 +414,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/updraft_sope.f90 b/src/MNH/updraft_sope.f90
deleted file mode 100644
index 141eef53ba470547b024926ddd0187ba1e7bb8b7..0000000000000000000000000000000000000000
--- a/src/MNH/updraft_sope.f90
+++ /dev/null
@@ -1,148 +0,0 @@
-!MNH_LIC Copyright 1994-2014 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_UPDRAFT_SOPE
-!    #################################
-!
-INTERFACE
-!
-      SUBROUTINE UPDRAFT_SOPE(KRR,KRRL,KRRI,OMIXUV,                & 
-                         PZZ,PDZZ,PSFTH,PSFRV,PPABSM,PRHODREF,     &
-                         PTKEM,PTHM,PRM,PTHLM,PRTM,PUM,PVM,PSVM,   &
-                         PTHL_UP,PRT_UP,PRV_UP,PU_UP,PV_UP,PSV_UP, &    
-                         PRC_UP,PRI_UP,PTHV_UP,PW_UP,PFRAC_UP,PEMF,&
-                         PDETR,PENTR,KKLCL,KKETL,KKCTL )
-!
-!
-!
-INTEGER,                INTENT(IN)   :: KRR       ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL      ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI      ! number of ice water var.
-LOGICAL,                INTENT(IN)   :: OMIXUV    ! True if mixing of momentum
-
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PZZ       !  Height at the flux point
-
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PDZZ      ! depth between mass levels  
-
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTH,PSFRV
-                                                  ! normal surface fluxes of theta,rv
-!
-!    prognostic variables at t- deltat
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PPABSM      ! Pressure at time t-1
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PRHODREF    ! dry density of the
-                                                     ! reference state
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PTKEM       ! TKE
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PUM,PVM     ! momentum
-!
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM        ! Scalar variables 
-!
-!   thermodynamical variables which are transformed in conservative var.
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PTHM       ! pot. temp. = PTHLM in turb.f90
-REAL, DIMENSION(:,:,:,:), INTENT(IN)   ::  PRM        ! water species 
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PTHLM,PRTM !cons. var.       
-REAL, DIMENSION(:,:,:),   INTENT(OUT)  ::  PTHL_UP,PRT_UP        ! updraft properties
-REAL, DIMENSION(:,:,:),   INTENT(OUT)  ::  PRV_UP,PRC_UP,PRI_UP,&!Thl,Rt,Rv,Rc,Ri
-                                           PW_UP,PFRAC_UP,PEMF, &!w,Updraft Fraction, Mass Flux
-                                           PDETR,PENTR,PTHV_UP, &!entrainment, detrainment, ThV
-                                           PU_UP, PV_UP          !updraft wind component
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)  ::  PSV_UP                ! updraft scalar variables                                             
-INTEGER, DIMENSION(:,:),  INTENT(OUT)  ::  KKLCL,KKETL,KKCTL     !index for LCL,ETL,CTL                                      
-!
-!
-END SUBROUTINE UPDRAFT_SOPE
-
-END INTERFACE
-!
-END MODULE MODI_UPDRAFT_SOPE
-!
-!     
-!     #################################################################
-      SUBROUTINE UPDRAFT_SOPE(KRR,KRRL,KRRI,OMIXUV,                   & 
-                         PZZ,PDZZ,PSFTH,PSFRV,PPABSM,PRHODREF,        &
-                         PTKEM,PTHM,PRM,PTHLM,PRTM,PUM,PVM,PSVM,      &
-                         PTHL_UP,PRT_UP,PRV_UP,PU_UP,PV_UP,PSV_UP,    &
-                         PRC_UP,PRI_UP,PTHV_UP,PW_UP,PFRAC_UP,PEMF,   &
-                         PDETR,PENTR,KKLCL,KKETL,KKCTL )
-!     #################################################################
-!!
-!!****  *UPDRAFT_SOPE* - Interfacing routine
-!!
-!!    PURPOSE
-!!    -------
-!!****  Reshape arrays before updraft computations
-!!
-!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!      
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!      !!     REFERENCE
-!!     ---------
-!!
-!!     AUTHOR
-!!     ------
-!!     J.Pergaud
-!! --------------------------------------------------------------------------
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-USE MODD_PARAMETERS
-USE MODD_CST
-USE MODD_CONF
-USE MODD_NSV
-
-USE MODI_COMPUTE_UPDRAFT
-
-IMPLICIT NONE
-
-!*                    1.1  Declaration of Arguments
-!
-!
-INTEGER,                INTENT(IN)   :: KRR       ! number of moist var.
-INTEGER,                INTENT(IN)   :: KRRL      ! number of liquid water var.
-INTEGER,                INTENT(IN)   :: KRRI      ! number of ice water var.
-LOGICAL,                INTENT(IN)   :: OMIXUV    ! True if mixing of momentum
-
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PZZ       !  Height at the flux point
-
-REAL, DIMENSION(:,:,:), INTENT(IN)   :: PDZZ      ! depth between mass levels 
- 
-REAL, DIMENSION(:,:),   INTENT(IN)   ::  PSFTH,PSFRV
-                                            ! normal surface fluxes of theta,rv
-!
-!    prognostic variables at t- deltat
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PPABSM      ! Pressure at time t-1
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PRHODREF    ! dry density of the
-                                                     ! reference state
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PTKEM       ! TKE
-REAL, DIMENSION(:,:,:),   INTENT(IN) ::  PUM,PVM     ! momentum
-
-REAL, DIMENSION(:,:,:,:), INTENT(IN) ::  PSVM        ! Scalar variables 
-!
-!   thermodynamical variables which are transformed in conservative var.
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PTHM       ! pot. temp. = PTHLM in turb.f90
-REAL, DIMENSION(:,:,:,:), INTENT(IN)   ::  PRM        ! water species 
-REAL, DIMENSION(:,:,:),   INTENT(IN)   ::  PTHLM,PRTM !cons. var.  
-REAL, DIMENSION(:,:,:),   INTENT(OUT)  ::  PTHL_UP,PRT_UP  ! updraft properties
-REAL, DIMENSION(:,:,:),   INTENT(OUT)  ::  PRV_UP,PRC_UP,PRI_UP,&!Thl,Rt,Rv,Rc,Ri
-                                           PW_UP,PFRAC_UP,PEMF, &!w,Updraft Fraction, Mass Flux
-                                           PDETR,PENTR,PTHV_UP, &!entrainment, detrainment, ThV
-                                           PU_UP, PV_UP          !updraft wind component
-                                           
-REAL, DIMENSION(:,:,:,:), INTENT(OUT)  ::  PSV_UP                ! updraft scalar variables 
-
-INTEGER, DIMENSION(:,:),  INTENT(OUT)  ::  KKLCL,KKETL,KKCTL     !index for LCL,ETL,CTL       
-!
-!
-!
-
-END SUBROUTINE UPDRAFT_SOPE
-
diff --git a/src/MNH/ver_int_thermo.f90 b/src/MNH/ver_int_thermo.f90
index 38b931424684c25adf53f4d8e8029f37b7e40b8c..0463f3006389a1eb7e2022e1b07b647026303091 100644
--- a/src/MNH/ver_int_thermo.f90
+++ b/src/MNH/ver_int_thermo.f90
@@ -134,6 +134,7 @@ END MODULE MODI_VER_INT_THERMO
 !!                   08/2015 (M.Moge)    add UPDATE_HALO_ll(PR(:,:,:,1)) in part 6.3
 !!                  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -589,13 +590,13 @@ IF (NVERB>=1) THEN
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'Altitude and humidity on shifted grid     (I=',IIJ(1),';J=',IIJ(2),')'
   DO JK=IKB,IKE
-    WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') ZZMASS_SH(IIJ(1),IIJ(2),JK),ZHU_SH(IIJ(1),IIJ(2),JK)
+    WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') ZZMASS_SH(IIJ(1),IIJ(2),JK),ZHU_SH(IIJ(1),IIJ(2),JK)
   END DO
   !
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'Altitude and humidity on MESO-NH grid     (I=',IIJ(1),';J=',IIJ(2),')'
   DO JK=IKB,IKE
-    WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') ZZMASS   (IIJ(1),IIJ(2),JK),ZHU   (IIJ(1),IIJ(2),JK)
+    WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') ZZMASS   (IIJ(1),IIJ(2),JK),ZHU   (IIJ(1),IIJ(2),JK)
   END DO
 END IF
 !
diff --git a/src/MNH/ver_interp_to_mixed_grid.f90 b/src/MNH/ver_interp_to_mixed_grid.f90
index f1a882848f3dc259cb54ceb074c95e86dcfafcf7..dd63ee4930a93e915281f554d08de0426983dcd1 100644
--- a/src/MNH/ver_interp_to_mixed_grid.f90
+++ b/src/MNH/ver_interp_to_mixed_grid.f90
@@ -160,6 +160,7 @@ END MODULE MODI_VER_INTERP_TO_MIXED_GRID
 !!                      2014 (M.Faivre)
 !!                  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 22/02/2019: replace Hollerith edit descriptor (deleted from Fortran 95 standard)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -448,13 +449,13 @@ ZCOUNT   = FLOAT((IIE-IIB+1)*(IJE-IJB+1))
     WRITE(ILUOUT0,*) ' '
     WRITE(ILUOUT0,*) 'Altitude and humidity on large-scale grid (I=',IIJ(1),';J=',IIJ(2),')'
     DO JK=1,ILU
-      WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') PZMASS_LS(IIJ(1),IIJ(2),JK),PHU_LS(IIJ(1),IIJ(2),JK)
+      WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') PZMASS_LS(IIJ(1),IIJ(2),JK),PHU_LS(IIJ(1),IIJ(2),JK)
     END DO
     !
     WRITE(ILUOUT0,*) ' '
     WRITE(ILUOUT0,*) 'Altitude and humidity on mixed grid       (I=',IIJ(1),';J=',IIJ(2),')'
     DO JK=JPVEXT+1,IKE
-      WRITE(ILUOUT0,'(6Hlevel ,F6.0,5H m : ,F6.2,2H %)') XZMASS_MX(IIJ(1),IIJ(2),JK),ZHU_MX(IIJ(1),IIJ(2),JK)
+      WRITE(ILUOUT0,'( "level ", F6.0, " m : ", F6.2, " %" )') XZMASS_MX(IIJ(1),IIJ(2),JK),ZHU_MX(IIJ(1),IIJ(2),JK)
     END DO
   END IF
 !
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 086c612361f34deb835812a13f8dec670c0500a1..20aa0f4647beb92f0df37401df66e993e28eb2f0 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -204,6 +204,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
 !
@@ -3856,7 +3857,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/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 384239fd2a6dceae94ddb8562ebd2e0b8f183bce..90103c5141e3712d2c40af6ca916c184b0856162 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -55,6 +55,7 @@ USE MODD_PARAMETERS, ONLY : XUNDEF, NUNDEF, JPVEXT, JPHEXT, JPMODELMAX
 USE MODD_PARAM_n,     ONLY : CSURF
 USE MODD_DIM_n,       ONLY : NIMAX, NJMAX
 USE MODD_CONF_n,   ONLY : CSTORAGE_TYPE
+use modd_precision, only: LFIINT
 !
 USE MODE_POS
 USE MODE_IO,               only: IO_Config_set, IO_Init
@@ -149,7 +150,7 @@ CALL IO_Config_set()
 !*    2.1     Open PGD file
 !             -------------
 !
-CALL IO_File_add2list(TZPGDFILE,TRIM(CPGDFILE),'PGD','READ',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=2,KLFIVERB=5)
+CALL IO_File_add2list(TZPGDFILE,TRIM(CPGDFILE),'PGD','READ',KLFINPRAR=INT(1,KIND=LFIINT),KLFITYPE=2,KLFIVERB=5)
 CALL IO_File_open(TZPGDFILE)
 !
 !*    2.2     Reading of initial grid
@@ -195,7 +196,7 @@ IF ( (LEN_TRIM(YZOOMFILE) == 0) .OR. (ADJUSTL(YZOOMFILE) == ADJUSTL(CPGDFILE)) )
   YZOOMFILE=ADJUSTL(ADJUSTR(CPGDFILE)//'.z'//ADJUSTL(YZOOMNBR))
 END IF
 !
-CALL IO_File_add2list(TZZOOMFILE,TRIM(YZOOMFILE),'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5)
+CALL IO_File_add2list(TZZOOMFILE,TRIM(YZOOMFILE),'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFIINT),KLFITYPE=1,KLFIVERB=5)
 !PW: TODO: points to dad file (if existing) ! TZZOOMFILE%TDADFILE =>
 !
 CALL IO_File_open(TZZOOMFILE)
diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk
index f13c78f644ffaf9d254a38d27884fa245338141a..29b7632752570545afd3a6d14ae69d03e824289f 100644
--- a/src/Makefile.MESONH.mk
+++ b/src/Makefile.MESONH.mk
@@ -106,7 +106,7 @@ endif
 # PRE_BUG TEST !!!
 #
 DIR_SURCOUCHE += LIB/SURCOUCHE/src
-#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_MPI_BSEND -DNAGf95
+#CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND
 #
 ifdef DIR_SURCOUCHE
 DIR_MASTER   += $(DIR_SURCOUCHE)
diff --git a/src/Rules.AIX64.mk b/src/Rules.AIX64.mk
index 66354ef6cdc555676de69493dcdeadcedc1e1e5f..2f125e2cef063ec5d03bb90cdd492d1e824289d5 100644
--- a/src/Rules.AIX64.mk
+++ b/src/Rules.AIX64.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -30,9 +30,7 @@ OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 OPT       = $(OPT_BASE) $(OPT_PERF2) 
@@ -83,7 +81,7 @@ endif
 CPP = /usr/lib/cpp -C -P -qlanglvl=classic
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE = -DMNH_SP4
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAMAX1=MAX -DMNH -DSFX_MNH
diff --git a/src/Rules.BG.mk b/src/Rules.BG.mk
index 444869a73e2a1d37d6b6a693254d4f005633b2f7..068f99dea7da2ab34b6b4125f9ca99fd70b8306e 100644
--- a/src/Rules.BG.mk
+++ b/src/Rules.BG.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -35,9 +35,7 @@ OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -93,8 +91,8 @@ CPP = cpp -P -traditional -Wcomment
 CC  = mpixlc_r
 #
 CPPFLAGS_SURFEX    =
-#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION  -DMNH_SP4 -DMNH_MPI_ISEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_BSEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+#CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_ISEND
+CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_BSEND
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DLINUX  -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAMAX1=MAX -DMNH -DSFX_MNH
diff --git a/src/Rules.BGQ.mk b/src/Rules.BGQ.mk
index bf050c31748cb66ff2c3db86fea862ed9c496a08..79f9363bd0dcb0e67e1fcf720242c3580f6b77d4 100644
--- a/src/Rules.BGQ.mk
+++ b/src/Rules.BGQ.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -39,10 +39,8 @@ OPT_BASE_I4       := $(OPT_BASE) $(OPT_I4)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE         += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
 OPT_BASE         += $(OPT_I4)
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -142,8 +140,8 @@ CPP = cpp -P -traditional -Wcomment
 
 #
 CPPFLAGS_SURFEX    =
-#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_ISEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SP4 -DMNH_MPI_BSEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) -DSNGL=REAL
+#CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_ISEND
+CPPFLAGS_SURCOUCHE = -DMNH_SP4 -DMNH_MPI_BSEND -DSNGL=REAL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DLINUX  -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAMAX1=MAX -DMNH -DSFX_MNH
diff --git a/src/Rules.LXNAGfor.mk b/src/Rules.LXNAGfor.mk
index b25f67d91923e4d248542858f80673edcbea419d..318cb4ba34a70725def6ace645a075ffe1ba2494 100644
--- a/src/Rules.LXNAGfor.mk
+++ b/src/Rules.LXNAGfor.mk
@@ -23,16 +23,13 @@ MNH_INT   ?=4
 #
 ifneq "$(MNH_REAL)" "4"
 OPT_BASE           += $(OPT_R8)
-CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
 OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -71,7 +68,7 @@ FX90FLAGS     =  $(OPT) -fixed
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
diff --git a/src/Rules.LXarm.mk b/src/Rules.LXarm.mk
index ecaf40945e8b125f5a544fcc87f3e1b8fec2c8db..c9b81e0b274aaca96506cf445314a8873526a9c1 100644
--- a/src/Rules.LXarm.mk
+++ b/src/Rules.LXarm.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -33,16 +33,13 @@ MNH_INT   ?=4
 #
 ifneq "$(MNH_REAL)" "4"
 OPT_BASE           += $(OPT_R8)
-CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
 OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -87,7 +84,7 @@ FX90FLAGS     =  $(OPT)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
diff --git a/src/Rules.LXcray.mk b/src/Rules.LXcray.mk
index be29f2b68595d933fa8b02ea9b1091507c433969..4e4b34b870f3dc1def5c79d66e45cc772b4b1049 100644
--- a/src/Rules.LXcray.mk
+++ b/src/Rules.LXcray.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -28,9 +28,7 @@ ifeq "$(MNH_INT)" "8"
 #OPT_BASE         += $(OPT_I8)
 OPT_BASE           = -sdefault64 -hpic -em -ef
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -83,7 +81,7 @@ LDFLAGS    =   -Wl,-warn-once $(PAR) $(OPT_BASE)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) 
+CPPFLAGS_SURCOUCHE = -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH 
diff --git a/src/Rules.LXg95.mk b/src/Rules.LXg95.mk
index d4ee573a578dd6744973bb1e26c023eab79f413d..7a1add9c315f623c9f06569b07761c4f92b1953a 100644
--- a/src/Rules.LXg95.mk
+++ b/src/Rules.LXg95.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -23,9 +23,7 @@ OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -64,7 +62,7 @@ CPP = cpp -P -traditional -Wcomment
 #
 LFI_INT  ?=4
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_MPI_BSEND -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX  -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAINT=INT -DAMOD=MOD -DMNH -DSFX_MNH
diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk
index cbe49e42eff42db8c3ec05bc9588d96170182c30..fdb1257865b00cf7563e691d92c8014b8ffec455 100644
--- a/src/Rules.LXgfortran.mk
+++ b/src/Rules.LXgfortran.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -30,16 +30,13 @@ MNH_INT   ?=4
 #
 ifneq "$(MNH_REAL)" "4"
 OPT_BASE           += $(OPT_R8)
-CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
 OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -79,7 +76,7 @@ FX90FLAGS     =  $(OPT)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk
index 23f4c3f7df4d0c7a95c33a5208fcbec8ca070d8d..e89ea60a34fab24e948a7040ae516eb254a807aa 100644
--- a/src/Rules.LXifort.mk
+++ b/src/Rules.LXifort.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -24,16 +24,13 @@ MNH_INT   ?=4
 #
 ifneq "$(MNH_REAL)" "4"
 OPT_BASE           += $(OPT_R8)
-CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
 OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -176,7 +173,7 @@ LDFLAGS    =   -Wl,-warn-once $(PAR) -Wl,-rpath=$(LD_LIBRARY_PATH) $(OPT_BASE)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH 
diff --git a/src/Rules.LXpathf95.mk b/src/Rules.LXpathf95.mk
index cc0d1aa43f16cb6228b7598a690e22bd283dc7df..d116ac262a9690d95c1d54cbc1119b73d111737a 100644
--- a/src/Rules.LXpathf95.mk
+++ b/src/Rules.LXpathf95.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -42,7 +42,7 @@ LDFLAGS   =  -Wl,-noinhibit-exec  -Wl,-warn-once
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_MPI_BSEND -DDEV_NULL
+CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND -DDEV_NULL
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX
 CPPFLAGS_MNH       = -DAINT=INT -DAMOD=MOD -DMNH -DSFX_MNH
diff --git a/src/Rules.LXpgi.mk b/src/Rules.LXpgi.mk
index 0a1fc76d781fd2ebe0e1efc850cfee758035b49b..3b50623706d93a6c5cb5738fddfd6886b6ed4602 100644
--- a/src/Rules.LXpgi.mk
+++ b/src/Rules.LXpgi.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -33,16 +33,13 @@ MNH_INT   ?=4
 #
 ifneq "$(MNH_REAL)" "4"
 OPT_BASE           += $(OPT_R8)
-CPPFLAGS_SURCOUCHE += -DMNH_MPI_DOUBLE_PRECISION
 endif
 #
 OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -99,7 +96,7 @@ CPP = cpp -P -traditional -Wcomment
 #
 
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE +=
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DMNH_PGI -DSFX_MNH
diff --git a/src/Rules.SX8.mk b/src/Rules.SX8.mk
index c3c00c85472744d80a01da2ece0a4ce60d5d0a7a..669582ee8fde48898ce5487f9c76a4ab90ee61dc 100644
--- a/src/Rules.SX8.mk
+++ b/src/Rules.SX8.mk
@@ -1,6 +1,6 @@
-#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.
 ##########################################################
 #                                                        #
@@ -29,9 +29,7 @@ OPT_BASE_I4       := $(OPT_BASE)
 ifeq "$(MNH_INT)" "8"
 OPT_BASE          += $(OPT_I8)
 LFI_INT           ?=8
-MNH_MPI_RANK_KIND ?=8
 else
-MNH_MPI_RANK_KIND ?=4
 LFI_INT           ?=4
 endif
 #
@@ -86,7 +84,7 @@ CPP = cpp -P -traditional -Wcomment
 AR=sxar
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_SX5 -DMNH_MPI_BSEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE = -DMNH_SX5 -DMNH_MPI_BSEND
 CPPFLAGS_RAD       =
 CPPFLAGS_NEWLFI    = -DMNH_SX5 -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
diff --git a/src/SURFEX/ini_csts.F90 b/src/SURFEX/ini_csts.F90
index 39462a53aff2b787418c5341955ebce5e3e22abc..a17a39e36b87555f47b3de7347072396f751e4c4 100644
--- a/src/SURFEX/ini_csts.F90
+++ b/src/SURFEX/ini_csts.F90
@@ -54,6 +54,9 @@
 !              ------------
 !
 USE MODD_CSTS
+#ifdef SFX_MNH
+USE MODD_PRECISION, ONLY: MNHREAL
+#endif
 !
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
@@ -78,10 +81,12 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('INI_CSTS',0,ZHOOK_HANDLE)
 
 #ifdef SFX_MNH
-#ifdef MNH_MPI_DOUBLE_PRECISION
-XSURF_TINY    = 1.0e-80
-#else
+#if (MNH_REAL == 8)
+XSURF_TINY    = 1.0e-80_MNHREAL
+#elif (MNH_REAL == 4)
 XSURF_TINY    = TINY    (XSURF_TINY    )
+#else
+#error "Invalid MNH_REAL"
 #endif
 #else
 XSURF_TINY    = 1.0e-80
diff --git a/src/SURFEX/modd_surf_par.F90 b/src/SURFEX/modd_surf_par.F90
index 2947cd3b09848242c0076ed458ca118df77cdd36..f38334f2d6003bdf0e8379982f11d71094f4bd59 100644
--- a/src/SURFEX/modd_surf_par.F90
+++ b/src/SURFEX/modd_surf_par.F90
@@ -33,6 +33,9 @@ MODULE MODD_SURF_PAR
 !*       0.   DECLARATIONS
 !             ------------
 !
+#ifdef SFX_MNH
+USE MODD_PRECISION, ONLY: MNHREAL
+#endif
 !
 IMPLICIT NONE
 !
@@ -43,10 +46,12 @@ INTEGER :: NBUGFIX   ! bugfix number of this version
 #ifndef SFX_MNH
 REAL,    PARAMETER :: XUNDEF = 1.E+20
 #else 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-REAL,    PARAMETER :: XUNDEF = 1.E+20! HUGE(XUNDEF) ! Z'7FFFFFFFFFFFFFFF' !  undefined value
+#if (MNH_REAL == 8)
+REAL,    PARAMETER :: XUNDEF = 1.E+20_MNHREAL ! HUGE(XUNDEF) ! Z'7FFFFFFFFFFFFFFF' !  undefined value
+#elif (MNH_REAL == 4)
+REAL,    PARAMETER :: XUNDEF = 1.E+9_MNHREAL  ! HUGE(XUNDEF) ! Z'7FBFFFFF' ! undefined value
 #else
-REAL,    PARAMETER :: XUNDEF = 1.E+9 ! HUGE(XUNDEF) ! Z'7FBFFFFF' ! undefined value
+#error "Invalid MNH_REAL"
 #endif
 #endif
 INTEGER, PARAMETER :: NUNDEF = 1E+9   !  HUGE(NUNDEF) !  undefined value
diff --git a/src/SURFEX/mode_gridtype_conf_proj.F90 b/src/SURFEX/mode_gridtype_conf_proj.F90
index ef34076286ae63ed2a5c7583305d2049e8cebae7..4e88934141e9499651e690231f105ef169a1cd4d 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
 !