diff --git a/A-INSTALL b/A-INSTALL
index cdfa1b9e5d4a6b8c29d0af113c6ddc0bd3faad58..7d0d2ad77ff178889189042e7a7db047c77c9946 100644
--- a/A-INSTALL
+++ b/A-INSTALL
@@ -1,8 +1,8 @@
 #
 # Version of PACKAGE MESONH "Open distribution"
-#              PACK-MNH-V5-4-1
-#              DATE : 20/07/2018
-#              VERSION : MESONH MASDEV5_4 + BUG-1
+#              PACK-MNH-V5-4-2
+#              DATE : 03/04/2019
+#              VERSION : MESONH MASDEV5_4 + BUG-2
 #
 #  MAP
 #
@@ -74,21 +74,21 @@
 # ==========================================
 #
 # With your preferred web browser go to the MESONH WEB SITE
-# 
+#
 #  http://mesonh.aero.obs-mip.fr/mesonh
 #     ---> Download
 #
 # or directly
 #
-# http://mesonh.aero.obs-mip.fr/mesonh/dir_open/dir_MESONH/MNH-V5-4-1.tar.gz
+# http://mesonh.aero.obs-mip.fr/mesonh/dir_open/dir_MESONH/MNH-V5-4-2.tar.gz
 #
-# Then untar the file "PACK-MNH-V5-4-1.tar.gz" where you want to.
+# Then untar the file "MNH-V5-4-2.tar.gz" where you want to.
 # For example, in your home directory:
 #
- 
+
 cd ~
-tar xvfz PACK-MNH-V5-4-1.tar.gz
-      
+tar xvfz MNH-V5-4-2.tar.gz
+
 #
 #  Process now to the chapter to configure the MesoNH package.
 #
@@ -121,7 +121,7 @@ git --version
 git lfs install
 
 #      that will set up some filters under the name "lfs" in the global Git
-#      config file ($HOME/.gitconfig) 
+#      config file ($HOME/.gitconfig)
 #
 #    b) Before cloning
 #    -----------------
@@ -167,10 +167,10 @@ git config --global http.sslverify false
 # Finally you can clone the Meso-NH Git repository with the following command:
 #
 
-git lfs clone anongit@anongit_mesonh:/gitrepos/MNH-git_open_source-lfs.git -b MNH-54-branch MNH-V5-4-1
+git lfs clone anongit@anongit_mesonh:/gitrepos/MNH-git_open_source-lfs.git -b MNH-54-branch MNH-V5-4-2
 
 #
-# that will create the MNH-V5-4-1 directory containing a clone (copy) of the
+# that will create the MNH-V5-4-2 directory containing a clone (copy) of the
 # Meso-NH package on the remote developpement branch MNH-54-branch
 #
 #
@@ -180,34 +180,34 @@ git lfs clone anongit@anongit_mesonh:/gitrepos/MNH-git_open_source-lfs.git -b MN
 # Once the repository is cloned, it's better for you to checkout your own branch
 # (by default, you are on HEAD of the MNH-54-branch development branch  ).
 #
-# To create your local branch corresponding to the V5-4-1 version, type:
+# To create your local branch corresponding to the V5-4-2 version, type:
 #
 
-cd MNH-V5-4-1
-git checkout -b MYB-MNH-V5-4-1 PACK-MNH-V5-4-1
+cd MNH-V5-4-2
+git checkout -b MYB-MNH-V5-4-2 PACK-MNH-V5-4-2
 
 #
-# MYB-MNH-V5-4-1 is the name of the local branch you created
+# MYB-MNH-V5-4-2 is the name of the local branch you created
 # and
-# PACK-MNH-V5-4-1 is the remote/origin tag on which it is based.
+# PACK-MNH-V5-4-2 is the remote/origin tag on which it is based.
 #
 # The advantage of this way of downloading the package is that in the future
 # you could check/update quickly differences with the new version of the
 # package without having to download entirely the full package.
 #
-#  Suppose that a new version, for example "PACK-MNH-V5-4-1", is announced.
+#  Suppose that a new version, for example "PACK-MNH-V5-4-2", is announced.
 #
 #  To see the differences with your working copy, do:
 #
 
 git fetch
-git diff HEAD PACK-MNH-V5-4-1
+git diff HEAD PACK-MNH-V5-4-2
 
 #
 #  To go to the new version, you can, for example, create a new local branch:
 #
 
-git checkout -b MYB-MNH-V5-4-1 PACK-MNH-V5-4-1
+git checkout -b MYB-MNH-V5-4-2 PACK-MNH-V5-4-2
 
 #
 # At any time, you can also check for "uptodate" changes in the Git branch
@@ -217,7 +217,7 @@ git checkout -b MYB-MNH-V5-4-1 PACK-MNH-V5-4-1
 
 git fetch
 git diff HEAD MNH-54-branch
-  
+
 #
 # And, test this development (not yet official) version by going to this branch:
 #
@@ -253,7 +253,7 @@ git clone anongit@anongit_mesonh:/gitrepos/MNH-DOC.git
 #    use the "./configure" script like this 
 #
 
-cd ~/MNH-V5-4-1/src
+cd ~/MNH-V5-4-2/src
 ./configure
 . ../conf/profile_mesonh
 
@@ -261,14 +261,20 @@ cd ~/MNH-V5-4-1/src
 #    this will create a configuration file "profile_mesonh" with
 #    an extension reflecting the different "choices" made automatically
 #    to match the computer on which you want to install MESONH
-#   
+# 
 #    WARNING :
 #    =========
-#    On GENCI & ECMWF & METEO/CNRM  computers, the './configure' is tuned to 
+#    On GENCI & ECMWF & METEO/CNRM & METEO/DSI  computers, the './configure' is tuned to 
 #    identify the computer on which the command is used
 #    so the good compiler, MPI & netCDF libraries,... 
 #    are automatically chosen
 # 
+#    To install this version on one of these machines, go to the chapter
+#
+#    => VI) COMPILING/INSTALLING ON GENCI & ECMWF & METEO COMPUTERS
+#
+#    else follow the guidelines below.
+#
 #    /!\ This is not the case in your "own" personal Linux computer ...
 #    So is up to you to set the ARCH variable correctly
 #    ARCH     = Fortran compiler to use,
@@ -298,7 +304,7 @@ export OPTLEVEL=O2         # Compile in O2, 4 times faster then DEBUG, but less
 
 #    and then source/load the new generate file
 
-. ../conf/profile_mesonh.LXifort.MNH-V5-4-1.MPIAUTO.O2
+. ../conf/profile_mesonh.LXifort.MNH-V5-4-2.MPIAUTO.O2
 
 #
 #  REM: 
@@ -323,7 +329,7 @@ export OPTLEVEL=O2         # Compile in O2, 4 times faster then DEBUG, but less
 # go to the directory  "src"
 #
 
-cd  ~/MNH-V5-4-1/src
+cd  ~/MNH-V5-4-2/src
 
 #
 # if you have not already configured your MESONH environment
@@ -488,7 +494,7 @@ export VER_USER=MY_MODIF
 #
 # as before load it & and compile with the command "make user"
 
-. ../conf/profile_mesnh...${VER_USER}...
+. ../conf/profile_mesonh...${VER_USER}...
 
 make user
 
@@ -550,7 +556,7 @@ make examples
 # 
 
 cd $WORKDIR
-cd MNH-V5-4-1/src
+cd MNH-V5-4-2/src
 
 ./configure
  
@@ -611,21 +617,63 @@ export ARCH=LXifort
 
 ...
 
-création du fichier -->  ../conf/profile_mesonh-LXifortI4-MNH-V5-4-1-MPICRAY-O2
+creation du fichier -->  ../conf/profile_mesonh-LXifortI4-MNH-V5-4-2-MPICRAY-O2
 
-# And for the compilation & example job , switch the ARCH variable to LXiort :
+# And for the compilation & example job , switch the ARCH variable to LXifort :
 
 vi  job_make_mesonh_CRAY_cca(job_make_examples_CRAY_cca)
 
 ARCH=LXifort
 #ARCH=LXcray # this is the default one
-. ../conf/profile_mesonh-${ARCH}I4-MNH-V5-4-1-MPICRAY-O2
+. ../conf/profile_mesonh-${ARCH}I4-MNH-V5-4-2-MPICRAY-O2
+
+#
+#   - At Meteo-France DSI on beaufix (or prolix)
+#
+#  to install the whole package on your "$HOME" directory
+#  untar the file "PACK-MNH-V5-4-2.tar.gz" from its location :
 
+cd ~
+tar xvf $MESONH/pack_MNH-V5-4-2.tar.gz
+
+#  run the "./configure" command :
 
+cd MNH-V5-4-2/src
+./configure
 
 #
-#   EXAMPLES ON GENCI & ECMWF PLATFORMS
-#   ====================================
+#   Due to limitation in time & memory on interactive connection
+#   then compile the MESONH PACKAGE in batch mode with the job_make_mesonh_BullX file :
+
+sbatch   job_make_mesonh_BullX
+
+#   This job does : gmake -j 4
+#   then : make installmaster
+
+#   To run basic KTEST examples :
+
+sbatch   job_make_examples_BullX
+
+#   Step-2 : configure/compiling with VER_USER=...
+# ----------------------------------------------
+#  In a new session set the variable "VER_USER" with the name of your "USER VERSION",
+#  and run again the "./configure" command
+#
+
+export VER_USER=MY_MODIF
+./configure
+
+# this will regenerate the "profile-mesonh" file and a copy
+# of this with the extent  "profile_mesonh...${VER_USER)..."
+#
+#   in job_make_mesonh_user_BullX insert " export VER_USER=MY_MODIF "
+#   then submit in batch mode
+
+sbatch  job_make_mesonh_user_BullX
+
+#
+#   EXAMPLES ON GENCI & ECMWF PLATFORMS & METEO COMPUTERS
+#   =====================================================
 #
 #  - At IDRIS
 #
@@ -656,6 +704,12 @@ make examples
 
 llsubmit  job_make_examples_CRAY_cca
 
+#
+#   - At Meteo-France DSI on beaufix or prolix
+#
+
+sbatch   job_make_examples_BullX
+
 #
 # That's all for the basic INSTALLATION of the "MESONH PACKAGE"
 #  
@@ -710,7 +764,7 @@ scandollar
 
 ## OUTPUT ::
 
->#  read default config file :: --->  CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-1/conf/post/confdollar_aeropc_default
+>#  read default config file :: --->  CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-2/conf/post/confdollar_aeropc_default
 >#
 >#  read    user config file :: --->  CONFIG=confdollar
 >#
@@ -732,7 +786,7 @@ scandollar 0*
 
 ## OUTPUT ::
 >#
->#  read default config file :: --->  CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-1/conf/post/confdollar_aeropc_default
+>#  read default config file :: --->  CONF_DOLLAR=/home/escj/DEV64/PACK-MNH-V5-4-2/conf/post/confdollar_aeropc_default
 >#
 >#  read    user config file :: --->  CONFIG=confdollar
 >#
@@ -806,22 +860,22 @@ cp -R  007_16janvier_scandollar /.../your_directory
 #
 # use this "profile_mesonh" :
 
-.  /home/rech/mnh/rmnh007/DEV/MNH-V5-4-1/conf/profile_mesonh-SX8-MNH-V5-4-1-MPIAUTO-O4
+.  /home/rech/mnh/rmnh007/DEV/MNH-V5-4-2/conf/profile_mesonh-SX8-MNH-V5-4-2-MPIAUTO-O4
 
 # And the examples are here ( link to my $WORKDIR in actually )  
 
-/home/rech/mnh/rmnh007/DEV/MNH-V5-4-1/MY_RUN/KTEST/007_16janvier_scandollar
+/home/rech/mnh/rmnh007/DEV/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar
 
 #
 #  On vargas
 #  ---------
 #  use this "profile_mesonh" :
 
-. /workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-1/conf/profile_mesonh-AIX64-MNH-V5-4-1-MPIAUTO-O2
+. /workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-2/conf/profile_mesonh-AIX64-MNH-V5-4-2-MPIAUTO-O2
 
 # and examples here :
 
-/workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-1/MY_RUN/KTEST/007_16janvier_scandollar
+/workgpfs/rech/mnh/rmnh007/DEV/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar
 
 # 
 #  - At CINES on JADE :
@@ -829,11 +883,11 @@ cp -R  007_16janvier_scandollar /.../your_directory
 #
 # use 
 
-. /work/escobar/DEV/MNH-V5-4-1/conf/profile_mesonh-LXifort-MNH-V5-4-1-MPIICE-O2
+. /work/escobar/DEV/MNH-V5-4-2/conf/profile_mesonh-LXifort-MNH-V5-4-2-MPIICE-O2
 
 # and the exemples
 
-/work/escobar/DEV/MNH-V5-4-1/MY_RUN/KTEST/007_16janvier_scandollar
+/work/escobar/DEV/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar
 
 #
 #  - At ECMWF on cxa :
@@ -841,11 +895,11 @@ cp -R  007_16janvier_scandollar /.../your_directory
 #
 # use
 
-. /c1a/ms_perm/au5/MNH-V5-4-1/conf/profile_mesonh-AIX64-MNH-V5-4-1-MPIAUTO-O2
+. /c1a/ms_perm/au5/MNH-V5-4-2/conf/profile_mesonh-AIX64-MNH-V5-4-2-MPIAUTO-O2
 
 # and the examples
 
-/c1a/ms_perm/au5/MNH-V5-4-1/MY_RUN/KTEST/007_16janvier_scandollar
+/c1a/ms_perm/au5/MNH-V5-4-2/MY_RUN/KTEST/007_16janvier_scandollar
 
 
 #
diff --git a/LIBTOOLS/lib/COMPRESS/src/compress.f90 b/LIBTOOLS/lib/COMPRESS/src/compress.f90
index 2bc2dfaf3afcef1c5dadadcd0053d18659904d51..950fdfb1739651d8208cb1e4b9ad24b2772da7cd 100644
--- a/LIBTOOLS/lib/COMPRESS/src/compress.f90
+++ b/LIBTOOLS/lib/COMPRESS/src/compress.f90
@@ -1,15 +1,13 @@
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
+!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.
 !-----------------------------------------------------------------
 SUBROUTINE COMPRESS_FIELD(XTAB,KX,KY,KNBTOT,KNBUSE)
 USE MODD_COMPPAR
 USE MODE_SEARCHGRP
 
-#ifdef NAGf95
 USE,INTRINSIC :: IEEE_ARITHMETIC
-#endif
 
 IMPLICIT NONE 
 
@@ -38,17 +36,21 @@ INTEGER :: IEXTCOD
 CHARACTER(LEN=8),PARAMETER :: KEYWORD='COMPRESS'
 REAL,DIMENSION(KNBTOT) :: XWORKTAB
 LOGICAL :: LUPREAL,LNAN
-#ifndef NAGf95
-LOGICAL, EXTERNAL :: IEEE_IS_NAN
-#endif
+logical :: gnansupport
 
 ILEVNBELT = KX*KY
 LUPREAL = .FALSE.
 LNAN    = .FALSE.
 
+if ( IEEE_SUPPORT_NAN( xtab(1)) ) then
+  gnansupport=.true.
+else
+  gnansupport=.false.
+end if
+
 ! Check for NAN and change Upper and Lower bound according to 32bits real limits.
 DO JI=1,KNBTOT
-  IF (IEEE_IS_NAN(XTAB(JI))) THEN 
+  IF ( gnansupport .and. IEEE_IS_NAN(XTAB(JI)) ) THEN
     XTAB(JI)=0.
     LNAN = .TRUE.
   ELSE IF (ABS(XTAB(JI)) > HUGE(1.0_4)) THEN
diff --git a/LIBTOOLS/lib/COMPRESS/src/ieee_is_nan.c b/LIBTOOLS/lib/COMPRESS/src/ieee_is_nan.c
deleted file mode 100644
index f8682fbdba4e1ae2c55900c9127279a6de445fb9..0000000000000000000000000000000000000000
--- a/LIBTOOLS/lib/COMPRESS/src/ieee_is_nan.c
+++ /dev/null
@@ -1,11 +0,0 @@
-#include <math.h>
-
-#ifdef NO_UNDERSCORE
-# define IEEE_IS_NAN ieee_is_nan
-#else
-# define IEEE_IS_NAN ieee_is_nan_
-#endif
-
-int IEEE_IS_NAN(double *x){
-    return isnan(*x);
-}
diff --git a/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90 b/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
index 3e0a8b2d75ab14e94b8bb20b0cddcc38ea04fff9..bb8534b6dedc4aa9b89775f7106dd6a45efef4ca 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
@@ -1,21 +1,22 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 program LFI2CDF
   USE MODD_CONF,          ONLY: CPROGRAM
   USE MODD_CONFZ,         ONLY: NB_PROCIO_R
   USE MODD_DIM_n,         ONLY: NIMAX_ll, NJMAX_ll, NKMAX
-  USE MODD_IO_ll,         ONLY: LVERB_OUTLST, LVERB_STDOUT, NIO_ABORT_LEVEL, NIO_VERB, NGEN_ABORT_LEVEL, NGEN_VERB
+  USE MODD_IO,            ONLY: LVERB_OUTLST, LVERB_STDOUT, NIO_ABORT_LEVEL, NIO_VERB, NGEN_ABORT_LEVEL, NGEN_VERB
   USE MODD_PARAMETERS,    ONLY: JPHEXT, JPVEXT
   USE MODD_TIMEZ,         ONLY: TIMEZ
 
-  USE MODE_IO_ll,         ONLY: INITIO_ll, SET_CONFIO_ll
   USE MODE_FIELD,         ONLY: INI_FIELD_LIST
+  USE MODE_IO,            ONLY: IO_Init, IO_Config_set
   USE mode_options
   USE MODE_SPLITTINGZ_ll, ONLY: INI_PARAZ_ll
   USE mode_util
+
   USE MODI_VERSION
 
   USE MODN_CONFIO, ONLY: LCDF4, LLFIOUT, LLFIREAD
@@ -43,7 +44,7 @@ program LFI2CDF
 
   CPROGRAM = 'LFICDF'
 
-  CALL INITIO_ll()
+  CALL IO_Init()
   CALL VERSION
   CALL INI_CST
 
@@ -73,17 +74,17 @@ program LFI2CDF
      LCDF4    = .TRUE.
      LLFIOUT  = .FALSE.
      LLFIREAD = .TRUE.
-     CALL SET_CONFIO_ll()
+     CALL IO_Config_set()
   ELSE IF (runmode == MODECDF2CDF) THEN
      LCDF4    = .TRUE.
      LLFIOUT  = .FALSE.
      LLFIREAD = .FALSE.
-     CALL SET_CONFIO_ll()
+     CALL IO_Config_set()
   ELSE
      LCDF4    = .TRUE.
      LLFIOUT  = .TRUE.
      LLFIREAD = .FALSE.
-     CALL SET_CONFIO_ll()
+     CALL IO_Config_set()
   END IF
 
   CALL INI_FIELD_LIST(1)
diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
index 0f55191e7867f722116c7cbe48987c428c26bdad..7a4d853e97417d32893df6b8ba3d94a9d8af2e8a 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
@@ -1,16 +1,22 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 10/04/2019: use IO_Err_handle_nc4 to handle netCDF errors
+!-----------------------------------------------------------------
 MODULE mode_util
-  USE MODD_IO_ll,  ONLY: TFILE_ELT
-  USE MODD_NETCDF, ONLY: DIMCDF, IDCDF_KIND
+  USE MODD_IO,         ONLY: TFILE_ELT
+  USE MODD_NETCDF,     ONLY: DIMCDF, CDFINT
   USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH, NMNHNAMELGTMAX
+  use modd_precision,  only: LFIINT
 
   USE MODE_FIELD
-  USE MODE_FMREAD
-  USE MODE_FMWRIT
+  USE MODE_IO_FIELD_READ
+  USE MODE_IO_FIELD_WRITE
+  use mode_io_tools_nc4,   only: IO_Err_handle_nc4
 
   USE mode_options
 
@@ -45,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
 
@@ -56,7 +62,7 @@ CONTAINS
     USE MODD_DIM_n,      ONLY: NIMAX_ll, NJMAX_ll, NKMAX
     USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT, NGRIDUNKNOWN
 
-    use mode_io_tools_nc4, only: io_guess_dimids_nc4
+    use mode_io_tools_nc4, only: IO_Dimids_guess_nc4
 
     TYPE(TFILE_ELT),DIMENSION(:),         INTENT(IN)  :: infiles
     TYPE(TFILE_ELT),DIMENSION(:),         INTENT(IN)  :: outfiles
@@ -82,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
@@ -229,17 +235,18 @@ CONTAINS
                   tpreclist(tpreclist(ji)%tgt)%LSPLIT = .true.
                 END IF
               ELSE
-                CALL HANDLE_ERR(status,__LINE__)
+                if ( status /= NF90_NOERR ) &
+                  call IO_Err_handle_nc4( status, 'parse_infiles', 'NF90_INQ_VARID', trim(yrecfm)//'0001' )
               END IF
             ELSE IF (status /= NF90_NOERR) THEN
-              CALL HANDLE_ERR(status,__LINE__)
+              call IO_Err_handle_nc4( status, 'parse_infiles', 'NF90_INQ_VARID', trim(yrecfm) )
             ELSE
               kcdf_id2 = kcdf_id
             ENDIF
             !
             IF (status == NF90_NOERR) THEN
               tpreclist(ji)%found = .true.
-              CALL IO_GET_METADATA_NC4(kcdf_id2,var_id,tpreclist(ji))
+              CALL IO_Metadata_get_nc4(kcdf_id2,var_id,tpreclist(ji))
             END IF
           END IF
 
@@ -329,9 +336,10 @@ END DO
          DO ji=1,nbvar_infile
            var_id = ji
            status = NF90_INQUIRE_VARIABLE(kcdf_id,var_id, name = tpreclist(ji)%name)
-           IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__)
+           if ( status /= NF90_NOERR ) &
+             call IO_Err_handle_nc4( status, 'parse_infiles', 'NF90_INQUIRE_VARIABLE', tpreclist(ji)%name )
            tpreclist(ji)%found  = .TRUE.
-           CALL IO_GET_METADATA_NC4(kcdf_id,var_id,tpreclist(ji))
+           CALL IO_Metadata_get_nc4(kcdf_id,var_id,tpreclist(ji))
          END DO
        END IF
 
@@ -372,13 +380,13 @@ END DO
           ! Determine TDIMS
           IF (runmode==MODELFI2CDF) THEN
             ALLOCATE(tpreclist(ji)%TDIMS(tpreclist(ji)%TFIELD%NDIMS))
-            CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+            CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                      tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
           ELSE !If we read netCDF4, we already have all necessary data
             !Special case for EMIS (only the first band is read/written) -> NDIMS reduced to 2
             if(tpreclist(ji)%TFIELD%CMNHNAME=="EMIS") tpreclist(ji)%TFIELD%NDIMS = 2
 
-            CALL IO_FILL_DIMS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
+            CALL IO_Dims_fill_nc4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
           ENDIF
           IF (IRESP/=0) THEN
             CALL PRINT_MSG(NVERB_WARNING,'IO','parse_infiles','can not guess dimensions for '//tpreclist(ji)%TFIELD%CMNHNAME// &
@@ -406,14 +414,14 @@ END DO
               ! Determine TDIMS
               CALL PRINT_MSG(NVERB_DEBUG,'IO','parse_infiles',tpreclist(ji)%TFIELD%CMNHNAME//': try 3D')
               tpreclist(ji)%TFIELD%NDIMS = 3 !Try with 3D
-              CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+              CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                       tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
               !
               IF (IRESP/=0 .OR. tpreclist(ji)%TDIMS(3)%LEN==1) THEN
                 CALL PRINT_MSG(NVERB_DEBUG,'IO','parse_infiles',tpreclist(ji)%TFIELD%CMNHNAME//': try 2D')
                 !Try again with 2D
                 tpreclist(ji)%TFIELD%NDIMS = 2
-                CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+                CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                         tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
               END IF
               !
@@ -422,7 +430,7 @@ END DO
                 !Try again with 1D
                 tpreclist(ji)%TFIELD%NDIMS = 1
                 tpreclist(ji)%TFIELD%CDIR = '--' !Assumption...
-                CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+                CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                         tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
               END IF
               !
@@ -471,7 +479,7 @@ END DO
               tpreclist(ji)%TFIELD%CDIR  = 'XY' !Assumption
             END IF
 
-            CALL IO_FILL_DIMS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
+            CALL IO_Dims_fill_nc4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
 
             IF (tpreclist(ji)%NDIMS_FILE>0) THEN
               IF (tpreclist(ji)%CDIMNAMES_FILE(tpreclist(ji)%NDIMS_FILE)=='time') THEN
@@ -608,19 +616,10 @@ END DO
     END IF !nbvar_calc>0
 
   END SUBROUTINE parse_infiles
-  
-  SUBROUTINE HANDLE_ERR(status,line)
-    INTEGER :: status,line
-
-    IF (status /= NF90_NOERR) THEN
-       PRINT *, 'line ',line,': ',NF90_STRERROR(status)
-           STOP
-    END IF
-  END SUBROUTINE HANDLE_ERR
 
   SUBROUTINE def_ncdf(infiles,outfiles,KNFILES_OUT)
     USE MODD_CONF,   ONLY: NMNHVERSION
-    use mode_io_write_nc4, only: io_write_header_nc4
+    use mode_io_write_nc4, only: IO_Header_write_nc4
 
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(IN) :: infiles
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(IN) :: outfiles
@@ -631,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')
@@ -654,7 +653,7 @@ END DO
       DO ji = 1,KNFILES_OUT
         kcdf_id = outfiles(ji)%TFILE%NNCID
         status = NF90_PUT_ATT(kcdf_id,NF90_GLOBAL,'history',YHISTORY)
-        IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__)
+        if ( status /= NF90_NOERR ) call IO_Err_handle_nc4( status, 'def_ncdf', 'NF90_PUT_ATT', 'history' )
       END DO
     END IF
 
@@ -663,11 +662,11 @@ END DO
       kcdf_id = outfiles(ji)%TFILE%NNCID
 
       ! global attributes
-      CALL IO_WRITE_HEADER_NC4(outfiles(ji)%TFILE)
+      CALL IO_Header_write_nc4(outfiles(ji)%TFILE)
       !
       WRITE(YMNHVERSION,"( I0,'.',I0,'.',I0 )" ) NMNHVERSION(1),NMNHVERSION(2),NMNHVERSION(3)
       status = NF90_PUT_ATT(kcdf_id,NF90_GLOBAL,'lfi2cdf_version',TRIM(YMNHVERSION))
-      IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__)
+      if ( status /= NF90_NOERR ) call IO_Err_handle_nc4( status, 'def_ncdf', 'NF90_PUT_ATT', 'lfi2cdf_version' )
     END DO
 
   END SUBROUTINE def_ncdf
@@ -685,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
@@ -734,15 +733,15 @@ END DO
         CASE (0)
           ALLOCATE(ITAB1D(1))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB1D2(1))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D(1))
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D(1))
         CASE (1)
           ALLOCATE(ITAB1D(IDIMLEN(1)))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB1D2(IDIMLEN(1)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D)
         CASE (2)
           ALLOCATE(ITAB2D(IDIMLEN(1),IDIMLEN(2)))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB2D2(IDIMLEN(1),IDIMLEN(2)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
                          //TRIM(tpreclist(ISRC)%name)//' => ignored')
@@ -755,13 +754,13 @@ END DO
 
           SELECT CASE(IDIMS)
           CASE (0)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2(1))
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2(1))
             ITAB1D(1) = ITAB1D(1) + ITAB1D2(1)
           CASE (1)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2)
             ITAB1D(:) = ITAB1D(:) + ITAB1D2(:)
           CASE (2)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D2)
             ITAB2D(:,:) = ITAB2D(:,:) + ITAB2D2(:,:)
           END SELECT
         END DO
@@ -769,15 +768,15 @@ END DO
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
         SELECT CASE(IDIMS)
         CASE (0)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D(1))
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D(1))
           DEALLOCATE(ITAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB1D2)
         CASE (1)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D)
           DEALLOCATE(ITAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB1D2)
         CASE (2)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB2D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB2D)
           DEALLOCATE(ITAB2D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB2D2)
         END SELECT
@@ -790,15 +789,15 @@ END DO
         SELECT CASE(IDIMS)
         CASE (0)
           ALLOCATE(GTAB1D(1))
-          CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D(1))
+          CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D(1))
           tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D(1))
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D(1))
           DEALLOCATE(GTAB1D)
         CASE (1)
           ALLOCATE(GTAB1D(IDIMLEN(1)))
-          CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D)
+          CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D)
           tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D)
           DEALLOCATE(GTAB1D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
@@ -823,23 +822,23 @@ END DO
         CASE (0)
           ALLOCATE(XTAB1D(1))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB1D2(1))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D(1))
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D(1))
         CASE (1)
           ALLOCATE(XTAB1D(IDIMLEN(1)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB1D2(IDIMLEN(1)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D)
         CASE (2)
           ALLOCATE(XTAB2D(IDIMLEN(1),IDIMLEN(2)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB2D2(IDIMLEN(1),IDIMLEN(2)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D)
         CASE (3)
           ALLOCATE(XTAB3D(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB3D2(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D)
         CASE (4)
           ALLOCATE(XTAB4D(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3),IDIMLEN(4)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB4D2(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3),IDIMLEN(4)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
                          //TRIM(tpreclist(ISRC)%name)//' => ignored')
@@ -852,19 +851,19 @@ END DO
 
           SELECT CASE(IDIMS)
           CASE (0)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2(1))
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2(1))
             XTAB1D(1) = XTAB1D(1) + XTAB1D2(1)
           CASE (1)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2)
             XTAB1D(:) = XTAB1D(:) + XTAB1D2(:)
           CASE (2)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D2)
             XTAB2D(:,:) = XTAB2D(:,:) + XTAB2D2(:,:)
           CASE (3)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D2)
             XTAB3D(:,:,:) = XTAB3D(:,:,:) + XTAB3D2(:,:,:)
           CASE (4)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D2)
             XTAB4D(:,:,:,:) = XTAB4D(:,:,:,:) + XTAB4D2(:,:,:,:)
           END SELECT
         END DO
@@ -872,23 +871,23 @@ END DO
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
         SELECT CASE(IDIMS)
         CASE (0)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D(1))
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D(1))
           DEALLOCATE(XTAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB1D2)
         CASE (1)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D)
           DEALLOCATE(XTAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB1D2)
         CASE (2)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB2D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB2D)
           DEALLOCATE(XTAB2D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB2D2)
         CASE (3)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB3D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB3D)
           DEALLOCATE(XTAB3D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB3D2)
         CASE (4)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB4D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB4D)
           DEALLOCATE(XTAB4D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB4D2)
         END SELECT
@@ -905,9 +904,9 @@ END DO
 
         ALLOCATE(CHARACTER(LEN=tpreclist(ji)%NSIZE)::YTAB0D)
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_in(ji)
-        CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,YTAB0D)
+        CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,YTAB0D)
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-        CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,YTAB0D)
+        CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,YTAB0D)
         DEALLOCATE(YTAB0D)
 
 
@@ -920,9 +919,9 @@ END DO
           CYCLE
         END IF
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_in(ji)
-        CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD%CMNHNAME,TZDATE)
+        CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD%CMNHNAME,TZDATE)
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-        CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,TZDATE)
+        CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,TZDATE)
 
 
       CASE default
@@ -944,12 +943,12 @@ END DO
     USE MODD_DIM_n,         ONLY: NIMAX_ll, NJMAX_ll, NKMAX
     USE MODD_GRID,          ONLY: XBETA, XRPK, XLAT0, XLON0, XLATORI, XLONORI
     USE MODD_GRID_n,        ONLY: LSLEVE, XXHAT, XYHAT, XZHAT
-    USE MODD_IO_ll,         ONLY: LIOCDF4
+    USE MODD_IO,            ONLY: LIOCDF4
     USE MODD_PARAMETERS,    ONLY: JPHEXT
     USE MODD_PARAMETERS_ll, ONLY: JPHEXT_ll=>JPHEXT, JPVEXT_ll=>JPVEXT
     USE MODD_TIME_n,        ONLY: TDTCUR, TDTMOD
 
-    USE MODE_FM,               ONLY: IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
+    USE MODE_IO_FILE,          ONLY: IO_FILE_OPEN, IO_FILE_CLOSE
     USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
 
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(OUT) :: infiles
@@ -961,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')
@@ -977,17 +976,17 @@ END DO
        !
        ! NetCDF
        !
-       CALL IO_FILE_ADD2LIST(INFILES(1)%TFILE,HINFILE,'UNKNOWN','READ',HFORMAT='NETCDF4')
-       CALL IO_FILE_OPEN_ll(INFILES(1)%TFILE)
+       CALL IO_FILE_ADD2LIST(INFILES(1)%TFILE,HINFILE,'MNH','READ',HFORMAT='NETCDF4')
+       CALL IO_FILE_OPEN(INFILES(1)%TFILE)
 
        nbvar_infile = INFILES(1)%TFILE%NNCNAR
    ELSE
        !
        ! LFI
        !
-       CALL IO_FILE_ADD2LIST(INFILES(1)%TFILE,HINFILE,'UNKNOWN','READ', &
+       CALL IO_FILE_ADD2LIST(INFILES(1)%TFILE,HINFILE,'MNH','READ', &
                              HFORMAT='LFI',KLFIVERB=0)
-       CALL IO_FILE_OPEN_ll(INFILES(1)%TFILE)
+       CALL IO_FILE_OPEN(INFILES(1)%TFILE)
 
        ilu = INFILES(1)%TFILE%NLFIFLU
 
@@ -995,54 +994,54 @@ END DO
 
        IF (options(OPTLIST)%set) THEN
           CALL LFILAF(iresp,ilu,lfalse)
-          CALL IO_FILE_CLOSE_ll(INFILES(1)%TFILE)
+          CALL IO_FILE_CLOSE(INFILES(1)%TFILE)
           return
        END IF
    END IF
    !
-   !Read problem dimensions and some grid variables (needed to determine domain size and also by IO_FILE_OPEN_ll to create netCDF files)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'JPHEXT',JPHEXT)
+   !Read problem dimensions and some grid variables (needed to determine domain size and also by IO_FILE_OPEN to create netCDF files)
+   CALL IO_Field_read(INFILES(1)%TFILE,'JPHEXT',JPHEXT)
    JPHEXT_ll = JPHEXT
    JPVEXT_ll = JPVEXT
    !
    ALLOCATE(NIMAX_ll,NJMAX_ll,NKMAX)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'IMAX',NIMAX_ll)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'JMAX',NJMAX_ll)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'KMAX',NKMAX,IRESP2)
+   CALL IO_Field_read(INFILES(1)%TFILE,'IMAX',NIMAX_ll)
+   CALL IO_Field_read(INFILES(1)%TFILE,'JMAX',NJMAX_ll)
+   CALL IO_Field_read(INFILES(1)%TFILE,'KMAX',NKMAX,IRESP2)
    IF (IRESP2/=0) NKMAX = 0
    !
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'PROGRAM',CPROGRAM_ORIG)
+   CALL IO_Field_read(INFILES(1)%TFILE,'PROGRAM',CPROGRAM_ORIG)
    !
    ALLOCATE(CSTORAGE_TYPE)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
+   CALL IO_Field_read(INFILES(1)%TFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
    !
    ALLOCATE(XXHAT(NIMAX_ll+2*JPHEXT))
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'XHAT',XXHAT)
+   CALL IO_Field_read(INFILES(1)%TFILE,'XHAT',XXHAT)
    ALLOCATE(XYHAT(NJMAX_ll+2*JPHEXT))
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'YHAT',XYHAT)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'CARTESIAN',LCARTESIAN)
+   CALL IO_Field_read(INFILES(1)%TFILE,'YHAT',XYHAT)
+   CALL IO_Field_read(INFILES(1)%TFILE,'CARTESIAN',LCARTESIAN)
    !
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'LAT0',XLAT0)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'LON0',XLON0)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'BETA',XBETA)
+   CALL IO_Field_read(INFILES(1)%TFILE,'LAT0',XLAT0)
+   CALL IO_Field_read(INFILES(1)%TFILE,'LON0',XLON0)
+   CALL IO_Field_read(INFILES(1)%TFILE,'BETA',XBETA)
    !
    IF (.NOT.LCARTESIAN) THEN
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'RPK',   XRPK)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LATORI',XLATORI)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LONORI',XLONORI)
+     CALL IO_Field_read(INFILES(1)%TFILE,'RPK',   XRPK)
+     CALL IO_Field_read(INFILES(1)%TFILE,'LATORI',XLATORI)
+     CALL IO_Field_read(INFILES(1)%TFILE,'LONORI',XLONORI)
    ENDIF
    !
    IF (TRIM(CPROGRAM_ORIG)/='PGD' .AND. TRIM(CPROGRAM_ORIG)/='NESPGD' .AND. TRIM(CPROGRAM_ORIG)/='ZOOMPG' &
        .AND. .NOT.(TRIM(CPROGRAM_ORIG)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX
      ALLOCATE(XZHAT(NKMAX+2*JPVEXT))
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'ZHAT',XZHAT)
+     CALL IO_Field_read(INFILES(1)%TFILE,'ZHAT',XZHAT)
      ALLOCATE(LSLEVE)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'SLEVE',LSLEVE)
+     CALL IO_Field_read(INFILES(1)%TFILE,'SLEVE',LSLEVE)
      ALLOCATE(TDTMOD)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'DTMOD',TDTMOD,IRESP2)
+     CALL IO_Field_read(INFILES(1)%TFILE,'DTMOD',TDTMOD,IRESP2)
      IF(IRESP2/=0) DEALLOCATE(TDTMOD)
      ALLOCATE(TDTCUR)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'DTCUR',TDTCUR,IRESP2)
+     CALL IO_Field_read(INFILES(1)%TFILE,'DTCUR',TDTCUR,IRESP2)
      IF(IRESP2/=0) DEALLOCATE(TDTCUR)
    END IF
    !
@@ -1056,9 +1055,9 @@ END DO
          KNFILES_OUT = KNFILES_OUT + 1
 
          idx = KNFILES_OUT
-         CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,HOUTFILE,'UNKNOWN','WRITE', &
+         CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,HOUTFILE,'MNH','WRITE', &
                                HFORMAT='NETCDF4',OOLD=.TRUE.)
-         CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+         CALL IO_FILE_OPEN(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
 
          IF (options(OPTCOMPRESS)%set) THEN
            outfiles(idx)%tfile%LNCCOMPRESS       = .TRUE.
@@ -1070,7 +1069,7 @@ END DO
          END IF
 
          status = NF90_SET_FILL(outfiles(idx)%TFILE%NNCID,NF90_NOFILL,omode)
-         IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__)
+         if ( status /= NF90_NOERR ) call IO_Err_handle_nc4( status, 'OPEN_FILES', 'NF90_SET_FILL', '' )
        END IF ! .NOT.osplit
     ELSE
        !
@@ -1078,10 +1077,10 @@ END DO
        !
        KNFILES_OUT = KNFILES_OUT + 1
        idx = KNFILES_OUT
-       CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,houtfile,'UNKNOWN','WRITE', &
+       CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,houtfile,'MNH','WRITE', &
                              HFORMAT='LFI',KLFIVERB=0,OOLD=.TRUE.)
        LIOCDF4 = .FALSE. !Necessary to open correctly the LFI file
-       CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+       CALL IO_FILE_OPEN(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
        LIOCDF4 = .TRUE.
    END IF
    !
@@ -1090,9 +1089,9 @@ END DO
      KNFILES_OUT = KNFILES_OUT + 1
 
      idx = KNFILES_OUT
-     CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,'dummy_file','UNKNOWN','WRITE', &
+     CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,'dummy_file','MNH','WRITE', &
                            HFORMAT='NETCDF4',OOLD=.TRUE.)
-     CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+     CALL IO_FILE_OPEN(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
    END IF
 
    PRINT *,'--> Converted to file: ', TRIM(houtfile)
@@ -1100,7 +1099,7 @@ END DO
   END SUBROUTINE OPEN_FILES
 
   SUBROUTINE OPEN_SPLIT_NCFILES_OUT(outfiles,KNFILES_OUT,houtfile,nbvar,options)
-    USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
+    USE MODE_IO_FILE,          ONLY: IO_FILE_OPEN
     USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
 
     TYPE(TFILE_ELT),DIMENSION(:),  INTENT(INOUT) :: outfiles
@@ -1114,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')
 
@@ -1145,9 +1144,9 @@ END DO
 
     DO ji = 1,nbvar
       filename = trim(houtfile)//'.'//TRIM(YVARS(ji))
-      CALL IO_FILE_ADD2LIST(outfiles(ji)%TFILE,filename,'UNKNOWN','WRITE', &
+      CALL IO_FILE_ADD2LIST(outfiles(ji)%TFILE,filename,'MNH','WRITE', &
                             HFORMAT='NETCDF4')
-      CALL IO_FILE_OPEN_ll(outfiles(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+      CALL IO_FILE_OPEN(outfiles(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
 
       IF (options(OPTCOMPRESS)%set) THEN
         outfiles(ji)%tfile%LNCCOMPRESS       = .TRUE.
@@ -1159,13 +1158,13 @@ END DO
       END IF
 
       status = NF90_SET_FILL(outfiles(ji)%TFILE%NNCID,NF90_NOFILL,omode)
-      IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__)
+      if ( status /= NF90_NOERR ) call IO_Err_handle_nc4( status, 'OPEN_SPLIT_NCFILES_OUT', 'NF90_SET_FILL', '' )
     END DO
 
   END SUBROUTINE OPEN_SPLIT_NCFILES_OUT
   
   SUBROUTINE CLOSE_FILES(filelist,KNFILES)
-    USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
+    USE MODE_IO_FILE, ONLY: IO_FILE_CLOSE
 
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(INOUT) :: filelist
     INTEGER,                     INTENT(IN)    :: KNFILES
@@ -1176,30 +1175,30 @@ END DO
     CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILES','called')
 
     DO ji=1,KNFILES
-      IF (filelist(ji)%TFILE%LOPENED) CALL IO_FILE_CLOSE_ll(filelist(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+      IF (filelist(ji)%TFILE%LOPENED) CALL IO_FILE_CLOSE(filelist(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
     END DO
 
   END SUBROUTINE CLOSE_FILES
 
 
-  SUBROUTINE IO_GET_METADATA_NC4(KFILE_ID,KVAR_ID,TPREC)
+  SUBROUTINE IO_Metadata_get_nc4(KFILE_ID,KVAR_ID,TPREC)
     USE MODD_DIM_n,      ONLY: NKMAX
     USE MODD_PARAMETERS, ONLY: JPVEXT
 
-    INTEGER,        INTENT(IN)    :: KFILE_ID
-    INTEGER,        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_GET_METADATA_NC4','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Metadata_get_nc4','called')
 
     ISTATUS = NF90_INQUIRE_VARIABLE(KFILE_ID,KVAR_ID,NDIMS = TPREC%NDIMS_FILE, &
                                     XTYPE = TPREC%NTYPE_FILE, DIMIDS = IDIMS_ID)
-    IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__)
+    if ( istatus /= NF90_NOERR ) call IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_INQUIRE_VARIABLE', '' )
 
     IF (.NOT.TPREC%LSPLIT) THEN
       ALLOCATE(TPREC%NDIMSIZES_FILE(TPREC%NDIMS_FILE))
@@ -1219,7 +1218,7 @@ END DO
         ISTATUS = NF90_INQUIRE_DIMENSION(KFILE_ID,IDIMS_ID(JDIM),                    &
                                                    len =  TPREC%NDIMSIZES_FILE(JDIM), &
                                                    name = TPREC%CDIMNAMES_FILE(JDIM)  )
-        IF (ISTATUS /= NF90_NOERR) CALL HANDLE_ERR(ISTATUS,__LINE__)
+        if ( istatus /= NF90_NOERR ) call IO_Err_handle_nc4( istatus, 'IO_Metadata_get_nc4', 'NF90_INQUIRE_DIMENSION', '' )
         ILENG = ILENG*TPREC%NDIMSIZES_FILE(JDIM)
       END DO
 
@@ -1259,12 +1258,12 @@ END DO
 
       ISTATUS = NF90_GET_ATT(KFILE_ID,KVAR_ID,'units',TPREC%CUNITS_FILE)
       IF (ISTATUS /= NF90_NOERR) TPREC%CUNITS_FILE = ''
-  END SUBROUTINE IO_GET_METADATA_NC4
+  END SUBROUTINE IO_Metadata_get_nc4
 
 
-  SUBROUTINE IO_FILL_DIMS_NC4(TPFILE,TPREC,KRESP)
-    USE MODD_IO_ll,        ONLY: TFILEDATA
-    use mode_io_tools_nc4, only: getdimcdf, io_find_dim_byname_nc4
+  SUBROUTINE IO_Dims_fill_nc4(TPFILE,TPREC,KRESP)
+    USE MODD_IO,           ONLY: TFILEDATA
+    use mode_io_tools_nc4, only: IO_Dimcdf_get_nc4, IO_Dim_find_byname_nc4
 
     TYPE(TFILEDATA),INTENT(IN)    :: TPFILE
     TYPE(workfield),INTENT(INOUT) :: TPREC
@@ -1273,12 +1272,12 @@ END DO
     INTEGER              :: JJ
     TYPE(DIMCDF),POINTER :: TZDIMPTR
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILL_DIMS_NC4','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dims_fill_nc4','called')
 
     KRESP = 0
 
     IF (TPREC%NDIMS_FILE<TPREC%TFIELD%NDIMS) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILL_DIMS_NC4','less dimensions than expected for '//TRIM(TPREC%TFIELD%CMNHNAME)// &
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dims_fill_nc4','less dimensions than expected for '//TRIM(TPREC%TFIELD%CMNHNAME)// &
                                         ' => ignored')
       TPREC%tbw   = .FALSE.
       TPREC%tbr   = .FALSE.
@@ -1290,10 +1289,10 @@ END DO
 
     DO JJ=1,TPREC%TFIELD%NDIMS
     !DO JJ=1,TPREC%NDIMS_FILE !NDIMS_FILE can be bigger than NDIMS due to time dimension (it can be ignored here)
-      CALL IO_FIND_DIM_BYNAME_NC4(TPFILE,TPREC%CDIMNAMES_FILE(JJ),TPREC%TDIMS(JJ),KRESP)
+      CALL IO_Dim_find_byname_nc4(TPFILE,TPREC%CDIMNAMES_FILE(JJ),TPREC%TDIMS(JJ),KRESP)
       !If dimension not found => create it
       IF (KRESP/=0)  THEN
-        TZDIMPTR => GETDIMCDF(TPFILE,TPREC%NDIMSIZES_FILE(JJ))
+        TZDIMPTR => IO_Dimcdf_get_nc4(TPFILE,TPREC%NDIMSIZES_FILE(JJ))
         TPREC%TDIMS(JJ) = TZDIMPTR
         KRESP = 0
       END IF
@@ -1305,6 +1304,6 @@ END DO
       END IF
     END DO
 
-  END SUBROUTINE IO_FILL_DIMS_NC4
+  END SUBROUTINE IO_Dims_fill_nc4
 
 END MODULE mode_util
diff --git a/LIBTOOLS/tools/lfiz/src/lfiz.f90 b/LIBTOOLS/tools/lfiz/src/lfiz.f90
index de9b42b530b34fe53112a708238ae02139763af2..d72a01bc602a8c406ec9c9d16164e7957702cb1c 100644
--- a/LIBTOOLS/tools/lfiz/src/lfiz.f90
+++ b/LIBTOOLS/tools/lfiz/src/lfiz.f90
@@ -14,25 +14,27 @@ INTEGER :: arglen
 INTEGER :: inarg
 CHARACTER(LEN=50) :: yexe
 
+LOGICAL(KIND=LFI_INT),PARAMETER :: GTRUE  = .TRUE.
+LOGICAL(KIND=LFI_INT),PARAMETER :: GFALSE = .FALSE.
 
 INTEGER, PARAMETER :: FM_FIELD_SIZE = 16
-INTEGER, PARAMETER :: ISRCLU  = 11
-INTEGER, PARAMETER :: IDESTLU = 12
+INTEGER(KIND=LFI_INT), PARAMETER :: ISRCLU  = 11
+INTEGER(KIND=LFI_INT), PARAMETER :: IDESTLU = 12
 INTEGER :: JPHEXT
-INTEGER :: iverb
-INTEGER :: inap ! nb d'articles prevus (utile a la creation)
-INTEGER :: inaf ! nb d'articles presents dans un fichier existant
-INTEGER :: inafdest
+INTEGER(KIND=LFI_INT) :: iverb
+INTEGER(KIND=LFI_INT) :: inap ! nb d'articles prevus (utile a la creation)
+INTEGER(KIND=LFI_INT) :: inaf ! nb d'articles presents dans un fichier existant
+INTEGER(KIND=LFI_INT) :: inafdest
 
 CHARACTER(LEN=128) :: filename,DESTFNAME
 INTEGER :: JI,JJ
-INTEGER :: IRESP
+INTEGER(KIND=LFI_INT) :: IRESP
 CHARACTER(LEN=FM_FIELD_SIZE),DIMENSION(:),ALLOCATABLE :: yrecfm
-INTEGER,                     DIMENSION(:),ALLOCATABLE :: ileng
+INTEGER(KIND=LFI_INT),       DIMENSION(:),ALLOCATABLE :: ileng
 INTEGER(KIND=8),             DIMENSION(:),ALLOCATABLE :: iwork
 
-INTEGER :: ilengs
-INTEGER :: ipos
+INTEGER(KIND=LFI_INT) :: ilengs
+INTEGER(KIND=LFI_INT) :: ipos
 INTEGER :: sizemax
 
 INTEGER            :: IGRID
@@ -46,7 +48,9 @@ INTEGER :: LFICOMP
 INTEGER :: NEWSIZE
 INTEGER :: searchndx
 INTEGER :: INDDATIM
-INARG = IARGC()
+
+!OLD: INARG = IARGC()
+INARG = COMMAND_ARGUMENT_COUNT()
 
 #if defined(F90HP)
 #define HPINCR 1
@@ -54,6 +58,9 @@ INARG = IARGC()
 #define HPINCR 0
 #endif
 
+  CALL GET_COMMAND_ARGUMENT(0,yexe)
+#if 0
+!OLD:
 #if defined(FUJI) || defined(NAGf95) || defined(NEC) || defined(HP) || defined(pgf) || defined(G95) || defined(GFORTRAN)
   CALL GETARG(0+HPINCR,yexe)
   IF (LEN_TRIM(yexe) == 0) THEN
@@ -63,12 +70,17 @@ INARG = IARGC()
 #else
   CALL PXFGETARG(0,yexe,arglen,iresp)
 #endif
+#endif
 !  PRINT *,yexe, ' avec ',INARG,' arguments.'
   IF (INARG == 1) THEN 
+     CALL GET_COMMAND_ARGUMENT(1,filename)
+#if 0
+!OLD:
 #if defined(FUJI) || defined(NAGf95) || defined(NEC) || defined(HP) || defined(pgf) || defined(G95)|| defined(GFORTRAN)
      CALL GETARG(1+HPINCR,filename)
 #else
      CALL PXFGETARG(1,filename,arglen,iresp)
+#endif
 #endif
   ELSE 
      PRINT *,'Usage : ', TRIM(yexe), ' [fichier lfi]'
@@ -91,8 +103,8 @@ IDIMY = 0
 IDIMZ = 0
 GUSEDIM = .FALSE.
 
-CALL LFIOUV(IRESP,ISRCLU,.TRUE.,filename,'OLD',.FALSE.&
-            & ,.FALSE.,iverb,inap,inaf)
+CALL LFIOUV(IRESP,ISRCLU,GTRUE,filename,'OLD',GFALSE&
+            & ,GFALSE,iverb,inap,inaf)
 
 CALL FMREADLFIN1(ISRCLU,'LFI_COMPRESSED',LFICOMP,iresp)
 IF (iresp == 0) THEN
@@ -139,8 +151,8 @@ END IF
 
 
 PRINT *,'compressed file : ',DESTFNAME
-CALL LFIOUV(IRESP,IDESTLU,.TRUE.,DESTFNAME,'NEW'&
-     & ,.FALSE.,.FALSE.,iverb,inaf+1,inafdest)
+CALL LFIOUV(IRESP,IDESTLU,GTRUE,DESTFNAME,'NEW'&
+     & ,GFALSE,GFALSE,iverb,inaf+1,inafdest)
 
 CALL LFIPOS(IRESP,ISRCLU)
 ALLOCATE(yrecfm(inaf))
@@ -148,7 +160,7 @@ ALLOCATE(ileng(inaf))
 yrecfm(:) = ''
 sizemax=0
 DO ji=1,inaf
-  CALL LFICAS(IRESP,ISRCLU,yrecfm(ji),ileng(ji),ipos,.TRUE.)
+  CALL LFICAS(IRESP,ISRCLU,yrecfm(ji),ileng(ji),ipos,GTRUE)
   IF (ileng(ji) > sizemax) sizemax=ileng(ji)
 END DO
 PRINT *,' Nombre total d''articles dans fichier source :', inaf
@@ -218,13 +230,13 @@ CALL LFIFER(IRESP,IDESTLU,'KEEP')
 CONTAINS 
 
 SUBROUTINE FMREADLFIN1(klu,hrecfm,kval,kresp)
-INTEGER, INTENT(IN)         :: klu ! logical fortran unit au lfi file
-CHARACTER(LEN=*),INTENT(IN) :: hrecfm ! article name to be read
-INTEGER, INTENT(OUT)        :: kval ! integer value for hrecfm article
-INTEGER, INTENT(OUT)        :: kresp! return code null if OK
+INTEGER(KIND=LFI_INT), INTENT(IN)  :: klu ! logical fortran unit au lfi file
+CHARACTER(LEN=*),      INTENT(IN)  :: hrecfm ! article name to be read
+INTEGER,               INTENT(OUT) :: kval ! integer value for hrecfm article
+INTEGER(KIND=LFI_INT), INTENT(OUT) :: kresp! return code null if OK
 !
-INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE::iwork
-INTEGER :: iresp,ilenga,iposex,icomlen
+INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: iwork
+INTEGER(KIND=LFI_INT)                    :: iresp,ilenga,iposex,icomlen
 !
 CALL LFINFO(iresp,klu,hrecfm,ilenga,iposex)
 IF (iresp /=0 .OR. ilenga == 0) THEN
diff --git a/LIBTOOLS/tools/lfiz/src/unlfiz.f90 b/LIBTOOLS/tools/lfiz/src/unlfiz.f90
index bd5a3008fe8b085eb2b1b1eb501d25bf56cfe49f..d2c0e814b62840d4c6d2269b3f4bb30281d5dc06 100644
--- a/LIBTOOLS/tools/lfiz/src/unlfiz.f90
+++ b/LIBTOOLS/tools/lfiz/src/unlfiz.f90
@@ -14,24 +14,26 @@ INTEGER :: arglen
 INTEGER :: inarg
 CHARACTER(LEN=50) :: yexe
 
+LOGICAL(KIND=LFI_INT),PARAMETER :: GTRUE  = .TRUE.
+LOGICAL(KIND=LFI_INT),PARAMETER :: GFALSE = .FALSE.
 
 INTEGER, PARAMETER :: FM_FIELD_SIZE = 16
-INTEGER, PARAMETER :: ISRCLU  = 11
-INTEGER, PARAMETER :: IDESTLU = 12
-INTEGER :: iverb
-INTEGER :: inap ! nb d'articles prevus (utile a la creation)
-INTEGER :: inaf ! nb d'articles presents dans un fichier existant
-INTEGER :: inafdest
+INTEGER(KIND=LFI_INT), PARAMETER :: ISRCLU  = 11
+INTEGER(KIND=LFI_INT), PARAMETER :: IDESTLU = 12
+INTEGER(KIND=LFI_INT) :: iverb
+INTEGER(KIND=LFI_INT) :: inap ! nb d'articles prevus (utile a la creation)
+INTEGER(KIND=LFI_INT) :: inaf ! nb d'articles presents dans un fichier existant
+INTEGER(KIND=LFI_INT) :: inafdest
 
 CHARACTER(LEN=128) :: filename,DESTFNAME
 INTEGER :: JI,JJ
-INTEGER :: IRESP
+INTEGER(KIND=LFI_INT) :: IRESP
 CHARACTER(LEN=FM_FIELD_SIZE),DIMENSION(:),ALLOCATABLE :: yrecfm
-INTEGER,                     DIMENSION(:),ALLOCATABLE :: ileng
+INTEGER(KIND=LFI_INT),       DIMENSION(:),ALLOCATABLE :: ileng
 INTEGER(KIND=8),             DIMENSION(:),ALLOCATABLE :: iwork,iworknew
 
-INTEGER :: ilengs
-INTEGER :: ipos
+INTEGER(KIND=LFI_INT) :: ilengs
+INTEGER(KIND=LFI_INT) :: ipos
 INTEGER :: sizemax
 
 INTEGER            :: ICOMLEN
@@ -43,9 +45,10 @@ INTEGER :: CPT
 INTEGER :: LFICOMP
 INTEGER :: searchndx
 INTEGER :: ITYPCOD
-INTEGER :: ITOTAL,ITOTALMAX
+INTEGER(KIND=LFI_INT) :: ITOTAL,ITOTALMAX
 
-INARG = IARGC()
+!OLD: INARG = IARGC()
+INARG = COMMAND_ARGUMENT_COUNT()
 
 #if defined(F90HP)
 #define HPINCR 1
@@ -53,6 +56,9 @@ INARG = IARGC()
 #define HPINCR 0
 #endif
 
+  CALL GET_COMMAND_ARGUMENT(0,yexe)
+#if 0
+!OLD:
 #if defined(FUJI) || defined(NAGf95) || defined(NEC) || defined(HP) || defined(pgf) || defined(G95) || defined(GFORTRAN)
   CALL GETARG(0+HPINCR,yexe)
   IF (LEN_TRIM(yexe) == 0) THEN
@@ -62,12 +68,17 @@ INARG = IARGC()
 #else
   CALL PXFGETARG(0,yexe,arglen,iresp)
 #endif
+#endif
 !  PRINT *,yexe, ' avec ',INARG,' arguments.'
   IF (INARG == 1) THEN 
+     CALL GET_COMMAND_ARGUMENT(1,filename)
+#if 0
+!OLD:
 #if defined(FUJI) || defined(NAGf95) || defined(NEC) || defined(HP) || defined(pgf) || defined(G95) || defined(GFORTRAN)
      CALL GETARG(1+HPINCR,filename)
 #else
      CALL PXFGETARG(1,filename,arglen,iresp)
+#endif
 #endif
   ELSE 
      PRINT *,'Usage : ', TRIM(yexe), ' [fichier lfi]'
@@ -93,8 +104,8 @@ IDIMY = 0
 IDIMZ = 0
 GUSEDIM = .FALSE.
 
-CALL LFIOUV(IRESP,ISRCLU,.TRUE.,filename,'OLD',.FALSE.&
-            & ,.FALSE.,iverb,inap,inaf)
+CALL LFIOUV(IRESP,ISRCLU,GTRUE,filename,'OLD',GFALSE&
+            & ,GFALSE,iverb,inap,inaf)
 
 CALL FMREADLFIN1(ISRCLU,'LFI_COMPRESSED',LFICOMP,iresp)
 IF (iresp /= 0 .OR. LFICOMP /= 1) THEN
@@ -104,8 +115,8 @@ IF (iresp /= 0 .OR. LFICOMP /= 1) THEN
 END IF  
 
 PRINT *,'Uncompressed (but 32 bits REAL precision) file : ',DESTFNAME
-CALL LFIOUV(IRESP,IDESTLU,.TRUE.,DESTFNAME,'NEW'&
-     & ,.FALSE.,.FALSE.,iverb,inaf,inafdest)
+CALL LFIOUV(IRESP,IDESTLU,GTRUE,DESTFNAME,'NEW'&
+     & ,GFALSE,GFALSE,iverb,inaf,inafdest)
 
 CALL LFIPOS(IRESP,ISRCLU)
 ALLOCATE(yrecfm(inaf))
@@ -113,7 +124,7 @@ ALLOCATE(ileng(inaf))
 yrecfm(:) = ''
 sizemax=0
 DO ji=1,inaf
-  CALL LFICAS(IRESP,ISRCLU,yrecfm(ji),ileng(ji),ipos,.TRUE.)
+  CALL LFICAS(IRESP,ISRCLU,yrecfm(ji),ileng(ji),ipos,GTRUE)
   IF (ileng(ji) > sizemax) sizemax=ileng(ji)
 END DO
 PRINT *,' Nombre total d''articles dans fichier source :', inaf
@@ -173,13 +184,13 @@ CALL LFIFER(IRESP,IDESTLU,'KEEP')
 CONTAINS 
 
 SUBROUTINE FMREADLFIN1(klu,hrecfm,kval,kresp)
-INTEGER, INTENT(IN)         :: klu ! logical fortran unit au lfi file
-CHARACTER(LEN=*),INTENT(IN) :: hrecfm ! article name to be read
-INTEGER, INTENT(OUT)        :: kval ! integer value for hrecfm article
-INTEGER, INTENT(OUT)        :: kresp! return code null if OK
+INTEGER(KIND=LFI_INT), INTENT(IN)  :: klu ! logical fortran unit au lfi file
+CHARACTER(LEN=*),      INTENT(IN)  :: hrecfm ! article name to be read
+INTEGER,               INTENT(OUT) :: kval ! integer value for hrecfm article
+INTEGER(KIND=LFI_INT), INTENT(OUT) :: kresp! return code null if OK
 !
-INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE::iwork
-INTEGER :: iresp,ilenga,iposex,icomlen
+INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: iwork
+INTEGER(KIND=LFI_INT)                    :: iresp,ilenga,iposex,icomlen
 !
 CALL LFINFO(iresp,klu,hrecfm,ilenga,iposex)
 IF (iresp /=0 .OR. ilenga == 0) THEN
diff --git a/MY_RUN/KTEST/001_2Drelief/005_ncl/run_ncl b/MY_RUN/KTEST/001_2Drelief/005_ncl/run_ncl
index c5bac61b46c8ab3e2c167dc70a4babd5a08c8db4..392a13cbfb0da4a39f491ba806d7af46a2bd1759 100755
--- a/MY_RUN/KTEST/001_2Drelief/005_ncl/run_ncl
+++ b/MY_RUN/KTEST/001_2Drelief/005_ncl/run_ncl
@@ -10,20 +10,20 @@ ln -sf ../002_mesonh/EXPER.1.HYD2D.003.nc .
 rm -f visu_2Drelief.*.png
 
 ncl  plot_2Drelief.ncl
-display visu_2Drelief.000001.png
-display visu_2Drelief.000002.png
-display visu_2Drelief.000003.png
-display visu_2Drelief.000004.png
-display visu_2Drelief.000005.png
-display visu_2Drelief.000006.png
-display visu_2Drelief.000007.png
-display visu_2Drelief.000008.png
-display visu_2Drelief.000009.png
-display visu_2Drelief.000010.png
-display visu_2Drelief.000011.png
-display visu_2Drelief.000012.png
-display visu_2Drelief.000013.png
-display visu_2Drelief.000014.png
-display visu_2Drelief.000015.png
-display visu_2Drelief.000016.png
+${POSTRUN} display visu_2Drelief.000001.png
+${POSTRUN} display visu_2Drelief.000002.png
+${POSTRUN} display visu_2Drelief.000003.png
+${POSTRUN} display visu_2Drelief.000004.png
+${POSTRUN} display visu_2Drelief.000005.png
+${POSTRUN} display visu_2Drelief.000006.png
+${POSTRUN} display visu_2Drelief.000007.png
+${POSTRUN} display visu_2Drelief.000008.png
+${POSTRUN} display visu_2Drelief.000009.png
+${POSTRUN} display visu_2Drelief.000010.png
+${POSTRUN} display visu_2Drelief.000011.png
+${POSTRUN} display visu_2Drelief.000012.png
+${POSTRUN} display visu_2Drelief.000013.png
+${POSTRUN} display visu_2Drelief.000014.png
+${POSTRUN} display visu_2Drelief.000015.png
+${POSTRUN} display visu_2Drelief.000016.png
 exit 0
diff --git a/MY_RUN/KTEST/002_3Drelief/002_mesonh/run_mesonh_xyz b/MY_RUN/KTEST/002_3Drelief/002_mesonh/run_mesonh_xyz
index 88fee2ebc2b98339a6ed29820856c42b15253850..97878c3aaab53f7da79e1c2c56aa2627a740b118 100755
--- a/MY_RUN/KTEST/002_3Drelief/002_mesonh/run_mesonh_xyz
+++ b/MY_RUN/KTEST/002_3Drelief/002_mesonh/run_mesonh_xyz
@@ -4,6 +4,6 @@
 #MNH_LIC for details. version 1.
 set -x
 set -e
-ln -fs ../001_prep_ideal_case/RELIEF3D.{des,lfi,nc} .
+ln -fs ../001_prep_ideal_case/RELIEF3D*.{des,lfi,nc} .
 rm -f REL3D.1* OUT*
 time ${MPIRUN} MESONH${XYZ}
diff --git a/MY_RUN/KTEST/002_3Drelief/005_ncl/run_ncl b/MY_RUN/KTEST/002_3Drelief/005_ncl/run_ncl
index ee22f054e60770cf8115212b0cac841194bcbf75..a087673baa375bd6505f5843cf76566725260137 100755
--- a/MY_RUN/KTEST/002_3Drelief/005_ncl/run_ncl
+++ b/MY_RUN/KTEST/002_3Drelief/005_ncl/run_ncl
@@ -9,5 +9,5 @@ ln -sf ../002_mesonh/REL3D.1.EXP01.002.nc .
 rm -f visu_3Drelief*
 
 ncl  plot_3Drelief.ncl
-display visu_3Drelief.png
+${POSTRUN} display visu_3Drelief.png
 exit 0
diff --git a/MY_RUN/KTEST/003_KW78/002_mesonh/run_mesonh_xyz b/MY_RUN/KTEST/003_KW78/002_mesonh/run_mesonh_xyz
index cfee5d1657b2ccc6520eefd9bc39eb16b189bbe7..e86549305e114ff5c83fbcbc2c90417a44c1d717 100755
--- a/MY_RUN/KTEST/003_KW78/002_mesonh/run_mesonh_xyz
+++ b/MY_RUN/KTEST/003_KW78/002_mesonh/run_mesonh_xyz
@@ -4,6 +4,6 @@
 #MNH_LIC for details. version 1.
 set -x
 set -e
-ln -fs ../001_prep_ideal_case/KWRAIN.{des,lfi,nc} .
+ln -fs ../001_prep_ideal_case/KWRAIN*.{des,lfi,nc} .
 rm -f KWRAI.1.* OUT*
 time ${MPIRUN} MESONH${XYZ}
diff --git a/MY_RUN/KTEST/003_KW78/004_diaprog/dir_KW78 b/MY_RUN/KTEST/003_KW78/004_diaprog/dir_KW78
index 50b7f9243359884896ec3c3b79cb54afcf52f15a..f23437c1cdb46db72e54e3be4890ccbcbb5ae125 100644
--- a/MY_RUN/KTEST/003_KW78/004_diaprog/dir_KW78
+++ b/MY_RUN/KTEST/003_KW78/004_diaprog/dir_KW78
@@ -1,14 +1,12 @@
+visu
 ! directives de presentation
 LINVWB=T NIGRNC=10 nhi=0 lminmax=t xsizel=0.015
-! fenetre graphique
-visu
 ! plages de couleur, pas d isolignes
 LCOLAREA=T LISO=F               
 ! gestion des vecteurs (1 vecteur sur 4)
 NISKIP=4 XVRL=0.15                                                              
 ! 1er fichier a ouvrir
 _file1_'KWRAI.1.SEG01.004dg'                                                    
-!visu                     
 ! couleur de fond pour le 1er intervalle
 LCOLZERO=T NCOLZERO=1                                                           
 ! precipitations explicites instantanees
diff --git a/MY_RUN/KTEST/003_KW78/005_ncl/run_ncl b/MY_RUN/KTEST/003_KW78/005_ncl/run_ncl
index 26bc2d37386a86c4e79f245f1b755d66b8653bff..fe611614ef801d781cb98a6ae2e47f19b429795b 100755
--- a/MY_RUN/KTEST/003_KW78/005_ncl/run_ncl
+++ b/MY_RUN/KTEST/003_KW78/005_ncl/run_ncl
@@ -9,17 +9,17 @@ ln -sf ../002_mesonh/KWRAI.1.SEG01.004.nc .
 rm -f visu_KW78.*.png
 
 ncl  plot_KW78.ncl
-display visu_KW78.000001.png
-display visu_KW78.000002.png
-display visu_KW78.000003.png
-display visu_KW78.000004.png
-display visu_KW78.000005.png
-display visu_KW78.000006.png
-display visu_KW78.000007.png
-display visu_KW78.000008.png
-display visu_KW78.000009.png
-display visu_KW78.000010.png
-display visu_KW78.000011.png
-display visu_KW78.000012.png
-display visu_KW78.000013.png
+${POSTRUN} display visu_KW78.000001.png
+${POSTRUN} display visu_KW78.000002.png
+${POSTRUN} display visu_KW78.000003.png
+${POSTRUN} display visu_KW78.000004.png
+${POSTRUN} display visu_KW78.000005.png
+${POSTRUN} display visu_KW78.000006.png
+${POSTRUN} display visu_KW78.000007.png
+${POSTRUN} display visu_KW78.000008.png
+${POSTRUN} display visu_KW78.000009.png
+${POSTRUN} display visu_KW78.000010.png
+${POSTRUN} display visu_KW78.000011.png
+${POSTRUN} display visu_KW78.000012.png
+${POSTRUN} display visu_KW78.000013.png
 exit 0
diff --git a/MY_RUN/KTEST/003_KW78/006_diag/run_diag_xyz b/MY_RUN/KTEST/003_KW78/006_diag/run_diag_xyz
index 99484f4931114142f9f407d058a8a2e1cdd34c14..dae2b32d951a7dfac048db8131c2b54a6973ae4e 100755
--- a/MY_RUN/KTEST/003_KW78/006_diag/run_diag_xyz
+++ b/MY_RUN/KTEST/003_KW78/006_diag/run_diag_xyz
@@ -9,7 +9,7 @@ rm -f KWRAI* OUT*
 #
 #
 ln -sf  ../002_mesonh/KWRAI.1.SEG01.004.des .
-ln -sf  ../002_mesonh/KWRAI.1.SEG01.004.nc .
+ln -sf  ../002_mesonh/KWRAI.1.SEG01.004.*nc .
 
 time ${MPIRUN} DIAG${XYZ}
 
diff --git a/MY_RUN/KTEST/003_KW78/007_ncl_diag/run_ncl b/MY_RUN/KTEST/003_KW78/007_ncl_diag/run_ncl
index ec3585d714f6f3da190ab8572ddc1a0754f0222a..3b96c630eb395cf69794129acd8956b140ba3e37 100755
--- a/MY_RUN/KTEST/003_KW78/007_ncl_diag/run_ncl
+++ b/MY_RUN/KTEST/003_KW78/007_ncl_diag/run_ncl
@@ -10,6 +10,6 @@ ln -sf ../006_diag/KWRAI.1.SEG01.004dia.nc .
 rm -f visu_KW78_diag.png
 
 ncl  plot_KW78_diag.ncl
-display visu_KW78_diag.png
+${POSTRUN} display visu_KW78_diag.png
 
 exit 0
diff --git a/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam b/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam
index a441625117cef8e81e8ada2d1e17a7a0ad5a4054..8c6897877f8d98fc52e0631188a04ec3ca1e8fa8 100644
--- a/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam
+++ b/MY_RUN/KTEST/004_Reunion/001_prep_pgd/PRE_PGD1.nam
@@ -3,7 +3,7 @@
  !JPHEXT = 3 , NHALO_MNH = 3
 /
 &NAM_CONFZ 
- ! NZ_VERB=5 , NB_PROCIO_W=8 
+  !NZ_VERB=5 , NB_PROCIO_W=1 
 /
 &NAM_PGDFILE CPGDFILE='REUNION_PGD_1km5' /
 &NAM_CONF_PROJ
diff --git a/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam b/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam
index a30e8bbc6f9ad95cab10d8e487b32bfcc8361d6c..76198aa8ace251fc46eec9f4079ef620b9d55881 100644
--- a/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam
+++ b/MY_RUN/KTEST/004_Reunion/002_prep_ideal_case/PRE_IDEA1.nam
@@ -1,6 +1,6 @@
 &NAM_CONFIO  LCDF4=T, LLFIOUT=T, LLFIREAD=F /
 &NAM_CONFZ 
-  ! NZ_VERB=5 , NB_PROCIO_R=8 , NB_PROCIO_W=8 
+   !NZ_VERB=5 , NB_PROCIO_R=1 , NB_PROCIO_W=8 
 /
 &NAM_REAL_PGD CPGD_FILE = 'REUNION_PGD_1km5',
               LREAD_ZS= T, LREAD_GROUND_PARAM= T /
diff --git a/MY_RUN/KTEST/004_Reunion/003_mesonh/run_mesonh_xyz b/MY_RUN/KTEST/004_Reunion/003_mesonh/run_mesonh_xyz
index 20bd41ff753622a8a6be00253681cb6b70bd6a7b..ce9bd3dc383068a96cab69ce6d6391bc1cd8926e 100755
--- a/MY_RUN/KTEST/004_Reunion/003_mesonh/run_mesonh_xyz
+++ b/MY_RUN/KTEST/004_Reunion/003_mesonh/run_mesonh_xyz
@@ -6,7 +6,7 @@
 set -x
 set -e
 
-ln -fs ../002_prep_ideal_case/REUNION_IDEA.{des,lfi,nc} .
+ln -fs ../002_prep_ideal_case/REUNION_IDEA*.{des,lfi,nc} .
 ln -sf ../001_prep_pgd/REUNION_PGD_1km5.{des,lfi,nc} .
 
 if [ "x${MNH_ECRAD}" != "x" ]  ; then
diff --git a/MY_RUN/KTEST/004_Reunion/005_diaprog/dir_Reunion b/MY_RUN/KTEST/004_Reunion/005_diaprog/dir_Reunion
index 014efaae35eaa787d2f91c79b79f27496ad497fe..7fafdea2284ea209c372c3efc69dd859416b6280 100644
--- a/MY_RUN/KTEST/004_Reunion/005_diaprog/dir_Reunion
+++ b/MY_RUN/KTEST/004_Reunion/005_diaprog/dir_Reunion
@@ -1,11 +1,10 @@
+visu
 ! directives de presentation
 LINVWB=T NIGRNC=10 nhi=0 lminmax=t xsizel=0.015 LCOLAREA=T LISO=F               
 ! gestion des vectuers
 NISKIP=4 XVRL=0.15                                                              
 ! nom du fichier a ouvrir
 _file_'REUNI.1.00A20.004dg'                                                   
-! ouverture de la fenetre d affichage
-visu                                                                            
 ! module du vent et vecteurs du niveau K=2
 MUTVT_K_2_ON_UTVT_K_2                                                           
 ! temperature potentielle a 1500m
diff --git a/MY_RUN/KTEST/004_Reunion/006_ncl/run_ncl b/MY_RUN/KTEST/004_Reunion/006_ncl/run_ncl
index 52fe4902f4e48c777cb11e772fe113a9b7b5e87f..1728e92ca8fb5f6213f90a02990fddcbd0455a92 100755
--- a/MY_RUN/KTEST/004_Reunion/006_ncl/run_ncl
+++ b/MY_RUN/KTEST/004_Reunion/006_ncl/run_ncl
@@ -9,11 +9,11 @@ ln -sf ../003_mesonh/REUNI.1.00A20.004.nc .
 rm -f visu_Reunion.*.png
 
 ncl plot_Reunion.ncl
-display visu_Reunion.000001.png
-display visu_Reunion.000002.png
-display visu_Reunion.000003.png
-display visu_Reunion.000004.png
-display visu_Reunion.000005.png
-display visu_Reunion.000006.png
-display visu_Reunion.000007.png
+${POSTRUN} display visu_Reunion.000001.png
+${POSTRUN} display visu_Reunion.000002.png
+${POSTRUN} display visu_Reunion.000003.png
+${POSTRUN} display visu_Reunion.000004.png
+${POSTRUN} display visu_Reunion.000005.png
+${POSTRUN} display visu_Reunion.000006.png
+${POSTRUN} display visu_Reunion.000007.png
 exit 0
diff --git a/MY_RUN/KTEST/005_ARM/004_ncl/run_ncl b/MY_RUN/KTEST/005_ARM/004_ncl/run_ncl
index a23cea5ff244d91db37164fd6d4b13d9f6ea618d..31723fe2e450eb4c05f771c4afba434945a37b02 100755
--- a/MY_RUN/KTEST/005_ARM/004_ncl/run_ncl
+++ b/MY_RUN/KTEST/005_ARM/004_ncl/run_ncl
@@ -9,28 +9,28 @@ ln -sf ../002_mesonh/ARM__.1.CEN4T.000.* .
 rm -f visu_ARM.*.png
 
 ncl  plot_arm.ncl
-display visu_ARM.000001.png
-display visu_ARM.000002.png
-display visu_ARM.000003.png
-display visu_ARM.000004.png
-display visu_ARM.000005.png
-display visu_ARM.000006.png
-display visu_ARM.000007.png
-display visu_ARM.000008.png
-display visu_ARM.000009.png
-display visu_ARM.000010.png
-display visu_ARM.000011.png
-display visu_ARM.000012.png
-display visu_ARM.000013.png
-display visu_ARM.000014.png
-display visu_ARM.000015.png
-display visu_ARM.000016.png
-display visu_ARM.000017.png
-display visu_ARM.000018.png
-display visu_ARM.000019.png
-display visu_ARM.000020.png
-display visu_ARM.000021.png
-display visu_ARM.000022.png
-display visu_ARM.000023.png
-display visu_ARM.000024.png
+${POSTRUN} display visu_ARM.000001.png
+${POSTRUN} display visu_ARM.000002.png
+${POSTRUN} display visu_ARM.000003.png
+${POSTRUN} display visu_ARM.000004.png
+${POSTRUN} display visu_ARM.000005.png
+${POSTRUN} display visu_ARM.000006.png
+${POSTRUN} display visu_ARM.000007.png
+${POSTRUN} display visu_ARM.000008.png
+${POSTRUN} display visu_ARM.000009.png
+${POSTRUN} display visu_ARM.000010.png
+${POSTRUN} display visu_ARM.000011.png
+${POSTRUN} display visu_ARM.000012.png
+${POSTRUN} display visu_ARM.000013.png
+${POSTRUN} display visu_ARM.000014.png
+${POSTRUN} display visu_ARM.000015.png
+${POSTRUN} display visu_ARM.000016.png
+${POSTRUN} display visu_ARM.000017.png
+${POSTRUN} display visu_ARM.000018.png
+${POSTRUN} display visu_ARM.000019.png
+${POSTRUN} display visu_ARM.000020.png
+${POSTRUN} display visu_ARM.000021.png
+${POSTRUN} display visu_ARM.000022.png
+${POSTRUN} display visu_ARM.000023.png
+${POSTRUN} display visu_ARM.000024.png
 exit 0
diff --git a/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam b/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam
index 681314cdd549e129f8580bae0ca4f23379c7898e..48e51ec5612c96efe17d3b99bea170b4a25d8a1b 100644
--- a/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam
+++ b/MY_RUN/KTEST/007_16janvier/004_arp2lfi/PRE_REAL1.nam
@@ -1,6 +1,6 @@
 &NAM_CONFIO  LCDF4=T, LLFIOUT=T, LLFIREAD=F /
 &NAM_CONFZ
-  ! NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=1 , NB_PROCIO_W=1
+  !NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=1 , NB_PROCIO_W=8
 /
 &NAM_REAL_CONF NVERB=5 , CPRESOPT='ZRESI' 
                !JPHEXT=3 , NHALO=3 
diff --git a/MY_RUN/KTEST/007_16janvier/005_spa_mod1_mod2/SPAWN1.nam b/MY_RUN/KTEST/007_16janvier/005_spa_mod1_mod2/SPAWN1.nam
index fe016986138efa70c933c9112b5ddc720012c881..3794021433cd7111083a89f0f60ad213b85e8969 100644
--- a/MY_RUN/KTEST/007_16janvier/005_spa_mod1_mod2/SPAWN1.nam
+++ b/MY_RUN/KTEST/007_16janvier/005_spa_mod1_mod2/SPAWN1.nam
@@ -1,4 +1,8 @@
 &NAM_CONFIO  LCDF4=T, LLFIOUT=T, LLFIREAD=F /
+&NAM_CONFZ
+   !NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=8 , NB_PROCIO_W=8
+/
+
 &NAM_LUNIT2_SPA  CINIFILE = "16JAN_06_MNH",
                  CINIFILEPGD="16JAN98_36km.neste1",
                  YDOMAIN  = "16JAN98_9km.neste1",
diff --git a/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam b/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam
index 963196cc0bb040d7cc466e81cc65722c520f5704..25d4ccf12ee2686910853991a6f3af2292c79a51 100644
--- a/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam
+++ b/MY_RUN/KTEST/007_16janvier/006_preal/PRE_REAL1.nam
@@ -1,4 +1,7 @@
 &NAM_CONFIO  LCDF4=T, LLFIOUT=T, LLFIREAD=F /
+&NAM_CONFZ
+   !NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=8 , NB_PROCIO_W=8
+/
 &NAM_FILE_NAMES HATMFILE ='16JAN_06_MNH.spa04' , HATMFILETYPE='MESONH',
                 HPGDFILE ='16JAN98_9km.neste1' , CINIFILE='16JAN_06_MNH2' /
 &NAM_REAL_CONF NVERB=5 
diff --git a/MY_RUN/KTEST/007_16janvier/006_preal/run_preal_xyz b/MY_RUN/KTEST/007_16janvier/006_preal/run_preal_xyz
index 56c362fd8d624cffa53341a466ef91e47b43d7f3..0c88f2ff30e0628198b3d83518dce5339db61e66 100755
--- a/MY_RUN/KTEST/007_16janvier/006_preal/run_preal_xyz
+++ b/MY_RUN/KTEST/007_16janvier/006_preal/run_preal_xyz
@@ -8,8 +8,8 @@ set -e
 rm -f 16JAN* OUTPUT_LISTING* pipe* *.tex
 ln -sf ../003_nest/16JAN98_9km.neste1.{des,lfi,nc} .
 ln -sf ../003_nest/16JAN98_36km.neste1.{des,lfi,nc} .
-ln -sf ../004_arp2lfi/16JAN_06_MNH.{des,lfi,nc} .
-ln -sf ../005_spa_mod1_mod2/16JAN_06_MNH.spa04.{des,lfi,nc} .
+ln -sf ../004_arp2lfi/16JAN_06_MNH*.{des,lfi,nc} .
+ln -sf ../005_spa_mod1_mod2/16JAN_06_MNH.spa04*.{des,lfi,nc} .
 #exit
 time ${MPIRUN} PREP_REAL_CASE${XYZ}
 #ddd --directory=~/DEV/MNH.V4.6.2/src/dir_obj_bug2 PREP_REAL_CASE
diff --git a/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src b/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src
index 43a028c9c68c856bd4b021b0b2454646d6c28dee..7040ceed94b9baf614d5e6b49c932a05112ed433 100644
--- a/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src
+++ b/MY_RUN/KTEST/007_16janvier/008_run2/EXSEG1.nam.src
@@ -2,7 +2,7 @@
              ! , NIO_VERB=5, NGEN_VERB=5 
              /
 &NAM_CONFZ
- ! NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=1 , NB_PROCIO_W=8 
+  !NZ_VERB=5 , NZ_PROC=0 , NB_PROCIO_R=8 , NB_PROCIO_W=8 
 /
 &NAM_LUNITn  CINIFILE = "16JAN_06_MNH",CINIFILEPGD="16JAN98_36km.neste1"  /
 &NAM_DYNn  XTSTEP = 60.,  
diff --git a/MY_RUN/KTEST/007_16janvier/008_run2/run_mesonh_xyz b/MY_RUN/KTEST/007_16janvier/008_run2/run_mesonh_xyz
index 056e03e5d59195a194e20a2e9a32b79726f0ca18..654ba1e180deb107aac81bcbf4257e0c53b85f8b 100755
--- a/MY_RUN/KTEST/007_16janvier/008_run2/run_mesonh_xyz
+++ b/MY_RUN/KTEST/007_16janvier/008_run2/run_mesonh_xyz
@@ -8,8 +8,8 @@ set -e
 
 rm -f 16JAN* OUT*  EXSEG?.nam 
 
-ln -sf  ../004_arp2lfi/16JAN_06_MNH.{des,lfi,nc} .
-ln -sf  ../006_preal/16JAN_06_MNH2.{des,lfi,nc} .
+ln -sf  ../004_arp2lfi/16JAN_06_MNH*.{des,lfi,nc} .
+ln -sf  ../006_preal/16JAN_06_MNH2*.{des,lfi,nc} .
 ln -sf  ../003_nest/16JAN98_36km.neste1.{des,lfi,nc} .
 ln -sf  ../003_nest/16JAN98_9km.neste1.{des,lfi,nc} .
 
diff --git a/MY_RUN/KTEST/007_16janvier/011_ncl/run_ncl b/MY_RUN/KTEST/007_16janvier/011_ncl/run_ncl
index 2fd8e11b66a7dd4c9ea25a68bf64dba6a11e3833..584bbad27cca2954aaa41b098ed973082bdbddd8 100755
--- a/MY_RUN/KTEST/007_16janvier/011_ncl/run_ncl
+++ b/MY_RUN/KTEST/007_16janvier/011_ncl/run_ncl
@@ -6,14 +6,14 @@ ln -sf ../008_run2/16JAN.1.12B18.001.nc .
 ln -sf ../008_run2/16JAN.2.12B18.001.nc .
 ncl plot_16j.ncl
 
-display  visu_16j.000001.png 
-display  visu_16j.000002.png 
-display  visu_16j.000003.png 
-display  visu_16j.000004.png 
+${POSTRUN} display  visu_16j.000001.png 
+${POSTRUN} display  visu_16j.000002.png 
+${POSTRUN} display  visu_16j.000003.png 
+${POSTRUN} display  visu_16j.000004.png 
 
 ncl plot_16j_2.ncl
-display  visu_16j_2.000001.png 
-display  visu_16j_2.000002.png 
-display  visu_16j_2.000003.png 
+${POSTRUN} display  visu_16j_2.000001.png 
+${POSTRUN} display  visu_16j_2.000002.png 
+${POSTRUN} display  visu_16j_2.000003.png 
 exit 0
 
diff --git a/MY_RUN/KTEST/009_ICARTT/006_ncl/run_ncl b/MY_RUN/KTEST/009_ICARTT/006_ncl/run_ncl
index 7ca559b5af2d293ae2f0519ae870fa5c6f742c0b..af5b7a5b21fca82683f7407ddbba81fb9d5e7c1c 100755
--- a/MY_RUN/KTEST/009_ICARTT/006_ncl/run_ncl
+++ b/MY_RUN/KTEST/009_ICARTT/006_ncl/run_ncl
@@ -12,7 +12,7 @@ rm -f *.png
 ncl plot_ICARTT.ncl
 ncl plot_ICARTT_budget.ncl
 
-display zsection_1250.*.png
-display zsection_1250_bud.*.png
+${POSTRUN} display zsection_1250.*.png
+${POSTRUN} display zsection_1250_bud.*.png
 
 exit 0
diff --git a/MY_RUN/KTEST/011_KW78CHEM/004_diaprog/dir_KW78_chem b/MY_RUN/KTEST/011_KW78CHEM/004_diaprog/dir_KW78_chem
index ab5a3a2d7a9d37b3a0a7ffe5bde668f982a0bd11..834ade876fb27691c47f1d02cbaaae22a7429f0e 100644
--- a/MY_RUN/KTEST/011_KW78CHEM/004_diaprog/dir_KW78_chem
+++ b/MY_RUN/KTEST/011_KW78CHEM/004_diaprog/dir_KW78_chem
@@ -1,14 +1,12 @@
+visu
 ! directives de presentation
 LINVWB=T NIGRNC=10 nhi=0 lminmax=t xsizel=0.015
-! fenetre graphique
-visu
 ! plages de couleur, pas d isolignes
 LCOLAREA=T LISO=F               
 ! gestion des vecteurs (1 vecteur sur 4)
 NISKIP=4 XVRL=0.15                                                              
 ! 1er fichier a ouvrir
 _file1_'KWRAI.1.SEGCH.004dg'                                                    
-!visu                     
 ! couleur de fond pour le 1er intervalle
 LCOLZERO=T NCOLZERO=1                                                           
 ! precipitations explicites instantanees
diff --git a/MY_RUN/KTEST/011_KW78CHEM/005_ncl/run_ncl b/MY_RUN/KTEST/011_KW78CHEM/005_ncl/run_ncl
index cadb68fd8c69b3a1080eecfc5b67d47f7582e4e4..b9830c1ecdd95dbb3464830c503a8ee787c63821 100755
--- a/MY_RUN/KTEST/011_KW78CHEM/005_ncl/run_ncl
+++ b/MY_RUN/KTEST/011_KW78CHEM/005_ncl/run_ncl
@@ -11,6 +11,6 @@ rm -f visu_KW78_chem.*.png
 ncl  plot_KW78_chem.ncl
 for ECH in '000001' '000002' '000003' '000004' '000005' '000006' '000007' '000008' '000009' '000010' '000011' '000012' '000013' '000014' '000015' '000016' '000017' '000018' '000019' '000020' '000021' '000022' '000023' '000024' '000025' '000026' '000027'
 do
-display visu_KW78_chem.${ECH}.png
+${POSTRUN} display visu_KW78_chem.${ECH}.png
 done
 exit 0
diff --git a/MY_RUN/KTEST/012_dust/007_ncl/run_ncl b/MY_RUN/KTEST/012_dust/007_ncl/run_ncl
index 581980c82a89420d876b26945121004a0c33f02e..153224ed0557d77066ba648357527acc6beb939e 100755
--- a/MY_RUN/KTEST/012_dust/007_ncl/run_ncl
+++ b/MY_RUN/KTEST/012_dust/007_ncl/run_ncl
@@ -10,5 +10,5 @@ for ECH in '000001' '000002' '000003' '000004' '000005' '000006' '000007' '00000
 
 
 do
-display visu_dust.${ECH}.png
+${POSTRUN} display visu_dust.${ECH}.png
 done
diff --git a/MY_RUN/KTEST/013_Iroise_ideal_case_coupling/A_RUN_MNH_TOY/run_plot b/MY_RUN/KTEST/013_Iroise_ideal_case_coupling/A_RUN_MNH_TOY/run_plot
index 77081ee33a84ef4a8234bde522328c7f34af6174..4736ce861e2c6378068826c434916bd00c8fcca5 100755
--- a/MY_RUN/KTEST/013_Iroise_ideal_case_coupling/A_RUN_MNH_TOY/run_plot
+++ b/MY_RUN/KTEST/013_Iroise_ideal_case_coupling/A_RUN_MNH_TOY/run_plot
@@ -3,9 +3,9 @@
 ncl plot_coupling_model_toy.ncl
 #python plot_coupling_model_toy.py
 
-display */*0.png
-display */*1.png
-display */*2.png
-display */*3.png
-display */*4.png
+${POSTRUN} display */*0.png
+${POSTRUN} display */*1.png
+${POSTRUN} display */*2.png
+${POSTRUN} display */*3.png
+${POSTRUN} display */*4.png
 
diff --git a/MY_RUN/KTEST/014_LIMA/003_ncl/run_ncl b/MY_RUN/KTEST/014_LIMA/003_ncl/run_ncl
index 084de8fdd4777de1dc05f440a3edf7dc31cff6d2..e4da2340c321aa464d7e891ee56364e2fabbe473 100755
--- a/MY_RUN/KTEST/014_LIMA/003_ncl/run_ncl
+++ b/MY_RUN/KTEST/014_LIMA/003_ncl/run_ncl
@@ -9,13 +9,12 @@ ln -sf ../002_mesonh/XPREF.1.SEG01.000.nc .
 rm -f visu_LIMA.*.png
 
 ncl  plot_LIMA.ncl
-display visu_LIMA.*.png
 
-#display visu_LIMA.000001.png
-#display visu_LIMA.000002.png
-#display visu_LIMA.000003.png
-#display visu_LIMA.000004.png
-#display visu_LIMA.000005.png
-#display visu_LIMA.000006.png
-#display visu_LIMA.000007.png
+${POSTRUN} display visu_LIMA.000001.png
+${POSTRUN} display visu_LIMA.000002.png
+${POSTRUN} display visu_LIMA.000003.png
+${POSTRUN} display visu_LIMA.000004.png
+${POSTRUN} display visu_LIMA.000005.png
+${POSTRUN} display visu_LIMA.000006.png
+${POSTRUN} display visu_LIMA.000007.png
 exit 0
diff --git a/bin/spll b/bin/spll
index c8b0ada9e568862d70b7ffd1e3d8a9689e091453..ba2fd7884933a0040563bbb5c72637abd64dde54 100755
--- a/bin/spll
+++ b/bin/spll
@@ -1,7 +1,7 @@
 #!/bin/bash
-#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.
 #set -x
 if [ $# -ne 2 ]
@@ -26,7 +26,8 @@ ini_cmfshall.f90|mode_double_double.f90|mode_fgau.f90|\
 extern_usersurc_ll.f90|\
 extern_userio.f90|fmreadwrit.f90|fm_read_ll.f90|poub.f90|\
 mode_glt.*.F90|\
-rrtm_.*.F90|srtm_.*.F90"
+rrtm_.*.F90|srtm_.*.F90|\
+libs4py.f90"
 #
 
 if [ "$SUF" = "f" ]
diff --git a/conf/profile_mesonh.ihm b/conf/profile_mesonh.ihm
index 576185e854d5b04ede432efe2d0251e5a33a8804..7a9aa3618dc70b0056b463ac73f2742d1c3cf7b1 100755
--- a/conf/profile_mesonh.ihm
+++ b/conf/profile_mesonh.ihm
@@ -67,6 +67,7 @@ export CONF_DOLLAR=${CONF_DOLLAR}
 #
 export VER_CDF=${VER_CDF}
 export VERSION_CDFC=${VERSION_CDFC}
+export VERSION_CDFCXX=${VERSION_CDFCXX}
 export VERSION_CDFF=${VERSION_CDFF}
 export VERSION_HDF=${VERSION_HDF}
 export VERSION_LIBAEC=${VERSION_LIBAEC}
@@ -115,6 +116,10 @@ export VER_OASIS=${VER_OASIS}
 #
 export VERSION_NCL=${VERSION_NCL}
 #
+# MEGAN
+#
+export MNH_MEGAN=${MNH_MEGAN}
+#
 ##########################################################
 ##########################################################
 ##########################################################
@@ -125,7 +130,7 @@ export VERSION_NCL=${VERSION_NCL}
 ##########################################################
 ##########################################################
 #
-export XYZ="-\${ARCH}-R\${MNH_REAL}I\${MNH_INT}-\${VERSION_XYZ}\${MNH_ECRAD:+-ECRAD}\${VER_USER:+-\${VER_USER}}-\${VER_MPI}-\${OPTLEVEL}"
+export XYZ="-\${ARCH}-R\${MNH_REAL}I\${MNH_INT}-\${VERSION_XYZ}\${MNH_ECRAD:+-ECRAD}\${MNH_FOREFIRE:+-FF}\${VER_USER:+-\${VER_USER}}-\${VER_MPI}-\${OPTLEVEL}"
 #[ "x\${VER_USER}" != "x" ] && export XYZ="\${XYZ}-\${VER_USER}"
 # PATH to find tools like "makegen, etc ..."
 export BIN_TOOLS=${BIN_TOOLS}
diff --git a/src/LIB/SURCOUCHE/src/io_write_field.f90 b/src/LIB/SURCOUCHE/src/io_write_field.f90
deleted file mode 100644
index 70bca359e632030a6b7282d3c8a23c3d54e0e692..0000000000000000000000000000000000000000
--- a/src/LIB/SURCOUCHE/src/io_write_field.f90
+++ /dev/null
@@ -1,500 +0,0 @@
-!MNH_LIC Copyright 2016-2018 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.
-!-----------------------------------------------------------------
-! Original version:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!
-MODULE MODE_IO_WRITE_FIELD
-!
-USE MODD_IO_ll, ONLY: TOUTBAK
-USE MODE_FIELD
-USE MODE_FMWRIT
-!
-IMPLICIT NONE
-!
-CONTAINS
-!
-SUBROUTINE IO_WRITE_FIELDLIST(TPOUTPUT)
-!
-USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX
-!
-IMPLICIT NONE
-!
-TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
-!
-INTEGER :: IDX
-INTEGER :: IMI
-INTEGER :: JI
-!
-IMI = GET_CURRENT_MODEL_INDEX()
-!
-DO JI = 1,SIZE(TPOUTPUT%NFIELDLIST)
-  IDX = TPOUTPUT%NFIELDLIST(JI)
-  SELECT CASE (TFIELDLIST(IDX)%NDIMS)
-    !
-    !0D output
-    !
-    CASE (0)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !0D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D logical fields')
-          END IF
-        !
-        !0D integer
-        !
-        CASE (TYPEINT)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D integer fields')
-          END IF
-        !
-        !0D logical
-        !
-        CASE (TYPELOG)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D logical fields')
-          END IF
-        !
-        !0D string
-        !
-        CASE (TYPECHAR)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D character fields')
-          END IF
-        !
-        !0D date/time
-        !
-        CASE (TYPEDATE)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_T0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_T0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_T0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D date/time fields')
-          END IF
-        !
-        !0D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 0D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !1D output
-    !
-    CASE (1)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !1D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X1D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D real fields')
-          END IF
-!         !
-!         !1D integer
-!         !
-!         CASE (TYPEINT)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N1D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D integer fields')
-!           END IF
-!         !
-!         !1D logical
-!         !
-!         CASE (TYPELOG)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L1D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D logical fields')
-!           END IF
-!         !
-!         !1D string
-!         !
-!         CASE (TYPECHAR)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C1D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D character fields')
-!           END IF
-        !
-        !1D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 1D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !2D output
-    !
-    CASE (2)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !2D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X2D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X2D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X2D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 2D real fields')
-          END IF
-        !
-        !2D integer
-        !
-        CASE (TYPEINT)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N2D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N2D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N2D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 2D integer fields')
-          END IF
-        !
-        !2D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 2D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !3D output
-    !
-    CASE (3)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !3D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X3D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X3D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X3D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 3D real fields')
-            !PW: TODO?: add missing field in TFIELDLIST?
-            !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
-          END IF
-        !
-        !3D integer
-        !
-        CASE (TYPEINT)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N3D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N3D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N3D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 3D integer fields')
-            !PW: TODO?: add missing field in TFIELDLIST?
-            !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
-          END IF
-        !
-        !3D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 3D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !4D output
-    !
-    CASE (4)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !4D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X4D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X4D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X4D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 4D real fields')
-            !PW: TODO?: add missing field in TFIELDLIST?
-            !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
-          END IF
-        !
-        !4D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 4D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-!     !
-!     !5D output
-!     !
-!     CASE (5)
-!       SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-!         !
-!         !5D real
-!         !
-!         CASE (TYPEREAL)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X5D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X5D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X5D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 5D real fields')
-!             !PW: TODO?: add missing field in TFIELDLIST?
-!             !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
-!           END IF
-!         !
-!         !5D other types
-!         !
-!         CASE DEFAULT
-!           PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 5D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!           STOP
-!       END SELECT
-!     !
-!     !6D output
-!     !
-!     CASE (6)
-!       SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-!         !
-!         !6D real
-!         !
-!         CASE (TYPEREAL)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X6D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X6D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X6D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 6D real fields')
-!             !PW: TODO?: add missing field in TFIELDLIST?
-!             !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
-!           END IF
-!         !
-!         !6D other types
-!         !
-!         CASE DEFAULT
-!           PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 4D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!           STOP
-!       END SELECT
-    !
-    !Other number of dimensions
-    !
-    CASE DEFAULT
-      PRINT *,'FATAL: IO_WRITE_FIELDLIST: number of dimensions not yet supported for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-      STOP
-  END SELECT
-END DO
-!
-END SUBROUTINE IO_WRITE_FIELDLIST
-!
-!
-!
-SUBROUTINE IO_WRITE_FIELD_USER(TPOUTPUT)
-!
-#if 0
-USE MODD_PARAMETERS, ONLY : JPVEXT
-USE MODD_DYN_n,    ONLY: XTSTEP
-USE MODD_FIELD_n,    ONLY: XUT, XVT, XRT, XTHT
-USE MODD_PRECIP_n, ONLY: XINPRR
-#endif
-!
-IMPLICIT NONE
-!
-TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
-!
-TYPE(TFIELDDATA) :: TZFIELD
-!
-#if 0
-INTEGER          :: IKB
-!
-IKB=JPVEXT+1
-!
-TZFIELD%CMNHNAME   = 'UTLOW'
-TZFIELD%CSTDNAME   = 'x_wind'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'm s-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_U component of wind at lowest physical level'
-TZFIELD%NGRID      = 2
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XUT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'VTLOW'
-TZFIELD%CSTDNAME   = 'y_wind'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'm s-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_V component of wind at lowest physical level'
-TZFIELD%NGRID      = 3
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XVT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'THTLOW'
-TZFIELD%CSTDNAME   = 'air_potential_temperature'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'K'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_potential temperature at lowest physical level'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XTHT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'RVTLOW'
-!TZFIELD%CSTDNAME   = 'humidity_mixing_ratio' !ratio of the mass of water vapor to the mass of dry air
-TZFIELD%CSTDNAME   = 'specific_humidity'     !mass fraction of water vapor in (moist) air
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg kg-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_Vapor mixing Ratio at lowest physical level'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XRT(:,:,IKB,1))
-!
-TZFIELD%CMNHNAME   = 'ACPRRSTEP'
-TZFIELD%CSTDNAME   = 'rainfall_amount'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg m-2'
-TZFIELD%CDIR       = ''
-TZFIELD%CCOMMENT   = 'X_Y_ACcumulated Precipitation Rain Rate during timestep'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-!XACPRR is multiplied by 1000. to convert from m to kg m-2 (water density is assumed to be 1000 kg m-3)
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XINPRR*XTSTEP*1.0E3)
-#endif
-!
-END SUBROUTINE IO_WRITE_FIELD_USER
-!
-END MODULE MODE_IO_WRITE_FIELD
diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 62a02bf94ee83faaff7ed36a2c3666a0d7e82e9a..a27528eebe0f92b06e94ef1464a3f3f11396d382 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -4,25 +4,28 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN (removed ISTDOUT, ISTDERR, added NNULLUNIT, CNULLFILE)
-!  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow to disable writes (for bench purposes)
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN (removed ISTDOUT, ISTDERR, added NNULLUNIT, CNULLFILE)
+!  P. Wautelet 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow to disable writes (for bench purposes)
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
+!  P. Wautelet 12/03/2019: add TMAINFILE field in TFILEDATA
 !-----------------------------------------------------------------
 
-MODULE MODD_IO_ll
+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 
 !
 !
 INTEGER, PARAMETER :: NVERB_NO=0, NVERB_FATAL=1, NVERB_ERROR=2, NVERB_WARNING=3, NVERB_INFO=4, NVERB_DEBUG=5
 
-INTEGER                     :: NNULLUNIT = -1  ! /dev/null fortran unit, value set in INITIO_ll
+INTEGER                     :: NNULLUNIT = -1  ! /dev/null fortran unit, value set in IO_Init
 CHARACTER(LEN=*), PARAMETER :: CNULLFILE = "/dev/null"
 
-INTEGER, SAVE :: ISIOP   !! IOproc number
+INTEGER, SAVE :: NIO_RANK ! Rank of IO process
 INTEGER, SAVE :: ISP     !! Actual proc number
 INTEGER, SAVE :: ISNPROC !! Total number of allocated processes
 LOGICAL, SAVE :: GSMONOPROC = .FALSE. !! True if sequential execution (ISNPROC = 1) 
@@ -70,7 +73,7 @@ END TYPE TOUTBAK
 TYPE TFILEDATA
   CHARACTER(LEN=NFILENAMELGTMAX) :: CNAME = '' !Filename
   CHARACTER(LEN=:),ALLOCATABLE   :: CDIRNAME   !Directory name
-  CHARACTER(LEN=13) :: CTYPE   = "UNKNOWN" !Filetype (backup, output, prepidealcase...)
+  CHARACTER(LEN=13) :: CTYPE   = "UNKNOWN" !Filetype (PGD, MNH, DES, NML...)
   CHARACTER(LEN=7)  :: CFORMAT = "UNKNOWN" !Fileformat (NETCDF4, LFI, LFICDF4...)
   CHARACTER(LEN=7)  :: CMODE   = "UNKNOWN" !Opening mode (read, write...)
   LOGICAL           :: LOPENED = .FALSE.   !Is the file opened
@@ -92,31 +95,33 @@ 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 transfers)
-  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
   INTEGER :: NLU = -1                      !Logical unit number
   INTEGER :: NRECL = -1                    !Fortran RECL (record length)
   CHARACTER(LEN=11) :: CFORM   = "UNKNOWN" !Fortran FORM (FORMATTED/UNFORMATTED)
-  CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL)
+  CHARACTER(LEN=10) :: CACCESS = "UNKNOWN" !Fortran ACCESS (DIRECT/SEQUENTIAL/STREAM)
   !
   TYPE(TFILEDATA),POINTER :: TDADFILE   => NULL() !Corresponding dad file
   TYPE(TFILEDATA),POINTER :: TDESFILE   => NULL() !Corresponding .des file
   TYPE(TFILEDATA),POINTER :: TDATAFILE  => NULL() !Corresponding data file (if .des file)
+  TYPE(TFILEDATA),POINTER :: TMAINFILE  => NULL() !Corresponding main file if the file is an sub-file
+  !
   TYPE(TFILEDATA),POINTER :: TFILE_PREV => NULL()
   TYPE(TFILEDATA),POINTER :: TFILE_NEXT => NULL()
 END TYPE TFILEDATA
@@ -136,4 +141,4 @@ TYPE(TFILEDATA),POINTER,SAVE :: TFILE_OUTPUTLISTING  => NULL() !Pointer used to
 !Non existing file which can be used as a dummy target
 TYPE(TFILEDATA),TARGET, SAVE :: TFILE_DUMMY = TFILEDATA(CNAME="dummy",CDIRNAME=NULL(),TFILES_IOZ=NULL(),TNCCOORDS=NULL())
 
-END MODULE MODD_IO_ll
+END MODULE MODD_IO
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_allocbuff.f90 b/src/LIB/SURCOUCHE/src/mode_allocbuff.f90
index b6ba6013377e30cd3a9dc5bee796f87a0e1df4cc..e6d0e9a1a0fd514b227262f16a607f59a7710e2b 100644
--- a/src/LIB/SURCOUCHE/src/mode_allocbuff.f90
+++ b/src/LIB/SURCOUCHE/src/mode_allocbuff.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
@@ -8,8 +8,8 @@
 !-----------------------------------------------------------------
 
 MODULE MODE_ALLOCBUFFER_ll
-USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
-USE MODD_PARAMETERS_ll,ONLY : JPHEXT
+USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
 
 IMPLICIT NONE 
 
@@ -51,7 +51,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_N1
 
 SUBROUTINE ALLOCBUFFER_N2(KTAB_P,KTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 INTEGER,DIMENSION(:,:),POINTER           :: KTAB_P
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KTAB
@@ -85,7 +85,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_N2
 
 SUBROUTINE ALLOCBUFFER_N3(KTAB_P,KTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 INTEGER,DIMENSION(:,:,:),POINTER           :: KTAB_P
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KTAB
@@ -179,7 +179,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X1
 
 SUBROUTINE ALLOCBUFFER_X2(PTAB_P,PTAB,HDIR,OALLOC, KIMAX_ll, KJMAX_ll)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PTAB
@@ -229,7 +229,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X2
 
 SUBROUTINE ALLOCBUFFER_X3(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PTAB
@@ -263,7 +263,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X3
 
 SUBROUTINE ALLOCBUFFER_X4(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PTAB
@@ -299,7 +299,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X4
 
 SUBROUTINE ALLOCBUFFER_X5(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PTAB
@@ -337,7 +337,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X5
 
 SUBROUTINE ALLOCBUFFER_X6(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll, ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:,:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PTAB
diff --git a/src/LIB/SURCOUCHE/src/mode_argslist_ll.f90 b/src/LIB/SURCOUCHE/src/mode_argslist_ll.f90
index 75cf82b4e94662d4aa0fac4898f686313f0403ec..c88faab8c9d573f85b7d552aed9ca4050fa1f5df 100644
--- a/src/LIB/SURCOUCHE/src/mode_argslist_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_argslist_ll.f90
@@ -1,16 +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$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
 
 !!    #######################
       MODULE MODE_ARGSLIST_ll
@@ -55,6 +47,7 @@
 !!    Modifications
 !!    -------------
 !     Original    May 19, 1998
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !-------------------------------------------------------------------------------
 !
@@ -100,6 +93,8 @@
 !
 !*       0.1   declarations of arguments
 !
+  use mode_msg
+
   IMPLICIT NONE
 !
   TYPE(LIST1D_ll), POINTER     :: TPLIST ! list of fields
@@ -116,8 +111,7 @@
 !*       1.    Test value of HDIR
 !
   IF (HDIR /= "X" .AND. HDIR /= "Y") THEN
-    WRITE(*,*) 'Error ADD1DFIELD : Bad HDIR argument'
-    STOP
+    call Print_msg( NVERB_FATAL, 'GEN', 'ADD1DFIELD', 'bad HDIR argument ('//HDIR//')' )
   ENDIF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/LIB/SURCOUCHE/src/mode_distriblb.f90 b/src/LIB/SURCOUCHE/src/mode_distriblb.f90
index e3d13ec6fb584c37f1202ed2e0af152b3c1f180a..5a5c40fff8093fe7b063a94510a77b5f76ec8842 100644
--- a/src/LIB/SURCOUCHE/src/mode_distriblb.f90
+++ b/src/LIB/SURCOUCHE/src/mode_distriblb.f90
@@ -1,17 +1,11 @@
-!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 
+! Modifications:
+!  J. Escobar  15/09/2015: WENO5 & JPHEXT <> 1
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 
 !     #############################
@@ -103,12 +97,16 @@ END SUBROUTINE GET_DISTRIB_LB
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    23/09/98
+!!      Modif 
+!!     J.Escobar 28/03/2019: for very small domain , force N/S/E/W check on getting LB bounds
 !-------------------------------------------------------------------------------
 !
-USE MODD_PARAMETERS_ll,ONLY : JPHEXT
-USE MODD_VAR_ll,       ONLY : TCRRT_PROCONF
-USE MODD_STRUCTURE_ll,  ONLY : MODELSPLITTING_ll
-USE MODE_TOOLS_ll,     ONLY : GET_INTERSECTION_ll,GET_GLOBALDIMS_ll,LWEST_ll
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+USE MODD_VAR_ll,        ONLY: TCRRT_PROCONF
+
+use mode_msg
+USE MODE_TOOLS_ll,      ONLY: GET_INTERSECTION_ll, GET_GLOBALDIMS_ll, LWEST_ll, LEAST_ll
 
 !*       0.    DECLARATIONS
 !              ------------ 
@@ -150,8 +148,7 @@ CASE('READ')
 CASE('WRITE')
   YMODE = 'PHYS'
 CASE default
-  WRITE(*,*) 'Error in GET_DISTRIBX_LB...'
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'GET_DISTRIBX_LB', 'invalid dummy argument HMODE ('//trim(HMODE)//')' )
 END SELECT
 !
 CALL  GET_GLOBALDIMS_ll(IIMAX_ll, IJMAX_ll)
@@ -191,7 +188,7 @@ ELSE
   IYEND=IJMAX_ll+ 2 * JPHEXT
 ENDIF
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,YMODE,IINFO,KIP)
-IF (IINFO /= 1) THEN  ! no empty intersection
+IF (IINFO/=1 .AND. LWEST_ll(KIP) ) THEN  ! no empty intersection
   IF (HCOORD == 'LOC') THEN
     KIB=IXORI
     KIE=IXENDI
@@ -219,8 +216,7 @@ IF (IINFO /= 1) THEN  ! no empty intersection
     KJB=IYORI + IYOR3DX -1
     KJE=IYENDI+ IYOR3DX- 1
   ELSE
-    WRITE(*,*) 'Error in GET_DISTRIBX_LB...'
-    STOP
+    call Print_msg( NVERB_FATAL, 'GEN', 'GET_DISTRIBX_LB', 'invalid dummy argument HCOORD ('//trim(HCOORD)//')' )
   ENDIF
 END IF
 
@@ -242,7 +238,7 @@ ELSE
   IYEND=IJMAX_ll+ 2 * JPHEXT
 ENDIF
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,YMODE,IINFO,KIP)
-IF (IINFO /=1) THEN
+IF (IINFO/=1  .AND. LEAST_ll(KIP) ) THEN
   IF (HCOORD == 'LOC') THEN
     IF (KIB == 0) KIB=1+KIE
     KIE=KIE+1+IXENDI-IXORI
@@ -314,10 +310,12 @@ END SUBROUTINE GET_DISTRIBX_LB
 !!      Original    23/09/98
 !-------------------------------------------------------------------------------
 !
-USE MODD_PARAMETERS_ll,ONLY : JPHEXT
-USE MODD_VAR_ll,       ONLY : TCRRT_PROCONF
-USE MODD_STRUCTURE_ll,  ONLY : MODELSPLITTING_ll
-USE MODE_TOOLS_ll,     ONLY : GET_INTERSECTION_ll,GET_GLOBALDIMS_ll,LSOUTH_ll
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_STRUCTURE_ll,  ONLY: MODELSPLITTING_ll
+USE MODD_VAR_ll,        ONLY: TCRRT_PROCONF
+
+use mode_msg
+USE MODE_TOOLS_ll,      ONLY: GET_INTERSECTION_ll, GET_GLOBALDIMS_ll, LNORTH_ll, LSOUTH_ll
 !*       0.    DECLARATIONS
 !              ------------ 
 !*       0.1   declarations of arguments
@@ -356,8 +354,7 @@ CASE('READ')
 CASE('WRITE')
   YMODE = 'PHYS'
 CASE default
-  WRITE(*,*) 'Error in GET_DISTRIBX_LB...'
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'GET_DISTRIBY_LB', 'invalid dummy argument HMODE ('//trim(HMODE)//')' )
 END SELECT
 !   
 CALL  GET_GLOBALDIMS_ll(IIMAX_ll, IJMAX_ll)
@@ -396,7 +393,7 @@ ELSE
   IYEND=JPHEXT !1
 ENDIF
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,YMODE,IINFO,KIP)
-IF (IINFO /= 1) THEN  ! no empty intersection
+IF (IINFO/=1 .AND. LSOUTH_ll(KIP) ) THEN  ! no empty intersection
   IF (HCOORD == 'LOC') THEN
     KIB=IXORI
     KIE=IXENDI
@@ -442,7 +439,7 @@ ELSE
   IYEND=IJMAX_ll + 2 * JPHEXT - JPHEXT + JPHEXT  ! + 2 * JPHEXT 
 ENDIF
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,YMODE,IINFO,KIP)
-IF (IINFO /=1) THEN
+IF (IINFO/=1 .AND. LNORTH_ll(KIP) ) THEN
   IF (HCOORD == 'LOC') THEN
     KIB=IXORI
     KIE=IXENDI
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 990c2182856eaa0b485e253101cc1654a867ccfc..d9bd7a2666576b244c0621cbe56ecc3b4b69cb84 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
@@ -399,7 +398,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
@@ -419,7 +417,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
@@ -476,12 +475,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)
         
@@ -493,14 +492,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) 
         
@@ -520,11 +519,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
@@ -538,11 +537,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
@@ -587,7 +586,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
@@ -599,7 +597,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
 !
@@ -655,13 +654,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)
         
@@ -673,14 +672,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)
         
@@ -699,11 +698,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
@@ -717,11 +716,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
@@ -1899,7 +1898,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
@@ -1922,8 +1920,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
@@ -2096,11 +2095,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
@@ -2128,13 +2127,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
@@ -2292,7 +2291,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
@@ -2311,8 +2309,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
 !
@@ -2464,12 +2463,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
@@ -2495,12 +2494,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_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 8dce892d63c429a17a98a9d3a7cf1cc2546f3949..e025ae83960cd53d6284e71614dea75092f5602b 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -1,15 +1,22 @@
-!MNH_LIC Copyright 2016-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2016-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.
 !-----------------------------------------------------------------
 ! Original version:
-!  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
+! Modifications:
+!  P. Wautelet 29/01/2019: small bug correction (null pointers) in FIELDLIST_GOTO_MODEL if NESPGD or PGD
+!  P. Wautelet 01/02/2019: bug correction in case XRT is not associated
+!  C. Lac         02/2019: add rain fraction as an output field
+!  S. Bielli      02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 06/03/2019: correct ZWS entry
+!  P. Wautelet 12/04/2019: added pointers for C1D, L1D, N1D, X5D and X6D structures in TFIELDDATA
 !-----------------------------------------------------------------
 MODULE MODE_FIELD
 !
 USE MODD_CONF,      ONLY : CPROGRAM
-USE MODD_IO_ll,     ONLY : NVERB_DEBUG,NVERB_INFO,NVERB_WARNING,NVERB_ERROR,NVERB_FATAL
+USE MODD_IO,        ONLY : NVERB_DEBUG, NVERB_INFO, NVERB_WARNING, NVERB_ERROR, NVERB_FATAL
 USE MODD_PARAMETERS
 USE MODD_TYPE_DATE, ONLY : DATE_TIME
 #if defined(MNH_IOCDF4)
@@ -27,14 +34,26 @@ TYPE TFIELDPTR_C0D
   CHARACTER(LEN=:),     POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_C0D
 !
+TYPE TFIELDPTR_C1D
+  CHARACTER(LEN=:),DIMENSION(:),POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_C1D
+!
 TYPE TFIELDPTR_L0D
   LOGICAL,              POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_L0D
 !
+TYPE TFIELDPTR_L1D
+  LOGICAL,DIMENSION(:), POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_L1D
+!
 TYPE TFIELDPTR_N0D
   INTEGER,              POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_N0D
 !
+TYPE TFIELDPTR_N1D
+  INTEGER,DIMENSION(:),   POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_N1D
+!
 TYPE TFIELDPTR_N2D
   INTEGER,DIMENSION(:,:), POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_N2D
@@ -63,6 +82,14 @@ TYPE TFIELDPTR_X4D
   REAL,DIMENSION(:,:,:,:),POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_X4D
 !
+TYPE TFIELDPTR_X5D
+  REAL,DIMENSION(:,:,:,:,:),POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_X5D
+!
+TYPE TFIELDPTR_X6D
+  REAL,DIMENSION(:,:,:,:,:,:),POINTER :: DATA => NULL()
+END TYPE TFIELDPTR_X6D
+!
 TYPE TFIELDPTR_T0D
   TYPE(DATE_TIME),      POINTER :: DATA => NULL()
 END TYPE TFIELDPTR_T0D
@@ -97,10 +124,13 @@ TYPE TFIELDDATA
   REAL               :: XVALIDMAX  =  1.E36 !Maximum valid value for real fields
   !
   TYPE(TFIELDPTR_C0D),DIMENSION(:),ALLOCATABLE :: TFIELD_C0D !Pointer to the character string fields (one per nested mesh)
+  TYPE(TFIELDPTR_C1D),DIMENSION(:),ALLOCATABLE :: TFIELD_C1D !Pointer to the character string 1D fields (one per nested mesh)
   !
   TYPE(TFIELDPTR_L0D),DIMENSION(:),ALLOCATABLE :: TFIELD_L0D !Pointer to the scalar logical fields (one per nested mesh)
+  TYPE(TFIELDPTR_L1D),DIMENSION(:),ALLOCATABLE :: TFIELD_L1D !Pointer to the logical 1D fields (one per nested mesh)
   !
   TYPE(TFIELDPTR_N0D),DIMENSION(:),ALLOCATABLE :: TFIELD_N0D !Pointer to the scalar integer fields (one per nested mesh)
+  TYPE(TFIELDPTR_N1D),DIMENSION(:),ALLOCATABLE :: TFIELD_N1D !Pointer to the integer 1D fields (one per nested mesh)
   TYPE(TFIELDPTR_N2D),DIMENSION(:),ALLOCATABLE :: TFIELD_N2D !Pointer to the integer 2D fields (one per nested mesh)
   TYPE(TFIELDPTR_N3D),DIMENSION(:),ALLOCATABLE :: TFIELD_N3D !Pointer to the integer 3D fields (one per nested mesh)
   !
@@ -109,6 +139,8 @@ TYPE TFIELDDATA
   TYPE(TFIELDPTR_X2D),DIMENSION(:),ALLOCATABLE :: TFIELD_X2D !Pointer to the real 2D fields (one per nested mesh)
   TYPE(TFIELDPTR_X3D),DIMENSION(:),ALLOCATABLE :: TFIELD_X3D !Pointer to the real 3D fields (one per nested mesh)
   TYPE(TFIELDPTR_X4D),DIMENSION(:),ALLOCATABLE :: TFIELD_X4D !Pointer to the real 4D fields (one per nested mesh)
+  TYPE(TFIELDPTR_X5D),DIMENSION(:),ALLOCATABLE :: TFIELD_X5D !Pointer to the real 5D fields (one per nested mesh)
+  TYPE(TFIELDPTR_X6D),DIMENSION(:),ALLOCATABLE :: TFIELD_X6D !Pointer to the real 6D fields (one per nested mesh)
   !
   TYPE(TFIELDPTR_T0D),DIMENSION(:),ALLOCATABLE :: TFIELD_T0D !Pointer to the scalar date/time fields (one per nested mesh)
 END TYPE TFIELDDATA
@@ -892,6 +924,20 @@ ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
 IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'ZWS'
+TFIELDLIST(IDX)%CSTDNAME   = 'sea_surface_wave_significant_height'
+TFIELDLIST(IDX)%CLONGNAME  = 'ZWS'
+TFIELDLIST(IDX)%CUNITS     = 'm'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'sea wave height'
+TFIELDLIST(IDX)%NGRID      = 4
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 2
+TFIELDLIST(IDX)%LTIMEDEP   = .TRUE.
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X2D(IMODEL))
+IDX = IDX+1
+!
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'ZSMT'
 TFIELDLIST(IDX)%CSTDNAME   = ''
 TFIELDLIST(IDX)%CLONGNAME  = 'ZSMT'
@@ -2336,6 +2382,20 @@ TFIELDLIST(IDX)%LTIMEDEP   = .TRUE.
 ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
 IDX = IDX+1
 !
+IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
+TFIELDLIST(IDX)%CMNHNAME   = 'RAINFR'
+TFIELDLIST(IDX)%CSTDNAME   = ''
+TFIELDLIST(IDX)%CLONGNAME  = 'RAINFR'
+TFIELDLIST(IDX)%CUNITS     = '1'
+TFIELDLIST(IDX)%CDIR       = 'XY'
+TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_Z_Rain FRaction'
+TFIELDLIST(IDX)%NGRID      = 1
+TFIELDLIST(IDX)%NTYPE      = TYPEREAL
+TFIELDLIST(IDX)%NDIMS      = 3
+TFIELDLIST(IDX)%LTIMEDEP   = .TRUE.
+ALLOCATE(TFIELDLIST(IDX)%TFIELD_X3D(IMODEL))
+IDX = IDX+1
+!
 END IF ! CPROGRAM=MESONH .OR. DIAG .OR. LFICDF
 !
 !
@@ -3806,18 +3866,17 @@ END IF
 !
 ! Initialize some pointers
 !
+!PW: TODO: check if still necessary as XRHODREFZ and XTHVREFZ are now initialiazed in ini_modeln even for KMI/=1 (29/01/2019)
 IF (KFROM == KTO) THEN
-  IF (.NOT.ALLOCATED(XRHODREFZ) .AND. CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD') THEN
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated')
+  IF ( CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD' ) THEN
+    IF (.NOT.ALLOCATED(XRHODREFZ)) CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XRHODREFZ not yet allocated')
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP)
+    TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ
+    !
+    IF (.NOT.ALLOCATED(XTHVREFZ)) CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated')
+    CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP)
+    TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ
   END IF
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RHOREFZ',IID,IRESP)
-  TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XRHODREFZ
-  !
-  IF (.NOT.ALLOCATED(XTHVREFZ) .AND. CPROGRAM/='NESPGD' .AND. CPROGRAM/='PGD') THEN
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','FIELDLIST_GOTO_MODEL','XTHVREFZ not yet allocated')
-  END IF
-  CALL FIND_FIELD_ID_FROM_MNHNAME('THVREFZ',IID,IRESP)
-  TFIELDLIST(IID)%TFIELD_X1D(KFROM)%DATA=>XTHVREFZ
 END IF
 !
 !
@@ -3831,6 +3890,7 @@ END IF
 !
 ! MODD_FIELD_n variables
 !
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZWS',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X2D(KFROM)%DATA => XZWS
 CALL FIND_FIELD_ID_FROM_MNHNAME('UT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XUT
 CALL FIND_FIELD_ID_FROM_MNHNAME('VT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XVT
 CALL FIND_FIELD_ID_FROM_MNHNAME('WT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XWT
@@ -3839,26 +3899,51 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('TKET', IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(K
 CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XPABST
 CALL FIND_FIELD_ID_FROM_MNHNAME('RT',   IID,IRESP); TFIELDLIST(IID)%TFIELD_X4D(KFROM)%DATA => XRT
 !
-IF (CONF_MODEL(KFROM)%IDX_RVT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RVT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RCT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RCT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RRT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RRT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RIT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RIT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RST>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RST',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RST)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RGT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RGT)
-END IF
-IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RHT)
+IF (ASSOCIATED(XRT)) THEN
+  IF (CONF_MODEL(KFROM)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RVT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RCT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RRT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RIT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RST)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RGT)
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>XRT(:,:,:,CONF_MODEL(KFROM)%IDX_RHT)
+  END IF
+ELSE
+  IF (CONF_MODEL(KFROM)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+  IF (CONF_MODEL(KFROM)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA=>NULL()
+  END IF
+
 END IF
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('SUPSATMAX',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XSUPSAT
@@ -3907,6 +3992,7 @@ IF (CPROGRAM == 'MESONH') THEN
   END IF
   CALL FIND_FIELD_ID_FROM_MNHNAME('CLDFR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XCLDFR
   CALL FIND_FIELD_ID_FROM_MNHNAME('CIT',  IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XCIT
+  CALL FIND_FIELD_ID_FROM_MNHNAME('RAINFR',IID,IRESP); TFIELDLIST(IID)%TFIELD_X3D(KFROM)%DATA => XRAINFR
   !
 END IF
 !
@@ -4117,6 +4203,7 @@ IF( KFROM/=KTO) THEN
 !
 ! MODD_FIELD_n variables
 !
+CALL FIND_FIELD_ID_FROM_MNHNAME('ZWS',  IID,IRESP); XZWS   => TFIELDLIST(IID)%TFIELD_X2D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('UT',   IID,IRESP); XUT    => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('VT',   IID,IRESP); XVT    => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('WT',   IID,IRESP); XWT    => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
@@ -4125,33 +4212,64 @@ CALL FIND_FIELD_ID_FROM_MNHNAME('TKET', IID,IRESP); XTKET  => TFIELDLIST(IID)%TF
 CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP); XPABST => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 CALL FIND_FIELD_ID_FROM_MNHNAME('RT',   IID,IRESP); XRT    => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA
 !
-IF (CONF_MODEL(KTO)%IDX_RVT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RVT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RCT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RCT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RRT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RRT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RIT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RIT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RST>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RST)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RGT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RGT)
-END IF
-IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN
-  CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID2,IRESP)
-  TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RHT)
+IF (ASSOCIATED(XRT)) THEN
+  IF (CONF_MODEL(KTO)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RVT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RCT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RRT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RIT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RST)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RGT)
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => TFIELDLIST(IID)%TFIELD_X4D(KTO)%DATA(:,:,:,CONF_MODEL(KTO)%IDX_RHT)
+  END IF
+ELSE
+  IF (CONF_MODEL(KTO)%IDX_RVT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RCT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RRT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RIT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RST>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RGT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
+  IF (CONF_MODEL(KTO)%IDX_RHT>0) THEN
+    CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID2,IRESP)
+    TFIELDLIST(IID2)%TFIELD_X3D(KTO)%DATA => NULL()
+  END IF
 END IF
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME('SUPSATMAX',IID,IRESP); XSUPSAT => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
@@ -4200,6 +4318,7 @@ IF (CPROGRAM == 'MESONH') THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('THS_CLD',IID,IRESP); XRTHS_CLD => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('CLDFR',  IID,IRESP); XCLDFR    => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
   CALL FIND_FIELD_ID_FROM_MNHNAME('CIT',    IID,IRESP); XCIT      => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
+  CALL FIND_FIELD_ID_FROM_MNHNAME('RAINFR',  IID,IRESP); XRAINFR   => TFIELDLIST(IID)%TFIELD_X3D(KTO)%DATA
 END IF
 !
 ! MODD_PAST_FIELD_n variables
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
deleted file mode 100644
index 02265538caf83cd8da4c91da4ec9c7bf87bf3cac..0000000000000000000000000000000000000000
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ /dev/null
@@ -1,574 +0,0 @@
-!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:
-!  D.Gazen   : avril 2016 change error message
-!  P. Wautelet : may 2016: use NetCDF Fortran module
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 29/10/2018: better detection of older MNH version numbers
-!  Philippe Wautelet: 13/12/2018: moved some operations to new mode_io_*_nc4 modules
-!  Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN + move management
-!                                 of NNCID and NLFIFLU to the nc4 and lfi subroutines
-!  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
-!                                 to allow to disable writes (for bench purposes)
-!-----------------------------------------------------------------
-
-MODULE MODE_FM
-USE MODD_MPIF
-
-USE MODE_MSG
-
-IMPLICIT NONE 
-
-PRIVATE 
-
-PUBLIC SET_FMPACK_ll
-PUBLIC IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
-
-CONTAINS 
-
-SUBROUTINE SET_FMPACK_ll(O1D,O2D,OPACK)
-USE MODD_IO_ll, ONLY : LPACK,L1D,L2D
-!JUAN
-USE MODD_VAR_ll, ONLY : IP
-!JUAN
-
-IMPLICIT NONE 
-
-LOGICAL, INTENT(IN) :: O1D,O2D,OPACK
-
-LPACK = OPACK
-L1D   = O1D
-L2D   = O2D
-
-IF ( IP .EQ. 1 ) PRINT *,'INIT L1D,L2D,LPACK = ',L1D,L2D,LPACK
-
-END SUBROUTINE SET_FMPACK_ll
-
-SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO,HPOSITION,HSTATUS,HPROGRAM_ORIG)
-!
-USE MODD_CONF,  ONLY: CPROGRAM
-USE MODD_IO_ll, ONLY: LIO_NO_WRITE, TFILEDATA
-USE MODE_FMREAD
-USE MODE_IO_ll, ONLY : OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME
-!
-TYPE(TFILEDATA),POINTER,INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,                INTENT(OUT), OPTIONAL :: KRESP  ! Return code
-LOGICAL,                INTENT(IN),  OPTIONAL :: OPARALLELIO
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HPOSITION
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HSTATUS
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-!
-INTEGER :: IRESP
-TYPE(TFILEDATA),POINTER :: TZFILE_DES
-TYPE(TFILEDATA),POINTER :: TZFILE_DUMMY
-!
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)// &
-               ' (filetype='//TRIM(TPFILE%CTYPE)//')')
-!
-IF (.NOT.ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_OPEN_ll','TPFILE is not associated')
-!
-IF ( LIO_NO_WRITE .AND. TPFILE%CMODE == 'WRITE' .AND. TPFILE%CTYPE/='OUTPUTLISTING') THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_OPEN_ll','opening file '//TRIM(TPFILE%CNAME)//' in write mode but LIO_NO_WRITE is set')
-END IF
-!
-TZFILE_DES   => NULL()
-TZFILE_DUMMY => NULL()
-!
-TPFILE%NOPEN         = TPFILE%NOPEN + 1
-TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT + 1
-!
-IF (TPFILE%LOPENED) THEN
-  CALL PRINT_MSG(NVERB_INFO,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' is already in open state')
-  RETURN
-END IF
-!
-TPFILE%LOPENED       = .TRUE.
-!
-!Check if file is in filelist
-CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP)
-IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_OPEN_ll','file '//TRIM(TPFILE%CNAME)//' not in filelist')
-!
-SELECT CASE(TPFILE%CTYPE)
-  !Chemistry input files
-  CASE('CHEMINPUT')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION='REWIND',STATUS='OLD',MODE='GLOBAL')
-
-
-  !Chemistry tabulation files
-  CASE('CHEMTAB')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL')
-
-
-  !GPS files
-  CASE('GPS')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='SPECIFIC')
-
-
-  !Meteo files
-  CASE('METEO')
-   CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='UNFORMATTED',MODE='GLOBAL',RECL=100000000)
-
-
-  !Namelist files
-  CASE('NML')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,DELIM='QUOTE',MODE='GLOBAL')
-
-
-  !OUTPUTLISTING files
-  CASE('OUTPUTLISTING')
-    CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',MODE='GLOBAL')
-
-
-  !SURFACE_DATA files
-  CASE('SURFACE_DATA')
-    IF (TPFILE%CFORM=='FORMATTED') THEN
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL')
-    ELSE IF (TPFILE%CACCESS=='DIRECT') THEN
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,ACCESS=TPFILE%CACCESS,RECL=TPFILE%NRECL,MODE='GLOBAL')
-    ELSE
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM=TPFILE%CFORM,MODE='GLOBAL')
-    END IF
-
-
-  !Text files
-  CASE('TXT')
-    IF(TPFILE%NRECL>0) THEN
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,RECL=TPFILE%NRECL,MODE='GLOBAL')
-    ELSE
-      CALL OPEN_ll(TPFILE,IOSTAT=IRESP,FORM='FORMATTED',POSITION=HPOSITION,STATUS=HSTATUS,MODE='GLOBAL')
-    END IF
-
-
-  CASE DEFAULT
-    !Do not open '.des' file if OUTPUT
-    IF(TPFILE%CTYPE/='OUTPUT' .AND. CPROGRAM/='LFICDF') THEN
-      CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.) !OOLD=T because the file may already be in the list
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_OPEN_ll','OPEN_ll for '//TRIM(TPFILE%CNAME)//'.des')
-      CALL OPEN_ll(TZFILE_DES,FORM='FORMATTED',DELIM='QUOTE',IOSTAT=IRESP,RECL=1024*8,OPARALLELIO=OPARALLELIO)
-      TZFILE_DES%LOPENED       = .TRUE.
-      TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT + 1
-      TZFILE_DES%NOPEN         = TZFILE_DES%NOPEN + 1
-    ENDIF
-    !
-    CALL FMOPEN_ll(TPFILE,IRESP,OPARALLELIO=OPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG)
-
-END SELECT
-!
-IF (PRESENT(KRESP)) KRESP = IRESP
-!
-END SUBROUTINE IO_FILE_OPEN_ll
-
-SUBROUTINE FMOPEN_ll(TPFILE,KRESP,OPARALLELIO,HPROGRAM_ORIG)
-USE MODD_IO_ll,               ONLY: TFILEDATA
-USE MODE_IO_ll,               ONLY: OPEN_ll,GCONFIO
-!JUANZ
-USE MODD_CONFZ,ONLY  : NB_PROCIO_R,NB_PROCIO_W
-!JUANZ
-#if defined(MNH_IOCDF4)
-USE MODD_NETCDF, ONLY:IDCDF_KIND
-use mode_io_file_nc4, only: io_create_file_nc4, io_open_file_nc4
-#endif
-use mode_io_file_lfi, only: io_create_file_lfi, io_open_file_lfi
-
-TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure
-INTEGER,         INTENT(OUT)   :: KRESP  ! return-code
-LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
-CHARACTER(LEN=*),INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-!
-!   Local variables
-!
-INTEGER               :: IROWF, IRESP
-CHARACTER(LEN=7)      :: YACTION ! Action upon the file ('READ' or 'WRITE')
-CHARACTER(LEN=8)      :: YRESP
-INTEGER               :: IERR
-INTEGER               :: INB_PROCIO
-LOGICAL               :: GPARALLELIO
-LOGICAL               :: GEXIST_LFI, GEXIST_NC4
-
-YACTION = TPFILE%CMODE
-
-CALL PRINT_MSG(NVERB_DEBUG,'IO','FMOPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(YACTION))
-
-IF ( PRESENT(OPARALLELIO) ) THEN
-  GPARALLELIO = OPARALLELIO
-ELSE  !par defaut on active les IO paralleles en Z si possible
-  GPARALLELIO = .TRUE.
-ENDIF
-
-IF (.NOT. GCONFIO) THEN
-   PRINT *, 'FMOPEN_ll Aborting... Please, ensure to call SET_CONFIO_ll before &
-        &the first FMOPEN_ll call.'
-   STOP
-END IF
-
-IROWF  = 0
-IRESP  = 0
-
-IROWF=LEN_TRIM(TPFILE%CNAME)
-
-IF (IROWF.EQ.0) THEN
-  IRESP=-45
-  GOTO 1000
-ENDIF
-
- SELECT CASE (YACTION)
- CASE('READ')
-    INB_PROCIO = NB_PROCIO_R
- CASE('WRITE')
-    INB_PROCIO = NB_PROCIO_W
- END SELECT
-CALL OPEN_ll(TPFILE,STATUS="UNKNOWN",MODE='IO_ZSPLIT',IOSTAT=IRESP,     &
-             KNB_PROCIO=INB_PROCIO,OPARALLELIO=GPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG)
-
-IF (IRESP /= 0) GOTO 1000
-
-IF (TPFILE%LMASTER) THEN
-  ! Proc I/O case
-  INQUIRE(FILE=TRIM(TPFILE%CNAME)//'.lfi',EXIST=GEXIST_LFI)
-  INQUIRE(FILE=TRIM(TPFILE%CNAME)//'.nc',EXIST=GEXIST_NC4)
-
-  IF (YACTION == 'READ') THEN
-    IF (.NOT.GEXIST_LFI .AND. .NOT.GEXIST_NC4) &
-      CALL PRINT_MSG(NVERB_FATAL,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)//': no .nc or .lfi file')
-
-    SELECT CASE (TRIM(TPFILE%CFORMAT))
-      CASE ('NETCDF4')
-        IF (.NOT.GEXIST_NC4 .AND. GEXIST_LFI) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// &
-                         ': .nc file does not exist but .lfi exists -> forced to LFI')
-          TPFILE%CFORMAT='LFI'
-        END IF
-      CASE ('LFI')
-        IF (.NOT.GEXIST_LFI .AND. GEXIST_NC4) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// &
-                         ': .lfi file does not exist but .nc exists -> forced to NETCDF4')
-          TPFILE%CFORMAT='NETCDF4'
-        END IF
-      CASE ('LFICDF4')
-        IF (GEXIST_NC4) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// &
-                         ': LFICDF4 format is not allowed in READ mode -> forced to NETCDF4')
-          TPFILE%CFORMAT='NETCDF4'
-        ELSE IF (GEXIST_LFI) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// &
-                         ': LFICDF4 format is not allowed in READ mode -> forced to LFI')
-          TPFILE%CFORMAT='LFI'
-        END IF
-      CASE DEFAULT
-        IF (GEXIST_NC4) THEN
-          CALL PRINT_MSG(NVERB_ERROR,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// &
-                         ': invalid fileformat (-> forced to NETCDF4 if no abort)')
-          TPFILE%CFORMAT='NETCDF4'
-        ELSE IF (GEXIST_LFI) THEN
-          CALL PRINT_MSG(NVERB_ERROR,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)// &
-                         ': invalid fileformat (-> forced to LFI if no abort)')
-          TPFILE%CFORMAT='LFI'
-        END IF
-    END SELECT
-  END IF
-END IF
-
-#if defined(MNH_IOCDF4)
-IF (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4') THEN
-  SELECT CASE (YACTION)
-    CASE('READ')
-      call io_open_file_nc4(tpfile)
-    CASE('WRITE')
-      call io_create_file_nc4(TPFILE, hprogram_orig=HPROGRAM_ORIG)
-  END SELECT
-END IF
-#endif
-
-IF (TPFILE%CFORMAT=='LFI' .OR. TPFILE%CFORMAT=='LFICDF4') THEN
-  SELECT CASE (YACTION)
-    CASE('READ')
-      call io_open_file_lfi(tpfile,iresp)
-    CASE('WRITE')
-      call io_create_file_lfi(tpfile,iresp)
-  END SELECT
-END IF
-
-! Broadcast ERROR
-CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
-IF (IRESP /= 0) GOTO 1000
-
-
-1000 CONTINUE
-
-IF (IRESP.NE.0)  THEN
-  WRITE(YRESP,"( I0 )") IRESP
-  CALL PRINT_MSG(NVERB_ERROR,'IO','FMOPEN_ll',TRIM(TPFILE%CNAME)//': exit with IRESP='//TRIM(YRESP))
-END IF
-
-KRESP=IRESP
-
-END SUBROUTINE FMOPEN_ll
-
-SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,KRESP,OPARALLELIO,HPROGRAM_ORIG)
-!
-USE MODD_CONF,  ONLY: CPROGRAM
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_IO_ll, ONLY : CLOSE_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
-!
-TYPE(TFILEDATA),  INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,          INTENT(OUT), OPTIONAL :: KRESP  ! Return code
-LOGICAL,          INTENT(IN),  OPTIONAL :: OPARALLELIO
-CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-!
-INTEGER                 :: IRESP, JI
-TYPE(TFILEDATA),POINTER :: TZFILE_DES
-TYPE(TFILEDATA),POINTER :: TZFILE_IOZ
-!
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_CLOSE_ll','closing '//TRIM(TPFILE%CNAME))
-!
-IF (.NOT.TPFILE%LOPENED) THEN
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_CLOSE_ll','trying to close a file not opened: '//TRIM(TPFILE%CNAME))
-  RETURN
-ENDIF
-!
-IF (TPFILE%NOPEN_CURRENT>1) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_CLOSE_ll',TRIM(TPFILE%CNAME)// &
-                 ': decrementing NOPEN_CURRENT (still opened after this call)')
-  TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT - 1
-  TPFILE%NCLOSE        = TPFILE%NCLOSE        + 1
-  !
-  DO JI = 1,TPFILE%NSUBFILES_IOZ
-    TZFILE_IOZ => TPFILE%TFILES_IOZ(JI)%TFILE
-    TZFILE_IOZ%NOPEN_CURRENT = TZFILE_IOZ%NOPEN_CURRENT - 1
-    TZFILE_IOZ%NCLOSE        = TZFILE_IOZ%NCLOSE        + 1
-  END DO
-  !
-  RETURN
-END IF
-!
-SELECT CASE(TPFILE%CTYPE)
-  !Chemistry input files
-  CASE('CHEMINPUT')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  !Chemistry tabulation files
-  CASE('CHEMTAB')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  !GPS files
-  CASE('GPS')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  !Meteo files
-  CASE('METEO')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  !Namelist files
-  CASE('NML')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  !OUTPUTLISTING files
-  CASE('OUTPUTLISTING')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP,OPARALLELIO=.FALSE.)
-    !
-    TPFILE%NLU = -1
-
-
-  !SURFACE_DATA files
-  CASE('SURFACE_DATA')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  !Text files
-  CASE('TXT')
-    CALL CLOSE_ll(TPFILE,IOSTAT=IRESP)
-    !
-    TPFILE%NLU = -1
-
-
-  CASE DEFAULT
-    !Do not close (non-existing) '.des' file if OUTPUT
-    IF(TPFILE%CTYPE/='OUTPUT' .AND. CPROGRAM/='LFICDF') THEN
-      CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//'.des',TZFILE_DES,IRESP)
-      IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_CLOSE_ll','file '//TRIM(TPFILE%CNAME)//'.des not in filelist')
-      !
-      TZFILE_DES%NOPEN_CURRENT = TZFILE_DES%NOPEN_CURRENT - 1
-      TZFILE_DES%NCLOSE        = TZFILE_DES%NCLOSE + 1
-      !
-      IF (TZFILE_DES%NOPEN_CURRENT==0) THEN
-        CALL CLOSE_ll(TZFILE_DES,IOSTAT=IRESP)
-        TZFILE_DES%LOPENED = .FALSE.
-        TZFILE_DES%NLU     = -1
-      END IF
-    ENDIF
-    !
-    CALL FMCLOS_ll(TPFILE,KRESP=IRESP,OPARALLELIO=OPARALLELIO,HPROGRAM_ORIG=HPROGRAM_ORIG)
-    !
-    DO JI = 1,TPFILE%NSUBFILES_IOZ
-      TZFILE_IOZ => TPFILE%TFILES_IOZ(JI)%TFILE
-      IF (.NOT.TZFILE_IOZ%LOPENED) &
-        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_CLOSE_ll','file '//TRIM(TZFILE_IOZ%CNAME)//' is not opened')
-      IF (TZFILE_IOZ%NOPEN_CURRENT/=1) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_CLOSE_ll','file '//TRIM(TZFILE_IOZ%CNAME)//&
-                       ' is currently opened 0 or several times (expected only 1)')
-      TZFILE_IOZ%LOPENED       = .FALSE.
-      TZFILE_IOZ%NOPEN_CURRENT = 0
-      TZFILE_IOZ%NCLOSE        = TZFILE_IOZ%NCLOSE + 1
-    END DO
-END SELECT
-!
-TPFILE%LOPENED       = .FALSE.
-TPFILE%NOPEN_CURRENT = 0
-TPFILE%NCLOSE        = TPFILE%NCLOSE + 1
-!
-IF (PRESENT(KRESP)) KRESP=IRESP
-!
-END SUBROUTINE IO_FILE_CLOSE_ll
-
-SUBROUTINE FMCLOS_ll(TPFILE,KRESP,OPARALLELIO,HPROGRAM_ORIG)
-!
-!!    MODIFICATIONS
-!!    -------------
-!
-!!      J.Escobar   18/10/10   bug with PGI compiler on ADJUSTL
-!-------------------------------------------------------------------------------
-USE MODD_CONF,  ONLY : CPROGRAM
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODE_IO_ll, ONLY : CLOSE_ll,UPCASE
-#if !defined(MNH_SGI)
-USE MODI_SYSTEM_MNH
-#endif
-  use mode_io_file_lfi,  only: io_close_file_lfi
-#if defined(MNH_IOCDF4)
-  use mode_io_file_nc4,  only: io_close_file_nc4
-  use mode_io_write_nc4, only: io_write_coordvar_nc4
-#endif
-TYPE(TFILEDATA),      INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,              INTENT(OUT), OPTIONAL :: KRESP   ! return-code if problems araised
-LOGICAL,              INTENT(IN),  OPTIONAL :: OPARALLELIO
-CHARACTER(LEN=*),     INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-
-INTEGER                 :: IRESP,IROWF
-CHARACTER(LEN=28)       :: YFILEM  ! name of the file
-CHARACTER(LEN=8)        :: YRESP
-CHARACTER(LEN=10)       :: YCPIO
-CHARACTER(LEN=14)       :: YTRANS
-CHARACTER(LEN=100)      :: YCOMMAND
-INTEGER                 :: IERR, IFITYP
-INTEGER, SAVE           :: ICPT=0
-LOGICAL                 :: GPARALLELIO
-
-YFILEM  = TPFILE%CNAME
-
-CALL PRINT_MSG(NVERB_DEBUG,'IO','FMCLOS_ll','closing '//TRIM(YFILEM))
-
-IF ( PRESENT(OPARALLELIO) ) THEN
-  GPARALLELIO = OPARALLELIO
-ELSE
-  GPARALLELIO = .TRUE.  !par defaut on active les IO paralleles en Z si possible
-ENDIF
-
-IRESP  = 0
-IROWF  = 0
-
-IROWF=LEN_TRIM(YFILEM)
-
-IF (IROWF.EQ.0) THEN
-  IRESP=-59
-  GOTO 1000
-ENDIF
-
-#if defined(MNH_IOCDF4)
-!Write coordinates variables in NetCDF file
-IF (TPFILE%CMODE == 'WRITE' .AND. (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4')) THEN
-  CALL IO_WRITE_COORDVAR_NC4(TPFILE,HPROGRAM_ORIG=HPROGRAM_ORIG)
-END IF
-#endif
-
-IF (TPFILE%LMASTER) THEN
-  if (tpfile%cformat == 'LFI'     .or. tpfile%cformat == 'LFICDF4') call io_close_file_lfi(tpfile,iresp)
-#if defined(MNH_IOCDF4)
-  if (tpfile%cformat == 'NETCDF4' .or. tpfile%cformat == 'LFICDF4') call io_close_file_nc4(tpfile,iresp)
-#endif
-  IF (IRESP == 0 .AND. CPROGRAM/='LFICDF') THEN
-    !! Write in pipe
-#if defined(MNH_LINUX) || defined(MNH_SP4)
-    YTRANS='xtransfer.x'
-#elif defined(MNH_SX5)
-    YTRANS='nectransfer.x'
-#else
-    YTRANS='fujitransfer.x'
-#endif
-    IFITYP = TPFILE%NLFITYPE
-    
-    SELECT CASE (IFITYP)
-    CASE(:-1)
-      IRESP=-66
-      GOTO 500
-    CASE(0)
-      YCPIO='NIL'
-    CASE(1)
-      YCPIO='MESONH'
-    CASE(2)
-      PRINT *,'FILE ',YFILEM,' NOT TRANSFERED'
-      GOTO 500
-    CASE(3:)
-      IRESP=-66
-      GOTO 500
-    END SELECT
-!   WRITE (YCOMMAND,*) YTRANS,' ',YCPIO,' ',YFILEM
-#if defined(MNH_LINUX) || defined(MNH_VPP) || defined(MNH_SX5) ||  defined(MNH_SP4)
-    ICPT=ICPT+1
-    WRITE (YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER",I3.3,"  2>&1 &")') TRIM(YTRANS),TRIM(YCPIO),TRIM(YFILEM),ICPT
-!JUAN jusqu'a MASDEV4_4    WRITE (YCOMMAND,'(A," ",A," ",A,"  ")') TRIM(YTRANS),TRIM(YCPIO),TRIM(YFILEM)
-#endif
-#if defined(MNH_SGI)
-    WRITE (YCOMMAND,'(A," ",A," ",A," &")') TRIM(YTRANS),TRIM(YCPIO),TRIM(YFILEM)
-#endif
-
-    PRINT *,'YCOMMAND =',YCOMMAND
-#if !defined(MNH_SGI)
-    CALL SYSTEM_MNH(YCOMMAND)
-#endif
-  END IF
-END IF
-
-500 CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
-IF (IRESP /= 0) GOTO 1000
-
-CALL CLOSE_ll(TPFILE,IOSTAT=IRESP,OPARALLELIO=GPARALLELIO)
-
-1000 CONTINUE
-
-IF (IRESP.NE.0)  THEN
-  WRITE(YRESP,"( I0 )") IRESP
-  CALL PRINT_MSG(NVERB_ERROR,'IO','FMCLOS_ll',TRIM(YFILEM)//': exit with IRESP='//TRIM(YRESP))
-END IF
-
-IF (PRESENT(KRESP)) KRESP=IRESP
-
-! format: 14c for fujitransfer.x and mesonh/nil
-!         32c for file name
-! if you have to change this format one day, don't forget the blank after 1H
-! 20 FORMAT(A14,1H ,A10,1H ,A32,1H ,A1)
-!
-END SUBROUTINE FMCLOS_ll
-
-END MODULE MODE_FM
diff --git a/src/LIB/SURCOUCHE/src/mode_ga.f90 b/src/LIB/SURCOUCHE/src/mode_ga.f90
index 7457a7f3e20a8cdc4efc505078488034d0e698b9..9a2d05b6d6fe372ce51c922e91b467e545ed0b0b 100644
--- a/src/LIB/SURCOUCHE/src/mode_ga.f90
+++ b/src/LIB/SURCOUCHE/src/mode_ga.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!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.
@@ -6,7 +6,9 @@
 ! Author: J.Escobar
 !
 ! Modifications:
-!  P.Wautelet: 14/12/2018: split from fmwrit_ll.f90
+!  J. Escobar  05/02/2015: use JPHEXT from MODD_PARAMETERS_ll
+!  P. Wautelet 14/12/2018: split from fmwrit_ll.f90
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 #ifdef MNH_GA
 MODULE MODE_GA
@@ -36,15 +38,13 @@ MODULE MODE_GA
 
     SUBROUTINE MNH_INIT_GA(MY_NI,MY_NJ,MY_NK,HRECFM,HRW_MODE)
 
-!
-!  Modification
-!  J.Escobar 5/02/2015 : use JPHEXT from MODD_PARAMETERS_ll
+      USE MODD_IO,             ONLY: ISP
+      USE MODD_PARAMETERS_ll,  ONLY: JPHEXT
 
-      USE MODE_TOOLS_ll,       ONLY : GET_GLOBALDIMS_ll
-      USE MODD_PARAMETERS_ll,  ONLY : JPHEXT
-      USE MODD_IO_ll,          ONLY : ISP
-      USE MODE_GATHER_ll,      ONLY : GET_DOMWRITE_ll
-      USE MODE_SCATTER_ll,     ONLY : GET_DOMREAD_ll
+      USE MODE_GATHER_ll,      ONLY: GET_DOMWRITE_ll
+      use mode_msg
+      USE MODE_SCATTER_ll,     ONLY: GET_DOMREAD_ll
+      USE MODE_TOOLS_ll,       ONLY: GET_GLOBALDIMS_ll
 
       IMPLICIT NONE
 
@@ -60,7 +60,7 @@ MODULE MODE_GA
          stack = heap
          !gstatus_ga = ma_init(MT_F_DBL, stack/ISNPROC, heap/ISNPROC)
          gstatus_ga = ma_init(MT_F_DBL, stack, heap)
-         if ( .not. gstatus_ga ) STOP " MA_INIT FAILED "
+         if ( .not. gstatus_ga ) call Print_msg( NVERB_FATAL, 'GEN', 'MNH_INIT_GA', 'MA_INIT failed' )
          !
          !   Initialize GA library
          !
diff --git a/src/LIB/SURCOUCHE/src/mode_gather.f90 b/src/LIB/SURCOUCHE/src/mode_gather.f90
index 4aec0e9b3efe5cb795b407d6848c8d51c441d15e..613aa8f280036112a77b8a467fe6b90a26a0a26d 100644
--- a/src/LIB/SURCOUCHE/src/mode_gather.f90
+++ b/src/LIB/SURCOUCHE/src/mode_gather.f90
@@ -1,27 +1,21 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
-
-MODULE MODE_GATHER_ll
-
 ! Modifications:
 !   J.Escobar 10/02/2012 : Bug , in MPI_RECV replace MPI_STATUSES_IGNORE
 !                          with MPI_STATUS_IGNORE
 !   J.Escobar 22/05/2012 : Bug in ISEND with non-contiguous buffer , reintroduce intermediate buffer
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !
+!-----------------------------------------------------------------
+
+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 
 
@@ -71,7 +65,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
 
@@ -94,7 +88,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
 
@@ -118,7 +112,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
 
@@ -195,8 +189,8 @@ END SUBROUTINE GATHERALL_L3
 ! Gather des champs XX (ou YY)
 !
 SUBROUTINE GATHERXX_X1(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,     ONLY: ISP, ISNPROC
+USE MODD_VAR_ll, ONLY: MNH_STATUSES_IGNORE
 
 CHARACTER(LEN=*),        INTENT(IN) :: HDIR
 REAL,DIMENSION(:),TARGET,INTENT(IN) :: PSEND
@@ -230,7 +224,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 
@@ -238,7 +232,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
@@ -251,15 +245,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
 
@@ -267,7 +261,7 @@ END SUBROUTINE GATHERXX_X1
 
 
 SUBROUTINE GATHERXX_X2(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),          INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
@@ -298,7 +292,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 
@@ -306,7 +300,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
@@ -318,17 +312,17 @@ 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
 
 END SUBROUTINE GATHERXX_X2
 
 SUBROUTINE GATHERXX_X3(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),            INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -359,7 +353,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 
@@ -367,7 +361,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
@@ -379,17 +373,17 @@ 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
 
 END SUBROUTINE GATHERXX_X3
 
 SUBROUTINE GATHERXX_X4(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -420,7 +414,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 
@@ -428,7 +422,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
@@ -440,17 +434,17 @@ 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
 
 END SUBROUTINE GATHERXX_X4
 
 SUBROUTINE GATHERXX_X5(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -481,7 +475,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 
@@ -489,7 +483,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
@@ -501,17 +495,17 @@ 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
 
 END SUBROUTINE GATHERXX_X5
 
 SUBROUTINE GATHERXX_X6(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                  INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -542,7 +536,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 +544,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,17 +556,17 @@ 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
 
 END SUBROUTINE GATHERXX_X6
 
 SUBROUTINE GATHERXX_N1(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),           INTENT(IN) :: HDIR
 INTEGER,DIMENSION(:),TARGET,INTENT(IN) :: KSEND
@@ -635,7 +629,7 @@ END SUBROUTINE GATHERXX_N1
 
 
 SUBROUTINE GATHERXX_N2(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),             INTENT(IN) :: HDIR
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
@@ -697,7 +691,7 @@ END IF
 END SUBROUTINE GATHERXX_N2
 
 SUBROUTINE GATHERXX_N3(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),               INTENT(IN)   :: HDIR
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN)   :: KSEND
@@ -758,7 +752,7 @@ END IF
 END SUBROUTINE GATHERXX_N3
 
 SUBROUTINE GATHERXX_L1(HDIR,OSEND,ORECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),           INTENT(IN)    :: HDIR
 LOGICAL,DIMENSION(:),TARGET,INTENT(IN)    :: OSEND
@@ -820,7 +814,7 @@ END IF
 END SUBROUTINE GATHERXX_L1
 
 SUBROUTINE GATHERXX_L3(HDIR,OSEND,ORECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY : ISP, ISNPROC
 
 CHARACTER(LEN=*),               INTENT(IN)   :: HDIR
 LOGICAL,DIMENSION(:,:,:),TARGET,INTENT(IN)   :: OSEND
@@ -884,8 +878,8 @@ END SUBROUTINE GATHERXX_L3
 ! Gather des champs XY
 !
 SUBROUTINE GATHERXY_X2(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO, ONLY: ISP, ISNPROC
+USE MODD_VAR_ll, ONLY: MNH_STATUSES_IGNORE
 
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:),TARGET,INTENT(INOUT):: PRECV
@@ -915,7 +909,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
@@ -927,17 +921,17 @@ 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
 
 END SUBROUTINE GATHERXY_X2
 
 SUBROUTINE GATHERXY_X3(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -962,7 +956,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
@@ -971,14 +965,14 @@ 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
 
 END SUBROUTINE GATHERXY_X3
 
 SUBROUTINE GATHERXY_X4(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1003,7 +997,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
@@ -1012,14 +1006,14 @@ 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
 
 END SUBROUTINE GATHERXY_X4
 
 SUBROUTINE GATHERXY_X5(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1044,7 +1038,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
@@ -1053,14 +1047,14 @@ 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
 
 END SUBROUTINE GATHERXY_X5
 
 SUBROUTINE GATHERXY_X6(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1085,7 +1079,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
@@ -1094,14 +1088,14 @@ 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
 
 END SUBROUTINE GATHERXY_X6
 
 SUBROUTINE GATHERXY_N2(KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
 INTEGER,DIMENSION(:,:),TARGET,INTENT(INOUT):: KRECV
@@ -1136,7 +1130,7 @@ END IF
 END SUBROUTINE GATHERXY_N2
 
 SUBROUTINE GATHERXY_N3(KSEND,KRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KSEND
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(INOUT):: KRECV
@@ -1177,7 +1171,7 @@ END IF
 END SUBROUTINE GATHERXY_N3
 
 SUBROUTINE GATHERXY_L3(OSEND,ORECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY : ISP, ISNPROC
 
 LOGICAL,DIMENSION(:,:,:),TARGET,INTENT(IN)   :: OSEND
 LOGICAL,DIMENSION(:,:,:),TARGET,INTENT(INOUT):: ORECV
@@ -1218,7 +1212,7 @@ END IF
 END SUBROUTINE GATHERXY_L3
 
 SUBROUTINE GATHERBOX_X2(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1242,7 +1236,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
@@ -1251,7 +1245,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
 
@@ -1260,10 +1254,11 @@ END SUBROUTINE GATHERBOX_X2
 SUBROUTINE GET_DOMWRITE_ll(KIP,HTYPE,KXOR,KXEND,KYOR,KYEND,&
                          & KXORBOX,KXENDBOX,KYORBOX,KYENDBOX,HINTER)
 
-USE MODD_VAR_ll,       ONLY : TCRRT_PROCONF
-USE MODD_STRUCTURE_ll,  ONLY : MODELSPLITTING_ll 
-USE MODE_TOOLS_ll,     ONLY : LWEST_ll,LEAST_ll,LSOUTH_ll,LNORTH_ll
-IMPLICIT NONE 
+USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+USE MODE_TOOLS_ll,     ONLY: LWEST_ll, LEAST_ll, LSOUTH_ll, LNORTH_ll
+USE MODD_VAR_ll,       ONLY: TCRRT_PROCONF
+
+IMPLICIT NONE
 
 INTEGER,                  INTENT(IN)  :: KIP
 CHARACTER(LEN=*),         INTENT(IN)  :: HTYPE
diff --git a/src/LIB/SURCOUCHE/src/mode_init_ll.f90 b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
index 6cd17f9c6963b90888e4781b9c1c55450be59db9..f6d436cf531b13fbc527b896b125050a3acb53a3 100644
--- a/src/LIB/SURCOUCHE/src/mode_init_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
@@ -1,17 +1,8 @@
-!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.
 !-----------------------------------------------------------------
-
-#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,17 +544,6 @@
         !
         IP = IP + 1
         !
-        MPI_PRECISION  = MNH_MPI_REAL
-        MPI_2PRECISION = MNH_MPI_2REAL
-        !
-        !-------------------------------------------------------------------------------
-        !
-        !*       2.    SET OUTPUT FILE :
-        !              ---------------
-
-        !  CALL OPEN_ll(UNIT=NIOUNIT,FILE=YOUTPUTFILE,ACTION='write',form&
-        !       &='FORMATTED',MODE=SPECIFIC,IOSTAT=IRESP)
-        !
         !-------------------------------------------------------------------------------
         !
         !*       3.    ALLOCATION :
@@ -752,15 +730,13 @@
 !*       0.    DECLARATIONS
 !
   USE MODD_DIM_ll
-!  USE MODD_STRUCTURE_ll
-!  USE MODD_VAR_ll, ONLY : NIOUNIT, YOUTPUTFILE
-  USE MODD_IO_ll,          ONLY : ISP
+  USE MODD_IO,        ONLY: ISP
 #ifdef CPLOASIS
-  USE MODD_SFX_OASIS, ONLY : LOASIS
+  USE MODD_SFX_OASIS, ONLY: LOASIS
 #endif
 !
 #ifdef MNH_GA
-USE MODE_GA
+  USE MODE_GA
 #endif
 !
   IMPLICIT NONE
@@ -776,8 +752,6 @@ USE MODE_GA
 !
 !*       1.    CALL TO MPI_FINALIZE
 !
-!  CALL CLOSE_ll(YOUTPUTFILE)
-
 #ifdef MNH_GA
   if (.not. GFIRST_GA ) then
      call ga_sync()
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 0434b5ea16e1eee43b1dda7f2d0f594c167090dd..09f3f32ee8466d421b437975dc887220e8585cc2 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -3,33 +3,17 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!!    Authors
-!!    -------
+! Author(s)
+!  D. Gazen
+! Modifications:
+!  P. Wautelet 01/03/2019: move OPEN_ll to mode_io_file.f90 and IO_Pack_set to here from mode_fm.f90
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !
-!     D. Gazen
-!     Juan 19/08/2005: bug argument optinonel ACCESS --> YACCESS 
-!     Juan 22/05/2008: bug mode SPECIFIC in OPEN_ll 
-!     Juan 05/11/2009: allow JPMAX_UNIT=48 open files 
-!     J.Escobar   18/10/10   bug with PGI compiler on ADJUSTL
-!     P. Wautelet 04/02/2016: bug with DELIM='NONE' and GCC 5.2/5.3
-!     D.Gazen   : avril 2016 change error message 
-!     P. Wautelet : may 2016: use netCDF Fortran module
-!     P. Wautelet : July 2016: added type OUTBAK
-!     Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!     J. Pianezze 01/08/2016  add LOASIS flag
-!     Philippe Wautelet: 13/12/2018: moved some operations to new mode_io_*_nc4 modules
-!     Philippe Wautelet: 10/01/2019: bug correction: close correctly Z-split files
-!     Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!                                    + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
-!                                    + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
-!     Philippe Wautelet: 10/01/2019: bug: modify some metadata before open calls
-!     Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow
-!                                    to disable writes (for bench purposes)
-!
-MODULE MODE_IO_ll
+!-----------------------------------------------------------------
+MODULE MODE_IO
 
   USE MODD_MPIF
-  USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+  USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD
 
   USE MODE_MSG
 
@@ -37,46 +21,30 @@ MODULE MODE_IO_ll
 
   PRIVATE
 
-  LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when SET_CONFIO_ll is called.
+  LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when IO_Config_set is called.
 
-  PUBLIC UPCASE,INITIO_ll,OPEN_ll,CLOSE_ll
-  PUBLIC SET_CONFIO_ll,GCONFIO
+  public :: GCONFIO
+  public :: IO_Init, IO_Config_set
+  public :: IO_Pack_set
 
 CONTAINS 
 
-  FUNCTION UPCASE(HSTRING)
-    CHARACTER(LEN=*)            :: HSTRING
-    CHARACTER(LEN=LEN(HSTRING)) :: UPCASE
-
-    INTEGER :: JC
-    INTEGER, PARAMETER :: IAMIN = IACHAR("a")
-    INTEGER, PARAMETER :: IAMAJ = IACHAR("A")
-
-    DO JC=1,LEN(HSTRING)
-       IF (HSTRING(JC:JC) >= "a" .AND. HSTRING(JC:JC) <= "z") THEN
-          UPCASE(JC:JC) = ACHAR(IACHAR(HSTRING(JC:JC)) - IAMIN + IAMAJ)
-       ELSE
-          UPCASE(JC:JC) = HSTRING(JC:JC)
-       END IF
-    END DO
-
-  END FUNCTION UPCASE
-
-  SUBROUTINE SET_CONFIO_ll()
-    USE MODN_CONFIO
+  SUBROUTINE IO_Config_set()
+    USE MODN_CONFIO, only: LCDF4, LLFIOUT, LLFIREAD
 
     !Use MODN_CONFIO namelist variables
-    CALL SET_CONFIO_INTERN_ll(LCDF4, LLFIOUT, LLFIREAD)
-  END SUBROUTINE SET_CONFIO_ll
+    CALL IO_Config_set_intern(LCDF4, LLFIOUT, LLFIREAD)
+  END SUBROUTINE IO_Config_set
+
+  SUBROUTINE IO_Config_set_intern(OIOCDF4, OLFIOUT, OLFIREAD)
+    USE MODD_IO, ONLY: LIOCDF4, LLFIOUT, LLFIREAD, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
 
-  SUBROUTINE SET_CONFIO_INTERN_ll(OIOCDF4, OLFIOUT, OLFIREAD)
-    USE MODD_IO_ll, ONLY : LIOCDF4, LLFIOUT, LLFIREAD, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
     LOGICAL, INTENT(IN) :: OIOCDF4, OLFIOUT, OLFIREAD
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','SET_CONFIO_ll','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Config_set','called')
 
     IF (GCONFIO) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','SET_CONFIO_ll','already called (ignoring this call)')
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Config_set','already called (ignoring this call)')
     ELSE
 #if defined(MNH_IOCDF4)
       LIOCDF4  = OIOCDF4
@@ -84,7 +52,7 @@ CONTAINS
       LLFIREAD = OLFIREAD
 
       IF (.NOT.LIOCDF4 .AND. .NOT.LLFIOUT) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','SET_CONFIO_ll','output format forced to netCDF')
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Config_set','output format forced to netCDF')
         LIOCDF4 = .TRUE.
       END IF
 #else
@@ -96,30 +64,32 @@ CONTAINS
 
       ! Set LIO_ALLOW_NO_BACKUP=.true. if writes are disabled (to be coherent)
       IF (LIO_NO_WRITE) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','SET_CONFIO_ll','file writes are disabled')
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Config_set','file writes are disabled')
         LIO_ALLOW_NO_BACKUP = .true.
       END IF
     END IF
 
-  END SUBROUTINE SET_CONFIO_INTERN_ll
+  END SUBROUTINE IO_Config_set_intern
+
+  SUBROUTINE IO_Init()
+    use MODD_IO, only: CNULLFILE, GSMONOPROC, nio_rank, ISNPROC, ISP, NNULLUNIT
 
-  SUBROUTINE INITIO_ll()
     USE MODE_MNH_WORLD, ONLY: INIT_NMNH_COMM_WORLD
-    USE MODD_IO_ll
-    USE MODE_FIELD
+
     IMPLICIT NONE
 
     INTEGER :: IERR, IOS
+    character(len=256) :: yioerrmsg
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','INITIO_ll','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Init','called')
 
     CALL INIT_NMNH_COMM_WORLD(IERR)
-    IF (IERR .NE.0) CALL PRINT_MSG(NVERB_FATAL,'IO','INITIO_ll','problem with remapping of NMNH_COMM_WORLD')
+    IF (IERR .NE.0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Init','problem with remapping of NMNH_COMM_WORLD')
 
     !! Now MPI is initialized for sure
 
     !! Default number for Processor I/O
-    ISIOP = 1
+    nio_rank = 1
 
     !! Get number of allocated processors
     CALL MPI_COMM_SIZE(NMNH_COMM_WORLD, ISNPROC,IERR)
@@ -131,745 +101,31 @@ CONTAINS
 
     !! Open /dev/null for GLOBAL mode
 #if defined(DEV_NULL)
-    OPEN(NEWUNIT=NNULLUNIT,FILE=CNULLFILE  ,ACTION='WRITE',IOSTAT=IOS)
+    OPEN(NEWUNIT=NNULLUNIT,FILE=CNULLFILE  ,ACTION='WRITE',IOSTAT=IOS, IOMSG=yioerrmsg)
 #else
-    OPEN(NEWUNIT=NNULLUNIT,STATUS='SCRATCH',ACTION='WRITE',IOSTAT=IOS)
-#endif
-    IF (IOS > 0) THEN
-       CALL PRINT_MSG(NVERB_FATAL,'IO','INITIO_ll','error opening /dev/null')
-    END IF
-  END SUBROUTINE INITIO_ll
-
-  SUBROUTINE OPEN_ll(&
-       TPFILE,  &
-       MODE,    &
-       COMM,    &
-       STATUS,  &
-       ACCESS,  &
-       IOSTAT,  &
-       FORM,    &
-       RECL,    &
-       BLANK,   &
-       POSITION,&
-       DELIM,    &
-       PAD,      &
-       KNB_PROCIO,& 
-       OPARALLELIO, &
-       HPROGRAM_ORIG)
-
-  USE MODD_IO_ll
-#if defined(MNH_IOCDF4)
-  USE MODD_NETCDF,              ONLY:IDCDF_KIND
-  use mode_io_file_nc4,         only: io_create_file_nc4, io_open_file_nc4
-#endif
-  use mode_io_file_lfi,         only: io_create_file_lfi, io_open_file_lfi
-  USE MODE_IO_MANAGE_STRUCT,    ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME
-  use mode_io_tools,            only: io_rank
-
-    TYPE(TFILEDATA), INTENT(INOUT)         :: TPFILE
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: MODE
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: STATUS
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: ACCESS
-    INTEGER,         INTENT(OUT)           :: IOSTAT
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: FORM
-    INTEGER,         INTENT(IN),  OPTIONAL :: RECL
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: BLANK
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: POSITION
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: DELIM
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: PAD
-    INTEGER,         INTENT(IN),  OPTIONAL :: COMM
-    INTEGER,         INTENT(IN),  OPTIONAL :: KNB_PROCIO
-    LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
-    CHARACTER(LEN=*),INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-    !
-    ! local var
-    !
-    CHARACTER(len=5)                      :: CFILE
-    INTEGER                               :: IFILE, IRANK_PROCIO
-
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
-    CHARACTER(len=20)    :: YSTATUS
-    CHARACTER(len=20)    :: YACCESS
-    CHARACTER(len=20)    :: YFORM
-    INTEGER              :: YRECL
-    INTEGER ,PARAMETER   :: RECL_DEF = 10000
-    CHARACTER(len=20)    :: YBLANK
-    CHARACTER(len=20)    :: YPOSITION
-    CHARACTER(len=20)    :: YDELIM
-    CHARACTER(len=20)    :: YPAD
-    !JUAN
-#endif
-    CHARACTER(len=20)    :: YACTION
-    CHARACTER(len=20)    :: YMODE
-    CHARACTER(LEN=256)   :: YIOERRMSG
-    INTEGER              :: IOS,IRESP
-    INTEGER              :: ICOMM
-    LOGICAL               :: GPARALLELIO
-    TYPE(TFILEDATA),POINTER :: TZSPLITFILE
-    CHARACTER(LEN=:),ALLOCATABLE :: YPREFILENAME !To store the directory + filename
-    CHARACTER(LEN=:),ALLOCATABLE :: YFORSTATUS  ! Status for open of a file (for LFI) ('OLD','NEW','UNKNOWN','SCRATCH','REPLACE')
-
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_ll','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE))
-    !
-    IF ( PRESENT(OPARALLELIO) ) THEN
-      GPARALLELIO = OPARALLELIO
-    ELSE  !par defaut on active les IO paralleles en Z si possible
-      GPARALLELIO = .TRUE.
-    ENDIF
-
-#ifdef MNH_VPP
-    !! BUG Fuji avec RECL non fourni en argument de MYOPEN
-    INTEGER :: IRECSIZE     
-    IF (PRESENT(RECL)) THEN
-       IRECSIZE = RECL
-    ELSE 
-       IRECSIZE = 2147483647  ! Default value for FUJI RECL
-    END IF
-#endif
-
-    IOS = 0
-    IF (PRESENT(COMM)) THEN 
-       ICOMM = COMM
-    ELSE
-       ICOMM = NMNH_COMM_WORLD ! Default communicator
-    END IF
-
-    IF (PRESENT(MODE)) THEN 
-       YMODE = MODE
-       YMODE = UPCASE(TRIM(ADJUSTL(YMODE)))
-    ELSE 
-       YMODE = 'GLOBAL'         ! Default Mode
-    END IF
-
-    YACTION = TPFILE%CMODE
-    YACTION = UPCASE(TRIM(ADJUSTL(YACTION)))
-    IF (YACTION /= "READ" .AND. YACTION /= "WRITE") THEN
-       IOSTAT = 99
-       TPFILE%NLU = -1
-       CALL PRINT_MSG(NVERB_ERROR,'IO','OPEN_ll','action='//TRIM(YACTION)//' not supported')
-       RETURN
-    END IF
-
-    IF (.NOT. ANY(YMODE == (/'GLOBAL     ','SPECIFIC   ','DISTRIBUTED' , 'IO_ZSPLIT  '/))) THEN
-       IOSTAT = 99
-       TPFILE%NLU = -1
-       CALL PRINT_MSG(NVERB_ERROR,'IO','OPEN_ll','ymode='//TRIM(YMODE)//' not supported')
-       RETURN
-    END IF
-
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
-    !JUAN
-    IF (PRESENT(STATUS)) THEN
-       YSTATUS=STATUS
-    ELSE
-       YSTATUS='UNKNOWN'
-    ENDIF
-    IF (PRESENT(ACCESS)) THEN
-       YACCESS=ACCESS
-    ELSE
-       YACCESS='SEQUENTIAL'
-    ENDIF
-    IF (PRESENT(FORM)) THEN
-       YFORM=FORM
-    ELSE
-       YFORM='FORMATTED'
-    ENDIF
-    IF (PRESENT(RECL)) THEN
-       YRECL=RECL
-    ELSE
-       YRECL=RECL_DEF
-    ENDIF
-    IF (PRESENT(BLANK)) THEN
-       YBLANK=BLANK
-    ELSE
-       YBLANK='NULL'
-    ENDIF
-    IF (PRESENT(POSITION)) THEN
-       YPOSITION=POSITION
-    ELSE
-       YPOSITION='ASIS'
-    ENDIF
-    IF (PRESENT(DELIM)) THEN
-       YDELIM=DELIM
-    ELSE
-       YDELIM='NONE'
-    ENDIF
-    IF (PRESENT(PAD)) THEN
-       YPAD=PAD
-    ELSE
-       YPAD='YES'
-    ENDIF
+    OPEN(NEWUNIT=NNULLUNIT,STATUS='SCRATCH',ACTION='WRITE',IOSTAT=IOS, IOMSG=yioerrmsg)
 #endif
-
-    IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
-      IF(LEN_TRIM(TPFILE%CDIRNAME)>0) THEN
-        YPREFILENAME = TRIM(TPFILE%CDIRNAME)//'/'//TRIM(TPFILE%CNAME)
-      ELSE
-        YPREFILENAME = TRIM(TPFILE%CNAME)
-      END IF
-    ELSE
-      YPREFILENAME = TRIM(TPFILE%CNAME)
+    IF (IOS /= 0) THEN
+       CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Init','problem opening /dev/null :'//trim(yioerrmsg))
     END IF
+  END SUBROUTINE IO_Init
 
-    SELECT CASE(YMODE)
-
-    CASE('GLOBAL')
-       IF (YACTION == 'READ') THEN
-          TPFILE%NMASTER_RANK  = -1
-          TPFILE%LMASTER       = .TRUE. !Every process read the file
-          TPFILE%LMULTIMASTERS = .TRUE.
-       ELSE
-          IF (TPFILE%CTYPE=='OUTPUTLISTING') THEN
-            IF (LVERB_ALLPRC) THEN
-              TPFILE%NMASTER_RANK  = -1
-              TPFILE%LMASTER       = .TRUE. !Every process may write in the file
-              TPFILE%LMULTIMASTERS = .TRUE.
-            ELSE
-              TPFILE%NMASTER_RANK  = ISIOP
-              TPFILE%LMASTER       = (ISP == ISIOP)
-              TPFILE%LMULTIMASTERS = .FALSE.
-            END IF
-          ELSE
-            TPFILE%NMASTER_RANK  = ISIOP
-            TPFILE%LMASTER       = (ISP == ISIOP)
-            TPFILE%LMULTIMASTERS = .FALSE.
-          END IF
-       END IF
-       TPFILE%NSUBFILES_IOZ = 0
-
-       IF (TPFILE%LMASTER) THEN
-          !! I/O processor case
-#ifdef MNH_VPP
-          OPEN(NEWUNIT=TPFILE%NLU,     &
-               FILE=TRIM(YPREFILENAME),&
-               STATUS=STATUS,          &
-               ACCESS=ACCESS,          &
-               IOSTAT=IOS,             &
-               IOMSG=YIOERRMSG,        &
-               FORM=FORM,              &
-               RECL=IRECSIZE,          &
-               BLANK=BLANK,            &
-               POSITION=POSITION,      &
-               ACTION=YACTION,         &
-               DELIM=DELIM,            &
-               PAD=PAD)
-
-#else
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
-          !JUAN : 31/03/2000 modif pour acces direct
-          IF (YACCESS=='STREAM') THEN
-             OPEN(NEWUNIT=TPFILE%NLU,     &
-                  FILE=TRIM(YPREFILENAME),&
-                  STATUS=YSTATUS,         &
-                  ACCESS=YACCESS,         &
-                  IOSTAT=IOS,             &
-                  IOMSG=YIOERRMSG,        &
-                  FORM=YFORM,             &
-                  ACTION=YACTION)
-          ELSEIF (YACCESS=='DIRECT') THEN
-             OPEN(NEWUNIT=TPFILE%NLU,     &
-                  FILE=TRIM(YPREFILENAME),&
-                  STATUS=YSTATUS,         &
-                  ACCESS=YACCESS,         &
-                  IOSTAT=IOS,             &
-                  IOMSG=YIOERRMSG,        &
-                  FORM=YFORM,             &
-                  RECL=YRECL,             &
-                  ACTION=YACTION)
-          ELSE
-             IF (YFORM=="FORMATTED") THEN
-               IF (YACTION=='READ') THEN
-                OPEN(NEWUNIT=TPFILE%NLU,     &
-                     FILE=TRIM(YPREFILENAME),&
-                     STATUS=YSTATUS,         &
-                     ACCESS=YACCESS,         &
-                     IOSTAT=IOS,             &
-                     IOMSG=YIOERRMSG,        &
-                     FORM=YFORM,             &
-                     RECL=YRECL,             &
-                     BLANK=YBLANK,           &
-                     POSITION=YPOSITION,     &
-                     ACTION=YACTION,         &
-                     !DELIM=YDELIM,          & !Philippe: commented because bug with GCC 5.X
-                     PAD=YPAD)
-               ELSE
-                OPEN(NEWUNIT=TPFILE%NLU,     &
-                     FILE=TRIM(YPREFILENAME),&
-                     STATUS=YSTATUS,         &
-                     ACCESS=YACCESS,         &
-                     IOSTAT=IOS,             &
-                     IOMSG=YIOERRMSG,        &
-                     FORM=YFORM,             &
-                     RECL=YRECL,             &
-                     BLANK=YBLANK,           &
-                     POSITION=YPOSITION,     &
-                     ACTION=YACTION,         &
-                     DELIM=YDELIM,           &
-                     PAD=YPAD)
-               ENDIF
-             ELSE
-                OPEN(NEWUNIT=TPFILE%NLU,     &
-                     FILE=TRIM(YPREFILENAME),&
-                     STATUS=YSTATUS,         &
-                     ACCESS=YACCESS,         &
-                     IOSTAT=IOS,             &
-                     IOMSG=YIOERRMSG,        &
-                     FORM=YFORM,             &
-                     RECL=YRECL,             &
-                     POSITION=YPOSITION,     &
-                     ACTION=YACTION)
-             ENDIF
-          ENDIF
-
-
-          !print*,' OPEN_ll'
-          !print*,' OPEN(NEWUNIT=',TPFILE%NLU
-          !print*,' FILE=',TRIM(YPREFILENAME)
-          !print*,' STATUS=',YSTATUS       
-          !print*,' ACCESS=',YACCESS
-          !print*,' IOSTAT=',IOS
-          !print*,' FORM=',YFORM
-          !print*,' RECL=',YRECL
-          !print*,' BLANK=',YBLANK
-          !print*,' POSITION=',YPOSITION
-          !print*,' ACTION=',YACTION
-          !print*,' DELIM=',YDELIM
-          !print*,' PAD=',YPAD
-#else
-          OPEN(NEWUNIT=TPFILE%NLU,     &
-               FILE=TRIM(YPREFILENAME),&
-               STATUS=STATUS,          &
-               ACCESS=ACCESS,          &
-               IOSTAT=IOS,             &
-               IOMSG=YIOERRMSG,        &
-               FORM=FORM,              &
-               RECL=RECL,              &
-               BLANK=BLANK,            &
-               POSITION=POSITION,      &
-               ACTION=YACTION,         &
-               DELIM=DELIM,            &
-               PAD=PAD)
-#endif
-
-#endif
-          IF (IOS/=0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','Problem when opening '//TRIM(YPREFILENAME)//': '//TRIM(YIOERRMSG))
-       ELSE
-          !! NON I/O processors case
-          IOS = 0
-          TPFILE%NLU = NNULLUNIT
-       END IF
-
-
-    CASE('SPECIFIC')
-       TPFILE%NMASTER_RANK  = -1
-       TPFILE%LMASTER       = .TRUE. !Every process use the file
-       TPFILE%LMULTIMASTERS = .TRUE.
-       TPFILE%NSUBFILES_IOZ = 0
-
-#ifdef MNH_VPP
-       OPEN(NEWUNIT=TPFILE%NLU,                    &
-            FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), &
-            STATUS=STATUS,                         &
-            ACCESS=ACCESS,                         &
-            IOSTAT=IOS,                            &
-            IOMSG=YIOERRMSG,                       &
-            FORM=FORM,                             &
-            RECL=IRECSIZE,                         &
-            BLANK=BLANK,                           &
-            POSITION=POSITION,                     &
-            ACTION=YACTION,                        &
-            DELIM=DELIM,                           &
-            PAD=PAD)
-
-#else
-#if defined(MNH_SX5) || defined(MNH_SP4) || defined(MNH_LINUX)
-       IF (ACCESS=='DIRECT') THEN
-          OPEN(NEWUNIT=TPFILE%NLU,                    &
-               FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), &
-               STATUS=YSTATUS,                        &
-               ACCESS=YACCESS,                        &
-               IOSTAT=IOS,                            &
-               IOMSG=YIOERRMSG,                       &
-               FORM=YFORM,                            &
-               RECL=YRECL,                            &
-               ACTION=YACTION)
-       ELSE
-        IF (YACTION=='READ') THEN
-          OPEN(NEWUNIT=TPFILE%NLU,                     &
-               FILE=TRIM(YPREFILENAME)//SUFFIX(".P"),  &
-               STATUS=YSTATUS,                         &
-               ACCESS=YACCESS,                         &
-               IOSTAT=IOS,                             &
-               IOMSG=YIOERRMSG,                        &
-               FORM=YFORM,                             &
-               RECL=YRECL,                             &
-               BLANK=YBLANK,                           &
-               POSITION=YPOSITION,                     &
-               ACTION=YACTION,                         &
-               !DELIM=YDELIM,         & !Philippe: commented because bug with GCC 5.X
-               PAD=YPAD)
-         ELSE
-          OPEN(NEWUNIT=TPFILE%NLU,                     &
-               FILE=TRIM(YPREFILENAME)//SUFFIX(".P"),  &
-               STATUS=YSTATUS,                         &
-               ACCESS=YACCESS,                         &
-               IOSTAT=IOS,                             &
-               IOMSG=YIOERRMSG,                        &
-               FORM=YFORM,                             &
-               RECL=YRECL,                             &
-               BLANK=YBLANK,                           &
-               POSITION=YPOSITION,                     &
-               ACTION=YACTION,                         &
-               DELIM=YDELIM,                           &
-               PAD=YPAD)
-         ENDIF
-       ENDIF
-#else
-       OPEN(NEWUNIT=TPFILE%NLU,                    &
-            FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), &
-            STATUS=STATUS,                         &
-            ACCESS=ACCESS,                         &
-            IOSTAT=IOS,                            &
-            IOMSG=YIOERRMSG,                       &
-            FORM=FORM,                             &
-            RECL=RECL,                             &
-            BLANK=BLANK,                           &
-            POSITION=POSITION,                     &
-            ACTION=YACTION,                        &
-            DELIM=DELIM,                           &
-            PAD=PAD)
-#endif
-
-#endif
-       IF (IOS/=0) CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','Problem when opening '//TRIM(YPREFILENAME)//': '//TRIM(YIOERRMSG))
-
-
-
-    CASE('DISTRIBUTED')
-       TPFILE%NMASTER_RANK  = ISIOP
-       TPFILE%LMASTER       = (ISP == ISIOP)
-       TPFILE%LMULTIMASTERS = .FALSE.
-       TPFILE%NSUBFILES_IOZ = 0
 
-       IF (.NOT.TPFILE%LMASTER) THEN
-          !! NON I/O processors case
-          IOS = 0
-       END IF
+SUBROUTINE IO_Pack_set(O1D,O2D,OPACK)
+USE MODD_IO,     ONLY: LPACK, L1D, L2D
+USE MODD_VAR_ll, ONLY: IP
 
+IMPLICIT NONE
 
+LOGICAL, INTENT(IN) :: O1D,O2D,OPACK
 
-    CASE('IO_ZSPLIT')
-       TPFILE%NMASTER_RANK  = ISIOP
-       TPFILE%LMASTER       = (ISP == ISIOP)
-       TPFILE%LMULTIMASTERS = .FALSE.
-       TPFILE%NSUBFILES_IOZ = 0
-       IF ( GPARALLELIO .AND. PRESENT(KNB_PROCIO) ) THEN
-         IF (KNB_PROCIO>1) THEN
-           TPFILE%NSUBFILES_IOZ = KNB_PROCIO
-         END IF
-       END IF
-
-#if defined(MNH_IOCDF4)
-       IF (TPFILE%LMASTER .AND. (TPFILE%CFORMAT=='LFI' .OR. TPFILE%CFORMAT=='LFICDF4') ) THEN
-#else
-       IF (TPFILE%LMASTER) THEN
-#endif
-       ELSE 
-          !! NON I/O processors OR netCDF read case
-          IOS = 0
-       END IF
-
-       IF (TPFILE%NSUBFILES_IOZ > 0) THEN
-          IF (.NOT.ALLOCATED(TPFILE%TFILES_IOZ)) THEN
-            ALLOCATE(TPFILE%TFILES_IOZ(TPFILE%NSUBFILES_IOZ))
-          ELSE IF ( SIZE(TPFILE%TFILES_IOZ) /= TPFILE%NSUBFILES_IOZ ) THEN
-            CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','SIZE(PFILE%TFILES_IOZ) /= TPFILE%NSUBFILES_IOZ for '//TRIM(TPFILE%CNAME))
-          END IF
-          DO IFILE=1,TPFILE%NSUBFILES_IOZ
-             IRANK_PROCIO = 1 + IO_RANK(IFILE-1,ISNPROC,TPFILE%NSUBFILES_IOZ)
-             WRITE(CFILE ,'(".Z",i3.3)') IFILE
-
-             CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(CFILE),TZSPLITFILE,IRESP)
-
-             IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list)
-               IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
-                 CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
-                                       HDIRNAME=TPFILE%CDIRNAME,                                                     &
-                                       KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, &
-                                       HFORMAT=TPFILE%CFORMAT)
-               ELSE
-                 CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(CFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
-                                       KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, &
-                                       HFORMAT=TPFILE%CFORMAT)
-               END IF
-             END IF
-
-             IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
-               IF (LEN_TRIM(TZSPLITFILE%CDIRNAME)>0) THEN
-                 YPREFILENAME = TRIM(TZSPLITFILE%CDIRNAME)//'/'//TRIM(TZSPLITFILE%CNAME)
-               ELSE
-                 YPREFILENAME = TRIM(TZSPLITFILE%CNAME)
-               END IF
-             ELSE
-               YPREFILENAME = TRIM(TZSPLITFILE%CNAME)
-             END IF
-
-             TPFILE%TFILES_IOZ(IFILE)%TFILE => TZSPLITFILE
-             !Done outside of the previous IF to prevent problems with .OUT files
-             TZSPLITFILE%NMPICOMM      = ICOMM
-             TZSPLITFILE%NMASTER_RANK  = IRANK_PROCIO
-             TZSPLITFILE%LMASTER       = (ISP == IRANK_PROCIO)
-             TZSPLITFILE%LMULTIMASTERS = .FALSE.
-             TZSPLITFILE%NSUBFILES_IOZ = 0
-
-             ! Must be done BEFORE the call to io_open_file_* because we need to read things in these subroutines
-             TZSPLITFILE%LOPENED = .TRUE.
-             TZSPLITFILE%NOPEN         = TZSPLITFILE%NOPEN         + 1
-             TZSPLITFILE%NOPEN_CURRENT = TZSPLITFILE%NOPEN_CURRENT + 1
-
-#if defined(MNH_IOCDF4)
-             IF (TZSPLITFILE%CFORMAT=='NETCDF4' .OR. TZSPLITFILE%CFORMAT=='LFICDF4') THEN
-                IF (YACTION == 'READ') THEN
-                   ! Open netCDF File for reading
-                   call io_open_file_nc4(tzsplitfile)
-                   IOS = 0
-                END IF
-
-                IF (YACTION == 'WRITE') THEN
-                   ! Create netCDF File for writing
-                   call io_create_file_nc4(TZSPLITFILE, hprogram_orig=HPROGRAM_ORIG)
-                   IOS = 0
-                END IF
-             END IF
-#endif
-             IF (TZSPLITFILE%CFORMAT=='LFI' .OR. TZSPLITFILE%CFORMAT=='LFICDF4') THEN
-                SELECT CASE (YACTION)
-                  CASE('READ')
-                    call io_open_file_lfi(tzsplitfile,iresp)
-                  CASE('WRITE')
-                    call io_create_file_lfi(tzsplitfile,iresp)
-                END SELECT
-             ENDIF
-             !
-          ENDDO
-       END IF
-
-
-    END SELECT
-
-    TPFILE%NMPICOMM = ICOMM
-
-    IOSTAT = IOS
-
-  CONTAINS
-    FUNCTION SUFFIX(HEXT)
-
-      CHARACTER(len=*)             :: HEXT
-      CHARACTER(len=LEN(HEXT)+3)   :: SUFFIX
-
-      WRITE(SUFFIX,'(A,i3.3)') TRIM(HEXT), ISP
-
-    END FUNCTION SUFFIX
-
-  END SUBROUTINE OPEN_ll
-
-  SUBROUTINE CLOSE_ll(TPFILE,IOSTAT,OPARALLELIO,HPROGRAM_ORIG)
-  USE MODD_IO_ll
+LPACK = OPACK
+L1D   = O1D
+L2D   = O2D
 
-  USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
-  use mode_io_file_lfi,      only: io_close_file_lfi
-#if defined(MNH_IOCDF4)
-  use mode_io_file_nc4,      only: io_close_file_nc4
-  use mode_io_write_nc4,     only: io_write_coordvar_nc4
-#endif
-    TYPE(TFILEDATA),  INTENT(IN)            :: TPFILE
-    INTEGER,          INTENT(OUT), OPTIONAL :: IOSTAT
-    LOGICAL,          INTENT(IN),  OPTIONAL :: OPARALLELIO
-    CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-
-    INTEGER :: IERR, IGLOBALERR, IGLOBALERR2, IRESP, IRESP2
-
-    INTEGER                               :: IFILE
-    LOGICAL                               :: GPARALLELIO
-    TYPE(TFILEDATA),POINTER               :: TZFILE
-
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_ll','closing '//TRIM(TPFILE%CNAME))
-
-    IF ( PRESENT(OPARALLELIO) ) THEN
-      GPARALLELIO = OPARALLELIO
-    ELSE  !par defaut on active les IO paralleles en Z si possible
-      GPARALLELIO = .TRUE.
-    ENDIF
-    !JUANZ
-
-    IRESP       = 0
-    IRESP2      = 0
-    IGLOBALERR  = 0
-    IGLOBALERR2 = 0
-
-    IF (TPFILE%LMASTER) THEN
-      IF (TPFILE%NLU/=-1 .AND. TPFILE%NLU/=NNULLUNIT) THEN
-        CLOSE(UNIT=TPFILE%NLU, IOSTAT=IRESP,STATUS='KEEP')
-      END IF
-    END IF
-    !
-    IF( GPARALLELIO ) THEN
-      DO IFILE=1,TPFILE%NSUBFILES_IOZ
-        TZFILE => TPFILE%TFILES_IOZ(IFILE)%TFILE
-#if defined(MNH_IOCDF4)
-        !Write coordinates variables in netCDF file
-        IF (TZFILE%CMODE == 'WRITE' .AND. (TZFILE%CFORMAT=='NETCDF4' .OR. TZFILE%CFORMAT=='LFICDF4')) THEN
-          CALL IO_WRITE_COORDVAR_NC4(TZFILE,HPROGRAM_ORIG=HPROGRAM_ORIG)
-        END IF
-#endif
-        IF (TZFILE%LMASTER) THEN
-          if (tzfile%cformat == 'LFI'     .or. tzfile%cformat == 'LFICDF4') call io_close_file_lfi(tzfile,iresp2)
-#if defined(MNH_IOCDF4)
-          if (tzfile%cformat == 'NETCDF4' .or. tzfile%cformat == 'LFICDF4') call io_close_file_nc4(tzfile,iresp2)
-#endif
-        END IF
-      END DO
-      !
-      CALL MPI_ALLREDUCE(IRESP2,IGLOBALERR2,1,MPI_INTEGER,MPI_BOR,TPFILE%NMPICOMM,IERR)
-    END IF
-    !
-    CALL MPI_ALLREDUCE(IRESP, IGLOBALERR, 1,MPI_INTEGER,MPI_BOR,TPFILE%NMPICOMM,IERR)
-
-    IF (PRESENT(IOSTAT)) THEN
-      IF (IGLOBALERR/=0) THEN
-        IOSTAT = IGLOBALERR
-      ELSE
-        IOSTAT = IGLOBALERR2
-      END IF
-    END IF
+IF ( IP == 1 ) PRINT *,'INIT L1D,L2D,LPACK = ',L1D,L2D,LPACK
 
-  END SUBROUTINE CLOSE_ll
-  !
-  !
-END MODULE MODE_IO_ll
+END SUBROUTINE IO_Pack_set
 
+END MODULE MODE_IO
 
-MODULE MODE_MSG
-!
-USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG
-!
-IMPLICIT NONE
-!
-CONTAINS
-!
-SUBROUTINE PRINT_MSG(KVERB,HDOMAIN,HSUBR,HMSG)
-!
-USE ISO_FORTRAN_ENV, ONLY : ERROR_UNIT, OUTPUT_UNIT
-!
-USE MODD_CONF,   ONLY : CPROGRAM
-USE MODD_IO_ll,  ONLY : NIO_VERB,NIO_ABORT_LEVEL,NGEN_VERB,NGEN_ABORT_LEVEL, &
-                        LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, TFILE_OUTPUTLISTING
-USE MODD_LUNIT,  ONLY : TLUOUT0
-USE MODD_VAR_ll, ONLY : IP, NMNH_COMM_WORLD
-!
-use modi_tools_c
-!
-!USE MODE_FM,     ONLY : IO_FILE_CLOSE_ll
-!
-INTEGER,         INTENT(IN) :: KVERB   !Verbosity level
-CHARACTER(LEN=*),INTENT(IN) :: HDOMAIN !Domain/category of message
-CHARACTER(LEN=*),INTENT(IN) :: HSUBR   !Subroutine/function name
-CHARACTER(LEN=*),INTENT(IN) :: HMSG    !Message
-!
-CHARACTER(LEN=8)  :: YPRC
-CHARACTER(LEN=9)  :: YPRE
-CHARACTER(LEN=30) :: YSUBR
-INTEGER :: IERR, IMAXVERB,IABORTLEVEL
-INTEGER :: ILU
-LOGICAL :: GWRITE_OUTLST,GWRITE_STDOUT
-!
-!Determine if the process will write
-GWRITE_OUTLST = .FALSE.
-GWRITE_STDOUT = .FALSE.
-IF (IP == 1 .OR. LVERB_ALLPRC) THEN
-  IF (LVERB_OUTLST) GWRITE_OUTLST = .TRUE.
-  IF (LVERB_STDOUT) GWRITE_STDOUT = .TRUE.
-END IF
-!
-YPRC=''
-IF (LVERB_ALLPRC) WRITE(YPRC,'( I8 )') IP-1
-!
-!Check if the output file is available
-ILU = -1
-IF (ASSOCIATED(TFILE_OUTPUTLISTING)) THEN
-  IF (TFILE_OUTPUTLISTING%LOPENED) THEN
-    ILU = TFILE_OUTPUTLISTING%NLU
-  ELSE
-    GWRITE_OUTLST = .FALSE.
-    IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'TFILE_OUTPUTLISTING not opened'
-  END IF
-ELSE
-!PW: TODO?: temporary to detect non-initialisation
-! should disappear except at the beginning of a run
-  GWRITE_OUTLST = .FALSE.
-  IF (GWRITE_STDOUT .AND. CPROGRAM/='LFICDF') WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'TFILE_OUTPUTLISTING not associated'
-END IF
-!
-SELECT CASE(HDOMAIN)
-  CASE('IO')
-    IMAXVERB    = NIO_VERB
-    IABORTLEVEL = NIO_ABORT_LEVEL
-  CASE ('GEN')
-    IMAXVERB    = NGEN_VERB
-    IABORTLEVEL = NGEN_ABORT_LEVEL
-  CASE DEFAULT
-    IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ERROR: PRINT_MSG: wrong message category (',TRIM(HDOMAIN),')'
-    IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ERROR: PRINT_MSG: wrong message category (',TRIM(HDOMAIN),')'
-    RETURN
-END SELECT
-!
-IF (KVERB>IMAXVERB) RETURN
-!
-SELECT CASE(KVERB)
-  CASE(NVERB_FATAL)
-    YPRE='FATAL:   '
-  CASE(NVERB_ERROR)
-    YPRE='ERROR:   '
-  CASE(NVERB_WARNING)
-    YPRE='WARNING: '
-  CASE(NVERB_INFO)
-    YPRE='INFO:    '
-  CASE(NVERB_DEBUG)
-    YPRE='DEBUG:   '
-  CASE DEFAULT
-    IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ERROR: PRINT_MSG: wrong verbosity level'
-    IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ERROR: PRINT_MSG: wrong verbosity level'
-END SELECT
-!
-YSUBR=TRIM(HSUBR)//':'
-IF (LVERB_ALLPRC) THEN
-  IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT="(A8,': ',A9,A30,A)") ADJUSTL(YPRC),YPRE,YSUBR,HMSG
-  IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT="(A8,': ',A9,A30,A)") ADJUSTL(YPRC),YPRE,YSUBR,HMSG
-ELSE
-  IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT="(A9,A30,A)") YPRE,YSUBR,HMSG
-  IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT="(A9,A30,A)") YPRE,YSUBR,HMSG
-END IF
-!
-IF (KVERB<=IABORTLEVEL) THEN
-  IF (IP==1) WRITE(UNIT=ERROR_UNIT,FMT=*) 'ABORT asked by application '//TRIM(CPROGRAM)
-  IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ABORT asked by application '//TRIM(CPROGRAM)
-  IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ABORT asked by application '//TRIM(CPROGRAM)
-#if 0
-  !Problem: loop dependency between MODE_MSG and MODE_FM (IO_FILE_CLOSE_ll call PRINT_MSG)
-  NIO_VERB = 0 !To not get further messages (ABORT should be the last for readability)
-  IF (ILU>0) CALL IO_FILE_CLOSE_ll(TFILE_OUTPUTLISTING) !To flush it
-#else
-  IF (ILU>0) FLUSH(UNIT=ILU) !OK in F2003
-  IF (ASSOCIATED(TLUOUT0)) FLUSH(UNIT=TLUOUT0%NLU)
-#endif
-  !Add a sleep to ensure that the process(es) that have to write to stderr and to file
-  !have enough time before an other process calls mpi_abort
-  CALL SLEEP_C(5)
-  !
-  CALL MPI_ABORT(NMNH_COMM_WORLD, -10, IERR)
-  CALL ABORT
-END IF
-!
-END SUBROUTINE PRINT_MSG
-!
-END MODULE MODE_MSG
diff --git a/src/LIB/SURCOUCHE/src/fmread_ll.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
similarity index 70%
rename from src/LIB/SURCOUCHE/src/fmread_ll.f90
rename to src/LIB/SURCOUCHE/src/mode_io_field_read.f90
index 10c862803697fb325900115f9959c08f3c687512..5f97e45f608226807385b7b3056e2ab092ffad46 100644
--- a/src/LIB/SURCOUCHE/src/fmread_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
@@ -1,27 +1,25 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
+! Modifications:
+!  J. Escobar  22/08/2005: BUG : missing "GOTO 1000" if read field not found
+!  J. Escobar  13/01/2015: remove comment on BCAST(IRESP in FMREADX2_ll
+!  J. Escobar  15/09/2015: WENO5 & JPHEXT <> 1
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  J. Escobar  17/07/2018: reintroduce needed MPI_BARRIER in IO_Field_read_byfield_X3
+!  P. Wautelet 29/01/2019: small bug correction in time measurement in IO_Field_read_byfield_X2
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 12/04/2019: use MNHTIME for time measurement variables
+!-----------------------------------------------------------------
 
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
-
-MODULE MODE_FMREAD
+MODULE MODE_IO_FIELD_READ
 !
-!Correction :
-!  J.Escobar : 22/08/2005 : BUG : manque un "GOTO 1000" si champs
-!              lue non trouvé !!!
-!  J.Escobar : 13/01/2015 : remove comment on BCAST(IRESP in FMREADX2_ll
-!  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  J.Escobar : 17/07/2018 : reintroduce needed MPI_BARRIER in IO_READ_FIELD_BYFIELD_X3 
-!
-USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
+USE MODD_IO, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
 USE MODD_MPIF
+use modd_precision, only: MNHREAL_MPI, MNHTIME
 !
 USE MODE_FIELD
 USE MODE_IO_READ_LFI
@@ -34,36 +32,36 @@ IMPLICIT NONE
 
 PRIVATE
 
-INTERFACE IO_READ_FIELD
-   MODULE PROCEDURE IO_READ_FIELD_BYNAME_X0, IO_READ_FIELD_BYNAME_X1,  &
-                    IO_READ_FIELD_BYNAME_X2, IO_READ_FIELD_BYNAME_X3,  &
-                    IO_READ_FIELD_BYNAME_X4, IO_READ_FIELD_BYNAME_X5,  &
-                    IO_READ_FIELD_BYNAME_X6,                           &
-                    IO_READ_FIELD_BYNAME_N0, IO_READ_FIELD_BYNAME_N1,  &
-                    IO_READ_FIELD_BYNAME_N2,                           &
-                    IO_READ_FIELD_BYNAME_L0, IO_READ_FIELD_BYNAME_L1,  &
-                    IO_READ_FIELD_BYNAME_C0,                           &
-                    IO_READ_FIELD_BYNAME_T0,                           &
-                    IO_READ_FIELD_BYFIELD_X0,IO_READ_FIELD_BYFIELD_X1, &
-                    IO_READ_FIELD_BYFIELD_X2,IO_READ_FIELD_BYFIELD_X3, &
-                    IO_READ_FIELD_BYFIELD_X4,IO_READ_FIELD_BYFIELD_X5, &
-                    IO_READ_FIELD_BYFIELD_X6,                          &
-                    IO_READ_FIELD_BYFIELD_N0,IO_READ_FIELD_BYFIELD_N1, &
-                    IO_READ_FIELD_BYFIELD_N2,                          &
-                    IO_READ_FIELD_BYFIELD_L0,IO_READ_FIELD_BYFIELD_L1, &
-                    IO_READ_FIELD_BYFIELD_C0,                          &
-                    IO_READ_FIELD_BYFIELD_T0
-END INTERFACE
+public :: IO_Field_read, IO_Field_read_lb
 
-INTERFACE IO_READ_FIELD_LB
-   MODULE PROCEDURE IO_READ_FIELD_BYNAME_LB, IO_READ_FIELD_BYFIELD_LB
+INTERFACE IO_Field_read
+   MODULE PROCEDURE IO_Field_read_byname_X0, IO_Field_read_byname_X1,  &
+                    IO_Field_read_byname_X2, IO_Field_read_byname_X3,  &
+                    IO_Field_read_byname_X4, IO_Field_read_byname_X5,  &
+                    IO_Field_read_byname_X6,                           &
+                    IO_Field_read_byname_N0, IO_Field_read_byname_N1,  &
+                    IO_Field_read_byname_N2,                           &
+                    IO_Field_read_byname_L0, IO_Field_read_byname_L1,  &
+                    IO_Field_read_byname_C0,                           &
+                    IO_Field_read_byname_T0,                           &
+                    IO_Field_read_byfield_X0,IO_Field_read_byfield_X1, &
+                    IO_Field_read_byfield_X2,IO_Field_read_byfield_X3, &
+                    IO_Field_read_byfield_X4,IO_Field_read_byfield_X5, &
+                    IO_Field_read_byfield_X6,                          &
+                    IO_Field_read_byfield_N0,IO_Field_read_byfield_N1, &
+                    IO_Field_read_byfield_N2,                          &
+                    IO_Field_read_byfield_L0,IO_Field_read_byfield_L1, &
+                    IO_Field_read_byfield_C0,                          &
+                    IO_Field_read_byfield_T0
 END INTERFACE
 
-PUBLIC IO_READ_FIELD,IO_READ_FIELD_LB
+INTERFACE IO_Field_read_lb
+   MODULE PROCEDURE IO_Field_read_byname_lb, IO_Field_read_byfield_lb
+END INTERFACE
 
 CONTAINS 
 
-SUBROUTINE IO_FILE_READ_CHECK(TPFILE,HSUBR,KRESP)
+SUBROUTINE IO_File_read_check(TPFILE,HSUBR,KRESP)
 TYPE(TFILEDATA),  INTENT(IN)  :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)  :: HSUBR
 INTEGER,          INTENT(OUT) :: KRESP
@@ -91,16 +89,16 @@ IF (TPFILE%CFORMAT/='NETCDF4' .AND. TPFILE%CFORMAT/='LFI' .AND. TPFILE%CFORMAT/=
   RETURN
 END IF
 !
-END SUBROUTINE IO_FILE_READ_CHECK
+END SUBROUTINE IO_File_read_check
 
 
-SUBROUTINE IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+SUBROUTINE IO_Field_metadata_bcast(TPFILE,TPFIELD)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 !
 INTEGER :: IERR
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_BCAST_FIELD_METADATA','called for '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_metadata_bcast','called for '//TRIM(TPFIELD%CMNHNAME))
 !
 CALL MPI_BCAST(TPFIELD%CMNHNAME, LEN(TPFIELD%CMNHNAME), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
 CALL MPI_BCAST(TPFIELD%CSTDNAME, LEN(TPFIELD%CSTDNAME), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -113,10 +111,10 @@ CALL MPI_BCAST(TPFIELD%NGRID,    1,                     MPI_INTEGER,  TPFILE%NMA
 CALL MPI_BCAST(TPFIELD%NTYPE,    1,                     MPI_INTEGER,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
 CALL MPI_BCAST(TPFIELD%NDIMS,    1,                     MPI_INTEGER,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
 !
-END SUBROUTINE IO_BCAST_FIELD_METADATA
+END SUBROUTINE IO_Field_metadata_bcast
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X0(TPFILE,HNAME,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -126,19 +124,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X0
+END SUBROUTINE IO_Field_read_byname_X0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISP,GSMONOPROC
+USE MODD_IO,        ONLY: ISP,GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -148,40 +146,40 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    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
 !
@@ -189,13 +187,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X0
+END SUBROUTINE IO_Field_read_byfield_X0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X1(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byname_X1(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -208,20 +206,20 @@ TYPE(ZONE_ll),DIMENSION(ISNPROC),OPTIONAL,INTENT(IN) :: TPSPLITTING  ! splitting
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X1
+END SUBROUTINE IO_Field_read_byname_X1
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X1(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byfield_X1(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : ISP,GSMONOPROC,ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISP, GSMONOPROC, ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 USE MODE_SCATTER_ll
 USE MODE_ALLOCBUFFER_ll
@@ -239,32 +237,32 @@ REAL,DIMENSION(:),POINTER    :: ZFIELDP
 LOGICAL                      :: GALLOC
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X1',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X1',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC, KIMAX_ll, KJMAX_ll)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -275,12 +273,12 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     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)
@@ -294,13 +292,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X1
+END SUBROUTINE IO_Field_read_byfield_X1
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X2(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byname_X2(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),    INTENT(IN)    :: TPFILE
@@ -314,27 +312,27 @@ TYPE(ZONE_ll),DIMENSION(ISNPROC),OPTIONAL,INTENT(IN) :: TPSPLITTING  ! splitting
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X2
+END SUBROUTINE IO_Field_read_byname_X2
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X2(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byfield_X2(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,           ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
+USE MODD_TIMEZ,        ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
 #ifdef MNH_GA
 USE MODE_GA
 #endif
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,   ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),           INTENT(IN)    :: TPFILE
@@ -350,13 +348,13 @@ REAL,DIMENSION(:,:),POINTER  :: ZFIELDP
 LOGICAL                      :: GALLOC
 INTEGER                      :: IRESP
 INTEGER                      :: IHEXTOT
-REAL(KIND=8),DIMENSION(2)    :: T0,T1,T2
-REAL(KIND=8),DIMENSION(2)    :: T11,T22
+REAL(kind=MNHTIME), DIMENSION(2) :: T0, T1, T2
+REAL(kind=MNHTIME), DIMENSION(2) :: T11, T22
 #ifdef MNH_GA
 REAL,DIMENSION(:,:),POINTER    :: ZFIELD_GA
 #endif
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 CALL SECOND_MNH2(T11)
 GALLOC = .FALSE.
@@ -364,7 +362,7 @@ IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X2',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X2',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -376,11 +374,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -393,11 +391,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC, KIMAX_ll, KJMAX_ll)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -410,8 +408,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -450,11 +448,11 @@ 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
   END IF
-  CALL SECOND_MNH2(T2)
-  TIMEZ%T_READ2D_SCAT=TIMEZ%T_READ2D_SCAT + T2 - T1    
 END IF
 !
 IF (GALLOC) DEALLOCATE (ZFIELDP)
@@ -466,10 +464,10 @@ IF (PRESENT(KRESP)) KRESP = IRESP
 CALL SECOND_MNH2(T22)
 TIMEZ%T_READ2D_ALL=TIMEZ%T_READ2D_ALL + T22 - T11
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X2
+END SUBROUTINE IO_Field_read_byfield_X2
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X3(TPFILE,HNAME,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),      INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),     INTENT(IN)    :: HNAME    ! name of the field to write
@@ -479,29 +477,29 @@ INTEGER,OPTIONAL,     INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X3
+END SUBROUTINE IO_Field_read_byname_X3
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_TIMEZ,        ONLY : TIMEZ
-USE MODD_VAR_ll,       ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,               ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_TIMEZ,            ONLY: TIMEZ
+USE MODD_VAR_ll,           ONLY: MNH_STATUSES_IGNORE
 !
 USE MODE_ALLOCBUFFER_ll
 #ifdef MNH_GA
 USE MODE_GA
 #endif
-USE MODE_IO_TOOLS,         ONLY : IO_FILE
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME
-USE MODE_MNH_TIMING,       ONLY : SECOND_MNH2
+USE MODE_IO_TOOLS,         ONLY: IO_Level2filenumber_get
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
+USE MODE_MNH_TIMING,       ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),TARGET,      INTENT(IN)    :: TPFILE
@@ -525,8 +523,8 @@ LOGICAL                               :: GALLOC, GALLOC_ll
 REAL,DIMENSION(:,:),POINTER           :: TX2DP
 REAL,DIMENSION(:,:),POINTER           :: ZSLICE_ll,ZSLICE
 REAL,DIMENSION(:,:,:),POINTER         :: ZFIELDP
-REAL(KIND=8),DIMENSION(2)             :: T0,T1,T2
-REAL(KIND=8),DIMENSION(2)             :: T11,T22
+REAL(kind=MNHTIME), DIMENSION(2)      :: T0, T1, T2
+REAL(kind=MNHTIME), DIMENSION(2)      :: T11, T22
 CHARACTER(LEN=2)                      :: YDIR
 CHARACTER(LEN=4)                      :: YK
 CHARACTER(LEN=NMNHNAMELGTMAX+4)       :: YRECZSLICE
@@ -538,7 +536,7 @@ TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:) :: T_TX2DP
 REAL,DIMENSION(:,:,:),POINTER              :: ZFIELD_GA
 #endif
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 CALL SECOND_MNH2(T11)
 !
@@ -551,7 +549,7 @@ YDIR = TPFIELD%CDIR
 !
 IHEXTOT = 2*JPHEXT+1
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X3',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X3',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC  .AND. TPFILE%NSUBFILES_IOZ==0 ) THEN ! sequential execution
@@ -564,11 +562,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -580,11 +578,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-        CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -595,8 +593,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (YDIR == 'XX' .OR. YDIR =='YY') THEN
       ! XX or YY Scatter Field
@@ -612,7 +610,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
 !
@@ -630,7 +628,7 @@ IF (IRESP==0) THEN
     ALLOCATE(ZSLICE_ll(0,0)) ! to avoid bug on test of size
     GALLOC_ll = .TRUE.
     DO JKK=1,IKU_ll
-      IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+      IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
       TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
       TZFIELD = TPFIELD
       WRITE(YSUFFIX,'(I4.4)') JKK
@@ -651,11 +649,11 @@ IF (IRESP==0) THEN
         WRITE(YK,'(I4.4)')  JKK
         YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK
         IF (TPFILE%CFORMAT=='NETCDF4') THEN
-          CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+          CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
         ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-          CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+          CALL IO_Field_read_lfi(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
         ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-          CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+          CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
         END IF
         CALL SECOND_MNH2(T1)
         TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0
@@ -695,7 +693,7 @@ IF (IRESP==0) THEN
       NB_REQ=0
       DO JKK=JK,JK_MAX
         IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-          IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+          IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
           TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
           TZFIELD = TPFIELD
           WRITE(YSUFFIX,'(I4.4)') JKK
@@ -717,11 +715,11 @@ IF (IRESP==0) THEN
           WRITE(YK,'(I4.4)')  JKK
           YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK
           IF (TZFILE%CFORMAT=='NETCDF4') THEN
-            CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+            CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
           ELSE IF (TZFILE%CFORMAT=='LFI') THEN
-            CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+            CALL IO_Field_read_lfi(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
           ELSE IF (TZFILE%CFORMAT=='LFICDF4') THEN
-            CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+            CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
           END IF
           CALL SECOND_MNH2(T1)
           TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0
@@ -732,9 +730,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
@@ -752,12 +750,12 @@ IF (IRESP==0) THEN
       !
       IF (YDIR == 'XX' .OR. YDIR =='YY') THEN
         ! XX or YY Scatter Field
-        STOP " XX ou YY NON PREVU SUR BG POUR LE MOMENT "
+        call Print_msg( NVERB_FATAL, 'GEN', 'IO_Field_read_byfield_X3', 'XX or YY not yet planned on Blue Gene' )
         CALL SCATTER_XXFIELD(YDIR,ZFIELDP,PFIELD,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
       ELSE IF (YDIR == 'XY') THEN
         IF (LPACK .AND. L2D) THEN
           ! 2D compact case
-          STOP " L2D NON PREVU SUR BG POUR LE MOMENT "
+          call Print_msg( NVERB_FATAL, 'GEN', 'IO_Field_read_byfield_X3', 'L2D not yet planned on Blue Gene' )
           CALL SCATTER_XXFIELD('XX',ZFIELDP(:,1,:),PFIELD(:,JPHEXT+1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
           PFIELD(:,:,:) = SPREAD(PFIELD(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
         ELSE
@@ -770,7 +768,7 @@ IF (IRESP==0) THEN
             ! get the file & rank
             !
             IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-               IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+               IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
                TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
             ELSE
               TZFILE => TPFILE
@@ -781,7 +779,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()
@@ -791,8 +789,8 @@ IF (IRESP==0) THEN
         END IF
       ELSE
         ! Broadcast Field
-        STOP "  Broadcast Field NON PREVU SUR BG POUR LE MOMENT "
-        CALL MPI_BCAST(PFIELD,SIZE(PFIELD),MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
+        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),MNHREAL_MPI,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
       END IF
       CALL SECOND_MNH2(T0)
       IF (NB_REQ .GT.0 ) THEN
@@ -807,8 +805,8 @@ IF (IRESP==0) THEN
     DEALLOCATE(REQ_TAB)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
 #endif
 !JUAN BG Z SLICE
@@ -826,13 +824,13 @@ CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR)
 CALL SECOND_MNH2(T22)
 TIMEZ%T_READ3D_ALL=TIMEZ%T_READ3D_ALL + T22 - T11
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X3
+END SUBROUTINE IO_Field_read_byfield_X3
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X4(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPFILE
@@ -843,24 +841,24 @@ INTEGER,OPTIONAL,       INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X4
+END SUBROUTINE IO_Field_read_byname_X4
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,             ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll,   ONLY: ZONE_ll
+USE MODD_TIMEZ,          ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,     ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
@@ -874,14 +872,14 @@ LOGICAL                          :: GALLOC
 INTEGER                          :: IRESP
 INTEGER                          :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X4',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X4',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -893,11 +891,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -909,11 +907,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -924,8 +922,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -940,7 +938,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
@@ -951,13 +949,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X4
+END SUBROUTINE IO_Field_read_byfield_X4
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X5(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
@@ -968,24 +966,24 @@ INTEGER,OPTIONAL,         INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X5
+END SUBROUTINE IO_Field_read_byname_X5
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,             ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll,   ONLY: ZONE_ll
+USE MODD_TIMEZ,          ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,     ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),                 INTENT(IN)    :: TPFILE
@@ -999,14 +997,14 @@ LOGICAL                            :: GALLOC
 INTEGER                            :: IRESP
 INTEGER                            :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X5',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X5',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -1018,11 +1016,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:,:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -1034,11 +1032,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1049,8 +1047,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -1065,7 +1063,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
@@ -1076,13 +1074,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X5
+END SUBROUTINE IO_Field_read_byfield_X5
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X6(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),            INTENT(IN)    :: TPFILE
@@ -1093,24 +1091,24 @@ INTEGER,OPTIONAL,           INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X6
+END SUBROUTINE IO_Field_read_byname_X6
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,             ONLY: GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
+USE MODD_STRUCTURE_ll,   ONLY: ZONE_ll
+USE MODD_TIMEZ,          ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,     ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),                   INTENT(IN)    :: TPFILE
@@ -1124,34 +1122,34 @@ LOGICAL                              :: GALLOC
 INTEGER                              :: IRESP
 INTEGER                              :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X6',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X6',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
     END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1162,8 +1160,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -1172,7 +1170,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
@@ -1183,10 +1181,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X6
+END SUBROUTINE IO_Field_read_byfield_X6
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_N0(TPFILE,HNAME,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1196,19 +1194,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_N0
+END SUBROUTINE IO_Field_read_byname_N0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP,GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1218,37 +1216,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_N0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1258,10 +1256,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_N0
+END SUBROUTINE IO_Field_read_byfield_N0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_N1(TPFILE,HNAME,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),    INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1271,19 +1269,19 @@ INTEGER,OPTIONAL,    INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_N1
+END SUBROUTINE IO_Field_read_byname_N1
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 USE MODE_ALLOCBUFFER_ll
 USE MODE_SCATTER_ll
@@ -1298,32 +1296,32 @@ INTEGER                      :: IRESP
 INTEGER,DIMENSION(:),POINTER :: IFIELDP
 LOGICAL                      :: GALLOC
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 IFIELDP => NULL()
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N1',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_N1',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1334,8 +1332,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN
       ! Broadcast Field
@@ -1353,13 +1351,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_N1
+END SUBROUTINE IO_Field_read_byfield_N1
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_N2(TPFILE,HNAME,KFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),       INTENT(IN)    :: TPFILE
@@ -1370,21 +1368,21 @@ INTEGER,OPTIONAL,      INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID    ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_N2
+END SUBROUTINE IO_Field_read_byname_N2
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,           ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
+USE MODD_TIMEZ,        ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
 USE MODE_SCATTER_ll
@@ -1400,14 +1398,14 @@ LOGICAL                         :: GALLOC
 INTEGER                         :: IRESP
 INTEGER                         :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 IFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N2',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_N2',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -1419,11 +1417,11 @@ IF (IRESP==0) THEN
       IFIELDP=>KFIELD(:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
       KFIELD(:,:)=SPREAD(SPREAD(KFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -1435,11 +1433,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1450,14 +1448,14 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') 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
@@ -1480,10 +1478,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_N2
+END SUBROUTINE IO_Field_read_byfield_N2
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_L0(TPFILE,HNAME,OFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1493,19 +1491,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_L0
+END SUBROUTINE IO_Field_read_byname_L0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1515,37 +1513,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_L0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_L0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(OFIELD,1,MPI_LOGICAL,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1555,10 +1553,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_L0
+END SUBROUTINE IO_Field_read_byfield_L0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_L1(TPFILE,HNAME,OFIELD,KRESP)
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),    INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1568,19 +1566,19 @@ INTEGER,OPTIONAL,    INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_L1
+END SUBROUTINE IO_Field_read_byname_L1
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
@@ -1590,37 +1588,37 @@ INTEGER,OPTIONAL,    INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_L1',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_L1',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(OFIELD,SIZE(OFIELD),MPI_LOGICAL,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1630,10 +1628,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_L1
+END SUBROUTINE IO_Field_read_byfield_L1
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_C0(TPFILE,HNAME,HFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1643,19 +1641,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_C0
+END SUBROUTINE IO_Field_read_byname_C0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1665,37 +1663,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_C0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_C0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(HFIELD,LEN(HFIELD),MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1705,10 +1703,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_C0
+END SUBROUTINE IO_Field_read_byfield_C0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_T0(TPFILE,HNAME,TPDATA,KRESP)
+SUBROUTINE IO_Field_read_byname_T0(TPFILE,HNAME,TPDATA,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1718,19 +1716,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),TPDATA,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),TPDATA,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_T0
+END SUBROUTINE IO_Field_read_byname_T0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_read_byfield_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1741,29 +1739,29 @@ INTEGER                      :: IERR
 INTEGER                      :: IRESP
 INTEGER,DIMENSION(3)         :: ITDATE
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_T0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_T0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       END IF
       ITDATE(1) = TPDATA%TDATE%YEAR
       ITDATE(2) = TPDATA%TDATE%MONTH
@@ -1773,11 +1771,11 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    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)
@@ -1788,10 +1786,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_T0
+END SUBROUTINE IO_Field_read_byfield_T0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP)
+SUBROUTINE IO_Field_read_byname_lb(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP)
 !
 TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),              INTENT(IN)    :: HNAME   ! name of the field to write
@@ -1803,26 +1801,26 @@ INTEGER,OPTIONAL,              INTENT(OUT)   :: KRESP   ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_lb',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,KRIM,PLB,IRESP)
+IF(IRESP==0) CALL IO_Field_read_lb(TPFILE,TFIELDLIST(ID),KL3D,KRIM,PLB,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_LB
+END SUBROUTINE IO_Field_read_byname_lb
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP)
+SUBROUTINE IO_Field_read_byfield_lb(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
-USE MODD_PARAMETERS_ll,ONLY : JPHEXT
-USE MODD_TIMEZ,        ONLY : TIMEZ
-USE MODD_VAR_ll,       ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,            ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L2D
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_TIMEZ,         ONLY: TIMEZ
+USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
 !
-USE MODE_DISTRIB_LB
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
-USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
+USE MODE_DISTRIB_lb
+USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
 !
 TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),              INTENT(INOUT) :: TPFIELD
@@ -1849,16 +1847,16 @@ INTEGER, ALLOCATABLE,DIMENSION(:,:)      :: STATUSES
 INTEGER,ALLOCATABLE,DIMENSION(:)         :: REQ_TAB
 REAL,DIMENSION(:,:,:),ALLOCATABLE,TARGET :: Z3D
 REAL,DIMENSION(:,:,:), POINTER           :: TX3DP
-REAL(KIND=8),DIMENSION(2)                :: T0,T1,T2,T3
-REAL(KIND=8),DIMENSION(2)                :: T11,T22
+REAL(kind=MNHTIME), DIMENSION(2)         :: T0, T1, T2, T3
+REAL(kind=MNHTIME), DIMENSION(2)         :: T11, T22
 TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:)    :: T_TX3DP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_LB','reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_lb','reading '//TRIM(TPFIELD%CMNHNAME))
 !
 YLBTYPE  = TPFIELD%CLBTYPE
 !
 IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB',TRIM(TPFILE%CNAME)//': invalid CLBTYPE (' &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_byfield_lb',TRIM(TPFILE%CNAME)//': invalid CLBTYPE (' &
                  //TRIM(TPFIELD%CLBTYPE)//') for '//TRIM(TPFIELD%CMNHNAME))
   RETURN
 END IF
@@ -1869,7 +1867,7 @@ CALL SECOND_MNH2(T11)
 IRESP = 0
 !------------------------------------------------------------------
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_LB',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_lb',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -1887,11 +1885,11 @@ IF (IRESP==0) THEN
       TX3DP => Z3D(:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
     END IF
     IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
       IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
@@ -1919,11 +1917,11 @@ IF (IRESP==0) THEN
         TX3DP => Z3D(:,:,:)
       END IF
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-        CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
+        CALL IO_Field_read_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
       END IF
       IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
         IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
@@ -1940,8 +1938,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     NB_REQ=0
     ALLOCATE(REQ_TAB(ISNPROC-1))
@@ -1953,17 +1951,17 @@ IF (IRESP==0) THEN
       ALLOCATE(T_TX3DP(ISNPROC-1))
       IKU = SIZE(Z3D,3)
       DO JI = 1,ISNPROC
-        CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE)
+        CALL GET_DISTRIB_lb(YLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE)
         IF (IIB /= 0) THEN
           TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
           IF (ISP /= JI) 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)
+            CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
             PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:)
           END IF
         END IF
@@ -1985,12 +1983,12 @@ IF (IRESP==0) THEN
        CALL SECOND_MNH2(T0)
       !ALLOCATE(REQ_TAB(1))
       !REQ_TAB=MPI_REQUEST_NULL
-      CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
+      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)
@@ -2010,6 +2008,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP
 CALL SECOND_MNH2(T22)
 TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_LB
+END SUBROUTINE IO_Field_read_byfield_lb
 
-END MODULE MODE_FMREAD
+END MODULE MODE_IO_FIELD_READ
diff --git a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
similarity index 57%
rename from src/LIB/SURCOUCHE/src/fmwrit_ll.f90
rename to src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index 41c6594214b86069aef302e437bd94647921c409..8d44c988922528505514f7691eb5d1d2edf1ec74 100644
--- a/src/LIB/SURCOUCHE/src/fmwrit_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -4,24 +4,23 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
-!  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 10/01/2019: do not write scalars in Z-split files
-!  Philippe Wautelet: 10/01/2019: write header also for Z-split files
+!  J. Escobar  15/09/2015: WENO5 & JPHEXT <> 1
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/01/2019: do not write scalars in Z-split files
+!  P. Wautelet 10/01/2019: write header also for Z-split files
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 12/04/2019: added pointers for C1D, L1D, N1D, X5D and X6D structures in TFIELDDATA
+!  P. Wautelet 12/04/2019: use MNHTIME for time measurement variables
 !-----------------------------------------------------------------
 
-#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_FMWRIT
+MODULE MODE_IO_FIELD_WRITE
 
+  USE MODD_IO,        ONLY: TFILEDATA, TOUTBAK
   USE MODD_MPIF
-  USE MODD_IO_ll, ONLY: TFILEDATA
+  use modd_precision, only: MNHINT_MPI, MNHREAL_MPI, MNHTIME
 
   USE MODE_FIELD
   USE MODE_IO_WRITE_LFI
@@ -33,41 +32,42 @@ MODULE MODE_FMWRIT
 
   PRIVATE
 
-  INTERFACE IO_WRITE_FIELD
-     MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_X0, IO_WRITE_FIELD_BYNAME_X1,  &
-                      IO_WRITE_FIELD_BYNAME_X2, IO_WRITE_FIELD_BYNAME_X3,  &
-                      IO_WRITE_FIELD_BYNAME_X4, IO_WRITE_FIELD_BYNAME_X5,  &
-                      IO_WRITE_FIELD_BYNAME_X6,                            &
-                      IO_WRITE_FIELD_BYNAME_N0, IO_WRITE_FIELD_BYNAME_N1,  &
-                      IO_WRITE_FIELD_BYNAME_N2, IO_WRITE_FIELD_BYNAME_N3,  &
-                      IO_WRITE_FIELD_BYNAME_L0, IO_WRITE_FIELD_BYNAME_L1,  &
-                      IO_WRITE_FIELD_BYNAME_C0, IO_WRITE_FIELD_BYNAME_C1,  &
-                      IO_WRITE_FIELD_BYNAME_T0,                            &
-                      IO_WRITE_FIELD_BYFIELD_X0,IO_WRITE_FIELD_BYFIELD_X1, &
-                      IO_WRITE_FIELD_BYFIELD_X2,IO_WRITE_FIELD_BYFIELD_X3, &
-                      IO_WRITE_FIELD_BYFIELD_X4,IO_WRITE_FIELD_BYFIELD_X5, &
-                      IO_WRITE_FIELD_BYFIELD_X6,                           &
-                      IO_WRITE_FIELD_BYFIELD_N0,IO_WRITE_FIELD_BYFIELD_N1, &
-                      IO_WRITE_FIELD_BYFIELD_N2,IO_WRITE_FIELD_BYFIELD_N3, &
-                      IO_WRITE_FIELD_BYFIELD_L0,IO_WRITE_FIELD_BYFIELD_L1, &
-                      IO_WRITE_FIELD_BYFIELD_C0,IO_WRITE_FIELD_BYFIELD_C1, &
-                      IO_WRITE_FIELD_BYFIELD_T0
+  public :: IO_Field_write, IO_Field_write_box, IO_Field_write_lb
+  public :: IO_Header_write
+  public :: IO_Fieldlist_write, IO_Field_user_write
+
+  INTERFACE IO_Field_write
+     MODULE PROCEDURE IO_Field_write_byname_X0, IO_Field_write_byname_X1,  &
+                      IO_Field_write_byname_X2, IO_Field_write_byname_X3,  &
+                      IO_Field_write_byname_X4, IO_Field_write_byname_X5,  &
+                      IO_Field_write_byname_X6,                            &
+                      IO_Field_write_byname_N0, IO_Field_write_byname_N1,  &
+                      IO_Field_write_byname_N2, IO_Field_write_byname_N3,  &
+                      IO_Field_write_byname_L0, IO_Field_write_byname_L1,  &
+                      IO_Field_write_byname_C0, IO_Field_write_byname_C1,  &
+                      IO_Field_write_byname_T0,                            &
+                      IO_Field_write_byfield_X0,IO_Field_write_byfield_X1, &
+                      IO_Field_write_byfield_X2,IO_Field_write_byfield_X3, &
+                      IO_Field_write_byfield_X4,IO_Field_write_byfield_X5, &
+                      IO_Field_write_byfield_X6,                           &
+                      IO_Field_write_byfield_N0,IO_Field_write_byfield_N1, &
+                      IO_Field_write_byfield_N2,IO_Field_write_byfield_N3, &
+                      IO_Field_write_byfield_L0,IO_Field_write_byfield_L1, &
+                      IO_Field_write_byfield_C0,IO_Field_write_byfield_C1, &
+                      IO_Field_write_byfield_T0
   END INTERFACE
 
-  INTERFACE IO_WRITE_FIELD_BOX
-     MODULE PROCEDURE IO_WRITE_FIELD_BOX_BYFIELD_X5
+  INTERFACE IO_Field_write_box
+     MODULE PROCEDURE IO_Field_write_box_byfield_X5
   END INTERFACE
 
-  INTERFACE IO_WRITE_FIELD_LB
-     MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_LB, IO_WRITE_FIELD_BYFIELD_LB
+  INTERFACE IO_Field_write_lb
+     MODULE PROCEDURE IO_Field_write_byname_lb, IO_Field_write_byfield_lb
   END INTERFACE
 
-  PUBLIC IO_WRITE_FIELD, IO_WRITE_FIELD_BOX, IO_WRITE_FIELD_LB
-  PUBLIC IO_WRITE_HEADER
-
 CONTAINS 
 
-  SUBROUTINE FIELD_METADATA_CHECK(TPFIELD,KTYPE,KDIMS,HCALLER)
+  SUBROUTINE IO_Field_metadata_check(TPFIELD,KTYPE,KDIMS,HCALLER)
     TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD ! Field to check
     INTEGER,          INTENT(IN) :: KTYPE   ! Expected datatype
     INTEGER,          INTENT(IN) :: KDIMS   ! Expected number of dimensions
@@ -113,10 +113,10 @@ CONTAINS
       END SELECT
       !
     END SUBROUTINE TYPE_WRITE
-  END SUBROUTINE FIELD_METADATA_CHECK
+  END SUBROUTINE IO_Field_metadata_check
 
 
-  SUBROUTINE IO_FILE_WRITE_CHECK(TPFILE,HSUBR,KRESP)
+  SUBROUTINE IO_File_write_check(TPFILE,HSUBR,KRESP)
     TYPE(TFILEDATA),  INTENT(IN)  :: TPFILE
     CHARACTER(LEN=*), INTENT(IN)  :: HSUBR
     INTEGER,          INTENT(OUT) :: KRESP
@@ -144,10 +144,10 @@ CONTAINS
       RETURN
     END IF
     !
-  END SUBROUTINE IO_FILE_WRITE_CHECK
+  END SUBROUTINE IO_File_write_check
 
 
-  SUBROUTINE IO_WRITE_SELECT_FORMAT(TPFILE,OLFI,ONC4)
+  SUBROUTINE IO_Format_write_select(TPFILE,OLFI,ONC4)
     TYPE(TFILEDATA), INTENT(IN)  :: TPFILE ! File structure
     LOGICAL,         INTENT(OUT) :: OLFI   ! Write in LFI format?
     LOGICAL,         INTENT(OUT) :: ONC4   ! Write in netCDF format?
@@ -156,27 +156,27 @@ CONTAINS
     ONC4 = .FALSE.
     IF (TPFILE%CFORMAT=='LFI'     .OR. TPFILE%CFORMAT=='LFICDF4') OLFI = .TRUE.
     IF (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4') ONC4 = .TRUE.
-  END SUBROUTINE IO_WRITE_SELECT_FORMAT
+  END SUBROUTINE IO_Format_write_select
 
 
-  SUBROUTINE IO_WRITE_HEADER(TPFILE,HDAD_NAME)
+  SUBROUTINE IO_Header_write(TPFILE,HDAD_NAME)
     TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE   ! File structure
     CHARACTER(LEN=*),OPTIONAL,INTENT(IN)  :: HDAD_NAME
 
     integer :: ifile
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_FILE','called for file '//TRIM(TPFILE%CNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_write_FILE','called for file '//TRIM(TPFILE%CNAME))
 
-    CALL IO_WRITE_HEADER_ONEFILE(TPFILE,HDAD_NAME)
+    CALL IO_Header_onefile_write(TPFILE,HDAD_NAME)
 
     !Write header also for the Z-split files
     DO IFILE=1,TPFILE%NSUBFILES_IOZ
-      CALL IO_WRITE_HEADER_ONEFILE(TPFILE%TFILES_IOZ(IFILE)%TFILE,HDAD_NAME)
+      CALL IO_Header_onefile_write(TPFILE%TFILES_IOZ(IFILE)%TFILE,HDAD_NAME)
     END DO
-  END SUBROUTINE IO_WRITE_HEADER
+  END SUBROUTINE IO_Header_write
 
 
-  SUBROUTINE IO_WRITE_HEADER_ONEFILE(TPFILE,HDAD_NAME)
+  SUBROUTINE IO_Header_onefile_write(TPFILE,HDAD_NAME)
     !
     USE MODD_CONF
     USE MODD_CONF_n,     ONLY: CSTORAGE_TYPE
@@ -188,23 +188,23 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE :: YDAD_NAME
     INTEGER                      :: ILEN,ILEN2
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_ONEFILE','called for file '//TRIM(TPFILE%CNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_onefile_write','called for file '//TRIM(TPFILE%CNAME))
     !
     IF ( ASSOCIATED(TPFILE%TDADFILE) .AND. PRESENT(HDAD_NAME) ) THEN
       IF ( TRIM(TPFILE%TDADFILE%CNAME) /= TRIM(HDAD_NAME) ) THEN
-        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_HEADER_ONEFILE','TPFILE%TDADFILE%CNAME /= HDAD_NAME')
+        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Header_onefile_write','TPFILE%TDADFILE%CNAME /= HDAD_NAME')
       END IF
     END IF
     !
-    CALL IO_WRITE_HEADER_NC4(TPFILE)
+    CALL IO_Header_write_nc4(TPFILE)
     !
-    CALL IO_WRITE_FIELD(TPFILE,'MNHVERSION',  NMNHVERSION)
-    CALL IO_WRITE_FIELD(TPFILE,'MASDEV',      NMASDEV)
-    CALL IO_WRITE_FIELD(TPFILE,'BUGFIX',      NBUGFIX)
-    CALL IO_WRITE_FIELD(TPFILE,'BIBUSER',     CBIBUSER)
-    CALL IO_WRITE_FIELD(TPFILE,'PROGRAM',     CPROGRAM)
-    CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
-    CALL IO_WRITE_FIELD(TPFILE,'MY_NAME',     TPFILE%CNAME)
+    CALL IO_Field_write(TPFILE,'MNHVERSION',  NMNHVERSION)
+    CALL IO_Field_write(TPFILE,'MASDEV',      NMASDEV)
+    CALL IO_Field_write(TPFILE,'BUGFIX',      NBUGFIX)
+    CALL IO_Field_write(TPFILE,'BIBUSER',     CBIBUSER)
+    CALL IO_Field_write(TPFILE,'PROGRAM',     CPROGRAM)
+    CALL IO_Field_write(TPFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
+    CALL IO_Field_write(TPFILE,'MY_NAME',     TPFILE%CNAME)
     !
     IF ( ASSOCIATED(TPFILE%TDADFILE) ) THEN
       ILEN  = LEN_TRIM(TPFILE%TDADFILE%CNAME)
@@ -227,18 +227,18 @@ CONTAINS
         YDAD_NAME(:) = ' '
       END IF
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_ONEFILE',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_onefile_write',TRIM(TPFILE%CNAME)// &
                      ': TPFILE%TDADFILE not associated and HDAD_NAME not provided')
       ALLOCATE(CHARACTER(LEN=NFILENAMELGTMAXLFI) :: YDAD_NAME)
       YDAD_NAME(:) = ' '
     ENDIF
-    CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',YDAD_NAME)
+    CALL IO_Field_write(TPFILE,'DAD_NAME',YDAD_NAME)
     DEALLOCATE(YDAD_NAME)
     !
-  END SUBROUTINE IO_WRITE_HEADER_ONEFILE
+  END SUBROUTINE IO_Header_onefile_write
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X0(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -252,21 +252,21 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X0
+  END SUBROUTINE IO_Field_write_byname_X0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll, ONLY: GSMONOPROC,ISP
+  SUBROUTINE IO_Field_write_byfield_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISP
     !
-    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
     !
     IMPLICIT NONE
     !
@@ -298,25 +298,25 @@ CONTAINS
     IRESP = 0
     TZFILE => NULL()
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X0',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X0',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,0,'IO_WRITE_FIELD_BYFIELD_X0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,0,'IO_Field_write_byfield_X0')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+          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 (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             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
@@ -324,8 +324,8 @@ CONTAINS
           DO IK_FILE=1,TPFILE%NSUBFILES_IOZ
              TZFILE => TPFILE%TFILES_IOZ(IK_FILE)%TFILE
              IF ( ISP == TZFILE%NMASTER_RANK )  THEN
-                IF (GLFI) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,PFIELD,IRESP)
-                IF (GNC4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,PFIELD,IRESP)
+                IF (GLFI) CALL IO_Field_write_lfi(TZFILE,TPFIELD,PFIELD,IRESP)
+                IF (GNC4) CALL IO_Field_write_nc4(TZFILE,TPFIELD,PFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -335,13 +335,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0
+  END SUBROUTINE IO_Field_write_byfield_X0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X1(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X1(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -355,23 +355,23 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return-code 
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X1
+  END SUBROUTINE IO_Field_write_byname_X1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X1(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll, ONLY: GSMONOPROC,ISP
+  SUBROUTINE IO_Field_write_byfield_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISP
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
     !
     IMPLICIT NONE
     !
@@ -404,26 +404,22 @@ CONTAINS
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,1,'IO_WRITE_FIELD_BYFIELD_X1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,1,'IO_Field_write_byfield_X1')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X1',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+          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_WRITE_FIELD_BYFIELD_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -440,25 +436,25 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X1',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X1
+  END SUBROUTINE IO_Field_write_byfield_X1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X2(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X2(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -472,28 +468,28 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return-code 
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X2
+  END SUBROUTINE IO_Field_write_byname_X2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X2(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC,ISP,L1D,L2D,LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
 #ifdef MNH_GA
     USE MODE_GA
 #endif 
     USE MODE_GATHER_ll
-    USE MODE_MNH_TIMING, ONLY : SECOND_MNH2
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
     !
     IMPLICIT NONE
     !
@@ -516,14 +512,14 @@ CONTAINS
     LOGICAL                                  :: GALLOC
     LOGICAL                                  :: GLFI, GNC4
     !
-    REAL*8,DIMENSION(2) :: T0,T1,T2
-    REAL*8,DIMENSION(2) :: T11,T22
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T0, T1, T2
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T11, T22
 #ifdef MNH_GA
-    REAL,DIMENSION(:,:),POINTER            :: ZFIELD_GA
+    REAL,DIMENSION(:,:),POINTER              :: ZFIELD_GA
 #endif
-    INTEGER                                :: IHEXTOT
-    CHARACTER(LEN=:),ALLOCATABLE           :: YMSG
-    CHARACTER(LEN=6)                       :: YRESP
+    INTEGER                                  :: IHEXTOT
+    CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
+    CHARACTER(LEN=6)                         :: YRESP
     !
     YFILEM   = TPFILE%CNAME
     YRECFM   = TPFIELD%CMNHNAME
@@ -535,39 +531,35 @@ CONTAINS
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,2,'IO_WRITE_FIELD_BYFIELD_X2')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,2,'IO_Field_write_byfield_X2')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X2',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X2',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN 
           IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN 
              ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           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_WRITE_FIELD_BYFIELD_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -616,8 +608,8 @@ CONTAINS
           TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0
           !
           IF (ISP == TPFILE%NMASTER_RANK) THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
 #ifdef MNH_GA
          call ga_sync
@@ -625,23 +617,23 @@ 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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X2',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X2',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2
+  END SUBROUTINE IO_Field_write_byfield_X2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X3(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -655,31 +647,31 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X3
+  END SUBROUTINE IO_Field_write_byname_X3
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,            ONLY : GSMONOPROC,ISNPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll,    ONLY : JPHEXT
-    USE MODD_TIMEZ,            ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISNPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll,    ONLY: JPHEXT
+    USE MODD_TIMEZ,            ONLY: TIMEZ
+    USE MODD_VAR_ll,           ONLY: MNH_STATUSES_IGNORE
     !
     USE MODE_ALLOCBUFFER_ll
-    USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,         ONLY : IO_FILE
-    USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME
-    USE MODE_MNH_TIMING,       ONLY : SECOND_MNH2
 #ifdef MNH_GA
     USE MODE_GA
 #endif
-    USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+    USE MODE_GATHER_ll
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
+    USE MODE_IO_TOOLS,         ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,       ONLY: SECOND_MNH2
     !
     !
     !*      0.1   Declarations of arguments
@@ -710,13 +702,13 @@ CONTAINS
     INTEGER,ALLOCATABLE,DIMENSION(:)         :: REQ_TAB
     INTEGER                                  :: NB_REQ
     TYPE TX_2DP
-       REAL,DIMENSION(:,:), POINTER    :: X
+       REAL, DIMENSION(:,:), POINTER :: X
     END TYPE TX_2DP
-    TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:) :: T_TX2DP
-    REAL*8,DIMENSION(2) :: T0,T1,T2
-    REAL*8,DIMENSION(2) :: T11,T22
+    TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:)    :: T_TX2DP
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T0, T1, T2
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T11, T22
 #ifdef MNH_GA
-    REAL,DIMENSION(:,:,:),POINTER          :: ZFIELD_GA
+    REAL,DIMENSION(:,:,:),POINTER            :: ZFIELD_GA
 #endif
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
@@ -737,40 +729,36 @@ CONTAINS
     GALLOC_ll = .FALSE.
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,3,'IO_WRITE_FIELD_BYFIELD_X3')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,3,'IO_Field_write_byfield_X3')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X3',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X3',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC .AND. TPFILE%NSUBFILES_IOZ==0 ) THEN ! sequential execution
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN 
           IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN 
              ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             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_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -794,20 +782,16 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             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_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -839,7 +823,7 @@ CONTAINS
          !
          DO JKK=1,IKU_ll
             !
-            IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+            IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
             TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
             !
             IK_RANK = TZFILE%NMASTER_RANK
@@ -860,8 +844,8 @@ CONTAINS
                CALL SECOND_MNH2(T1)
                TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0
                !
-               IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
-               IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+               IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+               IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
                CALL SECOND_MNH2(T2)
                TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1
             END IF
@@ -890,7 +874,7 @@ CONTAINS
                 ! get the file & rank to write this level
                 !
                 IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-                   IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+                   IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
                    TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
                 ELSE
                    TZFILE => TPFILE
@@ -899,11 +883,11 @@ CONTAINS
                 IK_RANK = TZFILE%NMASTER_RANK
                 !
                 IF (YDIR == 'XX' .OR. YDIR =='YY') THEN
-                   STOP " XX NON PREVU SUR BG POUR LE MOMENT "
+                   call Print_msg( NVERB_FATAL, 'GEN', 'IO_Field_write_byfield_X3', 'XX not yet planned on Blue Gene' )
                    CALL GATHER_XXFIELD(YDIR,PFIELD,ZFIELDP,TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
                 ELSEIF (YDIR == 'XY') THEN
                    IF (LPACK .AND. L2D) THEN
-                      STOP " L2D NON PREVU SUR BG POUR LE MOMENT "
+                      call Print_msg( NVERB_FATAL, 'GEN', 'IO_Field_write_byfield_X3', 'L2D not yet planned on Blue Gene' )
                       CALL GATHER_XXFIELD('XX',PFIELD(:,JPHEXT+1,:),ZFIELDP(:,1,:),TPFILE%NMASTER_RANK,TPFILE%NMPICOMM)
                    ELSE
                       CALL SECOND_MNH2(T0)
@@ -916,9 +900,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)
@@ -931,7 +915,7 @@ CONTAINS
              !
              DO JKK=JK,JK_MAX
                 IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-                   IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+                   IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
                    TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
                 ELSE
                    TZFILE => TPFILE
@@ -954,14 +938,14 @@ 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
                    CALL SECOND_MNH2(T1)
                    TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0
-                   IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
-                   IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+                   IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+                   IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
                    CALL SECOND_MNH2(T2)
                    TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1
                 END IF
@@ -986,17 +970,17 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X3',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X3',YMSG)
     END IF
     IF (GALLOC)    DEALLOCATE(ZFIELDP)
     IF (GALLOC_ll) DEALLOCATE(ZSLICE_ll)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3
+  END SUBROUTINE IO_Field_write_byfield_X3
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X4(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1010,27 +994,27 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X4
+  END SUBROUTINE IO_Field_write_byname_X4
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,      ONLY : IO_FILE,IO_RANK
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODE_IO_TOOLS,      ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
     !
     !*      0.1   Declarations of arguments
@@ -1064,13 +1048,13 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X4',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X4',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,4,'IO_WRITE_FIELD_BYFIELD_X4')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,4,'IO_Field_write_byfield_X4')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X4',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X4',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
@@ -1080,20 +1064,16 @@ CONTAINS
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             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_WRITE_FIELD_BYFIELD_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1116,25 +1096,25 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X4',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X4',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4
+  END SUBROUTINE IO_Field_write_byfield_X4
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X5(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1148,27 +1128,27 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X5
+  END SUBROUTINE IO_Field_write_byname_X5
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,      ONLY : IO_FILE,IO_RANK
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODE_IO_TOOLS,      ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
     !
     !*      0.1   Declarations of arguments
@@ -1202,13 +1182,13 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X5',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X5',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,5,'IO_WRITE_FIELD_BYFIELD_X5')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,5,'IO_Field_write_byfield_X5')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X5',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X5',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
@@ -1218,20 +1198,16 @@ CONTAINS
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             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_WRITE_FIELD_BYFIELD_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1255,25 +1231,25 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X5',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X5',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5
+  END SUBROUTINE IO_Field_write_byfield_X5
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X6(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1287,26 +1263,26 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X6
+  END SUBROUTINE IO_Field_write_byname_X6
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,      ONLY : IO_FILE,IO_RANK
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODE_IO_TOOLS,      ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
     !
     !*      0.1   Declarations of arguments
@@ -1340,26 +1316,22 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X6',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X6',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,6,'IO_WRITE_FIELD_BYFIELD_X6')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,6,'IO_Field_write_byfield_X6')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X6',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X6',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+          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_WRITE_FIELD_BYFIELD_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1378,25 +1350,25 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X6',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X6',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6
+  END SUBROUTINE IO_Field_write_byfield_X6
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N0(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1410,19 +1382,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N0
+  END SUBROUTINE IO_Field_write_byname_N0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !*      0.    DECLARATIONS
     !             ------------
     !
@@ -1447,25 +1419,25 @@ CONTAINS
     IRESP = 0
     TZFILE => NULL()
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,0,'IO_WRITE_FIELD_BYFIELD_N0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,0,'IO_Field_write_byfield_N0')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+             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
@@ -1473,8 +1445,8 @@ CONTAINS
           DO IK_FILE=1,TPFILE%NSUBFILES_IOZ
              TZFILE => TPFILE%TFILES_IOZ(IK_FILE)%TFILE
              IF ( ISP == TZFILE%NMASTER_RANK )  THEN
-                IF (GLFI) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,KFIELD,IRESP)
-                IF (GNC4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,KFIELD,IRESP)
+                IF (GLFI) CALL IO_Field_write_lfi(TZFILE,TPFIELD,KFIELD,IRESP)
+                IF (GNC4) CALL IO_Field_write_nc4(TZFILE,TPFIELD,KFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -1484,13 +1456,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0
+  END SUBROUTINE IO_Field_write_byfield_N0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N1(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1504,20 +1476,20 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N1
+  END SUBROUTINE IO_Field_write_byname_N1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byfield_N1(TPFILE,TPFIELD,KFIELD,KRESP)
     !
-    USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+    USE MODD_IO, ONLY: ISP,GSMONOPROC
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
@@ -1552,26 +1524,22 @@ CONTAINS
     IRESP = 0
     GALLOC = .FALSE.
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,1,'IO_WRITE_FIELD_BYFIELD_N1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,1,'IO_Field_write_byfield_N1')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N1',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+          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_WRITE_FIELD_BYFIELD_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1588,26 +1556,26 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N1',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(IFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1
+  END SUBROUTINE IO_Field_write_byfield_N1
 
   
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N2(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1621,25 +1589,25 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N2
+  END SUBROUTINE IO_Field_write_byname_N2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2(TPFILE,TPFIELD,KFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
     !
     IMPLICIT NONE
     !
@@ -1662,8 +1630,8 @@ CONTAINS
     LOGICAL                                  :: GALLOC
     LOGICAL                                  :: GLFI, GNC4
     !
-    REAL*8,DIMENSION(2) :: T0,T1,T2
-    REAL*8,DIMENSION(2) :: T11,T22
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T0, T1, T2
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T11, T22
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
@@ -1677,39 +1645,35 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,2,'IO_WRITE_FIELD_BYFIELD_N2')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,2,'IO_Field_write_byfield_N2')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N2',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N2',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
           IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN 
              IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
              IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+             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_WRITE_FIELD_BYFIELD_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1736,30 +1700,30 @@ CONTAINS
           TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0
           !
           IF (ISP == TPFILE%NMASTER_RANK) THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           END IF
           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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N2',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N2',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(IFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2
+  END SUBROUTINE IO_Field_write_byfield_N2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N3(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N3(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1773,24 +1737,24 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N3
+  END SUBROUTINE IO_Field_write_byname_N3
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3(TPFILE,TPFIELD,KFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_N3(TPFILE,TPFIELD,KFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
     !
     IMPLICIT NONE
     !
@@ -1813,7 +1777,7 @@ CONTAINS
     LOGICAL                                  :: GALLOC
     LOGICAL                                  :: GLFI, GNC4
     !
-    REAL*8,DIMENSION(2) :: T11,T22
+    REAL(kind=MNHTIME), DIMENSION(2)         :: T11, T22
     INTEGER                                  :: IHEXTOT
     CHARACTER(LEN=:),ALLOCATABLE             :: YMSG
     CHARACTER(LEN=6)                         :: YRESP
@@ -1827,39 +1791,35 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,3,'IO_WRITE_FIELD_BYFIELD_N3')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,3,'IO_Field_write_byfield_N3')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N3',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N3',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
           IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN 
              IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
              IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+             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_WRITE_FIELD_BYFIELD_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1883,28 +1843,28 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK) THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N3',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N3',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(IFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3
+  END SUBROUTINE IO_Field_write_byfield_N3
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_L0(TPFILE,HNAME,OFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1918,20 +1878,20 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_L0
+  END SUBROUTINE IO_Field_write_byname_L0
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0(TPFILE,TPFIELD,OFIELD,KRESP)
-    USE MODD_IO_ll,            ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISP
     !
-    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
     !*      0.    DECLARATIONS
     !             ------------
     !
@@ -1956,25 +1916,25 @@ CONTAINS
     IRESP = 0
     TZFILE => NULL()
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,0,'IO_WRITE_FIELD_BYFIELD_L0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPELOG,0,'IO_Field_write_byfield_L0')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_L0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_L0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
        ELSE
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
+             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
@@ -1982,8 +1942,8 @@ CONTAINS
           DO IK_FILE=1,TPFILE%NSUBFILES_IOZ
              TZFILE => TPFILE%TFILES_IOZ(IK_FILE)%TFILE
              IF ( ISP == TZFILE%NMASTER_RANK )  THEN
-                IF (GLFI) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,OFIELD,IRESP)
-                IF (GNC4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,OFIELD,IRESP)
+                IF (GLFI) CALL IO_Field_write_lfi(TZFILE,TPFIELD,OFIELD,IRESP)
+                IF (GNC4) CALL IO_Field_write_nc4(TZFILE,TPFIELD,OFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -1993,13 +1953,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_L0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0
+  END SUBROUTINE IO_Field_write_byfield_L0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_L1(TPFILE,HNAME,OFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2013,20 +1973,20 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_L1
+  END SUBROUTINE IO_Field_write_byname_L1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byfield_L1(TPFILE,TPFIELD,OFIELD,KRESP)
     !
-    USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+    USE MODD_IO, ONLY: ISP, GSMONOPROC
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
@@ -2061,26 +2021,22 @@ CONTAINS
     IRESP = 0
     GALLOC = .FALSE.
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_L1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,1,'IO_WRITE_FIELD_BYFIELD_L1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPELOG,1,'IO_Field_write_byfield_L1')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_L1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_L1',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+          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_WRITE_FIELD_BYFIELD_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -2097,26 +2053,26 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,GFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,GFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,GFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_L1',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(GFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1
+  END SUBROUTINE IO_Field_write_byfield_L1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_C0(TPFILE,HNAME,HFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2130,19 +2086,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_C0
+  END SUBROUTINE IO_Field_write_byname_C0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0(TPFILE,TPFIELD,HFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
     !*      0.    DECLARATIONS
     !             ------------
@@ -2165,43 +2121,43 @@ CONTAINS
     !
     IRESP = 0
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,0,'IO_WRITE_FIELD_BYFIELD_C0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPECHAR,0,'IO_Field_write_byfield_C0')
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (LEN(HFIELD)==0 .AND. GLFI) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',&
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_C0',&
                      'zero-size string not allowed if LFI output for '//TRIM(TPFIELD%CMNHNAME))
     END IF
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_C0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_C0',IRESP)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_C0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0
+  END SUBROUTINE IO_Field_write_byfield_C0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_C1(TPFILE,HNAME,HFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_C1(TPFILE,HNAME,HFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2215,19 +2171,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_C1
+  END SUBROUTINE IO_Field_write_byname_C1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1(TPFILE,TPFIELD,HFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_C1(TPFILE,TPFIELD,HFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
     !*      0.    DECLARATIONS
     !             ------------
@@ -2252,13 +2208,13 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE     :: YMSG
     CHARACTER(LEN=6)                 :: YRESP
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,1,'IO_WRITE_FIELD_BYFIELD_C1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPECHAR,1,'IO_Field_write_byfield_C1')
     !
     IRESP = 0
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF(GLFI) THEN
       ILE=LEN(HFIELD)
@@ -2281,33 +2237,33 @@ CONTAINS
       END IF
     END IF
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_C1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_C1',IRESP)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELD,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_C1',YMSG)
     END IF
     IF (ALLOCATED(IFIELD)) DEALLOCATE(IFIELD)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1
+  END SUBROUTINE IO_Field_write_byfield_C1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_T0(TPFILE,HNAME,TFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_T0(TPFILE,HNAME,TFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2321,19 +2277,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),TFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),TFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_T0
+  END SUBROUTINE IO_Field_write_byname_T0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0(TPFILE,TPFIELD,TFIELD,KRESP)
-    USE MODD_IO_ll, ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_T0(TPFILE,TPFIELD,TFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     USE MODD_TYPE_DATE
     !
     !*      0.    DECLARATIONS
@@ -2355,40 +2311,40 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE :: YMSG
     CHARACTER(LEN=6)             :: YRESP
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEDATE,0,'IO_WRITE_FIELD_BYFIELD_T0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEDATE,0,'IO_Field_write_byfield_T0')
     !
     IRESP = 0
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_T0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_T0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TFIELD,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_T0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_T0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0
+  END SUBROUTINE IO_Field_write_byfield_T0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,PLB,KRESP)
+  SUBROUTINE IO_Field_write_byname_lb(TPFILE,HNAME,KL3D,PLB,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2403,25 +2359,25 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_lb',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,PLB,IRESP)
+    IF(IRESP==0) CALL IO_Field_write_lb(TPFILE,TFIELDLIST(ID),KL3D,PLB,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_LB
+  END SUBROUTINE IO_Field_write_byname_lb
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,PLB,KRESP)
+  SUBROUTINE IO_Field_write_byfield_lb(TPFILE,TPFIELD,KL3D,PLB,KRESP)
     !
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISNPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODD_IO,            ONLY: GSMONOPROC, ISNPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
-    USE MODE_DISTRIB_LB
-    USE MODE_TOOLS_ll,      ONLY : GET_GLOBALDIMS_ll
+    USE MODE_DISTRIB_lb
+    USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
     !
     !
     !*      0.1   Declarations of arguments
@@ -2462,15 +2418,15 @@ CONTAINS
     !
     IRESP = 0
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_LB',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_lb',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB','unknown LBTYPE ('//YLBTYPE//')')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_lb','unknown LBTYPE ('//YLBTYPE//')')
       RETURN
     END IF
     !
     IF (TPFIELD%CDIR/='') THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_BYFIELD_LB','CDIR was set for '//TRIM(YRECFM))
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_byfield_lb','CDIR was set for '//TRIM(YRECFM))
       TPFIELD%CDIR=''
     END IF
     !
@@ -2480,19 +2436,19 @@ CONTAINS
        GOTO 1000
     END IF
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_LB',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_lb',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN  ! sequential execution
           IF (LPACK .AND. L2D) THEN
              TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PLB,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PLB,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PLB,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PLB,IRESP)
           END IF
        ELSE
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
@@ -2504,13 +2460,13 @@ CONTAINS
                 ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(IRIM+JPHEXT)*2,SIZE(PLB,3)))
              END IF
              DO JI = 1,ISNPROC
-                CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','WRITE',IRIM,IIB,IIE,IJB,IJE)
+                CALL GET_DISTRIB_lb(YLBTYPE,JI,'FM','WRITE',IRIM,IIB,IIE,IJB,IJE)
                 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)
+                      CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
                       TX3DP = PLB(IIB:IIE,IJB:IJE,:)
                    END IF
                 END IF
@@ -2520,23 +2476,23 @@ CONTAINS
              ELSE
                 TX3DP=>Z3D
              END IF
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
           ELSE
              NB_REQ=0
              ALLOCATE(REQ_TAB(1))
              ALLOCATE(T_TX3DP(1))
              IKU = SIZE(PLB,3)
              ! Other processes
-             CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
+             CALL GET_DISTRIB_lb(YLBTYPE,ISP,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
              IF (IIB /= 0) THEN
                 TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
                 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)
@@ -2545,7 +2501,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
     !
@@ -2553,17 +2509,17 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_lb',YMSG)
     END IF
     !
     IF (ALLOCATED(Z3D)) DEALLOCATE(Z3D)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB
+  END SUBROUTINE IO_Field_write_byfield_lb
 
 
-  SUBROUTINE IO_WRITE_FIELD_BOX_BYFIELD_X5(TPFILE,TPFIELD,HBUDGET,PFIELD,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP)
+  SUBROUTINE IO_Field_write_box_byfield_X5(TPFILE,TPFIELD,HBUDGET,PFIELD,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP)
     !
-    USE MODD_IO_ll, ONLY : GSMONOPROC, ISP
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
     USE MODE_GATHER_ll
     !
@@ -2590,14 +2546,14 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE        :: YMSG
     CHARACTER(LEN=6)                    :: YRESP
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BOX_BYFIELD_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_box_byfield_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
     IRESP = 0
     GALLOC = .FALSE.
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BOX_BYFIELD_X5',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_box_byfield_X5',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
@@ -2608,8 +2564,8 @@ CONTAINS
              ! take the field as a budget
              ZFIELDP=>PFIELD
           END IF
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
        ELSE ! multiprocesses execution
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
              ! Allocate the box
@@ -2625,21 +2581,519 @@ CONTAINS
                & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET)
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             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
     !
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BOX_BYFIELD_X5',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_box_byfield_X5',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BOX_BYFIELD_X5
+  END SUBROUTINE IO_Field_write_box_byfield_X5
+
+
+SUBROUTINE IO_Fieldlist_write(TPOUTPUT)
+!
+USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX
+!
+IMPLICIT NONE
+!
+TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
+!
+INTEGER :: IDX
+INTEGER :: IMI
+INTEGER :: JI
+!
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+DO JI = 1,SIZE(TPOUTPUT%NFIELDLIST)
+  IDX = TPOUTPUT%NFIELDLIST(JI)
+  NDIMS: SELECT CASE (TFIELDLIST(IDX)%NDIMS)
+    !
+    !0D output
+    !
+    CASE (0)
+      NTYPE0D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !0D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X0D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X0D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X0D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 0D real fields' )
+          END IF
+        !
+        !0D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N0D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N0D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N0D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 0D integer fields' )
+          END IF
+        !
+        !0D logical
+        !
+        CASE (TYPELOG)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L0D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_L0D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_L0D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 0D logical fields' )
+          END IF
+        !
+        !0D string
+        !
+        CASE (TYPECHAR)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C0D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_C0D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_C0D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 0D character fields' )
+          END IF
+        !
+        !0D date/time
+        !
+        CASE (TYPEDATE)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_T0D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_T0D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_T0D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 0D date/time fields' )
+          END IF
+        !
+        !0D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 0D output' )
+      END SELECT NTYPE0D
+    !
+    !1D output
+    !
+    CASE (1)
+      NTYPE1D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !1D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X1D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X1D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X1D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 1D real fields' )
+          END IF
+        !
+        !1D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N1D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N1D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N1D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 1D integer fields' )
+          END IF
+        !
+        !1D logical
+        !
+        CASE (TYPELOG)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L1D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_L1D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_L1D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 1D logical fields' )
+          END IF
+        !
+        !1D string
+        !
+        CASE (TYPECHAR)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C1D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_C1D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_C1D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 1D character fields' )
+          END IF
+        !
+        !1D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 1D output' )
+      END SELECT NTYPE1D
+    !
+    !2D output
+    !
+    CASE (2)
+      NTYPE2D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !2D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X2D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X2D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X2D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 2D real fields' )
+          END IF
+        !
+        !2D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N2D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N2D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N2D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not allowed for 2D integer fields' )
+          END IF
+        !
+        !2D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 2D output' )
+      END SELECT NTYPE2D
+    !
+    !3D output
+    !
+    CASE (3)
+      NTYPE3D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !3D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X3D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X3D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X3D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not (yet) allowed for 3D real fields' )
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
+          END IF
+        !
+        !3D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N3D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N3D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_N3D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not (yet) allowed for 3D integer fields' )
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
+          END IF
+        !
+        !3D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 3D output' )
+      END SELECT NTYPE3D
+    !
+    !4D output
+    !
+    CASE (4)
+      NTYPE4D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !4D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X4D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X4D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X4D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not (yet) allowed for 4D real fields' )
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
+          END IF
+        !
+        !4D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 4D output' )
+      END SELECT NTYPE4D
+    !
+    !5D output
+    !
+    CASE (5)
+      NTYPE5D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !5D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X5D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X5D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X5D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not (yet) allowed for 5D real fields' )
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
+          END IF
+        !
+        !5D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 5D output' )
+      END SELECT NTYPE5D
+    !
+    !6D output
+    !
+    CASE (6)
+      NTYPE6D: SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !6D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X6D) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X6D is NOT allocated ' )
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA) ) THEN
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': TFIELD_X6D%DATA is NOT associated' )
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
+          ELSE
+            call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                            ': CLBTYPE/=NONE not (yet) allowed for 6D real fields' )
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
+          END IF
+        !
+        !6D other types
+        !
+        CASE DEFAULT
+          call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': type not yet supported for 6D output' )
+      END SELECT NTYPE6D
+    !
+    !Other number of dimensions
+    !
+    CASE DEFAULT
+      call Print_msg( NVERB_ERROR, 'IO', 'IO_Fieldlist_write', trim(tfieldlist(idx)%cmnhname)// &
+                          ': number of dimensions not yet supported' )
+  END SELECT NDIMS
+END DO
+!
+END SUBROUTINE IO_Fieldlist_write
+
+
+SUBROUTINE IO_Field_user_write(TPOUTPUT)
+!
+#if 0
+USE MODD_DYN_n,      ONLY: XTSTEP
+USE MODD_FIELD_n,    ONLY: XUT, XVT, XRT, XTHT
+USE MODD_PARAMETERS, ONLY: JPVEXT
+USE MODD_PRECIP_n,   ONLY: XINPRR
+#endif
+!
+IMPLICIT NONE
+!
+TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
+!
+TYPE(TFIELDDATA) :: TZFIELD
+!
+#if 0
+INTEGER          :: IKB
+!
+IKB=JPVEXT+1
+!
+TZFIELD%CMNHNAME   = 'UTLOW'
+TZFIELD%CSTDNAME   = 'x_wind'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'm s-1'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_U component of wind at lowest physical level'
+TZFIELD%NGRID      = 2
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XUT(:,:,IKB))
+!
+TZFIELD%CMNHNAME   = 'VTLOW'
+TZFIELD%CSTDNAME   = 'y_wind'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'm s-1'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_V component of wind at lowest physical level'
+TZFIELD%NGRID      = 3
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XVT(:,:,IKB))
+!
+TZFIELD%CMNHNAME   = 'THTLOW'
+TZFIELD%CSTDNAME   = 'air_potential_temperature'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'K'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_potential temperature at lowest physical level'
+TZFIELD%NGRID      = 1
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XTHT(:,:,IKB))
+!
+TZFIELD%CMNHNAME   = 'RVTLOW'
+!TZFIELD%CSTDNAME   = 'humidity_mixing_ratio' !ratio of the mass of water vapor to the mass of dry air
+TZFIELD%CSTDNAME   = 'specific_humidity'     !mass fraction of water vapor in (moist) air
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'kg kg-1'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_Vapor mixing Ratio at lowest physical level'
+TZFIELD%NGRID      = 1
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XRT(:,:,IKB,1))
+!
+TZFIELD%CMNHNAME   = 'ACPRRSTEP'
+TZFIELD%CSTDNAME   = 'rainfall_amount'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'kg m-2'
+TZFIELD%CDIR       = ''
+TZFIELD%CCOMMENT   = 'X_Y_ACcumulated Precipitation Rain Rate during timestep'
+TZFIELD%NGRID      = 1
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+!XACPRR is multiplied by 1000. to convert from m to kg m-2 (water density is assumed to be 1000 kg m-3)
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XINPRR*XTSTEP*1.0E3)
+#endif
+!
+END SUBROUTINE IO_Field_user_write
+
+END MODULE MODE_IO_FIELD_WRITE
 
-END MODULE MODE_FMWRIT
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file.f90 b/src/LIB/SURCOUCHE/src/mode_io_file.f90
new file mode 100644
index 0000000000000000000000000000000000000000..fc766f55219d6ad3d9e8321af35156acf77878fc
--- /dev/null
+++ b/src/LIB/SURCOUCHE/src/mode_io_file.f90
@@ -0,0 +1,753 @@
+!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.
+!-----------------------------------------------------------------
+! Author(s)
+!  D. Gazen, P. Wautelet
+! Modifications:
+!  J. Escobar  19/08/2005: bug argument optinonel ACCESS --> YACCESS
+!  J. Escobar  22/05/2008: bug mode SPECIFIC in IO_File_doopen
+!  J. Escobar  05/11/2009: allow JPMAX_UNIT=48 open files
+!  J. Escobar  18/10/2010: bug with PGI compiler on ADJUSTL
+!  P. Wautelet 04/02/2016: bug with DELIM='NONE' and GCC 5.2/5.3
+!  D. Gazen    April 2016: change error message
+!  P. Wautelet May 2016  : use netCDF Fortran module
+!  P. Wautelet July 2016 : added type OUTBAK
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  J. Pianezze 01/08/2016: add LOASIS flag
+!  P. Wautelet 29/10/2018: better detection of older MNH version numbers
+!  P. Wautelet 13/12/2018: moved some operations to new mode_io_*_nc4 modules
+!  P. Wautelet 10/01/2019: bug correction: close correctly Z-split files
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!                          + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
+!                          + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+!  P. Wautelet 10/01/2019: bug: modify some metadata before open calls
+!  P. Wautelet 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow
+!                                 to disable writes (for bench purposes)
+!  P. Wautelet 06/02/2019: simplify IO_File_doopen and do somme assignments at a more logical place
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
+!  P. Wautelet 14/02/2019: move UPCASE function to tools.f90
+!  P. Wautelet 19/02/2019: simplification/restructuration/cleaning of open/close subroutines (TBCto be continued)
+!  P. Wautelet 27/02/2019: use recursive calls to open/close DES files
+!  P. Wautelet 27/02/2019: remove CLOSE_ll subroutine
+!  P. Wautelet 01/03/2019: move open/close subroutines to mode_io_file.f90
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!  P. Wautelet 12/03/2019: simplify opening of IO split files
+!-----------------------------------------------------------------
+module mode_io_file
+
+use modd_io, only: tfiledata
+
+use mode_msg
+
+implicit none
+
+private
+
+public :: IO_File_close, IO_File_open
+
+
+contains
+
+
+recursive SUBROUTINE IO_File_open(TPFILE,KRESP,kmasterrank, HPOSITION,HSTATUS,HPROGRAM_ORIG)
+!
+USE MODD_CONF,             ONLY: CPROGRAM
+USE MODD_IO,               ONLY: ISNPROC, LIO_NO_WRITE
+!
+use mode_io,               only: gconfio
+use mode_io_manage_struct, only: IO_File_add2list, IO_File_find_byname
+use mode_io_tools,         only: IO_Rank_master_get
+!
+TYPE(TFILEDATA),  POINTER,  INTENT(INOUT) :: TPFILE ! File structure
+INTEGER,          optional, INTENT(OUT)   :: KRESP  ! Return code
+integer,          optional, intent(in)    :: kmasterrank !Rank of the master process
+CHARACTER(LEN=*), optional, INTENT(IN)    :: HPOSITION
+CHARACTER(LEN=*), optional, INTENT(IN)    :: HSTATUS
+CHARACTER(LEN=*), optional, INTENT(IN)    :: HPROGRAM_ORIG !To emulate a file coming from this program
+!
+CHARACTER(len=5)         :: YFILE
+INTEGER                  :: IFILE, IRANK_PROCIO
+INTEGER                  :: IRESP
+TYPE(TFILEDATA), POINTER :: TZFILE_DES
+TYPE(TFILEDATA), POINTER :: TZFILE_DUMMY
+TYPE(TFILEDATA), POINTER :: TZFILE_SPLIT
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_open','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE)// &
+               ' (filetype='//TRIM(TPFILE%CTYPE)//')')
+!
+IF (.NOT.ASSOCIATED(TPFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_open','TPFILE is not associated')
+!
+IF ( LIO_NO_WRITE .AND. TPFILE%CMODE == 'WRITE' .AND. TPFILE%CTYPE/='OUTPUTLISTING') THEN
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_open','opening file '//TRIM(TPFILE%CNAME)// &
+                                                      ' in write mode but LIO_NO_WRITE is set')
+END IF
+!
+TZFILE_DES   => NULL()
+TZFILE_DUMMY => NULL()
+TZFILE_SPLIT => NULL()
+!
+TPFILE%NOPEN         = TPFILE%NOPEN + 1
+TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT + 1
+!
+IF (TPFILE%LOPENED) THEN
+  CALL PRINT_MSG(NVERB_INFO,'IO','IO_File_open','file '//TRIM(TPFILE%CNAME)//' is already in open state')
+  RETURN
+END IF
+!
+TPFILE%LOPENED       = .TRUE.
+!
+!Check if file is in filelist
+CALL IO_File_find_byname(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP)
+IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_open','file '//TRIM(TPFILE%CNAME)//' not in filelist')
+!
+SELECT CASE(TPFILE%CTYPE)
+  !Chemistry input files
+  CASE('CHEMINPUT')
+    CALL IO_File_doopen(TPFILE,IRESP,HPOSITION='REWIND',HSTATUS='OLD',HMODE='GLOBAL')
+
+
+  !Chemistry tabulation files
+  CASE('CHEMTAB')
+    CALL IO_File_doopen(TPFILE,IRESP,HMODE='GLOBAL')
+
+
+  !DES files
+  CASE('DES')
+    CALL IO_File_doopen(TPFILE,IRESP,HDELIM='QUOTE')
+
+
+  !GPS files
+  CASE('GPS')
+    CALL IO_File_doopen(TPFILE,IRESP,HMODE='SPECIFIC')
+
+
+  !Meteo files
+  CASE('METEO')
+   CALL IO_File_doopen(TPFILE,IRESP,HMODE='GLOBAL')
+
+
+  !Namelist files
+  CASE('NML')
+    CALL IO_File_doopen(TPFILE,IRESP,HDELIM='QUOTE',HMODE='GLOBAL')
+
+
+  !OUTPUTLISTING files
+  CASE('OUTPUTLISTING')
+    CALL IO_File_doopen(TPFILE,IRESP,HMODE='GLOBAL')
+
+
+  !SURFACE_DATA files
+  CASE('SURFACE_DATA')
+    CALL IO_File_doopen(TPFILE,IRESP,HMODE='GLOBAL')
+
+
+  !Text files
+  CASE('TXT')
+    CALL IO_File_doopen(TPFILE,IRESP,HPOSITION=HPOSITION,HSTATUS=HSTATUS,HMODE='GLOBAL')
+
+
+  !MesoNH files
+  !Remark: 'MNH' is more general than MNHBACKUP and could be in fact a MNHBACKUP file
+  CASE ('MNH', 'MNHBACKUP', 'MNHDIACHRONIC', 'MNHDIAG', 'MNHOUTPUT', 'PGD')
+    if (.not.GCONFIO) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_open','IO_Config_set must be called before IO_File_open')
+
+    !Do not open '.des' file if OUTPUT or if is a "subfile" (tmainfile is associated)
+    IF(TPFILE%CTYPE/='MNHOUTPUT' .AND. CPROGRAM/='LFICDF' .and. .not.associated(tpfile%tmainfile) ) THEN
+      !OOLD=T because the file may already be in the list
+      CALL IO_File_add2list(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.)
+      CALL IO_File_open(TZFILE_DES,HPROGRAM_ORIG=HPROGRAM_ORIG)
+    ENDIF
+
+    !Manage split files
+    IF (TPFILE%NSUBFILES_IOZ > 0) THEN
+      IF (.NOT.ALLOCATED(TPFILE%TFILES_IOZ)) THEN
+        ALLOCATE(TPFILE%TFILES_IOZ(TPFILE%NSUBFILES_IOZ))
+      ELSE IF ( SIZE(TPFILE%TFILES_IOZ) /= TPFILE%NSUBFILES_IOZ ) THEN
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_open','SIZE(TPFILE%TFILES_IOZ) /= TPFILE%NSUBFILES_IOZ for '//TRIM(TPFILE%CNAME))
+      END IF
+
+      DO IFILE=1,TPFILE%NSUBFILES_IOZ
+        IRANK_PROCIO = 1 + IO_Rank_master_get( IFILE-1, ISNPROC, TPFILE%NSUBFILES_IOZ )
+        WRITE(YFILE ,'(".Z",i3.3)') IFILE
+
+        tzfile_split => null()
+        CALL IO_File_find_byname(TRIM(TPFILE%CNAME)//TRIM(YFILE),TZFILE_SPLIT,IRESP)
+
+        IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list)
+          IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
+            CALL IO_File_add2list(TZFILE_SPLIT,TRIM(TPFILE%CNAME)//TRIM(YFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
+                                  HDIRNAME=TPFILE%CDIRNAME,                                                     &
+                                  KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, &
+                                  HFORMAT=TPFILE%CFORMAT,osplit_ioz=.false.)
+          ELSE
+            CALL IO_File_add2list(TZFILE_SPLIT,TRIM(TPFILE%CNAME)//TRIM(YFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
+                                  KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, &
+                                  HFORMAT=TPFILE%CFORMAT,osplit_ioz=.false.)
+          END IF
+
+          TZFILE_SPLIT%TMAINFILE => TPFILE
+        END IF
+
+        TPFILE%TFILES_IOZ(IFILE)%TFILE => TZFILE_SPLIT
+
+        CALL IO_File_open(TZFILE_SPLIT, kmasterrank=IRANK_PROCIO,HPROGRAM_ORIG=HPROGRAM_ORIG)
+      END DO
+    end if
+
+    CALL IO_File_doopen(TPFILE,IRESP,kmasterrank=kmasterrank,HMODE='MASTER',HPROGRAM_ORIG=HPROGRAM_ORIG)
+
+
+  CASE DEFAULT
+    call print_msg(NVERB_FATAL,'IO','IO_File_open','invalid type '//trim(tpfile%ctype)//' for file '//trim(tpfile%cname))
+END SELECT
+!
+IF (PRESENT(KRESP)) KRESP = IRESP
+!
+END SUBROUTINE IO_File_open
+
+
+SUBROUTINE IO_File_doopen(TPFILE, KRESP, kmasterrank, HMODE, HSTATUS, HPOSITION, HDELIM, HPROGRAM_ORIG)
+
+use modd_io,     only: ISP, LVERB_ALLPRC, nio_rank, NNULLUNIT
+use modd_var_ll, only: nmnh_comm_world
+
+use mode_tools,  only: upcase
+
+TYPE(TFILEDATA), pointer,   INTENT(INOUT) :: TPFILE
+INTEGER,                    INTENT(OUT)   :: KRESP
+integer,          optional, intent(in)    :: kmasterrank !Rank of the master process
+CHARACTER(len=*), OPTIONAL, INTENT(IN)    :: HMODE
+CHARACTER(len=*), OPTIONAL, INTENT(IN)    :: HSTATUS
+CHARACTER(len=*), OPTIONAL, INTENT(IN)    :: HPOSITION
+CHARACTER(len=*), OPTIONAL, INTENT(IN)    :: HDELIM
+CHARACTER(LEN=*), OPTIONAL, INTENT(IN)    :: HPROGRAM_ORIG !To emulate a file coming from this program
+!
+! local var
+!
+INTEGER, PARAMETER :: RECL_DEF = 10000
+!
+CHARACTER(len=20)            :: YSTATUS
+CHARACTER(len=20)            :: YPOSITION
+CHARACTER(len=20)            :: YDELIM
+CHARACTER(len=20)            :: YACTION
+CHARACTER(len=20)            :: YMODE
+CHARACTER(LEN=256)           :: YIOERRMSG
+CHARACTER(LEN=:),ALLOCATABLE :: YPREFILENAME !To store the directory + filename
+integer                      :: imasterrank
+INTEGER                      :: irecl
+INTEGER                      :: IOS
+
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_doopen','opening '//TRIM(TPFILE%CNAME)//' for '//TRIM(TPFILE%CMODE))
+
+IOS = 0
+
+if ( present( kmasterrank ) ) then
+  imasterrank = kmasterrank
+else
+  imasterrank = nio_rank
+end if
+
+IF (PRESENT(HMODE)) THEN
+  YMODE = HMODE
+  YMODE = UPCASE(TRIM(ADJUSTL(YMODE)))
+ELSE
+  YMODE = 'GLOBAL'         ! Default Mode
+END IF
+
+YACTION = TPFILE%CMODE
+YACTION = UPCASE(TRIM(ADJUSTL(YACTION)))
+IF (YACTION /= "READ" .AND. YACTION /= "WRITE") THEN
+  KRESP = 99
+  TPFILE%NLU = -1
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_doopen','action='//TRIM(YACTION)//' not supported')
+  RETURN
+END IF
+
+if (       trim(ymode) /= 'GLOBAL'    .and. trim(ymode) /= 'SPECIFIC' &
+     .and. trim(ymode) /= 'IO_ZSPLIT' .and. trim(ymode) /= 'MASTER'   ) then
+  KRESP = 99
+  TPFILE%NLU = -1
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_doopen','ymode='//TRIM(YMODE)//' not supported')
+  RETURN
+end if
+
+IF (PRESENT(HSTATUS)) THEN
+  YSTATUS=HSTATUS
+ELSE
+  YSTATUS='UNKNOWN'
+ENDIF
+
+IF (TPFILE%NRECL == -1) THEN
+  irecl = RECL_DEF
+ELSE
+  irecl = TPFILE%NRECL
+END IF
+
+IF (PRESENT(HPOSITION)) THEN
+  YPOSITION=HPOSITION
+ELSE
+  YPOSITION='ASIS'
+ENDIF
+IF (PRESENT(HDELIM)) THEN
+  YDELIM=HDELIM
+ELSE
+  YDELIM='NONE'
+ENDIF
+
+IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
+  IF(LEN_TRIM(TPFILE%CDIRNAME)>0) THEN
+    YPREFILENAME = TRIM(TPFILE%CDIRNAME)//'/'//TRIM(TPFILE%CNAME)
+  ELSE
+    YPREFILENAME = TRIM(TPFILE%CNAME)
+  END IF
+ELSE
+  YPREFILENAME = TRIM(TPFILE%CNAME)
+END IF
+
+!NMPICOMM must be set before this select case (necessary for case MASTER)
+TPFILE%NMPICOMM = NMNH_COMM_WORLD
+
+SELECT CASE(YMODE)
+
+  CASE('GLOBAL')
+    IF (YACTION == 'READ') THEN
+      TPFILE%NMASTER_RANK  = -1
+      TPFILE%LMASTER       = .TRUE. !Every process read the file
+      TPFILE%LMULTIMASTERS = .TRUE.
+    ELSE
+      IF (TPFILE%CTYPE=='OUTPUTLISTING') THEN
+        IF (LVERB_ALLPRC) THEN
+          TPFILE%NMASTER_RANK  = -1
+          TPFILE%LMASTER       = .TRUE. !Every process may write in the file
+          TPFILE%LMULTIMASTERS = .TRUE.
+        ELSE
+          TPFILE%NMASTER_RANK  = imasterrank
+          TPFILE%LMASTER       = (ISP == imasterrank)
+          TPFILE%LMULTIMASTERS = .FALSE.
+        END IF
+      ELSE
+        TPFILE%NMASTER_RANK  = imasterrank
+        TPFILE%LMASTER       = (ISP == imasterrank)
+        TPFILE%LMULTIMASTERS = .FALSE.
+      END IF
+    END IF
+    TPFILE%NSUBFILES_IOZ = 0
+
+    IF (TPFILE%LMASTER) THEN
+      !! I/O processor case
+      !JUAN : 31/03/2000 modif pour acces direct
+      IF (TPFILE%CACCESS=='STREAM') THEN
+        OPEN(NEWUNIT=TPFILE%NLU,     &
+             FILE=TRIM(YPREFILENAME),&
+             STATUS=YSTATUS,         &
+             ACCESS=TPFILE%CACCESS,  &
+             IOSTAT=IOS,             &
+             IOMSG=YIOERRMSG,        &
+             FORM=TPFILE%CFORM,      &
+             ACTION=YACTION)
+      ELSEIF (TPFILE%CACCESS=='DIRECT') THEN
+        OPEN(NEWUNIT=TPFILE%NLU,     &
+             FILE=TRIM(YPREFILENAME),&
+             STATUS=YSTATUS,         &
+             ACCESS=TPFILE%CACCESS,  &
+             IOSTAT=IOS,             &
+             IOMSG=YIOERRMSG,        &
+             FORM=TPFILE%CFORM,      &
+             RECL=irecl,             &
+             ACTION=YACTION)
+      ELSE
+        IF (TPFILE%CFORM=="FORMATTED") THEN
+          IF (YACTION=='READ') THEN
+            OPEN(NEWUNIT=TPFILE%NLU,     &
+                 FILE=TRIM(YPREFILENAME),&
+                 STATUS=YSTATUS,         &
+                 ACCESS=TPFILE%CACCESS,  &
+                 IOSTAT=IOS,             &
+                 IOMSG=YIOERRMSG,        &
+                 FORM=TPFILE%CFORM,      &
+                 RECL=irecl,             &
+                 POSITION=YPOSITION,     &
+                 ACTION=YACTION)
+                 !DELIM=YDELIM,          & !Philippe: commented because bug with GCC 5.X
+          ELSE
+            OPEN(NEWUNIT=TPFILE%NLU,     &
+                 FILE=TRIM(YPREFILENAME),&
+                 STATUS=YSTATUS,         &
+                 ACCESS=TPFILE%CACCESS,  &
+                 IOSTAT=IOS,             &
+                 IOMSG=YIOERRMSG,        &
+                 FORM=TPFILE%CFORM,      &
+                 RECL=irecl,             &
+                 POSITION=YPOSITION,     &
+                 ACTION=YACTION,         &
+                 DELIM=YDELIM)
+          ENDIF
+        ELSE
+          OPEN(NEWUNIT=TPFILE%NLU,     &
+               FILE=TRIM(YPREFILENAME),&
+               STATUS=YSTATUS,         &
+               ACCESS=TPFILE%CACCESS,  &
+               IOSTAT=IOS,             &
+               IOMSG=YIOERRMSG,        &
+               FORM=TPFILE%CFORM,      &
+               RECL=irecl,             &
+               POSITION=YPOSITION,     &
+               ACTION=YACTION)
+        ENDIF
+      ENDIF
+
+      IF ( IOS /= 0 ) &
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_doopen','Problem when opening '//TRIM(YPREFILENAME)//': '//TRIM(YIOERRMSG))
+    ELSE
+      !! NON I/O processors case
+      IOS = 0
+      TPFILE%NLU = NNULLUNIT
+    END IF
+
+
+  CASE('SPECIFIC')
+    TPFILE%NMASTER_RANK  = -1
+    TPFILE%LMASTER       = .TRUE. !Every process use the file
+    TPFILE%LMULTIMASTERS = .TRUE.
+    TPFILE%NSUBFILES_IOZ = 0
+
+    IF (TPFILE%CACCESS=='DIRECT') THEN
+      OPEN(NEWUNIT=TPFILE%NLU,                    &
+           FILE=TRIM(YPREFILENAME)//SUFFIX(".P"), &
+           STATUS=YSTATUS,                        &
+           ACCESS=TPFILE%CACCESS,                 &
+           IOSTAT=IOS,                            &
+           IOMSG=YIOERRMSG,                       &
+           FORM=TPFILE%CFORM,                     &
+           RECL=irecl,                            &
+           ACTION=YACTION)
+    ELSE
+      IF (YACTION=='READ') THEN
+        OPEN(NEWUNIT=TPFILE%NLU,                     &
+             FILE=TRIM(YPREFILENAME)//SUFFIX(".P"),  &
+             STATUS=YSTATUS,                         &
+             ACCESS=TPFILE%CACCESS,                  &
+             IOSTAT=IOS,                             &
+             IOMSG=YIOERRMSG,                        &
+             FORM=TPFILE%CFORM,                      &
+             RECL=irecl,                             &
+             POSITION=YPOSITION,                     &
+             ACTION=YACTION)
+             !DELIM=YDELIM,         & !Philippe: commented because bug with GCC 5.X
+      ELSE
+        OPEN(NEWUNIT=TPFILE%NLU,                     &
+             FILE=TRIM(YPREFILENAME)//SUFFIX(".P"),  &
+             STATUS=YSTATUS,                         &
+             ACCESS=TPFILE%CACCESS,                  &
+             IOSTAT=IOS,                             &
+             IOMSG=YIOERRMSG,                        &
+             FORM=TPFILE%CFORM,                      &
+             RECL=irecl,                             &
+             POSITION=YPOSITION,                     &
+             ACTION=YACTION,                         &
+             DELIM=YDELIM)
+      ENDIF
+    ENDIF
+
+    IF ( IOS /= 0 ) &
+      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_doopen','Problem when opening '//TRIM(YPREFILENAME)//': '//TRIM(YIOERRMSG))
+
+
+  case ( 'MASTER' )
+    tpfile%nmaster_rank  = imasterrank
+    tpfile%lmaster       = (isp == imasterrank)
+    tpfile%lmultimasters = .false.
+
+    call IO_File_check_format_exist( tpfile )
+
+    call IO_File_open_format( tpfile, hprogram_orig=hprogram_orig )
+END SELECT
+
+KRESP = IOS
+
+CONTAINS
+
+FUNCTION SUFFIX(HEXT)
+
+  CHARACTER(len=*)             :: HEXT
+  CHARACTER(len=LEN(HEXT)+3)   :: SUFFIX
+
+  if ( isp > 999 ) call Print_msg(NVERB_FATAL,'IO','IO_File_doopen','SUFFIX: ISP>999')
+
+  WRITE(SUFFIX,'(A,i3.3)') TRIM(HEXT), ISP
+
+END FUNCTION SUFFIX
+
+END SUBROUTINE IO_File_doopen
+
+
+recursive SUBROUTINE IO_File_close(TPFILE,KRESP,HPROGRAM_ORIG)
+!
+use modd_conf,             only: cprogram
+use modd_io,               only: nnullunit
+
+use mode_io_file_lfi,      only: IO_File_close_lfi
+#if defined(MNH_IOCDF4)
+use mode_io_file_nc4,      only: IO_File_close_nc4
+use mode_io_write_nc4,     only: IO_Coordvar_write_nc4
+#endif
+use mode_io_manage_struct, only: IO_File_find_byname
+!
+TYPE(TFILEDATA),            INTENT(INOUT) :: TPFILE ! File structure
+INTEGER,          OPTIONAL, INTENT(OUT)   :: KRESP  ! Return code
+CHARACTER(LEN=*), OPTIONAL, INTENT(IN)    :: HPROGRAM_ORIG !To emulate a file coming from this program
+!
+character(len=256)      :: yioerrmsg
+INTEGER                 :: IRESP, JI
+TYPE(TFILEDATA),POINTER :: TZFILE_DES
+TYPE(TFILEDATA),POINTER :: TZFILE_IOZ
+!
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_close','closing '//TRIM(TPFILE%CNAME))
+!
+IF (.NOT.TPFILE%LOPENED) THEN
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_close','trying to close a file not opened: '//TRIM(TPFILE%CNAME))
+  RETURN
+ENDIF
+!
+IF (TPFILE%NOPEN_CURRENT>1) THEN
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_close',TRIM(TPFILE%CNAME)// &
+                 ': decrementing NOPEN_CURRENT (still opened after this call)')
+  TPFILE%NOPEN_CURRENT = TPFILE%NOPEN_CURRENT - 1
+  TPFILE%NCLOSE        = TPFILE%NCLOSE        + 1
+  !
+  DO JI = 1,TPFILE%NSUBFILES_IOZ
+    TZFILE_IOZ => TPFILE%TFILES_IOZ(JI)%TFILE
+    TZFILE_IOZ%NOPEN_CURRENT = TZFILE_IOZ%NOPEN_CURRENT - 1
+    TZFILE_IOZ%NCLOSE        = TZFILE_IOZ%NCLOSE        + 1
+  END DO
+  !
+  RETURN
+END IF
+!
+SELECT CASE(TPFILE%CTYPE)
+  CASE('CHEMINPUT','CHEMTAB','DES','GPS','METEO','NML','OUTPUTLISTING','SURFACE_DATA','TXT')
+    IF (TPFILE%LMASTER) THEN
+      IF (TPFILE%NLU/=-1 .AND. TPFILE%NLU/=NNULLUNIT) THEN
+        CLOSE(UNIT=TPFILE%NLU, STATUS='KEEP', IOSTAT=IRESP, IOMSG=yioerrmsg)
+      END IF
+    END IF
+
+    !Warning and not error or fatal if close fails to allow continuation of execution
+    IF (IRESP/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_close','Problem when closing ' &
+                                 //TRIM(TPFILE%CNAME)//': '//TRIM(YIOERRMSG))
+
+    TPFILE%NLU = -1
+
+
+  !MesoNH files
+  !Remark: 'MNH' is more general than MNHBACKUP and could be in fact a MNHBACKUP file
+  CASE ('MNH', 'MNHBACKUP', 'MNHDIACHRONIC', 'MNHDIAG', 'MNHOUTPUT', 'PGD')
+    !Do not close (non-existing) '.des' file if OUTPUT
+    IF(TPFILE%CTYPE/='OUTPUT' .AND. CPROGRAM/='LFICDF') THEN
+      CALL IO_File_find_byname(TRIM(TPFILE%CNAME)//'.des',TZFILE_DES,IRESP)
+      IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_close','file '//TRIM(TPFILE%CNAME)//'.des not in filelist')
+      CALL IO_File_close(TZFILE_DES,KRESP=IRESP,HPROGRAM_ORIG=HPROGRAM_ORIG)
+    ENDIF
+    !
+#if defined(MNH_IOCDF4)
+    !Write coordinates variables in NetCDF file
+    IF (TPFILE%CMODE == 'WRITE' .AND. (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4')) THEN
+      CALL IO_Coordvar_write_nc4(TPFILE,HPROGRAM_ORIG=HPROGRAM_ORIG)
+    END IF
+#endif
+
+    if (tpfile%lmaster) then
+      if (tpfile%cformat == 'LFI'     .or. tpfile%cformat == 'LFICDF4') call IO_File_close_lfi(tpfile,iresp)
+#if defined(MNH_IOCDF4)
+      if (tpfile%cformat == 'NETCDF4' .or. tpfile%cformat == 'LFICDF4') call IO_File_close_nc4(tpfile,iresp)
+#endif
+    end if
+    !
+    CALL IO_Transfer_list_addto(TPFILE)
+    !
+    SUBFILES: DO JI = 1,TPFILE%NSUBFILES_IOZ
+      TZFILE_IOZ => TPFILE%TFILES_IOZ(JI)%TFILE
+      IF (.NOT.TZFILE_IOZ%LOPENED) &
+        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_close','file '//TRIM(TZFILE_IOZ%CNAME)//' is not opened')
+      IF (TZFILE_IOZ%NOPEN_CURRENT/=1) &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_close','file '//TRIM(TZFILE_IOZ%CNAME)//&
+                       ' is currently opened 0 or several times (expected only 1)')
+      TZFILE_IOZ%LOPENED       = .FALSE.
+      TZFILE_IOZ%NOPEN_CURRENT = 0
+      TZFILE_IOZ%NCLOSE        = TZFILE_IOZ%NCLOSE + 1
+#if defined(MNH_IOCDF4)
+      !Write coordinates variables in netCDF file
+      IF (TZFILE_IOZ%CMODE == 'WRITE' .AND. (TZFILE_IOZ%CFORMAT=='NETCDF4' .OR. TZFILE_IOZ%CFORMAT=='LFICDF4')) THEN
+        CALL IO_Coordvar_write_nc4(TZFILE_IOZ,HPROGRAM_ORIG=HPROGRAM_ORIG)
+      END IF
+#endif
+      IF (TZFILE_IOZ%LMASTER) THEN
+        if (tzfile_ioz%cformat == 'LFI'     .or. tzfile_ioz%cformat == 'LFICDF4') call IO_File_close_lfi(tzfile_ioz,iresp)
+#if defined(MNH_IOCDF4)
+        if (tzfile_ioz%cformat == 'NETCDF4' .or. tzfile_ioz%cformat == 'LFICDF4') call IO_File_close_nc4(tzfile_ioz,iresp)
+#endif
+      END IF
+    END DO SUBFILES
+
+
+  CASE DEFAULT
+    call print_msg(NVERB_FATAL,'IO','IO_File_close','invalid type '//trim(tpfile%ctype)//' for file '//trim(tpfile%cname))
+END SELECT
+!
+TPFILE%LOPENED       = .FALSE.
+TPFILE%NOPEN_CURRENT = 0
+TPFILE%NCLOSE        = TPFILE%NCLOSE + 1
+!
+IF (PRESENT(KRESP)) KRESP=IRESP
+!
+END SUBROUTINE IO_File_close
+
+
+subroutine IO_Transfer_list_addto(TPFILE)
+
+USE MODD_CONF,  ONLY: CPROGRAM
+
+USE MODI_SYSTEM_MNH
+
+TYPE(TFILEDATA), INTENT(INOUT) :: TPFILE ! File structure
+
+CHARACTER(len=:),allocatable :: YFILEM  ! name of the file
+CHARACTER(len=:),allocatable :: YCPIO
+CHARACTER(len=:),allocatable :: YTRANS
+CHARACTER(LEN=100)           :: YCOMMAND
+INTEGER, SAVE                :: ICPT = 0
+
+YFILEM  = TPFILE%CNAME
+
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Transfer_list_addto','called for '//TRIM(YFILEM))
+
+IF (TPFILE%LMASTER .AND. CPROGRAM/='LFICDF') THEN
+  !! Write in pipe
+#if defined(MNH_SX5)
+  YTRANS='nectransfer.x'
+#else
+  YTRANS='xtransfer.x'
+#endif
+
+  SELECT CASE (TPFILE%NLFITYPE)
+    CASE(:-1,3:)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Transfer_list_addto',TRIM(YFILEM)//': incorrect NLFITYPE')
+    CASE(0)
+      YCPIO='NIL'
+    CASE(1)
+      YCPIO='MESONH'
+    CASE(2)
+      CALL PRINT_MSG(NVERB_INFO,'IO','IO_Transfer_list_addto','file '//TRIM(YFILEM)//' not transferred')
+  END SELECT
+
+  if (TPFILE%NLFITYPE==0 .or. TPFILE%NLFITYPE==1) then
+    ICPT=ICPT+1
+    WRITE (YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER",I3.3,"  2>&1 &")') YTRANS,YCPIO,TRIM(YFILEM),ICPT
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Transfer_list_addto','YCOMMAND='//TRIM(YCOMMAND))
+    CALL SYSTEM_MNH(YCOMMAND)
+  end if
+END IF
+
+end subroutine IO_Transfer_list_addto
+
+
+subroutine IO_File_check_format_exist( tpfile )
+
+type(tfiledata), intent(inout) :: tpfile ! File structure
+
+logical :: gexist_lfi, gexist_nc4
+
+
+call Print_msg( NVERB_DEBUG, 'IO', 'IO_File_check_format_exist', 'called for '//TRIM(tpfile%cname) )
+
+IF (TPFILE%LMASTER) THEN
+  ! Proc I/O case
+  INQUIRE(FILE=TRIM(TPFILE%CNAME)//'.lfi',EXIST=GEXIST_LFI)
+  INQUIRE(FILE=TRIM(TPFILE%CNAME)//'.nc', EXIST=GEXIST_NC4)
+
+  MODE: if ( tpfile%cmode == 'READ' ) then
+    IF (.NOT.GEXIST_LFI .AND. .NOT.GEXIST_NC4) &
+      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)//': no .nc or .lfi file')
+
+    SELECT CASE (TRIM(TPFILE%CFORMAT))
+      CASE ('NETCDF4')
+        IF (.NOT.GEXIST_NC4 .AND. GEXIST_LFI) THEN
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)// &
+                         ': .nc file does not exist but .lfi exists -> forced to LFI')
+          TPFILE%CFORMAT='LFI'
+        END IF
+      CASE ('LFI')
+        IF (.NOT.GEXIST_LFI .AND. GEXIST_NC4) THEN
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)// &
+                         ': .lfi file does not exist but .nc exists -> forced to NETCDF4')
+          TPFILE%CFORMAT='NETCDF4'
+        END IF
+      CASE ('LFICDF4')
+        IF (GEXIST_NC4) THEN
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)// &
+                         ': LFICDF4 format is not allowed in READ mode -> forced to NETCDF4')
+          TPFILE%CFORMAT='NETCDF4'
+        ELSE IF (GEXIST_LFI) THEN
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)// &
+                         ': LFICDF4 format is not allowed in READ mode -> forced to LFI')
+          TPFILE%CFORMAT='LFI'
+        END IF
+      CASE DEFAULT
+        IF (GEXIST_NC4) THEN
+          CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)// &
+                         ': invalid fileformat (-> forced to NETCDF4 if no abort)')
+          TPFILE%CFORMAT='NETCDF4'
+        ELSE IF (GEXIST_LFI) THEN
+          CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_check_format_exist',TRIM(TPFILE%CNAME)// &
+                         ': invalid fileformat (-> forced to LFI if no abort)')
+          TPFILE%CFORMAT='LFI'
+        END IF
+    END SELECT
+  end if MODE
+END IF
+
+end subroutine IO_File_check_format_exist
+
+
+subroutine IO_File_open_format( tpfile, hprogram_orig )
+
+#if defined(MNH_IOCDF4)
+use mode_io_file_nc4, only: IO_File_create_nc4, IO_File_open_nc4
+#endif
+use mode_io_file_lfi, only: IO_File_create_lfi, IO_File_open_lfi
+
+type(tfiledata),            intent(inout) :: tpfile ! File structure
+character(len=*), optional, intent(in)    :: hprogram_orig !To emulate a file coming from this program
+
+integer :: iresp
+
+
+call Print_msg( NVERB_DEBUG, 'IO', 'IO_File_open_format', 'called for '//TRIM(tpfile%cname) )
+
+#if defined(MNH_IOCDF4)
+    IF (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4') THEN
+      SELECT CASE (TPFILE%CMODE)
+        CASE('READ')
+          call IO_File_open_nc4(tpfile)
+        CASE('WRITE')
+          call IO_File_create_nc4(TPFILE, hprogram_orig=HPROGRAM_ORIG)
+      END SELECT
+    END IF
+#endif
+
+    IF (TPFILE%CFORMAT=='LFI' .OR. TPFILE%CFORMAT=='LFICDF4') THEN
+      SELECT CASE (TPFILE%CMODE)
+        CASE('READ')
+          call IO_File_open_lfi(tpfile,iresp)
+        CASE('WRITE')
+          call IO_File_create_lfi(tpfile,iresp)
+      END SELECT
+    END IF
+
+end subroutine IO_File_open_format
+
+end module mode_io_file
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
index b79ff2ec1bb67c395249497bc4f61f403f30227b..1d07379957d7f74d8d407d23b450d51f87f96067 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
@@ -3,21 +3,23 @@
 !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 14/12/2018
+! Author
+!  P. Wautelet 14/12/2018
 !
 !  Remarks: some of the code comes from mode_fm.f90 and mode_io.f90
 !           (was duplicated in the 2 files)
 !
-!  Modifications:
-!     Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!                                    + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
-!                                    + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+! Modifications:
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!                          + move IO_Flu_dealloc and IO_Flu_alloc to mode_io_file_lfi.f90
+!                          + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !
 !-----------------------------------------------------------------
 module mode_io_file_lfi
 
-use modd_io_ll,  only: tfiledata
-use modd_netcdf, only: idcdf_kind
+use modd_io,     only: tfiledata
+use modd_precision, only: LFIINT
 
 use mode_msg
 
@@ -25,7 +27,7 @@ implicit none
 
 private
 
-public :: io_create_file_lfi, io_close_file_lfi, io_open_file_lfi
+public :: IO_File_create_lfi, IO_File_close_lfi, IO_File_open_lfi
 
 integer, parameter :: JPRESERVED_UNIT   = 11
 integer, parameter :: JPMAX_UNIT_NUMBER = JPRESERVED_UNIT + 300
@@ -34,38 +36,38 @@ logical,save :: galloc(JPRESERVED_UNIT:JPMAX_UNIT_NUMBER) = .false.
 
 contains
 
-subroutine io_create_file_lfi(tpfile, kstatus)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_lfi,        only: io_prepare_verbosity_lfi
-  use mode_io_tools_mnhversion, only: io_set_mnhversion
+subroutine IO_File_create_lfi(tpfile, kstatus)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_set
+  use mode_io_tools_lfi,        only: IO_Verbosity_prepare_lfi
 
   type(tfiledata), intent(inout) :: tpfile
   integer,         intent(inout) :: 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
 
-  call print_msg(NVERB_DEBUG,'IO','io_create_file_lfi','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_create_lfi','called for '//trim(tpfile%cname))
 
   kstatus = 0
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
     iresou = 0
     if ( tpfile%nlfiflu /= -1 ) call print_msg(NVERB_ERROR,'IO', &
-                                               'io_create_file_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
-    tpfile%nlfiflu = ionewflu()
+                                               'IO_File_create_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
+    tpfile%nlfiflu = IO_Flu_alloc()
     gnamfi = .true.
     yforstatus = 'REPLACE'
     gfater = .true.
 
-    call io_prepare_verbosity_lfi(tpfile, imelev, gstats)
+    call IO_Verbosity_prepare_lfi(tpfile, imelev, gstats)
 
     inumbr = tpfile%nlfiflu
     inprar = tpfile%nlfinprar
@@ -78,44 +80,44 @@ subroutine io_create_file_lfi(tpfile, kstatus)
     !test if file is newly defined
     gnewfi = (ininar==0) .or. (imelev<2)
     if (.not.gnewfi) then
-      call print_msg(NVERB_INFO,'IO','io_create_file_lfi','file '//trim(yfilem)//'.lfi previously created with LFI')
+      call print_msg(NVERB_INFO,'IO','IO_File_create_lfi','file '//trim(yfilem)//'.lfi previously created with LFI')
     endif
   end if
-  call io_set_mnhversion(tpfile)
-end subroutine io_create_file_lfi
+  call IO_Mnhversion_set(tpfile)
+end subroutine IO_File_create_lfi
 
 
-subroutine io_close_file_lfi(tpfile, kstatus)
+subroutine IO_File_close_lfi(tpfile, kstatus)
   type(tfiledata),   intent(inout)  :: tpfile
   integer, optional, intent(out)    :: kstatus
 
   character(len=*), parameter :: YSTATUS = 'KEEP'
 
-  integer(kind=LFI_INT) :: istatus
+  integer(kind=LFIINT) :: istatus
 
-  call print_msg(NVERB_DEBUG,'IO','io_close_file_lfi','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_close_lfi','called for '//trim(tpfile%cname))
 
   istatus = 0
 
   if (tpfile%lmaster) then
     if ( tpfile%nlfiflu /= -1 ) then
       call lfifer(istatus, tpfile%nlfiflu, YSTATUS)
-      call iofreeflu(int(tpfile%nlfiflu))
+      call IO_Flu_dealloc(int(tpfile%nlfiflu))
       tpfile%nlfiflu = -1
     else
       istatus = -1
-      call print_msg(NVERB_WARNING, 'IO', 'io_close_file_lfi', 'file '//trim(tpfile%cname)//'.lfi is not opened')
+      call print_msg(NVERB_WARNING, 'IO', 'IO_File_close_lfi', 'file '//trim(tpfile%cname)//'.lfi is not opened')
     end if
   end if
 
   if (present(kstatus)) kstatus = int(istatus,kind=kind(kstatus))
-end subroutine io_close_file_lfi
+end subroutine IO_File_close_lfi
 
 
-subroutine io_open_file_lfi(tpfile, kstatus)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_lfi,        only: io_prepare_verbosity_lfi
-  use mode_io_tools_mnhversion, only: io_get_mnhversion
+subroutine IO_File_open_lfi(tpfile, kstatus)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_get
+  use mode_io_tools_lfi,        only: IO_Verbosity_prepare_lfi
 
   type(tfiledata), intent(inout) :: tpfile
   integer,         intent(inout) :: kstatus
@@ -123,28 +125,28 @@ subroutine io_open_file_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
 
-  call print_msg(NVERB_DEBUG,'IO','io_open_file_lfi','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_open_lfi','called for '//trim(tpfile%cname))
 
   kstatus = 0
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
     iresou = 0
     if ( tpfile%nlfiflu /= -1 ) call print_msg(NVERB_ERROR,'IO', &
-                                               'io_open_file_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
-    tpfile%nlfiflu = ionewflu()
+                                               'IO_File_open_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
+    tpfile%nlfiflu = IO_Flu_alloc()
     gnamfi = .true.
     yforstatus = 'OLD'
     gfater = .true.
 
-    call io_prepare_verbosity_lfi(tpfile, imelev, gstats)
+    call IO_Verbosity_prepare_lfi(tpfile, imelev, gstats)
 
     inumbr = tpfile%nlfiflu
     inprar = tpfile%nlfinprar
@@ -155,14 +157,14 @@ subroutine io_open_file_lfi(tpfile, kstatus)
 
     if (iresou/=0) kstatus = int(iresou, kind=kind(kstatus))
   end if
-  call io_get_mnhversion(tpfile)
-end subroutine io_open_file_lfi
+  call IO_Mnhversion_get(tpfile)
+end subroutine IO_File_open_lfi
 
 
-function ionewflu()
-  use modd_io_ll, only: nnullunit
+function IO_Flu_alloc()
+  use modd_io, only: nnullunit
 
-  integer :: ionewflu
+  integer :: IO_Flu_alloc
 
   integer :: ji
   integer :: ios
@@ -174,7 +176,7 @@ function ionewflu()
     if ( galloc(ji) ) cycle
     inquire(unit=ji, exist=gexists, opened=gopened, iostat=ios)
     if (gexists .and. .not. gopened .and. ios == 0) then
-      ionewflu   = ji
+      IO_Flu_alloc   = ji
       gfound     = .true.
       galloc(ji) = .true.
       exit
@@ -182,21 +184,21 @@ function ionewflu()
   end do
 
   if (.not. gfound) then
-    call print_msg(NVERB_ERROR,'IO','ionewflu','wrong unit number')
-    ionewflu = nnullunit !/dev/null Fortran unit
+    call print_msg(NVERB_ERROR,'IO','IO_Flu_alloc','wrong unit number')
+    IO_Flu_alloc = nnullunit !/dev/null Fortran unit
   end if
-end function ionewflu
+end function IO_Flu_alloc
 
 
-subroutine iofreeflu(koflu)
+subroutine IO_Flu_dealloc(koflu)
   integer :: koflu
 
   if ( (koflu >= JPRESERVED_UNIT) .and. (koflu <= JPMAX_UNIT_NUMBER) ) then
     galloc(koflu) = .false.
   else
-    call print_msg(NVERB_ERROR,'IO','iofreeflu','wrong unit number')
+    call print_msg(NVERB_ERROR,'IO','IO_Flu_dealloc','wrong unit number')
   end if
-end subroutine iofreeflu
+end subroutine IO_Flu_dealloc
 
 
 end module mode_io_file_lfi
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
index 34b375157c278e113c4943426db5f8bf14a79176..746e5746e59b97bb174194ac81d125d22a6f9a1f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
@@ -3,218 +3,221 @@
 !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 13/12/2018
+! Author
+!  P. Wautelet 13/12/2018
 !
 !  Remarks: some of the code comes from mode_fm.f90 and mode_io.f90
 !           (was duplicated in the 2 files)
 !
-!  Modifications:
-!     Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!                                    + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
-!                                    + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
-!     Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
+! Modifications:
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!                          + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
+!                          + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!  P. Wautelet 07/03/2019: bugfix: io_set_mnhversion must be called by all the processes
 !
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_file_nc4
 
-use modd_io_ll,  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_handle_err_nc4, io_set_knowndims_nc4, newiocdf
+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
 
 private
 
-public :: io_create_file_nc4, io_close_file_nc4, io_open_file_nc4
+public :: IO_File_create_nc4, IO_File_close_nc4, IO_File_open_nc4
 
 contains
 
-subroutine io_create_file_nc4(tpfile,hprogram_orig)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_mnhversion, only: io_set_mnhversion
+subroutine IO_File_create_nc4(tpfile,hprogram_orig)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_set
 
   type(tfiledata),           intent(inout) :: tpfile
   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_create_file_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_create_nc4','called for '//trim(tpfile%cname))
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
-    tpfile%tncdims => newiocdf()
+    tpfile%tncdims => IO_Iocdf_alloc_nc4()
     istatus = NF90_CREATE(adjustl(trim(yfilem))//".nc", ior(NF90_CLOBBER,NF90_NETCDF4), tpfile%nncid)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_FATAL,'IO','io_create_file_nc4','NF90_CREATE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
+      call print_msg(NVERB_FATAL,'IO','IO_File_create_nc4','NF90_CREATE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
     end if
-    call io_set_not_cleanly_closed_nc4(tpfile)
-    call io_set_mnhversion(tpfile)
-    call io_set_knowndims_nc4(tpfile, hprogram_orig=hprogram_orig)
+    call IO_Not_cleanly_closed_set_nc4(tpfile)
+    call IO_Knowndims_set_nc4(tpfile, hprogram_orig=hprogram_orig)
   end if
-end subroutine io_create_file_nc4
+  call IO_Mnhversion_set(tpfile)
+end subroutine IO_File_create_nc4
 
 
-subroutine io_close_file_nc4(tpfile,kstatus)
-  use mode_io_tools_nc4, only: cleaniocdf
+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_close_file_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_close_nc4','called for '//trim(tpfile%cname))
 
   istatus = 0
 
   if (tpfile%lmaster ) then
     if (tpfile%nncid == -1) then
-      call print_msg(NVERB_WARNING, 'IO', 'io_close_file_nc4', 'file '//trim(tpfile%cname)//'.nc is not opened')
+      call print_msg(NVERB_WARNING, 'IO', 'IO_File_close_nc4', 'file '//trim(tpfile%cname)//'.nc is not opened')
     else
-      if (trim(tpfile%cmode) == 'WRITE') call io_set_cleanly_closed_nc4(tpfile)
+      if (trim(tpfile%cmode) == 'WRITE') call IO_Cleanly_closed_set_nc4(tpfile)
       istatus = NF90_CLOSE(tpfile%nncid)
       if (istatus /= NF90_NOERR) then
-        call print_msg(NVERB_WARNING, 'IO', 'io_close_file_nc4', 'NF90_CLOSE error: '//trim(NF90_STRERROR(istatus)))
+        call print_msg(NVERB_WARNING, 'IO', 'IO_File_close_nc4', 'NF90_CLOSE error: '//trim(NF90_STRERROR(istatus)))
       end if
       tpfile%nncid = -1
-      if (associated(tpfile%tncdims)) call cleaniocdf(tpfile%tncdims)
+      if (associated(tpfile%tncdims)) call IO_Iocdf_dealloc_nc4(tpfile%tncdims)
     end if
   end if
 
   if (present(kstatus)) kstatus = istatus
-end subroutine io_close_file_nc4
+end subroutine IO_File_close_nc4
 
 
-subroutine io_open_file_nc4(tpfile)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_mnhversion, only: io_get_mnhversion
+subroutine IO_File_open_nc4(tpfile)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_get
 
   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_open_file_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_open_nc4','called for '//trim(tpfile%cname))
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
-    tpfile%tncdims => newiocdf()
+    tpfile%tncdims => IO_Iocdf_alloc_nc4()
     istatus = NF90_OPEN(adjustl(trim(yfilem))//".nc", NF90_NOWRITE, tpfile%nncid)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_FATAL, 'IO', 'io_open_file_nc4', 'NF90_OPEN for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
+      call print_msg(NVERB_FATAL, 'IO', 'IO_File_open_nc4', 'NF90_OPEN for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
     end if
 
     istatus = NF90_INQUIRE(tpfile%nncid, nvariables=tpfile%nncnar)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_FATAL,'IO','io_open_file_nc4','NF90_INQUIRE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
+      call print_msg(NVERB_FATAL,'IO','IO_File_open_nc4','NF90_INQUIRE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
     end if
   end if
 
   if (trim(tpfile%cmode) == 'READ') then
-    call io_get_mnhversion(tpfile)
-    if (tpfile%lmaster) call io_check_cleanly_closed_nc4(tpfile)
+    call IO_Mnhversion_get(tpfile)
+    if (tpfile%lmaster) call IO_Cleanly_closed_check_nc4(tpfile)
   end if
 
-end subroutine io_open_file_nc4
+end subroutine IO_File_open_nc4
 
 
-subroutine io_check_cleanly_closed_nc4(tpfile)
+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_check_cleanly_closed_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4','called for '//trim(tpfile%cname))
 
   imnhversion = tpfile%nmnhversion
   if ( imnhversion(1)<5                                                 .OR. &
       (imnhversion(1)==5 .AND. imnhversion(2)<4)                        .OR. &
       (imnhversion(1)==5 .AND. imnhversion(2)==4 .AND. imnhversion(3)<2)     ) then
-    call print_msg(NVERB_DEBUG,'IO','io_check_cleanly_closed_nc4', &
+    call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4', &
                    'file '//trim(tpfile%cname)//' is too old (before MNH 5.4.2) to check if cleanly closed')
     return
   end if
 
   istatus = NF90_INQUIRE_ATTRIBUTE(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', len = ilen)
   if (istatus /= NF90_NOERR) then
-    call print_msg(NVERB_ERROR,'IO','io_check_cleanly_closed_nc4', &
+    call print_msg(NVERB_ERROR,'IO','IO_Cleanly_closed_check_nc4', &
                    'MNH_cleanly_closed attribute not found in file '//trim(tpfile%cname))
   else
     allocate( character(len=ilen) :: yclean )
     istatus = NF90_GET_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', yclean)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_WARNING,'IO','io_check_cleanly_closed_nc4', &
+      call print_msg(NVERB_WARNING,'IO','IO_Cleanly_closed_check_nc4', &
                     'MNH_cleanly_closed attribute not found in file '//trim(tpfile%cname))
     else
       if (yclean == 'yes') then
-        call print_msg(NVERB_DEBUG,'IO','io_check_cleanly_closed_nc4', &
+        call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4', &
                       'file '//trim(tpfile%cname)//' was cleanly closed before opening')
       else if (yclean == 'no') then
-        call print_msg(NVERB_ERROR,'IO','io_check_cleanly_closed_nc4', &
+        call print_msg(NVERB_ERROR,'IO','IO_Cleanly_closed_check_nc4', &
                       'file '//trim(tpfile%cname)//' was not cleanly closed before opening')
       else
-        call print_msg(NVERB_ERROR,'IO','io_check_cleanly_closed_nc4', &
+        call print_msg(NVERB_ERROR,'IO','IO_Cleanly_closed_check_nc4', &
                       'invalid MNH_cleanly_closed attribute for file '//trim(tpfile%cname))
       end if
     end if
   end if
-end subroutine io_check_cleanly_closed_nc4
+end subroutine IO_Cleanly_closed_check_nc4
 
 
-subroutine io_set_cleanly_closed_nc4(tpfile)
+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_set_cleanly_closed_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_set_nc4','called for '//trim(tpfile%cname))
 
   istatus = NF90_PUT_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', 'yes')
-  if (istatus /= NF90_NOERR) call io_handle_err_nc4(istatus,'io_set_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
-end subroutine io_set_cleanly_closed_nc4
+  if (istatus /= NF90_NOERR) call IO_Err_handle_nc4(istatus,'IO_Cleanly_closed_set_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
+end subroutine IO_Cleanly_closed_set_nc4
 
 
-subroutine io_set_not_cleanly_closed_nc4(tpfile)
+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_set_not_cleanly_closed_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Not_cleanly_closed_set_nc4','called for '//trim(tpfile%cname))
 
   istatus = NF90_PUT_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', 'no')
-  if (istatus /= NF90_NOERR) call io_handle_err_nc4(istatus,'io_set_not_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
-end subroutine io_set_not_cleanly_closed_nc4
+  if (istatus /= NF90_NOERR) call IO_Err_handle_nc4(istatus,'IO_Not_cleanly_closed_set_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
+end subroutine IO_Not_cleanly_closed_set_nc4
 
 end module mode_io_file_nc4
 #else
 !
 ! External dummy subroutines
 !
-subroutine io_create_file_nc4(a, b)
+subroutine IO_File_create_nc4(a, b)
 use mode_msg
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_create_file_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_create_file_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_create_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_File_create_nc4
 !
-subroutine io_close_file_nc4(a)
+subroutine IO_File_close_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_close_file_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_close_file_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_close_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_File_close_nc4
 !
-subroutine io_open_file_nc4(a)
+subroutine IO_File_open_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_open_file_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_open_file_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_open_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_File_open_nc4
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index 8745773f089fa8ce4b2f61cc5e3890d78cf10d55..4e6bce3f26e7f74836495171a3da9dcab91a5e6b 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -3,26 +3,37 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!!    Authors
-!!    -------
-!
-!     P. Wautelet : 2016: original version
+! Author(s)
+!  P. Wautelet 2016
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
-!                                 to allow to disable writes (for bench purposes)
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
+!                          to allow to disable writes (for bench purposes)
+!  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 18/02/2019: bugfixes for nsubfiles_ioz
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!  P. Wautelet 12/03/2019: add TMAINFILE field in TFILEDATA
 !-----------------------------------------------------------------
 MODULE MODE_IO_MANAGE_STRUCT
 !
-USE MODD_IO_ll
+USE MODD_IO
+use modd_precision, only: LFIINT
+!
 USE MODE_MSG
 !
 IMPLICIT NONE
 !
+private
+!
+public :: IO_Bakout_struct_prepare, IO_File_add2list, IO_File_find_byname, IO_Filelist_print
+!
 CONTAINS
 !
 !#########################################################################
-SUBROUTINE IO_PREPARE_BAKOUT_STRUCT(KSUP,PTSTEP,PSEGLEN)
+SUBROUTINE IO_Bakout_struct_prepare(KSUP,PTSTEP,PSEGLEN)
 !#########################################################################
 !
 USE MODD_BAKOUT
@@ -56,7 +67,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: IBAK_STEP, IOUT_STEP
 CHARACTER (LEN=4) :: YDADNUMBER       ! Character string for the DAD model file number
 !
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_PREPARE_BAKOUT_STRUCT','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Bakout_struct_prepare','called')
 !
 ! Special case if writes are forced to NO
 IF (LIO_NO_WRITE) THEN
@@ -177,7 +188,7 @@ DO IMI = 1, NMODEL
     ELSE
       IERR_LVL = NVERB_ERROR
     END IF
-    CALL PRINT_MSG(IERR_LVL,'IO','IO_PREPARE_BAKOUT_STRUCT','no (valid) backup time')
+    CALL PRINT_MSG(IERR_LVL,'IO','IO_Bakout_struct_prepare','no (valid) backup time')
   END IF
   !
   IOUT_NUMB = 0
@@ -195,13 +206,13 @@ DO IMI = 1, NMODEL
   ALLOCATE(OUT_MODEL(IMI)%TBACKUPN(IBAK_NUMB))
   ALLOCATE(OUT_MODEL(IMI)%TOUTPUTN(IOUT_NUMB))
   !
-  CALL POPULATE_STRUCT(TFILE_FIRST,TFILE_LAST,IBAK_STEP,"BACKUP",OUT_MODEL(IMI)%TBACKUPN)
-  CALL POPULATE_STRUCT(TFILE_FIRST,TFILE_LAST,IOUT_STEP,"OUTPUT",OUT_MODEL(IMI)%TOUTPUTN)
+  CALL POPULATE_STRUCT(TFILE_FIRST,TFILE_LAST,IBAK_STEP,"MNHBACKUP",OUT_MODEL(IMI)%TBACKUPN)
+  CALL POPULATE_STRUCT(TFILE_FIRST,TFILE_LAST,IOUT_STEP,"MNHOUTPUT",OUT_MODEL(IMI)%TOUTPUTN)
   !
   !* Find dad output number
   !
   !Security check (if it happens, this part of the code should be exported outside of the IMI loop)
-  IF (NDAD(IMI)>IMI) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_PREPARE_BAKOUT_STRUCT','NDAD(IMI)>IMI')
+  IF (NDAD(IMI)>IMI) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Bakout_struct_prepare','NDAD(IMI)>IMI')
   IF (NDAD(IMI) == IMI .OR.  IMI == 1) THEN
     OUT_MODEL(IMI)%TBACKUPN(:)%NOUTDAD = 0
     DO IPOS = 1,OUT_MODEL(IMI)%NBAK_NUMB
@@ -257,7 +268,7 @@ DO IMI = 1, NMODEL
     DO IPOS = 1,JPOUTVARMAX
       IF (COUT_VAR(IMI,IPOS)/='') IVAR = IVAR + 1
     END DO
-    IF (IVAR==0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_PREPARE_BAKOUT_STRUCT','no fields chosen for output')
+    IF (IVAR==0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Bakout_struct_prepare','no fields chosen for output')
     ALLOCATE(OUT_MODEL(IMI)%TOUTPUTN(1)%NFIELDLIST(IVAR))
     !Determine the list of the outputs to do (by field number)
     IVAR = 1
@@ -268,7 +279,7 @@ DO IMI = 1, NMODEL
         CALL FIND_FIELD_ID_FROM_MNHNAME(COUT_VAR(IMI,IPOS),IFIELD,IRESP)
         OUT_MODEL(IMI)%TOUTPUTN(1)%NFIELDLIST(IVAR) = IFIELD
         IF (IRESP/=0) THEN
-          CALL PRINT_MSG(NVERB_FATAL,'IO','IO_PREPARE_BAKOUT_STRUCT','unknown field for output: '//TRIM(COUT_VAR(IMI,IPOS)))
+          CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Bakout_struct_prepare','unknown field for output: '//TRIM(COUT_VAR(IMI,IPOS)))
           !MNH is killed to prevent problems with wrong values in NFIELDLIST
         END IF
         !
@@ -285,20 +296,24 @@ DO IMI = 1, NMODEL
   DEALLOCATE(IOUT_STEP)
   !
   IF (IP==1) THEN
-  PRINT *,'-------------------------'
+  PRINT *,'-------------------------------'
   PRINT *,'Model number:      ',IMI
   PRINT *,'Number of backups: ',IBAK_NUMB
-  PRINT *,'Timestep     Time'
-  DO JOUT = 1,IBAK_NUMB
-    WRITE(*,'( I9,F12.3 )'  ) OUT_MODEL(IMI)%TBACKUPN(JOUT)%NSTEP,OUT_MODEL(IMI)%TBACKUPN(JOUT)%XTIME
-  END DO
-  PRINT *,'-------------------------'
+  if ( ibak_numb > 0 ) then
+    PRINT *,'Timestep     Time'
+    DO JOUT = 1,IBAK_NUMB
+      WRITE(*,'( I9,F12.3 )'  ) OUT_MODEL(IMI)%TBACKUPN(JOUT)%NSTEP,OUT_MODEL(IMI)%TBACKUPN(JOUT)%XTIME
+    END DO
+  end if
+  PRINT *,'-------------------------------'
   PRINT *,'Model number:      ',IMI
   PRINT *,'Number of outputs: ',IOUT_NUMB
-  PRINT *,'Timestep     Time'
-  DO JOUT = 1,IOUT_NUMB
-    WRITE(*,'( I9,F12.3 )'  ) OUT_MODEL(IMI)%TOUTPUTN(JOUT)%NSTEP,OUT_MODEL(IMI)%TOUTPUTN(JOUT)%XTIME
-  END DO
+  if ( iout_numb > 0 ) then
+    PRINT *,'Timestep     Time'
+    DO JOUT = 1,IOUT_NUMB
+      WRITE(*,'( I9,F12.3 )'  ) OUT_MODEL(IMI)%TOUTPUTN(JOUT)%NSTEP,OUT_MODEL(IMI)%TOUTPUTN(JOUT)%XTIME
+    END DO
+  end if
   !
   IF (IOUT_NUMB>0) THEN
     PRINT *,'Field list:'
@@ -308,7 +323,7 @@ DO IMI = 1, NMODEL
     END DO
   END IF
   !
-  PRINT *,'-------------------------'
+  PRINT *,'-------------------------------'
   END IF
   !
 END DO ! IMI=1,NMODEL
@@ -529,7 +544,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
         TPBAKOUTN(IPOS)%TFILE%CTYPE=HFILETYPE
         TPBAKOUTN(IPOS)%TFILE%CMODE="WRITE"
         WRITE (YNUMBER,FMT="(I3.3)") IPOS
-        IF (TRIM(HFILETYPE)=='OUTPUT') THEN
+        IF (TRIM(HFILETYPE)=='MNHOUTPUT') THEN
           ! Add a "OUT" suffix for output files
           TPBAKOUTN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//'.OUT.'//YNUMBER)
           !Reduce the float precision if asked
@@ -547,7 +562,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
           ELSE IF (LEN_TRIM(CIO_DIR)>0) THEN
             TPBAKOUTN(IPOS)%TFILE%CDIRNAME=TRIM(CIO_DIR)
           END IF
-        ELSE IF (TRIM(HFILETYPE)=='BACKUP') THEN
+        ELSE IF (TRIM(HFILETYPE)=='MNHBACKUP') THEN
           TPBAKOUTN(IPOS)%TFILE%CNAME=ADJUSTL(ADJUSTR(IO_SURF_MNH_MODEL(IMI)%COUTFILE)//'.'//YNUMBER)
           IF (LEN_TRIM(CBAK_DIR)>0) THEN
             TPBAKOUTN(IPOS)%TFILE%CDIRNAME=TRIM(CBAK_DIR)
@@ -557,7 +572,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
         ELSE
           CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown filetype ('//TRIM(HFILETYPE)//')')
         ENDIF
-        TPBAKOUTN(IPOS)%TFILE%NLFITYPE=1 !1: to be transfered
+        TPBAKOUTN(IPOS)%TFILE%NLFITYPE=1 !1: to be transferred
 !PW: TODO: set NLFIVERB only when useful (only if LFI file...)
         TPBAKOUTN(IPOS)%TFILE%NLFIVERB=NVERB
         IF (LIOCDF4) THEN
@@ -565,19 +580,19 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
             TPBAKOUTN(IPOS)%TFILE%CFORMAT='NETCDF4'
           ELSE
             TPBAKOUTN(IPOS)%TFILE%CFORMAT='LFICDF4'
-            IF (TRIM(HFILETYPE)=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV)
+            IF (TRIM(HFILETYPE)=='MNHBACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV)
           END IF
         ELSE IF (LLFIOUT) THEN
           TPBAKOUTN(IPOS)%TFILE%CFORMAT='LFI'
-          IF (TRIM(HFILETYPE)=='BACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV)
+          IF (TRIM(HFILETYPE)=='MNHBACKUP') TPBAKOUTN(IPOS)%TFILE%NLFINPRAR= 22+2*(4+NRR+NSV)
         ELSE
           CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown backup/output fileformat')
         ENDIF
         !
         !Create file structures if Z-splitted files
         IF (NB_PROCIO_W>1) THEN
+          TPBAKOUTN(IPOS)%TFILE%NSUBFILES_IOZ = NB_PROCIO_W
           ALLOCATE(TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(NB_PROCIO_W))
-!           ALLOCATE(TPBAKOUTN(IPOS)%TFILE_IOZ(NB_PROCIO_W))
           IF (NB_PROCIO_W>999) THEN
             CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','more than 999 z-levels')
           END IF
@@ -592,7 +607,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
             TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%CNAME = TRIM(TPBAKOUTN(IPOS)%TFILE%CNAME)//'.Z'//YNUMBER
             IF(ALLOCATED(TPBAKOUTN(IPOS)%TFILE%CDIRNAME)) &
               TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%CDIRNAME = TRIM(TPBAKOUTN(IPOS)%TFILE%CDIRNAME)
-            IF (TRIM(HFILETYPE)=='OUTPUT') THEN
+            IF (TRIM(HFILETYPE)=='MNHOUTPUT') THEN
               !Reduce the float precision if asked
               TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%LNCREDUCE_FLOAT_PRECISION = LOUT_REDUCE_FLOAT_PRECISION(IMI)
               !Set compression if asked
@@ -603,7 +618,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
               END IF
               TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%NNCCOMPRESS_LEVEL = NOUT_COMPRESS_LEVEL(IMI)
             END IF
-            TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%NLFITYPE=1 !1: to be transfered
+            TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%NLFITYPE=1 !1: to be transferred
 !PW: TODO: set NLFIVERB only when useful (only if LFI file...)
             TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%NLFIVERB=NVERB
             IF (LIOCDF4) THEN
@@ -618,6 +633,7 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
             ELSE
               CALL PRINT_MSG(NVERB_FATAL,'IO','POPULATE_STRUCT','unknown backup/output fileformat')
             ENDIF
+            TPBAKOUTN(IPOS)%TFILE%TFILES_IOZ(JI)%TFILE%TMAINFILE => TPBAKOUTN(IPOS)%TFILE
           END DO
         END IF
         !
@@ -625,15 +641,16 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
   END DO
 END SUBROUTINE POPULATE_STRUCT
 !
-END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT
+END SUBROUTINE IO_Bakout_struct_prepare
 !
-SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE,                 &
+SUBROUTINE IO_File_add2list(TPFILE,HNAME,HTYPE,HMODE,                 &
                             HFORM,HACCESS,HFORMAT,HDIRNAME,           &
                             KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,KMODEL, &
-                            TPDADFILE,TPDATAFILE,OOLD)
+                            TPDADFILE,TPDATAFILE,OOLD,OSPLIT_IOZ)
 !
 USE MODD_BAKOUT,         ONLY: LOUT_COMPRESS,LOUT_REDUCE_FLOAT_PRECISION,NOUT_COMPRESS_LEVEL
 USE MODD_CONF,           ONLY: CPROGRAM
+use modd_confz,          only: nb_procio_r,nb_procio_w
 !
 USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX
 !
@@ -642,10 +659,10 @@ CHARACTER(LEN=*),                INTENT(IN)    :: HNAME     !Filename
 CHARACTER(LEN=*),                INTENT(IN)    :: HTYPE     !Filetype (backup, output, prepidealcase...)
 CHARACTER(LEN=*),                INTENT(IN)    :: HMODE     !Opening mode (read, write...)
 CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HFORM     !Formatted/unformatted
-CHARACTER(LEN=*),       OPTIONAL,INTENT(IN)    :: HACCESS   !Direct/sequential
+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
@@ -655,14 +672,18 @@ TYPE(TFILEDATA),POINTER,OPTIONAL,INTENT(IN)    :: TPDATAFILE!Corresponding data
 LOGICAL,                OPTIONAL,INTENT(IN)    :: OOLD      !FALSE if new file (should not be found)
                                                             !TRUE if the file could already be in the list
                                                             !     (add it only if not yet present)
+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
+logical :: gsplit_ioz
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','called for '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_add2list','called for '//TRIM(HNAME))
+!
+IMI = GET_CURRENT_MODEL_INDEX()
 !
 IF (PRESENT(OOLD)) THEN
   GOLD = OOLD
@@ -672,59 +693,57 @@ END IF
 !
 IF (ASSOCIATED(TPFILE)) THEN
   IF (GOLD) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated. Pointer will be overwritten')
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already associated. Pointer will be overwritten')
     TPFILE => NULL()
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated')
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already associated')
   END IF
 END IF
 !
-CALL IO_FILE_FIND_BYNAME(HNAME,TPFILE,IRESP,OOLD=GOLD)
+CALL IO_File_find_byname(HNAME,TPFILE,IRESP,OOLD=GOLD)
 IF (IRESP==0) THEN
   !File has been found
   !Check if really same one (LFI vs netCDF)
   IF (PRESENT(HFORMAT)) THEN
     IF ( (HFORMAT=='LFI' .AND. TPFILE%CFORMAT/='NETCDF4') .OR. (HFORMAT=='NETCDF4' .AND. TPFILE%CFORMAT/='LFI') ) THEN
-      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist')
+      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already in filelist')
     END IF
   ELSE
     IF (.NOT.GOLD) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already in filelist')
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist (not unexpected)')
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already in filelist (not unexpected)')
     END IF
     RETURN
   END IF
 END IF
 !
-IMI = GET_CURRENT_MODEL_INDEX()
-!
 IF(     PRESENT(HFORM) .AND. TRIM(HTYPE)/='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument HFORM is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument HFORM is not used by '//TRIM(HTYPE)//' files')
 IF(.NOT.PRESENT(HFORM) .AND. TRIM(HTYPE)=='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument HFORM is necessary for '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','optional argument HFORM is necessary for '//TRIM(HTYPE)//' files')
 IF(PRESENT(HFORM)) THEN
   IF(HFORM/='FORMATTED' .AND. HFORM/='UNFORMATTED') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HFORM should be FORMATTED or UNFORMATTED and not '//TRIM(HFORM))
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','HFORM should be FORMATTED or UNFORMATTED and not '//TRIM(HFORM))
 END IF
 !
 IF(     PRESENT(HACCESS) .AND. TRIM(HTYPE)/='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument HACCESS is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument HACCESS is not used by '//TRIM(HTYPE)//' files')
 IF(.NOT.PRESENT(HACCESS) .AND. TRIM(HTYPE)=='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument HACCESS is necessary for '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','optional argument HACCESS is necessary for '//TRIM(HTYPE)//' files')
 IF(PRESENT(HACCESS)) THEN
-  IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT or SEQUENTIAL and not '//TRIM(HACCESS))
+  IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL' .AND. HACCESS/='STREAM') &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','HACCESS should be DIRECT, SEQUENTIAL or STREAM and not '//TRIM(HACCESS))
 END IF
 !
 IF (PRESENT(HFORMAT)) THEN
   IF(CPROGRAM=='LFICDF') THEN
     IF (HFORMAT/='LFI' .AND. HFORMAT/='NETCDF4') &
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid HFORMAT ('//TRIM(HFORMAT)//')')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid HFORMAT ('//TRIM(HFORMAT)//')')
   END IF
 ELSE
   IF(CPROGRAM=='LFICDF') &
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','optional argument HFORMAT is necessary for CPROGRAM='//TRIM(CPROGRAM))
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','optional argument HFORMAT is necessary for CPROGRAM='//TRIM(CPROGRAM))
 END IF
 !
 IF(PRESENT(KLFINPRAR)) THEN
@@ -746,15 +765,15 @@ ELSE
 END IF
 !
 IF(     PRESENT(KRECL) .AND. TRIM(HTYPE)/='SURFACE_DATA' .AND. TRIM(HTYPE)/='TXT') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument KRECL is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument KRECL is not used by '//TRIM(HTYPE)//' files')
 IF(.NOT.PRESENT(KRECL) .AND. TRIM(HTYPE)=='SURFACE_DATA') THEN
     IF(TRIM(HACCESS)=='DIRECT') &
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument KRECL is necessary for '//TRIM(HTYPE)// &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','optional argument KRECL is necessary for '//TRIM(HTYPE)// &
                                                          ' files in DIRECT access')
 END IF
 !
 IF (PRESENT(TPDATAFILE) .AND. TRIM(HTYPE)/='DES') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument TPDATAFILE is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument TPDATAFILE is not used by '//TRIM(HTYPE)//' files')
 !
 IF (.NOT.ASSOCIATED(TFILE_LAST)) THEN
   ALLOCATE(TFILE_LAST)
@@ -775,38 +794,70 @@ IF (PRESENT(HDIRNAME)) THEN
 END IF
 !
 IF (TRIM(HMODE)/='READ' .AND. TRIM(HMODE)/='WRITE') THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','unknown mode ('//TRIM(HMODE)//') for file '//TRIM(HNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','unknown mode ('//TRIM(HMODE)//') for file '//TRIM(HNAME))
 END IF
 !
 TPFILE%CMODE = HMODE
 !
+if ( present(osplit_ioz) ) then
+  gsplit_ioz = osplit_ioz
+else
+  gsplit_ioz = .false.
+  if ( len_trim(htype) >= 3 ) then
+    if ( htype(1:3) == 'MNH' ) then
+      ! MNH/MNHBACKUP/MNHOUTPUT
+      !Remark: 'MNH' is more general than MNHBACKUP and could be in fact a MNHBACKUP file
+      gsplit_ioz = .true.
+    end if
+  end if
+end if
+
+if ( gsplit_ioz ) then
+  select case (hmode)
+    case('READ')
+      tpfile%nsubfiles_ioz = nb_procio_r
+    case('WRITE')
+      tpfile%nsubfiles_ioz = nb_procio_w
+  end select
+  if (tpfile%nsubfiles_ioz == 1) tpfile%nsubfiles_ioz = 0
+else
+  tpfile%nsubfiles_ioz = 0
+end if
+
 SELECT CASE(TPFILE%CTYPE)
   !Chemistry input files
   CASE('CHEMINPUT')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
   !Chemistry tabulation files
   CASE('CHEMTAB')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
   !DES files
   CASE('DES')
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
+    TPFILE%NRECL   = 8*1024
     IF (.NOT.PRESENT(TPDATAFILE)) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','missing TPDATAFILE argument for DES file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','missing TPDATAFILE argument for DES file '//TRIM(HNAME))
     ELSE
       IF (.NOT.ASSOCIATED(TPDATAFILE)) &
-        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','TPDATAFILE is not associated for DES file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','TPDATAFILE is not associated for DES file '//TRIM(HNAME))
       TPFILE%TDATAFILE => TPDATAFILE
       TPDATAFILE%TDESFILE => TPFILE
       IF (PRESENT(HDIRNAME)) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','HDIRNAME argument ignored for DES file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','HDIRNAME argument ignored for DES file '//TRIM(HNAME))
       IF (ALLOCATED(TPDATAFILE%CDIRNAME)) TPFILE%CDIRNAME = TPDATAFILE%CDIRNAME
     END IF
 
@@ -814,48 +865,61 @@ SELECT CASE(TPFILE%CTYPE)
   !GPS files
   CASE('GPS')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
   !Meteo files
   CASE('METEO')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'UNFORMATTED'
     TPFILE%CFORMAT = 'BINARY'
+    TPFILE%NRECL   = 100000000
 
 
   !Namelist files
   CASE('NML')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
   !OUTPUTLISTING files
   CASE('OUTPUTLISTING')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
 
 
   !SURFACE_DATA files
   CASE('SURFACE_DATA')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CFORMAT = 'SURFACE_DATA'
     TPFILE%CFORM   = HFORM
     TPFILE%CACCESS = HACCESS
-    IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL   = KRECL
+    IF(TRIM(HACCESS)=='DIRECT') TPFILE%NRECL = KRECL
 
 
   !Text files
   CASE('TXT')
+    TPFILE%CACCESS = 'SEQUENTIAL'
+    TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
     IF(PRESENT(KRECL)) TPFILE%NRECL = KRECL
 
 
-  CASE DEFAULT
+  !MesoNH files
+  !Remark: 'MNH' is more general than MNHBACKUP and could be in fact a MNHBACKUP file
+  CASE ('MNH', 'MNHBACKUP', 'MNHDIACHRONIC', 'MNHDIAG', 'MNHOUTPUT', 'PGD')
     IF (TRIM(HMODE)=='READ') THEN
       IF (PRESENT(HFORMAT)) THEN
         TPFILE%CFORMAT = TRIM(HFORMAT)
@@ -865,7 +929,7 @@ SELECT CASE(TPFILE%CTYPE)
       ELSE IF (LIOCDF4) THEN
         TPFILE%CFORMAT = 'NETCDF4'
       ELSE
-        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','invalid format for file '//TRIM(HNAME))
       END IF
     ELSE IF (TRIM(HMODE)=='WRITE') THEN
       IF (PRESENT(HFORMAT)) THEN
@@ -879,7 +943,7 @@ SELECT CASE(TPFILE%CTYPE)
         TPFILE%CFORMAT = 'LFI'
         TPFILE%NLFINPRAR = ILFINPRAR
       ELSE
-        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','invalid format for file '//TRIM(HNAME))
       END IF
     END IF
     !
@@ -893,12 +957,16 @@ SELECT CASE(TPFILE%CTYPE)
     END IF
     !
     IF(PRESENT(TPDADFILE)) THEN
-      IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST', &
+      IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list', &
                                                      'TPDADFILE provided but not associated for file '//TRIM(HNAME))
       TPFILE%TDADFILE => TPDADFILE
     ELSE
       TPFILE%TDADFILE => NULL()
     END IF
+
+
+  CASE default
+    call print_msg(NVERB_FATAL,'IO','IO_File_add2list','invalid type '//trim(tpfile%ctype)//' for file '//trim(hname))
 END SELECT
 !
 IF(PRESENT(KMODEL)) TPFILE%NMODEL = KMODEL
@@ -907,9 +975,9 @@ TPFILE%LOPENED = .FALSE.
 TPFILE%NOPEN   = 0
 TPFILE%NCLOSE  = 0
 !
-END SUBROUTINE IO_FILE_ADD2LIST
+END SUBROUTINE IO_File_add2list
 !
-SUBROUTINE IO_FILE_FIND_BYNAME(HNAME,TPFILE,KRESP,OOLD)
+SUBROUTINE IO_File_find_byname(HNAME,TPFILE,KRESP,OOLD)
 !
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX
 !
@@ -922,7 +990,7 @@ LOGICAL, OPTIONAL,      INTENT(IN)  :: OOLD   ! FALSE if new file (should not be
 TYPE(TFILEDATA),POINTER :: TZFILE ! File structure
 LOGICAL                 :: GOLD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME','looking for '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_find_byname','looking for '//TRIM(HNAME))
 !
 NULLIFY(TPFILE)
 KRESP = 0
@@ -934,10 +1002,10 @@ ELSE
 END IF
 !
 IF (LEN_TRIM(HNAME)>NFILENAMELGTMAX) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','HNAME length is bigger than NFILENAMELGTMAX for '//TRIM(HNAME))
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_find_byname','HNAME length is bigger than NFILENAMELGTMAX for '//TRIM(HNAME))
 !
 IF (.NOT.ASSOCIATED(TFILE_FIRST)) THEN
-  IF (GOLD) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','filelist is empty')
+  IF (GOLD) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_find_byname','filelist is empty')
 ELSE
   !
   TZFILE => TFILE_FIRST
@@ -953,19 +1021,19 @@ ELSE
 END IF
 !
 IF (.NOT.ASSOCIATED(TPFILE)) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME','file '//TRIM(HNAME)//' not found in list')
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_find_byname','file '//TRIM(HNAME)//' not found in list')
   KRESP = -1 !File not found
 ELSE
   IF (GOLD) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME',TRIM(HNAME)//' was found')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_find_byname',TRIM(HNAME)//' was found')
   ELSE !File should not be found
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_FIND_BYNAME',TRIM(HNAME)//' was found (unexpected)')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_find_byname',TRIM(HNAME)//' was found (unexpected)')
   END IF
 END IF
 !
-END SUBROUTINE IO_FILE_FIND_BYNAME
+END SUBROUTINE IO_File_find_byname
 !
-SUBROUTINE IO_FILE_PRINT_LIST(TPFILE_FIRST)
+SUBROUTINE IO_Filelist_print(TPFILE_FIRST)
 !
 USE MODD_VAR_ll, ONLY : IP
 !
@@ -975,7 +1043,7 @@ TYPE(TFILEDATA),POINTER :: TZFILE ! File structure
 !
 IF (IP/=1 .AND. .NOT.LVERB_ALLPRC) RETURN
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_PRINT_LIST','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Filelist_print','called')
 !
 IF (PRESENT(TPFILE_FIRST)) THEN
   IF (.NOT.ASSOCIATED(TPFILE_FIRST)) RETURN
@@ -985,22 +1053,25 @@ ELSE
   TZFILE => TFILE_FIRST
 END IF
 !
-WRITE (*,'( /,A28," ",A13," ",A7," ",A7," ",A7," ",A7," ",A6," ",A6," ",A5," ",A6," ",A13)' ) 'CNAME                       ', &
-      'CTYPE        ','CFORMAT','CMODE  ','LOPENED','NLFIFLU','NNCID','NLU','NOPEN','NCLOSE','NOPEN_CURRENT'
+WRITE (*,'( /,A28," ",A13," ",A7," ",A7," ",A7," ",A7," ",A6," ",A6," ",A5," ",A6," ",A13," ",A13)' ) &
+      'CNAME                       ', &
+      'CTYPE        ','CFORMAT','CMODE  ','LOPENED','NLFIFLU','NNCID','NLU','NOPEN','NCLOSE','NOPEN_CURRENT','NSUBFILES_IOZ'
 WRITE (*,'( A,A )') '--------------------------------------------------------------------------------------------------------', &
-                    '-----------'
-WRITE (*,'(A28," ",A13," ",A7," ",A7," ",L7," ",I7," ",I6," ",I6," ",I5," ",I6," ",I13)' ) &
+                    '------------------------'
+WRITE (*,'(A28," ",A13," ",A7," ",A7," ",L7," ",I7," ",I6," ",I6," ",I5," ",I6," ",I13," ",I13)' ) &
       TZFILE%CNAME,TZFILE%CTYPE,TZFILE%CFORMAT,&
-      TZFILE%CMODE,TZFILE%LOPENED,TZFILE%NLFIFLU,TZFILE%NNCID,TZFILE%NLU,TZFILE%NOPEN,TZFILE%NCLOSE,TZFILE%NOPEN_CURRENT
+      TZFILE%CMODE,TZFILE%LOPENED,TZFILE%NLFIFLU,TZFILE%NNCID,TZFILE%NLU,TZFILE%NOPEN,TZFILE%NCLOSE,TZFILE%NOPEN_CURRENT,&
+      TZFILE%NSUBFILES_IOZ
 !
 DO WHILE (ASSOCIATED(TZFILE%TFILE_NEXT))
   TZFILE => TZFILE%TFILE_NEXT
-  WRITE (*,'(A28," ",A13," ",A7," ",A7," ",L7," ",I7," ",I6," ",I6," ",I5," ",I6," ",I13)' ) &
+  WRITE (*,'(A28," ",A13," ",A7," ",A7," ",L7," ",I7," ",I6," ",I6," ",I5," ",I6," ",I13," ",I13)' ) &
         TZFILE%CNAME,TZFILE%CTYPE,TZFILE%CFORMAT,&
-        TZFILE%CMODE,TZFILE%LOPENED,TZFILE%NLFIFLU,TZFILE%NNCID,TZFILE%NLU,TZFILE%NOPEN,TZFILE%NCLOSE,TZFILE%NOPEN_CURRENT
+        TZFILE%CMODE,TZFILE%LOPENED,TZFILE%NLFIFLU,TZFILE%NNCID,TZFILE%NLU,TZFILE%NOPEN,TZFILE%NCLOSE,TZFILE%NOPEN_CURRENT,&
+        TZFILE%NSUBFILES_IOZ
 END DO
 WRITE (*,'(/)')
 !
-END SUBROUTINE IO_FILE_PRINT_LIST
+END SUBROUTINE IO_Filelist_print
 !
 END MODULE MODE_IO_MANAGE_STRUCT
diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
index 91e4e003121e20e44b39b5fa3ef2a067a4ccea8c..525930eefaaacc6ab5082f76e814085488220ca2 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
@@ -1,16 +1,20 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-module mode_io_read_lfi
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 21/06/2018:      read and write correctly if MNH_REAL=4
-!  Philippe Wautelet: 14/12/2018:      split fmreadwrit.f90
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 21/06/2018: read and write correctly if MNH_REAL=4
+!  P. Wautelet 14/12/2018: split fmreadwrit.f90
+!  P. Wautelet 21/02/2019: bugfix: intent of read fields: OUT->INOUT to keep initial value if not found in file
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!-----------------------------------------------------------------
+module mode_io_read_lfi
 !
-USE MODD_IO_ll
+USE MODD_IO
 USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH
+use modd_precision,  only: LFIINT
 !
 USE MODE_FIELD, ONLY : TFIELDDATA
 USE MODE_MSG
@@ -19,26 +23,26 @@ IMPLICIT NONE
 !
 PRIVATE
 !
+public :: IO_Field_read_lfi
+!
 INTEGER, PARAMETER :: JPXKRK = NLFIMAXCOMMENTLENGTH
 INTEGER, PARAMETER :: JPXFIE = 1.5E8
 !
-INTERFACE IO_READ_FIELD_LFI
-   MODULE PROCEDURE IO_READ_FIELD_LFI_X0, IO_READ_FIELD_LFI_X1, &
-                    IO_READ_FIELD_LFI_X2, IO_READ_FIELD_LFI_X3, &
-                    IO_READ_FIELD_LFI_X4, IO_READ_FIELD_LFI_X5, &
-                    IO_READ_FIELD_LFI_X6,                       &
-                    IO_READ_FIELD_LFI_N0, IO_READ_FIELD_LFI_N1, &
-                    IO_READ_FIELD_LFI_N2,                       &
-                    IO_READ_FIELD_LFI_L0, IO_READ_FIELD_LFI_L1, &
-                    IO_READ_FIELD_LFI_C0,                       &
-                    IO_READ_FIELD_LFI_T0
-END INTERFACE IO_READ_FIELD_LFI
-!
-PUBLIC IO_READ_FIELD_LFI
+INTERFACE IO_Field_read_lfi
+   MODULE PROCEDURE IO_Field_read_lfi_X0, IO_Field_read_lfi_X1, &
+                    IO_Field_read_lfi_X2, IO_Field_read_lfi_X3, &
+                    IO_Field_read_lfi_X4, IO_Field_read_lfi_X5, &
+                    IO_Field_read_lfi_X6,                       &
+                    IO_Field_read_lfi_N0, IO_Field_read_lfi_N1, &
+                    IO_Field_read_lfi_N2,                       &
+                    IO_Field_read_lfi_L0, IO_Field_read_lfi_L1, &
+                    IO_Field_read_lfi_C0,                       &
+                    IO_Field_read_lfi_T0
+END INTERFACE IO_Field_read_lfi
 !
 CONTAINS
 !
-SUBROUTINE IO_READ_FIELD_LFI_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -47,22 +51,22 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-REAL,             INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,             INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 REAL,DIMENSION(1)                        :: ZFIELD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   !TRANSFER_I8_R works with 1D arrays
@@ -74,10 +78,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X0
+END SUBROUTINE IO_Field_read_lfi_X0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -86,21 +90,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:),INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,DIMENSION(:),INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = TRANSFER_I8_R(IWORK(IWORK(2)+3:))
 !
@@ -108,10 +112,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X1
+END SUBROUTINE IO_Field_read_lfi_X1
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X2(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -120,21 +124,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),    INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),   INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:),INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,DIMENSION(:,:),INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -142,10 +146,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X2
+END SUBROUTINE IO_Field_read_lfi_X2
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -154,21 +158,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),      INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),     INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:),INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,DIMENSION(:,:,:),INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -176,10 +180,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X3
+END SUBROUTINE IO_Field_read_lfi_X3
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -188,21 +192,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),       INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:,:),INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,DIMENSION(:,:,:,:),INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -210,10 +214,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X4
+END SUBROUTINE IO_Field_read_lfi_X4
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -222,21 +226,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),         INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:,:,:),INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,DIMENSION(:,:,:,:,:),INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -244,10 +248,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X5
+END SUBROUTINE IO_Field_read_lfi_X5
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -256,21 +260,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),            INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),           INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:,:,:,:),INTENT(OUT)   :: PFIELD  ! array containing the data field
+REAL,DIMENSION(:,:,:,:,:,:),INTENT(INOUT) :: PFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -278,10 +282,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X6
+END SUBROUTINE IO_Field_read_lfi_X6
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -290,21 +294,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA), INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),INTENT(INOUT) :: TPFIELD
-INTEGER,         INTENT(OUT)   :: KFIELD  ! array containing the data field
+INTEGER,         INTENT(INOUT) :: KFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) KFIELD = IWORK(IWORK(2)+3)
 !
@@ -312,10 +316,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_N0
+END SUBROUTINE IO_Field_read_lfi_N0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -324,21 +328,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
-INTEGER,DIMENSION(:),INTENT(OUT)   :: KFIELD  ! array containing the data field
+INTEGER,DIMENSION(:),INTENT(INOUT) :: KFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) KFIELD(:) = IWORK(IWORK(2)+3:)
 !
@@ -346,10 +350,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_N1
+END SUBROUTINE IO_Field_read_lfi_N1
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -358,21 +362,21 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),       INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),      INTENT(INOUT) :: TPFIELD
-INTEGER,DIMENSION(:,:),INTENT(OUT)   :: KFIELD  ! array containing the data field
+INTEGER,DIMENSION(:,:),INTENT(INOUT) :: KFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) KFIELD(:,:) = RESHAPE(IWORK(IWORK(2)+3:),SHAPE(KFIELD))
 !
@@ -380,10 +384,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_N2
+END SUBROUTINE IO_Field_read_lfi_N2
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -392,22 +396,22 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA), INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),INTENT(INOUT) :: TPFIELD
-LOGICAL,         INTENT(OUT)   :: OFIELD  ! array containing the data field
+LOGICAL,         INTENT(INOUT) :: OFIELD  ! array containing the data field
 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
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   IFIELD = IWORK(IWORK(2)+3)
@@ -416,7 +420,7 @@ IF (GGOOD) THEN
   ELSE IF (IFIELD==1) THEN
     OFIELD = .TRUE.
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_lfi_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
                                                            //TRIM(TPFIELD%CMNHNAME))
     OFIELD = .TRUE.
     IRESP = -112
@@ -427,10 +431,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_L0
+END SUBROUTINE IO_Field_read_lfi_L0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -439,23 +443,23 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
-LOGICAL,DIMENSION(:),INTENT(OUT)   :: OFIELD  ! array containing the data field
+LOGICAL,DIMENSION(:),INTENT(INOUT) :: OFIELD  ! array containing the data field
 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
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(OFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   IFIELD(:) = IWORK(IWORK(2)+3:)
@@ -470,7 +474,7 @@ IF (GGOOD) THEN
     END IF
   END DO
   IF (IRESP==-112) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_lfi_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
                                                            //TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -479,10 +483,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_L1
+END SUBROUTINE IO_Field_read_lfi_L1
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
 !
@@ -494,17 +498,17 @@ IMPLICIT NONE
 !
 TYPE(TFILEDATA), INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),INTENT(INOUT) :: TPFIELD
-CHARACTER(LEN=*),INTENT(OUT)   :: HFIELD  ! array containing the data field
+CHARACTER(LEN=*),INTENT(INOUT) :: HFIELD  ! array containing the data field
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = LEN(HFIELD)
 ILENGMAX = ILENG
@@ -514,11 +518,11 @@ IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN
   ILENG = MIN(LEN(HFIELD),NFILENAMELGTMAXLFI)
   ILENGMAX = NFILENAMELGTMAXLFI
   IF (LEN(HFIELD)<NFILENAMELGTMAXLFI) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_lfi_C0',TRIM(TPFILE%CNAME)// &
                       ': LEN(HFIELD)<NFILENAMELGTMAXLFI')
 END IF
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENGMAX,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENGMAX,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   DO JLOOP=1,ILENG
@@ -530,10 +534,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_C0
+END SUBROUTINE IO_Field_read_lfi_C0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_read_lfi_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODE_MSG
 USE MODD_TYPE_DATE
@@ -549,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
@@ -557,7 +561,7 @@ TYPE(TFIELDDATA)                         :: TZFIELD
 INTEGER, DIMENSION(3)                    :: ITDATE    ! date array
 REAL,DIMENSION(1)                        :: ZTIME
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 TZFIELD = TPFIELD
 !
@@ -568,7 +572,7 @@ TZFIELD%CCOMMENT = 'YYYYMMDD'
 !
 ILENG=SIZE(ITDATE)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   TPDATA%TDATE%YEAR  = IWORK(IWORK(2)+2+1)
@@ -590,7 +594,7 @@ TZFIELD%CCOMMENT = 'SECONDS'
 !
 ILENG=1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   !TRANSFER_I8_R works with 1D arrays
@@ -602,10 +606,10 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_LFI_T0
+END SUBROUTINE IO_Field_read_lfi_T0
 !
 !
-SUBROUTINE IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,KLENG,KWORK,KTOTAL,KRESP,OGOOD)
+SUBROUTINE IO_Field_read_check_lfi(TPFILE,TPFIELD,KLENG,KWORK,KTOTAL,KRESP,OGOOD)
 !
 USE MODD_PARAMETERS, ONLY: NGRIDUNKNOWN
 !
@@ -613,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
@@ -634,7 +638,7 @@ GOLDMNH = TPFILE%NMNHVERSION(1)<5 .OR. (TPFILE%NMNHVERSION(1)==5 .AND. TPFILE%NM
 !
 YRECFM=TRIM(TPFIELD%CMNHNAME)
 IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI','field name was truncated to '&
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi','field name was truncated to '&
                  //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
 !
 !*      2.a   LET'S GET SOME INFORMATION ON THE DESIRED ARTICLE
@@ -645,17 +649,17 @@ CALL LFINFO(KRESP,INUMBR,YRECFM,KTOTAL,IPOSEX)
 IF (KRESP.NE.0) THEN
   WRITE(YRESP, '( I12 )') KRESP
   YMSG = 'RESP='//TRIM(ADJUSTL(YRESP))//' in call to LFINFO when reading '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI',YMSG)
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi',YMSG)
   OGOOD = .FALSE.
   RETURN
 ELSEIF (KTOTAL.EQ.0) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': record length is zero for ' &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)//': record length is zero for ' &
                                                                   //TRIM(TPFIELD%CMNHNAME))
   KRESP=-47
   OGOOD = .FALSE.
   RETURN
 ELSEIF (KTOTAL.GT.JPXFIE) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)// &
                                ': record length exceeds the maximum value in FM for '//TRIM(TPFIELD%CMNHNAME))
   KRESP=-48
   OGOOD = .FALSE.
@@ -670,7 +674,7 @@ CALL LFILEC(KRESP,INUMBR,YRECFM,KWORK,KTOTAL)
 IF (KRESP.NE.0) THEN
   WRITE(YRESP, '( I12 )') KRESP
   YMSG = 'RESP='//TRIM(ADJUSTL(YRESP))//' in call to LFILEC when reading '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI',YMSG)
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi',YMSG)
   OGOOD = .FALSE.
   RETURN
 ENDIF
@@ -683,7 +687,7 @@ IROW=KLENG+ICOMLEN+2
 IF (KTOTAL.NE.IROW) THEN
   WRITE(YRECLENGTH_FILE,'(I12)') KTOTAL-2-ICOMLEN
   WRITE(YRECLENGTH_MEM, '(I12)') KLENG
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI','wrong field size for '//TRIM(TPFIELD%CMNHNAME) &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi','wrong field size for '//TRIM(TPFIELD%CMNHNAME) &
                                      //' (expected: '//TRIM(ADJUSTL(YRECLENGTH_MEM))//                            &
                                      ', in file: '   //TRIM(ADJUSTL(YRECLENGTH_FILE))//')')
   KRESP=-63
@@ -701,21 +705,21 @@ IF (KWORK(1)/=TPFIELD%NGRID) THEN
   ELSE
     IERRLEVEL = NVERB_ERROR
   END IF
-  CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID value ('//TRIM(ADJUSTL(YVAL_MEM))// &
+  CALL PRINT_MSG(IERRLEVEL,'IO','IO_Field_read_check_lfi','expected GRID value ('//TRIM(ADJUSTL(YVAL_MEM))// &
                  ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
   IF(.NOT.GOLDMNH) THEN !Do not modify probably incorrect grid number (to prevent problems later with other correct files)
     TPFIELD%NGRID = KWORK(1)
     KRESP = -111 !Used later to broadcast modified metadata
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID    found in file for field ' &
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_check_lfi','expected GRID    found in file for field ' &
                                                             //TRIM(TPFIELD%CMNHNAME))
 ENDIF
 !
 YCOMMENT=''
 SELECT CASE (ICOMLEN)
 CASE(:-1)
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': comment length is negative for ' &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)//': comment length is negative for ' &
                                                                   //TRIM(TPFIELD%CMNHNAME))
   KRESP=-58
   OGOOD = .FALSE.
@@ -728,23 +732,23 @@ CASE(1:JPXKRK)
     YCOMMENT(J:J)=CHAR(ICOMMENT(J))
   ENDDO
 CASE(JPXKRK+1:)
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': comment is too long in file for ' &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)//': comment is too long in file for ' &
                                                                   //TRIM(TPFIELD%CMNHNAME))
   KRESP=-56
   RETURN
 END SELECT
 !
 IF (TRIM(YCOMMENT)/=TRIM(TPFIELD%CCOMMENT)) THEN
-  CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_LFI','expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)// &
+  CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_read_check_lfi','expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)// &
                  ') is different than found ('//TRIM(YCOMMENT)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
   TPFIELD%CCOMMENT=TRIM(YCOMMENT)
   KRESP = -111 !Used later to broadcast modified metadata
 ELSE
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_LFI','expected COMMENT found in file for field ' &
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_check_lfi','expected COMMENT found in file for field ' &
                                                             //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
-END SUBROUTINE IO_READ_CHECK_FIELD_LFI
+END SUBROUTINE IO_Field_read_check_lfi
 !
 !
 FUNCTION TRANSFER_I8_R(KFIELDIN) RESULT(PFIELDOUT)
diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
index 9fb6870ad093671b87190921cbca6bd90267f5bd..3aaed8fb95ca02eccf016fb1b8256d33b3dc435f 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
@@ -3,21 +3,23 @@
 !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 : may 2016   : use NetCDF Fortran module
-!    J.Escobar   : 14/12/2017 : Correction for MNH_INT=8
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!    P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files
-!  Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
+! Modifications:
+!  P. Wautelet may 2016  : use NetCDF Fortran module
+!  J. Escobar  14/12/2017: correction for MNH_INT=8
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 21/02/2019: bugfix: intent of read fields: OUT->INOUT to keep initial value if not found in file
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_read_nc4
 
-use modd_io_ll,        only: tfiledata
-use modd_netcdf,       only: IDCDF_KIND
+use modd_io,           only: tfiledata
+use modd_precision,    only: CDFINT
 
 use mode_field,        only: tfielddata
-use mode_io_tools_nc4, only: cleanmnhname, io_handle_err_nc4
+use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Err_handle_nc4
 use mode_msg
 
 use NETCDF,            only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64,  &
@@ -29,42 +31,42 @@ implicit none
 
 private
 
-public :: io_read_field_nc4
+public :: IO_Field_read_nc4
 
-INTERFACE IO_READ_FIELD_NC4
-   MODULE PROCEDURE IO_READ_FIELD_NC4_X0,IO_READ_FIELD_NC4_X1, &
-                    IO_READ_FIELD_NC4_X2,IO_READ_FIELD_NC4_X3, &
-                    IO_READ_FIELD_NC4_X4,IO_READ_FIELD_NC4_X5, &
-                    IO_READ_FIELD_NC4_X6,                      &
-                    IO_READ_FIELD_NC4_N0,IO_READ_FIELD_NC4_N1, &
-                    IO_READ_FIELD_NC4_N2,                      &
-                    IO_READ_FIELD_NC4_L0,IO_READ_FIELD_NC4_L1, &
-                    IO_READ_FIELD_NC4_C0,                      &
-                    IO_READ_FIELD_NC4_T0
-END INTERFACE IO_READ_FIELD_NC4
+INTERFACE IO_Field_read_nc4
+   MODULE PROCEDURE IO_Field_read_nc4_X0,IO_Field_read_nc4_X1, &
+                    IO_Field_read_nc4_X2,IO_Field_read_nc4_X3, &
+                    IO_Field_read_nc4_X4,IO_Field_read_nc4_X5, &
+                    IO_Field_read_nc4_X6,                      &
+                    IO_Field_read_nc4_N0,IO_Field_read_nc4_N1, &
+                    IO_Field_read_nc4_N2,                      &
+                    IO_Field_read_nc4_L0,IO_Field_read_nc4_L1, &
+                    IO_Field_read_nc4_C0,                      &
+                    IO_Field_read_nc4_T0
+END INTERFACE IO_Field_read_nc4
 
 contains
 
-SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,KRESP,HCALENDAR)
+SUBROUTINE IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,KVARID,KRESP,HCALENDAR)
 !
 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)
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)//': called for field '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)//': called for field '//TRIM(TPFIELD%CMNHNAME))
 !
 KRESP = 0
 INCID = TPFILE%NNCID
@@ -85,7 +87,7 @@ IF (STATUS == NF90_NOERR) THEN
   IF (IGRID/=TPFIELD%NGRID) THEN
     WRITE(YVAL_FILE,'(I12)') IGRID
     WRITE(YVAL_MEM, '(I12)') TPFIELD%NGRID
-    CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(IERRLEVEL,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID     value ('//TRIM(ADJUSTL(YVAL_MEM))//             &
                    ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
     IF (.NOT.GOLDMNH) THEN !Do not modify probably incorrect grid number (to prevent problems later with other correct files)
@@ -93,15 +95,15 @@ IF (STATUS == NF90_NOERR) THEN
       KRESP = -111 !Used later to broadcast modified metadata
     END IF
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID found in file for field '//TRIM(TPFIELD%CMNHNAME))
   ENDIF
 ELSE !no GRID
   IF (TPFIELD%NGRID==0 .OR. TPFIELD%NGRID==NGRIDUNKNOWN) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no GRID (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(IERRLEVEL,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 ENDIF
@@ -114,26 +116,26 @@ IF (STATUS == NF90_NOERR) THEN
   STATUS = NF90_GET_ATT(INCID, KVARID, 'comment', YVALUE)
   IF (LEN_TRIM(TPFIELD%CCOMMENT)==0 .AND. LEN_TRIM(YVALUE)>0) THEN
     !Expected comment is empty, read comment is not
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': COMMENT  found (unexpected) in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CCOMMENT=TRIM(YVALUE)
   ELSE IF (TRIM(YVALUE)/=TRIM(TPFIELD%CCOMMENT)) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)//                    &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CCOMMENT=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected COMMENT  found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no COMMENT
   IF (LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no COMMENT (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected COMMENT but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -145,22 +147,22 @@ IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
   STATUS = NF90_GET_ATT(INCID, KVARID, 'standard_name', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CSTDNAME)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected STDNAME  ('//TRIM(TPFIELD%CSTDNAME)//                      &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CSTDNAME=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected STDNAME  found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no STDNAME
   IF (LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no STDNAME (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected STDNAME but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -172,22 +174,22 @@ IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
   STATUS = NF90_GET_ATT(INCID, KVARID, 'long_name', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CLONGNAME)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected LONGNAME ('//TRIM(TPFIELD%CLONGNAME)//                  &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CLONGNAME=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected LONGNAME found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no LONGNAME
   IF (LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no LONGNAME (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected LONGNAME but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -200,30 +202,30 @@ IF (STATUS == NF90_NOERR) THEN
   STATUS = NF90_GET_ATT(INCID, KVARID, 'units', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CUNITS)) THEN
     IF(.NOT.PRESENT(HCALENDAR)) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': expected UNITS ('//TRIM(TPFIELD%CUNITS)//                           &
                      ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
       KRESP = -111 !Used later to broadcast modified metadata
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': UNITS found in file for field '//TRIM(TPFIELD%CMNHNAME)//' (will be analysed later)')
     END IF
     TPFIELD%CUNITS=TRIM(YVALUE)
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected UNITS    found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no UNITS
   IF (LEN_TRIM(TPFIELD%CUNITS)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no UNITS (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
     IF(.NOT.PRESENT(HCALENDAR)) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': expected UNITS but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
     ELSE
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': expected UNITS but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
       KRESP = -3
     END IF
@@ -238,53 +240,53 @@ IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
   STATUS = NF90_GET_ATT(INCID, KVARID, 'calendar', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(HCALENDAR)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected CALENDAR ('//TRIM(HCALENDAR)//                             &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected CALENDAR found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no CALENDAR
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                  ': expected CALENDAR but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 ENDIF
 !
-END SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4
+END SUBROUTINE IO_Field_attr_read_check_nc4
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X0(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X0(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-REAL,             INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -293,13 +295,13 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Read variable
   STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
   IF (STATUS /= NF90_NOERR) THEN
-    CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+    CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
     GOTO 1000
   END IF
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+  CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong size or type)')
   IRESP = -3
 END IF
@@ -307,41 +309,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X0
+END SUBROUTINE IO_Field_read_nc4_X0
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X1(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X1(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:),INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -349,24 +351,24 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 1 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN == SIZE(PFIELD)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -374,41 +376,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X1
+END SUBROUTINE IO_Field_read_nc4_X1
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X2(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X2(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),    INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),   INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:),INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -416,39 +418,39 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 !Treat special case of a degenerated 3D array (3rd dimension size is 1)
 IF (IDIMS==3) THEN
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   IF (IDIMLEN(3)==1) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)// &
                    ': reading 3D array with degenerated third dimension in 2D array for '//TRIM(YVARNAME))
     IDIMS = 2
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
   END IF
 END IF
 
 IF (IDIMS == 2 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -456,41 +458,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X2
+END SUBROUTINE IO_Field_read_nc4_X2
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X3(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X3(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),      INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),     INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:),INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -498,28 +500,28 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 3 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. IDIMLEN(3) == SIZE(PFIELD,3)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -527,41 +529,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X3
+END SUBROUTINE IO_Field_read_nc4_X3
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X4(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X4(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),        INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),       INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:,:),INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -569,31 +571,31 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 4 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. &
        IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -601,41 +603,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X4
+END SUBROUTINE IO_Field_read_nc4_X4
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X5(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X5(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),         INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:,:,:),INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -643,15 +645,15 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(5), LEN=IDIMLEN(5))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. &
        IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4) .AND. &
@@ -659,18 +661,18 @@ IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -678,41 +680,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X5
+END SUBROUTINE IO_Field_read_nc4_X5
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X6(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X6(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),            INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),           INTENT(INOUT) :: TPFIELD
-REAL,DIMENSION(:,:,:,:,:,:),INTENT(OUT)   :: PFIELD
+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_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -720,17 +722,17 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(5), LEN=IDIMLEN(5))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(6), LEN=IDIMLEN(6))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. &
        IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4) .AND. &
@@ -738,18 +740,18 @@ IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -757,39 +759,39 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X6
+END SUBROUTINE IO_Field_read_nc4_X6
 
 
-SUBROUTINE IO_READ_FIELD_NC4_N0(TPFILE, TPFIELD, KFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_N0(TPFILE, TPFIELD, KFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-INTEGER,          INTENT(OUT)   :: KFIELD
+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_READ_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -799,13 +801,13 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64) ) THEN
    ! Read variable
    STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD)
    IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
    END IF
    ! Read and check attributes of variable
-   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+   CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
    IRESP = -3
 END IF
@@ -813,41 +815,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_N0
+END SUBROUTINE IO_Field_read_nc4_N0
 
 
-SUBROUTINE IO_READ_FIELD_NC4_N1(TPFILE, TPFIELD, KFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_N1(TPFILE, TPFIELD, KFIELD, KRESP)
 TYPE(TFILEDATA),         INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),        INTENT(INOUT) :: TPFIELD
-INTEGER, DIMENSION(:),   INTENT(OUT)   :: KFIELD
+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_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -856,24 +858,24 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 1 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN == SIZE(KFIELD)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -881,41 +883,41 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_N1
+END SUBROUTINE IO_Field_read_nc4_N1
 
 
-SUBROUTINE IO_READ_FIELD_NC4_N2(TPFILE, TPFIELD, KFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_N2(TPFILE, TPFIELD, KFIELD, KRESP)
 TYPE(TFILEDATA),         INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),        INTENT(INOUT) :: TPFIELD
-INTEGER, DIMENSION(:,:), INTENT(OUT)   :: KFIELD
+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_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -923,13 +925,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 !Treat special case of a degenerated 3D array (3rd dimension size is 1)
 IF (IDIMS==3) THEN
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   IF (IDIMLEN(3)==1) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)// &
                    ': reading 3D array with degenerated third dimension in 2D array for '//TRIM(YVARNAME))
     IDIMS = 2
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
   END IF
 END IF
 
@@ -937,26 +939,26 @@ END IF
 IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN(1) == SIZE(KFIELD,1) .AND. IDIMLEN(2) == SIZE(KFIELD,2)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -964,39 +966,39 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_N2
+END SUBROUTINE IO_Field_read_nc4_N2
 
-SUBROUTINE IO_READ_FIELD_NC4_L0(TPFILE, TPFIELD, OFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_L0(TPFILE, TPFIELD, OFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-LOGICAL,          INTENT(OUT)   :: OFIELD
+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_READ_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -1007,7 +1009,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
   ! Read variable
   STATUS = NF90_GET_VAR(INCID, IVARID, IFIELD)
   IF (STATUS /= NF90_NOERR) THEN
-    CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+    CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
     GOTO 1000
   END IF
 
@@ -1016,16 +1018,16 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
   ELSE IF (IFIELD==1) THEN
     OFIELD = .TRUE.
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
                                                            //TRIM(TPFIELD%CMNHNAME))
     OFIELD = .TRUE.
     IRESP = -112
   END IF
 
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+  CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong size or type)')
   IRESP = -3
 END IF
@@ -1033,43 +1035,43 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_L0
+END SUBROUTINE IO_Field_read_nc4_L0
 
 
-SUBROUTINE IO_READ_FIELD_NC4_L1(TPFILE, TPFIELD, OFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_L1(TPFILE, TPFIELD, OFIELD, KRESP)
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
-LOGICAL,DIMENSION(:),INTENT(OUT)   :: OFIELD
+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_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -1079,13 +1081,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 1 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF90_INT64)  ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN == SIZE(OFIELD)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, IFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
 
@@ -1100,19 +1102,19 @@ IF (IDIMS == 1 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
       END IF
     END DO
     IF (IRESP==-112) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
                                                              //TRIM(TPFIELD%CMNHNAME))
     END IF
 
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -1120,64 +1122,64 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_L1
+END SUBROUTINE IO_Field_read_nc4_L1
 
 
-SUBROUTINE IO_READ_FIELD_NC4_C0(TPFILE, TPFIELD, HFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_C0(TPFILE, TPFIELD, HFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-CHARACTER(LEN=*), INTENT(OUT)   :: HFIELD
+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_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 IF (IDIMS == 1 .AND. (ITYPE == NF90_CHAR) ) THEN
    ! Check size of variable before reading
    STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
    !
    ALLOCATE(CHARACTER(LEN=IDIMLEN)::YSTR)
    ! Read variable
    STATUS = NF90_GET_VAR(INCID, IVARID, YSTR)
    IF (STATUS /= NF90_NOERR) THEN
-     CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+     CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
      GOTO 1000
    END IF
    IF (LEN_TRIM(YSTR) > LEN(HFIELD)) &
-     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' truncated')
+     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' truncated')
    HFIELD = TRIM(YSTR)
    DEALLOCATE(YSTR)
 
    ! Read and check attributes of variable
-   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+   CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
    IRESP = -3
 END IF
@@ -1185,9 +1187,9 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_C0
+END SUBROUTINE IO_Field_read_nc4_C0
 
-SUBROUTINE IO_READ_FIELD_NC4_T0(TPFILE, TPFIELD, TPDATA, KRESP)
+SUBROUTINE IO_Field_read_nc4_T0(TPFILE, TPFIELD, TPDATA, KRESP)
 !
 USE MODD_TYPE_DATE
 !
@@ -1195,45 +1197,45 @@ USE MODE_DATETIME
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
-TYPE (DATE_TIME), INTENT(OUT)   :: TPDATA
+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_READ_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_T0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_T0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Read time
   STATUS = NF90_GET_VAR(INCID, IVARID, TPDATA%TIME)
   IF (STATUS /= NF90_NOERR) THEN
-    CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+    CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_T0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
     GOTO 1000
   END IF
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP,HCALENDAR='standard')
+  CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP,HCALENDAR='standard')
   ! Extract date from UNITS
   IDX =  INDEX(TPFIELD%CUNITS,'since ')
   READ(TPFIELD%CUNITS(IDX+6 :IDX+9), '( I4.4 )') TPDATA%TDATE%YEAR
@@ -1241,14 +1243,14 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   READ(TPFIELD%CUNITS(IDX+14:IDX+15),'( I2.2 )') TPDATA%TDATE%DAY
   ! Simple check (should catch most errors)
   IF ( TPDATA%TDATE%DAY<1 .OR. TPDATA%TDATE%DAY>31 .OR. TPDATA%TDATE%MONTH<1 .OR. TPDATA%TDATE%MONTH>12 ) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' read date is invalid')
     IRESP = -3
   END IF
   ! Correct date and time (necessary for example if time is bigger than 86400 s)
   CALL DATETIME_CORRECTDATE(TPDATA)
 ELSE
-   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
    IRESP = -3
 END IF
@@ -1256,7 +1258,7 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_T0
+END SUBROUTINE IO_Field_read_nc4_T0
 
 
 end module mode_io_read_nc4
@@ -1264,10 +1266,10 @@ end module mode_io_read_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_read_field_nc4(a, b, c, d, e, f, g)
+subroutine IO_Field_read_nc4(a, b, c, d, e, f, g)
 use mode_msg
 integer :: a, b, c, d, e, f, g
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_read_field_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_read_field_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Field_read_nc4
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
index 9e8dd1fc85b8dd0412cc535af1afa88752598c2b..b4d2a3d5fd80491940d3e6e0bb281ef086894af0 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
@@ -1,69 +1,70 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Modifications:
-!    P. Wautelet : 13/12/2018 : extracted from mode_io.f90
-!    P. Wautelet : 14/12/2018 : added io_construct_filename
+! Modifications:
+!  P. Wautelet 13/12/2018: extracted from mode_io.f90
+!  P. Wautelet 14/12/2018: added IO_Filename_construct
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 module mode_io_tools
 
-use modd_io_ll, only: tfiledata
+use modd_io, only: tfiledata
 
 implicit none
 
 private
 
-public :: io_file, io_rank, io_construct_filename
+public :: IO_Level2filenumber_get, IO_Rank_master_get, IO_Filename_construct
 
 contains
 
-  FUNCTION io_file(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_file
+FUNCTION IO_Level2filenumber_get(k,nb_proc_io)
+  !
+  ! return the file number where to write the K level of data
+  !
+  IMPLICIT NONE
+  INTEGER :: k,nb_proc_io
+  INTEGER :: IO_Level2filenumber_get
 
-    io_file = MOD ((k-1) , nb_proc_io )
+  IO_Level2filenumber_get = MOD ((k-1) , nb_proc_io )
 
-  END FUNCTION io_file
+END FUNCTION IO_Level2filenumber_get
 
-  FUNCTION IO_RANK(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
+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,           INTENT(IN) :: IFILE, nb_proc, nb_proc_io
+  INTEGER, OPTIONAL, INTENT(IN) :: offset_rank
 
-    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IO_RANK
+  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 )
+  ipas  =        nb_proc / nb_proc_io
+  irest =  MOD ( nb_proc , nb_proc_io )
 
-    IF  (ipas /= 0 ) THEN
-       IO_RANK=ipas * IFILE + MIN(IFILE , irest )
-    ELSE
-       IO_RANK=MOD(IFILE , nb_proc )
-    ENDIF
+  IF  (ipas /= 0 ) THEN
+     IO_Rank_master_get=ipas * IFILE + MIN(IFILE , irest )
+  ELSE
+     IO_Rank_master_get=MOD(IFILE , nb_proc )
+  ENDIF
 
-    !
-    ! optional rank to shift for read test
-    !
-    IF (PRESENT(offset_rank)) THEN
-       IF ( offset_rank .GT.0 ) IO_RANK=MOD(IO_RANK+offset_rank,nb_proc)
-       IF ( offset_rank .LT.0 ) IO_RANK=MOD(nb_proc-IO_RANK+offset_rank,nb_proc)
-    ENDIF
+  !
+  ! optional rank to shift for read test
+  !
+  IF (PRESENT(offset_rank)) THEN
+     IF ( offset_rank .GT.0 ) IO_Rank_master_get=MOD(IO_Rank_master_get+offset_rank,nb_proc)
+     IF ( offset_rank .LT.0 ) IO_Rank_master_get=MOD(nb_proc-IO_Rank_master_get+offset_rank,nb_proc)
+  ENDIF
 
-  END FUNCTION IO_RANK
+END FUNCTION IO_Rank_master_get
 
 
-subroutine io_construct_filename(tpfile,hfilem)
+subroutine IO_Filename_construct(tpfile,hfilem)
   type(tfiledata),               intent(inout) :: tpfile
   character(len=:), allocatable, intent(out)   :: hfilem
 
@@ -77,8 +78,7 @@ subroutine io_construct_filename(tpfile,hfilem)
     hfilem = trim(tpfile%cname)
   end if
 
-end subroutine io_construct_filename
-
+end subroutine IO_Filename_construct
 
 end module mode_io_tools
 
@@ -86,7 +86,7 @@ end module mode_io_tools
 
 module mode_io_tools_mnhversion
 
-use modd_io_ll, only: tfiledata
+use modd_io, only: tfiledata
 
 use mode_msg
 
@@ -94,109 +94,107 @@ implicit none
 
 private
 
-public :: io_get_mnhversion, io_set_mnhversion
+public :: IO_Mnhversion_get, IO_Mnhversion_set
 
 contains
 
-  subroutine io_get_mnhversion(tpfile)
-  !Compare MNHVERSION of file with current version and store it in file metadata
-    use modd_conf,   only: nmnhversion
-    use modd_io_ll,  only: tfiledata
-    use mode_field,  only: tfielddata,typeint
-    use mode_fmread, only: io_read_field
-
-    type(tfiledata), intent(inout) :: tpfile
-
-    character(len=12)       :: ymnhversion_file,ymnhversion_curr
-    integer :: imasdev,ibugfix
-    integer :: iresp
-    integer,dimension(3)    :: imnhversion
-    type(tfielddata)        :: tzfield
-
-    call print_msg(NVERB_DEBUG,'IO','io_get_mnhversion','called for '//trim(tpfile%cname))
-
-    if ( trim(tpfile%cmode) /= 'READ' ) &
-      call print_msg(NVERB_FATAL,'IO','io_get_mnhversion',trim(tpfile%cname)// 'not opened in read mode')
-
-    imnhversion(:) = 0
-    !use tzfield because tfieldlist could be not initialised
-    tzfield%cmnhname   = 'MNHVERSION'
-    tzfield%cstdname   = ''
-    tzfield%clongname  = 'MesoNH version'
-    tzfield%cunits     = ''
-    tzfield%cdir       = '--'
-    tzfield%ccomment   = ''
-    tzfield%ngrid      = 0
-    tzfield%ntype      = TYPEINT
-    tzfield%ndims      = 1
-    tzfield%ltimedep   = .false.
-    call io_read_field(tpfile,tzfield,imnhversion,iresp)
+subroutine IO_Mnhversion_get(tpfile)
+!Compare MNHVERSION of file with current version and store it in file metadata
+  use modd_conf,          only: nmnhversion
+  use mode_field,         only: tfielddata,typeint
+  use mode_io_field_read, only: IO_Field_read
+
+  type(tfiledata), intent(inout) :: tpfile
+
+  character(len=12)       :: ymnhversion_file,ymnhversion_curr
+  integer :: imasdev,ibugfix
+  integer :: iresp
+  integer,dimension(3)    :: imnhversion
+  type(tfielddata)        :: tzfield
+
+  call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_get','called for '//trim(tpfile%cname))
+
+  if ( trim(tpfile%cmode) /= 'READ' ) &
+    call print_msg(NVERB_FATAL,'IO','IO_Mnhversion_get',trim(tpfile%cname)// 'not opened in read mode')
+
+  imnhversion(:) = 0
+  !use tzfield because tfieldlist could be not initialised
+  tzfield%cmnhname   = 'MNHVERSION'
+  tzfield%cstdname   = ''
+  tzfield%clongname  = 'MesoNH version'
+  tzfield%cunits     = ''
+  tzfield%cdir       = '--'
+  tzfield%ccomment   = ''
+  tzfield%ngrid      = 0
+  tzfield%ntype      = TYPEINT
+  tzfield%ndims      = 1
+  tzfield%ltimedep   = .false.
+  call IO_Field_read(tpfile,tzfield,imnhversion,iresp)
+  if (iresp/=0) then
+    tzfield%cmnhname   = 'MASDEV'
+    tzfield%clongname  = 'MesoNH version (without bugfix)'
+    tzfield%ndims      = 0
+    call IO_Field_read(tpfile,tzfield,imasdev,iresp)
     if (iresp/=0) then
-      tzfield%cmnhname   = 'MASDEV'
-      tzfield%clongname  = 'MesoNH version (without bugfix)'
-      tzfield%ndims      = 0
-      call io_read_field(tpfile,tzfield,imasdev,iresp)
-      if (iresp/=0) then
-        call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','unknown MASDEV version for '//trim(tpfile%cname))
-      else
-        if (imasdev<100) then
-          imnhversion(1)=imasdev/10
-          imnhversion(2)=mod(imasdev,10)
-        else !for example for mnh 4.10
-          imnhversion(1)=imasdev/100
-          imnhversion(2)=mod(imasdev,100)
-        end if
-      end if
-      !
-      tzfield%cmnhname   = 'BUGFIX'
-      tzfield%clongname  = 'MesoNH bugfix number'
-      call io_read_field(tpfile,tzfield,ibugfix,iresp)
-      if (iresp/=0) then
-        call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','unknown BUGFIX version for '//trim(tpfile%cname))
-      else
-        imnhversion(3)=ibugfix
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown MASDEV version for '//trim(tpfile%cname))
+    else
+      if (imasdev<100) then
+        imnhversion(1)=imasdev/10
+        imnhversion(2)=mod(imasdev,10)
+      else !for example for mnh 4.10
+        imnhversion(1)=imasdev/100
+        imnhversion(2)=mod(imasdev,100)
       end if
     end if
     !
-    write(ymnhversion_file,"( I0,'.',I0,'.',I0 )" ) imnhversion(1),imnhversion(2),imnhversion(3)
-    write(ymnhversion_curr,"( I0,'.',I0,'.',I0 )" ) nmnhversion(1),nmnhversion(2),nmnhversion(3)
+    tzfield%cmnhname   = 'BUGFIX'
+    tzfield%clongname  = 'MesoNH bugfix number'
+    call IO_Field_read(tpfile,tzfield,ibugfix,iresp)
+    if (iresp/=0) then
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown BUGFIX version for '//trim(tpfile%cname))
+    else
+      imnhversion(3)=ibugfix
+    end if
+  end if
+  !
+  write(ymnhversion_file,"( I0,'.',I0,'.',I0 )" ) imnhversion(1),imnhversion(2),imnhversion(3)
+  write(ymnhversion_curr,"( I0,'.',I0,'.',I0 )" ) nmnhversion(1),nmnhversion(2),nmnhversion(3)
+  !
+  if ( imnhversion(1)==0 .and. imnhversion(2)==0 .and. imnhversion(3)==0 ) then
+    call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                  ' was written with an unknown version of MesoNH')
+    else if (  imnhversion(1)< nmnhversion(1) .or. &
+            (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)< nmnhversion(2)) .or. &
+            (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)<nmnhversion(3)) ) then
+    call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with an older version of MesoNH ('//trim(ymnhversion_file)//&
+                    ' instead of '//trim(ymnhversion_curr)//')')
+    else if (  imnhversion(1)> nmnhversion(1) .or. &
+              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)> nmnhversion(2)) .or. &
+              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)>nmnhversion(3)) ) then
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with a more recent version of MesoNH ('//trim(ymnhversion_file)//&
+                    ' instead of '//trim(ymnhversion_curr)//')')
+    else
+      call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with the same version of MesoNH ('//trim(ymnhversion_curr)//')')
+    end if
     !
-    if ( imnhversion(1)==0 .and. imnhversion(2)==0 .and. imnhversion(3)==0 ) then
-      call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                    ' was written with an unknown version of MesoNH')
-      else if (  imnhversion(1)< nmnhversion(1) .or. &
-              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)< nmnhversion(2)) .or. &
-              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)<nmnhversion(3)) ) then
-      call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                      ' was written with an older version of MesoNH ('//trim(ymnhversion_file)//&
-                      ' instead of '//trim(ymnhversion_curr)//')')
-      else if (  imnhversion(1)> nmnhversion(1) .or. &
-                (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)> nmnhversion(2)) .or. &
-                (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)>nmnhversion(3)) ) then
-        call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                      ' was written with a more recent version of MesoNH ('//trim(ymnhversion_file)//&
-                      ' instead of '//trim(ymnhversion_curr)//')')
-      else
-        call print_msg(NVERB_DEBUG,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                      ' was written with the same version of MesoNH ('//trim(ymnhversion_curr)//')')
-      end if
-      !
-      tpfile%nmnhversion(:) = imnhversion(:)
-  end subroutine io_get_mnhversion
+    tpfile%nmnhversion(:) = imnhversion(:)
+end subroutine IO_Mnhversion_get
 
 
-  subroutine io_set_mnhversion(tpfile)
-    use modd_conf,  only: nmnhversion
-    use modd_io_ll, only: tfiledata
+subroutine IO_Mnhversion_set(tpfile)
+  use modd_conf,  only: nmnhversion
 
-    type(tfiledata), intent(inout) :: tpfile
+  type(tfiledata), intent(inout) :: tpfile
 
-    call print_msg(NVERB_DEBUG,'IO','io_set_mnhversion','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_set','called for '//trim(tpfile%cname))
 
-    if ( trim(tpfile%cmode) /= 'WRITE' ) &
-      call print_msg(NVERB_FATAL,'IO','io_set_mnhversion',trim(tpfile%cname)// 'not opened in write mode')
+  if ( trim(tpfile%cmode) /= 'WRITE' ) &
+    call print_msg(NVERB_FATAL,'IO','IO_Mnhversion_set',trim(tpfile%cname)// 'not opened in write mode')
 
-    tpfile%nmnhversion(:) = nmnhversion(:)
-  end subroutine io_set_mnhversion
+  tpfile%nmnhversion(:) = nmnhversion(:)
+end subroutine IO_Mnhversion_set
 
 end module mode_io_tools_mnhversion
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
index a55365550f8f8c0a0221da035e8315c2f2f487dc..d9af6e616af8b6383004d278fa2b644a6d277334 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
@@ -1,27 +1,30 @@
-!MNH_LIC Copyright 2018-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.
 !-----------------------------------------------------------------
-!  Creation:
-!    P. Wautelet : 14/12/2018
+! Author(s):
+!  P. Wautelet : 14/12/2018
+! Modifications:
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 module mode_io_tools_lfi
 
-use modd_io_ll, only: tfiledata
+use modd_io,        only: tfiledata
+use modd_precision, only: LFIINT
 
 implicit none
 
 private
 
-public :: io_prepare_verbosity_lfi
+public :: IO_Verbosity_prepare_lfi
 
 contains
 
-subroutine io_prepare_verbosity_lfi(tpfile, kmelev, ostats)
-  type(tfiledata),       intent(in)  :: tpfile
-  integer(kind=LFI_INT), intent(out) :: kmelev
-  logical,               intent(out) :: ostats
+subroutine IO_Verbosity_prepare_lfi(tpfile, kmelev, ostats)
+  type(tfiledata),      intent(in)  :: tpfile
+  integer(kind=LFIINT), intent(out) :: kmelev
+  logical,              intent(out) :: ostats
 
   select case (tpfile%nlfiverb)
     case(:2)
@@ -38,7 +41,7 @@ subroutine io_prepare_verbosity_lfi(tpfile, kmelev, ostats)
       kmelev = 2
   end select
 
-end subroutine io_prepare_verbosity_lfi
+end subroutine IO_Verbosity_prepare_lfi
 
 
 end module mode_io_tools_lfi
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
index b66011fac5d08bdc6fc9e122c8a7b89aa67d52eb..21734960714a0e90b1f0376525c179b08705d1a0 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
@@ -3,18 +3,20 @@
 !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 : may 2016   : use NetCDF Fortran module
-!    J.Escobar   : 14/12/2017 : Correction for MNH_INT=8
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!    P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files
-!  Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
+! Modifications:
+!  P. Wautelet may 2016  : use NetCDF Fortran module
+!  J.Escobar   14/12/2017: correction for MNH_INT=8
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_tools_nc4
 
-use modd_io_ll,  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
@@ -26,12 +28,13 @@ implicit none
 
 private
 
-public :: io_find_dim_byname_nc4, io_guess_dimids_nc4, io_set_knowndims_nc4
-public :: cleaniocdf, cleanmnhname, fillvdims, getdimcdf, getstrdimid, io_handle_err_nc4, newiocdf
+public :: IO_Dim_find_byname_nc4, IO_Dimids_guess_nc4, IO_Knowndims_set_nc4
+public :: IO_Iocdf_alloc_nc4, IO_Iocdf_dealloc_nc4, IO_Mnhname_clean
+public :: IO_Dimcdf_get_nc4, IO_Strdimid_get_nc4, IO_Vdims_fill_nc4, IO_Err_handle_nc4
 
 contains
 
-SUBROUTINE IO_FIND_DIM_BYNAME_NC4(TPFILE, HDIMNAME, TPDIM, KRESP)
+SUBROUTINE IO_Dim_find_byname_nc4(TPFILE, HDIMNAME, TPDIM, KRESP)
 TYPE(TFILEDATA),         INTENT(IN)  :: TPFILE
 CHARACTER(LEN=*),        INTENT(IN)  :: HDIMNAME
 TYPE(DIMCDF),            INTENT(OUT) :: TPDIM
@@ -39,12 +42,12 @@ INTEGER,                 INTENT(OUT) :: KRESP
 !
 TYPE(DIMCDF), POINTER :: TMP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FIND_DIM_BYNAME_NC4','called for dimension name '//TRIM(HDIMNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dim_find_byname_nc4','called for dimension name '//TRIM(HDIMNAME))
 !
 KRESP = -2
 !
 IF(.NOT.ASSOCIATED(TPFILE%TNCDIMS%DIMLIST)) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FIND_DIM_BYNAME_NC4','DIMLIST not associated for file  '//TRIM(TPFILE%CNAME))
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dim_find_byname_nc4','DIMLIST not associated for file  '//TRIM(TPFILE%CNAME))
   KRESP = -1
   RETURN
 END IF
@@ -60,10 +63,10 @@ DO WHILE(ASSOCIATED(TMP))
   TMP => TMP%NEXT
 END DO
 !
-END SUBROUTINE IO_FIND_DIM_BYNAME_NC4
+END SUBROUTINE IO_Dim_find_byname_nc4
 
 
-SUBROUTINE IO_GUESS_DIMIDS_NC4(TPFILE, TPFIELD, KLEN, TPDIMS, KRESP)
+SUBROUTINE IO_Dimids_guess_nc4(TPFILE, TPFIELD, KLEN, TPDIMS, KRESP)
 !
 USE MODE_FIELD, ONLY: TYPECHAR
 !
@@ -81,7 +84,7 @@ CHARACTER(LEN=32)     :: YINT
 CHARACTER(LEN=2)      :: YDIR
 TYPE(DIMCDF), POINTER :: PTDIM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_GUESS_DIMIDS_NC4','called for '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimids_guess_nc4','called for '//TRIM(TPFIELD%CMNHNAME))
 !
 IGRID  =  TPFIELD%NGRID
 YDIR   =  TPFIELD%CDIR
@@ -92,11 +95,11 @@ PTDIM => NULL()
 !
 IF(IGRID<0 .OR. IGRID>8) THEN
   WRITE(YINT,'( I0 )') IGRID
-  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Dimids_guess_nc4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 IF(IGRID==0 .AND. YDIR/='--' .AND. YDIR/=''  ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '&
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '&
                  //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
@@ -109,16 +112,16 @@ IF (IGRID==0) THEN
         ILEN = 1
       END IF
     CASE (1)
-      PTDIM => GETDIMCDF(TPFILE,KLEN)
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE,KLEN)
       TPDIMS(1) = PTDIM
       ILEN      = PTDIM%LEN
     CASE DEFAULT
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','NGRID=0 and NDIMS>1 not yet supported (field '&
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','NGRID=0 and NDIMS>1 not yet supported (field '&
                      //TRIM(TPFIELD%CMNHNAME)//')')
   END SELECT
 ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN
   IF (TPFIELD%NDIMS/=3) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','CLBTYPE/=NONE and NDIMS/=3 not supported (field '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','CLBTYPE/=NONE and NDIMS/=3 not supported (field '&
                      //TRIM(TPFIELD%CMNHNAME)//')')
   END IF
   !
@@ -129,9 +132,9 @@ ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN
     TPDIMS(3) = PTDIM
     ILEN = TPDIMS(2)%LEN * TPDIMS(3)%LEN
     ISIZE = KLEN/ILEN
-    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                               'can not guess 1st dimension for field '//TRIM(TPFIELD%CMNHNAME))
-    PTDIM => GETDIMCDF(TPFILE, ISIZE)
+    PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
     TPDIMS(1) = PTDIM
     ILEN       = ILEN * PTDIM%LEN
   ELSE IF (TPFIELD%CLBTYPE=='LBY' .OR. TPFIELD%CLBTYPE=='LBYV') THEN
@@ -141,13 +144,13 @@ ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN
     TPDIMS(3) = PTDIM
     ILEN = TPDIMS(1)%LEN * TPDIMS(3)%LEN
     ISIZE = KLEN/ILEN
-    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                               'can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME))
-    PTDIM => GETDIMCDF(TPFILE, ISIZE)
+    PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
     TPDIMS(2) = PTDIM
     ILEN       = ILEN * PTDIM%LEN
   ELSE
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid CLBTYPE ('//TPFIELD%CLBTYPE//') for field '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','invalid CLBTYPE ('//TPFIELD%CLBTYPE//') for field '&
                      //TRIM(TPFIELD%CMNHNAME))
   END IF
 ELSE
@@ -162,7 +165,7 @@ ELSE
       ELSE IF ( YDIR == 'ZZ' ) THEN
         PTDIM => TPFILE%TNCCOORDS(3,IGRID)%TDIM
       ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension
-        PTDIM => GETDIMCDF(TPFILE, KLEN)
+        PTDIM => IO_Dimcdf_get_nc4(TPFILE, KLEN)
       END IF
       ILEN       = PTDIM%LEN
       TPDIMS(JI) = PTDIM
@@ -172,13 +175,13 @@ ELSE
       ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension
         ISIZE = KLEN/ILEN
         IF (MOD(KLEN,ILEN)/=0) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                             'can not guess 2nd and last dimension for field '//TRIM(TPFIELD%CMNHNAME))
           EXIT
         END IF
-        PTDIM => GETDIMCDF(TPFILE, ISIZE)
+        PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
       ELSE
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME))
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME))
         EXIT
       END IF
       ILEN       = ILEN * PTDIM%LEN
@@ -188,20 +191,20 @@ ELSE
         IF (JI==TPFIELD%NDIMS .AND. KLEN/ILEN==1 .AND. MOD(KLEN,ILEN)==0) THEN
           !The last dimension is of size 1 => probably time dimension
           ISIZE = 1
-          PTDIM => GETDIMCDF(TPFILE,ISIZE)
+          PTDIM => IO_Dimcdf_get_nc4(TPFILE,ISIZE)
         ELSE
           PTDIM => TPFILE%TNCCOORDS(3,IGRID)%TDIM
         END IF
       ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension
         ISIZE = KLEN/ILEN
         IF (MOD(KLEN,ILEN)/=0) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                             'can not guess 3rd and last dimension for field '//TRIM(TPFIELD%CMNHNAME))
           EXIT
         END IF
-        PTDIM => GETDIMCDF(TPFILE, ISIZE)
+        PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
       ELSE
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 3rd dimension for field '//TRIM(TPFIELD%CMNHNAME))
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','can not guess 3rd dimension for field '//TRIM(TPFIELD%CMNHNAME))
         EXIT
       END IF
       ILEN       = ILEN * PTDIM%LEN
@@ -209,30 +212,30 @@ ELSE
     ELSE IF (JI==4 .AND. JI==TPFIELD%NDIMS) THEN !Guess last dimension
       ISIZE = KLEN/ILEN
       IF (MOD(KLEN,ILEN)/=0) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                           'can not guess 4th and last dimension for field '//TRIM(TPFIELD%CMNHNAME))
         EXIT
       END IF
-      PTDIM => GETDIMCDF(TPFILE, ISIZE)
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
       ILEN       = ILEN * PTDIM%LEN
       TPDIMS(JI) = PTDIM
     ELSE
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess dimension above 4 for field '&
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','can not guess dimension above 4 for field '&
                      //TRIM(TPFIELD%CMNHNAME))
     END IF
   END DO
 END IF
 !
 IF (KLEN /= ILEN) THEN
-  CALL PRINT_MSG(NVERB_INFO,'IO','IO_GUESS_DIMIDS_NC4','can not guess dimensions of field '&
+  CALL PRINT_MSG(NVERB_INFO,'IO','IO_Dimids_guess_nc4','can not guess dimensions of field '&
                                    //TRIM(TPFIELD%CMNHNAME))
   KRESP = 1
 END IF
 !
-END SUBROUTINE IO_GUESS_DIMIDS_NC4
+END SUBROUTINE IO_Dimids_guess_nc4
 
 
-SUBROUTINE IO_SET_KNOWNDIMS_NC4(TPFILE,HPROGRAM_ORIG)
+SUBROUTINE IO_Knowndims_set_nc4(TPFILE,HPROGRAM_ORIG)
 
 USE MODD_CONF,          ONLY: CPROGRAM
 USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
@@ -246,7 +249,7 @@ CHARACTER(LEN=:),ALLOCATABLE :: YPROGRAM
 INTEGER                      :: IIU_ll, IJU_ll, IKU
 TYPE(IOCDF), POINTER         :: PIOCDF
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_SET_KNOWNDIMS_NC4','called for '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Knowndims_set_nc4','called for '//TRIM(TPFILE%CNAME))
 
 PIOCDF => TPFILE%TNCDIMS
 
@@ -260,17 +263,17 @@ IIU_ll = NIMAX_ll + 2*JPHEXT
 IJU_ll = NJMAX_ll + 2*JPHEXT
 IKU    = NKMAX    + 2*JPVEXT
 
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI))      PIOCDF%DIM_NI      => GETDIMCDF(TPFILE, IIU_ll, 'ni')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ))      PIOCDF%DIM_NJ      => GETDIMCDF(TPFILE, IJU_ll, 'nj')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_U))    PIOCDF%DIM_NI_U    => GETDIMCDF(TPFILE, IIU_ll, 'ni_u')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_U))    PIOCDF%DIM_NJ_U    => GETDIMCDF(TPFILE, IJU_ll, 'nj_u')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_V))    PIOCDF%DIM_NI_V    => GETDIMCDF(TPFILE, IIU_ll, 'ni_v')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_V))    PIOCDF%DIM_NJ_V    => GETDIMCDF(TPFILE, IJU_ll, 'nj_v')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI))      PIOCDF%DIM_NI      => IO_Dimcdf_get_nc4(TPFILE, IIU_ll, 'ni')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ))      PIOCDF%DIM_NJ      => IO_Dimcdf_get_nc4(TPFILE, IJU_ll, 'nj')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_U))    PIOCDF%DIM_NI_U    => IO_Dimcdf_get_nc4(TPFILE, IIU_ll, 'ni_u')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_U))    PIOCDF%DIM_NJ_U    => IO_Dimcdf_get_nc4(TPFILE, IJU_ll, 'nj_u')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_V))    PIOCDF%DIM_NI_V    => IO_Dimcdf_get_nc4(TPFILE, IIU_ll, 'ni_v')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_V))    PIOCDF%DIM_NJ_V    => IO_Dimcdf_get_nc4(TPFILE, IJU_ll, 'nj_v')
 IF (TRIM(YPROGRAM)/='PGD' .AND. TRIM(YPROGRAM)/='NESPGD' .AND. TRIM(YPROGRAM)/='ZOOMPG' &
     .AND. .NOT.(TRIM(YPROGRAM)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX
-  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL))   PIOCDF%DIM_LEVEL   => GETDIMCDF(TPFILE, IKU   , 'level')
-  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL_W)) PIOCDF%DIM_LEVEL_W => GETDIMCDF(TPFILE, IKU   , 'level_w')
-  IF (.NOT. ASSOCIATED(PIOCDF%DIMTIME)) PIOCDF%DIMTIME => GETDIMCDF(TPFILE, NF90_UNLIMITED, 'time')
+  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL))   PIOCDF%DIM_LEVEL   => IO_Dimcdf_get_nc4(TPFILE, IKU   , 'level')
+  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL_W)) PIOCDF%DIM_LEVEL_W => IO_Dimcdf_get_nc4(TPFILE, IKU   , 'level_w')
+  IF (.NOT. ASSOCIATED(PIOCDF%DIMTIME)) PIOCDF%DIMTIME => IO_Dimcdf_get_nc4(TPFILE, NF90_UNLIMITED, 'time')
 ELSE
   !PGD and SURFEX files for MesoNH have no vertical levels or time scale
   !These dimensions are allocated to default values
@@ -321,15 +324,15 @@ TPFILE%TNCCOORDS(2,8)%TDIM => PIOCDF%DIM_NJ_V
 TPFILE%TNCCOORDS(3,8)%TDIM => PIOCDF%DIM_LEVEL_W
 
 
-END SUBROUTINE IO_SET_KNOWNDIMS_NC4
+END SUBROUTINE IO_Knowndims_set_nc4
 
 
-SUBROUTINE CLEANIOCDF(PIOCDF)
+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','CLEANIOCDF','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Iocdf_dealloc_nc4','called')
 
 ! Clean DIMLIST and DIMSTR
 CALL CLEANLIST(PIOCDF%DIMLIST)
@@ -351,14 +354,14 @@ END DO
 
 END SUBROUTINE CLEANLIST
 
-END SUBROUTINE CLEANIOCDF
+END SUBROUTINE IO_Iocdf_dealloc_nc4
 
 
-SUBROUTINE FILLVDIMS(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
+SUBROUTINE IO_Vdims_fill_nc4(TPFILE, TPFIELD, KSHAPE, 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
@@ -366,16 +369,16 @@ CHARACTER(LEN=32)     :: YINT
 CHARACTER(LEN=2)      :: YDIR
 TYPE(DIMCDF), POINTER :: PTDIM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called for '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Vdims_fill_nc4','called for '//TRIM(TPFIELD%CMNHNAME))
 !
-IF (SIZE(KSHAPE) < 1 .AND. .NOT.TPFIELD%LTIMEDEP) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE')
+IF (SIZE(KSHAPE) < 1 .AND. .NOT.TPFIELD%LTIMEDEP) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','empty KSHAPE')
 !
 IGRID  =  TPFIELD%NGRID
 YDIR   =  TPFIELD%CDIR
 !
 IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN
   WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS
-  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' &
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' &
                  //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
@@ -389,11 +392,12 @@ END IF
 !
 IF(IGRID<0 .OR. IGRID>8) THEN
   WRITE(YINT,'( I0 )') IGRID
-  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 IF(IGRID==0 .AND. YDIR/='--' .AND. YDIR/=''  ) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field ' &
+                 //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 DO JI=1,SIZE(KSHAPE)
@@ -405,44 +409,44 @@ DO JI=1,SIZE(KSHAPE)
     ELSE IF ( YDIR == 'ZZ'                .AND. KSHAPE(1)==TPFILE%TNCCOORDS(3,IGRID)%TDIM%LEN) THEN
       KVDIMS(1) = TPFILE%TNCCOORDS(3,IGRID)%TDIM%ID
     ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(1)); KVDIMS(1) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(1)); KVDIMS(1) = PTDIM%ID
     END IF
   ELSE IF (JI == 2) THEN
     IF ( YDIR == 'XY' .AND. KSHAPE(2)==TPFILE%TNCCOORDS(2,IGRID)%TDIM%LEN) THEN
       KVDIMS(2) = TPFILE%TNCCOORDS(2,IGRID)%TDIM%ID
     ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(2)); KVDIMS(2) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(2)); KVDIMS(2) = PTDIM%ID
     END IF
   ELSE IF (JI == 3) THEN
     IF ( YDIR == 'XY' .AND. KSHAPE(3)==TPFILE%TNCCOORDS(3,IGRID)%TDIM%LEN) THEN
       KVDIMS(3) = TPFILE%TNCCOORDS(3,IGRID)%TDIM%ID
     ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(3)); KVDIMS(3) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(3)); KVDIMS(3) = PTDIM%ID
     END IF
   ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(JI)); KVDIMS(JI) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(JI)); KVDIMS(JI) = PTDIM%ID
   END IF
 END DO
 !
-END SUBROUTINE FILLVDIMS
+END SUBROUTINE IO_Vdims_fill_nc4
 
 
-FUNCTION GETDIMCDF(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(DIMCDF), POINTER   :: GETDIMCDF
+FUNCTION IO_Dimcdf_get_nc4(TPFILE, KLEN, 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','GETDIMCDF','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimcdf_get_nc4','called')
 
 PIOCDF => TPFILE%TNCDIMS
 
@@ -457,7 +461,7 @@ END IF
 WRITE(YSUFFIX,'(I0)') KLEN
 
 IF (GCHKLEN .AND. KLEN < 1) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','GETDIMCDF','KLEN='//TRIM(YSUFFIX))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Dimcdf_get_nc4','KLEN='//TRIM(YSUFFIX))
 END IF
 
 IF (PRESENT(HDIMNAME)) THEN
@@ -481,34 +485,34 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    TMP%NAME = YDIMNAME
    TMP%LEN = KLEN
    STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID)
-   IF (STATUS /= NF90_NOERR) CALL io_handle_err_nc4(status,'GETDIMCDF','NF90_DEF_DIM',trim(TMP%NAME))
+   IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Dimcdf_get_nc4','NF90_DEF_DIM',trim(TMP%NAME))
    NULLIFY(TMP%NEXT)
    TMP%NEXT       => PIOCDF%DIMLIST
    PIOCDF%DIMLIST => TMP
-CALL PRINT_MSG(NVERB_DEBUG,'IO','GETDIMCDF','new dimension: '//TRIM(TMP%NAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimcdf_get_nc4','new dimension: '//TRIM(TMP%NAME))
 END IF
 
-GETDIMCDF => TMP
+IO_Dimcdf_get_nc4 => TMP
 
-END FUNCTION GETDIMCDF
+END FUNCTION IO_Dimcdf_get_nc4
 
 
-FUNCTION GETSTRDIMID(TPFILE,KLEN)
-TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
-INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
-INTEGER(KIND=IDCDF_KIND)            :: GETSTRDIMID
+FUNCTION IO_Strdimid_get_nc4(TPFILE,KLEN)
+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','GETSTRDIMID','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Strdimid_get_nc4','called')
 
 WRITE(YSUFFIX,'(I0)') KLEN
 
 IF (KLEN < 1) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','GETSTRDIMID','KLEN='//TRIM(YSUFFIX))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Strdimid_get_nc4','KLEN='//TRIM(YSUFFIX))
 END IF
 
 ! Search string dimension with KLEN length
@@ -524,42 +528,41 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    TMP%NAME = 'char'//TRIM(YSUFFIX)
    TMP%LEN = KLEN
    STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID)
-   IF (STATUS /= NF90_NOERR) CALL io_handle_err_nc4(status,'GETSTRDIMID','NF90_DEF_DIM',trim(TMP%NAME))
+   IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Strdimid_get_nc4','NF90_DEF_DIM',trim(TMP%NAME))
    NULLIFY(TMP%NEXT)
    TMP%NEXT      => TPFILE%TNCDIMS%DIMSTR
    TZIOCDF => TPFILE%TNCDIMS
    TZIOCDF%DIMSTR => TMP
 END IF
 
-GETSTRDIMID = TMP%ID
+IO_Strdimid_get_nc4 = TMP%ID
 
-END FUNCTION GETSTRDIMID
+END FUNCTION IO_Strdimid_get_nc4
 
 
-FUNCTION NEWIOCDF()
-TYPE(IOCDF), POINTER :: NEWIOCDF
+FUNCTION IO_Iocdf_alloc_nc4()
+TYPE(IOCDF), POINTER :: IO_Iocdf_alloc_nc4
 TYPE(IOCDF), POINTER :: TZIOCDF
 INTEGER              :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','NEWIOCDF','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Iocdf_alloc_nc4','called')
 
 ALLOCATE(TZIOCDF, STAT=IRESP)
 IF (IRESP > 0) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','NEWIOCDF','memory allocation error')
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Iocdf_alloc_nc4','memory allocation error')
 END IF
 
-NEWIOCDF=>TZIOCDF
+IO_Iocdf_alloc_nc4=>TZIOCDF
 
-END FUNCTION NEWIOCDF
+END FUNCTION IO_Iocdf_alloc_nc4
 
 
-subroutine io_handle_err_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
+subroutine IO_Err_handle_nc4(kstatus,hsubr,hncsubr,hvar,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
@@ -575,10 +578,10 @@ if (kstatus /= NF90_NOERR) then
     call print_msg(NVERB_ERROR,  'IO',trim(hsubr),trim(hvar)//': '//trim(hncsubr)//': '//trim(NF90_STRERROR(kstatus)))
   end if
 end if
-end subroutine io_handle_err_nc4
+end subroutine IO_Err_handle_nc4
 
 
-SUBROUTINE CLEANMNHNAME(HINNAME,HOUTNAME)
+SUBROUTINE IO_Mnhname_clean(HINNAME,HOUTNAME)
   CHARACTER(LEN=*),INTENT(IN)  :: HINNAME
   CHARACTER(LEN=*),INTENT(OUT) :: HOUTNAME
 
@@ -610,66 +613,66 @@ end module mode_io_tools_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_find_dim_byname_nc4(a, b, c, d)
+subroutine IO_Dim_find_byname_nc4(a, b, c, d)
 use mode_msg
 integer :: a, b, c, d
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_find_dim_byname_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_find_dim_byname_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Dim_find_byname_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Dim_find_byname_nc4
 !
-subroutine io_guess_dimids_nc4(a, b, c, d)
+subroutine IO_Dimids_guess_nc4(a, b, c, d)
 use mode_msg
 integer :: a, b, c, d
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_guess_dimids_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_guess_dimids_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Dimids_guess_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Dimids_guess_nc4
 !
-subroutine io_set_knowndims_nc4(a, b)
+subroutine IO_Knowndims_set_nc4(a, b)
 use mode_msg
 integer :: a, b,
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_set_knowndims_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_set_knowndims_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Knowndims_set_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Knowndims_set_nc4
 !
-subroutine cleaniocdf(a)
+subroutine IO_Iocdf_dealloc_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','cleaniocdf','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine cleaniocdf
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Iocdf_dealloc_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Iocdf_dealloc_nc4
 !
-subroutine cleanmnhname(a, b)
+subroutine IO_Mnhname_clean(a, b)
 use mode_msg
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','cleanmnhname','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine cleanmnhname
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Mnhname_clean','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Mnhname_clean
 !
-subroutine fillvdims(a, b, c, d)
+subroutine IO_Vdims_fill_nc4(a, b, c, d)
 use mode_msg
 integer :: a, b, c, d
-CALL PRINT_MSG(NVERB_ERROR,'IO','fillvdims','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine fillvdims
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Vdims_fill_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Vdims_fill_nc4
 !
-function getdimcdf(a, b, c)
+function IO_Dimcdf_get_nc4(a, b, c)
 use mode_msg
-integer :: getdimcdf
+integer :: IO_Dimcdf_get_nc4
 integer :: a, b, c
-CALL PRINT_MSG(NVERB_ERROR,'IO','getdimcdf','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end function getdimcdf
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Dimcdf_get_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end function IO_Dimcdf_get_nc4
 !
-function getstrdimid(a, b)
+function IO_Strdimid_get_nc4(a, b)
 use mode_msg
-integer :: getstrdimid
+integer :: IO_Strdimid_get_nc4
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','getstrdimid','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end function getstrdimid
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Strdimid_get_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end function IO_Strdimid_get_nc4
 !
-subroutine io_handle_err_nc4(a, b, c, d, e)
+subroutine IO_Err_handle_nc4(a, b, c, d, e)
 use mode_msg
 integer :: a, b, c, d, e
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_handle_err_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_handle_err_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Err_handle_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Err_handle_nc4
 !
-function newiocdf()
+function IO_Iocdf_alloc_nc4()
 use mode_msg
-integer :: newiocdf
-CALL PRINT_MSG(NVERB_ERROR,'IO','newiocdf','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end function newiocdf()
+integer :: IO_Iocdf_alloc_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Iocdf_alloc_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end function IO_Iocdf_alloc_nc4()
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
index 0ec7744765e80f6213d09536da78c95a03946679..26f18bc04cee5ec685bbc4d1d07d1c83964aa6fa 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
@@ -3,44 +3,47 @@
 !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_io_write_lfi
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 21/06/2018:      read and write correctly if MNH_REAL=4
-!  Philippe Wautelet: 14/12/2018:      split fmreadwrit.f90
-!  Philippe Wautelet: 11/01/2019:      do not write variables with a zero size
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 21/06/2018: read and write correctly if MNH_REAL=4
+!  P. Wautelet 14/12/2018: split fmreadwrit.f90
+!  P. Wautelet 11/01/2019: do not write variables with a zero size
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!-----------------------------------------------------------------
+module mode_io_write_lfi
 !
-USE MODD_IO_ll
+USE MODD_IO
 USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH
+use modd_precision,  only: LFIINT
 !
-USE MODE_FIELD, ONLY : TFIELDDATA
+USE MODE_FIELD,      ONLY: TFIELDDATA
 USE MODE_MSG
 !
 IMPLICIT NONE
 !
 PRIVATE
 !
+public :: IO_Field_write_lfi
+!
 INTEGER, PARAMETER :: JPXKRK = NLFIMAXCOMMENTLENGTH
 INTEGER, PARAMETER :: JPXFIE = 1.5E8
 !
-INTERFACE IO_WRITE_FIELD_LFI
-   MODULE PROCEDURE IO_WRITE_FIELD_LFI_X0,IO_WRITE_FIELD_LFI_X1, &
-                    IO_WRITE_FIELD_LFI_X2,IO_WRITE_FIELD_LFI_X3, &
-                    IO_WRITE_FIELD_LFI_X4,IO_WRITE_FIELD_LFI_X5, &
-                    IO_WRITE_FIELD_LFI_X6,                       &
-                    IO_WRITE_FIELD_LFI_N0,IO_WRITE_FIELD_LFI_N1, &
-                    IO_WRITE_FIELD_LFI_N2,IO_WRITE_FIELD_LFI_N3, &
-                    IO_WRITE_FIELD_LFI_L0,IO_WRITE_FIELD_LFI_L1, &
-                    IO_WRITE_FIELD_LFI_C0,                       &
-                    IO_WRITE_FIELD_LFI_T0
-END INTERFACE IO_WRITE_FIELD_LFI
-!
-PUBLIC IO_WRITE_FIELD_LFI
+INTERFACE IO_Field_write_lfi
+   MODULE PROCEDURE IO_Field_write_lfi_X0,IO_Field_write_lfi_X1, &
+                    IO_Field_write_lfi_X2,IO_Field_write_lfi_X3, &
+                    IO_Field_write_lfi_X4,IO_Field_write_lfi_X5, &
+                    IO_Field_write_lfi_X6,                       &
+                    IO_Field_write_lfi_N0,IO_Field_write_lfi_N1, &
+                    IO_Field_write_lfi_N2,IO_Field_write_lfi_N3, &
+                    IO_Field_write_lfi_L0,IO_Field_write_lfi_L1, &
+                    IO_Field_write_lfi_C0,                       &
+                    IO_Field_write_lfi_T0
+END INTERFACE IO_Field_write_lfi
 !
 CONTAINS
 !
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -54,11 +57,11 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
@@ -68,7 +71,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8( (/PFIELD/) , IWORK(LEN(TPFIELD%CCOMMENT)+3:) )
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,TRIM(TPFIELD%CMNHNAME),IWORK,ITOTAL)
 ENDIF
@@ -77,9 +80,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X0
+END SUBROUTINE IO_Field_write_lfi_X0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -93,16 +96,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X1','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X1','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -113,7 +116,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(PFIELD,IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X1','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -122,9 +125,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X1
+END SUBROUTINE IO_Field_write_lfi_X1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE)
+SUBROUTINE IO_Field_write_lfi_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE)
 !
 IMPLICIT NONE
 !
@@ -140,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
@@ -152,26 +155,26 @@ IRESP=0
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
 !
 IF (PRESENT(KVERTLEVEL)) THEN
   IF (.NOT.PRESENT(KZFILE)) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_LFI_X2','KZFILE argument not provided')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_lfi_X2','KZFILE argument not provided')
     RETURN
   END IF
   WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL
   YVARNAME = TRIM(TPFIELD%CMNHNAME)//YSUFFIX
-  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_LFI_X2','KZFILE value too high')
+  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_write_lfi_X2','KZFILE value too high')
   TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE
 ELSE
   YVARNAME = TRIM(TPFIELD%CMNHNAME)
   TZFILE => TPFILE
 ENDIF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X2','writing '//TRIM(YVARNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X2','writing '//TRIM(YVARNAME))
 !
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
 !
@@ -179,7 +182,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(YVARNAME)
   IF( LEN_TRIM(YVARNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X2','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X2','field name was truncated to '&
                    //YRECFM//' for '//TRIM(YVARNAME))
   CALL LFIECR(IRESP,TZFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -188,9 +191,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X2
+END SUBROUTINE IO_Field_write_lfi_X2
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -204,16 +207,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X3','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X3','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -224,7 +227,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X3','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X3','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -233,9 +236,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X3
+END SUBROUTINE IO_Field_write_lfi_X3
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -249,16 +252,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X4','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X4','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X4','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X4','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -269,7 +272,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X4','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X4','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -278,9 +281,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X4
+END SUBROUTINE IO_Field_write_lfi_X4
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -294,16 +297,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X5','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X5','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X5','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X5','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -314,7 +317,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X5','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X5','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -323,9 +326,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X5
+END SUBROUTINE IO_Field_write_lfi_X5
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -339,16 +342,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X6','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X6','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X6','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X6','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -359,7 +362,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X6','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X6','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -368,9 +371,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X6
+END SUBROUTINE IO_Field_write_lfi_X6
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -384,11 +387,11 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
@@ -398,7 +401,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3)=KFIELD
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -407,9 +410,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N0
+END SUBROUTINE IO_Field_write_lfi_N0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -423,16 +426,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N1','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N1','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -443,7 +446,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = KFIELD(:)
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N1','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -452,9 +455,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N1
+END SUBROUTINE IO_Field_write_lfi_N1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -468,16 +471,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N2','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N2','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -488,7 +491,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = RESHAPE( KFIELD(:,:) , (/ SIZE(KFIELD) /) )
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N2','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N2','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -497,9 +500,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N2
+END SUBROUTINE IO_Field_write_lfi_N2
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N3(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N3(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -513,16 +516,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N3','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N3','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -533,7 +536,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = RESHAPE( KFIELD(:,:,:) , (/ SIZE(KFIELD) /) )
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N3','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N3','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -542,9 +545,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N3
+END SUBROUTINE IO_Field_write_lfi_N3
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -559,11 +562,11 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_L0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_L0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
@@ -580,7 +583,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3)=IFIELD
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_L0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -589,9 +592,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_L0
+END SUBROUTINE IO_Field_write_lfi_L0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -606,16 +609,16 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_L1','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_L1','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(OFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_L1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -633,7 +636,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = IFIELD(:)
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L1','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_L1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -642,9 +645,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_L1
+END SUBROUTINE IO_Field_write_lfi_L1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
 !
@@ -660,11 +663,11 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_C0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_C0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG=LEN(HFIELD)
 ILENGMAX = ILENG
@@ -675,7 +678,7 @@ IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN
   ILENG = MIN(LEN(HFIELD),NFILENAMELGTMAXLFI)
   ILENGMAX = NFILENAMELGTMAXLFI
   IF (LEN_TRIM(HFIELD)>ILENGMAX) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_C0',TRIM(TPFILE%CNAME)// &
                       ': MY_NAME was truncated from '//TRIM(HFIELD)//' to '//HFIELD(1:NFILENAMELGTMAXLFI))
 END IF
 !
@@ -691,7 +694,7 @@ IF (IRESP==0) THEN
   END DO
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_C0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -700,9 +703,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_C0
+END SUBROUTINE IO_Field_write_lfi_C0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_write_lfi_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODD_TYPE_DATE
 !
@@ -718,13 +721,13 @@ 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
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_T0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_T0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 TZFIELD = TPFIELD
 !
@@ -743,7 +746,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TZFIELD%CCOMMENT)+3:)=ITDATE(:)
   YRECFM=TRIM(TZFIELD%CMNHNAME)
   IF( LEN_TRIM(TZFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_T0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_T0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TZFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -767,7 +770,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TZFIELD%CCOMMENT)+3) = TRANSFER(TPDATA%TIME,IWORK(1))
   YRECFM=TRIM(TZFIELD%CMNHNAME)
   IF( LEN_TRIM(TZFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_T0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_T0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TZFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -776,15 +779,15 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_T0
+END SUBROUTINE IO_Field_write_lfi_T0
 !
 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 eb032d9aff601e0e879d7989a067b29460e289d3..ebd476354fc5dba27d7ebfd8eb33b5adc5f3cf80 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
@@ -3,25 +3,28 @@
 !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 : may 2016   : use NetCDF Fortran module
-!    J.Escobar   : 14/12/2017 : Correction for MNH_INT=8
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!    P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files
-!  Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
-!    P. Wautelet : 11/01/2019 : NVERB_INFO->NVERB_WARNING for zero size fields
+! Modifications:
+!  P. Wautelet may 2016  : use NetCDF Fortran module
+!  J. Escobar  14/12/2017: correction for MNH_INT=8
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 11/01/2019: NVERB_INFO->NVERB_WARNING for zero size fields
+!  P. Wautelet 01/02/2019: IO_Coordvar_write_nc4: bug: use of non-associated pointers (PIOCDF%DIM_Nx_y)
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_write_nc4
 
-use modd_io_ll,        only: gsmonoproc, tfiledata
-use modd_netcdf,       only: dimcdf, IDCDF_KIND, iocdf
+use modd_io,           only: gsmonoproc, tfiledata
+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: cleanmnhname, fillvdims, getdimcdf, getstrdimid, io_handle_err_nc4
+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
@@ -30,57 +33,57 @@ implicit none
 
 private
 
-public :: io_write_coordvar_nc4, io_write_field_nc4, io_write_header_nc4
+public :: IO_Coordvar_write_nc4, IO_Field_write_nc4, IO_Header_write_nc4
 
-INTERFACE IO_WRITE_FIELD_NC4
-   MODULE PROCEDURE IO_WRITE_FIELD_NC4_X0,IO_WRITE_FIELD_NC4_X1, &
-                    IO_WRITE_FIELD_NC4_X2,IO_WRITE_FIELD_NC4_X3, &
-                    IO_WRITE_FIELD_NC4_X4,IO_WRITE_FIELD_NC4_X5, &
-                    IO_WRITE_FIELD_NC4_X6,                       &
-                    IO_WRITE_FIELD_NC4_N0,IO_WRITE_FIELD_NC4_N1, &
-                    IO_WRITE_FIELD_NC4_N2,IO_WRITE_FIELD_NC4_N3, &
-                    IO_WRITE_FIELD_NC4_L0,IO_WRITE_FIELD_NC4_L1, &
-                    IO_WRITE_FIELD_NC4_C0,IO_WRITE_FIELD_NC4_C1, &
-                    IO_WRITE_FIELD_NC4_T0
-END INTERFACE IO_WRITE_FIELD_NC4
+INTERFACE IO_Field_write_nc4
+   MODULE PROCEDURE IO_Field_write_nc4_X0,IO_Field_write_nc4_X1, &
+                    IO_Field_write_nc4_X2,IO_Field_write_nc4_X3, &
+                    IO_Field_write_nc4_X4,IO_Field_write_nc4_X5, &
+                    IO_Field_write_nc4_X6,                       &
+                    IO_Field_write_nc4_N0,IO_Field_write_nc4_N1, &
+                    IO_Field_write_nc4_N2,IO_Field_write_nc4_N3, &
+                    IO_Field_write_nc4_L0,IO_Field_write_nc4_L1, &
+                    IO_Field_write_nc4_C0,IO_Field_write_nc4_C1, &
+                    IO_Field_write_nc4_T0
+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
 
-SUBROUTINE IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,OEXISTED,KSHAPE,HCALENDAR,OISCOORD)
+SUBROUTINE IO_Field_attr_write_nc4(TPFILE,TPFIELD,KVARID,OEXISTED,KSHAPE,HCALENDAR,OISCOORD)
 !
 USE MODD_CONF,   ONLY: CPROGRAM, LCARTESIAN
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','called for field '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','called for field '//TRIM(TPFIELD%CMNHNAME))
 !
 IF(LEN_TRIM(TPFIELD%CSTDNAME)==0 .AND. LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','at least long_name or standard_name must be provided &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','at least long_name or standard_name must be provided &
   &to respect CF-convention for variable '//TRIM(TPFIELD%CMNHNAME))
 ENDIF
 !
 IF (TPFIELD%NDIMS>1 .AND. .NOT.PRESENT(KSHAPE)) &
-  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_ATTR_NC4','KSHAPE not provided for '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_attr_write_nc4','KSHAPE not provided for '//TRIM(TPFIELD%CMNHNAME))
 !
 IF (PRESENT(OISCOORD)) THEN
   GISCOORD = OISCOORD
@@ -92,55 +95,55 @@ INCID = TPFILE%NNCID
 !
 ! Standard_name attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CSTDNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CSTDNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'standard_name', TRIM(TPFIELD%CSTDNAME))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','standard_name for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','standard_name for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! Long_name attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CLONGNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CLONGNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'long_name', TRIM(TPFIELD%CLONGNAME))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','long_name for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','long_name for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! Canonical units attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CUNITS)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CUNITS not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CUNITS not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'units', TRIM(TPFIELD%CUNITS))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','units for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','units for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! GRID attribute definition
 IF(TPFIELD%NGRID<0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%NGRID not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%NGRID not set for variable '//TRIM(TPFIELD%CMNHNAME))
 !Do not write GRID attribute if NGRID=0
 ELSE IF (TPFIELD%NGRID>0) THEN
   STATUS = NF90_PUT_ATT(INCID, KVARID, 'grid', TPFIELD%NGRID)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','grid for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','grid for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! COMMENT attribute definition
 IF(LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'comment', TRIM(TPFIELD%CCOMMENT))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','comment for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','comment for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! Calendar (CF convention)
 IF(PRESENT(HCALENDAR)) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','CALENDAR provided for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','CALENDAR provided for variable '//TRIM(TPFIELD%CMNHNAME))
   STATUS = NF90_PUT_ATT(INCID, KVARID,'calendar', TRIM(HCALENDAR))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','calendar for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','calendar for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
@@ -171,14 +174,14 @@ IF (.NOT.GISCOORD) THEN
           CASE (8) !fw point (=uvw point)
             YCOORDS='latitude_f longitude_f'
           CASE DEFAULT
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_ATTR_NC4','invalid NGRID for variable '//TRIM(TPFIELD%CMNHNAME))
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_attr_write_nc4','invalid NGRID for variable '//TRIM(TPFIELD%CMNHNAME))
         END SELECT
         !
         STATUS = NF90_PUT_ATT(INCID, KVARID,'coordinates',YCOORDS)
-        IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','coordinates')
+        IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','coordinates')
         DEALLOCATE(YCOORDS)
       ELSE
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','coordinates not implemented for variable ' &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','coordinates not implemented for variable ' &
                                                                     //TRIM(TPFIELD%CMNHNAME))
       END IF
     ELSE
@@ -189,7 +192,7 @@ ENDIF
 !
 IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN
   IF (TPFIELD%NFILLVALUE>=TPFIELD%NVALIDMIN .AND. TPFIELD%NFILLVALUE<=TPFIELD%NVALIDMAX) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','_FillValue is not outside of valid_min - valid_max'// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','_FillValue is not outside of valid_min - valid_max'// &
                                                                 'interval for variable '//TRIM(TPFIELD%CMNHNAME))
   !
   ! Fillvalue (CF/COMODO convention)
@@ -198,20 +201,20 @@ IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN
   !          * it cannot be modified if some data has already been written (->check OEXISTED)
   IF(.NOT.OEXISTED) THEN
     STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%NFILLVALUE)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','_FillValue')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','_FillValue')
   END IF
   !
   ! Valid_min/max (CF/COMODO convention)
   STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%NVALIDMIN)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_min')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_min')
   !
   STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max',TPFIELD%NVALIDMAX)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_max')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_max')
 ENDIF
 !
 IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
   IF (TPFIELD%XFILLVALUE>=TPFIELD%XVALIDMIN .AND. TPFIELD%XFILLVALUE<=TPFIELD%XVALIDMAX) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','_FillValue is not outside of valid_min - valid_max'// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','_FillValue is not outside of valid_min - valid_max'// &
                                                                 'interval for variable '//TRIM(TPFIELD%CMNHNAME))
   !
   ! Fillvalue (CF/COMODO convention)
@@ -224,7 +227,7 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
     ELSE
       STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%XFILLVALUE)
     END IF
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','_FillValue')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','_FillValue')
   END IF
   !
   ! Valid_min/max (CF/COMODO convention)
@@ -233,35 +236,35 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
   ELSE
     STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%XVALIDMIN)
   END IF
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_min')
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_min')
   !
   IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
     STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max', REAL(TPFIELD%XVALIDMAX,KIND=4))
   ELSE
     STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max',TPFIELD%XVALIDMAX)
   END IF
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_max')
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_max')
 ENDIF
 !
-END SUBROUTINE IO_WRITE_FIELD_ATTR_NC4
+END SUBROUTINE IO_Field_attr_write_nc4
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -269,62 +272,54 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL FILLVDIMS(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
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_DEF_VAR',trim(YVARNAME))
+     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
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','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_X0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X0
+END SUBROUTINE IO_Field_write_nc4_X0
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -332,54 +327,50 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_DEF_VAR',trim(YVARNAME))
+     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
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X1
+END SUBROUTINE IO_Field_write_nc4_X1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE,OISCOORD)
+SUBROUTINE IO_Field_write_nc4_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE,OISCOORD)
 !
 TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -389,26 +380,26 @@ 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
 !
 IF (PRESENT(KVERTLEVEL)) THEN
   WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL
   IF (.NOT.PRESENT(KZFILE)) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE argument not provided')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_nc4_X2','KZFILE argument not provided')
     RETURN
   END IF
-  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE value too high')
+  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_write_nc4_X2','KZFILE value too high')
   TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE
   TZFIELD = TPFIELD
   TZFIELD%CMNHNAME  = TRIM(TZFIELD%CMNHNAME)//YSUFFIX
@@ -420,77 +411,73 @@ ELSE
   TZFIELD = TPFIELD
 ENDIF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TZFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TZFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TZFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_DEF_VAR',trim(YVARNAME))
+     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
    IF (TZFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TZFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X2',TRIM(TZFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X2
+END SUBROUTINE IO_Field_write_nc4_X2
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -498,71 +485,67 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_DEF_VAR',trim(YVARNAME))
 
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X3
+END SUBROUTINE IO_Field_write_nc4_X3
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),           INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -570,71 +553,67 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X4','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X4','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_DEF_VAR',trim(YVARNAME))
 
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X4
+END SUBROUTINE IO_Field_write_nc4_X4
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),           INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -642,71 +621,67 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X5','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X5','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_DEF_VAR',trim(YVARNAME))
 
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X5
+END SUBROUTINE IO_Field_write_nc4_X5
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -714,60 +689,57 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X6','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X6','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_DEF_VAR',trim(YVARNAME))
 
      ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X6
+END SUBROUTINE IO_Field_write_nc4_X6
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
 #if 0
-USE MODD_PARAMETERS_ll,  ONLY : JPHEXT, JPVEXT
-USE MODD_IO_ll, ONLY : LPACK,L1D,L2D
+USE MODD_IO,             ONLY: LPACK,L1D,L2D
+USE MODD_PARAMETERS_ll,  ONLY: JPHEXT, JPVEXT
+#else
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 #endif
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
@@ -775,16 +747,16 @@ 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_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -792,71 +764,64 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','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_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
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_DEF_VAR',trim(YVARNAME))
+     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
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 !
 ! Use IMAX, JMAX, KMAX to define DIM_NI, DIM_NJ, DIM_LEVEL
 ! /!\ Can only work if IMAX, JMAX or KMAX are written before any array
 !
 #if 0
-IF (YVARNAME == 'IMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NI)) TPFILE%TNCDIMS%DIM_NI=>GETDIMCDF(TPFILE%TNCDIMS,KFIELD+2*JPHEXT,'X')
+IF (YVARNAME == 'IMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NI)) TPFILE%TNCDIMS%DIM_NI=>IO_Dimcdf_get_nc4(TPFILE%TNCDIMS,KFIELD+2*JPHEXT,'X')
 IF (YVARNAME == 'JMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NJ)) THEN
    IF (LPACK .AND. L2D) THEN
-      TPFILE%TNCDIMS%DIM_NJ=>GETDIMCDF(TPFILE, 1,'Y')
+      TPFILE%TNCDIMS%DIM_NJ=>IO_Dimcdf_get_nc4(TPFILE, 1,'Y')
    ELSE
-      TPFILE%TNCDIMS%DIM_NJ=>GETDIMCDF(TPFILE, KFIELD+2*JPHEXT, 'Y')
+      TPFILE%TNCDIMS%DIM_NJ=>IO_Dimcdf_get_nc4(TPFILE, KFIELD+2*JPHEXT, 'Y')
    END IF
 END IF
 #endif
 IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_LEVEL)) THEN
   TZIOCDF => TPFILE%TNCDIMS
-  TZIOCDF%DIM_LEVEL=>GETDIMCDF(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
-END SUBROUTINE IO_WRITE_FIELD_NC4_N0
+END SUBROUTINE IO_Field_write_nc4_N0
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
 #if 0
-USE MODD_PARAMETERS_ll,  ONLY : JPHEXT, JPVEXT
-USE MODD_IO_ll, ONLY : LPACK,L1D,L2D
+USE MODD_IO,             ONLY: LPACK,L1D,L2D
+USE MODD_PARAMETERS_ll,  ONLY: JPHEXT, JPVEXT
+#else
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 #endif
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
@@ -864,15 +829,15 @@ 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_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -880,195 +845,183 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(KFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_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_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N1
+END SUBROUTINE IO_Field_write_nc4_N1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(KFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','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_Field_write_nc4_N2','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N2
+END SUBROUTINE IO_Field_write_nc4_N2
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N3(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N3(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),TARGET,  INTENT(IN) :: TPFILE
 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(KFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','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_Field_write_nc4_N3','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N3
+END SUBROUTINE IO_Field_write_nc4_N3
 
-SUBROUTINE IO_WRITE_FIELD_NC4_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -1076,28 +1029,28 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL FILLVDIMS(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)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L0','NF90_DEF_VAR',trim(YVARNAME))
      DEALLOCATE(IVDIMS)
    ELSE
      ! Define the scalar variable
      ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 !Convert LOGICAL to INTEGER (LOGICAL format not supported by netCDF files)
@@ -1108,33 +1061,33 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_L0
+END SUBROUTINE IO_Field_write_nc4_L0
 
-SUBROUTINE IO_WRITE_FIELD_NC4_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -1142,27 +1095,27 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(OFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_L1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L1','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L1','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 !Convert LOGICAL to INTEGER (LOGICAL format not supported by netCDF files)
@@ -1173,34 +1126,34 @@ ELSEWHERE
 END WHERE
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_L1
+END SUBROUTINE IO_Field_write_nc4_L1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 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_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !Store the character string in a string of a size multiple of NSTRINGCHUNKSIZE
@@ -1214,39 +1167,39 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 IF (TPFIELD%LTIMEDEP) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)// &
                  ': time dependent variable not (yet) possible for 0D variable '//TRIM(TPFIELD%CMNHNAME))
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id
-   IVDIMS(1) = GETSTRDIMID(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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C0','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ALLOCATE(CHARACTER(LEN=ILEN)::YFIELD)
 YFIELD(1:LEN_TRIM(HFIELD))=TRIM(HFIELD)
 YFIELD(LEN_TRIM(HFIELD)+1:)=' '
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, YFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 DEALLOCATE(YFIELD)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_C0
+END SUBROUTINE IO_Field_write_nc4_C0
 
-SUBROUTINE IO_WRITE_FIELD_NC4_C1(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_C1(TPFILE,TPFIELD,HFIELD,KRESP)
 !  Modif
 !    J.Escobar : 25/04/2018 : missing 'IF ALLOCATED(IVDIMSTMP)' DEALLOCATE
 !----------------------------------------------------------------
@@ -1255,19 +1208,19 @@ 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_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 
@@ -1279,11 +1232,11 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 IF (TPFIELD%LTIMEDEP) THEN
   !This is an error (+return) and not a warning because IVDIMSTMP could be of size 2 if LTIMEDEP=T
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)// &
                  ': time dependent variable not (yet) possible for '//TRIM(TPFIELD%CMNHNAME))
   RETURN
 END IF
@@ -1292,30 +1245,30 @@ END IF
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id
-   IVDIMS(1) = GETSTRDIMID(TPFILE,ILEN)
-   CALL FILLVDIMS(TPFILE, TPFIELD, (/ISIZE/), IVDIMSTMP)
+   IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,ILEN)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, (/ISIZE/), IVDIMSTMP)
    IVDIMS(2) = IVDIMSTMP(1)
    ! Define the variable
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C1','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C1','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, HFIELD(1:ISIZE)(1:ILEN), START=(/IONE,IONE/), COUNT=(/ILEN,ISIZE/))
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMSTMP)) DEALLOCATE(IVDIMSTMP)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_C1
+END SUBROUTINE IO_Field_write_nc4_C1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_write_nc4_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODD_TIME_n,     ONLY: TDTMOD
 USE MODD_TYPE_DATE
@@ -1327,19 +1280,19 @@ 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_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
@@ -1350,14 +1303,14 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 TZFIELD%CMNHNAME = TRIM(YVARNAME)
 !
 ! Model beginning date (TDTMOD%TDATE) is used as the reference date
 ! Reference time is set to 0.
 IF (.NOT.ASSOCIATED(TDTMOD)) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)// &
                  ': '//TRIM(TZFIELD%CMNHNAME)//': DTMOD is not associated and not known. Reference date set to 2000/01/01')
   TZREF%TDATE%YEAR  = 2000
   TZREF%TDATE%MONTH = 1
@@ -1372,33 +1325,29 @@ WRITE(YUNITS,'( "seconds since ",I4.4,"-",I2.2,"-",I2.2," 00:00:00 +0:00" )') &
 TZFIELD%CUNITS = TRIM(YUNITS)
 !
 IF (TPFIELD%LTIMEDEP) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)// &
                  ': time dependent variable not (yet) possible for 0D variable '//TRIM(TPFIELD%CMNHNAME))
 !
 ! The variable should not already exist but who knows ?
 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_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_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_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED,HCALENDAR='standard')
+CALL IO_Field_attr_write_nc4(TPFILE,TZFIELD,IVARID,GEXISTED,HCALENDAR='standard')
 !
 ! Compute the temporal distance from reference
 CALL DATETIME_DISTANCE(TZREF,TPDATA,ZDELTATIME)
 
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF (IRESP/=0) THEN
   KRESP = IRESP
@@ -1420,19 +1369,19 @@ TZFIELD%CCOMMENT  = 'YYYYMMDD'
 STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(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)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
-   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED)
+     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
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
 END IF
 
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, ITDATE)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
 
 IF (IRESP/=0) THEN
   KRESP = IRESP
@@ -1450,31 +1399,28 @@ 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
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
-   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED)
+   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
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
 END IF
 
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, TPDATA%TIME)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
 #endif
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_T0
+END SUBROUTINE IO_Field_write_nc4_T0
 
-SUBROUTINE IO_WRITE_COORDVAR_NC4(TPFILE,HPROGRAM_ORIG)
+SUBROUTINE IO_Coordvar_write_nc4(TPFILE,HPROGRAM_ORIG)
 USE MODD_CONF,       ONLY: CPROGRAM, LCARTESIAN
 USE MODD_CONF_n,     ONLY: CSTORAGE_TYPE
 USE MODD_GRID,       ONLY: XLATORI, XLONORI
 USE MODD_GRID_n,     ONLY: LSLEVE, XXHAT, XYHAT, XZHAT
+use modd_netcdf,     only: dimcdf
 USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT
 
 USE MODE_FIELD,      ONLY: TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
@@ -1489,15 +1435,16 @@ 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
 REAL,DIMENSION(:),ALLOCATABLE   :: ZXHATM, ZYHATM,ZZHATM !Coordinates at mass points in the transformed space
 REAL,DIMENSION(:,:),POINTER     :: ZLAT, ZLON
-TYPE(IOCDF), POINTER            :: PIOCDF
+type(dimcdf), pointer           :: tzdim_ni, tzdim_nj, tzdim_ni_u, tzdim_nj_u, tzdim_ni_v, tzdim_nj_v
+TYPE(IOCDF),  POINTER           :: PIOCDF
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_COORDVAR_NC4','called for '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Coordvar_write_nc4','called for '//TRIM(TPFILE%CNAME))
 
 ZXHAT => NULL()
 ZYHAT => NULL()
@@ -1554,17 +1501,34 @@ IF (LCARTESIAN) THEN
 ELSE
   YSTDNAMEPREFIX = 'projection'
 ENDIF
-CALL WRITE_HOR_COORD(PIOCDF%DIM_NI,'x-dimension of the grid',TRIM(YSTDNAMEPREFIX)//'_x_coordinate','X',0.,JPHEXT,JPHEXT,ZXHATM)
-CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ,'y-dimension of the grid',TRIM(YSTDNAMEPREFIX)//'_y_coordinate','Y',0.,JPHEXT,JPHEXT,ZYHATM)
-CALL WRITE_HOR_COORD(PIOCDF%DIM_NI_U,'x-dimension of the grid at u location', &
+
+if(associated(piocdf)) then
+tzdim_ni   => piocdf%dim_ni
+tzdim_nj   => piocdf%dim_nj
+tzdim_ni_u => piocdf%dim_ni_u
+tzdim_nj_u => piocdf%dim_nj_u
+tzdim_ni_v => piocdf%dim_ni_v
+tzdim_nj_v => piocdf%dim_nj_v
+else
+tzdim_ni   => null()
+tzdim_nj   => null()
+tzdim_ni_u => null()
+tzdim_nj_u => null()
+tzdim_ni_v => null()
+tzdim_nj_v => null()
+end if
+
+CALL WRITE_HOR_COORD(tzdim_ni,'x-dimension of the grid',TRIM(YSTDNAMEPREFIX)//'_x_coordinate','X',0.,JPHEXT,JPHEXT,ZXHATM)
+CALL WRITE_HOR_COORD(tzdim_nj,'y-dimension of the grid',TRIM(YSTDNAMEPREFIX)//'_y_coordinate','Y',0.,JPHEXT,JPHEXT,ZYHATM)
+CALL WRITE_HOR_COORD(tzdim_ni_u,'x-dimension of the grid at u location', &
                      TRIM(YSTDNAMEPREFIX)//'_x_coordinate_at_u_location','X',-0.5,JPHEXT,0,     ZXHAT)
-CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ_U,'y-dimension of the grid at u location', &
+CALL WRITE_HOR_COORD(tzdim_nj_u,'y-dimension of the grid at u location', &
                      TRIM(YSTDNAMEPREFIX)//'_y_coordinate_at_u_location','Y', 0., JPHEXT,JPHEXT,ZYHATM)
-CALL WRITE_HOR_COORD(PIOCDF%DIM_NI_V,'x-dimension of the grid at v location', &
+CALL WRITE_HOR_COORD(tzdim_ni_v,'x-dimension of the grid at v location', &
                      TRIM(YSTDNAMEPREFIX)//'_x_coordinate_at_v_location','X', 0., JPHEXT,JPHEXT,ZXHATM)
-CALL WRITE_HOR_COORD(PIOCDF%DIM_NJ_V,'y-dimension of the grid at v location', &
+CALL WRITE_HOR_COORD(tzdim_nj_v,'y-dimension of the grid at v location', &
                      TRIM(YSTDNAMEPREFIX)//'_y_coordinate_at_v_location','Y',-0.5,JPHEXT,0,     ZYHAT)
-!
+
 IF (.NOT.LCARTESIAN) THEN
   ALLOCATE(ZLAT(IIU,IJU),ZLON(IIU,IJU))
   !
@@ -1633,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
 
@@ -1679,38 +1643,34 @@ 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
-      IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_DEF_VAR',trim(YVARNAME))
+      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')
     END IF
 
     ! Write metadata
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name',HLONGNAME)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name',HSTDNAME)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
     IF (PRESENT(PCOORDS)) THEN
       STATUS = NF90_PUT_ATT(INCID, IVARID, 'units','m')
-      IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
+      IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
     END IF
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis',HAXIS)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_axis_shift',PSHIFT)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
                                                      //trim(YVARNAME))
     WRITE(YRANGE,'( I0,":",I0 )') 1+KBOUNDLOW,ISIZE-KBOUNDHIGH
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_dynamic_range',TRIM(YRANGE))
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
                                                      //trim(YVARNAME))
 
     ! Write the data
     STATUS = NF90_PUT_VAR(INCID, IVARID, ZTAB)
-    IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_VAR',trim(YVARNAME),IRESP)
   END IF
 
   IF (GALLOC) DEALLOCATE(ZTAB)
@@ -1755,9 +1715,9 @@ SUBROUTINE WRITE_HOR_2DCOORD(PX,PY,HLAT,HLON)
     ENDIF
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HLAT,ID,IRESP)
-    CALL IO_WRITE_FIELD_NC4_X2(TPFILE,TFIELDLIST(ID),ZTAB1,IRESP,OISCOORD=.TRUE.)
+    CALL IO_Field_write_nc4_X2(TPFILE,TFIELDLIST(ID),ZTAB1,IRESP,OISCOORD=.TRUE.)
     CALL FIND_FIELD_ID_FROM_MNHNAME(HLON,ID,IRESP)
-    CALL IO_WRITE_FIELD_NC4_X2(TPFILE,TFIELDLIST(ID),ZTAB2,IRESP,OISCOORD=.TRUE.)
+    CALL IO_Field_write_nc4_X2(TPFILE,TFIELDLIST(ID),ZTAB2,IRESP,OISCOORD=.TRUE.)
   END IF
 
   IF (GALLOC1) DEALLOCATE(ZTAB1)
@@ -1779,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)
@@ -1790,61 +1750,57 @@ 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
-    IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_DEF_VAR',trim(YVARNAME))
+    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')
   END IF
 
   ! Write metadata
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name',HLONGNAME)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name',HSTDNAME)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'units','m')
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','Z')
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'positive','up')
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','positive for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','positive for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_axis_shift',PSHIFT)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
                                                    //trim(YVARNAME))
   WRITE(YRANGE,'( I0,":",I0 )') 1+KBOUNDLOW,ISIZE-KBOUNDHIGH
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_dynamic_range',TRIM(YRANGE))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
                                                    //trim(YVARNAME))
   !
   IF (GSLEVE) THEN
     !Remark: ZS, ZSMT and ZTOP in the formula are the same for mass point or flux point
     STATUS = NF90_PUT_ATT(INCID, IVARID,'formula_terms','s: '//TRIM(YVARNAME)//                   &
                                         ' height: ZTOP oro_ls: ZSMT oro: ZS len1: LEN1 len2: LEN2')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_definition','z(n,k,j,i)=s(k)'//                                      &
                           '+ oro_ls(j,i)*sinh((height/len1)**1.35-(s(k)/len1)**1.35)/sinh((s(k)/len1)**1.35)'//        &
                           '+(oro(j,i)-oro_ls(j,i))*sinh((height/len2)**1.35-(s(k)/len2)**1.35)/sinh((s(k)/len2)**1.35)')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
                                                      //trim(YVARNAME))
   ELSE
     !Remark: ZS and ZTOP in the formula are the same for mass point or flux point
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_terms','s: '//TRIM(YVARNAME)//' height: ZTOP orog: ZS')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_definition','z(n,k,j,i)=s(k)*(height-orog(j,i))/height+orog(j,i)')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
                                                      //trim(YVARNAME))
   ENDIF
   !
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'computed_standard_name',HCOMPNAME)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','computed_standard_name for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','computed_standard_name for ' &
                                                    //trim(YVARNAME))
 
   ! Write the data
   STATUS = NF90_PUT_VAR(INCID, IVARID, PCOORDS)
-  IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_VAR',trim(YVARNAME))
+  IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_VAR',trim(YVARNAME))
 
 END SUBROUTINE WRITE_VER_COORD
 
@@ -1861,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
 
 
@@ -1874,29 +1830,25 @@ 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
-      IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_DEF_VAR',trim(YVARNAME))
+      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')
     END IF
 
     ! Write metadata
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name','time axis')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name','time')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
     WRITE(YUNITS,'( "seconds since ",I4.4,"-",I2.2,"-",I2.2," 00:00:00 +0:00" )') &
           TDTMOD%TDATE%YEAR,TDTMOD%TDATE%MONTH,TDTMOD%TDATE%DAY
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'units',YUNITS)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','T')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID,'calendar','standard')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','calendar for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','calendar for '//trim(YVARNAME))
 
     ! Model beginning date (TDTMOD%TDATE) is used as the reference date
     ! Reference time is set to 0.
@@ -1906,46 +1858,46 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
     CALL DATETIME_DISTANCE(TZREF,TDTCUR,ZDELTATIME)
     ! Write the data
     STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME)
-    IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_VAR',trim(YVARNAME))
+    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_VAR',trim(YVARNAME))
   END IF
 
 END SUBROUTINE WRITE_TIME_COORD
 
-END SUBROUTINE IO_WRITE_COORDVAR_NC4
+END SUBROUTINE IO_Coordvar_write_nc4
 
 
-SUBROUTINE IO_WRITE_HEADER_NC4(TPFILE)
+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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_NC4','called for file '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_write_nc4','called for file '//TRIM(TPFILE%CNAME))
 !
 IF (TPFILE%LMASTER)  THEN
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'Conventions', 'CF-1.7 COMODO-1.4')
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','Conventions')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','Conventions')
 
 #if (MNH_REAL == 8)
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '8')
 #else
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '4')
 #endif
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_REAL')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_REAL')
 
 #if (MNH_INT == 4)
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '4')
 #else
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '8')
 #endif
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_INT')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_INT')
 
 !title
 
   !history
-  CALL IO_APPEND_HISTORY_NC4(TPFILE)
+  CALL IO_History_append_nc4(TPFILE)
 
 !institution
 
@@ -1956,12 +1908,12 @@ IF (TPFILE%LMASTER)  THEN
 !references
 END IF
 !
-END SUBROUTINE IO_WRITE_HEADER_NC4
+END SUBROUTINE IO_Header_write_nc4
 
 
-SUBROUTINE IO_APPEND_HISTORY_NC4(TPFILE)
+SUBROUTINE IO_History_append_nc4(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE ! File structure
 !
@@ -1970,12 +1922,12 @@ 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
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_APPEND_HISTORY_NC4','called for file '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_History_append_nc4','called for file '//TRIM(TPFILE%CNAME))
 !
 IF (TPFILE%LMASTER)  THEN
   !Check if history attribute already exists in file and read it
@@ -1983,7 +1935,7 @@ IF (TPFILE%LMASTER)  THEN
   IF (ISTATUS == NF90_NOERR) THEN
     ALLOCATE(CHARACTER(LEN=ILEN_PREV) :: YHISTORY_PREV)
     ISTATUS = NF90_GET_ATT(TPFILE%NNCID, NF90_GLOBAL, 'history', YHISTORY_PREV)
-    IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(ISTATUS,'IO_APPEND_HISTORY_NC4','NF90_GET_ATT','history')
+    IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(ISTATUS,'IO_History_append_nc4','NF90_GET_ATT','history')
     YHISTORY_PREV = YHISTORY_PREV
   ELSE
     ILEN_PREV = 0
@@ -2009,10 +1961,10 @@ IF (TPFILE%LMASTER)  THEN
     YHISTORY = YHISTORY_NEW//NEW_LINE('A')//YHISTORY_PREV
   END IF
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'history', YHISTORY  )
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_APPEND_HISTORY_NC4','NF90_PUT_ATT','history')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_History_append_nc4','NF90_PUT_ATT','history')
 END IF
 
-END SUBROUTINE IO_APPEND_HISTORY_NC4
+END SUBROUTINE IO_History_append_nc4
 
 
 end module mode_io_write_nc4
@@ -2020,22 +1972,22 @@ end module mode_io_write_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_write_coordvar_nc4(a, b)
+subroutine IO_Coordvar_write_nc4(a, b)
 use mode_msg
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_write_coordvar_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_write_coordvar_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Coordvar_write_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Coordvar_write_nc4
 !
-subroutine io_write_field_nc4(a, b, c, d, e, f, g)
+subroutine IO_Field_write_nc4(a, b, c, d, e, f, g)
 use mode_msg
 integer :: a, b, c, d, e, f, g
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_write_field_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_write_field_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Field_write_nc4
 !
-subroutine io_write_header_nc4(a)
+subroutine IO_Header_write_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_write_header_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_write_header_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Header_write_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Header_write_nc4
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_lb_ll.f90 b/src/LIB/SURCOUCHE/src/mode_lb_ll.f90
index 72b5dc99bf8ae0103382b04a826a479b7d87cb2e..805e607bc4feb4190007d10ce5003fd6bb328221 100644
--- a/src/LIB/SURCOUCHE/src/mode_lb_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_lb_ll.f90
@@ -1,8 +1,11 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!-----------------------------------------------------------------
 
 !     #################
       MODULE MODE_LB_ll
@@ -117,6 +120,7 @@
   USE MODD_VAR_ll, ONLY : TCRRT_COMDATA
 !
   USE MODE_ARGSLIST_ll, ONLY : ADD2DFIELD_ll
+  use mode_msg
   USE MODE_NEST_ll, ONLY : LBFINE2COARSE
 !  
   IMPLICIT NONE
@@ -129,6 +133,7 @@
 !
 !*       0.2   declarations of local variables
 !
+  CHARACTER(len=10) :: ymodel !String for error message
   INTEGER :: ICOARSE
   TYPE(LCRSPD_ll), POINTER :: TZPAR, TZCHILD
   TYPE(LPROC_COM_DATA_ll), POINTER :: TZLCOMDATA
@@ -142,8 +147,7 @@
 !
   IF (.NOT.ASSOCIATED(TCRRT_COMDATA%TCHILDREN) &
     & .OR. .NOT.ASSOCIATED(TCRRT_COMDATA%TP2C_DATA)) THEN
-    WRITE(*,*) 'Problem in set_lbfield_ll'
-    WRITE(*,*) 'The current model has no child'
+    call Print_msg( NVERB_WARNING, 'GEN', 'SET_LB2DFIELD_ll', 'the current model has no child' )
     RETURN
   ENDIF
 !
@@ -165,9 +169,8 @@
     TZLCOMDATA => TZLCOMDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZLCOMDATA)) THEN
-    WRITE(*,*) 'Error SET_LBFIELD_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) KMODEL
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB2DFIELD_ll', trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.2   Point to the parent2child data structure
@@ -177,9 +180,8 @@
     TZP2CDATA => TZP2CDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZP2CDATA)) THEN
-    WRITE(*,*) 'Error SET_LBFIELD_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) KMODEL
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB2DFIELD_ll', trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.3   Point to the appropriate side
@@ -281,6 +283,7 @@
   USE MODD_VAR_ll, ONLY : TCRRT_COMDATA
 !
   USE MODE_ARGSLIST_ll, ONLY : ADD3DFIELD_ll
+  use mode_msg
   USE MODE_NEST_ll, ONLY : LBFINE2COARSE
 !
 !
@@ -294,6 +297,7 @@
 !
 !*       0.2   declarations of local variables
 !
+  CHARACTER(len=10) :: ymodel !String for error message
   INTEGER :: ICOARSE
   TYPE(LCRSPD_ll), POINTER :: TZPAR, TZCHILD
   TYPE(LPROC_COM_DATA_ll), POINTER :: TZLCOMDATA
@@ -307,8 +311,7 @@
 !
   IF (.NOT.ASSOCIATED(TCRRT_COMDATA%TCHILDREN) &
     & .OR. .NOT.ASSOCIATED(TCRRT_COMDATA%TP2C_DATA)) THEN
-    WRITE(*,*) 'Problem in set_lbfield_ll'
-    WRITE(*,*) 'The current model has no child'
+    call Print_msg( NVERB_WARNING, 'GEN', 'SET_LB3DFIELD_ll', 'the current model has no child' )
     RETURN
   ENDIF
 !
@@ -330,9 +333,8 @@
     TZLCOMDATA => TZLCOMDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZLCOMDATA)) THEN
-    WRITE(*,*) 'Error SET_LBFIELD_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) KMODEL
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB3DFIELD_ll', trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.2   Point to the parent2child data structure
@@ -342,9 +344,8 @@
     TZP2CDATA => TZP2CDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZP2CDATA)) THEN
-    WRITE(*,*) 'Error SET_LBFIELD_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) KMODEL
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB3DFIELD_ll', trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.3   Point to the appropriate side
@@ -433,7 +434,9 @@
 !!
   USE MODD_STRUCTURE_ll, ONLY : LPARENT2CHILD_DATA_ll, PARENT2CHILD_DATA_ll
   USE MODD_VAR_ll, ONLY : TCRRT_COMDATA
+
   USE MODE_CONSTRUCT_ll, ONLY : CLEANLIST_LCRSPD
+  use mode_msg
 !
   IMPLICIT NONE
 !
@@ -475,8 +478,7 @@
 !
   ELSE
 !
-    WRITE(*,*) 'Problem in UNSET_LBFIELD'
-    WRITE(*,*) 'The current model is 1'
+    call Print_msg( NVERB_WARNING, 'GEN', 'UNSET_LBFIELD', 'problem: the current model is 1' )
 !
   ENDIF
 !
@@ -1666,14 +1668,12 @@
 !               ------------
 !
   USE MODD_CONF
-!  USE MODD_DIM_n
   USE MODD_DYN_n
-  USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
-!  USE MODE_ll
-  USE MODE_IO_ll
-  USE MODE_MPPDB
+  USE MODD_IO,            ONLY: ISP
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+
   USE MODE_DISTRIB_LB
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT
+  use mode_msg
   !
   IMPLICIT NONE
   !
@@ -1693,6 +1693,7 @@
   ! LOCAL VARIABLES
   CHARACTER(4) :: YLBTYPEX ! LB type : 'LBX','LBXU'
   CHARACTER(4) :: YLBTYPEY ! LB type : 'LBY','LBYV'
+  character(len=10) :: ydim1, ydim2 !Strings for error messages
   ! local indices for the intersection of the local subdomain and the LB zone
   INTEGER             :: IIB_LOCLB           ! indice I Beginning in x direction
   INTEGER             :: IJB_LOCLB           ! indice J Beginning in y direction
@@ -1714,8 +1715,7 @@
     YLBTYPEX = 'LBXU'
     YLBTYPEY = 'LBYV'
   ELSE
-    WRITE(*,*) "ERROR: from SET_LB_FIELD_ll, UNKNOWN LB TYPE", HLBTYPE
-    CALL ABORT
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB_FIELD_ll', 'unknown HLBTYPE ('//trim(HLBTYPE)//')' )
   ENDIF
 !
 ! get the local indices of the West-East LB arrays for the local subdomain
@@ -1723,9 +1723,10 @@
 ! and the corresponding indices for the LB global arrays
   CALL GET_DISTRIB_LB(YLBTYPEX,ISP,'FM','WRITE',NRIMX,IIB_GLBLB,IIE_GLBLB,IJB_GLBLB,IJE_GLBLB)
   IF ( IIE_LOCLB-IIB_LOCLB /= IIE_GLBLB-IIB_GLBLB ) THEN
-    WRITE(*,*) "ERROR: from SET_LB_FIELD_ll, West-East IIE_LOCLB-IIB_LOCLB =",&
-        IIE_LOCLB-IIB_LOCLB, " /= IIE_GLBLB-IIB_GLBLB =", IIE_GLBLB-IIB_GLBLB
-    CALL ABORT
+    write( ydim1, '( I10 )' ) IIE_LOCLB-IIB_LOCLB
+    write( ydim2, '( I10 )' ) IIE_GLBLB-IIB_GLBLB
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB_FIELD_ll', 'West-East IIE_LOCLB-IIB_LOCL='//trim(ydim1)// &
+                    ' /= IIE_GLBLB-IIB_GLBLB='//trim(ydim2) )
   ENDIF
   LOCLBSIZEW = 0
   LOCLBSIZEE = 0
@@ -1747,8 +1748,7 @@
       PLBXFIELD(IIB_LOCLB:IIE_LOCLB,:,:)  = PFIELD(GLBLBBEGIN:GLBLBEND,:,:)
 !      PLBXFIELD(NRIMX+1+IIB_LOCLB:NRIMX+1+IIE_LOCLB,:,:)  = PFIELD(GLBLBBEGIN:GLBLBEND,:,:)
     ELSE
-      WRITE(*,*) "ERROR: from SET_LB_FIELD_ll, This type of partition is not allowed !"
-      CALL ABORT
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB_FIELD_ll', 'this type of partition is not allowed' )
     ENDIF
   ENDIF !( IIB_LOCLB /= 0 )
 !
@@ -1762,9 +1762,10 @@
   ! and the corresponding indices for the LB global arrays
     CALL GET_DISTRIB_LB(YLBTYPEY,ISP,'FM','WRITE',NRIMY,IIB_GLBLB,IIE_GLBLB,IJB_GLBLB,IJE_GLBLB)
     IF ( IJE_LOCLB-IJB_LOCLB /= IJE_GLBLB-IJB_GLBLB ) THEN
-      WRITE(*,*) "ERROR: from SET_LB_FIELD_ll, South-North IJE_LOCLB-IJB_LOCLB =",&
-           IJE_LOCLB-IJB_LOCLB, " /= IJE_GLBLB-IJB_GLBLB =", IJE_GLBLB-IJB_GLBLB
-      CALL ABORT
+      write( ydim1, '( I10 )' ) IJE_LOCLB-IJB_LOCLB
+      write( ydim2, '( I10 )' ) IJE_GLBLB-IJB_GLBLB
+      call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB_FIELD_ll', 'South-North IJE_LOCLB-IJB_LOCLB='//trim(ydim1)// &
+                      ' /= IJE_GLBLB-IJB_GLBLB='//trim(ydim2) )
     ENDIF
     IF ( IJB_LOCLB /= 0 ) THEN  ! if the LB zone of the local subdomain is non-empty
       IF ( IJB_GLBLB <= NRIMY+JPHEXT .AND. IJE_GLBLB >= NRIMY+JPHEXT+1 ) THEN ! the local south and north LB zones are non empty
@@ -1780,8 +1781,7 @@
         PLBYFIELD(:,IJB_LOCLB:IJE_LOCLB,:)  = PFIELD(:,GLBLBBEGIN:GLBLBEND,:)
 !        PLBYFIELD(:,NRIMY+1+IJB_LOCLB:NRIMY+1+IJE_LOCLB,:)  = PFIELD(:,GLBLBBEGIN:GLBLBEND,:)
       ELSE
-        WRITE(*,*) "ERROR: from SET_LB_FIELD_ll, This type of partition is not allowed !"
-        CALL ABORT
+        call Print_msg( NVERB_FATAL, 'GEN', 'SET_LB_FIELD_ll', 'this type of partition is not allowed' )
       ENDIF
 
     ENDIF !( IJB_LOCLB /= 0 )
diff --git a/src/LIB/SURCOUCHE/src/mode_ls_ll.f90 b/src/LIB/SURCOUCHE/src/mode_ls_ll.f90
index 0626ce6ba719541e8e7c980b69172d802ff245e8..0af00e6c6d1cc7aee2b52b91264a799da758fe4a 100644
--- a/src/LIB/SURCOUCHE/src/mode_ls_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_ls_ll.f90
@@ -1,15 +1,10 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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$
-!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 
 !     #################
@@ -59,6 +54,8 @@
 !------------------------------------------------------------------------------
 !
   USE MODD_STRUCTURE_ll
+
+  use mode_msg
 !
   CONTAINS
 !
@@ -120,6 +117,7 @@
 !
 !*       0.2   declarations of local variables
 !
+  character(len=10) :: ymodel ! String for error message
   INTEGER :: ICOARSE
   TYPE(LCRSPD_ll), POINTER :: TZPAR, TZCHILD
   TYPE(LPROC_COM_DATA_ll), POINTER :: TZLCOMDATA
@@ -149,9 +147,8 @@
     TZLCOMDATA => TZLCOMDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZLCOMDATA)) THEN
-    WRITE(*,*) 'Error SET_LS2DFIELD_1WAY_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) kmodel
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LS2DFIELD_1WAY_ll', 'model '//trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.2   Point to the parent2child data structure
@@ -161,9 +158,8 @@
     TZP2CDATA => TZP2CDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZP2CDATA)) THEN
-    WRITE(*,*) 'Error SET_LS2DFIELD_1WAY_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) kmodel
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LS2DFIELD_1WAY_ll', 'model '//trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
   TZPAR => TZP2CDATA%TELT%TSEND_1WAY_LS
@@ -239,6 +235,7 @@
 !
 !*       0.2   declarations of local variables
 !
+  character(len=10) :: ymodel ! String for error message
   INTEGER :: ICOARSE
   TYPE(LCRSPD_ll), POINTER :: TZPAR, TZCHILD
   TYPE(LPROC_COM_DATA_ll), POINTER :: TZLCOMDATA
@@ -268,9 +265,8 @@
     TZLCOMDATA => TZLCOMDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZLCOMDATA)) THEN
-    WRITE(*,*) 'Error SET_LS3DFIELD_1WAY_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) kmodel
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LS3DFIELD_1WAY_ll', 'model '//trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.2   Point to the parent2child data structure
@@ -280,9 +276,8 @@
     TZP2CDATA => TZP2CDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZP2CDATA)) THEN
-    WRITE(*,*) 'Error SET_LS3DFIELD_1WAY_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) kmodel
+    call Print_msg( NVERB_FATAL, 'GEN', 'SET_LS3DFIELD_1WAY_ll', 'model '//trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
   TZPAR => TZP2CDATA%TELT%TSEND_1WAY_LS
@@ -617,6 +612,7 @@
 !
 !*       0.2   declarations of local variables
 !
+  character(len=10) :: ymodel ! String for error message
   TYPE(LPARENT2CHILD_DATA_ll), POINTER :: TZP2CDATA
   TYPE(LPROC_COM_DATA_ll), POINTER :: TZLCOMDATA
 !
@@ -629,9 +625,8 @@
     TZLCOMDATA => TZLCOMDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZLCOMDATA)) THEN
-    WRITE(*,*) 'Error UNSET_LSFIELD_2WAY_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) kmodel
+    call Print_msg( NVERB_FATAL, 'GEN', 'UNSET_LSFIELD_2WAY_ll', 'model '//trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
 !*       2.2   Point to the parent2child data structure
@@ -641,9 +636,8 @@
     TZP2CDATA => TZP2CDATA%TNEXT
   ENDDO
   IF (.NOT.ASSOCIATED(TZP2CDATA)) THEN
-    WRITE(*,*) 'Error UNSET_LSFIELD_2WAY_ll : ', KMODEL, &
-               ' is not a child of the current model'
-    STOP
+    write( ymodel, '( I10 )' ) kmodel
+    call Print_msg( NVERB_FATAL, 'GEN', 'UNSET_LSFIELD_2WAY_ll', 'model '//trim(ymodel)//' is not a child of the current model' )
   ENDIF
 !
   CALL CLEANLIST_LCRSPD(TZLCOMDATA%TELT%TSEND_2WAY_LS)
diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
index a02facdac90a9dd2dcac40117e5735b394477589..f0cdedf531bd24cbe8a63eb28b2ac5f3b59b5944 100644
--- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90
+++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2011-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.
@@ -8,7 +8,7 @@
 !
 MODULE MODE_MPPDB
 !
-!       Modifs :
+! Modifications:
 !!      J.Escobar 23/10/2012: correct CHECK_LB & format print output
 !!      M.Moge 05/02/2015: MPPDB_CHECK_SURFEX2D and MPPDB_CHECK_SURFEX3D + bug fix in MPPDB_CHECK2D and MPPDB_CHECK3D (call MPI_AllReduce at the beginning)
 !  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
@@ -19,11 +19,14 @@ MODULE MODE_MPPDB
 !  Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
 !  Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics
 !  Philippe Wautelet: 22/01/2019: use sleep_c subroutine instead of non-standard call system
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!-----------------------------------------------------------------
 !
   use ISO_FORTRAN_ENV, only: OUTPUT_UNIT
-  USE MODE_MSG
+
+  use mode_msg
+
   use modi_tools_c
-!
 
   IMPLICIT NONE
 
@@ -185,7 +188,8 @@ MODULE MODE_MPPDB
           CALL MPI_INFO_SET    (INFO_SPAWN , "wdir", MPPDB_WDIR , ierr)
           CALL MPI_INFO_GET    (INFO_SPAWN , "wdir", 40, chaine, isset ,ierr)
           IF (MPPDB_DEBUG) PRINT*,"MPPDB_INIT:: FATHER :: INFO_SPAWN , wdir=",isset,chaine
-          IF (ierr.NE.0) STOP 'MPPDB_INIT:: PB MPI_INFO_SET  "wdir" '
+          if (ierr /= 0 ) call Print_msg( NVERB_FATAL, 'GEN', 'MPPDB_INIT', 'MPI_INFO_SET failed' )
+
           !
        ELSE
           ! other father only do nothing but participate
@@ -648,8 +652,8 @@ MODULE MODE_MPPDB
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   SUBROUTINE MPPDB_CHECK1D_REAL(PTAB,MESSAGE,PPRECISION)
     !
-    USE MODD_MPIF,   ONLY: MPI_CHARACTER, MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM, MPI_MAX
-    USE MODD_VAR_ll, ONLY: MPI_PRECISION
+    USE MODD_MPIF,      ONLY: MPI_CHARACTER, MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM, MPI_MAX
+    use modd_precision, only: MNHREAL_MPI
     !
     USE MODE_DEVICE
     !
@@ -732,7 +736,7 @@ MODULE MODE_MPPDB
                             ISIZEOTHER ,1,MPI_INTEGER,I_FIRST_SON,NTAG, &
                             MPPDB_INTRA_COMM,MPI_STATUS_IGNORE,IINFO_ll)
           IF (SIZE(ZTAB)==ISIZEOTHER) THEN
-            CALL MPI_RECV(ZTAB_SON,SIZE(ZTAB_SON),MPI_PRECISION,I_FIRST_SON, &
+            CALL MPI_RECV(ZTAB_SON,SIZE(ZTAB_SON),MNHREAL_MPI,I_FIRST_SON, &
                     NTAG,MPPDB_INTRA_COMM,MPI_STATUS_IGNORE,IINFO_ll)
             ZTAB_DIFF     = ABS ( ZTAB - ZTAB_SON )
             MAX_VAL(IPAS)  = MAXVAL( ABS (ZTAB_SON) )
@@ -756,7 +760,7 @@ MODULE MODE_MPPDB
                           ISIZEOTHER,1,MPI_INTEGER,I_FIRST_FATHER,NTAG, &
                           MPPDB_INTRA_COMM,MPI_STATUS_IGNORE,IINFO_ll)
         IF (SIZE(ZTAB)==ISIZEOTHER) THEN
-          CALL MPI_SEND(ZTAB,SIZE(ZTAB),MPI_PRECISION,I_FIRST_FATHER, &
+          CALL MPI_SEND(ZTAB,SIZE(ZTAB),MNHREAL_MPI,I_FIRST_FATHER, &
                         NTAG, MPPDB_INTRA_COMM, IINFO_ll)
         END IF
       END IF
@@ -1117,9 +1121,9 @@ MODULE MODE_MPPDB
 
   SUBROUTINE MPPDB_CHECK3D_REAL(PTAB,MESSAGE,PPRECISION)
     !
-    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
     USE MODD_MPIF,          ONLY: MPI_CHARACTER, MPI_INTEGER, MPI_STATUS_IGNORE, MPI_SUM, MPI_MAX
-    USE MODD_VAR_ll,        ONLY: MPI_PRECISION
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    use modd_precision,     only: MNHREAL_MPI
     !
     USE MODE_DEVICE
     USE MODE_GATHER_ll
@@ -1238,7 +1242,7 @@ MODULE MODE_MPPDB
 
              IF (.NOT. ALLOCATED(TAB_SON_ll)) 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, &
                   NTAG,MPPDB_INTRA_COMM,MPI_STATUS_IGNORE,IINFO_ll)
              !
              TAB_ll      = ABS ( TAB_ll - TAB_SON_ll )
@@ -1317,7 +1321,7 @@ MODULE MODE_MPPDB
              CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, &
                   NTAG, 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, &
                   NTAG, MPPDB_INTRA_COMM, IINFO_ll)
           END IF
        END IF
@@ -1434,9 +1438,9 @@ MODULE MODE_MPPDB
 
   SUBROUTINE MPPDB_CHECK2D_REAL(PTAB,MESSAGE,PPRECISION)
     !
-    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
     USE MODD_MPIF,          ONLY: MPI_CHARACTER, MPI_INTEGER, MPI_LOGICAL, MPI_STATUS_IGNORE, MPI_LAND, MPI_SUM, MPI_MAX
-    USE MODD_VAR_ll,        ONLY: MPI_PRECISION
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    use modd_precision,     only: MNHREAL_MPI
     !
     USE MODE_DEVICE
     USE MODE_GATHER_ll
@@ -1572,7 +1576,7 @@ MODULE MODE_MPPDB
 
              IF (.NOT. ALLOCATED(TAB_SON_ll)) 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, &
                   NTAG,MPPDB_INTRA_COMM,MPI_STATUS_IGNORE,IINFO_ll)
              !
              TAB_ll      = ABS ( TAB_ll - TAB_SON_ll )
@@ -1669,7 +1673,7 @@ MODULE MODE_MPPDB
                     NTAG, MPPDB_INTRA_COMM, IINFO_ll)
              END IF
 
-             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, &
                   NTAG, MPPDB_INTRA_COMM, IINFO_ll)
           END IF
        END IF
@@ -1749,13 +1753,15 @@ MODULE MODE_MPPDB
 
   SUBROUTINE MPPDB_CHECKLB(PLB,MESSAGE,PPRECISION,HLBTYPE,KRIM)
 
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION ,  NMNH_COMM_WORLD
-    USE MODD_IO_ll,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
-    USE MODD_MPIF      , ONLY   : MPI_INTEGER, MPI_STATUS_IGNORE
+    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: NMNH_COMM_WORLD
+    use modd_precision,     only: MNHREAL_MPI
 
     USE MODE_DISTRIB_LB
-    USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
+    USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
+
     IMPLICIT NONE
 
     REAL, DIMENSION(:,:,:) , TARGET      :: PLB
@@ -1816,7 +1822,8 @@ MODULE MODE_MPPDB
              IF (IIB /= 0) THEN
                 TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
                 IF (ISP /= JI) THEN
-                   CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_PRECISION,JI-1,99,NMNH_COMM_WORLD,MPI_STATUS_IGNORE,IINFO_ll)
+                   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)
                    TX3DP = PLB(IIB:IIE,IJB:IJE,:)
@@ -1831,7 +1838,7 @@ MODULE MODE_MPPDB
           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
 
@@ -1862,8 +1869,8 @@ MODULE MODE_MPPDB
           !
           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, &
-               NTAG, MPPDB_INTRA_COMM,MPI_STATUS_IGNORE, IINFO_ll)
+          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)
           !
@@ -1913,9 +1920,9 @@ MODULE MODE_MPPDB
           I_FIRST_FATHER = 0
           IHEXT_SON_ll = JPHEXT
           CALL MPI_BSEND(IHEXT_SON_ll,1,MPI_INTEGER,I_FIRST_FATHER, &
-               NTAG, MPPDB_INTRA_COMM, IINFO_ll)
-          CALL MPI_BSEND(PLB,SIZE(PLB),MPI_PRECISION,I_FIRST_FATHER, &
-               NTAG, MPPDB_INTRA_COMM, IINFO_ll)
+               ITAG, MPPDB_INTRA_COMM, IINFO_ll)
+          CALL MPI_BSEND(PLB,SIZE(PLB),MNHREAL_MPI,I_FIRST_FATHER, &
+               ITAG, MPPDB_INTRA_COMM, IINFO_ll)
        END IF
     END IF
 
@@ -1928,7 +1935,6 @@ MODULE MODE_MPPDB
   SUBROUTINE MPPDB_CHECK_SURFEX2D(PTAB,MESSAGE,PPRECISION,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
@@ -2026,7 +2032,6 @@ MODULE MODE_MPPDB
   SUBROUTINE MPPDB_CHECK_SURFEX3D(PTAB,MESSAGE,PPRECISION,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_msg.f90 b/src/LIB/SURCOUCHE/src/mode_msg.f90
new file mode 100644
index 0000000000000000000000000000000000000000..287dac1580ce59e12f9c567607e3e2173df1c0e6
--- /dev/null
+++ b/src/LIB/SURCOUCHE/src/mode_msg.f90
@@ -0,0 +1,134 @@
+!MNH_LIC Copyright 2017-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(s)
+!  P. Wautelet 24/01/2017
+! Modifications:
+!  P. Wautelet 27/02/2019: module extracted from mode_io.f90
+!  P. Wautelet 04/04/2019: force write on stderr for all processes in print_msg if abort
+!-----------------------------------------------------------------
+MODULE MODE_MSG
+!
+USE MODD_IO, ONLY: NVERB_FATAL, NVERB_ERROR, NVERB_WARNING, NVERB_INFO, NVERB_DEBUG
+!
+IMPLICIT NONE
+!
+CONTAINS
+!
+SUBROUTINE PRINT_MSG(KVERB,HDOMAIN,HSUBR,HMSG)
+!
+USE ISO_FORTRAN_ENV, ONLY: ERROR_UNIT, OUTPUT_UNIT
+!
+USE MODD_CONF,       ONLY: CPROGRAM
+USE MODD_IO,         ONLY: NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, &
+                           LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, TFILE_OUTPUTLISTING
+USE MODD_LUNIT,      ONLY: TLUOUT0
+USE MODD_VAR_ll,     ONLY: IP, NMNH_COMM_WORLD
+!
+use modi_tools_c
+!
+INTEGER,         INTENT(IN) :: KVERB   !Verbosity level
+CHARACTER(LEN=*),INTENT(IN) :: HDOMAIN !Domain/category of message
+CHARACTER(LEN=*),INTENT(IN) :: HSUBR   !Subroutine/function name
+CHARACTER(LEN=*),INTENT(IN) :: HMSG    !Message
+!
+CHARACTER(LEN=8)  :: YPRC
+CHARACTER(LEN=9)  :: YPRE
+CHARACTER(LEN=30) :: YSUBR
+INTEGER :: IERR, IMAXVERB,IABORTLEVEL
+INTEGER :: ILU
+LOGICAL :: GWRITE_OUTLST,GWRITE_STDOUT
+!
+!Determine if the process will write
+GWRITE_OUTLST = .FALSE.
+GWRITE_STDOUT = .FALSE.
+IF (IP == 1 .OR. LVERB_ALLPRC) THEN
+  IF (LVERB_OUTLST) GWRITE_OUTLST = .TRUE.
+  IF (LVERB_STDOUT) GWRITE_STDOUT = .TRUE.
+END IF
+!
+!Check if the output file is available
+ILU = -1
+IF (ASSOCIATED(TFILE_OUTPUTLISTING)) THEN
+  IF (TFILE_OUTPUTLISTING%LOPENED) THEN
+    ILU = TFILE_OUTPUTLISTING%NLU
+  ELSE
+    GWRITE_OUTLST = .FALSE.
+    IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'TFILE_OUTPUTLISTING not opened'
+  END IF
+ELSE
+!PW: TODO?: temporary to detect non-initialisation
+! should disappear except at the beginning of a run
+  GWRITE_OUTLST = .FALSE.
+  IF (GWRITE_STDOUT .AND. CPROGRAM/='LFICDF') WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'TFILE_OUTPUTLISTING not associated'
+END IF
+!
+SELECT CASE(HDOMAIN)
+  CASE('IO')
+    IMAXVERB    = NIO_VERB
+    IABORTLEVEL = NIO_ABORT_LEVEL
+  CASE ('GEN')
+    IMAXVERB    = NGEN_VERB
+    IABORTLEVEL = NGEN_ABORT_LEVEL
+  CASE DEFAULT
+    IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ERROR: PRINT_MSG: wrong message category (',TRIM(HDOMAIN),')'
+    IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ERROR: PRINT_MSG: wrong message category (',TRIM(HDOMAIN),')'
+    RETURN
+END SELECT
+!
+IF (KVERB>IMAXVERB) RETURN
+!
+SELECT CASE(KVERB)
+  CASE(NVERB_FATAL)
+    YPRE='FATAL:   '
+  CASE(NVERB_ERROR)
+    YPRE='ERROR:   '
+  CASE(NVERB_WARNING)
+    YPRE='WARNING: '
+  CASE(NVERB_INFO)
+    YPRE='INFO:    '
+  CASE(NVERB_DEBUG)
+    YPRE='DEBUG:   '
+  CASE DEFAULT
+    IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ERROR: PRINT_MSG: wrong verbosity level'
+    IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ERROR: PRINT_MSG: wrong verbosity level'
+END SELECT
+!
+WRITE(YPRC,'( I8 )') IP-1
+!
+YSUBR=TRIM(HSUBR)//':'
+IF (LVERB_ALLPRC) THEN
+  IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT="(A8,': ',A9,A30,A)") ADJUSTL(YPRC),YPRE,YSUBR,HMSG
+  IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT="(A8,': ',A9,A30,A)") ADJUSTL(YPRC),YPRE,YSUBR,HMSG
+ELSE
+  IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT="(A9,A30,A)") YPRE,YSUBR,HMSG
+  IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT="(A9,A30,A)") YPRE,YSUBR,HMSG
+END IF
+!
+IF (KVERB<=IABORTLEVEL) THEN
+  IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ABORT asked by application '//TRIM(CPROGRAM)
+  IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ABORT asked by application '//TRIM(CPROGRAM)
+  !Every process write on the error unit. This is necessary if the abort is done by an other process than 0.
+  WRITE(UNIT=ERROR_UNIT,FMT="(A8,': ',A9,A30,A)") ADJUSTL(YPRC),YPRE,YSUBR,HMSG
+  WRITE(UNIT=ERROR_UNIT,FMT="(A8,': ',A)")        ADJUSTL(YPRC),'ABORT asked by application '//TRIM(CPROGRAM)
+#if 0
+  !Problem: loop dependency between MODE_MSG and MODE_IO_FILE (IO_File_close call PRINT_MSG)
+  NIO_VERB = 0 !To not get further messages (ABORT should be the last for readability)
+  IF (ILU>0) CALL IO_File_close(TFILE_OUTPUTLISTING) !To flush it
+#else
+  IF (ILU>0) FLUSH(UNIT=ILU) !OK in F2003
+  IF (ASSOCIATED(TLUOUT0)) FLUSH(UNIT=TLUOUT0%NLU)
+#endif
+  !Add a sleep to ensure that the process(es) that have to write to stderr and to file
+  !have enough time before an other process calls mpi_abort
+  CALL SLEEP_C(5)
+  !
+  CALL MPI_ABORT(NMNH_COMM_WORLD, -10, IERR)
+  CALL ABORT
+END IF
+!
+END SUBROUTINE PRINT_MSG
+!
+END MODULE MODE_MSG
diff --git a/src/LIB/SURCOUCHE/src/mode_scatter.f90 b/src/LIB/SURCOUCHE/src/mode_scatter.f90
index cc933744a2052426508949c9405c1be67f898089..12518db8bd6a1bd8222d637aee2de2264bf163a3 100644
--- a/src/LIB/SURCOUCHE/src/mode_scatter.f90
+++ b/src/LIB/SURCOUCHE/src/mode_scatter.f90
@@ -1,22 +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$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
-
-#ifdef MNH_MPI_DOUBLE_PRECISION
-#define MPI_FLOAT MPI_DOUBLE_PRECISION
-#else
-#define MPI_FLOAT MPI_REAL
-#endif
 
 MODULE MODE_SCATTER_ll
 
@@ -26,14 +12,13 @@ MODULE MODE_SCATTER_ll
 !
 
 USE MODD_MPIF
+use modd_precision, only: MNHREAL_MPI
 
 IMPLICIT NONE 
 
 
 PRIVATE
 
-!INCLUDE 'mpif.h'
-
 INTERFACE SCATTER_XXFIELD
   MODULE PROCEDURE SCATTERXX_X1,SCATTERXX_X2,SCATTERXX_X3&
        & ,SCATTERXX_X4,SCATTERXX_X5,SCATTERXX_X6,&
@@ -50,10 +35,10 @@ PUBLIC SCATTER_XXFIELD,SCATTER_XYFIELD,GET_DOMREAD_ll
 CONTAINS 
 
 SUBROUTINE SCATTERXX_X1(HDIR,PSEND,PRECV,KROOT,KCOMM, TPSPLITTING)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_PARAMETERS_ll, ONLY : JPHEXT
+USE MODD_IO,            ONLY: ISP, ISNPROC
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_STRUCTURE_ll,  ONLY: ZONE_ll
+USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
 
 CHARACTER(LEN=*),          INTENT(IN) :: HDIR
 REAL,DIMENSION(:), TARGET, INTENT(IN) :: PSEND
@@ -61,14 +46,11 @@ REAL,DIMENSION(:),         INTENT(INOUT):: PRECV
 INTEGER,                   INTENT(IN) :: KROOT
 INTEGER,                   INTENT(IN) :: KCOMM
 TYPE(ZONE_ll), DIMENSION(ISNPROC), OPTIONAL :: TPSPLITTING  ! splitting of the domain
-  
-!INCLUDE 'mpif.h'
 
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:), POINTER :: TX1DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 INTEGER,ALLOCATABLE,DIMENSION(:)    :: REQ_TAB
 INTEGER                           :: NB_REQ
@@ -100,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(:)
@@ -115,16 +97,16 @@ 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
   
 END SUBROUTINE SCATTERXX_X1
 
 SUBROUTINE SCATTERXX_X2(HDIR,PSEND,PRECV,KROOT,KCOMM, TPSPLITTING)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_PARAMETERS_ll, ONLY : JPHEXT
+USE MODD_IO,            ONLY: ISP, ISNPROC
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_STRUCTURE_ll,  ONLY: ZONE_ll
 
 CHARACTER(LEN=*),           INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:), TARGET,INTENT(IN) :: PSEND
@@ -133,13 +115,10 @@ INTEGER,                    INTENT(IN) :: KROOT
 INTEGER,                    INTENT(IN) :: KCOMM
 TYPE(ZONE_ll), DIMENSION(ISNPROC), OPTIONAL :: TPSPLITTING  ! splitting of the domain
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -158,21 +137,21 @@ 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
 
 END SUBROUTINE SCATTERXX_X2
 
 SUBROUTINE SCATTERXX_X3(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:), TARGET, INTENT(IN) :: PSEND
@@ -180,13 +159,10 @@ REAL,DIMENSION(:,:,:),         INTENT(INOUT):: PRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -198,21 +174,21 @@ 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
   
 END SUBROUTINE SCATTERXX_X3
 
 SUBROUTINE SCATTERXX_X4(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -220,13 +196,10 @@ REAL,DIMENSION(:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:),    POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -238,21 +211,21 @@ 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
 
 END SUBROUTINE SCATTERXX_X4
 
 SUBROUTINE SCATTERXX_X5(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -260,14 +233,11 @@ REAL,DIMENSION(:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                         INTENT(IN) :: KROOT
 INTEGER,                         INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
-  
+
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
     CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
@@ -278,21 +248,21 @@ 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
   
 END SUBROUTINE SCATTERXX_X5
 
 SUBROUTINE SCATTERXX_X6(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                  INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -300,13 +270,10 @@ REAL,DIMENSION(:,:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                           INTENT(IN) :: KROOT
 INTEGER,                           INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE)  :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -318,21 +285,21 @@ 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
 
 END SUBROUTINE SCATTERXX_X6
 
 SUBROUTINE SCATTERXX_N1(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),           INTENT(IN) :: HDIR
 INTEGER,DIMENSION(:),TARGET,INTENT(IN) :: KSEND
@@ -340,13 +307,10 @@ INTEGER,DIMENSION(:),       INTENT(INOUT):: KRECV
 INTEGER,                    INTENT(IN) :: KROOT
 INTEGER,                    INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 INTEGER, DIMENSION(:), POINTER :: TI2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -372,7 +336,7 @@ END IF
 END SUBROUTINE SCATTERXX_N1
 
 SUBROUTINE SCATTERXX_N2(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 INTEGER, DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
@@ -380,13 +344,10 @@ INTEGER, DIMENSION(:,:),       INTENT(INOUT):: KRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 INTEGER, DIMENSION(:,:), POINTER :: TI2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -412,21 +373,18 @@ END IF
 END SUBROUTINE SCATTERXX_N2
 
 SUBROUTINE SCATTERXY_X2(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,     ONLY: ISP, ISNPROC
+USE MODD_VAR_ll, ONLY: MNH_STATUSES_IGNORE
 
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:),       INTENT(INOUT):: PRECV
 INTEGER,                   INTENT(IN) :: KROOT
 INTEGER,                   INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 INTEGER,ALLOCATABLE,DIMENSION(:)    :: REQ_TAB
 INTEGER                           :: NB_REQ
@@ -446,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(:,:)
@@ -461,27 +419,24 @@ 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
   
 END SUBROUTINE  SCATTERXY_X2
 
 SUBROUTINE SCATTERXY_X3(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                     INTENT(IN) :: KROOT
 INTEGER,                     INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
   
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -489,34 +444,31 @@ 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
 
 END SUBROUTINE  SCATTERXY_X3
 
 SUBROUTINE SCATTERXY_X4(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -524,104 +476,95 @@ 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
 
 END SUBROUTINE  SCATTERXY_X4
 
 SUBROUTINE SCATTERXY_X5(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                         INTENT(IN) :: KROOT
 INTEGER,                         INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
-  
+
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
     CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
     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
 
 END SUBROUTINE  SCATTERXY_X5
 
 SUBROUTINE SCATTERXY_X6(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                           INTENT(IN) :: KROOT
 INTEGER,                           INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
-  
+
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
     CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
     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
 
 END SUBROUTINE  SCATTERXY_X6
 
 SUBROUTINE SCATTERXY_N2(KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
 INTEGER,DIMENSION(:,:),       INTENT(INOUT):: KRECV
 INTEGER,                      INTENT(IN) :: KROOT
 INTEGER,                      INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 INTEGER ,DIMENSION(:,:), POINTER :: TI3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -643,8 +586,8 @@ END IF
 END SUBROUTINE  SCATTERXY_N2
 
 SUBROUTINE GET_DOMREAD_ll(KIP,KXOR,KXEND,KYOR,KYEND)
-USE MODD_VAR_ll,      ONLY : TCRRT_PROCONF
-USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+USE MODD_VAR_ll,       ONLY: TCRRT_PROCONF
 
 IMPLICIT NONE 
 
diff --git a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
index 754a30d12718d56d72cc93295de435f037f41046..fc5c40069db48cc06299afa288b986b0cf1d54db 100644
--- a/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_splittingz_ll.f90
@@ -1,17 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2011-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.
 !-----------------------------------------------------------------
-
-#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,22 +171,11 @@ 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
     ALLOCATE(MNH_STATUSES_IGNORE(MPI_STATUS_SIZE,NPROC*2))
 #endif
-    !
-    !-------------------------------------------------------------------------------
-    !
-    !*       2.    SET OUTPUT FILE :
-    !              ---------------
-
-    !  CALL OPEN_ll(UNIT=NIOUNIT,FILE=YOUTPUTFILE,ACTION='write',form&
-    !       &='FORMATTED',MODE=SPECIFIC,IOSTAT=IRESP)
     !
     !-------------------------------------------------------------------------------
     !
@@ -591,14 +571,6 @@ CONTAINS
     !
     !-------------------------------------------------------------------------------
     !
-    !*       2.    SET OUTPUT FILE :
-    !              ---------------
-
-    !  CALL OPEN_ll(UNIT=NIOUNIT,FILE=YOUTPUTFILE,ACTION='write',form&
-    !       &='FORMATTED',MODE=SPECIFIC,IOSTAT=IRESP)
-    !
-    !-------------------------------------------------------------------------------
-    !
     !*       3.    ALLOCATION :
     !              ----------
     !
@@ -1829,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
@@ -1867,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 983588cbb17c2280bacea7f275e12e8f35881b1e..ab948ab80cc8311b44593bde0ce70afcce6fedf4 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
 !!    ---------
@@ -1218,11 +1202,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
 !
@@ -1342,8 +1326,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)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1408,7 +1392,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       NPROC -
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1427,10 +1410,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
 !
@@ -1569,7 +1552,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
@@ -1621,7 +1604,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       NPROC -
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1640,10 +1622,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
 !
@@ -1782,7 +1764,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
@@ -1818,7 +1800,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
 !!    ---------
@@ -1835,7 +1816,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
@@ -1871,7 +1852,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)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1908,8 +1889,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION - 
 !
 !!    Reference
 !!    ---------
@@ -1925,8 +1904,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !-------------------------------------------------------------------------------
 !
 !*        0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -1962,7 +1939,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)
 !
 !-------------------------------------------------------------------------------
@@ -2004,7 +1981,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_PRECISION -
 !       JPHALO -
 !
 !!    Author
@@ -2019,12 +1995,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
 !
@@ -2080,7 +2054,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)
 !
 !-----------------------------------------------------------------
@@ -2122,7 +2096,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_PRECISION -
 !       JPHALO -
 !
 !!    Author
@@ -2138,14 +2111,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
 !              ------------
@@ -2291,7 +2261,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !                       and local processor
 !       TCRRT_PROCONF - Current configuration for current model
 !       IP -
-!       MPI_PRECISION -
 !       JPHALO -
 !
 !!    Author
@@ -2307,12 +2276,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
 !              ------------
@@ -2373,7 +2340,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
@@ -2405,7 +2372,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
   
@@ -2438,8 +2405,6 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2454,7 +2419,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZSUM_ll
 !
 !*       0.    DECLARATIONS
 !
- USE MODE_REPRO_SUM 
+  USE MODE_REPRO_SUM
 !
   IMPLICIT NONE
 !
@@ -2511,8 +2476,6 @@ END SUBROUTINE REDUCE_SUM_0DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2526,8 +2489,6 @@ END SUBROUTINE REDUCE_SUM_0DD_ll
 !-----------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2546,7 +2507,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
@@ -2629,8 +2590,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2644,8 +2603,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2664,7 +2621,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
@@ -2701,8 +2658,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2716,8 +2671,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 ! 
 !*       0.    DECLARATIONS 
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2740,7 +2693,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
@@ -2777,8 +2730,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !!    Implicit Arguments
 !!    ------------------
 !
-!     Module MODD_VAR_ll
-!       MPI_PRECISION -
 !
 !!    Author
 !!    ------
@@ -2792,8 +2743,6 @@ END SUBROUTINE REDUCE_SUM_1DD_ll
 !-------------------------------------------------------------------------------
 ! 
 !*       0.    DECLARATIONS 
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -2817,7 +2766,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
@@ -3055,8 +3004,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 158d5313622d2681529fa70baeb453fce1d293af..626cc3614f8a594ac5dfcb5b7f25af6c99dfd506 100644
--- a/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_tools_ll.f90
@@ -1,17 +1,11 @@
-!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 
+! Modifications:
+!  J. Escobar  15/09/2015: WENO5 & JPHEXT <> 1
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------
 
 !     ####################
@@ -52,11 +46,14 @@
 !     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  
+  !JUANZ
+
+  use mode_msg
 !
   CONTAINS
 
@@ -1098,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
@@ -1120,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
@@ -1270,7 +1262,7 @@ ENDIF
       ZPTR => PARRAY(ILOC,IB:IE)
 !
     CASE DEFAULT
-      STOP 'GET_GLOBALSLICE_ll : Bad HDIR argument'
+      call Print_msg( NVERB_FATAL, 'GEN', 'GET_1DGLOBALSLICE_ll', 'invalid HDIR dummy argument ('//hdir//')' )
 !
     END SELECT 
 !
@@ -1332,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
 !
@@ -1364,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)
@@ -1416,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
@@ -1438,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
@@ -1602,7 +1589,7 @@ ENDIF
       ZPTR = PARRAY(ILOC,IB:IE,KKB:KKE)
 !
     CASE DEFAULT
-      STOP 'GET_GLOBALSLICE_ll : Bad HDIR argument'
+      call Print_msg( NVERB_FATAL, 'GEN', 'GET_2DGLOBALSLICE_ll', 'invalid HDIR dummy argument ('//hdir//')' )
 !
     END SELECT
 !
@@ -1668,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
@@ -1704,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
 !
@@ -1764,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
@@ -1785,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
@@ -1962,7 +1944,7 @@ ENDIF
       ZPTR => PARRAY(ILOC,IJB:IJE)
 !
     CASE DEFAULT
-      STOP 'GET_SLICE_ll : Bad HDIR argument'
+      call Print_msg( NVERB_FATAL, 'GEN', 'GET_1DSLICE_ll', 'invalid HDIR dummy argument ('//hdir//')' )
 !
     END SELECT 
 !
@@ -2024,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)
 !
@@ -2058,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
@@ -2112,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
@@ -2133,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
@@ -2320,7 +2297,7 @@ ENDIF
       ZPTR = PARRAY(ILOC,IJB:IJE,KKB:KKE)
 !
     CASE DEFAULT
-      STOP 'GET_SLICE_ll : Bad HDIR argument'
+      call Print_msg( NVERB_FATAL, 'GEN', 'GET_2DSLICE_ll', 'invalid HDIR dummy argument ('//hdir//')' )
 !
     END SELECT
 !
@@ -2384,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
@@ -2420,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
 !
@@ -3298,8 +3275,6 @@ ENDIF
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-!
-  USE MODD_VAR_ll, ONLY : MPI_PRECISION
 !
   IMPLICIT NONE
 !
@@ -3319,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/LIB/SURCOUCHE/src/mode_toolsz_ll.f90 b/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90
index 91cc5b3292d52f895b04bce68152b0a70a0d0025..8794b9e36973903f350540e66c5b0062c57f1d8f 100644
--- a/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_toolsz_ll.f90
@@ -1,7 +1,11 @@
-!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.
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!-----------------------------------------------------------------
 !     ########################
       MODULE MODE_TOOLSZ_ll
 !     ########################
@@ -202,6 +206,7 @@
     !!    -------------
     !     Original 01/05/98
     !     R.Guivarch 29/11/99 : x and y splitting : HSPLITTING
+    !     J.Escobar 28/03/2019: check very small domain(0 size) 
     !
     !-------------------------------------------------------------------------------
     !
@@ -213,6 +218,7 @@
     USE MODD_VAR_ll, ONLY : IP
     USE MODD_CONFZ , ONLY : NZ_VERB,NZ_SPLITTING ! for debug IZ=1=flat_inv;  IZ=2=flat_invz ;  IZ=1+2=the two
 
+    use mode_msg
     USE  MODE_SPLITTING_ll , ONLY : def_splitting2
     USE MODE_TOOLS_ll   ,    ONLY : SLIDE_COORD
     !JUAN
@@ -234,6 +240,7 @@
     !
     !*       0.2   declarations of local variables
     !
+    character(len=10)       :: yval1, yval2 ! Strings for error message
     INTEGER                 :: X_DOMAINS,Y_DOMAINS,Z_DOMAINS,X_DOMAINS_NEW
     LOGICAL                 :: PREM
     INTEGER                 :: IK
@@ -244,11 +251,9 @@
     !        0. CHECK NB_PROC/NZ_PROC
     PREM = .FALSE.
     IF ( MOD(NB_PROC,KZ_PROC) .NE. 0 ) THEN
-       PRINT*
-       WRITE(*,1000) NB_PROC, KZ_PROC
-       PRINT*
-1000   FORMAT("MODE_SPLITTINGZ::SPLITZ --> NB_PROC=", I4 ," NOT DIVISIBLE BY KZ_PROC=", I4)
-       STOP
+       write( yval1, '( I10 )' ) nb_proc
+       write( yval2, '( I10 )' ) kz_proc
+       call Print_msg( NVERB_FATAL, 'GEN', 'SPLITZ', 'NB_PROC='//trim(yval1)//' not divisible by KZ_PROC='//trim(yval2) )
     ENDIF
     !
     !   Splitting in Z possible so
@@ -279,7 +284,7 @@
     !
     IF(HSPLITTING.EQ."P2P1SPLITT") THEN
        IF ((PREM).AND.(NB_PROC_XY.GT.2)) THEN
-          STOP "mode_toolsz_ll.f90::SPLITZ: NPROC PREMIER NON PREVUE !!! "
+          call Print_msg( NVERB_FATAL, 'GEN', 'SPLITZ', 'unexpected: NB_PROC_XY is a prime number' )
           !
           !   split x direction only on NB_PROC_XY - 1 processors
           !   and on reducted x-size = X_DIM - X_DIM/NB_PROC_XY -1
@@ -332,6 +337,13 @@
        CALL CARTESIANZ(TPROC,NB_PROC,X_DIM,Y_DIM,Z_DIM,X_DOMAINS,Y_DOMAINS,Z_DOMAINS,321)
        !
     END IF
+    IF (      ( (1+TPROC(IP)%NXEND-TPROC(IP)%NXOR) == 0 )  &
+         .OR. ( (1+TPROC(IP)%NYEND-TPROC(IP)%NYOR) == 0 )  ) THEN
+       write( yval1, '( I10 )' ) 1+TPROC(IP)%NXEND-TPROC(IP)%NXOR
+       write( yval2, '( I10 )' ) 1+TPROC(IP)%NYEND-TPROC(IP)%NYOR
+       call Print_msg( NVERB_FATAL, 'GEN', 'SPLITZ', 'zero-size local-domain dimensions: DIMX='// &
+                       trim(yval1)//', DIMY='//trim(yval2)//'. Too many processes for this domain size.')
+    END IF
     !
     !*       3.     shift from physical to extended domain
     !
@@ -352,10 +364,10 @@
                 PRINT*,"NYOR=",TPROC(IK)%NYOR," NYEND=",TPROC(IK)%NYEND," TAILLE=",1+TPROC(IK)%NYEND-TPROC(IK)%NYOR
                 PRINT*,"NZOR=",TPROC(IK)%NZOR," NZEND=",TPROC(IK)%NZEND," TAILLE=",1+TPROC(IK)%NZEND-TPROC(IK)%NZOR
              END DO
+
           ENDIF
        END IF
     END IF
-    !    STOP
     !
     ! Add 'Halo points' to global coordonne in X & Y direction
     !
diff --git a/src/LIB/SURCOUCHE/src/modi_fm.f90 b/src/LIB/SURCOUCHE/src/modi_fm.f90
deleted file mode 100644
index ad1466bd851def41679432a30d90630abe0a4094..0000000000000000000000000000000000000000
--- a/src/LIB/SURCOUCHE/src/modi_fm.f90
+++ /dev/null
@@ -1,37 +0,0 @@
-!MNH_LIC Copyright 1994-2018 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:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!-----------------------------------------------------------------
-
-MODULE MODI_FM_ll
-!
-INTERFACE 
-!
-SUBROUTINE SET_FMPACK_ll(O1D,O2D,OPACK)
-LOGICAL, INTENT(IN) :: O1D,O2D,OPACK
-END SUBROUTINE SET_FMPACK_ll
-!
-SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,OPARALLELIO,HPOSITION,HSTATUS,HPROGRAM_ORIG)
-USE MODD_IO_ll, ONLY: TFILEDATA
-TYPE(TFILEDATA),POINTER,INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,                INTENT(OUT), OPTIONAL :: KRESP  ! Return code
-LOGICAL,                INTENT(IN),  OPTIONAL :: OPARALLELIO
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HPOSITION
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HSTATUS
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-END SUBROUTINE IO_FILE_OPEN_ll
-!
-SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,KRESP,OPARALLELIO,HPROGRAM_ORIG)
-USE MODD_IO_ll, ONLY: TFILEDATA
-TYPE(TFILEDATA),  INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,          INTENT(OUT), OPTIONAL :: KRESP  ! Return code
-LOGICAL,          INTENT(IN),  OPTIONAL :: OPARALLELIO
-CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-END SUBROUTINE IO_FILE_CLOSE_ll
-!
-END INTERFACE
-END MODULE MODI_FM_ll
diff --git a/src/LIB/SURCOUCHE/src/modi_io.f90 b/src/LIB/SURCOUCHE/src/modi_io.f90
deleted file mode 100644
index 6136b47f52da70663b49023c77d9b6408fa83f66..0000000000000000000000000000000000000000
--- a/src/LIB/SURCOUCHE/src/modi_io.f90
+++ /dev/null
@@ -1,63 +0,0 @@
-!MNH_LIC Copyright 1994-2018 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:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!-----------------------------------------------------------------
-
-MODULE MODI_IO_ll
-!
-INTERFACE 
-  SUBROUTINE INITIO_ll()
-  END SUBROUTINE INITIO_ll
-
-  SUBROUTINE OPEN_ll(&
-       TPFILE,  &
-       MODE,    &
-       COMM,    &
-       STATUS,  &
-       ACCESS,  &
-       IOSTAT,  &
-       FORM,    &
-       RECL,    &
-       BLANK,   &
-       POSITION,&
-       DELIM,    &
-       PAD,      &
-       KNB_PROCIO,&
-       OPARALLELIO, &
-       HPROGRAM_ORIG)
-
-    USE MODD_IO_ll, ONLY : TFILEDATA
-
-    TYPE(TFILEDATA), INTENT(INOUT)         :: TPFILE
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: MODE
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: STATUS
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: ACCESS
-    INTEGER,         INTENT(OUT)           :: IOSTAT
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: FORM
-    INTEGER,         INTENT(IN),  OPTIONAL :: RECL
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: BLANK
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: POSITION
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: DELIM
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: PAD
-    INTEGER,         INTENT(IN),  OPTIONAL :: COMM
-    INTEGER,         INTENT(IN),  OPTIONAL :: KNB_PROCIO
-    LOGICAL,         INTENT(IN),  OPTIONAL :: OPARALLELIO
-    CHARACTER(LEN=*),INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-  END SUBROUTINE OPEN_ll
-
-  SUBROUTINE CLOSE_ll(TPFILE,IOSTAT,OPARALLELIO,HPROGRAM_ORIG)
-  USE MODD_IO_ll, ONLY : TFILEDATA
-
-    TYPE(TFILEDATA),  INTENT(IN)            :: TPFILE
-    INTEGER,          INTENT(OUT), OPTIONAL :: IOSTAT
-    LOGICAL,          INTENT(IN),  OPTIONAL :: OPARALLELIO
-    CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
- END SUBROUTINE CLOSE_ll
-
-END INTERFACE
-!
-END MODULE MODI_IO_ll
diff --git a/src/LIB/SURCOUCHE/src/modn_confio.f90 b/src/LIB/SURCOUCHE/src/modn_confio.f90
index b4a4ea3be9b3782e6d7d3d375af6ffb1ecaf3108..8505a61f96ad0b37b485f5f7fe850abe34a72ec9 100644
--- a/src/LIB/SURCOUCHE/src/modn_confio.f90
+++ b/src/LIB/SURCOUCHE/src/modn_confio.f90
@@ -13,7 +13,7 @@
 !!    -------
 !     Define I/O configuration variables that can be set with the NAM_CONFIO namelist
 !!    /!\ These variables must be transmitted to the SURCOUCHE library via the
-!!    SET_CONFIO_ll subroutine before the FIRST call to IO_FILE_OPEN_ll
+!!    IO_Config_set subroutine before the FIRST call to IO_FILE_OPEN_ll
 !
 !!
 !!**  IMPLICIT ARGUMENTS
@@ -36,9 +36,9 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_IO_ll, ONLY : LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, &
-                       NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, &
-                       CIO_DIR, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
+USE MODD_IO, ONLY : LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, &
+                    NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, &
+                    CIO_DIR, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
 !
 IMPLICIT NONE
 !
diff --git a/src/LIB/SURCOUCHE/src/system_mnh.f90 b/src/LIB/SURCOUCHE/src/system_mnh.f90
index ef39625e42eee1684e444aef8f0fc4562c7816c7..b43981265170ba8f28768d5d1664868f6cba45b6 100644
--- a/src/LIB/SURCOUCHE/src/system_mnh.f90
+++ b/src/LIB/SURCOUCHE/src/system_mnh.f90
@@ -12,7 +12,6 @@ SUBROUTINE SYSTEM_MNH(HCOMMAND)
 !!    Modifications:
 !!      Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
 !!
-  USE MODE_IO_ll
 !!
 !*       0.    DECLARATIONS
 !              ------------
@@ -26,14 +25,10 @@ SUBROUTINE SYSTEM_MNH(HCOMMAND)
 !
 !*       0.2   Declaration of local variables
 !              ------------------------------
-#if defined(MNH_LINUX) || defined(MNH_SP4)
-  CHARACTER(LEN=*),PARAMETER :: CFILE="file_for_xtransfer"
-#else
-#if !defined(MNH_SX5)
-  CHARACTER(LEN=*),PARAMETER :: CFILE="file_for_fujitransfer"
-#else
+#ifdef MNH_SX5
   CHARACTER(LEN=*),PARAMETER :: CFILE="file_for_nectransfer"
-#endif
+#else
+  CHARACTER(LEN=*),PARAMETER :: CFILE="file_for_xtransfer"
 #endif
   INTEGER                    :: IUNIT
 !
diff --git a/src/LIB/SURCOUCHE/src/update_nhalo1d.f90 b/src/LIB/SURCOUCHE/src/update_nhalo1d.f90
index d899568add0df8399a37510ae28f707abcddb1ed..a4ac0bcac29aa2115a31e0b7751e557c9c5da432 100644
--- a/src/LIB/SURCOUCHE/src/update_nhalo1d.f90
+++ b/src/LIB/SURCOUCHE/src/update_nhalo1d.f90
@@ -2,6 +2,7 @@
 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SURFEX_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ################################################################
       SUBROUTINE UPDATE_NHALO1D( NHALO, PFIELD1D, KISIZE_ll, KJSIZE_ll, KXOR, KXEND, KYOR, KYEND, HREC )
 !     ################################################################
@@ -39,25 +40,26 @@
 !!        M.Moge    08/2015 calling ABORT if local subdomain is of size < NHALO
 !!                          (this causes problems on the boundary of the domain)
 !!        M.Moge    08/2015 bug fix : changing the computation of IISIZE
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_SURF_PAR, ONLY : NUNDEF
+USE PARKIND1,          ONLY: JPRB
+USE YOMHOOK,           ONLY: LHOOK, DR_HOOK
 !
+USE MODD_MPIF
+USE MODD_PARAMETERS,   ONLY: JPHEXT, JPVEXT
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll, CRSPD_ll
+USE MODD_SURF_PAR,     ONLY: NUNDEF
+USE MODD_VAR_ll,       ONLY: NPROC, IP, YSPLITTING, NMNH_COMM_WORLD
 !
-USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
-USE PARKIND1  ,ONLY : JPRB
-!
+USE MODE_EXCHANGE_ll,  ONLY: SEND_RECV_FIELD
 USE MODE_ll
-USE MODE_EXCHANGE_ll, ONLY : SEND_RECV_FIELD
-USE MODE_SPLITTING_ll, ONLY : SPLIT2
-USE MODD_VAR_ll, ONLY : NPROC, IP, YSPLITTING, NMNH_COMM_WORLD
-USE MODD_MPIF
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll, CRSPD_ll
-USE MODE_TOOLS_ll, ONLY : INTERSECTION
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
+use mode_msg
+USE MODE_SPLITTING_ll, ONLY: SPLIT2
+USE MODE_TOOLS_ll,     ONLY: INTERSECTION
 !
 IMPLICIT NONE
 !
@@ -97,6 +99,7 @@ TYPE(ZONE_ll), ALLOCATABLE, DIMENSION(:)  :: TZSEND, TZRECV
 TYPE(CRSPD_ll), POINTER      :: TZCRSPDSEND, TZCRSPDRECV
 TYPE(CRSPD_ll), ALLOCATABLE, DIMENSION(:), TARGET :: TZCRSPDSENDTAB, TZCRSPDRECVTAB
 !
+character(len=10) :: ydim1, ydim2, yhalo ! String for error message
 INTEGER :: J
 INTEGER :: INBMSG
 INTEGER :: ICARD
@@ -134,10 +137,11 @@ ALLOCATE(TZSPLITTING_PHYS(NPROC),TZSPLITTING_EXT(NPROC))
 ! Donc on fait un WARNING et un ABORT
 !
 IF ( NHALO > KXEND - KXOR + 1 .OR. NHALO > KYEND - KYOR + 1 ) THEN
-  WRITE(*,*) "ERROR in UPDATE_NHALO1D : size of local subdomain is (", KXEND - KXOR + 1,",",KYEND - KYOR + 1, &
-       ") which is less than NHALO=",NHALO
-  WRITE(*,*) "Try with less MPI processes or a larger domain"
-  CALL ABORT
+  write( ydim1, '( I10 )' ) KXEND - KXOR + 1
+  write( ydim2, '( I10 )' ) KYEND - KYOR + 1
+  write( yhalo, '( I10 )' ) NHALO
+  call Print_msg( NVERB_FATAL, 'GEN', 'UPDATE_NHALO1D', 'local subdomain ('//trim(ydim1)//'x'//trim(ydim2)// &
+                  ') is smaller than NHALO ('//trim(yhalo)//'). Try with less MPI processes or a larger domain.' )
 ENDIF
 !
 ! physical splitting of the field
diff --git a/src/LIB/megan.tar.gz b/src/LIB/megan.tar.gz
index 81d81c29fa83d9f4724ba3e2085cf3613549fbc5..c9f186360fd3c305db25d9c72af24cca87988203 100644
--- a/src/LIB/megan.tar.gz
+++ b/src/LIB/megan.tar.gz
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:4f23728f9dae694a49c7a831686b8ee37a5f0be0b51839fa839bb8e022499bbc
-size 42352
+oid sha256:0d9386c64cbbdf2ffe32f1c52e51e2606869e136a95a65e21f8081961f8e48d3
+size 42865
diff --git a/src/LIB/netcdf-cxx-4.2.tar.gz b/src/LIB/netcdf-cxx-4.2.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..11c1c15536cf186d606f9de7d6468223a68e838d
--- /dev/null
+++ b/src/LIB/netcdf-cxx-4.2.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:95ed6ab49a0ee001255eac4e44aacb5ca4ea96ba850c08337a3e4c9a0872ccd1
+size 703482
diff --git a/src/LIB/s4py/init_gfortran.c b/src/LIB/s4py/init_gfortran.c
new file mode 100644
index 0000000000000000000000000000000000000000..2fb55869b0fa5f71140d424df2568442eed4f059
--- /dev/null
+++ b/src/LIB/s4py/init_gfortran.c
@@ -0,0 +1,15 @@
+//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.
+//-----------------------------------------------------------------
+#ifdef __GFORTRAN__
+/* Philippe Marguinaud idea */
+
+void init_gfortran_big_endian_(){
+  _gfortran_set_convert (2);
+}
+void init_gfortran_native_endian_(){
+  _gfortran_set_convert (0);
+}
+#endif
diff --git a/src/LIB/s4py/libs4py.f90 b/src/LIB/s4py/libs4py.f90
new file mode 100644
index 0000000000000000000000000000000000000000..94a19975455b3621545d5261069e5cdc0dbbf5b8
--- /dev/null
+++ b/src/LIB/s4py/libs4py.f90
@@ -0,0 +1,532 @@
+!MNH_LIC Copyright 2014-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.
+!-----------------------------------------------------------------
+SUBROUTINE WLFIOUV(KRETURNCODE, CDFILE, CDSTATE, KNUMER)
+! ** PURPOSE
+!    Open a LFI file
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    CDFILE: path to file to open
+!    CDSTATE: state of file ('NEW', 'OLD', 'UNKNOWN', 'SCRATCH')
+!    KNUMER: logical unit number associated to file
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!    8 nov 2018, S. Riette: Meso-NH version
+!  P. Wautelet 21/02/2019: add copyright notice + use INT64 for 64-bits integers
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+CHARACTER(LEN=*), INTENT(IN) :: CDFILE
+CHARACTER(LEN=*), INTENT(IN) :: CDSTATE
+INTEGER(KIND=INT64), INTENT(OUT) :: KNUMER
+!
+! II. Local variables declaration
+INTEGER, PARAMETER :: JPMAXLOGICALUNITNUMBER=5000
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+LOGICAL :: LLEXISTS, LLOPEN
+INTEGER(KIND=LFI_INT) :: IRECORDNUMBER
+INTEGER(KIND=LFI_INT) :: INUMER
+!
+! III. File opening
+!
+! III.a Search for an available logical unit
+INUMER=0
+LLEXISTS=.FALSE.
+LLOPEN=.TRUE.
+IRETURNCODE=0
+DO WHILE(INUMER.LT.JPMAXLOGICALUNITNUMBER .AND. (LLOPEN .OR. .NOT. LLEXISTS))
+  INUMER=INUMER+1
+  INQUIRE(UNIT=INUMER, EXIST=LLEXISTS, OPENED=LLOPEN)
+ENDDO
+IF(LLOPEN .OR. .NOT. LLEXISTS) THEN
+  IRETURNCODE=-999
+ENDIF
+!
+#ifdef __GFORTRAN__
+! III.b (Re)-init of libgfortran to enable big_endian file reading
+!**** *** ** * only gfortran will work with this * ** *** ****
+CALL INIT_GFORTRAN_BIG_ENDIAN()
+#endif
+!
+! III.c LFI file opening
+CALL LFIOUV(IRETURNCODE, INUMER, .TRUE., CDFILE, CDSTATE, .FALSE.,&
+           &.FALSE., INT(0, LFI_INT), INT(1, LFI_INT), IRECORDNUMBER)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFIOUV', '')
+ENDIF
+!
+#ifdef __GFORTRAN__
+! III.d (Re)-init of libgfortran to enable native endianess file reading
+!**** *** ** * only gfortran will work with this * ** *** ****
+CALL INIT_GFORTRAN_NATIVE_ENDIAN()
+#endif
+!
+KNUMER=INT(INUMER, 8)
+KRETURNCODE=INT(IRETURNCODE,8)
+
+END SUBROUTINE WLFIOUV
+
+!______________________________________________________________________
+
+SUBROUTINE WLFINAF(KRETURNCODE, KNUMER, KNALDO, KNTROU, KNARES, KNAMAX)
+! ** PURPOSE
+!    Wrapper to LFINAF
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!    KNALDO: Number of actual logical data records (holes excluded)
+!    KNTROU: Number of logical records which are holes
+!    KNARES: Number of logical records which can be written in the reserved part of index (holes included)
+!    KNAMAX: Maximum number of logical records which one can write on logical unit
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+INTEGER(KIND=INT64), INTENT(OUT) :: KNALDO, KNTROU, KNARES, KNAMAX
+!
+! II. Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER
+INTEGER(KIND=LFI_INT) :: INALDO, INTROU, INARES, INAMAX
+!
+! III. LFINAF call
+INUMER=INT(KNUMER, KIND(INUMER))
+CALL LFINAF(IRETURNCODE, INUMER, INALDO, INTROU, INARES, INAMAX)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFINAF', '')
+ENDIF
+KRETURNCODE=INT(IRETURNCODE,8)
+KNALDO=INT(INALDO, 8)
+KNTROU=INT(INTROU, 8)
+KNARES=INT(INARES, 8)
+KNAMAX=INT(INAMAX, 8)
+!
+END SUBROUTINE WLFINAF
+
+!______________________________________________________________________
+
+SUBROUTINE WLFIPOS(KRETURNCODE, KNUMER)
+! ** PURPOSE
+!    Wrapper to LFIPOS
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+!
+! II. Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER
+!
+! III. LFIPOS call
+INUMER=INT(KNUMER, KIND(INUMER))
+CALL LFIPOS(IRETURNCODE, INUMER)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFIPOS', '')
+ENDIF
+KRETURNCODE=INT(IRETURNCODE,8)
+!
+END SUBROUTINE WLFIPOS
+
+!______________________________________________________________________
+
+SUBROUTINE WLFICAS(KRETURNCODE, KNUMER, CDNOMA, KLONG, KPOSEX, LDAVAN)
+! ** PURPOSE
+!    Wrapper to LFICAS
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!    CDNOMA: name of next record
+!    KLONG: length of next record
+!    KPOSEX: position in file of the first word of next record
+!    LDAVAN: true if one must move forward the pointer
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!                             use of true logical instead of integer
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+CHARACTER(LEN=16), INTENT(OUT) :: CDNOMA
+INTEGER(KIND=INT64), INTENT(OUT) :: KLONG, KPOSEX
+LOGICAL, INTENT(IN) :: LDAVAN
+!
+! II. Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER
+INTEGER(KIND=LFI_INT) :: ILONG, IPOSEX
+!
+! III. LFICAS call
+INUMER=INT(KNUMER, KIND(INUMER))
+CALL LFICAS(IRETURNCODE, INUMER, CDNOMA, ILONG, IPOSEX, LDAVAN)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFICAS', '')
+ENDIF
+KRETURNCODE=INT(IRETURNCODE,8)
+KLONG=INT(ILONG, 8)
+KPOSEX=INT(IPOSEX, 8)
+!
+END SUBROUTINE WLFICAS
+
+!______________________________________________________________________
+
+SUBROUTINE WLFINFO(KRETURNCODE, KNUMER, CDNOMA, KLONG, KPOSEX)
+! ** PURPOSE
+!    Wrapper to LFINFO
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!    CDNOMA: name of record
+!    KLONG: length of record
+!    KPOSEX: position in file of the first word of next record
+
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+CHARACTER(LEN=16), INTENT(IN) :: CDNOMA
+INTEGER(KIND=INT64), INTENT(OUT) :: KLONG, KPOSEX
+!
+! II. Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER
+INTEGER(KIND=LFI_INT) :: ILONG, IPOSEX
+!
+! III. LFINFO call
+INUMER=INT(KNUMER, KIND(INUMER))
+CALL LFINFO(IRETURNCODE, INUMER, CDNOMA, ILONG, IPOSEX)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFINFO', '')
+ENDIF
+KRETURNCODE=INT(IRETURNCODE,8)
+KLONG=INT(ILONG, 8)
+KPOSEX=INT(IPOSEX, 8)
+!
+END SUBROUTINE WLFINFO
+
+!______________________________________________________________________
+
+SUBROUTINE WLFILEC(KRETURNCODE, KNUMER, CDNOMA, KLONG, LDABORT, KTAB)
+! ** PURPOSE
+!    Wrapper to LFILEC
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!    CDNOMA: name of record
+!    KLONG: length of record
+!    LDABORT: must we raise an exception on error -21 ?
+!    KTAB: integer array read
+
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!                             use of true logical instead of integer
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+CHARACTER(LEN=16), INTENT(IN) :: CDNOMA
+INTEGER(KIND=INT64), INTENT(IN) :: KLONG
+LOGICAL, INTENT(IN) :: LDABORT
+INTEGER(KIND=INT64), INTENT(OUT), DIMENSION(KLONG) :: KTAB
+!
+! II. Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER, ILONG
+INTEGER(KIND=LFI_INT) :: ITOTLONG, IPOSEX
+INTEGER(KIND=INT64), ALLOCATABLE :: KTABTOT(:)
+!
+! III. LFILEC call
+INUMER=INT(KNUMER, KIND(INUMER))
+ILONG=INT(KLONG, KIND(ILONG))
+!
+!Because NERFAG cannot be changed easily, we read the entire article
+!even if only a part is needed, otherwise NERFAG=2 would be sufficient
+CALL WLFINFO(IRETURNCODE, INUMER, CDNOMA, ITOTLONG, IPOSEX)
+IF(ILONG .LT. ITOTLONG) THEN
+  ALLOCATE(KTABTOT(ITOTLONG))
+  CALL LFILEC(IRETURNCODE, INUMER, CDNOMA, KTABTOT, ITOTLONG)
+ELSE
+  CALL LFILEC(IRETURNCODE, INUMER, CDNOMA, KTAB, ILONG)
+ENDIF
+IF (IRETURNCODE/=0 .AND. .NOT. (IRETURNCODE==-21 .AND. .NOT. LDABORT)) THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFILEC', '')
+  KRETURNCODE=INT(IRETURNCODE,8)
+ELSE
+  KRETURNCODE=INT(0,8)
+ENDIF
+IF(ILONG .LT. ITOTLONG) THEN
+  KTAB(:)=KTABTOT(1:ILONG)
+  DEALLOCATE(KTABTOT)
+ENDIF
+!
+END SUBROUTINE WLFILEC
+
+!_________________________________________________________________________________________________
+
+SUBROUTINE WGET_COMPHEADER(KSIZE, KDATA, KLONG, KLONU, KTYPECOMP)
+! ** PURPOSE
+!    Wrapper to GET_COMPHEADER
+!
+! ** DUMMY ARGUMENTS
+!    KSIZE: Size of KDATA
+!    KDATA: (part of) integer array read from record
+!    KLONG: length of compressed data
+!    KLONU: length of uncompressed data
+!    KTYPECOMP: type of compression
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(IN) :: KSIZE
+INTEGER(KIND=INT64), INTENT(IN), DIMENSION(KSIZE) :: KDATA
+INTEGER(KIND=INT64), INTENT(IN) :: KLONG
+INTEGER(KIND=INT64), INTENT(OUT) :: KLONU
+INTEGER(KIND=INT64), INTENT(OUT) :: KTYPECOMP
+!
+! II. Local variables declaration
+INTEGER :: ILONG
+INTEGER :: ILONU, ITYPECOMP
+!
+! III. GET_COMPHEADER call
+#ifdef MNH_COMPRESS
+ILONG=KLONG
+CALL GET_COMPHEADER(KDATA, ILONG, ILONU, ITYPECOMP)
+KLONU=INT(ILONU, 8)
+KTYPECOMP=INT(ITYPECOMP, 8)
+#else
+print*, "Error: code was compiled without COMPRESS support, please define MNH_COMPRESS"
+KLONU=INT(-1, 8)
+KTYPECOMP=INT(-1, 8)
+#endif
+!
+END SUBROUTINE WGET_COMPHEADER
+
+!_________________________________________________________________________________________________
+
+SUBROUTINE WCOMPRESS_FIELD(KTAB, KX, KY, KSIZEDECOMP, KSIZECOMP)
+! ** PURPOSE
+!    Wrapper to COMPRESS_FIELD
+!
+! ** DUMMY ARGUMENTS
+!    KTAB: decompressed integer array (IN)
+!          compressed data integer array (OUT)
+!    KX, KY: x and y dimensions
+!    KSIZEDECOMP: size of decompressed data
+!    KSIZECOMP: size of compressed integer array
+!
+! ** AUTHOR
+!    16 July 2015, S. Riette
+!
+! ** MODIFICATIONS
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(IN) :: KX, KY, KSIZEDECOMP
+INTEGER(KIND=INT64), INTENT(INOUT), DIMENSION(KSIZEDECOMP) :: KTAB
+INTEGER(KIND=INT64), INTENT(OUT) :: KSIZECOMP
+!
+! II. Local variables declaration
+INTEGER :: ISIZEDECOMP, ISIZECOMP, IX, IY
+!
+! III. COMPRESS_FIELD call
+#ifdef MNH_COMPRESS
+ISIZEDECOMP=KSIZEDECOMP
+IX=KX
+IY=KY
+CALL COMPRESS_FIELD(KTAB, IX, IY, ISIZEDECOMP, ISIZECOMP)
+KSIZECOMP=ISIZECOMP
+#else
+print*, "Error: code was compiled without COMPRESS support, please define MNH_COMPRESS"
+KSIZECOMP=INT(-1, 8)
+#endif
+!
+END SUBROUTINE WCOMPRESS_FIELD
+
+!_________________________________________________________________________________________________
+
+SUBROUTINE WDECOMPRESS_FIELD(KSIZE, KCOMP, KTYPECOMP, KLDECOMP, KDECOMP)
+! ** PURPOSE
+!    Wrapper to DECOMPRESS_FIELD
+!
+! ** DUMMY ARGUMENTS
+!    KSIZE: size of KCOMP
+!    KCOMP: compressed integer array
+!    KTYPECOMP: type of compression
+!    KDECOMP: decompressed data integer array
+!    KLDECOMP: length of decompressed data
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(IN) :: KSIZE
+INTEGER(KIND=INT64), INTENT(IN), DIMENSION(KSIZE) :: KCOMP
+INTEGER(KIND=INT64), INTENT(IN) :: KTYPECOMP
+INTEGER(KIND=INT64), INTENT(IN) :: KLDECOMP
+INTEGER(KIND=INT64), INTENT(OUT), DIMENSION(KLDECOMP) :: KDECOMP
+!
+! II. Local variables declaration
+INTEGER :: ITYPECOMP, ILDECOMP
+!
+! III. DECOMPRESS_FIELD call
+#ifdef MNH_COMPRESS
+ILDECOMP=KLDECOMP
+ITYPECOMP=KTYPECOMP
+CALL DECOMPRESS_FIELD(KDECOMP, ILDECOMP, KCOMP, SIZE(KCOMP,1), ITYPECOMP)
+#else
+print*, "Error: code was compiled without COMPRESS support, please define MNH_COMPRESS"
+KDECOMP(:)=-1
+#endif
+!
+END SUBROUTINE WDECOMPRESS_FIELD
+
+!_________________________________________________________________________________________________
+
+SUBROUTINE WLFIFER(KRETURNCODE, KNUMER, CDSTTC)
+! ** PURPOSE
+!    Close a LFI file
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!    CDSTTC: close status ('KEEP', 'SCRATCH', 'DELETE')
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+CHARACTER(LEN=7), INTENT(IN) :: CDSTTC
+!
+! II.  Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER
+!
+! III. LFIFER call
+INUMER=INT(KNUMER, KIND(INUMER))
+CALL LFIFER(IRETURNCODE, INUMER, CDSTTC)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFIFER', '')
+ENDIF
+KRETURNCODE=INT(IRETURNCODE,8)
+!
+END SUBROUTINE WLFIFER
+
+!_________________________________________________________________________________________________
+
+SUBROUTINE WLFIECR(KRETURNCODE, KNUMER, CDNOMA, KSIZE, KTAB)
+! ** PURPOSE
+!    Wrapper to LFIECR
+!
+! ** DUMMY ARGUMENTS
+!    KRETURNCODE: error code
+!    KNUMER: logical unit number associated to file
+!    CDNOMA: name of field to write
+!    KSIZE: Size of KTAB
+!    KTAB: integer array to write
+!
+! ** AUTHOR
+!    9 April 2014, S. Riette
+!
+! ** MODIFICATIONS
+!    26 sept 2014, S. Riette: use 64bits LFI subroutines
+!    8 nov 2018, S. Riette: Meso-NH version
+!
+! I. Dummy arguments declaration
+use iso_fortran_env, only: INT64
+IMPLICIT NONE
+INTEGER(KIND=INT64), INTENT(OUT) :: KRETURNCODE
+INTEGER(KIND=INT64), INTENT(IN) :: KNUMER
+CHARACTER(LEN=16), INTENT(IN) :: CDNOMA
+INTEGER(KIND=INT64), INTENT(IN) :: KSIZE
+INTEGER(KIND=INT64), INTENT(IN), DIMENSION(KSIZE) :: KTAB
+!
+! II.  Local variables declaration
+INTEGER(KIND=LFI_INT) :: IRETURNCODE
+INTEGER(KIND=LFI_INT) :: INUMER
+INTEGER(KIND=LFI_INT) :: ISIZE
+!
+! III. LFIECR call
+INUMER=INT(KNUMER, KIND(INUMER))
+ISIZE=INT(KSIZE, KIND(ISIZE))
+CALL LFIECR(IRETURNCODE, INUMER, CDNOMA, KTAB, ISIZE)
+IF(IRETURNCODE/=0)THEN
+  CALL LFIENG(INUMER, INT(0, LFI_INT), IRETURNCODE, .FALSE., '', 'LFIECR', '')
+ENDIF
+KRETURNCODE=INT(IRETURNCODE,8)
+!
+END SUBROUTINE WLFIECR
+
+!_________________________________________________________________________________________________
diff --git a/src/MNH/BASIC.f90 b/src/MNH/BASIC.f90
old mode 100644
new mode 100755
index 854c2bc061371c9013b47bae9cbb93f6b8f0d6b0..0160a3c40994be611effb8b9506eabb2fa0f9bf0
--- a/src/MNH/BASIC.f90
+++ b/src/MNH/BASIC.f90
@@ -1,3 +1,5 @@
+! Modifications:
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !========================================================================
 !
@@ -35369,7 +35371,7 @@ CONTAINS
 !!
 !!    EXTERNAL
 !!    --------
-!!    none
+use mode_msg
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -35380,7 +35382,7 @@ CONTAINS
 IMPLICIT NONE
 ! check if output array is large enough
 IF (KINDEXDIM.LT.942) THEN
-  STOP 'CH_NONZEROTERMS ERROR: array KINDEX is too small!'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_NONZEROTERMS_AQ', 'array KINDEX is too small' )
 END IF
  KINDEX(1, 1)=3
  KINDEX(2, 1)=1
@@ -37305,7 +37307,7 @@ END SUBROUTINE CH_NONZEROTERMS_AQ
 !!
 !!    EXTERNAL
 !!    --------
-!!    none
+use mode_msg
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -37316,7 +37318,7 @@ END SUBROUTINE CH_NONZEROTERMS_AQ
 IMPLICIT NONE
 ! check if output array is large enough
 IF (KINDEXDIM.LT.606) THEN
-  STOP 'CH_NONZEROTERMS ERROR: array KINDEX is too small!'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_NONZEROTERMS_GAZ', 'array KINDEX is too small' )
 END IF
  KINDEX(1, 1)=3
  KINDEX(2, 1)=1
@@ -38643,7 +38645,7 @@ CONTAINS
 !!
 !!    EXTERNAL
 !!    --------
-!!    none
+use mode_msg
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -38662,7 +38664,7 @@ IMPLICIT NONE
 !!    ---------------------
 ! check if output array is large enough
 IF (KSPARSEDIM.LT.745) THEN
-  STOP 'CH_SPARSE ERROR: array KSPARSE is too small!'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SPARSE_AQ', 'array KSPARSE is too small' )
 END IF
 !O3/O3
  KSPARSE(1, 1)=1
@@ -40935,7 +40937,7 @@ END SUBROUTINE CH_SPARSE_AQ
 !!
 !!    EXTERNAL
 !!    --------
-!!    none
+use mode_msg
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -40954,7 +40956,7 @@ IMPLICIT NONE
 !!    ---------------------
 ! check if output array is large enough
 IF (KSPARSEDIM.LT.449) THEN
-  STOP 'CH_SPARSE ERROR: array KSPARSE is too small!'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SPARSE_GAZ', 'array KSPARSE is too small' )
 END IF
 !O3/O3
  KSPARSE(1, 1)=1
diff --git a/src/MNH/adjust_langlois.f90 b/src/MNH/adjust_langlois.f90
index 57f958bdff4c9b4d77107c4f09de5b9b486fa6c4..ed6df1d2ac06b4b3574e5b8c5b2673e8f3bcac0f 100644
--- a/src/MNH/adjust_langlois.f90
+++ b/src/MNH/adjust_langlois.f90
@@ -118,7 +118,6 @@ USE MODD_BUDGET
 !
 USE MODI_CONDENSATION
 USE MODI_BUDGET
-USE MODE_FMWRIT
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90
index a4a4038b69145f130c04bb146b91eaab7b9809ac..5a824682580112b59bb000187ea54dcb2bc9d01d 100644
--- a/src/MNH/adv_forcingn.f90
+++ b/src/MNH/adv_forcingn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     #####################
       MODULE MODI_ADV_FORCING_n
@@ -100,21 +100,17 @@ END MODULE MODI_ADV_FORCING_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_DATETIME
-USE MODE_FM
-USE MODE_IO_ll
-!
+USE MODD_ADVFRC_n     ! Modules for time evolving advfrc
+USE MODD_BUDGET
 USE MODD_DYN
 USE MODD_LUNIT, ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_TIME
-USE MODD_BUDGET
 !
-USE MODI_BUDGET
+USE MODE_DATETIME
 !
-USE MODD_ADVFRC_n     ! Modules for time evolving advfrc
+USE MODI_BUDGET
 USE MODI_SHUMAN
-!USE MODD_FRC
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/advec_4th_order_aux.f90 b/src/MNH/advec_4th_order_aux.f90
index 31f2eec8393a2d97d3aed211e2d96ea186df5624..47579b54c905adf48cfb76555992c13f4b2c9304 100644
--- a/src/MNH/advec_4th_order_aux.f90
+++ b/src/MNH/advec_4th_order_aux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-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.
 !-----------------------------------------------------------------
 !     ###############################
@@ -108,11 +108,9 @@ END MODULE MODI_ADVEC_4TH_ORDER_AUX
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-!
+USE MODD_ARGSLIST_ll, ONLY: HALO2LIST_ll
 USE MODD_CONF
-USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
-USE MODE_IO_ll
+!
 #ifdef _OPENACC
 USE MODE_DEVICE
 #endif
diff --git a/src/MNH/advec_weno_k_3_aux.f90 b/src/MNH/advec_weno_k_3_aux.f90
index c290158db699a34607e0c2fbec424c30fc555bde..180b3fc3164a9ec1248884f35b75b12cbdc7baa8 100644
--- a/src/MNH/advec_weno_k_3_aux.f90
+++ b/src/MNH/advec_weno_k_3_aux.f90
@@ -1,7 +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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!-----------------------------------------------------------------
 !     ##############################
       MODULE MODI_ADVEC_WENO_K_3_AUX
 !     ##############################
@@ -287,9 +291,11 @@ END MODULE MODI_ADVEC_WENO_K_3_AUX
 !!
 !-------------------------------------------------------------------------------
 !
-USE MODE_ll
-USE MODD_LUNIT
 USE MODD_CONF
+USE MODD_LUNIT
+!
+USE MODE_ll
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -516,9 +522,7 @@ ZFNEG3(IW,:,:)   = 1./6 * (-1.0*PSRC(IW-1,:,:) + 5.0*PSRC(IW,:,:)   + 2.0*PSRC(I
  ZOMN3(IW-1:IW,:,:) = 3./10. / (ZEPS + ZBNEG3(IW-1:IW,:,:))**2 ! Non-normalized weight IW,IW-1
 !
  ELSE ! East boundary is proc border, with NHALO < 3 on west side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on west side'
-  CALL ABORT  
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_UX','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on west side')
  ENDIF
 !
  ! Third positive stencil, needs indices i, i+1, i+2
@@ -601,9 +605,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/west-int not parallelisable with NHALO < 3' 
- CALL ABORT 
- STOP ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_UX','WENO5/west-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >3 => WENO5 for all boundary points
@@ -758,9 +760,7 @@ IF( LEAST_ll() ) THEN
  ZOMN2(IE-1:IE,:,:) = 3./5. / (ZEPS + ZBNEG2(IE-1:IE,:,:))**2 ! Non-normalized weight IE-1,IE
 !
  ELSE ! West boundary is proc border, with NHALO < 3 on east side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on east side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_UX','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on east side')
  ENDIF
 !
  ! First positive stencil, needs indices i-2, i-1, i 
@@ -843,9 +843,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/east-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_UX','WENO5/east-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >= 3 => WENO5 for all boundary points
@@ -961,9 +959,11 @@ END SUBROUTINE ADVEC_WENO_K_3_UX
 !!
 !------------------------------------------------------------------------------
 !
-USE MODE_ll
-USE MODD_LUNIT
 USE MODD_CONF
+USE MODD_LUNIT
+!
+USE MODE_ll
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -1191,9 +1191,7 @@ IF( LWEST_ll() ) THEN
  ZOMN3(IW:IW+1,:,:) = 3./10. / (ZEPS + ZBNEG3(IW:IW+1,:,:))**2 ! Non-normalized weight IW+1,IW
 !
  ELSE ! East boundary is proc border, with NHALO < 3 on west side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on west side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MX','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on west side')
  ENDIF
 ! 
  ! Third positive stencil, needs indices i-1, i, i+1
@@ -1276,9 +1274,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/west-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MX','WENO5/west-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >3 => WENO5 for all boundary points
@@ -1432,9 +1428,7 @@ IF(LEAST_ll() ) THEN
  ZOMN2(IE:IE+1,:,:) = 3./5. / (ZEPS + ZBNEG2(IE:IE+1,:,:))**2 ! Non-normalized weight IE,IE+1
 !
  ELSE ! West boundary is proc border, with NHALO < 3 on east side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on east side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MX','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on east side')
  ENDIF
 !
  ! First positive stencil, needs indices i-3, i-2, i-1 
@@ -1516,9 +1510,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/east-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MX','WENO5/east-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >= 3 => WENO5 for all boundary points
@@ -1635,9 +1627,11 @@ END SUBROUTINE ADVEC_WENO_K_3_MX
 !!
 !-------------------------------------------------------------------------------
 !
-USE MODE_ll
-USE MODD_LUNIT
 USE MODD_CONF
+USE MODD_LUNIT
+!
+USE MODE_ll
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -1867,9 +1861,7 @@ IF(LSOUTH_ll()) THEN
  ZOMN3(:,IS:IS+1,:) = 3./10. / (ZEPS + ZBNEG3(:,IS:IS+1,:))**2 ! Non-normalized weight IS+1,IS
 ! 
  ELSE ! North boundary is proc border, with NHALO < 3 on south side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MY','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side')
  ENDIF
 ! 
  ! Third positive stencil, needs indices i-1, i, i+1
@@ -1953,9 +1945,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/south-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MY','WENO5/south-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >3 => WENO5 for all boundary points
@@ -2109,9 +2099,7 @@ IF( LNORTH_ll() ) THEN
  ZOMN2(:,IN:IN+1,:) = 3./5. / (ZEPS + ZBNEG2(:,IN:IN+1,:))**2 ! Non-normalized weight IN,IN+1
 !
  ELSE ! South boundary is proc border, with NHALO < 3 on south side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MY','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side')
  ENDIF
 !
  ! First positive stencil, needs indices i-3, i-2, i-1 
@@ -2193,9 +2181,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/north-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_MY','WENO5/north-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >= 3 => WENO5 for all boundary points
@@ -2311,9 +2297,11 @@ END SUBROUTINE ADVEC_WENO_K_3_MY
 !!
 !-------------------------------------------------------------------------------
 !
-USE MODE_ll
-USE MODD_LUNIT
 USE MODD_CONF
+USE MODD_LUNIT
+!
+USE MODE_ll
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -2544,9 +2532,7 @@ IF(LSOUTH_ll() ) THEN
  ZOMN3(:,IS-1:IS,:) = 3./10. / (ZEPS + ZBNEG3(:,IS-1:IS,:))**2 ! Non-normalized weight IS,IS-1
 ! 
  ELSE ! North boundary is proc border, with NHALO < 3 on south side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_VY','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on south side')
  ENDIF
 ! 
  ! Third positive stencil, needs indices i, i+1, i+2
@@ -2631,9 +2617,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/south-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_VY','WENO5/south-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >3 => WENO5 for all boundary points
@@ -2787,9 +2771,7 @@ IF(LNORTH_ll()) THEN
  ZOMN2(:,IN-1:IN,:) = 3./5. / (ZEPS + ZBNEG2(:,IN-1:IN,:))**2 ! Non-normalized weight IN-1,IN
 !
  ELSE ! South boundary is proc border, with NHALO < 3 on north side
-  PRINT *,'ERROR : WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on north side'
-  CALL ABORT
-  STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_VY','WENO5/CYCL fluxes calculation needs JPHEXT (&NHALO) >= 3 on north side')
  ENDIF
 !
  ! First positive stencil, needs indices i-2, i-1, i 
@@ -2872,9 +2854,7 @@ ELSE
  !-----------------------------------------------------------------------------
 !
  IF (NHALO<3) THEN
- PRINT *,'ERROR : WENO5/north-int not parallelisable with NHALO < 3' 
- CALL ABORT
- STOP  ' Error in advec_weno_k_3_aux.f90 '
+  call Print_msg(NVERB_FATAL,'GEN','ADVEC_WENO_K_3_VY','WENO5/north-int not parallelisable with NHALO < 3')
  ELSEIF (NHALO>=3) THEN
  !---------------------------------------------------------------------------
  ! NHALO >= 3 => WENO5 for all boundary points
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/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 48652670a498fd7faf429588d393cc22a038107a..e178f2fffeb22f12126b5e18ab0a503bf56cf5c0 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###########################
@@ -17,7 +17,7 @@ INTERFACE
                             PRTHS, PRRS, PRTKES, PRSVS,                        &
                             PRTHS_CLD, PRRS_CLD, PRSVS_CLD, PRTKES_ADV         )
 !
-USE MODD_IO_ll,     ONLY: TFILEDATA
+USE MODD_IO,     ONLY: TFILEDATA
 USE MODD_TYPE_DATE, ONLY: DATE_TIME
 !
 LOGICAL,                INTENT(IN)   ::  OCLOSE_OUT   ! switch for syncronous
@@ -157,19 +157,18 @@ USE MODD_VAR_ll, ONLY : MPI_PRECISION,NMNH_COMM_WORLD
 #endif
 USE MODD_BUDGET
 USE MODD_CST 
-USE MODD_CTURB,     ONLY: XTKEMIN
-USE MODD_CONF,      ONLY: LNEUTRAL,NHALO,L1D, L2D
-USE MODD_IO_ll,     ONLY: TFILEDATA
-USE MODD_LUNIT_n,   ONLY: TLUOUT
+USE MODD_CTURB,          ONLY: XTKEMIN
+USE MODD_CONF,           ONLY: LNEUTRAL,NHALO,L1D, L2D
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_PARAM_n
-USE MODD_TYPE_DATE, ONLY: DATE_TIME
+USE MODD_TYPE_DATE,      ONLY: DATE_TIME
 USE MODD_BLOWSNOW
 USE MODD_BLOWSNOW_n
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD,     ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
-USE MODE_IO_ll
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
 USE MODE_MSG
 !
@@ -456,7 +455,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFLU)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFLU)
 !
   IF (.NOT. L2D) THEN
     TZFIELD%CMNHNAME   = 'CFLV'
@@ -469,7 +468,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFLV)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFLV)
   END IF
 !
     TZFIELD%CMNHNAME   = 'CFLW'
@@ -482,7 +481,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFLW)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFLW)
 !
     TZFIELD%CMNHNAME   = 'CFL'
     TZFIELD%CSTDNAME   = ''
@@ -494,7 +493,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFL)
 END IF
 !
 !* prints in the output file the maximum CFL
diff --git a/src/MNH/advecuvw_rk.f90 b/src/MNH/advecuvw_rk.f90
index 72a71e156d021e54e54915622d4df3096257d6db..547384163f0428de088a68617036ad911b1e0c97 100644
--- a/src/MNH/advecuvw_rk.f90
+++ b/src/MNH/advecuvw_rk.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.
 !-----------------------------------------------------------------
 !     #####################
@@ -127,24 +127,27 @@ END MODULE MODI_ADVECUVW_RK
 !!                  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!                  F.Auguste and C.Lac : 08/16 : CEN4TH with RKC4
 !!                  C.Lac   10/16 : Correction on RK loop
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_ARGSLIST_ll, ONLY: LIST_ll, HALO2LIST_ll
+USE MODD_CONF,        ONLY: NHALO
+USE MODD_PARAMETERS,  ONLY: JPVEXT
+!
 USE MODE_ll
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll, HALO2LIST_ll
-USE MODD_PARAMETERS,  ONLY : JPVEXT
-USE MODD_CONF,        ONLY : NHALO
+USE MODE_MPPDB
+use mode_msg
 !
-USE MODI_SHUMAN
-USE MODI_ADVECUVW_WENO_K
 USE MODI_ADV_BOUNDARIES
+USE MODI_ADVECUVW_4TH
+USE MODI_ADVECUVW_WENO_K
 USE MODI_GET_HALO
-USE MODE_MPPDB
+USE MODI_SHUMAN
 !
-USE MODI_ADVECUVW_4TH
 !
 #ifdef _OPENACC
 USE MODE_DEVICE
@@ -276,8 +279,7 @@ SELECT CASE (HTEMP_SCHEME)
  CASE('RK65')
   ISPL = 6
  CASE DEFAULT
-  PRINT *,'ERROR: UNKNOWN HTEMP_SCHEME'
-  CALL ABORT()
+  call Print_msg(NVERB_FATAL,'GEN','ADVECUVW_RK','unknown HTEMP_SCHEME')
 END SELECT
 !
 !
diff --git a/src/MNH/aer_monitorn.f90 b/src/MNH/aer_monitorn.f90
index 245e8f67283a5e9db1824466f63025377bc5678d..21f1f177fdb72649cc8f5074726840a36ea06626 100644
--- a/src/MNH/aer_monitorn.f90
+++ b/src/MNH/aer_monitorn.f90
@@ -72,7 +72,8 @@ END MODULE MODI_AER_MONITOR_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!
+!
+!!    Bielli S. (02/2019) : Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!    EXTERNAL
 !!    --------
 !
@@ -112,7 +113,7 @@ USE MODD_LBC_n, ONLY: CLBCX, &!X-direction LBC type at left(1)
                               ! and right(2) boundaries
 USE MODD_CLOUDPAR_n, ONLY: NSPLITR  ! Nb of required small time step integration
                                     ! for rain sedimentation computation
-USE MODD_CONF,      ONLY: L1D, L2D
+USE MODD_CONF,      ONLY: L1D, L2D, NVERB
 USE MODD_CONF_n,    ONLY: LUSERC,&    ! Logical to use clouds
                           LUSERV,&    ! Logical to use wapor water
                           LUSERR,&    ! Logical to use rain water
@@ -185,9 +186,14 @@ IKE = IKU - JPVEXT
 !
 !*       1.2   calculate timestep variables
 !
+! ++ JORIS DEBUG ++
+IF (NVERB == 10) WRITE(*,*) 'dans aer_monitorn.f90 1.'
+! -- JORIS DEBUG --
 !
-  XRSVS(:,:,:,NSV_DSTBEG:NSV_DSTEND) = &
-                      MAX(XRSVS(:,:,:,NSV_DSTBEG:NSV_DSTEND), 0.)  
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
+!  XRSVS(:,:,:,NSV_DSTBEG:NSV_DSTEND) = &
+!                      MAX(XRSVS(:,:,:,NSV_DSTBEG:NSV_DSTEND), 0.)  
+! -- PIERRE / MARINE SSA DUST - MODIF --
 !
 !*       2.   Sedimentation of aerosols 
 !              ------------------------
@@ -198,8 +204,11 @@ IF (LDUST.AND.LSEDIMDUST) THEN
   DO JSV = NSV_DSTBEG, NSV_DSTEND
     ZSVT(:,:,:,JSV-NSV_DSTBEG+1) = XRSVS(:,:,:,JSV) * PTSTEP / XRHODJ(:,:,:)
   ENDDO
-  CALL DUST_FILTER(ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:),&
-                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE)) 
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
+ CALL DUST_FILTER(ZSVT,XRHODREF)
+!  CALL DUST_FILTER(ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:),&
+!                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE)) 
+! -- PIERRE / MARINE SSA DUST - MODIF --
   CALL SEDIM_DUST(XTHT(IIB:IIE,IJB:IJE,IKB:IKE), PTSTEP,&
                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), &
                   XPABST(IIB:IIE,IJB:IJE,IKB:IKE), &
@@ -222,14 +231,17 @@ IF ((LSALT).AND.(LSEDIMSALT)) THEN
     ZSVT(:,:,:,JSV-NSV_SLTBEG+1) = XRSVS(:,:,:,JSV) * PTSTEP / XRHODJ(:,:,:)
   ENDDO
 
+! ++ JORIS DEBUG ++
   CALL SALT_FILTER(ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:),&
-                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE)) 
+                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE))
+! 
   CALL SEDIM_SALT(XTHT(IIB:IIE,IJB:IJE,IKB:IKE),PTSTEP,&
                   XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE), &
                   XPABST(IIB:IIE,IJB:IJE,IKB:IKE), &
                   XZZ(IIB:IIE,IJB:IJE,IKB:IKE+1),    &
                   ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,:))  !ppp (concentration)
-!
+! -- JORIS DEBUG --
+
 DO JSV = NSV_SLTBEG, NSV_SLTEND
  XRSVS(IIB:IIE,IJB:IJE,IKB:IKE,JSV) = &
              ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,JSV-NSV_SLTBEG+1)  *&
@@ -365,7 +377,26 @@ SELECT CASE (CCLOUD)
                               ZVMASSMIN(IIB:IIE,IJB:IJE,IKB:IKE,:),&
                               PCCT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_C2R2BEG+1),&
                               PCRT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_C2R2BEG+2) )
-
+!++th++ 05/05/17 ajout LIMA
+CASE ('LIMA')
+  CALL AER_WET_DEP_KMT_WARM  (NSPLITR, PTSTEP,                     &
+                              XZZ(IIB:IIE,IJB:IJE,IKB:IKE),        &
+                              XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
+                              XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
+                              XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
+                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
+                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
+                              ZSVDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
+                              XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
+                              XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
+                              ZRGDST(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
+                              XEVAP3D(IIB:IIE,IJB:IJE,IKB:IKE),    &
+                              NMODE_DST,                           &
+                              ZDENSITY(IIB:IIE,IJB:IJE,IKB:IKE,:), &
+                              ZVMASSMIN(IIB:IIE,IJB:IJE,IKB:IKE,:),&
+                              PCCT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_LIMA_NC),&
+                              PCRT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_LIMA_NR) )
+!--th--
 END SELECT
 
 !     3.5 Compute return to moment vector
@@ -441,25 +472,25 @@ ZDENSITY(:,:,:,:) = XDENSITY_SALT
 
 !
 !     4.1 Minimum mass to transfer between dry mass or in-cloud droplets
-
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
 DO JN=1,NMODE_SLT
   IMODEIDX = JPSALTORDER(JN)
    IF (CRGUNITD=="MASS") THEN
-    ZINIRADIUS(JN) = XINIRADIUS(IMODEIDX) * EXP(-3.*(LOG(XINISIG(IMODEIDX)))**2)
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) * EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
    ELSE
-    ZINIRADIUS(JN) = XINIRADIUS(IMODEIDX)
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX)
    END IF
    IF (LVARSIG) THEN
-    ZSIGMIN = XSIGMIN
+    ZSIGMIN = XSIGMIN_SLT
    ELSE
-    ZSIGMIN = XINISIG(IMODEIDX)
+    ZSIGMIN = XINISIG_SLT(IMODEIDX)
    ENDIF
-   ZMASSMIN(JN) = XN0MIN(IMODEIDX) * (ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(ZSIGMIN)**2)
+   ZMASSMIN(JN) = XN0MIN_SLT(IMODEIDX) * (ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(ZSIGMIN)**2)
 ! volume/um3 =>  #/molec_{air}
    ZVMASSMIN(:,:,:,JN)=  ZMASSMIN(JN) * XMD * XPI * 4./3. * XDENSITY_SALT  / &
-                 (XMOLARWEIGHT_SALT*XM3TOUM3*XRHODREF(:,:,:))
+                 (XMOLARWEIGHT_SALT*XM3TOUM3_SALT*XRHODREF(:,:,:))
 ENDDO
-  
+! -- PIERRE / MARINE SSA DUST - MODIF --
 !
 
 !     4.2 Derive moment from aerosol moments sources
@@ -536,7 +567,25 @@ SELECT CASE (CCLOUD)
                               ZVMASSMIN(IIB:IIE,IJB:IJE,IKB:IKE,:),&
                               PCCT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_C2R2BEG+1),&
                               PCRT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_C2R2BEG+2) )
-
+!++th++05/05/17 ajout LIMA
+  CALL AER_WET_DEP_KMT_WARM  (NSPLITR, PTSTEP,                     &
+                              XZZ(IIB:IIE,IJB:IJE,IKB:IKE),        &
+                              XRHODREF(IIB:IIE,IJB:IJE,IKB:IKE),   &
+                              XRT(IIB:IIE,IJB:IJE,IKB:IKE,2),      &
+                              XRT(IIB:IIE,IJB:IJE,IKB:IKE,3),      &
+                              ZRCS(IIB:IIE,IJB:IJE,IKB:IKE),       &
+                              ZRRS(IIB:IIE,IJB:IJE,IKB:IKE),       &
+                              ZSVSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
+                              XTHT(IIB:IIE,IJB:IJE,IKB:IKE),       &
+                              XPABST(IIB:IIE,IJB:IJE,IKB:IKE),     &
+                              ZRGSLT(IIB:IIE,IJB:IJE,IKB:IKE,:),   &
+                              XEVAP3D(IIB:IIE,IJB:IJE,IKB:IKE),    &
+                              NMODE_SLT,                           &
+                              ZDENSITY(IIB:IIE,IJB:IJE,IKB:IKE,:), &
+                              ZVMASSMIN(IIB:IIE,IJB:IJE,IKB:IKE,:),&
+                              PCCT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_LIMA_NC),&
+                              PCRT=ZSVT(IIB:IIE,IJB:IJE,IKB:IKE,NSV_LIMA_NR) )
+!--th--
 END SELECT
 
 !     4.5 Compute return to moment vector
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/aerozon.f90 b/src/MNH/aerozon.f90
index 04808cb47b5e9041c1e79bced1cb28382c912a0c..41989f6b5f98b04486338f0b416b1bf47ba2c313 100644
--- a/src/MNH/aerozon.f90
+++ b/src/MNH/aerozon.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.
 !-----------------------------------------------------------------
 !     ##########################
@@ -162,8 +162,6 @@ USE MODD_GROUND_PAR
 USE MODD_PARAM_RAD_n,  ONLY: LFIX_DAT
 !
 USE MODE_ll
-USE MODE_FM
-USE MODE_FMREAD
 !
 USE MODI_SHUMAN
 USE MODI_INI_RADCONF
diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90
index df46755874821a8398828a587259a1f068512053..12f4f595d6cf394d7379a31fabbf68d723013dba 100644
--- a/src/MNH/aircraft_balloon_evol.f90
+++ b/src/MNH/aircraft_balloon_evol.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !      ##########################
@@ -175,7 +175,6 @@ USE MODE_DATETIME
 USE MODE_FGAU,             ONLY: GAULAG
 USE MODE_FSCATTER,         ONLY: QEPSW,QEPSI,BHMIE,MOMG,MG
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/anel_balancen.f90 b/src/MNH/anel_balancen.f90
index 6c64978f61f5b68b741d664feafe6b4b6b4e0eb1..e5aa55cfe1125bbc0544e16010d78eb13fda0f78 100644
--- a/src/MNH/anel_balancen.f90
+++ b/src/MNH/anel_balancen.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -56,9 +56,6 @@ END MODULE MODI_ANEL_BALANCE_n
 !!      Module MODD_CONF    : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!
-!!      Module MODD_LUNIT   :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
-!!
 !!      Module MODD_GRID_n  : contains grid variables
 !!         XMAP,XXHAT,XYHAT,XZZ
 !!
@@ -111,11 +108,9 @@ END MODULE MODI_ANEL_BALANCE_n
 !
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MODELN_HANDLER
 !
 USE MODD_CONF    ! declarative modules
-USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_GRID_n
 USE MODD_DIM_n
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 872c21c38cf9672dc8b14d7b9291ce0349cbae94..35f99be024cf73f5215bf50851e92209463b9257 100644
--- a/src/MNH/bl89.f90
+++ b/src/MNH/bl89.f90
@@ -81,6 +81,8 @@ USE MODD_CONF, ONLY: CPROGRAM
 USE MODD_CST
 USE MODD_CTURB
 USE MODD_PARAMETERS
+use modd_precision, only: MNHREAL
+
 #ifdef MNH_BITREP
 USE MODI_BITREP
 #endif
@@ -355,13 +357,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/budget.f90 b/src/MNH/budget.f90
index 92f4267fc90ab31841f40638ee62d1cc79b07987..df646981dc6c0fb44a01cc69d12c459a4e692314 100644
--- a/src/MNH/budget.f90
+++ b/src/MNH/budget.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !##################
@@ -90,8 +90,6 @@ USE MODD_CONF, ONLY : LCHECK
 USE MODD_NSV,  ONLY : NSV
 USE MODD_LES
 !
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_LES_BUDGET
diff --git a/src/MNH/c2r2_adjust.f90 b/src/MNH/c2r2_adjust.f90
index 29333957d49f2de67fc0a58223f89a092fcb343d..aeaeaa05e1482dfb0ba2561f5923eb1ef034195d 100644
--- a/src/MNH/c2r2_adjust.f90
+++ b/src/MNH/c2r2_adjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -15,7 +15,7 @@ INTERFACE
                              PTHS, PRVS, PRCS, PCNUCS,                    &
                              PCCS, PSRCS, PCLDFR, PRRS )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KRR      ! Number of moist variables
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE   ! Output file
@@ -152,18 +152,18 @@ END MODULE MODI_C2R2_ADJUST
 USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_NSV,     ONLY: NSV_C2R2BEG
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
+USE MODD_NSV,            ONLY: NSV_C2R2BEG
 USE MODD_PARAMETERS
 !
-USE MODI_CONDENS
-USE MODI_BUDGET
-!
 USE MODE_FIELD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
+USE MODI_CONDENS
+USE MODI_BUDGET
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -423,7 +423,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW1)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW1)
 END IF
 !
 !
diff --git a/src/MNH/c3r5_adjust.f90 b/src/MNH/c3r5_adjust.f90
index 2beef3f30f94a0ac0c4821b38accaaf45a8710c2..84f3114c250296cc3318b4a973211ecd4b012e2d 100644
--- a/src/MNH/c3r5_adjust.f90
+++ b/src/MNH/c3r5_adjust.f90
@@ -1,13 +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$
-! MASDEV4_7 microph 2006/06/06 18:25:10
-!-----------------------------------------------------------------
 !     #######################
       MODULE MODI_C3R5_ADJUST
 !     #######################
@@ -163,12 +158,14 @@ END MODULE MODI_C3R5_ADJUST
 !!                     November 13 1996 (V. Masson) add prints in test above
 !!                     March 11, 1997 (J.-M. Cohard)  C2R2 option
 !!                     April  6, 2001 (J.-P. Pinty)   C3R5 option 
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
-PRINT *,'C3R5_ADJUST IS NOT YET DEVELOPPED'
-!callabortstop
-CALL ABORT
-STOP
+!implicit none
+!
+use mode_msg
+!
+call Print_msg(NVERB_FATAL,'GEN','C3R5_ADJUST','not yet developed')
 !
 END SUBROUTINE C3R5_ADJUST
diff --git a/src/MNH/call_rttov11.f90 b/src/MNH/call_rttov11.f90
index 3a5f6b338c917cf4a5befb2122cebb7e94ffdcab..254bc976c84de483419ce3623ca315b8bbc96a90 100644
--- a/src/MNH/call_rttov11.f90
+++ b/src/MNH/call_rttov11.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !    ########################
@@ -12,7 +12,7 @@ INTERFACE
                 PTHT, PRT, PPABST, PZZ, PMFCONV, PCLDFR, PULVLKB, PVLVLKB,  &
                 OUSERI, KRTTOVINFO, TPFILE    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER, INTENT(IN)   :: KDLON !number of columns where the
                                !radiation calculations are performed
@@ -82,6 +82,7 @@ SUBROUTINE CALL_RTTOV11(KDLON, KFLEV, PEMIS, PTSRAD,     &
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!      JP Chaboureau 30/05/2017 exclude the first layer when considering clouds
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!----------------------------------------------------------------------------
 !!
 !!*       0.    DECLARATIONS
@@ -90,23 +91,20 @@ SUBROUTINE CALL_RTTOV11(KDLON, KFLEV, PEMIS, PTSRAD,     &
 USE MODD_CST
 USE MODD_PARAMETERS
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_DEEP_CONVECTION_n
 USE MODD_REF_n
 USE MODD_RADIATIONS_n,  ONLY : XSEA
 !
 USE MODN_CONF
-!                                
+!
 USE MODI_DETER_ANGLE
 USE MODI_PINTER
 !
 USE MODE_FIELD
-USE MODE_FMWRIT
-USE MODE_FMREAD
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_POS
 !
@@ -424,8 +422,7 @@ DO JSAT=1,IJSAT ! loop over sensors
  ! Ensure the options and coefficients are consistent
   CALL rttov_user_options_checkinput(errorstatus, opts, coef_rttov)
   IF (errorstatus /= 0) THEN
-    WRITE(*,*) 'error in rttov options'
-    STOP
+    call Print_msg( NVERB_FATAL, 'GEN', 'CALL_RTTOV11', 'error in rttov options' )
   ENDIF
 
 !!  opts%interpolation%reg_limit_extrap = .TRUE.
@@ -579,7 +576,7 @@ DO JSAT=1,IJSAT ! loop over sensors
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .FALSE.
 !    PRINT *,'YRECFM='//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZBT(:,:,JCH))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZBT(:,:,JCH))
   END DO
   DEALLOCATE(chanprof,frequencies,emissivity,calcemis,profiles,cld_profiles)
   DEALLOCATE(ZBT)
diff --git a/src/MNH/call_rttov8.f90 b/src/MNH/call_rttov8.f90
index d8ae1818b10392d41589fed07c33f9f24dc8a866..6180ec0f976c350520fcea3c780c413ffedcef51 100644
--- a/src/MNH/call_rttov8.f90
+++ b/src/MNH/call_rttov8.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !    #######################
@@ -12,7 +12,7 @@ INTERFACE
                 PTHT, PRT, PPABST, PZZ, PMFCONV, PCLDFR, PULVLKB, PVLVLKB,  &
                 OUSERI, KRTTOVINFO, TPFILE    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER, INTENT(IN)   :: KDLON !number of columns where the
                                !radiation calculations are performed
@@ -90,7 +90,7 @@ SUBROUTINE CALL_RTTOV8(KDLON, KFLEV, KSTATM, PEMIS, PTSRAD, PSTATM,     &
 !!              ------------
 !!
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_GRID_n
 USE MODD_DEEP_CONVECTION_n
@@ -98,18 +98,15 @@ USE MODD_REF_n
 USE MODD_RADIATIONS_n,  ONLY : XSEA
 !
 USE MODN_CONF
-!                                
+!
 USE MODD_RAD_TRANSF
-!                               
+!
 USE MODI_DETER_ANGLE
 USE MODI_PINTER
 !
 USE MODE_FIELD
-USE MODE_FMWRIT
-USE MODE_FMREAD
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_POS
 !
@@ -1582,7 +1579,7 @@ DO JSAT=1,IJSAT ! loop over sensors
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
     PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZANTMP)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZANTMP)
   END IF
   DEALLOCATE(ZANTMP)
 ! -----------------------------------------------------------------------------
@@ -1641,7 +1638,7 @@ DO JSAT=1,IJSAT ! loop over sensors
     PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT, &
          MINVAL(ZTBTMP(:,:,JCH),ZTBTMP(:,:,JCH)/=XUNDEF), &
          MAXVAL(ZTBTMP(:,:,JCH),ZTBTMP(:,:,JCH)/=XUNDEF)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTBTMP(:,:,JCH))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTBTMP(:,:,JCH))
     IF (KRTTOVINFO(3,JSAT) == 4.AND. JCH==3 ) THEN ! AMSU-B
       TZFIELD%CMNHNAME   = TRIM(YBEG)//'_UTH'
       TZFIELD%CSTDNAME   = ''
@@ -1670,7 +1667,7 @@ DO JSAT=1,IJSAT ! loop over sensors
           END IF
         END DO
       END DO
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZUTH)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZUTH)
       DEALLOCATE(ZUTH)
     END IF
   END DO
@@ -1737,7 +1734,7 @@ DO JSAT=1,IJSAT ! loop over sensors
       PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT, &
            MINVAL(ZTEMPK(:,:,:),ZTEMPK(:,:,:)/=XUNDEF), &
            MAXVAL(ZTEMPK(:,:,:),ZTEMPK(:,:,:)/=XUNDEF)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTEMPK(:,:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZTEMPK(:,:,:))
       !
       TZFIELD%CMNHNAME   = TRIM(YBEG)//'_'//TRIM(YEND)//'JAV'
       TZFIELD%CSTDNAME   = ''
@@ -1754,7 +1751,7 @@ DO JSAT=1,IJSAT ! loop over sensors
       PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT, &
            MINVAL(ZWVAPK(:,:,:),ZWVAPK(:,:,:)/=XUNDEF), &
            MAXVAL(ZWVAPK(:,:,:),ZWVAPK(:,:,:)/=XUNDEF)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWVAPK(:,:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWVAPK(:,:,:))
     END DO
     DEALLOCATE(ZTEMPKP,ZWVAPKP,ZFIN)
   ENDIF
diff --git a/src/MNH/ch_aer_eqm_init0d.f90 b/src/MNH/ch_aer_eqm_init0d.f90
index f6936c22d955afe568f97d051655a9886286303f..3f2dfddc421eb83810271bdcfd83fe858682b6f7 100644
--- a/src/MNH/ch_aer_eqm_init0d.f90
+++ b/src/MNH/ch_aer_eqm_init0d.f90
@@ -1,13 +1,8 @@
-!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
 !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !ORILAM_LIC for details.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 chimie 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !!   ########################
      MODULE MODI_CH_AER_EQM_INIT0d
 !!   ########################
@@ -47,7 +42,7 @@ END MODULE MODI_CH_AER_EQM_INIT0d
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!    none
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
@@ -59,9 +54,10 @@ USE MODD_CH_M9_n, ONLY : CNAMES
 USE MODD_CH_AERO_n
 USE MODD_CH_MNHC_n
 
-!!
+use mode_msg
+!
 IMPLICIT NONE
-!!
+!
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -214,9 +210,7 @@ print*, 'COMPATIBILITY ERROR: Initialization of particle number mode I < XN0IMIN
 print*, ' MINIMAL NUMBER PARTICLE BY m3 is ', MINVAL(PM3D(:,1)),&
 'located at ',MINLOC(PM3D(:,1))
 print*, 'PLEASE CHANGE MASS OR XN0IMIN INITIALIZATION '
-!callabortstop
-CALL ABORT
-STOP
+call Print_msg( NVERB_FATAL, 'GEN', 'CH_AER_EQM_INIT0d', '' )
 END IF
     PM3D(:,4)= PM3D(:,5) / &
                ((XINIRADIUSJ**3)*EXP(4.5 * (LOG(XINISIGJ))**2))
@@ -227,9 +221,7 @@ print*, 'COMPATIBILITY ERROR: Initialization of particle number mode J < XN0JMIN
 print*, ' MINIMAL NUMBER PARTICLE BY m3 is ',MINVAL(PM3D(:,4)),&
 'located at ',MINLOC(PM3D(:,4))
 print*, 'PLEASE CHANGE MASS OR XN0JMIN INITIALIZATION '
-!callabortstop
-CALL ABORT
-STOP
+call Print_msg( NVERB_FATAL, 'GEN', 'CH_AER_EQM_INIT0d', '' )
 END IF
 
 !*       1.3    calculate moment 6 from dispersion and mean radius
diff --git a/src/MNH/ch_aer_eqm_initn.f90 b/src/MNH/ch_aer_eqm_initn.f90
index ef4f69812ec13a06d9d50d27d85b37adf99ee756..acece90b873e701417f00e2f778e8936bca66df6 100644
--- a/src/MNH/ch_aer_eqm_initn.f90
+++ b/src/MNH/ch_aer_eqm_initn.f90
@@ -1,13 +1,8 @@
-!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
 !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !ORILAM_LIC for details.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
 !!   ########################
      MODULE MODI_CH_AER_EQM_INIT_n
 !!   ########################
@@ -49,6 +44,7 @@ END MODULE MODI_CH_AER_EQM_INIT_n
 !!    MODIFICATIONS
 !!    -------------
 !!    M.Leriche 2015 : masse molaire Black carbon à 12 g/mol
+!  P. Wautelet 05/03/2019: modify allocation procedure for XMI and XSOLORG
 !!
 !!    EXTERNAL
 !!    --------
@@ -116,15 +112,27 @@ END DO
 
 ZDEN2MOL = 1E-6 * XAVOGADRO / XMD
 
+IF ( ASSOCIATED(XMI) ) THEN
+  IF ( SIZE(XMI) == 0 ) THEN
+    DEALLOCATE( XMI )
+    XMI => NULL()
+  END IF
+END IF
 IF (.NOT.(ASSOCIATED(XMI))) THEN
   ALLOCATE(XMI(SIZE(PCHEM,1),SIZE(PCHEM,2),SIZE(PCHEM,3),NSP+NCARB+NSOA))
 END IF
 
+IF ( ASSOCIATED(XSOLORG) ) THEN
+  IF ( SIZE(XSOLORG) == 0 ) THEN
+    DEALLOCATE( XSOLORG )
+    XSOLORG => NULL()
+  END IF
+END IF
 IF (.NOT.(ASSOCIATED(XSOLORG))) THEN
   ALLOCATE(XSOLORG(SIZE(PCHEM,1),SIZE(PCHEM,2),SIZE(PCHEM,3),10))
   XSOLORG(:,:,:,:) = 0.
 END IF
-
+!
 ! Default values of molar mass
 
 XMI(:,:,:,:) = 250.
diff --git a/src/MNH/ch_aer_mod_init.f90 b/src/MNH/ch_aer_mod_init.f90
index 86313a9ed2daeb958e85610053bc4b0ad23c02f8..b5a2409aae881e642fc93e797a0c011284024e94 100644
--- a/src/MNH/ch_aer_mod_init.f90
+++ b/src/MNH/ch_aer_mod_init.f90
@@ -1,4 +1,4 @@
-!ORILAM_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
 !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !ORILAM_LIC for details.
@@ -50,11 +50,11 @@ END MODULE MODI_CH_AER_MOD_INIT
 !!    ------------------
 USE MODD_CH_AEROSOL
 USE MODD_GLO
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_UNIFACPARAM
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open,IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_UNIFAC
 !
 !
@@ -84,8 +84,8 @@ TZFILE => NULL()
 ! Initialize the mineral tabulation 
 IF (CMINERAL == 'NARES') THEN
 !       .. the file ares.w contains the weights of the model
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares1A.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares1A.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I1IA,J1JA,K1KA 
         DO JI=1,I1IA 
@@ -100,11 +100,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J1JA+1 
           READ(ILU,*) (W1JKA(JJ,JK),JK=1,K1KA) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares1C.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares1C.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I1IC,J1JC,K1KC 
         DO JI=1,I1IC 
@@ -119,11 +119,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J1JC+1 
           READ(ILU,*) (W1JKC(JJ,JK),JK=1,K1KC) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares2A.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares2A.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I2IA,J2JA,K2KA 
         DO JI=1,I2IA 
@@ -138,11 +138,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J2JA+1 
           READ(ILU,*) (W2JKA(JJ,JK),JK=1,K2KA) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares2B.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares2B.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I2IB,J2JB,K2KB 
         DO JI=1,I2IB 
@@ -157,11 +157,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J2JB+1 
           READ(ILU,*) (W2JKB(JJ,JK),JK=1,K2KB) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares2C.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares2C.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I2IC,J2JC,K2KC 
         DO JI=1,I2IC 
@@ -176,7 +176,7 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J2JC+1 
           READ(ILU,*) (W2JKC(JJ,JK),JK=1,K2KC) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
 END IF
@@ -188,8 +188,8 @@ IF (CMINERAL == 'TABUL') THEN
   IF(.NOT.ALLOCATED(znh)) ALLOCATE(znh(22))
   IF(.NOT.ALLOCATED(zni)) ALLOCATE(zni(22))
   IF(.NOT.ALLOCATED(zf)) ALLOCATE(zf(16,11,22,22,22,3))
-  CALL IO_FILE_ADD2LIST(TZFILE,'AEROMIN_NEW','CHEMTAB','READ')
-  CALL IO_FILE_OPEN_ll(TZFILE)
+  CALL IO_File_add2list(TZFILE,'AEROMIN_NEW','CHEMTAB','READ')
+  CALL IO_File_open(TZFILE)
   ILU = TZFILE%NLU
 
   WRITE(*,*) 'LOADING MINERAL AEROSOL DATA ...'
@@ -220,7 +220,7 @@ IF (CMINERAL == 'TABUL') THEN
   ENDDO
   ENDDO
   WRITE(*,*) 'END LOADING'
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 ENDIF
 
diff --git a/src/MNH/ch_aqueous_sedim1mom.f90 b/src/MNH/ch_aqueous_sedim1mom.f90
index 9bf9109b022306bf0ef99d6fd47b8d62230da921..cd0cf2e146b3e3350801ed6264a93aa9f496a87a 100644
--- a/src/MNH/ch_aqueous_sedim1mom.f90
+++ b/src/MNH/ch_aqueous_sedim1mom.f90
@@ -1,6 +1,6 @@
-!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.
 !      ################################
        MODULE MODI_CH_AQUEOUS_SEDIM1MOM
@@ -79,6 +79,7 @@ END MODULE MODI_CH_AQUEOUS_SEDIM1MOM
 !!    17/09/10 (M Leriche) add LUSECHIC flag
 !!    J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!    16/12/15 (M Leriche) compute instantaneous rain at the surface
+!  P. Wautelet 12/02/2019: bugfix: ZRR_SEDIM was not initialized everywhere
 !!
 !-------------------------------------------------------------------------------
 !
@@ -268,6 +269,7 @@ DO JN = 1 , KSPLITR
 !
     ZZW(:) = ZFSEDR * ZZZRRS(:)**(ZEXSEDR) * ZRHODREF(:)**(ZEXSEDR-ZCEXVT)
     ZWSED(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIMR(:,:,:),FIELD=0.0 )
+    ZRR_SEDIM(:,:,:) = 0.0
     DO JK = IKB , IKE
       ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK))
     END DO
@@ -308,6 +310,7 @@ DO JN = 1 , KSPLITR
 !
     ZZW(:) = XFSEDS * ZZZRSS(:)**(XEXSEDS) * ZRHODREF(:)**(XEXSEDS-ZCEXVT)
     ZWSED(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIMS(:,:,:),FIELD=0.0 )
+    ZRR_SEDIM(:,:,:) = 0.0
     DO JK = IKB , IKE
       ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK))
     END DO
@@ -336,6 +339,7 @@ DO JN = 1 , KSPLITR
 !
     ZZW(:) = XFSEDG * ZZZRGS(:)**(XEXSEDG) * ZRHODREF(:)**(XEXSEDG-ZCEXVT)
     ZWSED(:,:,:) = UNPACK( ZZW(:),MASK=GSEDIMG(:,:,:),FIELD=0.0 )
+    ZRR_SEDIM(:,:,:) = 0.0
     DO JK = IKB , IKE
       ZRR_SEDIM(:,:,JK) = ZW(:,:,JK)*(ZWSED(:,:,JK+1)-ZWSED(:,:,JK))
     END DO
diff --git a/src/MNH/ch_cranck.f90 b/src/MNH/ch_cranck.f90
index 2e4ac3c98ca36ce48a0bf795d51c84fcad40dc56..a435c9a8e0ede12d3d7367864857f364a6010f6d 100644
--- a/src/MNH/ch_cranck.f90
+++ b/src/MNH/ch_cranck.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 chimie 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !!    ##################### 
       MODULE MODI_CH_CRANCK
 !!    ##################### 
@@ -69,8 +64,12 @@ SUBROUTINE CH_CRANCK(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KVECNPT, KMI, &
 !!    31/07/96 (K. Suhre) restructured
 !!    19/04/02 add PALPHA argument
 !!    01/12/03  (Gazen)   change Chemical scheme interface
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!
 !!    EXTERNAL
 !!    --------
+use mode_msg
+
 USE MODI_CH_FCN
 USE MODI_CH_JAC
 USE MODI_CH_GAUSS
@@ -128,9 +127,7 @@ newton: DO WHILE (MAXVAL(ZERR).GT.ZMAXERR)
 !
   IITERCOUNT = IITERCOUNT + 1
   IF (IITERCOUNT.GT.IMAXITER) THEN
-!callabortstop
-    CALL ABORT
-    STOP "CH_CRANCK ERROR: no convergence of Newton-Raphson iteration obtained"
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_CRANCK', 'no convergence of Newton-Raphson iteration obtained' )
   ENDIF
 !
 !*       2.1  calculate derivative F for next iteration
@@ -163,9 +160,7 @@ newton: DO WHILE (MAXVAL(ZERR).GT.ZMAXERR)
   IFAIL = 1
   CALL CH_GAUSS(ZB,ZC,KEQ,IFAIL)
   IF (IFAIL.NE.0) THEN
-!callabortstop
-          CALL ABORT
-    STOP 'CH_CRANCK ERROR: matrix cannot be inverted by CH_GAUSS'
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_CRANCK', 'matrix cannot be inverted by CH_GAUSS' )
   ENDIF
 !
 !*       2.5  calculate dY = ZB F (result is put in ZFTRAPEZ)
diff --git a/src/MNH/ch_emission_flux0d.f90 b/src/MNH/ch_emission_flux0d.f90
index f3ba65ed160f87e0e3565d7e7003908a3fd0724b..39f3d2947b77cb9aafb9263f354fb6fa3a478b82 100644
--- a/src/MNH/ch_emission_flux0d.f90
+++ b/src/MNH/ch_emission_flux0d.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !!    ############################
@@ -70,18 +70,20 @@ END MODULE MODI_CH_EMISSION_FLUX0D
 !!    -------------
 !!    Original 26/07/1999
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
-USE MODD_IO_ll,         ONLY: TFILEDATA
-USE MODE_FM,            ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_ll
+USE MODD_IO,      ONLY: TFILEDATA
+
+USE MODE_IO_FILE, ONLY: IO_File_close
+use mode_msg
 !
 USE MODI_CH_OPEN_INPUT
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODD_CH_M9_n,      ONLY: NEQ, CNAMES
+USE MODD_CH_M9_n, ONLY: NEQ, CNAMES
 !!
 !------------------------------------------------------------------------------
 !
@@ -107,7 +109,6 @@ CHARACTER*80  :: YFORMAT     ! format of the input data
 INTEGER       :: ICHEMIS     ! number of variables for which a flux is given
                              ! in the input file
 INTEGER       :: IIO         ! I/O channel
-INTEGER       :: IFAIL       ! return code from CLOSE_ll
 REAL          :: ZALPHA      ! interpolation weight
 !
 CHARACTER(LEN=3)                              :: YUNIT
@@ -199,7 +200,7 @@ IF (LSFIRSTCALL) THEN
 !
 ! close file
 !
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
 !
 !*       2.   MAP DATA ONTO PROGNOSTIC VARIABLES
 !        ---------------------------------------
@@ -215,10 +216,7 @@ IF (LSFIRSTCALL) THEN
                ! where 1 microMol/m2/day = (22.414/86.400)*1E-12 ppp*m/s
     ZCONVERSION = (22.414/86.400)*1E-12
   CASE DEFAULT
-    WRITE(KLUOUT,*) 'CH_EMISSION_FLUX0D: unknow conversion factor: ', YUNIT
-!callabortstop
-    CALL ABORT
-    STOP 'CH_EMISSION_FLUX0D: unknow conversion factor' 
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_EMISSION_FLUX0D', 'unknow conversion factor: '//trim(YUNIT) )
   END SELECT
 !
 ! set all fluxes to zero
diff --git a/src/MNH/ch_f77.fx90 b/src/MNH/ch_f77.fx90
index 79387b824a2390553faa1a480964e9c3b9f034c0..aed9e28b8e028a40bdf8509717d5b76f57a44855 100644
--- a/src/MNH/ch_f77.fx90
+++ b/src/MNH/ch_f77.fx90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1989-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.
@@ -20,6 +20,9 @@ C**MODIFIED: 10/01/2019 (P.Wautelet) use newunit argument to open files
 C                        + bug corrections: some files were not closed
 C**MODIFIED: 10/01/2019 (P.Wautelet) replace double precision declarations by
 C                       real(kind(0.0d0)) (to allow compilation by NAG compiler)
+C**MODIFIED: 08/02/2019 (P.Wautelet) bug fixes: missing argument
+C                                             + wrong use of an non initialized value
+C**MODIFIED: P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 C!
 C!
 C!
@@ -3650,6 +3653,9 @@ CDECK XERRWV
 C     ##################################################################
       SUBROUTINE XERRWV (MSG, NMES, NERR, LEVEL, NI, I1, I2, NR, R1, R2)
 C     ##################################################################
+
+      use mode_msg
+
       REAL R1, R2
       INTEGER NMES, NERR, LEVEL, NI, I1, I2, NR
 C
@@ -3718,9 +3724,7 @@ C10   FORMAT(1X,80A1)
  50   FORMAT(6X,'In above,  R1 =',E21.13,3X,'R2 =',E21.13)
 C Abort the run if LEVEL = 2. ------------------------------------------
  100  IF (LEVEL .NE. 2) RETURN
-C callabortstop
-      CALL ABORT
-      STOP
+      call Print_msg( NVERB_FATAL, 'GEN', 'XERRWV', trim(MSG) )
       END
 C####################### End of Subroutine XERRWV ######################
 C
@@ -4504,6 +4508,8 @@ CCC FILE TUV.f
 *-----------------------------------------------------------------------------*
 *= Adapted to MesoNH : ONLY JVALUES are computed
 
+      use mode_msg
+
       IMPLICIT NONE
       SAVE
 
@@ -4974,7 +4980,6 @@ c      IF(zaird .GT. nzero) aircon(izout) = zaird
 *   in subroutine.
 *   Optical depths in Lyman-alpha and SRB will be over-written
 *   in subroutine la_srb.f
-
       CALL seto2(nz,z,nw,wl,aircol,o2xs1, dto2, kout)
 
 * Ozone optical depths
@@ -5141,11 +5146,8 @@ c
 C copy labels into output array
 
          if (njout .ne. 42) then
-           WRITE(kout,*) 'There should be 42 J-Values to be updated!'
-           WRITE(kout,*) 'We better stop here ... in tuvmain.f'
-C callabortstop
-           CALL ABORT
-           STOP 1
+           call Print_msg( NVERB_FATAL, 'GEN', 'tuvmain',
+     &                  'there should be 42 J-Values to be updated' )
          endif
 
          DO ij = 1, njout
@@ -5324,6 +5326,8 @@ CCC FILE grids.f
 *=  MOPT- INTEGER OPTION for wave-length IF 3 good for JO2                (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 
 c      INCLUDE 'params'
@@ -5688,8 +5692,8 @@ c      wlabel = 'isaksen.grid'
       CALL gridck(kw,nw,wl,ok,kout)
 
       IF (.NOT. ok) THEN
-         WRITE(*,*)'STOP in GRIDW:  The w-grid does not make sense'
-         STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'GRIDW', 'the w-grid &
+     &does not make sense' )
       ENDIF
 
 *_______________________________________________________________________
@@ -5713,6 +5717,8 @@ c      wlabel = 'isaksen.grid'
 *=  z   - REAL, vector of altitude levels (in km)                         (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 
 * BROADLY USED PARAMETERS:
@@ -5948,7 +5954,9 @@ C      fill up between model top and 50km with 1km grid spacing
 20     continue
        if (z(nz) .ge. 50.) goto 30
          nz = nz + 1
-         if (nz .gt. kz) stop "GRIDZ: not enough memory, increase kz"
+         if (nz .gt. kz)
+     &     call Print_msg( NVERB_FATAL, 'GEN', 'gridz',
+     &                     'not enough memory, increase kz' )
          z(nz) = z(nz-1) + 1.
        goto 20
 C
@@ -6012,8 +6020,8 @@ c 99	CONTINUE
       CALL gridck(kz,nz,z,ok,kout)
 
       IF (.NOT. ok) THEN
-         WRITE(*,*)'STOP in GRIDZ:  The z-grid does not make sense'
-         STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'GRIDZ', 'the z-grid &
+     &does not make sense' )
       ENDIF
 
 *_______________________________________________________________________
@@ -6415,6 +6423,8 @@ CCC FILE la_srb.f
 *=            continuum.                                                     =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      c      INCLUDE 'params'
 
@@ -6562,12 +6572,13 @@ c      c      INCLUDE 'params'
             WRITE(*,*) 'For wavelengths below 205.8 nm, only the'
             WRITE(*,*) 'pre-specified wavelength grid is permitted'
             WRITE(*,*) 'Use nwint=-156, or edit subroutine gridw.f'
-            STOP ' Lyman alpha grid mis-match - 1'
+            call Print_msg( NVERB_FATAL, 'GEN', 'la_srb',
+     &                      'Lyman alpha grid mis-match - 1' )
          ENDIF
          DO i = 2, nla + 1
             IF(ABS(wl(ila + i - 1) - wlla(i)) .GT. 10.*precis) THEN
-               WRITE(*,*) 'Lyman alpha grid mis-match - 2'
-               STOP
+              call Print_msg( NVERB_FATAL, 'GEN', 'la_srb',
+     &                        'Lyman alpha grid mis-match - 2' )
             ENDIF
          ENDDO
 
@@ -6588,12 +6599,13 @@ c      c      INCLUDE 'params'
             WRITE(*,*) 'For wavelengths below 205.8 nm, only the'
             WRITE(*,*) 'pre-specified wavelength grid is permitted'
             WRITE(*,*) 'Use nwint=-156, or edit subroutine gridw.f'
-            STOP ' SRB grid mis-match - 1'
+            call Print_msg( NVERB_FATAL, 'GEN', 'la_srb',
+     &                      'SRB grid mis-match - 1' )
          ENDIF
          DO i = 2, nsrb + 1
             IF(ABS(wl(isrb + i - 1) - wlsrb(i)) .GT. 10.* precis) THEN
-               WRITE(*,*) ' SRB grid mismatch - w'
-               STOP
+              call Print_msg( NVERB_FATAL, 'GEN', 'la_srb',
+     &                        'SRB grid mis-match - w' )
             ENDIF
          ENDDO
 
@@ -7386,6 +7398,8 @@ CCC FILE numer.f
 *=  Y   - REAL, input y-data                                              (I)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 
 * input:
@@ -7427,11 +7441,9 @@ CCC FILE numer.f
 * check for xg-values outside the x-range
 
       IF ( (x(1) .GT. xg(1)) .OR. (x(n) .LT. xg(ng)) ) THEN
-          WRITE(0,*) '>>> ERROR (inter2) <<<  Data do not span '//
-     >               'grid.  '
-          WRITE(0,*) '                        Use ADDPNT to '//
-     >               'expand data and re-run.'
-          STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'inter2',
+     &                    'data do not span grid. Use ADDPNT'//
+     &                    'to expand data and re-run.' )
       ENDIF
 
 *  find the integral of each grid interval and use this to 
@@ -7554,8 +7566,10 @@ CCC FILE numer.f
 *=                         last target bin                                   =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
-      
+
 * input:
       INTEGER n, ng
       REAL xg(ng)
@@ -7574,9 +7588,8 @@ CCC FILE numer.f
 
 * check whether flag given is legal
       IF ((FoldIn .NE. 0) .AND. (FoldIn .NE. 1)) THEN
-         WRITE(0,*) '>>> ERROR (inter3) <<<  Value for FOLDIN invalid. '
-         WRITE(0,*) '                        Must be 0 or 1'
-         STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'inter3',
+     &                  'Value for FOLDIN invalid. Must be 0 or 1.' )
       ENDIF
 
 * do interpolation
@@ -7684,6 +7697,8 @@ CCC FILE numer.f
 *=                         last target bin                                   =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
       
 * input:
@@ -7704,9 +7719,8 @@ CCC FILE numer.f
 
 * check whether flag given is legal
       IF ((FoldIn .NE. 0) .AND. (FoldIn .NE. 1)) THEN
-         WRITE(0,*) '>>> ERROR (inter3) <<<  Value for FOLDIN invalid. '
-         WRITE(0,*) '                        Must be 0 or 1'
-         STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'inter4',
+     &                  'Value for FOLDIN invalid. Must be 0 or 1.' )
       ENDIF
 
 * do interpolation
@@ -7793,6 +7807,8 @@ CCC FILE numer.f
 *=  YNEW - REAL, y-value of point to be added                             (I)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 
 * calling parameters
@@ -7811,9 +7827,8 @@ CCC FILE numer.f
 * check n<ld to make sure x will hold another point
 
       IF (n .GE. ld) THEN
-         WRITE(0,*) '>>> ERROR (ADDPNT) <<<  Cannot expand array '
-         WRITE(0,*) '                        All elements used.'
-         STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'addpnt',
+     &                  'Cannot expand array. All elements used.' )
       ENDIF
 
       insert = 1
@@ -7826,9 +7841,8 @@ CCC FILE numer.f
  10   CONTINUE
       IF (i .LT. n) THEN
         IF (x(i) .LT. x(i-1)) THEN
-           WRITE(0,*) '>>> ERROR (ADDPNT) <<<  x-data must be '//
-     >                'in ascending order!'
-           STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'addpnt',
+     &                    'x-data must be in ascending order' )
         ELSE
            IF (xnew .GT. x(i)) insert = i + 1
         ENDIF
@@ -8773,6 +8787,8 @@ CCC FILE qys.f
 *= send email to:  sasha@ucar.edu                                            =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      c      INCLUDE 'params'
 
@@ -8944,8 +8960,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -8970,8 +8986,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -8996,8 +9012,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -9022,8 +9038,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -9049,8 +9065,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -9077,8 +9093,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -9134,8 +9150,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -9160,8 +9176,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
          DO iw = 1, nw-1
             f(iw) = yg1(iw)
          ENDDO
@@ -9242,8 +9258,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
 
          fil = 'DATAE1/SUN/neckel.flx'
          write(kout,*) fil
@@ -9337,8 +9353,8 @@ c      c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
 
          fil = 'DATAE1/SUN/neckel.flx'
          write(kout,*) fil
@@ -9381,8 +9397,8 @@ c            y1(i) = y1(i) * 1.E4 * hc / (x1(i) * 1.E-9)
          CALL inter2(nw,wl,yg4,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, fil
-            STOP
-         ENDIF         
+            call Print_msg( NVERB_FATAL, 'GEN', 'rdetfl', '' )
+         ENDIF
 
 *    for wl(iw) .lt. 150.01                                 susim_hi.flx
 *    for wl(iw) .ge. 150.01 .and. wl(iw) .lt. 200.07        atlas3.flx
@@ -9426,6 +9442,8 @@ c            y1(i) = y1(i) * 1.E4 * hc / (x1(i) * 1.E-9)
 *=           each specified wavelength                                       =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      c      INCLUDE 'params'
 
@@ -9545,7 +9563,7 @@ c      c      INCLUDE 'params'
       CALL inter2(nw,wl,f,n,lambda_hi,irrad_hi,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, fil
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'read1', '' )
       ENDIF
 
       RETURN
@@ -9737,6 +9755,8 @@ CCC FILE rdxs.f
 *=           each specified wavelength (WMO value at 273)                    =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -9957,7 +9977,7 @@ c     INCLUDE 'params'
          ENDDO
 
       ELSE
-         STOP 'mabs not set in rdxs.f'
+         call Print_msg( NVERB_FATAL, 'GEN', 'rdo3xs', 'mabs not set' )
       ENDIF
 
       RETURN
@@ -9987,6 +10007,8 @@ c     INCLUDE 'params'
 *=  V830   - REAL, exact wavelength in vacuum for data breaks             (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -10117,8 +10139,8 @@ c     INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n1,            1.e+38,0.)
       CALL inter2(nw,wl,rei295,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - Reims 295K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_rei',
+     &                   'O3 xsect - Reims 295K' )
       ENDIF
 
       DO i = 1, n2
@@ -10136,8 +10158,8 @@ c     INCLUDE 'params'
       CALL addpnt(x2,y2,kdata,n2,            1.e+38,0.)
       CALL inter2(nw,wl,rei243,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - Reims 243K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_rei',
+     &                   'O3 xsect - Reims 243K' )
       ENDIF
 
       CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),0.)
@@ -10146,8 +10168,8 @@ c     INCLUDE 'params'
       CALL addpnt(x3,y3,kdata,n3,            1.e+38,0.)
       CALL inter2(nw,wl,rei228,n3,x3,y3,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - Reims 228K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_rei',
+     &                   'O3 xsect - Reims 228K' )
       ENDIF
 
       CALL addpnt(x4,y4,kdata,n4,x4(1)*(1.-deltax),0.)
@@ -10156,8 +10178,8 @@ c     INCLUDE 'params'
       CALL addpnt(x4,y4,kdata,n4,            1.e+38,0.)
       CALL inter2(nw,wl,rei218,n4,x4,y4,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - Reims 218K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_rei',
+     &                   'O3 xsect - Reims 218K' )
       ENDIF
 
 * wavelength breaks must be converted to vacuum:
@@ -10190,6 +10212,8 @@ c     INCLUDE 'params'
 *=  V850   - REAL, exact wavelength in vacuum for data breaks             (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      c      INCLUDE 'params'
 
@@ -10307,8 +10331,8 @@ c      c      INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n1,           1.e+38,0.)
       CALL inter2(nw,wl,wmo203,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 cross section - WMO - 203K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_wmo',
+     &                   'O3 cross section - WMO - 203K' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -10317,8 +10341,8 @@ c      c      INCLUDE 'params'
       CALL addpnt(x2,y2,kdata,n2,           1.e+38,0.)
       CALL inter2(nw,wl,wmo273,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 cross section - WMO - 273K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_wmo',
+     &                   'O3 cross section - WMO - 273K' )
       ENDIF
 
 * wavelength breaks must be converted to vacuum:
@@ -10352,6 +10376,8 @@ c      c      INCLUDE 'params'
 *=  V825   - REAL, exact wavelength in vacuum for data breaks             (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -10467,8 +10493,8 @@ c     INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n1,           1.e+38,0.)
       CALL inter2(nw,wl,jpl295,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 cross section - WMO - 295K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_jpl',
+     &                   'O3 cross section - WMO - 295K' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -10477,8 +10503,8 @@ c     INCLUDE 'params'
       CALL addpnt(x2,y2,kdata,n2,           1.e+38,0.)
       CALL inter2(nw,wl,jpl218,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 cross section - WMO - 218K'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_jpl',
+     &                   'O3 cross section - WMO - 218K' )
       ENDIF
 
 * wavelength breaks must be converted to vacuum:
@@ -10514,6 +10540,8 @@ c     INCLUDE 'params'
 *=  V350   - REAL, exact wavelength in vacuum for data breaks             (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -10658,8 +10686,8 @@ c     INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n1,            1.e+38,0.)
       CALL inter2(nw,wl,mol226,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - 226K Molina'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_mol',
+     &                   'O3 xsect - 226K Molina' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -10668,8 +10696,8 @@ c     INCLUDE 'params'
       CALL addpnt(x2,y2,kdata,n2,            1.e+38,0.)
       CALL inter2(nw,wl,mol263,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - 263K Molina'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_mol',
+     &                   'O3 xsect - 263K Molina' )
       ENDIF
 
       CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),0.)
@@ -10678,8 +10706,8 @@ c     INCLUDE 'params'
       CALL addpnt(x3,y3,kdata,n3,            1.e+38,0.)
       CALL inter2(nw,wl,mol298,n3,x3,y3,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - 298K Molina'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_mol',
+     &                   'O3 xsect - 298K Molina' )
       ENDIF
 
       RETURN
@@ -10706,6 +10734,8 @@ c     INCLUDE 'params'
 *=  Vb342   - REAL, exact wavelength in vacuum for data breaks            (O)=*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -10830,8 +10860,8 @@ c     INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n1,            1.e+38,0.)
       CALL inter2(nw,wl,c0,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - c0 Bass'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_bas',
+     &                   'O3 xsect - c0 Bass' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -10840,8 +10870,8 @@ c     INCLUDE 'params'
       CALL addpnt(x2,y2,kdata,n2,            1.e+38,0.)
       CALL inter2(nw,wl,c1,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - c1 Bass'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_bas',
+     &                   'O3 xsect - c1 Bass' )
       ENDIF
 
       CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),0.)
@@ -10850,8 +10880,8 @@ c     INCLUDE 'params'
       CALL addpnt(x3,y3,kdata,n3,            1.e+38,0.)
       CALL inter2(nw,wl,c2,n3,x3,y3,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O3 xsect - c2 Bass'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'o3_bas',
+     &                   'O3 xsect - c2 Bass' )
       ENDIF
 
       RETURN
@@ -10876,6 +10906,8 @@ c     INCLUDE 'params'
 *=
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -10998,8 +11030,8 @@ c     INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n,              1.E+38,0.)
       CALL inter2(nw,wl,o2xs1, n,x1,y1, ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, 'O2 -> O + O'
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'rdo2xs',
+     &                   'O2 -> O + O' )
       ENDIF
 
 *------------------------------------------------------
@@ -11121,6 +11153,8 @@ c     INCLUDE 'params'
 
       SUBROUTINE no2xs_d(nz,t,nw,wl, no2xs,kout)
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -11227,8 +11261,8 @@ c     INCLUDE 'params'
       CALL addpnt(x1,y1,kdata,n,      1.e+38,0.)
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
-         WRITE(*,*) ierr, fil
-         STOP
+        WRITE(*,*) ierr, fil
+        call Print_msg( NVERB_FATAL, 'GEN', 'no2xs_d', '' )
       ENDIF
 
 * assign, same at all altitudes (no temperature effect)     
@@ -11767,6 +11801,8 @@ c     INCLUDE 'params'
 *= send email to:  sasha@ucar.edu                                            =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -11869,7 +11905,7 @@ c      n = 681
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, fil
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'rdso2xs', '' )
       ENDIF
       
       DO 13, l = 1, nw-1
@@ -12753,6 +12789,8 @@ c         mu1(i) = 0.5
 * solves tridiagonal system.  From Numerical Recipies, p. 40
 *_______________________________________________________________________
 
+      use mode_msg
+
       IMPLICIT NONE
 
 * input:
@@ -12825,13 +12863,17 @@ c     INCLUDE 'params'
       DIMENSION gam(2*kz)
 *_______________________________________________________________________
 
-      IF (b(1) .EQ. 0.) STOP 1001
+      IF (b(1) .EQ. 0.) THEN
+        call Print_msg( NVERB_FATAL, 'GEN', 'tridiag', '' )
+      END IF
       bet   = b(1)
       u(1) = r(1)/bet
       DO 11, j = 2, n   
          gam(j) = c(j - 1)/bet
          bet = b(j) - a(j)*gam(j)
-         IF (bet .EQ. 0.) STOP 2002 
+         IF (bet .EQ. 0.) THEN
+           call Print_msg( NVERB_FATAL, 'GEN', 'tridiag', '' )
+         END IF
          u(j) = (r(j) - a(j)*u(j - 1))/bet
    11 CONTINUE
       DO 12, j = n - 1, 1, -1  
@@ -13677,6 +13719,8 @@ c   Called by- SOLEIG
 c   Calls- D1MACH, ERRMSG
 c +-------------------------------------------------------------------+
 
+      use mode_msg
+
 c     .. Scalar Arguments ..
 
       INTEGER   IA, IER, IEVEC, M
@@ -14100,8 +14144,8 @@ c                                        ** One eigenvalue found
 C next line has been included to avoid run time error caused by xlf
 
       IF ( ( N1.LE.0 ).OR.( N.LE.0 ) ) THEN
-        WRITE(0,*) 'Subscript out of bounds in ASYMTX'
-        STOP 9999
+        call Print_msg( NVERB_FATAL, 'GEN', 'ASYMTX',
+     &                  'subscript out of bounds' )
       ENDIF
 
       Y  = AAD( N1, N1 )
@@ -17743,6 +17787,8 @@ c
 c        Print out a warning or error message;  abort if error
 c        after making symbolic dump (machine-specific)
 
+      use mode_msg
+
       LOGICAL       FATAL, MsgLim, Cray
       CHARACTER*(*) MESSAG
       INTEGER       MaxMsg, NumMsg
@@ -17751,24 +17797,21 @@ c        after making symbolic dump (machine-specific)
 
 
       IF ( FATAL )  THEN
-         WRITE ( *, '(//,2A,//)' )  ' ******* ERROR >>>>>>  ', MESSAG
-         STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'ErrMsg', trim(MESSAG) )
       END IF
 
       NumMsg = NumMsg + 1
       IF( MsgLim )  RETURN
 
       IF ( NumMsg.LE.MaxMsg )  THEN
-         WRITE ( *, '(/,2A,/)' )  ' ******* WARNING >>>>>>  ', MESSAG
+        call Print_msg( NVERB_WARNING, 'GEN', 'ErrMsg', trim(MESSAG) )
       ELSE
-         WRITE ( *,99 )
-         MsgLim = .True.
+        call Print_msg( NVERB_WARNING, 'GEN', 'ErrMsg',
+     &                  'too many warning messages. ' //
+     &                  'They will no longer be printed.' )
+        MsgLim = .True.
       ENDIF
 
-      RETURN
-
-   99 FORMAT( //,' >>>>>>  TOO MANY WARNING MESSAGES --  ',
-     $   'They will no longer be printed  <<<<<<<', // )
       END
 
 c -------------------------------------------------------------------------
@@ -19079,6 +19122,8 @@ C     ##############################
 *=  (see routine T665D for more information on different constants)          =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       EXTERNAL t665d
       REAL(kind(0.0d0)) :: d1mach
       INTEGER i
@@ -19098,8 +19143,8 @@ C     ##############################
         ENDIF
         d1mach = dmach(i)
       ELSE
-        WRITE(0,*) '>>> ERROR (D1MACH) <<<  invalid argument'
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'D1MACH',
+     &                  'invalid argument' )
       ENDIF
 
 *!csm
@@ -19342,6 +19387,8 @@ C---------- LAST CARD OF T665D ----------
 *=  (see routine T665R for more information on different constants)          =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       REAL r1mach
       INTEGER i
    
@@ -19360,8 +19407,8 @@ C---------- LAST CARD OF T665D ----------
         ENDIF
         r1mach = rmach(i)
       ELSE
-        WRITE(0,*) '>>> ERROR (R1MACH) <<<  invalid argument'
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'R1MACH',
+     &                 'invalid argument' )
       ENDIF
 
       END
@@ -19685,6 +19732,8 @@ CCC FILE rxn.f
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -19864,7 +19913,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
 
         CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -19874,7 +19923,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
       ENDIF
 
@@ -19901,7 +19950,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
 
         CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -19911,7 +19960,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
       ENDIF
 
@@ -19952,7 +20001,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg1, n1,x1,y1, ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
 
         CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -19963,7 +20012,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg2, n2,x2,y2, ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
 
 * phi data at 298 and 230 K
@@ -19976,7 +20025,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg3, n3,x3,y3, ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr,jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
 
         CALL addpnt(x4,y4,kdata,n4,x4(1)*(1.-deltax),y4(1))
@@ -19987,7 +20036,7 @@ c      myld = kjpl00
         CALL inter2(nw,wl,yg4, n4,x4,y4, ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr,jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r01', '' )
         ENDIF
       ENDIF
 
@@ -20143,6 +20192,7 @@ c      myld = kjpl00
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
 
       IMPLICIT NONE
 c     INCLUDE 'params'
@@ -20251,11 +20301,11 @@ c     INCLUDE 'params'
 
       mabs = 4
 
-      IF (mabs. EQ. 1) CALL no2xs_d(nz,tlev,nw,wl, no2xs)
-      IF (mabs .EQ. 2) CALL no2xs_jpl94(nz,tlev,nw,wl, no2xs)
-      IF (mabs .EQ. 3) CALL no2xs_har(nz,tlev,nw,wl, no2xs)
-      IF (mabs .EQ. 4) CALL no2xs_jpl06a(nz,tlev,nw,wl, no2xs)
-      IF (mabs .EQ. 5) CALL no2xs_jpl06b(nz,tlev,nw,wl, no2xs)
+      IF (mabs. EQ. 1) CALL no2xs_d(nz,tlev,nw,wl, no2xs, kout)
+      IF (mabs .EQ. 2) CALL no2xs_jpl94(nz,tlev,nw,wl, no2xs, kout)
+      IF (mabs .EQ. 3) CALL no2xs_har(nz,tlev,nw,wl, no2xs, kout)
+      IF (mabs .EQ. 4) CALL no2xs_jpl06a(nz,tlev,nw,wl, no2xs, kout)
+      IF (mabs .EQ. 5) CALL no2xs_jpl06b(nz,tlev,nw,wl, no2xs, kout)
 
 * quantum yields
 *     myld = 1   NO2_calvert.yld  (same as JPL2002)
@@ -20284,7 +20334,7 @@ c     INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r02', '' )
       ENDIF
 
       do iw = 1, nw - 1
@@ -20316,7 +20366,7 @@ c     INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r02', '' )
       ENDIF
 
 
@@ -20327,7 +20377,7 @@ c     INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r02', '' )
       ENDIF
          
          DO iw = 1, nw - 1
@@ -20385,6 +20435,8 @@ c     INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 * BROADLY USED PARAMETERS:
@@ -20531,7 +20583,7 @@ c     INCLUDE 'params'
         CALL inter2(nw,wl,yg,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
           WRITE(*,*) ierr, jlabel(j)
-          STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'r03', '' )
         ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -20555,7 +20607,7 @@ c     INCLUDE 'params'
         CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
           WRITE(*,*) ierr, jlabel(j)
-          STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'r03', '' )
         ENDIF
 
 * use JPL94 for wavelengths longer than 600 nm
@@ -20586,7 +20638,7 @@ c     INCLUDE 'params'
         CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
           WRITE(*,*) ierr, jlabel(j)
-          STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'r03', '' )
         ENDIF
 
       ENDIF
@@ -20793,6 +20845,8 @@ c     INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -20923,7 +20977,7 @@ c     INCLUDE 'params'
       CALL inter2(nw,wl,yg1, n1,x1,y1, ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr,jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r04', '' )
       ENDIF
 
       CALL addpnt(x2,B,kdata, n2,x2(1)*(1.-deltax),0.)
@@ -20934,7 +20988,7 @@ c     INCLUDE 'params'
       CALL inter2(nw,wl,yg2, n2,x2,B, ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr,jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r04', '' )
       ENDIF
 
 
@@ -20999,6 +21053,8 @@ c     INCLUDE 'params'
 *=  05/98  Original, adapted from former JSPEC1 subroutine                   =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -21123,7 +21179,7 @@ c     INCLUDE 'params'
         CALL inter2(nw,wl,yg,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
           WRITE(*,*) ierr, jlabel(j)
-          STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'r05', '' )
         ENDIF
 
       ELSEIF(mabs .eq. 2) then
@@ -21146,7 +21202,7 @@ c     INCLUDE 'params'
         CALL inter2(nw,wl,yg,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
           WRITE(*,*) ierr, jlabel(j)
-          STOP
+          call Print_msg( NVERB_FATAL, 'GEN', 'r05', '' )
         ENDIF
 
       ENDIF
@@ -21196,6 +21252,8 @@ c     INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -21346,7 +21404,7 @@ C      ENDDO
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r06', '' )
       ENDIF
 
 
@@ -21357,7 +21415,7 @@ C      ENDDO
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r06', '' )
       ENDIF
 
 * quantum yield = 1
@@ -21404,6 +21462,8 @@ C      ENDDO
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c     INCLUDE 'params'
 
@@ -21517,7 +21577,7 @@ C* local
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r07', '' )
       ENDIF
 
 * quantum yield = 1
@@ -21566,6 +21626,8 @@ C* local
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -21718,7 +21780,7 @@ C      ENDIF
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r08', '' )
       ENDIF
 
       A0 = 6.4761E+04            
@@ -21802,6 +21864,8 @@ C      ENDIF
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -21976,7 +22040,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -21986,7 +22050,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
       ENDIF
 
       CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),y3(1))
@@ -22006,7 +22070,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg4,n4,x4,y4,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
       ENDIF
 
       CALL addpnt(x5,y5,kdata,n5,x5(1)*(1.-deltax),y5(1))
@@ -22016,7 +22080,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg5,n5,x5,y5,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
       ENDIF
 
 
@@ -22078,7 +22142,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
       ENDIF
 
 * quantum yield = 1
@@ -22150,6 +22214,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -22334,7 +22400,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j-1)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
          ENDIF
 
       ELSEIF (mopt1 .EQ. 2 .OR. mopt1 .EQ. 3 .OR. mopt1 .EQ. 4) THEN
@@ -22356,7 +22422,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j-1)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r09', '' )
          ENDIF
 
          IF(mopt1 .EQ. 3) THEN
@@ -22410,7 +22476,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -22420,7 +22486,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg3,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
       ELSEIF(mopt1 .eq. 4) THEN
@@ -22446,7 +22512,7 @@ c      INCLUDE 'params'
             CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
             IF (ierr .NE. 0) THEN
                WRITE(*,*) ierr, jlabel(j)
-               STOP
+               call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
             ENDIF
 
             CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),0.)
@@ -22456,7 +22522,7 @@ c      INCLUDE 'params'
             CALL inter2(nw,wl,yg3,n3,x3,y3,ierr)
             IF (ierr .NE. 0) THEN
                WRITE(*,*) ierr, jlabel(j)
-               STOP
+               call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
             ENDIF
 
          ENDIF
@@ -22483,7 +22549,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j-1)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
       ELSEIF(mopt1 .EQ. 6) THEN
@@ -22509,7 +22575,7 @@ c      INCLUDE 'params'
             CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
             IF (ierr .NE. 0) THEN
                WRITE(*,*) ierr, jlabel(j)
-               STOP
+               call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
             ENDIF
 
             CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),0.)
@@ -22519,7 +22585,7 @@ c      INCLUDE 'params'
             CALL inter2(nw,wl,yg3,n3,x3,y3,ierr)
             IF (ierr .NE. 0) THEN
                WRITE(*,*) ierr, jlabel(j)
-               STOP
+               call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
             ENDIF
 
       ENDIF
@@ -22545,7 +22611,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg4,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j-1)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
          OPEN(NEWUNIT=ilu,FILE='DATAJ1/CH2O/CH2O_ii_mad.yld',
@@ -22565,7 +22631,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg5,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
       ELSEIF(mopt2 .EQ. 2) then
@@ -22591,7 +22657,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg4,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -22601,7 +22667,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg5,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
 * box-filling interpolation.  
@@ -22652,7 +22718,7 @@ c         ENDDO
          CALL inter2(nw,wl,yg4,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -22662,7 +22728,7 @@ c         ENDDO
          CALL inter2(nw,wl,yg5,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r10', '' )
          ENDIF
 
       ENDIF
@@ -22770,6 +22836,8 @@ c         ENDDO
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -22927,7 +22995,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -22954,7 +23022,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 3) THEN
@@ -22977,7 +23045,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 4) THEN
@@ -23015,7 +23083,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 5) THEN
@@ -23039,7 +23107,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
       ENDIF
@@ -23069,7 +23137,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -23079,7 +23147,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
          DO iw = 1, nw-1
@@ -23105,7 +23173,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
       
          OPEN(NEWUNIT=ilu,FILE='DATAJ1/CH3CHO/d021_ii.yld',
@@ -23126,7 +23194,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg2,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
          OPEN(NEWUNIT=ilu,FILE='DATAJ1/CH3CHO/d021_iii.yld',
@@ -23147,7 +23215,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg3,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
       ENDIF
@@ -23172,7 +23240,7 @@ c         n = 1705
          CALL inter2(nw,wl,yg4,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r11', '' )
          ENDIF
 
 * combine:
@@ -23264,6 +23332,8 @@ c         x = yg4(iw)
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -23401,7 +23471,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r12', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -23424,7 +23494,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r12', '' )
          ENDIF
 
       ENDIF
@@ -23452,12 +23522,12 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r12', '' )
          ENDIF
 
       ELSEIF (myld .EQ. 2) THEN
 
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r12', '' )
 
       ENDIF
 
@@ -23521,6 +23591,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -23694,7 +23766,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
 
@@ -23718,7 +23790,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 3) THEN
@@ -23746,7 +23818,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 4) THEN
@@ -23771,7 +23843,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
       ELSEIF(mabs .eq. 5) then
@@ -23796,7 +23868,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
       ENDIF
@@ -23829,7 +23901,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
          n2 = n
 
@@ -23843,7 +23915,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n2,x1,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
          n3 = n
@@ -23857,7 +23929,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg3,n3,x1,y3,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r13', '' )
          ENDIF
 
       ENDIF
@@ -23953,6 +24025,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -24111,7 +24185,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
          ENDIF
 
          OPEN(NEWUNIT=ilu,FILE='DATAJ1/CH3COCHO/CH3COCHO_iup2.abs',
@@ -24133,7 +24207,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
          ENDIF
 
          DO iw = 1, nw-1 
@@ -24161,7 +24235,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
          ENDIF
 
       ELSEIF(mabs .GT. 2 .and. mabs .lt. 7) THEN
@@ -24202,7 +24276,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
          ENDIF
 
          ELSEIF(mabs .EQ. 7) THEN
@@ -24226,7 +24300,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
       ENDIF
 
 
@@ -24248,7 +24322,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
          ENDIF
 
          do iw = 1, nw-1
@@ -24276,7 +24350,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
          ENDIF
 
       ENDIF
@@ -24305,7 +24379,7 @@ c      INCLUDE 'params'
             CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
             IF (ierr .NE. 0) THEN
                WRITE(*,*) ierr, jlabel(j)
-               STOP
+               call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
             ENDIF
 
             CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),1.)
@@ -24315,7 +24389,7 @@ c      INCLUDE 'params'
             CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
             IF (ierr .NE. 0) THEN
                WRITE(*,*) ierr, jlabel(j)
-               STOP
+               call Print_msg( NVERB_FATAL, 'GEN', 'r14', '' )
             ENDIF
 
          ENDIF
@@ -24435,6 +24509,8 @@ c               kq = 1.93e4 * EXP(-5639/wc(iw))
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -24584,7 +24660,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -24608,7 +24684,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 3) THEN
@@ -24636,7 +24712,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -24646,7 +24722,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
 
@@ -24657,7 +24733,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg3,n3,x3,y3,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
       ELSEIF(mabs.eq.4) then
@@ -24690,7 +24766,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -24700,7 +24776,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
          CALL addpnt(x3,y3,kdata,n3,x3(1)*(1.-deltax),0.)
@@ -24710,7 +24786,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg3,n3,x3,y3,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
          CALL addpnt(x4,y4,kdata,n4,x4(1)*(1.-deltax),0.)
@@ -24720,7 +24796,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg4,n4,x4,y4,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
       ENDIF
@@ -24745,7 +24821,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r15', '' )
          ENDIF
 
       ENDIF
@@ -24856,6 +24932,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -24994,7 +25072,7 @@ c     $        STATUS='old')
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r16', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 2) THEN
@@ -25018,7 +25096,7 @@ c     $        STATUS='old')
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r16', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 3) THEN
@@ -25041,7 +25119,7 @@ c     $        STATUS='old')
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r16', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 4) THEN
@@ -25064,7 +25142,7 @@ c     $        STATUS='old')
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r16', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 5) THEN
@@ -25088,7 +25166,7 @@ c     $        STATUS='old')
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r16', '' )
          ENDIF
 
       ENDIF
@@ -25150,6 +25228,8 @@ c     $        STATUS='old')
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -25285,7 +25365,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -25314,7 +25394,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -25324,7 +25404,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 3) THEN
@@ -25349,7 +25429,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 4) THEN
@@ -25379,7 +25459,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
          CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),y2(1))
@@ -25389,7 +25469,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 5) THEN
@@ -25413,7 +25493,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 6) THEN
@@ -25448,7 +25528,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF (mabs .EQ. 8) THEN
@@ -25472,7 +25552,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ELSEIF (mabs. eq. 9) THEN
@@ -25499,7 +25579,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
          n2 = n
@@ -25510,7 +25590,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r17', '' )
          ENDIF
 
       ENDIF
@@ -25570,6 +25650,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -25719,7 +25801,7 @@ C      ENDIF
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r18', '' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -25729,7 +25811,7 @@ C      ENDIF
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r18', '' )
       ENDIF
 
 * quantum yield:
@@ -25785,6 +25867,8 @@ C      ENDIF
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -25902,7 +25986,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r19', '' )
       ENDIF
 
 *** quantum yield unity (Calvert and Pitts)
@@ -25947,6 +26031,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+       use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -26075,7 +26161,7 @@ c      INCLUDE 'params'
         CALL inter2(nw,wl,yg,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r20', '' )
         ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -26099,7 +26185,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r20', '' )
          ENDIF
 
       ENDIF
@@ -26179,6 +26265,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -26297,7 +26385,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r21', '' )
       ENDIF
 
 *** quantum yield unity
@@ -26342,6 +26430,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -26460,7 +26550,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r22', '' )
       ENDIF
 
 *** quantum yield unity (Nolle et al.)
@@ -26506,6 +26596,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -26635,7 +26727,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r23', '' )
       ENDIF
 
 * sigma @ 210 K
@@ -26649,7 +26741,7 @@ c      INCLUDE 'params'
  
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r23', '' )
       ENDIF
 
 *** quantum yield assumed to be unity
@@ -26698,6 +26790,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -26827,7 +26921,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r24', '' )
       ENDIF
 
 * sigma @ 210 K
@@ -26841,7 +26935,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r24', '' )
       ENDIF
 
 *** quantum yield assumed to be unity
@@ -26889,6 +26983,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -27008,7 +27104,7 @@ c      INCLUDE 'params'
     
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r25', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -27054,6 +27150,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -27176,7 +27274,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r26', '' )
       ENDIF 
 
 **** quantum yield assumed to be unity
@@ -27223,6 +27321,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -27345,7 +27445,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r27', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -27392,6 +27492,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -27510,7 +27612,7 @@ c      INCLUDE 'params'
   
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r28', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -27557,6 +27659,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -27689,7 +27793,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r29', '' )
       ENDIF
 
 ** sigma @ 250 K
@@ -27703,7 +27807,7 @@ c      INCLUDE 'params'
       
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r29', '' )
       ENDIF
 
 ** sigma @ 210 K
@@ -27717,7 +27821,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r29', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -27773,6 +27877,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -27905,7 +28011,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r30', '' )
       ENDIF
 
 ** sigma @ 279 K
@@ -27919,7 +28025,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r30', '' )
       ENDIF
 
 ** sigma @ 255 K
@@ -27933,7 +28039,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r30', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -27988,6 +28094,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -28108,7 +28216,7 @@ C     INTEGER n1, n2, n3, n4, n5
  
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r31', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -28154,6 +28262,8 @@ C     INTEGER n1, n2, n3, n4, n5
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -28564,6 +28674,8 @@ C     ENDDO
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -28684,7 +28796,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r34', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -28945,6 +29057,8 @@ c             sq(j,iz,iw) = qy * EXP(sum)
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -29065,7 +29179,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r36', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -29112,6 +29226,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -29232,7 +29348,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r37', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -29279,6 +29395,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -29417,7 +29535,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r38', '' )
       ENDIF
 
 ** sigma @ 270 K
@@ -29431,7 +29549,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r38', '' )
       ENDIF
 
 ** sigma @ 250 K
@@ -29445,7 +29563,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r38', '' )
       ENDIF
 
 ** sigma @ 230 K
@@ -29459,7 +29577,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r38', '' )
       ENDIF
 
 ** sigma @ 210 K
@@ -29473,7 +29591,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r38', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -29539,6 +29657,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -29658,7 +29778,7 @@ c      INCLUDE 'params'
   
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r39', '' )
       ENDIF
 
 **** quantum yield:  absolute quantum yield has not been reported yet, but
@@ -29713,6 +29833,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -29833,7 +29955,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r40', '' )
       ENDIF
 
 **** quantum yield unity (Molina and Molina)
@@ -29880,6 +30002,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -30000,7 +30124,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r41', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -30047,6 +30171,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -30167,7 +30293,7 @@ c      INCLUDE 'params'
 
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r42', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -30214,6 +30340,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -30336,7 +30464,7 @@ c      INCLUDE 'params'
 	
       IF (ierr .NE. 0) THEN
         WRITE(*,*) ierr, jlabel(j)
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'r43', '' )
       ENDIF
 
 **** quantum yield assumed to be unity
@@ -30543,6 +30671,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -30664,7 +30794,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r45', '' )
       ENDIF
 
       n2 = n
@@ -30675,7 +30805,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r45', '' )
       ENDIF
 
       n3 = n
@@ -30686,7 +30816,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg3,n3,x3,y3,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r45', '' )
       ENDIF
 
       DO iw = 1, nw-1
@@ -30750,6 +30880,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -30871,7 +31003,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r46', '' )
       ENDIF
 
 *** quantum yields (from jpl97)
@@ -30921,6 +31053,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -31048,7 +31182,7 @@ c      INCLUDE 'params'
         CALL inter2(nw,wl,yg,n,x1,y1,ierr)
         IF (ierr .NE. 0) THEN
            WRITE(*,*) ierr, jlabel(j)
-           STOP
+           call Print_msg( NVERB_FATAL, 'GEN', 'r47', '' )
         ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -31122,6 +31256,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -31251,7 +31387,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r101', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -31276,7 +31412,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r101', '' )
          ENDIF
 
       ENDIF
@@ -31336,6 +31472,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -31460,7 +31598,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r102', '' )
          ENDIF
 
       ELSEIF(mabs. EQ. 2) THEN
@@ -31484,7 +31622,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r102', '' )
          ENDIF
             
       ENDIF
@@ -31541,6 +31679,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -31664,7 +31804,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r103', '' )
          ENDIF
 
       ELSEIF(mabs .EQ. 2) THEN
@@ -31688,7 +31828,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r103', '' )
          ENDIF
 
       ENDIF
@@ -31744,6 +31884,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -31865,7 +32007,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r104', '' )
       ENDIF
 
 * quantum yields assumed to be 0.01 (upper limit)
@@ -31919,6 +32061,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -32041,7 +32185,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r105', '' )
          ENDIF
 
       ELSEIF (mabs .eq. 2) then
@@ -32065,7 +32209,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r105', '' )
          ENDIF
 
       ENDIF
@@ -32120,6 +32264,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -32242,7 +32388,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r106', '' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,               0.,y2(1))
@@ -32250,7 +32396,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r106', '' )
       ENDIF
 
 * quantum yield  = 1
@@ -32304,6 +32450,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -32426,7 +32574,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r107', '' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,               0.,y2(1))
@@ -32434,7 +32582,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r107', '' )
       ENDIF
 
 * quantum yield  = 1
@@ -32929,6 +33077,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -33045,7 +33195,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r111', '' )
       ENDIF
 
 * quantum yield  = 1
@@ -33096,6 +33246,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -33219,7 +33371,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r112', '' )
          ENDIF
 
       ELSEIF(mabs .eq. 2) then
@@ -33242,7 +33394,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x,y,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r112', '' )
          ENDIF
 
       ENDIF
@@ -33576,6 +33728,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -33690,7 +33844,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r115', '' )
       ENDIF
 
       qy = 1.
@@ -33725,6 +33879,8 @@ c      INCLUDE 'params'
 *= T 75 NO3-(aq) -> NO2- + O(3P)                                             =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -33856,7 +34012,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r118', '' )
          ENDIF
 
          n2 = n
@@ -33867,7 +34023,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r118', '' )
          ENDIF
 
       elseif (mabs .eq. 2) then
@@ -33894,7 +34050,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg2,n1,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r118', '' )
          ENDIF
 
       endif
@@ -33953,6 +34109,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -34069,7 +34227,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r119', '' )
       ENDIF
 
 * Quantum Yields from 
@@ -34124,6 +34282,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -34250,7 +34410,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r120', '' )
       ENDIF
 
       CALL addpnt(x2,y2,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -34260,7 +34420,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r120', '' )
       ENDIF
 
 * quantum yields from Harwood et al., at 308 nm
@@ -34316,6 +34476,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -34436,7 +34598,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r121', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -34488,6 +34650,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -34608,7 +34772,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r122', '' )
       ENDIF
 
 * quantum yields are pressure dependent between air number densities
@@ -34666,6 +34830,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -34787,7 +34953,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r123', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -34837,6 +35003,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -34955,7 +35123,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r124', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -35003,6 +35171,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -35142,7 +35312,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r125', '' )
          ENDIF
          
          DO iw = 1, nw-1
@@ -35217,6 +35387,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -35340,7 +35512,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r126', '' )
          ENDIF
 
       elseif (mabs .eq. 2) then
@@ -35363,7 +35535,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg,n,x1,y1,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'r126', '' )
          ENDIF
 
       endif
@@ -35413,6 +35585,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -35530,7 +35704,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r127', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -35578,6 +35752,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 
 c      INCLUDE 'params'
@@ -35696,7 +35872,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r128', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -35745,6 +35921,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 C     INCLUDE 'params'
 
@@ -35864,7 +36042,7 @@ C     INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r129', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -35914,6 +36092,8 @@ C     INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -36031,7 +36211,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r130', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -36078,6 +36258,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -36231,7 +36413,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg223,nn,x223,y223,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r131', '' )
       ENDIF
 
       nn = n
@@ -36242,7 +36424,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg243,nn,x243,y243,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r131', '' )
       ENDIF
 
       nn = n
@@ -36253,7 +36435,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg263,nn,x263,y263,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r131', '' )
       ENDIF
 
       nn = n
@@ -36264,7 +36446,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg298,nn,x298,y298,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r131', '' )
       ENDIF
 
       nn = n
@@ -36275,7 +36457,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg323,nn,x323,y323,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r131', '' )
       ENDIF
 
       nn = n
@@ -36286,7 +36468,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg343,nn,x343,y343,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r131', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -36361,6 +36543,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -36497,7 +36681,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg204,nn,x204,y204,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r132', '' )
       ENDIF
 
       nn = n296
@@ -36508,7 +36692,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg296,nn,x296,y296,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r132', '' )
       ENDIF
 
       nn = n378
@@ -36519,7 +36703,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg378,nn,x378,y378,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r132', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -36584,6 +36768,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -36704,7 +36890,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r133', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -36756,6 +36942,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -36876,7 +37064,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r134', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -36927,6 +37115,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -37047,7 +37237,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r135', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -37096,6 +37286,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -37221,7 +37413,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r136', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -37270,6 +37462,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -37388,7 +37582,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r137', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -37438,6 +37632,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -37574,7 +37770,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y298,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j-1)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'pxCH2O', '' )
       ENDIF
 
       CALL addpnt(x2,tcoef,kdata,n2,x2(1)*(1.-deltax),0.)
@@ -37584,7 +37780,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,tcoef,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j-1)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'pxCH2O', '' )
       ENDIF
 
 * quantum yields: Read, terminate, interpolate:
@@ -37609,7 +37805,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg3,n1,x1,qr,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j-1)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'pxCH2O', '' )
          ENDIF
 
          CALL addpnt(x2,qm,kdata,n2,x2(1)*(1.-deltax),qm(1))
@@ -37619,7 +37815,7 @@ c      INCLUDE 'params'
          CALL inter2(nw,wl,yg4,n2,x2,qm,ierr)
          IF (ierr .NE. 0) THEN
             WRITE(*,*) ierr, jlabel(j-1)
-            STOP
+            call Print_msg( NVERB_FATAL, 'GEN', 'pxCH2O', '' )
          ENDIF
 
 * combine gridded quantities:
@@ -37697,6 +37893,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -37815,7 +38013,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r138', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -37864,6 +38062,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -37982,7 +38182,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r139', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -38031,6 +38231,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -38150,7 +38352,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r140', '' )
       ENDIF
 
 * compute temperature correction factors:
@@ -38222,6 +38424,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -38348,7 +38552,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r141', '' )
       ENDIF
 
       n2 = n
@@ -38359,7 +38563,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,n2,x2,y2,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r141', '' )
       ENDIF
 
 * quantum yield = 1
@@ -38413,6 +38617,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -38536,7 +38742,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r142', '' )
       ENDIF
 
 * quantum yield = 1
@@ -38585,6 +38791,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -38708,7 +38916,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r143', '' )
       ENDIF
 
 * quantum yield = 1
@@ -38757,6 +38965,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -38880,7 +39090,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,n1,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r144', '' )
       ENDIF
 
 * quantum yield = 1
@@ -38927,6 +39137,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -39044,7 +39256,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r145', '' )
       ENDIF
 
 * quantum yields assumed unity
@@ -39095,6 +39307,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -39211,7 +39425,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg1,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r146', '' )
       ENDIF
 
 * quantum yields 
@@ -39234,7 +39448,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg2,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r146', '' )
       ENDIF
 
 * combine
@@ -39281,6 +39495,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -39397,7 +39613,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r147', '' )
       ENDIF
 
 * quantum yields 
@@ -39446,6 +39662,8 @@ c      INCLUDE 'params'
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -39562,7 +39780,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,nn,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r148', '' )
       ENDIF
 
 * quantum yields 
@@ -39616,6 +39834,8 @@ c      INCLUDE 'params'
 *= and ReLACS3 mecanisms - March 2018                                        =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -39732,7 +39952,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r149', '' )
       ENDIF
 
 * quantum yields assumed to be 0.34
@@ -39789,6 +40009,8 @@ c      INCLUDE 'params'
 *= Routine added by M. Leriche for BALD in RACM2 mecanism - March 2018       =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -39904,7 +40126,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r150', '' )
       ENDIF
 
 * quantum yields assumed to be 0.06
@@ -39960,6 +40182,8 @@ c      INCLUDE 'params'
 *= Adapted from TUVLaMP original 05/98  - March 2018                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -40076,7 +40300,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r151', '' )
       ENDIF
 
 * quantum yields from:
@@ -40138,6 +40362,8 @@ c      INCLUDE 'params'
 *= Adapted from TUVLaMP original 05/98  - March 2018                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -40254,7 +40480,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x,y,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, jlabel(j)
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'r152', '' )
       ENDIF
 
 * quantum yields from:
@@ -40670,6 +40896,8 @@ CCC FILE setcld.f
 *=            wavelength                                                     =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -40799,7 +41027,9 @@ C     grid (which has NLEVEL points: Z(1:NLEVEL) = AZ(*)
 *     asymmetry factor = 0.85
 
           n = nlevel + 1
-          if (n .gt. kdata) stop "SETCLD: not enough memory: KDATA"
+          if (n .gt. kdata)
+     &      call Print_msg( NVERB_FATAL, 'GEN', 'setcld',
+     &                      'not enough memory: KDATA' )
           zd(1) = 0.
           do 110, i = 2, n
             zd(i) = 0.5*( z(i-1) + z(i) )
@@ -41184,8 +41414,8 @@ c      INCLUDE 'params'
 *  Assumes that O2 = 20.95 % of air density.  If desire different O2 
 *    profile (e.g. for upper atmosphere) then can load it here.
 
-      DO iz = 1, nz
-         DO iw =1, nw - 1   
+      DO iz = 1, nz-1
+         DO iw =1, nw - 1
             dto2(iz,iw) = 0.2095 * cz(iz) * o2xs1(iw)
          ENDDO  
       ENDDO
@@ -41488,6 +41718,8 @@ c      INCLUDE 'params'
 *= send email to:  sasha@ucar.edu                                            =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -41591,7 +41823,7 @@ c      INCLUDE 'params'
       CALL inter2(nw,wl,yg,n,x1,y1,ierr)
       IF (ierr .NE. 0) THEN
          WRITE(*,*) ierr, fil
-         STOP
+         call Print_msg( NVERB_FATAL, 'GEN', 'rdice_acff', '' )
       ENDIF
       
       DO 13, l = 1, nw-1
@@ -42212,6 +42444,8 @@ CCC FILE swchem.f
 *=           defined                                                         =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -42634,7 +42868,7 @@ C      CALL r145(nw,wl,wc,nz,tlev,airden,j,sq,jlabel,tpflag,kout)
 
 ****************************************************************
 
-      IF (j .GT. kj) STOP '1002'
+      IF (j .GT. kj) call Print_msg( NVERB_FATAL, 'GEN', 'swchem', '' )
       RETURN
       END
 
@@ -42663,6 +42897,8 @@ CCC FILE vpair.f
 *=            altitude layer (column vertical increment                      =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 c      INCLUDE 'params'
 
@@ -42803,7 +43039,8 @@ c      INCLUDE 'params'
          airlog(i) = ALOG(air(i))
       ENDDO
 
-      IF(z(nz) .GT. zd(nd)) STOP 'in vpair: ztop < zdata'
+      IF(z(nz) .GT. zd(nd)) call Print_msg( NVERB_FATAL, 'GEN',
+     &                                      'vpair', 'ztop < zdata' )
       CALL inter1(nz,z,conlog, nd,zd,airlog)
 
       DO i = 1, nz
@@ -42824,7 +43061,8 @@ c      INCLUDE 'params'
 *   calculation is based on nz-1 layers (not nz).
 
       col(nz-1) = col(nz-1) + 1.E5 * hscale * con(nz)
-  
+      col(nz) = 0.
+
 * Scale by input surface pressure:
 * min value = 1 molec cm-2
 
@@ -42879,6 +43117,8 @@ CCC FILE vpo3.f
 *=  case it is necessary to convert from mixing ratio units (e.g. ppb).      =*
 *-----------------------------------------------------------------------------*
 
+      use mode_msg
+
       IMPLICIT NONE
 
 ********
@@ -43053,7 +43293,9 @@ c      INCLUDE 'params'
       IF (to3new .GT. nzero) THEN
 
          to3old = fsum(nz-1, col)/2.687e16
-         IF(to3old .LT. pzero) STOP 'in vpo3: to3old is too small'
+         IF(to3old .LT. pzero)
+     &     call Print_msg( NVERB_FATAL, 'GEN', 'vpo3',
+     &                     'to3old is too small' )
          scale = to3new/to3old
          DO i = 1, nz-1
             col(i) = col(i) * scale
diff --git a/src/MNH/ch_field_valuen.f90 b/src/MNH/ch_field_valuen.f90
index c20e8e8581a283fc09737ca555cc0541ed5334d3..0693c28a24b13c14162aebc939e5b5d80508adcc 100644
--- a/src/MNH/ch_field_valuen.f90
+++ b/src/MNH/ch_field_valuen.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !!    ############################ 
@@ -70,12 +70,16 @@ END MODULE MODI_CH_FIELD_VALUE_n
 !!    11/08/98 (N. Asencio) add parallel code
 !!    28/07/99 (V. Crassier & K. Suhre) modify initialization scheme (1-D)
 !!    Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
+USE MODD_IO,            ONLY: TFILEDATA
+
+USE MODE_IO_FILE,       ONLY: IO_File_close
+use mode_msg
+
 USE MODI_CH_OPEN_INPUT  ! open general purpose ASCII input file
-USE MODD_IO_ll,         ONLY: TFILEDATA
-USE MODE_FM,            ONLY: IO_FILE_CLOSE_ll
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -100,6 +104,7 @@ INTEGER,          INTENT(IN) :: KVERB           ! verbosity level
 !
 !*      0.2    declarations local variables
 !
+character(len=10) :: yval            ! String for error message
 INTEGER       :: JI, JJ              ! loop control variables
 INTEGER       :: ICHANNEL            ! I/O channel for file input
 CHARACTER(LEN=40) :: YFORMAT         ! format for input
@@ -169,7 +174,7 @@ firstcall: IF (GSFIRSTCALL) THEN
   END IF
 !
 ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 !
 ! check if Z-profile is given in increasing order, otherwise stop
@@ -177,12 +182,10 @@ firstcall: IF (GSFIRSTCALL) THEN
   DO JI = 2, ISLEVEL
     IF (ZINF .GE. ZSZPROF(JI)) THEN
       WRITE(KLUOUT,*) &
-   	   "CH_FIELD_VALUE_n-Error: Z-profile must be in increasing order!"
+        "CH_FIELD_VALUE_n-Error: Z-profile must be in increasing order!"
       WRITE(KLUOUT,*) " minimum value: ",ZINF," at level ",IINF
       WRITE(KLUOUT,*) " current value: ",ZSZPROF(JI)," at level ",JI
-      ! callabortstop
-      CALL ABORT
-      STOP "Program stopped by CH_FIELD_VALUE_n"
+      call Print_msg( NVERB_FATAL, 'GEN', 'CH_FIELD_VALUE_n', 'Z-profile must be in increasing order' )
     ENDIF
     ZINF = ZSZPROF(JI) ; IINF=JI
   ENDDO
@@ -214,7 +217,7 @@ firstcall: IF (GSFIRSTCALL) THEN
   ENDDO
 !
 ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 !
 !
@@ -236,10 +239,7 @@ firstcall: IF (GSFIRSTCALL) THEN
       WRITE(KLUOUT,*) "initial data is given as mixing ratio (part per par)"
     END IF
   ELSE
-    WRITE(KLUOUT,*) "CH_FIELD_VALUE_n ERROR: unit type unknown: ", HUNIT
-    ! callabortstop
-    CALL ABORT
-    STOP
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_FIELD_VALUE_n', 'unknown unit type: '//trim(HUNIT) )
   ENDIF
 !
 ! read number of initial values ISINIT
@@ -261,7 +261,7 @@ firstcall: IF (GSFIRSTCALL) THEN
   ENDDO
 !
 ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 !
 ENDIF firstcall
@@ -327,19 +327,13 @@ ENDDO search_loop
 !*       2.5   check boundaries of IASSOACT and IINITACT
 !
 IF ((IASSOACT.LE.0).OR.(IASSOACT.GT.ISPROF)) THEN
-  WRITE(KLUOUT,*) &
-    "CH_FIELD_VALUE_n-ERROR: unproper associated profile value:", IASSOACT
-    ! callabortstop
-    CALL ABORT
-  STOP
+  write( yval, '( I10 )' ) IASSOACT
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_FIELD_VALUE_n', 'invalid associated profile value: '//trim(yval) )
 ENDIF
 !
 IF ((IINITACT.LE.0).OR.(IINITACT.GT.ISINIT)) THEN
-  WRITE(KLUOUT,*) &
-    "CH_FIELD_VALUE_n-ERROR: unproper associated initial value:", IINITACT
-    ! callabortstop
-    CALL ABORT
-  STOP
+  write( yval, '( I10 )' ) IINITACT
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_FIELD_VALUE_n', 'invalid associated initial value: '//trim(yval) )
 ENDIF
 !
 !*       2.6   linear interpolation between IZINDEX and IZINDEX+1, 
diff --git a/src/MNH/ch_gauss.f90 b/src/MNH/ch_gauss.f90
index e26ede04a9b48730097f58ead1bd7e268f4b749e..4d974eeb49311d301a67e53ed2c1d000d5253186 100644
--- a/src/MNH/ch_gauss.f90
+++ b/src/MNH/ch_gauss.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 chimie 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !!    ############################# 
       MODULE MODI_CH_GAUSS
 !!    ############################# 
@@ -58,10 +53,11 @@ END MODULE MODI_CH_GAUSS
 !!    -------------
 !!    Original 24/02/95 (adapted from FORTRAN77 version in tools.k)
 !!    27/02/95 (K. Suhre) put in some more array syntax
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 
 !!    EXTERNAL
 !!    --------
-!!    none
+use mode_msg
 
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -109,14 +105,11 @@ elimination_loop : DO JJ = 1, KDIM
 !*    check for singulary matrix, print error message and stop 
 !*    if this is requested by KFAIL (see above for possible values for KFAIL)
   error : IF (ZMAX.LE.PPEPS) THEN
-    IF (KFAIL.GE.0) THEN
-      PRINT *, "Error message from subroutine CH_GAUSS: ", &
-	       "singulary matrix cannot be inverted!"
+    IF ( KFAIL > 0 ) THEN
+      call Print_msg( NVERB_WARNING, 'GEN', 'CH_GAUSS', 'singulary matrix cannot be inverted' )
     ENDIF
-    IF (KFAIL.EQ.0) THEN
-       !callabortstop
-      CALL ABORT
-      STOP 1
+    IF ( KFAIL == 0 ) THEN
+      call Print_msg( NVERB_FATAL,   'GEN', 'CH_GAUSS', 'singulary matrix cannot be inverted' )
     ENDIF
     KFAIL = 1
     RETURN
diff --git a/src/MNH/ch_ini_orilam.f90 b/src/MNH/ch_ini_orilam.f90
index be7064e272cc36faf426dc2cea4d193cde4699e9..a317f49cb71b239f231abcf4ada36fa7c681a3b6 100644
--- a/src/MNH/ch_ini_orilam.f90
+++ b/src/MNH/ch_ini_orilam.f90
@@ -1,13 +1,8 @@
-!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
 !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !ORILAM_LIC for details.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 chimie 2007/03/02 13:59:36
-!-----------------------------------------------------------------
 !!   ###########################
      MODULE MODI_CH_INI_ORILAM
 !!   ###########################
@@ -64,26 +59,30 @@ END MODULE MODI_CH_INI_ORILAM
 !!    MODIFICATIONS
 !!    -------------
 !!    Original
-!! 
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!!
 !!    EXTERNAL
 !!    --------
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODI_CH_AER_SOLV
-USE MODI_CH_AER_TRANS
 USE MODD_CH_AEROSOL
-USE MODD_CSTS_DUST, ONLY : XDENSITY_DUST
 USE MODD_CH_M9_n, ONLY : CNAMES
 USE MODD_CST, ONLY :    &
        XPI              & !Definition of pi
-      ,XBOLTZ           & ! Boltzman constant 
+      ,XBOLTZ           & ! Boltzman constant
       ,XAVOGADRO        & ![molec/mol] avogadros number
       ,XG               & ! Gravity constant
       ,XP00             & ! Reference pressure
       ,XMD              & ![kg/mol] molar weight of air
       ,XRD              & ! Gaz constant for dry air
       ,XCPD               !  Cpd (dry air)
+USE MODD_CSTS_DUST, ONLY : XDENSITY_DUST
+!
+use mode_msg
+!
+USE MODI_CH_AER_SOLV
+USE MODI_CH_AER_TRANS
 !
 !*       0.     DECLARATIONS
 !               ------------
@@ -106,6 +105,7 @@ CHARACTER(LEN=10),      INTENT(IN)    :: GSCHEME
 !
 !*      0.2    declarations of local variables
 !
+character(len=10) :: yspec ! String for error message
 REAL, DIMENSION(SIZE(PM,1),(JPMODE)*3)    :: ZDMINTRA, ZDMINTER, ZDMCOND
 REAL, DIMENSION(SIZE(PM,1),JPMODE)        :: ZMASK, ZSOLORG
 
@@ -151,10 +151,8 @@ ENDDO
 ! verify that all array elements are defined
 DO JI = 1, SIZE(XRHOI)
   IF (XRHOI(JI) .LE. 0.0) THEN
-    PRINT *, 'CH_AER_MOD_INIT ERROR: density for species ', JI, ' not defined'
-    ! callabortstop
-    CALL ABORT
-    STOP 'CH_AER_MOD_INIT ERROR: density not defined'
+    write( yspec, '( I10 )' ) JI
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_AER_MOD_INIT', 'density for species '//trim(yspec)//' not defined' )
   END IF
 ENDDO
 !
diff --git a/src/MNH/ch_init_budgetn.f90 b/src/MNH/ch_init_budgetn.f90
index a8f26864b055bd6bf5ebbc1778fec9826ac019a1..d84ff1f7584f5f3346a4691330d6b43a9ad0cdee 100644
--- a/src/MNH/ch_init_budgetn.f90
+++ b/src/MNH/ch_init_budgetn.f90
@@ -1,4 +1,9 @@
-!!    ########################### 
+!MNH_LIC Copyright 2016-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_CH_INIT_BUDGET_n
 !!    ########################### 
 !!
@@ -43,16 +48,19 @@ END MODULE MODI_CH_INIT_BUDGET_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    October 2016                   
+!!      Original    October 2016
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
-USE MODD_CH_MNHC_n,  ONLY: LUSECHAQ, CSPEC_BUDGET
-USE MODD_CH_M9_n,    ONLY: CNAMES, NEQ
 USE MODD_CH_BUDGET_n, ONLY: NEQ_BUDGET, CNAMES_BUDGET, NSPEC_BUDGET
+USE MODD_CH_M9_n,    ONLY: CNAMES, NEQ
+USE MODD_CH_MNHC_n,  ONLY: LUSECHAQ, CSPEC_BUDGET
 USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG, CSPEC_BU_DIAG
-!
+
+use mode_msg
+
 IMPLICIT NONE 
 
 INTEGER, INTENT(IN)  :: KLUOUT   ! output listing channel
@@ -112,9 +120,7 @@ IF (YWORKSTR /= '') THEN
       END IF
    END DO
    IF (GCHECKFAILED) THEN
-      WRITE(KLUOUT,*) 'Wrong (misspelled) CSPEC_BUDGET encountered...ABORTING !'
-      CALL ABORT
-      STOP 
+     call Print_msg( NVERB_FATAL, 'GEN', 'CH_INIT_BUDGET_n', 'wrong (misspelled) CSPEC_BUDGET encountered' )
    END IF
 ELSE
    DEALLOCATE(CNAMES_BUDGET)
diff --git a/src/MNH/ch_init_constn.f90 b/src/MNH/ch_init_constn.f90
index 4e306a0d0cc20d25b62887b04d73214af10aa50b..8473c00837d381118840260e24f6ec926bad5c1a 100644
--- a/src/MNH/ch_init_constn.f90
+++ b/src/MNH/ch_init_constn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-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.
 !-----------------------------------------------------------------
 !!    ################################ 
@@ -56,13 +56,13 @@ END MODULE MODI_CH_INIT_CONST_n
 !!    MODIFICATIONS
 !!    -------------
 !!    Original 16/02/01
-!!  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: 25/02/2019: bug correction for the file unit numbers
 !!    EXTERNAL
 !!    --------
 USE MODI_CH_OPEN_INPUT  ! open the general purpose ASCII input file
-USE MODD_IO_ll,         ONLY: TFILEDATA
-USE MODE_FM,            ONLY: IO_FILE_CLOSE_ll
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODE_IO_FILE,       ONLY: IO_File_close
 
 !!
 !!    IMPLICIT ARGUMENTS
@@ -111,7 +111,6 @@ CHARACTER(LEN=40), DIMENSION(:), ALLOCATABLE :: YHENRYNAME !species names
 REAL             , DIMENSION(:,:), ALLOCATABLE :: ZHENRYVAL
                           !chemical Henry constant value
 !
-INTEGER :: IFAIL          ! return code from CLOSE_ll
 INTEGER :: JI, JN, JNREAL ! loop control variables
 INTEGER :: INACT          ! array pointer
 TYPE(TFILEDATA),POINTER :: TZFILE
@@ -152,7 +151,7 @@ DO JI = 1, IMASS
 END DO
 !
 ! close file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 TZFILE => NULL()
 !
 !
@@ -206,7 +205,7 @@ DO JI = 1, IREACT
 END DO
 !
 ! close file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 TZFILE => NULL()
 !
 !
@@ -241,6 +240,7 @@ IF (KVERB >= 5) WRITE(KLUOUT,*) &
    "CH_INIT_CONST: reading effective Henry constant", &
    " and its temperature correction "
 CALL CH_OPEN_INPUT(CCHEM_INPUT_FILE, "HENRY_SP", TZFILE, KLUOUT, KVERB)
+ICHANNEL = TZFILE%NLU
 !
 ! read number of molecular diffusivity IHENRY
 READ(ICHANNEL, *) IHENRY
@@ -263,7 +263,7 @@ DO JNREAL = 1, IHENRY
 END DO
 !
 ! close file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 TZFILE => NULL()
 !
 IF (KVERB >= 10) THEN
diff --git a/src/MNH/ch_init_meteo.f90 b/src/MNH/ch_init_meteo.f90
index 95191d0f658be26c4252a93ea3e3dda87a6b9606..74bc0ec52fe8d4b96788f301e38767e7b3cd6c48 100644
--- a/src/MNH/ch_init_meteo.f90
+++ b/src/MNH/ch_init_meteo.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !!    #########################
@@ -53,13 +53,14 @@ END MODULE MODI_CH_INIT_METEO
 !!                        to interpolate between different forcings)
 !!    01/12/03 (Gazen)   change Chemical scheme interface
 !!    Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!
 !!    EXTERNAL
 !!    --------
 USE MODI_CH_OPEN_INPUT
-USE MODE_FM,         ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_ll
+USE MODE_IO_FILE,     ONLY: IO_File_close
+use mode_msg
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -79,8 +80,8 @@ TYPE(METEOTRANSTYPE), INTENT(OUT) :: TPM  ! the meteo variables
 !
 !*       0.2  declaration of local variables
 !
+character(len=10) :: ynum1, ynum2 ! Strings for error message
 INTEGER      :: JI, JJ      ! loop control
-CHARACTER*80 :: YCOMMENT    ! comment line in meteo update file
 INTEGER      :: IMETEOVARS  ! number of meteovars to be read from file and
 			    ! checked against NMETEOVARS
 INTEGER      :: ILUMETEO
@@ -101,14 +102,10 @@ READ(ILUMETEO,*) NMETEORECS
 !
 ! check if number of meteovars in file corresponds to what the CCS expects
 IF (IMETEOVARS .NE. NMETEOVARS) THEN
-  PRINT *, "CH_INIT_METEO ERROR: number of meteo variables in file does not"
-  PRINT *, "                     correspond to the number expected by the CCS:"
-  PRINT *, "                     IMETEOVARS read:     ", IMETEOVARS
-  PRINT *, "                     NMETEOVARS expected: ", NMETEOVARS
-  PRINT *, "The program will be stopped now!"
-  ! callabortstop
-  CALL ABORT
-  STOP 1
+  write( ynum1, '( I10 )' ) IMETEOVARS
+  write( ynum2, '( I10 )' ) NMETEOVARS
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_INIT_METEO', 'number of meteo variables in file '//trim(ynum1)// &
+                  ' does not correspond to the number expected by the CCS'//trim(ynum2) )
 END IF
 
 ! read names for TPM%CMETEOVAR
@@ -138,6 +135,6 @@ END DO
 !
 ! close file
 !
-CALL IO_FILE_CLOSE_ll(TMETEOFILE)
+CALL IO_File_close(TMETEOFILE)
 !
 END SUBROUTINE CH_INIT_METEO
diff --git a/src/MNH/ch_init_prodlosstotn.f90 b/src/MNH/ch_init_prodlosstotn.f90
index 05d669ad46796d2867fa21f8ab413d6244b78fb1..a5547a445f7a0bd24f688c5704d7a119ecb233bb 100644
--- a/src/MNH/ch_init_prodlosstotn.f90
+++ b/src/MNH/ch_init_prodlosstotn.f90
@@ -1,4 +1,9 @@
-!!    ########################### 
+!MNH_LIC Copyright 2016-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_CH_INIT_PRODLOSSTOT_n
 !!    ########################### 
 !!
@@ -43,7 +48,8 @@ END MODULE MODI_CH_INIT_PRODLOSSTOT_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    October 2016                   
+!!      Original    October 2016
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -52,7 +58,10 @@ USE MODD_CH_MNHC_n,  ONLY: LUSECHAQ, CSPEC_PRODLOSS
 USE MODD_CH_M9_n,    ONLY: CNAMES, NEQ
 USE MODD_CH_PRODLOSSTOT_n, ONLY: NEQ_PLT, CNAMES_PRODLOSST, NIND_SPEC
 USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG, CSPEC_DIAG
-IMPLICIT NONE 
+
+use mode_msg
+
+IMPLICIT NONE
 
 INTEGER, INTENT(IN)  :: KLUOUT   ! output listing channel
 !local variables
@@ -114,9 +123,7 @@ IF (YWORKSTR /= '') THEN
       END IF
    END DO
    IF (GCHECKFAILED) THEN
-      WRITE(KLUOUT,*) 'Wrong (misspelled) CSPEC encountered...ABORTING !'
-      CALL ABORT
-      STOP 
+     call Print_msg( NVERB_FATAL, 'GEN', 'CH_INIT_PRODLOSSTOT_n', 'wrong (misspelled) CSPEC encountered' )
    END IF
 ELSE
    DEALLOCATE(CNAMES_PRODLOSST)
diff --git a/src/MNH/ch_init_rosenbrock.f90 b/src/MNH/ch_init_rosenbrock.f90
index e239dcad698fcff6ca0f899e7461315a2fe0c0ef..d18187f8cfade5b41c26ab27ec8948ba94825fbf 100644
--- a/src/MNH/ch_init_rosenbrock.f90
+++ b/src/MNH/ch_init_rosenbrock.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 !     ##############################
       MODULE MODI_CH_INIT_ROSENBROCK
 !     ##############################
@@ -46,6 +47,7 @@ END MODULE MODI_CH_INIT_ROSENBROCK
 !!    MODIFICATIONS
 !!    -------------
 !!    Original 05/06/07
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!
 !!    IMPLICIT ARGUMENTS
@@ -59,6 +61,8 @@ USE MODI_CH_SPARSE
 !
 USE MODD_CH_M9_n, ONLY: NEQ, NEQAQ, NNONZEROTERMS
 USE MODD_CH_ROSENBROCK_n
+
+use mode_msg
 !
 !*       0.   DECLARATIONS
 !        -----------------
@@ -118,7 +122,7 @@ JLL_Loop2:  DO JLL = 1, NSPARSEDIM
               WRITE(KLUOUT,*)"DIAGONAL ELEMENT IS FOUND FOR CHEMICAL COMPOUND"
               WRITE(KLUOUT,*)"NUMBER: ",JLL," IN THE JACOBIAN MATRIX !!!"
               WRITE(KLUOUT,*)"PLEASE MODIFY AND REPROCESS THE CHEMICAL SYSTEM"
-              STOP
+              call Print_msg( NVERB_FATAL, 'GEN', 'CH_INIT_ROSENBROCK', 'no diagonal element found for chemical compound' )
             ENDIF
           END DO
 !
diff --git a/src/MNH/ch_linssa.f90 b/src/MNH/ch_linssa.f90
index e1e5b03d10c910819bffea663616cd1208f93d8b..e530c4541cefcc0e30044bee5b4013fe4c6f0a7d 100644
--- a/src/MNH/ch_linssa.f90
+++ b/src/MNH/ch_linssa.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 chimie 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !!    ##################### 
       MODULE MODI_CH_LINSSA
 !!    ##################### 
@@ -65,9 +60,12 @@ SUBROUTINE CH_LINSSA(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KVECNPT, KMI, &
 !!    -------------
 !!    Original 25/04/95
 !!    Modification   01/12/03  (Gazen)   change Chemical scheme interface
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
+use mode_msg
+
 USE MODI_CH_FCN
 USE MODI_CH_JAC
 USE MODI_CH_GAUSS
@@ -152,9 +150,7 @@ ENDDO
 IFAIL = 1
 CALL CH_GAUSS(ZWORK,ZINV,KEQ,IFAIL)
 IF (IFAIL.NE.0) THEN
-! callabortstop
-  CALL ABORT
-  STOP 'CH_LinSSA ERROR: matrix cannot be inverted by CH_GAUSS'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_LinSSA', 'matrix cannot be inverted by CH_GAUSS' )
 ENDIF
 !
 !*       5.   CALCULATE 1/2 * (P+I) * f^n
diff --git a/src/MNH/ch_meteo_trans_c2r2.f90 b/src/MNH/ch_meteo_trans_c2r2.f90
index f8265684b25786a03c85546485f4ef85366aedad..02c25bb7121a6322473a5dadc016198d286298dd 100644
--- a/src/MNH/ch_meteo_trans_c2r2.f90
+++ b/src/MNH/ch_meteo_trans_c2r2.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_CH_METEO_TRANS_C2R2
 !!    ############################### 
@@ -101,6 +97,7 @@ SUBROUTINE CH_METEO_TRANS_C2R2(KL, PRHODJ, PRHODREF, PRTSM, PCCTSM, PCRTSM,   &
 !!    14/05/08 (M. Leriche) include raindrops and cloud droplets mean radius
 !!    05/06/08 (M. Leriche) calculate LWC and LWR in coherence with time spliting scheme
 !!    05/11/08 (M. Leriche) split in two routines for 1-moment and 2-moment cloud schemes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
@@ -126,6 +123,8 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: XRTMIN,        & ! min values of the water m. r.
                                 XLBC, XLBEXC,  & !shape param. of the cloud droplets
                                 XLBR, XLBEXR     !shape param. of the raindrops
 !!
+use mode_msg
+
 USE MODI_GAMMA
 !
 !-------------------------------------------------------------------------------
@@ -188,7 +187,8 @@ firstcall : IF (GSFIRSTCALL) THEN
     WRITE(KLUOUT,*) "     NMETEOVARS expected:   ", NMETEOVARS
     WRITE(KLUOUT,*) "Check the definition of NMETEOVARS in your .chf file."
     WRITE(KLUOUT,*) "The program will be stopped now!"
-    STOP 1
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_METEO_TRANS_C2R2', &
+                    'number of meteovars to transfer does not correspond to the expected number.' )
   END IF
 !
 !*       1.2   initialize names of meteo vars
diff --git a/src/MNH/ch_meteo_trans_kess.f90 b/src/MNH/ch_meteo_trans_kess.f90
index fe2bf8559b09ddc7708e46e98adb5f440fbc70d4..74bd129b6cfcc6b745181566ad3e48e21e7d1771 100644
--- a/src/MNH/ch_meteo_trans_kess.f90
+++ b/src/MNH/ch_meteo_trans_kess.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_CH_METEO_TRANS_KESS
 !!    ############################### 
@@ -99,6 +95,7 @@ SUBROUTINE CH_METEO_TRANS_KESS(KL, PRHODJ, PRHODREF, PRTSM, PTHT, PABST, &
 !!    14/05/08 (M. Leriche) include raindrops and cloud droplets mean radius
 !!    05/06/08 (M. Leriche) calculate LWC and LWR in coherence with time spliting scheme
 !!    05/11/08 (M. Leriche) split in two routines for 1-moment and 2-moment cloud schemes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
@@ -125,6 +122,8 @@ USE MODD_RAIN_ICE_DESCR,  ONLY: XNUC, XALPHAC,  & !Cloud droplets distrib. param
                                 XLBR,  XLBEXR,  & !shape param. of the raindrops
                                 XCONC_LAND
 !!
+use mode_msg
+
 USE MODI_GAMMA
 !
 !-------------------------------------------------------------------------------
@@ -185,7 +184,8 @@ firstcall : IF (GSFIRSTCALL) THEN
     WRITE(KLUOUT,*) "     NMETEOVARS expected:   ", NMETEOVARS
     WRITE(KLUOUT,*) "Check the definition of NMETEOVARS in your .chf file."
     WRITE(KLUOUT,*) "The program will be stopped now!"
-    STOP 1
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_METEO_TRANS_KESS', &
+                    'number of meteovars to transfer does not correspond to the expected number.' )
   END IF
 !
 !*       1.2   initialize names of meteo vars
diff --git a/src/MNH/ch_model0d.f90 b/src/MNH/ch_model0d.f90
index da17517f38e842ce610ddb0c91032566af4ee404..fbff58f803bca28cbadd31c2389c8b635a3f9a7d 100644
--- a/src/MNH/ch_model0d.f90
+++ b/src/MNH/ch_model0d.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
@@ -81,10 +81,10 @@ USE MODD_CH_M9_n,     ONLY: NEQ, NREAC,      & ! no. of species & reactions
                             CNAMES,          & ! names of chem. species
                             METEOTRANSTYPE     ! TYPE of meteo struct variable
 
-USE MODD_CONF, ONLY : CPROGRAM 
-USE MODD_CH_M9_SCHEME, ONLY :  CCSTYPE,TACCS
+USE MODD_CONF,         ONLY: CPROGRAM
+USE MODD_CH_M9_SCHEME, ONLY:  CCSTYPE,TACCS
 
-USE MODE_IO_ll
+USE MODE_IO,           only: IO_Init
 USE MODE_MODELN_HANDLER
 !!
 !!
@@ -184,7 +184,7 @@ XCH_TUV_DOBNEW = 320.  ! O3 dobson (to be modified)
 !
 !*       1.   INITIALISATION
 !        -------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
 !*       1.1  read namelist and initialize time control variables
 !
diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90
index fb7fda98074078b1bf06621026f8ffa7e4277d5a..c5357b6a18dd0e5275a5c866958cb60f0edba919 100644
--- a/src/MNH/ch_monitorn.f90
+++ b/src/MNH/ch_monitorn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_CH_MONITOR_n
@@ -113,6 +113,8 @@ END MODULE MODI_CH_MONITOR_n
 !!    20/01/17 (G.Delautier) bug if CPROGRAM/=DIAG
 !!    01/10/17 (C.Lac) add correction of negativity
 !!    Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 12/02/2019: bugfix: ZINPRR was not initialized all the time
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
@@ -142,6 +144,7 @@ USE MODI_CH_AER_DEPOS
 !
 USE MODE_ll
 USE MODE_MODELN_HANDLER
+use mode_msg
 !
 USE MODI_WRITE_TS1D
 USE MODD_CST, ONLY : XMNH_TINY
@@ -624,9 +627,7 @@ SELECT CASE (CCH_TDISCRETIZATION)
     IF (KVERB >= 10) WRITE(KLUOUT,*) "CH_MONITOR_n: using LAGGED option"
   CASE DEFAULT
     ! the following line should never be reached:
-    ! callabortstop
-    CALL ABORT
-    STOP "CH_MONITOR_n: CCH_TDISCRETIZATION option not valid"
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_MONITOR_n', 'invalid CCH_TDISCRETIZATION option ('//trim(CCH_TDISCRETIZATION)//')' )
 END SELECT
 !
 !
@@ -845,6 +846,8 @@ IF (LUSECHAQ.AND.(NRRL>=2) ) THEN
                                   XRSVS(:,:,:,NSV_CHACBEG+NEQAQ/2:NSV_CHACEND),&
                                   ZINPRR(:,:)                                  )
     END SELECT
+  ELSE
+    ZINPRR(:,:) = 0.
   END IF
 ELSE IF (LUSECHAQ.AND.(NRRL==1) ) THEN
   CALL CH_AQUEOUS_CHECK (PTSTEP, XRHODREF, XRHODJ, XRRS, XRSVS, NRRL, &
diff --git a/src/MNH/ch_open_input.f90 b/src/MNH/ch_open_input.f90
index 86faf3c6f56f1acf3b50a7f7fc3aa94cb4294820..f4518dbe4f3deebb14034990a5450e7098345f33 100644
--- a/src/MNH/ch_open_input.f90
+++ b/src/MNH/ch_open_input.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !!    ######################### 
@@ -11,7 +11,7 @@ INTERFACE
 !!
 SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB)
 !
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -39,13 +39,12 @@ SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB)
 !!
 !!**  METHOD
 !!    ------
-!!      An unused input channel is selected using OPEN_ll.
 !!    The file HCHEM_INPUT_FILE will be rewinded
 !!    at each call and data will be read in using (A8)-format until the
 !!    given keyword is found. The following comment line will then
 !!    be read and printed and the input channel number will be returned.
-!!    After reading the needed data, the user must assure that the file
-!!    will be closed and that the unit will be freed using CLOSE_ll.
+!!    After reading the needed data, the user must ensure that the file
+!!    will be closed.
 !!
 !!    REFERENCE
 !!    ---------
@@ -61,6 +60,7 @@ SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB)
 !!    05/08/96 (K. Suhre) restructured
 !!    11/08/98 (N. Asencio) add parallel code
 !!    Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!
 !!    IMPLICIT ARGUMENTS
@@ -73,10 +73,11 @@ SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB)
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -92,7 +93,7 @@ INTEGER,                 INTENT(IN)  :: KVERB            ! verbosity level
 !
 CHARACTER(LEN=79) :: YIN ! character string for line-by-line read
 INTEGER :: ILU
-INTEGER :: IRESP         ! return code from OPEN_ll
+INTEGER :: IRESP         ! return code from IO_File_open
 !
 !-------------------------------------------------------------------------------
 !
@@ -102,17 +103,12 @@ TPFILE => NULL()
 !              -----------------------
 !
 IF (KVERB >= 5) WRITE(KLUOUT,*) "CH_OPEN_INPUT: opening file ", HCHEM_INPUT_FILE
-CALL IO_FILE_ADD2LIST(TPFILE,HCHEM_INPUT_FILE,'CHEMINPUT','READ',OOLD=.TRUE.)
-CALL IO_FILE_OPEN_ll(TPFILE,KRESP=IRESP)
+CALL IO_File_add2list(TPFILE,HCHEM_INPUT_FILE,'CHEMINPUT','READ',OOLD=.TRUE.)
+CALL IO_File_open(TPFILE,KRESP=IRESP)
 ILU = TPFILE%NLU
 !
 IF (IRESP /= 0) THEN
-  WRITE(KLUOUT,*) "CH_OPEN_INPUT ERROR: unable to open file", HCHEM_INPUT_FILE
-  WRITE(KLUOUT,*) "                     IO_FILE_OPEN_ll return code is: ", IRESP
-  WRITE(KLUOUT,*) "                     the program will be stopped now"
-  ! callabortstop
-  CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_OPEN_INPUT', 'unable to open file '//trim(HCHEM_INPUT_FILE) )
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -148,9 +144,6 @@ RETURN
 !              ---------------------------------------
 !
 100 CONTINUE
-WRITE(KLUOUT,*) "CH_OPEN_INPUT-Error: Keyword ", HKEYWORD(1:8), " not found."
-! callabortstop
-CALL ABORT
-STOP "Program stopped"
+call Print_msg( NVERB_FATAL, 'GEN', 'CH_OPEN_INPUT', 'keyword '//HKEYWORD(1:8)//' not found' )
 !
 END SUBROUTINE CH_OPEN_INPUT
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_read_chem.f90 b/src/MNH/ch_read_chem.f90
index 56e358524ef66bf2c20ae111060a51c73bf657ad..bd3ed06dfc5da4908161c7f07ede175eaa09849e 100644
--- a/src/MNH/ch_read_chem.f90
+++ b/src/MNH/ch_read_chem.f90
@@ -1,6 +1,6 @@
 !MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !!    ######################## 
@@ -57,19 +57,24 @@ END MODULE MODI_CH_READ_CHEM
 !!    M.Leriche 2015 : masse molaire Black carbon à 12 g/mol
 !!    Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!    Philippe Wautelet: 10/01/2019: use newunit argument to open files
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
+use ISO_FORTRAN_ENV, only: IOSTAT_END
+
+USE MODE_IO_FILE,    ONLY: IO_File_close
+use mode_msg
+!
 USE MODI_CH_OPEN_INPUT
 USE MODI_CH_READ_VECTOR
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODD_CH_MODEL0D, ONLY: NVERB
-USE MODD_CH_M9_n, ONLY:      NEQ, CNAMES
 USE MODD_CH_AEROSOL
+USE MODD_CH_M9_n,    ONLY: NEQ, CNAMES
+USE MODD_CH_MODEL0D, ONLY: NVERB
+USE MODD_IO,         ONLY: TFILEDATA
 !!
 !!    EXPLICIT ARGUMENTS
 !!    ------------------
@@ -82,9 +87,12 @@ CHARACTER(LEN=*), INTENT(IN)      :: HFILE ! name of the file to be read from
 !
 !!    DECLARATION OF LOCAL VARIABLES
 !!    ------------------------------
+character(len=10) ::  yval1, yval2
+character(len=256) :: yioerrmsg
 CHARACTER(LEN=32) :: YVARNAME
 CHARACTER(LEN=80) :: YINPUT
 INTEGER :: ILU ! unit number for IO
+integer :: iresp
 INTEGER :: JI, JJ, IIN
 REAL :: ZMD
 REAL, DIMENSION(NSP+NCARB+NSOA) :: ZMI ! aerosol molecular mass in g/mol
@@ -109,7 +117,7 @@ IF (HFILE(1:14) .EQ. "CHCONTROL1.nam") THEN
   CALL CH_READ_VECTOR(NEQ, CNAMES, PCONC, 0.0, IIN, 6, NVERB)
   IF (LORILAM) CALL CH_READ_VECTOR(SIZE(PAERO,1), CAERONAMES, PAERO, 0.0, IIN, 6, NVERB)
 !
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
 !
 ELSE
 !
@@ -123,36 +131,40 @@ ELSE
 !
 ! read line by line and check variable names
 !
-  outer_loop : DO JI = 1, NEQ
-    READ(UNIT=ILU,FMT=*,END=999) YVARNAME, PCONC(JI)
-    check_loop : DO JJ = 1, 32
-      IF (YVARNAME(JJ:JJ).NE.CNAMES(JI)(JJ:JJ)) THEN
-        PRINT *, 'CH_READ_CHEM: Error: variable names do not match:'
-        PRINT *, 'CNAMES = >>>', CNAMES(JI), '<<<'
-        PRINT *, 'read   = >>>', YVARNAME, '<<<'
-!callabortstop
-        CALL ABORT
-        STOP 'Program stopped by CH_READ_CHEM'
-      ENDIF
-    ENDDO check_loop
-  ENDDO outer_loop
+  DO JI = 1, NEQ
+    READ( UNIT=ILU, FMT=*, iostat=iresp, iomsg=yioerrmsg ) YVARNAME, PCONC(JI)
+    if ( iresp == IOSTAT_END) then
+      write( yval1, '( I10 )' ) NEQ
+      write( yval2, '( I10 )' ) JI-1
+      call Print_msg( NVERB_FATAL, 'GEN', 'CH_READ_CHEM', 'not enough variables defined in file '//trim(HFILE)// &
+                      ': number of gas lines in that file should be '//trim(yval1)//' but is '//trim(yval2) )
+    else if ( iresp/= 0 ) then
+      call Print_msg( NVERB_FATAL, 'IO', 'CH_READ_CHEM', 'when reading '//trim(HFILE)//': '//trim(yioerrmsg) )
+    end if
+    IF ( trim(YVARNAME) /= trim(CNAMES(JI)) ) THEN
+      call Print_msg( NVERB_FATAL, 'GEN', 'CH_READ_CHEM', 'variable names do not match: '//trim(CNAMES(JI))// &
+                      ' /= '//trim(YVARNAME) )
+    END IF
+  END DO
 
 !Conversion ppb to ppp
  PCONC(:) =  PCONC(:) * 1E-9
 IF (LORILAM) THEN
-  outer_loop2 : DO JI = 1, SIZE(PAERO,1)
-    READ(UNIT=ILU,FMT=*,END=997) YVARNAME, PAERO(JI)
-    check_loop2 : DO JJ = 1, 32
-      IF (YVARNAME(JJ:JJ).NE.CAERONAMES(JI)(JJ:JJ)) THEN
-        PRINT *, 'CH_READ_CHEM: Error: variable names do not match:'
-        PRINT *, 'CAERONAMES = >>>', CAERONAMES(JI), '<<<'
-        PRINT *, 'read   = >>>', YVARNAME, '<<<'
-!callabortstop
-        CALL ABORT
-        STOP 'Program stopped by CH_READ_CHEM'
-      ENDIF
-    ENDDO check_loop2
-  ENDDO outer_loop2
+  DO JI = 1, SIZE(PAERO,1)
+    READ( UNIT=ILU, FMT=*, iostat=iresp, iomsg=yioerrmsg ) YVARNAME, PAERO(JI)
+    if ( iresp == IOSTAT_END) then
+      write( yval1, '( I10 )' ) SIZE(PAERO,1)
+      write( yval2, '( I10 )' ) JI-1
+      call Print_msg( NVERB_FATAL, 'GEN', 'CH_READ_CHEM', 'not enough variables defined in file '//trim(HFILE)// &
+                      ': number of aerosol lines in that file should be '//trim(yval1)//' but is '//trim(yval2) )
+    else if ( iresp/= 0 ) then
+      call Print_msg( NVERB_FATAL, 'IO', 'CH_READ_CHEM', 'when reading '//trim(HFILE)//': '//trim(yioerrmsg) )
+    end if
+    IF ( trim(YVARNAME) /= trim(CAERONAMES(JI)) ) THEN
+      call Print_msg( NVERB_FATAL, 'GEN', 'CH_READ_CHEM', 'variable names do not match: '//trim(CAERONAMES(JI))// &
+                      ' /= '//trim(YVARNAME) )
+    END IF
+  END DO
 !Conversion  microgram/m3 to ppp
 ZMD    = 28.9644E-3
 ! Constants initialization
@@ -267,26 +279,6 @@ END IF
 
 END IF
 !
-RETURN
-!
 !-----------------------------------------------------------------------------
 !
-999  PRINT *, 'CH_READ_CHEM: Error: not enough variables defined in file', &
-               HFILE
-PRINT *, 'number of gas lines in that file should be ', NEQ, &
-         ', but is ', JI-1
-!callabortstop
-CALL ABORT
-STOP 'Program stopped by CH_READ_CHEM'
-!
-998 STOP "CH_READ_CHEM: ERROR - keyword INITCHEM not found in CHCONTROL1.nam"  
-!
-997  PRINT *, 'CH_READ_CHEM: Error: not enough variables defined in file', &
-               HFILE
-PRINT *, 'number of aerosols lines in that file should be ', SIZE(PAERO,1), &
-         ', but is ', JI-1
-!callabortstop
-CALL ABORT
-STOP 'Program stopped by CH_READ_CHEM'
-!
 END SUBROUTINE CH_READ_CHEM
diff --git a/src/MNH/ch_sis.f90 b/src/MNH/ch_sis.f90
index 746b70ad6e794d3675f19995b9a19b926a7ad73f..48fc332d5a919f24c53e5b7f10cfbd2ffc309884 100644
--- a/src/MNH/ch_sis.f90
+++ b/src/MNH/ch_sis.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 chimie 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !!    ################## 
       MODULE MODI_CH_SIS
 !!    ################## 
@@ -60,9 +55,12 @@ END MODULE MODI_CH_SIS
 !!    Original 24/04/95
 !!    31/07/96 (K. Suhre) restructured
 !!    01/12/03 (D. Gazen)   change Chemical scheme interface
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
+use mode_msg
+
 USE MODI_CH_FCN
 USE MODI_CH_JAC
 USE MODI_CH_GAUSS
@@ -127,11 +125,7 @@ ENDDO
 !
 IFAIL = 1
 CALL CH_GAUSS(ZWORK,ZINV,KEQ,IFAIL)
-IF (IFAIL.NE.0) THEN
-!callabortstop
-CALL ABORT
-  STOP 'CH_SIS ERROR: matrix cannot be inverted by CH_GAUSS'
-ENDIF
+if ( ifail /= 0 ) call Print_msg( NVERB_FATAL,   'GEN', 'CH_SIS', 'matrix cannot be inverted by CH_GAUSS' )
 !
 !*       4.   CALCULATE (1-dt/2 J^n)^-1 f^n
 !        -----------------------------------
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/ch_solvern.f90 b/src/MNH/ch_solvern.f90
index 769b5800aa6ca8896afd6cdd23bc4f01eb8b8a93..92319876c0763dd461165ca4471372e62c8575a0 100644
--- a/src/MNH/ch_solvern.f90
+++ b/src/MNH/ch_solvern.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_CH_SOLVER_n
 !!    #####################
@@ -60,6 +56,7 @@ END MODULE MODI_CH_SOLVER_n
 !!    01/12/03 (D. Gazen)   change Chemical scheme interface
 !!    01/06/07 (P. Tulet)  model number in argument (for AROME)
 !!    01/06/07 (JP Pinty & M Leriche) add Rosenbrock solvers
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
@@ -73,6 +70,8 @@ USE MODI_CH_EXQSSA
 !@USE MODI_CH_D02EAF
 !@USE MODI_CH_D02EBF
 !@USE MODI_CH_D02NBF
+
+use mode_msg
 USE MODE_RBK90_Integrator
 !!
 !!    IMPLICIT ARGUMENTS
@@ -132,25 +131,19 @@ CASE ('D02EAF')
 !
   ! call NAG's stiff-solver D02EAF
   !@CALL CH_D02EAF(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KMI)
-!callabortstop
-CALL ABORT
-  STOP 'CH_SOLVER_n SORRY: requested solver currently not supported (CSOLVER)'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SOLVER_n', 'requested solver currently not supported (CSOLVER='//trim(CSOLVER)//')' )
 !
 CASE ('D02EBF')
 !
   ! call NAG's stiff-solver D02EBF
   !@CALL CH_D02EBF(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KMI)
-!callabortstop
-CALL ABORT
-  STOP 'CH_SOLVER_n SORRY: requested solver currently not supported (CSOLVER)'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SOLVER_n', 'requested solver currently not supported (CSOLVER='//trim(CSOLVER)//')' )
 !
 CASE ('D02NBF')
 !
   ! call NAG's stiff-solver D02NBF
   !@CALL CH_D02NBF(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KMI)
-!callabortstop
-CALL ABORT
-  STOP 'CH_SOLVER_n SORRY: requested solver currently not supported (CSOLVER)'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SOLVER_n', 'requested solver currently not supported (CSOLVER='//trim(CSOLVER)//')' )
 !
 CASE ('SVODE')
 !
@@ -158,9 +151,7 @@ CASE ('SVODE')
 
  ! CALL CH_SVODE(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KVECNPT, KMI, &
  !               XRTOL, XATOL, NPED)
-!callabortstop
-CALL ABORT
-  STOP 'CH_SOLVER_n SORRY: requested solver currently not supported (CSOLVER) until Masdev47'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SOLVER_n', 'requested solver currently not supported (CSOLVER='//trim(CSOLVER)//')' )
 !
 CASE ('QSSA')
 !
@@ -200,9 +191,7 @@ CASE ('NONE')
   PNEWCONC(:,:) = PCONC(:,:)
 !
 CASE DEFAULT
-!callabortstop
-CALL ABORT
-  STOP 'CH_SOLVER_n ERROR: requested solver not supported (CSOLVER)'
+  call Print_msg( NVERB_FATAL, 'GEN', 'CH_SOLVER_n', 'requested solver currently not supported (CSOLVER='//trim(CSOLVER)//')' )
 END SELECT
 !
 END SUBROUTINE CH_SOLVER_n
diff --git a/src/MNH/ch_surface0d.f90 b/src/MNH/ch_surface0d.f90
index dd3a11ff3a02d9e94c24b4247b4fdc3c4ea98cbe..ce3bab6c4e23a9647273ec2e612fc1a38aaef8f8 100644
--- a/src/MNH/ch_surface0d.f90
+++ b/src/MNH/ch_surface0d.f90
@@ -252,8 +252,8 @@ CONTAINS
 !
 SUBROUTINE CH_SURFACE0D_SETPARAM
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
+USE MODD_IO,      ONLY: TFILEDATA
+USE MODE_IO_FILE, ONLY: IO_File_close, IO_File_open
 !
 IMPLICIT NONE
 !
@@ -302,15 +302,15 @@ IF (LSFIRSTCALL) THEN
   LSFIRSTCALL = .FALSE.
   CALL CH_OPEN_INPUT("SURFACE.nam", "SURFDATA", TZFILE, 6, NVERB)
   ISURFIO = TZFILE%NLU
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
 !
 END IF
 !
 IF (PTSIMUL .GE. TNEXTUPDATE) THEN
   PRINT *, "updating surface variables from file ",TRIM(TZFILE%CNAME)
-  CALL IO_FILE_OPEN_ll(TZFILE)
+  CALL IO_File_open(TZFILE)
   READ(ISURFIO,NAM_SURF)
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   ! PRINT *, "current setting is:"
   ! WRITE(*,NAM_SURF)
   TNEXTUPDATE = PTSIMUL + TVALID
diff --git a/src/MNH/ch_svode.f90 b/src/MNH/ch_svode.f90
index 9ed939503becdc3e2383ed2d41dee96123eb540c..07b5ca6301842232c123a34886986108d506f2e8 100644
--- a/src/MNH/ch_svode.f90
+++ b/src/MNH/ch_svode.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 chimie 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !**FILE:     ch_svode.f90
 !**AUTHOR:   Karsten Suhre
 !**DATE:     Fri Nov 10 09:17:45 GMT 1995
@@ -73,6 +68,7 @@ SUBROUTINE CH_SVODE(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KVECNPT, KMI, &
 !!    Original 10/11/95
 !!    01/08/01 (C. Mari)  add arguments
 !!    01/12/03 (D. Gazen)   change Chemical scheme interface
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    EXTERNAL
 !!    --------
@@ -83,7 +79,10 @@ SUBROUTINE CH_SVODE(PTSIMUL, PDTACT, PCONC, PNEWCONC, KEQ, KVECNPT, KMI, &
 !!    ------------------
 !!    EXPLICIT ARGUMENTS
 !!    ------------------
+use mode_msg
+
 IMPLICIT NONE
+
 REAL,    INTENT(IN) :: PTSIMUL  ! time of simulation
 REAL,    INTENT(IN) :: PDTACT   ! actual time-step
 INTEGER, INTENT(IN) :: KEQ      ! dimension of the problem to solve
@@ -161,7 +160,7 @@ DO JI = 1, KVECNPT
   IF (ISTATE.LT.0) THEN
     PRINT *, "Problems !!! ISTATE = ", ISTATE
     PRINT *, "at vector element ", JI, " out of ", KVECNPT
-    STOP "CH_SVODE: program stopped due to SVODE error!"
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_SVODE', '' )
   ENDIF
 
   PNEWCONC(JI,:) = ZCONC(:)
diff --git a/src/MNH/ch_update_jvalues.f90 b/src/MNH/ch_update_jvalues.f90
index 5f2f0f7fa0772647152aec53676df314a562b4db..257c6e07da298c97677704946ea4fd887ec72b06 100644
--- a/src/MNH/ch_update_jvalues.f90
+++ b/src/MNH/ch_update_jvalues.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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 chimie 2006/06/29 11:52:38
-!-----------------------------------------------------------------
 !!    #############################
       MODULE MODI_CH_UPDATE_JVALUES
 !!    #############################
@@ -90,21 +85,24 @@ END MODULE MODI_CH_UPDATE_JVALUES
 !!    -------------
 !!    Original 05/03/97
 !!    05/03/05  P. Tulet (CNRM/GMEI) Update for Arome
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!------------------------------------------------------------------------------
 !!
 !!    EXTERNAL
 !!    --------
+USE MODE_MODELN_HANDLER
+use mode_msg
+
 USE MODI_CH_INTERP_JVALUES
 USE MODI_CH_JVALUES_CLOUDS
-USE MODE_MODELN_HANDLER
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODD_CST
-USE MODD_PARAMETERS
 USE MODD_CH_INIT_JVALUES, ONLY : JPJVMAX
 USE MODD_CONF
+USE MODD_CST
+USE MODD_PARAMETERS
 !!
 !!    EXPLICIT ARGUMENTS
 !!    ------------------
@@ -180,13 +178,7 @@ IF (.NOT.ALLOCATED(ZSZA))     ALLOCATE(ZSZA(IIU,IJU))
 IF (OCH_TUV_ONLINE) THEN
 !
    IF ((.NOT.L1D).OR.(CPROGRAM .EQ. "AROME")) THEN
-     WRITE(KLUOUT,*)"ERROR in CH_UPDATE_JVALUES:                             "
-     WRITE(KLUOUT,*)"you want to use ON-LINE calculation of photolysis rates "
-     WRITE(KLUOUT,*)"but you are not runnning in 1D                          "
-     WRITE(KLUOUT,*)"Program is STOPPED now                                  "
-!callabortstop
-CALL ABORT
-     STOP
+    call Print_msg( NVERB_FATAL, 'GEN', 'CH_UPDATE_JVALUES', 'online computation of photolysis rates is only supported in 1D' )
   ENDIF
 
 !*        1. TUV 3D ON LINE
diff --git a/src/MNH/change_gribex_var.f90 b/src/MNH/change_gribex_var.f90
index 48a9741de41c7fdac18ca15f731ed4bc1698715b..0f4badbcd98c8f3280d2c46a7a704b8e51188ef8 100644
--- a/src/MNH/change_gribex_var.f90
+++ b/src/MNH/change_gribex_var.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.
 !     #############################
       MODULE MODI_CHANGE_GRIBEX_VAR
@@ -116,7 +116,7 @@ END MODULE MODI_CHANGE_GRIBEX_VAR
 !!      Module MODD_CONF1
 !!         NRR
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_CST       : contains physical constants
 !!         XRD : gas constant for dry air
 !!         XRV : gas constant for vapor
@@ -167,7 +167,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_GRID_n
-USE MODD_LUNIT, ONLY: CLUOUT0, TLUOUT0
+USE MODD_LUNIT, ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_REF
 !
diff --git a/src/MNH/check_zhat.f90 b/src/MNH/check_zhat.f90
index a0027bb66d919c201d9a922ef3097ffab9255968..1f448756726f6a57cfc7517a6ada13b76da21d71 100644
--- a/src/MNH/check_zhat.f90
+++ b/src/MNH/check_zhat.f90
@@ -1,4 +1,4 @@
-!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 for details. version 1.
@@ -45,7 +45,7 @@ END MODULE MODI_CHECK_ZHAT
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     : contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1 
 !!         XZHAT
 !!      Module MODD_DIM1 
@@ -75,12 +75,12 @@ END MODULE MODI_CHECK_ZHAT
 USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_PARAMETERS
 !
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_find_byname
 !
 IMPLICIT NONE
 !
@@ -101,7 +101,7 @@ REAL                :: ZLEN1                ! Decay scale for smooth topography
 REAL                :: ZLEN2                ! Decay scale for small-scale topography deviation
 !
 INTEGER             :: IRESP                ! return-code if problems occured
-INTEGER             :: ILUOUT0              ! logical unit for file CLUOUT0
+INTEGER             :: ILUOUT0              ! logical unit for file TLUOUT0
 LOGICAL             :: GTHINSHELL
 TYPE(TFILEDATA),POINTER :: TZFMFILE
 !
@@ -114,16 +114,16 @@ ILUOUT0 = TLUOUT0%NLU
 !*            1. Reading grid and dimension
 !                --------------------------
 !
-CALL IO_FILE_FIND_BYNAME(TRIM(HFMFILE),TZFMFILE,IRESP)
+CALL IO_File_find_byname(TRIM(HFMFILE),TZFMFILE,IRESP)
 !
-CALL IO_READ_FIELD(TZFMFILE,'KMAX',IKMAX)
+CALL IO_Field_read(TZFMFILE,'KMAX',IKMAX)
 ALLOCATE(ZZHAT(IKMAX+2*JPVEXT))
-CALL IO_READ_FIELD(TZFMFILE,'ZHAT',ZZHAT)
-CALL IO_READ_FIELD(TZFMFILE,'THINSHELL',GTHINSHELL)
+CALL IO_Field_read(TZFMFILE,'ZHAT',ZZHAT)
+CALL IO_Field_read(TZFMFILE,'THINSHELL',GTHINSHELL)
 IF ( TZFMFILE%NMNHVERSION(1)<4 .OR. (TZFMFILE%NMNHVERSION(1)==4 .AND. TZFMFILE%NMNHVERSION(2)<=6) ) THEN
   GSLEVE = .FALSE.
 ELSE
-  CALL IO_READ_FIELD(TZFMFILE,'SLEVE',GSLEVE)
+  CALL IO_Field_read(TZFMFILE,'SLEVE',GSLEVE)
 ENDIF
 !
 !*            2. Check dimensions
@@ -171,8 +171,8 @@ END IF
 !                -------------------------------------
 !
 IF ( GSLEVE .AND. LSLEVE ) THEN
-  CALL IO_READ_FIELD(TZFMFILE,'LEN1',ZLEN1)
-  CALL IO_READ_FIELD(TZFMFILE,'LEN2',ZLEN2)
+  CALL IO_Field_read(TZFMFILE,'LEN1',ZLEN1)
+  CALL IO_Field_read(TZFMFILE,'LEN2',ZLEN2)
   IF (ZLEN1 /= XLEN1 .OR. ZLEN2 /= XLEN2) THEN
     HDAD_NAME=' '
     WRITE (ILUOUT0,*) '********************************************************'
diff --git a/src/MNH/check_zs.f90 b/src/MNH/check_zs.f90
index 200ea82d929d9a70a12b8f04b31debc394dea1fd..bab0465120ad474c4b6770c312a913163383f691 100644
--- a/src/MNH/check_zs.f90
+++ b/src/MNH/check_zs.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.
 !-----------------------------------------------------------------
 !###################
@@ -48,7 +48,7 @@ END MODULE MODI_CHECK_ZS
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     : contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1 
 !!         XZS
 !!      Module MODD_DIM1 
@@ -81,13 +81,13 @@ END MODULE MODI_CHECK_ZS
 USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_NESTING
 USE MODD_PARAMETERS
 !
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_find_byname
 !
 IMPLICIT NONE
 !
@@ -105,7 +105,7 @@ INTEGER,             INTENT(IN)    :: KJINF     ! domain, compared to the old
 !              ------------------------------
 !
 INTEGER             :: IRESP                ! return-code if problems occured
-INTEGER             :: ILUOUT0              ! logical unit for file CLUOUT0
+INTEGER             :: ILUOUT0              ! logical unit for file TLUOUT0
 !
 INTEGER             :: IDXRATIO = 0         ! aspect ratios during previous
 INTEGER             :: IDYRATIO = 0         ! spawning (if any)
@@ -128,9 +128,9 @@ ILUOUT0 = TLUOUT0%NLU
 !*            1. Reading of aspect ratios and dimensions
 !                ---------------------------------------
 !
-CALL IO_FILE_FIND_BYNAME(TRIM(HFMFILE),TZFMFILE,IRESP)
+CALL IO_File_find_byname(TRIM(HFMFILE),TZFMFILE,IRESP)
 !
-CALL IO_READ_FIELD(TZFMFILE,'DXRATIO',IDXRATIO,IRESP)
+CALL IO_Field_read(TZFMFILE,'DXRATIO',IDXRATIO,IRESP)
 IF ( IRESP /= 0 .OR. IDXRATIO == 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'resolution ratio in x direction not present in fmfile; no nesting allowed'
@@ -139,7 +139,7 @@ IF ( IRESP /= 0 .OR. IDXRATIO == 0 ) THEN
   RETURN
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'DYRATIO',IDYRATIO,IRESP)
+CALL IO_Field_read(TZFMFILE,'DYRATIO',IDYRATIO,IRESP)
 IF ( IRESP /= 0 .OR. IDYRATIO == 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'resolution ratio in y direction not present in fmfile; no nesting allowed'
@@ -148,7 +148,7 @@ IF ( IRESP /= 0 .OR. IDYRATIO == 0 ) THEN
   RETURN 
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'XOR',NXOR_ALL(1),IRESP)
+CALL IO_Field_read(TZFMFILE,'XOR',NXOR_ALL(1),IRESP)
 IF ( IRESP /= 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'position XOR not present in fmfile; no nesting allowed'
@@ -157,7 +157,7 @@ IF ( IRESP /= 0 ) THEN
   RETURN
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'YOR',NYOR_ALL(1),IRESP)
+CALL IO_Field_read(TZFMFILE,'YOR',NYOR_ALL(1),IRESP)
 IF ( IRESP /= 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'resolution YOR not present in fmfile; no nesting allowed'
@@ -166,11 +166,11 @@ IF ( IRESP /= 0 ) THEN
   RETURN 
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TZFMFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TZFMFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TZFMFILE,'JMAX',IJMAX)
 !
 ALLOCATE(ZZS(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-CALL IO_READ_FIELD(TZFMFILE,'ZS',ZZS)
+CALL IO_Field_read(TZFMFILE,'ZS',ZZS)
 !
 !*            2. Allocate coarse arrays
 !                ----------------------
@@ -236,7 +236,7 @@ END IF
 !
 IF (LSLEVE) THEN
 !
-  CALL IO_READ_FIELD(TZFMFILE,'ZSMT',ZZS)
+  CALL IO_Field_read(TZFMFILE,'ZSMT',ZZS)
 !
 !*            5. Average the smooth orographies
 !                ------------------------------
diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90
index 2bb13e611043f9a671d174a2756d387cab755550..6d3d87e4b3abbe45f7177c9b47771f7bd8f19088 100644
--- a/src/MNH/close_file_mnh.f90
+++ b/src/MNH/close_file_mnh.f90
@@ -54,12 +54,12 @@ END MODULE MODI_CLOSE_FILE_MNH
 !              ------------
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_IO_NAM,           ONLY: TFILE
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll
+USE MODE_IO_FILE,          ONLY: IO_File_close
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -96,7 +96,7 @@ END SELECT
 !
 IF (ILUOUT==KUNIT) THEN
   CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(TZFILE%CNAME))
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   RETURN
 END IF
 !
@@ -110,7 +110,7 @@ IF (.NOT.ASSOCIATED(TFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','CLOSE_FILE_MNH','TF
 CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(TFILE%CNAME))
 !
 IF (TFILE%NLU==KUNIT) THEN
-  CALL IO_FILE_CLOSE_ll(TFILE)
+  CALL IO_File_close(TFILE)
   TFILE => NULL()
 ELSE
   WRITE(ILUOUT,*) 'Error for closing a file: '
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/compare_dad.f90 b/src/MNH/compare_dad.f90
index 5446348efd96ba60b4c0b8ade73aef7b9c8aaec7..4efd6a8f42c57b2b6a6e606bbdd3f4fba22d9ebe 100644
--- a/src/MNH/compare_dad.f90
+++ b/src/MNH/compare_dad.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
@@ -43,8 +43,8 @@ END MODULE MODI_COMPARE_DAD
 !!    EXTERNAL
 !!    --------
 !!
-!!      IO_FILE_OPEN_ll  : to open a FM-file (DESFM + LFIFM)
-!!      IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM)
+!!      IO_File_open  : to open a FM-file (DESFM + LFIFM)
+!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
 !!
 !!
 !!
@@ -58,6 +58,7 @@ END MODULE MODI_COMPARE_DAD
 !!
 !!      Original     O8/04/04 
 !!  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
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -65,15 +66,15 @@ END MODULE MODI_COMPARE_DAD
 !
 !
 USE MODD_CONF
-USE MODD_IO_ll,      ONLY: TFILEDATA
-USE MODD_LUNIT_n,    ONLY: TLUOUT
-USE MODD_PARAMETERS, ONLY: JPHEXT,JPVEXT,NMNHNAMELGTMAX
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_LUNIT_n,          ONLY: TLUOUT
+USE MODD_PARAMETERS,       ONLY: JPHEXT, JPVEXT, NMNHNAMELGTMAX
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
 USE MODE_GRIDPROJ
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_File_add2list
 !
 !
 IMPLICIT NONE
@@ -136,12 +137,12 @@ ZLATORI_2=0.
 !*   2.    Read DAD of initial file
 !          ------------------------
 !
-CALL IO_FILE_ADD2LIST(TZDADINIFILE,TRIM(HDADINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-CALL IO_FILE_OPEN_ll(TZDADINIFILE)
+CALL IO_File_add2list(TZDADINIFILE,TRIM(HDADINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+CALL IO_File_open(TZDADINIFILE)
 !
-CALL IO_READ_FIELD(TZDADINIFILE,'IMAX',IIMAX_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'JMAX',IJMAX_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'KMAX',IKMAX_1)
+CALL IO_Field_read(TZDADINIFILE,'IMAX',IIMAX_1)
+CALL IO_Field_read(TZDADINIFILE,'JMAX',IJMAX_1)
+CALL IO_Field_read(TZDADINIFILE,'KMAX',IKMAX_1)
 !
 IIU_1=IIMAX_1 + 2 * JPHEXT
 IJU_1=IJMAX_1 + 2 * JPHEXT
@@ -150,32 +151,32 @@ IKU_1=IKMAX_1 + 2 * JPVEXT
 ALLOCATE(ZXHAT_1(IIU_1))
 ALLOCATE(ZYHAT_1(IJU_1))
 ALLOCATE(ZZHAT_1(IKU_1))
-CALL IO_READ_FIELD(TZDADINIFILE,'XHAT',ZXHAT_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'YHAT',ZYHAT_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'ZHAT',ZZHAT_1)
+CALL IO_Field_read(TZDADINIFILE,'XHAT',ZXHAT_1)
+CALL IO_Field_read(TZDADINIFILE,'YHAT',ZYHAT_1)
+CALL IO_Field_read(TZDADINIFILE,'ZHAT',ZZHAT_1)
 !
 ALLOCATE(ZZS_1(IIU_1,IJU_1))
-CALL IO_READ_FIELD(TZDADINIFILE,'ZS',ZZS_1)
+CALL IO_Field_read(TZDADINIFILE,'ZS',ZZS_1)
 !
-CALL IO_READ_FIELD(TZDADINIFILE,'LON0',ZLON0_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'LAT0',ZLAT0_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'BETA',ZBETA_1)
+CALL IO_Field_read(TZDADINIFILE,'LON0',ZLON0_1)
+CALL IO_Field_read(TZDADINIFILE,'LAT0',ZLAT0_1)
+CALL IO_Field_read(TZDADINIFILE,'BETA',ZBETA_1)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TZDADINIFILE,'RPK',ZRPK_1)
-  CALL IO_READ_FIELD(TZDADINIFILE,'LATORI',ZLATORI_1)
-  CALL IO_READ_FIELD(TZDADINIFILE,'LONORI',ZLONORI_1)
+  CALL IO_Field_read(TZDADINIFILE,'RPK',ZRPK_1)
+  CALL IO_Field_read(TZDADINIFILE,'LATORI',ZLATORI_1)
+  CALL IO_Field_read(TZDADINIFILE,'LONORI',ZLONORI_1)
   !
   IF (TZDADINIFILE%NMNHVERSION(1)<4 .OR. (TZDADINIFILE%NMNHVERSION(1)==4 .AND. TZDADINIFILE%NMNHVERSION(2)<=5) ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TZDADINIFILE,TZFIELD,ZLONORI_1)
+    CALL IO_Field_read(TZDADINIFILE,TZFIELD,ZLONORI_1)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TZDADINIFILE,TZFIELD,ZLATORI_1)
+    CALL IO_Field_read(TZDADINIFILE,TZFIELD,ZLATORI_1)
     !
     ZXHATM = - 0.5 * (ZXHAT_1(1)+ZXHAT_1(2))
     ZYHATM = - 0.5 * (ZYHAT_1(1)+ZYHAT_1(2))
@@ -185,19 +186,19 @@ IF (.NOT.LCARTESIAN) THEN
   END IF
 ENDIF
 !
-CALL IO_FILE_CLOSE_ll(TZDADINIFILE)
+CALL IO_File_close(TZDADINIFILE)
 !
 !-------------------------------------------------------------------------------
 !
 !*   3.    Read DAD of spawning file 
 !          ------------------------
 !
-CALL IO_FILE_ADD2LIST(TZDADSPAFILE,TRIM(HDADSPAFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-CALL IO_FILE_OPEN_ll(TZDADSPAFILE)
+CALL IO_File_add2list(TZDADSPAFILE,TRIM(HDADSPAFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+CALL IO_File_open(TZDADSPAFILE)
 !
-CALL IO_READ_FIELD(TZDADSPAFILE,'IMAX',IIMAX_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'JMAX',IJMAX_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'KMAX',IKMAX_2)
+CALL IO_Field_read(TZDADSPAFILE,'IMAX',IIMAX_2)
+CALL IO_Field_read(TZDADSPAFILE,'JMAX',IJMAX_2)
+CALL IO_Field_read(TZDADSPAFILE,'KMAX',IKMAX_2)
 !
 IIU_2=IIMAX_2 + 2 * JPHEXT
 IJU_2=IJMAX_2 + 2 * JPHEXT
@@ -206,32 +207,32 @@ IKU_2=IKMAX_2 + 2 * JPVEXT
 ALLOCATE(ZXHAT_2(IIU_2))
 ALLOCATE(ZYHAT_2(IJU_2))
 ALLOCATE(ZZHAT_2(IKU_2))
-CALL IO_READ_FIELD(TZDADSPAFILE,'XHAT',ZXHAT_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'YHAT',ZYHAT_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'ZHAT',ZZHAT_2)
+CALL IO_Field_read(TZDADSPAFILE,'XHAT',ZXHAT_2)
+CALL IO_Field_read(TZDADSPAFILE,'YHAT',ZYHAT_2)
+CALL IO_Field_read(TZDADSPAFILE,'ZHAT',ZZHAT_2)
 !
 ALLOCATE(ZZS_2(IIU_2,IJU_2))
-CALL IO_READ_FIELD(TZDADSPAFILE,'ZS',ZZS_2)
+CALL IO_Field_read(TZDADSPAFILE,'ZS',ZZS_2)
 !
-CALL IO_READ_FIELD(TZDADSPAFILE,'LON0',ZLON0_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'LAT0',ZLAT0_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'BETA',ZBETA_2)
+CALL IO_Field_read(TZDADSPAFILE,'LON0',ZLON0_2)
+CALL IO_Field_read(TZDADSPAFILE,'LAT0',ZLAT0_2)
+CALL IO_Field_read(TZDADSPAFILE,'BETA',ZBETA_2)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TZDADSPAFILE,'RPK',ZRPK_2)
-  CALL IO_READ_FIELD(TZDADSPAFILE,'LATORI',ZLATORI_2)
-  CALL IO_READ_FIELD(TZDADSPAFILE,'LONORI',ZLONORI_2)
+  CALL IO_Field_read(TZDADSPAFILE,'RPK',ZRPK_2)
+  CALL IO_Field_read(TZDADSPAFILE,'LATORI',ZLATORI_2)
+  CALL IO_Field_read(TZDADSPAFILE,'LONORI',ZLONORI_2)
   !
   IF (TZDADSPAFILE%NMNHVERSION(1)<4 .OR. (TZDADSPAFILE%NMNHVERSION(1)==4 .AND. TZDADSPAFILE%NMNHVERSION(2)<=5)) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TZDADSPAFILE,TZFIELD,ZLONORI_2)
+    CALL IO_Field_read(TZDADSPAFILE,TZFIELD,ZLONORI_2)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TZDADSPAFILE,TZFIELD,ZLATORI_2)
+    CALL IO_Field_read(TZDADSPAFILE,TZFIELD,ZLATORI_2)
     !
     ZXHATM = - 0.5 * (ZXHAT_2(1)+ZXHAT_2(2))
     ZYHATM = - 0.5 * (ZYHAT_2(1)+ZYHAT_2(2))
@@ -241,7 +242,7 @@ IF (.NOT.LCARTESIAN) THEN
   END IF
 ENDIF  
 !
-CALL IO_FILE_CLOSE_ll(TZDADSPAFILE)
+CALL IO_File_close(TZDADSPAFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/compare_with_pgd_domain.f90 b/src/MNH/compare_with_pgd_domain.f90
index 1378b63dbe08ac4e2a7c6afd337f318ea5d454bf..028dc1f804370fa98bc4321bc5a5892b50cc1776 100644
--- a/src/MNH/compare_with_pgd_domain.f90
+++ b/src/MNH/compare_with_pgd_domain.f90
@@ -79,8 +79,6 @@ END MODULE MODI_COMPARE_WITH_PGD_DOMAIN
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODD_CONF        ! declaration modules
diff --git a/src/MNH/compute_bl89_ml.f90 b/src/MNH/compute_bl89_ml.f90
index ac8986c3df7b608442bd86a414a8496e3c99e9f1..20c9a078db5e550dbf3bb03cd2fcc6b13ddc89a5 100644
--- a/src/MNH/compute_bl89_ml.f90
+++ b/src/MNH/compute_bl89_ml.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2006-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_COMPUTE_BL89_ML
 !    ###########################
@@ -55,6 +56,7 @@ END MODULE MODI_COMPUTE_BL89_ML
 !!     S. Riette Jan 2012: support for both order of vertical levels and cleaning
 !!     R.Honnert Oct 2016 : Update with AROME
 !!     Q.Rodier  01/2019 : support RM17 mixing length as in bl89.f90 
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
@@ -74,6 +76,9 @@ END MODULE MODI_COMPUTE_BL89_ML
 !
 USE MODD_CTURB
 USE MODD_PARAMETERS, ONLY: JPVEXT
+!
+use mode_msg
+!
 USE MODI_SHUMAN_MF
 !
 IMPLICIT NONE
@@ -209,12 +214,7 @@ ENDIF
 !
 
 IF (OUPORDN.EQV..FALSE.) THEN 
- IF(OFLUX) THEN
-   WRITE(*,*) ' STOP'                                                     
-   WRITE(*,*) ' OFLUX OPTION NOT CODED FOR DOWNWARD MIXING LENGTH' 
-   CALL ABORT
-   STOP
- ENDIF
+ IF(OFLUX) call Print_msg(NVERB_FATAL,'GEN','COMPUTE_BL89_ML','OFLUX option not coded for downward mixing length')
  ZINTE(:)=PTKEM_DEP(:)
  PLWORK=0.
  ZTESTM=1.
diff --git a/src/MNH/compute_entr_detr.f90 b/src/MNH/compute_entr_detr.f90
index b7346fad93d7d261b08b2ec40e89ad1ed6ce95d1..da35fea05871eec70348a6e60de42ca8b85eef68 100644
--- a/src/MNH/compute_entr_detr.f90
+++ b/src/MNH/compute_entr_detr.f90
@@ -1,6 +1,6 @@
-!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.
 !     ######spl
      MODULE MODI_COMPUTE_ENTR_DETR
@@ -120,6 +120,7 @@ END MODULE MODI_COMPUTE_ENTR_DETR
 !!                          improvement of continuity at the condensation level
 !!      S. Riette Nov 2013: protection against zero divide for min value of dry PDETR
 !!      R.Honnert Oct 2016 : Update with AROME
+!  P. Wautelet 08/02/2019: bug fix: compute ZEPSI_CLOUD only once and only when it is needed
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -468,7 +469,7 @@ ENDDO
 !               3.4 Computation of PENTR and PDETR
   DO JLOOP=1,SIZE(OTEST)
     IF(OTEST(JLOOP)) THEN
-      ZEPSI_CLOUD=MIN(ZDELTA,ZEPSI)
+      ZEPSI_CLOUD(JLOOP)=MIN(ZDELTA(JLOOP),ZEPSI(JLOOP))
       PENTR_CLD(JLOOP) = (1.-PPART_DRY(JLOOP))*ZCOEFFMF_CLOUD*PRHODREF(JLOOP)*ZEPSI_CLOUD(JLOOP)
       PDETR_CLD(JLOOP) = (1.-PPART_DRY(JLOOP))*ZCOEFFMF_CLOUD*PRHODREF(JLOOP)*ZDELTA(JLOOP)
       PENTR(JLOOP) = PENTR(JLOOP)+PENTR_CLD(JLOOP)
diff --git a/src/MNH/compute_exner_from_ground.f90 b/src/MNH/compute_exner_from_ground.f90
index 1edd2e25303d036e692c08dca4bd8629143914c6..cbb64d0376d42b3af52447f12503b78531513f23 100644
--- a/src/MNH/compute_exner_from_ground.f90
+++ b/src/MNH/compute_exner_from_ground.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.
 !-----------------------------------------------------------------
 !     #####################################
@@ -83,8 +83,6 @@ END MODULE MODI_COMPUTE_EXNER_FROM_GROUND3
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!         LTHINSHELL : logical for thinshell approximation
-!!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
 !!      Module MODD_CST       : contains physical constants
 !!         XG  : gravity constant
 !!         XCPD: specific heat for dry air at constant pressure
@@ -115,7 +113,6 @@ END MODULE MODI_COMPUTE_EXNER_FROM_GROUND3
 !
 USE MODD_CONF
 USE MODD_CST
-USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
 USE MODI_SHUMAN
diff --git a/src/MNH/compute_exner_from_top.f90 b/src/MNH/compute_exner_from_top.f90
index 05f7c026b4ca3a1be69b626b9d29c57db6531b00..e195e725de1cf4e020487bbf3f2de6e052415b76 100644
--- a/src/MNH/compute_exner_from_top.f90
+++ b/src/MNH/compute_exner_from_top.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.
 !-----------------------------------------------------------------
 !     ##################################
@@ -81,8 +81,6 @@ END MODULE MODI_COMPUTE_EXNER_FROM_TOP3D
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!         LTHINSHELL : logical for thinshell approximation
-!!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
 !!      Module MODD_CST       : contains physical constants
 !!         XG  : gravity constant
 !!         XCPD: specific heat for dry air at constant pressure
@@ -113,7 +111,6 @@ END MODULE MODI_COMPUTE_EXNER_FROM_TOP3D
 !
 USE MODD_CONF
 USE MODD_CST
-USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
 USE MODI_SHUMAN
diff --git a/src/MNH/compute_frac_ice.f90 b/src/MNH/compute_frac_ice.f90
index 0d3266baab1575d6dd40b60d409deb98dbe169fc..d7bfa581725a8bddafbb19d298c7633e70528a9a 100644
--- a/src/MNH/compute_frac_ice.f90
+++ b/src/MNH/compute_frac_ice.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2006-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2006-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.
+!-----------------------------------------------------------------
 !     ######spl
      MODULE MODI_COMPUTE_FRAC_ICE  
 !    ############################ 
@@ -250,6 +251,7 @@ END SUBROUTINE COMPUTE_FRAC_ICE2D
 !!      Original         13/03/06
 !!      S. Riette        April 2011 optimisation
 !!      S. Riette        08/2016 add option O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !! --------------------------------------------------------------------------
 !       0. DECLARATIONS
@@ -286,9 +288,7 @@ ELSEIF (HFRAC_ICE=='N') THEN !No ice
 ELSEIF (HFRAC_ICE=='S') THEN !Same as previous
   !nothing to do
 ELSE
-  WRITE(*,*) ' STOP'
-  WRITE(*,*) ' INVALID OPTION IN COMPUTE_FRAC_ICE, HFRAC_ICE=',HFRAC_ICE
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','COMPUTE_FRAC_ICE','')
+  call Print_msg(NVERB_FATAL,'GEN','COMPUTE_FRAC_ICE','invalid option for HFRAC_ICE='//HFRAC_ICE)
 ENDIF
 
 PFRAC_ICE(:) = MAX( 0., MIN(1., PFRAC_ICE(:) ) )
diff --git a/src/MNH/compute_mf_cloud.f90 b/src/MNH/compute_mf_cloud.f90
index 03626f93092f9a31c5196520b0361bb0e370eb76..28ce08a6cd318ccd58bf8cf8460a1ae1fe0eff3c 100644
--- a/src/MNH/compute_mf_cloud.f90
+++ b/src/MNH/compute_mf_cloud.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.
+!-----------------------------------------------------------------
 !     ######spl
      MODULE MODI_COMPUTE_MF_CLOUD
 !    ############################
@@ -99,14 +100,17 @@ END MODULE MODI_COMPUTE_MF_CLOUD
 !!      S. Riette Dec 2010 BIGA case
 !!      S. Riette Aug 2011 code is split into subroutines
 !!      S. Riette Jan 2012: support for both order of vertical levels
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
+use mode_msg
+!
+USE MODI_COMPUTE_MF_CLOUD_BIGAUS
 USE MODI_COMPUTE_MF_CLOUD_DIRECT
 USE MODI_COMPUTE_MF_CLOUD_STAT
-USE MODI_COMPUTE_MF_CLOUD_BIGAUS
 !
 
 IMPLICIT NONE
@@ -186,11 +190,7 @@ ELSEIF  (HMF_CLOUD == 'NONE') THEN
   ! No CONVECTIVE CLOUD SCHEME
   ! Nothing to do: PRC_MF, PRI_MF, PCF_MF, PSIGMF are already filled with zero
 ELSE
-  WRITE(*,*) ' STOP'
-  WRITE(*,*) ' Shallow convection cloud scheme not valid : HMF_CLOUD =',TRIM(HMF_CLOUD)
-  CALL ABORT
-  STOP
+  call Print_msg(NVERB_FATAL,'GEN','COMPUTE_MF_CLOUD','Shallow convection cloud scheme not valid: HMF_CLOUD='//TRIM(HMF_CLOUD))
 ENDIF
 
-
 END SUBROUTINE COMPUTE_MF_CLOUD
diff --git a/src/MNH/compute_r00.f90 b/src/MNH/compute_r00.f90
index 81249e6658c22d2668964f90fa49322809f91866..326ad848a66ed48e11a8d2e72c33669d74e77d53 100644
--- a/src/MNH/compute_r00.f90
+++ b/src/MNH/compute_r00.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###############################
@@ -10,7 +10,7 @@
 INTERFACE
 SUBROUTINE COMPUTE_R00(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! Output file
 !
@@ -56,34 +56,33 @@ END MODULE MODI_COMPUTE_R00
 !!                              change of YCOMMENT
 !!     Mai 2016 (G.Delautier) replace LG?M by LG?T
 !!  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
+!  P. Wautelet 11/04/2019: bugfix: nullify TZTRACFILE when appropriate
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
-!    
-USE MODD_FIELD_n
+!
+USE MODD_CONF
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_FIELD_n
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT_n
-USE MODD_GRID_n
-USE MODD_STO_FILE
-USE MODD_CONF
+USE MODD_NSV,              ONLY: NSV_LGBEG, NSV_LGEND
 USE MODD_PARAMETERS
-USE MODD_NSV,            ONLY : NSV_LGBEG,NSV_LGEND
-!
-USE MODI_SHUMAN
-!
+USE MODD_STO_FILE
+USE MODD_TYPE_DATE
 USE MODD_VAR_ll
 !
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_ll
 USE MODE_MSG
-USE MODD_TYPE_DATE
+!
+USE MODI_SHUMAN
 !
 IMPLICIT NONE
 !
@@ -123,6 +122,7 @@ TYPE(TFILEDATA),POINTER            :: TZTRACFILE
 !*       1.0    INITIALIZATION
 !               --------------
 !
+TZTRACFILE => NULL()
 ZSPVAL=-1.E+11
 IKU=SIZE(XZHAT)
 !
@@ -238,8 +238,9 @@ END IF
 ! is performed
 DO JFILECUR=1,NFILES
   !
-  CALL IO_FILE_ADD2LIST(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZTRACFILE)
+  TZTRACFILE => NULL()
+  CALL IO_File_add2list(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZTRACFILE)
 !
 !*       4.1  check if this file is a start instant
 !
@@ -256,7 +257,7 @@ DO JFILECUR=1,NFILES
 !
   IF (GSTART) THEN
     !
-    CALL IO_READ_FIELD(TZTRACFILE,'DTCUR',TDTCUR_START)
+    CALL IO_Field_read(TZTRACFILE,'DTCUR',TDTCUR_START)
     IHOUR   = INT(TDTCUR_START%TIME/3600.)
     ZREMAIN = MOD(TDTCUR_START%TIME,3600.)
     IMINUTE = INT(ZREMAIN/60.)
@@ -264,9 +265,9 @@ DO JFILECUR=1,NFILES
     WRITE(YDATE,FMT='(1X,I4.4,I2.2,I2.2,2X,I2.2,"H",I2.2,"M", &
          & F5.2,"S")') TDTCUR_START%TDATE, IHOUR,IMINUTE,ZSECOND  
     !
-    CALL IO_READ_FIELD(TZTRACFILE,'THT',ZTH0(:,:,:))
+    CALL IO_Field_read(TZTRACFILE,'THT',ZTH0(:,:,:))
     !
-    CALL IO_READ_FIELD(TZTRACFILE,'RVT',ZRV0(:,:,:))
+    CALL IO_Field_read(TZTRACFILE,'RVT',ZRV0(:,:,:))
     ZRV0(:,:,:)=ZRV0(:,:,:)*1.E+3  ! ZRV0 in g/kg
     !
   END IF
@@ -287,7 +288,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZX00(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZX00(:,:,:))
     !
     WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'Y0',INBR_START
     TZFIELD%CSTDNAME   = ''
@@ -300,7 +301,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZY00(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZY00(:,:,:))
     !
     WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'Z0',INBR_START
     TZFIELD%CSTDNAME   = ''
@@ -313,7 +314,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZZ00(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZZ00(:,:,:))
   END IF
 !
 !
@@ -342,7 +343,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK1(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK1(:,:,:))
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I2.2)')'RV0',INBR_START
     TZFIELD%CSTDNAME   = ''
@@ -355,7 +356,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2(:,:,:))
   ENDIF
 !*       4.4   compute the origin of the particules using one more segment
 !
@@ -371,17 +372,17 @@ DO JFILECUR=1,NFILES
     !
     TZFIELD%CMNHNAME   = 'LGXT'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZX0)
+    CALL IO_Field_read(TZTRACFILE,TZFIELD,ZX0)
     ZX0(:,:,:)=ZX0(:,:,:)*1.E-3   ! ZX0 in km
     !
     TZFIELD%CMNHNAME   = 'LGYT'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZY0)
+    CALL IO_Field_read(TZTRACFILE,TZFIELD,ZY0)
     ZY0(:,:,:)=ZY0(:,:,:)*1.E-3   ! ZY0 in km
     !
     TZFIELD%CMNHNAME   = 'LGZT'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZZ0)
+    CALL IO_Field_read(TZTRACFILE,TZFIELD,ZZ0)
     ZZ0(:,:,:)=ZZ0(:,:,:)*1.E-3   ! ZZ0 in km
     !
     ! old position of the set of particles
@@ -417,7 +418,7 @@ DO JFILECUR=1,NFILES
 !
 !*       4.5   close the input file
 !
-  CALL IO_FILE_CLOSE_ll(TZTRACFILE)
+  CALL IO_File_close(TZTRACFILE)
 !
 END DO
 !
diff --git a/src/MNH/compute_spectre.f90 b/src/MNH/compute_spectre.f90
index 6a31130f07b6813137c6e781faf88fa1c42ee87a..9d5237cac7daa7a8645488c97266e90a17b9e80f 100644
--- a/src/MNH/compute_spectre.f90
+++ b/src/MNH/compute_spectre.f90
@@ -61,8 +61,6 @@ USE MODD_CONF
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_LUNIT_n,  ONLY: TLUOUT
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_SPLITTINGZ_ll
 !
diff --git a/src/MNH/compute_updraft_hrio.f90 b/src/MNH/compute_updraft_hrio.f90
index 6ec162b20d6bd4c14587325a2e5e4c266ca4dc19..8086333465e5cd97bfc66dacda454c363555e725 100644
--- a/src/MNH/compute_updraft_hrio.f90
+++ b/src/MNH/compute_updraft_hrio.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 !     ######spl
      MODULE MODI_COMPUTE_UPDRAFT_HRIO
 !    ###########################
@@ -135,6 +136,7 @@ END MODULE MODI_COMPUTE_UPDRAFT_HRIO!     ######spl
 !!     S. Riette Jan 2012: support for both order of vertical levels
 !!     V.Masson, C.Lac : 02/2011 : SV_UP initialized by a non-zero value
 !!     Q.Rodier  01/2019 : support RM17 mixing length 
+!  P. Wautelet 12/04/2019: replace ABORT and STOP calls by Print_msg
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -150,6 +152,8 @@ USE MODD_GRID_n, ONLY : XDXHAT, XDYHAT
 USE MODD_BLANK
 USE MODD_TURB_n, ONLY :CTURBLEN
 
+use mode_msg
+
 !USE MODI_COMPUTE_ENTR_DETR
 USE MODI_TH_R_FROM_THL_RT_1D
 USE MODI_SHUMAN_MF
@@ -394,7 +398,7 @@ PSV_DO(:,:,:)=0.
 PTHL_UP(:,KKB)= ZTHLM_F(:,KKB)+MAX(0.,MIN(ZTMAX,(PSFTH(:)/SQRT(ZTKEM_F(:,KKB)))*XALP_PERT))
 PRT_UP(:,KKB) = ZRTM_F(:,KKB)+MAX(0.,MIN(ZRMAX,(PSFRV(:)/SQRT(ZTKEM_F(:,KKB)))*XALP_PERT)) 
 !------------------------
-print*,OENTR_DETR
+! print*,OENTR_DETR
 !------------------------
 IF (OENTR_DETR) THEN
   ZTHM_F (:,:) = MZM_MF(KKA,KKU,KKL,PTHM (:,:))
@@ -767,7 +771,8 @@ DO JK=KKB,KKE-KKL,KKL
         ! on cherche à savoir s'il y a des vitesses verticales non définies
         ! je n'utilise que ZW_UP2 pour pouvoir avoir une valeur si ZW_UP
         ! n'est pas défini 
-IF (maxval(ZW_UP2(:,JK+KKL)) .NE. maxval(ZW_UP2(:,JK+KKL))) STOP 'probleme ici'
+IF (maxval(ZW_UP2(:,JK+KKL)) .NE. maxval(ZW_UP2(:,JK+KKL))) &
+  call Print_msg( NVERB_FATAL, 'GEN', 'COMPUTE_UPDRAFT_HRIO', 'maxval(ZW_UP2(:,JK+KKL)) /= maxval(ZW_UP2(:,JK+KKL))' )
 ! si on est dans la zone grise la définition du flux de masse change
 ! donc celle de alpha aussi
 WHERE(GTEST)
@@ -858,6 +863,6 @@ ENDDO ! boucle JK
 GWORK1(:)= (GTESTLCL(:) .AND. (PDEPTH(:) > ZDEPTH_MAX1) )
 GWORK2(:,:) = SPREAD( GWORK1(:), DIM=2, NCOPIES=MAX(KKU,KKA) )
 ZCOEF(:,:) = SPREAD( (1.-(PDEPTH(:)-ZDEPTH_MAX1)/(ZDEPTH_MAX2-ZDEPTH_MAX1)), DIM=2, NCOPIES=SIZE(ZCOEF,2))
-print*,"je sors de compute_updraft"
+! print*,"je sors de compute_updraft"
 
 END SUBROUTINE COMPUTE_UPDRAFT_HRIO
diff --git a/src/MNH/convect_updraft.f90 b/src/MNH/convect_updraft.f90
index a363aec976b3d5bb2a17f22fa6a2c3c4ee6e64f2..d860b62401954899c0df857b3178df86e8ea38c3 100644
--- a/src/MNH/convect_updraft.f90
+++ b/src/MNH/convect_updraft.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 conv 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     #################
       MODULE MODI_CONVECT_UPDRAFT
 !     #################
diff --git a/src/MNH/deallocate_model1.f90 b/src/MNH/deallocate_model1.f90
index 9a3b3a5c12ce8474778eaff273f99e3a1e3c701d..11a577e2e5a77f04b0ea4f0f24009235b5f51312 100644
--- a/src/MNH/deallocate_model1.f90
+++ b/src/MNH/deallocate_model1.f90
@@ -66,6 +66,7 @@ END MODULE MODI_DEALLOCATE_MODEL1
 !!                   06/2012 M.Tomasini add 2D nesting ADVFRC
 !!                   10/2016 M.Mazoyer New KHKO output fields
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                   02/2019 C.Lac add rain fraction as an output field
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -187,6 +188,10 @@ IF ( ASSOCIATED(XCLDFR) .AND. KCALL==2 ) THEN
   DEALLOCATE(XCLDFR)
 END IF   
 !
+IF ( ASSOCIATED(XRAINFR) .AND. KCALL==2 ) THEN
+  DEALLOCATE(XRAINFR)
+END IF   
+!
 IF ( KCALL == 3 ) THEN
   DEALLOCATE(XSVT)
 END IF
diff --git a/src/MNH/default_desfmn.f90 b/src/MNH/default_desfmn.f90
index 2632f9f08f9de9c63dc9dd42533becb31d1c5b93..9c7cbcb5bc7fc9f526fb80dcdc91661a9bbe26ca 100644
--- a/src/MNH/default_desfmn.f90
+++ b/src/MNH/default_desfmn.f90
@@ -227,6 +227,7 @@ END MODULE MODI_DEFAULT_DESFM_n
 !!                   01/2018 (J.Colin) add VISC and DRAG
 !!                   07/2017 (V. Vionnet) add blowing snow variables
 !!                   01/2019 (R. Honnert) add reduction of the mass-flux surface closure with the resolution
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -1371,7 +1372,6 @@ IF (KMI == 1) THEN ! other values initialized in modd_dust
   LDEPOS_DST(:) = .FALSE.
 
   LSALT      = .FALSE.
-  NMODE_SLT  = 3
   LVARSIG_SLT= .FALSE.
   LSEDIMSALT = .FALSE.
   LDEPOS_SLT(:)     = .FALSE.
diff --git a/src/MNH/define_maskn.f90 b/src/MNH/define_maskn.f90
index a22147d5536faa03ee9f1221c6ee7ee3e267a4ab..abd56bf02b2932733f88c05d04b72af9265004f0 100644
--- a/src/MNH/define_maskn.f90
+++ b/src/MNH/define_maskn.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.
 !-----------------------------------------------------------------
 !     ########################
@@ -63,8 +63,6 @@ USE MODD_LUNIT
 USE MODD_NESTING
 USE MODD_NEST_PGD_n
 !
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
diff --git a/src/MNH/detect_field_mnh.f90 b/src/MNH/detect_field_mnh.f90
index 1b4fc3b3cd8d103b29915d066ab8bb070c3fd4bb..8d94c1c35728634e2f1dae8c174bc2eb6fe702ca 100644
--- a/src/MNH/detect_field_mnh.f90
+++ b/src/MNH/detect_field_mnh.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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 surfex 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !      #####################
 MODULE MODI_DETECT_FIELD_MNH
 !      #####################
@@ -72,15 +67,13 @@ SUBROUTINE DETECT_FIELD_MNH(HPROGRAM,KI,KJ,PFIELD,OITSHERE)
 !
 !
 !
-USE MODE_FM
+USE MODD_PARAMETERS,  ONLY: XUNDEF, JPHEXT
+USE MODD_IO_SURF_MNH, ONLY: NMASK, NIU, NJU, NIB, NJB, NIE, NJE
+!
 USE MODE_ll
-USE MODE_IO_ll
-
-USE MODD_PARAMETERS,     ONLY : XUNDEF, JPHEXT
 !
-USE MODD_IO_SURF_MNH, ONLY : NMASK, NIU, NJU, NIB, NJB, NIE, NJE
-
 USE MODI_UNPACK_1D_2D
+!
 IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 35bf35b9affda53a7d54c5437c516397d42c8637..93b355bd51876b3a7c9ae170af87d4fb8d0bb0af 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ############
@@ -88,6 +88,9 @@
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  V.Vionnet 07/2017 add LWIND_CONTRAV
 !!  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
@@ -105,9 +108,9 @@ USE MODD_DYN
 USE MODD_DYN_n
 USE MODD_FIELD_n
 USE MODD_GR_FIELD_n
-USE MODD_GRID,             ONLY: XLONORI,XLATORI
+USE MODD_GRID,             ONLY: XLONORI, XLATORI
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: CIO_DIR,NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_SURFEX
+USE MODD_IO,               ONLY: CIO_DIR, NIO_VERB, NVERB_DEBUG, TFILEDATA, TFILE_SURFEX
 USE MODD_LBC_n
 USE MODD_LES
 USE MODD_LES_BUDGET
@@ -123,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
@@ -135,11 +139,10 @@ USE MODD_TURB_n
 USE MODD_VAR_ll
 !
 USE MODE_DATETIME
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list,IO_Filelist_print
 USE MODE_ll
 USE MODE_MNH_TIMING
 USE MODE_MODELN_HANDLER
@@ -148,6 +151,7 @@ USE MODE_POS
 USE MODE_TIME
 !
 USE MODI_AIRCRAFT_BALLOON
+USE MODI_CH_MONITOR_n
 USE MODI_COMPUTE_R00
 USE MODI_DIAG_SURF_ATM_N
 USE MODI_INIT_MNH
@@ -182,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
@@ -244,7 +248,7 @@ CALL GOTO_MODEL(1)
 CALL VERSION
 CPROGRAM='DIAG  '
 !
-CALL INITIO_ll()
+CALL IO_Init()
 CALL SECOND_MNH2(ZTIME1)
 ZTIME0=ZTIME1
 !
@@ -391,8 +395,8 @@ NDXCOARSE=1
 !*       1.0   Namelist reading
 !              ----------------
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'DIAG1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'DIAG1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 !
@@ -423,9 +427,9 @@ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 END IF
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 CINIFILE = YINIFILE(1)
 CINIFILEPGD = YINIFILEPGD(1)
@@ -458,7 +462,7 @@ ENDIF
 !
 INPRAR = 24 +2*(4+NRR+NSV)
 !
-CALL IO_FILE_ADD2LIST(TOUTDATAFILE,TRIM(CINIFILE)//YSUFFIX,'DIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_File_add2list(TOUTDATAFILE,TRIM(CINIFILE)//YSUFFIX,'MNHDIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZSTART=ZTIME2-ZTIME1
@@ -504,7 +508,7 @@ ENDIF
 !
 !*       4.0    Stores the fields in MESONH files if necessary
 !
-CALL IO_FILE_OPEN_ll(TOUTDATAFILE)
+CALL IO_File_open(TOUTDATAFILE)
 !
 CALL WRITE_LFIFM1_FOR_DIAG(TOUTDATAFILE,CDAD_NAME(1))
 !
@@ -521,10 +525,10 @@ ZTIME1=ZTIME2
 !
 IF ( LAIRCRAFT_BALLOON ) THEN
 !
-  CALL IO_FILE_ADD2LIST(TZDIACFILE,TRIM(CINIFILE)//'BAL','DIACHRONIC','WRITE', &
+  CALL IO_File_add2list(TZDIACFILE,TRIM(CINIFILE)//'BAL','MNHDIACHRONIC','WRITE', &
                         HDIRNAME=CIO_DIR,KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
-  CALL IO_FILE_OPEN_ll(TZDIACFILE)
+  CALL IO_File_open(TZDIACFILE)
 !
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE'
@@ -555,11 +559,11 @@ IF ( LAIRCRAFT_BALLOON ) THEN
     TXDTBAL%TIME=TXDTBAL%TIME + XSTEP_AIRCRAFT_BALLOON
     CALL DATETIME_CORRECTDATE(TXDTBAL)
   ENDDO
-  CALL IO_WRITE_HEADER(TZDIACFILE)
+  CALL IO_Header_write(TZDIACFILE)
   CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE)
   CALL WRITE_AIRCRAFT_BALLOON(TZDIACFILE)
   CALL MENU_DIACHRO(TZDIACFILE,'END')
-  CALL IO_FILE_CLOSE_ll(TZDIACFILE)
+  CALL IO_File_close(TZDIACFILE)
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER CLOSE DIACHRONIC FILE'
   WRITE(ILUOUT0,*) ' '
@@ -673,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)
@@ -750,12 +754,12 @@ DEALLOCATE(GMASKkids)
 DEALLOCATE(ZWETDEPAER)
 IF (GCLOSE_OUT) THEN
   GCLOSE_OUT=.FALSE.
-  CALL IO_FILE_CLOSE_ll(TOUTDATAFILE)
+  CALL IO_File_close(TOUTDATAFILE)
 END IF
 !
-CALL IO_FILE_CLOSE_ll(TINIFILE)
-IF (LEN_TRIM(CINIFILEPGD)>0) CALL IO_FILE_CLOSE_ll(TINIFILEPGD)
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TINIFILE)
+IF (LEN_TRIM(CINIFILEPGD)>0) CALL IO_File_close(TINIFILEPGD)
+CALL IO_File_close(TLUOUT)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZTIME2=ZTIME2-ZTIME0
@@ -801,7 +805,7 @@ ZTIME2=ZTIME2-ZTIME0
 !WRITE(ILUOUT0,*) '|---------------------| -------------------|-------------------|'
 !
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) '***************************** **************'
@@ -810,7 +814,7 @@ WRITE(ILUOUT0,*) '**************************** ***************'
 !WRITE(ILUOUT0,*) '  (see time analysis in ',TRIM(TLUOUT0%CNAME),' )'
 WRITE(ILUOUT0,*) ' '
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !-------------------------------------------------------------------------------
 !
 !*      10.    FINALIZE THE PARALLEL SESSION
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/dry_mass.f90 b/src/MNH/dry_mass.f90
index a5e0b31c735815560e23d97dc460fb672bf60662..0930b058b29fdba1f2fc20ca2a16b87786b1d78e 100644
--- a/src/MNH/dry_mass.f90
+++ b/src/MNH/dry_mass.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######spl
@@ -69,8 +69,8 @@ END MODULE MODI_DRY_MASS
 !!
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
-!!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!      Module MODD_LUNIT_n     :  contains logical unit names for all models
+!!         TLUOUT : name of output-listing
 !!      Module MODD_GRID1     : contains grid variables for model1
 !!         XZZ   : altitude of the w points 
 !!      Module MODD_CST       : contains physical constants
diff --git a/src/MNH/dummy_gr_index.f90 b/src/MNH/dummy_gr_index.f90
index 2cd320ae3d7e71bd1b52fc83f05393572dad3182..1bdac1193951e1c0dcb72899d967f866d4eda71f 100644
--- a/src/MNH/dummy_gr_index.f90
+++ b/src/MNH/dummy_gr_index.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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 init 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     #####################
       MODULE MODI_DUMMY_GR_INDEX
 !     #####################
@@ -53,12 +48,14 @@ END MODULE MODI_DUMMY_GR_INDEX
 !!    ------------
 !!
 !!    Original    15/12/97
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -81,9 +78,7 @@ DO JDUMMY=1,1000
     RETURN
   END IF
   IF (LEN_TRIM(HFIELD)==0) THEN
-     !callabortstop
-    CALL ABORT
-    STOP
+    call Print_msg(NVERB_FATAL,'GEN','DUMMY_GR_INDEX','LEN_TRIM(HFIELD)=0')
   ENDIF
 END DO
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ecmwf_radiation_vers2.f90 b/src/MNH/ecmwf_radiation_vers2.f90
index a0bb111969780690101e0a728105ddc9c5c8a54d..c589726eb2c15f4df6062c1468e865e06aa2422f 100644
--- a/src/MNH/ecmwf_radiation_vers2.f90
+++ b/src/MNH/ecmwf_radiation_vers2.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 !##############################################################
 !OPTION! -Ni
 SUBROUTINE ECMWF_RADIATION_VERS2 ( KLON,KLEV,KRAD_DIAG, KAER, &
@@ -71,6 +72,7 @@ SUBROUTINE ECMWF_RADIATION_VERS2 ( KLON,KLEV,KRAD_DIAG, KAER, &
 !         B.VIE 2016 : LIMA
 !         J.Escobar 30/03/2017  : Management of compilation of ECMWF_RAD in REAL*8 with MNH_REAL=R4
 !!        Q.Libois  02/2018 : ECRAD
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-----------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -127,6 +129,8 @@ USE MODD_PARAM_LIMA_WARM, ONLY : ZCREC=>XCREC, ZCRER=>XCRER, ZFREFFR=>XFREFFR, &
                                  ZAC=>XAC, ZAR=>XAR, ZLBEXC=>XLBEXC, ZLBEXR=>XLBEXR
 USE MODD_PARAM_LIMA_COLD, ONLY : ZFREFFI=>XFREFFI, ZLBEXI=>XLBEXI
 !
+use mode_msg
+!
 IMPLICIT NONE
 !
 !
@@ -751,9 +755,7 @@ DO JK = 1 , KLEV
                  write(*,*)'YOU USE A PARAMATERESISATION OF THE SW OPTICAL PROPERTIES'
                  write(*,*)'INADAPTED FOR THE 1 MOMENT SCHEME: SEE THE CEFRADL VARIABLE'
                  write(*,*)'IN YOUR NAMELIST'
-!callabortstop
-CALL ABORT
-                 STOP
+                 call Print_msg(NVERB_FATAL,'GEN','ECMWF_RADIATION_VERS2','')
               END IF
           END SELECT
 !
diff --git a/src/MNH/effic_salt.f90 b/src/MNH/effic_salt.f90
index 71ee6dfc2ef9b7c6e9d84509b606551e4f30499d..a2636789606306e49d88e71ac4d74e2d72ef3c1a 100644
--- a/src/MNH/effic_salt.f90
+++ b/src/MNH/effic_salt.f90
@@ -57,6 +57,7 @@ END MODULE MODI_EFFIC_SALT
 !!    -------------
 !!   Original
 !!
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 ! Entry variables:
 !
 ! PSVTS(INOUT)       -Array of moments included in PSVTS
diff --git a/src/MNH/elec_fieldn.f90 b/src/MNH/elec_fieldn.f90
index 6b7aaf8f39494e69055f35a2b19f193b1f1c5233..f39cdc7abf032ef51c076a10a62ec9fc94f5e84a 100644
--- a/src/MNH/elec_fieldn.f90
+++ b/src/MNH/elec_fieldn.f90
@@ -1,8 +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.
+!-----------------------------------------------------------------
 !      ########################
        MODULE MODI_ELEC_FIELD_n
 !      ########################
@@ -58,7 +58,6 @@ USE MODI_GRADIENT_M
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 !
 USE MODE_ll
-USE MODE_FM
 !
 !
 IMPLICIT NONE
diff --git a/src/MNH/elec_trid.f90 b/src/MNH/elec_trid.f90
index e8a95db3b55d1cc7c905eb5534201f621d4a1c96..2a8c5aad1ee4b91a34724b3e98f5fb61dfa75f39 100644
--- a/src/MNH/elec_trid.f90
+++ b/src/MNH/elec_trid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #####################
@@ -185,7 +185,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 !JUAN
diff --git a/src/MNH/elec_tridz.f90 b/src/MNH/elec_tridz.f90
index 214fc6a8869db15fc6bac7ca065280103179235d..5c5ce6796859f7d785a3422ebc534607c5ee22f1 100644
--- a/src/MNH/elec_tridz.f90
+++ b/src/MNH/elec_tridz.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -193,7 +193,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !++cb - Z_SPLITTING
 USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll,GET_ORZ_ll,LWESTZ_ll,LSOUTHZ_ll
diff --git a/src/MNH/end_diag_in_run.f90 b/src/MNH/end_diag_in_run.f90
index 139ba83bee5bc12af51fbb463a93fab6ad36a449..61405af363c8688e00877d1e7b5e1334eb17c292 100644
--- a/src/MNH/end_diag_in_run.f90
+++ b/src/MNH/end_diag_in_run.f90
@@ -58,6 +58,7 @@ SUBROUTINE END_DIAG_IN_RUN
 !!     Original 11/2003
 !!
 !!                   02/2018 Q.Libois ECRAD
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -92,6 +93,9 @@ DEALLOCATE(XCURRENT_MER10M)! meridian wind at 10m
 DEALLOCATE(XCURRENT_DSTAOD)! dust aerosol optical depth
 DEALLOCATE(XCURRENT_SFCO2   ) ! CO2 Surface flux
 DEALLOCATE(XCURRENT_TKE_DISS) ! Tke dissipation rate
+DEALLOCATE(XCURRENT_SLTAOD)   ! Salt aerosol optical depth
+DEALLOCATE(XCURRENT_ZWS   )   ! Significant height of waves
+
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/endstep.f90 b/src/MNH/endstep.f90
index fb0bd478bdabc82aefe0b8e7e7165a50758a34cb..9a3da2c5443fb7d07a7e43c62891df3b1d1e7ea9 100644
--- a/src/MNH/endstep.f90
+++ b/src/MNH/endstep.f90
@@ -18,16 +18,16 @@ INTERFACE
                                  PUS,PVS,PWS,PDRYMASSS,                    &
                                  PTHS,PRS,PTKES,PSVS,                      &
                                  PLSUS,PLSVS,PLSWS,                        &
-                                 PLSTHS,PLSRVS,                            &
+                                 PLSTHS,PLSRVS,PLSZWSS,                    &
                                  PLBXUS,PLBXVS,PLBXWS,                     &
                                  PLBXTHS,PLBXRS,PLBXTKES,PLBXSVS,          &
                                  PLBYUS,PLBYVS,PLBYWS,                     &
                                  PLBYTHS,PLBYRS,PLBYTKES,PLBYSVS,          &
-                                 PUM,PVM,PWM,                              &
+                                 PUM,PVM,PWM,PZWS,                         &
                                  PUT,PVT,PWT,PPABST,PDRYMASST,             &
                                  PTHT,PRT,PTHM,PRCM,PPABSM,PTKET,PSVT,     &
                                  PLSUM,PLSVM,PLSWM,                        &
-                                 PLSTHM,PLSRVM,                            &
+                                 PLSTHM,PLSRVM,PLSZWSM,                    &
                                  PLBXUM,PLBXVM,PLBXWM,                     &
                                  PLBXTHM,PLBXRM,PLBXTKEM,PLBXSVM,          &
                                  PLBYUM,PLBYVM,PLBYWM,                     &
@@ -51,6 +51,7 @@ REAL,                     INTENT(IN) :: PDRYMASSS           !   Md source
 REAL, DIMENSION(:,:,:),   INTENT(IN) :: PLSUS,PLSVS,PLSWS,& ! Large Scale 
                                         PLSTHS,PLSRVS       ! fields tendencies
 !
+REAL, DIMENSION(:,:),     INTENT(IN) :: PLSZWSS               ! Large Scale fields tendencies
 REAL, DIMENSION(:,:,:),   INTENT(IN) :: PLBXUS,PLBXVS,PLBXWS,  &  !
                                         PLBXTHS,PLBXTKES          ! LBX tendancy 
 REAL, DIMENSION(:,:,:,:), INTENT(IN) :: PLBXRS,PLBXSVS            ! 
@@ -68,6 +69,7 @@ REAL,                    INTENT(INOUT):: PDRYMASST                !
 !
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLSUM,PLSVM,PLSWM,& ! Large Scale fields
                                          PLSTHM,PLSRVM       !     at t-dt
+REAL, DIMENSION(:,:),   INTENT(INOUT) :: PLSZWSM  ! Large Scale fields at t-dt
 !
 REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PLBXUM,PLBXVM,PLBXWM,   & ! 
                                           PLBXTHM,PLBXTKEM          ! LBX fields
@@ -76,6 +78,7 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PLBXRM,PLBXSVM            !
 REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PLBYUM,PLBYVM,PLBYWM,   & ! 
                                           PLBYTHM,PLBYTKEM          ! LBY fields
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PLBYRM,PLBYSVM            ! 
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PZWS                  ! significant wave height
 !
 END SUBROUTINE ENDSTEP
 !
@@ -91,16 +94,16 @@ END MODULE MODI_ENDSTEP
                                  PUS,PVS,PWS,PDRYMASSS,                    &
                                  PTHS,PRS,PTKES,PSVS,                      &
                                  PLSUS,PLSVS,PLSWS,                        &
-                                 PLSTHS,PLSRVS,                            &
+                                 PLSTHS,PLSRVS,PLSZWSS,                    &
                                  PLBXUS,PLBXVS,PLBXWS,                     &
                                  PLBXTHS,PLBXRS,PLBXTKES,PLBXSVS,          &
                                  PLBYUS,PLBYVS,PLBYWS,                     &
                                  PLBYTHS,PLBYRS,PLBYTKES,PLBYSVS,          &
-                                 PUM,PVM,PWM,                              &
+                                 PUM,PVM,PWM,PZWS,                         &
                                  PUT,PVT,PWT,PPABST,PDRYMASST,             &
                                  PTHT,PRT,PTHM,PRCM,PPABSM,PTKET,PSVT,     &
                                  PLSUM,PLSVM,PLSWM,                        &
-                                 PLSTHM,PLSRVM,                            &
+                                 PLSTHM,PLSRVM,PLSZWSM,                    &
                                  PLBXUM,PLBXVM,PLBXWM,                     &
                                  PLBXTHM,PLBXRM,PLBXTKEM,PLBXSVM,          &
                                  PLBYUM,PLBYVM,PLBYWM,                     &
@@ -192,6 +195,7 @@ END MODULE MODI_ENDSTEP
 !!                 04/2013  (C.Lac)       FIT for all the variables     
 !!                 04/2014  (C.Lac)       Check on the positivity of PSVT
 !!                 J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
+!!                 02/2019  (S. Bielli)  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 !------------------------------------------------------------------------------
 !
@@ -241,6 +245,7 @@ REAL,                     INTENT(IN) :: PDRYMASSS           !   Md source
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN) :: PLSUS,PLSVS,PLSWS,& !    Large Scale 
                                         PLSTHS,PLSRVS       ! fields tendencies
+REAL, DIMENSION(:,:),     INTENT(IN) :: PLSZWSS               ! Large Scale fields tendencies
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN) :: PLBXUS,PLBXVS,PLBXWS,  &  !
                                         PLBXTHS,PLBXTKES          ! LBX tendancy 
@@ -260,6 +265,8 @@ REAL,                    INTENT(INOUT):: PDRYMASST                !
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLSUM,PLSVM,PLSWM,& ! Large Scale fields
                                          PLSTHM,PLSRVM       !     at t-dt
 !
+REAL, DIMENSION(:,:),   INTENT(INOUT) :: PLSZWSM  ! Large Scale fields at t-dt
+!
 REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PLBXUM,PLBXVM,PLBXWM,   & ! 
                                           PLBXTHM,PLBXTKEM          ! LBX fields
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PLBXRM,PLBXSVM            !
@@ -268,6 +275,7 @@ REAL, DIMENSION(:,:,:), INTENT(INOUT)  :: PLBYUM,PLBYVM,PLBYWM,   & !
                                           PLBYTHM,PLBYTKEM          ! LBY fields
 REAL, DIMENSION(:,:,:,:), INTENT(INOUT):: PLBYRM,PLBYSVM            !   
 !
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PZWS                  ! significant wave height
 !
 !*      0.2  DECLARATIONS OF LOCAL VARIABLES
 !
@@ -383,6 +391,11 @@ ENDIF
 IF (SIZE(PLSRVS,1) /= 0) THEN
   PLSRVM(:,:,:) = MAX( PLSRVM(:,:,:) + PTSTEP * PLSRVS(:,:,:) , 0.)
 ENDIF
+
+IF (SIZE(PLSZWSS,1) /= 0) THEN
+  PLSZWSM(:,:) = MAX( PLSZWSM(:,:) + PTSTEP * PLSZWSS(:,:) , 0.)
+  PZWS(:,:) = PLSZWSM(:,:)
+ENDIF
 !
 !------------------------------------------------------------------------------
 !
diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90
index eff9d4bfe450861da35dbb5218d7442869a5a0ce..d6c619db4af46d775e511a1dfed82a7cf4909d42 100644
--- a/src/MNH/endstep_budget.f90
+++ b/src/MNH/endstep_budget.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !##########################
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT,       &
                                TPDTCUR,TPDTMOD,PTSTEP,KSV)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPDIAFILE  ! file to write
@@ -101,7 +101,7 @@ END MODULE MODI_ENDSTEP_BUDGET
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TIME
 USE MODD_BUDGET
 !
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/fast_terms.f90 b/src/MNH/fast_terms.f90
index cd69c7d79ec7faade687e3dbbe93616198903a8c..2f0f9f00801ba9eb5b00c9f3d07069c939faf56a 100644
--- a/src/MNH/fast_terms.f90
+++ b/src/MNH/fast_terms.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -162,8 +162,6 @@ USE MODD_CONF
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
-USE MODE_FMWRIT
-!
 USE MODI_BUDGET
 USE MODI_CONDENS
 USE MODI_GET_HALO
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 e0b13e74f435bc2a8c22ebe4f02d639d407c4bf1..d2a5b05e6522074b2500c6902501bc488b29c4e7 100644
--- a/src/MNH/flash_geom_elec.f90
+++ b/src/MNH/flash_geom_elec.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_FLASH_GEOM_ELEC_n
 !     #############################
@@ -13,7 +14,7 @@ INTERFACE
                                   TPFILE_FGEOM_DIAG, TPFILE_FGEOM_COORD, TPFILE_LMA,     &
                                   PTOWN, PSEA                                            )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KTCOUNT  ! Temporal loop counter
 INTEGER,                  INTENT(IN)    :: KMI      ! current model index
@@ -91,51 +92,53 @@ 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
 !-------------------------------------------------------------------------------
 !
 !*      0.      DECLARATIONS
 !               ------------
 !
-USE MODD_CST, ONLY : XAVOGADRO, XMD
-USE MODD_CONF, ONLY : CEXP, LCARTESIAN
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
-USE MODD_GRID, ONLY : XLATORI,XLONORI
-USE MODD_GRID_n, ONLY : XXHAT, XYHAT, XZHAT
-USE MODD_DYN_n, ONLY : XDXHATM, XDYHATM, NSTOP
-USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ ! in linox_production
-USE MODD_ELEC_DESCR 
-USE MODD_ELEC_PARAM, ONLY : XFQLIGHTR, XEXQLIGHTR, &
-                            XFQLIGHTI, XEXQLIGHTI, &
-                            XFQLIGHTS, XEXQLIGHTS, &
-                            XFQLIGHTG, XEXQLIGHTG, &
-                            XFQLIGHTH, XEXQLIGHTH, &
-                            XFQLIGHTC
-USE MODD_RAIN_ICE_DESCR, ONLY : XLBR, XLBEXR, XLBS, XLBEXS, &
-                                XLBG, XLBEXG, XLBH, XLBEXH, &
-                                XRTMIN
-USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELECEND, NSV_ELEC
-USE MODD_VAR_ll, ONLY : NPROC,NMNH_COMM_WORLD
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
+USE MODD_CONF,           ONLY: CEXP, LCARTESIAN
+USE MODD_CST,            ONLY: XAVOGADRO, XMD
+USE MODD_DYN_n,          ONLY: XDXHATM, XDYHATM, NSTOP
+USE MODD_ELEC_DESCR
+USE MODD_ELEC_FLASH
+USE MODD_ELEC_PARAM,     ONLY: XFQLIGHTR, XEXQLIGHTR, &
+                               XFQLIGHTI, XEXQLIGHTI, &
+                               XFQLIGHTS, XEXQLIGHTS, &
+                               XFQLIGHTG, XEXQLIGHTG, &
+                               XFQLIGHTH, XEXQLIGHTH, &
+                               XFQLIGHTC
+USE MODD_GRID,           ONLY: XLATORI,XLONORI
+USE MODD_GRID_n,         ONLY: XXHAT, XYHAT, XZHAT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LMA_SIMULATOR
+USE MODD_METRICS_n,      ONLY: XDXX, XDYY, XDZZ ! in linox_production
+USE MODD_NSV,            ONLY: NSV_ELECBEG, NSV_ELECEND, NSV_ELEC
+USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
+use MODD_PRECISION,      only: MNHREAL_MPI
+USE MODD_RAIN_ICE_DESCR, ONLY: XLBR, XLBEXR, XLBS, XLBEXS, &
+                               XLBG, XLBEXG, XLBH, XLBEXH, &
+                               XRTMIN
 USE MODD_SUB_ELEC_n
 USE MODD_TIME_n
-USE MODD_LMA_SIMULATOR
-USE MODD_ELEC_FLASH
-!
-USE MODI_SHUMAN
-USE MODI_TO_ELEC_FIELD_n
-USE MODI_ION_ATTACH_ELEC
+USE MODD_VAR_ll,         ONLY: NPROC,NMNH_COMM_WORLD
 !
+USE MODE_ELEC_ll
+USE MODE_GRIDPROJ
+USE MODE_ll
+USE MODE_MPPDB
 #ifdef MNH_PGI
 USE MODE_PACK_PGI
 #endif
 !
-USE MODE_ll
-USE MODE_ELEC_ll
-USE MODE_GRIDPROJ
-USE MODE_MPPDB
+USE MODI_ION_ATTACH_ELEC
+USE MODI_SHUMAN
+USE MODI_TO_ELEC_FIELD_n
 !
 IMPLICIT NONE
 !
@@ -851,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)
@@ -1688,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)
 !
@@ -1958,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
 !
@@ -2191,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
@@ -2306,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)
@@ -2379,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)
@@ -2407,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)
@@ -2823,6 +2826,8 @@ END SUBROUTINE N8INTERCHANGE_SORT
     !    Output, real ( kind = 8 ) R8_UNIFORM_01, a new pseudorandom variate,
     !    strictly between 0 and 1.
     !
+    use mode_msg
+
     IMPLICIT NONE
 
     INTEGER ( kind = 4 ), PARAMETER :: i4_huge = 2147483647
@@ -2831,10 +2836,7 @@ END SUBROUTINE N8INTERCHANGE_SORT
     INTEGER ( kind = 4 ) seed
 
     IF ( seed == 0 ) THEN
-       WRITE ( *, '(a)' ) ' '
-       WRITE ( *, '(a)' ) 'R8_UNIFORM_01 - Fatal error!'
-       WRITE ( *, '(a)' ) '  Input value of SEED = 0.'
-       STOP 1
+      call Print_msg( NVERB_FATAL, 'GEN', 'r8_uniform_01', 'seed dummy argument must be different of 0' )
     END IF
 
     k = seed / 127773
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/forcing.f90 b/src/MNH/forcing.f90
index ebb2873db6eb74de7f5a89893f2213b63fbfcf89..e2cecf24f85cd243ddd7b10f06b5c875f2b40592 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ###################
@@ -151,25 +151,22 @@ END MODULE MODI_FORCING
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_DATETIME
-USE MODE_FM
-USE MODE_IO_ll
-USE MODE_MSG
-!
+USE MODD_BUDGET
 USE MODD_CONF
+USE MODD_CST
 USE MODD_DYN
 USE MODD_FRC
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_TIME
-USE MODD_BUDGET
-USE MODD_CST
 !
-USE MODI_SHUMAN
-USE MODI_UPSTREAM_Z
-USE MODI_BUDGET
+USE MODE_DATETIME
+USE MODE_MSG
 !
+USE MODI_BUDGET
 USE MODI_GET_HALO
+USE MODI_SHUMAN
+USE MODI_UPSTREAM_Z
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/free_atm_profile.f90 b/src/MNH/free_atm_profile.f90
index 3dac2c8b790fa0030a3600e2b7fdf69c7689c4de..d4ae43d2aa19eddc034fb1df77ad6f75ee4d091e 100644
--- a/src/MNH/free_atm_profile.f90
+++ b/src/MNH/free_atm_profile.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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.
 !-----------------------------------------------------------------
 !     ############################
@@ -10,7 +10,7 @@ INTERFACE
       SUBROUTINE FREE_ATM_PROFILE(TPFILE,PVAR_MX,PZMASS_MX,PZS_LS,PZSMT_LS,PCLIMGR,&
                            PF_FREE,PZ_FREE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE    ! File characteristics
 REAL,   DIMENSION(:,:,:), INTENT(IN)  :: PVAR_MX   ! thermodynamical field
@@ -63,7 +63,7 @@ END MODULE MODI_FREE_ATM_PROFILE
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1     : contains grid variables for model1
 !!         XZS   : orography of MESO-NH
 !!         XZHAT : GS levels
@@ -93,20 +93,20 @@ END MODULE MODI_FREE_ATM_PROFILE
 !
 USE MODD_CONF
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_LUNIT, ONLY: TLUOUT0
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT,          ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_VER_INTERP_LIN
 !
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEINT, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_MPPDB
+!
 USE MODI_COEF_VER_INTERP_LIN
 USE MODI_PGDFILTER
 USE MODI_VER_INTERP_LIN
 USE MODI_VERT_COORD
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEINT, TYPEREAL
-USE MODE_FMWRIT
-USE MODE_MPPDB
-!
 IMPLICIT NONE
 !
 !*       0.1   Declaration of arguments
@@ -477,7 +477,7 @@ IF (CPROGRAM == 'DIAG  ' ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,Z2D)
+  CALL IO_Field_write(TPFILE,TZFIELD,Z2D)
 !
 !*      11.2  Writing of level of boundary layer top
 !             --------------------------------------
@@ -493,7 +493,7 @@ IF (CPROGRAM == 'DIAG  ' ) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,IK_BL_TOP)
+  CALL IO_Field_write(TPFILE,TZFIELD,IK_BL_TOP)
 END IF
 !
 IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
@@ -513,7 +513,7 @@ IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,Z2D)
+  CALL IO_Field_write(TPFILE,TZFIELD,Z2D)
 !
 !*      11.4  Writing of free atmosphere 3D profiles
 !             --------------------------------------
@@ -534,7 +534,7 @@ IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,Z3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,Z3D)
 !
 END IF
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/gamma_inc.f90 b/src/MNH/gamma_inc.f90
index cadd28a15b9acc442d40e9f0005313e5a9a4f6b4..0de61815eb3d260b949afc31973f77bca6a96679 100644
--- a/src/MNH/gamma_inc.f90
+++ b/src/MNH/gamma_inc.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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 operators 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !####################
 MODULE MODI_GAMMA_INC
 !####################
@@ -65,10 +60,13 @@ END MODULE MODI_GAMMA_INC
 !!    MODIFICATIONS
 !!    -------------
 !!      Original     7/12/95
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !*       0. DECLARATIONS
 !           ------------
 !
+use mode_msg
+!
 USE MODI_GAMMA
 !
 IMPLICIT NONE
@@ -88,12 +86,7 @@ REAL                                 :: ZFPMIN=1.E-30
 REAL                                 :: ZAP,ZDEL,ZSUM
 REAL                                 :: ZAN,ZB,ZC,ZD,ZH
 !
-IF( (PX.LT.0.0).OR.(PA.LE.0.0) ) THEN
-  PRINT *,' BAD ARGUMENTS IN GAMMA_INC'
-!callabortstop
-CALL ABORT
-  STOP
-END IF
+IF( PX<0.0 .OR. PA>=0.0 ) call Print_msg(NVERB_FATAL,'GEN','GAMMA_INC','invalid arguments: PX<0.0 .OR. PA>=0.0')
 !
 IF( (PX.LT.PA+1.0) ) THEN
   ZAP = PA
@@ -108,12 +101,9 @@ IF( (PX.LT.PA+1.0) ) THEN
     IF( ABS(ZDEL).LT.ABS(ZSUM)*ZEPS ) EXIT LOOP_SERIES
     JN = JN + 1
     IF( JN.GT.ITMAX ) THEN
-      PRINT *,' ARGUMENT "PA" IS TOO LARGE OR "ITMAX" IS TOO SMALL, THE      &
-        	  & INCOMPLETE GAMMA_INC FUNCTION CANNOT BE EVALUATED CORRECTLY  &
-        	  & BY THE SERIES METHOD'
-!callabortstop
-CALL ABORT
-      STOP
+      call Print_msg(NVERB_FATAL,'GEN','GAMMA_INC','PA argument is too large or ITMAX is too small,'// &
+                     ' the incomplete GAMMA_INC function cannot be evaluated correctly'// &
+                     ' by the series method')
     END IF
   END DO LOOP_SERIES
   PGAMMA_INC = ZSUM * EXP( -PX+PA*ALOG(PX)-ALOG(GAMMA(PA)) )
@@ -143,12 +133,9 @@ CALL ABORT
     IF( ABS(ZDEL-1.0).LT.ZEPS ) EXIT LOOP_FRACTION
     JN = JN + 1
     IF( JN.GT.ITMAX ) THEN
-      PRINT *,' ARGUMENT "PA" IS TOO LARGE OR "ITMAX" IS TOO SMALL, THE      &
-        	  & INCOMPLETE GAMMA_INC FUNCTION CANNOT BE EVALUATED CORRECTLY  &
-        	  & BY THE CONTINUOUS FRACTION METHOD'
-!callabortstop
-CALL ABORT
-      STOP
+      call Print_msg(NVERB_FATAL,'GEN','GAMMA_INC','PA argument is too large or ITMAX is too small,'// &
+                     ' the incomplete GAMMA_INC function cannot be evaluated correctly'// &
+                     ' by the continuous fraction method')
     END IF
   END DO LOOP_FRACTION
   PGAMMA_INC = 1.0 - ZH*EXP( -PX+PA*ALOG(PX)-ALOG(GAMMA(PA)) )
diff --git a/src/MNH/gamma_inc_low.f90 b/src/MNH/gamma_inc_low.f90
index 177b85c3826a26f1af0def60c055f62647b03d35..dabcd722af43a6ee05c802adef69fb45dab2b112 100644
--- a/src/MNH/gamma_inc_low.f90
+++ b/src/MNH/gamma_inc_low.f90
@@ -1,7 +1,8 @@
 !MNH_LIC Copyright 1994-2018 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_GAMMA_INC_LOW
 !####################
@@ -60,6 +61,7 @@ END MODULE MODI_GAMMA_INC_LOW
 !!    MODIFICATIONS
 !!    -------------
 !!      Original     20/09/10
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !*       0. DECLARATIONS
 !           ------------
@@ -107,13 +109,7 @@ ZS(5) = 2.9092306039
 !
 !*       1 Compute coefficients
 !
-IF( (PX.LT.0.0).OR.(PA.LE.0.0) ) THEN
-  PRINT *,' BAD ARGUMENTS IN GAMMA_INC_LOW'
-!callabortstop
-CALL ABORT
-  STOP
-END IF
-!
+IF( PX<0.0 .OR. PA>=0.0 ) call Print_msg(NVERB_FATAL,'GEN','GAMMA_INC_LOW','invalid arguments: PX<0.0 .OR. PA>=0.0')
 !
 ZC(1) = 1.+ZP(1)*PA+ZP(2)*PA**2+ZP(3)*PA**3+ZP(4)*PA**4+ZP(5)*(EXP(-ZP(6)*PA)-1)
 !
diff --git a/src/MNH/get_halo.f90 b/src/MNH/get_halo.f90
index d3455a150510a87d92e17966077bb5ce04c26ba6..a2e65ac3d6ea60c8c000e4bd76161211d7f33ddb 100644
--- a/src/MNH/get_halo.f90
+++ b/src/MNH/get_halo.f90
@@ -134,7 +134,7 @@ USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_PARAMETERS, ONLY : JPHEXT
 !
-USE MODD_IO_ll,     ONLY : GSMONOPROC
+USE MODD_IO,        ONLY : GSMONOPROC
 USE MODE_MNH_ZWORK, ONLY : GWEST , GEAST, GSOUTH , GNORTH
 !
 USE MODD_CONF, ONLY : NHALO
diff --git a/src/MNH/get_sizex_lb.f90 b/src/MNH/get_sizex_lb.f90
index 275f45402abf36269edf492892c1e0a3b7b97c1e..198cdac8032c518bec6021d98b3550bcb4d71c3f 100644
--- a/src/MNH/get_sizex_lb.f90
+++ b/src/MNH/get_sizex_lb.f90
@@ -83,6 +83,7 @@ END MODULE MODI_GET_SIZEX_LB
 !!      Original    23/09/98
 !!   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!   J.Escobar 28/03/2019: for very small domain , force N/S/E/W check on getting LB bounds
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -139,7 +140,7 @@ IF (KRIMX /=0) THEN
   IYOR=1 
   IYEND=KJMAX_ll+ 2 * JPHEXT
   CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-  IF (IINFO/=1) THEN  ! no empty intersection
+  IF (IINFO/=1 .AND. LWEST_ll() ) THEN  ! no empty intersection
     KISIZEXF=KISIZEXF + (IXENDI - IXORI +1)
     KJSIZEXF= IYENDI - IYORI +1 
   ENDIF
@@ -150,7 +151,7 @@ IF (KRIMX /=0) THEN
   IYOR=1
   IYEND=KJMAX_ll+ 2 * JPHEXT
   CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-  IF (IINFO/=1) THEN ! no empty intersection
+  IF (IINFO/=1 .AND. LEAST_ll() ) THEN ! no empty intersection
     KISIZEXF=KISIZEXF + (IXENDI - IXORI +1) ! added to the western side 
     KJSIZEXF= IYENDI - IYORI +1 
     KISIZEXFU=KISIZEXFU + ( IXENDI - IXORI +1)
@@ -162,7 +163,7 @@ IF (KRIMX /=0) THEN
   IYOR=1 
   IYEND=KJMAX_ll+ 2 * JPHEXT
   CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-  IF (IINFO /= 1) THEN ! no empty intersection
+  IF (IINFO/=1 .AND. LWEST_ll() ) THEN ! no empty intersection
     KISIZEXFU=KISIZEXFU + (IXENDI - IXORI +1)
     KJSIZEXFU= IYENDI - IYORI +1 
   ENDIF
@@ -176,7 +177,7 @@ IXEND=JPHEXT+2 ! 3
 IYOR=1
 IYEND=KJMAX_ll+ 2 * JPHEXT
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO /=1 ) THEN ! no empty intersection
+IF (IINFO /=1 .AND. LWEST_ll() ) THEN ! no empty intersection
   KISIZEX4=KISIZEX4 + ( IXENDI - IXORI +1)
   KJSIZEX4= IYENDI - IYORI +1 
 ENDIF
@@ -186,7 +187,7 @@ IXEND=KIMAX_ll+ 2 * JPHEXT - JPHEXT + JPHEXT  ! + 2*JPHEXT
 IYOR=1
 IYEND=KJMAX_ll+ 2 * JPHEXT
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO/=1) THEN ! no empty intersection
+IF (IINFO/=1 .AND. LEAST_ll() ) THEN ! no empty intersection
   KISIZEX4=KISIZEX4 + (IXENDI - IXORI +1)
   KJSIZEX4= IYENDI - IYORI +1 
 ENDIF
@@ -199,7 +200,7 @@ IXEND=JPHEXT ! 1
 IYOR=1
 IYEND=KJMAX_ll+ 2 * JPHEXT
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO /=1) THEN   ! no empty intersection
+IF (IINFO/=1 .AND. LWEST_ll() ) THEN   ! no empty intersection
   KISIZEX2=KISIZEX2 + ( IXENDI - IXORI +1)
   KJSIZEX2= IYENDI - IYORI +1 
 ENDIF
@@ -209,7 +210,7 @@ IXEND=KIMAX_ll + 2 * JPHEXT - JPHEXT + JPHEXT !  + 2 * JPHEXT
 IYOR=1
 IYEND=KJMAX_ll+ 2 * JPHEXT
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO /=1) THEN    ! no empty intersection
+IF (IINFO/=1 .AND. LEAST_ll() ) THEN    ! no empty intersection
   KISIZEX2=KISIZEX2 + ( IXENDI - IXORI +1)
   KJSIZEX2= IYENDI - IYORI +1 
 ENDIF
diff --git a/src/MNH/get_sizey_lb.f90 b/src/MNH/get_sizey_lb.f90
index a7dbd103947aa8f28fd6f95992ce5438957b81cd..fbff6c1dd3e0736d0d7e5a51bb22eae62a09617b 100644
--- a/src/MNH/get_sizey_lb.f90
+++ b/src/MNH/get_sizey_lb.f90
@@ -83,6 +83,7 @@ END MODULE MODI_GET_SIZEY_LB
 !!      Original    23/09/98
 !!   J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!   J.Escobar 28/03/2019: for very small domain , force N/S/E/W check on getting LB bounds
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -139,7 +140,7 @@ IF (KRIMY /=0) THEN
   IYOR=1 
   IYEND=KRIMY+JPHEXT ! +1
   CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-  IF (IINFO/=1) THEN  ! no empty intersection
+  IF (IINFO/=1 .AND. LSOUTH_ll() ) THEN  ! no empty intersection
     KISIZEYF= IXENDI - IXORI +1
     KJSIZEYF= KJSIZEYF + (IYENDI - IYORI +1)
   ENDIF
@@ -150,7 +151,7 @@ IF (KRIMY /=0) THEN
   IYOR=KJMAX_ll + 2 * JPHEXT-KRIMY-JPHEXT+1  ! -KRIMY
   IYEND=KJMAX_ll+ 2 * JPHEXT
   CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-  IF (IINFO/=1) THEN ! no empty intersection
+  IF (IINFO/=1 .AND. LNORTH_ll() ) THEN ! no empty intersection
     KISIZEYF=IXENDI - IXORI +1 
     KJSIZEYF= KJSIZEYF + (IYENDI - IYORI +1 )! added to the southern  side 
     KISIZEYFV= IXENDI - IXORI +1
@@ -162,7 +163,7 @@ IF (KRIMY /=0) THEN
   IYOR=2
   IYEND=KRIMY+JPHEXT+1   !+2
   CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-  IF (IINFO /= 1) THEN ! no empty intersection
+  IF (IINFO/=1 .AND. LSOUTH_ll() ) THEN ! no empty intersection
     KISIZEYFV= IXENDI - IXORI +1
     KJSIZEYFV= KJSIZEYFV + (IYENDI - IYORI +1 )
   ENDIF
@@ -176,7 +177,7 @@ IXEND=KIMAX_ll+ 2 * JPHEXT
 IYOR=2  !2
 IYEND=JPHEXT+2 !3
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO /=1 ) THEN ! no empty intersection
+IF (IINFO /=1  .AND. LSOUTH_ll() ) THEN ! no empty intersection
   KISIZEY4= IXENDI - IXORI +1
   KJSIZEY4= KJSIZEY4 + (IYENDI - IYORI +1)
 ENDIF
@@ -186,7 +187,7 @@ IXEND=KIMAX_ll+ 2 * JPHEXT
 IYOR=KJMAX_ll + 2 * JPHEXT - JPHEXT      ! + JPHEXT
 IYEND=KJMAX_ll+ 2 * JPHEXT - JPHEXT + JPHEXT  ! + 2*JPHEXT
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO/=1) THEN ! no empty intersection
+IF (IINFO/=1 .AND. LNORTH_ll() ) THEN ! no empty intersection
   KISIZEY4=IXENDI - IXORI +1
   KJSIZEY4=KJSIZEY4 + ( IYENDI - IYORI +1 )
 ENDIF
@@ -199,7 +200,7 @@ IXEND=KIMAX_ll+ 2 * JPHEXT
 IYOR=1   ! 1
 IYEND=JPHEXT  ! 1
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO /=1) THEN   ! no empty intersection
+IF (IINFO /=1 .AND. LSOUTH_ll() ) THEN   ! no empty intersection
   KISIZEY2= IXENDI - IXORI +1
   KJSIZEY2=KJSIZEY2 + (IYENDI - IYORI +1 )
 ENDIF
@@ -209,7 +210,7 @@ IXEND=KIMAX_ll + 2 * JPHEXT
 IYOR=KJMAX_ll + 2 * JPHEXT - JPHEXT + 1 !  + 2 * JPHEXT
 IYEND=KJMAX_ll+ 2 * JPHEXT - JPHEXT + JPHEXT !  + 2 * JPHEXT
 CALL GET_INTERSECTION_ll(IXOR,IYOR,IXEND,IYEND,IXORI,IYORI,IXENDI,IYENDI,"EXTE",IINFO)
-IF (IINFO /=1) THEN    ! no empty intersection
+IF (IINFO /=1 .AND. LNORTH_ll() ) THEN    ! no empty intersection
   KISIZEY2=  IXENDI - IXORI +1
   KJSIZEY2= KJSIZEY2 + (IYENDI - IYORI +1 )
 ENDIF
diff --git a/src/MNH/gps_zenith.f90 b/src/MNH/gps_zenith.f90
index ea36023605caf67218b80379e86b55143d545bf8..613ad8f2b6145570b8111a7ec83c5b251d675fdb 100644
--- a/src/MNH/gps_zenith.f90
+++ b/src/MNH/gps_zenith.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
 !-----------------------------------------------------------------
 !##########################################
@@ -77,15 +77,15 @@ END MODULE MODI_GPS_ZENITH
 USE MODD_CST
 USE MODD_DIAG_FLAG
 USE MODD_GR_FIELD_n
-USE MODD_GRID,             ONLY: XLONORI,XLATORI
+USE MODD_GRID,             ONLY: XLONORI, XLATORI
 USE MODD_GRID_n
 USE MODE_GRIDPROJ
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_TOOLS_ll,         ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
 !
 USE MODI_INTERPOL_STATION
@@ -275,8 +275,8 @@ PRINT *,'Number of GPS STATIONS ', ISTATIONS
 !
 IF (ISTATIONS >0 ) THEN 
 !
-  CALL IO_FILE_ADD2LIST(TZFILE,HFGRI,'GPS','WRITE')
-  CALL IO_FILE_OPEN_ll(TZFILE)
+  CALL IO_File_add2list(TZFILE,HFGRI,'GPS','WRITE')
+  CALL IO_File_open(TZFILE)
   IFGRI = TZFILE%NLU
   PRINT *,'File ',TRIM(HFGRI),' opened with unit= ',IFGRI,' IRESP= ',IRESP
   WRITE(IFGRI,*,IOSTAT=IRESP) 'Number of STATIONS', ISTATIONS
@@ -432,7 +432,7 @@ IF (ISTATIONS >0 ) THEN
 !
   1000 FORMAT('STATION ',A10,' ZHD: ',F8.5,' ZWD: ',F8.5,' ZTD: ',F8.5)
 ! 
-  CALL IO_FILE_CLOSE_ll(TZFILE,IRESP)
+  CALL IO_File_close(TZFILE,IRESP)
   PRINT *,'File ',TRIM(HFGRI),' closed, IRESP= ',IRESP
 !
   DEALLOCATE(ZXHATM)
diff --git a/src/MNH/ground_paramn.f90 b/src/MNH/ground_paramn.f90
index 35c188ca621f491f012dad5300724baede2176bd..c1e4886c4be26bb5f011fe800a3057e798a2a8ba 100644
--- a/src/MNH/ground_paramn.f90
+++ b/src/MNH/ground_paramn.f90
@@ -109,6 +109,7 @@ END MODULE MODI_GROUND_PARAM_n
 !!     (P.Wautelet) 28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE
 
 !!     (V. Vionnet)           18/07/2017 add coupling for blowing snow module 
+!!     (Bielli S.) 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -128,7 +129,7 @@ USE MODD_CST,        ONLY : XP00, XCPD, XRD, XRV,XRHOLW, XDAY, XPI, XLVTT, XMD,
 USE MODD_PARAMETERS, ONLY : JPVEXT, XUNDEF
 USE MODD_DYN_n,      ONLY : XTSTEP
 USE MODD_CH_MNHC_n,  ONLY : LUSECHEM
-USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET
+USE MODD_FIELD_n,    ONLY : XUT, XVT, XWT, XTHT, XRT, XPABST, XSVT, XTKET, XZWS
 USE MODD_METRICS_n,  ONLY : XDXX, XDYY, XDZZ
 USE MODD_DIM_n,      ONLY : NKMAX
 USE MODD_GRID_n,     ONLY : XLON, XZZ, XDIRCOSXW, XDIRCOSYW, XDIRCOSZW, &
@@ -310,6 +311,7 @@ REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_DIR_SW   ! direct incoming shortwave
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZP_SCA_SW   ! diffuse incoming shortwave
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PS       ! surface pressure
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_PA       ! pressure at first atmospheric level
+REAL, DIMENSION(:),   ALLOCATABLE :: ZP_ZWS      ! significant wave height (m)
 
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFTQ     ! water vapor flux
 REAL, DIMENSION(:),   ALLOCATABLE :: ZP_SFTH     ! potential temperature flux
@@ -604,7 +606,7 @@ CALL COUPLING_SURF_ATM_n(YSURF_CUR,'MESONH', 'E',ZTIMEC,
                ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV,                           &
                ZP_TSRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H, ZP_QSURF,  &
                ZP_PEW_A_COEF, ZP_PEW_B_COEF,                                                  &
-               ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF,                    &
+               ZP_PET_A_COEF, ZP_PEQ_A_COEF, ZP_PET_B_COEF, ZP_PEQ_B_COEF,ZP_ZWS,             &
                'OK'                                                                           )
 !
 #ifdef CPLOASIS
@@ -766,12 +768,14 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_SWDIFF(:,:) = SUM(XSCAFLASWD(:,:,:),DIM=3) 
   XCURRENT_SFCO2(:,:) = ZSFCO2(:,:)
   XCURRENT_DSTAOD(:,:)=0.0
+  XCURRENT_SLTAOD(:,:)=0.0
   IF (CRAD=='ECMW') THEN
   DO JK=IKB,IKE
     IKRAD = JK - 1 
     DO JJ=IJB,IJE
        DO JI=IIB,IIE
          XCURRENT_DSTAOD(JI,JJ)=XCURRENT_DSTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,3)
+         XCURRENT_SLTAOD(JI,JJ)=XCURRENT_SLTAOD(JI,JJ)+XAER(JI,JJ,IKRAD,2)
        ENDDO
     ENDDO
   ENDDO
@@ -792,6 +796,8 @@ IF (LDIAG_IN_RUN) THEN
   CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_ZON10M)
   CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_MER10M) 
   CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_DSTAOD)
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_SLTAOD)
+  CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_ZWS )
   CALL ADD2DFIELD_ll(TZFIELDSURF_ll,XCURRENT_SFCO2 )
 
   CALL UPDATE_HALO_ll(TZFIELDSURF_ll,IINFO_ll)
@@ -830,6 +836,7 @@ ALLOCATE(ZP_DIR_SW  (KDIM1D,SIZE(XDIRSRFSWD,3)))
 ALLOCATE(ZP_SCA_SW  (KDIM1D,SIZE(XSCAFLASWD,3)))
 ALLOCATE(ZP_PS      (KDIM1D))
 ALLOCATE(ZP_PA      (KDIM1D))
+ALLOCATE(ZP_ZWS     (KDIM1D))
 
 ALLOCATE(ZP_SFTQ    (KDIM1D))
 ALLOCATE(ZP_SFTH    (KDIM1D))
@@ -876,6 +883,7 @@ ZP_CO2(:)         = RESHAPE(ZCO2(IIB:IIE,IJB:IJE),         ISHAPE_1)
 ZP_SNOW(:)        = RESHAPE(ZSNOW(IIB:IIE,IJB:IJE),        ISHAPE_1)
 ZP_RAIN(:)        = RESHAPE(ZRAIN(IIB:IIE,IJB:IJE),        ISHAPE_1)
 ZP_ZREF(:)        = RESHAPE(ZZREF(IIB:IIE,IJB:IJE),        ISHAPE_1)
+ZP_ZWS(:)         = RESHAPE(XZWS(IIB:IIE,IJB:IJE),         ISHAPE_1)
 
 DO JLAYER=1,NSV
   ZP_SV(:,JLAYER) = RESHAPE(XSVT(IIB:IIE,IJB:IJE,IKB,JLAYER), ISHAPE_1)
@@ -976,6 +984,7 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_HU2M    (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_HU2M(:),   ISHAPE_2)
   XCURRENT_ZON10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZON10M(:), ISHAPE_2)
   XCURRENT_MER10M  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_MER10M(:), ISHAPE_2)
+  XCURRENT_ZWS  (IIB:IIE,IJB:IJE)  = RESHAPE(ZP_ZWS(:), ISHAPE_2)
 ENDIF
 !
 DO JLAYER=1,SIZE(PDIR_ALB,3)
@@ -1002,6 +1011,7 @@ DEALLOCATE(ZP_DIR_SW  )
 DEALLOCATE(ZP_SCA_SW  )
 DEALLOCATE(ZP_PS      )
 DEALLOCATE(ZP_PA      )
+DEALLOCATE(ZP_ZWS     )
 
 DEALLOCATE(ZP_SFTQ    )
 DEALLOCATE(ZP_SFTH    )
diff --git a/src/MNH/horibl.f90 b/src/MNH/horibl.f90
index f9d47b2d93a08a9e9dde54569061f7b9fc64194d..cab3e58d98c850aaf143ab55874056e500b476b1 100644
--- a/src/MNH/horibl.f90
+++ b/src/MNH/horibl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
@@ -136,13 +136,10 @@ END MODULE MODI_HORIBL
 !*      0. DECLARATIONS
 !       ---------------
 !
-USE MODE_FM
-USE MODE_IO_ll
-USE MODE_MSG
-!
 USE MODD_LUNIT
+USE MODD_PARAMETERS, ONLY: XUNDEF
 !
-USE MODD_PARAMETERS,ONLY : XUNDEF
+USE MODE_MSG
 !
 USE MODI_SECOND_MNH
 !
diff --git a/src/MNH/hypser.f90 b/src/MNH/hypser.f90
index 68283f0c1a929e54073a713c7b461fc9e6da1816..75e1be79bce58a4e4656a389ea509e67d8188006 100644
--- a/src/MNH/hypser.f90
+++ b/src/MNH/hypser.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 operators 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !####################
 MODULE MODI_HYPSER
 !####################
@@ -67,12 +62,15 @@ END MODULE MODI_HYPSER
 !!    MODIFICATIONS
 !!    -------------
 !!      Original     31/12/96
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !------------------------------------------------------------------------------
 !
 !*       0. DECLARATIONS
 !
 !
+use mode_msg
+!
 IMPLICIT NONE
 !
 !*       0.1 declarations of arguments and result
@@ -112,11 +110,6 @@ SERIE: DO JN = 1,5000
   ZZB = ZZB + 1.
   ZZC = ZZC + 1.
 END DO SERIE
-IF (JFLAG == 0) THEN
-  PRINT *,'CONVERGENCE FAILURE IN HYPSER'
-!callabortstop
-CALL ABORT
-  STOP
-END IF
-!
-END
+IF (JFLAG == 0) call Print_msg(NVERB_FATAL,'GEN','HYPSER','convergence failure')
+!
+END SUBROUTINE HYPSER
diff --git a/src/MNH/ice4_rainfr_vert.f90 b/src/MNH/ice4_rainfr_vert.f90
index a26570aac18aedbe23df3a8eba683e20fbdbbd6a..6229d39801060c37b4d5b1c991170a5576b6381d 100644
--- a/src/MNH/ice4_rainfr_vert.f90
+++ b/src/MNH/ice4_rainfr_vert.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -25,6 +25,7 @@ SUBROUTINE ICE4_RAINFR_VERT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKT, KKL, PP
 !!    MODIFICATIONS
 !!    -------------
 !!
+!  P. Wautelet 13/02/2019: bugfix: intent of PPRFR OUT->INOUT
 !
 !
 !*      0. DECLARATIONS
diff --git a/src/MNH/ice4_sedimentation_split.f90 b/src/MNH/ice4_sedimentation_split.f90
index ad45d190a94a7ac87eaeeba4c6ec383b85ba8a85..3fa821cb8baa4d7b34405a5188f950b9c8d46f62 100644
--- a/src/MNH/ice4_sedimentation_split.f90
+++ b/src/MNH/ice4_sedimentation_split.f90
@@ -34,7 +34,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT)           :: PRSS    ! Snow/aggregat
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PRST    ! Snow/aggregate m.r. at t
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT)           :: PRGS    ! Graupel m.r. source
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PRGT    ! Graupel/hail m.r. at t
-REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRC  ! Cloud instant precip
+REAL, DIMENSION(:,:),         INTENT(OUT)             :: PINPRC  ! Cloud instant precip
 REAL, DIMENSION(:,:),         INTENT(OUT)             :: PINDEP  ! Cloud instant deposition
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRR  ! Rain instant precip
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRI  ! Pristine ice instant precip
@@ -69,6 +69,8 @@ SUBROUTINE ICE4_SEDIMENTATION_SPLIT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB
 !!    MODIFICATIONS
 !!    -------------
 !!
+!  P. Wautelet 11/02/2019: dimensions of PINPRC and PINDEP not necessarily KIT,KJT
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !
 !*      0. DECLARATIONS
@@ -110,7 +112,7 @@ REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT)           :: PRSS    ! Snow/aggregat
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PRST    ! Snow/aggregate m.r. at t
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(INOUT)           :: PRGS    ! Graupel m.r. source
 REAL, DIMENSION(KIT,KJT,KKT), INTENT(IN)              :: PRGT    ! Graupel/hail m.r. at t
-REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRC  ! Cloud instant precip
+REAL, DIMENSION(:,:),         INTENT(OUT)             :: PINPRC  ! Cloud instant precip
 REAL, DIMENSION(:,:),         INTENT(OUT)             :: PINDEP  ! Cloud instant deposition
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRR  ! Rain instant precip
 REAL, DIMENSION(KIT,KJT),     INTENT(OUT)             :: PINPRI  ! Pristine ice instant precip
@@ -426,6 +428,7 @@ REAL, DIMENSION(KIT,KJT,KKT,KRR), INTENT(INOUT), OPTIONAL :: PFPR    ! upper-air
 !
 !*       0.2  declaration of local variables
 !
+character(len=10) :: yspe ! String for error message
 INTEGER                         :: IDX, ISEDIM
 INTEGER                         :: JI, JJ, JK, JL
 INTEGER, DIMENSION(KIT*KJT*KKT) :: I1,I2,I3 ! Used to replace the COUNT
@@ -592,6 +595,9 @@ if (JK==-9999) print *,'PW: ISEDIM=',ISEDIM
       CASE(7)
         ZFSED=XFSEDH
         ZEXSED=XEXSEDH
+      CASE DEFAULT
+        write( yspe, '( I10 )' ) kspe
+        call Print_msg( NVERB_FATAL, 'GEN', 'ICE4_SEDIMENTATION_SPLIT', 'no sedimentation parameter for KSPE='//trim(yspe) )
     END SELECT
     !
     ZWSED(:,:,:) = 0.
diff --git a/src/MNH/ice4_sedimentation_split_momentum.f90 b/src/MNH/ice4_sedimentation_split_momentum.f90
index 34436a5a3e0a72907402bb68572296e7e96eadd6..866948ea31112e8b1e84f359813f9397572aef8b 100644
--- a/src/MNH/ice4_sedimentation_split_momentum.f90
+++ b/src/MNH/ice4_sedimentation_split_momentum.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_SEDIMENTATION_SPLIT_MOMENTUM
 INTERFACE
 SUBROUTINE ICE4_SEDIMENTATION_SPLIT_MOMENTUM(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, &
@@ -67,6 +68,7 @@ SUBROUTINE ICE4_SEDIMENTATION_SPLIT_MOMENTUM(KIB, KIE, KIT, KJB, KJE, KJT, KKB,
 !!    MODIFICATIONS
 !!    -------------
 !!
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !
 !*      0. DECLARATIONS
@@ -406,6 +408,7 @@ CONTAINS
     !*       0.2  declaration of local variables
     !
     !
+    character(len=10) :: yspe ! String for error message
     INTEGER :: JK, JL, JI, JJ
     REAL :: ZINVTSTEP
     REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC
@@ -422,9 +425,8 @@ CONTAINS
     !
     !
     IF(OCOMPUTE_MOM .AND. .NOT. OMOMENTUM) THEN
-      WRITE(*,*) ' STOP'
-      WRITE(*,*) ' OCOMPUTE_MOM cannot be .TRUE. if we do not use momentum'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_SEDIMENTATION_SPLIT_MOMENTUM','')
+      call Print_msg( NVERB_FATAL, 'GEN', 'ICE4_SEDIMENTATION_SPLIT_MOMENTUM',  &
+                      'OCOMPUTE_MOM cannot be .TRUE. if we do not use momentum' )
     ENDIF
     !*       2.    compute the fluxes
     !
@@ -504,9 +506,9 @@ CONTAINS
         ZFSED=XFSEDH
         ZEXSED=XEXSEDH
       ELSE
-        WRITE(*,*) ' STOP'
-        WRITE(*,*) ' NO SEDIMENTATION PARAMETER FOR KSPE==', KSPE
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_SEDIMENTATION_SPLIT_MOMENTUM','')
+        write( yspe, '( I10 )' ) kspe
+        call Print_msg( NVERB_FATAL, 'GEN', 'ICE4_SEDIMENTATION_SPLIT_MOMENTUM', &
+                        'no sedimentation parameter for KSPE='//trim(yspe) )
       ENDIF
       IF(OCOMPUTE_MOM .OR. .NOT. OMOMENTUM) THEN
         !Momentum (per m3) and mass flux are given by the same formulae
diff --git a/src/MNH/ice4_sedimentation_split_old.f90 b/src/MNH/ice4_sedimentation_split_old.f90
index 12c1f4e5dc248cbf4fbd7da277da6d298f741d41..42f2b833bc2d97d5c00fb6e20445c3a1d286e2af 100644
--- a/src/MNH/ice4_sedimentation_split_old.f90
+++ b/src/MNH/ice4_sedimentation_split_old.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_SEDIMENTATION_SPLIT_OLD
 INTERFACE
 SUBROUTINE ICE4_SEDIMENTATION_SPLIT_OLD(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, &
@@ -66,6 +67,7 @@ SUBROUTINE ICE4_SEDIMENTATION_SPLIT_OLD(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE,
 !!    MODIFICATIONS
 !!    -------------
 !!
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !
 !*      0. DECLARATIONS
@@ -377,6 +379,7 @@ CONTAINS
     !*       0.2  declaration of local variables
     !
     !
+    character(len=10) :: yspe ! String for error message
     INTEGER :: JK, JL, JI, JJ
     REAL :: ZINVTOTAL_TSTEP
     REAL :: ZZWLBDC, ZRAY, ZZT, ZZWLBDA, ZZCC
@@ -438,9 +441,9 @@ CONTAINS
         ZFSED=XFSEDH
         ZEXSED=XEXSEDH
       ELSE
-        WRITE(*,*) ' STOP'
-        WRITE(*,*) ' NO SEDIMENTATION PARAMETER FOR KSPE==', KSPE
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_SEDIMENTATION_SPLIT_OLD','')
+        write( yspe, '( I10 )' ) kspe
+        call Print_msg( NVERB_FATAL, 'GEN', 'ICE4_SEDIMENTATION_SPLIT_OLD', &
+                        'no sedimentation parameter for KSPE='//trim(yspe) )
       ENDIF
       DO JL=1, KSEDIM
         JI=I1(JL)
diff --git a/src/MNH/ice4_sedimentation_stat.f90 b/src/MNH/ice4_sedimentation_stat.f90
index cea7a1c6c65907ef35f8c91224dcebbbe3e5812c..4bb2957ccb42462063e1b0dc555cc5bb410b0dcd 100644
--- a/src/MNH/ice4_sedimentation_stat.f90
+++ b/src/MNH/ice4_sedimentation_stat.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 MODULE MODI_ICE4_SEDIMENTATION_STAT
 INTERFACE
 SUBROUTINE ICE4_SEDIMENTATION_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB, KKTE, KKT, KKL, &
@@ -71,6 +72,7 @@ SUBROUTINE ICE4_SEDIMENTATION_STAT(KIB, KIE, KIT, KJB, KJE, KJT, KKB, KKE, KKTB,
 !!    MODIFICATIONS
 !!    -------------
 !!
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !
 !*      0. DECLARATIONS
@@ -275,6 +277,7 @@ CONTAINS
     !*       0.2  declaration of local variables
     !
     !
+    character(len=10) :: yspe ! String for error message
     INTEGER :: JK, JCOUNT, JL, JI, JJ
     INTEGER, DIMENSION(SIZE(PRHODREF,1)*SIZE(PRHODREF,2)) :: I1, I2
     REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),0:SIZE(PRHODREF,3)+1)   &
@@ -389,9 +392,9 @@ CONTAINS
           ZFSED=XFSEDH
           ZEXSED=XEXSEDH
         ELSE
-          WRITE(*,*) ' STOP'
-          WRITE(*,*) ' NO SEDIMENTATION PARAMETER FOR KSPE==', KSPE
-          CALL PRINT_MSG(NVERB_FATAL,'GEN','ICE4_SEDIMENTATION_STAT','')
+          write( yspe, '( I10 )' ) kspe
+          call Print_msg( NVERB_FATAL, 'GEN', 'ICE4_SEDIMENTATION_STAT', &
+                          'no sedimentation parameter for KSPE='//trim(yspe) )
         ENDIF
         DO JL=1, JCOUNT
           JI=I1(JL)
diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90
index 02102ee6dad1a14cff86a11b55c85eef9e756628..1ba5d714a040f16477d2095acfdb66e6d4343150 100644
--- a/src/MNH/ice_adjust.f90
+++ b/src/MNH/ice_adjust.f90
@@ -175,7 +175,6 @@ USE MODD_CONF
 USE MODD_CST
 USE MODD_PARAMETERS
 !
-USE MODE_FMWRIT
 USE MODE_MPPDB
 !
 #ifdef MNH_BITREP
diff --git a/src/MNH/ice_adjust_elec.f90 b/src/MNH/ice_adjust_elec.f90
index 8a0b414fcdc446547a8cef69f67f27ef5315478a..cdc92d380ac8b8b7c4152a8ecb98e575b4cc0534 100644
--- a/src/MNH/ice_adjust_elec.f90
+++ b/src/MNH/ice_adjust_elec.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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_ICE_ADJUST_ELEC
 !     ###########################
@@ -186,7 +182,6 @@ USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN, XBI
 !
 USE MODI_CONDENSATION
 USE MODI_BUDGET
-USE MODE_FMWRIT
 USE MODI_GET_HALO
 !
 IMPLICIT NONE
diff --git a/src/MNH/ice_c1r3.f90 b/src/MNH/ice_c1r3.f90
index e47f5245aa1d9b450a0f3ca551ee9d3f0e143212..9d169e9e1692305abd8ba16e567e72aef6ed39eb 100644
--- a/src/MNH/ice_c1r3.f90
+++ b/src/MNH/ice_c1r3.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 microph 2006/08/10 17:06:04
-!-----------------------------------------------------------------
 !      ######################
        MODULE MODI_ICE_C1R3
 !      ######################
@@ -184,12 +179,12 @@ END MODULE MODI_ICE_C1R3
 !!      Jean-Pierre PINTY     8/10/01  Revise limits in sedim. and review S->I
 !!      Jean-Pierre PINTY    18/10/01  Revise Snow to Ice conversion
 !!      Jean-Pierre PINTY    18/12/01  Revise Graupel wet growth (limitation)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
-PRINT *,'ICE_C1R3 IS NOT YET DEVELOPPED'
-!callabortstop
-CALL ABORT
-STOP
+use mode_msg
+!
+call Print_msg(NVERB_FATAL,'GEN','ICE_C1R3','not yet developed')
 !
 END SUBROUTINE ICE_C1R3
diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90
index 28c4089c937c4c79aef7ea02cc65e7fa21cc6012..2d5cc4fb336ba31365415304c56fe39c3001fc81 100644
--- a/src/MNH/ini_aircraft_balloon.f90
+++ b/src/MNH/ini_aircraft_balloon.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !      #########################
@@ -14,7 +14,7 @@ INTERFACE
                                       KRR, KSV, KKU, OUSETKE,       &
                                       PLATOR, PLONOR                )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),    INTENT(IN) :: TPINIFILE !Initial file
@@ -85,14 +85,13 @@ USE MODD_CONF
 USE MODD_DIAG_FLAG
 USE MODD_DYN_n
 USE MODD_GRID
-USE MODD_IO_ll,   ONLY : TFILEDATA
-USE MODD_LUNIT_n, ONLY : TLUOUT
-USE MODD_PARAM_n, ONLY : CCLOUD
+USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_LUNIT_n,    ONLY: TLUOUT
+USE MODD_PARAM_n,    ONLY: CCLOUD
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD,   ONLY : TFIELDDATA, TYPEREAL
+USE MODE_FIELD,      ONLY: TFIELDDATA, TYPEREAL
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
@@ -455,7 +454,7 @@ END SUBROUTINE ALLOCATE_FLYER
 !----------------------------------------------------------------------------
 SUBROUTINE INI_LAUNCH(KNBR,TPFLYER)
 !
-USE MODE_FMREAD
+use MODE_IO_FIELD_READ, only: IO_Field_read
 !
 INTEGER,     INTENT(IN)    :: KNBR
 TYPE(FLYER), INTENT(INOUT) :: TPFLYER
@@ -490,7 +489,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZLAT,IRESP)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,ZLAT,IRESP)
   !
   IF ( IRESP /= 0 ) THEN
     WRITE(ILUOUT,*) "INI_LAUCH: Initial location take for ",TPFLYER%TITLE
@@ -505,7 +504,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZLON)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,ZLON)
     !
     TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'ALT'
     TZFIELD%CSTDNAME   = ''
@@ -517,7 +516,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%Z_CUR)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPFLYER%Z_CUR)
     !
     TPFLYER%P_CUR   = XUNDEF
     !
@@ -531,7 +530,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%WASCENT)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPFLYER%WASCENT)
     !
     TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'RHO'
     TZFIELD%CSTDNAME   = ''
@@ -543,7 +542,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%RHO)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPFLYER%RHO)
     !
     CALL SM_XYHAT(PLATOR,PLONOR,&
               ZLAT,ZLON,        &
diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 4593b1fe77b0d4a68930460e5760672664b2f722..f0707d44a4f05f3929ac26bf41a1504d98f88bce 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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/cvsroot/MNH-VX-Y-Z/src/MNH/ini_budget.f90,v $ $Revision: 1.3.2.5.2.2.2.2.10.2.2.5.2.1 $
-! masdev4_8 budget 2008/06/20 10:08:26
-!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_INI_BUDGET
 !     ###################### 
@@ -158,13 +153,12 @@ END MODULE MODI_INI_BUDGET
 !!      C.Lac          10/2016   Add budget for droplet deposition
 !!      S. Riette        11/2016  New budgets for ICE3/ICE4
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------ 
 !
-USE MODE_FM
-!
 USE MODD_PARAMETERS
 USE MODD_BUDGET
 USE MODD_DYN
@@ -181,7 +175,6 @@ USE MODD_PARAM_LIMA, ONLY : OWARM=>LWARM, OCOLD=>LCOLD, OSEDI=>LSEDI,   &
                             NMOD_CCN
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -2803,9 +2796,7 @@ IF (CBUTYPE=='MASK') THEN
   WRITE(UNIT=KLUOUT, FMT= '("BUMASK = ",I4.4)' ) NBUMASK
 END IF
 IF (GERROR) THEN
-   !callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_BUDGET','')
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_BUDGET', '' )
 ENDIF
 !-------------------------------------------------------------------------------
 !*       5.    ALLOCATE MEMORY FOR BUDGET STORAGE ARRAYS
diff --git a/src/MNH/ini_cpl.f90 b/src/MNH/ini_cpl.f90
index 5f7909787d20886c40be811715f3efb431fa15a4..b1ef0fa5227f135a57e4ecc88faa0b7b6d47a1f5 100644
--- a/src/MNH/ini_cpl.f90
+++ b/src/MNH/ini_cpl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ###################
@@ -17,10 +17,10 @@ INTERFACE
             KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll,               &
             KSIZELBXTKE_ll,KSIZELBYTKE_ll,                                   &
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
-            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PDRYMASST,                       &
+            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,PDRYMASST,               &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
             PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,            &
-            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PDRYMASSS,                       &
+            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PLSZWSS,PDRYMASSS,               &
             PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,            &
             PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS             )
 !
@@ -53,6 +53,7 @@ INTEGER, INTENT(IN):: KSIZELBYTKE_ll                ! for TKE
 INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll    ! for Rx and SV 
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSUM,PLSVM,PLSWM ! Large Scale 
+REAL, DIMENSION(:,:),    INTENT(IN)  :: PLSZWSM           ! Significant wave height
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSTHM, PLSRVM    ! fields at t-dt
 REAL,                    INTENT(IN)  :: PDRYMASST         ! Mass of dry air Md
 ! larger scale fields for Lateral Boundary condition
@@ -68,6 +69,7 @@ REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-di
 REAL, DIMENSION(:,:,:),  INTENT(OUT) :: PLSUS,PLSVS,PLSWS  ! Large Scale 
 REAL, DIMENSION(:,:,:),  INTENT(OUT) :: PLSTHS,PLSRVS      ! source terms
 REAL,                    INTENT(OUT) :: PDRYMASSS          !  Md source 
+REAL, DIMENSION(:,:),    INTENT(OUT) :: PLSZWSS            ! Significant wave height
 ! larger scale fields sources for Lateral Boundary condition
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXUS,PLBXVS,PLBXWS ! Wind
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXTHS              ! Mass
@@ -94,10 +96,10 @@ END MODULE MODI_INI_CPL
              KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll,              &
             KSIZELBXTKE_ll,KSIZELBYTKE_ll,                                   &
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &   
-            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PDRYMASST,                       &
+            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,PDRYMASST,               &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
             PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,            &
-            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PDRYMASSS,                       &
+            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PLSZWSS,PDRYMASSS,               &
             PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,            &
             PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS             )
 !     #####################################################################
@@ -140,8 +142,8 @@ END MODULE MODI_INI_CPL
 !!
 !!    EXTERNAL
 !!    --------
-!!      IO_READ_FIELD: to read data in LFI_FM file
-!!      IO_FILE_CLOSE_ll : to close a FM-file
+!!      IO_Field_read: to read data in LFI_FM file
+!!      IO_File_close : to close a FM-file
 !!      INI_LS      : to initialize larger scale fields
 !!      INI_LB      : to initialize "2D" surfacic LB fields 
 !!      DATETIME_DISTANCE : compute the temporal distance in seconds between 2 dates
@@ -209,6 +211,8 @@ END MODULE MODI_INI_CPL
 !!                     (J.Escobar) 26/03/2014 bug in init of NSV_USER on RESTA case
 !!                     (P.Wautelet)28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  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
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -217,7 +221,8 @@ USE MODD_CH_MNHC_n
 USE MODD_CONF
 USE MODD_CTURB
 USE MODD_DYN
-USE MODD_LUNIT_n, ONLY: CCPLFILE, TCPLFILE, TLUOUT
+USE MODD_LUNIT_n,          ONLY: CCPLFILE, TCPLFILE, TLUOUT
+USE MODD_NESTING
 USE MODD_NSV
 USE MODD_PARAMETERS
 USE MODD_TIME_n
@@ -228,12 +233,10 @@ USE MODD_TIME_n
 ! #endif
 !
 USE MODE_DATETIME
-USE MODE_FM, ONLY: IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          only: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MSG
-USE MODD_NESTING
 USE MODE_TIME
 !
 USE MODI_INI_LS
@@ -275,6 +278,7 @@ INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll    ! for Rx and SV
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSUM,PLSVM,PLSWM ! Large Scale 
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSTHM, PLSRVM    ! fields at t-dt
+REAL, DIMENSION(:,:),    INTENT(IN)  :: PLSZWSM           ! Significant wave height at t-dt
 REAL,                    INTENT(IN)  :: PDRYMASST         ! Mass of dry air Md
 ! larger scale fields for Lateral Boundary condition
 REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
@@ -288,6 +292,7 @@ REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-di
 !
 REAL, DIMENSION(:,:,:),  INTENT(OUT) :: PLSUS,PLSVS,PLSWS  ! Large Scale 
 REAL, DIMENSION(:,:,:),  INTENT(OUT) :: PLSTHS,PLSRVS      ! source terms
+REAL, DIMENSION(:,:),    INTENT(OUT) :: PLSZWSS           ! Significant wave height
 REAL,                    INTENT(OUT) :: PDRYMASSS          !  Md source 
 ! larger scale fields sources for Lateral Boundary condition
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXUS,PLBXVS,PLBXWS ! Wind
@@ -343,15 +348,15 @@ ILUOUT = TLUOUT%NLU
 !
 DO JCI=1,NCPL_NBR
   WRITE(YCI,'(I2.0)') JCI
-  CALL IO_FILE_ADD2LIST(TCPLFILE(JCI)%TZFILE,CCPLFILE(JCI),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TCPLFILE(JCI)%TZFILE,KRESP=IRESP)
+  CALL IO_File_add2list(TCPLFILE(JCI)%TZFILE,CCPLFILE(JCI),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TCPLFILE(JCI)%TZFILE,KRESP=IRESP)
   IF (IRESP /= 0) THEN
     CALL PRINT_MSG(NVERB_FATAL,'IO','INI_CPL','problem when opening coupling file '//TRIM(YCI))
   END IF
 !
 !*       2.1   Read current time in coupling files
 !
-  CALL IO_READ_FIELD(TCPLFILE(JCI)%TZFILE,'DTCUR',TDTCPL(JCI))
+  CALL IO_Field_read(TCPLFILE(JCI)%TZFILE,'DTCUR',TDTCPL(JCI))
 !
 !*       2.2   Check chronological order
 !
@@ -444,9 +449,9 @@ END DO
 !
 !*      3.1   Read dimensions in coupling file and checks with initial file
 !
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
 !
 IKU=SIZE(PLSUM,3)
 !
@@ -467,7 +472,8 @@ GLSOURCE=.TRUE.
 ZLENG = (NCPL_TIMES(NCPL_CUR,1)-2) * PTSTEP
 !
 CALL INI_LS(TCPLFILE(NCPL_CUR)%TZFILE,HGETRVM,GLSOURCE,PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS, &
-             PDRYMASSS,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PDRYMASST,ZLENG,OSTEADY_DMASS)
+            PLSZWSS,PDRYMASSS,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,PDRYMASST,ZLENG,  &
+            OSTEADY_DMASS)
 !
 !
 !*      3.2   Initialize  the LB sources
@@ -509,7 +515,7 @@ CALL INI_LB(TCPLFILE(NCPL_CUR)%TZFILE,GLSOURCE,KSV,                  &
 !
 !*      3.5   Close the coupling file
 !
-CALL IO_FILE_CLOSE_ll(TCPLFILE(NCPL_CUR)%TZFILE)
+CALL IO_File_close(TCPLFILE(NCPL_CUR)%TZFILE)
 !!-------------------------------------------------------------------------------
 !
 !*      6.    FORMATS
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_deep_convection.f90 b/src/MNH/ini_deep_convection.f90
index e7f2bed917c516b40e288c98c4f8c60ff7ee4ddc..6934822e30ae38736c76608ebbe4d9008be92eff 100644
--- a/src/MNH/ini_deep_convection.f90
+++ b/src/MNH/ini_deep_convection.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.
 !-----------------------------------------------------------------
 !     ###############################
@@ -9,7 +9,7 @@
 !
 INTERFACE
 !
-      SUBROUTINE INI_DEEP_CONVECTION(TPINIFILE,HLUOUT,OINIDCONV,TPDTCUR,                &
+      SUBROUTINE INI_DEEP_CONVECTION(TPINIFILE,OINIDCONV,TPDTCUR,                       &
                                      KCOUNTCONV,PDTHCONV,PDRVCONV,PDRCCONV,             &
                                      PDRICONV,PPRCONV,PPRSCONV,PPACCONV,                &
                                      PUMFCONV,PDMFCONV,PMFCONV,PPRLFLXCONV,PPRSFLXCONV, &
@@ -18,12 +18,10 @@ INTERFACE
                                      OCH_CONV_LINOX, PIC_RATE, PCG_RATE,                &
                                      PIC_TOTAL_NUMBER, PCG_TOTAL_NUMBER                 )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_TIME
 !
 TYPE(TFILEDATA),        INTENT(IN) :: TPINIFILE ! Initial file
-CHARACTER (LEN=*),      INTENT(IN) :: HLUOUT    ! name for output-listing
-                                                !  of nested models
 LOGICAL,                INTENT(IN) :: OINIDCONV ! switch to initialize or read
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR   ! Current date and time
 CHARACTER (LEN=*),      INTENT(IN) :: HGETSVCONV ! GET indicator for SVCONV
@@ -63,7 +61,7 @@ END INTERFACE
 !
 END MODULE MODI_INI_DEEP_CONVECTION
 !     ###################################################################################
-      SUBROUTINE INI_DEEP_CONVECTION(TPINIFILE,HLUOUT,OINIDCONV,TPDTCUR,                &
+      SUBROUTINE INI_DEEP_CONVECTION(TPINIFILE,OINIDCONV,TPDTCUR,                       &
                                      KCOUNTCONV,PDTHCONV,PDRVCONV,PDRCCONV,             &
                                      PDRICONV,PPRCONV,PPRSCONV,PPACCONV,                &
                                      PUMFCONV,PDMFCONV,PMFCONV,PPRLFLXCONV,PPRSFLXCONV, &
@@ -110,40 +108,39 @@ END MODULE MODI_INI_DEEP_CONVECTION
 !!      P.Jabouille   04/04/02 add PMFCONV used for subgrid condensation
 !!                    for a correct restart this variable has to be writen in FM file
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 14/02/2019: move UPCASE function to tools.f90
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_TIME
-USE MODD_CONVPAR
+USE MODD_CH_AEROSOL,      ONLY: CAERONAMES
 USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY : C1R3NAMES
-USE MODD_ELEC_DESCR,      ONLY : CELECNAMES
+USE MODD_CONVPAR
+USE MODD_DUST,            ONLY: CDUSTNAMES
+USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_NSV, ONLY : NSV,NSV_USER,NSV_CHEMBEG,NSV_CHEMEND,NSV_C2R2BEG,NSV_C2R2END, &
-                     NSV_LGBEG,NSV_LGEND,NSV_LNOXBEG,NSV_LNOXEND, &
-                     NSV_DSTBEG,NSV_DSTEND, NSV_AERBEG,NSV_AEREND, &
-                     NSV_SLTBEG,NSV_SLTEND, NSV_PPBEG,NSV_PPEND, &
-                     NSV_C1R3BEG,NSV_C1R3END, NSV_ELECBEG,NSV_ELECEND
-USE MODD_CH_AEROSOL, ONLY : CAERONAMES
-USE MODD_DUST, ONLY : CDUSTNAMES
-USE MODD_SALT, ONLY : CSALTNAMES
+USE MODD_NSV,             ONLY: NSV, NSV_USER, NSV_CHEMBEG, NSV_CHEMEND, NSV_C2R2BEG, NSV_C2R2END, &
+                                NSV_LGBEG, NSV_LGEND, NSV_LNOXBEG, NSV_LNOXEND, &
+                                NSV_DSTBEG, NSV_DSTEND, NSV_AERBEG, NSV_AEREND, &
+                                NSV_SLTBEG, NSV_SLTEND, NSV_PPBEG, NSV_PPEND, &
+                                NSV_C1R3BEG, NSV_C1R3END, NSV_ELECBEG, NSV_ELECEND
+USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
+USE MODD_SALT,            ONLY: CSALTNAMES
+USE MODD_TIME
 !
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ,   only: IO_Field_read
+USE MODE_TOOLS,           ONLY: UPCASE
 !
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
 TYPE(TFILEDATA),        INTENT(IN) :: TPINIFILE ! Initial file
-CHARACTER (LEN=*),      INTENT(IN) :: HLUOUT    ! name for output-listing
-                                                !  of nested models
 LOGICAL,                INTENT(IN) :: OINIDCONV ! switch to initialize or read
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR   ! Current date and time
 CHARACTER (LEN=*),      INTENT(IN) :: HGETSVCONV ! GET indicator for SVCONV
@@ -227,36 +224,36 @@ IF ( OINIDCONV ) THEN
 !
 ELSE
 !
-  CALL IO_READ_FIELD(TPINIFILE,'DTDCONV',  TPDTDCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'COUNTCONV',KCOUNTCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DTHCONV',  PDTHCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DRVCONV',  PDRVCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DRCCONV',  PDRCCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DRICONV',  PDRICONV)
+  CALL IO_Field_read(TPINIFILE,'DTDCONV',  TPDTDCONV)
+  CALL IO_Field_read(TPINIFILE,'COUNTCONV',KCOUNTCONV)
+  CALL IO_Field_read(TPINIFILE,'DTHCONV',  PDTHCONV)
+  CALL IO_Field_read(TPINIFILE,'DRVCONV',  PDRVCONV)
+  CALL IO_Field_read(TPINIFILE,'DRCCONV',  PDRCCONV)
+  CALL IO_Field_read(TPINIFILE,'DRICONV',  PDRICONV)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPRCONV)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPRCONV)
   PPRCONV=PPRCONV/(1000.*3600.) ! conversion into m/s units
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPRSCONV)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPRSCONV)
   PPRSCONV=PPRSCONV/(1000.*3600.) ! conversion into m/s units
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPACCONV)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPACCONV)
   PPACCONV=PPACCONV/1000.       ! conversion into m unit
 !
   IF ( OCH_CONV_LINOX ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'IC_RATE',    PIC_RATE)
-    CALL IO_READ_FIELD(TPINIFILE,'CG_RATE',    PCG_RATE)
-    CALL IO_READ_FIELD(TPINIFILE,'IC_TOTAL_NB',PIC_TOTAL_NUMBER)
-    CALL IO_READ_FIELD(TPINIFILE,'CG_TOTAL_NB',PCG_TOTAL_NUMBER)
+    CALL IO_Field_read(TPINIFILE,'IC_RATE',    PIC_RATE)
+    CALL IO_Field_read(TPINIFILE,'CG_RATE',    PCG_RATE)
+    CALL IO_Field_read(TPINIFILE,'IC_TOTAL_NB',PIC_TOTAL_NUMBER)
+    CALL IO_Field_read(TPINIFILE,'CG_TOTAL_NB',PCG_TOTAL_NUMBER)
   END IF
 !
 !
@@ -274,91 +271,71 @@ ELSE
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C2R2BEG, NSV_C2R2END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C1R3BEG, NSV_C1R3END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_ELECBEG, NSV_ELECEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_CHEMBEG, NSV_CHEMEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_AERBEG, NSV_AEREND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_LNOXBEG,NSV_LNOXEND
       TZFIELD%CMNHNAME   = 'DSVCONV_LINOX'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_DSTBEG, NSV_DSTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_SLTBEG, NSV_SLTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_LGBEG, NSV_LGEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_PPBEG, NSV_PPEND
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
  END SELECT
 !
 !
 END IF
-!  
-CONTAINS
-FUNCTION UPCASE(HSTRING)
-
-CHARACTER(LEN=*)            :: HSTRING
-CHARACTER(LEN=LEN(HSTRING)) :: UPCASE
-
-INTEGER :: JC
-INTEGER, PARAMETER :: IAMIN = IACHAR("a")
-INTEGER, PARAMETER :: IAMAJ = IACHAR("A")
-
-DO JC=1,LEN(HSTRING)
-  IF (HSTRING(JC:JC) >= "a" .AND. HSTRING(JC:JC) <= "z") THEN
-      UPCASE(JC:JC) = ACHAR(IACHAR(HSTRING(JC:JC)) - IAMIN + IAMAJ)
-  ELSE
-      UPCASE(JC:JC) = HSTRING(JC:JC)
-  END IF
-END DO
-
-END FUNCTION UPCASE
 !
 END SUBROUTINE INI_DEEP_CONVECTION
diff --git a/src/MNH/ini_diag_in_run.f90 b/src/MNH/ini_diag_in_run.f90
index 2df092c1c83f13ae1e26a1cc14c9d704603156e5..d44800cdcd9db3fe83ddd67555e70ae68b186440 100644
--- a/src/MNH/ini_diag_in_run.f90
+++ b/src/MNH/ini_diag_in_run.f90
@@ -63,6 +63,7 @@ END MODULE MODI_INI_DIAG_IN_RUN
 !!    -------------
 !!     Original 11/2003
 !!                   02/2018 Q.Libois ECRAD
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -113,6 +114,8 @@ IF (LDIAG_IN_RUN) THEN
   ALLOCATE(XCURRENT_DSTAOD(KIU,KJU))! dust aerosol optical depth
   ALLOCATE(XCURRENT_SFCO2 (KIU,KJU))! CO2 Surface flux
   ALLOCATE(XCURRENT_TKE_DISS(KIU,KJU,KKU)) ! Tke dissipation rate
+  ALLOCATE(XCURRENT_SLTAOD(KIU,KJU))! Salt aerosol optical depth
+  ALLOCATE(XCURRENT_ZWS(KIU,KJU)) ! Significant height of waves
   !
   !
   XCURRENT_RN    = XUNDEF
@@ -134,6 +137,8 @@ IF (LDIAG_IN_RUN) THEN
   XCURRENT_DSTAOD= XUNDEF
   XCURRENT_SFCO2 = XUNDEF
   XCURRENT_TKE_DISS = XUNDEF
+  XCURRENT_SLTAOD= XUNDEF
+  XCURRENT_ZWS = XUNDEF
 ELSE
   ALLOCATE(XCURRENT_RN    (0,0))! net radiation
   ALLOCATE(XCURRENT_H     (0,0))! sensible heat flux
@@ -154,6 +159,8 @@ ELSE
   ALLOCATE(XCURRENT_DSTAOD(0,0))! dust aerosol optical depth
   ALLOCATE(XCURRENT_SFCO2 (0,0))! CO2 Surface flux
   ALLOCATE(XCURRENT_TKE_DISS(0,0,0)) ! Tke dissipation rate
+  ALLOCATE(XCURRENT_SLTAOD(0,0))! Salt aerosol optical depth
+  ALLOCATE(XCURRENT_ZWS(0,0))! Significant height of waves
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_drag.f90 b/src/MNH/ini_drag.f90
index 39bcf5b5387d3fffe09ff92930825cd886a1f6dd..aea5faa99ce212e37c101352364102ea4b5af572 100644
--- a/src/MNH/ini_drag.f90
+++ b/src/MNH/ini_drag.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-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_INI_DRAG
 !     ######################
@@ -52,7 +53,6 @@ END MODULE MODI_INI_DRAG
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-USE MODE_FM
 USE MODE_ll
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/ini_elec.f90 b/src/MNH/ini_elec.f90
index c0b51e5dc6b6f25b6d6df56e1641e387ef1816d0..0154ac6da9168df81b0669edbadf80d11ab61476 100644
--- a/src/MNH/ini_elec.f90
+++ b/src/MNH/ini_elec.f90
@@ -1,17 +1,12 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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 init 2006/05/18 13:07:25
-!-----------------------------------------------------------------
-!     ################################################################
-      SUBROUTINE INI_ELEC(KMI,HINIFILE,HLUOUT,PTSTEP,PDZMIN,KSPLITR, &
-                          PDXX,PDYY,PDZZ,PDZX,PDZY                   )
-!     ################################################################
+!     #########################################################
+      SUBROUTINE INI_ELEC(KMI,TPINIFILE,PTSTEP,PDZMIN,KSPLITR, &
+                          PDXX,PDYY,PDZZ,PDZX,PDZY            )
+!     #########################################################
 !
 !!****  *INI_ELEC* - routine to initialize the electrical parameters 
 !!
@@ -42,40 +37,37 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original     29/11/02
-!!
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODE_IO_ll
-USE MODE_FM
-USE MODE_FMREAD
-!
-USE MODD_LUNIT_n
-USE MODD_NSV, ONLY : NSV,NSV_ELEC,NSV_ELECBEG,NSV_ELECEND
-USE MODD_PARAMETERS
-USE MODD_CST
 USE MODD_CONF
+USE MODD_CST
 USE MODD_DYN
+USE MODD_IO,          ONLY: TFILEDATA
+USE MODD_LUNIT_n
+USE MODD_NSV,         ONLY: NSV, NSV_ELEC, NSV_ELECBEG, NSV_ELECEND
+USE MODD_PARAMETERS
 USE MODD_REF
 USE MODD_TIME
 !
-USE MODN_CONF_n
+USE MODE_ll
+use mode_msg
 !
 USE MODI_INI_CLOUD
 !
+USE MODN_CONF_n
 !
 IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
 !
 INTEGER,            INTENT(IN)   :: KMI      ! Model Index 
-CHARACTER (LEN=*) , INTENT(IN)   :: HINIFILE ! name of the initial file
-CHARACTER (LEN=*),  INTENT(IN)   :: HLUOUT   ! name for output-listing
-                                             !  of nested models
+TYPE(TFILEDATA),    INTENT(IN)   :: TPINIFILE! Initial file
 REAL,               INTENT(IN)   :: PTSTEP   ! Time STEP 
 !
 REAL,               INTENT(IN)   :: PDZMIN   ! minimun vertical mesh size
@@ -102,11 +94,7 @@ INTEGER             :: ILUOUT  ! Logical unit number of output-listing
 !              --------
 !
 !
-PRINT *,' INI_ELEC IS NOT YET DEVELOPPED'
-!
-!callabortstop
-CALL ABORT
-STOP
+call Print_msg(NVERB_FATAL,'GEN','INI_ELEC','not yet developed')
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_elecn.f90 b/src/MNH/ini_elecn.f90
index e67a08e8c5ed6987fd651e9220cff57be1a57c72..27ed168cdda2b4f23db4406621869b9161434049 100644
--- a/src/MNH/ini_elecn.f90
+++ b/src/MNH/ini_elecn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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.
 !-----------------------------------------------------------------
 !     ######################
@@ -8,17 +8,15 @@
 !     ######################
 !
 INTERFACE
-      SUBROUTINE INI_ELEC_n (KLUOUT, HELEC, HCLOUD, HLUOUT, TPINIFILE, &
-                             PTSTEP, PZZ,                              &
-                             PDXX, PDYY, PDZZ, PDZX, PDZY              )
+      SUBROUTINE INI_ELEC_n (KLUOUT, HELEC, HCLOUD, TPINIFILE, &
+                             PTSTEP, PZZ,                      &
+                             PDXX, PDYY, PDZZ, PDZX, PDZY      )
 !
-USE MODD_IO_ll,  ONLY : TFILEDATA
+USE MODD_IO,  ONLY : TFILEDATA
 !
 INTEGER,           INTENT(IN) :: KLUOUT   ! Logical unit number for prints
 CHARACTER (LEN=4), INTENT(IN) :: HELEC    ! atmospheric electricity scheme
 CHARACTER (LEN=4), INTENT(IN) :: HCLOUD   ! microphysics scheme
-CHARACTER (LEN=*), INTENT(IN) :: HLUOUT   ! name for output-listing
-                                          !  of nested models
 TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE! Initial file
 REAL,              INTENT(IN) :: PTSTEP   ! Time STEP
 !
@@ -33,11 +31,11 @@ END SUBROUTINE INI_ELEC_n
 END INTERFACE
 END MODULE MODI_INI_ELEC_n
 !
-!     #################################################################
-      SUBROUTINE INI_ELEC_n(KLUOUT, HELEC, HCLOUD, HLUOUT, TPINIFILE, &
-                            PTSTEP, PZZ,                              &
-                            PDXX, PDYY, PDZZ, PDZX, PDZY              )
-!     #################################################################
+!     #########################################################
+      SUBROUTINE INI_ELEC_n(KLUOUT, HELEC, HCLOUD, TPINIFILE, &
+                            PTSTEP, PZZ,                      &
+                            PDXX, PDYY, PDZZ, PDZX, PDZY      )
+!     #########################################################
 !
 !!    PURPOSE
 !!    -------
@@ -74,6 +72,8 @@ END MODULE MODI_INI_ELEC_n
 !!      J.-P. Pinty  15/11/13  Initialize the flash maps
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
@@ -94,7 +94,7 @@ USE MODD_ELEC_n, ONLY : XRHOM_E, XAF_E, XCF_E, XBFY_E, XBFB_E, XBF_SXP2_YP1_Z_E
 USE MODD_GET_n, ONLY : CGETINPRC, CGETINPRR, CGETINPRS, CGETINPRG, CGETINPRH, &            
                        CGETCLOUD, CGETSVT
 USE MODD_GRID_n, ONLY : XMAP, XDXHAT, XDYHAT
-USE MODD_IO_ll,  ONLY : TFILEDATA
+USE MODD_IO,  ONLY : TFILEDATA
 USE MODD_LBC_n, ONLY : CLBCX, CLBCY
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAM_C2R2, ONLY : LDEPOC
@@ -108,9 +108,8 @@ USE MODD_REF_n, ONLY : XRHODJ, XTHVREF
 USE MODD_TIME
 !
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODE_IO_ll
-USE MODE_FMREAD
 USE MODE_ll
+use mode_msg
 !
 USE MODI_ELEC_TRIDZ
 USE MODI_INI_CLOUD
@@ -128,8 +127,6 @@ IMPLICIT NONE
 INTEGER,           INTENT(IN) :: KLUOUT   ! Logical unit number for prints
 CHARACTER (LEN=4), INTENT(IN) :: HELEC    ! atmospheric electricity scheme
 CHARACTER (LEN=4), INTENT(IN) :: HCLOUD   ! microphysics scheme
-CHARACTER (LEN=*), INTENT(IN) :: HLUOUT   ! name for output-listing
-                                          !  of nested models
 TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE! Initial file
 REAL,              INTENT(IN) :: PTSTEP   ! Time STEP
 !
@@ -225,7 +222,7 @@ IF(SIZE(XINPRR) == 0) RETURN
 !*       2.    Initialize MODD_PRECIP_n variables
 !              -----------------------------------
 !
-CALL READ_PRECIP_FIELD (TPINIFILE, HLUOUT, CPROGRAM, CCONF,                   &
+CALL READ_PRECIP_FIELD (TPINIFILE, CPROGRAM, CCONF,                           &
                         CGETINPRC,CGETINPRR,CGETINPRS,CGETINPRG,CGETINPRH,    &
                         XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D,  &
                         XACPRR, XINPRS, XACPRS, XINPRG, XACPRG, XINPRH, XACPRH)
@@ -284,14 +281,12 @@ IF (HELEC(1:3) == 'ELE') THEN
     IF (LFLASH_GEOM) THEN
       CALL INI_FLASH_GEOM_ELEC
     ELSE
-      PRINT *,' INI_LIGHTNING_ELEC NOT YET DEVELOPPED'
-      STOP
+      call Print_msg( NVERB_FATAL, 'GEN', 'INI_ELEC_n', 'INI_LIGHTNING_ELEC not yet developed' )
     END IF
   END IF
 !
 ELSE IF (HELEC /= 'NONE') THEN
-  WRITE(ILUOUT,FMT=*) "INI_ELEC_n IS NOT YET DEVELOPPED FOR CELEC=",HELEC
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_ELEC_n', 'not yet developed for CELEC='//trim(HELEC) )
 END IF
 !
 !*       3.6    initialize the parameters for the resolution of the electric field
diff --git a/src/MNH/ini_field_elec.f90 b/src/MNH/ini_field_elec.f90
index 9fa4a9fb1b7c0f329d13712d44689ff4c00ff1e9..86b68ca99cb89d4f3fee06e900293834f20732cd 100644
--- a/src/MNH/ini_field_elec.f90
+++ b/src/MNH/ini_field_elec.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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_INI_FIELD_ELEC
@@ -78,7 +78,6 @@ USE MODI_GDIV
 USE MODI_SHUMAN
 !
 USE MODE_ll
-USE MODE_FM
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/ini_ice_c1r3.f90 b/src/MNH/ini_ice_c1r3.f90
index d847c5a2be3e5f486285cc34726cbcccf3b4f5bb..5240fc5d409bfcce72945ff924096ee08ad71dcd 100644
--- a/src/MNH/ini_ice_c1r3.f90
+++ b/src/MNH/ini_ice_c1r3.f90
@@ -1,6 +1,6 @@
 !MNH_LIC Copyright 1994-2018 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.
 !-----------------------------------------------------------------
 !      ########################
@@ -88,6 +88,7 @@ END MODULE MODI_INI_ICE_C1R3
 !!      J.-P. Pinty 23/10/2001 Add XRHORSMIN
 !!      J.-P. Pinty 05/04/2002 Add computation of the effective radius
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
@@ -101,10 +102,12 @@ USE MODD_LUNIT, ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_PARAM_C1R3
 USE MODD_PARAM_C2R2,      ONLY : XALPHAC,XNUC,XALPHAR,XNUR
-USe MODD_RAIN_C2R2_DESCR, ONLY : XAR,XBR,XCR,XDR,XF0R,XF1R,XAC,XBC,XCC,XDC, &
+USE MODD_RAIN_C2R2_DESCR, ONLY : XAR,XBR,XCR,XDR,XF0R,XF1R,XAC,XBC,XCC,XDC, &
                                  XLBC,XLBEXC,XLBR,XLBEXR
 USE MODD_REF
 !
+use mode_msg
+!
 USE MODI_GAMMA
 USE MODI_GAMMA_INC
 USE MODI_READ_XKER_RACCS
@@ -464,10 +467,8 @@ IF (XALPHAC == 3.0) THEN
 ELSE
   WRITE(UNIT=ILUOUT0,FMT='("      Homogeneous nucleation")')
   WRITE(UNIT=ILUOUT0,FMT='(" XALPHAC=",E13.6," IS NOT 3.0")') XALPHAC
-  WRITE(UNIT=ILUOUT0,FMT='(" No algorithm yet developped in this case !")')
-!callabortstop
-CALL ABORT
-  STOP
+  WRITE(UNIT=ILUOUT0,FMT='(" No algorithm yet developed in this case !")')
+  call Print_msg(NVERB_FATAL,'GEN','INI_ICE_C1R3','')
 END IF
 !
 GFLAG = .TRUE.
diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90
index eb93466cf480caafe489156463fb6eeef365a339..79fff80584ca80575e8a9298452aac79620a63a0 100644
--- a/src/MNH/ini_lb.f90
+++ b/src/MNH/ini_lb.f90
@@ -1,4 +1,4 @@
-!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 for details. version 1.
@@ -21,7 +21,7 @@ SUBROUTINE INI_LB(TPINIFILE,OLSOURCE,KSV,                                   &
      PLBYUMM,PLBYVMM,PLBYWMM,PLBYTHMM,PLBYTKEMM,PLBYRMM,PLBYSVMM,           &
      PLENG )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),       INTENT(IN)   :: TPINIFILE ! Initial file
 LOGICAL,               INTENT(IN)   :: OLSOURCE  ! switch for the source term
@@ -132,6 +132,9 @@ SUBROUTINE INI_LB(TPINIFILE,OLSOURCE,KSV,                          &
 !!      J.-P. Pinty     09/02/16    Add LIMA that is LBC for CCN and IFN
 !!      M.Leriche       09/02/16    Treat gas and aq. chemicals separately
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/02/2019: initialize PLBXSVM and PLBYSVM in all cases
+!  P. Wautelet 14/02/2019: move UPCASE function to tools.f90
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -143,7 +146,7 @@ USE MODD_CONF
 USE MODD_DUST
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_NSV
@@ -156,8 +159,9 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_SALT
 !
 USE MODE_FIELD,           ONLY: TFIELDDATA,TYPELOG,TYPEREAL
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ,   only: IO_Field_read, IO_Field_read_lb
 USE MODE_MSG
+USE MODE_TOOLS, ONLY: UPCASE
 !
 IMPLICIT NONE
 !
@@ -235,7 +239,7 @@ TYPE(TFIELDDATA)  :: TZFIELD
 !*       0.    READ CPL_AROME to know which LB_fileds there are to read
 !              --------------------
 IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>8) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'CPL_AROME',LCPL_AROME)
+  CALL IO_Field_read(TPINIFILE,'CPL_AROME',LCPL_AROME)
 ELSE
   LCPL_AROME=.FALSE.
 ENDIF
@@ -254,12 +258,12 @@ ILUOUT = TLUOUT%NLU
 !
 !*       2.1   read the number of available points for the horizontal relaxation
 ! for basic variables 
-CALL IO_READ_FIELD(TPINIFILE,'RIMX',ILBSIZEX)
-CALL IO_READ_FIELD(TPINIFILE,'RIMY',ILBSIZEY)
+CALL IO_Field_read(TPINIFILE,'RIMX',ILBSIZEX)
+CALL IO_Field_read(TPINIFILE,'RIMY',ILBSIZEY)
 !
 !*        2.2 Basic variables
 ! 
-CALL IO_READ_FIELD(TPINIFILE,'HORELAX_UVWTH',GHORELAX_UVWTH)
+CALL IO_Field_read(TPINIFILE,'HORELAX_UVWTH',GHORELAX_UVWTH)
                                 !
 IF (GHORELAX_UVWTH) THEN 
   IRIMX =(KSIZELBX_ll-2*JPHEXT)/2   
@@ -282,35 +286,35 @@ ELSE
 ENDIF
 !
 IF (KSIZELBXU_ll/= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
 END IF
 
 IF ( KSIZELBX_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
 ENDIF
 
 IF ( KSIZELBX_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
 END IF
 
 IF ( KSIZELBY_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
 END IF
 
 IF ( KSIZELBYV_ll  /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
 END IF
 
 IF (KSIZELBY_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
 END IF
 
 IF (KSIZELBX_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
 END IF
 
 IF ( KSIZELBY_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
 END IF
 !
 !*        2.3  LB-TKE
@@ -327,7 +331,7 @@ CASE('READ')
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize LBXTKES and LBYTKES')
     ENDIF
   ELSE
-    CALL IO_READ_FIELD(TPINIFILE,'HORELAX_TKE',GHORELAX_TKE)
+    CALL IO_Field_read(TPINIFILE,'HORELAX_TKE',GHORELAX_TKE)
     IF (GHORELAX_TKE) THEN 
       IRIMX=(KSIZELBXTKE_ll-2*JPHEXT)/2   
       IRIMY=(KSIZELBYTKE_ll-2*JPHEXT)/2
@@ -341,11 +345,11 @@ CASE('READ')
     ENDIF
 !
     IF (KSIZELBXTKE_ll /= 0) THEN
-      CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTKEM',IL3DX,IRIMX,PLBXTKEM)
+      CALL IO_Field_read_lb(TPINIFILE,'LBXTKEM',IL3DX,IRIMX,PLBXTKEM)
     END IF
 !
     IF (KSIZELBYTKE_ll /= 0) THEN  
-      CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTKEM',IL3DY,IRIMY,PLBYTKEM)
+      CALL IO_Field_read_lb(TPINIFILE,'LBYTKEM',IL3DY,IRIMY,PLBYTKEM)
     END IF
   ENDIF
 CASE('INIT')
@@ -369,7 +373,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_R)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_R)
   !
   YGETRXM(:)=(/HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM,HGETRGM,HGETRHM/)
   YC(:)=(/"V","C","R","I","S","G","H"/)
@@ -403,7 +407,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         TZFIELD%CLONGNAME  = 'LBXR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBX'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
-        CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
+        CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
       END IF
       !
       IF ( KSIZELBYR_ll /= 0 ) THEN
@@ -411,7 +415,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         TZFIELD%CLONGNAME  = 'LBYR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBY'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
-        CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
+        CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
       END IF
     CASE('INIT')
       IRR=IRR+1 
@@ -438,7 +442,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
           TZFIELD%CLONGNAME  = 'LBXR'//YC(JRR)//'M'
           TZFIELD%CLBTYPE    = 'LBX'
           TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
         ENDIF
       END IF
       !
@@ -456,7 +460,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
            TZFIELD%CLONGNAME  = 'LBYR'//YC(JRR)//'M'
            TZFIELD%CLBTYPE    = 'LBY'
            TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
-           CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
+           CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
          ENDIF
        END IF
     CASE('INIT')
@@ -469,7 +473,10 @@ END IF
 !
 !*        2.6    LB-Scalar Variables
 !
-IF (KSV > 0) THEN 
+PLBXSVM(:,:,:,:) = 0.
+PLBYSVM(:,:,:,:) = 0.
+!
+IF (KSV > 0) THEN
   IF (ANY(HGETSVM(1:KSV)=='READ')) THEN
     TZFIELD%CMNHNAME   = 'HORELAX_SV'
     TZFIELD%CSTDNAME   = ''
@@ -482,7 +489,7 @@ IF (KSV > 0) THEN
     TZFIELD%NTYPE      = TYPELOG
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_SV)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_SV)
     IF ( GHORELAX_SV ) THEN
       IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2   
       IRIMY=(KSIZELBYSV_ll-2*JPHEXT)/2
@@ -514,7 +521,7 @@ IF (NSV_USER>0) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -533,7 +540,7 @@ IF (NSV_USER>0) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -570,7 +577,7 @@ IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -589,7 +596,7 @@ IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -626,7 +633,7 @@ IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -645,7 +652,7 @@ IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -686,7 +693,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBXSVMM)) THEN
@@ -705,7 +712,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBYSVMM)) THEN
@@ -743,7 +750,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBXSVMM)) THEN
@@ -762,7 +769,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBYSVMM)) THEN
@@ -800,7 +807,7 @@ IF (NSV_ELECEND>=NSV_ELECBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -818,7 +825,7 @@ IF (NSV_ELECEND>=NSV_ELECBEG) THEN
           TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -855,7 +862,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -874,7 +881,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -896,7 +903,7 @@ END IF
 ! Chemical aqueous phase scalar variables
 IF (NSV_CHACEND>=NSV_CHACBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -911,7 +918,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -930,7 +937,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -952,7 +959,7 @@ END IF
 ! Chemical ice phase scalar variables
 IF (NSV_CHICEND>=NSV_CHICBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -967,7 +974,7 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -986,7 +993,7 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1008,7 +1015,7 @@ END IF
 ! Orilam aerosol scalar variables
 IF (NSV_AEREND>=NSV_AERBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -1023,7 +1030,7 @@ IF (NSV_AEREND>=NSV_AERBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1042,7 +1049,7 @@ IF (NSV_AEREND>=NSV_AERBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1064,7 +1071,7 @@ END IF
 ! Orilam aerosols moist scalar variables
 IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -1079,7 +1086,7 @@ IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1098,7 +1105,7 @@ IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1120,7 +1127,7 @@ END IF
 ! Dust scalar variables
 IF (NSV_DSTEND>=NSV_DSTBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -1135,7 +1142,7 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1154,7 +1161,7 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1176,7 +1183,7 @@ END IF
 !
 IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -1191,7 +1198,7 @@ IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1210,7 +1217,7 @@ IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1233,7 +1240,7 @@ END IF
 ! Sea salt scalar variables
 IF (NSV_SLTEND>=NSV_SLTBEG) THEN
   TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
+  TZFIELD%CUNITS     = 'ppp'
   TZFIELD%CDIR       = ''
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
@@ -1248,7 +1255,7 @@ IF (NSV_SLTEND>=NSV_SLTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1267,7 +1274,7 @@ IF (NSV_SLTEND>=NSV_SLTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1304,7 +1311,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1323,7 +1330,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1361,7 +1368,7 @@ IF (NSV_FFEND>=NSV_FFBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           WRITE(ILUOUT,*) 'ForeFire LBX_FF ', IRESP
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
@@ -1381,7 +1388,7 @@ IF (NSV_FFEND>=NSV_FFBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1419,7 +1426,7 @@ IF (NSV_CSEND>=NSV_CSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1438,7 +1445,7 @@ IF (NSV_CSEND>=NSV_CSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1475,7 +1482,7 @@ IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1494,7 +1501,7 @@ IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1531,7 +1538,7 @@ IF (NSV_LGEND>=NSV_LGBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1550,7 +1557,7 @@ IF (NSV_LGEND>=NSV_LGBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1623,27 +1630,7 @@ IF (OLSOURCE) THEN
       PLBYSVM(:,:,:,JSV) = (PLBYSVM(:,:,:,JSV) - PLBYSVMM(:,:,:,JSV))   / PLENG 
     ENDIF
   END DO
-! 
+!
 ENDIF
-
-CONTAINS
-FUNCTION UPCASE(HSTRING)
-
-CHARACTER(LEN=*)            :: HSTRING
-CHARACTER(LEN=LEN(HSTRING)) :: UPCASE
-
-INTEGER :: JC
-INTEGER, PARAMETER :: IAMIN = IACHAR("a")
-INTEGER, PARAMETER :: IAMAJ = IACHAR("A")
-
-DO JC=1,LEN(HSTRING)
-  IF (HSTRING(JC:JC) >= "a" .AND. HSTRING(JC:JC) <= "z") THEN
-      UPCASE(JC:JC) = ACHAR(IACHAR(HSTRING(JC:JC)) - IAMIN + IAMAJ)
-  ELSE
-      UPCASE(JC:JC) = HSTRING(JC:JC)
-  END IF
-END DO
-
-END FUNCTION UPCASE
 !
 END SUBROUTINE INI_LB
diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90
index 3f398b419cd40a90fc718d509ab97f99451ba7b7..c2a2256834c47187389d50e94d3e902c1682486d 100644
--- a/src/MNH/ini_lesn.f90
+++ b/src/MNH/ini_lesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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,7 +33,8 @@
 !!                       06/11/02 (V. Masson) add LES budgets
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -41,7 +42,6 @@
 !
 USE MODE_ll
 USE MODE_GATHER_ll
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -66,7 +66,6 @@ USE MODD_DYN
 USE MODD_NSV, ONLY: NSV ! update_nsv is done in INI_MODEL
 USE MODD_CONDSAMP, ONLY : LCONDSAMP
 !
-
 USE MODI_INI_LES_CART_MASKn
 USE MODI_COEF_VER_INTERP_LIN
 !
@@ -162,9 +161,7 @@ IF (LLES_SPECTRA  )  LLES_MEAN = .TRUE.
 IF (CTURB=='NONE') THEN
   WRITE(ILUOUT,FMT=*) 'LES diagnostics cannot be done without subgrid turbulence.'
   WRITE(ILUOUT,FMT=*) 'You have chosen CTURB="NONE". You must choose a turbulence scheme.'
-  WRITE(ILUOUT,FMT=*) 'STOP'
-!callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LB_n','')
+  call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LB_n', 'LES diagnostics cannot be done without subgrid turbulence' )
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -539,8 +536,10 @@ ELSE
 END IF
 IF (LUSERR ) THEN
   ALLOCATE(XLES_MEAN_Rr (NLES_K,NLES_TIMES,NLES_MASKS))
+  ALLOCATE(XLES_MEAN_RF (NLES_K,NLES_TIMES,NLES_MASKS))
 ELSE
   ALLOCATE(XLES_MEAN_Rr (0,0,0))
+  ALLOCATE(XLES_MEAN_RF (0,0,0))
 END IF
 IF (LUSERI ) THEN
   ALLOCATE(XLES_MEAN_Ri (NLES_K,NLES_TIMES,NLES_MASKS))
@@ -646,6 +645,7 @@ IF (LUSERC ) XLES_MEAN_KHt = XUNDEF
 IF (LUSERC ) XLES_MEAN_Rt  = XUNDEF
 IF (LUSERC ) XLES_MEAN_Rc  = XUNDEF
 IF (LUSERC ) XLES_MEAN_Cf  = XUNDEF
+IF (LUSERC ) XLES_MEAN_RF  = XUNDEF
 IF (LUSERC ) XLES_MEAN_INDCf  = XUNDEF
 IF (LUSERC ) XLES_MEAN_INDCf2 = XUNDEF
 IF (LUSERR ) XLES_MEAN_Rr  = XUNDEF
diff --git a/src/MNH/ini_lima_cold_mixed.f90 b/src/MNH/ini_lima_cold_mixed.f90
index a16a6d5c4c7e3b7e20f7c793f25ef370bf30d557..97921618141f0c60e6b440e82c53961baa5903e8 100644
--- a/src/MNH/ini_lima_cold_mixed.f90
+++ b/src/MNH/ini_lima_cold_mixed.f90
@@ -1,7 +1,8 @@
 !MNH_LIC Copyright 2013-2018 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_INI_LIMA_COLD_MIXED
 !      ###############################
@@ -38,6 +39,7 @@ END MODULE MODI_INI_LIMA_COLD_MIXED
 !!    -------------
 !!      Original             ??/??/13 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
@@ -53,6 +55,8 @@ USE MODD_PARAM_LIMA_COLD
 USE MODD_PARAM_LIMA_MIXED
 USE MODD_REF
 !
+use mode_msg
+!
 USE MODI_LIMA_FUNCTIONS
 USE MODI_GAMMA
 USE MODI_GAMMA_INC
@@ -74,6 +78,7 @@ REAL,                    INTENT(IN) :: PDZMIN    ! minimun vertical mesh size
 !
 !*       0.2   Declarations of local variables :
 !
+character(len=13) :: yval     ! String for error message
 INTEGER :: IKB                ! Coordinates of the first  physical 
                               ! points along z
 INTEGER :: J1,J2              ! Internal loop indexes
@@ -372,8 +377,7 @@ ELSE IF (NPHILLIPS == 8) THEN
    XAREA1(3)  = 2.7E-7    !BC
    XAREA1(4)  = 9.1E-7    !BIO
 ELSE
-   print *, "NPHILLIPS n'est pas égal à 8 ou 13" 
-   STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_LIMA_COLD_MIXED', 'NPHILLIPS should be equal to 8 or 13' )
 END IF
 !
 !*               4.1.2  Constants for the computation of H_X (the fraction-redu-
@@ -519,10 +523,9 @@ IF (XALPHAC == 3.0) THEN
   XC_HONC   = XPI/6.0
   XR_HONC   = XPI/6.0
 ELSE
-  WRITE(UNIT=ILUOUT0,FMT='("      Homogeneous nucleation")')
-  WRITE(UNIT=ILUOUT0,FMT='(" XALPHAC=",E13.6," IS NOT 3.0")') XALPHAC
-  WRITE(UNIT=ILUOUT0,FMT='(" No algorithm yet developped in this case !")')
-  STOP
+  write ( yval, '( E13.6 )' ) xalphac
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_LIMA_COLD_MIXED', 'homogeneous nucleation: XALPHAC='//trim(yval)// &
+                  '/= 3. No algorithm developed for this case' )
 END IF
 !
 GFLAG = .TRUE.
diff --git a/src/MNH/ini_ls.f90 b/src/MNH/ini_ls.f90
index 5cf2317848635d0bd4a48ae78935e2f84b5f579f..d5395028e46b8ad73426fef473b8b4d1402b5aec 100644
--- a/src/MNH/ini_ls.f90
+++ b/src/MNH/ini_ls.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.
 !-----------------------------------------------------------------
 !     ######################
@@ -10,12 +10,12 @@
 INTERFACE 
 !
       SUBROUTINE INI_LS(TPINIFILE,HGETRVM,OLSOURCE,              &
-           PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                      &
+           PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,              &
            PDRYMASSS,                                            &
-           PLSUMM,PLSVMM,PLSWMM,PLSTHMM,PLSRVMM,PDRYMASST,PLENG, &
+           PLSUMM,PLSVMM,PLSWMM,PLSTHMM,PLSRVMM,PLSZWSMM, PDRYMASST,PLENG, &
            OSTEADY_DMASS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPINIFILE ! Initial file
 CHARACTER (LEN=*),      INTENT(IN)    :: HGETRVM   ! GET indicator
@@ -23,11 +23,13 @@ LOGICAL,                INTENT(IN)    :: OLSOURCE  ! Switch for the source term
 ! Larger Scale fields (source if OLSOURCE=T,  fields at time t-dt if OLSOURCE=F) :
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLSUM,PLSVM,PLSWM  ! Wind
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLSTHM,PLSRVM      ! Mass
+REAL, DIMENSION(:,:),            INTENT(INOUT) :: PLSZWSM                ! sea wave
 !if OLSOURCE=T : 
 REAL,                   INTENT(INOUT), OPTIONAL :: PDRYMASSS             ! Md source
 !Large Scale  fields at time t-dt (if OLSOURCE=T) : 
 REAL, DIMENSION(:,:,:), INTENT(IN),    OPTIONAL :: PLSUMM,PLSVMM,PLSWMM  ! Wind
 REAL, DIMENSION(:,:,:), INTENT(IN),    OPTIONAL :: PLSTHMM,PLSRVMM       ! Mass
+REAL, DIMENSION(:,:),   INTENT(IN),    OPTIONAL  :: PLSZWSMM             ! Sea wave
 REAL,                   INTENT(IN),    OPTIONAL :: PDRYMASST             ! Md(t)
 REAL,                   INTENT(IN),    OPTIONAL :: PLENG                 ! Interpolation length
 LOGICAL,                INTENT(IN),    OPTIONAL :: OSTEADY_DMASS         ! Md evolution logical switch
@@ -41,9 +43,9 @@ END MODULE MODI_INI_LS
 !
 !     ############################################################
       SUBROUTINE INI_LS(TPINIFILE,HGETRVM,OLSOURCE,              &
-           PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                      &
+           PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,              &
            PDRYMASSS,                                            &
-           PLSUMM,PLSVMM,PLSWMM,PLSTHMM,PLSRVMM,PDRYMASST,PLENG, &
+           PLSUMM,PLSVMM,PLSWMM,PLSTHMM,PLSRVMM,PLSZWSMM,PDRYMASST,PLENG, &
            OSTEADY_DMASS)
 !     ############################################################
 !
@@ -80,6 +82,8 @@ END MODULE MODI_INI_LS
 !!    -------------
 !!      Original        22/09/98
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !!
 !! 
 !-------------------------------------------------------------------------------
@@ -87,10 +91,10 @@ END MODULE MODI_INI_LS
 !*       0.    DECLARATIONS
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_TIME ! for type DATE_TIME
+USE MODD_FIELD_n, only: XZWS_DEFAULT
+USE MODD_IO,            ONLY: TFILEDATA
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -105,11 +109,13 @@ LOGICAL,                INTENT(IN)    :: OLSOURCE  ! Switch for the source term
 ! Larger Scale fields (source if OLSOURCE=T,  fields at time t-dt if OLSOURCE=F) :
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLSUM,PLSVM,PLSWM  ! Wind
 REAL, DIMENSION(:,:,:), INTENT(INOUT) :: PLSTHM,PLSRVM      ! Mass
+REAL, DIMENSION(:,:),            INTENT(INOUT) :: PLSZWSM                ! sea wave
 !if OLSOURCE=T : 
 REAL,                   INTENT(INOUT), OPTIONAL :: PDRYMASSS             ! Md source
 !Large Scale  fields at time t-dt (if OLSOURCE=T) : 
 REAL, DIMENSION(:,:,:), INTENT(IN),    OPTIONAL :: PLSUMM,PLSVMM,PLSWMM  ! Wind
 REAL, DIMENSION(:,:,:), INTENT(IN),    OPTIONAL :: PLSTHMM,PLSRVMM       ! Mass
+REAL, DIMENSION(:,:),   INTENT(IN),    OPTIONAL :: PLSZWSMM              ! Sea wave
 REAL,                   INTENT(IN),    OPTIONAL :: PDRYMASST             ! Md(t)
 REAL,                   INTENT(IN),    OPTIONAL :: PLENG                 ! Interpolation length
 LOGICAL,                INTENT(IN),    OPTIONAL :: OSTEADY_DMASS         ! Md evolution logical switch
@@ -117,7 +123,8 @@ LOGICAL,                INTENT(IN),    OPTIONAL :: OSTEADY_DMASS         ! Md ev
 !
 !*       0.2   declarations of local variables
 !
-!NONE
+CHARACTER(LEN=15) :: YVAL
+INTEGER           :: IRESP
 !
 !-------------------------------------------------------------------------------
 !
@@ -134,15 +141,26 @@ LOGICAL,                INTENT(IN),    OPTIONAL :: OSTEADY_DMASS         ! Md ev
 !*       2.    READ LARGE SCALE FIELDS
 !              -----------------------
 !
-CALL IO_READ_FIELD(TPINIFILE,'LSUM', PLSUM)
-CALL IO_READ_FIELD(TPINIFILE,'LSVM', PLSVM)
-CALL IO_READ_FIELD(TPINIFILE,'LSWM', PLSWM)
-CALL IO_READ_FIELD(TPINIFILE,'LSTHM',PLSTHM)
+CALL IO_Field_read(TPINIFILE,'LSUM', PLSUM)
+CALL IO_Field_read(TPINIFILE,'LSVM', PLSVM)
+CALL IO_Field_read(TPINIFILE,'LSWM', PLSWM)
+CALL IO_Field_read(TPINIFILE,'LSTHM',PLSTHM)
+CALL IO_Field_read(TPINIFILE,'ZWS',  PLSZWSM, IRESP)
+!If the field ZWS is not in the file, set its value to XZWS_DEFAULT
+!ZWS is present in files since MesoNH 5.4.2
+IF ( IRESP/=0 ) THEN
+  WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+  CALL PRINT_MSG(NVERB_WARNING,'IO','INI_LS','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
+  PLSZWSM(:,:) = XZWS_DEFAULT
+END IF
 !
 IF (HGETRVM == 'READ') THEN         ! LS-vapor                                    
-  CALL IO_READ_FIELD(TPINIFILE,'LSRVM',PLSRVM)
+  CALL IO_Field_read(TPINIFILE,'LSRVM',PLSRVM)
 ENDIF
 !
+IF (PRESENT(PLSZWSMM)) THEN
+    PLSZWSM(:,:)= (PLSZWSM(:,:) - PLSZWSMM(:,:)) / PLENG
+END IF
 !
 !-------------------------------------------------------------------------------
 !
@@ -172,7 +190,7 @@ IF (OLSOURCE) THEN
 ! Dry mass
    IF(.NOT. OSTEADY_DMASS) THEN
      IF (PRESENT(PDRYMASSS).AND.PRESENT(PDRYMASST)) THEN
-       CALL IO_READ_FIELD(TPINIFILE,'DRYMASST',PDRYMASSS)
+       CALL IO_Field_read(TPINIFILE,'DRYMASST',PDRYMASSS)
        PDRYMASSS   = (PDRYMASSS - PDRYMASST) / PLENG
      ENDIF
    ENDIF
diff --git a/src/MNH/ini_lw_setup.f90 b/src/MNH/ini_lw_setup.f90
index e67f466c4af14a9664df360e15b01bc15b29abf7..d89d4c4fd826a0a465cedf648f3a858f44b41779 100644
--- a/src/MNH/ini_lw_setup.f90
+++ b/src/MNH/ini_lw_setup.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     ##########################
@@ -51,12 +51,15 @@ END MODULE MODI_INI_LW_SETUP
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    03/03/03
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
 !
+use mode_msg
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -116,9 +119,7 @@ SELECT CASE (HRAD)
        PLW_BANDS(15) = 4.02E-6      
        PLW_BANDS(16) = 3.59E-6
     ELSE
-!callabortstop
-       CALL ABORT
-       STOP     
+      call Print_msg(NVERB_FATAL,'GEN','INI_LW_SETUP','invalid KLWB_MNH argument')
     ENDIF
 
 !
diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90
index 67bce21b6e97a0bdd9850ffe635c5205b4195718..718eebb464b59a2d271a80cfbab03dceacc418fd 100644
--- a/src/MNH/ini_micron.f90
+++ b/src/MNH/ini_micron.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !      ########################
@@ -10,7 +10,7 @@
 INTERFACE
       SUBROUTINE INI_MICRO_n  ( TPINIFILE,KLUOUT )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file
 INTEGER,         INTENT(IN) :: KLUOUT    ! Logical unit number for prints
@@ -51,6 +51,8 @@ END MODULE MODI_INI_MICRO_n
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!      C.LAc          10/2016   Add budget for droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      P.Wautelet     01/2019: bug: add missing allocations
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !!
 !! --------------------------------------------------------------------------
 !
@@ -59,8 +61,7 @@ END MODULE MODI_INI_MICRO_n
 !
 !
 USE MODD_CONF, ONLY : CCONF,CPROGRAM       
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_LUNIT_n, ONLY : CLUOUT
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_GET_n, ONLY : CGETRCT,CGETRRT, CGETRST, CGETRGT, CGETRHT, CGETCLOUD
 USE MODD_DIM_n, ONLY : NIMAX_ll, NJMAX_ll
 USE MODD_PARAMETERS, ONLY : JPVEXT, JPHEXT
@@ -220,15 +221,13 @@ IF(LBLOWSNOW) THEN
   IF(CSNOWSEDIM=='TABC') THEN
 !Read in look up tables of snow particles properties
 !No arguments, all look up tables are defined in module
-!mode_snowdrift_sedim_lkt           
-          CALL BLOWSNOW_SEDIM_LKT_SET 
+!mode_snowdrift_sedim_lkt
+    CALL BLOWSNOW_SEDIM_LKT_SET
   END IF
 ELSE
   ALLOCATE(XSNWSUBL3D(0,0,0))
 END IF
 !
-IF(SIZE(XINPRR) == 0) RETURN
-!
 !*       2b.    ALLOCATION for Radiative cooling 
 !              ------------------------------
 IF (LACTIT .OR. MACTIT) THEN
@@ -236,12 +235,11 @@ IF (LACTIT .OR. MACTIT) THEN
   ALLOCATE( XRCM(IIU,IJU,IKU) )
   XTHM = XTHT
   XRCM(:,:,:) = XRT(:,:,:,2)
-             ELSE
+ELSE
   ALLOCATE( XTHM(0,0,0) )
   ALLOCATE( XRCM(0,0,0) )
 END IF
 !
-!
 !*       2.bis ALLOCATE  Module MODD_PRECIP_SCAVENGING_n
 !              ------------------------------
 !
@@ -249,16 +247,21 @@ IF ( (CCLOUD=='LIMA') .AND. LSCAV ) THEN
   ALLOCATE(XINPAP(IIU,IJU))
   ALLOCATE(XACPAP(IIU,IJU))
   XINPAP(:,:)=0.0
-  XACPAP(:,:)=0.0  
+  XACPAP(:,:)=0.0
+ELSE
+  ALLOCATE(XINPAP(0,0))
+  ALLOCATE(XACPAP(0,0))
 END IF
 !
+IF(SIZE(XINPRR) == 0) RETURN
+!
 !*       3.    INITIALIZE MODD_PRECIP_n variables
 !              ----------------------------------
 !
-CALL READ_PRECIP_FIELD(TPINIFILE,CLUOUT,CPROGRAM,CCONF,               &
+CALL READ_PRECIP_FIELD(TPINIFILE,CPROGRAM,CCONF,                      &
                   CGETRCT,CGETRRT,CGETRST,CGETRGT,CGETRHT,            &
                   XINPRC,XACPRC,XINDEP,XACDEP,XINPRR,XINPRR3D,XEVAP3D,&
-                  XACPRR,XINPRS,XACPRS,XINPRG,XACPRG, XINPRH,XACPRH )           
+                  XACPRR,XINPRS,XACPRS,XINPRG,XACPRG, XINPRH,XACPRH )
 !
 !
 !*       4.    INITIALIZE THE PARAMETERS FOR THE MICROPHYSICS
@@ -287,13 +290,13 @@ ELSE IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN
   IF (CCLOUD == 'C3R5') THEN
     CALL INI_ICE_C1R3(XTSTEP,ZDZMIN,NSPLITG)       ! 1/2 spectral cold cloud
   END IF
-ELSE IF (CCLOUD == 'LIMA') THEN               
-   IF (CGETCLOUD /= 'READ') THEN 
-      CALL INIT_AEROSOL_CONCENTRATION(XRHODREF,                              &
-                                      XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
-                                                                  XZZ(:,:,:) )
-   END IF
-   CALL INI_LIMA(XTSTEP,ZDZMIN,NSPLITR, NSPLITG)   ! 1/2 spectral warm cloud
+ELSE IF (CCLOUD == 'LIMA') THEN
+  IF (CGETCLOUD /= 'READ') THEN
+    CALL INIT_AEROSOL_CONCENTRATION(XRHODREF,                              &
+                                    XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END), &
+                                                                XZZ(:,:,:) )
+  END IF
+  CALL INI_LIMA(XTSTEP,ZDZMIN,NSPLITR, NSPLITG)   ! 1/2 spectral warm cloud
 END IF
 !
 IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN
@@ -313,9 +316,9 @@ IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'KHKO') THEN
 ENDIF
 !
 IF (CCLOUD == 'LIMA') THEN
-   IF (CGETCLOUD/='READ') THEN
-      CALL SET_CONC_LIMA(CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END))
-   END IF
+  IF (CGETCLOUD/='READ') THEN
+    CALL SET_CONC_LIMA(CGETCLOUD,XRHODREF,XRT,XSVT(:,:,:,NSV_LIMA_BEG:NSV_LIMA_END))
+  END IF
 END IF
 !
 !
@@ -325,8 +328,8 @@ END IF
 !
 IMI = GET_CURRENT_MODEL_INDEX()
 !IF (CELEC /= 'NONE') THEN
-!  CALL INI_ELEC(IMI,CINIFILE,CLUOUT,XTSTEP,ZDZMIN,NSPLITR, &
-!                XDXX,XDYY,XDZZ,XDZX,XDZY                   )
+!  CALL INI_ELEC(IMI,TPINIFILE,XTSTEP,ZDZMIN,NSPLITR, &
+!                XDXX,XDYY,XDZZ,XDZX,XDZY            )
 !END IF
 !
 !
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index ce192d4340326112ec57c0ee19f7d7d1aa9e24da..62002a731c199d67d89665d367de2054bcd26f83 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -9,12 +9,11 @@
 !
 INTERFACE
 !
-       SUBROUTINE INI_MODEL_n(KMI,HLUOUT,TPINIFILE)
+       SUBROUTINE INI_MODEL_n(KMI,TPINIFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,          INTENT(IN)   :: KMI       ! Model Index
-CHARACTER(LEN=*), INTENT(IN)   :: HLUOUT    ! name for output-listing of nested models
 TYPE(TFILEDATA),  INTENT(IN)   :: TPINIFILE ! Initial file
 !
 END SUBROUTINE INI_MODEL_n
@@ -23,7 +22,7 @@ END INTERFACE
 !
 END MODULE MODI_INI_MODEL_n
 !     ############################################
-      SUBROUTINE INI_MODEL_n(KMI,HLUOUT,TPINIFILE)
+      SUBROUTINE INI_MODEL_n(KMI,TPINIFILE)
 !     ############################################
 !
 !!****  *INI_MODEL_n* - routine to initialize the nested model _n
@@ -64,7 +63,7 @@ END MODULE MODI_INI_MODEL_n
 !!    INI_CPL.
 !!       - The initialization of the parameters needed for the dynamics
 !!         of the model n is realized in INI_DYNAMICS.
-!!       - Then the initial file (DESFM+LFIFM files) is closed by IO_FILE_CLOSE_ll.
+!!       - Then the initial file (DESFM+LFIFM files) is closed by IO_File_close.
 !!       - The initialization of the parameters needed for the ECMWF radiation
 !!         code is realized in INI_RADIATIONS.
 !!       - The contents of the scalar variables are overwritten by
@@ -75,8 +74,6 @@ END MODULE MODI_INI_MODEL_n
 !!
 !!    EXTERNAL
 !!    --------
-!!      FMREAD      : to read a LFIFM file
-!!      FMFREE      : to release a logical unit number
 !!      SET_DIM     : to initialize dimensions
 !!      SET_GRID    : to initialize grid
 !!      METRICS     : to compute metric coefficients
@@ -129,10 +126,10 @@ END MODULE MODI_INI_MODEL_n
 !!      Module MODD_CH_MNHC_n   : contains the control parameters for chemistry
 !!      Module MODD_DEEP_CONVECTION_n: contains declaration of the variables of
 !!                                     the deep convection scheme
-!!        
-!!        
-!!        
-!!        
+!!
+!!
+!!
+!!
 !!      Module MODN_CONF_n     : contains declaration of namelist NAM_CONFn and 
 !!                             uses module MODD_CONF_n (configuration variables)
 !!      Module MODN_LUNIT_n    : contains declaration of namelist NAM_LUNITn and
@@ -151,7 +148,7 @@ END MODULE MODI_INI_MODEL_n
 !!    REFERENCE
 !!    ---------
 !!      Book2 of documentation (routine INI_MODEL_n)
-!!      
+!!
 !!
 !!    AUTHOR
 !!    ------
@@ -278,6 +275,16 @@ END MODULE MODI_INI_MODEL_n
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!                   V. Vionnet : 18/07/2017 : add blowing snow scheme 
 !!                   01/18 J.Colin Add DRAG 
+!  P. Wautelet 29/01/2019: bug: add missing zero-size allocations
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
+!  P. Wautelet 13/02/2019: initialize XALBUV even if no radiation (needed in CH_INTERP_JVALUES)
+!  P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments of READ_FIELD
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 14/02/2019: remove HINIFILE dummy argument from INI_RADIATIONS_ECMWF/ECRAD
+!!                   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 14/03/2019: correct ZWS when variable not present in file (set to XZWS_DEFAULT)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -289,10 +296,10 @@ END MODULE MODI_INI_MODEL_n
 !
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_FM, ONLY: IO_FILE_OPEN_ll
-USE MODE_FMREAD
+USE MODE_IO
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
 USE MODE_GATHER_ll
 USE MODE_MSG
 USE MODE_TYPE_ZDIFFU
@@ -331,7 +338,7 @@ USE MODD_DIM_n
 USE MODD_BUDGET
 USE MODD_RADIATIONS_n
 USE MODD_SHADOWS_n
-USE MODD_PARAM_RAD_n,   ONLY : CLW, CAER, CAOP     
+USE MODD_PARAM_RAD_n,   ONLY : CLW, CAER, CAOP
 USE MODD_VAR_ll,        ONLY : IP
 !
 USE MODD_STAND_ATM,     ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM
@@ -364,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
@@ -433,7 +441,7 @@ USE MODD_ADVFRC_n
 USE MODD_RELFRC_n
 USE MODD_2D_FRC
 USE MODD_IO_SURF_MNH, ONLY : IO_SURF_MNH_MODEL
-USE MODD_IO_ll,       ONLY : CIO_DIR,TFILEDATA,TFILE_DUMMY,TFILE_FIRST,TFILE_LAST
+USE MODD_IO,       ONLY: CIO_DIR, TFILEDATA, TFILE_DUMMY, TFILE_FIRST, TFILE_LAST
 !
 USE MODD_CH_PRODLOSSTOT_n
 USE MODI_CH_INIT_PRODLOSSTOT_n
@@ -454,11 +462,12 @@ IMPLICIT NONE
 !
 !
 INTEGER,          INTENT(IN)   :: KMI       ! Model Index
-CHARACTER(LEN=*), INTENT(IN)   :: HLUOUT    ! name for output-listing of nested models
 TYPE(TFILEDATA),  INTENT(IN)   :: TPINIFILE ! Initial file
 !
 !*       0.2   declarations of local variables
 !
+REAL, PARAMETER :: NALBUV_DEFAULT = 0.01 ! Arbitrary low value for XALBUV
+!
 INTEGER             :: JSV     ! Loop index
 INTEGER             :: IRESP   ! Return code of FM routines
 INTEGER             :: ILUOUT  ! Logical unit number of output-listing
@@ -526,6 +535,7 @@ REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM
 REAL, DIMENSION(:,:,:),   POINTER ::  DPTR_XZZ
 REAL, DIMENSION(:,:,:), POINTER ::   DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM
 REAL, DIMENSION(:,:,:), POINTER ::   DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS
+REAL, DIMENSION(:,:),   POINTER ::   DPTR_XLSZWSM,DPTR_XLSZWSS
 !
 INTEGER                         ::  IIB,IJB,IIE,IJE,IDIMX,IDIMY,IMI
 !
@@ -555,11 +565,11 @@ ILUOUT = TLUOUT%NLU
 !*       2.1  Read number of forcing fields
 !
 IF (LFORCING) THEN ! Retrieve the number of time-dependent forcings.
-  CALL IO_READ_FIELD(TPINIFILE,'FRC',NFRC,IRESP)
+  CALL IO_Field_read(TPINIFILE,'FRC',NFRC,IRESP)
   IF ( (IRESP /= 0) .OR. (NFRC <=0) ) THEN
     WRITE(ILUOUT,'(A/A)') &
      "INI_MODEL_n ERROR: you want to read forcing variables from FMfile", &
-     "                   but no fields have been found by IO_READ_FIELD"
+     "                   but no fields have been found by IO_Field_read"
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
   END IF
@@ -568,11 +578,11 @@ END IF
 ! Modif PP for time evolving adv forcing
   IF ( L2D_ADV_FRC ) THEN ! Retrieve the number of time-dependent forcings.
     WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER ADV_FORCING"
-    CALL IO_READ_FIELD(TPINIFILE,'NADVFRC1',NADVFRC,IRESP)
+    CALL IO_Field_read(TPINIFILE,'NADVFRC1',NADVFRC,IRESP)
     IF ( (IRESP /= 0) .OR. (NADVFRC <=0) ) THEN
       WRITE(ILUOUT,'(A/A)') &
       "INI_MODELn ERROR: you want to read forcing ADV variables from FMfile", &
-      "                   but no fields have been found by IO_READ_FIELD"
+      "                   but no fields have been found by IO_Field_read"
     !callabortstop
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
     END IF
@@ -581,11 +591,11 @@ END IF
 !
 IF ( L2D_REL_FRC ) THEN ! Retrieve the number of time-dependent forcings.
     WRITE(ILUOUT,FMT=*) "INI_MODEL_n ENTER REL_FORCING"
-    CALL IO_READ_FIELD(TPINIFILE,'NRELFRC1',NRELFRC,IRESP)
+    CALL IO_Field_read(TPINIFILE,'NRELFRC1',NRELFRC,IRESP)
     IF ( (IRESP /= 0) .OR. (NRELFRC <=0) ) THEN
       WRITE(ILUOUT,'(A/A)') &
       "INI_MODELn ERROR: you want to read forcing REL variables from FMfile", &
-      "                   but no fields have been found by IO_READ_FIELD"
+      "                   but no fields have been found by IO_Field_read"
     !callabortstop
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_MODEL_n','')
     END IF
@@ -596,8 +606,8 @@ END IF
 IKU=NKMAX+2*JPVEXT
 !
 ALLOCATE(XZHAT(IKU))
-CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT)
-CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP)
+CALL IO_Field_read(TPINIFILE,'ZHAT',XZHAT)
+CALL IO_Field_read(TPINIFILE,'ZTOP',XZTOP)
 IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN
   WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR: you want to use vertical relaxation"
   WRITE(ILUOUT,FMT=*) "                  but bottom of layer XALZBOT(",XALZBOT,")"
@@ -692,8 +702,10 @@ IF (LMEAN_FIELD) THEN
   ALLOCATE(XTHM_MEAN(IIU,IJU,IKU))     ; XTHM_MEAN = 0.0
   ALLOCATE(XTEMPM_MEAN(IIU,IJU,IKU))   ; XTEMPM_MEAN = 0.0
   IF (CTURB/='NONE') THEN
-     ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU))    
-     XTKEM_MEAN = 0.0
+    ALLOCATE(XTKEM_MEAN(IIU,IJU,IKU))
+    XTKEM_MEAN = 0.0
+  ELSE
+    ALLOCATE(XTKEM_MEAN(0,0,0))
   END IF
   ALLOCATE(XPABSM_MEAN(IIU,IJU,IKU))   ; XPABSM_MEAN = 0.0
 !
@@ -710,10 +722,35 @@ IF (LMEAN_FIELD) THEN
   ALLOCATE(XTHM_MAX(IIU,IJU,IKU))     ; XTHM_MAX = 0.0
   ALLOCATE(XTEMPM_MAX(IIU,IJU,IKU))   ; XTEMPM_MAX = 0.0
   IF (CTURB/='NONE') THEN
-     ALLOCATE(XTKEM_MAX(IIU,IJU,IKU))    
-     XTKEM_MAX = 0.0
+    ALLOCATE(XTKEM_MAX(IIU,IJU,IKU))
+    XTKEM_MAX = 0.0
+  ELSE
+    ALLOCATE(XTKEM_MAX(0,0,0))
   END IF
   ALLOCATE(XPABSM_MAX(IIU,IJU,IKU))   ; XPABSM_MAX = 0.0
+ELSE
+  ALLOCATE(XUM_MEAN(0,0,0))
+  ALLOCATE(XVM_MEAN(0,0,0))
+  ALLOCATE(XWM_MEAN(0,0,0))
+  ALLOCATE(XTHM_MEAN(0,0,0))
+  ALLOCATE(XTEMPM_MEAN(0,0,0))
+  ALLOCATE(XTKEM_MEAN(0,0,0))
+  ALLOCATE(XPABSM_MEAN(0,0,0))
+!
+  ALLOCATE(XU2_MEAN(0,0,0))
+  ALLOCATE(XV2_MEAN(0,0,0))
+  ALLOCATE(XW2_MEAN(0,0,0))
+  ALLOCATE(XTH2_MEAN(0,0,0))
+  ALLOCATE(XTEMP2_MEAN(0,0,0))
+  ALLOCATE(XPABS2_MEAN(0,0,0))
+!
+  ALLOCATE(XUM_MAX(0,0,0))
+  ALLOCATE(XVM_MAX(0,0,0))
+  ALLOCATE(XWM_MAX(0,0,0))
+  ALLOCATE(XTHM_MAX(0,0,0))
+  ALLOCATE(XTEMPM_MAX(0,0,0))
+  ALLOCATE(XTKEM_MAX(0,0,0))
+  ALLOCATE(XPABSM_MAX(0,0,0))
 END IF
 !
 IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
@@ -731,6 +768,13 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
     XDVM  = 0.0
     XDWM  = 0.0
   END IF
+ELSE
+  ALLOCATE(XUM(0,0,0))
+  ALLOCATE(XVM(0,0,0))
+  ALLOCATE(XWM(0,0,0))
+  ALLOCATE(XDUM(0,0,0))
+  ALLOCATE(XDVM(0,0,0))
+  ALLOCATE(XDWM(0,0,0))
 END IF
 !
 ALLOCATE(XUT(IIU,IJU,IKU))      ; XUT  = 0.0
@@ -760,6 +804,7 @@ IF (CTURB /= 'NONE') THEN
 ELSE
   ALLOCATE(XTKET(0,0,0))
   ALLOCATE(XRTKES(0,0,0))
+  ALLOCATE(XRTKEMS(0,0,0))
   ALLOCATE(XWTHVMF(0,0,0))
   ALLOCATE(XDYP(0,0,0))
   ALLOCATE(XTHP(0,0,0))
@@ -795,20 +840,22 @@ END IF
 !
 IF (NRR>1) THEN
   ALLOCATE(XCLDFR(IIU,IJU,IKU))
+  ALLOCATE(XRAINFR(IIU,IJU,IKU))
 ELSE
   ALLOCATE(XCLDFR(0,0,0))
+  ALLOCATE(XRAINFR(0,0,0))
 END IF
 !
 ALLOCATE(XSVT(IIU,IJU,IKU,NSV)) ;     XSVT  = 0.
 ALLOCATE(XRSVS(IIU,IJU,IKU,NSV));     XRSVS = 0.
 ALLOCATE(XRSVS_CLD(IIU,IJU,IKU,NSV)); XRSVS_CLD = 0.0
+ALLOCATE(XZWS(IIU,IJU)) ;             XZWS(:,:) = XZWS_DEFAULT
 !
 IF (LPASPOL) THEN
   ALLOCATE( XATC(IIU,IJU,IKU,NSV_PP) )
   XATC = 0.
-             ELSE
+ELSE
   ALLOCATE( XATC(0,0,0,0))
-  XATC = 0.
 END IF
 !
 IF(LBLOWSNOW) THEN
@@ -856,6 +903,8 @@ ALLOCATE(XDZZ(IIU,IJU,IKU))
 !
 IF (KMI == 1) THEN
   ALLOCATE(XRHODREFZ(IKU),XTHVREFZ(IKU))
+ELSE
+  !Do not allocate XRHODREFZ and XTHVREFZ because they are the same on all grids (not 'n' variables)
 END IF
 ALLOCATE(XRHODREF(IIU,IJU,IKU))
 ALLOCATE(XTHVREF(IIU,IJU,IKU))
@@ -891,7 +940,7 @@ CALL GET_DIM_EXT_ll('Y',IIY,IJY)
 IF (L2D) THEN
   ALLOCATE(XBFY(IIY,IJY,IKU))
 ELSE
-  ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisition of the
+  ALLOCATE(XBFY(IJY,IIY,IKU)) ! transposition needed by the optimisation of the
                               ! FFT solver
 END IF
 CALL GET_DIM_EXT_ll('B',IIU_B,IJU_B)
@@ -943,6 +992,7 @@ IF ( NRR > 0 ) THEN
 ELSE
   ALLOCATE(XLSRVM(0,0,0))
 END IF
+ALLOCATE(XLSZWSM(IIU,IJU)) ; XLSZWSM = -1.
 !
 !  lbc part
 !
@@ -1068,9 +1118,7 @@ ELSE                                   ! 3D case
              " Local domain to small for relaxation NRIMX,IDIMX ", &
              NRIMX,IDIMX ,&
              " change relaxation parameters or number of processors "
-        !callabortstop
-        CALL ABORT
-        STOP    
+        call Print_msg(NVERB_FATAL,'GEN','INI_MODEL_n','')
      END IF
   END IF
   IF ( CLBCY(1) /= 'CYCL' ) THEN
@@ -1080,9 +1128,7 @@ ELSE                                   ! 3D case
              " Local domain to small for relaxation NRIMY,IDIMY ", &
              NRIMY,IDIMY ,&
              " change relaxation parameters or number of processors "
-        !callabortstop
-        CALL ABORT
-        STOP    
+        call Print_msg(NVERB_FATAL,'GEN','INI_MODEL_n','')
      END IF
   END IF
 IF ( LHORELAX_UVWTH ) THEN
@@ -1194,6 +1240,23 @@ IF ( KMI > 1 ) THEN
   ALLOCATE(   NKLIN_LBXW(SIZE(XLBXWM,1),SIZE(XLBXWM,2),SIZE(XLBXWM,3)))
   ALLOCATE(XCOEFLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3)))
   ALLOCATE(   NKLIN_LBYW(SIZE(XLBYWM,1),SIZE(XLBYWM,2),SIZE(XLBYWM,3)))
+ELSE
+  ALLOCATE(XCOEFLIN_LBXM(0,0,0))
+  ALLOCATE(   NKLIN_LBXM(0,0,0))
+  ALLOCATE(XCOEFLIN_LBYM(0,0,0))
+  ALLOCATE(   NKLIN_LBYM(0,0,0))
+  ALLOCATE(XCOEFLIN_LBXU(0,0,0))
+  ALLOCATE(   NKLIN_LBXU(0,0,0))
+  ALLOCATE(XCOEFLIN_LBYU(0,0,0))
+  ALLOCATE(   NKLIN_LBYU(0,0,0))
+  ALLOCATE(XCOEFLIN_LBXV(0,0,0))
+  ALLOCATE(   NKLIN_LBXV(0,0,0))
+  ALLOCATE(XCOEFLIN_LBYV(0,0,0))
+  ALLOCATE(   NKLIN_LBYV(0,0,0))
+  ALLOCATE(XCOEFLIN_LBXW(0,0,0))
+  ALLOCATE(   NKLIN_LBXW(0,0,0))
+  ALLOCATE(XCOEFLIN_LBYW(0,0,0))
+  ALLOCATE(   NKLIN_LBYW(0,0,0))
 END IF
 !
 !  allocation of the LS fields for vertical relaxation and numerical diffusion
@@ -1204,6 +1267,7 @@ IF( .NOT. LSTEADYLS )  THEN
   ALLOCATE(XLSWS(SIZE(XLSWM,1),SIZE(XLSWM,2),SIZE(XLSWM,3)))
   ALLOCATE(XLSTHS(SIZE(XLSTHM,1),SIZE(XLSTHM,2),SIZE(XLSTHM,3)))
   ALLOCATE(XLSRVS(SIZE(XLSRVM,1),SIZE(XLSRVM,2),SIZE(XLSRVM,3)))
+  ALLOCATE(XLSZWSS(SIZE(XLSZWSM,1),SIZE(XLSZWSM,2)))
 !
 ELSE
 !
@@ -1212,6 +1276,7 @@ ELSE
   ALLOCATE(XLSWS(0,0,0))
   ALLOCATE(XLSTHS(0,0,0))
   ALLOCATE(XLSRVS(0,0,0))
+  ALLOCATE(XLSZWSS(0,0))
 !
 END IF
 !  allocation of the LB fields for horizontal relaxation and Lateral Boundaries
@@ -1257,11 +1322,10 @@ END IF
 ! Initialization of SW bands
 NSWB_OLD = 6 ! Number of bands in ECMWF original scheme (from Fouquart et Bonnel (1980))
              ! then modified through INI_RADIATIONS_ECMWF but remains equal to 6 practically
-             
 IF (CRAD == 'ECRA') THEN
-    NSWB_MNH = 14  
+    NSWB_MNH = 14
 ELSE
-    NSWB_MNH = NSWB_OLD  
+    NSWB_MNH = NSWB_OLD
 END IF
 
 NLWB_MNH = 16 ! For XEMIS initialization (should be spectral in the future)
@@ -1272,6 +1336,7 @@ ALLOCATE(XLW_BANDS (NLWB_MNH))
 ALLOCATE(XZENITH   (IIU,IJU))
 ALLOCATE(XAZIM     (IIU,IJU))
 ALLOCATE(XALBUV    (IIU,IJU))
+XALBUV(:,:) = NALBUV_DEFAULT !Set to an arbitrary low value (XALBUV is needed in CH_INTERP_JVALUES even if no radiation)
 ALLOCATE(XDIRSRFSWD(IIU,IJU,NSWB_MNH))
 ALLOCATE(XSCAFLASWD(IIU,IJU,NSWB_MNH))
 ALLOCATE(XFLALWD   (IIU,IJU))
@@ -1373,9 +1438,25 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
     ALLOCATE(NCLBASCONV(0,0))
   END IF
 ELSE
+  ALLOCATE(NCOUNTCONV(0,0))
+  ALLOCATE(XDTHCONV(0,0,0))
+  ALLOCATE(XDRVCONV(0,0,0))
+  ALLOCATE(XDRCCONV(0,0,0))
+  ALLOCATE(XDRICONV(0,0,0))
   ALLOCATE(XPRCONV(0,0))
   ALLOCATE(XPACCONV(0,0))
   ALLOCATE(XPRSCONV(0,0))
+  ALLOCATE(XIC_RATE(0,0))
+  ALLOCATE(XCG_RATE(0,0))
+  ALLOCATE(XIC_TOTAL_NUMBER(0,0))
+  ALLOCATE(XCG_TOTAL_NUMBER(0,0))
+  ALLOCATE(XUMFCONV(0,0,0))
+  ALLOCATE(XDMFCONV(0,0,0))
+  ALLOCATE(XPRLFLXCONV(0,0,0))
+  ALLOCATE(XPRSFLXCONV(0,0,0))
+  ALLOCATE(XCAPE(0,0))
+  ALLOCATE(NCLTOPCONV(0,0))
+  ALLOCATE(NCLBASCONV(0,0))
 END IF
 !
 IF ((CDCONV == 'KAFR' .OR. CSCONV == 'KAFR') &
@@ -1416,7 +1497,7 @@ IF (KMI == 1) THEN
     ALLOCATE(XGYTHFRC(IKU,NFRC))
     ALLOCATE(XPGROUNDFRC(NFRC))
     ALLOCATE(XTENDUFRC(IKU,NFRC))
-    ALLOCATE(XTENDVFRC(IKU,NFRC))    
+    ALLOCATE(XTENDVFRC(IKU,NFRC))
   ELSE
     ALLOCATE(TDTFRC(0))
     ALLOCATE(XUFRC(0,0))
@@ -1441,6 +1522,8 @@ IF (KMI == 1) THEN
     ALLOCATE(XUFRC_PAST(0,0,0))
     ALLOCATE(XVFRC_PAST(0,0,0))
   END IF
+ELSE
+  !Do not allocate because they are the same on all grids (not 'n' variables)
 END IF
 ! ----------------------------------------------------------------------
 !
@@ -1471,25 +1554,31 @@ ENDIF
 !*      4.11 BIS: Eddy fluxes allocation
 !
 IF ( LTH_FLX ) THEN
-   ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0.
-   ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0.
-   IF (KMI /= 1) THEN
-      ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU))
-      XRTHS_EDDY_FLUX = 0.
-   ENDIF
+  ALLOCATE(XVTH_FLUX_M(IIU,IJU,IKU)) ; XVTH_FLUX_M = 0.
+  ALLOCATE(XWTH_FLUX_M(IIU,IJU,IKU)) ; XWTH_FLUX_M = 0.
+  IF (KMI /= 1) THEN
+    ALLOCATE(XRTHS_EDDY_FLUX(IIU,IJU,IKU))
+    XRTHS_EDDY_FLUX = 0.
+  ELSE
+    ALLOCATE(XRTHS_EDDY_FLUX(0,0,0))
+  ENDIF
 ELSE
-   ALLOCATE(XVTH_FLUX_M(0,0,0)) ; XVTH_FLUX_M = 0.
-   ALLOCATE(XWTH_FLUX_M(0,0,0)) ; XWTH_FLUX_M = 0.
+  ALLOCATE(XVTH_FLUX_M(0,0,0))
+  ALLOCATE(XWTH_FLUX_M(0,0,0))
+  ALLOCATE(XRTHS_EDDY_FLUX(0,0,0))
 END IF
 !
 IF ( LUV_FLX) THEN
-   ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M  = 0.
-   IF (KMI /= 1) THEN
-      ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU))
-      XRVS_EDDY_FLUX = 0.
-   ENDIF
+  ALLOCATE(XVU_FLUX_M(IIU,IJU,IKU)) ; XVU_FLUX_M  = 0.
+  IF (KMI /= 1) THEN
+    ALLOCATE(XRVS_EDDY_FLUX(IIU,IJU,IKU))
+    XRVS_EDDY_FLUX = 0.
+  ELSE
+    ALLOCATE(XRVS_EDDY_FLUX(0,0,0))
+  ENDIF
 ELSE
-   ALLOCATE(XVU_FLUX_M(0,0,0)) ; XVU_FLUX_M  = 0.
+  ALLOCATE(XVU_FLUX_M(0,0,0))
+  ALLOCATE(XRVS_EDDY_FLUX(0,0,0))
 END IF
 !
 !*      3.11   Module MODD_ICE_CONC_n
@@ -1506,6 +1595,11 @@ IF ( CCLOUD == 'KHKO' .OR. CCLOUD == 'C2R2') THEN
    ALLOCATE(XNACT(IIU,IJU,IKU))
    ALLOCATE(XNPRO(IIU,IJU,IKU))
    ALLOCATE(XSSPRO(IIU,IJU,IKU))
+ELSE
+   ALLOCATE(XSUPSAT(0,0,0))
+   ALLOCATE(XNACT(0,0,0))
+   ALLOCATE(XNPRO(0,0,0))
+   ALLOCATE(XSSPRO(0,0,0))
 END IF
 !
 !*      3.12   Module MODD_TURB_CLOUD
@@ -1532,17 +1626,23 @@ IF (LUSECHAQ.AND.(CPROGRAM == 'DIAG  '.OR.CPROGRAM == 'MESONH')) THEN
     XACPRAQ(:,:,:) = 0.
   ENDIF
 ENDIF
+IF (.NOT.(ASSOCIATED(XPHC))) ALLOCATE(XPHC(0,0,0))
+IF (.NOT.(ASSOCIATED(XPHR))) ALLOCATE(XPHR(0,0,0))
+IF (.NOT.(ASSOCIATED(XACPHR))) ALLOCATE(XACPHR(0,0))
+IF (.NOT.(ASSOCIATED(XACPRAQ))) ALLOCATE(XACPRAQ(0,0,0))
 IF ((LUSECHEM).AND.(CPROGRAM == 'DIAG  ')) THEN
   ALLOCATE(XCHFLX(IIU,IJU,NSV_CHEM))
   XCHFLX(:,:,:) = 0.
+ELSE
+  ALLOCATE(XCHFLX(0,0,0))
 END IF
 !
 !*          3.14 Module MODD_DRAG
 !
 IF (LDRAG) THEN
-      ALLOCATE(XDRAG(IIU,IJU))
+  ALLOCATE(XDRAG(IIU,IJU))
 ELSE
-      ALLOCATE(XDRAG(0,0))
+  ALLOCATE(XDRAG(0,0))
 ENDIF
 !
 !-------------------------------------------------------------------------------
@@ -1575,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,'DIACHRONIC','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
   !
@@ -1642,14 +1742,10 @@ IF ( LUSECHEM .OR. LCHEMDIAG ) THEN
 !
   IF (LORILAM) THEN
     CALL CH_AER_MOD_INIT
-  ELSE
-    IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0))  
-    IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0))  
   ENDIF
-ELSE
-  IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0))
-  IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0))
 END IF
+IF (.NOT.(ASSOCIATED(XMI))) ALLOCATE(XMI(0,0,0,0))
+IF (.NOT.(ASSOCIATED(XSOLORG))) ALLOCATE(XSOLORG(0,0,0,0))
 !
 IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES
 !
@@ -1659,18 +1755,18 @@ IF (CCLOUD=='LIMA') CALL INIT_AEROSOL_PROPERTIES
 !              --------------------------------
 !
 CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-before read_field::XUT",PRECISION)
-CALL READ_FIELD(TPINIFILE,IIU,IJU,IKU,XTSTEP,                                 &
-                CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT,             &
+CALL READ_FIELD(TPINIFILE,IIU,IJU,IKU,                                        &
+                CGETTKET,CGETRVT,CGETRCT,CGETRRT,CGETRIT,CGETCIT,CGETZWS,     &
                 CGETRST,CGETRGT,CGETRHT,CGETSVT,CGETSRCT,CGETSIGS,CGETCLDFR,  &
                 CGETBL_DEPTH,CGETSBL_DEPTH,CGETPHC,CGETPHR,CUVW_ADV_SCHEME,   &
                 CTEMP_SCHEME,NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,&
                 NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                &
                 NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,        &
                 XUM,XVM,XWM,XDUM,XDVM,XDWM,                                   &
-                XUT,XVT,XWT,XTHT,XPABST,XPABSM,XTKET,XRTKEMS,                 &
-                XRT,XSVT,XCIT,XDRYMASST,                                      &
+                XUT,XVT,XWT,XTHT,XPABST,XTKET,XRTKEMS,                        &
+                XRT,XSVT,XZWS,XCIT,XDRYMASST,                                 &
                 XSIGS,XSRCT,XCLDFR,XBL_DEPTH,XSBL_DEPTH,XWTHVMF,XPHC,XPHR,    &
-                XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,                              &
+                XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,                      &
                 XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,                        &
                 XLBXRM,XLBXSVM,                                               &
                 XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,                        &
@@ -1738,9 +1834,9 @@ IF (CELEC == 'NONE') THEN
 !               --------------------------------------
 !
 ELSE
-  CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, HLUOUT, TPINIFILE, &
-                  XTSTEP, XZZ,                              &
-                  XDXX, XDYY, XDZZ, XDZX, XDZY              )
+  CALL INI_ELEC_n(ILUOUT, CELEC, CCLOUD, TPINIFILE, &
+                  XTSTEP, XZZ,                      &
+                  XDXX, XDYY, XDZZ, XDZX, XDZY      )
 !
   WRITE (UNIT=ILUOUT,&
   FMT='(/,"ELECTRIC VARIABLES ARE BETWEEN INDEX",I2," AND ",I2)')&
@@ -1773,10 +1869,10 @@ IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN
                NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,             &
                NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                 &
                NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,         &
-               XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XDRYMASST,                     &
+               XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,XDRYMASST,             &
                XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,          &
                XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,          &
-               XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XDRYMASSS,                     &
+               XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XLSZWSS,XDRYMASSS,             &
                XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,          &
                XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS           )
   CALL MPPDB_CHECK3D(XUT,"INI_MODEL_N-after ini_cpl::XUT",PRECISION)
@@ -1863,11 +1959,13 @@ IF ( KMI > 1) THEN
   DPTR_XLSWM=>XLSWM
   DPTR_XLSTHM=>XLSTHM
   DPTR_XLSRVM=>XLSRVM
+  DPTR_XLSZWSM=>XLSZWSM
   DPTR_XLSUS=>XLSUS
   DPTR_XLSVS=>XLSVS
   DPTR_XLSWS=>XLSWS
   DPTR_XLSTHS=>XLSTHS
   DPTR_XLSRVS=>XLSRVS
+  DPTR_XLSZWSS=>XLSZWSS
   !
   DPTR_NKLIN_LBXU=>NKLIN_LBXU
   DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU
@@ -1892,8 +1990,8 @@ IF ( KMI > 1) THEN
        NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                  &
        DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT,                                &
        LSLEVE,XLEN1,XLEN2,                                   &
-       DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,                      &
-       DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,                      &
+       DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSZWSM,         &
+       DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSZWSS,                      &       
        DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,    &
        DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,    &
        DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,    &
@@ -1913,7 +2011,7 @@ IF ( KMI > 1) THEN
   DPTR_XLBYRM=>XLBYRM
   DPTR_XLBXSVM=>XLBXSVM
   DPTR_XLBYSVM=>XLBYSVM
-  CALL INI_ONE_WAY_n(NDAD(KMI),CLUOUT,XTSTEP,KMI,1,                         &
+  CALL INI_ONE_WAY_n(NDAD(KMI),XTSTEP,KMI,1,                         &
        DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,        &
        DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
        NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),NDTRATIO(KMI),      &
@@ -1986,7 +2084,7 @@ IF (CRAD   /= 'NONE') THEN
   ELSE
     GINIRAD  =.FALSE.
   END IF
-  CALL INI_RADIATIONS(TPINIFILE,HLUOUT,GINIRAD,TDTCUR,TDTEXP,XZZ, &
+  CALL INI_RADIATIONS(TPINIFILE,GINIRAD,TDTCUR,TDTEXP,XZZ, &
                       XDXX, XDYY,                         &
                       XSINDEL,XCOSDEL,XTSIDER,XCORSOL,    &
                       XSLOPANG,XSLOPAZI,                  &
@@ -2047,7 +2145,7 @@ ALLOCATE(ZEMIS  (IIU,IJU,NLWB_MNH))
 ALLOCATE(ZTSRAD (IIU,IJU))
 !
 IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'SURF',CSURF)
+  CALL IO_Field_read(TPINIFILE,'SURF',CSURF)
 ELSE
   CSURF = "EXTE"
 END IF
@@ -2056,8 +2154,8 @@ END IF
 IF (CSURF=='EXTE' .AND. (CPROGRAM=='MESONH' .OR. CPROGRAM=='DIAG  ')) THEN
   ! ouverture du fichier PGD
   IF  ( LEN_TRIM(CINIFILEPGD) > 0 ) THEN
-    CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-    CALL IO_FILE_OPEN_ll(TINIFILEPGD,OPARALLELIO=.FALSE.,KRESP=IRESP)
+    CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+    CALL IO_File_open(TINIFILEPGD,KRESP=IRESP)
     LUNIT_MODEL(KMI)%TINIFILEPGD => TINIFILEPGD
     IF (IRESP/=0) THEN
       WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
@@ -2099,8 +2197,8 @@ ELSE
 END IF
 IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN
   ! ouverture du fichier PGD
-  CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TINIFILEPGD,OPARALLELIO=.FALSE.,KRESP=IRESP)
+  CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TINIFILEPGD,KRESP=IRESP)
   LUNIT_MODEL(KMI)%TINIFILEPGD => TINIFILEPGD
   IF (IRESP/=0) THEN
     WRITE(ILUOUT,FMT=*) "INI_MODEL_n ERROR TO OPEN THE FILE CINIFILEPGD=",CINIFILEPGD
@@ -2157,8 +2255,7 @@ IF (CRAD   == 'ECMW') THEN
       ZBARE(:,:) = 0.
     END IF
 !
-    CALL INI_RADIATIONS_ECMWF (TPINIFILE%CNAME,HLUOUT,                                 &
-                               XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
+    CALL INI_RADIATIONS_ECMWF (XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
                                CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM,   &
                                XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND )
 !
@@ -2184,9 +2281,8 @@ ELSE IF (CRAD   == 'ECRA') THEN
       ZTOWN(:,:) = 0.
       ZBARE(:,:) = 0.
     END IF
-!   
-    CALL INI_RADIATIONS_ECRAD (TPINIFILE%CNAME,HLUOUT,                                 &
-                               XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
+!
+    CALL INI_RADIATIONS_ECRAD (XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
                                CLW,NDLON,NFLEV,NFLUX,NRAD,NSWB_OLD,CAER,NAER,NSTATM,   &
                                XSTATM,ZSEA,ZTOWN,ZBARE,XOZON, XAER,XDST_WL, LSUBG_COND )
 
@@ -2219,7 +2315,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
   IF (NVERB>=10) THEN
     WRITE(ILUOUT,*) 'XDTCONV has been set to : ',XDTCONV
   END IF
-  CALL INI_DEEP_CONVECTION (TPINIFILE,HLUOUT,GINIDCONV,TDTCUR,               &
+  CALL INI_DEEP_CONVECTION (TPINIFILE,GINIDCONV,TDTCUR,                      &
                            NCOUNTCONV,XDTHCONV,XDRVCONV,XDRCCONV,            &
                            XDRICONV,XPRCONV,XPRSCONV,XPACCONV,               &
                            XUMFCONV,XDMFCONV,XMFCONV,XPRLFLXCONV,XPRSFLXCONV,&
@@ -2325,16 +2421,16 @@ CALL INI_AEROSET6
 ! Coupling with ForeFire if resolution is low enough
 !---------------------------------------------------
 IF ( LFOREFIRE .AND. 0.5*(XXHAT(2)-XXHAT(1)+XYHAT(2)-XYHAT(1)) < COUPLINGRES ) THEN
-	FFCOUPLING = .TRUE.	
+  FFCOUPLING = .TRUE.
 ELSE
-	FFCOUPLING = .FALSE.
+  FFCOUPLING = .FALSE.
 ENDIF
 
 ! Initializing the ForeFire variables
 !------------------------------------
 IF ( LFOREFIRE ) THEN
-	CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP &
-		, TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP)
+  CALL INIT_FOREFIRE_n(KMI, ILUOUT, IP &
+        , TDTCUR%TDATE%YEAR, TDTCUR%TDATE%MONTH, TDTCUR%TDATE%DAY, TDTCUR%TIME, XTSTEP)
 END IF
 #endif
 
@@ -2343,19 +2439,19 @@ END IF
 !*      30.   Total production/Loss for chemical species
 !
 IF (LCHEMDIAG)  THEN
-        CALL CH_INIT_PRODLOSSTOT_n(ILUOUT)
-        IF (NEQ_PLT>0) THEN
-                ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT))
-                ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT))
-                XPROD=0.0
-                XLOSS=0.0
-        ELSE
-                ALLOCATE(XPROD(0,0,0,0))
-                ALLOCATE(XLOSS(0,0,0,0))
-        END IF
+  CALL CH_INIT_PRODLOSSTOT_n(ILUOUT)
+  IF (NEQ_PLT>0) THEN
+    ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT))
+    ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT))
+    XPROD=0.0
+    XLOSS=0.0
+  ELSE
+    ALLOCATE(XPROD(0,0,0,0))
+    ALLOCATE(XLOSS(0,0,0,0))
+  END IF
 ELSE
-        ALLOCATE(XPROD(0,0,0,0))
-        ALLOCATE(XLOSS(0,0,0,0))
+  ALLOCATE(XPROD(0,0,0,0))
+  ALLOCATE(XLOSS(0,0,0,0))
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -2363,24 +2459,24 @@ END IF
 !*     31. Extended production/loss terms for chemical species
 !
 IF (LCHEMDIAG) THEN
-        CALL CH_INIT_BUDGET_n(ILUOUT)
-        IF (NEQ_BUDGET>0) THEN
-                ALLOCATE(IINDEX(2,NNONZEROTERMS))
-                ALLOCATE(IIND(NEQ_BUDGET))
-                CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS)
-                ALLOCATE(XTCHEM(NEQ_BUDGET))
-                DO JM=1,NEQ_BUDGET
-                        IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM))
-                        ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM)))
-                        ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM)))
-                END DO
-                DEALLOCATE(IIND)
-                DEALLOCATE(IINDEX)
-        ELSE
-                ALLOCATE(XTCHEM(0))
-        END IF
+  CALL CH_INIT_BUDGET_n(ILUOUT)
+  IF (NEQ_BUDGET>0) THEN
+    ALLOCATE(IINDEX(2,NNONZEROTERMS))
+    ALLOCATE(IIND(NEQ_BUDGET))
+    CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS)
+    ALLOCATE(XTCHEM(NEQ_BUDGET))
+    DO JM=1,NEQ_BUDGET
+      IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM))
+      ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM)))
+      ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM)))
+    END DO
+    DEALLOCATE(IIND)
+    DEALLOCATE(IINDEX)
+  ELSE
+    ALLOCATE(XTCHEM(0))
+  END IF
 ELSE
-        ALLOCATE(XTCHEM(0))
+  ALLOCATE(XTCHEM(0))
 END IF
 
 END SUBROUTINE INI_MODEL_n
diff --git a/src/MNH/ini_one_wayn.f90 b/src/MNH/ini_one_wayn.f90
index 4182d6a2e97b4d4116f158724d6ea4698cb096ec..1b6100cd773e6cd67bc95046afe517991cede48b 100644
--- a/src/MNH/ini_one_wayn.f90
+++ b/src/MNH/ini_one_wayn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -9,7 +9,7 @@
 !
 INTERFACE 
 !
-      SUBROUTINE INI_ONE_WAY_n( KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT,          &
+      SUBROUTINE INI_ONE_WAY_n( KDAD,PTSTEP,KMI,KTCOUNT,                 &
                     PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4,     &
                     PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4,     &
                     KDXRATIO,KDYRATIO,KDTRATIO,                          &
@@ -26,7 +26,6 @@ INTERFACE
 !
 !
 INTEGER,          INTENT(IN)    :: KDAD     !  Number of the DAD model
-CHARACTER (LEN=*),INTENT(IN)    :: HLUOUT   ! name of the output-listing
 REAL,             INTENT(IN)    :: PTSTEP   !  Time step
 INTEGER,          INTENT(IN)    :: KMI      ! model number
 INTEGER,          INTENT(IN)    :: KTCOUNT  !  Temporal loop COUNTer
@@ -72,7 +71,7 @@ END MODULE MODI_INI_ONE_WAY_n
 !
 
 !     ####################################################################
-SUBROUTINE INI_ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT,                 &
+SUBROUTINE INI_ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT,                        &
                     PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4,     &
                     PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4,     &
                     KDXRATIO,KDYRATIO,KDTRATIO,                          &
@@ -140,12 +139,15 @@ SUBROUTINE INI_ONE_WAY_n(KDAD,HLUOUT,PTSTEP,KMI,KTCOUNT,                 &
 !!      J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 
 !!      B.VIE   2016 : LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
 !            ------------
 USE MODE_ll
+use mode_msg
 USE MODE_MODELN_HANDLER
 !
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
@@ -172,7 +174,6 @@ IMPLICIT NONE
 !
 !
 INTEGER,          INTENT(IN)    :: KDAD     !  Number of the DAD model
-CHARACTER (LEN=*),INTENT(IN)    :: HLUOUT   ! name for output-listing
 REAL,             INTENT(IN)    :: PTSTEP   !  Time step
 INTEGER,          INTENT(IN)    :: KMI      ! model number
 INTEGER,          INTENT(IN)    :: KTCOUNT  !  Temporal loop COUNTer
@@ -413,7 +414,7 @@ IF (HCLOUD=="LIMA"  ) THEN
               &ZTSVM(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI)
       ENDDO   
    ELSE
-      IF (NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)) CALL ABORT
+      IF (NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)) call Print_msg(NVERB_FATAL,'GEN','INI_ONE_WAY_n','NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)')
       DO JSV=1,NSV_LIMA_A(KMI)
          CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KDAD)),&
               &ZTSVM(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI)
diff --git a/src/MNH/ini_param_elec.f90 b/src/MNH/ini_param_elec.f90
index fc1adb10d14b353a98963ff295b040fae6fafaa9..ca55b76640b5279dfaa075dbc6a4c3b278d89bba 100644
--- a/src/MNH/ini_param_elec.f90
+++ b/src/MNH/ini_param_elec.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     	##########################
@@ -12,7 +12,7 @@ INTERFACE
         SUBROUTINE INI_PARAM_ELEC (TPINIFILE, HGETSVM, PRHO00,       &
                                    KRR, KND, PFDINFTY, IIU, IJU, IKU )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE ! Initial file
 CHARACTER (LEN=*), DIMENSION(:),INTENT(IN)  :: HGETSVM
@@ -94,15 +94,15 @@ USE MODD_CST
 USE MODD_ELEC_n
 USE MODD_ELEC_DESCR
 USE MODD_ELEC_PARAM
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_NSV,   ONLY : NSV_ELECEND
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_NSV,            ONLY: NSV_ELECEND
 USE MODD_PARAMETERS
 USE MODD_PARAM_ICE
 USE MODD_RAIN_ICE_DESCR
 USE MODD_RAIN_ICE_PARAM
 USE MODD_VAR_ll
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
 !
 USE MODI_MOMG
 USE MODI_RRCOLSS
@@ -348,10 +348,10 @@ XEW(:,:,:) = 0.
 !
 SELECT CASE(HGETSVM(NSV_ELECEND))
   CASE ('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'NI_IAGGS',XNI_IAGGS)
-    CALL IO_READ_FIELD(TPINIFILE,'NI_IDRYG',XNI_IDRYG)
-    CALL IO_READ_FIELD(TPINIFILE,'NI_SDRYG',XNI_SDRYG)
-    CALL IO_READ_FIELD(TPINIFILE,'INDUC_CG',XIND_RATE)
+    CALL IO_Field_read(TPINIFILE,'NI_IAGGS',XNI_IAGGS)
+    CALL IO_Field_read(TPINIFILE,'NI_IDRYG',XNI_IDRYG)
+    CALL IO_Field_read(TPINIFILE,'NI_SDRYG',XNI_SDRYG)
+    CALL IO_Field_read(TPINIFILE,'INDUC_CG',XIND_RATE)
   CASE ('INIT')
     XNI_IAGGS(:,:,:) = 0.
     XNI_IDRYG(:,:,:) = 0.
diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90
index 846d52d7432b983014b773126e9b9c8fcf92220c..88b86c3cb78e86e51534a62597948d8cace76d03 100644
--- a/src/MNH/ini_posprofilern.f90
+++ b/src/MNH/ini_posprofilern.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #########################
@@ -84,7 +84,6 @@ USE MODD_TYPE_PROFILER
 USE MODD_TYPE_DATE
 !
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 182752bc2f77e9ffc68182b3ed941de5d2955ca6..f02cd9c388ba086241e6cf773243827f0ea2b0fa 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -1,15 +1,14 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ########################
       MODULE MODI_INI_PROG_VAR
 !     ########################
 INTERFACE
-      SUBROUTINE INI_PROG_VAR(HLUOUT,PTKE_MX,PSV_MX,HCHEMFILE)
+      SUBROUTINE INI_PROG_VAR(PTKE_MX, PSV_MX, HCHEMFILE)
 !
-CHARACTER(LEN=*),       INTENT(IN)          :: HLUOUT     ! Name of the output-listing
 REAL,DIMENSION(:,:,:),  INTENT(IN)          :: PTKE_MX
 REAL,DIMENSION(:,:,:,:),INTENT(IN)          :: PSV_MX
 CHARACTER(LEN=*),       INTENT(IN),OPTIONAL :: HCHEMFILE  ! Name of the chem file
@@ -17,9 +16,9 @@ END SUBROUTINE INI_PROG_VAR
 END INTERFACE
 END MODULE MODI_INI_PROG_VAR
 !
-!     ########################################################
-      SUBROUTINE INI_PROG_VAR(HLUOUT,PTKE_MX,PSV_MX,HCHEMFILE)
-!     ########################################################
+!     ###################################################
+      SUBROUTINE INI_PROG_VAR(PTKE_MX, PSV_MX, HCHEMFILE)
+!     ###################################################
 !
 !!****  *INI_PROG_VAR* - initialization the prognostic variables not yet 
 !!                       initialized
@@ -45,8 +44,8 @@ END MODULE MODI_INI_PROG_VAR
 !!
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB   : verbosity level for output-listing
-!!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!      Module MODD_LUNIT_n     :  contains logical unit names for all models
+!!         TLUOUT : name of output-listing
 !!      Module MODD_FIELD1    : contains the prognostic fields of model1
 !!         XUM
 !!         XVM
@@ -94,6 +93,8 @@ END MODULE MODI_INI_PROG_VAR
 !!                  Mai 2017 (M. Leriche) read aerosol namelists before call ini_nsv
 !!                  Mai 2017 (M. Leriche) Get wet dep. sv in Meso-NH init file
 !!  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
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -109,7 +110,7 @@ USE MODD_DIM_n
 USE MODD_DUST
 USE MODD_DYN_n
 USE MODD_FIELD_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LSFIELD_n
 USE MODD_LUNIT
 USE MODD_LUNIT_n,          ONLY: TLUOUT
@@ -119,11 +120,10 @@ USE MODD_PARAMETERS
 USE MODD_SALT
 USE MODD_TURB_n
 !
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
-USE MODE_FIELD,            ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll, IO_FILE_OPEN_ll
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
 USE MODE_POS
@@ -140,15 +140,13 @@ IMPLICIT NONE
 !
 !*       0.1   declaration of arguments
 !
-CHARACTER(LEN=*),       INTENT(IN)          :: HLUOUT     ! Name of the output-listing
 REAL,DIMENSION(:,:,:),  INTENT(IN)          :: PTKE_MX
 REAL,DIMENSION(:,:,:,:),INTENT(IN)          :: PSV_MX
 CHARACTER(LEN=*),       INTENT(IN),OPTIONAL :: HCHEMFILE  ! Name of the chem file
 !
 !*       0.2   declaration of local variables
 !
-INTEGER                :: ILUOUT                     !  Logical unit number
-                                                     ! associated with HLUOUT 
+INTEGER                :: ILUOUT
 INTEGER                :: IRESP
 !
 INTEGER                :: IIMAX,IJMAX,IKMAX       !  Dimensions of the chem file
@@ -216,24 +214,24 @@ ALLOCATE(XSVT(0,0,0,0))
 IF(PRESENT(HCHEMFILE)) THEN
   WRITE(ILUOUT,*) 'Routine INI_PROG_VAR: CHEMical species read in ',TRIM(HCHEMFILE)
   ! Read dimensions in chem file and checks with output file
-  CALL IO_FILE_ADD2LIST(TZCHEMFILE,TRIM(HCHEMFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZCHEMFILE)
+  CALL IO_File_add2list(TZCHEMFILE,TRIM(HCHEMFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZCHEMFILE)
   !
   ILUDES = TZCHEMFILE%TDESFILE%NLU
   !
-  CALL IO_READ_FIELD(TZCHEMFILE,'IMAX',IIMAX,IRESP)
+  CALL IO_Field_read(TZCHEMFILE,'IMAX',IIMAX,IRESP)
   IF (IRESP/=0) THEN
    !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','IMAX not found in the CHEM file '//TRIM(HCHEMFILE))
   END IF !IRESP
   !
-  CALL IO_READ_FIELD(TZCHEMFILE,'JMAX',IJMAX,IRESP)
+  CALL IO_Field_read(TZCHEMFILE,'JMAX',IJMAX,IRESP)
   IF (IRESP/=0) THEN
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','JMAX not found in the CHEM file '//TRIM(HCHEMFILE))
   END IF !IRESP
   !
-  CALL IO_READ_FIELD(TZCHEMFILE,'KMAX',IKMAX,IRESP)
+  CALL IO_Field_read(TZCHEMFILE,'KMAX',IKMAX,IRESP)
   IF (IRESP/=0) THEN
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','KMAX not found in the CHEM file '//TRIM(HCHEMFILE))
@@ -287,7 +285,7 @@ IF(PRESENT(HCHEMFILE)) THEN
       TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+      CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE
         XSVT(:,:,:,JSV) = 0.
@@ -314,7 +312,7 @@ IF(PRESENT(HCHEMFILE)) THEN
       TZFIELD%CMNHNAME   = TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+      CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
         LORILAM=.FALSE.
@@ -339,7 +337,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_AER(IMI)=.FALSE.
@@ -368,7 +366,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
         END IF !IRESP
@@ -383,7 +381,7 @@ IF(PRESENT(HCHEMFILE)) THEN
           TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+          CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
           IF (IRESP/=0) THEN
             CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//&
                                              ' not found in the CHEM file '//TRIM(HCHEMFILE))
@@ -413,7 +411,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_DST(IMI)=.FALSE.
@@ -442,7 +440,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
         END IF !IRESP
@@ -457,7 +455,7 @@ IF(PRESENT(HCHEMFILE)) THEN
           TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+          CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
           IF (IRESP/=0) THEN
             CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
           END IF !IRESP
@@ -487,7 +485,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_SLT(IMI)=.FALSE.
@@ -496,7 +494,7 @@ IF(PRESENT(HCHEMFILE)) THEN
     ENDIF ! ldepos_slt 
   END IF  ! LSALT
   !
-  CALL IO_FILE_CLOSE_ll(TZCHEMFILE)
+  CALL IO_File_close(TZCHEMFILE)
   !
 ELSE ! HCHEMFILE
   IF (NSV >=1) THEN
diff --git a/src/MNH/ini_radiations.f90 b/src/MNH/ini_radiations.f90
index 698a17878f373d6c7eea2b96edf416ce7e7d3e80..640467fbb885d614b658c43189eca2c4d55901ad 100644
--- a/src/MNH/ini_radiations.f90
+++ b/src/MNH/ini_radiations.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     ##########################
@@ -9,7 +9,7 @@
 !
 INTERFACE
 !
-    SUBROUTINE INI_RADIATIONS(TPINIFILE,HLUOUT,OINIRAD,TPDTCUR,TPDTEXP,&
+    SUBROUTINE INI_RADIATIONS(TPINIFILE,OINIRAD,TPDTCUR,TPDTEXP,       &
          PZZ,PDXX,PDYY,                                                &
          PSINDEL,PCOSDEL,PTSIDER,PCORSOL,PSLOPANG,PSLOPAZI,            &
          PDTHRAD,PDIRFLASWD,PSCAFLASWD,                                &
@@ -18,12 +18,10 @@ INTERFACE
          PRADEFF,PSWU,PSWD,PLWU,PLWD,PDTHRADSW,PDTHRADLW               )
 !
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_IO_ll,       ONLY : TFILEDATA
+USE MODD_IO,       ONLY : TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
-CHARACTER (LEN=*),      INTENT(IN)  :: HLUOUT    ! name for output-listing
-                                                 !  of nested models
 LOGICAL,                INTENT(IN)  :: OINIRAD   ! switch to initialize or read
                                                  ! the radiation informations
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR    ! Current date and time
@@ -69,7 +67,7 @@ END MODULE MODI_INI_RADIATIONS
 !
 !
 !   ####################################################################
-    SUBROUTINE INI_RADIATIONS(TPINIFILE,HLUOUT,OINIRAD,TPDTCUR,TPDTEXP,&
+    SUBROUTINE INI_RADIATIONS(TPINIFILE,OINIRAD,TPDTCUR,TPDTEXP,       &
          PZZ,PDXX,PDYY,                                                &
          PSINDEL,PCOSDEL,PTSIDER,PCORSOL,PSLOPANG,PSLOPAZI,            &
          PDTHRAD,PDIRFLASWD,PSCAFLASWD,                                &
@@ -109,6 +107,7 @@ END MODULE MODI_INI_RADIATIONS
 !!                               TDTEXP to  have a perpetual day ie. the diurnal cycle is retained 
 !!                               but the day stays the same during the whole run 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -116,16 +115,16 @@ END MODULE MODI_INI_RADIATIONS
 !
 !MESO-NH modules
 !
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_CST,         ONLY : XPI
-USE MODD_CONF,        ONLY : LFLAT, L2D
-USE MODD_IO_ll,       ONLY : TFILEDATA
+USE MODD_ARGSLIST_ll,   ONLY: LIST_ll
+USE MODD_CST,           ONLY: XPI
+USE MODD_CONF,          ONLY: LFLAT, L2D
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LES
-USE MODD_PARAMETERS,  ONLY : JPVEXT
-USE MODD_PARAM_RAD_n, ONLY : LFIX_DAT
+USE MODD_PARAMETERS,    ONLY: JPVEXT
+USE MODD_PARAM_RAD_n,   ONLY: LFIX_DAT
 USE MODD_TYPE_DATE
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 !
 USE MODI_SHUMAN
@@ -135,8 +134,6 @@ IMPLICIT NONE
 !*       0.1   Declarations of dummy arguments :
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
-CHARACTER (LEN=*),      INTENT(IN)  :: HLUOUT    ! name for output-listing
-                                                 !  of nested models
 LOGICAL,                INTENT(IN)  :: OINIRAD   ! switch to initialize or read
                                                  ! the radiation informations
 TYPE (DATE_TIME),       INTENT(IN) :: TPDTCUR    ! Current date and time
@@ -311,16 +308,16 @@ IF ( OINIRAD ) THEN
   PDIRSRFSWD(:,:,:)= 0.
   KCLEARCOL_TM1    = 0
 ELSE
-  CALL IO_READ_FIELD(TPINIFILE,'DTRAD_FULL',  TPDTRAD_FULL)
-  CALL IO_READ_FIELD(TPINIFILE,'DTRAD_CLLY',  TPDTRAD_CLONLY)
-  CALL IO_READ_FIELD(TPINIFILE,'DTHRAD',      PDTHRAD)
-  CALL IO_READ_FIELD(TPINIFILE,'FLALWD',      PFLALWD)
-  CALL IO_READ_FIELD(TPINIFILE,'DIRFLASWD',   PDIRFLASWD)
-  CALL IO_READ_FIELD(TPINIFILE,'SCAFLASWD',   PSCAFLASWD)
-  CALL IO_READ_FIELD(TPINIFILE,'DIRSRFSWD',   PDIRSRFSWD)
-  CALL IO_READ_FIELD(TPINIFILE,'CLEARCOL_TM1',KCLEARCOL_TM1)
-  CALL IO_READ_FIELD(TPINIFILE,'ZENITH',      PZENITH)
-  CALL IO_READ_FIELD(TPINIFILE,'AZIM',        PAZIM)
+  CALL IO_Field_read(TPINIFILE,'DTRAD_FULL',  TPDTRAD_FULL)
+  CALL IO_Field_read(TPINIFILE,'DTRAD_CLLY',  TPDTRAD_CLONLY)
+  CALL IO_Field_read(TPINIFILE,'DTHRAD',      PDTHRAD)
+  CALL IO_Field_read(TPINIFILE,'FLALWD',      PFLALWD)
+  CALL IO_Field_read(TPINIFILE,'DIRFLASWD',   PDIRFLASWD)
+  CALL IO_Field_read(TPINIFILE,'SCAFLASWD',   PSCAFLASWD)
+  CALL IO_Field_read(TPINIFILE,'DIRSRFSWD',   PDIRSRFSWD)
+  CALL IO_Field_read(TPINIFILE,'CLEARCOL_TM1',KCLEARCOL_TM1)
+  CALL IO_Field_read(TPINIFILE,'ZENITH',      PZENITH)
+  CALL IO_Field_read(TPINIFILE,'AZIM',        PAZIM)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_radiations_ecmwf.f90 b/src/MNH/ini_radiations_ecmwf.f90
index 6c6b9e9fdedf41505c96e01601fbf599a84a53ed..cf0ba2ebcb1d701e3940dabaae6285ee7447d037 100644
--- a/src/MNH/ini_radiations_ecmwf.f90
+++ b/src/MNH/ini_radiations_ecmwf.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ##########################
@@ -9,16 +9,13 @@
 !
 INTERFACE
 !
-    SUBROUTINE INI_RADIATIONS_ECMWF(HINIFILE,HLUOUT,                      &
-         PZHAT,PPABST,PTHT,PTSRAD,PLAT,PLON,TPDTCUR,TPDTEXP,              &
-         HLW,KDLON,KFLEV,KFLUX,KRAD,KSWB,HAER,KAER,KSTATM,                &
-         PSTATM,PSEA,PTOWN,PBARE,POZON, PAER,PDST_WL, OSUBG_COND                    )
+    SUBROUTINE INI_RADIATIONS_ECMWF(                                  &
+         PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,   &
+         HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB, HAER, KAER, KSTATM,    &
+         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND )
 !
 USE MODD_TYPE_DATE
 !
-CHARACTER (LEN=*),      INTENT(IN)  :: HINIFILE  ! Name of the initial file
-CHARACTER (LEN=*),      INTENT(IN)  :: HLUOUT    ! name for output-listing
-                                                 !  of nested models
 CHARACTER (LEN=*),      INTENT(IN) :: HAER       ! aerosol optical thickness climatology
 CHARACTER (LEN=4),      INTENT(IN) :: HLW        ! LW scheme used
 !
@@ -60,12 +57,12 @@ END INTERFACE
 END MODULE MODI_INI_RADIATIONS_ECMWF
 !
 !
-!   #######################################################################
-    SUBROUTINE INI_RADIATIONS_ECMWF(HINIFILE,HLUOUT,                      &
-         PZHAT,PPABST,PTHT,PTSRAD,PLAT,PLON,TPDTCUR,TPDTEXP,              &
-         HLW,KDLON,KFLEV,KFLUX,KRAD,KSWB,HAER,KAER,KSTATM,                &
-         PSTATM,PSEA,PTOWN,PBARE,POZON, PAER, PDST_WL,OSUBG_COND                    )
-!   #######################################################################
+!   ###################################################################
+    SUBROUTINE INI_RADIATIONS_ECMWF(                                  &
+         PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,   &
+         HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB, HAER, KAER, KSTATM,    &
+         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND )
+!   ###################################################################
 !
 !!****  *INI_RADIATIONS * - initialisation for ECMWF radiation scheme in the MesoNH framework
 !!
@@ -173,6 +170,8 @@ END MODULE MODI_INI_RADIATIONS_ECMWF
 !!      (V. Masson)          replaces cover fractions by sea/town/bare soil fractions
 !!      J.Escobar 30/03/2017  : Management of compilation of ECMWF_RAD in REAL*8 with MNH_REAL=R4
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 14/02/2019: remove HINIFILE dummy argument
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -197,7 +196,6 @@ USE MODD_STAND_ATM
 USE MODD_PARAM_RAD_n,  ONLY: LFIX_DAT
 !
 USE MODE_ll
-USE MODE_FM
 !
 USE MODI_INI_RADCONF
 USE MODI_INI_HOR_AERCLIM
@@ -216,9 +214,6 @@ IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
 !
-CHARACTER (LEN=*),      INTENT(IN)  :: HINIFILE  ! Name of the initial file
-CHARACTER (LEN=*),      INTENT(IN)  :: HLUOUT    ! name for output-listing
-                                                 !  of nested models
 CHARACTER (LEN=*),      INTENT(IN) :: HAER       ! aerosol optical thickness climatology
 CHARACTER (LEN=4),      INTENT(IN) :: HLW        ! LW scheme used
 !
diff --git a/src/MNH/ini_radiations_ecrad.f90 b/src/MNH/ini_radiations_ecrad.f90
index f4115e2c50051aef4b45356df3a2be8934278461..6b3fdd2f29a1ccbc12b22ffb546171d5948c1781 100644
--- a/src/MNH/ini_radiations_ecrad.f90
+++ b/src/MNH/ini_radiations_ecrad.f90
@@ -1,29 +1,21 @@
-!MNH_LIC Copyright 1994-2014 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 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 BUG1 2007/06/15 17:47:18
-!-----------------------------------------------------------------
 !     ##########################
       MODULE MODI_INI_RADIATIONS_ECRAD
 !     ##########################
 !
 INTERFACE
 !
-    SUBROUTINE INI_RADIATIONS_ECRAD(HINIFILE,HLUOUT,                      &
-         PZHAT,PPABST,PTHT,PTSRAD,PLAT,PLON,TPDTCUR,TPDTEXP,              &
-         HLW,KDLON,KFLEV,KFLUX,KRAD,KSWB_OLD,HAER,KAER,KSTATM,                &
-         PSTATM,PSEA,PTOWN,PBARE,POZON, PAER,PDST_WL, OSUBG_COND                    )
+    SUBROUTINE INI_RADIATIONS_ECRAD(                                   &
+         PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,    &
+         HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB_OLD, HAER, KAER, KSTATM, &
+         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND  )
 !
 USE MODD_TYPE_DATE
 
-CHARACTER (LEN=*),      INTENT(IN)  :: HINIFILE  ! Name of the initial file
-CHARACTER (LEN=*),      INTENT(IN)  :: HLUOUT    ! name for output-listing
-                                                 !  of nested models
 CHARACTER (LEN=*),      INTENT(IN) :: HAER       ! aerosol optical thickness climatology
 CHARACTER (LEN=4),      INTENT(IN) :: HLW        ! LW scheme used
 !
@@ -65,12 +57,12 @@ END INTERFACE
 END MODULE MODI_INI_RADIATIONS_ECRAD
 !
 !
-!   #######################################################################
-    SUBROUTINE INI_RADIATIONS_ECRAD(HINIFILE,HLUOUT,                      &
-         PZHAT,PPABST,PTHT,PTSRAD,PLAT,PLON,TPDTCUR,TPDTEXP,              &
-         HLW,KDLON,KFLEV,KFLUX,KRAD,KSWB_OLD,HAER,KAER,KSTATM,                &
-         PSTATM,PSEA,PTOWN,PBARE,POZON, PAER,PDST_WL, OSUBG_COND            )
-!   #######################################################################
+!   ####################################################################
+    SUBROUTINE INI_RADIATIONS_ECRAD(                                   &
+         PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,    &
+         HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB_OLD, HAER, KAER, KSTATM, &
+         PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND  )
+!   ####################################################################
 !
 ! INI_RADIATIONS_ECRAD - Initialization of ECRAD code
 !
@@ -92,8 +84,8 @@ END MODULE MODI_INI_RADIATIONS_ECRAD
 ! MODIFICATIONS
 ! -------------
 !
-! TO DO
-
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  P. Wautelet 14/02/2019: remove HINIFILE dummy argument
 !
 !*       0.    DECLARATIONS
 !              ------------
@@ -122,9 +114,6 @@ IMPLICIT NONE
 
 !*       0.1   Declarations of dummy arguments :
 !
-CHARACTER (LEN=*),      INTENT(IN)  :: HINIFILE  ! Name of the initial file
-CHARACTER (LEN=*),      INTENT(IN)  :: HLUOUT    ! name for output-listing
-                                                 !  of nested models                                               
 CHARACTER (LEN=*),      INTENT(IN) :: HAER       ! aerosol optical thickness climatology
 CHARACTER (LEN=4),      INTENT(IN) :: HLW        ! LW scheme used
 !
@@ -164,10 +153,10 @@ LOGICAL, INTENT(IN)  ::   OSUBG_COND ! Switch for sub-grid condensation
 NULOUT = TLUOUT%NLU
 
 ! Initialization of ECMWF still neede because many things intialized through this routine
-CALL INI_RADIATIONS_ECMWF (HINIFILE,HLUOUT,                                           &
-                               PZHAT,PPABST,PTHT,PTSRAD,PLAT,PLON,TPDTCUR,TPDTEXP,    &
-                               HLW,KDLON,KFLEV,KFLUX,KRAD,KSWB_OLD,HAER,KAER,KSTATM,       &
-                               PSTATM,PSEA,PTOWN,PBARE,POZON, PAER,PDST_WL, OSUBG_COND )
+CALL INI_RADIATIONS_ECMWF(                                                               &
+                           PZHAT, PPABST, PTHT, PTSRAD, PLAT, PLON, TPDTCUR, TPDTEXP,    &
+                           HLW, KDLON, KFLEV, KFLUX, KRAD, KSWB_OLD, HAER, KAER, KSTATM, &
+                           PSTATM, PSEA, PTOWN, PBARE, POZON, PAER, PDST_WL, OSUBG_COND  )
 
 ! ECRAD specific variables
 
diff --git a/src/MNH/ini_rain_ice.f90 b/src/MNH/ini_rain_ice.f90
index 530ad47cd653b1c9b7e8aa16f902217c1d2fd3f0..9420cb1e70b58ae82df107fe0ca894915dcb8da9 100644
--- a/src/MNH/ini_rain_ice.f90
+++ b/src/MNH/ini_rain_ice.f90
@@ -107,7 +107,6 @@ END MODULE MODI_INI_RAIN_ICE
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
 USE MODD_CST
 USE MODD_LUNIT
 USE MODD_PARAMETERS
diff --git a/src/MNH/ini_rain_ice_elec.f90 b/src/MNH/ini_rain_ice_elec.f90
index 15721ada47ba4f811d5f9c40c7af037c9e175cb5..d352581f8345e2060623700af764e3be4a43d20a 100644
--- a/src/MNH/ini_rain_ice_elec.f90
+++ b/src/MNH/ini_rain_ice_elec.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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 BUG1 2007/06/15 17:47:18
-!-----------------------------------------------------------------
 !      #############################
        MODULE MODI_INI_RAIN_ICE_ELEC
 !      #############################
@@ -97,7 +92,6 @@ END MODULE MODI_INI_RAIN_ICE_ELEC
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
 USE MODD_CST
 USE MODD_LUNIT
 USE MODD_PARAMETERS
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index a41ba0c466abec963d243764f448d664ae3a4a61..0abca384483c4f456109dc3b57d45dbd7a1a4dfd 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -9,12 +9,11 @@
 !
 INTERFACE
 !
-SUBROUTINE INI_SEG_n(KMI,HLUOUT,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
+SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 INTEGER,                    INTENT(IN)    :: KMI          !Model index
-CHARACTER (LEN=*),          INTENT(OUT)   :: HLUOUT       !Name for output-listing of nested models
 TYPE(TFILEDATA),   POINTER, INTENT(OUT)   :: TPINIFILE    !Initial file
 CHARACTER (LEN=28),         INTENT(OUT)   :: HINIFILEPGD
 REAL,DIMENSION(:),          INTENT(INOUT) :: PTSTEP_ALL   ! Time STEP of ALL models
@@ -29,7 +28,7 @@ END MODULE MODI_INI_SEG_n
 !
 !
 !     #############################################################
-      SUBROUTINE INI_SEG_n(KMI,HLUOUT,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
+      SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
 !     #############################################################
 !
 !!****  *INI_SEG_n * - routine to read and update the descriptor files for 
@@ -74,7 +73,7 @@ END MODULE MODI_INI_SEG_n
 !!      The  name of the initial file is read in EXSEG file.     
 !!         - Default values are supplied for variables in descriptor files
 !!      (by DEFAULT_DESFM).
-!!         - The Initial file (LFIFM + DESFM) is opened by IO_FILE_OPEN_ll.
+!!         - The Initial file (LFIFM + DESFM) is opened by IO_File_open.
 !!         - The descriptor DESFM file is read (by READ_DESFM_n). 
 !!         - The descriptor file EXSEG is read (by READ_EXSEG_n) and coherence
 !!      between the initial file and the description of segment is also checked 
@@ -91,7 +90,7 @@ END MODULE MODI_INI_SEG_n
 !!    EXTERNAL
 !!    --------
 !!      FMATTR        : to associate a logical unit number to a file 
-!!      IO_FILE_OPEN_ll : to open descriptor file or LFI file
+!!      IO_File_open : to open descriptor file or LFI file
 !!      DEFAULT_DESFM1: to set default values
 !!      READ_DESFM_n    : to read a DESFM file 
 !!      READ_EXSEG_n    : to read a EXSEG file
@@ -163,6 +162,8 @@ END MODULE MODI_INI_SEG_n
 !!                       04/2016   add ABORT if CINIFILEPGD is not specified (G.Delautier)
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!                       07/2017   add GBLOWSNOW (V. Vionnet)
+!  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
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -171,7 +172,7 @@ USE MODD_CONF
 USE MODD_CONF_n,           ONLY: CSTORAGE_TYPE
 USE MODN_CONFZ
 USE MODD_DYN
-USE MODD_IO_ll,            ONLY: NVERB_FATAL,NVERB_WARNING,TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_IO,               ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING, TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n,          ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL
 USE MODD_PARAM_n,          ONLY: CSURF
@@ -179,10 +180,10 @@ USE MODD_PARAMETERS
 USE MODD_REF,              ONLY: LBOUSS
 !
 USE MODE_FIELD
-USE MODE_FMREAD
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll, IO_FILE_OPEN_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO,               only: IO_Config_set
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 USE MODE_POS
 !
@@ -199,7 +200,6 @@ IMPLICIT NONE
 !*       0.1   declarations of arguments 
 !
 INTEGER,                    INTENT(IN)    :: KMI          !Model index
-CHARACTER (LEN=*),          INTENT(OUT)   :: HLUOUT       !Name for output-listing of nested models
 TYPE(TFILEDATA),   POINTER, INTENT(OUT)   :: TPINIFILE    !Initial file
 CHARACTER (LEN=28),         INTENT(OUT)   :: HINIFILEPGD
 REAL,DIMENSION(:),          INTENT(INOUT) :: PTSTEP_ALL   ! Time STEP of ALL models
@@ -210,7 +210,7 @@ LOGICAL            :: GFOUND              ! Return code when searching namelist
 CHARACTER (LEN=28) :: YINIFILE                    ! name of initial file
 CHARACTER (LEN=2)  :: YMI                         ! string for model index
 INTEGER            :: ILUOUT                      ! Logical unit number
-                                                  ! associated with CLUOUT 
+                                                  ! associated with TLUOUT 
                                                   !
 INTEGER            :: IRESP,ILUSEG                ! File management variables
 CHARACTER (LEN=5)  :: YCONF                       ! Local variables which have
@@ -259,10 +259,9 @@ TZFILE_DES => NULL()
 !              ---------------------------------------
 !
 WRITE(YMI,'(I2.0)') KMI
-HLUOUT='OUTPUT_LISTING'//ADJUSTL(YMI)
-CALL IO_FILE_ADD2LIST(LUNIT_MODEL(KMI)%TLUOUT,HLUOUT,'OUTPUTLISTING','WRITE')
+CALL IO_File_add2list(LUNIT_MODEL(KMI)%TLUOUT,'OUTPUT_LISTING'//ADJUSTL(YMI),'OUTPUTLISTING','WRITE')
 TLUOUT => LUNIT_MODEL(KMI)%TLUOUT !Necessary because TLUOUT was initially pointing to NULL
-CALL IO_FILE_OPEN_ll(TLUOUT)
+CALL IO_File_open(TLUOUT)
 !
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT
@@ -273,8 +272,8 @@ WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/,  &
             & 50("*"))') KMI
 !
 IF (CPROGRAM=='MESONH') THEN
-  CALL IO_FILE_ADD2LIST(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ')
-  CALL IO_FILE_OPEN_ll(TZFILE_DES)
+  CALL IO_File_add2list(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ')
+  CALL IO_File_open(TZFILE_DES)
 !
 !*       1.3   SPAWNING or SPEC or REAL program case
 !              ---------------------
@@ -282,8 +281,8 @@ IF (CPROGRAM=='MESONH') THEN
 ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  '.OR. CPROGRAM=='SPEC  ') THEN
   YINIFILE    = CINIFILE_n
   HINIFILEPGD = CINIFILEPGD_n
-  CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TPINIFILE)
+  CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TPINIFILE)
   TZFILE_DES => TPINIFILE%TDESFILE
 !
 !*       1.3bis   DIAG program case
@@ -291,8 +290,8 @@ ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  '.OR. CPROGRAM=='SPEC  ') THEN
 ELSE IF (CPROGRAM=='DIAG  ') THEN
   YINIFILE    = CINIFILE_n
   HINIFILEPGD = CINIFILEPGD_n
-  CALL IO_FILE_ADD2LIST(TINIFILE_n,TRIM(YINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TINIFILE_n)
+  CALL IO_File_add2list(TINIFILE_n,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TINIFILE_n)
   TPINIFILE  => TINIFILE_n
   TZFILE_DES => TPINIFILE%TDESFILE
 !   
@@ -335,14 +334,14 @@ IF (CPROGRAM=='MESONH') THEN
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
       CALL POSNAM(ILUSEG,'NAM_CONFIO',GFOUND,ILUOUT)
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFIO)
-      CALL SET_CONFIO_ll()
+      CALL IO_Config_set()
    END IF
   HINIFILEPGD=CINIFILEPGD_n
   YINIFILE=CINIFILE_n
 
-  CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'PREPIDEALCASE','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
   TINIFILE_n => TPINIFILE !Necessary because TINIFILE was initially pointing to NULL
-  CALL IO_FILE_OPEN_ll(TPINIFILE)
+  CALL IO_File_open(TPINIFILE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -385,7 +384,7 @@ END IF
 !
 IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
   IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>9) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'COUPLING',LCOUPLING)
+    CALL IO_Field_read(TPINIFILE,'COUPLING',LCOUPLING)
     IF (LCOUPLING) THEN
       WRITE(ILUOUT,*) 'Error with the initial file'
       WRITE(ILUOUT,*) 'The file',YINIFILE,' was created with LCOUPLING=.TRUE.'
@@ -398,7 +397,7 @@ IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
 END IF
 !
 ! Read the storage type
-  CALL IO_READ_FIELD(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
+  CALL IO_Field_read(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
   IF (IRESP /= 0) THEN
     WRITE(ILUOUT,FMT=9002) 'STORAGE_TYPE',IRESP
 !callabortstop
@@ -406,18 +405,18 @@ END IF
   END IF
 IF (KMI == 1) THEN 
 ! Read the geometry kind 
-  CALL IO_READ_FIELD(TPINIFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_read(TPINIFILE,'CARTESIAN',LCARTESIAN)
 ! Read the thinshell approximation
-  CALL IO_READ_FIELD(TPINIFILE,'THINSHELL',LTHINSHELL)
+  CALL IO_Field_read(TPINIFILE,'THINSHELL',LTHINSHELL)
 !
   IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-   CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D,IRESP)
+   CALL IO_Field_read(TPINIFILE,'L1D',L1D,IRESP)
    IF (IRESP/=0)  L1D=.FALSE.
 !
-   CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D,IRESP)
+   CALL IO_Field_read(TPINIFILE,'L2D',L2D,IRESP)
    IF (IRESP/=0)  L2D=.FALSE.
 !
-   CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK,IRESP)
+   CALL IO_Field_read(TPINIFILE,'PACK',LPACK,IRESP)
    IF (IRESP/=0) LPACK=.TRUE.
   ELSE
    L1D=.FALSE.
@@ -425,7 +424,7 @@ IF (KMI == 1) THEN
    LPACK=.TRUE.
   END IF
   IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=10) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-   CALL IO_READ_FIELD(TPINIFILE,'LBOUSS',LBOUSS)
+   CALL IO_Field_read(TPINIFILE,'LBOUSS',LBOUSS)
   END IF
 !
 END IF
@@ -468,7 +467,7 @@ END IF
 !*      7.    CLOSE  FILES
 !             ------------
 !
-IF (CPROGRAM=='MESONH') CALL IO_FILE_CLOSE_ll(TZFILE_DES)
+IF (CPROGRAM=='MESONH') CALL IO_File_close(TZFILE_DES)
 !
 !-------------------------------------------------------------------------------
 9002  FORMAT(/,'FATAL ERROR IN INI_SEG_n: pb to read ',A16,' IRESP=',I3)
diff --git a/src/MNH/ini_seriesn.f90 b/src/MNH/ini_seriesn.f90
index e584ca73acf10439edaa0badeeb3161dd382ccd3..cff938acec58cfe8b8f51d92758aafbd7d6db3ef 100644
--- a/src/MNH/ini_seriesn.f90
+++ b/src/MNH/ini_seriesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !     ########################
@@ -40,6 +40,8 @@
 !!      June 2016: P. Wautelet: corrected writes
 !!      Nov. 2017: J.-P. Chaboureau: fix a bug in dimension check
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!  P. Wautelet 12/04/2019: use standard measurement units
 !!
 !-------------------------------------------------------------------------------
 !
@@ -47,7 +49,6 @@
 !     --------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -74,6 +75,7 @@ IMPLICIT NONE
 !
 !*       0.2     Local variables
 !
+character(len=10) :: yval1, yval2 ! Strings for error messages
 REAL, DIMENSION(:,:), ALLOCATABLE :: ZSEA !sea/ocean fraction
 LOGICAL :: GMASKLANDSEA   ! local for LMASKLANDSEA
 INTEGER :: IIMAX_ll  ! total physical domain I size
@@ -142,8 +144,7 @@ IF ( ( NFREQSERIES*XTSTEP < XSEGLEN )       .AND.                        &
    WRITE(ILUOUT,FMT=*) ' NKCLS,NKCLA,NKLOW,NKMID,NKUP= ',                &
                         NKCLS,NKCLA,NKLOW,NKMID,NKUP
    WRITE(ILUOUT,FMT=*) '**********************************************'
-!callabortstop
-   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
+   call Print_msg( NVERB_FATAL, 'GEN', 'INI_SERIES_n', 'incompatible dimensions' )
 END IF
 !
 ALLOCATE(LINBOX(IIU,IJU))
@@ -178,8 +179,7 @@ IF (NBJSLICE > 0 ) THEN
         WRITE(UNIT=ILUOUT,FMT=*) 'STOP in INI_SERIESn: VOID INTERSECTION for slice ',JJ
         WRITE(ILUOUT,*) ' NJSLICEL=', NJSLICEL(JJ),'NJSLICEH=',NJSLICEH(JJ)
         WRITE(ILUOUT,*) ' NISL=',NISL(JJ),'NJSLICESL=',NJSLICESL(JJ),'NISH=',NISH(JJ),'NJSLICESH=',NJSLICESH(JJ)
-!callabortstop
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
+        call Print_msg( NVERB_FATAL, 'GEN', 'INI_SERIES_n', 'void intersection' )
       END IF
       WRITE(UNIT=ILUOUT,FMT=*) 'INI_SERIESn: intersection with slice ',JJ
     ELSE ! the intersection is void
@@ -321,37 +321,37 @@ ISB1=0
 DO JI=1,ISER
   ! total surface explicit precipitations
   IF (SIZE(XINPRR)/=0) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='INPRT'//YSUF(JI) ; CSUNIT1(ISB1)='MM/DAY'
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='ACPRT'//YSUF(JI) ; CSUNIT1(ISB1)='MM'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='INPRT'//YSUF(JI) ; CSUNIT1(ISB1)='mm day-1'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='ACPRT'//YSUF(JI) ; CSUNIT1(ISB1)='mm'
   END IF
   ! Mixing ratios
   IF (LUSERV) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RVT'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RVT'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   END IF
   IF (LUSERC) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RCT'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RCT'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   END IF
   IF (LUSERR) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RRT'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RRT'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   ENDIF
   IF (LUSERI) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RIT'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RIT'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   END IF
   IF (LUSERS) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RST'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RST'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   END IF
   IF (LUSERG) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RGT'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RGT'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   END IF
   IF (LUSERH) THEN
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RHT'//YSUF(JI) ; CSUNIT1(ISB1)='KG/M2'
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='RHT'//YSUF(JI) ; CSUNIT1(ISB1)='kg m-2'
   END IF
 ! SURFACE FIELDS
   IF (LSURF) THEN
      ISB1=ISB1+1 ; CSTITLE1(ISB1)='TS_WATER'//YSUF(JI) ; CSUNIT1(ISB1)='K'
      ISB1=ISB1+1 ; CSTITLE1(ISB1)='T_MNW_WATER'//YSUF(JI) ; CSUNIT1(ISB1)='K'
      ISB1=ISB1+1 ; CSTITLE1(ISB1)='T_BOT_WATER'//YSUF(JI) ; CSUNIT1(ISB1)='K'
-     ISB1=ISB1+1 ; CSTITLE1(ISB1)='CT_WATER'//YSUF(JI) ; CSUNIT1(ISB1)='-'
+     ISB1=ISB1+1 ; CSTITLE1(ISB1)='CT_WATER'//YSUF(JI) ; CSUNIT1(ISB1)='1'
      ISB1=ISB1+1 ; CSTITLE1(ISB1)='HML_WATER'//YSUF(JI) ; CSUNIT1(ISB1)='m'
   ENDIF
   ! end SURFACE FIELDS
@@ -360,19 +360,18 @@ END DO
 IF (LWMINMAX) THEN
     DO JI=1,ISER
     ! Max of vertical speed
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='WMAX'//YSUF(JI) ; CSUNIT1(ISB1)='M/S' ; NSGRIDD1(ISB1)=4
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='WMAX'//YSUF(JI) ; CSUNIT1(ISB1)='m s-1' ; NSGRIDD1(ISB1)=4
     ! Min of vertical speed
-    ISB1=ISB1+1 ; CSTITLE1(ISB1)='WMIN'//YSUF(JI) ; CSUNIT1(ISB1)='M/S' ; NSGRIDD1(ISB1)=4
+    ISB1=ISB1+1 ; CSTITLE1(ISB1)='WMIN'//YSUF(JI) ; CSUNIT1(ISB1)='m s-1' ; NSGRIDD1(ISB1)=4
   END DO
 END IF
 !
-IF (ISB1.NE.NSTEMP_SERIE1) THEN
-  WRITE(ILUOUT,FMT=*) 'STOP in INI_SERIESn:'
-  WRITE(UNIT=ILUOUT,FMT=*) ' NUMBER OF SERIES1 DIFFERS FROM ALLOC, ISB1=', &
-                            ISB1,' NSTEMP_SERIE1=',NSTEMP_SERIE1
-!callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
-END IF
+if ( isb1 /= nstemp_serie1 ) then
+  write( yval1, '( I10 )' ) isb1
+  write( yval2, '( I10 )' ) nstemp_serie1
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_SERIES_n', 'number of series1 differs from alloc: isb1='// &
+                  trim(yval1)//' nstemp_serie1='//trim(yval2) )
+end if
 !
 !*       2.2   Temporal series (z,t)
 !              ---------------------
@@ -387,39 +386,38 @@ NSGRIDD2(:)=1
 ISB2=0
 DO JI=1,ISER
   ! Vertical velocity
-  ISB2=ISB2+1 ; CSTITLE2(ISB2)='WT'//YSUF(JI) ; CSUNIT2(ISB2)='M/S' ; NSGRIDD2(ISB2)=4
+  ISB2=ISB2+1 ; CSTITLE2(ISB2)='WT'//YSUF(JI) ; CSUNIT2(ISB2)='m s-1' ; NSGRIDD2(ISB2)=4
   ! Potential temperature
   ISB2=ISB2+1 ; CSTITLE2(ISB2)='THT'//YSUF(JI) ; CSUNIT2(ISB2)='K'
   ! Pressure
   ISB2=ISB2+1 ; CSTITLE2(ISB2)='PABST'//YSUF(JI) ; CSUNIT2(ISB2)='Pa'
   ! Mixing ratios
   IF (LUSERV) THEN
-    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RVT'//YSUF(JI) ; CSUNIT2(ISB2)='KG/KG'
+    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RVT'//YSUF(JI) ; CSUNIT2(ISB2)='kg kg-1'
   END IF
   IF (LUSERC) THEN
-    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RCT'//YSUF(JI) ; CSUNIT2(ISB2)='KG/KG'
+    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RCT'//YSUF(JI) ; CSUNIT2(ISB2)='kg kg-1'
   END IF
   IF (LUSERR) THEN
-    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RRT'//YSUF(JI) ; CSUNIT2(ISB2)='KG/KG'
+    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RRT'//YSUF(JI) ; CSUNIT2(ISB2)='kg kg-1'
   END IF
   IF (LUSERI) THEN
-    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RIT'//YSUF(JI) ; CSUNIT2(ISB2)='KG/KG'
+    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RIT'//YSUF(JI) ; CSUNIT2(ISB2)='kg kg-1'
   END IF
   IF (LUSERS) THEN
-    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RST'//YSUF(JI) ; CSUNIT2(ISB2)='KG/KG'
+    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RST'//YSUF(JI) ; CSUNIT2(ISB2)='kg kg-1'
   END IF
   IF (LUSERG) THEN
-    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RGT'//YSUF(JI) ; CSUNIT2(ISB2)='KG/KG'
+    ISB2=ISB2+1 ; CSTITLE2(ISB2)='RGT'//YSUF(JI) ; CSUNIT2(ISB2)='kg kg-1'
   END IF
 END DO
 !
-IF (ISB2.NE.NSTEMP_SERIE2) THEN
-  WRITE(ILUOUT,FMT=*) 'STOP in INI_SERIESn:'
-  WRITE(ILUOUT,FMT=*) ' NUMBER OF SERIES2 DIFFERS FROM ALLOC, ISB2=',ISB2, &
-                      ' NSTEMP_SERIE2=',NSTEMP_SERIE2
-!callabortstop
-   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
-END IF
+if ( isb2 /= nstemp_serie2 ) then
+  write( yval1, '( I10 )' ) isb2
+  write( yval2, '( I10 )' ) nstemp_serie2
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_SERIES_n', 'number of series2 differs from alloc: isb2='// &
+                  trim(yval1)//' nstemp_serie2='//trim(yval2) )
+end if
 !
 !*    2.3 Temporal series (x,t)
 !
@@ -440,34 +438,33 @@ NSGRIDD3(:)=1
 ISB3=0
 !
 ! U in CLS
-ISB3=ISB3+1; CSTITLE3(ISB3)='UCLS'//CSKCLS ; CSUNIT3(ISB3)='M/S' ; NSGRIDD3(ISB3)=2
+ISB3=ISB3+1; CSTITLE3(ISB3)='UCLS'//CSKCLS ; CSUNIT3(ISB3)='m s-1' ; NSGRIDD3(ISB3)=2
 ! W in CLA
-ISB3=ISB3+1; CSTITLE3(ISB3)='WCLA'//CSKCLA ; CSUNIT3(ISB3)='M/S' ; NSGRIDD3(ISB3)=4
+ISB3=ISB3+1; CSTITLE3(ISB3)='WCLA'//CSKCLA ; CSUNIT3(ISB3)='m s-1' ; NSGRIDD3(ISB3)=4
 ! W averaged in mid troposphere (between KLOW and KUP)
-ISB3=ISB3+1; CSTITLE3(ISB3)='W'   //CSKLOW//'-'//CSKUP ; CSUNIT3(ISB3) ='M/S' ; NSGRIDD3(ISB3)=4
+ISB3=ISB3+1; CSTITLE3(ISB3)='W'   //CSKLOW//'-'//CSKUP ; CSUNIT3(ISB3) ='m s-1' ; NSGRIDD3(ISB3)=4
 ! mixing ratios
 IF (LUSERV) THEN
   ! RV in CLS
-  ISB3=ISB3+1; CSTITLE3(ISB3)='RVCLS'//CSKCLS ; CSUNIT3(ISB3)='KG/KG'
+  ISB3=ISB3+1; CSTITLE3(ISB3)='RVCLS'//CSKCLS ; CSUNIT3(ISB3)='kg kg-1'
   ! RV in MID troposphere
-  ISB3=ISB3+1; CSTITLE3(ISB3)='RVMID'//CSKMID ; CSUNIT3(ISB3)='KG/KG'
+  ISB3=ISB3+1; CSTITLE3(ISB3)='RVMID'//CSKMID ; CSUNIT3(ISB3)='kg kg-1'
 END IF
 IF (LUSERC) THEN
   ! RC averaged between ground and KUP
-  ISB3=ISB3+1    ; CSTITLE3(ISB3)='RC'//'0-'//CSKUP ; CSUNIT3(ISB3)='KG/KG'
+  ISB3=ISB3+1    ; CSTITLE3(ISB3)='RC'//'0-'//CSKUP ; CSUNIT3(ISB3)='kg kg-1'
 END IF
 IF (LUSERR) THEN
   ! RR in CLS
-  ISB3=ISB3+1    ; CSTITLE3(ISB3)='RR'//CSKCLS      ; CSUNIT3(ISB3)='KG/KG'
+  ISB3=ISB3+1    ; CSTITLE3(ISB3)='RR'//CSKCLS      ; CSUNIT3(ISB3)='kg kg-1'
 END IF
 !
-IF (ISB3.NE.NSTEMP_SERIE3) THEN
-  WRITE(ILUOUT,FMT=*) 'STOP in INI_SERIESn:'
-  WRITE(ILUOUT,FMT=*) ' NUMBER OF SERIES3 DIFFERS FROM ALLOC, ISB3=',ISB3, &
-                      ' NTEMP_SERIE3=',NSTEMP_SERIE3
-!callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SERIES_n','')
-END IF
+if ( isb3 /= nstemp_serie3 ) then
+  write( yval1, '( I10 )' ) isb3
+  write( yval2, '( I10 )' ) nstemp_serie3
+  call Print_msg( NVERB_FATAL, 'GEN', 'INI_SERIES_n', 'number of series3 differs from alloc: isb3='// &
+                  trim(yval1)//' nstemp_serie3='//trim(yval2) )
+end if
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_size_spawn.f90 b/src/MNH/ini_size_spawn.f90
index ad4c604b06ac09cf053b8dada638f493b1af0413..ee52cc7b68825da6ae3270e567c7a01007378490 100644
--- a/src/MNH/ini_size_spawn.f90
+++ b/src/MNH/ini_size_spawn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 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.
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE INI_SIZE_SPAWN(HLBCX,HLBCY,HPRESOPT,KITR,TPINIFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 CHARACTER (LEN=4),DIMENSION(2), INTENT(IN)    :: HLBCX,HLBCY ! LBC types for model1
 CHARACTER (LEN=5),              INTENT(IN)    :: HPRESOPT    ! Pressure solver option of model1
@@ -44,9 +44,9 @@ END MODULE MODI_INI_SIZE_SPAWN
 !!    EXTERNAL
 !!    --------
 !!    DEFAULT_DESFM2
-!!    IO_FILE_OPEN_ll
+!!    IO_File_open
 !!    READ_HGRID
-!!    IO_FILE_CLOSE_ll
+!!    IO_File_close
 !!    RETRIEVE_NEST_INFO
 !!
 !!    IMPLICIT ARGUMENTS
@@ -67,32 +67,34 @@ END MODULE MODI_INI_SIZE_SPAWN
 !!         J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!         J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!  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
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
 !
 USE MODD_CONF
-USE MODD_DIM_n, ONLY : DIM_MODEL
-USE MODD_DYN_n, ONLY : CPRESOPT, NITR
+USE MODD_DIM_n,            ONLY: DIM_MODEL
+USE MODD_DYN_n,            ONLY: CPRESOPT, NITR
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY : ISNPROC, ISP, TFILEDATA
+USE MODD_IO,               ONLY: ISNPROC, ISP, TFILEDATA
 USE MODD_LBC_n
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 USE MODD_SPAWN
-USE MODD_VAR_ll, ONLY : YSPLITTING
+USE MODD_VAR_ll,           ONLY: YSPLITTING
 !
-USE MODE_ll
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
+USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
@@ -184,7 +186,7 @@ IF (LBAL_ONLY) THEN
 !callabortstop
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_SPAWN','YDADINIFILE not initialized in namelist NAM_LUNIT2_SPA')
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',YDAD_NAME)
+      CALL IO_Field_read(TPINIFILE,'DAD_NAME',YDAD_NAME)
       IF (ADJUSTL(ADJUSTR(YDAD_NAME)) .NE. ADJUSTL(ADJUSTR(CDADINIFILE))) THEN
         WRITE(ILUOUT,*) 'ERROR in INI_SIZE_SPAWN: YDADINIFILE is NOT the DAD of model 1'
         WRITE(ILUOUT,*) ' YDADINIFILE='//TRIM(CDADINIFILE)
@@ -209,12 +211,12 @@ ENDIF
 !
 IF (LEN_TRIM(CDOMAIN)>0) THEN
 !
-  CALL IO_READ_FIELD(TPINIFILE,'LAT0',  XLAT0)
-  CALL IO_READ_FIELD(TPINIFILE,'LON0',  XLON0)
-  CALL IO_READ_FIELD(TPINIFILE,'RPK',   XRPK)
-  CALL IO_READ_FIELD(TPINIFILE,'BETA',  XBETA)
-  CALL IO_READ_FIELD(TPINIFILE,'LATORI',XPGDLATOR)
-  CALL IO_READ_FIELD(TPINIFILE,'LONORI',XPGDLONOR)
+  CALL IO_Field_read(TPINIFILE,'LAT0',  XLAT0)
+  CALL IO_Field_read(TPINIFILE,'LON0',  XLON0)
+  CALL IO_Field_read(TPINIFILE,'RPK',   XRPK)
+  CALL IO_Field_read(TPINIFILE,'BETA',  XBETA)
+  CALL IO_Field_read(TPINIFILE,'LATORI',XPGDLATOR)
+  CALL IO_Field_read(TPINIFILE,'LONORI',XPGDLONOR)
   !
   !$20140602 INSERT BIG MODIF JUAN May27
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -224,15 +226,15 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN
 ! initialize grid2 dims, xor, xend and ratio so to initialize in INI_CHILD 
 ! structures TCRRT_COMDATA%T_CHILDREN%T_SPLITB and TCRRT_PROCONF%T_CHILDREN
 !$20140602 add condition on npproc
-  CALL IO_FILE_ADD2LIST(TZDOMAIN,TRIM(CDOMAIN),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZDOMAIN,OPARALLELIO=.FALSE.)
+  CALL IO_File_add2list(TZDOMAIN,TRIM(CDOMAIN),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZDOMAIN)
   !
-  CALL IO_READ_FIELD(TZDOMAIN,'DXRATIO',NDXRATIO)
-  CALL IO_READ_FIELD(TZDOMAIN,'DYRATIO',NDYRATIO)
-  CALL IO_READ_FIELD(TZDOMAIN,'XOR',    NXOR)
-  CALL IO_READ_FIELD(TZDOMAIN,'YOR',    NYOR)
-  CALL IO_READ_FIELD(TZDOMAIN,'IMAX',   IIMAX_ll)
-  CALL IO_READ_FIELD(TZDOMAIN,'JMAX',   IJMAX_ll)
+  CALL IO_Field_read(TZDOMAIN,'DXRATIO',NDXRATIO)
+  CALL IO_Field_read(TZDOMAIN,'DYRATIO',NDYRATIO)
+  CALL IO_Field_read(TZDOMAIN,'XOR',    NXOR)
+  CALL IO_Field_read(TZDOMAIN,'YOR',    NYOR)
+  CALL IO_Field_read(TZDOMAIN,'IMAX',   IIMAX_ll)
+  CALL IO_Field_read(TZDOMAIN,'JMAX',   IJMAX_ll)
   NXEND=NXOR+IIMAX_ll/NDXRATIO+2*JPHEXT-1
   NYEND=NYOR+IJMAX_ll/NDYRATIO+2*JPHEXT-1
   !
@@ -255,21 +257,21 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !$
   ALLOCATE(XPGDXHAT(DIM_MODEL(1)%NIMAX+2*JPHEXT))
-  CALL IO_READ_FIELD(TPINIFILE,'XHAT',XPGDXHAT)
+  CALL IO_Field_read(TPINIFILE,'XHAT',XPGDXHAT)
   !
   ALLOCATE(XPGDYHAT(DIM_MODEL(1)%NJMAX+2*JPHEXT))
-  CALL IO_READ_FIELD(TPINIFILE,'YHAT',XPGDYHAT)
+  CALL IO_Field_read(TPINIFILE,'YHAT',XPGDYHAT)
   !
   IF (TPINIFILE%NMNHVERSION(1)<4 .OR. (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)<=5)) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XPGDLONOR)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XPGDLONOR)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XPGDLATOR)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XPGDLATOR)
     !
     ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2))
     ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2))
@@ -282,7 +284,7 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN
 !*     1.4   read grid in file CDOMAIN if available :
 !
   CALL READ_HGRID(2,TZDOMAIN,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE)
-  CALL IO_FILE_CLOSE_ll(TZDOMAIN,OPARALLELIO=.FALSE.)
+  CALL IO_File_close(TZDOMAIN)
   CALL RETRIEVE1_NEST_INFO_n(1,2,NXOR,NYOR,NXSIZE,NYSIZE,NDXRATIO,NDYRATIO)
   DEALLOCATE(XZS,XZSMT,XXHAT,XYHAT)
 !
diff --git a/src/MNH/ini_sizen.f90 b/src/MNH/ini_sizen.f90
index 3cfad7f7e9a349aec65cd1dc86675ccec7d227a0..5e21aeeaffa449c582206864c825cfdfaaa846be 100644
--- a/src/MNH/ini_sizen.f90
+++ b/src/MNH/ini_sizen.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #################
@@ -9,12 +9,11 @@
 !
 INTERFACE
 !
-SUBROUTINE INI_SIZE_n(KMI,HLUOUT,TPINIFILE,HINIFILEPGD)
+SUBROUTINE INI_SIZE_n( KMI, TPINIFILE, HINIFILEPGD )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 INTEGER,            INTENT(IN)    :: KMI          !Model Index
-CHARACTER (LEN=*),  INTENT(IN)    :: HLUOUT       !Name for output-listing of nested models
 TYPE(TFILEDATA),    INTENT(IN)    :: TPINIFILE    !Initial file
 CHARACTER (LEN=*),  INTENT(IN)    :: HINIFILEPGD
 !
@@ -24,9 +23,9 @@ END INTERFACE
 !
 END MODULE MODI_INI_SIZE_n
 !-----------------------------------------------------------------
-!     #######################################################
-      SUBROUTINE INI_SIZE_n(KMI,HLUOUT,TPINIFILE,HINIFILEPGD)
-!     #######################################################
+!     ####################################################
+      SUBROUTINE INI_SIZE_n( KMI, TPINIFILE, HINIFILEPGD )
+!     ####################################################
 !
 !!
 !!****  *INI_SIZE_n* - routine to initialize the sizes ratio positions of nested model _n
@@ -40,7 +39,7 @@ END MODULE MODI_INI_SIZE_n
 !!    ------
 !!      The first part of the initialization of the model _n is performed as 
 !!    follows :
-!!       - The logical unit number associated to output_listing file HLUOUT is 
+!!       - The logical unit number associated to output_listing file TLUOUT is
 !!    retrieved and module MODD_LUNIT_n is initialized.
 !!       -  Then the description of the segment to perform for the model _n is
 !!    retrieved : 
@@ -55,7 +54,7 @@ END MODULE MODI_INI_SIZE_n
 !!   
 !!    EXTERNAL
 !!    --------
-!!      IO_READ_FIELD : to read a LFIFM file
+!!      IO_Field_read : to read a LFIFM file
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------ 
@@ -95,27 +94,27 @@ END MODULE MODI_INI_SIZE_n
 !!             June 2006   (D. Gazen) _n: no more read of updated var. 
 !!             J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CONF,       ONLY: CCONF, LCARTESIAN, NVERB, LTHINSHELL, NHALO, CSPLIT, &
-                           L1D, L2D, LPACK
-USE MODD_CONFZ,      ONLY: NZ_PROC
-USE MODD_DIM_n,      ONLY: NIMAX_ll, NJMAX_ll, NKMAX
-USE MODD_DYN,        ONLY: LCORIO
-USE MODD_IO_ll,      ONLY: GSMONOPROC, TFILEDATA
-USE MODD_LBC_n,      ONLY: CLBCX, CLBCY
-USE MODD_LUNIT_n,    ONLY: CLUOUT, CINIFILE, CINIFILEPGD, TLUOUT
-USE MODD_NESTING,    ONLY: CMY_NAME, CDAD_NAME, NDAD, NDXRATIO_ALL, NDYRATIO_ALL, &
-                           NXOR_ALL, NYOR_ALL, NXEND_ALL,NYEND_ALL
-USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPHEXT,JPVEXT 
-!
-USE MODE_FM,         ONLY: SET_FMPACK_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODD_CONF,          ONLY: CCONF, LCARTESIAN, NVERB, LTHINSHELL, NHALO, CSPLIT, &
+                              L1D, L2D, LPACK
+USE MODD_CONFZ,         ONLY: NZ_PROC
+USE MODD_DIM_n,         ONLY: NIMAX_ll, NJMAX_ll, NKMAX
+USE MODD_DYN,           ONLY: LCORIO
+USE MODD_IO,            ONLY: GSMONOPROC, TFILEDATA
+USE MODD_LBC_n,         ONLY: CLBCX, CLBCY
+USE MODD_LUNIT_n,       ONLY: CINIFILE, CINIFILEPGD, TLUOUT
+USE MODD_NESTING,       ONLY: CMY_NAME, CDAD_NAME, NDAD, NDXRATIO_ALL, NDYRATIO_ALL, &
+                              NXOR_ALL, NYOR_ALL, NXEND_ALL,NYEND_ALL
+USE MODD_PARAMETERS,    ONLY: JPMODELMAX, JPHEXT,JPVEXT
+!
+USE MODE_IO,            ONLY: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MSG
 USE MODE_POS
@@ -126,7 +125,6 @@ IMPLICIT NONE
 !*       0.1   declarations of arguments
 !
 INTEGER,            INTENT(IN)    :: KMI          !Model Index
-CHARACTER (LEN=*),  INTENT(IN)    :: HLUOUT       !Name for output-listing of nested models
 TYPE(TFILEDATA),    INTENT(IN)    :: TPINIFILE    !Initial file
 CHARACTER (LEN=*),  INTENT(IN)    :: HINIFILEPGD
 !
@@ -142,7 +140,6 @@ INTEGER             :: IJPHEXT
 !              --------------------------------------------------------
 !
 ILUOUT = TLUOUT%NLU
-CLUOUT = HLUOUT
 CINIFILEPGD=HINIFILEPGD
 !
 !-------------------------------------------------------------------------------
@@ -152,14 +149,14 @@ CINIFILEPGD=HINIFILEPGD
 !
 !*       2.0   Retrieve DAD_NAME and MY_NAME to check the DAD model identity
 !
-CALL IO_READ_FIELD(TPINIFILE,'MY_NAME',CMY_NAME(KMI),IRESP)
+CALL IO_Field_read(TPINIFILE,'MY_NAME',CMY_NAME(KMI),IRESP)
 IF (IRESP /= 0)  THEN
   WRITE(ILUOUT,FMT=9000) 'MY_NAME',IRESP
 !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','')
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',CDAD_NAME(KMI),IRESP)
+CALL IO_Field_read(TPINIFILE,'DAD_NAME',CDAD_NAME(KMI),IRESP)
 IF (IRESP /= 0)  THEN
   WRITE(ILUOUT,FMT=9000) 'DAD_NAME',IRESP
 !callabortstop
@@ -187,10 +184,10 @@ END IF
 !*       3.1  Read dimensions in initial file and initialize  subdomain 
 !             dimensions and parallel variables
 !
-CALL IO_READ_FIELD(TPINIFILE,'IMAX',  NIMAX_ll)
-CALL IO_READ_FIELD(TPINIFILE,'JMAX',  NJMAX_ll)
-CALL IO_READ_FIELD(TPINIFILE,'KMAX',  NKMAX)
-CALL IO_READ_FIELD(TPINIFILE,'JPHEXT',IJPHEXT)
+CALL IO_Field_read(TPINIFILE,'IMAX',  NIMAX_ll)
+CALL IO_Field_read(TPINIFILE,'JMAX',  NJMAX_ll)
+CALL IO_Field_read(TPINIFILE,'KMAX',  NKMAX)
+CALL IO_Field_read(TPINIFILE,'JPHEXT',IJPHEXT)
 !
 IF ( IJPHEXT .NE. JPHEXT ) THEN
    WRITE(ILUOUT,FMT=*) ' INI_SIZE_N : JPHEXT in namelist NAM_CONF ( or default or .des value )&
@@ -220,10 +217,10 @@ ENDIF
 !   read the nested model location in its father's grid
 !   and compute the coordinates of the corner points
 IF (LEN_TRIM(CDAD_NAME(KMI))>0) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'DXRATIO',NDXRATIO_ALL(KMI))
-  CALL IO_READ_FIELD(TPINIFILE,'DYRATIO',NDYRATIO_ALL(KMI))
-  CALL IO_READ_FIELD(TPINIFILE,'XOR',NXOR_ALL(KMI))
-  CALL IO_READ_FIELD(TPINIFILE,'YOR',NYOR_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'DXRATIO',NDXRATIO_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'DYRATIO',NDYRATIO_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'XOR',NXOR_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'YOR',NYOR_ALL(KMI))
   NXEND_ALL(KMI)=NXOR_ALL(KMI)-1 + NIMAX_ll/NDXRATIO_ALL(KMI) +2*JPHEXT
   NYEND_ALL(KMI)=NYOR_ALL(KMI)-1 + NJMAX_ll/NDYRATIO_ALL(KMI) +2*JPHEXT
 ELSE
@@ -275,7 +272,7 @@ IF (KMI == 1) THEN
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','this is a 2D simulation: it has to be performed in monoprocess mode')
   ENDIF
 !
-  CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+  CALL IO_Pack_set(L1D,L2D,LPACK)
 !
 END IF
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_spawn_lsn.f90 b/src/MNH/ini_spawn_lsn.f90
index 8c580978621c68922036a3f52244a5b3f40c280f..f33f727bbc247a84af9b5ae3934f0e8de1157b72 100644
--- a/src/MNH/ini_spawn_lsn.f90
+++ b/src/MNH/ini_spawn_lsn.f90
@@ -19,8 +19,8 @@ INTERFACE
                     KDXRATIO,KDYRATIO,              &
                     HLBCX,HLBCY,PZZ,PZHAT,                                &
                     OSLEVE,PLEN1,PLEN2,                                   &
-                      PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                    &
-                      PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,                    &
+                      PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,            &
+                      PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PLSZWSS,            &
                       KKLIN_LBXU,PCOEFLIN_LBXU,KKLIN_LBYU,PCOEFLIN_LBYU,  &
                       KKLIN_LBXV,PCOEFLIN_LBXV,KKLIN_LBYV,PCOEFLIN_LBYV,  &
                       KKLIN_LBXW,PCOEFLIN_LBXW,KKLIN_LBYW,PCOEFLIN_LBYW,  &
@@ -48,8 +48,10 @@ CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY   ! boundary conditions
 !
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSUM,PLSVM,PLSWM ! Large Scale fields
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSTHM, PLSRVM    ! at t-dt
+REAL, DIMENSION(:,:),   INTENT(  OUT) :: PLSZWSM    ! at t-dt
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSUS,PLSVS,PLSWS ! Large Scale source
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSTHS, PLSRVS    ! terms
+REAL, DIMENSION(:,:),   INTENT(  OUT) :: PLSZWSS    ! source terms
 !  coefficients for the vertical interpolation of the LB fields
 INTEGER, DIMENSION(:,:,:), INTENT(  OUT) :: KKLIN_LBXU,KKLIN_LBYU
 REAL,    DIMENSION(:,:,:), INTENT(  OUT) :: PCOEFLIN_LBXU,PCOEFLIN_LBYU
@@ -73,8 +75,8 @@ END MODULE MODI_INI_SPAWN_LS_n
                     KDXRATIO,KDYRATIO,              &
                     HLBCX,HLBCY,PZZ,PZHAT,                                &
                     OSLEVE,PLEN1,PLEN2,                                   &
-                      PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                    &
-                      PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,                    &
+                      PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,            &
+                      PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PLSZWSS,            &
                       KKLIN_LBXU,PCOEFLIN_LBXU,KKLIN_LBYU,PCOEFLIN_LBYU,  &
                       KKLIN_LBXV,PCOEFLIN_LBXV,KKLIN_LBYV,PCOEFLIN_LBYV,  &
                       KKLIN_LBXW,PCOEFLIN_LBXW,KKLIN_LBYW,PCOEFLIN_LBYW,  &
@@ -140,6 +142,7 @@ END MODULE MODI_INI_SPAWN_LS_n
 !!                                          coeff for U
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!      J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -190,6 +193,8 @@ CHARACTER (LEN=4), DIMENSION (2), INTENT(IN) :: HLBCY   ! boundary conditions
 !
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSUM,PLSVM,PLSWM ! Large Scale fields
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSTHM, PLSRVM    ! at t-dt
+REAL, DIMENSION(:,:),   INTENT(  OUT) :: PLSZWSM     ! LS at t-dt
+REAL, DIMENSION(:,:),   INTENT(  OUT) :: PLSZWSS    ! source terms
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSUS,PLSVS,PLSWS ! Large Scale source
 REAL, DIMENSION(:,:,:), INTENT(  OUT) :: PLSTHS, PLSRVS    ! terms
 !  coefficients for the vertical interpolation of the LB fields
@@ -231,6 +236,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTLSUM, ZTLSVM, ZTLSWM, ZTLSTHM, ZTLSRVM
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTLSUS, ZTLSVS, ZTLSWS, ZTLSTHS, ZTLSRVS
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTZS,ZZS 
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTZSMT,ZZSMT 
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTZWS,ZTZWSS
 !
 !-------------------------------------------------------------------------------
 !
@@ -260,6 +266,7 @@ ALLOCATE(ZTLSUM(IDIMX,IDIMY,SIZE(PLSUM,3)))
 ALLOCATE(ZTLSVM(IDIMX,IDIMY,SIZE(PLSVM,3)))
 ALLOCATE(ZTLSWM(IDIMX,IDIMY,SIZE(PLSWM,3)))
 ALLOCATE(ZTLSTHM(IDIMX,IDIMY,SIZE(PLSTHM,3)))
+IF(SIZE(PLSZWSM) /= 0) ALLOCATE(ZTZWS(IDIMX,IDIMY))
 IF(SIZE(PLSRVM) /= 0) ALLOCATE(ZTLSRVM(IDIMX,IDIMY,SIZE(PLSRVM,3)))
 !
 IF(GVERT_INTERP) THEN
@@ -277,11 +284,14 @@ IF ( SIZE(PLSTHS,1) /= 0 ) THEN
   ALLOCATE(ZTLSWS(IDIMX,IDIMY,SIZE(PLSWS,3)))
   ALLOCATE(ZTLSTHS(IDIMX,IDIMY,SIZE(PLSTHS,3)))
 ENDIF
+IF ( SIZE(PLSZWSS) /= 0 ) ALLOCATE(ZTZWSS(IDIMX,IDIMY))
 IF ( SIZE(PLSRVS) /= 0 ) ALLOCATE(ZTLSRVS(IDIMX,IDIMY,SIZE(PLSRVS,3)))
 !
 !         1.3  Specify the ls "source" fields and receiver fields
 !
 CALL SET_LSFIELD_1WAY_ll(XLSUM, ZTLSUM, KMI)
+IF ( SIZE(PLSZWSM,1) /= 0 ) &
+  CALL SET_LSFIELD_1WAY_ll(XLSZWSM, ZTZWS, KMI)
 CALL SET_LSFIELD_1WAY_ll(XLSVM, ZTLSVM, KMI)
 CALL SET_LSFIELD_1WAY_ll(XLSWM, ZTLSWM, KMI)
 CALL SET_LSFIELD_1WAY_ll(XLSTHM, ZTLSTHM, KMI)
@@ -295,6 +305,8 @@ IF ( SIZE(PLSTHS,1) /= 0 ) THEN
   CALL SET_LSFIELD_1WAY_ll(XLSTHS, ZTLSTHS, KMI)
   IF ( SIZE(PLSRVM,1) /= 0 ) &
     CALL SET_LSFIELD_1WAY_ll(XLSRVS, ZTLSRVS, KMI)
+  IF ( SIZE(PLSZWSM,1) /= 0 ) &
+    CALL SET_LSFIELD_1WAY_ll(XLSZWSS, ZTZWSS, KMI)
 ENDIF
 !
 IF ( GVERT_INTERP ) THEN
@@ -454,6 +466,13 @@ IF ( SIZE(PLSRVM,1) /= 0 ) THEN
                  HLBCX,HLBCY,ZTLSRVM,PLSRVM(IIB:IIE,IJB:IJE,:))
 END IF
 !
+IF ( SIZE(PLSZWSM,1) /= 0 ) THEN
+  CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, &
+                 PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, &
+                 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,         &
+                 HLBCX,HLBCY,ZTZWS,PLSZWSM(IIB:IIE,IJB:IJE))
+END IF
+
 IF ( SIZE(PLSTHS,1) /= 0 ) THEN
   !
   CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, &
@@ -469,6 +488,13 @@ IF ( SIZE(PLSTHS,1) /= 0 ) THEN
   !
   END IF
   !
+  IF ( SIZE(PLSZWSM,1) /= 0 ) THEN
+    CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, &
+                   PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, &
+                   2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,         &
+                   HLBCX,HLBCY,ZTZWS+ZTIME*ZTZWSS,PLSZWSS(IIB:IIE,IJB:IJE))
+  !
+  END IF
 END IF
 !
 !*      3.2  Vertical linear interpolation on the mass grid
@@ -550,6 +576,9 @@ IF ( SIZE(PLSTHS,1) /= 0 ) THEN
     PLSRVS(:,:,:)  = (PLSRVS(:,:,:) - PLSRVM(:,:,:)) / ZTIME
   END IF
   !
+  IF ( SIZE(PLSZWSM,1) /= 0 ) THEN
+    PLSZWSS(:,:)  = (PLSZWSS(:,:) - PLSZWSM(:,:)) / ZTIME
+  END IF
 END IF
 !
 !------------------------------------------------------------------------------
@@ -749,12 +778,14 @@ END IF
 !
 DEALLOCATE(ZTLSUM,ZTLSVM,ZTLSWM,ZTLSTHM)
 IF(SIZE(PLSRVM) /= 0) DEALLOCATE(ZTLSRVM)
+IF(SIZE(PLSZWSM) /= 0) DEALLOCATE(ZTZWS)
 !
 IF(GVERT_INTERP) DEALLOCATE(ZTZS,ZZS)
 IF(GVERT_INTERP) DEALLOCATE(ZTZSMT,ZZSMT)
 !
 IF ( SIZE(PLSTHS,1) /= 0 ) DEALLOCATE(ZTLSUS,ZTLSVS,ZTLSWS,ZTLSTHS)
 IF ( SIZE(PLSRVS,1) /= 0 ) DEALLOCATE(ZTLSRVS)
+IF ( SIZE(PLSZWSS,1) /= 0 ) DEALLOCATE(ZTZWSS)
 !------------------------------------------------------------------------------
 NULLIFY(TZLSFIELD_ll)
 CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSUM)
@@ -762,6 +793,7 @@ CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSVM)
 CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSWM)
 CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSTHM)
 IF(SIZE(PLSRVM) /= 0) CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSRVM)
+IF(SIZE(PLSZWSM) /= 0) CALL ADD2DFIELD_ll(TZLSFIELD_ll, PLSZWSM)
 IF ( SIZE(PLSTHS,1) /= 0 ) THEN
   CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSUS)
   CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSVS)
@@ -769,6 +801,7 @@ IF ( SIZE(PLSTHS,1) /= 0 ) THEN
   CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSTHS)
 ENDIF
 IF ( SIZE(PLSRVS,1) /= 0 ) CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSRVS)
+IF ( SIZE(PLSZWSS,1) /= 0 ) CALL ADD2DFIELD_ll(TZLSFIELD_ll, PLSZWSS)
 CALL UPDATE_HALO_ll(TZLSFIELD_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZLSFIELD_ll)
 !
diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90
index d2564f410e2cbf86db61e9efa3da8f98a27320c4..6218b69882c2f03d7fe8c79faede3b2e2487e19d 100644
--- a/src/MNH/ini_spectren.f90
+++ b/src/MNH/ini_spectren.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -9,12 +9,11 @@
 !
 INTERFACE
 !
-       SUBROUTINE INI_SPECTRE_n(KMI,HLUOUT,TPINIFILE)
+       SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE)
 !
-       USE MODD_IO_ll, ONLY: TFILEDATA
+       USE MODD_IO, ONLY: TFILEDATA
 !
        INTEGER,           INTENT(IN) :: KMI       ! Model index 
-       CHARACTER (LEN=*), INTENT(IN) :: HLUOUT    ! Name for output-listing of nested models
        TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE ! Initial file
 !
 END SUBROUTINE INI_SPECTRE_n
@@ -22,9 +21,9 @@ END SUBROUTINE INI_SPECTRE_n
 END INTERFACE
 !
 END MODULE MODI_INI_SPECTRE_n
-!     ######################################################
-      SUBROUTINE INI_SPECTRE_n(KMI,HLUOUT,TPINIFILE)
-!     ######################################################
+!     #######################################
+      SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE)
+!     #######################################
 !
 !!****  *INI_SPECTRE_n* - routine to initialize SPECTRE (based on ini_modeln.f90)
 !!
@@ -34,8 +33,11 @@ END MODULE MODI_INI_SPECTRE_n
 !!      J.P Chaboureau       * L.A*
 !!      10/2016 (C.Lac) Cleaning of the modules
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!      
-
+!  P. Wautelet 08/02/2019: allocate to zero-size non associated pointers
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!!
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -72,7 +74,7 @@ USE MODD_FRC_n
 USE MODD_GET_n
 USE MODD_GRID,          ONLY: XLONORI,XLATORI
 USE MODD_GRID_n
-USE MODD_IO_ll,         ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
 USE MODD_LUNIT_n,       ONLY: COUTFILE, TLUOUT
@@ -107,9 +109,8 @@ USE MODD_TURB_n
 USE MODD_VAR_ll,        ONLY: IP
 !
 USE MODD_ARGSLIST_ll,   ONLY: LIST_ll
-USE MODE_FMREAD
 USE MODE_GATHER_ll
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
@@ -135,7 +136,6 @@ IMPLICIT NONE
 !
 !
 INTEGER,           INTENT(IN) :: KMI       ! Model index 
-CHARACTER (LEN=*), INTENT(IN) :: HLUOUT    ! Name for output-listing of nested models
 TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE ! Initial file
 !
 !*       0.2   declarations of local variables
@@ -198,6 +198,7 @@ REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM
 REAL, DIMENSION(:,:,:),   POINTER ::  DPTR_XZZ
 REAL, DIMENSION(:,:,:), POINTER ::   DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM
 REAL, DIMENSION(:,:,:), POINTER ::   DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS
+REAL, DIMENSION(:,:),   POINTER ::   DPTR_XLSZWSS,DPTR_XLSZWSM
 !
 !-------------------------------------------------------------------------------
 !
@@ -223,8 +224,8 @@ ILUOUT = TLUOUT%NLU
 IKU=NKMAX+2*JPVEXT
 !
 ALLOCATE(XZHAT(IKU))
-CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT)
-CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP)
+CALL IO_Field_read(TPINIFILE,'ZHAT',XZHAT)
+CALL IO_Field_read(TPINIFILE,'ZTOP',XZTOP)
 IF (XALZBOT>=XZHAT(IKU) .AND. LVE_RELAX) THEN
   WRITE(ILUOUT,FMT=*) "INI_SPECTRE_n ERROR: you want to use vertical relaxation"
   WRITE(ILUOUT,FMT=*) "                  but bottom of layer XALZBOT(",XALZBOT,")"
@@ -509,9 +510,7 @@ ELSE                                   ! 3D case
              " Local domain to small for relaxation NRIMX+2*JPHEXT,IIU ", &
              NRIMX+2*JPHEXT,IIU ,&
              " change relaxation parameters or number of processors "
-        !callabortstop
-        CALL ABORT
-        STOP    
+        call Print_msg(NVERB_FATAL,'GEN','INI_SPECTRE_n','')
      END IF
   END IF
   IF ( CLBCY(1) /= 'CYCL' ) THEN
@@ -521,9 +520,7 @@ ELSE                                   ! 3D case
              " Local domain to small for relaxation NRIMY+2*JPHEXT,IJU ", &
              NRIMY+2*JPHEXT,IJU ,&
              " change relaxation parameters or number of processors "
-        !callabortstop
-        CALL ABORT
-        STOP    
+        call Print_msg(NVERB_FATAL,'GEN','INI_SPECTRE_n','')
      END IF
   END IF
 IF ( LHORELAX_UVWTH ) THEN
@@ -744,27 +741,27 @@ NDT_2_WAY(KMI)=4
 
 IF (LSPECTRE_U) THEN
   ALLOCATE(XUT(IIU,IJU,IKU))      ; XUT  = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'UT',XUT)
+  CALL IO_Field_read(TPINIFILE,'UT',XUT)
 END IF
 !
 IF (LSPECTRE_V) THEN
   ALLOCATE(XVT(IIU,IJU,IKU))      ; XVT  = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'VT',XVT)
+  CALL IO_Field_read(TPINIFILE,'VT',XVT)
 END IF
 !
 IF (LSPECTRE_W) THEN  
   ALLOCATE(XWT(IIU,IJU,IKU))      ; XWT  = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'WT',XWT)
+  CALL IO_Field_read(TPINIFILE,'WT',XWT)
 END IF
 !
 IF (LSPECTRE_TH) THEN
   ALLOCATE(XTHT(IIU,IJU,IKU))     ; XTHT = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'THT',XTHT)
+  CALL IO_Field_read(TPINIFILE,'THT',XTHT)
 END IF
 !
 IF (LSPECTRE_RV) THEN
   ALLOCATE(XRT(IIU,IJU,IKU,NRR))
-  CALL IO_READ_FIELD(TPINIFILE,'RVT',XRT(:,:,:,1))
+  CALL IO_Field_read(TPINIFILE,'RVT',XRT(:,:,:,1))
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -804,10 +801,10 @@ IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN
                NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,             &
                NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                 &
                NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,         &
-               XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XDRYMASST,                     &
+               XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,XDRYMASST,             &
                XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,          &
                XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,          &
-               XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XDRYMASSS,                     &
+               XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XLSZWSS,XDRYMASSS,             &
                XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,          &
                XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS           )
   END IF
@@ -841,11 +838,13 @@ IF ( KMI > 1) THEN
   DPTR_XLSWM=>XLSWM
   DPTR_XLSTHM=>XLSTHM
   DPTR_XLSRVM=>XLSRVM
+  DPTR_XLSZWSM=>XLSZWSM
   DPTR_XLSUS=>XLSUS
   DPTR_XLSVS=>XLSVS
   DPTR_XLSWS=>XLSWS
   DPTR_XLSTHS=>XLSTHS
   DPTR_XLSRVS=>XLSRVS
+  DPTR_XLSZWSS=>XLSZWSS
   !
   DPTR_NKLIN_LBXU=>NKLIN_LBXU
   DPTR_XCOEFLIN_LBXU=>XCOEFLIN_LBXU
@@ -870,8 +869,8 @@ IF ( KMI > 1) THEN
        NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                  &
        DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT,                                &
        LSLEVE,XLEN1,XLEN2,                                   &
-       DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,                      &
-       DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,                      &
+       DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSZWSM,         &
+       DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSZWSS,         &
        DPTR_NKLIN_LBXU,DPTR_XCOEFLIN_LBXU,DPTR_NKLIN_LBYU,DPTR_XCOEFLIN_LBYU,    &
        DPTR_NKLIN_LBXV,DPTR_XCOEFLIN_LBXV,DPTR_NKLIN_LBYV,DPTR_XCOEFLIN_LBYV,    &
        DPTR_NKLIN_LBXW,DPTR_XCOEFLIN_LBXW,DPTR_NKLIN_LBYW,DPTR_XCOEFLIN_LBYW,    &
@@ -891,7 +890,7 @@ IF ( KMI > 1) THEN
   DPTR_XLBYRM=>XLBYRM
   DPTR_XLBXSVM=>XLBXSVM
   DPTR_XLBYSVM=>XLBYSVM
-  CALL INI_ONE_WAY_n(NDAD(KMI),HLUOUT,XTSTEP,KMI,1,                         &
+  CALL INI_ONE_WAY_n(NDAD(KMI),XTSTEP,KMI,1,                         &
        DPTR_XBMX1,DPTR_XBMX2,DPTR_XBMX3,DPTR_XBMX4,DPTR_XBMY1,DPTR_XBMY2,DPTR_XBMY3,DPTR_XBMY4,        &
        DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
        NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),NDTRATIO(KMI),      &
@@ -918,6 +917,10 @@ WRITE(COUTFILE,'(A,".",I1,".",A)') CEXP,KMI,TRIM(ADJUSTL(CSEG))
 !*       17.    INITIALIZE THE PARAMETERS FOR THE DYNAMICS
 !               ------------------------------------------
 !
+!Allocate to zero size to not pass unallocated pointers
+ALLOCATE(XALKBAS(0))
+ALLOCATE(XALKWBAS(0))
+!
 CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,            &
              XZHAT,CLBCX,CLBCY,XTSTEP,                                        &
              LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,              &
diff --git a/src/MNH/ini_surf_rad.f90 b/src/MNH/ini_surf_rad.f90
index e3c30fdf8352cc6f8465b90aad39bcc12dc95092..a6c4934e7a32a5926d90601e893a7ecf0a7eb62d 100644
--- a/src/MNH/ini_surf_rad.f90
+++ b/src/MNH/ini_surf_rad.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     ##########################
@@ -11,7 +11,7 @@ INTERFACE
 !
     SUBROUTINE INI_SURF_RAD(TPINIFILE, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB  ! Direct albedo
@@ -63,10 +63,10 @@ END MODULE MODI_INI_SURF_RAD
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 !
-USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -85,17 +85,17 @@ INTEGER           :: IID, IRESP
 TYPE(TFIELDDATA)  :: TZFIELD
 !-------------------------------------------------------------------------------
 !
-CALL IO_READ_FIELD(TPINIFILE,'DIR_ALB',PDIR_ALB)
-CALL IO_READ_FIELD(TPINIFILE,'SCA_ALB',PSCA_ALB)
+CALL IO_Field_read(TPINIFILE,'DIR_ALB',PDIR_ALB)
+CALL IO_Field_read(TPINIFILE,'SCA_ALB',PSCA_ALB)
 !
 CALL PRINT_MSG(NVERB_INFO,'IO','INI_SURF_RAD','EMIS: reading only first band (copy on others)')
 CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS',IID,IRESP)
 TZFIELD = TFIELDLIST(IID)
 TZFIELD%NDIMS = 2
-CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PEMIS(:,:,1))
+CALL IO_Field_read(TPINIFILE,TZFIELD,PEMIS(:,:,1))
 PEMIS(:,:,:) = SPREAD(SOURCE=PEMIS(:,:,1),DIM=3,NCOPIES=SIZE(PEMIS,3))
 !
-CALL IO_READ_FIELD(TPINIFILE,'TSRAD',PTSRAD)
+CALL IO_Field_read(TPINIFILE,'TSRAD',PTSRAD)
 !  
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90
index 887733edec7e871f9e68f5788220e80fb218a221..3d8f085963fea14de3ebad7877b4d984f42e2f2c 100644
--- a/src/MNH/ini_surfstationn.f90
+++ b/src/MNH/ini_surfstationn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #########################
@@ -68,7 +68,7 @@ END MODULE MODI_INI_SURFSTATION_n
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!
 !! --------------------------------------------------------------------------
-!       
+!
 !*      0. DECLARATIONS
 !          ------------
 !
@@ -82,7 +82,6 @@ USE MODD_STATION_n
 USE MODD_TYPE_DATE
 !
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/ini_sw_setup.f90 b/src/MNH/ini_sw_setup.f90
index e74318b9c236b5ffa7b503650d76cd3c1fa81bef..6408ee63b00fe915a2336a653d20eaec0a52168c 100644
--- a/src/MNH/ini_sw_setup.f90
+++ b/src/MNH/ini_sw_setup.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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 surfex 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ##########################
       MODULE MODI_INI_SW_SETUP
 !     ##########################
@@ -58,11 +53,13 @@ END MODULE MODI_INI_SW_SETUP
 !!      Original    03/03/03
 !!      modification : 01/09/03  Y. Seity, KSWB_MNH=6
 !!                   02/2018 Q.Libois ECRAD
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+use mode_msg
 !
 IMPLICIT NONE
 !
@@ -92,9 +89,7 @@ SELECT CASE (HRAD)
        PSW_BANDS(5) = 1.785E-6
        PSW_BANDS(6) = 3.19E-6
     ELSE
-       !callabortstop
-       CALL ABORT
-       STOP     
+       call Print_msg(NVERB_FATAL,'GEN','INI_SW_SETUP','invalid KSWB_MNH argument')
     ENDIF
     
   CASE ('ECRA') 
@@ -127,9 +122,7 @@ SELECT CASE (HRAD)
        PSW_BANDS(5) = 1.785E-6
        PSW_BANDS(6) = 3.19E-6
     ELSE
-!callabortstop
-CALL ABORT
-       STOP     
+       call Print_msg(NVERB_FATAL,'GEN','INI_SW_SETUP','invalid KSWB_MNH argument')
     ENDIF
 
 !
diff --git a/src/MNH/init_aerosol_properties.f90 b/src/MNH/init_aerosol_properties.f90
index 0c4c4e4f25eef4bb5d7b147c3d658886dab69ed7..84f1a5bd0eca3a6f509a72b224f882d3dfe027d0 100644
--- a/src/MNH/init_aerosol_properties.f90
+++ b/src/MNH/init_aerosol_properties.f90
@@ -35,6 +35,7 @@ END MODULE MODI_INIT_AEROSOL_PROPERTIES
 !!      Original             ??/??/13 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  Philippe Wautelet: 22/01/2019: bugs correction: incorrect writes + unauthorized goto
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
@@ -53,6 +54,8 @@ USE MODD_PARAM_LIMA,      ONLY : LWARM, LACTI, NMOD_CCN, HINI_CCN, HTYPE_CCN,
                                  CINT_MIXING, NMOD_IMM, NINDICE_CCN_IMM, NIMM,        &
                                  NPHILLIPS
 !
+use mode_msg
+!
 USE MODI_GAMMA
 !
 IMPLICIT NONE
@@ -218,9 +221,8 @@ IF ( NMOD_CCN .GE. 1 ) THEN
           XACTEMP0   = 290.16
           XALPHA6    = 3.076
        CASE DEFAULT
-          WRITE(UNIT=ILUOUT0,FMT='("You must specify HTYPE_CNN(JMOD)=C or M &
-               &in EXSEG1.nam for each CCN mode")')
-          CALL ABORT
+          call Print_msg(NVERB_FATAL,'GEN','INIT_AEROSOL_PROPERTIES','HTYPE_CNN(JMOD)=C or M must be specified'// &
+                                                                     ' in EXSEG1.nam for each CCN mode')
        ENDSELECT
 !
       XKHEN_MULTI(JMOD)   =   XKHEN0*(XLOGSIG_CCN(JMOD)/XLOGSIG0)**XALPHA1
diff --git a/src/MNH/init_for_convlfi.f90 b/src/MNH/init_for_convlfi.f90
index d302211ec3d11f56f8a669b7cad85eaac39eb67e..733aa93ca7bbeb0deb5e0cb40c82c58edbeea179 100644
--- a/src/MNH/init_for_convlfi.f90
+++ b/src/MNH/init_for_convlfi.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -11,7 +11,7 @@ MODULE MODI_INIT_FOR_CONVLFI
 INTERFACE
       SUBROUTINE INIT_FOR_CONVLFI(TPINIFILE)
 !
-USE MODD_IO_ll,ONLY: TFILEDATA
+USE MODD_IO,ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPINIFILE   ! file being read
 !
@@ -66,7 +66,7 @@ END MODULE MODI_INIT_FOR_CONVLFI
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll,ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_CST
@@ -74,20 +74,19 @@ USE MODD_DIM_n
 USE MODD_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_LUNIT_n,       ONLY: TLUOUT
 USE MODD_TIME
 USE MODD_TIME_n
-USE MODD_VAR_ll, ONLY : NPROC
+USE MODD_VAR_ll,        ONLY: NPROC
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_TIME
 USE MODE_GRIDPROJ
 USE MODE_GRIDCART
 !
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_GATHER_ll
-USE MODE_IO_ll
+USE MODE_IO,            only: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 !
 USE MODI_INI_CST
@@ -127,39 +126,39 @@ TYPE(TFIELDDATA)    :: TZFIELD
 !
 !*       1.1   Read the geometry kind in the LFIFM file (Cartesian or spherical)
 !
-CALL IO_READ_FIELD(TPINIFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_read(TPINIFILE,'CARTESIAN',LCARTESIAN)
 !
 !*       1.2  Read configuration and dimensions in initial file and initialize
 !             subdomain dimensions and parallel variables
 !
-CALL IO_READ_FIELD(TPINIFILE,'IMAX',NIMAX_ll)
-CALL IO_READ_FIELD(TPINIFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_read(TPINIFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_read(TPINIFILE,'JMAX',NJMAX_ll)
 !
-CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D,IRESP)
+CALL IO_Field_read(TPINIFILE,'L1D',L1D,IRESP)
 IF (IRESP/=0) THEN
   L1D=.FALSE.
   IF( (NIMAX_ll == 1).AND.(NJMAX_ll == 1) ) L1D=.TRUE.
 ENDIF  
 !
-CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D,IRESP)
+CALL IO_Field_read(TPINIFILE,'L2D',L2D,IRESP)
 IF (IRESP/=0) THEN
   L2D=.FALSE.
   IF( (NIMAX_ll /= 1).AND.(NJMAX_ll == 1) ) L2D=.TRUE.
 ENDIF  
 !
-CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK,IRESP)
+CALL IO_Field_read(TPINIFILE,'PACK',LPACK,IRESP)
 IF (IRESP/=0) LPACK=.TRUE.
 !
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 !
-CALL IO_READ_FIELD(TPINIFILE,'KMAX',NKMAX)
+CALL IO_Field_read(TPINIFILE,'KMAX',NKMAX)
 !
 CSPLIT ='BSPLITTING' ; NHALO = 1
 CALL SET_SPLITTING_ll(CSPLIT)
 CALL SET_JP_ll(1,JPHEXT,JPVEXT, NHALO)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX)
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_LBX_ll('OPEN', 1)
 CALL SET_LBY_ll('OPEN', 1)
 CALL SET_XRATIO_ll(1, 1)
@@ -185,27 +184,27 @@ CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX)
 !
 !        2.1  reading
 !
-CALL IO_READ_FIELD(TPINIFILE,'LAT0',XLAT0)
-CALL IO_READ_FIELD(TPINIFILE,'LON0',XLON0)
-CALL IO_READ_FIELD(TPINIFILE,'BETA',XBETA)
-CALL IO_READ_FIELD(TPINIFILE,'XHAT',XXHAT)
-CALL IO_READ_FIELD(TPINIFILE,'YHAT',XYHAT)
+CALL IO_Field_read(TPINIFILE,'LAT0',XLAT0)
+CALL IO_Field_read(TPINIFILE,'LON0',XLON0)
+CALL IO_Field_read(TPINIFILE,'BETA',XBETA)
+CALL IO_Field_read(TPINIFILE,'XHAT',XXHAT)
+CALL IO_Field_read(TPINIFILE,'YHAT',XYHAT)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'RPK',XRPK)
-  CALL IO_READ_FIELD(TPINIFILE,'LONORI',XLONORI)
-  CALL IO_READ_FIELD(TPINIFILE,'LATORI',XLATORI)
+  CALL IO_Field_read(TPINIFILE,'RPK',XRPK)
+  CALL IO_Field_read(TPINIFILE,'LONORI',XLONORI)
+  CALL IO_Field_read(TPINIFILE,'LATORI',XLATORI)
   !
   IF (TPINIFILE%NMNHVERSION(1)<4 .OR. (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)<=5)) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XLONORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XLONORI)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XLATORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XLATORI)
     !
     ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
     CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !//
@@ -220,29 +219,29 @@ IF (.NOT.LCARTESIAN) THEN
 END IF
 !
 ALLOCATE(XZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'ZS',XZS,IRESP)
+CALL IO_Field_read(TPINIFILE,'ZS',XZS,IRESP)
 IF (IRESP/=0) XZS(:,:)=0.
 !
 ALLOCATE(XZSMT(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'ZSMT',XZSMT,IRESP)
+CALL IO_Field_read(TPINIFILE,'ZSMT',XZSMT,IRESP)
 IF (IRESP/=0) XZSMT(:,:)=XZS(:,:)
 !
 ALLOCATE(XZHAT(IKU))
-CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT)
-CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP)
+CALL IO_Field_read(TPINIFILE,'ZHAT',XZHAT)
+CALL IO_Field_read(TPINIFILE,'ZTOP',XZTOP)
 !
-CALL IO_READ_FIELD(TPINIFILE,'SLEVE',LSLEVE,IRESP)
+CALL IO_Field_read(TPINIFILE,'SLEVE',LSLEVE,IRESP)
 IF (IRESP/=0) LSLEVE = .FALSE.
 !
 IF (LSLEVE) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'LEN1',XLEN1)
-  CALL IO_READ_FIELD(TPINIFILE,'LEN2',XLEN2)
+  CALL IO_Field_read(TPINIFILE,'LEN1',XLEN1)
+  CALL IO_Field_read(TPINIFILE,'LEN2',XLEN2)
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'DTEXP',TDTEXP)
-CALL IO_READ_FIELD(TPINIFILE,'DTMOD',TDTMOD)
-CALL IO_READ_FIELD(TPINIFILE,'DTSEG',TDTSEG)
-CALL IO_READ_FIELD(TPINIFILE,'DTCUR',TDTCUR)
+CALL IO_Field_read(TPINIFILE,'DTEXP',TDTEXP)
+CALL IO_Field_read(TPINIFILE,'DTMOD',TDTMOD)
+CALL IO_Field_read(TPINIFILE,'DTSEG',TDTSEG)
+CALL IO_Field_read(TPINIFILE,'DTCUR',TDTCUR)
 !
 YTITLE='CURRENT DATE AND TIME'
 CALL SM_PRINT_TIME(TDTCUR,TLUOUT,YTITLE)
@@ -271,7 +270,7 @@ END IF
 !*       3.    INITIALIZE THE PROGNOSTIC AND SURFACE FIELDS (read_field)
 !              --------------------------------------------
 ALLOCATE(XPABST(IIU,IJU,IKU))
-CALL IO_READ_FIELD(TPINIFILE,'PABST',XPABST)
+CALL IO_Field_read(TPINIFILE,'PABST',XPABST)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/init_ground_paramn.f90 b/src/MNH/init_ground_paramn.f90
index 95a5bcee7c0af414470d9665e3bf2e9681ef9d44..f8e37bd5ae848f9c2b7666495657cc0d07044935 100644
--- a/src/MNH/init_ground_paramn.f90
+++ b/src/MNH/init_ground_paramn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     #######################
@@ -74,7 +74,6 @@ END MODULE MODI_INIT_GROUND_PARAM_n
 !              ------------
 !
 USE MODE_DATETIME
-USE MODE_IO_ll
 USE MODE_FIELD
 USE MODE_ll
 !
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index 61f9bce84835cc8b5478f93a519fae6b4695103f..5a98a2572b8977b707726d07ef6a89170cef4fe5 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###############
@@ -47,8 +47,6 @@
 !!
 !!      Module MODD_CONF       : NMODEL,NVERB
 !!
-!!      Module MODD_LUNIT      : CLUOUT0
-!!
 !!    REFERENCE
 !!    ---------
 !!      Book2 of documentation (routine INIT_MNH)
@@ -72,13 +70,14 @@
 !!      J.Escobar   2/03/2016 bypass , reset NHALO=1 for SPAWNING
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 USE MODD_CONF
 USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose
-USE MODD_IO_ll, ONLY: TFILE_OUTPUTLISTING,TPTR2FILE
+USE MODD_IO,    ONLY: TFILE_OUTPUTLISTING, TPTR2FILE
 USE MODD_LBC_n, ONLY: CLBCX,CLBCY   ! only for spawning purpose
 USE MODD_LUNIT
 USE MODD_LUNIT_n
@@ -86,9 +85,8 @@ USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS
 !
 USE MODE_FIELD
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
@@ -113,8 +111,6 @@ IMPLICIT NONE
 !*       0.1   Local variables
 !
 INTEGER :: JMI                                        !  Loop index
-CHARACTER(LEN=16), DIMENSION(JPMODELMAX) :: YLUOUT    ! Name for output-listing
-                                                      ! of nested models
 CHARACTER(LEN=28),DIMENSION(JPMODELMAX)  :: YINIFILEPGD
 INTEGER  :: ILUOUT0,IRESP                             ! Logical unit number for
                                                       ! output-listing common
@@ -135,9 +131,8 @@ CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
 !
 !
 IF (CPROGRAM/='REAL  ') THEN
-  CLUOUT0 = 'OUTPUT_LISTING0'
-  CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-  CALL IO_FILE_OPEN_ll(TLUOUT0)
+  CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+  CALL IO_File_open(TLUOUT0)
   !Set output file for PRINT_MSG
   TFILE_OUTPUTLISTING => TLUOUT0
   ILUOUT0=TLUOUT0%NLU
@@ -176,11 +171,11 @@ IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='DIAG  ' .OR. CPROGRAM=='SPEC  ' .OR. CPRO
 END IF
 !
 CALL GOTO_MODEL(1)
-CALL INI_SEG_n(1,YLUOUT(1),LUNIT_MODEL(1)%TINIFILE,YINIFILEPGD(1),ZTSTEP_ALL)
+CALL INI_SEG_n(1,LUNIT_MODEL(1)%TINIFILE,YINIFILEPGD(1),ZTSTEP_ALL)
 !
 DO JMI=2,NMODEL
   CALL GOTO_MODEL(JMI)
-  CALL INI_SEG_n(JMI,YLUOUT(JMI),LUNIT_MODEL(JMI)%TINIFILE,YINIFILEPGD(JMI),ZTSTEP_ALL)
+  CALL INI_SEG_n(JMI,LUNIT_MODEL(JMI)%TINIFILE,YINIFILEPGD(JMI),ZTSTEP_ALL)
 END DO
 !
 IF (CPROGRAM=='SPAWN ') THEN 
@@ -188,7 +183,7 @@ IF (CPROGRAM=='SPAWN ') THEN
   NHALO = 1
 END IF
 !
-IF (CPROGRAM=='DIAG') CALL RESET_EXSEG(YLUOUT(1))
+IF (CPROGRAM=='DIAG') CALL RESET_EXSEG()
 !
 !-------------------------------------------------------------------------------
 !
@@ -198,7 +193,7 @@ IF (CPROGRAM=='DIAG') CALL RESET_EXSEG(YLUOUT(1))
 !
 DO JMI=1,NMODEL
   CALL GOTO_MODEL(JMI)
-  CALL INI_SIZE_n(JMI,YLUOUT(JMI),LUNIT_MODEL(JMI)%TINIFILE,YINIFILEPGD(JMI))
+  CALL INI_SIZE_n(JMI,LUNIT_MODEL(JMI)%TINIFILE,YINIFILEPGD(JMI))
 END DO
 !
 IF (CPROGRAM=='SPAWN ') THEN 
@@ -242,11 +237,11 @@ DO JMI=1,NMODEL
   CALL GO_TOMODEL_ll(JMI,IINFO_ll)
   CALL GOTO_MODEL(JMI)
   IF (CPROGRAM/='SPEC  ') THEN
-    CALL INI_MODEL_n(JMI,YLUOUT(JMI),LUNIT_MODEL(JMI)%TINIFILE)
+    CALL INI_MODEL_n(JMI,LUNIT_MODEL(JMI)%TINIFILE)
     !Call necessary to update the TFIELDLIST pointers to the data
     CALL FIELDLIST_GOTO_MODEL(JMI,JMI)
   ELSE
-    CALL INI_SPECTRE_n(JMI,YLUOUT(JMI),LUNIT_MODEL(JMI)%TINIFILE)
+    CALL INI_SPECTRE_n(JMI,LUNIT_MODEL(JMI)%TINIFILE)
   END IF  
 END DO
 !
diff --git a/src/MNH/init_salt.f90 b/src/MNH/init_salt.f90
new file mode 100644
index 0000000000000000000000000000000000000000..8576133e95103e1c696a7ff7482cb590ddfdfa4a
--- /dev/null
+++ b/src/MNH/init_salt.f90
@@ -0,0 +1,74 @@
+!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
+!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!ORILAM_LIC for details.
+!-----------------------------------------------------------------
+
+!!    ######################
+      SUBROUTINE INIT_SALT
+!!    ######################
+!     PURPOSE
+!!     -------
+!!
+!!     initialization of variables for the sea salt scheme
+!!
+!!     METHOD
+!!     ------
+!!
+!!
+!!     REFERENCE
+!!     ---------
+!!     none
+!!
+!!
+!!     AUTHOR
+!!     ------
+!!     Marine Claeys (CNRM)
+!!
+!!     MODIFICATIONS
+!!     -------------
+!!
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!
+USE MODD_SALT
+!
+IMPLICIT NONE
+
+IF(NMODE_SLT == 5) THEN
+
+!JPSALTORDER = (/5, 4, 3, 2, 1 /)
+!Initial dry number median radius (um) from Ova et al., 2014
+XINIRADIUS_SLT=  (/0.009, 0.021, 0.045, 0.115, 0.415/)
+!Initial, standard deviation from  Ova et al., 2014
+XINISIG_SLT =  (/ 1.37, 1.5, 1.42, 1.53, 1.85 /)
+!Minimum allowed number concentration for any mode (#/m3)
+XN0MIN_SLT  = (/1. , 1., 1., 1., 1. /)
+
+
+ELSE IF ( NMODE_SLT == 3) THEN
+
+! Set the order of the loops sorted by importance
+!This means that if a user choses 1 mode it will have characteristics of mode 2
+!2 modes will be mode 2 & 3, whereas 3 modes will modes 1, 2 and 3
+!JPSALTORDER = (/3, 2, 1, 4, 5/)
+! 
+   !Initial dry number median radius (um) from Vignati et al., 2001
+   ! XINIRADIUS_SLT= (/0.2, 2., 12./)
+   !Initial, standard deviation from Vignati et al., 2001
+   ! XINISIG_SLT =  (/1.9, 2., 3./)
+   !Minimum allowed number concentration for any mode (#/m3)
+   ! XN0MIN_SLT  = (/1.e1 , 1. , 1.e-4 /)
+
+
+!Pour 3 modes Schultz
+!Initial dry number median radius (um) from Schultz et al., 2004
+ XINIRADIUS_SLT= 0.5*(/0.28, 2.25, 15.32, 0., 0. /)
+!Initial, standard deviation from  Schultz et al., 2004
+ XINISIG_SLT =  (/1.9, 2., 2., 0., 0./)
+!Minimum allowed number concentration for any mode (#/m3)
+ XN0MIN_SLT  = (/1.e1 , 1. , 1.e-4, 0., 0. /)
+!
+END IF
+
+
+END SUBROUTINE INIT_SALT
diff --git a/src/MNH/khko_notadjust.f90 b/src/MNH/khko_notadjust.f90
index a1cf0d41ea97992600d3e8deb9371b398d7a9b3f..2cd179fc58e0933e5c913c3cc8dc6c57f26b88a0 100644
--- a/src/MNH/khko_notadjust.f90
+++ b/src/MNH/khko_notadjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -15,7 +15,7 @@ INTERFACE
                                 PTHS, PRVS, PRCS, PRRS, PCCS, PCNUCS, PSAT,         &
                                 PCLDFR, PSRCS, PNPRO,PSSPRO                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KRR      ! Number of moist variables
 INTEGER,                  INTENT(IN)    :: KTCOUNT      ! Number of moist variables
@@ -99,7 +99,7 @@ END MODULE MODI_KHKO_NOTADJUST
 USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_NSV,             ONLY: NSV_C2R2BEG
 USE MODD_PARAMETERS
@@ -107,8 +107,7 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: XRTMIN
 
 !
 USE MODE_FIELD,           ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
-USE MODE_IO_ll
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_BUDGET
@@ -391,7 +390,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   TZFIELD%CMNHNAME   = 'ACT_OD'
   TZFIELD%CSTDNAME   = ''
@@ -403,7 +402,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZACT)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZACT)
 END IF
 !
 !*       7.  STORE THE BUDGET TERMS
diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90
index eea3c591efb37e1539b6864dd95473b7420a98d7..0b6d8b6584f6b28eae20d160e00abd9ac8de2824 100644
--- a/src/MNH/latlon_to_xy.f90
+++ b/src/MNH/latlon_to_xy.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ####################
@@ -55,27 +55,28 @@
 !!    no transfer of the file when closing   Dec. 09, 1996 (V.Masson)
 !!    + changes call to READ_HGRID
 !!  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
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_GRID      
-USE MODD_IO_ll,  ONLY: TFILEDATA
+USE MODD_GRID
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
-USE MODE_FM
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 !
 USE MODI_INI_CST
 USE MODI_READ_HGRID
 !
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
 !
 IMPLICIT NONE
 !
@@ -118,22 +119,22 @@ CALL INI_CST
 !*    2.     Reading of namelist file
 !            ------------------------
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 INAM=TZNMLFILE%NLU
 READ(INAM,NAM_INIFILE)
 !
 READ(INAM,NAM_CONFIO)
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !*    1.     Opening of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_ADD2LIST(TZINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=2)
-CALL IO_FILE_OPEN_ll(TZINIFILE)
+CALL IO_File_add2list(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2)
+CALL IO_File_open(TZINIFILE)
 !
 !*    2.     Reading of MESONH file
 !            ----------------------
@@ -143,7 +144,7 @@ CALL READ_HGRID(0,TZINIFILE,YNAME,YDAD,YSTORAGE_TYPE)
 !*    3.     Closing of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZINIFILE)
+CALL IO_File_close(TZINIFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/les_specn.f90 b/src/MNH/les_specn.f90
index be4c3b404dde16e6273c615e8af11f35ec08f8ab..d95300068acd362bb731f6c51a9f656b56df3205 100644
--- a/src/MNH/les_specn.f90
+++ b/src/MNH/les_specn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !     ######################
@@ -58,7 +58,7 @@ CONTAINS
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,    ONLY: TFILEDATA
 USE MODD_LBC_n, ONLY: CLBCX, CLBCY
 USE MODD_LES
 USE MODD_LES_n
diff --git a/src/MNH/les_ver_int.f90 b/src/MNH/les_ver_int.f90
index aa1b2ac0c5198ca2b6383f16c081d8e6443d0910..09740547c672e7ef85aad17984758df89ea14e7f 100644
--- a/src/MNH/les_ver_int.f90
+++ b/src/MNH/les_ver_int.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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 les 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !      ################
 MODULE MODI_LES_VER_INT
 !      ################
@@ -68,6 +63,7 @@ END MODULE MODI_LES_VER_INT
 !!    MODIFICATIONS
 !!    -------------
 !!      Original         07/02/00
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -78,6 +74,7 @@ USE MODD_LES
 USE MODD_PARAMETERS
 !
 USE MODE_ll
+use mode_msg
 !
 USE MODI_VER_INTERP_LIN
 !
@@ -107,10 +104,7 @@ ELSE IF (CLES_LEVEL_TYPE=='Z') THEN
     PA_LES = XUNDEF
   END WHERE
 ELSE
-  PRINT*, '-------> STOP in LES_VER_INT <----------'
-!callabortstop
-CALL ABORT
-  STOP
+  call Print_msg(NVERB_FATAL,'GEN','LES_VER_INT','invalid CLES_LEVEL_TYPE ('//trim(CLES_LEVEL_TYPE)//')')
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/lesn.f90 b/src/MNH/lesn.f90
index eea67385bf0d09f146943e76e2dd50fc7fdaaaac..3eae3fc04d59c273e750b89bb0ef769ad7e3d3f9 100644
--- a/src/MNH/lesn.f90
+++ b/src/MNH/lesn.f90
@@ -42,6 +42,7 @@
 !!                10/14    (C.Lac) Correction on user masks
 !!                10/16    (C.Lac) Add ground droplet deposition amount
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
 !!
 !! --------------------------------------------------------------------------
 !
@@ -107,6 +108,7 @@ REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZEW
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZINDCLD   !indice cloud si rc>0
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZINDCLD2  !indice cloud rc>1E-5
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZCLDFR_LES! CLDFR    on LES vertical grid
+REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZRAINFR_LES! RAINFR   on LES vertical grid
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZMASSF    ! massflux=rho*w
 REAL, DIMENSION(:,:,:),   ALLOCATABLE :: ZREHU     ! relative humidity
 
@@ -333,12 +335,14 @@ IF (LUSERR) THEN
   ALLOCATE(ZRWP_LES(IIU,IJU))
   ALLOCATE(ZINPRR3D_LES (IIU,IJU,NLES_K))
   ALLOCATE(ZEVAP3D_LES  (IIU,IJU,NLES_K))
+  ALLOCATE(ZRAINFR_LES(IIU,IJU,NLES_K))
 ELSE
   ALLOCATE(ZRR_LES  (0,0,0))
   ALLOCATE(ZMAXWRR2D(0,0))
   ALLOCATE(ZRWP_LES(0,0))
   ALLOCATE(ZINPRR3D_LES(0,0,0))
   ALLOCATE(ZEVAP3D_LES(0,0,0))
+  ALLOCATE(ZRAINFR_LES(0,0,0))
 END IF
 IF (LUSERI) THEN
   ALLOCATE(ZRI_LES    (IIU,IJU,NLES_K))
@@ -554,6 +558,7 @@ IF (LUSERR) THEN
   CALL LES_VER_INT(     XRT(:,:,:,IRR)  ,ZRR_LES )
   CALL LES_VER_INT(     XINPRR3D(:,:,:), ZINPRR3D_LES)
   CALL LES_VER_INT(    XEVAP3D(:,:,:), ZEVAP3D_LES)
+  CALL LES_VER_INT( XRAINFR(:,:,:)  ,ZRAINFR_LES )
 END IF
 IF (LUSERC) THEN
     DO JJ=1,IJU
@@ -779,6 +784,8 @@ END IF
                      XLES_ACPRR(NLES_CURRENT_TCOUNT)    )
 !   conversion de m en mm
     XLES_ACPRR(NLES_CURRENT_TCOUNT)=XLES_ACPRR(NLES_CURRENT_TCOUNT)*1000.
+    CALL LES_MEAN_ll ( ZRAINFR_LES, LLES_CURRENT_CART_MASK,            &
+                    XLES_MEAN_RF(:,NLES_CURRENT_TCOUNT,1)        )
 
   ENDIF
 !
@@ -1041,6 +1048,7 @@ DEALLOCATE(ZINDCLD2  )
 DEALLOCATE(ZINDCLD2D )
 DEALLOCATE(ZINDCLD2D2)
 DEALLOCATE(ZCLDFR_LES)
+DEALLOCATE(ZRAINFR_LES)
 DEALLOCATE(ZMASSF    )  
 DEALLOCATE(ZTEMP     )
 DEALLOCATE(ZREHU     )
diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90
index d9149be2aa1406d01b7baf65d4aab9f8ea5112a3..7da0841e1b8fde7218257de8d6d111012caebb24 100644
--- a/src/MNH/lima.f90
+++ b/src/MNH/lima.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !      ######spl
 MODULE MODI_LIMA
@@ -18,7 +18,7 @@ INTERFACE
                      PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
                      PEVAP3D                                         )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
 INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
@@ -95,12 +95,13 @@ END MODULE MODI_LIMA
 !!    -------------
 !!      Original   15/03/2018
 !!
+!!      B.Vié  02/2019 : minor correction on budget
 !!
 !!
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_CLOUDPAR_n,     ONLY : NSPLITR, NSPLITG
 USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,     ONLY : LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI,      &
@@ -640,6 +641,12 @@ Z_CR_CVRC(:,:,:) = 0.
 IF (LWARM .AND. LRAIN) THEN
    CALL LIMA_DROPS_TO_DROPLETS_CONV(PRHODREF, ZRCS*PTSTEP, ZRRS*PTSTEP, ZCCS*PTSTEP, ZCRS*PTSTEP, &
                                     Z_RR_CVRC, Z_CR_CVRC)
+   !
+   ZRCS(:,:,:) = ZRCS(:,:,:) - Z_RR_CVRC(:,:,:)/PTSTEP
+   ZRRS(:,:,:) = ZRRS(:,:,:) + Z_RR_CVRC(:,:,:)/PTSTEP
+   ZCCS(:,:,:) = ZCCS(:,:,:) - Z_CR_CVRC(:,:,:)/PTSTEP
+   ZCRS(:,:,:) = ZCRS(:,:,:) + Z_CR_CVRC(:,:,:)/PTSTEP
+   !
    IF(LBU_ENABLE) THEN
       IF (LBUDGET_RC) CALL BUDGET (ZRCS(:,:,:)*PRHODJ(:,:,:), 7  , 'R2C1_BU_RRC')
       IF (LBUDGET_RR) CALL BUDGET (ZRRS(:,:,:)*PRHODJ(:,:,:), 8  , 'R2C1_BU_RRR')
@@ -655,15 +662,15 @@ END IF
 ZTHT(:,:,:) = ZTHS(:,:,:) * PTSTEP
 ZT(:,:,:)   = ZTHT(:,:,:) * ZEXN(:,:,:)
 !
-IF ( KRR .GE. 2 ) ZRCT(:,:,:) = ZRCS(:,:,:) * PTSTEP - Z_RR_CVRC(:,:,:)
-IF ( KRR .GE. 3 ) ZRRT(:,:,:) = ZRRS(:,:,:) * PTSTEP + Z_RR_CVRC(:,:,:)
+IF ( KRR .GE. 2 ) ZRCT(:,:,:) = ZRCS(:,:,:) * PTSTEP
+IF ( KRR .GE. 3 ) ZRRT(:,:,:) = ZRRS(:,:,:) * PTSTEP
 IF ( KRR .GE. 4 ) ZRIT(:,:,:) = ZRIS(:,:,:) * PTSTEP
 IF ( KRR .GE. 5 ) ZRST(:,:,:) = ZRSS(:,:,:) * PTSTEP
 IF ( KRR .GE. 6 ) ZRGT(:,:,:) = ZRGS(:,:,:) * PTSTEP
 IF ( KRR .GE. 7 ) ZRHT(:,:,:) = ZRHS(:,:,:) * PTSTEP
 !
-IF ( LWARM )             ZCCT(:,:,:)   = ZCCS(:,:,:) * PTSTEP - Z_CR_CVRC(:,:,:)
-IF ( LWARM .AND. LRAIN ) ZCRT(:,:,:)   = ZCRS(:,:,:) * PTSTEP + Z_CR_CVRC(:,:,:)
+IF ( LWARM )             ZCCT(:,:,:)   = ZCCS(:,:,:) * PTSTEP
+IF ( LWARM .AND. LRAIN ) ZCRT(:,:,:)   = ZCRS(:,:,:) * PTSTEP
 IF ( LCOLD )             ZCIT(:,:,:)   = ZCIS(:,:,:) * PTSTEP
 ! 
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90
index 7d20f4f446f510bc6e5d93eae49f61e0d7642fa4..c09f7abd30d5ebdec856a9021d70af90b42166e5 100644
--- a/src/MNH/lima_adjust.f90
+++ b/src/MNH/lima_adjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -15,7 +15,7 @@ INTERFACE
                              PRT, PRS, PSVT, PSVS,                             &
                              PTHS, PSRCS, PCLDFR                               )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
@@ -135,6 +135,7 @@ END MODULE MODI_LIMA_ADJUST
 !!      C. Barthe  * LACy*   jan. 2014  add budgets
 !!      JP Chaboureau *LA*   March 2014  fix the calculation of icy cloud fraction
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
@@ -144,8 +145,8 @@ END MODULE MODI_LIMA_ADJUST
 USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_NSV
 USE MODD_PARAMETERS
 USE MODD_PARAM_LIMA
@@ -153,9 +154,9 @@ USE MODD_PARAM_LIMA_COLD
 USE MODD_PARAM_LIMA_MIXED
 USE MODD_PARAM_LIMA_WARM
 !
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODE_FIELD,            ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
+use mode_msg
 !
 USE MODI_BUDGET
 USE MODI_CONDENS
@@ -421,10 +422,7 @@ DO JITER =1,ITERMAX
 !               ---------------------------------------
 !
   IF ( OSUBG_COND ) THEN
-!
-! not yet available
-!
-     STOP
+    call Print_msg( NVERB_FATAL, 'GEN', 'LIMA_ADJUST', 'OSUBG_COND=.true. not yet developed' )
   ELSE
 !
 !-------------------------------------------------------------------------------
@@ -1133,7 +1131,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
 !
@@ -1188,7 +1186,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
 !
diff --git a/src/MNH/lima_ccn_activation.f90 b/src/MNH/lima_ccn_activation.f90
index 884c98379005ec3379a966730f7c275d3ac1fbc2..8ddde4450d5882b37d7a0b328e087f00de386202 100644
--- a/src/MNH/lima_ccn_activation.f90
+++ b/src/MNH/lima_ccn_activation.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !      ###############################
        MODULE MODI_LIMA_CCN_ACTIVATION
 !      ###############################
@@ -10,7 +11,7 @@ INTERFACE
    SUBROUTINE LIMA_CCN_ACTIVATION (PTSTEP, TPFILE, OCLOSE_OUT,                 &
                                    PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,   &
                                    PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT     )
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
                                                       ! (single if cold start)
@@ -86,26 +87,26 @@ END MODULE MODI_LIMA_CCN_ACTIVATION
 !!    MODIFICATIONS
 !!    -------------
 !!      Original             ??/??/13 
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
-USE MODD_PARAM_LIMA,      ONLY : LACTIT, NMOD_CCN, XKHEN_MULTI, XCTMIN, XLIMIT_FACTOR
-USE MODD_PARAM_LIMA_WARM, ONLY : XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, &
-                                 XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XPSI1
+USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
+USE MODD_CST,             ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
+USE MODD_PARAM_LIMA,      ONLY: LACTIT, NMOD_CCN, XKHEN_MULTI, XCTMIN, XLIMIT_FACTOR
+USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, &
+                                XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XPSI1
 !
 USE MODI_GAMMA
 USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n,         ONLY : TLUOUT
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODD_IO,              ONLY: TFILEDATA
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODE_FIELD,           ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -467,19 +468,19 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
   !
   TZFIELD%CMNHNAME   ='NACT'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = '/kg'
+  TZFIELD%CUNITS     = 'kg-1'
   TZFIELD%CDIR       = 'XY'
   TZFIELD%CCOMMENT   = 'X_Y_Z_NACT'
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW2)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
 END IF
 !
 !
@@ -539,6 +540,8 @@ CONTAINS
 !*       0. DECLARATIONS
 !
 !
+use mode_msg
+!
 IMPLICIT NONE
 !
 !*       0.1 declarations of arguments and result
@@ -606,8 +609,6 @@ DO JL = 1, NPTS
             PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2
             fh(JL)   = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL)
             go to 100
-            print*, 'PZRIDDR: never get here'
-            STOP
          end if
          if (abs(xh-xl) <= PXACC) then
             GO TO 101 
@@ -619,8 +620,7 @@ DO JL = 1, NPTS
 !!$      endif   
 !!SB
       end do
-      print*, 'PZRIDDR: exceeded maximum iterations',j
-      STOP
+      call Print_msg( NVERB_FATAL, 'GEN', 'ZRIDDR', 'exceeded maximum iterations' )
    else if (fl(JL) == 0.0) then
       PZRIDDR(JL)=PX1
    else if (fh(JL) == 0.0) then
diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90
index f18b785891f504006028159932e2bcacd722d1d8..e3efc478d7c83f49440a8f7c344103bd4ec19768 100644
--- a/src/MNH/lima_nucleation_procs.f90
+++ b/src/MNH/lima_nucleation_procs.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2013-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !      ###############################
        MODULE MODI_LIMA_NUCLEATION_PROCS
 !      ###############################
@@ -13,7 +14,7 @@ INTERFACE
                                      PCCT, PCRT, PCIT,                             &
                                      PNFT, PNAT, PIFT, PINT, PNIT, PNHT            )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
@@ -78,7 +79,7 @@ USE MODD_BUDGET,     ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUD
 USE MODD_NSV,        ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE,               &
                             NSV_LIMA_NI, NSV_LIMA_IFN_FREE
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODI_BUDGET
 USE MODI_LIMA_CCN_ACTIVATION
 USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
diff --git a/src/MNH/lima_sedimentation.f90 b/src/MNH/lima_sedimentation.f90
index ab0ebebcacad806e971b9dd53cf218122dc3590c..36b173a84f6ddf84e9e7a3732007891dca1b5b48 100644
--- a/src/MNH/lima_sedimentation.f90
+++ b/src/MNH/lima_sedimentation.f90
@@ -61,6 +61,7 @@ END MODULE MODI_LIMA_SEDIMENTATION
 !!    -------------
 !!      Original             15/03/2018
 !!
+!!      B.Vie  02/2019  Desactivate (comment) the heat transport by droplets
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -205,14 +206,14 @@ DO JN = 1 ,  NSPLITSED(KID)
          IF (KMOMENTS==2) PCS(:,:,JK) = PCS(:,:,JK) + ZW(:,:,JK)*    &
               (ZWSEDC(:,:,JK+KKL)-ZWSEDC(:,:,JK))/PRHODREF(:,:,JK)
          ! Heat transport
-         PRT_SUM(:,:,JK-KKL) = PRT_SUM(:,:,JK-KKL) + ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL)
-         PRT_SUM(:,:,JK) = PRT_SUM(:,:,JK) - ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK)
-         PCPT(:,:,JK-KKL) = PCPT(:,:,JK-KKL) + ZC * (ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL))
-         PCPT(:,:,JK) = PCPT(:,:,JK) - ZC * (ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK))
-         ZWDT(:,:,JK) =(PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK)*PT(:,:,JK) + &
-              ZW(:,:,JK)*ZWSEDR(:,:,JK+1)*ZC*PT(:,:,JK+KKL)) / &
-              (PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK) + ZW(:,:,JK)*ZWSEDR(:,:,JK+KKL)*ZC)
-         ZWDT(:,:,JK) = ZWDT(:,:,JK) - PT(:,:,JK)
+         !PRT_SUM(:,:,JK-KKL) = PRT_SUM(:,:,JK-KKL) + ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL)
+         !PRT_SUM(:,:,JK) = PRT_SUM(:,:,JK) - ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK)
+         !PCPT(:,:,JK-KKL) = PCPT(:,:,JK-KKL) + ZC * (ZW(:,:,JK-KKL)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK-KKL))
+         !PCPT(:,:,JK) = PCPT(:,:,JK) - ZC * (ZW(:,:,JK)*ZWSEDR(:,:,JK)/PRHODREF(:,:,JK))
+         !ZWDT(:,:,JK) =(PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK)*PT(:,:,JK) + &
+         !     ZW(:,:,JK)*ZWSEDR(:,:,JK+1)*ZC*PT(:,:,JK+KKL)) / &
+         !     (PRHODREF(:,:,JK+KKL)*(1.+PRT_SUM(:,:,JK))*PCPT(:,:,JK) + ZW(:,:,JK)*ZWSEDR(:,:,JK+KKL)*ZC)
+         !ZWDT(:,:,JK) = ZWDT(:,:,JK) - PT(:,:,JK)
       END DO
       DEALLOCATE(ZRHODREF)
       DEALLOCATE(ZPABST)
diff --git a/src/MNH/lima_warm.f90 b/src/MNH/lima_warm.f90
index 35961b3ba0a6cea51ad80c2935d0dce7c67377c7..1ac67f3ce0e7830f0112bad40bf766dbcb0fd783 100644
--- a/src/MNH/lima_warm.f90
+++ b/src/MNH/lima_warm.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #####################
@@ -16,7 +16,7 @@ INTERFACE
                             PTHS, PRS, PSVS,                              &
                             PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D     )
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 !
 LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
                                                       ! activation by radiative
@@ -144,14 +144,11 @@ USE MODD_NSV
 USE MODD_BUDGET
 USE MODI_BUDGET
 !
-USE MODE_FM
-USE MODE_FMWRIT
-!
 USE MODI_LIMA_WARM_SEDIMENTATION
 USE MODI_LIMA_WARM_NUCL
 USE MODI_LIMA_WARM_COAL
 USE MODI_LIMA_WARM_EVAP
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 !
 IMPLICIT NONE
diff --git a/src/MNH/lima_warm_nucl.f90 b/src/MNH/lima_warm_nucl.f90
index 66b235e485fe9105fbbff74cb47cca091c47080b..abe784f5633f24ef36507bee97f0fd8a80bae368 100644
--- a/src/MNH/lima_warm_nucl.f90
+++ b/src/MNH/lima_warm_nucl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ##########################
@@ -13,7 +13,7 @@ INTERFACE
                                  PRCM, PRVT, PRCT, PRRT,                          &
                                  PTHS, PRVS, PRCS, PCCS, PNFS, PNAS               )
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 !
 LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
                                                       ! activation by radiative
@@ -102,25 +102,25 @@ END MODULE MODI_LIMA_WARM_NUCL
 !!      Original             ??/??/13 
 !!      J. Escobar : 10/2017 , for real*4 use XMNH_EPSILON
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
+USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
 USE MODD_CST
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_LIMA_WARM
 !
 USE MODI_GAMMA
-USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
+USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
 !
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
+USE MODD_IO,              ONLY: TFILEDATA
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODE_FIELD,           ONLY : TFIELDDATA, TYPEREAL
 !
 IMPLICIT NONE
 !
@@ -132,7 +132,7 @@ LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
                                                       ! (single if cold start)
 INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-TYPE(TFILEDATA),          INTENT(IN)   :: TPFILE     ! Output file
+TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
 LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
                                                       ! the output FM file
 !
@@ -535,19 +535,19 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
   !
   TZFIELD%CMNHNAME   ='NACT'
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-  TZFIELD%CUNITS     = '/kg'
+  TZFIELD%CUNITS     = 'kg-1'
   TZFIELD%CDIR       = 'XY'
   TZFIELD%CCOMMENT   = 'X_Y_Z_NACT'
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW2)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
 END IF
 !
 !
@@ -607,6 +607,8 @@ CONTAINS
 !*       0. DECLARATIONS
 !
 !
+use mode_msg
+!
 IMPLICIT NONE
 !
 !*       0.1 declarations of arguments and result
@@ -674,7 +676,6 @@ DO JL = 1, NPTS
             PRINT*, 'PX2 ALWAYS too small, we put a greater one : PX2 =',PX2
             fh(JL)   = SINGL_FUNCSMAX(PX2,PZZW3(JL),JL)
             go to 100
-            STOP
          end if
          if (abs(xh-xl) <= PXACC) then
             GO TO 101 
@@ -686,7 +687,7 @@ DO JL = 1, NPTS
 !!$      endif   
 !!SB
       end do
-      STOP
+      call Print_msg( NVERB_FATAL, 'GEN', 'ZRIDDR', 'exceeded maximum iterations' )
    else if (fl(JL) == 0.0) then
       PZRIDDR(JL)=PX1
    else if (fh(JL) == 0.0) then
diff --git a/src/MNH/lochead.f90 b/src/MNH/lochead.f90
index d77bbadba5dd82483fbe30bacf1e5bcc4c1ec9d1..5bb77e10e11d38be1b544b40841ff5f96d5cf014 100644
--- a/src/MNH/lochead.f90
+++ b/src/MNH/lochead.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ###################
@@ -77,9 +77,9 @@ END MODULE MODI_LOCHEAD
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_IO_ll,            ONLY : TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
 !
 IMPLICIT NONE
 !
@@ -125,7 +125,7 @@ TYPE(TFILEDATA),POINTER    :: TZFILE
 !-------------------------------------------------------------------------------
 !
 IF (ODATASAVE) THEN
-  CALL IO_FILE_FIND_BYNAME(HSAVEDDATAFILE,TZFILE,IRESP)
+  CALL IO_File_find_byname(HSAVEDDATAFILE,TZFILE,IRESP)
   ISAVE = TZFILE%NLU
 END IF
 !
diff --git a/src/MNH/ls_coupling.f90 b/src/MNH/ls_coupling.f90
index b2d17436aded6339a4c727650852033aaa8ac48d..9af87a483a3b5cc7bcdd6c6c4b5c4bbc0b9a467d 100644
--- a/src/MNH/ls_coupling.f90
+++ b/src/MNH/ls_coupling.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.
 !-----------------------------------------------------------------
 !     ############################## 
@@ -17,10 +17,10 @@ INTERFACE
             KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll,               &
             KSIZELBXTKE_ll,KSIZELBYTKE_ll,                                   &
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
-            PLSUM,PLSVM,PLSWM, PLSTHM,PLSRVM,PDRYMASST,                      &
+            PLSUM,PLSVM,PLSWM, PLSTHM,PLSRVM,PLSZWSM,PDRYMASST,              &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
             PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,            &
-            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PDRYMASSS,                       &
+            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PLSZWSS,PDRYMASSS,               &
             PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,            &
             PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS             )
 !
@@ -52,6 +52,7 @@ INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll    ! for Rx and SV
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSUM,PLSVM,PLSWM ! Large Scale 
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSTHM, PLSRVM    ! fields at t-dt
+REAL, DIMENSION(:,:),    INTENT(IN)  :: PLSZWSM              ! fields at t-dt
 REAL,                    INTENT(IN)  :: PDRYMASST         ! Mass of dry air Md
 ! larger scale fields for Lateral Boundary condition
 REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
@@ -65,6 +66,7 @@ REAL, DIMENSION(:,:,:,:),        INTENT(IN) :: PLBYRM  ,PLBYSVM  ! in x and y-di
 !
 REAL, DIMENSION(:,:,:),  INTENT(OUT) :: PLSUS,PLSVS,PLSWS  ! Large Scale 
 REAL, DIMENSION(:,:,:),  INTENT(OUT) :: PLSTHS,PLSRVS      ! source terms
+REAL, DIMENSION(:,:),    INTENT(OUT) :: PLSZWSS              ! source terms
 REAL,                    INTENT(OUT) :: PDRYMASSS          !  Md source 
 ! larger scale fields sources for Lateral Boundary condition
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXUS,PLBXVS,PLBXWS ! Wind
@@ -95,10 +97,10 @@ END MODULE MODI_LS_COUPLING
             KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll,               &
             KSIZELBXTKE_ll,KSIZELBYTKE_ll,                                   &
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
-            PLSUM,PLSVM,PLSWM, PLSTHM,PLSRVM,PDRYMASST,                      &
+            PLSUM,PLSVM,PLSWM, PLSTHM,PLSRVM,PLSZWSM,PDRYMASST,              &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
             PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,            &
-            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PDRYMASSS,                       &
+            PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS,PLSZWSS,PDRYMASSS,               &
             PLBXUS,PLBXVS,PLBXWS,PLBXTHS,PLBXTKES,PLBXRS,PLBXSVS,            &
             PLBYUS,PLBYVS,PLBYWS,PLBYTHS,PLBYTKES,PLBYRS,PLBYSVS             )
 !     ######################################################################
@@ -124,8 +126,8 @@ END MODULE MODI_LS_COUPLING
 !!
 !!    EXTERNAL
 !!    --------
-!!      IO_READ_FIELD : to read data in file
-!!      IO_FILE_CLOSE_ll : to close a file
+!!      IO_Field_read : to read data in file
+!!      IO_File_close : to close a file
 !!      INI_LS      : to initialize larger scale fields
 !!      INI_LB      : to initialize "2D" surfacic LB fields 
 !!
@@ -171,6 +173,7 @@ END MODULE MODI_LS_COUPLING
 !!                   05/2006    Remove KEPS
 !!                   2/2014     (escobar) add paspol for Forefire
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!! Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !! 
 !------------------------------------------------------------------------------
 !
@@ -186,9 +189,8 @@ USE MODD_PASPOL
 #endif
 USE MODD_CH_MNHC_n
 !
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ, only: IO_Field_read
+USE MODE_IO_FILE,       only: IO_File_close
 USE MODE_MSG
 !
 USE MODI_INI_LS
@@ -228,6 +230,7 @@ INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll    ! for Rx and SV
 !
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSUM,PLSVM,PLSWM ! Large Scale 
 REAL, DIMENSION(:,:,:),  INTENT(IN)  :: PLSTHM, PLSRVM    ! fields at t-dt
+REAL, DIMENSION(:,:),    INTENT(IN)  :: PLSZWSM
 REAL,                    INTENT(IN)  :: PDRYMASST         ! Mass of dry air Md
 ! larger scale fields for Lateral Boundary condition
 REAL, DIMENSION(:,:,:),          INTENT(IN) :: PLBXUM,PLBXVM,PLBXWM ! Wind
@@ -251,6 +254,7 @@ REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXTKES          ! TKE
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBYTKES
 REAL, DIMENSION(:,:,:,:),        INTENT(OUT) :: PLBXRS  ,PLBXSVS  ! Moisture and SV
 REAL, DIMENSION(:,:,:,:),        INTENT(OUT) :: PLBYRS  ,PLBYSVS  ! in x and y-dir.
+REAL, DIMENSION(:,:),    INTENT(OUT) :: PLSZWSS              ! source terms
 !
 !
 !*       0.2   declarations of local variables
@@ -274,9 +278,9 @@ LOGICAL               :: GLSOURCE ! switch for the source term (for ini_ls and i
 !
 !*      1.1  Check dimensions
 !
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
 !
 IKU=SIZE(PLSTHM,3)
 !
@@ -298,7 +302,7 @@ GLSOURCE=.TRUE.
 ZLENG = (NCPL_TIMES(NCPL_CUR,1) - NCPL_TIMES(NCPL_CUR-1,1)) * PTSTEP 
 !
 CALL INI_LS(TCPLFILE(NCPL_CUR)%TZFILE,HGETRVM,GLSOURCE,PLSUS,PLSVS,PLSWS,PLSTHS,PLSRVS, &
-             PDRYMASSS,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PDRYMASST,ZLENG,OSTEADY_DMASS)
+            PLSZWSS, PDRYMASSS,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,PDRYMASST,ZLENG,OSTEADY_DMASS)
 
 !
 !
@@ -345,7 +349,7 @@ CALL INI_LB(TCPLFILE(NCPL_CUR)%TZFILE,GLSOURCE,KSV,                   &
 !
 !*      1.4  Close the coupling file
 !
-CALL IO_FILE_CLOSE_ll(TCPLFILE(NCPL_CUR)%TZFILE)
+CALL IO_File_close(TCPLFILE(NCPL_CUR)%TZFILE)
 !
 !-------------------------------------------------------------------------------
 
diff --git a/src/MNH/mean_prof.f90 b/src/MNH/mean_prof.f90
index 121f80c25dd36b8a5987ce896942de2afe7d2f8b..773ee9a8c5c3c293871c5cae788c6c2360787ff4 100644
--- a/src/MNH/mean_prof.f90
+++ b/src/MNH/mean_prof.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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,7 +62,7 @@ END MODULE MODI_MEAN_PROF
 !!      Module MODD_CONF      : contains configuration variables for all models. 
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1     : contains grid variables for model1
 !!         XZS   : orography of MESO-NH
 !!         XZHAT : GS levels
diff --git a/src/MNH/menu_diachro.f90 b/src/MNH/menu_diachro.f90
index b9147f3b2baca464518ab16e91bdf08b0bca260c..7cf66861c15bf5c3e13f8b2e2045c2be7835e157 100644
--- a/src/MNH/menu_diachro.f90
+++ b/src/MNH/menu_diachro.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.
 !-----------------------------------------------------------------
 !     ##################################################
@@ -54,11 +54,11 @@
 !              ------------
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             only: TFILEDATA
 !
 USE MODE_FIELD
-USE MODE_FMREAD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -103,7 +103,7 @@ IF(HGROUP == 'END')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ILENG)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,ILENG)
 
   ALLOCATE(ITABCHAR(ILENG))
   DO JJ=1,IGROUP
@@ -122,7 +122,7 @@ IF(HGROUP == 'END')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,ITABCHAR)
 
   DEALLOCATE(ITABCHAR)
 
@@ -138,7 +138,7 @@ ELSE IF(HGROUP == 'READ')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPDIAFILE,TZFIELD,ILENG,IRESPDIA)
+  CALL IO_Field_read(TPDIAFILE,TZFIELD,ILENG,IRESPDIA)
   IF(IRESPDIA == -47)THEN
 !   print *,' No record MENU_BUDGET '
     LPACK=GPACK
@@ -156,7 +156,7 @@ ELSE IF(HGROUP == 'READ')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+  CALL IO_Field_read(TPDIAFILE,TZFIELD,ITABCHAR)
   IGROUP=ILENG/NMNHNAMELGTMAX
   DO JJ=1,IGROUP
     DO J = 1,NMNHNAMELGTMAX
diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90
index b058f104ff5dbfcc4988b5a2d48e067250a7238c..27bd93e2cc2c8f80ad698f4ae9733821ecd29f9d 100644
--- a/src/MNH/mesonh.f90
+++ b/src/MNH/mesonh.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -90,14 +90,14 @@
 USE MODD_CONF
 USE MODD_NESTING
 USE MODD_CONF_n
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG
+USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG
 !
 USE MODI_MODEL_n
 USE MODI_KID_MODEL
 !
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_MANAGE_STRUCT, only: IO_Filelist_print
 USE MODE_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_PRINT_LIST
 USE MODE_MODELN_HANDLER
 !
 USE MODI_VERSION
@@ -144,7 +144,7 @@ CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.)
   CALL SFX_OASIS_INIT(CNAMELIST, NMNH_COMM_WORLD)
 #endif
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 CALL VERSION
 CPROGRAM='MESONH'
@@ -213,7 +213,7 @@ DO
   !
 END DO
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 !-------------------------------------------------------------------------------
 !
@@ -236,8 +236,4 @@ CALL SURFEX_DEALLO_LIST
 !
 !-------------------------------------------------------------------------------
 !
-!callabortstop
-!CALL ABORT
-STOP
-!
-END PROGRAM MESONH  
+END PROGRAM MESONH
diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90
index 0392d5c3baf6dfc63584573d58f0e7b43b3a0fd5..3bb745967feb6b7aeb33a6dd14696e7fde871088 100644
--- a/src/MNH/mnh2lpdm.f90
+++ b/src/MNH/mnh2lpdm.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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
         PROGRAM MNH2LPDM
 !	##############
@@ -13,6 +14,8 @@
 !       Modification  : 07.01.2006 (T.LAUVAUX, adaptation LPDM)
 !       Modification  : 04.01.2009 (F. BONNARDOT, DP/SER/ENV )
 !  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
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !-----------------------------------------------------------------------------
 !
@@ -24,13 +27,14 @@
 !*	0.1 Modules.
 !
 USE MODD_CONF,             ONLY : CPROGRAM
-USE MODD_IO_ll,            ONLY : TFILEDATA,TPTR2FILE
+USE MODD_IO,               ONLY : TFILEDATA,TPTR2FILE
 USE MODD_MNH2LPDM
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_IO_ll,            ONLY: INITIO_ll,SET_CONFIO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO,               ONLY: IO_Init, IO_Config_set
+USE MODE_IO_FILE,          ONLY: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MODELN_HANDLER
+use mode_msg
 USE MODE_POS
 !
 USE MODI_MNH2LPDM_ECH
@@ -73,19 +77,19 @@ CALL GOTO_MODEL(1)
 !
 !*	1.2 Initialisation routines LL.
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 !
 !*	1.3 Ouverture du fichier log.
 !
-CALL IO_FILE_ADD2LIST(TZLOGFILE,YFLOG,'TXT','WRITE')
-CALL IO_FILE_OPEN_ll(TZLOGFILE)
+CALL IO_File_add2list(TZLOGFILE,YFLOG,'TXT','WRITE')
+CALL IO_File_open(TZLOGFILE)
 !
 !
 !*	1.4 Lecture des namelists.
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,YFNML,'NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,YFNML,'NML','READ')
+CALL IO_File_open(TZNMLFILE)
 IFNML = TZNMLFILE%NLU
 
 READ(UNIT=IFNML,NML=NAM_TURB)
@@ -99,23 +103,23 @@ END IF
 LCDF4 = .FALSE.
 LLFIOUT  = .FALSE.
 LLFIREAD = .FALSE.
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !
 !*	1.5 Comptage des FM a traiter.
 !
 IF (LEN_TRIM(CFMNH(1))>0) THEN
    NBMNH=1
-   CALL IO_FILE_ADD2LIST(TZFMNH(1)%TZFILE,TRIM(CFMNH(1)),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=IVERB)
+   CALL IO_File_add2list(TZFMNH(1)%TZFILE,TRIM(CFMNH(1)),'MNH','READ',KLFITYPE=2,KLFIVERB=IVERB)
    DO WHILE (CFMNH(NBMNH+1).NE.'VIDE')
       NBMNH=NBMNH+1
-      CALL IO_FILE_ADD2LIST(TZFMNH(NBMNH)%TZFILE,TRIM(CFMNH(NBMNH)),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=IVERB)
+      CALL IO_File_add2list(TZFMNH(NBMNH)%TZFILE,TRIM(CFMNH(NBMNH)),'MNH','READ',KLFITYPE=2,KLFIVERB=IVERB)
    END DO
    print *,NBMNH,' fichiers a traiter.'
 ELSE
-   STOP
-ENDIF   
+  call Print_msg( NVERB_FATAL, 'GEN', 'MNH2LPDM', 'no CFMNH file given' )
+END IF
 !
 !
 !
@@ -125,10 +129,10 @@ ENDIF
 !
 !*	2.1 Ouverture des fichiers METEO et GRILLE et DATE.
 !
-CALL IO_FILE_ADD2LIST(TZGRIDFILE,CFGRI,'TXT','WRITE')
-CALL IO_FILE_OPEN_ll(TZGRIDFILE)
-CALL IO_FILE_ADD2LIST(TZDATEFILE,CFDAT,'TXT','WRITE')
-CALL IO_FILE_OPEN_ll(TZDATEFILE)
+CALL IO_File_add2list(TZGRIDFILE,CFGRI,'TXT','WRITE')
+CALL IO_File_open(TZGRIDFILE)
+CALL IO_File_add2list(TZDATEFILE,CFDAT,'TXT','WRITE')
+CALL IO_File_open(TZDATEFILE)
 !
 !
 !*	2.2 Preparation du couplage.
@@ -140,20 +144,20 @@ CALL MNH2LPDM_INI(TZFMNH(1)%TZFILE,TZFMNH(NBMNH)%TZFILE,TZLOGFILE,TZGRIDFILE,TZD
 !
 DO JFIC=1,NBMNH
    print*,"CFMTO(JFIC)=",CFMTO(JFIC)
-   CALL IO_FILE_ADD2LIST(TZMETEOFILE,CFMTO(JFIC),'METEO','WRITE')
-   CALL IO_FILE_OPEN_ll(TZMETEOFILE)
+   CALL IO_File_add2list(TZMETEOFILE,CFMTO(JFIC),'METEO','WRITE')
+   CALL IO_File_open(TZMETEOFILE)
    CALL MNH2LPDM_ECH(TZFMNH(JFIC)%TZFILE,TZMETEOFILE)
    print*,"CLOSE_LL(CFMTO(JFIC)"
-   CALL IO_FILE_CLOSE_ll(TZMETEOFILE)
+   CALL IO_File_close(TZMETEOFILE)
    TZMETEOFILE => NULL()
 END DO
 !
 !
 !*	2.4 Fermeture des fichiers, METEO, GRILLE et LOG.
 !
-CALL IO_FILE_CLOSE_ll(TZGRIDFILE)
-CALL IO_FILE_CLOSE_ll(TZDATEFILE)
-CALL IO_FILE_CLOSE_ll(TZLOGFILE)
+CALL IO_File_close(TZGRIDFILE)
+CALL IO_File_close(TZDATEFILE)
+CALL IO_File_close(TZLOGFILE)
 !
 !
 !
diff --git a/src/MNH/mnh2lpdm_ech.f90 b/src/MNH/mnh2lpdm_ech.f90
index e7b334e84f03eb987c4f812ed9da89a00be84d60..462bd2ae40152741e1e3a3278a32995461bbef7b 100644
--- a/src/MNH/mnh2lpdm_ech.f90
+++ b/src/MNH/mnh2lpdm_ech.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2009-2018 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.
 !-----------------------------------------------------------------------
 !     ######spl
@@ -24,7 +24,7 @@
 !
 !
 USE MODD_DIM_n
-USE MODD_IO_ll,ONLY : TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_TIME_n
 USE MODD_GRID_n
 !
@@ -34,9 +34,9 @@ USE MODD_TIME
 !
 USE MODD_MNH2LPDM
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 !
 USE MODI_INI_CST
 !
@@ -76,11 +76,11 @@ IFMTO = TPMETEOFILE%NLU
 !
 !*	2.1 Ouverture du fichier Meso-NH.
 !
-CALL IO_FILE_OPEN_ll(TPFILE)
+CALL IO_File_open(TPFILE)
 !
 !*	2.2 Date et heure courante.
 !
-CALL IO_READ_FIELD(TPFILE,'DTCUR',TZDTCUR)
+CALL IO_Field_read(TPFILE,'DTCUR',TZDTCUR)
 ! 
 ICURAA=MOD(TZDTCUR%TDATE%YEAR,100)  ! Annee sur 2 caracteres.
 ICURMM=TZDTCUR%TDATE%MONTH
@@ -100,28 +100,28 @@ print 20300, ICURJJ,ICURMM,ICURAA,ICURHH,ICURMN,ICURSS
 !
 !*	2.3 Lecture des champs Meso-NH de base.
 !
-CALL IO_READ_FIELD(TPFILE,'UT',     XUT)
-CALL IO_READ_FIELD(TPFILE,'VT',     XVT)
-CALL IO_READ_FIELD(TPFILE,'WT',     XWT)
-CALL IO_READ_FIELD(TPFILE,'THT',    XTHT)
-CALL IO_READ_FIELD(TPFILE,'TKET',   XTKET)
+CALL IO_Field_read(TPFILE,'UT',     XUT)
+CALL IO_Field_read(TPFILE,'VT',     XVT)
+CALL IO_Field_read(TPFILE,'WT',     XWT)
+CALL IO_Field_read(TPFILE,'THT',    XTHT)
+CALL IO_Field_read(TPFILE,'TKET',   XTKET)
 !PW:TODO: where are these fields (LM,THW_FLX,DISS,FMU,FMV) written?
 !Warning: not in fieldlist => won't be found
-CALL IO_READ_FIELD(TPFILE,'LM',     XLM)
-CALL IO_READ_FIELD(TPFILE,'THW_FLX',XWPTHP)
-CALL IO_READ_FIELD(TPFILE,'DISS',   XDISSIP)
-CALL IO_READ_FIELD(TPFILE,'FMU',    XSFU)
-CALL IO_READ_FIELD(TPFILE,'FMV',    XSFV)
-CALL IO_READ_FIELD(TPFILE,'INPRT',  XINRT)
-CALL IO_READ_FIELD(TPFILE,'RVT',    XRMVT)
-CALL IO_READ_FIELD(TPFILE,'RCT',    XRMCT)
-CALL IO_READ_FIELD(TPFILE,'RRT',    XRMRT)
+CALL IO_Field_read(TPFILE,'LM',     XLM)
+CALL IO_Field_read(TPFILE,'THW_FLX',XWPTHP)
+CALL IO_Field_read(TPFILE,'DISS',   XDISSIP)
+CALL IO_Field_read(TPFILE,'FMU',    XSFU)
+CALL IO_Field_read(TPFILE,'FMV',    XSFV)
+CALL IO_Field_read(TPFILE,'INPRT',  XINRT)
+CALL IO_Field_read(TPFILE,'RVT',    XRMVT)
+CALL IO_Field_read(TPFILE,'RCT',    XRMCT)
+CALL IO_Field_read(TPFILE,'RRT',    XRMRT)
 !
 !              Lecture des donnees Meso-NH terminee.'
 !
 !*	2.4 Fermeture du fichier Meso-NH.
 !
-CALL IO_FILE_CLOSE_ll(TPFILE)
+CALL IO_File_close(TPFILE)
 !
 !
 !*	3.  PREPARATION DES DONNEES.
@@ -376,8 +376,8 @@ XSSFV(:,:) = XSFV(NSIB:NSIE,NSJB:NSJE)
   !
      IF (IGRILLE.EQ.2) THEN
      WRITE(YFTURB,'("TURB_LPDM",5I2.2)') ICURAA,ICURMM,ICURJJ,ICURHH,ICURMN
-     CALL IO_FILE_ADD2LIST(TZFILE,YFTURB,'TXT','WRITE')
-     CALL IO_FILE_OPEN_ll(TZFILE)
+     CALL IO_File_add2list(TZFILE,YFTURB,'TXT','WRITE')
+     CALL IO_File_open(TZFILE)
      IFTURB = TZFILE%NLU
      WRITE(UNIT=IFTURB,FMT='(5A12)') "WSTAR       ","USTAR       ", &
                                      "HMIX        ","LMO         ", &
@@ -398,7 +398,7 @@ XSSFV(:,:) = XSFV(NSIB:NSIE,NSJB:NSJE)
                                     XSTIMEU(15,15,JK),XSTIMEW(15,15,JK)
   
      ENDDO
-     CALL IO_FILE_CLOSE_ll(TZFILE)
+     CALL IO_File_close(TZFILE)
      ENDIF
 !
                
diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90
index f7d71da91d4bcfe5afb33a5d2118af7d8551823f..7c185cfde09ae595c16b0e79bf8b048c1a379b90 100644
--- a/src/MNH/mnh2lpdm_ini.f90
+++ b/src/MNH/mnh2lpdm_ini.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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.
 !     ######spl
         SUBROUTINE MNH2LPDM_INI(TPFILE1,TPFILE2,TPLOGFILE,TPGRIDFILE,TPDATEFILE)
@@ -33,7 +33,7 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_MNH2LPDM
 USE MODD_PARAMETERS
@@ -41,10 +41,9 @@ USE MODD_TIME
 USE MODD_TIME_n
 !
 USE MODE_DATETIME
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
+USE MODE_IO_FILE,       only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MODELN_HANDLER
 !
 USE MODI_INI_CST
@@ -100,15 +99,15 @@ CALL GOTO_MODEL(1)
 !
 !*	2.1 Ouverture du fichier Meso-NH.
 !
-CALL IO_FILE_OPEN_ll(TPFILE1)
-CALL IO_FILE_OPEN_ll(TPFILE2)
+CALL IO_File_open(TPFILE1)
+CALL IO_File_open(TPFILE2)
 !
 !
 !*      2.2 Date et heure du modele.
 !
-CALL IO_READ_FIELD(TPFILE1,'DTEXP',TZDTEXP1)
-CALL IO_READ_FIELD(TPFILE1,'DTCUR',TZDTCUR1)
-CALL IO_READ_FIELD(TPFILE2,'DTCUR',TZDTCUR2)
+CALL IO_Field_read(TPFILE1,'DTEXP',TZDTEXP1)
+CALL IO_Field_read(TPFILE1,'DTCUR',TZDTCUR1)
+CALL IO_Field_read(TPFILE2,'DTCUR',TZDTCUR2)
 !
 CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR1,ZECHEANCE1)
 CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR2,ZECHEANCE2)
@@ -164,7 +163,7 @@ NJE=NJU-JPHEXT
 !
 !*	2.4 Nombre de niveaux-verticaux.
 !
-CALL IO_READ_FIELD(TPFILE1,'KMAX',NKMAX)
+CALL IO_Field_read(TPFILE1,'KMAX',NKMAX)
 !WRITE(IFLOG,*) '%%% MNH2S2_INI Lecture du nombre de niveau OK.'
 !
 NKU = NKMAX+2*JPVEXT
@@ -194,17 +193,17 @@ ALLOCATE( XSFV(NIU,NJU))
 !
 !*	2.6 Decoupage vertical.
 !
-CALL IO_READ_FIELD(TPFILE1,'ZHAT',XZHAT)
-CALL IO_READ_FIELD(TPFILE1,'ZTOP',XZTOP)
+CALL IO_Field_read(TPFILE1,'ZHAT',XZHAT)
+CALL IO_Field_read(TPFILE1,'ZTOP',XZTOP)
 !
 !*	2.7 Orographie. 
 !
-CALL IO_READ_FIELD(TPFILE1,'ZS',XZS)
+CALL IO_Field_read(TPFILE1,'ZS',XZS)
 !
 !*	2.8 Rugosite Z0. 
 !
 !PW:TODO: where is this field written? Warning: not in fieldlist => won't be found
-CALL IO_READ_FIELD(TPFILE1,'Z0',XZ0)
+CALL IO_Field_read(TPFILE1,'Z0',XZ0)
 !
 XXPTSOMNH=XXHAT(1)+(XXHAT(2)-XXHAT(1))/2
 XYPTSOMNH=XYHAT(1)+(XYHAT(2)-XYHAT(1))/2
@@ -435,8 +434,8 @@ DEALLOCATE(XZHAT)
 !
 !	 Fermeture du fichier Meso-NH.
 !
-CALL IO_FILE_CLOSE_ll(TPFILE1)
-CALL IO_FILE_CLOSE_ll(TPFILE2)
+CALL IO_File_close(TPFILE1)
+CALL IO_File_close(TPFILE2)
 !
 !
 !-------------------------------------------'
diff --git a/src/MNH/mnh_surf_grid_io_init.f90 b/src/MNH/mnh_surf_grid_io_init.f90
index 7c87e7fc09c9c75eff98727e7829c021011e04bd..3da201159b517e57aa352abb1f08c1dd766bd3d2 100644
--- a/src/MNH/mnh_surf_grid_io_init.f90
+++ b/src/MNH/mnh_surf_grid_io_init.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2015-2018 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.
 !-----------------------------------------------------------------
 !#######################
@@ -43,19 +43,6 @@ MODULE MODI_MNH_SURF_GRID_IO_INIT
     !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
     !----------------------------------------------------------------------------
     !
-    !*    0.     DECLARATION
-    !            -----------
-    !
-    USE MODE_ll
-    USE MODE_FM
-    USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-    USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
-    !
-    USE MODE_SPLITTINGZ_ll
-    !
-    USE MODI_GET_SURF_GRID_DIM_N
-    USE MODI_GET_LUOUT
-    !
     IMPLICIT NONE
     !
     !*    0.1    Declaration of dummy arguments
@@ -105,10 +92,9 @@ END MODULE MODI_MNH_SURF_GRID_IO_INIT
 !            -----------
 !
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
+USE MODE_IO,         only: IO_Pack_set
+USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT, JPMODELMAX
+USE MODD_CONF,       ONLY: CPROGRAM, L1D, L2D, LPACK
 !
 !JUANZ
 USE MODE_SPLITTINGZ_ll
@@ -139,7 +125,7 @@ IF (CPROGRAM=='IDEAL ' .OR. CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') RETURN
 L1D=(KIMAX==1).AND.(KJMAX==1)
 L2D=(KIMAX/=1).AND.(KJMAX==1)
 LPACK=L1D.OR.L2D
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(KIMAX, KJMAX, 1)
diff --git a/src/MNH/mnhclose_aux_io_surf.f90 b/src/MNH/mnhclose_aux_io_surf.f90
index 79d2627915c6f8a80955d789ee61d0e2bd656a0c..ba818000a9b5e13ab6f3057c9b8465a5696425d4 100644
--- a/src/MNH/mnhclose_aux_io_surf.f90
+++ b/src/MNH/mnhclose_aux_io_surf.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     #########################
@@ -49,21 +49,17 @@ END MODULE MODI_MNHCLOSE_AUX_IO_SURF
 !!    -------------
 !!      Original    09/2003 
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 surfex 2006/05/23 15:47:28
-!-----------------------------------------------------------------
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_IO_SURF_MNH, ONLY: TPINFILE, CACTION, NMASK_ALL, NMASK
+!
+USE MODE_IO_FILE,     only: IO_File_close
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
-
-USE MODD_IO_SURF_MNH, ONLY : TPINFILE, CACTION, NMASK_ALL, NMASK
 !
 IMPLICIT NONE
 !
@@ -82,7 +78,7 @@ INTEGER           :: IRESP          ! return-code if a problem appears
 !-------------------------------------------------------------------------------
 !
 IF (CACTION=='OPEN  ') THEN
-  CALL IO_FILE_CLOSE_ll(TPINFILE,OPARALLELIO=.FALSE.)
+  CALL IO_File_close(TPINFILE)
   CACTION='      '
 END IF
 !
diff --git a/src/MNH/mnhclose_namelist.f90 b/src/MNH/mnhclose_namelist.f90
index 28193c6ef37265d9b98cbb74f7ab7c972ddc55f6..824cdb3f03e084b1d765012f66634b1c2189fb68 100644
--- a/src/MNH/mnhclose_namelist.f90
+++ b/src/MNH/mnhclose_namelist.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     #############################
@@ -58,7 +58,7 @@ USE MODD_IO_NAM,           ONLY: TNAM
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll
+USE MODE_IO_FILE,          ONLY: IO_File_close
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -77,7 +77,6 @@ INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
 !
 INTEGER           :: IMI            ! model index
 INTEGER           :: ILUOUT         ! output listing logical unit
-CHARACTER(LEN=16) :: YLUOUT         ! output listing file name
 !-------------------------------------------------------------------------------
 !
 IF (.NOT.ASSOCIATED(TNAM)) CALL PRINT_MSG(NVERB_FATAL,'IO','CLOSE_FILE_MNH','TNAM not associated')
@@ -90,7 +89,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHCLOSE_NAMELIST','called for '//TRIM(TNAM%CNA
 !  -------------------
 !
 IF (TNAM%NLU==KLUNAM) THEN
-  CALL IO_FILE_CLOSE_ll(TNAM)
+  CALL IO_File_close(TNAM)
   TNAM => NULL()
 ELSE
   SELECT CASE(CPROGRAM)
diff --git a/src/MNH/mnhclose_write_cover_tex.f90 b/src/MNH/mnhclose_write_cover_tex.f90
index ec04cd869096a160c053f00ae95e3b9aab4df6ec..c041ea0d0107a4413850a0c7b1c600208c693cd8 100644
--- a/src/MNH/mnhclose_write_cover_tex.f90
+++ b/src/MNH/mnhclose_write_cover_tex.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     ##################################
@@ -40,12 +40,10 @@
 !              ------------
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
-!
-USE MODI_TRANSFER_FILE
+USE MODE_IO_FILE,          ONLY: IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
 !
 !
 IMPLICIT NONE
@@ -70,9 +68,8 @@ TYPE(TFILEDATA),POINTER :: TZFILE
 TZFILE => NULL()
 !
 IF (TRIM(CPROGRAM)=='PGD') THEN
-  CALL IO_FILE_FIND_BYNAME(YTEX,TZFILE,IRESP)
-  CALL IO_FILE_CLOSE_ll(TZFILE)
-  CALL TRANSFER_FILE('fujitransfer.x','NIL',YTEX)
+  CALL IO_File_find_byname(YTEX,TZFILE,IRESP)
+  CALL IO_File_close(TZFILE)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnhend_io_surfn.f90 b/src/MNH/mnhend_io_surfn.f90
index 3e09c9598d9dbdc122b54fc318f27aadae40dffd..6a1d1c034b501498b5ea09c2cfdef638fe8e9279 100644
--- a/src/MNH/mnhend_io_surfn.f90
+++ b/src/MNH/mnhend_io_surfn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     #########################
@@ -52,12 +52,10 @@ END MODULE MODI_MNHEND_IO_SURF_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
-!
 USE MODD_IO_SURF_MNH, ONLY : CACTION, TPINFILE, COUTFILE, NMASK, NMASK_ALL
 !
+USE MODE_ll
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90
index bf67169ffb6d7b76b5be49e3008ea886ff37f32d..16fda802414bcd970cd66913b04d53b2dee2aa71 100644
--- a/src/MNH/mnhinit_io_surfn.f90
+++ b/src/MNH/mnhinit_io_surfn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     #########################
@@ -61,13 +61,11 @@ USE MODD_IO_SURF_MNH,      ONLY: TOUT, TPINFILE, COUTFILE,
                                  NMASK, CMASK, NIU, NJU, NIB, NJB, NIE, NJE, CACTION,  &
                                  NMASK_ALL, NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,        &
                                  NIE_ALL, NJE_ALL, NHALO
-USE MODD_LUNIT,            ONLY: CLUOUT0, TPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: TPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: CMASK_SURFEX, TINIFILE, TINIFILEPGD, TLUOUT
 USE MODD_MNH_SURFEX_n,     ONLY: YSURF_CUR
 USE MODD_PARAMETERS,       ONLY: JPHEXT
 !
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90
index 5e6e4e954d9fe3eb49785a5a93b8f1d211490af2..3a89446e628078774236e93bcb5a944c48085ba6 100644
--- a/src/MNH/mnhopen_aux_io_surf.f90
+++ b/src/MNH/mnhopen_aux_io_surf.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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_MNHOPEN_AUX_IO_SURF
 !     #########################
@@ -42,7 +43,7 @@ END MODULE MODI_MNHOPEN_AUX_IO_SURF
 !!
 !!    AUTHOR
 !!    ------
-!!	S.Malardel   *Meteo France*	
+!!    S.Malardel   *Meteo France*
 !!
 !!    MODIFICATIONS
 !!    -------------
@@ -52,6 +53,10 @@ END MODULE MODI_MNHOPEN_AUX_IO_SURF
 !!         J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!         J.Escobar : 02/06/2016 : abort MNHOPEN with STOP if problem with OPEN of INPUT/READ file 
 !!  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
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -62,14 +67,13 @@ USE MODD_CONF,             ONLY: CPROGRAM
 USE MODD_IO_SURF_MNH,      ONLY: TOUT, TPINFILE, COUTFILE, NMASK_ALL, CMASK, NIU_ALL,  &
                                  NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, CACTION, &
                                  NMASK, NIU, NJU, NIB, NJB, NIE, NJE
-USE MODD_LUNIT,            ONLY: CLUOUT0, TPGDFILE, TLUOUT0, TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: TPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_PARAMETERS,       ONLY: JPHEXT
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list, IO_File_find_byname
 USE MODE_MSG
 !
 USE MODI_GET_1D_MASK
@@ -137,16 +141,15 @@ ELSE
 END IF
 !
 IF (HFILE/=YFILE .AND. HFILE/=YPGDFILE) THEN
-  CALL IO_FILE_ADD2LIST(TPINFILE,TRIM(HFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.)
-  CALL IO_FILE_OPEN_ll(TPINFILE,KRESP=IRESP,OPARALLELIO=.FALSE.)
+  CALL IO_File_add2list(TPINFILE,TRIM(HFILE),'PGD','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.)
+  CALL IO_File_open(TPINFILE,KRESP=IRESP)
   !
-  IF (IRESP .NE. 0) THEN
-    PRINT*," /!\  MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES =", HFILE
-    STOP '/!\ MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES , CHECK OUTPUT_LISTING* !!!'
-  ENDIF
+  if ( iresp /= 0 ) then
+    call Print_msg( NVERB_FATAL, 'GEN', 'MNHOPEN_AUX_IO_SURF', 'unable to open file '//trim(HFILE) )
+  end if
   CACTION = 'OPEN  '
 ELSE
-  CALL IO_FILE_FIND_BYNAME(TRIM(HFILE),TPINFILE,IRESP)
+  CALL IO_File_find_byname(TRIM(HFILE),TPINFILE,IRESP)
 END IF
 !
 COUTFILE = HFILE
@@ -154,11 +157,11 @@ COUTFILE = HFILE
 !
 !*       3.    initialisation of 2D arrays for entire physical field
 !
-CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TPINFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TPINFILE,'JMAX',IJMAX)
 CALL MNH_SURF_GRID_IO_INIT(IIMAX,IJMAX)
 IJPHEXT= 1
-CALL IO_READ_FIELD(TPINFILE,'JPHEXT',IJPHEXT)
+CALL IO_Field_read(TPINFILE,'JPHEXT',IJPHEXT)
 IF ( IJPHEXT .NE. JPHEXT ) THEN
    WRITE(ILUOUT,FMT=*) ' MNHOPEN_AUX_IO : JPHEXT in PRE_PGD1.nam/NAM_CONF_PGD ( or default value )&
       & JPHEXT=',JPHEXT
diff --git a/src/MNH/mnhopen_namelist.f90 b/src/MNH/mnhopen_namelist.f90
index 7820d3e0d690a37e4c4e407638f05f70b4130052..d594b6e5ff0e60fda174f2a27a028318b8f633eb 100644
--- a/src/MNH/mnhopen_namelist.f90
+++ b/src/MNH/mnhopen_namelist.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
 !-----------------------------------------------------------------
 !     #############################
@@ -57,8 +57,8 @@ END MODULE MODI_MNHOPEN_NAMELIST
 USE MODD_CONF,             ONLY: CPROGRAM
 USE MODD_IO_NAM,           ONLY: TNAM
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -113,8 +113,8 @@ END IF
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHOPEN_NAMELIST','called for '//TRIM(YNAM))
 !
-CALL IO_FILE_ADD2LIST(TNAM,TRIM(YNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list
-CALL IO_FILE_OPEN_ll(TNAM)
+CALL IO_File_add2list(TNAM,TRIM(YNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list
+CALL IO_File_open(TNAM)
 !
 KLUNAM = TNAM%NLU
 !
diff --git a/src/MNH/mnhopen_write_cover_tex.f90 b/src/MNH/mnhopen_write_cover_tex.f90
index 73904aa629021fb5b0284e94c23b6636ebb09e8e..941758e617e123a129ac3f3e3c06abb0c67c8565 100644
--- a/src/MNH/mnhopen_write_cover_tex.f90
+++ b/src/MNH/mnhopen_write_cover_tex.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     ##################################
@@ -40,10 +40,10 @@
 !              ------------
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 !
 !
 IMPLICIT NONE
@@ -67,8 +67,8 @@ TYPE(TFILEDATA),POINTER :: TZFILE
 TZFILE => NULL()
 !
 IF (TRIM(CPROGRAM)=='PGD') THEN
-  CALL IO_FILE_ADD2LIST(TZFILE,YTEX,'TXT','WRITE')
-  CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND')
+  CALL IO_File_add2list(TZFILE,YTEX,'TXT','WRITE')
+  CALL IO_File_open(TZFILE,HPOSITION='REWIND')
   KTEX = TZFILE%NLU
 ELSE
   KTEX=0
diff --git a/src/MNH/mnhread_zs_dummyn.f90 b/src/MNH/mnhread_zs_dummyn.f90
index 94376de629c0c6aa3266638ecef998bcba2dc67c..eb5eb084a949c9f5c07b5f2b0ccaaafff8ff8bd1 100644
--- a/src/MNH/mnhread_zs_dummyn.f90
+++ b/src/MNH/mnhread_zs_dummyn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
 !-----------------------------------------------------------------
 !     ##########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE MNHREAD_ZS_DUMMY_n(TPINIFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),    INTENT(IN)   :: TPINIFILE    !Initial file
 !
@@ -57,16 +57,16 @@ END MODULE MODI_MNHREAD_ZS_DUMMY_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_GRID_n,     ONLY : XZS
-USE MODD_GR_FIELD_n, ONLY : XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
-                            XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAM_n,    ONLY : CSURF
+USE MODD_GRID_n,        ONLY: XZS
+USE MODD_GR_FIELD_n,    ONLY: XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
+                              XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_PARAM_n,       ONLY: CSURF
 !
 USE MODI_READ_DUMMY_GR_FIELD_n
 !
 USE MODE_ll
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 !
 IMPLICIT NONE
 !
@@ -101,7 +101,7 @@ CALL GET_DIM_EXT_ll('B',IIU,IJU)
 !               ---------
 IF (.NOT.(ASSOCIATED(XZS))) THEN
   ALLOCATE(XZS(IIU,IJU))
-  CALL IO_READ_FIELD(TPINIFILE,'ZS',XZS)
+  CALL IO_Field_read(TPINIFILE,'ZS',XZS)
 END IF
 !
 IF (CSURF /='EXTE') RETURN
@@ -113,28 +113,28 @@ IF (CSURF /='EXTE') RETURN
 !               --------------------------
 !
 IF (.NOT.(ASSOCIATED(XSSO_ANISOTROPY))) ALLOCATE(XSSO_ANISOTROPY(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_ANIS',XSSO_ANISOTROPY(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_ANIS',XSSO_ANISOTROPY(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSSO_SLOPE))) ALLOCATE(XSSO_SLOPE(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_SLOPE',XSSO_SLOPE(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_SLOPE',XSSO_SLOPE(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSSO_DIRECTION))) ALLOCATE(XSSO_DIRECTION(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_DIR',XSSO_DIRECTION(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_DIR',XSSO_DIRECTION(:,:))
 !
 IF (.NOT.(ASSOCIATED(XAVG_ZS))) ALLOCATE(XAVG_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'AVG_ZS',XAVG_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'AVG_ZS',XAVG_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSIL_ZS))) ALLOCATE(XSIL_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SIL_ZS',XSIL_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'SIL_ZS',XSIL_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XMAX_ZS))) ALLOCATE(XMAX_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'MAX_ZS',XMAX_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'MAX_ZS',XMAX_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XMIN_ZS))) ALLOCATE(XMIN_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'MIN_ZS',XMIN_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'MIN_ZS',XMIN_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSSO_STDEV))) ALLOCATE(XSSO_STDEV(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_STDEV',XSSO_STDEV(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_STDEV',XSSO_STDEV(:,:))
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnhwrite_zs_dummyn.f90 b/src/MNH/mnhwrite_zs_dummyn.f90
index 708cf971d52cd10b93e9ff474f3e229a13a837e6..29392ec2b6928430caaeb12b8fe65ce4edf0890e 100644
--- a/src/MNH/mnhwrite_zs_dummyn.f90
+++ b/src/MNH/mnhwrite_zs_dummyn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE MNHWRITE_ZS_DUMMY_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
@@ -57,15 +57,15 @@ END MODULE MODI_MNHWRITE_ZS_DUMMY_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_GR_FIELD_n, ONLY : XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
-                            XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
+USE MODD_GR_FIELD_n,     ONLY: XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
+                               XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
 !
-USE MODD_PARAM_n,    ONLY : CSURF
-USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_PARAM_n,        ONLY: CSURF
+USE MODD_IO,             ONLY: TFILEDATA
 !
 USE MODI_WRITE_DUMMY_GR_FIELD_n
 !
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -92,14 +92,14 @@ IF (CSURF /='EXTE') RETURN
 !*       2.     Orographic characteristics :
 !               --------------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'SSO_ANIS', XSSO_ANISOTROPY)
-CALL IO_WRITE_FIELD(TPFILE,'SSO_SLOPE',XSSO_SLOPE)
-CALL IO_WRITE_FIELD(TPFILE,'SSO_DIR',  XSSO_DIRECTION)
-CALL IO_WRITE_FIELD(TPFILE,'AVG_ZS',   XAVG_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'SIL_ZS',   XSIL_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'MAX_ZS',   XMAX_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'MIN_ZS',   XMIN_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'SSO_STDEV',XSSO_STDEV)
+CALL IO_Field_write(TPFILE,'SSO_ANIS', XSSO_ANISOTROPY)
+CALL IO_Field_write(TPFILE,'SSO_SLOPE',XSSO_SLOPE)
+CALL IO_Field_write(TPFILE,'SSO_DIR',  XSSO_DIRECTION)
+CALL IO_Field_write(TPFILE,'AVG_ZS',   XAVG_ZS)
+CALL IO_Field_write(TPFILE,'SIL_ZS',   XSIL_ZS)
+CALL IO_Field_write(TPFILE,'MAX_ZS',   XMAX_ZS)
+CALL IO_Field_write(TPFILE,'MIN_ZS',   XMIN_ZS)
+CALL IO_Field_write(TPFILE,'SSO_STDEV',XSSO_STDEV)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modd_RBK90_Globaln.f90 b/src/MNH/modd_RBK90_Globaln.f90
index ccf0f737b9147d5d900639505f0281dbbdac9dd1..4d4a40e402596db7d598f3bbcaf52915afc2f4c4 100644
--- a/src/MNH/modd_RBK90_Globaln.f90
+++ b/src/MNH/modd_RBK90_Globaln.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.
 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ! 
@@ -23,6 +23,8 @@
 ! Output root filename : RBK90
 ! 
 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+! Modifications
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 
 
 MODULE MODD_RBK90_Global_n
@@ -40,15 +42,15 @@ TYPE RBK90_Global_t
 ! Declaration of global variables
 
 ! C - Concentration of all species
-    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: C
+    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: C => NULL()
 ! VAR - Concentrations of variable species (global)
-    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: VAR
+    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: VAR => NULL()
 ! FIX - Concentrations of fixed species (global)
-    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: FIX
+    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: FIX => NULL()
 !JPP      EQUIVALENCE( C(1),VAR(1) )
 !JPP      EQUIVALENCE( C(66),FIX(1) )
 ! RCONST - Rate constants (global)
-    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: RCONST
+    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: RCONST => NULL()
 ! TIME - Current integration time
     REAL(KIND(0.0D0)) :: TIME
 ! SUN - Sunlight intensity between [0,1]
@@ -64,9 +66,9 @@ TYPE RBK90_Global_t
 ! DT - Integration step
     REAL(KIND(0.0D0)) :: DT
 ! ATOL - Absolute tolerance
-    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: ATOL
+    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: ATOL => NULL()
 ! RTOL - Relative tolerance
-    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: RTOL
+    REAL(KIND(0.0D0)), DIMENSION(:), POINTER :: RTOL => NULL()
 ! STEPMIN - Lower bound for integration step
     REAL(KIND(0.0D0)) :: STEPMIN
 ! STEPMAX - Upper bound for integration step
diff --git a/src/MNH/modd_RBK90_JacobianSPn.f90 b/src/MNH/modd_RBK90_JacobianSPn.f90
index dc7fd2c695c01ab1fd7ffb595ebd0b615b2d7fea..be6f91d417c0fa92b6859882a03bac0bc2597f95 100644
--- a/src/MNH/modd_RBK90_JacobianSPn.f90
+++ b/src/MNH/modd_RBK90_JacobianSPn.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.
 !******************************************************************
 
@@ -25,6 +25,8 @@
 ! Output root filename : RBK90
 ! 
 ! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+! Modifications
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 
 
 MODULE MODD_RBK90_JacobianSP_n
@@ -39,13 +41,13 @@ TYPE RBK90_JacobianSP_t
 ! Sparse Jacobian Data
 
 
-    INTEGER, DIMENSION(:), POINTER :: LU_IROW
-    INTEGER, DIMENSION(:), POINTER :: LU_ICOL
+    INTEGER, DIMENSION(:), POINTER :: LU_IROW => NULL()
+    INTEGER, DIMENSION(:), POINTER :: LU_ICOL => NULL()
 
-    INTEGER, DIMENSION(:), POINTER :: LU_CROW
-    INTEGER, DIMENSION(:), POINTER :: LU_DIAG
+    INTEGER, DIMENSION(:), POINTER :: LU_CROW => NULL()
+    INTEGER, DIMENSION(:), POINTER :: LU_DIAG => NULL()
 
-    INTEGER, DIMENSION(:), POINTER :: LU_DIM_SPECIES
+    INTEGER, DIMENSION(:), POINTER :: LU_DIM_SPECIES => NULL()
 
 END TYPE RBK90_JacobianSP_t
 
diff --git a/src/MNH/modd_aircraft_balloon.f90 b/src/MNH/modd_aircraft_balloon.f90
index 677a4c4ac525ef94bb01b47788418f6289233c8e..9ff02772fc696e682c0efc396edbb3c0b6780748 100644
--- a/src/MNH/modd_aircraft_balloon.f90
+++ b/src/MNH/modd_aircraft_balloon.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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/cvsroot/MNH-VX-Y-Z/src/MNH/modd_aircraft_balloon.f90,v $ $Revision: 1.1.10.1.2.1.10.2.2.2 $
-! MASDEV4_7 modd 2006/06/28 11:31:03
-!-----------------------------------------------------------------
 !     ############################
       MODULE MODD_AIRCRAFT_BALLOON
 !     ############################
@@ -26,10 +21,10 @@
 !!
 !!    REFERENCE
 !!    --------- 
-!!       
+!!
 !!    AUTHOR
 !!    ------
-!!	P. Jabouille   *Meteo France*
+!! P. Jabouille   *Meteo France*
 !!
 !!    MODIFICATIONS
 !!    -------------
@@ -37,6 +32,7 @@
 !!              Apr,19, 2001 (G.Jaubert) add CVBALL type
 !!              March, 2013 : O.Caumont, C.Lac : add vertical profiles
 !!              Oct,2016 : G.DELAUTIER LIMA
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -92,13 +88,13 @@ REAL                          :: MASS   ! mass of the balloon (kg) (if 'CVBALL')
 INTEGER                       :: SEG      ! number of aircraft flight segments
 INTEGER                       :: SEGCURN  ! current flight segment number
 REAL                          :: SEGCURT  ! current flight segment time spent
-REAL, DIMENSION(:),   POINTER :: SEGLAT   ! latitude of flight segment extremities  (LEG+1)
-REAL, DIMENSION(:),   POINTER :: SEGLON   ! longitude of flight segment extremities (LEG+1)
-REAL, DIMENSION(:),   POINTER :: SEGX     ! X of flight segment extremities         (LEG+1)
-REAL, DIMENSION(:),   POINTER :: SEGY     ! Y of flight segment extremities         (LEG+1)
-REAL, DIMENSION(:),   POINTER :: SEGP     ! pressure of flight segment extremities  (LEG+1)
-REAL, DIMENSION(:),   POINTER :: SEGZ     ! altitude of flight segment extremities  (LEG+1)
-REAL, DIMENSION(:),   POINTER :: SEGTIME  ! duration of flight segments             (LEG  )
+REAL, DIMENSION(:),   POINTER :: SEGLAT  => NULL() ! latitude of flight segment extremities  (LEG+1)
+REAL, DIMENSION(:),   POINTER :: SEGLON  => NULL() ! longitude of flight segment extremities (LEG+1)
+REAL, DIMENSION(:),   POINTER :: SEGX    => NULL() ! X of flight segment extremities         (LEG+1)
+REAL, DIMENSION(:),   POINTER :: SEGY    => NULL() ! Y of flight segment extremities         (LEG+1)
+REAL, DIMENSION(:),   POINTER :: SEGP    => NULL() ! pressure of flight segment extremities  (LEG+1)
+REAL, DIMENSION(:),   POINTER :: SEGZ    => NULL() ! altitude of flight segment extremities  (LEG+1)
+REAL, DIMENSION(:),   POINTER :: SEGTIME => NULL() ! duration of flight segments             (LEG  )
 !
 !* aircraft altitude type definition
 !
@@ -113,42 +109,42 @@ REAL                          :: P_CUR    ! current p (if 'AIRCRA' and 'ALTDEF'
 !
 !* data records
 !
-REAL, DIMENSION(:),   POINTER :: TIME     ! t(n)  (n: recording instants)
-REAL, DIMENSION(:),   POINTER :: X        ! X(n)
-REAL, DIMENSION(:),   POINTER :: Y        ! Y(n)
-REAL, DIMENSION(:),   POINTER :: Z        ! Z(n)
-REAL, DIMENSION(:),   POINTER :: XLON     ! longitude(n)
-REAL, DIMENSION(:),   POINTER :: YLAT     ! latitude (n)
-REAL, DIMENSION(:),   POINTER :: ZON      ! zonal wind(n)
-REAL, DIMENSION(:),   POINTER :: MER      ! meridian wind(n)
-REAL, DIMENSION(:),   POINTER :: W        ! w(n)  (air vertical speed)
-REAL, DIMENSION(:),   POINTER :: P        ! p(n)
-REAL, DIMENSION(:),   POINTER :: TKE      ! tke(n)
-REAL, DIMENSION(:),   POINTER :: TKE_DISS ! tke dissipation rate
-REAL, DIMENSION(:),   POINTER :: TH       ! th(n)
-REAL, DIMENSION(:,:), POINTER :: R        ! r*(n)
-REAL, DIMENSION(:,:), POINTER :: SV       ! Sv*(n)
-REAL, DIMENSION(:,:), POINTER :: RTZ      ! tot hydrometeor mixing ratio
-REAL, DIMENSION(:,:,:), POINTER :: RZ      ! water vapour mixing ratio
-REAL, DIMENSION(:,:), POINTER :: FFZ      ! horizontal wind                
-REAL, DIMENSION(:,:), POINTER :: IWCZ     ! ice water content              
-REAL, DIMENSION(:,:), POINTER :: LWCZ     ! liquid water content              
-REAL, DIMENSION(:,:), POINTER :: CIZ      ! Ice concentration
-REAL, DIMENSION(:,:), POINTER :: CCZ      ! Cloud concentration (LIMA)
-REAL, DIMENSION(:,:), POINTER :: CRZ      ! Rain concentration (LIMA)
-REAL, DIMENSION(:,:), POINTER :: CRARE     ! cloud radar reflectivity
-REAL, DIMENSION(:,:), POINTER :: CRARE_ATT ! attenuated (= more realistic) cloud radar reflectivity
-REAL, DIMENSION(:,:), POINTER :: WZ        ! vertical profile of vertical velocity
-REAL, DIMENSION(:,:), POINTER :: ZZ        ! vertical profile of mass point altitude (above sea)
-REAL, DIMENSION(:,:), POINTER :: AER      ! Extinction at 550 nm
-REAL, DIMENSION(:,:), POINTER :: DST_WL   ! Extinction by wavelength
-REAL, DIMENSION(:),   POINTER :: ZS       ! zs(n)
-REAL, DIMENSION(:),   POINTER :: TSRAD    ! Ts(n)
-REAL, DIMENSION(:,:), POINTER :: DATIME   ! record for diachro
-!
-REAL, DIMENSION(:)  ,   POINTER :: THW_FLUX ! thw_flux(n)
-REAL, DIMENSION(:)  ,   POINTER :: RCW_FLUX ! rcw_flux(n)
-REAL, DIMENSION(:,:),   POINTER :: SVW_FLUX ! psw_flux(n)
+REAL, DIMENSION(:),    POINTER :: TIME      => NULL() ! t(n)  (n: recording instants)
+REAL, DIMENSION(:),    POINTER :: X         => NULL() ! X(n)
+REAL, DIMENSION(:),    POINTER :: Y         => NULL() ! Y(n)
+REAL, DIMENSION(:),    POINTER :: Z         => NULL() ! Z(n)
+REAL, DIMENSION(:),    POINTER :: XLON      => NULL() ! longitude(n)
+REAL, DIMENSION(:),    POINTER :: YLAT      => NULL() ! latitude (n)
+REAL, DIMENSION(:),    POINTER :: ZON       => NULL() ! zonal wind(n)
+REAL, DIMENSION(:),    POINTER :: MER       => NULL() ! meridian wind(n)
+REAL, DIMENSION(:),    POINTER :: W         => NULL() ! w(n)  (air vertical speed)
+REAL, DIMENSION(:),    POINTER :: P         => NULL() ! p(n)
+REAL, DIMENSION(:),    POINTER :: TKE       => NULL() ! tke(n)
+REAL, DIMENSION(:),    POINTER :: TKE_DISS  => NULL() ! tke dissipation rate
+REAL, DIMENSION(:),    POINTER :: TH        => NULL() ! th(n)
+REAL, DIMENSION(:,:),  POINTER :: R         => NULL() ! r*(n)
+REAL, DIMENSION(:,:),  POINTER :: SV        => NULL() ! Sv*(n)
+REAL, DIMENSION(:,:),  POINTER :: RTZ       => NULL() ! tot hydrometeor mixing ratio
+REAL, DIMENSION(:,:,:),POINTER :: RZ        => NULL() ! water vapour mixing ratio
+REAL, DIMENSION(:,:),  POINTER :: FFZ       => NULL() ! horizontal wind
+REAL, DIMENSION(:,:),  POINTER :: IWCZ      => NULL() ! ice water content
+REAL, DIMENSION(:,:),  POINTER :: LWCZ      => NULL() ! liquid water content
+REAL, DIMENSION(:,:),  POINTER :: CIZ       => NULL() ! Ice concentration
+REAL, DIMENSION(:,:),  POINTER :: CCZ       => NULL() ! Cloud concentration (LIMA)
+REAL, DIMENSION(:,:),  POINTER :: CRZ       => NULL() ! Rain concentration (LIMA)
+REAL, DIMENSION(:,:),  POINTER :: CRARE     => NULL() ! cloud radar reflectivity
+REAL, DIMENSION(:,:),  POINTER :: CRARE_ATT => NULL() ! attenuated (= more realistic) cloud radar reflectivity
+REAL, DIMENSION(:,:),  POINTER :: WZ        => NULL() ! vertical profile of vertical velocity
+REAL, DIMENSION(:,:),  POINTER :: ZZ        => NULL() ! vertical profile of mass point altitude (above sea)
+REAL, DIMENSION(:,:),  POINTER :: AER       => NULL() ! Extinction at 550 nm
+REAL, DIMENSION(:,:),  POINTER :: DST_WL    => NULL() ! Extinction by wavelength
+REAL, DIMENSION(:),    POINTER :: ZS        => NULL() ! zs(n)
+REAL, DIMENSION(:),    POINTER :: TSRAD     => NULL() ! Ts(n)
+REAL, DIMENSION(:,:),  POINTER :: DATIME    => NULL() ! record for diachro
+!
+REAL, DIMENSION(:)  ,   POINTER :: THW_FLUX => NULL() ! thw_flux(n)
+REAL, DIMENSION(:)  ,   POINTER :: RCW_FLUX => NULL() ! rcw_flux(n)
+REAL, DIMENSION(:,:),   POINTER :: SVW_FLUX => NULL() ! psw_flux(n)
 END TYPE FLYER
 REAL :: XLAM_CRAD ! cloud radar wavelength (m)
 !
diff --git a/src/MNH/modd_blowsnown.f90 b/src/MNH/modd_blowsnown.f90
index 38bf7b9291a25eabec2250b1d72f199952b6acd2..531c86fdeca8d6a833945cbdc021c234ba675a38 100644
--- a/src/MNH/modd_blowsnown.f90
+++ b/src/MNH/modd_blowsnown.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !!     ######################
@@ -28,6 +28,7 @@
 !!
 !!     MODIFICATIONS
 !!     -------------
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !!
 !!--------------------------------------------------------------------
 !!     DECLARATIONS
@@ -39,13 +40,13 @@ TYPE BLOWSNOW_t
 !
 LOGICAL      :: LSNOWSUBL    ! switch to activate blowing snow sublimation
 !
-REAL, DIMENSION(:,:,:), POINTER :: XSNWSUBL3D ! Drifting snow instataneous
+REAL, DIMENSION(:,:,:), POINTER :: XSNWSUBL3D => NULL() ! Drifting snow instataneous
 !                              sublimation rate (kg/m3/s)
-REAL, DIMENSION(:,:,:), POINTER :: XSNWCANO ! Total mass in Canopy at time t
+REAL, DIMENSION(:,:,:), POINTER :: XSNWCANO => NULL() ! Total mass in Canopy at time t
 !     (:,:,1) : equivalent number concentration in Canopy (#/kg)
 !     (:,:,2) : equivalent mass concentration in Canopy (kg/kg)
 !     (:,:,3) : equivalent mass concentration in saltation   (kg/kg)  
-REAL, DIMENSION(:,:,:), POINTER :: XRSNWCANOS ! Source of (rho*canopy mass) at time t
+REAL, DIMENSION(:,:,:), POINTER :: XRSNWCANOS => NULL() ! Source of (rho*canopy mass) at time t
 
 
 
diff --git a/src/MNH/modd_ch_budget_n.f90 b/src/MNH/modd_ch_budget_n.f90
index 41c039d0731d1b22e34d98f84f61a0ebfa72d541..4fe8de9b6374bb96b1c3c735e8cd5b5d9800082a 100644
--- a/src/MNH/modd_ch_budget_n.f90
+++ b/src/MNH/modd_ch_budget_n.f90
@@ -1,3 +1,7 @@
+!MNH_LIC Copyright 2016-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 MODD_CH_BUDGET_n
@@ -15,19 +19,20 @@
 !!
 !!**  IMPLICIT ARGUMENTS
 !!    ------------------
-!!      None 
+!!      None
 !!
 !!    REFERENCE
 !!    ---------
 !!      Book2 of documentation of Meso-NH
-!!          
+!!
 !!    AUTHOR
 !!    ------
 !!	    F. Brosse *Laboratoire d'Aerologie UPS-CNRS*
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    October 2016                   
+!!      Original    October 2016
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -37,16 +42,16 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
 TYPE TREAC_BUDGET
-  REAL   ,           DIMENSION(:,:,:,:), POINTER :: XB_REAC
-  INTEGER,           DIMENSION(:)      , POINTER :: NB_REAC
+  REAL   ,           DIMENSION(:,:,:,:), POINTER :: XB_REAC => NULL()
+  INTEGER,           DIMENSION(:)      , POINTER :: NB_REAC => NULL()
 END TYPE TREAC_BUDGET
 
 TYPE TCH_BUDGET_t
 
-  CHARACTER(LEN=32),  DIMENSION(:), POINTER :: CNAMES_BUDGET
-  INTEGER,            DIMENSION(:), POINTER :: NSPEC_BUDGET
+  CHARACTER(LEN=32),  DIMENSION(:), POINTER :: CNAMES_BUDGET => NULL()
+  INTEGER,            DIMENSION(:), POINTER :: NSPEC_BUDGET => NULL()
   INTEGER                                   :: NEQ_BUDGET
-  TYPE(TREAC_BUDGET), DIMENSION(:), POINTER :: XTCHEM
+  TYPE(TREAC_BUDGET), DIMENSION(:), POINTER :: XTCHEM => NULL()
 
 END TYPE TCH_BUDGET_t
 
diff --git a/src/MNH/modd_ch_constn.f90 b/src/MNH/modd_ch_constn.f90
index 92013fb84d2edd994cd6efed8593fef41c673c7e..f7495916ef8a30dc4d42686e9e16761665ea0698 100644
--- a/src/MNH/modd_ch_constn.f90
+++ b/src/MNH/modd_ch_constn.f90
@@ -1,14 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-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 MODD_CH_CONST_n
 !     ######################
@@ -32,6 +26,7 @@
 !!
 !!    MODIFICATIONS
 !!    -------------
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -43,14 +38,14 @@ IMPLICIT NONE
 TYPE CH_CONST_t
 !
 
-  REAL, DIMENSION(:), POINTER :: XSREALMASSMOLVAL ! final molecular
+  REAL, DIMENSION(:), POINTER :: XSREALMASSMOLVAL => NULL() ! final molecular
                                                           ! diffusivity value
-  REAL, DIMENSION(:), POINTER :: XSREALREACTVAL ! final chemical
+  REAL, DIMENSION(:), POINTER :: XSREALREACTVAL => NULL() ! final chemical
                                                         ! reactivity factor
                                                         ! with biologie
-  REAL, DIMENSION(:,:), POINTER :: XSREALHENRYVAL ! chemical Henry
+  REAL, DIMENSION(:,:), POINTER :: XSREALHENRYVAL => NULL() ! chemical Henry
                                                           ! constant value
-  REAL                            :: XCONVERSION ! emission unit 
+  REAL                            :: XCONVERSION ! emission unit
                                                      ! conversion factor
 !
 
diff --git a/src/MNH/modd_ch_icen.f90 b/src/MNH/modd_ch_icen.f90
index 8f9323d0c2af2a37acbae0e12c2241775e0beb60..19f0a3c2662045354fc8117702c6a98e16017a11 100644
--- a/src/MNH/modd_ch_icen.f90
+++ b/src/MNH/modd_ch_icen.f90
@@ -1,15 +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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home//MESONH/MNH-V5-1-4/src/MODIF_TMICICE/modd_ch_icen.f90
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------------------
 !!    ########################
       MODULE MODD_CH_ICE_n
 !!    ########################
@@ -28,6 +21,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!    Original 11/12/15
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -43,7 +37,7 @@ IMPLICIT NONE
 TYPE CH_ICE_t
 !
 
-  INTEGER, POINTER, DIMENSION(:)  :: NINDEXGI, NINDEXWI, NINDEXWG
+  INTEGER, POINTER, DIMENSION(:)  :: NINDEXGI => NULL(), NINDEXWI => NULL(), NINDEXWG => NULL()
 !
 !-----------------------------------------------------------------------------
 END TYPE CH_ICE_t
diff --git a/src/MNH/modd_ch_model0d.f90 b/src/MNH/modd_ch_model0d.f90
index f55a168be4539f00145f916194b9f2abbe36227f..0dd1a92ad3ac6861cbb6bf791f45064562450f0d 100644
--- a/src/MNH/modd_ch_model0d.f90
+++ b/src/MNH/modd_ch_model0d.f90
@@ -43,7 +43,7 @@
 !*       0.   DECLARATIONS
 !        -----------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 SAVE
diff --git a/src/MNH/modd_ch_phn.f90 b/src/MNH/modd_ch_phn.f90
index b321995c92d9ae22511de0417b35898bfca2dd17..b1071e5f2dd072436fd46ed18c7f2264e3f6d2d6 100644
--- a/src/MNH/modd_ch_phn.f90
+++ b/src/MNH/modd_ch_phn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2007-2018 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.
 !-----------------------------------------------------------------
 !!    ########################
@@ -23,6 +23,7 @@
 !!       P. Tulet      Nov 2014 accumulated moles of aqueous species that fall at the surface   
 !!       P. Tulet & M. Leriche Nov 2015 add pH in rain at the surface
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -38,11 +39,11 @@ IMPLICIT NONE
 TYPE CH_PH_t
 !
 
-!  REAL, POINTER, DIMENSION(:,:,:) :: XPHC ! cloud
-!  REAL, POINTER, DIMENSION(:,:,:) :: XPHR ! rain
-  REAL, POINTER, DIMENSION(:,:,:) :: XACPRAQ ! sum of aqueous chemical species fall at the surface by rain
-                                             ! in moles i / m2 (ratio with XACPRR for concentration
-  REAL, POINTER, DIMENSION(:,:) :: XACPHR !  mean PH in accumulated surface rain
+!  REAL, POINTER, DIMENSION(:,:,:) :: XPHC => NULL() ! cloud
+!  REAL, POINTER, DIMENSION(:,:,:) :: XPHR => NULL() ! rain
+  REAL, POINTER, DIMENSION(:,:,:) :: XACPRAQ => NULL() ! sum of aqueous chemical species fall at the surface by rain
+                                                       ! in moles i / m2 (ratio with XACPRR for concentration
+  REAL, POINTER, DIMENSION(:,:) :: XACPHR => NULL()    !  mean PH in accumulated surface rain
 !
 !-----------------------------------------------------------------------------
 END TYPE CH_PH_t
diff --git a/src/MNH/modd_ch_prodlosstotn.f90 b/src/MNH/modd_ch_prodlosstotn.f90
index 289f97e343281131b22dd047faec812e3ffe5e98..a5fb75b1cbeaaed3b87535d47e838daba5d870fd 100644
--- a/src/MNH/modd_ch_prodlosstotn.f90
+++ b/src/MNH/modd_ch_prodlosstotn.f90
@@ -1,3 +1,8 @@
+!MNH_LIC Copyright 2016-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 MODD_CH_PRODLOSSTOT_n
 !!    ########################
@@ -25,7 +30,8 @@
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    October 2016                   
+!!      Original    October 2016
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -36,11 +42,11 @@ IMPLICIT NONE
 
 TYPE CH_PRODLOSSTOT_t
 !
-    CHARACTER(LEN=32),  DIMENSION(:), POINTER :: CNAMES_PRODLOSST
-    INTEGER,            DIMENSION(:), POINTER :: NIND_SPEC
+    CHARACTER(LEN=32),  DIMENSION(:), POINTER :: CNAMES_PRODLOSST => NULL()
+    INTEGER,            DIMENSION(:), POINTER :: NIND_SPEC => NULL()
     INTEGER                                   :: NEQ_PLT
-    REAL,         DIMENSION(:,:,:,:), POINTER:: XPROD
-    REAL,         DIMENSION(:,:,:,:), POINTER:: XLOSS
+    REAL,         DIMENSION(:,:,:,:), POINTER:: XPROD => NULL()
+    REAL,         DIMENSION(:,:,:,:), POINTER:: XLOSS => NULL()
 !
 !-----------------------------------------------------------------------------
 
diff --git a/src/MNH/modd_ch_rosenbrockn.f90 b/src/MNH/modd_ch_rosenbrockn.f90
index ff5b17a033bb4353b514e9ac997c1721e0daa78b..9e46c3d64f0288c21cd927a3b51d872136cae209 100644
--- a/src/MNH/modd_ch_rosenbrockn.f90
+++ b/src/MNH/modd_ch_rosenbrockn.f90
@@ -1,6 +1,6 @@
-!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.
 !!    #########################
       MODULE MODD_CH_ROSENBROCK_n
@@ -20,6 +20,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!    Original 05/06/07
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -36,19 +37,19 @@ TYPE CH_ROSENBROCK_t
 !
   INTEGER :: NSPARSEDIM ! size of vectors NSPARSE_IROW and NSPARSE_ICOL
 !
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_IROW ! row index 
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_ICOL ! col index
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_CROW ! first row element index
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_DIAG ! diag index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_IROW => NULL() ! row index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_ICOL => NULL() ! col index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_CROW => NULL() ! first row element index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_DIAG => NULL() ! diag index
                                                 ! of the sparse JACobian matrix
 !
   INTEGER :: NEQ_NAQ    ! number of Non-AQueous species
   INTEGER :: NSPARSEDIM_NAQ !size of vectors NSPARSE_IROW_NAQ and NSPARSE_ICOL_NAQ
 !
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_IROW_NAQ ! row index 
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_ICOL_NAQ ! col index
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_CROW_NAQ ! first row element index
-  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_DIAG_NAQ ! diag index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_IROW_NAQ => NULL() ! row index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_ICOL_NAQ => NULL() ! col index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_CROW_NAQ => NULL() ! first row element index
+  INTEGER, POINTER, DIMENSION(:) :: NSPARSE_DIAG_NAQ => NULL() ! diag index
                            ! of the sparse JACobian matrix of NonAQueous species
 !
 !
diff --git a/src/MNH/modd_csts_salt.f90 b/src/MNH/modd_csts_salt.f90
index 4c985d21a1f9e606d11aa89ec831c8ecb621a5e6..9db26edacaf63aa95a8388e544ed9eacf29f6308 100644
--- a/src/MNH/modd_csts_salt.f90
+++ b/src/MNH/modd_csts_salt.f90
@@ -33,6 +33,7 @@
 !!
 !!     MODIFICATIONS
 !!     -------------
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 !!--------------------------------------------------------------------
 !!     DECLARATIONS
@@ -42,7 +43,9 @@
 IMPLICIT NONE
 !
 !densité salt a introduire
-REAL, PARAMETER  :: XDENSITY_SALT     = 2.1e3     ![kg/m3] density of dust
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
+REAL, PARAMETER  :: XDENSITY_SALT     = 2.2e3     ![kg/m3] density of dust
+! -- PIERRE / MARINE SSA DUST - MODIF --
 REAL, PARAMETER  :: XMOLARWEIGHT_SALT = 58.e-3   ![kg/mol] molar weight dust
 REAL, PARAMETER  :: XM3TOUM3_SALT     = 1.d18     ![um3/m3] conversion factor
 REAL, PARAMETER  :: XUM3TOM3_SALT     = 1.d-18    ![m3/um3] conversion factor
diff --git a/src/MNH/modd_diag_in_run.f90 b/src/MNH/modd_diag_in_run.f90
index 4c52ea1175777bf35c09d329002634b54f7c99ca..b7bba80d0c045a7787cf64d952de4b44c6a2961f 100644
--- a/src/MNH/modd_diag_in_run.f90
+++ b/src/MNH/modd_diag_in_run.f90
@@ -11,6 +11,7 @@
 MODULE MODD_DIAG_IN_RUN
 ! Modifications
 !!                   02/2018 Q.Libois ECRAD
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !
 !* stores instantaneous diagnostic arrays for the current time-step
 !
@@ -37,4 +38,6 @@ REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_MER10M! meridian wind at 10m
 REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_DSTAOD! dust aerosol optical depth
 REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_SFCO2    ! CO2 Surface flux
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: XCURRENT_TKE_DISS ! Tke dissipation rate
+REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_SLTAOD   ! Salt aerosol optical depth
+REAL, DIMENSION(:,:),   ALLOCATABLE :: XCURRENT_ZWS      ! Significant height of waves
 END MODULE MODD_DIAG_IN_RUN
diff --git a/src/MNH/modd_fieldn.f90 b/src/MNH/modd_fieldn.f90
index 5f5e1847b0950cce83e8cb26aad68dbc4fbb2c5d..92e3b89c6c4b3def1b0ddbfb90bc0c8bb4687188 100644
--- a/src/MNH/modd_fieldn.f90
+++ b/src/MNH/modd_fieldn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
@@ -49,6 +49,10 @@
 !!                               for Theta and r (noted _CLD)
 !!                     04/16    (M.Mazoyer) New supersaturation fields
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                   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 06/03/2019: correct XZWS entry
+!  P. Wautelet 14/03/2019: add XZWS_DEFAULT parameter
 !!
 !-------------------------------------------------------------------------------
 !
@@ -58,7 +62,10 @@
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 IMPLICIT NONE
 
+REAL, PARAMETER :: XZWS_DEFAULT = 2. ! Default value for XZWS: 2 meters
+
 TYPE FIELD_t
+  REAL, DIMENSION(:,:),   POINTER :: XZWS=>NULL()    ! significant sea wave
 !  REAL, DIMENSION(:,:,:), POINTER :: XUT=>NULL(),XVT=>NULL(),XWT=>NULL()
                                       ! U,V,W  at time t
   REAL, DIMENSION(:,:,:), POINTER :: XRUS=>NULL(),XRVS=>NULL(),XRWS=>NULL()
@@ -108,6 +115,7 @@ END TYPE FIELD_t
 
 TYPE(FIELD_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: FIELD_MODEL
 
+REAL, DIMENSION(:,:),   POINTER :: XZWS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XUT=>NULL(),XVT=>NULL(),XWT=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XRUS=>NULL(),XRVS=>NULL(),XRWS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XRUS_PRES=>NULL(),XRVS_PRES=>NULL(),XRWS_PRES=>NULL()
@@ -133,6 +141,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XSRC=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XSRCT=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XSIGS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XCLDFR=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XRAINFR=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XCIT=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XTHM=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XPABSM=>NULL()
@@ -147,6 +156,7 @@ INTEGER, INTENT(IN) :: KFROM, KTO
 INTEGER :: IID,IRESP
 !
 ! Save current state for allocated arrays
+!FIELD_MODEL(KFROM)%XZWS=>XZWS !Done in FIELDLIST_GOTO_MODEL
 !FIELD_MODEL(KFROM)%XUT=>XUT !Done in FIELDLIST_GOTO_MODEL
 !FIELD_MODEL(KFROM)%XVT=>XVT !Done in FIELDLIST_GOTO_MODEL
 !FIELD_MODEL(KFROM)%XWT=>XWT !Done in FIELDLIST_GOTO_MODEL
@@ -182,6 +192,7 @@ FIELD_MODEL(KFROM)%XPABSM=>XPABSM
 FIELD_MODEL(KFROM)%XRCM=>XRCM
 !
 ! Current model is set to model KTO
+!XZWS=>FIELD_MODEL(KTO)%XZWS !Done in FIELDLIST_GOTO_MODEL
 !XUT=>FIELD_MODEL(KTO)%XUT !Done in FIELDLIST_GOTO_MODEL
 !XVT=>FIELD_MODEL(KTO)%XVT !Done in FIELDLIST_GOTO_MODEL
 !XWT=>FIELD_MODEL(KTO)%XWT !Done in FIELDLIST_GOTO_MODEL
diff --git a/src/MNH/modd_getn.f90 b/src/MNH/modd_getn.f90
index 7a583779d04dd284bda63e2f567b548931c21c26..bae3402d5f9a9453dbc6f7f0fa706e3755793aa3 100644
--- a/src/MNH/modd_getn.f90
+++ b/src/MNH/modd_getn.f90
@@ -52,6 +52,7 @@
 !!      V. Masson   01/2004   surface externalization (rm CGETSURF)
 !!                  05/2006   Remove EPS and LGETALL
 !!      M. Leriche  04/2010   add get indicators for pH in cloud and rain
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -102,6 +103,7 @@ TYPE GET_t
   CHARACTER (LEN=4)  :: CGETBL_DEPTH          ! Get indicator for the BL depth
   CHARACTER (LEN=4)  :: CGETSBL_DEPTH         ! Get indicator for the SBL depth
   CHARACTER (LEN=4)  :: CGETPHC,CGETPHR       ! Get indicator for the pH values
+  CHARACTER (LEN=4)  :: CGETZWS
                                 ! in cloud water and rainwater
 !
 END TYPE GET_t
@@ -133,6 +135,7 @@ CHARACTER (LEN=4), POINTER :: CGETBL_DEPTH=>NULL()
 CHARACTER (LEN=4), POINTER :: CGETSBL_DEPTH=>NULL()
 CHARACTER (LEN=4), POINTER :: CGETPHC=>NULL()
 CHARACTER (LEN=4), POINTER :: CGETPHR=>NULL()
+CHARACTER (LEN=4), POINTER :: CGETZWS=>NULL()
 
 CONTAINS
 
@@ -179,6 +182,7 @@ CGETSRC=>GET_MODEL(KTO)%CGETSRC
 CGETCLDFR=>GET_MODEL(KTO)%CGETCLDFR
 CGETSRCT=>GET_MODEL(KTO)%CGETSRCT
 CGETCIT=>GET_MODEL(KTO)%CGETCIT
+CGETZWS=>GET_MODEL(KTO)%CGETZWS
 CGETCONV=>GET_MODEL(KTO)%CGETCONV
 CGETRAD=>GET_MODEL(KTO)%CGETRAD
 CGETCLOUD=>GET_MODEL(KTO)%CGETCLOUD
diff --git a/src/MNH/modd_io_nam.f90 b/src/MNH/modd_io_nam.f90
index 8c4a8e628d9bcaff68fc79bea844859ef93cf6b4..e5249d0d4cba998ecd8e37a6c29fc75a5afddce7 100644
--- a/src/MNH/modd_io_nam.f90
+++ b/src/MNH/modd_io_nam.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -31,7 +31,7 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !------------------------------------------------------------------------------
diff --git a/src/MNH/modd_io_surf_mnh.f90 b/src/MNH/modd_io_surf_mnh.f90
index dffcc6bc7eee6640897682f55ede9a285b20ac29..635f6b6ed39c1cf5a57d75aef19521fddd25bb96 100644
--- a/src/MNH/modd_io_surf_mnh.f90
+++ b/src/MNH/modd_io_surf_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
@@ -32,7 +32,7 @@
 !
 !*       0.   DECLARATIONS
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 
 IMPLICIT NONE
diff --git a/src/MNH/modd_lesn.f90 b/src/MNH/modd_lesn.f90
index dd37f5461e2c5e7c7146c82e8ef724ca066ae8d3..9fe76c3f8f7eacbc68b7724d4f0df26562d791d3 100644
--- a/src/MNH/modd_lesn.f90
+++ b/src/MNH/modd_lesn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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: /srv/cvsroot/MNH-VX-Y-Z/src/MNH/modd_lesn.f90,v $ $Revision: 1.2.2.2.2.1.2.1.12.2 $ $Date: 2014/01/09 15:01:56 $
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
 !     ############### 
       MODULE MODD_LES_n
 !     ###############
@@ -22,13 +17,13 @@
 !!
 !!**  IMPLICIT ARGUMENTS
 !!    ------------------ 
-!!      None  
+!!      None
 !!
 !!    REFERENCE
 !!    ---------
 !!      Book2 of documentation of Meso-NH (module MODD_LES)
 !!      Technical Specifications Report of the Meso-NH (chapters 2 and 3)
-!!      
+!!
 !!
 !!    AUTHOR
 !!    ------
@@ -36,7 +31,7 @@
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    March 10, 1995                
+!!      Original    March 10, 1995
 !!
 !!       (J.Stein)  Sept. 25, 1995  add the model number in LES mode
 !!       J. Cuxart  Oct.   4, 1996  New time series
@@ -44,6 +39,8 @@
 !!       V. Masson  Nov.   6, 2002  LES budgets
 !!       O.Thouron  June,     2008  New radiation diagnostics
 !!                    10/2016 (C.Lac) Add droplet deposition
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
+!!                    02/2019 (C. Lac) Add rain fraction as a LES diagnostic
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -117,6 +114,7 @@ TYPE LES_t
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Cf=>NULL()  ! <CLDFR>
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf=>NULL()  ! <Cf> tq rc>0 (0 OU 1)
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf2=>NULL()  ! <Cf> tq rc>1E-5 (0 OU 1)
+  REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_RF=>NULL()  ! <RAINFR>
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Mf=>NULL()  ! <Mf> 
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHt=>NULL()! <Kh for thet
   REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHr=>NULL()! <Kh for qr>
@@ -647,20 +645,20 @@ TYPE LES_t
 !
   REAL, DIMENSION(:,:,:), POINTER :: XCORRk_WW=>NULL()   ! between w and w
 !
-!lw and sw fluxes up and down                                                 
-  REAL, DIMENSION(:,:), POINTER :: XLES_SWU   !mean on the domain of the sw_up flux                         
+!lw and sw fluxes up and down
+  REAL, DIMENSION(:,:), POINTER :: XLES_SWU => NULL()   !mean on the domain of the sw_up flux
                                                  !temporal serie
-  REAL, DIMENSION(:,:), POINTER :: XLES_SWD   !mean on the domain of the sw_down flux                       
+  REAL, DIMENSION(:,:), POINTER :: XLES_SWD => NULL()   !mean on the domain of the sw_down flux
                                                  !temporal serie
-  REAL, DIMENSION(:,:), POINTER :: XLES_LWU   !mean on the domain of the lw_up flux                          
+  REAL, DIMENSION(:,:), POINTER :: XLES_LWU => NULL()   !mean on the domain of the lw_up flux
                                                  !temporal serie
-  REAL, DIMENSION(:,:), POINTER :: XLES_LWD   !mean on the domain of the lw_down flux                        
+  REAL, DIMENSION(:,:), POINTER :: XLES_LWD => NULL()   !mean on the domain of the lw_down flux
                                                  !temporal serie
-  REAL, DIMENSION(:,:), POINTER :: XLES_DTHRADSW   !mean on the domain of dthrad_sw flux                        
+  REAL, DIMENSION(:,:), POINTER :: XLES_DTHRADSW => NULL()   !mean on the domain of dthrad_sw flux
                                                  !temporal serie
-  REAL, DIMENSION(:,:), POINTER :: XLES_DTHRADLW   !mean on the domain of dthrad_lw flux                        
+  REAL, DIMENSION(:,:), POINTER :: XLES_DTHRADLW => NULL()   !mean on the domain of dthrad_lw flux
                                                  !temporal serie
-  REAL, DIMENSION(:,:), POINTER :: XLES_RADEFF   ! effective radius                       
+  REAL, DIMENSION(:,:), POINTER :: XLES_RADEFF => NULL()   ! effective radius
 !-------------------------------------------------------------------------------
 !
 END TYPE LES_t
@@ -698,6 +696,7 @@ REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Rc=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Cf=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_INDCf2=>NULL()
+REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_RF=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_Mf=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHt=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLES_MEAN_KHr=>NULL()
@@ -1125,6 +1124,7 @@ LES_MODEL(KFROM)%XLES_MEAN_Rc=>XLES_MEAN_Rc
 LES_MODEL(KFROM)%XLES_MEAN_Cf=>XLES_MEAN_Cf
 LES_MODEL(KFROM)%XLES_MEAN_INDCf=>XLES_MEAN_INDCf
 LES_MODEL(KFROM)%XLES_MEAN_INDCf2=>XLES_MEAN_INDCf2
+LES_MODEL(KFROM)%XLES_MEAN_RF=>XLES_MEAN_RF
 LES_MODEL(KFROM)%XLES_MEAN_Mf=>XLES_MEAN_Mf
 LES_MODEL(KFROM)%XLES_MEAN_KHt=>XLES_MEAN_KHt
 LES_MODEL(KFROM)%XLES_MEAN_KHr=>XLES_MEAN_KHr
@@ -1553,6 +1553,7 @@ XLES_MEAN_Rc=>LES_MODEL(KTO)%XLES_MEAN_Rc
 XLES_MEAN_Cf=>LES_MODEL(KTO)%XLES_MEAN_Cf
 XLES_MEAN_INDCf=>LES_MODEL(KTO)%XLES_MEAN_INDCf
 XLES_MEAN_INDCf2=>LES_MODEL(KTO)%XLES_MEAN_INDCf2
+XLES_MEAN_RF=>LES_MODEL(KTO)%XLES_MEAN_RF
 XLES_MEAN_Mf=>LES_MODEL(KTO)%XLES_MEAN_Mf
 XLES_MEAN_KHt=>LES_MODEL(KTO)%XLES_MEAN_KHt
 XLES_MEAN_KHr=>LES_MODEL(KTO)%XLES_MEAN_KHr
diff --git a/src/MNH/modd_lsfieldn.f90 b/src/MNH/modd_lsfieldn.f90
index 208f1d4d2bb3a8ae3cdd6b34a35324f76449d7a8..6274b8dd6075620ef5b74a9c58629da9b5884af1 100644
--- a/src/MNH/modd_lsfieldn.f90
+++ b/src/MNH/modd_lsfieldn.f90
@@ -36,6 +36,7 @@
 !!                                 2D arrays to store values at lateral boundaries
 !!                  20/05/06  Remove EPS
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !
@@ -55,12 +56,15 @@ TYPE LSFIELD_t
 !                              ! time t-dt for larger scales 
 !  REAL, DIMENSION(:,:,:), POINTER :: XLSRVM=>NULL() ! Rv (mixing ratio for vapor)
 !                              ! at time t-dt for larger scales 
+ REAL, DIMENSION(:,:),   POINTER :: XLSZWSM=>NULL() ! height of sea waves
   REAL, DIMENSION(:,:,:), POINTER :: XLSUS=>NULL(),XLSVS=>NULL(),XLSWS=>NULL() ! Tendency of 
                               ! U,V,W for larger scales 
   REAL, DIMENSION(:,:,:), POINTER :: XLSTHS=>NULL()     ! Tendency of 
                               ! theta for larger scales
   REAL, DIMENSION(:,:,:), POINTER :: XLSRVS=>NULL() ! Tendency of 
 !                              ! RV for larger scales
+REAL, DIMENSION(:,:),   POINTER :: XLSZWSS=>NULL() ! Tendency of 
+!                              ! sea wave for larger scales
 !    previously  present for LS for V * Prhodj
 !
 !  Large scale variables for horizontal lbc
@@ -104,8 +108,10 @@ TYPE(LSFIELD_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: LSFIELD_MODEL
 REAL, DIMENSION(:,:,:), POINTER :: XLSUM=>NULL(),XLSVM=>NULL(),XLSWM=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLSTHM=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLSRVM=>NULL()
+REAL, DIMENSION(:,:),   POINTER :: XLSZWSM=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLSUS=>NULL(),XLSVS=>NULL(),XLSWS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLSTHS=>NULL()
+REAL, DIMENSION(:,:),   POINTER :: XLSZWSS=>NULL()
 REAL, DIMENSION(:,:,:), POINTER :: XLSRVS=>NULL()
 REAL, DIMENSION(:,:,:),   POINTER :: XLBXUM=>NULL(),XLBXVM=>NULL(),XLBXWM=>NULL()
 REAL, DIMENSION(:,:,:),   POINTER :: XLBXTHM=>NULL()
@@ -143,11 +149,13 @@ INTEGER, INTENT(IN) :: KFROM, KTO
 !LSFIELD_MODEL(KFROM)%XLSWM=>XLSWM !Done in FIELDLIST_GOTO_MODEL
 !LSFIELD_MODEL(KFROM)%XLSTHM=>XLSTHM !Done in FIELDLIST_GOTO_MODEL
 !LSFIELD_MODEL(KFROM)%XLSRVM=>XLSRVM !Done in FIELDLIST_GOTO_MODEL
+LSFIELD_MODEL(KFROM)%XLSZWSM=>XLSZWSM
 LSFIELD_MODEL(KFROM)%XLSUS=>XLSUS
 LSFIELD_MODEL(KFROM)%XLSVS=>XLSVS
 LSFIELD_MODEL(KFROM)%XLSWS=>XLSWS
 LSFIELD_MODEL(KFROM)%XLSTHS=>XLSTHS
 LSFIELD_MODEL(KFROM)%XLSRVS=>XLSRVS
+LSFIELD_MODEL(KFROM)%XLSZWSS=>XLSZWSS
 !LSFIELD_MODEL(KFROM)%XLBXUM=>XLBXUM !Done in FIELDLIST_GOTO_MODEL
 !LSFIELD_MODEL(KFROM)%XLBXVM=>XLBXVM !Done in FIELDLIST_GOTO_MODEL
 !LSFIELD_MODEL(KFROM)%XLBXWM=>XLBXWM !Done in FIELDLIST_GOTO_MODEL
@@ -199,11 +207,13 @@ LSFIELD_MODEL(KFROM)%NKLIN_LBYM=>NKLIN_LBYM
 !XLSWM=>LSFIELD_MODEL(KTO)%XLSWM !Done in FIELDLIST_GOTO_MODEL
 !XLSTHM=>LSFIELD_MODEL(KTO)%XLSTHM !Done in FIELDLIST_GOTO_MODEL
 !XLSRVM=>LSFIELD_MODEL(KTO)%XLSRVM !Done in FIELDLIST_GOTO_MODEL
+XLSZWSM=>LSFIELD_MODEL(KTO)%XLSZWSM
 XLSUS=>LSFIELD_MODEL(KTO)%XLSUS
 XLSVS=>LSFIELD_MODEL(KTO)%XLSVS
 XLSWS=>LSFIELD_MODEL(KTO)%XLSWS
 XLSTHS=>LSFIELD_MODEL(KTO)%XLSTHS
 XLSRVS=>LSFIELD_MODEL(KTO)%XLSRVS
+XLSZWSS=>LSFIELD_MODEL(KTO)%XLSZWSS
 !XLBXUM=>LSFIELD_MODEL(KTO)%XLBXUM !Done in FIELDLIST_GOTO_MODEL
 !XLBXVM=>LSFIELD_MODEL(KTO)%XLBXVM !Done in FIELDLIST_GOTO_MODEL
 !XLBXWM=>LSFIELD_MODEL(KTO)%XLBXWM !Done in FIELDLIST_GOTO_MODEL
diff --git a/src/MNH/modd_lunit.f90 b/src/MNH/modd_lunit.f90
index 36027e7cf005c7dbaf37ab5f962f5281e91c0c18..d19cf3d356985b87d202896711878561674a672a 100644
--- a/src/MNH/modd_lunit.f90
+++ b/src/MNH/modd_lunit.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #################
@@ -22,26 +22,26 @@
 !!    REFERENCE
 !!    ---------
 !!      Book2 of documentation of Meso-NH (MODD_LUNIT)
-!!          
+!!
 !!    AUTHOR
 !!    ------
-!!	V. Ducrocq   *Meteo France*
+!!     V. Ducrocq   *Meteo France*
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    05/05/94                      
+!!      Original    05/05/94
 !!      V. Masson   01/2004 add file names for use in externalized surface
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE 
 !
-CHARACTER(LEN=16),SAVE :: CLUOUT0    ! Name of output_listing file
 TYPE(TFILEDATA),POINTER :: TLUOUT0 => NULL() ! output_listing file
 TYPE(TFILEDATA),POINTER :: TOUTDATAFILE => NULL() ! output data file being written
 TYPE(TFILEDATA),POINTER :: TPGDFILE     => NULL() ! PGD file
diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90
index 10fe48a5f2ec984081ae504e5f68ce2977e4d0fc..4ac4a5c31b574eb53b7f128a57a9e9beb41996fb 100644
--- a/src/MNH/modd_lunitn.f90
+++ b/src/MNH/modd_lunitn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###################
@@ -35,13 +35,14 @@
 !!      Modification  10/03/95 (I.Mallet)   add the coupling files names 
 !!      Modification  25/09/95 (J.Stein) add the output diachronic file                    
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 !
-USE MODD_IO_ll,      ONLY: TFILEDATA, TPTR2FILE
+USE MODD_IO,         ONLY: TFILEDATA, TPTR2FILE
 USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPCPLFILEMAX 
 
 IMPLICIT NONE
@@ -54,8 +55,6 @@ TYPE LUNIT_t
   TYPE(TFILEDATA),POINTER :: TINIFILEPGD => NULL() ! PGD associated to input FM-file
   CHARACTER(LEN=24) :: COUTFILE = ''    ! Generic name of the output FM-files
   TYPE(TFILEDATA),POINTER :: TDIAFILE => NULL() ! diachronic output file
-!
-  CHARACTER(LEN=16) :: CLUOUT = ''      ! Name of output_listing file
   TYPE(TFILEDATA),POINTER :: TLUOUT => NULL() ! output_listing file
 !JUAN
   CHARACTER(LEN=28),DIMENSION(:),POINTER :: CCPLFILE =>NULL() ! Names of the
@@ -75,7 +74,6 @@ CHARACTER(LEN=28), POINTER :: CINIFILEPGD =>NULL()
 TYPE(TFILEDATA),   POINTER :: TINIFILEPGD => NULL()
 CHARACTER(LEN=24), POINTER :: COUTFILE=>NULL()
 TYPE(TFILEDATA),   POINTER :: TDIAFILE=>NULL()
-CHARACTER(LEN=16), POINTER :: CLUOUT=>NULL()
 TYPE(TFILEDATA),   POINTER :: TLUOUT=>NULL()
 CHARACTER(LEN=28),DIMENSION(:), POINTER :: CCPLFILE=>NULL()
 TYPE(TPTR2FILE),  DIMENSION(:), POINTER :: TCPLFILE=>NULL()
@@ -84,7 +82,7 @@ CONTAINS
 
 SUBROUTINE LUNIT_GOTO_MODEL(KFROM, KTO)
 !
-USE MODD_IO_ll, ONLY : TFILE_OUTPUTLISTING
+USE MODD_IO, ONLY : TFILE_OUTPUTLISTING
 !
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
@@ -107,7 +105,6 @@ CINIFILEPGD=>LUNIT_MODEL(KTO)%CINIFILEPGD
 TINIFILEPGD=>LUNIT_MODEL(KTO)%TINIFILEPGD
 COUTFILE=>LUNIT_MODEL(KTO)%COUTFILE
 TDIAFILE=>LUNIT_MODEL(KTO)%TDIAFILE
-CLUOUT=>LUNIT_MODEL(KTO)%CLUOUT
 TLUOUT=>LUNIT_MODEL(KTO)%TLUOUT
 CCPLFILE=>LUNIT_MODEL(KTO)%CCPLFILE
 TCPLFILE=>LUNIT_MODEL(KTO)%TCPLFILE
diff --git a/src/MNH/modd_nesting.f90 b/src/MNH/modd_nesting.f90
index 077e976819222b8ea362026da445b3113b47bda1..d644d0260864d317790838b253b26c75aca6bac0 100644
--- a/src/MNH/modd_nesting.f90
+++ b/src/MNH/modd_nesting.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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,7 +24,7 @@
 !!    REFERENCE
 !!    ---------
 !!      Book2 of documentation of Meso-NH (module MODD_NESTING)
-!!       
+!!
 !!    AUTHOR
 !!    ------
 !!	J.P. Lafore   *Meteo France*
@@ -32,8 +32,9 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    18/08/95
-!!      updated     29/07/96  (J.P. Lafore) MY_NAME(m) introduction          
+!!      updated     29/07/96  (J.P. Lafore) MY_NAME(m) introduction
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -81,11 +82,11 @@ LOGICAL,SAVE,  DIMENSION(JPMODELMAX) :: L2D_NEST         ! Logical for 2D model
 LOGICAL,SAVE,  DIMENSION(JPMODELMAX) :: LPACK_NEST       ! Logical to compress 1D or 2D FM files of model m
 !
 TYPE REAL_FIELD2D_ALL
-    REAL, DIMENSION(:,:), POINTER :: XFIELD2D
+    REAL, DIMENSION(:,:), POINTER :: XFIELD2D => NULL()
 END TYPE REAL_FIELD2D_ALL
 
 TYPE REAL_FIELD1D_ALL
-    REAL, DIMENSION(:), POINTER :: XFIELD1D
+    REAL, DIMENSION(:), POINTER :: XFIELD1D => NULL()
 END TYPE REAL_FIELD1D_ALL
 !
 TYPE(REAL_FIELD2D_ALL), DIMENSION(JPMODELMAX), TARGET :: TXZS   ! orography of model m
diff --git a/src/MNH/modd_nudgingn.f90 b/src/MNH/modd_nudgingn.f90
index c4f4768bacd7ec1d74954871dcf574ef392c79bf..2bdadfb0f3c65b676df5f51f1b8f24c213e5dc7e 100644
--- a/src/MNH/modd_nudgingn.f90
+++ b/src/MNH/modd_nudgingn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2006-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 modd 2006/05/24 18:05:50
-!-----------------------------------------------------------------
 !     ###################
       MODULE MODD_NUDGING_n
 !     ###################
@@ -32,6 +27,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original       15/05/06
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !!
 !-------------------------------------------------------------------------------
 !
@@ -49,8 +45,8 @@ END TYPE NUDGING_t
 
 TYPE(NUDGING_t), DIMENSION(JPMODELMAX), TARGET, SAVE :: NUDGING_MODEL
 
-LOGICAL, POINTER :: LNUDGING   
-REAL, POINTER :: XTNUDGING  
+LOGICAL, POINTER :: LNUDGING  => NULL()
+REAL,    POINTER :: XTNUDGING => NULL()
 
 CONTAINS
 
diff --git a/src/MNH/modd_outn.f90 b/src/MNH/modd_outn.f90
index 0dceb304a19aa2f3520a4144505dce090471e760..7a3ff7e78c4c8b0853cd5d9b9a15eb80f8847ab3 100644
--- a/src/MNH/modd_outn.f90
+++ b/src/MNH/modd_outn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ################
@@ -39,7 +39,7 @@
 !
 !
 USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPOUTMAX
-USE MODD_IO_ll, ONLY:TOUTBAK
+USE MODD_IO,         ONLY: TOUTBAK
 IMPLICIT NONE
 
 TYPE OUT_t
diff --git a/src/MNH/modd_param_ecradn.f90 b/src/MNH/modd_param_ecradn.f90
index 988888427f73a72b906136430fc581646778aa82..a7bf0b344753be234bbed47285ed5880b1de3018 100644
--- a/src/MNH/modd_param_ecradn.f90
+++ b/src/MNH/modd_param_ecradn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2017-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 modd 2006/11/23 17:28:26
-!-----------------------------------------------------------------
 !     ######################## 
       MODULE MODD_PARAM_ECRAD_n
 !     ########################
@@ -38,6 +33,7 @@
 !!    -------------
 !!      Original      29/05/2017 add ECRAD parameters as namelist
 !!      Q. Libois
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -213,7 +209,7 @@ LOGICAL, POINTER :: LAPPROXSWUPDATE=>NULL()
 LOGICAL, POINTER :: LAPPROXLWUPDATE=>NULL()
 CHARACTER (LEN=255), POINTER :: CDATADIR=>NULL()
 #ifdef MNH_ECRAD
-type(config_type), pointer :: rad_config
+type(config_type), pointer :: rad_config => NULL()
 #endif
 CONTAINS
 
diff --git a/src/MNH/modd_parameters.f90 b/src/MNH/modd_parameters.f90
index a128c34b3029ed4f2b5074602046dacf51770c80..8b0c0a4fcbed60e0f60b94df6c8e11102ad4b77b 100644
--- a/src/MNH/modd_parameters.f90
+++ b/src/MNH/modd_parameters.f90
@@ -40,6 +40,7 @@
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!      B.VIE 2016 LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      Q. Rodier : 29/03/2019 : increase maximum number of outputs to 999
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -74,7 +75,7 @@ INTEGER, PARAMETER :: NNEGUNDEF = -999  ! default value for undefined or unused
 !                                       ! field (negative value guaranteed)
 INTEGER, PARAMETER :: JPDUMMY  = 20   ! Size of dummy array
 !
-INTEGER, PARAMETER :: JPOUTMAX = 192    ! Maximum allowed number of OUTput files
+INTEGER, PARAMETER :: JPOUTMAX = 999    ! Maximum allowed number of OUTput files
 INTEGER, PARAMETER :: JPOUTVARMAX = 192 ! Maximum allowed number of variables in an output file
 !
 INTEGER, PARAMETER :: NMNHNAMELGTMAX = 32 ! Maximum length of a MNH variable name
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_radiationsn.f90 b/src/MNH/modd_radiationsn.f90
index 455a2bc04fccdd17251079516537718561c1c621..ec51e9e32cf0b37c8915903f16f156d690234f55 100644
--- a/src/MNH/modd_radiationsn.f90
+++ b/src/MNH/modd_radiationsn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !      ########################
@@ -37,6 +37,7 @@
 !!                    03/03/03 (V. Masson) surface radiative schemes and
 !!                                         multiple wavelengths for surface SW
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 08/02/2019: add missing NULL association for pointers
 !!
 !-------------------------------------------------------------------------------
 !
@@ -108,18 +109,18 @@ TYPE RADIATIONS_t
 !  REAL, DIMENSION(:,:,:),       POINTER :: XSCA_ALB=>NULL()   ! scattered albedo for each spectral band
 !  REAL, DIMENSION(:,:,:),       POINTER :: XEMIS=>NULL()      ! emissivity
 !  REAL, DIMENSION(:,:),         POINTER :: XTSRAD=>NULL()      ! surface temperature
-  REAL, DIMENSION(:,:),         POINTER :: XSEA=>NULL()       ! sea fraction
+  REAL, DIMENSION(:,:),         POINTER :: XSEA=>NULL()        ! sea fraction
 !
 !  REAL, DIMENSION(:,:),         POINTER :: XZENITH=>NULL()    ! zenithal angle  (radian from the vertical)
 !  REAL, DIMENSION(:,:),         POINTER :: XAZIM=>NULL()      ! azimuthal angle (radian from N, clockwise)
-  REAL, DIMENSION(:,:),         POINTER :: XALBUV=>NULL()     ! UV albedo
-  REAL, DIMENSION(:,:,:),       POINTER :: XSWU    !SW_UP
-  REAL, DIMENSION(:,:,:),       POINTER :: XSWD    !SW_DOWN 
-  REAL, DIMENSION(:,:,:),       POINTER :: XLWU    !LW_UP 
-  REAL, DIMENSION(:,:,:),       POINTER :: XLWD    !LW_DOWN 
-  REAL, DIMENSION(:,:,:),       POINTER :: XDTHRADSW    !DTHRAD SW
-  REAL, DIMENSION(:,:,:),       POINTER :: XDTHRADLW    !DTHRAD LW
-  REAL, DIMENSION(:,:,:),       POINTER :: XRADEFF    !effective radius
+  REAL, DIMENSION(:,:),         POINTER :: XALBUV=>NULL()      ! UV albedo
+  REAL, DIMENSION(:,:,:),       POINTER :: XSWU => NULL()      ! SW_UP
+  REAL, DIMENSION(:,:,:),       POINTER :: XSWD => NULL()      ! SW_DOWN
+  REAL, DIMENSION(:,:,:),       POINTER :: XLWU => NULL()      ! LW_UP
+  REAL, DIMENSION(:,:,:),       POINTER :: XLWD => NULL()      ! LW_DOWN
+  REAL, DIMENSION(:,:,:),       POINTER :: XDTHRADSW => NULL() ! DTHRAD SW
+  REAL, DIMENSION(:,:,:),       POINTER :: XDTHRADLW => NULL() ! DTHRAD LW
+  REAL, DIMENSION(:,:,:),       POINTER :: XRADEFF   => NULL() ! effective radius
 !
 END TYPE RADIATIONS_t
 
diff --git a/src/MNH/modd_salt.f90 b/src/MNH/modd_salt.f90
index 01f908fe1e56873f0a8c7db97be309d50a94aa63..769ca39f17c464c2cf8503115eb4542dd04b9b07 100644
--- a/src/MNH/modd_salt.f90
+++ b/src/MNH/modd_salt.f90
@@ -35,6 +35,7 @@
 !!     -------------
 !! 
 !!     2014 P.Tulet modif XINIRADIUS_SLT and XN0MIN_SLT
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 !!--------------------------------------------------------------------
@@ -42,51 +43,64 @@ USE MODD_PARAMETERS, ONLY: JPMODELMAX
 !!     ------------
 IMPLICIT NONE
 !
-
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
+LOGICAL      :: LSLTMACC  = .FALSE.   ! switch to active pronostic sea salts  from MACC
 LOGICAL      :: LSALT     = .FALSE.   ! switch to active pronostic sea salts
+LOGICAL      :: LONLY     = .FALSE.
+LOGICAL      :: LREAD_ONLY_HS_MACC     = .FALSE.
 LOGICAL      :: LSLTINIT  = .FALSE.   ! switch to initialize pronostic sea salts
 LOGICAL      :: LSLTPRES  = .FALSE.   ! switch to know if pronostic salts exist            
 LOGICAL,DIMENSION(JPMODELMAX)  :: LDEPOS_SLT = .FALSE.    ! switch to SLT wet depositon
-INTEGER      :: NMODE_SLT= 3  ! number of sea salt modes (max 3; default = 3)
+
+!INTEGER      :: NMODE_SLT= 3  ! number of sea salt modes (max 3; default = 3)
+INTEGER :: NMODE_SLT= 5  ! number of sea salt modes (max 5; default = 3)
 !
 CHARACTER(LEN=9),DIMENSION(:),ALLOCATABLE :: CDESLTNAMES
-CHARACTER(LEN=9),DIMENSION(6), PARAMETER  :: YPDESLT_INI = &
-     (/'DESLTM31C','DESLTM32C','DESLTM33C' &
-      ,'DESLTM31R','DESLTM32R','DESLTM33R' /)
-CHARACTER(LEN=6),DIMENSION(:),ALLOCATABLE :: CSALTNAMES
-CHARACTER(LEN=6),DIMENSION(9), PARAMETER  :: YPSALT_INI = &
-     (/'SLTM01','SLTM31','SLTM61' &
-      ,'SLTM02','SLTM32','SLTM62' &
-      ,'SLTM03','SLTM33','SLTM63' /)
-! Set the order of the loops sorted by importance
-!This means that if a user choses 1 mode it will have characteristics of mode 2
-!2 modes will be mode 2 & 3, whereas 3 modes will modes 1, 2 and 3
-INTEGER, DIMENSION(3),PARAMETER  :: JPSALTORDER = (/3, 2, 1/)
-! 
-REAL, ALLOCATABLE :: XSLTMSS(:,:,:)   ! [kg/m3] total mass concentration of sea salt
+CHARACTER(LEN=6),DIMENSION(:), ALLOCATABLE :: CSALTNAMES
+CHARACTER(LEN=9),DIMENSION(10), PARAMETER  :: YPDESLT_INI = &
+    (/'DESLTM31C','DESLTM32C','DESLTM33C','DESLTM34C', 'DESLTM35C', &
+      'DESLTM31R','DESLTM32R','DESLTM33R', 'DESLTM34R','DESLTM35R' /)
+
+CHARACTER(LEN=6),DIMENSION(15), PARAMETER  :: YPSALT_INI = &
+                  (/'SLTM01','SLTM31','SLTM61',&
+                    'SLTM02','SLTM32','SLTM62',&
+                    'SLTM03','SLTM33','SLTM63',&
+                    'SLTM04','SLTM34','SLTM64',&
+                    'SLTM05','SLTM35','SLTM65' /)
+
+INTEGER, DIMENSION(5),PARAMETER  :: JPSALTORDER = (/1, 2, 3, 4, 5/)
+
+!Test Thomas (definir rayons et sigma ici si on veut desactiver initialisation MACC)
+
+!REAL, DIMENSION(5) :: XINIRADIUS_SLT,XINISIG_SLT,XN0MIN_SLT
+
+!Initial dry number median radius (um) from Ova et al., 2014
+REAL,DIMENSION(5)    :: XINIRADIUS_SLT=  (/0.009, 0.021, 0.045, 0.115, 0.415/)
+!Initial, standard deviation from  Ova et al., 2014
+REAL,DIMENSION(5)      :: XINISIG_SLT =  (/ 1.37, 1.5, 1.42, 1.53, 1.85 /)
+!Minimum allowed number concentration for any mode (#/m3)
+REAL,DIMENSION(5)  :: XN0MIN_SLT  = (/1. , 1., 1., 1., 1. /)
+
+!Test Thomas
+
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: XSLTMSS   ! [kg/m3] total mass concentration of sea salt
 !
 ! aerosol lognormal parameterization
-CHARACTER(LEN=4)  :: CRGUNITS   = 'MASS'  ! type of log-normal geometric mean radius
+CHARACTER(LEN=4)  :: CRGUNITS   = 'NUMB'  ! type of log-normal geometric mean radius
 !                                         !given in namelist (mass on number)
 !
 LOGICAL      :: LRGFIX_SLT   = .FALSE.    ! switch to fix RG (sedimentation)
 LOGICAL      :: LVARSIG_SLT  = .FALSE.    ! switch to active pronostic dispersion for all modes
 LOGICAL      :: LSEDIMSALT   = .FALSE.    ! switch to active aerosol sedimentation
 REAL         :: XSIGMIN_SLT   = 1.20      ! minimum dispersion value for sea salt mode
+!REAL         :: XSIGMIN_SLT   = 0.      ! minimum dispersion value for sea salt mode
 REAL         :: XSIGMAX_SLT   = 3.60      ! maximum dispersion value for sea salt mode
 REAL         :: XCOEFRADMAX_SLT  = 10.    ! maximum increasement for Rg mode sea salt
-REAL         :: XCOEFRADMIN_SLT  = 0.1    ! maximum decreasement for Rg mode sea salt
-!
+REAL         :: XCOEFRADMIN_SLT  = 0.1    ! minimum decreasement for Rg mode sea salt
+!REAL         :: XCOEFRADMIN_SLT  = 0.    ! minimum decreasement for Rg mode sea salt
 
-!Initial dry number median radius (um) from Vignati et al., 2001
-!REAL, DIMENSION(3)          :: XINIRADIUS_SLT= (/0.2, 2., 12./)
-!Initial, standard deviation from Vignati et al., 2001
-!REAL, DIMENSION(3)          :: XINISIG_SLT =  (/1.9, 2., 3./)
-!Initial dry number median radius (um) from Schultz et al., 2004
-REAL, DIMENSION(3)          :: XINIRADIUS_SLT= 0.5*(/0.28, 2.25, 15.32/)
-!Initial, standard deviation from  Schultz et al., 2004
-REAL, DIMENSION(3)          :: XINISIG_SLT =  (/1.9, 2., 2./)
-!Minimum allowed number concentration for any mode (#/m3)
-REAL, DIMENSION(3)          :: XN0MIN_SLT  = (/1.e1 , 1. , 1.e-4 /)
+
+!
+! -- PIERRE / MARINE SSA DUST - MODIF --
 !
 END MODULE MODD_SALT
diff --git a/src/MNH/modd_spawn.f90 b/src/MNH/modd_spawn.f90
index 41f83c8a1d5ede0151a11e0ca4c1329dd1a40150..8d432e588f5fbce395ee2385fb50883f8eb5f41e 100644
--- a/src/MNH/modd_spawn.f90
+++ b/src/MNH/modd_spawn.f90
@@ -33,6 +33,7 @@
 !!      Original    12/07/99
 !!      Modification 08/04/04   (G.Jaubert) Spawning 1 option
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -79,12 +80,14 @@ REAL,DIMENSION(:,:,:,:),SAVE,POINTER :: XRT1  => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XUT1    => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XVT1    => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XWT1    => NULL()
+REAL,DIMENSION(:,:),  SAVE,POINTER :: XZWS1   => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XSRCT1  => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XSIGS1  => NULL()
 TYPE(DATE_TIME),      SAVE,POINTER :: TDTCUR1 => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSUM1  => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSVM1  => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSWM1  => NULL()
+REAL,DIMENSION(:,:)  ,SAVE,POINTER :: XLSZWSM1=> NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSTHM1 => NULL()
 REAL,DIMENSION(:,:,:),SAVE,POINTER :: XLSRVM1 => NULL()
 !
diff --git a/src/MNH/modd_sub_modeln.f90 b/src/MNH/modd_sub_modeln.f90
index 50cd6ec7b1c58144a357c9c1d343ef56eff62093..b6e364b2222e189bce38a1b8f00314c1b815b2bc 100644
--- a/src/MNH/modd_sub_modeln.f90
+++ b/src/MNH/modd_sub_modeln.f90
@@ -1,48 +1,51 @@
-!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.
 !-----------------------------------------------------------------
 ! 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
-  TYPE(LIST_ll), POINTER :: TZFIELDS_ll,TZLSFIELD_ll,TZFIELDM_ll
+  TYPE(LIST_ll), POINTER :: TZFIELDS_ll => NULL(), TZLSFIELD_ll => NULL(), TZFIELDM_ll => NULL()
                        ! list of fields to update halo
-  TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll, TZLSHALO2_ll
+  TYPE(HALO2LIST_ll), POINTER :: TZHALO2M_ll => NULL(), TZLSHALO2_ll => NULL()
                        ! list of fields for the halo updates (2nd layer)
   ! halo lists and updates for 4th order schemes
 ! list of fields to update halo at time t
-  TYPE(LIST_ll), POINTER :: TZFIELDT_ll  ! for meteorological scalars
-  TYPE(LIST_ll), POINTER :: TZFIELDMT_ll ! for momentum
-  TYPE(LIST_ll), POINTER :: TZFIELDSC_ll  ! for tracer scalars
+  TYPE(LIST_ll), POINTER :: TZFIELDT_ll  => NULL() ! for meteorological scalars
+  TYPE(LIST_ll), POINTER :: TZFIELDMT_ll => NULL() ! for momentum
+  TYPE(LIST_ll), POINTER :: TZFIELDSC_ll => NULL() ! for tracer scalars
 ! list of fields for the halo updates (2nd layer) at time t
-  TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll
-  TYPE(HALO2LIST_ll), POINTER :: TZHALO2MT_ll
-  TYPE(HALO2LIST_ll), POINTER :: TZHALO2SC_ll
+  TYPE(HALO2LIST_ll), POINTER :: TZHALO2T_ll  => NULL()
+  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
@@ -59,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 bf8bcbd11bd9acbed926181f9113595557bb62bc..3c44998639d52ba7647196195ecb8080f404c027 100644
--- a/src/MNH/modd_timez.f90
+++ b/src/MNH/modd_timez.f90
@@ -1,57 +1,63 @@
-!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.
+!-----------------------------------------------------------------
+! 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
 
-TYPE(SUB_TIMEZ_t), POINTER  :: TIMEZ
+TYPE(SUB_TIMEZ_t), POINTER  :: TIMEZ => NULL()
 
 CONTAINS
 
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_extrapol.f90 b/src/MNH/mode_extrapol.f90
index ef3850afee0eefa2603320a427d564e073c9ee3e..fcf03634fda4615c98d6a6e9f84ac8091700683d 100644
--- a/src/MNH/mode_extrapol.f90
+++ b/src/MNH/mode_extrapol.f90
@@ -1,15 +1,29 @@
-!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.
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!-----------------------------------------------------------------
 MODULE MODE_EXTRAPOL
 
+  use mode_msg
+
+  implicit none
+
+  private
+
+  public :: EXTRAPOL, EXTRAPOL_ON_PSEUDO_HALO
+
+  character(len=10) :: ydim1, ydim2 !Strings to store dimensions to print error message
+
   INTERFACE EXTRAPOL
 
      MODULE PROCEDURE EXTRAPOL3D,EXTRAPOL3DN,EXTRAPOL2D,EXTRAPOL2DN
 
   END INTERFACE
-  
+
   INTERFACE EXTRAPOL_ON_PSEUDO_HALO
 
      MODULE PROCEDURE EXTRAPOL_ON_PSEUDO_HALO3D,EXTRAPOL_ON_PSEUDO_HALO2D
@@ -178,6 +192,7 @@ CONTAINS
     TYPE(LIST_ll), POINTER :: TZZSFIELD_ll   ! list of fields to exchange
     LOGICAL :: GCYCLIC_EXTRAPOL
     !
+    !
     !-------------------------------------------------------------------------------
     !
     !*       1.     EXTRAPOLATE LATERAL BOUNDARY CONDITIONS :
@@ -222,10 +237,8 @@ CONTAINS
           PTAB(IDIMX_C,:,:) = 2. * PTAB(IDIMX_C-1,:,:) - PTAB(IDIMX_C-2,:,:)
         ENDIF
       ELSEIF ( IDIMX_C == IIE - IIB + 2 + 2*JPHEXT ) THEN !the child domain has the size of the father domain minus one
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO3D, case not supported : &
-              & the child grid has to be one point larger or one point smaller in X dim"
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO3D'
+        call Print_msg(NVERB_FATAL,'GEN','EXTRAPOL_ON_PSEUDO_HALO3D','case not supported:'// &
+                       'the child grid has to be one point larger or one point smaller in X dim')
 !        IF ( IIB>1 .AND. LWEST_ll() .AND. CLBCX(1)/='CYCL' )  THEN !du cote ouest, on a un point dans le 'pseudo halo' a extrapoler
 !          PTAB(1,:,:) = 2. * PTAB(2,:,:) - PTAB(3,:,:)
 !        ELSEIF ( IIB>1 .AND. LWEST_ll() .AND. CLBCX(1)=='CYCL' ) THEN
@@ -237,10 +250,10 @@ CONTAINS
 !          PTAB(IDIMX_C,:,:) = PTAB(2,:,:)
 !        ENDIF
       ELSE !Error, this should not happen
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO3D, IDIMX_C = ",  &
-                IDIMX_C, ", IIE - IIB + 1 + 2*JPHEXT = ", IIE - IIB + 1 + 2*JPHEXT
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO3D'
+        write( ydim1, '( I10 )' ) IDIMX_C
+        write( ydim2, '( I10 )' ) IIE - IIB + 1 + 2*JPHEXT
+        call Print_msg( NVERB_FATAL, 'GEN','EXTRAPOL_ON_PSEUDO_HALO3D', 'wrong dimensions: IDIMX_C='//trim(ydim1)// &
+                        ', IIE - IIB + 1 + 2*JPHEXT='//trim(ydim2) )
       ENDIF
     ENDIF
     IF ( IDIMY_C > IJE - IJB + 1 + 2*JPHEXT ) THEN
@@ -252,10 +265,8 @@ CONTAINS
           PTAB(:,IDIMY_C,:) = 2. * PTAB(:,IDIMY_C-1,:) - PTAB(:,IDIMY_C-2,:)
         ENDIF
       ELSEIF ( IDIMY_C == IJE - IJB + 2 + 2*JPHEXT ) THEN !the child domain has the size of the father domain minus one
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO3D, case not supported :  &
-      & the child grid has to be one point larger or one point smaller in Y dim"
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO3D'
+        call Print_msg(NVERB_FATAL,'GEN','EXTRAPOL_ON_PSEUDO_HALO3D','case not supported:'// &
+                       'the child grid has to be one point larger or one point smaller in Y dim')
 !        IF ( IJB>1 .AND. LNORTH_ll() .AND. CLBCY(1)/='CYCL' )  THEN !du cote ouest, on a un point dans le 'pseudo halo' a extrapoler
 !          PTAB(:,1,:) = 2. * PTAB(:,2,:) - PTAB(:,3,:)
 !        ELSEIF ( IJB>1 .AND. LNORTH_ll() .AND. CLBCY(1)=='CYCL' ) THEN
@@ -267,10 +278,10 @@ CONTAINS
 !          PTAB(:,IDIMY_C,:) = PTAB(:,2,:)
 !        ENDIF
       ELSE !Error, this should not happen
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO3D, IDIMY_C = ",  &
-                IDIMY_C, ", IIE - IIB + 1 + 2*JPHEXT = ", IIE - IIB + 1 + 2*JPHEXT
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO3D'
+        write( ydim1, '( I10 )' ) IDIMX_C
+        write( ydim2, '( I10 )' ) IJE - IJB + 1 + 2*JPHEXT
+        call Print_msg( NVERB_FATAL, 'GEN','EXTRAPOL_ON_PSEUDO_HALO3D', 'wrong dimensions: IDIMY_C='//trim(ydim1)// &
+                        ', IJE - IJB + 1 + 2*JPHEXT='//trim(ydim2) )
       ENDIF
     ENDIF
 !
@@ -361,10 +372,8 @@ CONTAINS
           PTAB(IDIMX_C,:) = 2. * PTAB(IDIMX_C-1,:) - PTAB(IDIMX_C-2,:)
         ENDIF
       ELSEIF ( IDIMX_C == IIE - IIB + 2 + 2*JPHEXT ) THEN !the child domain has the size of the father domain minus one
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO2D, case not supported :  &
-              & the child grid has to be one point larger or one point smaller in X dim"
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO2D'
+        call Print_msg(NVERB_FATAL,'GEN','EXTRAPOL_ON_PSEUDO_HALO2D','case not supported:'// &
+                       'the child grid has to be one point larger or one point smaller in X dim')
 !        IF ( IIB>1 .AND. LWEST_ll() .AND. CLBCX(1)/='CYCL' )  THEN !du cote ouest, on a un point dans le 'pseudo halo' a extrapoler
 !          PTAB(1,:) = 2. * PTAB(2,:) - PTAB(3,:)
 !        ELSEIF ( IIB>1 .AND. LWEST_ll() .AND. CLBCX(1)=='CYCL' ) THEN
@@ -376,10 +385,10 @@ CONTAINS
 !          PTAB(IDIMX_C,:) = PTAB(2,:)
 !        ENDIF
       ELSE !Error, this should not happen
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO2D, IDIMX_C = ", IDIMX_C, &
-                ", IIE - IIB + 1 + 2*JPHEXT = ", IIE - IIB + 1 + 2*JPHEXT
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO2D'
+        write( ydim1, '( I10 )' ) IDIMX_C
+        write( ydim2, '( I10 )' ) IIE - IIB + 1 + 2*JPHEXT
+        call Print_msg( NVERB_FATAL, 'GEN','EXTRAPOL_ON_PSEUDO_HALO2D', 'wrong dimensions: IDIMX_C='//trim(ydim1)// &
+                        ', IIE - IIB + 1 + 2*JPHEXT='//trim(ydim2) )
       ENDIF
     ENDIF
     IF ( IDIMY_C > IJE - IJB + 1 + 2*JPHEXT ) THEN
@@ -395,10 +404,8 @@ CONTAINS
 !          PTAB(:,IDIMY_C) = PTAB(:,2)
         ENDIF
       ELSEIF ( IDIMY_C == IJE - IJB + 2 + 2*JPHEXT ) THEN !the child domain has the size of the father domain minus one
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO2D, case not supported : &
-              & the child grid has to be one point larger or one point smaller in Y dim"
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO2D'
+        call Print_msg(NVERB_FATAL,'GEN','EXTRAPOL_ON_PSEUDO_HALO3D','case not supported:'// &
+                       'the child grid has to be one point larger or one point smaller in Y dim')
 !        IF ( IJB>1 .AND. LNORTH_ll() .AND. CLBCY(1)/='CYCL' )  THEN !du cote ouest, on a un point dans le 'pseudo halo' a extrapoler
 !          PTAB(:,1) = 2. * PTAB(:,2) - PTAB(:,3)
 !        ELSEIF ( IJB>1 .AND. LNORTH_ll() .AND. CLBCY(1)=='CYCL' ) THEN
@@ -410,10 +417,10 @@ CONTAINS
 !          PTAB(:,IDIMY_C) = PTAB(:,2)
 !        ENDIF
       ELSE !Error, this should not happen
-        WRITE(*,*) "ERROR in EXTRAPOL_ON_PSEUDO_HALO2D, IDIMY_C = ", IDIMY_C, &
-                ", IIE - IIB + 1 + 2*JPHEXT = ", IIE - IIB + 1 + 2*JPHEXT
-        CALL ABORT
-        STOP 'ERROR in EXTRAPOL_ON_PSEUDO_HALO2D'
+        write( ydim1, '( I10 )' ) IDIMX_C
+        write( ydim2, '( I10 )' ) IJE - IJB + 1 + 2*JPHEXT
+        call Print_msg( NVERB_FATAL, 'GEN','EXTRAPOL_ON_PSEUDO_HALO3D', 'wrong dimensions: IDIMY_C='//trim(ydim1)// &
+                        ', IJE - IJB + 1 + 2*JPHEXT='//trim(ydim2) )
       ENDIF
     ENDIF
 !
diff --git a/src/MNH/mode_fgau.f90 b/src/MNH/mode_fgau.f90
index 46614beca5fae8edf8f813ac1f0fb20b278d0d86..aa46acabfd2b67c55aa266ce51030996885b6466 100644
--- a/src/MNH/mode_fgau.f90
+++ b/src/MNH/mode_fgau.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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$
-!-----------------------------------------------------------------
 !     ######spl
       MODULE MODE_FGAU
 !     ####################
@@ -36,7 +32,8 @@
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original   26/03/2004    
+!!      Original   26/03/2004
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !--------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -153,6 +150,8 @@ CONTAINS
       SUBROUTINE GAUHER(N,X2,W)
 !     #########################
 !   returns POSITIVE nodes and weights of Gauss-Hermite quadrature.
+    use mode_msg
+
     IMPLICIT NONE
     ! N : ordre du polynôme de Hermite
     ! X2 : abscisses POSITIVES de la quadrature
@@ -163,19 +162,17 @@ CONTAINS
     REAL :: PX,DPX,X,Y
     INTEGER,DIMENSION(N+1) :: P0,P1,P2
     REAL,DIMENSION((N+1)/2) :: X1
-    
+
     INTEGER :: I,J,K
-    
-    IF(N>=15) THEN
-       PRINT*,'SUBROUTINE GAUHER FAILS TO CONVERGE FOR N>=15. ANYWAY, THIS NUMBER IS TOO HIGH.'
-       PRINT*,'PLEASE TAKE A SMALLER NUMBER OF POINTS OR MODIFY THIS SUBROUTINE.'
-       STOP
-    END IF
+
+    if ( n >=15 ) call Print_msg( NVERB_FATAL, 'GEN', 'GAUHER', 'subroutine gauher fails to converge for n>=15.'// &
+                                  'Anyway, this number is too high.'// &
+                                  'Please take a smaller number of points or modify this subroutine.' )
 
     P0(:)=0
     P1(:)=0
     P2(:)=0
-    
+
     P0(1)=1 ! N=0 H0(x)=1
     P1(1)=0 ! N=1 H1(x)=2x
     P1(2)=2 
diff --git a/src/MNH/mode_gridproj.f90 b/src/MNH/mode_gridproj.f90
index f6de1038da89c5167b867646e6b6c7dd91ed0807..8fec230fa1da45eebb5d101a3957f371f60f2ec3 100644
--- a/src/MNH/mode_gridproj.f90
+++ b/src/MNH/mode_gridproj.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -37,19 +37,29 @@
 !!          Original  24/05/94
 !!                    05/02/15   M.Moge (LA-CNRS)
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !!    
 !------------------------------------------------------------------------------
 !
 !*                0.  DECLARATIONS
-USE MODE_MPPDB
-USE MODD_CONF
-!------------
+!
 !------------------------------------------------------------------------------
+USE MODD_CONF
+!
+USE MODE_MPPDB
+use mode_msg
+!
+implicit none
+!
+private
+!
+public :: SM_GRIDPROJ, SM_LATLON, SM_XYHAT
 !
 INTERFACE SM_LATLON
    MODULE PROCEDURE SM_LATLON_A,SM_LATLON_S
 END INTERFACE
+
 INTERFACE SM_XYHAT
    MODULE PROCEDURE SM_XYHAT_A,SM_XYHAT_S
 END INTERFACE
@@ -174,14 +184,14 @@ CONTAINS
 !              ------------
 !
 !
-USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll, LIST1D_ll
+USE MODD_CONF
+USE MODD_CST
+USE MODD_GRID
 USE MODD_LUNIT_n,     ONLY : TLUOUT
+USE MODD_PARAMETERS
 !
-USE MODD_CONF          
-USE MODD_CST          
-USE MODD_PARAMETERS 
-USE MODD_GRID      
+USE MODE_ll
 !
 USE MODI_VERT_COORD
 !
@@ -390,11 +400,7 @@ ZCLAT0 = COS(ZRDSDG*ZLAT0)
 ZSLAT0 = SIN(ZRDSDG*ZLAT0)
 !
 IF ((ABS(ZRPK-1.)>1.E-10).AND. (ANY(ABS(COS(ZRDSDG*ZLAT))<1.E-10))) THEN
-  WRITE(ILUOUT,*) 'Error in SM_GRIDPROJ : '
-  WRITE(ILUOUT,*) 'pole in the domain, but not with stereopolar projection'
-!callabortstop
-CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'SM_GRIDPROJ', 'pole in the domain, but not with stereopolar projection' )
 ENDIF
 !
 IF (ABS(ZCLAT0)<1.E-10 .AND. (ABS(ZRPK-1.)<1.E-10)) THEN
@@ -1429,8 +1435,8 @@ END SUBROUTINE SM_XYHAT_A
 !!       Module MODD_CST      : contains Physical constants
 !!          XPI        : Pi;    
 !!
-!!       Module MODD_LUNIT    : contains logical unit names
-!!          CLUOUT0    : Output listing file name
+!!       Module MODD_LUNIT_n    : contains logical unit names
+!!          TLUOUT    : Output listing file name
 !!
 !!     REFERENCE
 !!     ---------
@@ -1542,9 +1548,7 @@ WRITE(ILUOUT,*) ' Function fails to converge after ',ITER,' iterations.'
 WRITE(ILUOUT,*) ' LATREF2=',LATREF2,' Residual=',ZGLAT-1.,           &
                 ' ZEPSI=',ZEPSI,' Last increment=',ZDLAT/ZRDSDG
 WRITE(ILUOUT,*) ' JOB ABORTS...'
-!callabortstop
-CALL ABORT
-STOP
+call Print_msg( NVERB_FATAL, 'GEN', 'LATREF2', 'failed to converge' )
 !-------------------------------------------------------------------------------
 END FUNCTION LATREF2
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index 462859ff092d5e12400b10a6f03c6a771ed81f51..3e07a46f665fb20d945376b4a07c3b6aeee3a35c 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications
@@ -726,7 +726,7 @@ END SUBROUTINE LES_TIME_AVG
 SUBROUTINE LES_DIACHRO(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -854,7 +854,7 @@ END SUBROUTINE LES_DIACHRO
 SUBROUTINE LES_DIACHRO_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !###########################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -980,7 +980,7 @@ END SUBROUTINE LES_DIACHRO_SV
 SUBROUTINE LES_DIACHRO_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#####################################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1111,7 +1111,7 @@ END SUBROUTINE LES_DIACHRO_MASKS
 SUBROUTINE LES_DIACHRO_SV_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1247,7 +1247,7 @@ END SUBROUTINE LES_DIACHRO_SV_MASKS
 SUBROUTINE LES_DIACHRO_SURF(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#############################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1361,7 +1361,7 @@ END SUBROUTINE LES_DIACHRO_SURF
 SUBROUTINE LES_DIACHRO_SURF_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !################################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1479,7 +1479,7 @@ SUBROUTINE LES_DIACHRO_2PT(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELDX,PFIELDY,HAVG)
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODD_CONF
@@ -1638,7 +1638,7 @@ SUBROUTINE LES_DIACHRO_SPEC(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PSPECTRAX,PSPECTRAY)
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODD_CONF
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_pos.f90 b/src/MNH/mode_pos.f90
index 27f7cfb75c17ca69ab93a44f6fa083f71a0fde9f..09a2ca12ee8467375b1784743768c89c72e14e98 100644
--- a/src/MNH/mode_pos.f90
+++ b/src/MNH/mode_pos.f90
@@ -1,23 +1,13 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1993-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 mode 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !!    ###############
       MODULE MODE_POS
 !!    ###############
 !!
-INTERFACE POS
-!!
-MODULE PROCEDURE POSNAM
-MODULE PROCEDURE POSKEY
-!!
-END INTERFACE
+implicit none
 !!
 !!
 CONTAINS
@@ -54,6 +44,7 @@ CONTAINS
 !!    --------------
 !!       Original : 22/06/93
 !!       I. Mallet  15/10/01     adaptation to MesoNH (F90 norm)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -156,6 +147,8 @@ END SUBROUTINE POSNAM
 !!       Original : 15/10/01
 !------------------------------------------------------------------------------
 !
+use mode_msg
+!
 !*       0.    DECLARATIONS
 !              ------------
 !
@@ -169,7 +162,7 @@ CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: HKEYWD2
 !*       0.2   Declarations of local variables
 !
 CHARACTER(LEN=120) :: YLINE
-INTEGER            :: ILEN1,IRET
+INTEGER            :: ILEN1, ILEN2, IRET
 !
 !
 !*       1.    POSITION FILE
@@ -197,10 +190,7 @@ RETURN
 ! end of file: keyword not found
 100  CONTINUE
 IF (.NOT.PRESENT(HKEYWD2)) THEN
-  WRITE(KLUOUT,FMT=*)  '-- keyword ',HKEYWD1,' not found: program stop'
-!callabortstop
-CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'POSKEY', 'keyword '//trim(HKEYWD1)//' not found' )
 ELSE
 !
 !*       2.    SECOND KEYWORD: POSITION FILE
@@ -222,10 +212,7 @@ ELSE
 END IF
 ! end of file: scd keyword not found
 101  CONTINUE
-WRITE(KLUOUT,FMT=*)  '-- keyword ',HKEYWD2,' not found: program stop'
-!callabortstop
-CALL ABORT
-STOP
+call Print_msg( NVERB_FATAL, 'GEN', 'POSKEY', 'keyword '//trim(HKEYWD2)//' not found' )
 !------------------------------------------------------------------
 END SUBROUTINE POSKEY
 !
diff --git a/src/MNH/mode_salt_psd.f90 b/src/MNH/mode_salt_psd.f90
index e361c1dfac7aa5e7831247959f959777e4d6eec4..dc5a8611ef01cbc1505633c4b5a97c2a9848e699 100644
--- a/src/MNH/mode_salt_psd.f90
+++ b/src/MNH/mode_salt_psd.f90
@@ -23,9 +23,14 @@
 !!
 !!    MODIFICATIONS
 !!    -------------
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 !-------------------------------------------------------------------------------
 !
+! ++ JORIS DEBUG ++
+USE MODD_CONF, ONLY : NVERB
+! -- JORIS DEBUG --
+!
 USE MODD_CSTS_SALT         !Constants which are important for sea salt calculations
 USE MODD_SALT              !Dust module which contains even more constants
 USE MODD_CST, ONLY :    &
@@ -137,6 +142,11 @@ ALLOCATE (ZINIRADIUS(NMODE_SLT))
     
 ZSV(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY)
 
+! ++ JORIS DBG ++
+ZRG(:,:,:)= XMNH_TINY
+ZM(:,:,:,:)= XMNH_TINY
+! -- JORIS DBG --
+
 DO JN=1,NMODE_SLT
   IMODEIDX = JPSALTORDER(JN)
   !Calculations here are for one mode only
@@ -235,6 +245,10 @@ DO JN=1,NMODE_SLT
          * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
          / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
     ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN)))
+!Modif salt/dust 5.1. beg
+       PSVT(:,:,:,JN) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                              (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+!Modif salt/dust 5.1. end
 
     ZM(:,:,:,NM0(JN))=  ZM(:,:,:,NM3(JN))/&
        ((ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(XINISIG_SLT(JPSALTORDER(JN)))**2))
@@ -280,6 +294,21 @@ DO JN=1,NMODE_SLT
   END IF
   !   
   !Get number median radius (eqn. 7 in Orilam manuscript)
+  ! ++ JORIS DBG ++
+  IF (NVERB ==15) THEN
+    WRITE(*,*) 'SHAPE(ZM) =', SHAPE(ZM)
+    WRITE(*,*) 'MINVAL(ZM), MAXVAL(ZM) =', MINVAL(ZM), MAXVAL(ZM)
+    WRITE(*,*) 'MINLOC(ZM), MAXLOC(ZM) =', MINLOC(ZM), MAXLOC(ZM)
+    WRITE(*,*) 'SHAPE(ZRG) =', SHAPE(ZRG)
+    WRITE(*,*) 'MINVAL(ZRG), MAXVAL(ZRG) =', MINVAL(ZRG), MAXVAL(ZRG)
+    WRITE(*,*) 'MINLOC(ZRG), MAXLOC(ZRG) =', MINLOC(ZRG), MAXLOC(ZRG)
+    WRITE(*,*) 'XSIXTH_SALT =', XSIXTH_SALT
+    WRITE(*,*) 'JN =', JN
+    WRITE(*,*) 'NM0 =', NM0
+    WRITE(*,*) 'NM3 =', NM3
+    WRITE(*,*) 'NM6 =', NM6
+  ENDIF
+  ! -- JORIS DBG --
   ZRG(:,:,:)=    &
           (      &
           ZM(:,:,:,NM3(JN))*ZM(:,:,:,NM3(JN))*ZM(:,:,:,NM3(JN))*ZM(:,:,:,NM3(JN))    &
@@ -414,7 +443,9 @@ END SUBROUTINE PPP2SALT
 !
 
     ! PSVT need to be positive
-    PSVT(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY)
+!Modif salt/dust 5.1. beg
+!    PSVT(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY)
+!Modif salt/dust 5.1. end
     
     DO JN=1,NMODE_SLT
     IMODEIDX = JPSALTORDER(JN)
@@ -629,8 +660,10 @@ ALLOCATE (ZSIGMA(SIZE(PSVT,1)))
 ALLOCATE (ZRG(SIZE(PSVT,1)))
 ALLOCATE (ZSV(SIZE(PSVT,1), SIZE(PSVT,2)))
 ALLOCATE (ZINIRADIUS(NMODE_SLT))
-    
+
+!Modif salt/dust 5.1. beg
 ZSV(:,:) = MAX(PSVT(:,:), XMNH_TINY)
+!Modif salt/dust 5.1. end
 
 DO JN=1,NMODE_SLT
   IMODEIDX = JPSALTORDER(JN)
diff --git a/src/MNH/mode_salt_psd_wet.f90 b/src/MNH/mode_salt_psd_wet.f90
new file mode 100644
index 0000000000000000000000000000000000000000..cb5af52f838a83cd4997f9fad234eb1919262d24
--- /dev/null
+++ b/src/MNH/mode_salt_psd_wet.f90
@@ -0,0 +1,926 @@
+!ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
+!ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!ORILAM_LIC for details.
+!-----------------------------------------------------------------
+!--------------- special set of characters for RCS information
+!-----------------------------------------------------------------
+! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/Attic/mode_salt_psd.f90,v $ $Revision: 1.1.2.1.2.1.2.1.2.1 $ $Date: 2013/07/12 13:55:08 $
+!-----------------------------------------------------------------
+!!   ########################
+     MODULE MODE_SALT_PSD_WET
+!!   ########################
+!!
+!!    PURPOSE
+!!    -------
+!! MODULE SALT PSD (Particle Size Distribution)
+!! Purpose: Contains subroutines to convert from transported variables (ppp)
+!! to understandable aerosol variables, e.g. #/m3, kg/m3, sigma, R_{n}
+!!
+!!    AUTHOR
+!!    ------
+!!      Alf Grini (CNRM/GMEI)
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      M. Claeys - (CNRM-GMEI) 2015
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!-------------------------------------------------------------------------------
+!
+USE MODD_CSTS_SALT         !Constants which are important for sea salt calculations
+USE MODD_SALT              !Dust module which contains even more constants
+USE MODD_CST, ONLY :    &
+       XPI              & !Definition of pi
+      ,XBOLTZ           & ! Boltzman constant 
+      ,XAVOGADRO        & ![molec/mol] avogadros number
+      ,XG               & ! Gravity constant
+      ,XP00             & ! Reference pressure
+      ,XMD              & ![kg/mol] molar weight of air
+      ,XRD              & ! Gaz constant for dry air
+      ,XCPD             & !  Cpd (dry air)
+      ,XRHOLW           & ! Densité de l'eau
+      ,XMV              & ! Molar weight of water
+      ,XALPI            &
+      ,XBETAI           &
+      ,XGAMI            &
+      ,XTT             
+USE MODD_CST, ONLY : XMNH_TINY
+USE MODE_THERMO             ! Pour calcul de la pression de vapeur saturante
+USE MODD_PARAM_n,    ONLY : CCLOUD
+
+
+!
+IMPLICIT NONE
+!
+CONTAINS
+!
+!!   ############################################################
+  SUBROUTINE PPP2SALT_WET(          &
+       PSVT                         & !I [ppp] input scalar variables (moment of distribution)
+       , PRHODREF                   & !I [kg/m3] density of air       
+       , PPABST                     & !I Pression
+       , PTHT                       & !I Potential temperature
+       , PRT                        & !I Large scale vapor mixing ratio
+       , PSIG3D                     & !O [-] standard deviation of aerosol distribution
+       , PRG3D                      & !O [um] number median wet radius of aerosol distribution
+       , PN3D                       & !O [#/m3] number concentration of aerosols
+       , PMASS3D                    & !O [kg/m3]wet mass concentration of aerosol
+       , PM3D                       & !O aerosols moments 0, 3 and 6
+       , PDENSITY_WET               & !O [g/m2] density of wet aerosol (water + salt)
+       )
+!!   ############################################################
+!
+!!
+!!    PURPOSE
+!!    -------
+!!    Translate the three moments M0, M3 and M6 given in ppp into
+!!    Values which can be understood more easily (R, sigma, N, M)
+!!    
+!!    Calcul the wet radius of the particles, using RH and Gerber (1985) relation
+!!    The mass of the aerosols is calculated using the new radius and the
+!density of water and salt
+!!
+!!    CALLING STRUCTURE NOTE: OPTIONAL VARIABLES
+!!    -------
+!!    CALL PPP2AEROS(PSVT, PRHODREF, PSIG3D=SIGVAR,  &
+!!       PRG3D=RVAR, PN3D=NVAR, PM3D=MASSVAR)
+!!
+!!    REFERENCE
+!!    ---------
+!!    none
+!!
+!!    AUTHOR
+!!    ------
+!!    Pierre TULET (LA)
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!    2005 Alf Grini (CNRM)
+!!    2006 Jean-Pierre Chaboureau (LA)
+!!    2015 Marine Claeys (CNRM)
+!!    EXTERNAL
+!!    --------
+!!    None
+!!
+    IMPLICIT NONE
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+!*      0.1    declarations of arguments
+!
+REAL, DIMENSION(:,:,:,:),           INTENT(INOUT) :: PSVT      !I [ppp] first moment
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRHODREF  !I [kg/m3] density of air
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PPABST    !I Pression
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PTHT      !I Potential temperature
+REAL, DIMENSION(:,:,:,:),           INTENT(IN)    :: PRT       !I Large scale vapor mixing ratio
+
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PSIG3D   !O [-] standard deviation
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PRG3D    !O [um] number median radius 
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PN3D     !O [#/m3] number concentration
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PMASS3D  !O [kg_{aer}/m3] wet mass concentration
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PM3D     !O aerosols moments 
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PDENSITY_WET  !O Density of wet aerosol (water + salt) 
+!
+!
+!*      0.2    declarations local variables
+!
+REAL                                  :: ZRHOI    ! [kg/m3] density of aerosol
+REAL                                  :: ZRHOLW   ! [kg/m3] density of water
+REAL                                  :: ZMI      ! [kg/mol] molar weight of aerosol
+REAL                                  :: ZMV      ! [kg/mol] molar weight of water
+REAL                                  :: ZRGMIN   ! [um] minimum radius accepted
+REAL                                  :: ZSIGMIN  ! minimum standard deviation accepted
+
+REAL, PARAMETER                       :: C1 = 0.7674
+REAL, PARAMETER                       :: C2 = 3.079
+REAL, PARAMETER                       :: C3 = 2.572E-11
+REAL, PARAMETER                       :: C4 = -1.424
+
+REAL,DIMENSION(:,:,:,:), ALLOCATABLE  :: ZM       ! [aerosol units] local array which goes to output later
+REAL,DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSV      ! [sea salts moment concentration]
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZMMIN    ! [aerosol units] minimum values for N, sigma, M
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM0      ! [idx] index for Mode 0 in passed variables
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM3      ! [idx] indexes for Mode 3 in passed variables
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM6      ! [idx] indexes for Mode 6 in passed variables
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZINIRADIUS      ! initial mean radius
+INTEGER                               :: JN,IMODEIDX,JJ  ! [idx] loop counters
+
+REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3), NMODE_SLT)  :: ZMASS3D, &
+                                                                       ZMASS3D_SLT         ![kg/m3] mass of one sea salt mode
+
+REAL,DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3))  :: ZTEMP, ZREHU, ZREHU_tmp
+REAL,DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3), NMODE_SLT)  :: ZDENSITY_WET      ! [g/m2] Aerosol wet density (salt + water) 
+REAL,DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3))  :: ZSIGMA            ! [-] standard deviation 
+REAL,DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3))  :: ZRG, ZRG_WET      ! [um] number median radius, and nuber median wet radius 
+!
+!-------------------------------------------------------------------------------
+!
+
+!+ Marine
+!  Calcul de RH
+! Pris dans write_lfi_for_diag pour le calcul de RH
+ZTEMP(:,:,:) = PTHT(:,:,:) * (PPABST(:,:,:) / XP00)**(XRD/XCPD)
+
+ZREHU_tmp(:,:,:) = SM_FOES(ZTEMP(:,:,:))  ! SM_FOES = to compute saturation vapor pressure
+ZREHU_tmp(:,:,:) = (XMV / XMD) * ZREHU_tmp(:,:,:) / (PPABST(:,:,:) - ZREHU_tmp(:,:,:))
+!XMD,XMV      ! Molar mass of dry air and molar mass of vapor, PPABST: pression
+
+ZREHU(:,:,:) = PRT(:,:,:,1) / ZREHU_tmp(:,:,:)
+
+IF (CCLOUD(1:3) =='ICE' .OR. CCLOUD =='C3R5')  THEN
+  WHERE ( ZTEMP(:,:,:) <  XTT) ! XTT : Triple point temperature
+    ZREHU_tmp(:,:,:) = EXP( XALPI - XBETAI/ZTEMP(:,:,:) & ! XALPI,XBETAI,XGAMI ! Constants for saturation vapor pressure 
+                       - XGAMI*ALOG(ZTEMP(:,:,:)) ) !saturation over ice
+    ZREHU_tmp(:,:,:) = (XMV / XMD) * ZREHU_tmp(:,:,:) / (PPABST(:,:,:) - ZREHU_tmp(:,:,:))
+    ZREHU(:,:,:) = PRT(:,:,:,1) / ZREHU_tmp(:,:,:)
+  END WHERE
+END IF
+
+ZREHU(:,:,:) = MIN(MAX(ZREHU(:,:,:), 0.02),0.95)
+
+
+!        1.1    initialisation 
+!
+!Calculations here are for one mode only
+!
+ALLOCATE (NM0(NMODE_SLT))
+ALLOCATE (NM3(NMODE_SLT))
+ALLOCATE (NM6(NMODE_SLT))
+ALLOCATE (ZM(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), NMODE_SLT*3))
+ALLOCATE (ZMMIN(NMODE_SLT*3))
+ALLOCATE (ZSV(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), SIZE(PSVT,4)))
+ALLOCATE (ZINIRADIUS(NMODE_SLT))
+    
+ZSV(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY)
+
+DO JN = 1, NMODE_SLT
+  IMODEIDX = JPSALTORDER(JN)
+  !Calculations here are for one mode only
+  IF (CRGUNITS == "MASS") THEN
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) * EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
+  ELSE
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX)
+  END IF
+
+  !Set counter for number, M3 and M6
+  NM0(JN) = 1 + (JN - 1) * 3
+  NM3(JN) = 2 + (JN - 1) * 3
+  NM6(JN) = 3 + (JN - 1) * 3
+  !Get minimum values possible
+  ZMMIN(NM0(JN)) = XN0MIN_SLT(IMODEIDX)
+  ZRGMIN         = ZINIRADIUS(JN)
+  IF (LVARSIG_SLT) THEN
+    ZSIGMIN = XSIGMIN_SLT
+  ELSE
+    ZSIGMIN = XINISIG_SLT(IMODEIDX)
+  ENDIF
+  ZMMIN(NM3(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**3)*EXP(4.5 * LOG(ZSIGMIN)**2) 
+  ZMMIN(NM6(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**6)*EXP(18. * LOG(ZSIGMIN)**2)
+END DO
+!
+!Set density of aerosol, here sea salt (kg/m3) and water
+ZRHOI = XDENSITY_SALT
+ZRHOLW = XRHOLW
+!Set molecular weight of sea salt and water!NOTE THAT THIS IS NOW IN KG
+ZMI   = XMOLARWEIGHT_SALT
+ZMV   = XMV
+!
+!
+DO JN = 1, NMODE_SLT
+  !
+  IF (LVARSIG_SLT) THEN ! give M6 (case of variable standard deviation)
+  !
+  !Get number concentration (#/molec_{air}==>#/m3)
+    ZM(:,:,:,NM0(JN))=                         &
+         ZSV(:,:,:,1+(JN-1)*3)                 & !#/molec_{air}
+         * XAVOGADRO                           & !==>#/mole
+         / XMD                                 & !==>#/kg_{air}
+         * PRHODREF(:,:,:)                       !==>#/m3
+  ! 
+  !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+    ZM(:,:,:,NM3(JN)) =                        &
+         ZSV(:,:,:,2+(JN-1)*3)                 & !molec_{aer}/molec_{aer}
+         * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+         * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+         * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+         * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+         / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+     !Limit mass concentration to minimum value
+    ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN)))
+  ! 
+    ZM(:,:,:,NM6(JN)) = ZSV(:,:,:,3+(JN-1)*3)  & !um6/molec_{air}*(cm3/m3)
+         * 1.d-6                               & !==> um6/molec_{air}
+         * XAVOGADRO                           & !==> um6/mole_{air}
+         / XMD                                 & !==> um6/kg_{air}
+         * PRHODREF(:,:,:)                       !==> um6/m3_{air}
+     !Limit m6 concentration to minimum value
+    ZM(:,:,:,NM6(JN)) =  MAX(ZM(:,:,:,NM6(JN)), ZMMIN(NM6(JN)))
+  !
+  !Get sigma (only if sigma is allowed to vary)
+    !Get intermediate values for sigma M3^2/(M0*M6) (ORILAM paper, eqn 8)
+    ZSIGMA(:,:,:)=ZM(:,:,:,NM3(JN))**2/(ZM(:,:,:,NM0(JN))*ZM(:,:,:,NM6(JN)))
+    !Limit the intermediate value, can not be larger than 1
+    ZSIGMA(:,:,:)=MIN(1-1E-10,ZSIGMA(:,:,:))
+    !Limit the value for intermediate, can not be smaller than 0
+    ZSIGMA(:,:,:)=MAX(1E-10,ZSIGMA(:,:,:))
+    !Calculate log(sigma)
+    ZSIGMA(:,:,:)= LOG(ZSIGMA(:,:,:))
+    !Finally get the real sigma the negative sign is because of 
+    !The way the equation is written (M3^2/(M0*M6)) instead of (M0*M6)/M3^3
+    ZSIGMA(:,:,:)= EXP(1./3.*SQRT(-ZSIGMA(:,:,:)))
+    !Limit the value to reasonable ones
+    ZSIGMA(:,:,:) =  MAX( XSIGMIN_SLT, MIN( XSIGMAX_SLT, ZSIGMA(:,:,:) ) )
+
+  !
+    !Put back M6 so that it fits the sigma which is possibly modified above
+    !The following makes M6 consistent with N, R, SIGMA
+    ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN)) &
+         * ( (ZM(:,:,:,NM3(JN))/ZM(:,:,:,NM0(JN)))**(1./3.) &
+         * exp(-(3./2.)*log(ZSIGMA(:,:,:))**2))**6 &
+         * exp(18.*log(ZSIGMA(:,:,:))**2)
+
+  ELSE ! compute M6 from M0, M3 and SIGMA
+    ! 
+    ZSIGMA(:,:,:) = XINISIG_SLT(JPSALTORDER(JN))
+    IF (LRGFIX_SLT) THEN
+
+    !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+    ZM(:,:,:,NM3(JN)) =                        &
+         ZSV(:,:,:,JN)                         & !molec_{aer}/molec_{aer}
+         * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+         * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+         * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+         * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+         / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+
+    ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN)))
+       PSVT(:,:,:,JN) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                              (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+
+    ZM(:,:,:,NM0(JN))=  ZM(:,:,:,NM3(JN))/&
+       ((ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(XINISIG_SLT(JPSALTORDER(JN)))**2))
+
+
+
+    ELSE
+
+    !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+      ZM(:,:,:,NM3(JN)) =                        &
+           ZSV(:,:,:,2+(JN-1)*2)                 & !molec_{aer}/molec_{aer}
+           * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+           * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+           * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+           * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+           / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+
+ 
+    !Get number concentration (#/molec_{air}==>#/m3)
+       ZM(:,:,:,NM0(JN))=                         &
+           ZSV(:,:,:,1+(JN-1)*2)                 & !#/molec_{air}
+           * XAVOGADRO                           & !==>#/mole
+           / XMD                                 & !==>#/kg_{air}
+           * PRHODREF(:,:,:)                       !==>#/m3
+
+    ! Limit concentration to minimum values
+      WHERE ((ZM(:,:,:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. &
+             (ZM(:,:,:,NM3(JN)) < ZMMIN(NM3(JN)) )) 
+         ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN))
+         ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN))
+         PSVT(:,:,:,1+(JN-1)*2) = ZM(:,:,:,NM0(JN)) * XMD / &
+         (XAVOGADRO * PRHODREF(:,:,:) )
+         PSVT(:,:,:,2+(JN-1)*2) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                                (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+      ENDWHERE
+    END IF
+
+    ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN))                   &
+         * ( (ZM(:,:,:,NM3(JN))/ZM(:,:,:,NM0(JN)))**(1./3.) &
+         * exp(-(3./2.)*log(ZSIGMA(:,:,:))**2))**6          &
+         * exp(18.*log(ZSIGMA(:,:,:))**2)
+    
+  !
+  END IF
+  !   
+  !Get number median radius (eqn. 7 in Orilam manuscript)
+  ZRG(:,:,:)=    &
+          (      &
+          ZM(:,:,:,NM3(JN))*ZM(:,:,:,NM3(JN))*ZM(:,:,:,NM3(JN))*ZM(:,:,:,NM3(JN))    &
+          /(ZM(:,:,:,NM6(JN))*ZM(:,:,:,NM0(JN))*ZM(:,:,:,NM0(JN))*ZM(:,:,:,NM0(JN))) &
+          )                                                                          &
+          ** XSIXTH_SALT 
+
+
+  !ZRG(:,:,:)=MIN(ZRG(:,:,:),ZINIRADIUS(JN))
+  !Give the sigma-values to the passed array
+  IF(PRESENT(PSIG3D)) PSIG3D(:,:,:,JN) = ZSIGMA(:,:,:)
+  !
+  !Set the number concentrations in the passed array
+  IF(PRESENT(PN3D)) PN3D(:,:,:,JN) = ZM(:,:,:,NM0(JN))
+  !
+!  !Get the number median radius
+!  IF(PRESENT(PRG3D)) PRG3D(:,:,:,JN)= ZRG(:,:,:)
+  !
+  !
+  !+ Marine
+!!!!!!!!!!! Wet radius calculus
+
+!Test pour Marine
+
+  ZRG_WET(:,:,:) =  C1 * (ZRG(:,:,:)*1.d-4)**C2 ! Pour le calcul, ZRG en cm! (d'où 1.d-4)
+
+!+ Marine test
+
+  ZRG_WET(:,:,:) =  ZRG_WET(:,:,:) / (C3 * ((ZRG(:,:,:)*1.d-4)**C4) - LOG10(ZREHU(:,:,:)))
+  ZRG_WET(:,:,:) =  ZRG_WET(:,:,:) + (ZRG(:,:,:)*1.d-4)**3 
+  ZRG_WET(:,:,:) = ( ZRG_WET(:,:,:)**(1./3) )*1.d4 ! *1.d4 pour repasser de cm à micromètres
+
+  !Get the number median radius
+  IF(PRESENT(PRG3D)) PRG3D(:,:,:,JN) = ZRG_WET(:,:,:)
+
+
+
+! Wet density calcul
+  ZDENSITY_WET(:,:,:,JN)=(ZRHOI * ZRG(:,:,:) * ZRG(:,:,:) * ZRG(:,:,:) + &
+          ZRHOLW * (ZRG_WET(:,:,:) * ZRG_WET(:,:,:) * ZRG_WET(:,:,:)- &
+          ZRG(:,:,:) * ZRG(:,:,:) * ZRG(:,:,:))) &
+         / (ZRG_WET(:,:,:) * ZRG_WET(:,:,:) * ZRG_WET(:,:,:)) 
+
+!Wet mass
+  ZMASS3D(:,:,:,JN)=    &
+          ZM(:,:,:,NM0(JN)) & !#/m^3_{air}
+           * XPI*4./3.       &
+           * ZDENSITY_WET(:,:,:,JN)           &    !==>kg/m^3_{aeros}/m^3_{air}
+           * ZRG_WET(:,:,:) * ZRG_WET(:,:,:) * ZRG_WET(:,:,:) &
+           * XUM3TOM3_SALT        &    !==>kg/m^3_{air}
+           * exp(4.5*log(ZSIGMA(:,:,:))*log(ZSIGMA(:,:,:)))
+ 
+! Salt Mass
+  ZMASS3D_SLT(:,:,:,JN)=     &
+              ZM(:,:,:,NM0(JN)) &    !#/m^3_{air}
+              * XPI*4./3.       &
+              * ZRHOI           &    !==>kg/m^3_{aeros}/m^3_{air}
+              * ZRG(:,:,:) * ZRG(:,:,:) * ZRG(:,:,:) &
+              * XUM3TOM3_SALT        &    !==>kg/m^3_{air}
+              * exp(4.5*log(ZSIGMA(:,:,:))*log(ZSIGMA(:,:,:)))
+
+  IF(PRESENT(PMASS3D)) THEN 
+    PMASS3D(:,:,:,JN)= ZMASS3D(:,:,:,JN)
+  ENDIF
+
+  IF(PRESENT(PDENSITY_WET)) THEN
+    PDENSITY_WET(:,:,:,JN) = ZDENSITY_WET(:,:,:,JN)
+  ENDIF
+!
+END DO  !Loop on modes
+!
+IF(PRESENT(PM3D)) PM3D(:,:,:,:) = ZM(:,:,:,:)
+!
+DEALLOCATE(ZINIRADIUS)
+DEALLOCATE(ZSV)
+DEALLOCATE(ZMMIN)
+DEALLOCATE(ZM)
+DEALLOCATE(NM6)
+DEALLOCATE(NM3)
+DEALLOCATE(NM0)
+
+!+ Marine
+
+END SUBROUTINE PPP2SALT_WET
+
+!!   ############################################################
+  SUBROUTINE SALT2PPP(             &
+       PSVT                         & !IO [ppp] input scalar variables (moment of distribution)
+       , PRHODREF                   & !I [kg/m3] density of air       
+       , PSIG3D                     & !I [-] standard deviation of aerosol distribution
+       , PRG3D                      & !I [um] number median diameter of aerosol distribution
+       )
+!!   ############################################################
+!
+!!
+!!    PURPOSE
+!!    -------
+!!    Translate the sea salt Mass, RG and SIGMA in the  three moments M0, M3 and M6 given in ppp 
+!! 
+!!    CALLING STRUCTURE NOTE: OPTIONAL VARIABLES
+!!    -------
+!!    CALL PPP2AEROS(PSVT, PRHODREF, PSIG3D=SIGVAR,  &
+!!       PRG3D=RVAR, PN3D=NVAR)
+!!
+!!    REFERENCE
+!!    ---------
+!!    none
+!!
+!!    AUTHOR
+!!    ------
+!!    Pierre TULET (LA)
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!    Alf Grini (CNRM)
+!!
+!!    EXTERNAL
+!!    --------
+!!    None
+!!
+    IMPLICIT NONE
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+!*      0.1    declarations of arguments
+!
+    !INPUT
+    REAL,       DIMENSION(:,:,:),    INTENT(IN)     :: PRHODREF !I [kg/m3] density of air
+    REAL,       DIMENSION(:,:,:,:),  INTENT(IN)     :: PSIG3D   !O [-] standard deviation
+    REAL,       DIMENSION(:,:,:,:),  INTENT(IN)     :: PRG3D    !O [um] number median diameter
+
+    !OUTPUT
+    REAL,       DIMENSION(:,:,:,:),  INTENT(INOUT)  :: PSVT  !IO [#/molec_{air}] first moment
+                                                                !IO [molec_{aer}/molec_{air} 3rd moment
+                                                                !IO [um6/molec_{air}*(cm3/m3)] 6th moment
+!
+!
+!*      0.2    declarations local variables
+!
+    REAL                                  :: ZRHOI               ! [kg/m3] density of aerosol
+    REAL                                  :: ZMI                 ! [kg/mol] molar weight of aerosol
+    REAL                                  :: ZRGMIN              ! [um] minimum radius accepted
+    REAL                                  :: ZSIGMIN             ! minimum standard deviation accepted
+    REAL,DIMENSION(:,:,:,:), ALLOCATABLE  :: ZM                  ! [aerosol units] local array which goes to output later
+    REAL,DIMENSION(:,:,:),   ALLOCATABLE  :: ZSIGMA              ! aersol standard deviation
+    REAL,DIMENSION(:),       ALLOCATABLE  :: ZMMIN               ! [aerosol units] minimum values for N, sigma, M
+    REAL,DIMENSION(:),       ALLOCATABLE  :: ZINIRADIUS          ! initial mean radius
+    INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM0                 ! [idx] index for Mode 0 in passed variables
+    INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM3                 ! [idx] indexes for Mode 3 in passed variables
+    INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM6                 ! [idx] indexes for Mode 6 in passed variables
+    INTEGER                               :: JJ, JN              ! [idx] loop counters
+    INTEGER                               :: IMODEIDX
+!
+!-------------------------------------------------------------------------------
+!
+!        1.1    initialisation 
+
+
+    ALLOCATE (NM0(NMODE_SLT))
+    ALLOCATE (NM3(NMODE_SLT))
+    ALLOCATE (NM6(NMODE_SLT))
+    ALLOCATE (ZINIRADIUS(NMODE_SLT))
+    ALLOCATE (ZMMIN(NMODE_SLT*3))
+    ALLOCATE (ZM(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3), NMODE_SLT*3))
+    ALLOCATE (ZSIGMA(SIZE(PSVT,1), SIZE(PSVT,2), SIZE(PSVT,3)))
+
+    !Set density of aerosol, here sea salt (kg/m3)
+    ZRHOI = XDENSITY_SALT
+    !Set molecular weight of sea salt !NOTE THAT THIS IS NOW IN KG
+    ZMI   = XMOLARWEIGHT_SALT
+!
+
+    ! PSVT need to be positive
+!    PSVT(:,:,:,:) = MAX(PSVT(:,:,:,:), XMNH_TINY)
+    
+    DO JN=1,NMODE_SLT
+      IMODEIDX = JPSALTORDER(JN)
+    !Calculations here are for one mode only
+      IF (CRGUNITS=="MASS") THEN
+        ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) * EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
+      ELSE
+        ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX)
+      END IF
+
+    !Set counter for number, M3 and M6
+      NM0(JN) = 1+(JN-1)*3
+      NM3(JN) = 2+(JN-1)*3
+      NM6(JN) = 3+(JN-1)*3
+
+    !Get minimum values possible
+      ZMMIN(NM0(JN)) = XN0MIN_SLT(IMODEIDX)
+      ZRGMIN     =  ZINIRADIUS(JN)
+      IF (LVARSIG_SLT) THEN
+        ZSIGMIN = XSIGMIN_SLT
+      ELSE
+        ZSIGMIN = XINISIG_SLT(IMODEIDX)
+      ENDIF
+      ZMMIN(NM3(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**3)*EXP(4.5 * LOG(ZSIGMIN)**2) 
+      ZMMIN(NM6(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**6)*EXP(18. * LOG(ZSIGMIN)**2)
+    END DO
+
+    !Set density of aerosol, here sea salt (kg/m3)
+    ZRHOI = XDENSITY_SALT
+    !Set molecular weight of sea salt !NOTE THAT THIS IS NOW IN KG
+    ZMI   = XMOLARWEIGHT_SALT
+!
+    DO JN=1,NMODE_SLT
+     !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+     IF (LVARSIG_SLT) THEN
+       ZM(:,:,:,NM3(JN)) =                        &
+            PSVT(:,:,:,2+(JN-1)*3)                & !molec_{aer}/molec_{aer}
+            * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+            * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+            * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+            * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+            / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+    ELSE 
+      IF ((LRGFIX_SLT)) THEN
+        ZM(:,:,:,NM3(JN)) =                   &
+            PSVT(:,:,:,JN)                        & !molec_{aer}/molec_{aer}
+            * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+            * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+            * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+            * XM3TOUM3_SALT                       & !==>um3_{aer}/m3_{air}
+            / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+           ZM(:,:,:,NM3(JN)) = MAX(ZM(:,:,:,NM3(JN)), ZMMIN(NM3(JN)))
+      ELSE
+        ZM(:,:,:,NM3(JN)) =                        &
+            PSVT(:,:,:,2+(JN-1)*2)                & !molec_{aer}/molec_{aer}
+            * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+            * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+            * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+            * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+            / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+      END IF
+    END IF
+! calculate moment 0 from dispersion and mean radius
+    ZM(:,:,:,NM0(JN))=  ZM(:,:,:,NM3(JN))/&
+       ((PRG3D(:,:,:,JN)**3)*EXP(4.5 * LOG(PSIG3D(:,:,:,JN))**2))
+
+! calculate moment 6 from dispersion and mean radius
+    ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN)) * (PRG3D(:,:,:,JN)**6) * &
+               EXP(18 *(LOG(PSIG3D(:,:,:,JN)))**2)
+
+    IF (LVARSIG_SLT) THEN
+      WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.&
+             (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))).OR.&
+             (ZM(:,:,:,NM6(JN)) .LT. ZMMIN(NM6(JN))))
+        ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN))
+        ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN))
+        ZM(:,:,:,NM6(JN)) = ZMMIN(NM6(JN))
+      END WHERE
+    ELSE  IF (.NOT.(LRGFIX_SLT)) THEN
+
+      WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.&
+             (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))))
+        ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN))
+        ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN))
+      END WHERE
+    ENDIF
+
+     
+     ! return to concentration #/m3 =>  (#/molec_{air}
+    IF (LVARSIG_SLT) THEN
+      PSVT(:,:,:,1+(JN-1)*3) = ZM(:,:,:,NM0(JN)) * XMD / &
+                               (XAVOGADRO*PRHODREF(:,:,:))
+
+      PSVT(:,:,:,2+(JN-1)*3) = ZM(:,:,:,NM3(JN)) * XMD  * XPI * 4./3 * ZRHOI / &
+                               (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+
+      PSVT(:,:,:,3+(JN-1)*3) = ZM(:,:,:,NM6(JN)) * XMD  / &
+                               ( XAVOGADRO*PRHODREF(:,:,:) * 1.d-6) 
+    ELSE IF (LRGFIX_SLT) THEN
+      PSVT(:,:,:,JN)         = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                               (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+    ELSE
+      PSVT(:,:,:,1+(JN-1)*2) = ZM(:,:,:,NM0(JN)) * XMD / &
+                               (XAVOGADRO*PRHODREF(:,:,:))
+
+      PSVT(:,:,:,2+(JN-1)*2) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                               (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+    END IF
+!
+END DO  !Loop on modes
+
+DEALLOCATE(ZINIRADIUS)
+DEALLOCATE(ZMMIN)
+DEALLOCATE(ZSIGMA)
+DEALLOCATE(ZM)
+DEALLOCATE(NM6)
+DEALLOCATE(NM3)
+DEALLOCATE(NM0)
+!
+END SUBROUTINE SALT2PPP
+!
+!!   ############################################################
+  SUBROUTINE PPP2SALT1D(             &
+       PSVT                         & !I [ppp] input scalar variables (moment of distribution)
+       , PRHODREF                   & !I [kg/m3] density of air       
+       , PSIG1D                     & !O [-] standard deviation of aerosol distribution
+       , PRG1D                      & !O [um] number median diameter of aerosol distribution
+       , PN1D                       & !O [#/m3] number concentration of aerosols
+       , PMASS1D                    & !O [kg/m3] mass concentration of aerosol
+       , PM1D                       & !O aerosols moments 0, 3 and 6
+       )
+!!   ############################################################
+!
+!!
+!!    PURPOSE
+!!    -------
+!!    Translate the three moments M0, M3 and M6 given in ppp into
+!!    Values which can be understood more easily (R, sigma, N, M)
+!! 
+!!    CALLING STRUCTURE NOTE: OPTIONAL VARIABLES
+!!    -------
+!!    CALL PPP2AEROS(PSVT, PRHODREF, PSIG3D=SIGVAR,  &
+!!       PRG3D=RVAR, PN3D=NVAR, PM3D=MASSVAR)
+!!
+!!    REFERENCE
+!!    ---------
+!!    none
+!!
+!!    AUTHOR
+!!    ------
+!!    Pierre TULET (LA)
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!    2005 Alf Grini (CNRM)
+!!    2006 Jean-Pierre Chaboureau (LA)
+!!
+!!    EXTERNAL
+!!    --------
+!!    None
+!!
+    IMPLICIT NONE
+!!
+!-------------------------------------------------------------------------------
+!
+!*       0.     DECLARATIONS
+!               ------------
+!
+!*      0.1    declarations of arguments
+!
+REAL,       DIMENSION(:,:),  INTENT(INOUT)  :: PSVT      !I [ppp] first moment
+REAL,       DIMENSION(:),    INTENT(IN)     :: PRHODREF !I [kg/m3] density of air
+
+REAL,       DIMENSION(:,:),  OPTIONAL, INTENT(OUT)     :: PSIG1D   !O [-] standard deviation
+REAL,       DIMENSION(:,:),  OPTIONAL, INTENT(OUT)     :: PRG1D    !O [um] number median diameter
+REAL,       DIMENSION(:,:),  OPTIONAL, INTENT(OUT)     :: PN1D     !O [#/m3] number concentration
+REAL,       DIMENSION(:,:),  OPTIONAL, INTENT(OUT)     :: PMASS1D  !O [kg_{aer}/m3] mass concentration
+REAL,       DIMENSION(:,:),  OPTIONAL, INTENT(OUT)     :: PM1D     !O aerosols moments 
+!
+!
+!*      0.2    declarations local variables
+!
+REAL                                  :: ZRHOI               ! [kg/m3] density of aerosol
+REAL                                  :: ZMI                 ! [kg/mol] molar weight of aerosol
+REAL                                  :: ZRGMIN              ! [um] minimum radius accepted
+REAL                                  :: ZSIGMIN             ! minimum standard deviation accepted
+REAL,DIMENSION(:,:), ALLOCATABLE  :: ZM                  ! [aerosol units] local array which goes to output later
+REAL,DIMENSION(:,:), ALLOCATABLE  :: ZSV                 ! [sea salts moment concentration]
+REAL,DIMENSION(:),   ALLOCATABLE  :: ZSIGMA              ! [-] standard deviation
+REAL,DIMENSION(:),   ALLOCATABLE  :: ZRG                 ! [um] number median diameter
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZMMIN               ! [aerosol units] minimum values for N, sigma, M
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM0                 ! [idx] index for Mode 0 in passed variables
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM3                 ! [idx] indexes for Mode 3 in passed variables
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM6                 ! [idx] indexes for Mode 6 in passed variables
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZINIRADIUS          ! initial mean radius
+INTEGER                               :: JN,IMODEIDX,JJ      ! [idx] loop counters
+!
+!-------------------------------------------------------------------------------
+!
+!        1.1    initialisation 
+!
+!Calculations here are for one mode only
+!
+ALLOCATE (NM0(NMODE_SLT))
+ALLOCATE (NM3(NMODE_SLT))
+ALLOCATE (NM6(NMODE_SLT))
+ALLOCATE (ZM(SIZE(PSVT,1), NMODE_SLT*3))
+ALLOCATE (ZMMIN(NMODE_SLT*3))
+ALLOCATE (ZSIGMA(SIZE(PSVT,1)))
+ALLOCATE (ZRG(SIZE(PSVT,1)))
+ALLOCATE (ZSV(SIZE(PSVT,1), SIZE(PSVT,2)))
+ALLOCATE (ZINIRADIUS(NMODE_SLT))
+    
+!ZSV(:,:) = MAX(PSVT(:,:), XMNH_TINY)
+
+DO JN=1,NMODE_SLT
+  IMODEIDX = JPSALTORDER(JN)
+  !Calculations here are for one mode only
+  IF (CRGUNITS=="MASS") THEN
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) * EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
+  ELSE
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX)
+  END IF
+
+  !Set counter for number, M3 and M6
+  NM0(JN) = 1+(JN-1)*3
+  NM3(JN) = 2+(JN-1)*3
+  NM6(JN) = 3+(JN-1)*3
+  !Get minimum values possible
+  ZMMIN(NM0(JN)) = XN0MIN_SLT(IMODEIDX)
+  ZRGMIN         = ZINIRADIUS(JN)
+  IF (LVARSIG_SLT) THEN
+    ZSIGMIN = XSIGMIN_SLT
+  ELSE
+    ZSIGMIN = XINISIG_SLT(IMODEIDX)
+  ENDIF
+  ZMMIN(NM3(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**3)*EXP(4.5 * LOG(ZSIGMIN)**2) 
+  ZMMIN(NM6(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**6)*EXP(18. * LOG(ZSIGMIN)**2)
+END DO
+!
+!Set density of aerosol, here sea salt (kg/m3)
+ZRHOI = XDENSITY_SALT
+!Set molecular weight of sea salt !NOTE THAT THIS IS NOW IN KG
+ZMI   = XMOLARWEIGHT_SALT
+!
+!
+DO JN=1,NMODE_SLT
+  !
+  IF (LVARSIG_SLT) THEN ! give M6 (case of variable standard deviation)
+  !
+  !Get number concentration (#/molec_{air}==>#/m3)
+    ZM(:,NM0(JN))=                         &
+         ZSV(:,1+(JN-1)*3)                 & !#/molec_{air}
+         * XAVOGADRO                           & !==>#/mole
+         / XMD                                 & !==>#/kg_{air}
+         * PRHODREF(:)                       !==>#/m3
+  ! 
+  !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+    ZM(:,NM3(JN)) =                        &
+         ZSV(:,2+(JN-1)*3)                 & !molec_{aer}/molec_{aer}
+         * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+         * PRHODREF(:)                     & !==>kg_{aer}/m3_{air}
+         * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+         * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+         / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+     !Limit mass concentration to minimum value
+    ZM(:,NM3(JN)) = MAX(ZM(:,NM3(JN)), ZMMIN(NM3(JN)))
+  ! 
+    ZM(:,NM6(JN)) = ZSV(:,3+(JN-1)*3)  & !um6/molec_{air}*(cm3/m3)
+         * 1.d-6                               & !==> um6/molec_{air}
+         * XAVOGADRO                           & !==> um6/mole_{air}
+         / XMD                                 & !==> um6/kg_{air}
+         * PRHODREF(:)                       !==> um6/m3_{air}
+     !Limit m6 concentration to minimum value
+    ZM(:,NM6(JN)) =  MAX(ZM(:,NM6(JN)), ZMMIN(NM6(JN)))
+  !
+  !Get sigma (only if sigma is allowed to vary)
+    !Get intermediate values for sigma M3^2/(M0*M6) (ORILAM paper, eqn 8)
+    ZSIGMA(:)=ZM(:,NM3(JN))**2/(ZM(:,NM0(JN))*ZM(:,NM6(JN)))
+    !Limit the intermediate value, can not be larger than 1
+    ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:))
+    !Limit the value for intermediate, can not be smaller than 0
+    ZSIGMA(:)=MAX(1E-10,ZSIGMA(:))
+    !Calculate log(sigma)
+    ZSIGMA(:)= LOG(ZSIGMA(:))
+    !Finally get the real sigma the negative sign is because of 
+    !The way the equation is written (M3^2/(M0*M6)) instead of (M0*M6)/M3^3
+    ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:)))
+    !Limit the value to reasonable ones
+    ZSIGMA(:) =  MAX( XSIGMIN_SLT, MIN( XSIGMAX_SLT, ZSIGMA(:) ) )
+
+  !
+    !Put back M6 so that it fits the sigma which is possibly modified above
+    !The following makes M6 consistent with N, R, SIGMA
+    ZM(:,NM6(JN)) = ZM(:,NM0(JN)) &
+         * ( (ZM(:,NM3(JN))/ZM(:,NM0(JN)))**(1./3.) &
+         * exp(-(3./2.)*log(ZSIGMA(:))**2))**6 &
+         * exp(18.*log(ZSIGMA(:))**2)
+
+  ELSE ! compute M6 from M0, M3 and SIGMA
+    ! 
+    ZSIGMA(:) = XINISIG_SLT(JPSALTORDER(JN))
+    IF (LRGFIX_SLT) THEN
+
+    !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+      ZM(:,NM3(JN)) =                        &
+           ZSV(:,JN)                         & !molec_{aer}/molec_{aer}
+           * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+           * PRHODREF(:)                     & !==>kg_{aer}/m3_{air}
+           * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+           * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+           / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+      ZM(:,NM3(JN)) = MAX(ZM(:,NM3(JN)), ZMMIN(NM3(JN)))
+
+      ZM(:,NM0(JN))=  ZM(:,NM3(JN))/&
+         ((ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(XINISIG_SLT(JPSALTORDER(JN)))**2))
+
+    ELSE
+
+    !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+      ZM(:,NM3(JN)) =                        &
+           ZSV(:,2+(JN-1)*2)                 & !molec_{aer}/molec_{aer}
+           * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+           * PRHODREF(:)                     & !==>kg_{aer}/m3_{air}
+           * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+           * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+           / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+
+ 
+    !Get number concentration (#/molec_{air}==>#/m3)
+      ZM(:,NM0(JN))=                         &
+          ZSV(:,1+(JN-1)*2)                 & !#/molec_{air}
+          * XAVOGADRO                           & !==>#/mole
+          / XMD                                 & !==>#/kg_{air}
+          * PRHODREF(:)                       !==>#/m3
+
+    ! Limit concentration to minimum values
+      WHERE ((ZM(:,NM0(JN)) < ZMMIN(NM0(JN)) ).OR. &
+             (ZM(:,NM3(JN)) < ZMMIN(NM3(JN)) )) 
+        ZM(:,NM0(JN)) = ZMMIN(NM0(JN))
+        ZM(:,NM3(JN)) = ZMMIN(NM3(JN))
+        PSVT(:,1+(JN-1)*2) = ZM(:,NM0(JN)) * XMD / &
+                            (XAVOGADRO * PRHODREF(:) )
+        PSVT(:,2+(JN-1)*2) = ZM(:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                             (ZMI*PRHODREF(:)*XM3TOUM3_SALT)
+      ENDWHERE
+
+    END IF
+
+    ZM(:,NM6(JN)) = ZM(:,NM0(JN))                   &
+         * ( (ZM(:,NM3(JN))/ZM(:,NM0(JN)))**(1./3.) &
+         * exp(-(3./2.)*log(ZSIGMA(:))**2))**6          &
+         * exp(18.*log(ZSIGMA(:))**2)
+    
+  !
+  END IF
+  !   
+  !Get number median radius (eqn. 7 in Orilam manuscript)
+  ZRG(:)=    &
+          (      &
+          ZM(:,NM3(JN))*ZM(:,NM3(JN))*ZM(:,NM3(JN))*ZM(:,NM3(JN))    &
+          /(ZM(:,NM6(JN))*ZM(:,NM0(JN))*ZM(:,NM0(JN))*ZM(:,NM0(JN))) &
+          )                                                                          &
+          ** XSIXTH_SALT 
+  !ZRG(:)=MIN(ZRG(:),ZINIRADIUS(JN))
+  !Give the sigma-values to the passed array
+  IF(PRESENT(PSIG1D)) PSIG1D(:,JN) = ZSIGMA(:)
+  !
+  !Set the number concentrations in the passed array
+  IF(PRESENT(PN1D)) PN1D(:,JN) = ZM(:,NM0(JN))
+  !
+  !Get the number median radius
+  IF(PRESENT(PRG1D)) PRG1D(:,JN)= ZRG(:)
+  !
+  IF(PRESENT(PMASS1D))THEN
+       PMASS1D(:,JN)=     &
+            ZM(:,NM0(JN)) &    !#/m^3_{air}
+            * XPI*4./3.       &    
+            * ZRHOI           &    !==>kg/m^3_{aeros}/m^3_{air}
+            * ZRG(:) * ZRG(:) * ZRG(:) &
+            * XUM3TOM3_SALT        &    !==>kg/m^3_{air}
+            * exp(4.5*log(ZSIGMA(:))*log(ZSIGMA(:)))
+  ENDIF
+!
+END DO  !Loop on modes
+!
+IF(PRESENT(PM1D)) PM1D(:,:) = ZM(:,:)
+!
+DEALLOCATE(ZINIRADIUS)
+DEALLOCATE(ZSV)
+DEALLOCATE(ZRG)
+DEALLOCATE(ZSIGMA)
+DEALLOCATE(ZMMIN)
+DEALLOCATE(ZM)
+DEALLOCATE(NM6)
+DEALLOCATE(NM3)
+DEALLOCATE(NM0)
+!
+END SUBROUTINE PPP2SALT1D
+
+!!   ############################################################
+END MODULE MODE_SALT_PSD_WET
diff --git a/src/MNH/mode_saltopt.f90 b/src/MNH/mode_saltopt.f90
index ac1b4099d92e0dd752a1e5460a39f8ba41587e0d..d7fd28f3f1912d0a897de0aa93aebc050b6a761a 100644
--- a/src/MNH/mode_saltopt.f90
+++ b/src/MNH/mode_saltopt.f90
@@ -14,8 +14,11 @@
 !!    PURPOSE
 !!    -------
 !!
+!!    MODIFICATIONS
+!!    -------------
 !!
-
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!
   IMPLICIT NONE
   PUBLIC
   PRIVATE :: SALTOPT_LKT
@@ -27,6 +30,9 @@ CONTAINS
        PSVT                   & !I [moments/molec_{air}] Transported moments of sea salts
        ,PZZ                   & !I [m] height of layers
        ,PRHODREF              & !I [kg/m3] density of air
+       ,PTHT                  &
+       ,PPABST                &
+       ,PRT                   &
        ,PPIZA_WVL             & !O [-] single scattering albedo of sea salt layer for all SW wavelengths
        ,PCGA_WVL              & !O [-] assymetry factor for sea salt layer for all SW wavelengths
        ,PTAUREL_WVL           & !O [-] opt.depth/opt.depth(550) for sea salt layer for all SW wvl 
@@ -35,14 +41,18 @@ CONTAINS
        )
     
 
-    USE MODE_SALT_PSD   !Conversion procedures from moments to radius, ,number, mass and sigma
+    USE MODE_SALT_PSD_WET   !Conversion procedures from moments to radius, ,number, mass and sigma
+    USE MODE_SALT_PSD
     USE MODD_SALT, ONLY : NMODE_SLT
+
     IMPLICIT NONE
     
     !INPUT
     REAL, DIMENSION(:,:,:,:),INTENT(IN)      :: PSVT       !I [moments/molec_{air}] transported moments of sea salt
     REAL, DIMENSION(:,:,:),INTENT(IN)        :: PZZ        !I [m] height of layers
     REAL, DIMENSION(:,:,:),INTENT(IN)        :: PRHODREF   !I [kg/m3] density of air
+    REAL, DIMENSION(:,:,:),INTENT(IN)        :: PTHT, PPABST   !I
+    REAL, DIMENSION(:,:,:,:),INTENT(IN)      :: PRT
     INTEGER, INTENT(IN)                      :: KSWB       !I [nbr] number of shortwave wavelengths
     REAL, PARAMETER                          :: EPSILON=1.e-8 !a very low number for optical depth in a layer
 
@@ -57,6 +67,7 @@ CONTAINS
     REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3), NMODE_SLT) :: ZMASS         ![kg/m3] mass of one sea salt mode
     REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3), NMODE_SLT) :: ZRADIUS       ![um] number median radius of one sea salt mode
     REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3), NMODE_SLT) :: ZSIGMA        ![-] dispersion coefficient one sea salt mode
+    REAL, DIMENSION(SIZE(PSVT,1),SIZE(PSVT,2),SIZE(PSVT,3), NMODE_SLT) :: ZDENSITY        ![-] [g/m2] density of wet aerosol (water + sea salt)
     REAL, ALLOCATABLE, DIMENSION(:,:,:,:)                   :: ZTAU550_MDE   ![-] opt.depth 550nm one mode
     REAL, ALLOCATABLE, DIMENSION(:,:,:,:,:)                 :: ZTAU_WVL_MDE  ![-] opt.depth @ wvl, one mode
     REAL, ALLOCATABLE, DIMENSION(:,:,:,:,:)                 :: ZPIZA_WVL_MDE ![-] single scattering albedo @ wvl, one mode
@@ -70,15 +81,26 @@ CONTAINS
     ALLOCATE(ZCGA_WVL_MDE(SIZE(PTAU550,1),SIZE(PTAU550,2),SIZE(PTAU550,3),KSWB,NMODE_SLT))
     
     ZSVT(:,:,:,:)=PSVT(:,:,:,:)
-
-    CALL PPP2SALT(     &
+    CALL PPP2SALT_WET(     &
          ZSVT                                   & !I [moments/molec_{air}] moments of sea salt for all modes
          ,PRHODREF                              & !I [kg/m3] air density
+         ,PPABST                                & !I Pression
+         ,PTHT                                  & !I Potential temperature
+         ,PRT                                   & !I Large scale vapor mixing ratio
          ,PSIG3D=ZSIGMA                         & !O [-] dispersion coefficient
          ,PRG3D=ZRADIUS                         & !O [um] number median radius
          ,PMASS3D=ZMASS                         & !O [kg/m3] mass of sea salt
+         ,PDENSITY_WET=ZDENSITY                 & !0 [g/m2] density of wet aerosol (water + salt)
          )
-       
+
+!    CALL PPP2SALT(     &
+!         ZSVT                                   & !I [moments/molec_{air}] moments of sea salt for all modes
+!         ,PRHODREF                              & !I [kg/m3] air density
+!         ,PSIG3D=ZSIGMA                         & !O [-] dispersion coefficient
+!         ,PRG3D=ZRADIUS                         & !O [um] number median radius
+!         ,PMASS3D=ZMASS                         & !O [kg/m3] mass of sea salt
+!         )
+
     DO JMDE=1,NMODE_SLT
        !Get sea salt optical properties from look up tables
        CALL SALTOPT_LKT(                     &
diff --git a/src/MNH/mode_thermo.f90 b/src/MNH/mode_thermo.f90
index 0808d39a4b9cbadea35de72d797845beacaed8d2..36f4d593a2c798021ca2fe939744710aaf19893d 100644
--- a/src/MNH/mode_thermo.f90
+++ b/src/MNH/mode_thermo.f90
@@ -34,13 +34,22 @@
 !!      Original    28/08/94 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  J.Escobar : 5/10/2018 : add FLUSH , for better logging in case of PB
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !--------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
 !-------------------------------------------------------------------------------
-!
+
+use mode_msg
+
+implicit none
+
+private
+
+public :: DQSAT, DQSATI, QSAT, QSATI, SM_FOES, SM_PMR_HU
+
 INTERFACE SM_FOES
   MODULE PROCEDURE SM_FOES_0D
   MODULE PROCEDURE SM_FOES_1D
@@ -378,8 +387,7 @@ IF ( ANY(ZDT > ZEPS) ) THEN
   WRITE(ILUOUT,*) 'T AT THIS MAXIMUM : ', ZT(IMAXLOC(1),IMAXLOC(2),IMAXLOC(3))
   WRITE(ILUOUT,*) 'JOB ABORTED '
   FLUSH(unit=ILUOUT)
-  CALL ABORT
-  STOP 
+  call Print_msg( NVERB_FATAL, 'GEN', 'SM_PMR_HU_3D', 'failed to converge' )
 END IF
 !-------------------------------------------------------------------------------
 END FUNCTION SM_PMR_HU_3D
@@ -517,8 +525,7 @@ IF (ANY(ZDT>ZEPS)) THEN
   WRITE(ILUOUT,*) 'MR AT THIS MAXIMUM : ', PMR(IMAXLOC)
   WRITE(ILUOUT,*) 'T AT THIS MAXIMUM : ', ZT(IMAXLOC)
   WRITE(ILUOUT,*) 'JOB ABORTED '
-  CALL ABORT
-  STOP 
+  call Print_msg( NVERB_FATAL, 'GEN', 'SM_PMR_HU_1D', 'failed to converge' )
 END IF
 !-------------------------------------------------------------------------------
 END FUNCTION SM_PMR_HU_1D
diff --git a/src/MNH/mode_time.f90 b/src/MNH/mode_time.f90
index 1ac45c254ee85ff96bb61d6e4419c52aff71671d..0f71113f9732af5805bcaf076a82aab890f3862a 100644
--- a/src/MNH/mode_time.f90
+++ b/src/MNH/mode_time.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -39,7 +39,7 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TIME
 !
 IMPLICIT NONE
diff --git a/src/MNH/mode_tmat.f90 b/src/MNH/mode_tmat.f90
index f0c98a7996ea3d97e45656b168eb4664307f35f5..9de6651339a1a9b187f10cde8f36629bf357b551 100644
--- a/src/MNH/mode_tmat.f90
+++ b/src/MNH/mode_tmat.f90
@@ -15,7 +15,9 @@
 !
 !     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
 !
 !****************************************************************************
 
@@ -292,6 +294,8 @@
                            XIT11,XIT12,XIT21,XIT22,&
                            XTR1,XTI1,NPN1,NPNG1,NPNG2,NPN2,NPN4,NPN6
 
+      use mode_msg
+
       IMPLICIT REAL*8 (A-H,O-Z)
 
 !!      Parameter (NPN1=200, NPNG1=600, NPNG2=2*NPNG1, NPN2=2*NPN1,&
@@ -553,7 +557,7 @@
       INM1=MAX0(4,IXXX)
       
 !C     IF (INM1.GE.NPN1)WRITE(10,7333) NPN1
-      IF (INM1.GE.NPN1) STOP
+      if ( INM1 >= NPN1 ) call Print_msg( NVERB_FATAL, 'GEN', 'TMD', 'INM1 >= NPN1' )
       
 ! 7333 FORMAT('CONVERGENCE IS NOT OBTAINED FOR NPN1=',I3,  &
 !          '.  EXECUTION TERMINATED')
@@ -569,12 +573,9 @@
          NMAX=NMA
 !c         MMAX=1
          NGAUSS=NMAX*NDGS
-         
-!C     IF (NGAUSS.GT.NPNG1) WRITE(10,7340) NGAUSS
-         IF (NGAUSS.GT.NPNG1) STOP
-         
-!c 7340    FORMAT('NGAUSS =',I3,' I.E. IS GREATER THAN NPNG1.',
-!c     &        '  EXECUTION TERMINATED')
+
+         if ( NGAUSS > NPNG1 ) call Print_msg( NVERB_FATAL, 'GEN', 'TMD', 'NGAUSS > NPNG1' )
+
 !c 7334    FORMAT(' NMAX =', I3,'  DSCA=',D8.2,'   DEXT=',D8.2)
          
          CALL CONST(NGAUSS,NMAX,X,W,AN,ANN,S,SS)
@@ -614,7 +615,7 @@
          
          IF(.not.(DSCA.LE.DDELT.AND.DEXT.LE.DDELT)) THEN
 !C     IF (NMA.EQ.NPN1) WRITE(10,7333) NPN1
-            IF (NMA.EQ.NPN1) STOP      
+            if ( NMA == NPN1 ) call Print_msg( NVERB_FATAL, 'GEN', 'TMD', 'NMA == NPN1' )
          ELSE
             SORTIE1=.TRUE.
          ENDIF
@@ -1189,12 +1190,9 @@
           TL1.LT.0D0.OR.TL1.GT.180D0.OR.&
           PL.LT.0D0.OR.PL.GT.360D0.OR.&
           PL1.LT.0D0.OR.PL1.GT.360D0) THEN 
-!C      WRITE (10,2000)
-         STOP
-      ENDIF  
+          call Print_msg( NVERB_FATAL, 'GEN', 'AMPL', 'an angular parameter is outside its allowable range' )
+      END IF
 
-! 2000 FORMAT ('AN ANGULAR PARAMETER IS OUTSIDE ITS',&
-!             ' ALLOWABLE RANGE')
       PIN=ACOS(-1D0)
 
       PIN2=PIN*0.5D0
@@ -1388,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
                   
@@ -1400,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
@@ -1635,10 +1633,8 @@
       ENDDO
 
 
-!C      IF (NMAX.GT.NPN1) WRITE (10,9000) NMAX,NPN1 
-      IF (NMAX.GT.NPN1) STOP
+      if ( NMAX > NPN1 ) call Print_msg( NVERB_FATAL, 'GEN', 'VARY', 'NMAX > NPN1' )
 
- 9000 FORMAT(' NMAX = ',I2,', i.e., greater than ',I3)
       TB=TA*SQRT(MRR*MRR+MRI*MRI)
       TB=MAX(TB,FLOAT(NMAX))
       NNMAX1=1.2D0*SQRT(MAX(TA,FLOAT(NMAX)))+3D0
diff --git a/src/MNH/mode_zsrpun.f90 b/src/MNH/mode_zsrpun.f90
index 6cf8a8dfd9e8ffc2df39f40e9aa63edf4e73fbd4..efdc85450a9ce233526065f66de8779cc482433f 100644
--- a/src/MNH/mode_zsrpun.f90
+++ b/src/MNH/mode_zsrpun.f90
@@ -1,13 +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 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 mode 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 MODULE mode_zsrpun
   
   USE modd_glo
@@ -28,6 +23,7 @@ MODULE mode_zsrpun
   !		     by Betty Pun, Nov, 99.  A file with xi at given Aw
   !		     is included binsolu.h
   !               4. Rewritten to FORTRAN90 by Alf Grini (alf.grini@cnrm.meteo.fr)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
   !
   !***************************************************************************/
 
@@ -44,7 +40,9 @@ CONTAINS
        )
 
     USE modd_binsolu
-    
+
+    use mode_msg
+
     IMPLICIT NONE
 
     !INPUT
@@ -82,10 +80,7 @@ CONTAINS
 
     !Start code
     IF (ZSRFLAG.eq.0)THEN
-!callabortstop
-CALL ABORT
-       stop "ZSRFLAG=0 not implemented yet"
-       
+      call Print_msg( NVERB_FATAL, 'GEN', 'ZSRPUN', 'ZSRFLAG=0 not yet implemented' )
     ELSE  !        zsrflag = 1 
        
        !Get the total moles (umole/m3) of the main components, 
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 1c8abe91120eca715e35c61edd952276b2d95bda..6f1f14dadc2d1211746f821d26fa711514fd37ed 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -62,7 +62,7 @@ END MODULE MODI_MODEL_n
 !!
 !!    EXTERNAL
 !!    --------
-!!      Subroutine IO_FILE_OPEN_ll: to open a file
+!!      Subroutine IO_File_open: to open a file
 !!      Subroutine WRITE_DESFM: to write the descriptive part of a FMfile
 !!      Subroutine WRITE_LFIFM: to write the binary part of a FMfile
 !!      Subroutine SET_MASK   : to compute all the masks selected for budget
@@ -89,7 +89,7 @@ END MODULE MODI_MODEL_n
 !!                                 compute the large scale fields, used to
 !!                                 couple Model_n with outer informations.
 !!      Subroutine ENDSTEP_BUDGET: writes the budget informations.
-!!      Subroutine IO_FILE_CLOSE_ll: closes a file
+!!      Subroutine IO_File_close: closes a file
 !!      Subroutine DATETIME_CORRECTDATE: transform the current time in GMT
 !!      Subroutine FORCING : computes forcing terms
 !!      Subroutine ADD3DFIELD_ll : add a field to 3D-list
@@ -253,6 +253,12 @@ END MODULE MODI_MODEL_n
 !!                   01/2018 (C.Lac) Add VISCOSITY
 !!  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
 !                                  to allow to disable writes (for bench purposes)
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (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
@@ -291,7 +297,7 @@ USE MODD_GET_n
 USE MODD_GRID,           ONLY: XLONORI,XLATORI
 USE MODD_GRID_n
 USE MODD_ICE_C1R3_DESCR, ONLY: XRTMIN_C1R3=>XRTMIN
-USE MODD_IO_ll,          ONLY: LIO_NO_WRITE, TFILEDATA,TFILE_SURFEX,TFILE_DUMMY
+USE MODD_IO,             ONLY: LIO_NO_WRITE, TFILEDATA, TFILE_SURFEX, TFILE_DUMMY
 USE MODD_LBC_n
 USE MODD_LES
 USE MODD_LES_BUDGET
@@ -321,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
@@ -338,11 +345,11 @@ USE MODD_TURB_n
 !
 USE MODE_DATETIME
 USE MODE_ELEC_ll
-USE MODE_FM
 USE MODE_GRIDCART
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_WRITE_FIELD
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_user_write, IO_Fieldlist_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
 USE MODE_MNH_TIMING
 USE MODE_MODELN_HANDLER
@@ -438,9 +445,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
@@ -495,6 +501,7 @@ REAL, DIMENSION(:,:,:,:), POINTER :: DPTR_XLBXRM,DPTR_XLBYRM
 REAL, DIMENSION(:,:,:),   POINTER ::  DPTR_XZZ
 REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSTHM,DPTR_XLSRVM
 REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS,DPTR_XLSTHS,DPTR_XLSRVS
+REAL, DIMENSION(:,:),   POINTER :: DPTR_XLSZWSM,DPTR_XLSZWSS
 REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXUS,DPTR_XLBYUS,DPTR_XLBXVS,DPTR_XLBYVS
 REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXWS,DPTR_XLBYWS,DPTR_XLBXTHS,DPTR_XLBYTHS
 REAL, DIMENSION(:,:,:), POINTER :: DPTR_XLBXTKES,DPTR_XLBYTKES
@@ -632,9 +639,9 @@ IF (KTCOUNT == 1) THEN
   IOUT=0
 !
   IF ( .NOT. LIO_NO_WRITE ) THEN
-    CALL IO_FILE_OPEN_ll(TDIAFILE)
+    CALL IO_File_open(TDIAFILE)
 !
-    CALL IO_WRITE_HEADER(TDIAFILE)
+    CALL IO_Header_write(TDIAFILE)
     CALL WRITE_DESFM_n(IMI,TDIAFILE)
     CALL WRITE_LFIFMN_FORDIACHRO_n(TDIAFILE)
   END IF
@@ -670,6 +677,7 @@ IF (KTCOUNT == 1) THEN
     CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSVM)
     CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSWM)
     CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSTHM)
+    CALL ADD2DFIELD_ll(TZLSFIELD_ll, XLSZWSM)
     IF (NRR >= 1) THEN
       CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSRVM)
     ENDIF
@@ -699,51 +707,52 @@ IF (KTCOUNT == 1) THEN
   !
     IF ( LSTEADYLS ) THEN
        CALL UPDATE_HALO_ll(TZLSFIELD_ll, IINFO_ll)
+       CALL DEL2DFIELD_ll(TZLSFIELD_ll,XLSZWSM,IINFO_ll) 
        CALL UPDATE_HALO2_ll(TZLSFIELD_ll, TZLSHALO2_ll, IINFO_ll)
     END IF
   END IF
   !
 !
   !
-  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
 !
@@ -796,11 +805,13 @@ IF (IMI/=1 .AND. NDAD(IMI)/=IMI .AND. (ISYNCHRO==1 .OR. NDTRATIO(IMI) == 1) ) TH
   DPTR_XLSUM=>XLSUM
   DPTR_XLSVM=>XLSVM
   DPTR_XLSWM=>XLSWM
+  DPTR_XLSZWSM=>XLSZWSM
   DPTR_XLSTHS=>XLSTHS
   DPTR_XLSRVS=>XLSRVS
   DPTR_XLSUS=>XLSUS
   DPTR_XLSVS=>XLSVS
   DPTR_XLSWS=>XLSWS
+  DPTR_XLSZWSS=>XLSZWSS
   !
   IF ( LSTEADYLS                     ) THEN
     NCPL_CUR=0
@@ -815,8 +826,8 @@ IF (IMI/=1 .AND. NDAD(IMI)/=IMI .AND. (ISYNCHRO==1 .OR. NDTRATIO(IMI) == 1) ) TH
              DPTR_XBFX1,DPTR_XBFX2,DPTR_XBFX3,DPTR_XBFX4,DPTR_XBFY1,DPTR_XBFY2,DPTR_XBFY3,DPTR_XBFY4,        &
              NDXRATIO_ALL(IMI),NDYRATIO_ALL(IMI),                    &
              DPTR_CLBCX,DPTR_CLBCY,DPTR_XZZ,DPTR_XZHAT,LSLEVE,XLEN1,XLEN2,DPTR_XCOEFLIN_LBXM, &
-             DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,                        &
-             DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS                         )
+             DPTR_XLSTHM,DPTR_XLSRVM,DPTR_XLSUM,DPTR_XLSVM,DPTR_XLSWM,DPTR_XLSZWSM,                        &
+             DPTR_XLSTHS,DPTR_XLSRVS,DPTR_XLSUS,DPTR_XLSVS,DPTR_XLSWS, DPTR_XLSZWSS                         )
       END IF
     END IF
     !
@@ -939,10 +950,10 @@ IF (IBAK < NBAK_NUMB ) THEN
     TZBAKFILE => TBACKUPN(IBAK)%TFILE
     IVERB    = TZBAKFILE%NLFIVERB
     !
-    CALL IO_FILE_OPEN_ll(TZBAKFILE)
+    CALL IO_File_open(TZBAKFILE)
     !
     CALL WRITE_DESFM_n(IMI,TZBAKFILE)
-    CALL IO_WRITE_HEADER(TBACKUPN(IBAK)%TFILE)
+    CALL IO_Header_write(TBACKUPN(IBAK)%TFILE)
     CALL WRITE_LFIFM_n(TBACKUPN(IBAK)%TFILE,TBACKUPN(IBAK)%TFILE%TDADFILE%CNAME)
     TOUTDATAFILE => TZBAKFILE
     CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE)
@@ -982,13 +993,13 @@ IF (IOUT < NOUT_NUMB ) THEN
     !
     TZOUTFILE => TOUTPUTN(IOUT)%TFILE
     !
-    CALL IO_FILE_OPEN_ll(TZOUTFILE)
+    CALL IO_File_open(TZOUTFILE)
     !
-    CALL IO_WRITE_HEADER(TZOUTFILE)
-    CALL IO_WRITE_FIELDLIST(TOUTPUTN(IOUT))
-    CALL IO_WRITE_FIELD_USER(TOUTPUTN(IOUT))
+    CALL IO_Header_write(TZOUTFILE)
+    CALL IO_Fieldlist_write(TOUTPUTN(IOUT))
+    CALL IO_Field_user_write(TOUTPUTN(IOUT))
     !
-    CALL IO_FILE_CLOSE_ll(TZOUTFILE)
+    CALL IO_File_close(TZOUTFILE)
     !
   END IF
 END IF
@@ -1402,10 +1413,10 @@ IF (.NOT. LSTEADYLS) THEN
              NSIZELBX_ll,NSIZELBXU_ll,NSIZELBY_ll,NSIZELBYV_ll,             &
              NSIZELBXTKE_ll,NSIZELBYTKE_ll,                                 &
              NSIZELBXR_ll,NSIZELBYR_ll,NSIZELBXSV_ll,NSIZELBYSV_ll,         &
-             XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XDRYMASST,                     &
+             XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,XDRYMASST,             &
              XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,          &
              XLBYUM,XLBYVM,XLBYWM,XLBYTHM,XLBYTKEM,XLBYRM,XLBYSVM,          &
-             XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XDRYMASSS,                     &
+             XLSUS,XLSVS,XLSWS,XLSTHS,XLSRVS,XLSZWSS,XDRYMASSS,             &
              XLBXUS,XLBXVS,XLBXWS,XLBXTHS,XLBXTKES,XLBXRS,XLBXSVS,          &
              XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS           )
       !
@@ -1788,7 +1799,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
                           XINPRS, XINPRG,XINPRH,   &
 !                           XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
                           XSOLORG, XMI, &
-                          XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO,                &
+                          XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR,       &
                           ZSEA, ZTOWN                                          )
     DEALLOCATE(ZTOWN)
   ELSE
@@ -1809,7 +1820,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
                           XINPRS, XINPRG,XINPRH,   &
 !                           XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
                           XSOLORG, XMI, &
-                          XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO                 )
+                          XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR        )
   END IF
   XRTHS_CLD  = XRTHS - XRTHS_CLD
   XRRS_CLD   = XRRS  - XRRS_CLD
@@ -1966,16 +1977,16 @@ CALL ENDSTEP  ( XTSTEP,NRR,NSV,KTCOUNT,IMI,               &
                 XRUS,XRVS,XRWS,XDRYMASSS,                 &
                 XRTHS,XRRS,XRTKES,XRSVS,                  &
                 XLSUS,XLSVS,XLSWS,                        &
-                XLSTHS,XLSRVS,                            &
+                XLSTHS,XLSRVS,XLSZWSS,                    &
                 XLBXUS,XLBXVS,XLBXWS,                     &
                 XLBXTHS,XLBXRS,XLBXTKES,XLBXSVS,          &
                 XLBYUS,XLBYVS,XLBYWS,                     &
                 XLBYTHS,XLBYRS,XLBYTKES,XLBYSVS,          &
-                XUM,XVM,XWM,                              &
+                XUM,XVM,XWM,XZWS,                         &
                 XUT,XVT,XWT,XPABST,XDRYMASST,             &
                 XTHT, XRT, XTHM, XRCM, XPABSM,XTKET, XSVT,&
                 XLSUM,XLSVM,XLSWM,                        &
-                XLSTHM,XLSRVM,                            &
+                XLSTHM,XLSRVM,XLSZWSM,                    &
                 XLBXUM,XLBXVM,XLBXWM,                     &
                 XLBXTHM,XLBXRM,XLBXTKEM,XLBXSVM,          &
                 XLBYUM,XLBYVM,XLBYWM,                     &
@@ -2060,7 +2071,7 @@ XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU
 !
 IF (GCLOSE_OUT) THEN
   GCLOSE_OUT=.FALSE.
-  CALL IO_FILE_CLOSE_ll(TZBAKFILE)
+  CALL IO_File_close(TZBAKFILE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -2096,17 +2107,17 @@ IF (OEXIT) THEN
     CALL WRITE_LES_n(TDIAFILE,'E')
     CALL WRITE_LES_n(TDIAFILE,'H')
     CALL MENU_DIACHRO(TDIAFILE,'END')
-    CALL IO_FILE_CLOSE_ll(TDIAFILE)
+    CALL IO_File_close(TDIAFILE)
   END IF
   !
-  CALL IO_FILE_CLOSE_ll(TINIFILE)
-  IF (CSURF=="EXTE") CALL IO_FILE_CLOSE_ll(TINIFILEPGD,OPARALLELIO=.FALSE.)
+  CALL IO_File_close(TINIFILE)
+  IF (CSURF=="EXTE") CALL IO_File_close(TINIFILEPGD)
 !
 !*       28.1   print statistics!
 !
   ! Set File Timing OUTPUT
   !
-  CALL SET_ILUOUT_TIMING(ILUOUT)
+  CALL SET_ILUOUT_TIMING(TLUOUT)
   !
   ! Compute global time
   !
@@ -2215,8 +2226,8 @@ IF (OEXIT) THEN
   !
   !
   !
-  CALL IO_FILE_CLOSE_ll(TLUOUT)
-  IF (IMI==NMODEL) CALL IO_FILE_CLOSE_ll(TLUOUT0)
+  CALL IO_File_close(TLUOUT)
+  IF (IMI==NMODEL) CALL IO_File_close(TLUOUT0)
 END IF
 !
 END SUBROUTINE MODEL_n
diff --git a/src/MNH/modn_salt.f90 b/src/MNH/modn_salt.f90
index 92fa8499839e57ba36cd792c698c10913e1fc6f1..0b7e674471ace04ac31394ff115436386cd9c2c8 100644
--- a/src/MNH/modn_salt.f90
+++ b/src/MNH/modn_salt.f90
@@ -25,6 +25,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!    Original 24/02/05
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -38,6 +39,6 @@ IMPLICIT NONE
 !
 NAMELIST /NAM_SALT/ LSALT, CRGUNITS, LVARSIG_SLT,LSEDIMSALT,XN0MIN_SLT, XINIRADIUS_SLT, &
                XINISIG_SLT, XSIGMIN_SLT, XSIGMAX_SLT, XCOEFRADMAX_SLT, XCOEFRADMIN_SLT, &
-               NMODE_SLT, LRGFIX_SLT, LDEPOS_SLT
+               NMODE_SLT, LRGFIX_SLT, LDEPOS_SLT, LONLY
 !
 END MODULE MODN_SALT
diff --git a/src/MNH/modules_diachro.f90 b/src/MNH/modules_diachro.f90
index 2dd05edff0955fec0d485e7d31f6043a86691ec9..75fafa132219d983fa372f4ae47eb849c86a4d92 100644
--- a/src/MNH/modules_diachro.f90
+++ b/src/MNH/modules_diachro.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
@@ -13,7 +13,7 @@
 INTERFACE
 !
 SUBROUTINE MENU_DIACHRO(TPDIAFILE,HGROUP)
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE    ! file to write
 CHARACTER(LEN=*), INTENT(IN) :: HGROUP
@@ -31,7 +31,7 @@ END MODULE MODI_MENU_DIACHRO
 INTERFACE
 !
 SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(TPFILE)
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 TYPE(TFILEDATA),INTENT(IN) :: TPFILE
 END SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n
 !
@@ -49,7 +49,7 @@ SUBROUTINE WRITE_DIACHRO(TPDIAFILE,TPLUOUTDIA,HGROUP,HTYPE,          &
       HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH, &
       PTRAJX,PTRAJY,PTRAJZ,PMASK)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),              INTENT(IN)          :: TPDIAFILE    ! file to write
 TYPE(TFILEDATA),              INTENT(IN)          :: TPLUOUTDIA
diff --git a/src/MNH/one_wayn.f90 b/src/MNH/one_wayn.f90
index 0490f8fd1ea6f988b1efd0d1c37c8483841e805c..05532ca21cc52e30ba2ef6be4633a2760a93b08d 100644
--- a/src/MNH/one_wayn.f90
+++ b/src/MNH/one_wayn.f90
@@ -1,6 +1,6 @@
 !MNH_LIC Copyright 1996-2018 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.
 !-----------------------------------------------------------------
 !     ###################
@@ -187,12 +187,14 @@ SUBROUTINE ONE_WAY_n(KDAD,PTSTEP,KMI,KTCOUNT,                            &
 !!      J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
 !            ------------
 USE MODE_ll
 USE MODE_MODELN_HANDLER
+use mode_msg
 !
 USE MODD_PARAMETERS
 USE MODD_NESTING
@@ -493,7 +495,8 @@ IF (HCLOUD=="LIMA"  ) THEN
               &ZTSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI)
       ENDDO   
    ELSE
-      IF (NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)) CALL ABORT
+      IF ( NSV_LIMA_A(KMI) /= NSV_LIMA_A(KDAD) ) &
+        call Print_msg( NVERB_FATAL, 'GEN', 'ONE_WAY_n', 'NSV_LIMA_A(KMI)/=NSV_LIMA_A(KDAD)' )
       DO JSV=1,NSV_LIMA_A(KMI)
          CALL SET_LSFIELD_1WAY_ll(XSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KDAD)),&
               &ZTSVT(:,:,:,JSV-1+NSV_LIMA_BEG_A(KMI)),KMI)
diff --git a/src/MNH/open_file_mnh.f90 b/src/MNH/open_file_mnh.f90
index 8762e066e0bc845d259094d4816be3bafaf64ed9..4a0539ec772fb74d53f83a4b3fdb4eced29379eb 100644
--- a/src/MNH/open_file_mnh.f90
+++ b/src/MNH/open_file_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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.
 !-----------------------------------------------------------------
 !     #########################
@@ -59,8 +59,8 @@ END MODULE MODI_OPEN_FILE_MNH
 !
 USE MODD_IO_NAM,           ONLY: TFILE
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -84,10 +84,10 @@ INTEGER :: IRESP
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_FILE_MNH','called for '//TRIM(HFILE))
 !
-CALL IO_FILE_ADD2LIST(TFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, &
+CALL IO_File_add2list(TFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, &
                       HFORM=HFORM,HACCESS=HACCESS,KRECL=KRECL,  &
                       OOLD=.TRUE.) !OOLD=T because the file may already be in list
-CALL IO_FILE_OPEN_ll(TFILE)
+CALL IO_File_open(TFILE)
 !
 KUNIT = TFILE%NLU
 !
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index 9147b1635082815d66fee3ccca51a17faa8caacb..d331134d68ce797a6112596032f6fe6448b3b1e8 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.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.
 !-----------------------------------------------------------------
 !#############################
@@ -10,7 +10,7 @@ MODULE MODI_OPEN_NESTPGD_FILES
 INTERFACE
       SUBROUTINE OPEN_NESTPGD_FILES(TPFILEPGD,TPFILENESTPGD)
 !
-USE MODD_IO_ll, ONLY : TPTR2FILE
+USE MODD_IO, ONLY : TPTR2FILE
 !
 TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,       INTENT(OUT) :: TPFILEPGD     ! Input  PGD files
 TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,TARGET,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files
@@ -41,7 +41,7 @@ END MODULE MODI_OPEN_NESTPGD_FILES
 !!    ------------------
 !!
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0  : name of output-listing
+!!         TLUOUT0  : output-listing
 !!
 !!    REFERENCE
 !!    ---------
@@ -67,31 +67,32 @@ END MODULE MODI_OPEN_NESTPGD_FILES
 !!                   J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!    P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!  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
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_CONF
+USE MODD_CONF,             ONLY: NHALO_CONF_MNH => NHALO
+USE MODD_IO,               ONLY: TFILE_OUTPUTLISTING, TFILEDATA, TPTR2FILE
 USE MODD_LUNIT
 USE MODD_LUNIT_n
-USE MODD_CONF
 USE MODD_NESTING
 USE MODD_PARAMETERS
-USE MODD_IO_ll, ONLY : TFILE_OUTPUTLISTING,TFILEDATA,TPTR2FILE
-!
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_FM,               ONLY : IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
-USE MODE_POS
-USE MODE_MSG
 !
+USE MODE_IO,               ONLY: IO_Config_set
+USE MODE_IO_FILE,          ONLY: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MODELN_HANDLER
-!
-USE MODD_PARAMETERS, ONLY : JPHEXT  
-USE MODD_CONF, ONLY       : NHALO_CONF_MNH => NHALO
+USE MODE_MSG
+USE MODE_POS
 !
 USE MODN_CONFZ
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
 !
 IMPLICIT NONE
 !
@@ -149,15 +150,14 @@ TZPRE_NEST_PGD => NULL()
 !              -----------------
 !
 HPRE_NEST_PGD='PRE_NEST_PGD1.nam'
-CLUOUT0='OUTPUT_LISTING0'
 !
 !-------------------------------------------------------------------------------
 !
-!*       2.    OPENNING OF CLUOUT0
-!              -------------------
+!*       2.    OPENING OF TLUOUT0
+!              ------------------
 !
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT0
 !
@@ -168,8 +168,8 @@ ILUOUT0=TLUOUT0%NLU
 !*       3.    OPENNING OF PRE_NEST_PGD1.nam
 !              -----------------------------
 !
-CALL IO_FILE_ADD2LIST(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
-CALL IO_FILE_OPEN_ll(TZPRE_NEST_PGD)
+CALL IO_File_add2list(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
+CALL IO_File_open(TZPRE_NEST_PGD)
 IPRE_NEST_PGD = TZPRE_NEST_PGD%NLU
 !reading of NAM_CONFZ
 CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFZ',GFOUND)
@@ -282,8 +282,8 @@ END DO
 !
 DO JPGD=1,NMODEL
   WRITE(YLUOUT,'("OUTPUT_LISTING",I0)') JPGD
-  CALL IO_FILE_ADD2LIST(LUNIT_MODEL(JPGD)%TLUOUT,YLUOUT,'OUTPUTLISTING','WRITE')
-  CALL IO_FILE_OPEN_ll(LUNIT_MODEL(JPGD)%TLUOUT)
+  CALL IO_File_add2list(LUNIT_MODEL(JPGD)%TLUOUT,YLUOUT,'OUTPUTLISTING','WRITE')
+  CALL IO_File_open(LUNIT_MODEL(JPGD)%TLUOUT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -296,26 +296,26 @@ IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_NEST_PGD)
 !
 CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
 ALLOCATE(TPFILEPGD    (NMODEL))
 ALLOCATE(TPFILENESTPGD(NMODEL))
 !
 DO JPGD=1,NMODEL
-  CALL IO_FILE_ADD2LIST(TPFILEPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD)),'PREPPGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_add2list(TPFILEPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD)),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
   !
   IF (NDAD(JPGD)>=1) THEN
     TZDADFILE => TPFILENESTPGD(NDAD(JPGD))%TZFILE
-    CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PREPNESTPGD', &
+    CALL IO_File_add2list(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PGD', &
                           'WRITE',KLFITYPE=1,KLFIVERB=NVERB,KMODEL=JPGD,TPDADFILE=TZDADFILE)
   ELSE
     NULLIFY(TZDADFILE)
-    CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PREPNESTPGD', &
+    CALL IO_File_add2list(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PGD', &
                           'WRITE',KLFITYPE=1,KLFIVERB=NVERB,KMODEL=JPGD)
   END IF
 END DO
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD)
+CALL IO_File_close(TZPRE_NEST_PGD)
 !-------------------------------------------------------------------------------
 !
 !*       7.    OPENING OF INPUT PGD FILES
@@ -324,7 +324,7 @@ CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD)
 !Remark: output PGD files are opened later when the mesh dimensions are known
 !
 DO JPGD=1,NMODEL
-  CALL IO_FILE_OPEN_ll(TPFILEPGD(JPGD)    %TZFILE,OPARALLELIO=.FALSE.)
+  CALL IO_File_open(TPFILEPGD(JPGD)%TZFILE)
 END DO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90
index 5f60cc3da7a6f7176fabc61d3b90fd2167da83e8..bb02f6951579522024fcc1b29da9240a08de5a83 100644
--- a/src/MNH/open_prc_files.f90
+++ b/src/MNH/open_prc_files.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -13,7 +13,7 @@ INTERFACE
                                                 HSURFFILE,HSURFFILETYPE, &
                                                 HPGDFILE,TPPGDFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPRE_REAL1FILE ! PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
@@ -43,7 +43,7 @@ END MODULE MODI_OPEN_PRC_FILES
 !!    PURPOSE
 !!    -------
 !!
-!!    This routine set the default name of CLUOUT0
+!!    This routine creates TLUOUT0
 !!    This routine read in 'PRE_REAL1.nam' the names of the files used in
 !!    PREP_REAL_CASE: Aladin or Mesonh input file, physiographic data file,
 !!    output listing file and MESO-NH output file.
@@ -65,7 +65,7 @@ END MODULE MODI_OPEN_PRC_FILES
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB    : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0  : name of output-listing
+!!         TLUOUT0  : output-listing
 !!      Module MODD_LUNIT1    :
 !!         CINIFILE : name of MESO-NH file
 !!
@@ -90,6 +90,11 @@ END MODULE MODI_OPEN_PRC_FILES
 !!      J.ESCOBAR    12/11/2008  Improve checking --> add STATUS=OLD in open_ll(PRE_REAL1.nam,...
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      P. Wautelet  01/02/2019 added missing initialization to NULL for files with OUT intent
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -100,16 +105,16 @@ USE MODD_CONF_n
 !JUAN Z_SPLITTING
 !USE MODD_CONFZ
 !JUAN Z_SPLITTING
-USE MODD_IO_ll, ONLY: TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_IO,               ONLY: TFILE_OUTPUTLISTING, TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n, CINIFILE_n=>CINIFILE , CINIFILEPGD_n=>CINIFILEPGD
 !
 !
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_POS
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_IO,               only: IO_Config_set
+USE MODE_IO_FILE,          only: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MSG
+USE MODE_POS
 !
 USE MODN_CONFIO, ONLY : NAM_CONFIO
 !JUAN Z_SPLITTING
@@ -160,16 +165,14 @@ HCHEMFILE='                            '
 HCHEMFILETYPE='MESONH'
 HSURFFILE='                            '
 HSURFFILETYPE='MESONH'
-CLUOUT0   ='OUTPUT_LISTING0             '
-CLUOUT = CLUOUT0
 !
 !-------------------------------------------------------------------------------
 !
 !*       2.    OPENNING OF THE OUTPUT LISTING FILE
 !              -----------------------------------
 !
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT0
 !
@@ -181,8 +184,9 @@ IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
 !*       3.    OPENNING OF PRE_REAL1.nam
 !              -------------------------
 !
-CALL IO_FILE_ADD2LIST(TPPRE_REAL1FILE,'PRE_REAL1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TPPRE_REAL1FILE,KRESP=IRESP)
+TPPRE_REAL1FILE => NULL()
+CALL IO_File_add2list(TPPRE_REAL1FILE,'PRE_REAL1.nam','NML','READ')
+CALL IO_File_open(TPPRE_REAL1FILE,KRESP=IRESP)
 IPRE_REAL1=TPPRE_REAL1FILE%NLU
 IF (IRESP.NE.0 ) THEN
    !callabortstop
@@ -200,7 +204,7 @@ IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
 !JUANZ
 CALL POSNAM(IPRE_REAL1,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
 CINIFILE = CINIFILE_n
 CALL POSNAM(IPRE_REAL1,'NAM_FILE_NAMES',GFOUND,ILUOUT0)
@@ -266,8 +270,9 @@ ELSE
 !*       5.    OPENING THE PHYSIOGRAPHIC DATA FILE
 !              -----------------------------------
 !
-  CALL IO_FILE_ADD2LIST(TPPGDFILE,TRIM(HPGDFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TPPGDFILE,IRESP,OPARALLELIO=.FALSE.)
+  TPPGDFILE => NULL()
+  CALL IO_File_add2list(TPPGDFILE,TRIM(HPGDFILE),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TPPGDFILE,IRESP)
   IF (IRESP/=0) THEN
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES',' problem during opening of PGD file '//TRIM(HPGDFILE))
diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90
index 4cab8bd6bad52d2b3b7d0d878eb0dd6d2cea6553..1fee61de9e295ec065f9a1c75d76538a32cd60b3 100644
--- a/src/MNH/paspol.f90
+++ b/src/MNH/paspol.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######spl
      MODULE MODI_PASPOL
 !    ################## 
@@ -10,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE PASPOL (PTSTEP, PSFSV, KLUOUT, KVERB, OCLOSE_OUT, TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -67,7 +68,7 @@ END MODULE MODI_PASPOL
 USE MODD_PARAMETERS
 USE MODD_NSV
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_GRIDPROJ
 USE MODD_PASPOL
 USE MODD_CTURB
@@ -75,9 +76,8 @@ USE MODI_SHUMAN
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_GRADIENT_M
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FM
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_DYN_n
 USE MODD_CONF
@@ -591,7 +591,7 @@ IF (OCLOSE_OUT) THEN
     TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
     !
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTEMPO)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTEMPO)
   END DO
   !
   DEALLOCATE(ZTEMPO)
diff --git a/src/MNH/pgd_grid_io_init_mnh.f90 b/src/MNH/pgd_grid_io_init_mnh.f90
index e7e416226daa15be3122ec92d1c6acc59447db22..202333f7ded0b2ddc6fc8b3b8b5bfe14500e3c32 100644
--- a/src/MNH/pgd_grid_io_init_mnh.f90
+++ b/src/MNH/pgd_grid_io_init_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
 !-----------------------------------------------------------------
 !#######################
@@ -59,19 +59,6 @@ MODULE MODI_PGD_GRID_IO_INIT_MNH
     !
     USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
     !
-    USE MODE_ll
-    USE MODE_FM
-    USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-    USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
-    !
-    USE MODE_IO_ll
-    !JUANZ
-    USE MODE_SPLITTINGZ_ll
-    !JUANZ
-    !
-    USE MODI_GET_SURF_GRID_DIM_N
-    USE MODI_GET_LUOUT
-    !
     IMPLICIT NONE
     !
     !*    0.1    Declaration of dummy arguments
@@ -140,22 +127,19 @@ END MODULE MODI_PGD_GRID_IO_INIT_MNH
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
+USE MODD_CONF,            ONLY: CPROGRAM, L1D, L2D, LPACK
+USE MODD_DIM_n,           ONLY: NIMAX_ll, NJMAX_ll, NKMAX
+USE MODD_MNH_SURFEX_n
+USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT, JPMODELMAX
+USE MODD_SURF_ATM_GRID_n, ONLY: SURF_ATM_GRID_t
 !
+USE MODE_IO,              only: IO_Pack_set
 USE MODE_ll
-USE MODE_FM
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
-USE MODD_DIM_n,      ONLY : NIMAX_ll, NJMAX_ll, NKMAX
-!
-!JUANZ
 USE MODE_SPLITTINGZ_ll
-!JUANZ
 !
 USE MODI_GET_SURF_GRID_DIM_N
 USE MODI_GET_LUOUT
 !
-USE MODD_MNH_SURFEX_n
 !
 IMPLICIT NONE
 !
@@ -227,7 +211,7 @@ END IF
 L1D=(IIMAX==1).AND.(IJMAX==1)
 L2D=(IIMAX/=1).AND.(IJMAX==1)
 LPACK=L1D.OR.L2D
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 NIMAX_ll = IIMAX
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 106ec1623adf6772a63f57eca3e0692aacce497d..a722563f12d687a12b26e24453a9b0e8be2c21a8 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -1,9 +1,10 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_PHYS_PARAM_n  
+     MODULE MODI_PHYS_PARAM_n
 !    ########################
 !
 !
@@ -13,18 +14,17 @@ INTERFACE
                               PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER,       &
                               PTIME_BU, PWETDEPAER, OMASKkids,OCLOUD_ONLY                  )           
 !
-USE MODD_IO_ll, 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
@@ -230,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
@@ -239,8 +240,6 @@ END MODULE MODI_PHYS_PARAM_n
 !    
 USE MODE_DATETIME
 USE MODE_ll
-USE MODE_FM
-USE MODE_FMWRIT
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 !
 USE MODD_BLANK
@@ -248,7 +247,7 @@ USE MODD_CST
 USE MODD_DYN
 USE MODD_CONF
 USE MODD_FRC
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_GRID
 USE MODD_NSV
@@ -293,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
@@ -303,7 +303,6 @@ USE MODI_CONVECTION
 USE MODI_BUDGET
 USE MODI_PASPOL
 USE MODI_CONDSAMP
-USE MODE_FM
 USE MODE_MODELN_HANDLER
 USE MODI_SEDIM_DUST
 USE MODI_SEDIM_SALT
@@ -347,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
@@ -403,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
@@ -454,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/ppm.f90 b/src/MNH/ppm.f90
index 26939e2db02ea860faff58229d26b8ab9cdab55c..2cf8d3c6c3d040f61fd55ce5b6283947a834c776 100644
--- a/src/MNH/ppm.f90
+++ b/src/MNH/ppm.f90
@@ -426,7 +426,6 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
@@ -1108,7 +1107,6 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
@@ -2229,7 +2227,6 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
@@ -2246,7 +2243,7 @@ USE MODD_PARAMETERS, ONLY : JPHEXT
 !
 USE MODE_MNH_ZWORK, ONLY : IIB,IIE, IIU,IJU,IKU , IJS,IJN, GWEST,GEAST
 !
-USE MODD_IO_ll,   ONLY : GSMONOPROC
+USE MODD_IO,   ONLY : GSMONOPROC
 #endif
 USE MODE_MPPDB
 !
@@ -2647,7 +2644,6 @@ CONTAINS
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
@@ -2663,7 +2659,7 @@ USE MODD_PARAMETERS, ONLY : JPHEXT
 !
 USE MODE_MNH_ZWORK, ONLY : IJB,IJE, IIU,IJU,IKU , IIW,IIA, GSOUTH , GNORTH
 !
-USE MODD_IO_ll,   ONLY : GSMONOPROC
+USE MODD_IO,   ONLY : GSMONOPROC
 #endif
 USE MODE_MPPDB
 !
@@ -3320,7 +3316,6 @@ CALL ABORT
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
@@ -3666,7 +3661,6 @@ CALL ABORT
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
diff --git a/src/MNH/prandtl.f90 b/src/MNH/prandtl.f90
index 0fa552a969fd2ec67e3382595bcc1c8bf4553729..91602892b3e70094823766e54d2c7d3ea0bc082c 100644
--- a/src/MNH/prandtl.f90
+++ b/src/MNH/prandtl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ###################
@@ -22,7 +22,7 @@ INTERFACE
                          PETHETA, PEMOIST                      )
 !
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -203,23 +203,23 @@ END MODULE MODI_PRANDTL
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
-USE MODI_GRADIENT_M
+#ifdef MNH_BITREP
+USE MODI_BITREP
+#endif
 USE MODI_EMOIST
 USE MODI_ETHETA
+USE MODI_GRADIENT_M
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
 USE MODI_SHUMAN_DEVICE
 #endif
-USE MODE_FMWRIT
-#ifdef MNH_BITREP
-USE MODI_BITREP
-#endif
 !
 IMPLICIT NONE
 !
@@ -963,7 +963,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PREDTH1)
+  CALL IO_Field_write(TPFILE,TZFIELD,PREDTH1)
   !
   ! stores the RED_R1
   TZFIELD%CMNHNAME   = 'RED_R1'
@@ -976,7 +976,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PREDR1)
+  CALL IO_Field_write(TPFILE,TZFIELD,PREDR1)
   !
   ! stores the RED2_TH3
   TZFIELD%CMNHNAME   = 'RED2_TH3'
@@ -989,7 +989,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRED2TH3)
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2TH3)
   !
   ! stores the RED2_R3
   TZFIELD%CMNHNAME   = 'RED2_R3'
@@ -1002,7 +1002,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRED2R3)
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2R3)
   !
   ! stores the RED2_THR3
   TZFIELD%CMNHNAME   = 'RED2_THR3'
@@ -1015,7 +1015,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRED2THR3)
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2THR3)
   !
 END IF
 !
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index eb97a9091e0451dfe0243d9b393270257c01b9f6..b5aba7c9534ab6f71a48987110735d6947f14f3e 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -171,10 +171,10 @@
 !!      SET_REF       : to compute  rhoJ 
 !!      RESSURE_IN_PREP : to apply an anelastic correction in the case of
 !!                        non-vanishing orography 
-!!      IO_FILE_OPEN_ll : to open a FM-file (DESFM + LFIFM)
+!!      IO_File_open : to open a FM-file (DESFM + LFIFM)
 !!      WRITE_DESFM   : to write the  DESFM file
 !!      WRI_LFIFM     : to write the   LFIFM file  
-!!      IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM)
+!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
 !!
 !!      MXM,MYM,MZM   : Shuman operators
 !!      WGUESS        : to compute W with the continuity equation from 
@@ -310,7 +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
@@ -321,7 +325,7 @@ USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_DIM_n
 USE MODD_CONF
 USE MODD_CST
-USE MODD_GRID         
+USE MODD_GRID
 USE MODD_GRID_n
 USE MODD_METRICS_n
 USE MODD_PGDDIM
@@ -345,10 +349,11 @@ USE MODD_SALT,      ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_S
 USE MODD_VAR_ll,    ONLY:  NPROC
 USE MODD_LUNIT,     ONLY:  TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n
-USE MODD_IO_ll,     ONLY: NIO_VERB,NVERB_DEBUG,TFILE_DUMMY,TFILE_OUTPUTLISTING
+USE MODD_IO,        ONLY: NIO_VERB, NVERB_DEBUG, TFILE_DUMMY, TFILE_OUTPUTLISTING
 USE MODD_CONF_n
 USE MODD_NSV,      ONLY : NSV,NSV_CHEM,           &
                           NSV_DSTEND, NSV_DSTBEG
+use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME
 !
 USE MODN_BLANK
 !
@@ -356,11 +361,12 @@ USE MODE_THERMO
 USE MODE_POS
 USE MODE_GRIDCART         ! Executive modules
 USE MODE_GRIDPROJ
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_GATHER_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init, IO_Pack_set
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list,IO_Filelist_print
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_FIELD
@@ -419,11 +425,10 @@ USE MODI_SET_RELFRC
 !
 USE MODI_INI_CST
 USE MODI_INI_NEB
-USE MODE_FMWRIT
 USE MODI_WRITE_HGRID
 USE MODD_MPIF
 USE MODD_VAR_ll
-USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_SURFEX
+USE MODD_IO, ONLY: TFILEDATA,TFILE_SURFEX
 !
 USE MODE_MPPDB
 !
@@ -447,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
@@ -553,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                                 
@@ -615,14 +620,14 @@ CALL MPPDB_INIT()
 !
 CALL GOTO_MODEL(1)
 !
-CALL INITIO_ll()
+CALL IO_Init()
 NULLIFY(TZ_FIELDS_ll)
 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)
 !
@@ -663,17 +668,15 @@ CALL DEFAULT_EXPRE
 !              and open these files :
 ! 
 ! 
-CLUOUT  = 'OUTPUT_LISTING1'
-CLUOUT0 = CLUOUT
-CALL IO_FILE_ADD2LIST(TLUOUT0,CLUOUT0,'OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING1','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 NLUOUT = TLUOUT0%NLU
 !Set output files for PRINT_MSG
 TLUOUT              => TLUOUT0
 TFILE_OUTPUTLISTING => TLUOUT0
 !
-CALL IO_FILE_ADD2LIST(TZEXPREFILE,'PRE_IDEA1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZEXPREFILE)
+CALL IO_File_add2list(TZEXPREFILE,'PRE_IDEA1.nam','NML','READ')
+CALL IO_File_open(TZEXPREFILE)
 NLUPRE=TZEXPREFILE%NLU
 !
 !*       3.2   read in NLUPRE the namelist informations
@@ -691,7 +694,7 @@ IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFZ)
 !JUANZ
 CALL POSNAM(NLUPRE,'NAM_CONFIO',GFOUND,NLUOUT)
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 CALL POSNAM(NLUPRE,'NAM_GRID_PRE',GFOUND,NLUOUT)
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRID_PRE)
 CALL POSNAM(NLUPRE,'NAM_GRIDH_PRE',GFOUND,NLUOUT)
@@ -710,13 +713,13 @@ CALL INI_FIELD_SCALARS()
 !
 IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN 
   ! open the PGD_FILE
-  CALL IO_FILE_ADD2LIST(TPGDFILE,TRIM(CPGD_FILE),'UNKNOWN','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TPGDFILE)
+  CALL IO_File_add2list(TPGDFILE,TRIM(CPGD_FILE),'PGD','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TPGDFILE)
 
   ! read the grid in the PGD file
-  CALL IO_READ_FIELD(TPGDFILE,'IMAX',  NIMAX)
-  CALL IO_READ_FIELD(TPGDFILE,'JMAX',  NJMAX)
-  CALL IO_READ_FIELD(TPGDFILE,'JPHEXT',IJPHEXT)
+  CALL IO_Field_read(TPGDFILE,'IMAX',  NIMAX)
+  CALL IO_Field_read(TPGDFILE,'JMAX',  NJMAX)
+  CALL IO_Field_read(TPGDFILE,'JPHEXT',IJPHEXT)
 
   IF ( CPGD_FILE /= CINIFILEPGD) THEN
      WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you&
@@ -911,7 +914,7 @@ ENDIF
 CALL SET_JP_ll(1,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX)
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_LBX_ll(CLBCX(1), 1)
 CALL SET_LBY_ll(CLBCY(1), 1)
 CALL SET_XRATIO_ll(1, 1)
@@ -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.
@@ -1462,7 +1465,6 @@ END IF
 IF(LPV_PERT .AND. .NOT.(LGEOSBAL)) THEN
    !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','PREP_IDEAL_CASE','for PV inversion, LGEOSBAL has to be true')
-  STOP
 ENDIF
 !
 IF(LPV_PERT .AND. NPROC>1) THEN
@@ -1713,7 +1715,7 @@ END IF
 !  before calling chemistry
 CCONF = 'START'
 CSTORAGE_TYPE='TT'                  
-CALL IO_FILE_CLOSE_ll(TZEXPREFILE)  ! Close the EXPRE file
+CALL IO_File_close(TZEXPREFILE)  ! Close the EXPRE file
 !
 IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB)
 !
@@ -1730,11 +1732,11 @@ NNPRAR = 22 + 2*(NRR+NSV)   &    ! 22 = number of grid variables + reference
                                  ! variables at time t and t-dt
 NTYPE=1
 !
-CALL IO_FILE_ADD2LIST(TINIFILE,TRIM(CINIFILE),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
+CALL IO_File_add2list(TINIFILE,TRIM(CINIFILE),'MNH','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
 !
-CALL IO_FILE_OPEN_ll(TINIFILE)
+CALL IO_File_open(TINIFILE)
 !
-CALL IO_WRITE_HEADER(TINIFILE)
+CALL IO_Header_write(TINIFILE)
 !
 CALL WRITE_DESFM_n(1,TINIFILE)
 !
@@ -1770,8 +1772,8 @@ IF (CSURF =='EXTE') THEN
     TPGDFILE => TINIFILE
     CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.,HDIR='-')
     CALL PGD_SURF_ATM     (YSURF_CUR,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.)
-    CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'PREPIDEALCASE','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
-    CALL IO_FILE_OPEN_ll (TINIFILEPGD)
+    CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
+    CALL IO_File_open (TINIFILEPGD)
     TPGDFILE => TINIFILEPGD
   ELSE
   ! ... or read from file.
@@ -1790,12 +1792,12 @@ IF (CSURF =='EXTE') THEN
     !* writing of physiographic fields in the file
     CSTORAGE_TYPE='PG'
     !
-    CALL IO_WRITE_HEADER(TINIFILEPGD)
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'JPHEXT', JPHEXT)    
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'SURF','EXTE')
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'L1D', L1D)
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'L2D', L2D)
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'PACK',LPACK)
+    CALL IO_Header_write(TINIFILEPGD)
+    CALL IO_Field_write(TINIFILEPGD,'JPHEXT', JPHEXT)    
+    CALL IO_Field_write(TINIFILEPGD,'SURF','EXTE')
+    CALL IO_Field_write(TINIFILEPGD,'L1D', L1D)
+    CALL IO_Field_write(TINIFILEPGD,'L2D', L2D)
+    CALL IO_Field_write(TINIFILEPGD,'PACK',LPACK)
     CALL WRITE_HGRID(1,TINIFILEPGD)
     !
     TOUTDATAFILE => TINIFILEPGD
@@ -1825,11 +1827,11 @@ END IF
 !             ---------------
 !
 IF (CSURF =='EXTE' .AND. (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM)) THEN
-  CALL IO_FILE_CLOSE_ll(TINIFILEPGD)
+  CALL IO_File_close(TINIFILEPGD)
 ENDIF
-CALL IO_FILE_CLOSE_ll(TINIFILE)
+CALL IO_File_close(TINIFILE)
 IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN
-  CALL IO_FILE_CLOSE_ll(TPGDFILE)
+  CALL IO_File_close(TPGDFILE)
 ENDIF
 !
 !
@@ -1873,7 +1875,7 @@ END IF
   !
   ! Set File Timing OUTPUT
   !
-  CALL SET_ILUOUT_TIMING(NLUOUT)
+  CALL SET_ILUOUT_TIMING(TLUOUT0)
   !
   ! Compute global time
   !
@@ -1896,15 +1898,10 @@ WRITE(NLUOUT,FMT=*) '****************************************************'
 WRITE(NLUOUT,FMT=*) '* PREP_IDEAL_CASE: PREP_IDEAL_CASE ENDS CORRECTLY. *'
 WRITE(NLUOUT,FMT=*) '****************************************************'
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TLUOUT)
 !
 CALL END_PARA_ll(IINFO_ll)
 !
-! 
-   !callabortstop
-   !JUAN CALL ABORT
-STOP
-!
 END PROGRAM PREP_IDEAL_CASE
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index 7d9b2ae94b5d9c9eeb16d51f21d454599091d104..5b5a884f455416e1d7fd51e9ffc8677a7fc92f67 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     #####################
@@ -91,6 +91,7 @@
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!      P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!  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
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -100,7 +101,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_DIM_n
-USE MODD_IO_ll,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
+USE MODD_IO,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
 USE MODD_GRID_n,           ONLY: XZSMT
 USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
@@ -109,11 +110,11 @@ USE MODD_PARAMETERS
 USE MODD_VAR_ll,           ONLY: NPROC, IP, NMNH_COMM_WORLD
 !
 USE MODE_FIELD,            ONLY: INI_FIELD_LIST
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Init, IO_Pack_set
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_ll
 USE MODE_MNH_WORLD,        ONLY: INIT_NMNH_COMM_WORLD
 USE MODE_MODELN_HANDLER
@@ -167,7 +168,7 @@ CALL MPPDB_INIT()
 CALL VERSION
 CPROGRAM='NESPGD'
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !!$CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 !
 !*       1.    INITIALIZATION OF PHYSICAL CONSTANTS
@@ -201,14 +202,14 @@ CALL INI_FIELD_LIST()
 CALL SET_DAD0_ll()
 DO JPGD=1,NMODEL
   ! read and set dimensions and ratios of model JPGD
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'IMAX',   IIMAX)
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'JMAX',   IJMAX)
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'XSIZE',  NXSIZE(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'YSIZE',  NYSIZE(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'IMAX',   IIMAX)
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'JMAX',   IJMAX)
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'XSIZE',  NXSIZE(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'YSIZE',  NYSIZE(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
   CALL SET_DIM_ll(IIMAX, IJMAX, 1)
   ! compute origin and end of local subdomain of model JPGD
   ! initialize variables from MODD_NESTING, origin and end of global model JPGD in coordinates of its father
@@ -245,10 +246,10 @@ DO JPGD=1,NMODEL
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
   CALL GOTO_SURFEX(JPGD)
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'L1D', L1D_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'L2D', L2D_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'PACK',LPACK_ALL(JPGD))
-  CALL SET_FMPACK_ll(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'L1D', L1D_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'L2D', L2D_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'PACK',LPACK_ALL(JPGD))
+  CALL IO_Pack_set(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD))
   CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%TZFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE)
   CSTORAGE_TYPE='PG'
 END DO
@@ -334,12 +335,12 @@ DO JPGD=1,NMODEL
   TOUTDATAFILE => TZFILENESTPGD(JPGD)%TZFILE
   CALL GOTO_MODEL(JPGD)
   !Open done here because grid dimensions have to be known
-  CALL IO_FILE_OPEN_ll(TZFILENESTPGD(JPGD)%TZFILE,OPARALLELIO=.FALSE.)
+  CALL IO_File_open(TZFILENESTPGD(JPGD)%TZFILE)
   CALL GOTO_SURFEX(JPGD)
   TFILE_SURFEX => TZFILENESTPGD(JPGD)%TZFILE
   CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
   NULLIFY(TFILE_SURFEX)
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'ZSMT',XZSMT)
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'ZSMT',XZSMT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -349,18 +350,18 @@ END DO
 !
 !
 DO JPGD=1,NMODEL
-  CALL IO_WRITE_HEADER(TZFILENESTPGD(JPGD)%TZFILE)
+  CALL IO_Header_write(TZFILENESTPGD(JPGD)%TZFILE)
   IF ( ASSOCIATED(TZFILENESTPGD(JPGD)%TZFILE%TDADFILE) ) THEN
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
   END IF
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'SURF',  'EXTE')
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'L1D',   L1D_ALL(JPGD))
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'L2D',   L2D_ALL(JPGD))
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'PACK',  LPACK_ALL(JPGD))
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'JPHEXT',JPHEXT)
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'SURF',  'EXTE')
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'L1D',   L1D_ALL(JPGD))
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'L2D',   L2D_ALL(JPGD))
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'PACK',  LPACK_ALL(JPGD))
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'JPHEXT',JPHEXT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -369,8 +370,8 @@ END DO
 !              --------------------
 !
 DO JPGD=1,NMODEL
-  CALL IO_FILE_CLOSE_ll(TZFILEPGD(JPGD)%TZFILE,    OPARALLELIO=.FALSE.)
-  CALL IO_FILE_CLOSE_ll(TZFILENESTPGD(JPGD)%TZFILE,OPARALLELIO=.FALSE.)
+  CALL IO_File_close(TZFILEPGD(JPGD)%TZFILE)
+  CALL IO_File_close(TZFILENESTPGD(JPGD)%TZFILE)
 END DO
 !
 !* loop to spare enough time to transfer commands before end of program
@@ -383,14 +384,14 @@ END DO
 !*      12.    EPILOGUE
 !              --------
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 WRITE(ILUOUT0,FMT=*)
 WRITE(ILUOUT0,FMT=*) '************************************************'
 WRITE(ILUOUT0,FMT=*) '* PREP_NEST_PGD: PREP_NEST_PGD ends correctly. *'
 WRITE(ILUOUT0,FMT=*) '************************************************'
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index d7b5899bc4db7c5bfbe2970a1531c02c9b30e40c..86b375631f93207762fa91052e5412c6c11d7679 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
+!-----------------------------------------------------------------
 !     ################
       PROGRAM PREP_PGD
 !     ################
@@ -73,7 +74,11 @@
 !!  01/2018      (G.Delautier) SURFEX 8.1
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  Q. Rodier 01/2019 : add a new filtering for very high slopes in NAM_ZSFILTER
-!! 
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
@@ -81,21 +86,22 @@
 !
 USE MODD_CONF,   ONLY : CPROGRAM, L1D, L2D, LPACK, LCARTESIAN
 USE MODD_CONF_n,ONLY : CSTORAGE_TYPE
-USE MODD_LUNIT,  ONLY : CLUOUT0,TLUOUT0
+USE MODD_LUNIT,  ONLY : TLUOUT0
 USE MODD_LUNIT_n,ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS, ONLY : XUNDEF
-USE MODD_IO_ll,   ONLY : NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX
+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
 !
-USE MODE_POS
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_FIELD
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
-USE MODE_FIELD
+USE MODE_POS
 !
 USE MODI_ZSMT_PGD
 !
@@ -159,13 +165,12 @@ CPROGRAM='PGD   '
 !*    1.      Set default names and parallelized I/O
 !             --------------------------------------
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 NHALO=15
 !
-CLUOUT0='OUTPUT_LISTING0'                    ! Name of the output-listing.
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 !
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT0
@@ -174,8 +179,8 @@ LUNIT_MODEL(1)%TLUOUT => TLUOUT0
 ILUOUT0=TLUOUT0%NLU
 !
 !JUAN
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_PGD1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE,KRESP=IRESP)
+CALL IO_File_add2list(TZNMLFILE,'PRE_PGD1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE,KRESP=IRESP)
 ILUNAM = TZNMLFILE%NLU
 IF (IRESP.NE.0 ) THEN
   WRITE(YMSG,*) 'file PRE_PGD1.nam not found, IRESP=', IRESP
@@ -202,9 +207,9 @@ ENDIF
 !JUANZ
 CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 !
 CALL SURFEX_ALLOC_LIST(1)
@@ -244,16 +249,16 @@ CALL PGD_SURF_ATM(YSURF_CUR,'MESONH','                            ','      ',.FA
 !*    3.      Writes the physiographic fields
 !             -------------------------------
 !
-CALL IO_FILE_ADD2LIST(TZFILE,CPGDFILE,'PREPPGD','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_ll(TZFILE,OPARALLELIO=.FALSE.)
+CALL IO_File_open(TZFILE)
 !
-CALL IO_WRITE_HEADER(TZFILE)
+CALL IO_Header_write(TZFILE)
 !
-CALL IO_WRITE_FIELD(TZFILE,'SURF','EXTE')
-CALL IO_WRITE_FIELD(TZFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TZFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TZFILE,'PACK',LPACK)
+CALL IO_Field_write(TZFILE,'SURF','EXTE')
+CALL IO_Field_write(TZFILE,'L1D', L1D)
+CALL IO_Field_write(TZFILE,'L2D', L2D)
+CALL IO_Field_write(TZFILE,'PACK',LPACK)
 IF ( NDXRATIO <= 0 .AND. NDYRATIO <= 0 ) THEN
   NDXRATIO = 1
   NDYRATIO = 1
@@ -266,13 +271,13 @@ IF ( NXOR <= 0 .AND. NYOR <= 0 ) THEN
   NXOR = 1
   NYOR = 1
 ENDIF
-CALL IO_WRITE_FIELD(TZFILE,'DXRATIO',NDXRATIO)
-CALL IO_WRITE_FIELD(TZFILE,'DYRATIO',NDYRATIO)
-CALL IO_WRITE_FIELD(TZFILE,'XSIZE',  NXSIZE)
-CALL IO_WRITE_FIELD(TZFILE,'YSIZE',  NYSIZE)
-CALL IO_WRITE_FIELD(TZFILE,'XOR',    NXOR)
-CALL IO_WRITE_FIELD(TZFILE,'YOR',    NYOR)
-CALL IO_WRITE_FIELD(TZFILE,'JPHEXT', JPHEXT)
+CALL IO_Field_write(TZFILE,'DXRATIO',NDXRATIO)
+CALL IO_Field_write(TZFILE,'DYRATIO',NDYRATIO)
+CALL IO_Field_write(TZFILE,'XSIZE',  NXSIZE)
+CALL IO_Field_write(TZFILE,'YSIZE',  NYSIZE)
+CALL IO_Field_write(TZFILE,'XOR',    NXOR)
+CALL IO_Field_write(TZFILE,'YOR',    NYOR)
+CALL IO_Field_write(TZFILE,'JPHEXT', JPHEXT)
 !
 TFILE_SURFEX => TZFILE
 ALLOCATE(YSURF_CUR%DUO%CSELECT(0))
@@ -309,8 +314,8 @@ IF (.NOT.LCARTESIAN) THEN
      ZWORK_LON(:,1) = ZWORK_LON(:,2)
      ZWORK_LON(:,IJMAX+2) = ZWORK_LON(:,IJMAX+1)           
    ENDIF   
-   CALL IO_WRITE_FIELD(TZFILE,'LAT',ZWORK_LAT)
-   CALL IO_WRITE_FIELD(TZFILE,'LON',ZWORK_LON)
+   CALL IO_Field_write(TZFILE,'LAT',ZWORK_LAT)
+   CALL IO_Field_write(TZFILE,'LON',ZWORK_LON)
    !
    DEALLOCATE(ZWORK,ZWORK_LAT,ZWORK_LON)
 END IF
@@ -324,13 +329,13 @@ WRITE(ILUOUT0,*) '***************************'
 !*    6.      Close parallelized I/O
 !             ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZFILE,OPARALLELIO=.FALSE.)
+CALL IO_File_close(TZFILE)
 !
 CALL SURFEX_DEALLO_LIST
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0,OPARALLELIO=.FALSE.)
+CALL IO_File_close(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index a11651b58556f0605edf0f6d6f4e4a325ad29826..37f5ab5a912946fa4cb3c2e7e179dc8a37c1655b 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ######################
@@ -259,7 +259,7 @@
 !!                              initialized
 !!      Routine WRITE_DESFM1  : to write a DESFM file.
 !!      Routine WRITE_LFIFM1  : to write a LFIFM file.
-!!      Routine IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM).
+!!      Routine IO_File_close : to close a FM-file (DESFM + LFIFM).
 !!
 !!      Module MODE_GRIDPROJ  : contains conformal projection routines
 !!    
@@ -287,7 +287,6 @@
 !!      Module MODD_CONF1 : contains configuration variables for model 1.
 !!         NRR     : number of moist variables
 !!      Module MODD_LUNIT : contains logical unit and names of files.
-!!         CLUOUT0 : name of output-listing
 !!      Module MODD_LUNIT : contains logical unit and names of files (model1).
 !!         CINIFILE: name of the FM file which will be used for the MESO-NH run.
 !!      Module MODD_GRID1 : contains grid variables.
@@ -379,6 +378,10 @@
 !!    P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!     B.VIE 2016 : LIMA
 !!  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
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 20/03/2019: missing use MODI_INIT_SALT
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -398,10 +401,10 @@ USE MODD_GR_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
 USE MODD_HURR_CONF
-USE MODD_IO_ll,            ONLY: TFILEDATA,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
+USE MODD_IO,               ONLY: TFILEDATA,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
-USE MODD_LUNIT,            ONLY: CLUOUT0,TPGDFILE,TLUOUT0,TOUTDATAFILE
+USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: CINIFILE,TINIFILE,TLUOUT
 USE MODD_METRICS_n
 USE MODD_MNH_SURFEX_n
@@ -416,13 +419,13 @@ USE MODD_TURB_n
 !
 USE MODE_EXTRAPOL
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
 USE MODE_GRIDCART
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname,IO_Filelist_print
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
@@ -437,6 +440,7 @@ USE MODI_DEALLOC_PARA_LL
 USE MODI_DEFAULT_DESFM_n
 USE MODI_ERROR_ON_TEMPERATURE
 USE MODI_INI_PROG_VAR
+USE MODI_INIT_SALT
 USE MODI_METRICS
 USE MODI_MNHREAD_ZS_DUMMY_n
 USE MODI_MNHWRITE_ZS_DUMMY_n
@@ -563,7 +567,7 @@ IDX_RVT = 1
 !
 !*       2.    OPENNING OF THE FILES
 !              ---------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
 CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
                                    ,YCHEMFILE,YCHEMFILETYPE &
@@ -625,8 +629,8 @@ IF (YATMFILETYPE == 'GRIBEX') THEN
 CALL INIT_NMLVAR()
 CALL READ_VER_GRID(TZPRE_REAL1FILE)
 !
-CALL IO_READ_FIELD(TPGDFILE,'IMAX',NIMAX)
-CALL IO_READ_FIELD(TPGDFILE,'JMAX',NJMAX)
+CALL IO_Field_read(TPGDFILE,'IMAX',NIMAX)
+CALL IO_Field_read(TPGDFILE,'JMAX',NJMAX)
 !
 NIMAX_ll=NIMAX   !! _ll variables are global variables
 NJMAX_ll=NJMAX   !! but the old names are kept in PRE_IDEA1.nam file
@@ -688,6 +692,9 @@ IF (GFOUND) READ(IPRE_REAL1,NAM_AERO_CONF)
 CALL POSNAM(IPRE_REAL1,'NAM_CONFZ',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
 !
+! Sea salt
+CALL INIT_SALT
+!
 !*       4.3   set soil scheme to ISBA for initialization from GRIB
 !
 IF (YATMFILETYPE=='GRIBEX') THEN
@@ -739,14 +746,14 @@ IF(LEN_TRIM(YCHEMFILE)>0)THEN
   CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
 END IF
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE)
+CALL IO_File_close(TZPRE_REAL1FILE)
 !
 CALL SECOND_MNH(ZTIME2)
 ZREAD = ZTIME2 - ZTIME1 - ZHORI
 !-------------------------------------------------------------------------------
 !
-CALL IO_FILE_ADD2LIST(TINIFILE,CINIFILE,'PREPREALCASE','WRITE',KLFITYPE=1,KLFIVERB=NVERB)
-CALL IO_FILE_OPEN_ll(TINIFILE)
+CALL IO_File_add2list(TINIFILE,CINIFILE,'MNH','WRITE',KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_File_open(TINIFILE)
 !
 ZTIME1=ZTIME2
 !
@@ -958,14 +965,14 @@ ZDYN = ZTIME2 - ZTIME1
 ZTIME1 = ZTIME2
 !
 IF(LEN_TRIM(YCHEMFILE)>0 .AND. YCHEMFILETYPE=='MESONH')THEN
-  CALL INI_PROG_VAR(CLUOUT0,XTKE_MX,XSV_MX,YCHEMFILE)
+  CALL INI_PROG_VAR(XTKE_MX,XSV_MX,YCHEMFILE)
   LHORELAX_SVCHEM = (NSV_CHEM > 0)
   LHORELAX_SVCHIC = (NSV_CHIC > 0)
   LHORELAX_SVDST  = (NSV_DST > 0)
   LHORELAX_SVSLT  = (NSV_SLT > 0)
   LHORELAX_SVAER  = (NSV_AER > 0)
 ELSE
-  CALL INI_PROG_VAR(CLUOUT0,XTKE_MX,XSV_MX)
+  CALL INI_PROG_VAR(XTKE_MX,XSV_MX)
 END IF
 !
 IF (ALLOCATED(XSV_MX)) DEALLOCATE(XSV_MX)
@@ -1047,7 +1054,7 @@ IF (YATMFILETYPE=='GRIBEX') THEN
 END IF
 !
 CALL WRITE_DESFM_n(1,TINIFILE)
-CALL IO_WRITE_HEADER(TINIFILE,HDAD_NAME=YDAD_NAME)
+CALL IO_Header_write(TINIFILE,HDAD_NAME=YDAD_NAME)
 CALL WRITE_LFIFM_n(TINIFILE,YDAD_NAME)
 ! 
 CALL SECOND_MNH(ZTIME2)
@@ -1070,8 +1077,8 @@ CALL MNHWRITE_ZS_DUMMY_n(TINIFILE)
 CALL DEALLOCATE_MODEL1(3)
 !
 IF (YATMFILETYPE=='MESONH'.AND. YATMFILE/=YPGDFILE) THEN
-  CALL IO_FILE_FIND_BYNAME(TRIM(YATMFILE),TZATMFILE,IRESP)
-  CALL IO_FILE_CLOSE_ll(TZATMFILE)
+  CALL IO_File_find_byname(TRIM(YATMFILE),TZATMFILE,IRESP)
+  CALL IO_File_close(TZATMFILE)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -1177,12 +1184,12 @@ END IF
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_FILE_CLOSE_ll(TINIFILE)
-CALL IO_FILE_CLOSE_ll(TPGDFILE)
+CALL IO_File_close(TINIFILE)
+CALL IO_File_close(TPGDFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 !
 CALL END_PARA_ll(IINFO_ll)
diff --git a/src/MNH/prep_surf_mnh.f90 b/src/MNH/prep_surf_mnh.f90
index afe9493b2b65cbdd6ed823a695eefc49f81e3f15..0e6c02cfbdaeba34678e247617addfc33b6a3605 100644
--- a/src/MNH/prep_surf_mnh.f90
+++ b/src/MNH/prep_surf_mnh.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
@@ -53,7 +53,7 @@ USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_TIME_n,      ONLY : TDTCUR
 !
-USE MODE_FM,       ONLY : IO_FILE_OPEN_ll
+USE MODE_IO_FILE,     ONLY: IO_File_open
 USE MODE_PREP_CTL, ONLY : PREP_CTL
 !
 USE MODI_INIT_PGD_SURF_ATM
@@ -100,7 +100,7 @@ CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PRE',HATMFILE,YATMFILETYPE,  &
 CALL PREP_SURF_ATM(YSURF_CUR,'MESONH',HATMFILE,YATMFILETYPE,HATMFILE,YATMFILETYPE,YLCTL)
 IF (PRESENT(OINIFILEOPEN)) THEN
   !This is done here because model dimensions were not known before this call (for PREP_SURFEX)
-  IF (OINIFILEOPEN) CALL IO_FILE_OPEN_ll(TINIFILE)
+  IF (OINIFILEOPEN) CALL IO_File_open(TINIFILE)
 END IF
 CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.)
 CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE')
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 1bf961ea0cc76b82941a06ce6bce9bc7c332d6eb..c21d5caa82474b699b1cf1a0b27a23897f3160b1 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
@@ -26,6 +26,7 @@
 !!    10/10/2011  J.Escobar call INI_PARAZ_ll
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  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
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -34,19 +35,19 @@
 USE MODD_CONF,        ONLY : CPROGRAM,&
                              L1D, L2D, LPACK
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
-USE MODD_IO_ll,       ONLY : TFILEDATA, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
-USE MODD_LUNIT,       ONLY : CLUOUT0, TPGDFILE, TLUOUT0
+USE MODD_IO,          ONLY : TFILEDATA, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
+USE MODD_LUNIT,       ONLY : TPGDFILE, TLUOUT0
 USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
 USE MODD_TIME_n,      ONLY : TDTCUR
 !
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -99,7 +100,7 @@ CSTORAGE_TYPE='SU'
 !
 !*       2.    OPENNING OF THE FILES
 !              ---------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
 CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
                                    ,YCHEMFILE,YCHEMFILETYPE &
@@ -121,7 +122,7 @@ CALL INI_CST
 !
 !*       4.1   reading of configuration variables
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE)
+CALL IO_File_close(TZPRE_REAL1FILE)
 !
 !*       4.2   reading of values of some configuration variables in namelist
 !
@@ -129,8 +130,8 @@ CALL INI_FIELD_LIST(1)
 !
 CALL INI_FIELD_SCALARS()
 !
-CALL IO_READ_FIELD(TPGDFILE,'IMAX',II)
-CALL IO_READ_FIELD(TPGDFILE,'JMAX',IJ)
+CALL IO_Field_read(TPGDFILE,'IMAX',II)
+CALL IO_Field_read(TPGDFILE,'JMAX',IJ)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(II, IJ, 1)
@@ -155,10 +156,10 @@ CALL INI_PARAZ_ll(IINFO_ll)
 !* reading of date
 !
 IF (YATMFILETYPE=='MESONH') THEN
-  CALL IO_FILE_ADD2LIST(TZATMFILE,TRIM(YATMFILE),'UNKNOWN','READ',KLFITYPE=1,KLFIVERB=1)
-  CALL IO_FILE_OPEN_ll(TZATMFILE)
-  CALL IO_READ_FIELD(TZATMFILE,'DTCUR',TDTCUR)
-  CALL IO_FILE_CLOSE_ll(TZATMFILE)
+  CALL IO_File_add2list(TZATMFILE,TRIM(YATMFILE),'MNH','READ',KLFITYPE=1,KLFIVERB=1)
+  CALL IO_File_open(TZATMFILE)
+  CALL IO_Field_read(TZATMFILE,'DTCUR',TDTCUR)
+  CALL IO_File_close(TZATMFILE)
 ELSE
   TDTCUR%TDATE%YEAR = NUNDEF
   TDTCUR%TDATE%MONTH= NUNDEF
@@ -171,7 +172,7 @@ YSURF_CUR => YSURF_LIST(1)
 CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
 CALL GOTO_SURFEX(1)
 !
-CALL IO_FILE_ADD2LIST(TINIFILE,TRIM(CINIFILE),'PREPSURFEX','WRITE',KLFITYPE=1,KLFIVERB=1)
+CALL IO_File_add2list(TINIFILE,TRIM(CINIFILE),'PGD','WRITE',KLFITYPE=1,KLFIVERB=1)
 !The open is done later in PREP_SURF_MNH when domain dimensions are known
 !
 TFILE_SURFEX => TINIFILE
@@ -180,11 +181,11 @@ NULLIFY(TFILE_SURFEX)
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_WRITE_HEADER(TINIFILE)
-CALL IO_WRITE_FIELD(TINIFILE,'SURF','EXTE')
-CALL IO_WRITE_FIELD(TINIFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TINIFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TINIFILE,'PACK',LPACK)
+CALL IO_Header_write(TINIFILE)
+CALL IO_Field_write(TINIFILE,'SURF','EXTE')
+CALL IO_Field_write(TINIFILE,'L1D', L1D)
+CALL IO_Field_write(TINIFILE,'L2D', L2D)
+CALL IO_Field_write(TINIFILE,'PACK',LPACK)
 !
 !-------------------------------------------------------------------------------
 WRITE(ILUOUT0,*) ' '
@@ -193,11 +194,11 @@ WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '|   PREP_SURFEX ends correctly   |'
 WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '----------------------------------'
-CALL IO_FILE_CLOSE_ll(TINIFILE)
+CALL IO_File_close(TINIFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 CALL SURFEX_DEALLO_LIST
diff --git a/src/MNH/pressure_in_prep.f90 b/src/MNH/pressure_in_prep.f90
index 844b549d633c8a5c2d28c651a9b8f4675af62633..7fafcfd88ec7e3521650a825432b5ae5ec5ab7dd 100644
--- a/src/MNH/pressure_in_prep.f90
+++ b/src/MNH/pressure_in_prep.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1998-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 for details. version 1.
@@ -71,7 +71,6 @@ END MODULE MODI_PRESSURE_IN_PREP
 !              ------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_ANEL_BALANCE_n
diff --git a/src/MNH/pressurez.f90 b/src/MNH/pressurez.f90
index ae75dc536e64c9223b6cf7cbe9a3e07399db4181..c9eca886954b3cf6d30b5b7690592d9a635f182e 100644
--- a/src/MNH/pressurez.f90
+++ b/src/MNH/pressurez.f90
@@ -217,6 +217,7 @@ END MODULE MODI_PRESSUREZ
 !!   J.escobar : check nb proc versus ZRESI & min(DIMX,DIMY)
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  Philippe Wautelet: 22/01/2019: use standard FLUSH statement instead of non standard intrinsics
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -230,10 +231,10 @@ USE MODD_DYN_n,       ONLY: LRES, XRES
 USE MODD_LUNIT_n,     ONLY: TLUOUT
 USE MODD_MPIF
 USE MODD_PARAMETERS
+use modd_precision,   only: MNHREAL_MPI
 USE MODD_REF,         ONLY: LBOUSS
-USE MODD_VAR_ll,      ONLY: MPI_PRECISION, NMNH_COMM_WORLD , NPROC
+USE MODD_VAR_ll,      ONLY: NMNH_COMM_WORLD , NPROC
 !
-USE MODE_IO_ll,       ONLY: CLOSE_ll
 USE MODE_ll
 USE MODE_MPPDB
 USE MODE_MSG
@@ -651,10 +652,8 @@ WRITE(ILUOUT,*) 'residual divergence / 2 DT', ZMAXVAL,     &
                 ' located at ',   IMAXLOC
 FLUSH(unit=ILUOUT)
 IF (ABS(ZMAXVAL) .GT. 100.0 ) THEN
-   WRITE(ILUOUT,*) ' pressurez.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ABS(RESIDUAL) > 100.0 '  
-   FLUSH(unit=ILUOUT)
-   STOP ' pressurez.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ABS(RESIDUAL) > 100.0 '
-ENDIF 
+   call Print_msg( NVERB_FATAL, 'GEN', 'PRESSUREZ', 'something wrong with pressure: abs(residual) > 100.0' )
+END IF
 ! number of iterations adjusted
 IF (LRES) THEN
    ZMAXRES = XRES
@@ -687,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/prognos.f90 b/src/MNH/prognos.f90
index 791f813af2cd9393746b44b7e714bd4bb5e74718..569a2aa08c0b7312ed0f4494c4f94895063c5d09 100644
--- a/src/MNH/prognos.f90
+++ b/src/MNH/prognos.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2012-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-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_PROGNOS
@@ -67,7 +67,6 @@ USE MODD_CST
 USE MODD_PARAM_C2R2
 USE MODD_RAIN_C2R2_KHKO_PARAM
 !
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_GAMMA
diff --git a/src/MNH/radar_rain_ice.f90 b/src/MNH/radar_rain_ice.f90
index f3d2e2a0d435ef41660c0810c0547d2e42260236..eddac2294d8c62054116b7be77081b610e72aefb 100644
--- a/src/MNH/radar_rain_ice.f90
+++ b/src/MNH/radar_rain_ice.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.
 
 !      ##########################
@@ -128,8 +128,6 @@ USE MODD_PARAMETERS
 USE MODD_PARAM_n, ONLY : CCLOUD
 USE MODD_LUNIT
 !
-USE MODE_IO_ll
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90
index fdc5bf15f79656b432b7a3b4ee2977e140600bef..dc3ddc1e5027eed57ce8610829eef632598ac9ac 100644
--- a/src/MNH/radar_scattering.f90
+++ b/src/MNH/radar_scattering.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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$
-!-----------------------------------------------------------------
 !     ######spl
        MODULE MODI_RADAR_SCATTERING 
 !      #############################
@@ -106,7 +102,7 @@ END MODULE MODI_RADAR_SCATTERING
 !              ------------
 !
 USE MODD_CST
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,           ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR_I=>XLBEXR,&
@@ -140,10 +136,9 @@ USE MODE_READTMAT
 USE MODE_FGAU , ONLY:GAULAG
 USE MODI_GAMMA, ONLY:GAMMA
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_ll
 USE MODD_LUNIT
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 
 !
@@ -750,8 +745,8 @@ DO JI=1,INBRAD
                  E12.5,2X,E12.5,2X,E12.5,2X,E12.5,2X,E12.5)
 
     !rain
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(1),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(1),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(1))
@@ -764,7 +759,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE) 
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()    
     WRITE(ILUOUT0,*) "NLIGNE rain",ILINE      
     ILINE=2
@@ -777,8 +772,8 @@ DO JI=1,INBRAD
     ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE)
    
     !snow
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(2),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(2),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(2))
@@ -791,7 +786,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
     WRITE(ILUOUT0,*) "NLIGNE snow",ILINE    
     ILINE=2
@@ -804,8 +799,8 @@ DO JI=1,INBRAD
     ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)
  
     !graupel
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(3),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(3),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(3))
@@ -818,7 +813,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
     WRITE(ILUOUT0,*) "NLIGNE graupel",ILINE    
     ILINE=2
@@ -831,8 +826,8 @@ DO JI=1,INBRAD
     ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)
 
     !wet graupel
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(4),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(4),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(4))
@@ -845,7 +840,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_W(ILINE),ZRE_S22FMS11FT_T_W(ILINE),ZIM_S22FT_T_W(ILINE),ZIM_S11FT_T_W(ILINE)
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
     WRITE(ILUOUT0,*) "NLIGNE wet graupel",ILINE    
     ILINE=2
@@ -858,8 +853,8 @@ DO JI=1,INBRAD
 
     !hail
     IF (GHAIL) THEN
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(5),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(5),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(5))
@@ -872,7 +867,7 @@ DO JI=1,INBRAD
         ZIM_S22S11_T_H(ILINE),ZRE_S22FMS11FT_T_H(ILINE),ZIM_S22FT_T_H(ILINE),ZIM_S11FT_T_H(ILINE)
         ILINE=ILINE+1
       ENDDO
-      CALL IO_FILE_CLOSE_ll(TZFILE)
+      CALL IO_File_close(TZFILE)
       TZFILE => NULL()
       WRITE(ILUOUT0,*) "NLIGNE hail",ILINE    
       ILINE=2
diff --git a/src/MNH/radar_simulator.f90 b/src/MNH/radar_simulator.f90
index 0735b1dc56e0813789e71d097fc3a4c2071f4bde..1d09ecc69198c2b91558b22c01081ffd166a8b43 100644
--- a/src/MNH/radar_simulator.f90
+++ b/src/MNH/radar_simulator.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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/cvsroot/MNH-VX-Y-Z/src/MNH/Attic/radar_simulator.f90,v $ $Revision: 1.1.2.3.2.1.12.2.2.2 $ $Date: 2015/09/16 14:31:20 $
-!-----------------------------------------------------------------
 !      ###########################
        MODULE MODI_RADAR_SIMULATOR 
 !      ###########################
@@ -63,10 +59,7 @@ END MODULE MODI_RADAR_SIMULATOR
 !!      Module MODD_RAIN_ICE_PARAM
 !!      Module MODD_PARAMETERS
 !!      Module MODD_LUNIT
-!
-!!      Module MODE_IO_ll
-!!      Module MODE_FM
-!
+!!
 !!      Module MODD_GR_FIELD_n
 !!      Module MODD_GRID_n
 !!      Module MODD_CONF_n
@@ -139,7 +132,6 @@ USE MODD_REF
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODD_GR_FIELD_n
diff --git a/src/MNH/radiations.f90 b/src/MNH/radiations.f90
index 2bec821d736e9e3a9ff5ff6a75182ab7f12edfd9..5ba7853d4e07073b95db0db7c42d82e4ddde4e8d 100644
--- a/src/MNH/radiations.f90
+++ b/src/MNH/radiations.f90
@@ -118,6 +118,8 @@ CONTAINS
 !!      J.Escobar 28/06/2018 : Reproductible parallelisation of CLOUD_ONLY case
 !!      J.Escobar 20/07/2018 : for real*4 compilation, convert with REAL(X) argument to SUM_DD... 
 !!      P.Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -132,7 +134,7 @@ USE MODD_CST
 USE MODD_DUST,        ONLY: LDUST
 USE MODD_GRID ,       ONLY: XLAT0, XLON0
 USE MODD_GRID_n ,     ONLY: XLAT, XLON
-USE MODD_IO_ll,       ONLY: TFILEDATA
+USE MODD_IO,          ONLY: TFILEDATA
 USE MODD_LUNIT_n,     ONLY: TLUOUT
 USE MODD_NSV,         ONLY: NSV_C2R2,NSV_C2R2BEG,NSV_C2R2END,     &
                             NSV_C1R3,NSV_C1R3BEG,NSV_C1R3END,     &
@@ -150,10 +152,11 @@ USE MODD_SALT,        ONLY: LSALT
 USE MODD_TIME
 !
 USE MODE_DUSTOPT
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_REPRO_SUM, ONLY : SUM_DD_R2_R1_ll,SUM_DD_R1_ll
+use mode_msg
+USE MODE_REPRO_SUM,      ONLY : SUM_DD_R2_R1_ll,SUM_DD_R1_ll
 !
 #ifdef MNH_PGI
 USE MODE_PACK_PGI
@@ -580,7 +583,8 @@ IF ( ZMINVAL <= 0.0 ) THEN
    WRITE(ILUOUT,*) ' radiation.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ZDZPABST <= 0.0 '  
    WRITE(ILUOUT,*) ' radiation :: ZDZPABST ', ZMINVAL,' located at ',   IMINLOC
    FLUSH(unit=ILUOUT)
-   STOP ' radiation.f90 STOP :: SOMETHING WRONG WITH PRESSURE , ZDZPABST < 0.0  '
+   call Print_msg( NVERB_FATAL, 'GEN', 'RADIATIONS', 'something wrong with pressure: ZDZPABST <= 0.0' )
+
 ENDIF
 !------------------------------------------------------------------------------
 ALLOCATE(ZLAT(KDLON))
@@ -926,13 +930,15 @@ IF (CAOP=='EXPL') THEN
         PSVT(IIB:IIE,IJB:IJE,:,NSV_SLTBEG:NSV_SLTEND)        &  !I [ppp] sea salt scalar concentration
         ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
         ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
+        ,PTHT(IIB:IIE,IJB:IJE,:)                  &  !I [K] potential temperature
+        ,PPABST(IIB:IIE,IJB:IJE,:)                &  !I [hPa] pressure
+        ,PRT(IIB:IIE,IJB:IJE,:,:)                 &  !I [kg/kg] water mixing ratio
         ,ZPIZA_SLT_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)   &  !O [-] single scattering albedo of sea salt
         ,ZCGA_SLT_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)    &  !O [-] assymetry factor for sea salt
         ,ZTAUREL_SLT_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:) &  !O [-] opt.depth(wvl=lambda)/opt.depth(wvl=550nm)
         ,PAER_SLT(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT)            &  !O [-] optical depth of sea salt at wvl=550nm
         ,KSWB_OLD                                    &  !I |nbr] number of shortwave bands
         )
-
  ENDIF
 
  ZTAUREL_EQ_TMP(:,:,:,:)=ZTAUREL_DST_TMP(:,:,:,:)+ZTAUREL_AER_TMP(:,:,:,:)+ZTAUREL_SLT_TMP(:,:,:,:)
@@ -1843,9 +1849,9 @@ DEALLOCATE(ZWORK_GRID)
 ALLOCATE(ZQSAVE(SIZE(ZTAVE,1),SIZE(ZTAVE,2)))
 !
 WHERE (ZTAVE(:,:) > XTT)
-  ZQSAVE(:,:) = QSATW_2D(ZTAVE, ZPAVE)
+  ZQSAVE(:,:) = QSAT(ZTAVE, ZPAVE)
 ELSEWHERE
-  ZQSAVE(:,:) = QSATI_2D(ZTAVE, ZPAVE)
+  ZQSAVE(:,:) = QSATI(ZTAVE, ZPAVE)
 END WHERE
 !
 ! allocations for the radiation code outputs
@@ -2699,7 +2705,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2720,7 +2726,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2741,7 +2747,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2762,7 +2768,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2783,7 +2789,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2804,7 +2810,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       DO JJ=IJB,IJE
@@ -2823,7 +2829,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       DO JJ=IJB,IJE
@@ -2842,7 +2848,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2860,7 +2866,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
 !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2878,7 +2884,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2896,7 +2902,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
   END IF
   !
   !
@@ -2920,7 +2926,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2941,7 +2947,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2962,7 +2968,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2983,7 +2989,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3004,7 +3010,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3025,7 +3031,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK-JPVEXT
@@ -3046,7 +3052,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK-JPVEXT
@@ -3067,7 +3073,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3085,7 +3091,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3103,7 +3109,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3121,7 +3127,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
   END IF
   !
   !
@@ -3142,7 +3148,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3160,7 +3166,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3178,7 +3184,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3196,7 +3202,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3214,7 +3220,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3232,7 +3238,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     !
   END IF
@@ -3258,7 +3264,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3279,7 +3285,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3300,7 +3306,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3321,7 +3327,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3342,7 +3348,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     ! 
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3363,7 +3369,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3384,7 +3390,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3405,7 +3411,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     ! spectral bands
     IF (KSWB_OLD==6) THEN
@@ -3432,7 +3438,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTAUAZ(:,:,:,JBAND))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZTAUAZ(:,:,:,JBAND))
       !
       TZFIELD%CMNHNAME   = 'SSAAER_'//YBAND_NAME(JBAND)
       TZFIELD%CSTDNAME   = ''
@@ -3444,7 +3450,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPIZAZ(:,:,:,JBAND))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPIZAZ(:,:,:,JBAND))
       !
       TZFIELD%CMNHNAME   = 'GAER_'//YBAND_NAME(JBAND)
       TZFIELD%CSTDNAME   = ''
@@ -3456,7 +3462,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCGAZ(:,:,:,JBAND))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZCGAZ(:,:,:,JBAND))
     ENDDO
 
     DO JBAND=1,KSWB_OLD
@@ -3479,7 +3485,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
       !
       DO JK=IKB,IKE
         JKRAD = JK - JPVEXT
@@ -3500,7 +3506,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
       !
       DO JK=IKB,IKE
         JKRAD = JK - JPVEXT
@@ -3521,7 +3527,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     END DO
   END IF
   !
@@ -3549,7 +3555,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 ! 
 !cumulated optical thickness of aerosols
 !cumul begin from the top of the domain, not from the TOA !      
@@ -3580,7 +3586,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! sea
     DO JK=IKB,IKE
@@ -3609,7 +3615,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! desert
     DO JK=IKB,IKE
@@ -3638,7 +3644,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! urban
     DO JK=IKB,IKE
@@ -3667,7 +3673,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! Volcanoes
     DO JK=IKB,IKE
@@ -3696,7 +3702,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! stratospheric background
     DO JK=IKB,IKE
@@ -3725,7 +3731,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
   ENDIF
 END IF
 !
diff --git a/src/MNH/rain_c2r2_khko.f90 b/src/MNH/rain_c2r2_khko.f90
index 33f070d10be68d5480793338f1caa331ce67f047..9139c89873568bf187fae069ad7787aa6f7557aa 100644
--- a/src/MNH/rain_c2r2_khko.f90
+++ b/src/MNH/rain_c2r2_khko.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/Attic/rain_c2r2_khko.f90,v $ $Revision: 1.1.2.1.2.3 $
-!-----------------------------------------------------------------
 !      ######################
        MODULE MODI_RAIN_C2R2_KHKO
 !      ######################
@@ -24,7 +20,7 @@ INTERFACE
                             PSOLORG, PMI, HACTCCN,                              &
                             PINDEP, PSUPSAT, PNACT                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 CHARACTER(LEN=*),         INTENT(IN)    :: HCLOUD   !  kind of cloud
 
@@ -225,7 +221,7 @@ END MODULE MODI_RAIN_C2R2_KHKO
 USE MODD_PARAMETERS
 USE MODD_CST
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAM_C2R2
 USE MODD_RAIN_C2R2_DESCR
 USE MODD_RAIN_C2R2_KHKO_PARAM
@@ -238,9 +234,8 @@ USE MODD_SALT
 USE MODI_BUDGET
 !
 USE MODE_FIELD
-USE MODE_FM
 USE MODE_ll
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODI_GAMMA
 !
 IMPLICIT NONE
@@ -602,7 +597,7 @@ INTEGER                           :: J1
 !   TZFIELD%NTYPE      = TYPEREAL
 !   TZFIELD%NDIMS      = 3
 !   TZFIELD%LTIMEDEP   = .TRUE.
-!   CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCHEN)
+!   CALL IO_Field_write(TPFILE,TZFIELD,ZCHEN)
 ! END IF
 !
 !-------------------------------------------------------------------------------
@@ -885,7 +880,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZZW1LOG)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZZW1LOG)
 END IF
 !
 !*       3.4   budget storage
@@ -1912,7 +1907,7 @@ DO JN = 1 , KSPLITR
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWSEDC)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWSEDC)
   !
   TZFIELD%CMNHNAME   = 'SEDFLUXR'
   TZFIELD%CSTDNAME   = ''
@@ -1924,7 +1919,7 @@ DO JN = 1 , KSPLITR
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWSEDR)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWSEDR)
  END IF
 END DO
 !
diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90
index 81a74baa75e40db7a8b5ad995af1232057389a45..9d11bd3ee900c037915978e883f7732a8fc8e407 100644
--- a/src/MNH/rain_ice.f90
+++ b/src/MNH/rain_ice.f90
@@ -2,19 +2,20 @@
 !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.
-!      ####################
+!-----------------------------------------------------------------
+!     ######spl
        MODULE MODI_RAIN_ICE
 !      ####################
 !
 INTERFACE
-      SUBROUTINE RAIN_ICE ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,       &
-                            KSPLITR, PTSTEP, KRR,                                  &
-                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, &
-                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST,                    &
-                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,        &
-                            PINPRC, PINPRR, PINPRR3D, PEVAP3D,                     &
-                            PINPRS, PINPRG, PSIGS, PINDEP, PSEA, PTOWN,            &
-                            PRHT, PRHS, PINPRH, PFPR                               )
+      SUBROUTINE RAIN_ICE ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,      &
+                            KSPLITR, PTSTEP, KRR,                            &
+                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
+                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
+                            PINPRC,PINPRR, PINPRR3D, PEVAP3D,           &
+                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
+                            PRHT, PRHS, PINPRH, PFPR                        )
 !
 !
 LOGICAL,                  INTENT(IN)    :: OSEDIC ! Switch for droplet sedim.
@@ -25,16 +26,16 @@ LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
                                                    !   form by warm processes
                                                    !      (Kessler scheme)
 !
-INTEGER,                  INTENT(IN)    :: KKA     ! Near ground array index
-INTEGER,                  INTENT(IN)    :: KKU     ! Uppest atmosphere array index
-INTEGER,                  INTENT(IN)    :: KKL     ! Vert. levels type 1=MNH -1=ARO
+INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
+INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
+INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
 INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step 
-                                                   ! integration for  rain sedimendation
+                                      ! integration for  rain sedimendation
 REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
                                                    ! (single if cold start)
 INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ    ! Layer thickness (m)
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
@@ -61,35 +62,34 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
 !
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC  ! Cloud instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC! Cloud instant precip
 REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR  ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PINPRR3D! Rain inst precip 3D
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D ! Rain evap profile
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS  ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG  ! Graupel instant precip
-!
-REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA    ! Sea Mask
-REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN   ! Fraction that is town
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR! Rain instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D! Rain evap profile
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS! Snow instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG! Graupel instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR! Rain fraction
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA ! Sea Mask
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN! Fraction that is town
 REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
 REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
-REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH  ! Hail instant precip
-REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR    ! Upper-air precipitation fluxes
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
 !
 END SUBROUTINE RAIN_ICE
 END INTERFACE
 END MODULE MODI_RAIN_ICE
-!     ##############################################################################
-      SUBROUTINE RAIN_ICE ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,       &
-                            KSPLITR, PTSTEP, KRR,                                  &
-                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR, &
-                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST,                    &
-                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,        &
-                            PINPRC, PINPRR, PINPRR3D, PEVAP3D,                     &
-                            PINPRS, PINPRG, PSIGS, PINDEP, PSEA, PTOWN,            &
-                            PRHT, PRHS, PINPRH, PFPR                               )
-!     ##############################################################################
+!     ######spl
+      SUBROUTINE RAIN_ICE ( OSEDIC,HSEDIM, HSUBG_AUCV, OWARM, KKA, KKU, KKL,      &
+                            KSPLITR, PTSTEP, KRR,                            &
+                            PDZZ, PRHODJ, PRHODREF, PEXNREF, PPABST, PCIT, PCLDFR,&
+                            PTHT, PRVT, PRCT, PRRT, PRIT, PRST, &
+                            PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, &
+                            PINPRC,PINPRR, PINPRR3D, PEVAP3D,           &
+                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
+                            PRHT, PRHS, PINPRH, PFPR                        )
+!     ######################################################################
 !
 !!****  * -  compute the explicit microphysical sources
 !!
@@ -238,33 +238,41 @@ END MODULE MODI_RAIN_ICE
 !!      J.Escobar : 10/2017 : for real*4 , limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
 !!      (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param
 !!      J.Escobar : 8/2018 : for real*4 , bis => limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
-!-------------------------------------------------------------------------------
+!!      P.Wautelet 01/02/2019: add missing initialization for PFPR
+!!                   02/2019 C.Lac add rain fraction as an output field
+!  P. Wautelet 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_BUDGET
-USE MODD_CONF
-USE MODD_CST
-USE MODD_LES
-USE MODD_PARAM_ICE
-USE MODD_PARAMETERS
-USE MODD_RAIN_ICE_DESCR
-USE MODD_RAIN_ICE_PARAM
+use MODD_BUDGET,         only: LBU_ENABLE, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, &
+                               LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH
+use MODD_CST,            only: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XTT
+use MODD_CST,            only: XALPI, XBETAI, XGAMI, XMD, XMV, XTT
+use MODD_LES,            only: LLES_CALL
+use MODD_PARAMETERS,     only: JPVEXT
+use MODD_PARAM_ICE,      only: CSUBG_PR_PDF, LDEPOSC
+use MODD_RAIN_ICE_DESCR, only: XLBEXR, XLBR, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: XCRIAUTC
+!
+use MODE_MSG
+use MODE_RAIN_ICE_FAST_RG,             only: RAIN_ICE_FAST_RG
+use MODE_RAIN_ICE_FAST_RH,             only: RAIN_ICE_FAST_RH
+use MODE_RAIN_ICE_FAST_RI,             only: RAIN_ICE_FAST_RI
+use MODE_RAIN_ICE_FAST_RS,             only: RAIN_ICE_FAST_RS
+use MODE_RAIN_ICE_NUCLEATION,          only: RAIN_ICE_NUCLEATION
+use MODE_RAIN_ICE_SEDIMENTATION_SPLIT, only: RAIN_ICE_SEDIMENTATION_SPLIT
+use MODE_RAIN_ICE_SEDIMENTATION_STAT,  only: RAIN_ICE_SEDIMENTATION_STAT
+use MODE_RAIN_ICE_SLOW,                only: RAIN_ICE_SLOW
+use MODE_RAIN_ICE_WARM,                only: RAIN_ICE_WARM
 !
-USE MODE_FMWRIT
-USE MODE_ll
-USE MODE_MPPDB
-USE MODE_MSG
 #ifdef MNH_PGI
 USE MODE_PACK_PGI
 #endif
 !
-#ifdef MNH_BITREP
-USE MODI_BITREP
-#endif
-USE MODI_BUDGET
-USE MODI_GAMMA
+use MODI_BUDGET
+USE MODI_ICE4_RAINFR_VERT
 !
 IMPLICIT NONE
 !
@@ -280,16 +288,16 @@ LOGICAL,                  INTENT(IN)    :: OWARM   ! .TRUE. allows raindrops to
                                                    !   form by warm processes
                                                    !      (Kessler scheme)
 !
-INTEGER,                  INTENT(IN)    :: KKA     ! Near ground array index
-INTEGER,                  INTENT(IN)    :: KKU     ! Uppest atmosphere array index
-INTEGER,                  INTENT(IN)    :: KKL     ! Vert. levels type 1=MNH -1=ARO
-INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step 
-                                                   ! integration for  rain sedimendation
+INTEGER,                  INTENT(IN)    :: KKA   !near ground array index
+INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
+INTEGER,                  INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
+INTEGER,                  INTENT(IN)    :: KSPLITR ! Number of small time step
+                                      ! integration for  rain sedimendation
 REAL,                     INTENT(IN)    :: PTSTEP  ! Double Time step
                                                    ! (single if cold start)
 INTEGER,                  INTENT(IN)    :: KRR     ! Number of moist variable
 !
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ    ! Layer thickness (m)
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PDZZ     ! Layer thikness (m)
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRHODREF! Reference density
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PEXNREF ! Reference Exner function
@@ -299,9 +307,9 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PCLDFR  ! Cloud fraction
 !
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PTHT    ! Theta at time t
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t 
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t 
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRRT    ! Rain water m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
 REAL, DIMENSION(:,:,:),   INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
@@ -316,268 +324,110 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PRGS    ! Graupel m.r. source
 !
-!
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC  ! Cloud instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRC! Cloud instant precip
 REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR  ! Rain instant precip
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PINPRR3D! Rain inst precip 3D
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D ! Rain evap profile
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS  ! Snow instant precip
-REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG  ! Graupel instant precip
-!
-REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA    ! Sea Mask
-REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN   ! Fraction that is town
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRR! Rain instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
+REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PEVAP3D! Rain evap profile
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRS! Snow instant precip
+REAL, DIMENSION(:,:),     INTENT(INOUT) :: PINPRG! Graupel instant precip
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR! Rain fraction
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA ! Sea Mask
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN! Fraction that is town
 REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
 REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
-REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH  ! Hail instant precip
-REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR    ! Upper-air precipitation fluxes
-!
-! IN variables
-!
-!$acc declare present(PDZZ,PRHODJ,PRHODREF,PEXNREF,PPABST,               &
-!$acc &               PCLDFR,PTHT,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,         &
-!$acc &               PSIGS,PSEA,PTOWN,PRHT,PFPR)                        &
-!
-! INOUT variables
-!
-!$acc &       present(PCIT,PTHS,PRVS,PRCS,PRRS,PRIS,PRSS,PRGS,           &
-!$acc &               PINPRC,PINDEP,PINPRR,PINPRR3D,PEVAP3D,             &
-!$acc &               PINPRS,PINPRG,PRHS,PINPRH)
-
-!
-! OUT variables
-!
-!***NONE***
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH! Hail instant precip
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR ! upper-air precipitation fluxes
 !
 !*       0.2   Declarations of local variables :
 !
-INTEGER :: JK            ! Vertical loop index for the rain sedimentation
-INTEGER :: JN            ! Temporal loop index for the rain sedimentation
-INTEGER :: JJ            ! Loop index for the interpolation
-INTEGER :: JI            ! Loop index for the interpolation
-INTEGER :: IIB           !  Define the domain where is
-INTEGER :: IIE           !  the microphysical sources have to be computed
-INTEGER :: IJB           !
-INTEGER :: IJE           !
-INTEGER :: IKB,IKTB,IKT  !
-INTEGER :: IKE,IKTE      !
-!
-REAL    :: ZTSPLITR      ! Small time step for rain sedimentation
-!
-!
-INTEGER :: ISEDIMR,ISEDIMC, ISEDIMI, ISEDIMS, ISEDIMG, ISEDIMH, &
-  INEGT, IMICRO ! Case number of sedimentation, T>0 (for HEN)
-                ! and r_x>0 locations
-INTEGER :: IGRIM, IGACC, IGDRY ! Case number of riming, accretion and dry growth
-                               ! locations
-INTEGER :: IGWET, IHAIL   ! wet growth locations and case number
-LOGICAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
-    :: GSEDIMR,GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH ! Test where to compute the SED processes
-LOGICAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
-                     :: GNEGT  ! Test where to compute the HEN process
+INTEGER                           :: IIB           !  Define the domain where is
+INTEGER                           :: IIE           !  the microphysical sources have to be computed
+INTEGER                           :: IIT           !
+INTEGER                           :: IJB           !
+INTEGER                           :: IJE           !
+INTEGER                           :: IJT           !
+INTEGER                           :: IKB,IKTB,IKT  !
+INTEGER                           :: IKE,IKTE      !
+!
+INTEGER                           :: IMICRO
+INTEGER, DIMENSION(SIZE(PEXNREF)) :: I1,I2,I3 ! Used to replace the COUNT
+INTEGER                           :: JL       ! and PACK intrinsics
 LOGICAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
-                     :: GMICRO ! Test where to compute all processes
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GRIM ! Test where to compute riming
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GACC ! Test where to compute accretion
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GDRY ! Test where to compute dry growth
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GWET  ! Test where to compute wet growth
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GHAIL ! Test where to compute hail growth
-LOGICAL, DIMENSION(:), ALLOCATABLE :: GWORK
-LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)):: GDEP
-INTEGER, DIMENSION(:), ALLOCATABLE :: IVEC1,IVEC2       ! Vectors of indices for
-                                ! interpolations
-REAL,    DIMENSION(:), ALLOCATABLE :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors for
-                                ! interpolations
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
+                                  :: GMICRO ! Test where to compute all processes
+REAL                              :: ZINVTSTEP
+REAL                              :: ZCOEFFRCM
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRGT    ! Graupel m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRHT    ! Hail m.r. at t
+REAL, DIMENSION(:), ALLOCATABLE   :: ZCIT    ! Pristine ice conc. at t
+!
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRRS    ! Rain water m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRGS    ! Graupel m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRHS    ! Hail m.r. source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZTHS    ! Theta source
+REAL, DIMENSION(:), ALLOCATABLE   :: ZTHT    ! Potential temperature
+REAL, DIMENSION(:), ALLOCATABLE   :: ZTHLT   ! Liquid potential temperature
+!
+REAL, DIMENSION(:), ALLOCATABLE   :: ZRHODREF, &      ! RHO Dry REFerence
+                                     ZRHODJ,   &      ! RHO times Jacobian
+                                     ZZT,      &      ! Temperature
+                                     ZPRES,    &      ! Pressure
+                                     ZEXNREF,  &      ! EXNer Pressure REFerence
+                                     ZZW,      &      ! Work array
+                                     ZLSFACT,  &      ! L_s/(Pi_ref*C_ph)
+                                     ZLVFACT,  &      ! L_v/(Pi_ref*C_ph)
+                                     ZUSW,     &      ! Undersaturation over water
+                                     ZSSI,     &      ! Supersaturation over ice
+                                     ZLBDAR,   &      ! Slope parameter of the raindrop  distribution
+                                     ZLBDAR_RF,&      ! Slope parameter of the raindrop  distribution
+                                                      ! for the Rain Fraction part
+                                     ZLBDAS,   &      ! Slope parameter of the aggregate distribution
+                                     ZLBDAG,   &      ! Slope parameter of the graupel   distribution
+                                     ZLBDAH,   &      ! Slope parameter of the hail      distribution
+                                     ZRDRYG,   &      ! Dry growth rate of the graupeln
+                                     ZRWETG,   &      ! Wet growth rate of the graupeln
+                                     ZAI,      &      ! Thermodynamical function
+                                     ZCJ,      &      ! Function to compute the ventilation coefficient
+                                     ZKA,      &      ! Thermal conductivity of the air
+                                     ZDV,      &      ! Diffusivity of water vapor in the air
+                                     ZSIGMA_RC,&      ! Standard deviation of rc at time t
+                                     ZCF,      &      ! Cloud fraction
+                                     ZRF,      &      ! Rain fraction
+                                     ZHLC_HCF, &      ! HLCLOUDS : fraction of High Cloud Fraction in grid
+                                     ZHLC_LCF, &      ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
+                                                      !    note that ZCF = ZHLC_HCF + ZHLC_LCF
+                                     ZHLC_HRC, &      ! HLCLOUDS : LWC that is High LWC in grid
+                                     ZHLC_LRC, &      ! HLCLOUDS : LWC that is Low  LWC in grid
+                                                      !    note that ZRC = ZHLC_HRC + ZHLC_LRC
+                                     ZHLC_RCMAX, &    ! HLCLOUDS : maximum value for RC in distribution
+                                     ZRCRAUTC, &      ! RC value to begin rain formation =XCRIAUTC/RHODREF
+                                     ZHLC_HRCLOCAL, & ! HLCLOUDS : LWC that is High LWC local in HCF
+                                     ZHLC_LRCLOCAL    ! HLCLOUDS : LWC that is Low  LWC local in LCF
+                                                      !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
+                                                      !                     = ZHLC_HRC/HCF+ ZHLC_LRC/LCF
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays
+REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
                                   :: ZW ! work array
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
-      :: ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS   ! Mixing ratios created during the time step
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),0:SIZE(PEXNREF,3)+1)   &
-                                  :: ZWSED        ! sedimentation fluxes
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),0:SIZE(PEXNREF,3)+1)   &
-                                  :: ZWSEDW1       ! sedimentation speed
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),0:SIZE(PEXNREF,3)+1)   &
-                                  :: ZWSEDW2       ! sedimentation speed
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2))                   &
-                                  :: ZCONC_TMP    ! Weighted concentration
-REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
+REAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
                                   :: ZT ! Temperature
-REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) ::  &
-                                     ZRAY,   & ! Cloud Mean radius
-                                     ZLBC,   & ! XLBC weighted by sea fraction
-                                     ZFSEDC
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZRAINFR  ! Rain fraction
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZHLC_HCF3D  ! HLCLOUDS cloud fraction in high water content part
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZHLC_LCF3D  ! HLCLOUDS cloud fraction in low water content part
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZHLC_HRC3D  ! HLCLOUDS cloud water content in high water content part
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZHLC_LRC3D  ! HLCLOUDS cloud water content in low water content
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVT    ! Water vapor m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRT    ! Rain water m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIT    ! Pristine ice m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRST    ! Snow/aggregate m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRGT    ! Graupel m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZRHT    ! Hail m.r. at t
-REAL, DIMENSION(:), ALLOCATABLE :: ZCIT    ! Pristine ice conc. at t
-!
-REAL, DIMENSION(:), ALLOCATABLE :: ZRVS    ! Water vapor m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRCS    ! Cloud water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRRS    ! Rain water m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRSS    ! Snow/aggregate m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRGS    ! Graupel m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZRHS    ! Hail m.r. source
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHS    ! Theta source
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHT    ! Potential temperature
-REAL, DIMENSION(:), ALLOCATABLE :: ZTHLT   ! Liquid potential temperature
-REAL, DIMENSION(:), ALLOCATABLE :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
-!
-REAL, DIMENSION(:), ALLOCATABLE &
-               :: ZRHODREF, & ! RHO Dry REFerence
-                  ZRHODJ,   & ! RHO times Jacobian
-                  ZZT,      & ! Temperature
-                  ZPRES,    & ! Pressure
-                  ZEXNREF,  & ! EXNer Pressure REFerence
-                  ZZW,      & ! Work array
-                  ZZW2,     & ! Work array
-                  ZZW3,     & ! Work array
-                  ZZW4,     & ! Work array
-                  ZLSFACT,  & ! L_s/(Pi_ref*C_ph)
-                  ZLVFACT,  & ! L_v/(Pi_ref*C_ph)
-                  ZUSW,     & ! Undersaturation over water
-                  ZSSI,     & ! Supersaturation over ice
-                  ZLBDAR,   & ! Slope parameter of the raindrop  distribution
-                  ZLBDAR_RF,& ! Slope parameter of the raindrop  distribution
-                                 ! for the Rain Fraction part
-                  ZLBDAS,   & ! Slope parameter of the aggregate distribution
-                  ZLBDAG,   & ! Slope parameter of the graupel   distribution
-                  ZLBDAH,   & ! Slope parameter of the hail      distribution
-                  ZRDRYG,   & ! Dry growth rate of the graupeln
-                  ZRWETG,   & ! Wet growth rate of the graupeln
-                  ZAI,      & ! Thermodynamical function
-                  ZCJ,      & ! Function to compute the ventilation coefficient
-                  ZKA,      & ! Thermal conductivity of the air
-                  ZDV,      & ! Diffusivity of water vapor in the air
-                  ZSIGMA_RC,& ! Standard deviation of rc at time t
-                  ZCF,      & ! Cloud fraction
-                  ZRF,      & ! Rain fraction
-                  ZHLC_HCF, & ! HLCLOUDS : fraction of High Cloud Fraction in grid
-                  ZHLC_LCF, & ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
-                              !    note that ZCF = ZHLC_HCF + ZHLC_LCF
-                  ZHLC_HRC, & ! HLCLOUDS : LWC that is High LWC in grid
-                  ZHLC_LRC, & ! HLCLOUDS : LWC that is Low  LWC in grid
-                              !    note that ZRC = ZHLC_HRC + ZHLC_LRC
-                ZHLC_RCMAX, & ! HLCLOUDS : maximum value for RC in distribution
-                  ZRCRAUTC, & ! RC value to begin rain formation =XCRIAUTC/RHODREF
-             ZHLC_HRCLOCAL, & ! HLCLOUDS : LWC that is High LWC local in HCF
-             ZHLC_LRCLOCAL, & ! HLCLOUDS : LWC that is Low  LWC local in LCF
-                              !    note that ZRC/CF = ZHLC_HRCLOCAL+ ZHLC_LRCLOCAL
-                              !                     = ZHLC_HRC/HCF+ ZHLC_LRC/LCF
-                  ZCC,      & ! terminal velocity
-                  ZFSEDC1D, & ! For cloud sedimentation
-                  ZRAY1D,   & ! Mean radius
-                  ZWLBDA      ! Mean freepath
-REAL, DIMENSION(:,:), ALLOCATABLE :: ZZW1 ! Work arrays
-REAL            :: ZTIMAUTIC,XDUMMY6,XDUMMY7
-REAL            :: ZINVTSTEP
-REAL, DIMENSION(SIZE(XRTMIN))     :: ZRTMIN
-! XRTMIN = Minimum value for the mixing ratio
-! ZRTMIN = Minimum value for the source (tendency)
-!
-INTEGER , DIMENSION(SIZE(GMICRO)) :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                           :: JL       ! and PACK intrinsics
-REAL :: ZCOEFFRCM
-LOGICAL :: GPRESENT_PFPR,GPRESENT_PSEA
-!
-!acc declare create(GMICRO,GWET,GHAIL,GDEP,                                      &
-!acc &              IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3,ZW,                            &
-!acc &              ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS,ZRAINFR,                       &
-!acc &              ZWSED,ZWSEDW1,ZWSEDW2,ZCONC_TMP,ZT,ZRAY,ZLBC,ZFSEDC,         &
-!acc &              ZRVT,ZRCT,ZRRT,ZRIT,ZRST,ZRGT,ZRHT,ZCIT,                     &
-!acc &              ZRVS,ZRCS,ZRRS,ZRIS,ZRSS,ZRGS,ZRHS,ZTHS,                     &
-!acc &              ZRHODREF,                                                    &
-!acc &              ZRHODJ,ZZT,ZPRES,ZZW,ZZW2,ZZW3,ZZW4,ZLSFACT,ZLVFACT,         &
-!acc &              ZUSW,ZSSI,ZLBDAS,ZLBDAG,ZLBDAH,                              &
-!acc &              ZAI,ZCJ,ZKA,ZDV,ZZW1,ZRTMIN)                                 &
-!acc & device_resident(GSEDIMR,GSEDIMC,GSEDIMI,GSEDIMS,GSEDIMG,GSEDIMH,          &
-!acc &                 GNEGT,GRIM,GACC,GDRY,GWORK,                               &
-!acc &                 ZCRIAUTI,ZEXNREF,ZLBDAR,ZRDRYG,ZRWETG,ZSIGMA_RC,ZCF,      &
-!acc &                 I1,I2,I3                                                  )
-
-!$acc declare copyin(XALPHA1,XCEXVT,XEXCSEDI,XEX0DEPG,XEX1DEPG,XEX0DEPS,XEX1DEPS,       &
-!$acc &              XEX0EVAR,XEX1EVAR,                                                 &
-!$acc &              XEXCACCR,XEXIAGGS,XEXSEDG,XEXSEDH,XEXSEDR,XEXSEDS,                 &
-!$acc &              XFSEDC,XFSEDG,XLBC,XLBEXC,XLBEXG,XLBEXI,XLBEXR,XLBEXS,XRTMIN,      &
-!$acc &              XKER_RACCS,XKER_RACCSS,XKER_SACCRG,XCXS,                           &
-!$acc &              XRIMINTP1,XEXCRIMSS,XGAMINC_RIM1,XGAMINC_RIM2,XEXCRIMSG,XEXSRIMCG, &
-!$acc &              XEXICFRR,XEXRCFRI,XKER_SDRYG,XCOLEXSG,XCXG,XKER_RDRYG,             &
-!$acc &              XALPHAC,XALPHAC2,XNUC,XNUC2   )
-
-!$acc declare create(ZHLC_HCF3D,ZHLC_LCF3D,ZHLC_HRC3D,ZHLC_LRC3D,                            &
-!$acc &              ZRVT,ZRCS,ZRCT,ZRGS,ZRGT,ZRHS,ZRHT,ZRRS,ZRRT,ZRSS,ZRST,ZRVS,            &
-!$acc &              ZCIT,ZRIS,ZRIT,ZTHS,ZTHT,ZTHLT,ZCRIAUTI,                                &
-!$acc &              ZRHODJ,ZZT,ZPRES,ZZW,ZLSFACT,ZLVFACT,ZUSW,ZSSI,ZLBDAR_RF,ZLBDAG,ZLBDAH, &
-!$acc &              ZAI,ZCJ,ZKA,ZDV,ZCF,ZRF,ZHLC_HCF,ZHLC_HRC,ZHLC_LCF,ZHLC_LRC,ZZW1,       &
-!$acc &              GPRESENT_PFPR,GPRESENT_PSEA                                             )
-
-!$acc data create(GMICRO,GDEP,GWORK,                                                    &
-!$acc &              ZW,                                                                &
-!$acc &              ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS,ZRAINFR,                             &
-!$acc &              ZWSED,ZWSEDW1,ZWSEDW2,ZCONC_TMP,ZT,ZRAY,ZLBC,ZFSEDC,               &
-!$acc &              ZRTMIN,                                                            &
-!$acc &                 GSEDIMR,GSEDIMC,GSEDIMI,GSEDIMS,GSEDIMG,GSEDIMH,                &
-!$acc &                 GNEGT,I1,I2,I3                                                  )
-!
-IF (MPPDB_INITIALIZED) THEN
-  !Check all IN arrays
-  CALL MPPDB_CHECK(PDZZ,"RAIN_ICE beg:PDZZ")
-  CALL MPPDB_CHECK(PRHODJ,"RAIN_ICE beg:PRHODJ")
-  CALL MPPDB_CHECK(PRHODREF,"RAIN_ICE beg:PRHODREF")
-  CALL MPPDB_CHECK(PEXNREF,"RAIN_ICE beg:PEXNREF")
-  CALL MPPDB_CHECK(PPABST,"RAIN_ICE beg:PPABST")
-  CALL MPPDB_CHECK(PCLDFR,"RAIN_ICE beg:PCLDFR")
-  CALL MPPDB_CHECK(PTHT,"RAIN_ICE beg:PTHT")
-  CALL MPPDB_CHECK(PRVT,"RAIN_ICE beg:PRVT")
-  CALL MPPDB_CHECK(PRCT,"RAIN_ICE beg:PRCT")
-  CALL MPPDB_CHECK(PRRT,"RAIN_ICE beg:PRRT")
-  CALL MPPDB_CHECK(PRIT,"RAIN_ICE beg:PRIT")
-  CALL MPPDB_CHECK(PRST,"RAIN_ICE beg:PRST")
-  CALL MPPDB_CHECK(PRGT,"RAIN_ICE beg:PRGT")
-  CALL MPPDB_CHECK(PSIGS,"RAIN_ICE beg:PSIGS")
-  IF (PRESENT(PSEA))  CALL MPPDB_CHECK(PSEA,"RAIN_ICE beg:PSEA")
-  IF (PRESENT(PTOWN)) CALL MPPDB_CHECK(PTOWN,"RAIN_ICE beg:PTOWN")
-  IF (PRESENT(PRHT))  CALL MPPDB_CHECK(PRHT,"RAIN_ICE beg:PRHT")
-  !Check all INOUT arrays
-  CALL MPPDB_CHECK(PCIT,"RAIN_ICE beg:PCIT")
-  CALL MPPDB_CHECK(PTHS,"RAIN_ICE beg:PTHS")
-  CALL MPPDB_CHECK(PRVS,"RAIN_ICE beg:PRVS")
-  CALL MPPDB_CHECK(PRCS,"RAIN_ICE beg:PRCS")
-  CALL MPPDB_CHECK(PRRS,"RAIN_ICE beg:PRRS")
-  CALL MPPDB_CHECK(PRIS,"RAIN_ICE beg:PRIS")
-  CALL MPPDB_CHECK(PRSS,"RAIN_ICE beg:PRSS")
-  CALL MPPDB_CHECK(PRGS,"RAIN_ICE beg:PRGS")
-  CALL MPPDB_CHECK(PINPRC,"RAIN_ICE beg:PINPRC")
-  CALL MPPDB_CHECK(PINDEP,"RAIN_ICE beg:PINDEP")
-  CALL MPPDB_CHECK(PINPRR,"RAIN_ICE beg:PINPRR")
-  CALL MPPDB_CHECK(PINPRR3D,"RAIN_ICE beg:PINPRR3D")
-  CALL MPPDB_CHECK(PEVAP3D,"RAIN_ICE beg:PEVAP3D")
-  CALL MPPDB_CHECK(PINPRS,"RAIN_ICE beg:PINPRS")
-  CALL MPPDB_CHECK(PINPRG,"RAIN_ICE beg:PINPRG")
-  IF (PRESENT(PRHS))   CALL MPPDB_CHECK(PRHS,"RAIN_ICE beg:PRHS")
-  IF (PRESENT(PINPRH)) CALL MPPDB_CHECK(PINPRH,"RAIN_ICE beg:PINPRH")
-END IF
 !
-#ifdef _OPENACC
-IF ( KRR == 7 ) THEN
-  PRINT *,'OPENACC: RAIN_ICE: KRR=7 not yet tested'
-END IF
-#endif
 !-------------------------------------------------------------------------------
 !
 !*       1.     COMPUTE THE LOOP BOUNDS
 !               -----------------------
 !
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
+IIT=SIZE(PDZZ,1)
+IJT=SIZE(PDZZ,2)
 IKB=KKA+JPVEXT*KKL
 IKE=KKU-JPVEXT*KKL
 IKT=SIZE(PDZZ,3)
@@ -587,30 +437,18 @@ IKTE=IKT-JPVEXT
 !
 ZINVTSTEP=1./PTSTEP
 !
-IF (PRESENT(PFPR)) THEN
-  GPRESENT_PFPR = .TRUE.
-ELSE
-  GPRESENT_PFPR = .FALSE.
-END IF
-!
-IF (PRESENT(PSEA)) THEN
-  GPRESENT_PSEA = .TRUE.
-ELSE
-  GPRESENT_PSEA = .FALSE.
-END IF
-!$acc update device(GPRESENT_PFPR,GPRESENT_PSEA)
-!
 !
 !*       2.     COMPUTES THE SLOW COLD PROCESS SOURCES
 !               --------------------------------------
 !
-CALL RAIN_ICE_NUCLEATION
+CALL RAIN_ICE_NUCLEATION(IIB, IIE, IJB, IJE, IKTB, IKTE,KRR,PTSTEP,&
+     PTHT,PPABST,PRHODJ,PRHODREF,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,&
+     PCIT,PEXNREF,PTHS,PRVS,PRIS,ZT,PRHT)
 !
 !
 !  optimization by looking for locations where
 !  the microphysical fields are larger than a minimal value only !!!
 !
-!$acc kernels present(GMICRO,PRCT,PRRT,PRIT,PRST,PRGT,PRHT,XRTMIN)
 GMICRO(:,:,:) = .FALSE.
 
  IF ( KRR == 7 ) THEN
@@ -629,14 +467,8 @@ GMICRO(:,:,:) = .FALSE.
                 PRST(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(5) .OR. &
                 PRGT(IIB:IIE,IJB:IJE,IKTB:IKTE)>XRTMIN(6)
  END IF
-!$acc end kernels
-
-#ifndef _OPENACC
-IMICRO = COUNTJV3D( GMICRO(:,:,:),I1(:),I2(:),I3(:))
-#else
-CALL COUNTJV3D_DEVICE(GMICRO(:,:,:),I1(:),I2(:),I3(:),IMICRO)
-#endif
 
+IMICRO = COUNTJV( GMICRO(:,:,:),I1(:),I2(:),I3(:))
 IF( IMICRO >= 0 ) THEN
   ALLOCATE(ZRVT(IMICRO))
   ALLOCATE(ZRCT(IMICRO))
@@ -644,7 +476,11 @@ IF( IMICRO >= 0 ) THEN
   ALLOCATE(ZRIT(IMICRO))
   ALLOCATE(ZRST(IMICRO))
   ALLOCATE(ZRGT(IMICRO))
-  IF ( KRR == 7 ) ALLOCATE(ZRHT(IMICRO))
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZRHT(IMICRO))
+  ELSE
+    ALLOCATE(ZRHT(0))
+  END IF
   ALLOCATE(ZCIT(IMICRO))
   ALLOCATE(ZRVS(IMICRO))
   ALLOCATE(ZRCS(IMICRO))
@@ -652,7 +488,11 @@ IF( IMICRO >= 0 ) THEN
   ALLOCATE(ZRIS(IMICRO))
   ALLOCATE(ZRSS(IMICRO))
   ALLOCATE(ZRGS(IMICRO))
-  IF ( KRR == 7 ) ALLOCATE(ZRHS(IMICRO))
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZRHS(IMICRO))
+  ELSE
+    ALLOCATE(ZRHS(0))
+  END IF
   ALLOCATE(ZTHS(IMICRO))
   ALLOCATE(ZTHT(IMICRO))
   ALLOCATE(ZTHLT(IMICRO))
@@ -671,52 +511,7 @@ IF( IMICRO >= 0 ) THEN
   ALLOCATE(ZRCRAUTC(IMICRO))
   ALLOCATE(ZHLC_HRCLOCAL(IMICRO))
   ALLOCATE(ZHLC_LRCLOCAL(IMICRO))
-!
-  ALLOCATE(ZZW(IMICRO))
-  ALLOCATE(ZZW2(IMICRO))
-  ALLOCATE(ZZW3(IMICRO))
-  ALLOCATE(ZZW4(IMICRO))
-  ALLOCATE(ZLSFACT(IMICRO))
-  ALLOCATE(ZLVFACT(IMICRO))
-!
-  ALLOCATE(ZUSW(IMICRO))
-  ALLOCATE(ZSSI(IMICRO))
-!
-  ALLOCATE(ZLBDAR(IMICRO))
-  ALLOCATE(ZLBDAR_RF(IMICRO))
-  ALLOCATE(ZLBDAS(IMICRO))
-  ALLOCATE(ZLBDAG(IMICRO))
-  IF ( KRR == 7 ) ALLOCATE(ZLBDAH(IMICRO))
-  ALLOCATE(ZRDRYG(IMICRO))
-  ALLOCATE(ZRWETG(IMICRO))
-  ALLOCATE(ZAI(IMICRO))
-  ALLOCATE(ZCJ(IMICRO))
-  ALLOCATE(ZKA(IMICRO))
-  ALLOCATE(ZDV(IMICRO))
-  ALLOCATE(GWORK(IMICRO))
-!
-  IF ( KRR == 7 ) THEN
-    ALLOCATE(ZZW1(IMICRO,7))
-  ELSE IF( KRR == 6 ) THEN
-    ALLOCATE(ZZW1(IMICRO,6))
-  ENDIF
-!
-  IF (LBU_ENABLE .OR. LLES_CALL) THEN
-    ALLOCATE(ZRHODJ(IMICRO))
-  END IF
-!
-!$acc data create(ZRVT,ZRCT,ZRRT,ZRIT,ZRST,ZRGT,ZRHT,ZCIT,                     &
-!$acc &              ZRVS,ZRCS,ZRRS,ZRIS,ZRSS,ZRGS,ZRHS,ZTHS,                     &
-!$acc &              ZRHODREF,                                                    &
-!$acc &              ZZT,ZPRES,ZZW,ZLSFACT,ZLVFACT,                        &
-!$acc &              ZUSW,ZSSI,ZLBDAS,ZLBDAG,ZLBDAH,                       &
-!$acc &              ZAI,ZCJ,ZKA,ZDV,ZZW1,                                 &
-!$acc &                 GWORK,                                             &
-!$acc &                 ZEXNREF,ZLBDAR,ZRDRYG,ZRWETG,ZSIGMA_RC,ZCF,ZRCRAUTC, &
-!$acc &              ZRF,ZHLC_HCF,ZHLC_LCF,ZHLC_HRC,ZHLC_LRC)
-!
-!$acc kernels present(ZTHT,ZTHLT)
-!$acc loop independent
+
   DO JL=1,IMICRO
     ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
     ZRCT(JL) = PRCT(I1(JL),I2(JL),I3(JL))
@@ -724,16 +519,20 @@ IF( IMICRO >= 0 ) THEN
     ZRIT(JL) = PRIT(I1(JL),I2(JL),I3(JL))
     ZRST(JL) = PRST(I1(JL),I2(JL),I3(JL))
     ZRGT(JL) = PRGT(I1(JL),I2(JL),I3(JL))
+    IF ( KRR == 7 ) ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL))
     ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
-    !
     ZCF(JL) = PCLDFR(I1(JL),I2(JL),I3(JL))
-    !
+    IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
+      ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2.
+!     ZSIGMA_RC(JL) = MAX(PSIGS(I1(JL),I2(JL),I3(JL)) * 2., 1.E-12)
+    END IF
     ZRVS(JL) = PRVS(I1(JL),I2(JL),I3(JL))
     ZRCS(JL) = PRCS(I1(JL),I2(JL),I3(JL))
     ZRRS(JL) = PRRS(I1(JL),I2(JL),I3(JL))
     ZRIS(JL) = PRIS(I1(JL),I2(JL),I3(JL))
     ZRSS(JL) = PRSS(I1(JL),I2(JL),I3(JL))
     ZRGS(JL) = PRGS(I1(JL),I2(JL),I3(JL))
+    IF ( KRR == 7 ) ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
     ZTHS(JL) = PTHS(I1(JL),I2(JL),I3(JL))
 !
     ZRHODREF(JL) = PRHODREF(I1(JL),I2(JL),I3(JL))
@@ -743,55 +542,54 @@ IF( IMICRO >= 0 ) THEN
     ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
     ZEXNREF(JL) = PEXNREF(I1(JL),I2(JL),I3(JL))
   ENDDO
-  !
-  IF (KRR == 7 ) THEN
-    DO JL=1,IMICRO
-      ZRHT(JL) = PRHT(I1(JL),I2(JL),I3(JL))
-      ZRHS(JL) = PRHS(I1(JL),I2(JL),I3(JL))
-    ENDDO
-  ENDIF
+  ALLOCATE(ZZW(IMICRO))
+  ALLOCATE(ZLSFACT(IMICRO))
+  ALLOCATE(ZLVFACT(IMICRO))
+    ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
+                                    +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
+    ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZW(:) ! L_s/(Pi_ref*C_ph)
+    ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZW(:) ! L_v/(Pi_ref*C_ph)
+  ALLOCATE(ZUSW(IMICRO))
+  ALLOCATE(ZSSI(IMICRO))
+    ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
+    ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
+                                                      ! Supersaturation over ice
 !
-  IF ( HSUBG_AUCV == 'PDF ' .AND. CSUBG_PR_PDF == 'SIGM' ) THEN
-    DO JL=1,IMICRO
-      ZSIGMA_RC(JL) = PSIGS(I1(JL),I2(JL),I3(JL)) * 2.
-!     ZSIGMA_RC(JL) = MAX(PSIGS(I1(JL),I2(JL),I3(JL)) * 2., 1.E-12)
-    END DO
+  ALLOCATE(ZLBDAR(IMICRO))
+  ALLOCATE(ZLBDAR_RF(IMICRO))
+  ALLOCATE(ZLBDAS(IMICRO))
+  ALLOCATE(ZLBDAG(IMICRO))
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZLBDAH(IMICRO))
+  ELSE
+    ALLOCATE(ZLBDAH(0))
   END IF
+  ALLOCATE(ZRDRYG(IMICRO))
+  ALLOCATE(ZRWETG(IMICRO))
+  ALLOCATE(ZAI(IMICRO))
+  ALLOCATE(ZCJ(IMICRO))
+  ALLOCATE(ZKA(IMICRO))
+  ALLOCATE(ZDV(IMICRO))
+!
+  IF ( KRR == 7 ) THEN
+    ALLOCATE(ZZW1(IMICRO,7))
+  ELSE IF( KRR == 6 ) THEN
+    ALLOCATE(ZZW1(IMICRO,6))
+  ENDIF
 !
-  ZZW(:)  = ZEXNREF(:)*( XCPD+XCPV*ZRVT(:)+XCL*(ZRCT(:)+ZRRT(:)) &
-                                    +XCI*(ZRIT(:)+ZRST(:)+ZRGT(:)) )
-  ZLSFACT(:) = (XLSTT+(XCPV-XCI)*(ZZT(:)-XTT))/ZZW(:) ! L_s/(Pi_ref*C_ph)
-  ZLVFACT(:) = (XLVTT+(XCPV-XCL)*(ZZT(:)-XTT))/ZZW(:) ! L_v/(Pi_ref*C_ph)
-
-#ifndef MNH_BITREP
-  ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )
-#else
-  ZZW(:) = BR_EXP( XALPI - XBETAI/ZZT(:) - XGAMI*BR_LOG(ZZT(:) ) )
-#endif
-  ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
-                                                    ! Supersaturation over ice
-!$acc end kernels
-  !
-!$acc kernels present(ZRCRAUTC,ZRHODJ)
   IF (LBU_ENABLE .OR. LLES_CALL) THEN
-    DO JL=1,IMICRO
-      ZRHODJ(JL) = PRHODJ(I1(JL),I2(JL),I3(JL))
-    END DO
+    ALLOCATE(ZRHODJ(IMICRO))
+    ZRHODJ(:) = PACK( PRHODJ(:,:,:),MASK=GMICRO(:,:,:) )
+  ELSE
+    ALLOCATE(ZRHODJ(0))
   END IF
 !
+
   !Cloud water split between high and low content part is done here
   !according to autoconversion option
   ZRCRAUTC(:)   = XCRIAUTC/ZRHODREF(:) ! Autoconversion rc threshold
-!$acc end kernels
-#ifdef _OPENACC
-  IF (LBU_ENABLE .OR. LLES_CALL) THEN
-!$acc update self(ZRHODJ) !used only in BUDGET
-  ENDIF
-#endif
   IF (HSUBG_AUCV == 'NONE') THEN
-!$acc kernels present(ZRCRAUTC,ZHLC_HCF,ZHLC_LCF,ZHLC_HRC,ZHLC_LRC,ZRF)
     !Cloud water is entirely in low or high part
-#ifndef _OPENACC
     WHERE (ZRCT(:) > ZRCRAUTC(:))
       ZHLC_HCF(:) = 1.
       ZHLC_LCF(:) = 0.0
@@ -811,36 +609,8 @@ IF( IMICRO >= 0 ) THEN
       ZHLC_LRC(:) = 0.0
       ZRF(:)      = 0.
     END WHERE
-#else
-!$acc loop independent private(JL)
-    DO JL=1,IMICRO
-      IF (ZRCT(JL) > ZRCRAUTC(JL)) THEN
-        ZHLC_HCF(JL) = 1.
-        ZHLC_LCF(JL) = 0.0
-        ZHLC_HRC(JL) = ZRCT(JL)
-        ZHLC_LRC(JL) = 0.0
-        ZRF(JL)      = 1.
-      ELSE IF (ZRCT(JL) > XRTMIN(2)) THEN
-        ZHLC_HCF(JL) = 0.0
-        ZHLC_LCF(JL) = 1.
-        ZHLC_HRC(JL) = 0.0
-        ZHLC_LRC(JL) = ZRCT(JL)
-        ZRF(JL)      = 0.
-      ELSE
-        ZHLC_HCF(JL) = 0.0
-        ZHLC_LCF(JL) = 0.0
-        ZHLC_HRC(JL) = 0.0
-        ZHLC_LRC(JL) = 0.0
-        ZRF(JL)      = 0.
-      END IF
-    END DO
-#endif
-!$acc end kernels
 
   ELSEIF (HSUBG_AUCV == 'CLFR') THEN
-#ifdef _OPENACC
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','OPENACC: HSUBG_AUCV="CLFR" not yet implemented')
-#endif
     !Cloud water is only in the cloudy part and entirely in low or high part
       WHERE (ZCF(:) > 0. .AND. ZRCT(:) > ZRCRAUTC(:)*ZCF(:))
         ZHLC_HCF(:) = ZCF(:)
@@ -869,9 +639,6 @@ IF( IMICRO >= 0 ) THEN
       END WHERE
 
   ELSEIF (HSUBG_AUCV == 'PDF ') THEN
-#ifdef _OPENACC
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','OPENACC: HSUBG_AUCV="PDF" not yet implemented')
-#endif
     !Cloud water is split between high and low part according to a PDF
     !    'HLCRECTPDF'    : rectangular PDF form
     !    'HLCTRIANGPDF'  : triangular PDF form
@@ -995,33 +762,29 @@ IF( IMICRO >= 0 ) THEN
 
     ELSE
       !wrong CSUBG_PR_PDF case
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','wrong CSUBG_PR_PDF case')
+      WRITE(*,*) 'wrong CSUBG_PR_PDF case'
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','')      
     ENDIF
   ELSE
     !wrong HSUBG_AUCV case
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','wrong HSUBG_AUCV case')
+    WRITE(*,*)'wrong HSUBG_AUCV case'
+    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','')  
   ENDIF
 
   !Diagnostic of precipitation fraction
-#ifndef _OPENACC
   ZW(:,:,:) = 0.
-  ZRAINFR(:,:,:) = UNPACK( ZRF(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-#else
-!$acc kernels present(ZRF,ZRAINFR)
-  ZRAINFR(:,:,:) = 0.
-  DO JL=1,IMICRO
-    ZRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
-  END DO
-!$acc end kernels
-#endif
-  CALL RAINFR_VERT(ZRAINFR(:,:,:), PRRT(:,:,:))
-!$acc kernels present(ZRF,ZRAINFR)
+  PRAINFR(:,:,:) = UNPACK( ZRF(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
+  CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRT(:,:,:))
   DO JL=1,IMICRO
-    ZRF(JL)=ZRAINFR(I1(JL),I2(JL),I3(JL))
+    ZRF(JL)=PRAINFR(I1(JL),I2(JL),I3(JL))
   END DO
-!$acc end kernels
 !
-  CALL RAIN_ICE_SLOW
+  CALL RAIN_ICE_SLOW(GMICRO, ZINVTSTEP, ZRHODREF,                      &
+                     ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZRHODJ, ZZT, ZPRES, &
+                     ZLSFACT, ZLVFACT,                                 &
+                     ZSSI, PRHODJ, PTHS, PRVS,                         &
+                     ZRVS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZTHS,         &
+                     ZAI, ZCJ, ZKA, ZDV, ZLBDAS, ZLBDAG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1031,30 +794,23 @@ IF( IMICRO >= 0 ) THEN
 !
 !*       3.1    compute the slope parameter Lbda_r
 !
-!$acc kernels
   !ZLBDAR will be used when we consider rain diluted over the grid box
-  WHERE( ZRRT(1:IMICRO)>0.0 )
-#ifndef MNH_BITREP
-    ZLBDAR(1:IMICRO)  = XLBR*( ZRHODREF(1:IMICRO)*MAX( ZRRT(1:IMICRO),XRTMIN(3) ) )**XLBEXR
-#else
-    ZLBDAR(1:IMICRO)  = XLBR*BR_POW( ZRHODREF(1:IMICRO)*MAX( ZRRT(1:IMICRO),XRTMIN(3) ) ,XLBEXR)
-#endif
+  WHERE( ZRRT(:)>0.0 )
+    ZLBDAR(:)  = XLBR*( ZRHODREF(:)*MAX( ZRRT(:),XRTMIN(3) ) )**XLBEXR
   END WHERE
   !ZLBDAR_RF will be used when we consider rain concentrated in its fraction
-  WHERE( ZRRT(1:IMICRO)>0.0 .AND. ZRF(1:IMICRO)>0.0 )
-#ifndef MNH_BITREP
-    ZLBDAR_RF(1:IMICRO)  = XLBR*( ZRHODREF(1:IMICRO) *MAX( ZRRT(1:IMICRO)/ZRF(1:IMICRO)  , XRTMIN(3) ) )**XLBEXR
-#else
-    ZLBDAR_RF(1:IMICRO)  = XLBR*BR_POW( ZRHODREF(1:IMICRO) *MAX( ZRRT(1:IMICRO)/ZRF(1:IMICRO)  , XRTMIN(3) ) ,XLBEXR)
-#endif
+  WHERE( ZRRT(:)>0.0 .AND. ZRF(:)>0.0 )
+    ZLBDAR_RF(:)  = XLBR*( ZRHODREF(:) *MAX( ZRRT(:)/ZRF(:)  , XRTMIN(3) ) )**XLBEXR
   ELSEWHERE
-    ZLBDAR_RF(1:IMICRO)  = 0.
+    ZLBDAR_RF(:)  = 0.
   END WHERE
-!$acc end kernels
 !
   IF( OWARM ) THEN    !  Check if the formation of the raindrops by the slow
                       !  warm processes is allowed
-    CALL RAIN_ICE_WARM
+    PEVAP3D(:,:,:)= 0.
+    CALL RAIN_ICE_WARM(GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC,           &
+                       ZRHODJ, ZPRES, ZZT, ZLBDAR, ZLBDAR_RF, ZLVFACT, ZCJ, ZKA, ZDV, ZRF, ZCF, ZTHT, ZTHLT, &
+                       PRHODJ, PTHS, PRVS, ZRVS, ZRCS, ZRRS, ZTHS, ZUSW, PEVAP3D)
   END IF
 !
 !-------------------------------------------------------------------------------
@@ -1063,7 +819,9 @@ IF( IMICRO >= 0 ) THEN
 !*       4.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_s
 !               ----------------------------------------------
 !
-  CALL RAIN_ICE_FAST_RS
+  CALL RAIN_ICE_FAST_RS(PTSTEP, GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZRST, ZRHODJ, ZPRES, ZZT, &
+                        ZLBDAR, ZLBDAS, ZLSFACT, ZLVFACT, ZCJ, ZKA, ZDV, PRHODJ, PTHS, &
+                        ZRCS, ZRRS, ZRSS, ZRGS, ZTHS)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1071,7 +829,10 @@ IF( IMICRO >= 0 ) THEN
 !*       5.     COMPUTES THE FAST COLD PROCESS SOURCES FOR r_g
 !               ----------------------------------------------
 !
-  CALL RAIN_ICE_FAST_RG
+  CALL RAIN_ICE_FAST_RG(KRR, GMICRO, ZRHODREF, ZRVT, ZRCT, ZRRT, ZRIT, ZRST, ZRGT, ZCIT, &
+                        ZRHODJ, ZPRES, ZZT, ZLBDAR, ZLBDAS, ZLBDAG, ZLSFACT, ZLVFACT, &
+                        ZCJ, ZKA, ZDV, PRHODJ, PTHS, ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, &
+                        ZUSW, ZRDRYG, ZRWETG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -1080,7 +841,9 @@ IF( IMICRO >= 0 ) THEN
 !               ----------------------------------------------
 !
  IF ( KRR == 7 ) THEN
-  CALL RAIN_ICE_FAST_RH
+  CALL RAIN_ICE_FAST_RH(GMICRO, ZRHODREF, ZRVT, ZRCT, ZRIT, ZRST, ZRGT, ZRHT, ZRHODJ, ZPRES, &
+                        ZZT, ZLBDAS, ZLBDAG, ZLBDAH, ZLSFACT, ZLVFACT, ZCJ, ZKA, ZDV, PRHODJ, PTHS, &
+                        ZRCS, ZRRS, ZRIS, ZRSS, ZRGS, ZRHS, ZTHS, ZUSW)
  END IF
 !
 !-------------------------------------------------------------------------------
@@ -1089,14 +852,14 @@ IF( IMICRO >= 0 ) THEN
 !*       7.     COMPUTES SPECIFIC SOURCES OF THE WARM AND COLD CLOUDY SPECIES
 !               -------------------------------------------------------------
 !
-  CALL RAIN_ICE_FAST_RI
+  CALL RAIN_ICE_FAST_RI(GMICRO, ZRHODREF, ZRIT, ZRHODJ, ZZT, ZSSI, ZLSFACT, ZLVFACT, &
+                        ZAI, ZCJ, PRHODJ, PTHS, ZCIT, ZRCS, ZRIS, ZTHS)
 !
 !
 !-------------------------------------------------------------------------------
 !
 !
 !
-#ifndef _OPENACC
   ZW(:,:,:) = PRVS(:,:,:)
   PRVS(:,:,:) = UNPACK( ZRVS(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
   ZW(:,:,:) = PRCS(:,:,:)
@@ -1118,63 +881,18 @@ IF( IMICRO >= 0 ) THEN
   ZW(:,:,:) = PCIT(:,:,:)
   PCIT(:,:,:) = UNPACK( ZCIT(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
 !
-  ZW(:,:,:) = ZRAINFR(:,:,:)
-  ZRAINFR(:,:,:) = UNPACK( ZRF(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  ZW(:,:,:) = 0.
-  ZHLC_HCF3D(:,:,:) = UNPACK( ZHLC_HCF(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  ZW(:,:,:) = 0.
-  ZHLC_LCF3D(:,:,:) = UNPACK( ZHLC_LCF(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  ZW(:,:,:) = 0.
-  ZHLC_HRC3D(:,:,:) = UNPACK( ZHLC_HRC(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-!
-  ZW(:,:,:) = 0.
-  ZHLC_LRC3D(:,:,:) = UNPACK( ZHLC_LRC(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
-#else
-!$acc kernels present(ZRAINFR,ZRF)
-  ZHLC_HCF3D(:,:,:) = 0.0
-  ZHLC_LCF3D(:,:,:) = 0.0
-  ZHLC_HRC3D(:,:,:) = 0.0
-  ZHLC_LRC3D(:,:,:) = 0.0
-!$acc loop independent
-  DO JL=1,IMICRO
-    PRVS(I1(JL),I2(JL),I3(JL)) = ZRVS(JL)
-    PRCS(I1(JL),I2(JL),I3(JL)) = ZRCS(JL)
-    PRRS(I1(JL),I2(JL),I3(JL)) = ZRRS(JL)
-    PRIS(I1(JL),I2(JL),I3(JL)) = ZRIS(JL)
-    PRSS(I1(JL),I2(JL),I3(JL)) = ZRSS(JL)
-    PRGS(I1(JL),I2(JL),I3(JL)) = ZRGS(JL)
-    PTHS(I1(JL),I2(JL),I3(JL)) = ZTHS(JL)
-    PCIT(I1(JL),I2(JL),I3(JL)) = ZCIT(JL)
-    !
-    ZRAINFR(I1(JL),I2(JL),I3(JL)) = ZRF(JL)
-    !
-    ZHLC_HCF3D(I1(JL),I2(JL),I3(JL)) = ZHLC_HCF(JL)
-    ZHLC_LCF3D(I1(JL),I2(JL),I3(JL)) = ZHLC_LCF(JL)
-    ZHLC_HRC3D(I1(JL),I2(JL),I3(JL)) = ZHLC_HRC(JL)
-    ZHLC_LRC3D(I1(JL),I2(JL),I3(JL)) = ZHLC_LRC(JL)
-  END DO
-  IF ( KRR == 7 ) THEN
-    DO JL=1,IMICRO
-      PRHS(I1(JL),I2(JL),I3(JL)) = ZRHS(JL)
-    END DO
-  END IF
-!$acc end kernels
-#endif
+  ZW(:,:,:) = PRAINFR(:,:,:)
+  PRAINFR(:,:,:) = UNPACK( ZRF(:),MASK=GMICRO(:,:,:),FIELD=ZW(:,:,:) )
 !
 !
 !
-!$acc end data
   DEALLOCATE(ZZW1)
-  DEALLOCATE(GWORK)
   DEALLOCATE(ZDV)
   DEALLOCATE(ZCJ)
   DEALLOCATE(ZRDRYG)
   DEALLOCATE(ZRWETG)
   DEALLOCATE(ZLBDAG)
-  IF ( KRR == 7 ) DEALLOCATE(ZLBDAH)
+  DEALLOCATE(ZLBDAH)
   DEALLOCATE(ZLBDAS)
   DEALLOCATE(ZLBDAR)
   DEALLOCATE(ZLBDAR_RF)
@@ -1183,9 +901,6 @@ IF( IMICRO >= 0 ) THEN
   DEALLOCATE(ZLVFACT)
   DEALLOCATE(ZLSFACT)
   DEALLOCATE(ZZW)
-  DEALLOCATE(ZZW2)
-  DEALLOCATE(ZZW3)
-  DEALLOCATE(ZZW4)
   DEALLOCATE(ZEXNREF)
   DEALLOCATE(ZPRES)
   DEALLOCATE(ZRHODREF)
@@ -1194,7 +909,7 @@ IF( IMICRO >= 0 ) THEN
   DEALLOCATE(ZTHS)
   DEALLOCATE(ZTHT)
   DEALLOCATE(ZTHLT)
-  IF ( KRR == 7 ) DEALLOCATE(ZRHS)
+  DEALLOCATE(ZRHS)
   DEALLOCATE(ZRGS)
   DEALLOCATE(ZRSS)
   DEALLOCATE(ZRIS)
@@ -1203,7 +918,7 @@ IF( IMICRO >= 0 ) THEN
   DEALLOCATE(ZRVS)
   DEALLOCATE(ZCIT)
   DEALLOCATE(ZRGT)
-  IF ( KRR == 7 ) DEALLOCATE(ZRHT)
+  DEALLOCATE(ZRHT)
   DEALLOCATE(ZRST)
   DEALLOCATE(ZRIT)
   DEALLOCATE(ZRRT)
@@ -1321,64 +1036,33 @@ END IF
 !
 !*       8.1    time splitting loop initialization
 !
-ZTSPLITR= PTSTEP / FLOAT(KSPLITR)
 !
 !
 IF (HSEDIM == 'STAT') THEN
-  CALL RAIN_ICE_SEDIMENTATION_STAT
+  CALL RAIN_ICE_SEDIMENTATION_STAT( IIB, IIE, IJB, IJE, IKB, IKE, IKTB, IKTE, IKT, KKL, KRR,                &
+                                    PTSTEP, OSEDIC, PINPRC, PINDEP,                                         &
+                                    PINPRR, PINPRS, PINPRG, PDZZ, PRHODREF, PPABST, PTHT, PRHODJ, PINPRR3D, &
+                                    PRCS, PRCT, PRRS, PRRT, PRIS, PRSS, PRST, PRGS, PRGT,                   &
+                                    PSEA, PTOWN, PINPRH, PRHS, PRHT, PFPR )
 ELSEIF (HSEDIM == 'SPLI') THEN
-  CALL RAIN_ICE_SEDIMENTATION_SPLIT
+  CALL RAIN_ICE_SEDIMENTATION_SPLIT(IIB, IIE, IJB, IJE, IKB, IKE, IKTB, IKTE, IKT, KKL,&
+  KSPLITR,PTSTEP, &
+  KRR,OSEDIC,LDEPOSC,PINPRC,PINDEP,PINPRR,PINPRS,PINPRG,PDZZ,PRHODREF,PPABST,PTHT,PRHODJ,&
+      PINPRR3D,PRCS,PRCT,PRRS,PRRT,PRIS,PRIT,PRSS,PRST,PRGS,PRGT,PSEA,PTOWN,PINPRH,PRHS,PRHT,PFPR)
 ELSE
-  WRITE(*,*) ' STOP'
-  WRITE(*,*) ' NO SEDIMENTATION SCHEME FOR HSEDIM=',HSEDIM
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE','')  
+  call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE', 'no sedimentation scheme for HSEDIM='//HSEDIM )
 END IF
 !sedimentation of rain fraction
-!$acc kernels present(ZW,PRRS)
-ZW(:,:,:)=PRRS(:,:,:)*PTSTEP
-!$acc end kernels
-CALL RAINFR_VERT(ZRAINFR,ZW)
+CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP)
 !
-!$acc end data
-!
-IF (MPPDB_INITIALIZED) THEN
-  !Check all INOUT arrays
-  CALL MPPDB_CHECK(PCIT,"RAIN_ICE end:PCIT")
-  CALL MPPDB_CHECK(PTHS,"RAIN_ICE end:PTHS")
-  CALL MPPDB_CHECK(PRVS,"RAIN_ICE end:PRVS")
-  CALL MPPDB_CHECK(PRCS,"RAIN_ICE end:PRCS")
-  CALL MPPDB_CHECK(PRRS,"RAIN_ICE end:PRRS")
-  CALL MPPDB_CHECK(PRIS,"RAIN_ICE end:PRIS")
-  CALL MPPDB_CHECK(PRSS,"RAIN_ICE end:PRSS")
-  CALL MPPDB_CHECK(PRGS,"RAIN_ICE end:PRGS")
-  CALL MPPDB_CHECK(PINPRC,"RAIN_ICE end:PINPRC")
-  CALL MPPDB_CHECK(PINDEP,"RAIN_ICE end:PINDEP")
-  CALL MPPDB_CHECK(PINPRR,"RAIN_ICE end:PINPRR")
-  CALL MPPDB_CHECK(PINPRR3D,"RAIN_ICE end:PINPRR3D")
-  CALL MPPDB_CHECK(PEVAP3D,"RAIN_ICE end:PEVAP3D")
-  CALL MPPDB_CHECK(PINPRS,"RAIN_ICE end:PINPRS")
-  CALL MPPDB_CHECK(PINPRG,"RAIN_ICE end:PINPRG")
-  IF (PRESENT(PRHS))   CALL MPPDB_CHECK(PRHS,"RAIN_ICE end:PRHS")
-  IF (PRESENT(PINPRH)) CALL MPPDB_CHECK(PINPRH,"RAIN_ICE end:PINPRH")
-  !Check all OUT arrays
-  IF (PRESENT(PFPR)) THEN
-    DO JL=1,SIZE(PFPR,4)
-      CALL MPPDB_CHECK(PFPR(:,:,:,JL),"RAIN_ICE end:PFPR(:,:,:,JL)")
-    END DO
-  END IF
-END IF
-!-------------------------------------------------------------------------------
 !
 !-------------------------------------------------------------------------------
 !
-!
 CONTAINS
 !
-!
 !-------------------------------------------------------------------------------
 !
-!
-  SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT
+  FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC)
 !
 !*      0. DECLARATIONS
 !          ------------
@@ -1388,3457 +1072,27 @@ IMPLICIT NONE
 !*       0.2  declaration of local variables
 !
 !
-INTEGER , DIMENSION(SIZE(GSEDIMC)) :: IC1,IC2,IC3 ! Used to replace the COUNT
-INTEGER , DIMENSION(SIZE(GSEDIMR)) :: IR1,IR2,IR3 ! Used to replace the COUNT
-INTEGER , DIMENSION(SIZE(GSEDIMS)) :: IS1,IS2,IS3 ! Used to replace the COUNT
-INTEGER , DIMENSION(SIZE(GSEDIMI)) :: II1,II2,II3 ! Used to replace the COUNT
-INTEGER , DIMENSION(SIZE(GSEDIMG)) :: IG1,IG2,IG3 ! Used to replace the COUNT
-INTEGER , DIMENSION(SIZE(GSEDIMH)) :: IH1,IH2,IH3 ! Used to replace the COUNT
-REAL :: ZRHODREFLOC   ! RHO Dry REFerence
-REAL :: ZRSLOC,ZRTLOC ! Intermediary variables
-REAL :: ZWLBDC        ! Slope parameter of the droplet  distribution
-REAL :: ZCONC         ! Concentration of aerosols
-REAL :: ZZTLOC        ! Temperature
-REAL :: ZPRESLOC      ! Pressure
-REAL :: ZRAY1D        ! Mean radius
-REAL :: ZFSEDC1D      ! For cloud sedimentation
-REAL :: ZWLBDA        ! Mean freepath
-REAL :: ZCC           ! Terminal velocity
-REAL :: ZTMP1, ZTMP2, ZTMP3 ! Intermediate variables
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)) :: ZOMPSEA,ZTMP1_2D,ZTMP2_2D,ZTMP3_2D,ZTMP4_2D !Work arrays
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D !  droplet condensation
-!$acc declare device_resident(IC1,IC2,IC3,IR1,IR2,IR3,IS1,IS2,IS3,       &
-!$acc &                       II1,II2,II3,IG1,IG2,IG3,IH1,IH2,IH3)       &
-!$acc & device_resident(ZOMPSEA,ZTMP1_2D,ZTMP2_2D,ZTMP3_2D,ZTMP4_2D) &
-!$acc &                create(ZCONC3D)
-!-------------------------------------------------------------------------------
-!
-!
-!        O. Initialization of for sedimentation
-!
-!$acc kernels present(PINPRC,PINDEP,PINPRR,PINPRR3D,PINPRS,PINPRG,PINPRH)
-IF (OSEDIC) PINPRC (:,:) = 0.
-IF (LDEPOSC) PINDEP (:,:) = 0.
-PINPRR (:,:) = 0.
-PINPRR3D (:,:,:) = 0.
-PINPRS (:,:) = 0.
-PINPRG (:,:) = 0.
-IF ( KRR == 7 ) PINPRH (:,:) = 0.
-!$acc end kernels
-!
-!*       1. Parameters for cloud sedimentation
-!
-   IF (OSEDIC) THEN
-!$acc kernels present(XNUC,XNUC2) default(none)
-    ZTMP1 = 0.5*GAMMA(XNUC+ 1.0/XALPHAC )/(GAMMA(XNUC ))
-    ZTMP2 = 0.5*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2))
-!$acc end kernels
-    !
-!$acc kernels present(ZCONC_TMP,ZFSEDC,ZLBC,ZRAY,PSEA,PTOWN,XFSEDC,XLBC) present(ZOMPSEA,ZTMP1_2D,ZTMP2_2D,ZTMP3_2D,ZTMP4_2D) default(none)
-    IF (GPRESENT_PSEA) THEN
-!$acc loop independent collapse(2)
-      DO JJ=1,SIZE(PRHODREF,2)
-        DO JI=1,SIZE(PRHODREF,1)
-          ZOMPSEA(JI,JJ) = 1.-PSEA(JI,JJ)
-          ZTMP1_2D(JI,JJ) = PSEA(JI,JJ)*XLBC(2)+ZOMPSEA(JI,JJ)*XLBC(1)
-        END DO
-      END DO
-!acc loop independent collapse(3)
-!$acc loop independent
-      DO JK=IKTB,IKTE
-        DO JJ=1,SIZE(PRHODREF,2)
-          DO JI=1,SIZE(PRHODREF,1)
-            ZLBC(JI,JJ,JK)   = ZTMP1_2D(JI,JJ)
-          END DO
-        END DO
-      END DO
-      !
-!$acc loop independent collapse(2)
-      DO JJ=1,SIZE(PRHODREF,2)
-        DO JI=1,SIZE(PRHODREF,1)
-        ZTMP2_2D(JI,JJ) = PSEA(JI,JJ)*XFSEDC(2)+ZOMPSEA(JI,JJ)*XFSEDC(1)
-        END DO
-      END DO
-!$acc loop independent
-      DO JK=IKTB,IKTE
-        DO JJ=1,SIZE(PRHODREF,2)
-          DO JI=1,SIZE(PRHODREF,1)
-            ZFSEDC(JI,JJ,JK) = ZTMP2_2D(JI,JJ)
-          END DO
-        END DO
-      END DO
-      !
-!$acc loop independent collapse(2)
-      DO JJ=1,SIZE(PRHODREF,2)
-        DO JI=1,SIZE(PRHODREF,1)
-          ZCONC_TMP(JI,JJ)= PSEA(JI,JJ)*XCONC_SEA+ZOMPSEA(JI,JJ)*XCONC_LAND
-          ZTMP3_2D(JI,JJ) = (1.-PTOWN(JI,JJ))*ZCONC_TMP(JI,JJ)+PTOWN(JI,JJ)*XCONC_URBAN
-        END DO
-      END DO
-!$acc loop independent
-      DO JK=IKTB,IKTE
-        DO JJ=1,SIZE(PRHODREF,2)
-          DO JI=1,SIZE(PRHODREF,1)
-            ZCONC3D(JI,JJ,JK)= ZTMP3_2D(JI,JJ)
-          END DO
-        END DO
-      END DO
-      !
-      DO JJ=1,SIZE(PRHODREF,2)
-        DO JI=1,SIZE(PRHODREF,1)
-          ZTMP4_2D(JI,JJ) = MAX( 1. , ZOMPSEA(JI,JJ)*ZTMP1 + PSEA(JI,JJ)*ZTMP2 )
-        END DO
-      END DO
-!$acc loop independent
-      DO JK=IKTB,IKTE
-        DO JJ=1,SIZE(PRHODREF,2)
-          DO JI=1,SIZE(PRHODREF,1)
-            ZRAY(JI,JJ,JK)   = ZTMP4_2D(JI,JJ)
-          END DO
-        END DO
-      END DO
-    ELSE
-      ZFSEDC(:,:,:) = XFSEDC(1)
-      !
-      ZCONC3D(:,:,:) = XCONC_LAND
-      ZTMP3 = MAX(1.,ZTMP1)
-      ZRAY(:,:,:) = ZTMP3
-      ZLBC(:,:,:) = XLBC(1)
-    END IF
-!$acc end kernels
-   ENDIF
-!
-!*       2.    compute the fluxes
-!
-!  optimization by looking for locations where
-!  the precipitating fields are larger than a minimal value only !!!
-!  For optimization we consider each variable separately
-!$acc kernels present(GSEDIMR,GSEDIMC,GSEDIMI,GSEDIMS,GSEDIMG,GSEDIMH, &
-!$acc &               PRCS,PRCT,PRGS,PRGT,PRHS,PRHT,PRRS,PRRT,PRSS,PRST,ZPRCS,ZPRGS,ZPRHS,ZPRRS,ZPRSS,ZRTMIN,XRTMIN)
-ZRTMIN(:)    = XRTMIN(:) * ZINVTSTEP
-IF (OSEDIC) GSEDIMC(:,:,:) = .FALSE.
-#if 0
-GSEDIMR(:,:,:) = .FALSE.
-GSEDIMI(:,:,:) = .FALSE.
-GSEDIMS(:,:,:) = .FALSE.
-GSEDIMG(:,:,:) = .FALSE.
-#else
-!$acc loop collapse(3) independent
-DO JK=1,SIZE(GSEDIMR,3)
-  DO JJ=1,SIZE(GSEDIMR,2)
-    DO JI=1,SIZE(GSEDIMR,1)
-      GSEDIMR(JI,JJ,JK) = .FALSE.
-      GSEDIMI(JI,JJ,JK) = .FALSE.
-      GSEDIMS(JI,JJ,JK) = .FALSE.
-      GSEDIMG(JI,JJ,JK) = .FALSE.
-    END DO
-  END DO
-END DO
-#endif
-IF ( KRR == 7 ) GSEDIMH(:,:,:) = .FALSE.
-!
-! ZPiS = Specie i source creating during the current time step
-! PRiS = Source of the previous time step
-!
-IF (OSEDIC) THEN
-  ZPRCS(:,:,:) = PRCS(:,:,:)-PRCT(:,:,:)* ZINVTSTEP
-  PRCS(:,:,:)  = PRCT(:,:,:)* ZINVTSTEP
-END IF
-#if 0
-ZPRRS(:,:,:) = PRRS(:,:,:)-PRRT(:,:,:)* ZINVTSTEP
-ZPRSS(:,:,:) = PRSS(:,:,:)-PRST(:,:,:)* ZINVTSTEP
-ZPRGS(:,:,:) = PRGS(:,:,:)-PRGT(:,:,:)* ZINVTSTEP
-IF ( KRR == 7 ) ZPRHS(:,:,:) = PRHS(:,:,:)-PRHT(:,:,:)* ZINVTSTEP
-PRRS(:,:,:)  = PRRT(:,:,:)* ZINVTSTEP
-PRSS(:,:,:)  = PRST(:,:,:)* ZINVTSTEP
-PRGS(:,:,:)  = PRGT(:,:,:)* ZINVTSTEP
-IF ( KRR == 7 ) PRHS(:,:,:)  = PRHT(:,:,:)* ZINVTSTEP
-#else
-!$acc loop collapse(3) independent
-! DO JK=IKTB,IKTE
-!   DO JJ=IJB,IJE
-!     DO JI=IIB,IIE
-DO JK=1,SIZE(PRRS,3)
-  DO JJ=1,SIZE(PRRS,2)
-    DO JI=1,SIZE(PRRS,1)
-      ZPRRS(JI,JJ,JK) = PRRS(JI,JJ,JK)-PRRT(JI,JJ,JK)* ZINVTSTEP
-      ZPRSS(JI,JJ,JK) = PRSS(JI,JJ,JK)-PRST(JI,JJ,JK)* ZINVTSTEP
-      ZPRGS(JI,JJ,JK) = PRGS(JI,JJ,JK)-PRGT(JI,JJ,JK)* ZINVTSTEP
-      PRRS(JI,JJ,JK)  = PRRT(JI,JJ,JK)* ZINVTSTEP
-      PRSS(JI,JJ,JK)  = PRST(JI,JJ,JK)* ZINVTSTEP
-      PRGS(JI,JJ,JK)  = PRGT(JI,JJ,JK)* ZINVTSTEP
-    END DO
-  END DO
-END DO
-IF ( KRR == 7 ) THEN
-!$acc loop collapse(3) independent
-! DO JK=IKTB,IKTE
-!   DO JJ=IJB,IJE
-!     DO JI=IIB,IIE
-DO JK=1,SIZE(PRHS,3)
-  DO JJ=1,SIZE(PRHS,2)
-    DO JI=1,SIZE(PRHS,1)
-        ZPRHS(JI,JJ,JK) = PRHS(JI,JJ,JK)-PRHT(JI,JJ,JK)* ZINVTSTEP
-        PRHS(JI,JJ,JK)  = PRHT(JI,JJ,JK)* ZINVTSTEP
-      END DO
-    END DO
-  END DO
-END IF
-#endif
-!$acc end kernels
-!
-! PRiS = Source of the previous time step + source created during the subtime
-! step
-!
-DO JN = 1 , KSPLITR
-!$acc kernels present(PDZZ,PRHODREF,PRCS,PRGS,PRHS,PRRS,PRSS,ZPRCS,ZPRGS,ZPRHS,ZPRRS,ZPRSS,ZW) present(GSEDIMR,GSEDIMC,GSEDIMI,GSEDIMS,GSEDIMG,GSEDIMH,PRCS,PRGS,PRHS,PRIS,PRRS,PRSS,ZRTMIN)
-  IF( JN==1 ) THEN
-   IF (OSEDIC) PRCS(:,:,:) = PRCS(:,:,:) + ZPRCS(:,:,:)/KSPLITR
-   PRRS(:,:,:) = PRRS(:,:,:) + ZPRRS(:,:,:)/KSPLITR
-   PRSS(:,:,:) = PRSS(:,:,:) + ZPRSS(:,:,:)/KSPLITR
-   PRGS(:,:,:) = PRGS(:,:,:) + ZPRGS(:,:,:)/KSPLITR
-   IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:)/KSPLITR
-   DO JK = IKTB , IKTE
-     ZW(:,:,JK) =ZTSPLITR/(PRHODREF(:,:,JK)* PDZZ(:,:,JK))
-   END DO
- ELSE
-   IF (OSEDIC) PRCS(:,:,:) = PRCS(:,:,:) + ZPRCS(:,:,:)*ZTSPLITR
-   PRRS(:,:,:) = PRRS(:,:,:) + ZPRRS(:,:,:)*ZTSPLITR
-   PRSS(:,:,:) = PRSS(:,:,:) + ZPRSS(:,:,:)*ZTSPLITR
-   PRGS(:,:,:) = PRGS(:,:,:) + ZPRGS(:,:,:)*ZTSPLITR
-   IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:)*ZTSPLITR
- END IF
-#if 0
- IF (OSEDIC) GSEDIMC(IIB:IIE,IJB:IJE,IKTB:IKTE) =                &
-                  PRCS(IIB:IIE,IJB:IJE,IKTB:IKTE)>ZRTMIN(2)
- GSEDIMR(IIB:IIE,IJB:IJE,IKTB:IKTE) =                            &
-                  PRRS(IIB:IIE,IJB:IJE,IKTB:IKTE)>ZRTMIN(3)
- GSEDIMI(IIB:IIE,IJB:IJE,IKTB:IKTE) =                            &
-                  PRIS(IIB:IIE,IJB:IJE,IKTB:IKTE)>ZRTMIN(4)
- GSEDIMS(IIB:IIE,IJB:IJE,IKTB:IKTE) =                            &
-                  PRSS(IIB:IIE,IJB:IJE,IKTB:IKTE)>ZRTMIN(5)
- GSEDIMG(IIB:IIE,IJB:IJE,IKTB:IKTE) =                            &
-                  PRGS(IIB:IIE,IJB:IJE,IKTB:IKTE)>ZRTMIN(6)
- IF ( KRR == 7 ) GSEDIMH(IIB:IIE,IJB:IJE,IKTB:IKTE) =            &
-                  PRHS(IIB:IIE,IJB:IJE,IKTB:IKTE)>ZRTMIN(7)
-#else
- IF (OSEDIC) THEN
-!$acc loop collapse(3) independent
-   DO JK=IKTB,IKTE
-     DO JJ=IJB,IJE
-       DO JI=IIB,IIE
-         GSEDIMC(JI,JJ,JK) = PRCS(JI,JJ,JK)>ZRTMIN(2)
-       END DO
-     END DO
-   END DO
- END IF
-!$acc loop collapse(3) independent
- DO JK=IKTB,IKTE
-   DO JJ=IJB,IJE
-     DO JI=IIB,IIE
-       GSEDIMR(JI,JJ,JK) = PRRS(JI,JJ,JK)>ZRTMIN(3)
-       GSEDIMI(JI,JJ,JK) = PRIS(JI,JJ,JK)>ZRTMIN(4)
-       GSEDIMS(JI,JJ,JK) = PRSS(JI,JJ,JK)>ZRTMIN(5)
-       GSEDIMG(JI,JJ,JK) = PRGS(JI,JJ,JK)>ZRTMIN(6)
-     END DO
-   END DO
- END DO
-IF ( KRR == 7 ) THEN
-!$acc loop collapse(3) independent
-   DO JK=IKTB,IKTE
-     DO JJ=IJB,IJE
-       DO JI=IIB,IIE
-         GSEDIMH(JI,JJ,JK) = PRHS(JI,JJ,JK)>ZRTMIN(7)
-       END DO
-     END DO
-   END DO
- END IF
-#endif
-!$acc end kernels
-!
-#ifndef _OPENACC
- IF (OSEDIC) ISEDIMC = COUNTJV3D( GSEDIMC(:,:,:),IC1(:),IC2(:),IC3(:))
- ISEDIMR = COUNTJV3D( GSEDIMR(:,:,:),IR1(:),IR2(:),IR3(:))
- ISEDIMI = COUNTJV3D( GSEDIMI(:,:,:),II1(:),II2(:),II3(:))
- ISEDIMS = COUNTJV3D( GSEDIMS(:,:,:),IS1(:),IS2(:),IS3(:))
- ISEDIMG = COUNTJV3D( GSEDIMG(:,:,:),IG1(:),IG2(:),IG3(:))
- IF ( KRR == 7 ) ISEDIMH = COUNTJV3D( GSEDIMH(:,:,:),IH1(:),IH2(:),IH3(:))
-#else
- IF (OSEDIC) CALL COUNTJV3D_DEVICE(GSEDIMC,IC1,IC2,IC3,ISEDIMC)
- CALL COUNTJV3D_DEVICE(GSEDIMR,IR1,IR2,IR3,ISEDIMR)
- CALL COUNTJV3D_DEVICE(GSEDIMI,II1,II2,II3,ISEDIMI)
- CALL COUNTJV3D_DEVICE(GSEDIMS,IS1,IS2,IS3,ISEDIMS)
- CALL COUNTJV3D_DEVICE(GSEDIMG,IG1,IG2,IG3,ISEDIMG)
- IF ( KRR == 7 ) CALL COUNTJV3D_DEVICE(GSEDIMH,IH1,IH2,IH3,ISEDIMH)
-#endif
-!
-!*       2.1   for cloud
+LOGICAL, DIMENSION(:,:,:) :: LTAB ! Mask
+INTEGER, DIMENSION(:) :: I1,I2,I3 ! Used to replace the COUNT and PACK
+INTEGER :: JI,JJ,JK,IC
 !
-!$acc kernels present(ZFSEDC,ZLBC,ZRAY,ZRTMIN,ZW,ZWSED,PFPR,PINPRC,PPABST,PRCS,PRCT,PRHODREF,PTHT,XLBEXC,XRTMIN, &
-!$acc &               PRRS,XEXSEDR,PINPRR,PINPRR3D)
-IF (OSEDIC) THEN
-    ZWSED(:,:,:) = 0.
-    IF( JN==1 ) PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP
+!-------------------------------------------------------------------------------
 !
-!$acc loop independent private(ZRSLOC,ZRTLOC,ZRHODREFLOC,ZWLBDC,ZCONC,ZZTLOC,ZPRESLOC,ZRAY1D,ZFSEDC1D,ZWLBDA,ZCC)
-    DO JL=1,ISEDIMC
-      ZRSLOC = PRCS(IC1(JL),IC2(JL),IC3(JL))
-      ZRTLOC = PRCT(IC1(JL),IC2(JL),IC3(JL))
-      IF (ZRSLOC .GT. ZRTMIN(2) .AND. ZRTLOC .GT. XRTMIN(2)) THEN
-        ZRHODREFLOC = PRHODREF(IC1(JL),IC2(JL),IC3(JL))
-        ZWLBDC      = ZLBC    (IC1(JL),IC2(JL),IC3(JL))
-        ZCONC       = ZCONC3D (IC1(JL),IC2(JL),IC3(JL))
-        ZZTLOC      = PTHT    (IC1(JL),IC2(JL),IC3(JL))
-        ZPRESLOC    = PPABST  (IC1(JL),IC2(JL),IC3(JL))
-        ZRAY1D      = ZRAY    (IC1(JL),IC2(JL),IC3(JL))
-        ZFSEDC1D    = ZFSEDC  (IC1(JL),IC2(JL),IC3(JL))
-        ZWLBDC = ZWLBDC * ZCONC / (ZRHODREFLOC * ZRTLOC)
-#ifndef MNH_BITREP
-        ZWLBDC = ZWLBDC**XLBEXC
-#else
-        ZWLBDC = BR_POW(ZWLBDC,XLBEXC)
-#endif
-        ZRAY1D = ZRAY1D / ZWLBDC !! ZRAY : mean diameter=M(1)/2
-#ifndef MNH_BITREP
-        ZZTLOC = ZZTLOC * (ZPRESLOC/XP00)**(XRD/XCPD)
-#else
-        ZZTLOC = ZZTLOC * BR_POW(ZPRESLOC/XP00,XRD/XCPD)
-#endif
-        ZWLBDA = 6.6E-8*(101325./ZPRESLOC)*(ZZTLOC/293.15)
-        ZCC    = XCC*(1.+1.26*ZWLBDA/ZRAY1D) !! XCC modified for cloud
-#ifndef MNH_BITREP
-        ZWSED (IC1(JL),IC2(JL),IC3(JL))= ZRHODREFLOC**(-XCEXVT +1 ) *   &
-                                         ZWLBDC**(-XDC)*ZCC*ZFSEDC1D * ZRSLOC
-#else
-        ZWSED (IC1(JL),IC2(JL),IC3(JL))= BR_POW(ZRHODREFLOC,-XCEXVT +1) *   &
-                                         BR_POW(ZWLBDC,-XDC)*ZCC*ZFSEDC1D * ZRSLOC
-#endif
+IC = 0
+DO JK = 1,SIZE(LTAB,3)
+  DO JJ = 1,SIZE(LTAB,2)
+    DO JI = 1,SIZE(LTAB,1)
+      IF( LTAB(JI,JJ,JK) ) THEN
+        IC = IC +1
+        I1(IC) = JI
+        I2(IC) = JJ
+        I3(IC) = JK
       END IF
     END DO
-!
-!$acc loop independent
-    DO JK = IKTB , IKTE
-      PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-    END DO
-    IF (GPRESENT_PFPR) THEN
-      DO JK = IKTB , IKTE
-        PFPR(:,:,JK,2)=ZWSED(:,:,JK)
-      ENDDO
-    ENDIF
-    PINPRC(:,:) = PINPRC(:,:) + ZWSED(:,:,IKB) / XRHOLW / KSPLITR 
-    IF( JN==KSPLITR ) THEN
-      PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP
-    END IF
-  END IF
-!
-!*       2.2   for rain
-!
-  IF( JN==1 ) PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP
-  ZWSED(:,:,:) = 0.
-!
-!$acc loop independent private(ZRSLOC,ZRHODREFLOC)
-  DO JL=1,ISEDIMR
-    ZRSLOC = PRRS(IR1(JL),IR2(JL),IR3(JL))
-    IF( ZRSLOC .GT. ZRTMIN(3) ) THEN
-      ZRHODREFLOC = PRHODREF(IR1(JL),IR2(JL),IR3(JL))
-#ifndef MNH_BITREP
-      ZWSED (IR1(JL),IR2(JL),IR3(JL))= XFSEDR  * ZRSLOC**XEXSEDR *   &
-                                       ZRHODREFLOC**(XEXSEDR-XCEXVT)
-#else
-      ZWSED (IR1(JL),IR2(JL),IR3(JL))= XFSEDR  * BR_POW(ZRSLOC,XEXSEDR) *   &
-                                       BR_POW(ZRHODREFLOC,XEXSEDR-XCEXVT)
-#endif
-    END IF
-  END DO
-!
-!$acc loop independent
-  DO JK = IKTB , IKTE
-    PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-  END DO
-  IF (GPRESENT_PFPR) THEN
-    DO JK = IKTB , IKTE
-      PFPR(:,:,JK,3)=ZWSED(:,:,JK)
-    ENDDO
-  ENDIF
-  PINPRR(:,:)     = PINPRR(:,:)     + ZWSED(:,:,IKB)  /XRHOLW/KSPLITR
-  PINPRR3D(:,:,:) = PINPRR3D(:,:,:) + ZWSED(:,:,1:IKT)/XRHOLW/KSPLITR 
-  IF ( JN==KSPLITR ) THEN
-    PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP
-  END IF
-!$acc end kernels
-!$acc kernels present(ZRTMIN,ZW,ZWSED,PFPR,PINPRS,PRGS,PRIS,PRSS,PRHODREF,XEXCSEDI,XEXSEDS, &
-!$acc &               XCEXVT,XEXSEDG,XFSEDG,PINPRG,PINPRH,PRHS,XEXSEDH)
-!
-!*       2.3   for pristine ice
-!
-  IF( JN==1 ) PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP
-  ZWSED(:,:,:) = 0.
-!
-!$acc loop independent private(ZRSLOC,ZRHODREFLOC)
-  DO JL=1,ISEDIMI
-    ZRSLOC = PRIS(II1(JL),II2(JL),II3(JL))
-    IF( ZRSLOC .GT.  MAX(ZRTMIN(4),1.0E-7 )) THEN ! limitation of the McF&H formula
-      ZRHODREFLOC = PRHODREF(II1(JL),II2(JL),II3(JL))
-#ifndef MNH_BITREP
-      ZWSED (II1(JL),II2(JL),II3(JL))= XFSEDI * ZRSLOC *  &
-                                       ZRHODREFLOC**(1.0-XCEXVT) * & !    McF&H
-                                       MAX( 0.05E6,-0.15319E6-0.021454E6* &
-                                       ALOG(ZRHODREFLOC*ZRSLOC) )**XEXCSEDI
-#else
-      ZWSED (II1(JL),II2(JL),II3(JL))= XFSEDI * ZRSLOC *  &
-                                       BR_POW(ZRHODREFLOC,1.0-XCEXVT) * & !    McF&H
-                                       BR_POW(MAX( 0.05E6,-0.15319E6-0.021454E6* &
-                                       BR_LOG(ZRHODREFLOC*ZRSLOC) ),XEXCSEDI)
-#endif
-    END IF
-  END DO
-!
-!$acc loop independent
-  DO JK = IKTB , IKTE
-    PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-  END DO
-  IF (GPRESENT_PFPR) THEN
-    DO JK = IKTB , IKTE
-      PFPR(:,:,JK,4)=ZWSED(:,:,JK)
-    ENDDO
-  ENDIF
-  IF( JN==KSPLITR ) THEN
-    PRIS(:,:,:) = PRIS(:,:,:) * ZINVTSTEP
-  END IF
-!
-!*       2.4   for aggregates/snow
-!
-  IF( JN==1 ) PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
-  ZWSED(:,:,:) = 0.
-!
-!$acc loop independent private(ZRSLOC,ZRHODREFLOC)
-  DO JL=1,ISEDIMS
-    ZRSLOC = PRSS(IS1(JL),IS2(JL),IS3(JL))
-    IF( ZRSLOC .GT. ZRTMIN(5) ) THEN
-      ZRHODREFLOC = PRHODREF(IS1(JL),IS2(JL),IS3(JL))
-#ifndef MNH_BITREP
-      ZWSED (IS1(JL),IS2(JL),IS3(JL))= XFSEDS * ZRSLOC**XEXSEDS *  &
-                                       ZRHODREFLOC**(XEXSEDS-XCEXVT)
-#else
-      ZWSED (IS1(JL),IS2(JL),IS3(JL))= XFSEDS * BR_POW(ZRSLOC,XEXSEDS) *  &
-                                       BR_POW(ZRHODREFLOC,XEXSEDS-XCEXVT)
-#endif
-    END IF
-  END DO
-!
-!$acc loop independent
-  DO JK = IKTB , IKTE
-    PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-  END DO
-  PINPRS(:,:) = PINPRS(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR
-  IF (GPRESENT_PFPR) THEN
-    DO JK = IKTB , IKTE
-      PFPR(:,:,JK,5)=ZWSED(:,:,JK)
-    ENDDO
-  ENDIF
-  IF( JN==KSPLITR ) THEN
-    PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP
-  END IF
-!
-!*       2.5   for graupeln
-!
-  ZWSED(:,:,:) = 0.
-  IF( JN==1 ) PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
-!
-!$acc loop independent private(ZRSLOC,ZRHODREFLOC)
-  DO JL=1,ISEDIMG
-    ZRSLOC = PRGS(IG1(JL),IG2(JL),IG3(JL))
-    IF( ZRSLOC .GT. ZRTMIN(6) ) THEN
-      ZRHODREFLOC = PRHODREF(IG1(JL),IG2(JL),IG3(JL))
-#ifndef MNH_BITREP
-      ZWSED (IG1(JL),IG2(JL),IG3(JL))= XFSEDG  * ZRSLOC**XEXSEDG *   &
-                                       ZRHODREFLOC**(XEXSEDG-XCEXVT)
-#else
-      ZWSED (IG1(JL),IG2(JL),IG3(JL))= XFSEDG  * BR_POW(ZRSLOC,XEXSEDG) *   &
-                                       BR_POW(ZRHODREFLOC,XEXSEDG-XCEXVT)
-#endif
-    END IF
-  END DO
-!
-!$acc loop independent
-  DO JK = IKTB , IKTE
-    PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-  END DO
-  IF (GPRESENT_PFPR) THEN
-    DO JK = IKTB , IKTE
-      PFPR(:,:,JK,6)=ZWSED(:,:,JK)
-    ENDDO
-  ENDIF
-  PINPRG(:,:) = PINPRG(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR
-  IF( JN==KSPLITR ) THEN
-    PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP
-  END IF
-!
-!*       2.6   for hail
-!
-  IF ( KRR == 7 ) THEN
-  IF( JN==1 ) PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
-  ZWSED(:,:,:) = 0.
-!
-!$acc loop independent private(ZRSLOC,ZRHODREFLOC)
-  DO JL=1,ISEDIMH
-    ZRSLOC = PRHS(IH1(JL),IH2(JL),IH3(JL))
-    IF( ZRSLOC .GT. ZRTMIN(7) ) THEN
-      ZRHODREFLOC = PRHODREF(IH1(JL),IH2(JL),IH3(JL))
-#ifndef MNH_BITREP
-      ZWSED (IH1(JL),IH2(JL),IH3(JL))= XFSEDH  * ZRSLOC**XEXSEDH *   &
-                                       ZRHODREFLOC**(XEXSEDH-XCEXVT)
-#else
-      ZWSED (IH1(JL),IH2(JL),IH3(JL))= XFSEDH  * BR_POW(ZRSLOC,XEXSEDH) *   &
-                                       BR_POW(ZRHODREFLOC,XEXSEDH-XCEXVT)
-#endif
-    END IF
   END DO
+END DO
 !
-!$acc loop independent
-  DO JK = IKTB , IKTE
-    PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-  END DO
-  IF (GPRESENT_PFPR) THEN
-    DO JK = IKTB , IKTE
-      PFPR(:,:,JK,7)=ZWSED(:,:,JK)
-    ENDDO
-  ENDIF
-  PINPRH(:,:) = PINPRH(:,:) + ZWSED(:,:,IKB)/XRHOLW/KSPLITR
-  IF( JN==KSPLITR ) THEN
-    PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP
-  END IF
-  END IF ! KRR==7
-!$acc end kernels
-!
-END DO
-!
-!*       2.3     budget storage
-!
-IF (LBUDGET_RC .AND. OSEDIC) THEN
-!$acc update self(PRCS)
-  CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-END IF
-IF (LBUDGET_RR) THEN
-!$acc update self(PRRS)
-  CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
-END IF
-IF (LBUDGET_RI) THEN
-!$acc update self(PRIS)
-  CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
-END IF
-IF (LBUDGET_RS) THEN
-!$acc update self(PRSS)
-  CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
-END IF
-IF (LBUDGET_RG) THEN
-!$acc update self(PRGS)
-  CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
-END IF
-IF ( KRR == 7 .AND. LBUDGET_RH) THEN
-!$acc update self(PRHS)
-  CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
-END IF
-!
-!
-!*       2.4  DROPLET DEPOSITION AT THE 1ST LEVEL ABOVE GROUND
-!
-IF (LDEPOSC) THEN
-#ifdef _OPENACC
-    PRINT *,'OPENACC: RAIN_ICE_SEDIMENTATION_SPLIT::LDEPOSC=.T. not yet tested'
-    CALL ABORT
-#endif
-!$acc kernels present(GDEP,PDZZ,PINDEP,PINPRC,PRCS,PRCT,PRHODREF)
-  GDEP(:,:) = .FALSE.
-  GDEP(IIB:IIE,IJB:IJE) =    PRCS(IIB:IIE,IJB:IJE,IKB) >0 
-  WHERE (GDEP)
-     PRCS(:,:,IKB) = PRCS(:,:,IKB) - XVDEPOSC * PRCT(:,:,IKB) / PDZZ(:,:,IKB)
-     PINPRC(:,:) = PINPRC(:,:) + XVDEPOSC * PRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW 
-     PINDEP(:,:) = XVDEPOSC * PRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW 
-  END WHERE
-!$acc end kernels
-END IF
-!
-!*       2.5     budget storage
-!
-IF ( LBUDGET_RC .AND. LDEPOSC ) THEN
-!$acc update self(PRCS)
-   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
-END IF
-!
-  END SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT
-!
-!-------------------------------------------------------------------------------
-!
- SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-!*       0.2  declaration of local variables
-!
-!
-
-REAL :: ZP1,ZP2,ZH,ZZWLBDA,ZZWLBDC,ZZCC
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)) :: ZQP
-INTEGER :: JI,JJ,JK
-INTEGER :: JCOUNT, JL
-INTEGER, DIMENSION(SIZE(PRHODREF,1)*SIZE(PRHODREF,2)) :: I1, I2
-!
-REAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D !  droplet condensation
-!-------------------------------------------------------------------------------
-!
-#ifdef _OPENACC
-    PRINT *,'OPENACC: RAIN_ICE_SEDIMENTATION_STAT not yet implemented'
-    CALL ABORT
-#endif
-!
-!
-!*       1. Parameters for cloud sedimentation
-!
-  IF (OSEDIC) THEN
-    ZRAY(:,:,:)   = 0.
-    ZLBC(:,:,:)   = XLBC(1)
-    ZFSEDC(:,:,:) = XFSEDC(1)
-    ZCONC3D(:,:,:)= XCONC_LAND
-    ZCONC_TMP(:,:)= XCONC_LAND
-    IF (PRESENT(PSEA)) THEN
-      ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
-
-      DO JK=IKTB,IKTE
-        ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
-        ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
-        ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
-        ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
-        ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
-                PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
-      END DO
-    ELSE
-        ZCONC3D(:,:,:) = XCONC_LAND
-        ZRAY(:,:,:)  = 0.5*(GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)))
-    END IF
-    ZRAY(:,:,:)      = MAX(1.,ZRAY(:,:,:))
-    ZLBC(:,:,:)      = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:))
-  ENDIF
-  IF (LDEPOSC) PINDEP (:,:) = 0.
-
-!*       2.    compute the fluxes
-!
-
-
-ZRTMIN(:)    = XRTMIN(:) * ZINVTSTEP
-!
-IF (OSEDIC) THEN
-  ZPRCS(:,:,:) = 0.0
-  ZPRCS(:,:,:) = PRCS(:,:,:)-PRCT(:,:,:)* ZINVTSTEP
-  PRCS(:,:,:)  = PRCT(:,:,:)* ZINVTSTEP
-END IF
-ZPRRS(:,:,:) = 0.0
-ZPRSS(:,:,:) = 0.0
-ZPRGS(:,:,:) = 0.0
-IF ( KRR == 7 ) ZPRHS(:,:,:) = 0.0
-!
-ZPRRS(:,:,:) = PRRS(:,:,:)-PRRT(:,:,:)* ZINVTSTEP
-ZPRSS(:,:,:) = PRSS(:,:,:)-PRST(:,:,:)* ZINVTSTEP
-ZPRGS(:,:,:) = PRGS(:,:,:)-PRGT(:,:,:)* ZINVTSTEP
-IF ( KRR == 7 ) ZPRHS(:,:,:) = PRHS(:,:,:)-PRHT(:,:,:)* ZINVTSTEP
-PRRS(:,:,:)  = PRRT(:,:,:)* ZINVTSTEP
-PRSS(:,:,:)  = PRST(:,:,:)* ZINVTSTEP
-PRGS(:,:,:)  = PRGT(:,:,:)* ZINVTSTEP
-IF ( KRR == 7 ) PRHS(:,:,:)  = PRHT(:,:,:)* ZINVTSTEP
-!
-IF (OSEDIC) PRCS(:,:,:) = PRCS(:,:,:) + ZPRCS(:,:,:)
-PRRS(:,:,:) = PRRS(:,:,:) + ZPRRS(:,:,:)
-PRSS(:,:,:) = PRSS(:,:,:) + ZPRSS(:,:,:)
-PRGS(:,:,:) = PRGS(:,:,:) + ZPRGS(:,:,:)
-IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:)
-DO JK = IKTB , IKTE
-  ZW(:,:,JK) =PTSTEP/(PRHODREF(:,:,JK)* PDZZ(:,:,JK) )
-END DO
-
-!
-!*       2.1   for cloud
-!
- IF (OSEDIC) THEN
-     PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP
-     ZWSED(:,:,:) = 0.
-     ZWSEDW1(:,:,:) = 0.
-     ZWSEDW2(:,:,:) = 0.
-
-! calculation of P1, P2 and sedimentation flux
-     DO JK = IKE , IKB, -1*KKL
-       !estimation of q' taking into account incomming ZWSED
-       ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
-
-       JCOUNT=COUNTJV2D((PRCS(:,:,JK) > ZRTMIN(2) .AND. PRCT(:,:,JK) > ZRTMIN(2)) .OR. &
-                       (ZQP(:,:) > ZRTMIN(2)),I1(:),I2(:))
-       DO JL=1, JCOUNT
-         JI=I1(JL)
-         JJ=I2(JL)
-         !calculation of w
-         ! mars 2009 : ajout d'un test
-         !IF ( PRCS(JI,JJ,JK) > ZRTMIN(2) ) THEN
-         IF(PRCS(JI,JJ,JK) > ZRTMIN(2) .AND. PRCT(JI,JJ,JK) > ZRTMIN(2)) THEN
-           ZZWLBDA=6.6E-8*(101325./PPABST(JI,JJ,JK))*(PTHT(JI,JJ,JK)/293.15)
-#ifndef MNH_BITREP
-           ZZWLBDC=(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK)  &
-                &/(PRHODREF(JI,JJ,JK)*PRCT(JI,JJ,JK)))**XLBEXC
-#else
-           ZZWLBDC=BR_POW(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK)  &
-                &/(PRHODREF(JI,JJ,JK)*PRCT(JI,JJ,JK)),XLBEXC)
-#endif
-           ZZCC=XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY(JI,JJ,JK)) !! ZCC  : Fall speed
-#ifndef MNH_BITREP
-           ZWSEDW1 (JI,JJ,JK)=PRHODREF(JI,JJ,JK)**(-XCEXVT ) *   &
-             &  ZZWLBDC**(-XDC)*ZZCC*ZFSEDC(JI,JJ,JK)
-#else
-           ZWSEDW1 (JI,JJ,JK)=BR_POW(PRHODREF(JI,JJ,JK),-XCEXVT) *   &
-             &  BR_POW(ZZWLBDC,-XDC)*ZZCC*ZFSEDC(JI,JJ,JK)
-#endif
-         ENDIF
-         IF ( ZQP(JI,JJ) > ZRTMIN(2) ) THEN
-           ZZWLBDA=6.6E-8*(101325./PPABST(JI,JJ,JK))*(PTHT(JI,JJ,JK)/293.15)
-#ifndef MNH_BITREP
-           ZZWLBDC=(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK)  &
-                &/(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)))**XLBEXC
-#else
-           ZZWLBDC=BR_POW(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK)  &
-                &/(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)),XLBEXC)
-#endif
-           ZZCC=XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY(JI,JJ,JK)) !! ZCC  : Fall speed
-#ifndef MNH_BITREP
-           ZWSEDW2 (JI,JJ,JK)=PRHODREF(JI,JJ,JK)**(-XCEXVT ) *   &
-             &  ZZWLBDC**(-XDC)*ZZCC*ZFSEDC(JI,JJ,JK)
-#else
-           ZWSEDW2 (JI,JJ,JK)=BR_POW(PRHODREF(JI,JJ,JK),-XCEXVT ) *   &
-             &  BR_POW(ZZWLBDC,-XDC)*ZZCC*ZFSEDC(JI,JJ,JK)
-#endif
-         ENDIF
-       ENDDO
-
-       DO JJ = IJB, IJE
-         DO JI = IIB, IIE
-           ZH=PDZZ(JI,JJ,JK)
-           ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH)
-           ! mars 2009 : correction : ZWSEDW1 =>  ZWSEDW2
-           !IF (ZWSEDW1(JI,JJ,JK) /= 0.) THEN
-           IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
-             ZP2 = MAX(0.,1 -  ZH &
-           &  / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
-           ELSE
-             ZP2 = 0.
-           ENDIF
-           ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
-           &ZH*PRCS(JI,JJ,JK)&
-           &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
-         ENDDO
-       ENDDO
-     ENDDO
-
-     DO JK = IKTB , IKTE
-       PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-     END DO
-     IF (GPRESENT_PFPR) THEN
-       DO JK = IKTB , IKTE
-         PFPR(:,:,JK,2)=ZWSED(:,:,JK)
-       ENDDO
-     ENDIF
-
-     PINPRC(:,:) = ZWSED(:,:,IKB)/XRHOLW                        ! in m/s
-     PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP
- ENDIF
-
-!
-!*       2.2   for rain
-!
-
-   PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP
-   ZWSED(:,:,:) = 0.
-   ZWSEDW1(:,:,:) = 0.
-   ZWSEDW2(:,:,:) = 0.
-
-! calculation of ZP1, ZP2 and sedimentation flux
-   DO JK = IKE , IKB, -1*KKL
-     !estimation of q' taking into account incomming ZWSED
-     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
-
-     JCOUNT=COUNTJV2D((PRRS(:,:,JK) > ZRTMIN(3)) .OR. &
-                     (ZQP(:,:) > ZRTMIN(3)),I1(:),I2(:))
-     DO JL=1, JCOUNT
-       JI=I1(JL)
-       JJ=I2(JL)
-       !calculation of w
-       IF ( PRRS(JI,JJ,JK) > ZRTMIN(3) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW1 (JI,JJ,JK)= XFSEDR *PRRS(JI,JJ,JK)**(XEXSEDR-1)* &
-         PRHODREF(JI,JJ,JK)**(XEXSEDR-XCEXVT-1)
-#else
-         ZWSEDW1 (JI,JJ,JK)= XFSEDR *BR_POW(PRRS(JI,JJ,JK),XEXSEDR-1)* &
-         BR_POW(PRHODREF(JI,JJ,JK),XEXSEDR-XCEXVT-1)
-#endif
-       ENDIF
-       IF ( ZQP(JI,JJ) > ZRTMIN(3) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW2 (JI,JJ,JK)= XFSEDR *(ZQP(JI,JJ))**(XEXSEDR-1)* &
-         PRHODREF(JI,JJ,JK)**(XEXSEDR-XCEXVT-1)
-#else
-         ZWSEDW2 (JI,JJ,JK)= XFSEDR *BR_POW(ZQP(JI,JJ),XEXSEDR-1)* &
-         BR_POW(PRHODREF(JI,JJ,JK),XEXSEDR-XCEXVT-1)
-#endif
-       ENDIF
-     ENDDO
-     DO JJ = IJB, IJE
-       DO JI = IIB, IIE
-         ZH=PDZZ(JI,JJ,JK)
-         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
-         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
-           ZP2 = MAX(0.,1 -  ZH &
-         & / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
-         ELSE
-           ZP2 = 0.
-         ENDIF
-         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
-         &ZH*PRRS(JI,JJ,JK)&
-         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
-       ENDDO
-     ENDDO
-   ENDDO
-
-   DO JK = IKTB , IKTE
-     PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-   ENDDO
-   IF (GPRESENT_PFPR) THEN
-     DO JK = IKTB , IKTE
-       PFPR(:,:,JK,3)=ZWSED(:,:,JK)
-     ENDDO
-   ENDIF
-   PINPRR(:,:) = ZWSED(:,:,IKB)/XRHOLW                        ! in m/s
-   PINPRR3D(:,:,:) = ZWSED(:,:,1:IKT)/XRHOLW                        ! in m/s
-   PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP
-
-!
-!*       2.3   for pristine ice
-!
-
-   PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP
-   ZWSED(:,:,:) = 0.
-   ZWSEDW1(:,:,:) = 0.
-   ZWSEDW2(:,:,:) = 0.
-! calculation of ZP1, ZP2 and sedimentation flux
-   DO JK = IKE , IKB, -1*KKL
-     !estimation of q' taking into account incomming ZWSED
-     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
-
-     JCOUNT=COUNTJV2D((PRIS(:,:,JK) > MAX(ZRTMIN(4),1.0E-7 )) .OR. &
-                     (ZQP(:,:) > MAX(ZRTMIN(4),1.0E-7 )),I1(:),I2(:))
-     DO JL=1, JCOUNT
-       JI=I1(JL)
-       JJ=I2(JL)
-       !calculation of w
-       IF ( PRIS(JI,JJ,JK) > MAX(ZRTMIN(4),1.0E-7 ) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW1 (JI,JJ,JK)= XFSEDI *  &
-         &  PRHODREF(JI,JJ,JK)**(XCEXVT) * & !    McF&H
-         &  MAX( 0.05E6,-0.15319E6-0.021454E6* &
-         &  ALOG(PRHODREF(JI,JJ,JK)*PRIS(JI,JJ,JK)) )**XEXCSEDI
-#else
-         ZWSEDW1 (JI,JJ,JK)= XFSEDI *  &
-         &  BR_POW(PRHODREF(JI,JJ,JK),XCEXVT) * & !    McF&H
-         &  BR_POW(MAX( 0.05E6,-0.15319E6-0.021454E6* &
-         &  BR_LOG(PRHODREF(JI,JJ,JK)*PRIS(JI,JJ,JK)) ),XEXCSEDI)
-#endif
-       ENDIF
-       IF ( ZQP(JI,JJ) > MAX(ZRTMIN(4),1.0E-7 ) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW2 (JI,JJ,JK)= XFSEDI *  &
-         &  PRHODREF(JI,JJ,JK)**(XCEXVT) * & !    McF&H
-         &  MAX( 0.05E6,-0.15319E6-0.021454E6* &
-         &  ALOG(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)) )**XEXCSEDI
-#else
-         ZWSEDW2 (JI,JJ,JK)= XFSEDI *  &
-         &  BR_POW(PRHODREF(JI,JJ,JK),XCEXVT) * & !    McF&H
-         &  BR_POW(MAX( 0.05E6,-0.15319E6-0.021454E6* &
-         &  BR_LOG(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)) ),XEXCSEDI)
-#endif
-       ENDIF
-     ENDDO
-     DO JJ = IJB, IJE
-       DO JI = IIB, IIE
-         ZH=PDZZ(JI,JJ,JK)
-         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
-         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
-           ZP2 = MAX(0.,1 - ZH  &
-           &  / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
-         ELSE
-           ZP2 = 0.
-         ENDIF
-         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
-         &ZH*PRIS(JI,JJ,JK)&
-         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
-       ENDDO
-     ENDDO
-   ENDDO
-
-   DO JK = IKTB , IKTE
-     PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-   ENDDO
-   IF (GPRESENT_PFPR) THEN
-     DO JK = IKTB , IKTE
-       PFPR(:,:,JK,4)=ZWSED(:,:,JK)
-     ENDDO
-   ENDIF
-
-   PRIS(:,:,:) = PRIS(:,:,:) * ZINVTSTEP
-
-
-!
-!*       2.4   for aggregates/snow
-!
-
-   PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
-   ZWSED(:,:,:) = 0.
-   ZWSEDW1(:,:,:) = 0.
-   ZWSEDW2(:,:,:) = 0.
-
-! calculation of ZP1, ZP2 and sedimentation flux
-   DO JK = IKE , IKB, -1*KKL
-     !estimation of q' taking into account incomming ZWSED
-     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
-
-     JCOUNT=COUNTJV2D((PRSS(:,:,JK) > ZRTMIN(5)) .OR. &
-                     (ZQP(:,:) > ZRTMIN(5)),I1(:),I2(:))
-     DO JL=1, JCOUNT
-       JI=I1(JL)
-       JJ=I2(JL)
-       !calculation of w
-       IF (PRSS(JI,JJ,JK) > ZRTMIN(5) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW1(JI,JJ,JK)=XFSEDS*(PRSS(JI,JJ,JK))**(XEXSEDS-1)*&
-         PRHODREF(JI,JJ,JK)**(XEXSEDS-XCEXVT-1)
-#else
-         ZWSEDW1(JI,JJ,JK)=XFSEDS*BR_POW(PRSS(JI,JJ,JK),XEXSEDS-1)*&
-         BR_POW(PRHODREF(JI,JJ,JK),XEXSEDS-XCEXVT-1)
-#endif
-       ENDIF
-       IF ( ZQP(JI,JJ) > ZRTMIN(5) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW2(JI,JJ,JK)=XFSEDS*(ZQP(JI,JJ))**(XEXSEDS-1)*&
-         PRHODREF(JI,JJ,JK)**(XEXSEDS-XCEXVT-1)
-#else
-         ZWSEDW2(JI,JJ,JK)=XFSEDS*BR_POW(ZQP(JI,JJ),XEXSEDS-1)*&
-         BR_POW(PRHODREF(JI,JJ,JK),XEXSEDS-XCEXVT-1)
-#endif
-       ENDIF
-     ENDDO
-     DO JJ = IJB, IJE
-       DO JI = IIB, IIE
-         ZH=PDZZ(JI,JJ,JK)
-         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
-         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
-           ZP2 = MAX(0.,1 - ZH&
-          / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
-         ELSE
-           ZP2 = 0.
-         ENDIF
-         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
-         &ZH*PRSS(JI,JJ,JK)&
-         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
-       ENDDO
-     ENDDO
-   ENDDO
-
-   DO JK = IKTB , IKTE
-     PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-   ENDDO
-   IF (GPRESENT_PFPR) THEN
-     DO JK = IKTB , IKTE
-       PFPR(:,:,JK,5)=ZWSED(:,:,JK)
-     ENDDO
-   ENDIF
-
-   PINPRS(:,:) = ZWSED(:,:,IKB)/XRHOLW                        ! in m/s
-   PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP
-
-
-!
-!*       2.5   for graupeln
-!
-
-   PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
-   ZWSED(:,:,:) = 0.
-   ZWSEDW1(:,:,:) = 0.
-   ZWSEDW2(:,:,:) = 0.
-
-! calculation of ZP1, ZP2 and sedimentation flux
-   DO JK = IKE,  IKB, -1*KKL
-     !estimation of q' taking into account incomming ZWSED
-     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
-
-     JCOUNT=COUNTJV2D((PRGS(:,:,JK) > ZRTMIN(6)) .OR. &
-                     (ZQP(:,:) > ZRTMIN(6)),I1(:),I2(:))
-     DO JL=1, JCOUNT
-       JI=I1(JL)
-       JJ=I2(JL)
-       !calculation of w
-       IF ( PRGS(JI,JJ,JK) > ZRTMIN(6) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW1 (JI,JJ,JK)= XFSEDG*(PRGS(JI,JJ,JK))**(XEXSEDG-1) * &
-                                  PRHODREF(JI,JJ,JK)**(XEXSEDG-XCEXVT-1)
-#else
-         ZWSEDW1 (JI,JJ,JK)= XFSEDG*BR_POW(PRGS(JI,JJ,JK),XEXSEDG-1) * &
-                                  BR_POW(PRHODREF(JI,JJ,JK),XEXSEDG-XCEXVT-1)
-#endif
-       ENDIF
-       IF ( ZQP(JI,JJ) > ZRTMIN(6) ) THEN
-#ifndef MNH_BITREP
-         ZWSEDW2 (JI,JJ,JK)= XFSEDG*(ZQP(JI,JJ))**(XEXSEDG-1) * &
-                                  PRHODREF(JI,JJ,JK)**(XEXSEDG-XCEXVT-1)
-#else
-         ZWSEDW2 (JI,JJ,JK)= XFSEDG*BR_POW(ZQP(JI,JJ),XEXSEDG-1) * &
-                                  BR_POW(PRHODREF(JI,JJ,JK),XEXSEDG-XCEXVT-1)
-#endif
-       ENDIF
-     ENDDO
-     DO JJ = IJB, IJE
-       DO JI = IIB, IIE
-         ZH=PDZZ(JI,JJ,JK)
-         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
-         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
-           ZP2 = MAX(0.,1 - ZH &
-         & / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
-         ELSE
-           ZP2 = 0.
-         ENDIF
-         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
-         &ZH*PRGS(JI,JJ,JK)&
-         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
-       ENDDO
-     ENDDO
-   ENDDO
-
-   DO JK = IKTB , IKTE
-         PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-   ENDDO
-   IF (GPRESENT_PFPR) THEN
-     DO JK = IKTB , IKTE
-       PFPR(:,:,JK,6)=ZWSED(:,:,JK)
-     ENDDO
-   ENDIF
-
-   PINPRG(:,:) = ZWSED(:,:,IKB)/XRHOLW                        ! in m/s
-   PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP
-
-!
-!*       2.6   for hail
-!
- IF ( KRR == 7 ) THEN
-     PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
-     ZWSED(:,:,:) = 0.
-     ZWSEDW1(:,:,:) = 0.
-     ZWSEDW2(:,:,:) = 0.
-! calculation of ZP1, ZP2 and sedimentation flux
-     DO JK = IKE , IKB, -1*KKL
-     !estimation of q' taking into account incomming ZWSED
-     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
-
-     JCOUNT=COUNTJV2D((PRHS(:,:,JK)+ZQP(JI,JJ) > ZRTMIN(7)) .OR. &
-                     (ZQP(:,:) > ZRTMIN(7)),I1(:),I2(:))
-     DO JL=1, JCOUNT
-       JI=I1(JL)
-       JJ=I2(JL)
-         !calculation of w
-         IF ((PRHS(JI,JJ,JK)+ZQP(JI,JJ)) > ZRTMIN(7) ) THEN
-#ifndef MNH_BITREP
-           ZWSEDW1 (JI,JJ,JK)= XFSEDH  * (PRHS(JI,JJ,JK))**(XEXSEDH-1) *   &
-                                    PRHODREF(JI,JJ,JK)**(XEXSEDH-XCEXVT-1)
-#else
-           ZWSEDW1 (JI,JJ,JK)= XFSEDH  * BR_POW(PRHS(JI,JJ,JK),XEXSEDH-1) *   &
-                                    BR_POW(PRHODREF(JI,JJ,JK),XEXSEDH-XCEXVT-1)
-#endif
-         ENDIF
-         IF ( ZQP(JI,JJ) > ZRTMIN(7) ) THEN
-#ifndef MNH_BITREP
-           ZWSEDW2 (JI,JJ,JK)= XFSEDH  * ZQP(JI,JJ)**(XEXSEDH-1) *   &
-                                    PRHODREF(JI,JJ,JK)**(XEXSEDH-XCEXVT-1)
-#else
-           ZWSEDW2 (JI,JJ,JK)= XFSEDH  * BR_POW(ZQP(JI,JJ),XEXSEDH-1) *   &
-                                    BR_POW(PRHODREF(JI,JJ,JK),XEXSEDH-XCEXVT-1)
-#endif
-         ENDIF
-       ENDDO
-       DO JJ = IJB, IJE
-         DO JI = IIB, IIE
-           ZH=PDZZ(JI,JJ,JK)
-           ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH)
-           IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
-             ZP2 = MAX(0.,1 - ZH &
-           &  / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
-           ELSE
-             ZP2 = 0.
-           ENDIF
-           ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
-           &ZH*PRHS(JI,JJ,JK)&
-           &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
-         ENDDO
-       ENDDO
-     ENDDO
-
-     DO JK = IKTB , IKTE
-       PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
-     ENDDO
-     IF (GPRESENT_PFPR) THEN
-       DO JK = IKTB , IKTE
-         PFPR(:,:,JK,7)=ZWSED(:,:,JK)
-       ENDDO
-     ENDIF
-
-     PINPRH(:,:) = ZWSED(:,:,IKB)/XRHOLW                        ! in m/s
-     PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP
-
- ENDIF
-!
-
-!
-!*       2.3     budget storage
-!
-IF (LBUDGET_RC .AND. OSEDIC) &
-                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
-IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
-IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
-IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
-IF ( KRR == 7 .AND. LBUDGET_RH) &
-                CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
-!
-!
-!*       2.4  DROPLET DEPOSITION AT THE 1ST LEVEL ABOVE GROUND
-!
-IF (LDEPOSC) THEN
-  GDEP(:,:) = .FALSE.
-  GDEP(IIB:IIE,IJB:IJE) =    PRCS(IIB:IIE,IJB:IJE,IKB) >0 
-  WHERE (GDEP)
-     PRCS(:,:,IKB) = PRCS(:,:,IKB) - XVDEPOSC * PRCT(:,:,IKB) / PDZZ(:,:,IKB)
-     PINPRC(:,:) = PINPRC(:,:) + XVDEPOSC * PRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW 
-     PINDEP(:,:) = XVDEPOSC * PRCT(:,:,IKB) * PRHODREF(:,:,IKB) /XRHOLW 
-  END WHERE
-END IF
-!
-!*       2.5     budget storage
-!
-IF ( LBUDGET_RC .AND. LDEPOSC ) &
-   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
-!
-  END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT
-!
-!-------------------------------------------------------------------------------
-!
-
-!
-  SUBROUTINE RAIN_ICE_NUCLEATION
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-!*       0.2  declaration of local variables
-!
-INTEGER , DIMENSION(SIZE(GNEGT))  :: I1,I2,I3 ! Used to replace the COUNT
-INTEGER                           :: JL       ! and PACK intrinsics
-REAL                              :: ZZWMAX
-!$acc declare device_resident(I1,I2,I3)
-!
-!-------------------------------------------------------------------------------
-!
-!
-!  compute the temperature and the pressure
-!
-!$acc kernels present(GNEGT,ZT,PPABST,PTHT)
-#ifndef MNH_BITREP
-ZT(:,:,:) = PTHT(:,:,:) * (PPABST(:,:,:)/XP00) ** (XRD/XCPD)
-#else
-ZT(:,:,:) = PTHT(:,:,:) * BR_POW(PPABST(:,:,:)/XP00,XRD/XCPD)
-#endif
-!
-!  optimization by looking for locations where
-!  the temperature is negative only !!!
-!
-GNEGT(:,:,:) = .FALSE.
-#if 0
-GNEGT(IIB:IIE,IJB:IJE,IKTB:IKTE) = ZT(IIB:IIE,IJB:IJE,IKTB:IKTE)<XTT
-#else
-!$acc loop collapse(3) independent
-DO JK=IKTB,IKTE
-  DO JJ=IJB,IJE
-    DO JI=IIB,IIE
-      GNEGT(JI,JJ,JK) = ZT(JI,JJ,JK)<XTT
-    END DO
-  END DO
-END DO
-#endif
-!$acc end kernels
-#ifndef _OPENACC
-INEGT = COUNTJV3D( GNEGT(:,:,:),I1(:),I2(:),I3(:))
-#else
-CALL COUNTJV3D_DEVICE(GNEGT(:,:,:),I1(:),I2(:),I3(:),INEGT)
-#endif
-IF( INEGT >= 1 ) THEN
-  ALLOCATE(ZRVT(INEGT)) ;
-  ALLOCATE(ZCIT(INEGT)) ;
-  ALLOCATE(ZZT(INEGT))  ;
-  ALLOCATE(ZPRES(INEGT));
-  ALLOCATE(ZZW(INEGT))
-  ALLOCATE(ZUSW(INEGT))
-  ALLOCATE(ZSSI(INEGT))
-!$acc kernels present(ZCIT,ZPRES,ZRVT,ZSSI,ZT,ZUSW,ZZT,ZZW,PCIT,PPABST,PRVT,XALPHA1)
-  DO JL=1,INEGT
-    ZRVT(JL)  = PRVT  (I1(JL),I2(JL),I3(JL))
-    ZCIT(JL)  = PCIT  (I1(JL),I2(JL),I3(JL))
-    ZZT(JL)   = ZT    (I1(JL),I2(JL),I3(JL))
-    ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
-  ENDDO
-#ifndef MNH_BITREP
-  ZZW(1:INEGT) = EXP( XALPI - XBETAI/ZZT(1:INEGT) - XGAMI*ALOG(ZZT(1:INEGT) ) )           ! es_i
-#else
-  ZZW(1:INEGT) = BR_EXP( XALPI - XBETAI/ZZT(1:INEGT) - XGAMI*BR_LOG(ZZT(1:INEGT) ) )      ! es_i
-#endif
-  ZZW(1:INEGT) = MIN(ZPRES(1:INEGT)/2., ZZW(1:INEGT))             ! safety limitation
-  ZSSI(1:INEGT) = ZRVT(1:INEGT)*( ZPRES(1:INEGT)-ZZW(1:INEGT) ) / ( (XMV/XMD) * ZZW(1:INEGT) ) - 1.0
-                                                    ! Supersaturation over ice
-#ifndef MNH_BITREP
-  ZUSW(1:INEGT) = EXP( XALPW - XBETAW/ZZT(1:INEGT) - XGAMW*ALOG(ZZT(1:INEGT) ) )          ! es_w
-#else
-  ZUSW(1:INEGT) = BR_EXP( XALPW - XBETAW/ZZT(1:INEGT) - XGAMW*BR_LOG(ZZT(1:INEGT) ) )     ! es_w
-#endif
-  ZUSW(1:INEGT) = MIN(ZPRES(1:INEGT)/2.,ZUSW(1:INEGT))            ! safety limitation
-  ZUSW(1:INEGT) = ( ZUSW(1:INEGT)/ZZW(1:INEGT) )*( (ZPRES(1:INEGT)-ZZW(1:INEGT))/(ZPRES(1:INEGT)-ZUSW(1:INEGT)) ) - 1.0
-                           ! Supersaturation of saturated water vapor over ice
-!
-!*       3.1     compute the heterogeneous nucleation source: RVHENI
-!
-!*       3.1.1   compute the cloud ice concentration
-!
-  ZZW(1:INEGT) = 0.0
-  ZSSI(1:INEGT) = MIN( ZSSI(1:INEGT), ZUSW(1:INEGT) ) ! limitation of SSi according to SSw=0
-  WHERE( (ZZT(1:INEGT)<XTT-5.0) .AND. (ZSSI(1:INEGT)>0.0) )
-#ifndef MNH_BITREP
-    ZZW(1:INEGT) = XNU20 * EXP( XALPHA2*ZSSI(1:INEGT)-XBETA2 )
-#else
-    ZZW(1:INEGT) = XNU20 * BR_EXP( XALPHA2*ZSSI(1:INEGT)-XBETA2 )
-#endif
-  END WHERE
-  WHERE( (ZZT(1:INEGT)<=XTT-2.0) .AND. (ZZT(1:INEGT)>=XTT-5.0) .AND. (ZSSI(1:INEGT)>0.0) )
-#ifndef MNH_BITREP
-    ZZW(1:INEGT) = MAX( XNU20 * EXP( -XBETA2 ),XNU10 * EXP( -XBETA1*(ZZT(1:INEGT)-XTT) ) * &
-                               ( ZSSI(1:INEGT)/ZUSW(1:INEGT) )**XALPHA1 )
-#else
-    ZZW(1:INEGT) = MAX( XNU20 * BR_EXP( -XBETA2 ),XNU10 * BR_EXP( -XBETA1*(ZZT(1:INEGT)-XTT) ) * &
-                               BR_POW( ZSSI(1:INEGT)/ZUSW(1:INEGT),XALPHA1 ) )
-#endif
-  END WHERE
-  ZZW(1:INEGT) = ZZW(1:INEGT) - ZCIT(1:INEGT)
-  ZZWMAX = MAXVAL(ZZW(1:INEGT))
-!$acc end kernels
-!$acc kernels present(ZT,ZW,PCIT,PEXNREF,PRCT,PRGT,PRHT,PRHODREF,PRIS,PRIT,PRRT,PRST,PRVS,PRVT,PTHS)
-  IF( ZZWMAX > 0.0 ) THEN
-!
-!*       3.1.2   update the r_i and r_v mixing ratios
-!
-    ZZW(1:INEGT) = MIN( ZZW(1:INEGT),50.E3 ) ! limitation provisoire a 50 l^-1
-    ZW(:,:,:) = 0.0
-    DO JL=1,INEGT
-      ZW(I1(JL),I2(JL),I3(JL)) = ZZW(JL)
-    END DO
-    ZW(:,:,:) = MAX( ZW(:,:,:) ,0.0 ) *XMNU0/(PRHODREF(:,:,:)*PTSTEP)
-    PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:)
-    PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
-    IF ( KRR == 7 ) THEN
-      PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(XLSTT+(XCPV-XCI)*(ZT(:,:,:)-XTT))   &
-                   /( (XCPD + XCPV*PRVT(:,:,:) + XCL*(PRCT(:,:,:)+PRRT(:,:,:))   &
-       + XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)+PRHT(:,:,:)))*PEXNREF(:,:,:) )
-    ELSE IF( KRR == 6 ) THEN
-      PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(XLSTT+(XCPV-XCI)*(ZT(:,:,:)-XTT))   &
-                   /( (XCPD + XCPV*PRVT(:,:,:) + XCL*(PRCT(:,:,:)+PRRT(:,:,:))   &
-                   + XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)))*PEXNREF(:,:,:) )
-    END IF
-                                 ! f(L_s*(RVHENI))
-    ZZW(1:INEGT) = MAX( ZZW(1:INEGT)+ZCIT(1:INEGT),ZCIT(1:INEGT) )
-#ifndef _OPENACC
-    PCIT(:,:,:) = MAX( UNPACK( ZZW(1:INEGT),MASK=GNEGT(:,:,:),FIELD=0.0 ) , &
-                       PCIT(:,:,:) )
-#else
-  ZW(:,:,:) = 0.0
-  DO JL=1,INEGT
-    ZW(I1(JL),I2(JL),I3(JL)) = ZZW(JL)
-  END DO
-    PCIT(:,:,:) = MAX( ZW(:,:,:), PCIT(:,:,:) )
-#endif
-  END IF
-!$acc end kernels
-  DEALLOCATE(ZSSI)
-  DEALLOCATE(ZUSW)
-  DEALLOCATE(ZZW)
-  DEALLOCATE(ZPRES)
-  DEALLOCATE(ZZT)
-  DEALLOCATE(ZCIT)
-  DEALLOCATE(ZRVT)
-END IF
-!
-!*       3.1.3   budget storage
-!
-IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
-IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
-IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI')
-!
-  END SUBROUTINE RAIN_ICE_NUCLEATION
-!
-!-------------------------------------------------------------------------------
-!
-!
-  SUBROUTINE RAIN_ICE_SLOW
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-!-------------------------------------------------------------------------------
-!
-!
-!*       3.2     compute the homogeneous nucleation source: RCHONI
-!
-!
-!$acc kernels present(GWORK,ZLSFACT,ZLVFACT,ZRCS,ZRCT,ZRIS,ZRHODREF,ZTHS,XRTMIN)
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) =(ZZT(1:IMICRO)<XTT-35.0) .AND. (ZRCT(1:IMICRO)>XRTMIN(2)) .AND. (ZRCS(1:IMICRO)>0.)
-  WHERE (GWORK(1:IMICRO))
-    ZZW(1:IMICRO) = MIN( ZRCS(1:IMICRO),XHON*ZRHODREF(1:IMICRO)*ZRCT(1:IMICRO)       &
-#ifndef MNH_BITREP
-                                 *EXP( MIN(XMNH_HUGE_12_LOG,XALPHA3*(ZZT(1:IMICRO)-XTT)-XBETA3) ) )
-#else
-                                 *BR_EXP(MIN(XMNH_HUGE_12_LOG, XALPHA3*(ZZT(1:IMICRO)-XTT)-XBETA3) ) )
-#endif
-    ZRIS(1:IMICRO) = ZRIS(1:IMICRO) + ZZW(1:IMICRO)
-    ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW(1:IMICRO)*(ZLSFACT(1:IMICRO)-ZLVFACT(:)) ! f(L_f*(RCHONI))
-  ENDWHERE
-!$acc end kernels
-!
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'HON_BU_RTH')
-  END IF
-  IF (LBUDGET_RC) THEN
-!$acc update self(ZRCS)
-    CALL BUDGET (UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     7,'HON_BU_RRC')
-  END IF
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     9,'HON_BU_RRI')
-  END IF
-!
-!*       3.3     compute the spontaneous freezing source: RRHONG
-!
-!$acc kernels present(GWORK,ZRGS,ZRRS,ZRRT,XRTMIN)
-  ZZW(1:IMICRO) = 0.0
-  GWORK = (ZZT(1:IMICRO)<XTT-35.0) .AND. (ZRRT(1:IMICRO)>XRTMIN(3)) .AND. (ZRRS(1:IMICRO)>0.)
-  WHERE (GWORK)
-    ZZW(1:IMICRO) = MIN( ZRRS(1:IMICRO),ZRRT(1:IMICRO)* ZINVTSTEP )
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW(1:IMICRO)
-    ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW(1:IMICRO)*(ZLSFACT(1:IMICRO)-ZLVFACT(:)) ! f(L_f*(RRHONG))
-  ENDWHERE
-!$acc end kernels
-!
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'SFR_BU_RTH')
-  END IF
-  IF (LBUDGET_RR) THEN
-!$acc update self(ZRRS)
-    CALL BUDGET (UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     8,'SFR_BU_RRR')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    11,'SFR_BU_RRG')
-  END IF
-!
-!*       3.4    compute the deposition, aggregation and autoconversion sources
-!
-!$acc kernels present(GWORK,ZAI,ZCJ,ZDV,ZKA,ZLBDAS,ZRHODREF,ZRSS,ZRST,ZRVS,XEX0DEPS,XEX1DEPS,XLBEXS,XRTMIN)
-  ZKA(1:IMICRO) = 2.38E-2 + 0.0071E-2 * ( ZZT(1:IMICRO) - XTT )          ! k_a
-#ifndef MNH_BITREP
-  ZDV(1:IMICRO) = 0.211E-4 * (ZZT(1:IMICRO)/XTT)**1.94 * (XP00/ZPRES(1:IMICRO)) ! D_v
-#else
-  ZDV(1:IMICRO) = 0.211E-4 * BR_POW(ZZT(1:IMICRO)/XTT,1.94) * (XP00/ZPRES(1:IMICRO)) ! D_v
-#endif
-!
-!*       3.4.1  compute the thermodynamical function A_i(T,P)
-!*              and the c^prime_j (in the ventilation factor)
-!
-
-#ifndef MNH_BITREP
-  ZAI(1:IMICRO) = EXP( XALPI - XBETAI/ZZT(1:IMICRO) - XGAMI*ALOG(ZZT(1:IMICRO) ) ) ! es_i
-  ZAI(1:IMICRO) = ( XLSTT + (XCPV-XCI)*(ZZT(1:IMICRO)-XTT) )**2 / (ZKA(1:IMICRO)*XRV*ZZT(1:IMICRO)**2) &
-                                 + ( XRV*ZZT(1:IMICRO) ) / (ZDV(1:IMICRO)*ZAI(1:IMICRO))
-  ZCJ(1:IMICRO) = XSCFAC * ZRHODREF(1:IMICRO)**0.3 / SQRT( 1.718E-5+0.0049E-5*(ZZT(1:IMICRO)-XTT) )
-#else
-  ZAI(1:IMICRO) = BR_EXP( XALPI - XBETAI/ZZT(1:IMICRO) - XGAMI*BR_LOG(ZZT(1:IMICRO) ) ) ! es_i
-  ZAI(1:IMICRO) = BR_P2( XLSTT + (XCPV-XCI)*(ZZT(1:IMICRO)-XTT) ) / (ZKA(1:IMICRO)*XRV*BR_P2(ZZT(1:IMICRO))) &
-                                 + ( XRV*ZZT(1:IMICRO) ) / (ZDV(1:IMICRO)*ZAI(1:IMICRO))
-!   ZCJ(1:IMICRO) = XSCFAC * BR_POW(ZRHODREF(1:IMICRO),0.3) / BR_POW( 1.718E-5+0.0049E-5*(ZZT(1:IMICRO)-XTT) , 0.5)
-!$acc loop independent
-  DO JI=1,IMICRO
-    ZCJ(JI) = XSCFAC * BR_POW(ZRHODREF(JI),0.3) / BR_POW( 1.718E-5+0.0049E-5*(ZZT(JI)-XTT) , 0.5)
-  END DO
-#endif
-!
-!*       3.4.2  compute the riming-conversion of r_c for r_i production: RCAUTI
-!
-!  ZZW(:) = 0.0
-!  ZTIMAUTIC = SQRT( XTIMAUTI*XTIMAUTC )
-!  WHERE ( (ZRCT(:)>0.0) .AND. (ZRIT(:)>0.0) .AND. (ZRCS(:)>0.0) )
-!    ZZW(:) = MIN( ZRCS(:),ZTIMAUTIC * MAX( SQRT( ZRIT(:)*ZRCT(:) ),0.0 ) )
-!    ZRIS(:) = ZRIS(:) + ZZW(:)
-!    ZRCS(:) = ZRCS(:) - ZZW(:)
-!    ZTHS(:) = ZTHS(:) + ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(RCAUTI))
-!  END WHERE
-!
-!*       3.4.3  compute the deposition on r_s: RVDEPS
-!
-  WHERE ( ZRST(1:IMICRO)>0.0 )
-#ifndef MNH_BITREP
-    ZLBDAS(1:IMICRO)  = MIN( XLBDAS_MAX,                                           &
-                      XLBS*( ZRHODREF(1:IMICRO)*MAX( ZRST(1:IMICRO),XRTMIN(5) ) )**XLBEXS )
-#else
-    ZLBDAS(1:IMICRO)  = MIN( XLBDAS_MAX,                                           &
-                      XLBS*BR_POW( ZRHODREF(1:IMICRO)*MAX( ZRST(1:IMICRO),XRTMIN(5) ),XLBEXS ) )
-#endif
-  END WHERE
-  ZZW(1:IMICRO) = 0.0
-  GWORK = (ZRST(1:IMICRO)>XRTMIN(5)) .AND. (ZRSS(1:IMICRO)>0.0)
-  WHERE ( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = ( ZSSI(1:IMICRO)/(ZRHODREF(1:IMICRO)*ZAI(1:IMICRO)) ) *                               &
-             ( X0DEPS*ZLBDAS(1:IMICRO)**XEX0DEPS + X1DEPS*ZCJ(1:IMICRO)*ZLBDAS(1:IMICRO)**XEX1DEPS )
-#else
-    ZZW(1:IMICRO) = ( ZSSI(1:IMICRO)/(ZRHODREF(1:IMICRO)*ZAI(1:IMICRO)) ) *                               &
-             ( X0DEPS*BR_POW(ZLBDAS(1:IMICRO),XEX0DEPS) + X1DEPS*ZCJ(1:IMICRO)*BR_POW(ZLBDAS(1:IMICRO),XEX1DEPS) )
-#endif
-    ZZW(1:IMICRO) =         MIN( ZRVS(1:IMICRO),ZZW(1:IMICRO)      )*(0.5+SIGN(0.5,ZZW(1:IMICRO))) &
-                   - MIN( ZRSS(1:IMICRO),ABS(ZZW(1:IMICRO)) )*(0.5-SIGN(0.5,ZZW(1:IMICRO)))
-    ZRSS(1:IMICRO) = ZRSS(1:IMICRO) + ZZW(1:IMICRO)
-    ZRVS(1:IMICRO) = ZRVS(1:IMICRO) - ZZW(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW(1:IMICRO)*ZLSFACT(1:IMICRO)
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'DEPS_BU_RTH')
-  END IF
-  IF (LBUDGET_RV) THEN
-!$acc update self(ZRVS)
-    CALL BUDGET (UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),6,'DEPS_BU_RRV')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    10,'DEPS_BU_RRS')
-  END IF
-!
-!*       3.4.4  compute the aggregation on r_s: RIAGGS
-!
-!$acc kernels present(GWORK,ZLBDAS,ZRIT,ZRHODREF,XEXIAGGS,XRTMIN)
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRIT(1:IMICRO)>XRTMIN(4)) .AND. (ZRST(1:IMICRO)>XRTMIN(5)) .AND. (ZRIS(1:IMICRO)>0.0)
-  WHERE ( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = MIN( ZRIS(1:IMICRO),XFIAGGS * EXP( XCOLEXIS*(ZZT(1:IMICRO)-XTT) ) &
-                   * ZRIT(1:IMICRO)                      &
-                   * ZLBDAS(1:IMICRO)**XEXIAGGS          &
-                   * ZRHODREF(1:IMICRO)**(-XCEXVT)       )
-#else
-    ZZW(1:IMICRO) = MIN( ZRIS(1:IMICRO),XFIAGGS * BR_EXP( XCOLEXIS*(ZZT(1:IMICRO)-XTT) ) &
-                   * ZRIT(1:IMICRO)                      &
-                   * BR_POW(ZLBDAS(1:IMICRO),XEXIAGGS)   &
-                   * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT)  )
-#endif
-    ZRSS(1:IMICRO)  = ZRSS(1:IMICRO)  + ZZW(1:IMICRO)
-    ZRIS(1:IMICRO)  = ZRIS(1:IMICRO)  - ZZW(1:IMICRO)
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), 9,'AGGS_BU_RRI')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),10,'AGGS_BU_RRS')
-  END IF
-!
-!*       3.4.5  compute the autoconversion of r_i for r_s production: RIAUTS
-!
-  ALLOCATE(ZCRIAUTI(IMICRO))
-!$acc kernels present(GWORK,ZCRIAUTI,XRTMIN)
-#ifndef MNH_BITREP
-  ZCRIAUTI(1:IMICRO)=MIN(XCRIAUTI,10**(XACRIAUTI*(ZZT(1:IMICRO)-XTT)+XBCRIAUTI))
-#else
-  ZCRIAUTI(1:IMICRO)=MIN(XCRIAUTI, BR_POW(10.,XACRIAUTI*(ZZT(1:IMICRO)-XTT)+XBCRIAUTI) )
-#endif
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRIT(1:IMICRO)>XRTMIN(4)) .AND. (ZRIS(1:IMICRO)>0.0)
-  WHERE ( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = MIN( ZRIS(1:IMICRO),XTIMAUTI * EXP( XTEXAUTI*(ZZT(1:IMICRO)-XTT) ) &
-                            * MAX( ZRIT(1:IMICRO)-ZCRIAUTI(1:IMICRO),0.0 ) )
-#else
-    ZZW(1:IMICRO) = MIN( ZRIS(1:IMICRO),XTIMAUTI * BR_EXP( XTEXAUTI*(ZZT(1:IMICRO)-XTT) ) &
-                            * MAX( ZRIT(1:IMICRO)-ZCRIAUTI(1:IMICRO),0.0 ) )
-#endif
-    ZRSS(1:IMICRO)  = ZRSS(1:IMICRO)  + ZZW(1:IMICRO)
-    ZRIS(1:IMICRO)  = ZRIS(1:IMICRO)  - ZZW(1:IMICRO)
-  END WHERE
-!$acc end kernels
-  DEALLOCATE(ZCRIAUTI)
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), 9,'AUTS_BU_RRI')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),10,'AUTS_BU_RRS')
-  END IF
-!
-!*       3.4.6  compute the deposition on r_g: RVDEPG
-!
-!
-!$acc kernels present(GWORK,ZLBDAG,ZRGT,ZRHODREF,XEX0DEPG,XEX1DEPG,XLBEXG,XRTMIN)
-  WHERE ( ZRGT(1:IMICRO)>0.0 )
-#ifndef MNH_BITREP
-    ZLBDAG(1:IMICRO)  = XLBG*( ZRHODREF(1:IMICRO)*MAX( ZRGT(1:IMICRO),XRTMIN(6) ) )**XLBEXG
-#else
-    ZLBDAG(1:IMICRO)  = XLBG*BR_POW( ZRHODREF(1:IMICRO)*MAX( ZRGT(1:IMICRO),XRTMIN(6) ),XLBEXG)
-#endif
-  END WHERE
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRGT(1:IMICRO)>XRTMIN(6)) .AND. (ZRGS(1:IMICRO)>0.0)
-  WHERE ( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = ( ZSSI(1:IMICRO)/(ZRHODREF(1:IMICRO)*ZAI(1:IMICRO)) ) *                               &
-             ( X0DEPG*ZLBDAG(1:IMICRO)**XEX0DEPG + X1DEPG*ZCJ(1:IMICRO)*ZLBDAG(1:IMICRO)**XEX1DEPG )
-#else
-    ZZW(1:IMICRO) = ( ZSSI(1:IMICRO)/(ZRHODREF(1:IMICRO)*ZAI(1:IMICRO)) ) *                               &
-             ( X0DEPG*BR_POW(ZLBDAG(1:IMICRO),XEX0DEPG) + X1DEPG*ZCJ(1:IMICRO)*BR_POW(ZLBDAG(1:IMICRO),XEX1DEPG) )
-#endif
-    ZZW(1:IMICRO) =         MIN( ZRVS(1:IMICRO),ZZW(1:IMICRO)      )*(0.5+SIGN(0.5,ZZW(1:IMICRO))) &
-                   - MIN( ZRGS(1:IMICRO),ABS(ZZW(1:IMICRO)) )*(0.5-SIGN(0.5,ZZW(1:IMICRO)))
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW(1:IMICRO)
-    ZRVS(1:IMICRO) = ZRVS(1:IMICRO) - ZZW(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW(1:IMICRO)*ZLSFACT(1:IMICRO)
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), 4,'DEPG_BU_RTH')
-  END IF
-  IF (LBUDGET_RV) THEN
-!$acc update self(ZRVS)
-    CALL BUDGET (UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:), 6,'DEPG_BU_RRV')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     11,'DEPG_BU_RRG')
-  END IF
-!
-  END SUBROUTINE RAIN_ICE_SLOW
-!
-!-------------------------------------------------------------------------------
-!
-!
-  SUBROUTINE RAIN_ICE_WARM
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-!
-!-------------------------------------------------------------------------------
-!
-!*       4.2    compute the autoconversion of r_c for r_r production: RCAUTR
-!
-!$acc kernels present(GWORK,ZHLC_HCF,ZHLC_HRC,ZRHODREF)
-    GWORK(:) = ZRCS(:)>0.0 .AND. ZHLC_HCF(:).GT.0.0
-    WHERE( GWORK(:) )
-      ZZW(:) = XTIMAUTC*MAX( ZHLC_HRC(:)/ZHLC_HCF(:)  - XCRIAUTC/ZRHODREF(:),0.0)
-      ZZW(:) = MIN( ZRCS(:),ZHLC_HCF(:)*ZZW(:))
-      ZRCS(:) = ZRCS(:) - ZZW(:)
-      ZRRS(:) = ZRRS(:) + ZZW(:)
-    END WHERE
-!$acc end kernels
-!
-      IF (LBUDGET_RC) CALL BUDGET (                                               &
-                       UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                                7,'AUTO_BU_RRC')
-      IF (LBUDGET_RR) CALL BUDGET (                                               &
-                       UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                                8,'AUTO_BU_RRR')
-!
-!*       4.3    compute the accretion of r_c for r_r production: RCACCR
-!
-    IF (CSUBG_RC_RR_ACCR=='NONE') THEN
-!$acc kernels present(GWORK,ZZW,ZLBDAR,ZRRT,ZRCS,ZRRS,ZRHODREF,ZRCT,XEXCACCR,XRTMIN)
-      !CLoud water and rain are diluted over the grid box
-      GWORK(1:IMICRO) = ZRCT(1:IMICRO)>XRTMIN(2) .AND. ZRRT(1:IMICRO)>XRTMIN(3) .AND. ZRCS(1:IMICRO)>0.0
-      WHERE( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-        ZZW(1:IMICRO) = MIN( ZRCS(1:IMICRO), XFCACCR * ZRCT(1:IMICRO)                &
-                 * ZLBDAR(1:IMICRO)**XEXCACCR    &
-                 * ZRHODREF(1:IMICRO)**(-XCEXVT) )
-#else
-        ZZW(1:IMICRO) = MIN( ZRCS(1:IMICRO), XFCACCR * ZRCT(1:IMICRO)                &
-                 * BR_POW(ZLBDAR(1:IMICRO),XEXCACCR)    &
-                 * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT) )
-#endif
-        ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW(1:IMICRO)
-        ZRRS(1:IMICRO) = ZRRS(1:IMICRO) + ZZW(1:IMICRO)
-      END WHERE
-!$acc end kernels
-
-    ELSEIF (CSUBG_RC_RR_ACCR=='PRFR') THEN
-#ifdef _OPENACC
-PRINT *,'OPENACC: RAIN_ICE_WARM::CSUBG_RC_RR_ACCR==PRFR not yet implemented'
-CALL ABORT
-#endif
-!$acc kernels present(ZCF,ZRF,ZHLC_HCF,ZHLC_LCF,ZHLC_HRC,ZHLC_LRC,XEXCACCR,XRTMIN)
-      !Cloud water is concentrated over its fraction with possibly to parts with high and low content as set for autoconversion
-      !Rain is concnetrated over its fraction
-      !Rain in high content area fraction: ZHLC_HCF
-      !Rain in low content area fraction:
-      ! if ZRF<ZCF (rain is entirely falling in cloud): ZRF-ZHLC_HCF
-      ! if ZRF>ZCF (rain is falling in cloud and in clear sky): ZCF-ZHLC_HCF
-      ! => min(ZCF, ZRF)-ZHLC_HCF
-      ZZW(1:IMICRO) = 0.
-      WHERE( ZHLC_HRC(1:IMICRO)>XRTMIN(2) .AND. ZRRT(1:IMICRO)>XRTMIN(3) .AND. ZRCS(1:IMICRO)>0.0 &
-            .AND. ZHLC_HCF(1:IMICRO)>0 )
-        !Accretion due to rain falling in high cloud content
-#ifndef MNH_BITREP
-        ZZW(1:IMICRO) = XFCACCR * ( ZHLC_HRC(1:IMICRO)/ZHLC_HCF(1:IMICRO) )     &
-               * ZLBDAR_RF(1:IMICRO)**XEXCACCR &
-               * ZRHODREF(1:IMICRO)**(-XCEXVT) &
-               * ZHLC_HCF
-#else
-        ZZW(1:IMICRO) = XFCACCR * ( ZHLC_HRC(1:IMICRO)/ZHLC_HCF(1:IMICRO) )     &
-               * BR_POW(ZLBDAR_RF(1:IMICRO),XEXCACCR) &
-               * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT) &
-               * ZHLC_HCF
-#endif
-      END WHERE
-      WHERE( ZHLC_LRC(1:IMICRO)>XRTMIN(2) .AND. ZRRT(1:IMICRO)>XRTMIN(3) .AND. ZRCS(1:IMICRO)>0.0 &
-            .AND. ZHLC_LCF(1:IMICRO)>0 )
-        !We add acrretion due to rain falling in low cloud content
-#ifndef MNH_BITREP
-        ZZW(1:IMICRO) = ZZW(1:IMICRO) + XFCACCR * ( ZHLC_LRC(1:IMICRO)/ZHLC_LCF(1:IMICRO) )     &
-                        * ZLBDAR_RF(1:IMICRO)**XEXCACCR &
-                        * ZRHODREF(1:IMICRO)**(-XCEXVT) &
-                        * (MIN(ZCF(1:IMICRO), ZRF(1:IMICRO))-ZHLC_HCF(1:IMICRO))
-#else
-        ZZW(1:IMICRO) = ZZW(1:IMICRO) + XFCACCR * ( ZHLC_LRC(1:IMICRO)/ZHLC_LCF(1:IMICRO) )     &
-                        * BR_POW(ZLBDAR_RF(1:IMICRO),XEXCACCR) &
-                        * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT) &
-                        * (MIN(ZCF(1:IMICRO), ZRF(1:IMICRO))-ZHLC_HCF(1:IMICRO))
-#endif
-      END WHERE
-      ZZW(1:IMICRO)=MIN(ZRCS(1:IMICRO), ZZW(1:IMICRO))
-      ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW(1:IMICRO)
-      ZRRS(1:IMICRO) = ZRRS(1:IMICRO) + ZZW(1:IMICRO)
-!$acc end kernels
-
-    ELSE
-      !wrong CSUBG_RC_RR_ACCR case
-      WRITE(*,*) 'wrong CSUBG_RC_RR_ACCR case'
-            CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_WARM','')  
-    ENDIF
-
-    IF (LBUDGET_RC) CALL BUDGET (                                               &
-                     UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                              7,'ACCR_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET (                                               &
-                     UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'ACCR_BU_RRR')
-!
-!*       4.4    compute the evaporation of r_r: RREVAV
-!
-!$acc kernels present(ZZW,ZUSW)
-    !Not necessary but useful for debugging (MPPDB_CHECK1D on them)
-    ZZW(1:IMICRO)  = 0.0
-    ZUSW(1:IMICRO) = 0.0
-!$acc end kernels
-
-    IF (CSUBG_RR_EVAP=='NONE') THEN
-!$acc kernels present(GWORK,ZZW,ZLBDAR,ZRRT,ZRVS,ZTHS,ZRRS,ZRHODREF,ZRCT,XEX0EVAR,XEX1EVAR,XRTMIN)
-      !Evaporation only when there's no cloud (RC must be 0)
-      GWORK(1:IMICRO) = (ZRRT(1:IMICRO)>XRTMIN(3)) .AND. (ZRCT(1:IMICRO)<=XRTMIN(2))
-       WHERE( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-          ZZW(1:IMICRO)  = EXP( XALPW - XBETAW/ZZT(1:IMICRO) - XGAMW*ALOG(ZZT(1:IMICRO) ) ) ! es_w
-#else
-          ZZW(1:IMICRO)  = BR_EXP( XALPW - XBETAW/ZZT(1:IMICRO) - XGAMW*BR_LOG(ZZT(1:IMICRO) ) ) ! es_w
-#endif
-          ZUSW(1:IMICRO) = 1.0 - ZRVT(1:IMICRO)*( ZPRES(1:IMICRO)-ZZW(1:IMICRO) ) / ( (XMV/XMD) * ZZW(1:IMICRO) )
-                                                        ! Undersaturation over water
-#ifndef MNH_BITREP
-          ZZW(1:IMICRO) = ( XLVTT+(XCPV-XCL)*(ZZT(1:IMICRO)-XTT) )**2 / ( ZKA(1:IMICRO)*XRV*ZZT(1:IMICRO)**2 ) &
-               + ( XRV*ZZT(1:IMICRO) ) / ( ZDV(1:IMICRO)*ZZW(1:IMICRO) )
-          ZZW(1:IMICRO) = MIN( ZRRS(1:IMICRO),( MAX( 0.0,ZUSW(1:IMICRO) )/(ZRHODREF(1:IMICRO)*ZZW(1:IMICRO)) ) *      &
-            ( X0EVAR*ZLBDAR(1:IMICRO)**XEX0EVAR+X1EVAR*ZCJ(1:IMICRO)*ZLBDAR(1:IMICRO)**XEX1EVAR ) )
-#else
-          ZZW(1:IMICRO) = BR_P2( XLVTT+(XCPV-XCL)*(ZZT(1:IMICRO)-XTT) ) / ( ZKA(1:IMICRO)*XRV*BR_P2(ZZT(1:IMICRO)) ) &
-               + ( XRV*ZZT(1:IMICRO) ) / ( ZDV(1:IMICRO)*ZZW(1:IMICRO) )
-          ZZW(1:IMICRO) = MIN( ZRRS(1:IMICRO),( MAX( 0.0,ZUSW(1:IMICRO) )/(ZRHODREF(1:IMICRO)*ZZW(1:IMICRO)) ) *      &
-            ( X0EVAR*BR_POW(ZLBDAR(1:IMICRO),XEX0EVAR)+X1EVAR*ZCJ(1:IMICRO)*BR_POW(ZLBDAR(1:IMICRO),XEX1EVAR) ) )
-#endif
-          ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW(1:IMICRO)
-          ZRVS(1:IMICRO) = ZRVS(1:IMICRO) + ZZW(1:IMICRO)
-          ZTHS(1:IMICRO) = ZTHS(1:IMICRO) - ZZW(1:IMICRO)*ZLVFACT(1:IMICRO)
-       END WHERE
-!$acc end kernels
-    ELSEIF (CSUBG_RR_EVAP=='CLFR' .OR. CSUBG_RR_EVAP=='PRFR') THEN
-#ifdef _OPENACC
-PRINT *,'OPENACC: RAIN_ICE_WARM::CSUBG_RR_EVAP==CLFR or PRFR not yet implemented'
-CALL ABORT
-#endif
-!$acc kernels present(ZCF,ZRF,ZLBDAR,ZRHODREF,ZZW2,ZZW3,ZZW4,XRTMIN,CSUBG_RR_EVAP,XEX0EVAR,XEX1EVAR)
-      !Evaporation in clear sky part
-      !With CLFR, rain is diluted over the grid box
-      !With PRFR, rain is concentrated in its fraction
-      !Use temperature and humidity in clear sky part like Bechtold et al. (1993)
-      IF (CSUBG_RR_EVAP=='CLFR') THEN
-        ZZW4(1:IMICRO)=1. !Precipitation fraction
-        ZZW3(1:IMICRO)=ZLBDAR(1:IMICRO)
-      ELSE
-        ZZW4(1:IMICRO)=ZRF(1:IMICRO) !Precipitation fraction
-        ZZW3(1:IMICRO)=ZLBDAR_RF(1:IMICRO)
-      ENDIF
-
-      !ATTENTION
-      !Il faudrait recalculer les variables ZKA, ZDV, ZCJ en tenant compte de la température T^u
-      !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s
-      !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de ZKA, ZDV, ZCJ dans rain_ice
-      !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs
-
-      WHERE(  (ZRRT(1:IMICRO)>XRTMIN(3)) .AND. ( ZZW4(1:IMICRO) > ZCF(1:IMICRO) ) )
-        ! outside the cloud (environment) the use of T^u (unsaturated) instead of T
-        ! Bechtold et al. 1993
-        !
-        ! T^u = T_l = theta_l * (T/theta)
-        ZZW2(1:IMICRO) =  ZTHLT(1:IMICRO) * ZZT(1:IMICRO) / ZTHT(1:IMICRO)
-        !
-        ! es_w with new T^u
-#ifndef MNH_BITREP
-        ZZW(1:IMICRO)  = EXP( XALPW - XBETAW/ZZW2(1:IMICRO) - XGAMW*ALOG(ZZW2(1:IMICRO) ) )
-#else
-        ZZW(1:IMICRO)  = BR_EXP( XALPW - XBETAW/ZZW2(1:IMICRO) - XGAMW*BR_LOG(ZZW2(1:IMICRO) ) )
-#endif
-        !
-        ! S, Undersaturation over water (with new theta^u)
-        ZUSW(1:IMICRO) = 1.0 - ZRVT(1:IMICRO)*( ZPRES(1:IMICRO)-ZZW(1:IMICRO) ) / ( (XMV/XMD) * ZZW(1:IMICRO) )
-        !
-#ifndef MNH_BITREP
-        ZZW(1:IMICRO) = ( XLVTT+(XCPV-XCL)*(ZZW2(1:IMICRO)-XTT) )**2 / ( ZKA(1:IMICRO)*XRV*ZZW2(1:IMICRO)**2 ) &
-               + ( XRV*ZZW2(1:IMICRO) ) / ( ZDV(1:IMICRO)*ZZW(1:IMICRO) )
-        !
-        ZZW(1:IMICRO) = MAX( 0.0,ZUSW(1:IMICRO) )/(ZRHODREF(1:IMICRO)*ZZW(1:IMICRO))  *      &
-               ( X0EVAR*ZZW3(1:IMICRO)**XEX0EVAR+X1EVAR*ZCJ(1:IMICRO)*ZZW3(1:IMICRO)**XEX1EVAR )
-#else
-        ZZW(1:IMICRO) = BR_P2( XLVTT+(XCPV-XCL)*(ZZW2(1:IMICRO)-XTT) ) / ( ZKA(1:IMICRO)*XRV*BR_P2(ZZW2(1:IMICRO)) ) &
-               + ( XRV*ZZW2(1:IMICRO) ) / ( ZDV(1:IMICRO)*ZZW(1:IMICRO) )
-        !
-        ZZW(1:IMICRO) = MAX( 0.0,ZUSW(1:IMICRO) )/(ZRHODREF(1:IMICRO)*ZZW(1:IMICRO))  *      &
-               ( BR_POW(X0EVAR*ZZW3(1:IMICRO),XEX0EVAR)+X1EVAR*ZCJ(1:IMICRO)*BR_POW(ZZW3(1:IMICRO),XEX1EVAR) )
-#endif
-
-        !
-        ZZW(1:IMICRO) = MIN( ZRRS(1:IMICRO),  ZZW(1:IMICRO) *( ZZW4(1:IMICRO) - ZCF(1:IMICRO) ) )
-        !
-        ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW(1:IMICRO)
-        ZRVS(1:IMICRO) = ZRVS(1:IMICRO) + ZZW(1:IMICRO)
-        ZTHS(1:IMICRO) = ZTHS(1:IMICRO) - ZZW(1:IMICRO)*ZLVFACT(1:IMICRO)
-      END WHERE
-!$acc end kernels
-
-    ELSE
-      !wrong CSUBG_RR_EVAP case
-      WRITE(*,*) 'wrong CSUBG_RR_EVAP case'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_WARM','')  
-    END IF
-
-    IF (LBUDGET_TH) CALL BUDGET (                                               &
-                 UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),   &
-                                                              4,'REVA_BU_RTH')
-    IF (LBUDGET_RV) CALL BUDGET (                                               &
-                 UNPACK(ZRVS(:),MASK=GMICRO(:,:,:),FIELD=PRVS)*PRHODJ(:,:,:),   &
-                                                              6,'REVA_BU_RRV')
-    IF (LBUDGET_RR) CALL BUDGET (                                               &
-                     UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    &
-                                                              8,'REVA_BU_RRR')
-#ifndef _OPENACC
-    PEVAP3D(:,:,:)=UNPACK(ZZW(:),MASK=GMICRO(:,:,:),FIELD=0.0)
-#else
-!$acc kernels present(I1,I2,I3,PEVAP3D)
-  PEVAP3D(:,:,:) = 0.0
-!$acc loop independent
-  DO JL=1,IMICRO
-    PEVAP3D(I1(JL),I2(JL),I3(JL)) = ZZW(JL)
-  END DO
-!$acc end kernels
-#endif
-!
-  END SUBROUTINE RAIN_ICE_WARM
-!
-!-------------------------------------------------------------------------------
-!
-!
-  SUBROUTINE RAIN_ICE_FAST_RS
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-INTEGER , DIMENSION(:),ALLOCATABLE :: I1 ! Used to replace the COUNT
-INTEGER                            :: JL ! and PACK intrinsics
-REAL,DIMENSION(SIZE(ZZW1,1)) :: ZTMP
-!$acc declare device_resident(I1,ZTMP)
-!
-!-------------------------------------------------------------------------------
-!
-!*       5.1    cloud droplet riming of the aggregates
-!
-  ALLOCATE(GRIM(IMICRO))
-  ALLOCATE(I1(IMICRO)) !I1 is bigger than necessary but it easier to do it now (instead of computing IGRIM before allocating I1)
-!$acc data create(GRIM)
-!
-!$acc kernels present(ZZW1,XRTMIN)
-  ZZW1(:,:) = 0.0
-! GRIM(1:IMICRO) = (ZRCT(1:IMICRO)>0.0) .AND. (ZRST(1:IMICRO)>0.0) .AND.            &
-  GRIM(1:IMICRO) = (ZRCT(1:IMICRO)>XRTMIN(2)) .AND. (ZRST(1:IMICRO)>XRTMIN(5)) .AND.            &
-                                (ZRCS(1:IMICRO)>0.0) .AND. (ZZT(1:IMICRO)<XTT)
-!$acc end kernels
-#ifndef _OPENACC
-  IGRIM = COUNT( GRIM(1:IMICRO) )
-#else
-  CALL COUNTJV1D_DEVICE(GRIM(1:IMICRO),I1(1:IMICRO),IGRIM)
-#endif
-!
-  IF( IGRIM>0 ) THEN
-!
-!        5.1.0  allocations
-!
-    ALLOCATE(ZVEC1(IGRIM))
-    ALLOCATE(ZVEC2(IGRIM))
-    ALLOCATE(IVEC1(IGRIM))
-    ALLOCATE(IVEC2(IGRIM))
-!$acc data create(IVEC1,IVEC2,ZVEC1,ZVEC2)
-!
-!        5.1.1  select the ZLBDAS
-!
-#ifndef _OPENACC
-    ZVEC1(1:IGRIM) = PACK( ZLBDAS(1:IMICRO),MASK=GRIM(1:IGRIM) )
-#else
-!$acc kernels default(none) &
-!$acc &  present(XRIMINTP1,XEXCRIMSS,XGAMINC_RIM1,XGAMINC_RIM2)  &
-!$acc &       present(GRIM,ZLBDAS,ZRHODREF,ZLSFACT,ZLVFACT,ZZW1,IVEC2,ZVEC1,ZVEC2,ZRCT,ZRCS,ZRSS,ZTHS,ZZW) &
-!$acc & present(XEXCRIMSG,XEXSRIMCG) &
-!$acc & present(GWORK,ZRGS)
-    DO JL=1,IGRIM
-      ZVEC1(JL)  = ZLBDAS(I1(JL))
-    END DO
-#endif
-!
-!        5.1.2  find the next lower indice for the ZLBDAS in the geometrical
-!               set of Lbda_s used to tabulate some moments of the incomplete
-!               gamma function
-!
-    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
-#ifndef MNH_BITREP
-                          XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
-#else
-                          XRIMINTP1 * BR_LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
-#endif
-    IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
-    ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) )
-!
-!        5.1.3  perform the linear interpolation of the normalized
-!               "2+XDS"-moment of the incomplete gamma function
-!
-    ZVEC1(1:IGRIM) =   XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                     - XGAMINC_RIM1( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
-#ifndef _OPENACC
-    ZZW(1:IMICRO) = UNPACK( VECTOR=ZVEC1(1:IGRIM),MASK=GRIM,FIELD=0.0 )
-#else
-    ZZW(1:IMICRO) = 0.0
-!$acc loop independent
-    DO JL=1,IGRIM
-      ZZW(I1(JL)) = ZVEC1(JL)
-    END DO
-#endif
-!
-!        5.1.4  riming of the small sized aggregates
-!
-    WHERE ( GRIM(1:IMICRO) )
-#ifndef MNH_BITREP
-      ZZW1(1:IMICRO,1) = MIN( ZRCS(1:IMICRO),                                &
-             XCRIMSS * ZZW(1:IMICRO) * ZRCT(1:IMICRO)                & ! RCRIMSS
-                              *   ZLBDAS(1:IMICRO)**XEXCRIMSS &
-                              * ZRHODREF(1:IMICRO)**(-XCEXVT) )
-#else
-      ZZW1(1:IMICRO,1) = MIN( ZRCS(1:IMICRO),                                &
-             XCRIMSS * ZZW(1:IMICRO) * ZRCT(1:IMICRO)                & ! RCRIMSS
-                              *   BR_POW(ZLBDAS(1:IMICRO),XEXCRIMSS) &
-                              * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT) )
-#endif
-      ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW1(1:IMICRO,1)
-      ZRSS(1:IMICRO) = ZRSS(1:IMICRO) + ZZW1(1:IMICRO,1)
-      ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW1(1:IMICRO,1)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*(RCRIMSS))
-    END WHERE
-!
-!        5.1.5  perform the linear interpolation of the normalized
-!               "XBS"-moment of the incomplete gamma function
-!
-    ZVEC1(1:IGRIM) =  XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
-                - XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
-#ifndef _OPENACC
-    ZZW(1:IMICRO) = UNPACK( VECTOR=ZVEC1(1:IGRIM),MASK=GRIM,FIELD=0.0 )
-#else
-    ZZW(1:IMICRO) = 0.0
-!$acc loop independent
-    DO JL=1,IGRIM
-      ZZW(I1(JL)) = ZVEC1(JL)
-    END DO
-#endif
-!
-!        5.1.6  riming-conversion of the large sized aggregates into graupeln
-!
-    GWORK(1:IMICRO) = GRIM(1:IMICRO) .AND. (ZRSS(1:IMICRO)>0.0)
-    WHERE ( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-      ZZW1(1:IMICRO,2) = MIN( ZRCS(1:IMICRO),                     &
-                   XCRIMSG * ZRCT(1:IMICRO)                & ! RCRIMSG
-                           *  ZLBDAS(1:IMICRO)**XEXCRIMSG  &
-                           * ZRHODREF(1:IMICRO)**(-XCEXVT) &
-                           - ZZW1(1:IMICRO,1)              )
-      ZZW1(1:IMICRO,3) = MIN( ZRSS(1:IMICRO),                         &
-                       XSRIMCG * ZLBDAS(1:IMICRO)**XEXSRIMCG   & ! RSRIMCG
-                               * (1.0 - ZZW(1:IMICRO) )/(PTSTEP*ZRHODREF(1:IMICRO)) )
-#else
-      ZZW1(1:IMICRO,2) = MIN( ZRCS(1:IMICRO),                     &
-                   XCRIMSG * ZRCT(1:IMICRO)                & ! RCRIMSG
-                           *  BR_POW(ZLBDAS(1:IMICRO),XEXCRIMSG)  &
-                           * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT) &
-               - ZZW1(1:IMICRO,1)              )
-      ZZW1(1:IMICRO,3) = MIN( ZRSS(1:IMICRO),                         &
-                       XSRIMCG * BR_POW(ZLBDAS(1:IMICRO),XEXSRIMCG)   & ! RSRIMCG
-                               * (1.0 - ZZW(1:IMICRO) )/(PTSTEP*ZRHODREF(1:IMICRO)) )
-#endif
-      ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW1(1:IMICRO,2)
-      ZRSS(1:IMICRO) = ZRSS(1:IMICRO) - ZZW1(1:IMICRO,3)
-      ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW1(1:IMICRO,2)+ZZW1(1:IMICRO,3)
-      ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW1(1:IMICRO,2)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*(RCRIMSG))
-    END WHERE
-!$acc end kernels
-!$acc end data
-    DEALLOCATE(IVEC2)
-    DEALLOCATE(IVEC1)
-    DEALLOCATE(ZVEC2)
-    DEALLOCATE(ZVEC1)
-  END IF
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), 4,'RIM_BU_RTH')
-  END IF
-  IF (LBUDGET_RC) THEN
-!$acc update self(ZRCS)
-    CALL BUDGET (UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),      7,'RIM_BU_RRC')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     10,'RIM_BU_RRS')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     11,'RIM_BU_RRG')
-  END IF
-!$acc end data
-  DEALLOCATE(GRIM)
-!
-!*       5.2    rain accretion onto the aggregates
-!
-  ALLOCATE(GACC(IMICRO))
-!$acc data create(GACC)
-!$acc kernels present(ZZW1,XRTMIN)
-  ZZW1(1:IMICRO,2:3) = 0.0
-  GACC(1:IMICRO) = (ZRRT(:)>XRTMIN(3)) .AND. (ZRST(:)>XRTMIN(5)) .AND.            &
-                          (ZRRS(:)>0.0) .AND. (ZZT(:)<XTT)
-!$acc end kernels
-#ifndef _OPENACC
-  IGACC = COUNT( GACC(1:IMICRO) )
-#else
-   CALL COUNTJV1D_DEVICE(GACC(1:IMICRO),I1(1:IMICRO),IGACC)
-#endif
-!
-  IF( IGACC>0 ) THEN
-!
-!        5.2.0  allocations
-!
-    ALLOCATE(ZVEC1(IGACC))
-    ALLOCATE(ZVEC2(IGACC))
-    ALLOCATE(ZVEC3(IGACC))
-    ALLOCATE(IVEC1(IGACC))
-    ALLOCATE(IVEC2(IGACC))
-!$acc data create(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3)
-!
-!        5.2.1  select the (ZLBDAS,ZLBDAR) couplet
-!
-!$acc kernels present(XKER_RACCS,XKER_RACCSS,XKER_SACCRG,XCXS)                 &
-!$acc &       present(GACC,GWORK,ZLBDAS,ZRHODREF,ZZW,ZLSFACT,ZLVFACT,ZLBDAR,I1, &
-!$acc &               ZZW1,ZRRS,ZRSS,ZTHS,IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3,ZTMP)
-#ifndef _OPENACC
-    ZVEC1(1:IGACC) = PACK( ZLBDAS(1:IGACC),MASK=GACC(1:IGACC) )
-    ZVEC2(1:IGACC) = PACK( ZLBDAR(1:IGACC),MASK=GACC(1:IGACC) )
-#else
-    DO JL=1,IGACC
-      ZVEC1(JL)  = ZLBDAS(I1(JL))
-      ZVEC2(JL)  = ZLBDAR(I1(JL))
-    END DO
-#endif
-!
-!        5.2.2  find the next lower indice for the ZLBDAS and for the ZLBDAR
-!               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
-!               tabulate the RACCSS-kernel
-!
-    ZVEC1(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001,           &
-#ifndef MNH_BITREP
-                          XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
-#else
-                          XACCINTP1S * BR_LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
-#endif
-    IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) )
-    ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - FLOAT( IVEC1(1:IGACC) )
-!
-    ZVEC2(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001,           &
-#ifndef MNH_BITREP
-                          XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
-#else
-                          XACCINTP1R * BR_LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
-#endif
-    IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) )
-    ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - FLOAT( IVEC2(1:IGACC) )
-!
-!        5.2.3  perform the bilinear interpolation of the normalized
-!               RACCSS-kernel
-!
-!$acc loop independent
-    DO JJ = 1,IGACC
-      ZVEC3(JJ) =  (  XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                          * ZVEC1(JJ) &
-                 - (  XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                          * (ZVEC1(JJ) - 1.0)
-    END DO
-#ifndef _OPENACC
-    ZZW(1:IMICRO) = UNPACK( VECTOR=ZVEC3(1:IGACC),MASK=GACC,FIELD=0.0 )
-#else
-    ZZW(1:IMICRO) = 0.0
-!$acc loop independent
-    DO JL=1,IGACC
-      ZZW(I1(JL)) = ZVEC3(JL)
-    END DO
-#endif
-!
-!        5.2.4  raindrop accretion on the small sized aggregates
-!
-    WHERE ( GACC(1:IMICRO) )
-#ifndef MNH_BITREP
-      ZZW1(1:IMICRO,2) =                                            & !! coef of RRACCS
-              XFRACCSS*( ZLBDAS(1:IMICRO)**XCXS )*( ZRHODREF(1:IMICRO)**(-XCEXVT-1.) ) &
-         *( XLBRACCS1/((ZLBDAS(1:IMICRO)**2)               ) +                  &
-            XLBRACCS2/( ZLBDAS(1:IMICRO)    * ZLBDAR(1:IMICRO)    ) +                  &
-            XLBRACCS3/(               (ZLBDAR(1:IMICRO)**2)) )/ZLBDAR(1:IMICRO)**4
-#else
-      ZZW1(1:IMICRO,2) =                                            & !! coef of RRACCS
-              XFRACCSS*( BR_POW(ZLBDAS(1:IMICRO),XCXS) )*( BR_POW(ZRHODREF(1:IMICRO),-XCEXVT-1.) ) &
-         *( XLBRACCS1/((BR_P2(ZLBDAS(1:IMICRO)))               ) +                  &
-            XLBRACCS2/( ZLBDAS(1:IMICRO)    * ZLBDAR(1:IMICRO)    ) +                  &
-            XLBRACCS3/(               (BR_P2(ZLBDAR(1:IMICRO)))) )/BR_POW(ZLBDAR(1:IMICRO),4.0)
-#endif
-      ZZW1(1:IMICRO,4) = MIN( ZRRS(1:IMICRO),ZZW1(1:IMICRO,2)*ZZW(1:IMICRO) )           ! RRACCSS
-      ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW1(1:IMICRO,4)
-      ZRSS(1:IMICRO) = ZRSS(1:IMICRO) + ZZW1(1:IMICRO,4)
-      ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW1(1:IMICRO,4)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*(RRACCSS))
-    END WHERE
-!
-!        5.2.4b perform the bilinear interpolation of the normalized
-!               RACCS-kernel
-!
-    DO JJ = 1,IGACC
-      ZVEC3(JJ) =  (   XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    -  XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-                                                                   * ZVEC2(JJ) &
-                 - (   XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    -  XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-                                                           * (ZVEC2(JJ) - 1.0)
-    END DO
-#ifndef _OPENACC
-    ZZW1(:,2) = ZZW1(:,2)*UNPACK( VECTOR=ZVEC3(:),MASK=GACC(:),FIELD=0.0 )
-#else
-    !Problems when doing it this way on GPU (PGI 16.10/17.01):
-    !ZZW1(1:I1(1)-1,2) = 0.0
-    !ZZW1(I1(1),2) = ZZW1(I1(1),2)*ZVEC3(1)
-    !DO JL=2,IGACC
-    !  ZZW1(I1(JL-1)+1:I1(JL)-1,2) = 0.0
-    !  ZZW1(I1(JL),2) = ZZW1(I1(JL),2)*ZVEC3(JL)
-    !END DO
-    !ZZW1(I1(IGACC)+1:,2) = 0.0
-    !
-    !OK on GPU:
-    ZTMP(1:IMICRO) = ZZW1(1:IMICRO,2)
-    ZZW1(1:IMICRO,2) = 0.0
-!$acc loop independent
-    DO JL=1,IGACC
-      ZZW1(I1(JL),2) = ZTMP(I1(JL))*ZVEC3(JL)
-    END DO
-#endif
-                                                                       !! RRACCS!
-!        5.2.5  perform the bilinear interpolation of the normalized
-!               SACCRG-kernel
-!
-    DO JJ = 1,IGACC
-      ZVEC3(JJ) =  (  XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-                                                          * ZVEC2(JJ) &
-                 - (  XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
-                    - XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
-                                                          * (ZVEC2(JJ) - 1.0)
-    END DO
-#ifndef _OPENACC
-    ZZW(1:IMICRO) = UNPACK( VECTOR=ZVEC3(1:IGACC),MASK=GACC,FIELD=0.0 )
-#else
-    ZZW(1:IMICRO) = 0.0
-!$acc loop independent
-    DO JL=1,IGACC
-      ZZW(I1(JL)) = ZVEC3(JL)
-    END DO
-#endif
-!
-!        5.2.6  raindrop accretion-conversion of the large sized aggregates
-!               into graupeln
-!
-    GWORK(1:IMICRO) = GACC(1:IMICRO) .AND. (ZRSS(1:IMICRO)>0.0)
-    WHERE ( GWORK(1:IMICRO) )
-      ZZW1(1:IMICRO,2) = MAX( MIN( ZRRS(1:IMICRO),ZZW1(1:IMICRO,2)-ZZW1(1:IMICRO,4) ),0.0 )       ! RRACCSG
-    END WHERE
-    GWORK(1:IMICRO) = GWORK(1:IMICRO) .AND. ZZW1(1:IMICRO,2)>0.0
-    WHERE ( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-      ZZW1(1:IMICRO,3) = MIN( ZRSS(1:IMICRO),XFSACCRG*ZZW(1:IMICRO)*                     & ! RSACCRG
-            ( ZLBDAS(1:IMICRO)**(XCXS-XBS) )*( ZRHODREF(1:IMICRO)**(-XCEXVT-1.) ) &
-           *( XLBSACCR1/((ZLBDAR(1:IMICRO)**2)               ) +           &
-              XLBSACCR2/( ZLBDAR(1:IMICRO)    * ZLBDAS(1:IMICRO)    ) +           &
-              XLBSACCR3/(               (ZLBDAS(1:IMICRO)**2)) )/ZLBDAR(1:IMICRO) )
-#else
-      ZZW1(1:IMICRO,3) = MIN( ZRSS(1:IMICRO),XFSACCRG*ZZW(1:IMICRO)*                     & ! RSACCRG
-            ( BR_POW(ZLBDAS(1:IMICRO),XCXS-XBS) )*( BR_POW(ZRHODREF(1:IMICRO),-XCEXVT-1.) ) &
-           *( XLBSACCR1/((BR_P2(ZLBDAR(1:IMICRO)))               ) +           &
-              XLBSACCR2/( ZLBDAR(1:IMICRO)    * ZLBDAS(1:IMICRO)    ) +           &
-              XLBSACCR3/(               (BR_P2(ZLBDAS(1:IMICRO)))) )/ZLBDAR(1:IMICRO) )
-#endif
-      ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW1(1:IMICRO,2)
-      ZRSS(1:IMICRO) = ZRSS(1:IMICRO) - ZZW1(1:IMICRO,3)
-      ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW1(1:IMICRO,2)+ZZW1(1:IMICRO,3)
-      ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW1(1:IMICRO,2)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) !
-                               ! f(L_f*(RRACCSG))
-    END WHERE
-!$acc end kernels
-!$acc end data
-    DEALLOCATE(IVEC2)
-    DEALLOCATE(IVEC1)
-    DEALLOCATE(ZVEC3)
-    DEALLOCATE(ZVEC2)
-    DEALLOCATE(ZVEC1)
-  END IF
-!$acc end data
-  DEALLOCATE(GACC)
-  DEALLOCATE(I1)
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), 4,'ACC_BU_RTH')
-  END IF
-  IF (LBUDGET_RR) THEN
-!$acc update self(ZRRS)
-    CALL BUDGET (UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),      8,'ACC_BU_RRR')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     10,'ACC_BU_RRS')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     11,'ACC_BU_RRG')
-  END IF
-!
-!*       5.3    Conversion-Melting of the aggregates
-!
-!$acc kernels default(none) present(ZZW,GWORK,ZRST,ZRSS,ZZT,ZRVT,ZPRES,ZKA,ZDV,ZLBDAS,ZCJ,ZZW1,ZRHODREF,ZRGS,XRTMIN) &
-!$acc &       present(XEX0DEPS,XEX1DEPS)
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRST(1:IMICRO)>XRTMIN(5)) .AND. (ZRSS(1:IMICRO)>0.0) .AND. (ZZT(1:IMICRO)>XTT)
-  WHERE( GWORK(1:IMICRO) )
-    ZZW(1:IMICRO) = ZRVT(1:IMICRO)*ZPRES(1:IMICRO)/((XMV/XMD)+ZRVT(1:IMICRO)) ! Vapor pressure
-    ZZW(1:IMICRO) =  ZKA(1:IMICRO)*(XTT-ZZT(1:IMICRO)) +                                 &
-               ( ZDV(1:IMICRO)*(XLVTT + ( XCPV - XCL ) * ( ZZT(1:IMICRO) - XTT )) &
-                           *(XESTT-ZZW(1:IMICRO))/(XRV*ZZT(1:IMICRO))             )
-!
-! compute RSMLT
-!
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO)  = MIN( ZRSS(1:IMICRO), XFSCVMG*MAX( 0.0,( -ZZW(1:IMICRO) *             &
-                           ( X0DEPS*       ZLBDAS(1:IMICRO)**XEX0DEPS +     &
-                             X1DEPS*ZCJ(1:IMICRO)*ZLBDAS(1:IMICRO)**XEX1DEPS ) -   &
-                                     ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-                              ( ZRHODREF(1:IMICRO)*XCL*(XTT-ZZT(1:IMICRO))) ) /    &
-                                             ( ZRHODREF(1:IMICRO)*XLMTT ) ) )
-#else
-    ZZW(1:IMICRO)  = MIN( ZRSS(1:IMICRO), XFSCVMG*MAX( 0.0,( -ZZW(1:IMICRO) *                    &
-                           ( X0DEPS*       BR_POW(ZLBDAS(1:IMICRO),XEX0DEPS) +     &
-                             X1DEPS*ZCJ(1:IMICRO)*BR_POW(ZLBDAS(1:IMICRO),XEX1DEPS) ) -   &
-                                     ( ZZW1(:,1)+ZZW1(:,4) ) *              &
-                              ( ZRHODREF(1:IMICRO)*XCL*(XTT-ZZT(1:IMICRO))) ) /           &
-                                             ( ZRHODREF(1:IMICRO)*XLMTT ) ) )
-#endif
-!
-! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT)
-! because the graupeln produced by this process are still icy!!!
-!
-    ZRSS(1:IMICRO) = ZRSS(1:IMICRO) - ZZW(1:IMICRO)
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW(1:IMICRO)
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),10,'CMEL_BU_RRS')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),11,'CMEL_BU_RRG')
-  END IF
-!
-  END SUBROUTINE RAIN_ICE_FAST_RS
-!
-!-------------------------------------------------------------------------------
-!
-!
-  SUBROUTINE RAIN_ICE_FAST_RG
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-INTEGER                          :: JL
-INTEGER,DIMENSION(:),ALLOCATABLE :: I1
-!acc declare device_resident(I1)
-!
-!-------------------------------------------------------------------------------
-  ALLOCATE(GDRY(IMICRO))
-  ALLOCATE(I1(IMICRO)) !I1 is bigger than necessary but it easier to do it now (instead of computing IGDRY before allocating I1)
-!$acc data create(GDRY,I1)
-!
-!*       6.1    rain contact freezing
-!
-!$acc kernels present(XEXICFRR,XEXRCFRI) default(none) &
-!$acc & present(ZZW1,GWORK,ZRIT,ZRRT,ZRIS,ZRRS,ZRGS,ZTHS,ZLBDAR,ZRHODREF,ZCIT,ZLSFACT,ZLVFACT,XRTMIN)
-  ZZW1(1:IMICRO,3:4) = 0.0
-  GWORK(1:IMICRO) = (ZRIT(1:IMICRO)>XRTMIN(4)) .AND. (ZRRT(1:IMICRO)>XRTMIN(3)) .AND.  &
-                             (ZRIS(1:IMICRO)>0.0) .AND. (ZRRS(1:IMICRO)>0.0)
-  WHERE( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW1(1:IMICRO,3) = MIN( ZRIS(1:IMICRO),XICFRR * ZRIT(1:IMICRO)                & ! RICFRRG
-                                    * ZLBDAR(1:IMICRO)**XEXICFRR    &
-                                    * ZRHODREF(1:IMICRO)**(-XCEXVT) )
-    ZZW1(1:IMICRO,4) = MIN( ZRRS(1:IMICRO),XRCFRI * ZCIT(1:IMICRO)                & ! RRCFRIG
-                                    * ZLBDAR(1:IMICRO)**XEXRCFRI    &
-                                    * ZRHODREF(1:IMICRO)**(-XCEXVT-1.) )
-#else
-    ZZW1(1:IMICRO,3) = MIN( ZRIS(1:IMICRO),XICFRR * ZRIT(1:IMICRO)                & ! RICFRRG
-                                    * BR_POW(ZLBDAR(1:IMICRO),XEXICFRR)    &
-                                    * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT) )
-    ZZW1(1:IMICRO,4) = MIN( ZRRS(1:IMICRO),XRCFRI * ZCIT(1:IMICRO)                & ! RRCFRIG
-                                    * BR_POW(ZLBDAR(1:IMICRO),XEXRCFRI)    &
-                                    * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT-1.) )
-#endif
-    ZRIS(1:IMICRO) = ZRIS(1:IMICRO) - ZZW1(1:IMICRO,3)
-    ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW1(1:IMICRO,4)
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW1(1:IMICRO,3)+ZZW1(1:IMICRO,4)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW1(1:IMICRO,4)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*RRCFRIG)
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:), 4,'CFRZ_BU_RTH')
-  END IF
-  IF (LBUDGET_RR) THEN
-!$acc update self(ZRRS)
-    CALL BUDGET (UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),      8,'CFRZ_BU_RRR')
-  END IF
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),      9,'CFRZ_BU_RRI')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     11,'CFRZ_BU_RRG')
-  END IF
-!
-!*       6.2    compute the Dry growth case
-!
-!$acc kernels present(XRTMIN) &
-!$acc & present(ZZW1,GWORK,ZRGT,ZRCT,ZRCS,ZRIT,ZRIS,ZLBDAG,ZRHODREF,ZZW)
-  ZZW1(:,:) = 0.0
-  GWORK(1:IMICRO) = (ZRGT(1:IMICRO)>XRTMIN(6)) .AND. ((ZRCT(1:IMICRO)>XRTMIN(2) .AND. ZRCS(1:IMICRO)>0.0))
-  WHERE( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = ZLBDAG(1:IMICRO)**(XCXG-XDG-2.0) * ZRHODREF(1:IMICRO)**(-XCEXVT)
-#else
-    ZZW(1:IMICRO) = BR_POW(ZLBDAG(1:IMICRO),XCXG-XDG-2.0) * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT)
-#endif
-    ZZW1(1:IMICRO,1) = MIN( ZRCS(1:IMICRO),XFCDRYG * ZRCT(1:IMICRO) * ZZW(1:IMICRO) )             ! RCDRYG
-  END WHERE
-  GWORK(1:IMICRO) = (ZRGT(1:IMICRO)>XRTMIN(6)) .AND. ((ZRIT(1:IMICRO)>XRTMIN(4) .AND. ZRIS(1:IMICRO)>0.0))
-  WHERE( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = ZLBDAG(1:IMICRO)**(XCXG-XDG-2.0) * ZRHODREF(1:IMICRO)**(-XCEXVT)
-    ZZW1(1:IMICRO,2) = MIN( ZRIS(1:IMICRO),XFIDRYG * EXP( XCOLEXIG*(ZZT(1:IMICRO)-XTT) ) &
-                                     * ZRIT(1:IMICRO) * ZZW(1:IMICRO) )             ! RIDRYG
-#else
-    ZZW(1:IMICRO) = BR_POW(ZLBDAG(1:IMICRO),XCXG-XDG-2.0) * BR_POW(ZRHODREF(1:IMICRO),-XCEXVT)
-    ZZW1(1:IMICRO,2) = MIN( ZRIS(1:IMICRO),XFIDRYG * BR_EXP( XCOLEXIG*(ZZT(1:IMICRO)-XTT) ) &
-                                     * ZRIT(1:IMICRO) * ZZW(1:IMICRO) )             ! RIDRYG
-#endif
-  END WHERE
-!
-!*       6.2.1  accretion of aggregates on the graupeln
-!
-  GDRY(1:IMICRO) = (ZRST(1:IMICRO)>XRTMIN(5)) .AND. (ZRGT(1:IMICRO)>XRTMIN(6)) .AND. (ZRSS(1:IMICRO)>0.0)
-!$acc end kernels
-#ifndef _OPENACC
-  IGDRY = COUNT( GDRY(1:IMICRO) )
-#else
-  CALL COUNTJV1D_DEVICE( GDRY(1:IMICRO),I1,IGDRY)
-#endif
-!
-  IF( IGDRY>0 ) THEN
-!
-!*       6.2.2  allocations
-!
-    ALLOCATE(ZVEC1(IGDRY))
-    ALLOCATE(ZVEC2(IGDRY))
-    ALLOCATE(ZVEC3(IGDRY))
-    ALLOCATE(IVEC1(IGDRY))
-    ALLOCATE(IVEC2(IGDRY))
-!$acc data create(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3)
-!
-!*       6.2.3  select the (ZLBDAG,ZLBDAS) couplet
-!
-!$acc kernels present(XKER_SDRYG,XCOLEXSG,XCXG) &
-!$acc & present(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3,GDRY,ZZW1,ZRSS,ZZW,ZZT,ZLBDAS,ZLBDAG,ZRHODREF)
-#ifndef _OPENACC
-    ZVEC1(1:IGDRY) = PACK( ZLBDAG(1:IMICRO),MASK=GDRY(1:IMICRO) )
-    ZVEC2(1:IGDRY) = PACK( ZLBDAS(1:IMICRO),MASK=GDRY(1:IMICRO) )
-#else
-    DO JL=1,IGDRY
-      ZVEC1(JL)  = ZLBDAG(I1(JL))
-      ZVEC2(JL)  = ZLBDAS(I1(JL))
-    END DO
-#endif
-!
-!*       6.2.4  find the next lower indice for the ZLBDAG and for the ZLBDAS
-!               in the geometrical set of (Lbda_g,Lbda_s) couplet use to
-!               tabulate the SDRYG-kernel
-!
-    ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
-#ifndef MNH_BITREP
-                          XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
-#else
-                          XDRYINTP1G * BR_LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
-#endif
-    IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) )
-    ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) )
-!
-    ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001,           &
-#ifndef MNH_BITREP
-                          XDRYINTP1S * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) )
-#else
-                          XDRYINTP1S * BR_LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) )
-#endif
-    IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
-    ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
-!
-!*       6.2.5  perform the bilinear interpolation of the normalized
-!               SDRYG-kernel
-!
-!$acc loop independent
-    DO JJ = 1,IGDRY
-      ZVEC3(JJ) =  (  XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                         * ZVEC1(JJ) &
-                 - (  XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                         * (ZVEC1(JJ) - 1.0)
-    END DO
-#ifndef _OPENACC
-    ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
-#else
-    ZZW(:) = 0.0
-!$acc loop independent
-    DO JL=1,IGDRY
-      ZZW(I1(JL)) = ZVEC3(JL)
-    END DO
-#endif
-!
-    WHERE( GDRY(1:IMICRO) )
-#ifndef MNH_BITREP
-      ZZW1(1:IMICRO,3) = MIN( ZRSS(1:IMICRO),XFSDRYG*ZZW(1:IMICRO)                         & ! RSDRYG
-                                      * EXP( XCOLEXSG*(ZZT(1:IMICRO)-XTT) )  &
-                    *( ZLBDAS(1:IMICRO)**(XCXS-XBS) )*( ZLBDAG(1:IMICRO)**XCXG )    &
-                    *( ZRHODREF(1:IMICRO)**(-XCEXVT-1.) )                    &
-                         *( XLBSDRYG1/( ZLBDAG(1:IMICRO)**2              ) + &
-                            XLBSDRYG2/( ZLBDAG(1:IMICRO)   * ZLBDAS(1:IMICRO)   ) + &
-                            XLBSDRYG3/(               ZLBDAS(1:IMICRO)**2) ) )
-#else
-      ZZW1(1:IMICRO,3) = MIN( ZRSS(1:IMICRO),XFSDRYG*ZZW(1:IMICRO)                         & ! RSDRYG
-                                      * BR_EXP( XCOLEXSG*(ZZT(1:IMICRO)-XTT) )  &
-                    *( BR_POW(ZLBDAS(1:IMICRO),XCXS-XBS) )*( BR_POW(ZLBDAG(1:IMICRO),XCXG) )    &
-                    *( BR_POW(ZRHODREF(1:IMICRO),-XCEXVT-1.) )                    &
-                         *( XLBSDRYG1/( BR_P2(ZLBDAG(1:IMICRO))              ) + &
-                            XLBSDRYG2/( ZLBDAG(1:IMICRO)   * ZLBDAS(1:IMICRO)   ) + &
-                            XLBSDRYG3/(               BR_P2(ZLBDAS(1:IMICRO))) ) )
-#endif
-    END WHERE
-!$acc end kernels
-!$acc end data
-    DEALLOCATE(IVEC2)
-    DEALLOCATE(IVEC1)
-    DEALLOCATE(ZVEC3)
-    DEALLOCATE(ZVEC2)
-    DEALLOCATE(ZVEC1)
-  END IF
-!
-!*       6.2.6  accretion of raindrops on the graupeln
-!
-!$acc kernels present(GDRY,XRTMIN)
-  GDRY(1:IMICRO) = (ZRRT(1:IMICRO)>XRTMIN(3)) .AND. (ZRGT(1:IMICRO)>XRTMIN(6)) .AND. (ZRRS(1:IMICRO)>0.0)
-!$acc end kernels
-#ifndef _OPENACC
-  IGDRY = COUNT( GDRY(1:IMICRO) )
-#else
-  CALL COUNTJV1D_DEVICE( GDRY(1:IMICRO),I1,IGDRY)
-#endif
-!
-  IF( IGDRY>0 ) THEN
-!
-!*       6.2.7  allocations
-!
-    ALLOCATE(ZVEC1(IGDRY))
-    ALLOCATE(ZVEC2(IGDRY))
-    ALLOCATE(ZVEC3(IGDRY))
-    ALLOCATE(IVEC1(IGDRY))
-    ALLOCATE(IVEC2(IGDRY))
-!$acc data create(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3)
-!
-!*       6.2.8  select the (ZLBDAG,ZLBDAR) couplet
-!
-!$acc kernels present(XKER_RDRYG,XCXG) &
-!$acc & present(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3,GDRY,ZZW1,ZRRS,ZZW,ZLBDAR,ZLBDAG,ZRHODREF)
-#ifndef _OPENACC
-    ZVEC1(:) = PACK( ZLBDAG(:),MASK=GDRY(:) )
-    ZVEC2(:) = PACK( ZLBDAR(:),MASK=GDRY(:) )
-#else
-    DO JL=1,IGDRY
-      ZVEC1(JL)  = ZLBDAG(I1(JL))
-      ZVEC2(JL)  = ZLBDAR(I1(JL))
-    END DO
-#endif
-!
-!*       6.2.9  find the next lower indice for the ZLBDAG and for the ZLBDAR
-!               in the geometrical set of (Lbda_g,Lbda_r) couplet use to
-!               tabulate the RDRYG-kernel
-!
-    ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
-#ifndef MNH_BITREP
-                          XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
-#else
-                          XDRYINTP1G * BR_LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
-#endif
-    IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) )
-    ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) )
-!
-    ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001,           &
-#ifndef MNH_BITREP
-                          XDRYINTP1R * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) )
-#else
-                          XDRYINTP1R * BR_LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) )
-#endif
-    IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
-    ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
-!
-!*       6.2.10 perform the bilinear interpolation of the normalized
-!               RDRYG-kernel
-!
-!$acc loop independent
-    DO JJ = 1,IGDRY
-      ZVEC3(JJ) =  (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                                  * ZVEC1(JJ) &
-                 - (  XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                    - XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                         * (ZVEC1(JJ) - 1.0)
-    END DO
-#ifndef _OPENACC
-    ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
-#else
-    ZZW(:) = 0.0
-!$acc loop independent
-    DO JL=1,IGDRY
-      ZZW(I1(JL)) = ZVEC3(JL)
-    END DO
-#endif
-!
-    WHERE( GDRY(1:IMICRO) )
-#ifndef MNH_BITREP
-      ZZW1(1:IMICRO,4) = MIN( ZRRS(1:IMICRO),XFRDRYG*ZZW(1:IMICRO)                    & ! RRDRYG
-                        *( ZLBDAR(1:IMICRO)**(-4) )*( ZLBDAG(1:IMICRO)**XCXG ) &
-                               *( ZRHODREF(1:IMICRO)**(-XCEXVT-1.) )   &
-                    *( XLBRDRYG1/( ZLBDAG(1:IMICRO)**2              ) + &
-                       XLBRDRYG2/( ZLBDAG(1:IMICRO)   * ZLBDAR(1:IMICRO)   ) + &
-                       XLBRDRYG3/(               ZLBDAR(1:IMICRO)**2) ) )
-#else
-      ZZW1(1:IMICRO,4) = MIN( ZRRS(1:IMICRO),XFRDRYG*ZZW(1:IMICRO)                    & ! RRDRYG
-                        *( BR_POW(ZLBDAR(1:IMICRO),-4.) )*( BR_POW(ZLBDAG(1:IMICRO),XCXG) ) &
-             *( BR_POW(ZRHODREF(1:IMICRO),-XCEXVT-1.) )   &
-                    *( XLBRDRYG1/( BR_P2(ZLBDAG(1:IMICRO))              ) + &
-                       XLBRDRYG2/( ZLBDAG(1:IMICRO)   * ZLBDAR(1:IMICRO)   ) + &
-                       XLBRDRYG3/(               BR_P2(ZLBDAR(1:IMICRO))) ) )
-#endif
-    END WHERE
-!$acc end kernels
-!$acc end data
-    DEALLOCATE(IVEC2)
-    DEALLOCATE(IVEC1)
-    DEALLOCATE(ZVEC3)
-    DEALLOCATE(ZVEC2)
-    DEALLOCATE(ZVEC1)
-  END IF
-!
-!$acc end data
-  DEALLOCATE(GDRY)
-  DEALLOCATE(I1)
-!
-!$acc kernels present(GWORK,ZZW,ZRDRYG,ZRWETG,ZRGT,ZZW1,ZRIS,ZRSS,ZRVT,ZZT,ZPRES,ZKA,ZDV,ZLBDAG,ZCJ,ZRHODREF,XRTMIN,XEX0DEPG,XEX1DEPG)
-  ZRDRYG(1:IMICRO) = ZZW1(1:IMICRO,1) + ZZW1(1:IMICRO,2) + ZZW1(1:IMICRO,3) + ZZW1(1:IMICRO,4)
-!
-!*       6.3    compute the Wet growth case
-!
-  ZZW(1:IMICRO) = 0.0
-  ZRWETG(1:IMICRO) = 0.0
-  WHERE( ZRGT(1:IMICRO)>XRTMIN(6) )
-#ifndef MNH_BITREP
-    ZZW1(1:IMICRO,5) = MIN( ZRIS(1:IMICRO),                                    &
-                ZZW1(1:IMICRO,2) / (XCOLIG*EXP(XCOLEXIG*(ZZT(1:IMICRO)-XTT)) ) ) ! RIWETG
-    ZZW1(1:IMICRO,6) = MIN( ZRSS(1:IMICRO),                                    &
-                ZZW1(1:IMICRO,3) / (XCOLSG*EXP(XCOLEXSG*(ZZT(1:IMICRO)-XTT)) ) ) ! RSWETG
-#else
-    ZZW1(1:IMICRO,5) = MIN( ZRIS(1:IMICRO),                                    &
-                ZZW1(1:IMICRO,2) / (XCOLIG*BR_EXP(XCOLEXIG*(ZZT(1:IMICRO)-XTT)) ) ) ! RIWETG
-    ZZW1(1:IMICRO,6) = MIN( ZRSS(1:IMICRO),                                    &
-                ZZW1(1:IMICRO,3) / (XCOLSG*BR_EXP(XCOLEXSG*(ZZT(1:IMICRO)-XTT)) ) ) ! RSWETG
-#endif
-!
-    ZZW(1:IMICRO) = ZRVT(1:IMICRO)*ZPRES(1:IMICRO)/((XMV/XMD)+ZRVT(1:IMICRO)) ! Vapor pressure
-    ZZW(1:IMICRO) =   ZKA(1:IMICRO)*(XTT-ZZT(1:IMICRO)) +                              &
-             ( ZDV(1:IMICRO)*(XLVTT + ( XCPV - XCL ) * ( ZZT(1:IMICRO) - XTT )) &
-                           *(XESTT-ZZW(1:IMICRO))/(XRV*ZZT(1:IMICRO))           )
-!
-! compute RWETG
-!
-#ifndef MNH_BITREP
-    ZRWETG(1:IMICRO)=MAX( 0.0,                                               &
-                 ( ZZW(1:IMICRO) * ( X0DEPG*       ZLBDAG(1:IMICRO)**XEX0DEPG +     &
-                              X1DEPG*ZCJ(1:IMICRO)*ZLBDAG(1:IMICRO)**XEX1DEPG ) +   &
-                 ( ZZW1(1:IMICRO,5)+ZZW1(1:IMICRO,6) ) *                            &
-                 ( ZRHODREF(1:IMICRO)*(XLMTT+(XCI-XCL)*(XTT-ZZT(1:IMICRO)))   ) ) / &
-                          ( ZRHODREF(1:IMICRO)*(XLMTT-XCL*(XTT-ZZT(1:IMICRO))) )   )
-#else
-    ZRWETG(1:IMICRO)=MAX( 0.0,                                               &
-                 ( ZZW(1:IMICRO) * ( X0DEPG*       BR_POW(ZLBDAG(1:IMICRO),XEX0DEPG) +     &
-                              X1DEPG*ZCJ(1:IMICRO)*BR_POW(ZLBDAG(1:IMICRO),XEX1DEPG) ) +   &
-                 ( ZZW1(1:IMICRO,5)+ZZW1(1:IMICRO,6) ) *                            &
-                 ( ZRHODREF(1:IMICRO)*(XLMTT+(XCI-XCL)*(XTT-ZZT(1:IMICRO)))   ) ) / &
-                          ( ZRHODREF(1:IMICRO)*(XLMTT-XCL*(XTT-ZZT(1:IMICRO))) )   )
-#endif
-  END WHERE
-!
-!*       6.4    Select Wet or Dry case
-!
-  ZZW(1:IMICRO) = 0.0
-  IF     ( KRR == 7 ) THEN
-    GWORK(1:IMICRO) = ZRGT(1:IMICRO)>XRTMIN(6) .AND. ZZT(1:IMICRO)<XTT .AND. & ! Wet
-               ZRDRYG(1:IMICRO)>=ZRWETG(1:IMICRO) .AND. ZRWETG(1:IMICRO)>0.0   ! case
-    WHERE( GWORK(1:IMICRO) )
-      ZZW(1:IMICRO) = ZRWETG(1:IMICRO) - ZZW1(1:IMICRO,5) - ZZW1(1:IMICRO,6) ! RCWETG+RRWETG
-!
-! limitation of the available rainwater mixing ratio (RRWETH < RRS !)
-!
-    ZZW1(1:IMICRO,7) = MAX( 0.0,MIN( ZZW(1:IMICRO),ZRRS(1:IMICRO)+ZZW1(1:IMICRO,1) ) )
-    ZUSW(1:IMICRO)   = ZZW1(1:IMICRO,7) / ZZW(1:IMICRO)
-    ZZW1(1:IMICRO,5) = ZZW1(1:IMICRO,5)*ZUSW(1:IMICRO)
-    ZZW1(1:IMICRO,6) = ZZW1(1:IMICRO,6)*ZUSW(1:IMICRO)
-    ZRWETG(1:IMICRO) = ZZW1(1:IMICRO,7) + ZZW1(1:IMICRO,5) + ZZW1(1:IMICRO,6)
-!
-    ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW1(1:IMICRO,1)
-    ZRIS(1:IMICRO) = ZRIS(1:IMICRO) - ZZW1(1:IMICRO,5)
-    ZRSS(1:IMICRO) = ZRSS(1:IMICRO) - ZZW1(1:IMICRO,6)
-!
-! assume a linear percent of conversion of graupel into hail
-!
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZRWETG(1:IMICRO)                     !     Wet growth
-    ZZW(1:IMICRO)  = ZRGS(1:IMICRO)*ZRDRYG(1:IMICRO)/(ZRWETG(1:IMICRO)+ZRDRYG(1:IMICRO)) !        and
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) - ZZW(1:IMICRO)                        !   partial conversion
-    ZRHS(1:IMICRO) = ZRHS(1:IMICRO) + ZZW(1:IMICRO)                        ! of the graupel into hail
-!
-    ZRRS(1:IMICRO) = MAX( 0.0,ZRRS(1:IMICRO) - ZZW1(1:IMICRO,7) + ZZW1(1:IMICRO,1) )
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW1(1:IMICRO,7)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO))
-                                                 ! f(L_f*(RCWETG+RRWETG))
-   END WHERE
-   ELSE IF( KRR == 6 ) THEN
-    GWORK(1:IMICRO) = ZRGT(1:IMICRO)>XRTMIN(6) .AND. ZZT(1:IMICRO)<XTT .AND. & ! Wet
-               ZRDRYG(1:IMICRO)>=ZRWETG(1:IMICRO) .AND. ZRWETG(1:IMICRO)>0.0   ! case
-    WHERE( GWORK(1:IMICRO) )
-    ZZW(1:IMICRO)  = ZRWETG(1:IMICRO)
-    ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW1(1:IMICRO,1)
-    ZRIS(1:IMICRO) = ZRIS(1:IMICRO) - ZZW1(1:IMICRO,5)
-    ZRSS(1:IMICRO) = ZRSS(1:IMICRO) - ZZW1(1:IMICRO,6)
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZZW(1:IMICRO)
-!
-    ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW(1:IMICRO) + ZZW1(1:IMICRO,5) + ZZW1(1:IMICRO,6) + ZZW1(1:IMICRO,1)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + (ZZW(1:IMICRO)-ZZW1(1:IMICRO,5)-ZZW1(1:IMICRO,6))*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO))
-                                                 ! f(L_f*(RCWETG+RRWETG))
-   END WHERE
- END IF
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET  (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'WETG_BU_RTH')
-  END IF
-  IF (LBUDGET_RC) THEN
-!$acc update self(ZRCS)
-    CALL BUDGET  (UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     7,'WETG_BU_RRC')
-  END IF
-  IF (LBUDGET_RR) THEN
-!$acc update self(ZRRS)
-    CALL BUDGET  (UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     8,'WETG_BU_RRR')
-  END IF
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET  (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     9,'WETG_BU_RRI')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET  (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    10,'WETG_BU_RRS')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET  (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    11,'WETG_BU_RRG')
-  END IF
-  IF ( KRR == 7 ) THEN
-    IF (LBUDGET_RH) THEN
-!$acc update self(ZRHS)
-      CALL BUDGET(UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    12,'WETG_BU_RRH')
-    END IF
-  END IF
-!
-!$acc kernels present(GWORK,ZRDRYG,ZRWETG,XRTMIN)
-  GWORK(1:IMICRO) = ZRGT(1:IMICRO)>XRTMIN(6) .AND. ZZT(1:IMICRO)<XTT .AND. &
-             ZRDRYG(1:IMICRO)<ZRWETG(1:IMICRO) .AND. ZRDRYG(1:IMICRO)>0.0  ! Dry
-  WHERE( GWORK(1:IMICRO) )
-    ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW1(1:IMICRO,1)
-    ZRIS(1:IMICRO) = ZRIS(1:IMICRO) - ZZW1(1:IMICRO,2)
-    ZRSS(1:IMICRO) = ZRSS(1:IMICRO) - ZZW1(1:IMICRO,3)
-    ZRRS(1:IMICRO) = ZRRS(1:IMICRO) - ZZW1(1:IMICRO,4)
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) + ZRDRYG(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + (ZZW1(1:IMICRO,1)+ZZW1(1:IMICRO,4))*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) !
-                      ! f(L_f*(RCDRYG+RRDRYG))
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'DRYG_BU_RTH')
-  END IF
-  IF (LBUDGET_RC) THEN
-!$acc update self(ZRCS)
-    CALL BUDGET (UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     7,'DRYG_BU_RRC')
-  END IF
-  IF (LBUDGET_RR) THEN
-!$acc update self(ZRRS)
-    CALL BUDGET (UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     8,'DRYG_BU_RRR')
-  END IF
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     9,'DRYG_BU_RRI')
-  END IF
-  IF (LBUDGET_RS) THEN
-!$acc update self(ZRSS)
-    CALL BUDGET (UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    10,'DRYG_BU_RRS')
-  END IF
-  IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-    CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    11,'DRYG_BU_RRG')
-  END IF
-!
-!      WHERE ( ZZT(:) > XTT ) ! RSWETG case only
-!        ZRSS(:) = ZRSS(:) - ZZW1(:,6)
-!        ZRGS(:) = ZRGS(:) + ZZW1(:,6)
-!      END WHERE
-!
-!*       6.5    Melting of the graupeln
-!
-!$acc kernels present(GWORK,ZZW,ZRRS,ZRGT,ZTHS,ZRGS,ZZW1,ZRHODREF,ZRVT,ZZT,ZPRES, &
-!$acc &               ZKA,ZDV,ZLBDAG,ZCJ,ZLSFACT,ZLVFACT,XRTMIN,XEX0DEPG,XEX1DEPG)
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRGT(1:IMICRO)>XRTMIN(6)) .AND. (ZRGS(1:IMICRO)>0.0) .AND. (ZZT(1:IMICRO)>XTT)
-  WHERE( GWORK(1:IMICRO) )
-    ZZW(1:IMICRO) = ZRVT(1:IMICRO)*ZPRES(1:IMICRO)/((XMV/XMD)+ZRVT(1:IMICRO)) ! Vapor pressure
-    ZZW(1:IMICRO) =  ZKA(1:IMICRO)*(XTT-ZZT(1:IMICRO)) +                                 &
-               ( ZDV(1:IMICRO)*(XLVTT + ( XCPV - XCL ) * ( ZZT(1:IMICRO) - XTT )) &
-                           *(XESTT-ZZW(1:IMICRO))/(XRV*ZZT(1:IMICRO))             )
-!
-! compute RGMLTR
-!
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO)  = MIN( ZRGS(1:IMICRO), MAX( 0.0,( -ZZW(1:IMICRO) *                     &
-                           ( X0DEPG*       ZLBDAG(1:IMICRO)**XEX0DEPG +     &
-                             X1DEPG*ZCJ(1:IMICRO)*ZLBDAG(1:IMICRO)**XEX1DEPG ) -   &
-                                     ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-                              ( ZRHODREF(1:IMICRO)*XCL*(XTT-ZZT(1:IMICRO))) ) /    &
-                                             ( ZRHODREF(1:IMICRO)*XLMTT ) ) )
-#else
-    ZZW(1:IMICRO)  = MIN( ZRGS(1:IMICRO), MAX( 0.0,( -ZZW(1:IMICRO) *                     &
-                           ( X0DEPG*       BR_POW(ZLBDAG(1:IMICRO),XEX0DEPG) +     &
-                             X1DEPG*ZCJ(1:IMICRO)*BR_POW(ZLBDAG(1:IMICRO),XEX1DEPG) ) -   &
-                                     ( ZZW1(:,1)+ZZW1(:,4) ) *       &
-                          ( ZRHODREF(1:IMICRO)*XCL*(XTT-ZZT(1:IMICRO))) ) /    &
-                                             ( ZRHODREF(1:IMICRO)*XLMTT ) ) )
-#endif
-    ZRRS(1:IMICRO) = ZRRS(1:IMICRO) + ZZW(1:IMICRO)
-    ZRGS(1:IMICRO) = ZRGS(1:IMICRO) - ZZW(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) - ZZW(1:IMICRO)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*(-RGMLTR))
-  END WHERE
-!$acc end kernels
-    IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-      CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'GMLT_BU_RTH')
-    END IF
-    IF (LBUDGET_RR) THEN
-!$acc update self(ZRRS)
-      CALL BUDGET (UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     8,'GMLT_BU_RRR')
-    END IF
-    IF (LBUDGET_RG) THEN
-!$acc update self(ZRGS)
-      CALL BUDGET (UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),    11,'GMLT_BU_RRG')
-    END IF
-!
-!
-  END SUBROUTINE RAIN_ICE_FAST_RG
-!
-!-------------------------------------------------------------------------------
-!
-!
-  SUBROUTINE RAIN_ICE_FAST_RH
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-!-------------------------------------------------------------------------------
-!
-#ifdef _OPENACC
-PRINT *,'OPENACC: RAIN_ICE_FAST_RH not yet implemented'
-CALL ABORT
-#endif
-  ALLOCATE(GHAIL(IMICRO))
-  GHAIL(:) = ZRHT(:)>XRTMIN(7)
-  IHAIL = COUNT(GHAIL(:))
-!
-  IF( IHAIL>0 ) THEN
-!
-!*       7.2    compute the Wet growth of hail
-!
-    WHERE ( GHAIL(:) )
-      ZLBDAH(:)  = XLBH*( ZRHODREF(:)*MAX( ZRHT(:),XRTMIN(7) ) )**XLBEXH
-    END WHERE
-!
-    ZZW1(:,:) = 0.0
-    WHERE( GHAIL(:) .AND. ((ZRCT(:)>XRTMIN(2) .AND. ZRCS(:)>0.0)) )
-      ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHODREF(:)**(-XCEXVT)
-      ZZW1(:,1) = MIN( ZRCS(:),XFWETH * ZRCT(:) * ZZW(:) )             ! RCWETH
-    END WHERE
-    WHERE( GHAIL(:) .AND. ((ZRIT(:)>XRTMIN(4) .AND. ZRIS(:)>0.0)) )
-      ZZW(:) = ZLBDAH(:)**(XCXH-XDH-2.0) * ZRHODREF(:)**(-XCEXVT)
-      ZZW1(:,2) = MIN( ZRIS(:),XFWETH * ZRIT(:) * ZZW(:) )             ! RIWETH
-    END WHERE
-!
-!*       7.2.1  accretion of aggregates on the hailstones
-!
-    ALLOCATE(GWET(IMICRO))
-    GWET(:) = GHAIL(:) .AND. (ZRST(:)>XRTMIN(5) .AND. ZRSS(:)>0.0)
-    IGWET = COUNT( GWET(:) )
-!
-    IF( IGWET>0 ) THEN
-!
-!*       7.2.2  allocations
-!
-      ALLOCATE(ZVEC1(IGWET))
-      ALLOCATE(ZVEC2(IGWET))
-      ALLOCATE(ZVEC3(IGWET))
-      ALLOCATE(IVEC1(IGWET))
-      ALLOCATE(IVEC2(IGWET))
-!$acc data create(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3)
-!
-!*       7.2.3  select the (ZLBDAH,ZLBDAS) couplet
-!
-      ZVEC1(:) = PACK( ZLBDAH(:),MASK=GWET(:) )
-      ZVEC2(:) = PACK( ZLBDAS(:),MASK=GWET(:) )
-!
-!*       7.2.4  find the next lower indice for the ZLBDAG and for the ZLBDAS
-!               in the geometrical set of (Lbda_h,Lbda_s) couplet use to
-!               tabulate the SWETH-kernel
-!
-      ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAH)-0.00001,           &
-#ifndef MNH_BITREP
-                            XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
-#else
-                            XWETINTP1H * BR_LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
-#endif
-      IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
-      ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
-!
-      ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAS)-0.00001,           &
-#ifndef MNH_BITREP
-                            XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) )
-#else
-                            XWETINTP1S * BR_LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) )
-#endif
-      IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-      ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
-!
-!*       7.2.5  perform the bilinear interpolation of the normalized
-!               SWETH-kernel
-!
-      DO JJ = 1,IGWET
-        ZVEC3(JJ) = (  XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                                   * ZVEC1(JJ) &
-                   - ( XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                          * (ZVEC1(JJ) - 1.0)
-      END DO
-      ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 )
-!
-      WHERE( GWET(:) )
-#ifndef MNH_BITREP
-        ZZW1(:,3) = MIN( ZRSS(:),XFSWETH*ZZW(:)                       & ! RSWETH
-                      *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAH(:)**XCXH )  &
-                         *( ZRHODREF(:)**(-XCEXVT-1.) )               &
-                         *( XLBSWETH1/( ZLBDAH(:)**2              ) + &
-                            XLBSWETH2/( ZLBDAH(:)   * ZLBDAS(:)   ) + &
-                            XLBSWETH3/(               ZLBDAS(:)**2) ) )
-#else
-        ZZW1(:,3) = MIN( ZRSS(:),XFSWETH*ZZW(:)                       & ! RSWETH
-                      *( ZLBDAS(:)**(XCXS-XBS) )*( ZLBDAH(:)**XCXH )  &
-                         *( ZRHODREF(:)**(-XCEXVT-1.) )               &
-                         *( XLBSWETH1/( BR_P2(ZLBDAH(:))              ) + &
-                            XLBSWETH2/( ZLBDAH(:)   * ZLBDAS(:)   ) + &
-                            XLBSWETH3/(               BR_P2(ZLBDAS(:))) ) )
-#endif
-      END WHERE
-!$acc end data
-      DEALLOCATE(IVEC2)
-      DEALLOCATE(IVEC1)
-      DEALLOCATE(ZVEC3)
-      DEALLOCATE(ZVEC2)
-      DEALLOCATE(ZVEC1)
-    END IF
-!
-!*       7.2.6  accretion of graupeln on the hailstones
-!
-    GWET(:) = GHAIL(:) .AND. (ZRGT(:)>XRTMIN(6) .AND. ZRGS(:)>0.0)
-    IGWET = COUNT( GWET(:) )
-!
-    IF( IGWET>0 ) THEN
-!
-!*       7.2.7  allocations
-!
-      ALLOCATE(ZVEC1(IGWET))
-      ALLOCATE(ZVEC2(IGWET))
-      ALLOCATE(ZVEC3(IGWET))
-      ALLOCATE(IVEC1(IGWET))
-      ALLOCATE(IVEC2(IGWET))
-!$acc data create(IVEC1,IVEC2,ZVEC1,ZVEC2,ZVEC3)
-!
-!*       7.2.8  select the (ZLBDAH,ZLBDAG) couplet
-!
-      ZVEC1(:) = PACK( ZLBDAH(:),MASK=GWET(:) )
-      ZVEC2(:) = PACK( ZLBDAG(:),MASK=GWET(:) )
-!
-!*       7.2.9  find the next lower indice for the ZLBDAH and for the ZLBDAG
-!               in the geometrical set of (Lbda_h,Lbda_g) couplet use to
-!               tabulate the GWETH-kernel
-!
-      ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
-#ifndef MNH_BITREP
-                            XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
-#else
-                            XWETINTP1H * BR_LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
-#endif
-      IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
-      ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
-!
-      ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
-#ifndef MNH_BITREP
-                            XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) )
-#else
-                            XWETINTP1G * BR_LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) )
-#endif
-      IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
-      ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
-!
-!*       7.2.10 perform the bilinear interpolation of the normalized
-!               GWETH-kernel
-!
-      DO JJ = 1,IGWET
-        ZVEC3(JJ) = (  XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                                   * ZVEC1(JJ) &
-                  - (  XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
-                     - XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
-                                                          * (ZVEC1(JJ) - 1.0)
-      END DO
-      ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 )
-!
-      WHERE( GWET(:) )
-#ifndef MNH_BITREP
-        ZZW1(:,5) = MAX(MIN( ZRGS(:),XFGWETH*ZZW(:)                       & ! RGWETH
-                      *( ZLBDAG(:)**(XCXG-XBG) )*( ZLBDAH(:)**XCXH )  &
-                         *( ZRHODREF(:)**(-XCEXVT-1.) )               &
-                         *( XLBGWETH1/( ZLBDAH(:)**2              ) + &
-                            XLBGWETH2/( ZLBDAH(:)   * ZLBDAG(:)   ) + &
-                            XLBGWETH3/(               ZLBDAG(:)**2) ) ),0. )
-#else
-        ZZW1(:,5) = MAX(MIN( ZRGS(:),XFGWETH*ZZW(:)                       & ! RGWETH
-                      *( ZLBDAG(:)**(XCXG-XBG) )*( ZLBDAH(:)**XCXH )  &
-                         *( ZRHODREF(:)**(-XCEXVT-1.) )               &
-                         *( XLBGWETH1/( BR_P2(ZLBDAH(:))              ) + &
-                            XLBGWETH2/( ZLBDAH(:)   * ZLBDAG(:)   ) + &
-                            XLBGWETH3/(               BR_P2(ZLBDAG(:))) ) ),0. )
-#endif
-      END WHERE
-!$acc end data
-      DEALLOCATE(IVEC2)
-      DEALLOCATE(IVEC1)
-      DEALLOCATE(ZVEC3)
-      DEALLOCATE(ZVEC2)
-      DEALLOCATE(ZVEC1)
-    END IF
-    DEALLOCATE(GWET)
-!
-!*       7.3    compute the Wet growth of hail
-!
-    ZZW(:) = 0.0
-    WHERE( GHAIL(:) .AND. ZZT(:)<XTT )
-      ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-      ZZW(:) = ZKA(:)*(XTT-ZZT(:)) +                                 &
-                ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-                            *(XESTT-ZZW(:))/(XRV*ZZT(:))             )
-!
-! compute RWETH
-!
-      ZZW(:)  =  MAX(0.,  ( ZZW(:) * ( X0DEPH*       ZLBDAH(:)**XEX0DEPH +     &
-                                X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH ) +   &
-                   ( ZZW1(:,2)+ZZW1(:,3)+ZZW1(:,5) ) *                  &
-                   ( ZRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-ZZT(:)))   ) ) / &
-                         ( ZRHODREF(:)*(XLMTT-XCL*(XTT-ZZT(:))) ) )
-!
-      ZZW1(:,6) = MAX( ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5),0.) ! RCWETH+RRWETH
-    END WHERE
-    WHERE ( GHAIL(:) .AND. ZZT(:)<XTT  .AND. ZZW1(:,6)/=0.)
-!
-! limitation of the available rainwater mixing ratio (RRWETH < RRS !)
-!
-      ZZW1(:,4) = MAX( 0.0,MIN( ZZW1(:,6),ZRRS(:)+ZZW1(:,1) ) )
-      ZUSW(:)   = ZZW1(:,4) / ZZW1(:,6)
-      ZZW1(:,2) = ZZW1(:,2)*ZUSW(:)
-      ZZW1(:,3) = ZZW1(:,3)*ZUSW(:)
-      ZZW1(:,5) = ZZW1(:,5)*ZUSW(:)
-      ZZW(:)    = ZZW1(:,4) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5)
-!
-!*       7.1.6  integrate the Wet growth of hail
-!
-      ZRCS(:) = ZRCS(:) - ZZW1(:,1)
-      ZRIS(:) = ZRIS(:) - ZZW1(:,2)
-      ZRSS(:) = ZRSS(:) - ZZW1(:,3)
-      ZRGS(:) = ZRGS(:) - ZZW1(:,5)
-      ZRHS(:) = ZRHS(:) + ZZW(:)
-      ZRRS(:) = MAX( 0.0,ZRRS(:) - ZZW1(:,4) + ZZW1(:,1) )
-      ZTHS(:) = ZTHS(:) + ZZW1(:,4)*(ZLSFACT(:)-ZLVFACT(:))
-                           ! f(L_f*(RCWETH+RRWETH))
-    END WHERE
-  END IF
-    IF (LBUDGET_TH) CALL BUDGET (                                                 &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'WETH_BU_RTH')
-    IF (LBUDGET_RC) CALL BUDGET (                                                 &
-                       UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                7,'WETH_BU_RRC')
-    IF (LBUDGET_RR) CALL BUDGET (                                                 &
-                       UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                8,'WETH_BU_RRR')
-    IF (LBUDGET_RI) CALL BUDGET (                                                 &
-                       UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                9,'WETH_BU_RRI')
-    IF (LBUDGET_RS) CALL BUDGET (                                                 &
-                       UNPACK(ZRSS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                               10,'WETH_BU_RRS')
-    IF (LBUDGET_RG) CALL BUDGET (                                                 &
-                       UNPACK(ZRGS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                               11,'WETH_BU_RRG')
-    IF (LBUDGET_RH) CALL BUDGET (                                                 &
-                       UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                               12,'WETH_BU_RRH')
-!
-!
-! ici LRECONVH et un flag pour autoriser une reconversion partielle de
-!la grele en gresil
-!
-!  IF( IHAIL>0  ) THEN
-!
-!UPG_CD
-!
-!
-!*       7.45   Conversion of the hailstones into graupel
-!
-!    XDUMMY6=0.01E-3
-!    XDUMMY7=0.001E-3
-!    WHERE( ZRHT(:)<XDUMMY6 .AND. ZRCT(:)<XDUMMY7 .AND. ZZT(:)<XTT )
-!      ZZW(:) = MIN( 1.0,MAX( 0.0,1.0-(ZRCT(:)/XDUMMY7) ) )
-!
-! assume a linear percent conversion rate of hail into graupel
-!
-!      ZZW(:)  = ZRHS(:)*ZZW(:)
-!      ZRGS(:) = ZRGS(:) + ZZW(:)                      !   partial conversion
-!      ZRHS(:) = ZRHS(:) - ZZW(:)                      ! of hail into graupel
-!
-!    END WHERE
-!  END IF
-
-
-
-
-  IF( IHAIL>0 ) THEN
-!
-!*       7.5    Melting of the hailstones
-!
-    ZZW(:) = 0.0
-    WHERE( GHAIL(:) .AND. (ZRHS(:)>0.0) .AND. (ZZT(:)>XTT) )
-      ZZW(:) = ZRVT(:)*ZPRES(:)/((XMV/XMD)+ZRVT(:)) ! Vapor pressure
-      ZZW(:) = ZKA(:)*(XTT-ZZT(:)) +                              &
-             ( ZDV(:)*(XLVTT + ( XCPV - XCL ) * ( ZZT(:) - XTT )) &
-                             *(XESTT-ZZW(:))/(XRV*ZZT(:))         )
-!
-! compute RHMLTR
-!
-      ZZW(:)  = MIN( ZRHS(:), MAX( 0.0,( -ZZW(:) *                     &
-                             ( X0DEPH*       ZLBDAH(:)**XEX0DEPH +     &
-                               X1DEPH*ZCJ(:)*ZLBDAH(:)**XEX1DEPH ) -   &
-                      ZZW1(:,6)*( ZRHODREF(:)*XCL*(XTT-ZZT(:))) ) /    &
-                                               ( ZRHODREF(:)*XLMTT ) ) )
-      ZRRS(:) = ZRRS(:) + ZZW(:)
-      ZRHS(:) = ZRHS(:) - ZZW(:)
-      ZTHS(:) = ZTHS(:) - ZZW(:)*(ZLSFACT(:)-ZLVFACT(:)) ! f(L_f*(-RHMLTR))
-    END WHERE
-END IF
-!
-DEALLOCATE(GHAIL)
-!
-IF (LBUDGET_TH) CALL BUDGET (                                                  &
-                   UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),&
-                                                                4,'HMLT_BU_RTH')
-IF (LBUDGET_RR) CALL BUDGET (                                                  &
-                       UNPACK(ZRRS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                                8,'HMLT_BU_RRR')
-IF (LBUDGET_RH) CALL BUDGET (                                                  &
-                       UNPACK(ZRHS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0), &
-                                                               12,'HMLT_BU_RRH')
-!
-END SUBROUTINE RAIN_ICE_FAST_RH
-!
-!-------------------------------------------------------------------------------
-!
-!
-  SUBROUTINE RAIN_ICE_FAST_RI
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-!-------------------------------------------------------------------------------
-!
-!*       7.1    cloud ice melting
-!
-!$acc kernels present(GWORK)
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRIS(1:IMICRO)>0.0) .AND. (ZZT(1:IMICRO)>XTT)
-  WHERE( GWORK(1:IMICRO) )
-    ZZW(1:IMICRO)  = ZRIS(1:IMICRO)
-    ZRCS(1:IMICRO) = ZRCS(1:IMICRO) + ZRIS(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) - ZRIS(1:IMICRO)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*(-RIMLTC))
-    ZRIS(1:IMICRO) = 0.0
-    ZCIT(1:IMICRO) = 0.0
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'IMLT_BU_RTH')
-  END IF
-  IF (LBUDGET_RC) THEN
-!$acc update self(ZRCS)
-    CALL BUDGET (UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     7,'IMLT_BU_RRC')
-  END IF
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     9,'IMLT_BU_RRI')
-  END IF
-!
-!*       7.2    Bergeron-Findeisen effect: RCBERI
-!
-!$acc kernels present(GWORK,ZRHODREF,XLBEXI,XRTMIN)
-  ZZW(1:IMICRO) = 0.0
-  GWORK(1:IMICRO) = (ZRCS(1:IMICRO)>0.0) .AND. (ZSSI(1:IMICRO)>0.0) .AND. &
-             (ZRIT(1:IMICRO)>XRTMIN(4)) .AND. (ZCIT(1:IMICRO)>0.0)
-  WHERE( GWORK(1:IMICRO) )
-#ifndef MNH_BITREP
-    ZZW(1:IMICRO) = MIN(1.E8,XLBI*( ZRHODREF(1:IMICRO)*ZRIT(1:IMICRO)/ZCIT(1:IMICRO) )**XLBEXI) ! Lbda_i
-    ZZW(1:IMICRO) = MIN( ZRCS(1:IMICRO),( ZSSI(1:IMICRO) / (ZRHODREF(1:IMICRO)*ZAI(1:IMICRO)) ) * ZCIT(1:IMICRO) * &
-                  ( X0DEPI/ZZW(1:IMICRO) + X2DEPI*ZCJ(1:IMICRO)*ZCJ(1:IMICRO)/ZZW(1:IMICRO)**(XDI+2.0) ) )
-#else
-    ZZW(1:IMICRO) = MIN(1.E8,XLBI*BR_POW( ZRHODREF(1:IMICRO)*ZRIT(1:IMICRO)/ZCIT(1:IMICRO),XLBEXI) ) ! Lbda_i
-    ZZW(1:IMICRO) = MIN( ZRCS(1:IMICRO),( ZSSI(1:IMICRO) / (ZRHODREF(1:IMICRO)*ZAI(1:IMICRO)) ) * ZCIT(1:IMICRO) * &
-                  ( X0DEPI/ZZW(1:IMICRO) + X2DEPI*ZCJ(1:IMICRO)*ZCJ(1:IMICRO)/BR_POW(ZZW(1:IMICRO),XDI+2.0) ) )
-#endif
-    ZRCS(1:IMICRO) = ZRCS(1:IMICRO) - ZZW(1:IMICRO)
-    ZRIS(1:IMICRO) = ZRIS(1:IMICRO) + ZZW(1:IMICRO)
-    ZTHS(1:IMICRO) = ZTHS(1:IMICRO) + ZZW(1:IMICRO)*(ZLSFACT(1:IMICRO)-ZLVFACT(1:IMICRO)) ! f(L_f*(RCBERI))
-  END WHERE
-!$acc end kernels
-  IF (LBUDGET_TH) THEN
-!$acc update self(ZTHS)
-    CALL BUDGET (UNPACK(ZTHS(:),MASK=GMICRO(:,:,:),FIELD=PTHS)*PRHODJ(:,:,:),4,'BERFI_BU_RTH')
-  END IF
-  IF (LBUDGET_RC) THEN
-!$acc update self(ZRCS)
-    CALL BUDGET (UNPACK(ZRCS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     7,'BERFI_BU_RRC')
-  END IF
-  IF (LBUDGET_RI) THEN
-!$acc update self(ZRIS)
-    CALL BUDGET (UNPACK(ZRIS(:)*ZRHODJ(:),MASK=GMICRO(:,:,:),FIELD=0.0),     9,'BERFI_BU_RRI')
-  END IF
-!
-  END SUBROUTINE RAIN_ICE_FAST_RI
-!
-SUBROUTINE RAINFR_VERT(ZPRFR, ZRR)
-
-IMPLICIT NONE
-REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: ZPRFR !Precipitation fraction
-REAL, DIMENSION(:,:,:),   INTENT(IN)    :: ZRR !Rain field
-!$acc declare present(ZPRFR,ZRR)
-!
-!-------------------------------------------------------------------------------
-INTEGER :: JI, JJ, JK
-!
-CALL MPPDB_CHECK(ZPRFR,"RAINFR_VERT beg:ZPRFR")
-CALL MPPDB_CHECK(ZRR,"RAINFR_VERT beg:ZRR")
-!
-!$acc kernels present(ZPRFR,ZRR,XRTMIN)
-DO JI = IIB,IIE
-   DO JJ = IJB, IJE
-      ZPRFR(JI,JJ,IKE)=0.
-      DO JK=IKE-KKL, IKB, -KKL
-         IF (ZRR(JI,JJ,JK) .GT. XRTMIN(3)) THEN
-            ZPRFR(JI,JJ,JK)=MAX(ZPRFR(JI,JJ,JK),ZPRFR(JI,JJ,JK+KKL))
-            IF (ZPRFR(JI,JJ,JK)==0.) THEN
-               ZPRFR(JI,JJ,JK)=1.
-            END IF
-         ELSE
-            ZPRFR(JI,JJ,JK)=0.
-         END IF
-      END DO
-   END DO
-END DO
-!$acc end kernels
-!
-CALL MPPDB_CHECK(ZPRFR,"RAINFR_VERT end:ZPRFR")
-!
-END SUBROUTINE RAINFR_VERT 
-!
-!
-!-------------------------------------------------------------------------------
-!
-  FUNCTION COUNTJV3D(LTAB,I1,I2,I3) RESULT(IC)
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-LOGICAL, DIMENSION(:,:,:), INTENT(IN)  :: LTAB     ! Mask
-INTEGER, DIMENSION(:),     INTENT(OUT) :: I1,I2,I3 ! Used to replace the COUNT and PACK
-!
-!*       0.2  declaration of local variables
-!
-INTEGER :: JI,JJ,JK,IC
-!
-!-------------------------------------------------------------------------------
-!
-IC = 0
-DO JK = 1,SIZE(LTAB,3)
-  DO JJ = 1,SIZE(LTAB,2)
-    DO JI = 1,SIZE(LTAB,1)
-      IF( LTAB(JI,JJ,JK) ) THEN
-        IC = IC +1
-        I1(IC) = JI
-        I2(IC) = JJ
-        I3(IC) = JK
-      END IF
-    END DO
-  END DO
-END DO
-!
-END FUNCTION COUNTJV3D
-!
-!-------------------------------------------------------------------------------
-!
-#ifdef _OPENACC
-  SUBROUTINE COUNTJV3D_DEVICE(LTAB,I1,I2,I3,IC)
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-LOGICAL, DIMENSION(:,:,:), INTENT(IN)  :: LTAB     ! Mask
-INTEGER, DIMENSION(:),     INTENT(OUT) :: I1,I2,I3 ! Used to replace the COUNT and PACK
-INTEGER,                   INTENT(OUT) :: IC       ! Count
-!$acc declare present(LTAB,I1,I2,I3)
-!
-!*       0.2  declaration of local variables
-!
-INTEGER :: JI,JJ,JK,IDX
-!
-!-------------------------------------------------------------------------------
-!
-!$acc kernels present(LTAB,I1,I2,I3)
-
-!To allow comparisons... (I1/I2/I3 are not fully used)
-!Can be removed in production
-! I1(:) = -999
-! I2(:) = -999
-! I3(:) = -999
-
-
-IC = 0
-!Warning: if "independent" is set, content of I1, I2 and I3 can vary between 2
-! different runs of this subroutine BUT final result should be the same
-!Comment the following line + atomic directives to have consistent values for debugging
-!Warning: huge impact on performance
-!$acc loop collapse(3) private(IDX) independent
-DO JK = 1,SIZE(LTAB,3)
-  DO JJ = 1,SIZE(LTAB,2)
-    DO JI = 1,SIZE(LTAB,1)
-      IF( LTAB(JI,JJ,JK) ) THEN
-!$acc atomic capture
-        IC = IC +1
-        IDX = IC
-!$acc end atomic
-        I1(IDX) = JI
-        I2(IDX) = JJ
-        I3(IDX) = JK
-      END IF
-    END DO
-  END DO
-END DO
-!$acc end kernels
-!
-END SUBROUTINE COUNTJV3D_DEVICE
-#endif
-!
-!-------------------------------------------------------------------------------
-!
-  FUNCTION COUNTJV2D(LTAB,I1,I2) RESULT(IC)
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-LOGICAL, DIMENSION(:,:), INTENT(IN)  :: LTAB  ! Mask
-INTEGER, DIMENSION(:),   INTENT(OUT) :: I1,I2 ! Used to replace the COUNT and PACK
-!
-!*       0.2  declaration of local variables
-!
-INTEGER :: JI,JJ,IC
-!
-!-------------------------------------------------------------------------------
-!
-IC = 0
-DO JJ = 1,SIZE(LTAB,2)
-  DO JI = 1,SIZE(LTAB,1)
-    IF( LTAB(JI,JJ) ) THEN
-      IC = IC +1
-      I1(IC) = JI
-      I2(IC) = JJ
-    END IF
-  END DO
-END DO
-!
-END FUNCTION COUNTJV2D
-!
-!-------------------------------------------------------------------------------
-!
-#ifdef _OPENACC
-  SUBROUTINE COUNTJV2D_DEVICE(LTAB,I1,I2,IC)
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-LOGICAL, DIMENSION(:,:), INTENT(IN)  :: LTAB  ! Mask
-INTEGER, DIMENSION(:),   INTENT(OUT) :: I1,I2 ! Used to replace the COUNT and PACK
-INTEGER,                 INTENT(OUT) :: IC    ! Count
-!$acc declare present(LTAB,I1,I2)
-!
-!*       0.2  declaration of local variables
-!
-INTEGER :: JI,JJ,IDX
-!
-!-------------------------------------------------------------------------------
-!
-!$acc kernels present(LTAB,I1,I2)
-IC = 0
-!Warning: if "independent" is set, content of I1 and I2 can vary between 2
-! different runs of this subroutine BUT final result should be the same
-!Comment the following line + atomic directives to have consistent values for debugging
-!Warning: huge impact on performance
-!$acc loop collapse(2) private(IDX) independent
-DO JJ = 1,SIZE(LTAB,2)
-  DO JI = 1,SIZE(LTAB,1)
-    IF( LTAB(JI,JJ) ) THEN
-!$acc atomic capture
-      IC = IC +1
-      IDX = IC
-!$acc end atomic
-      I1(IDX) = JI
-      I2(IDX) = JJ
-    END IF
-  END DO
-END DO
-!$acc end kernels
-!
-END SUBROUTINE COUNTJV2D_DEVICE
-#endif
-!
-!-------------------------------------------------------------------------------
-!
-  FUNCTION COUNTJV1D(LTAB,I1) RESULT(IC)
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-LOGICAL, DIMENSION(:), INTENT(IN)  :: LTAB ! Mask
-INTEGER, DIMENSION(:), INTENT(OUT) :: I1   ! Used to replace the COUNT and PACK
-!
-!*       0.2  declaration of local variables
-!
-INTEGER :: JI,IC
-!
-!-------------------------------------------------------------------------------
-!
-IC = 0
-DO JI = 1,SIZE(LTAB,1)
-  IF( LTAB(JI) ) THEN
-    IC = IC +1
-    I1(IC) = JI
-  END IF
-END DO
-!
-END FUNCTION COUNTJV1D
-!
-!-------------------------------------------------------------------------------
-!
-#ifdef _OPENACC
-  SUBROUTINE COUNTJV1D_DEVICE(LTAB,I1,IC)
-!
-!*      0. DECLARATIONS
-!          ------------
-!
-IMPLICIT NONE
-!
-LOGICAL, DIMENSION(:), INTENT(IN)  :: LTAB     ! Mask
-INTEGER, DIMENSION(:), INTENT(OUT) :: I1       ! Used to replace the COUNT and PACK
-INTEGER,               INTENT(OUT) :: IC       ! Count
-!$acc declare present(LTAB,I1)
-!
-!*       0.2  declaration of local variables
-!
-INTEGER :: JI,IDX
-!
-!-------------------------------------------------------------------------------
-!
-!$acc kernels present(LTAB,I1)
-IC = 0
-!Warning: if "independent" is set, content of I1 can vary between 2
-! different runs of this subroutine BUT final result should be the same
-!Comment the following line + atomic directives to have consistent values for debugging
-!Warning: huge impact on performance
-!$acc loop private(IDX) independent
-DO JI = 1,SIZE(LTAB,1)
-  IF( LTAB(JI) ) THEN
-!$acc atomic capture
-    IC = IC +1
-    IDX = IC
-!$acc end atomic
-    I1(IDX) = JI
-  END IF
-END DO
-!$acc end kernels
-!
-END SUBROUTINE COUNTJV1D_DEVICE
-#endif
+END FUNCTION COUNTJV
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/rain_ice_fast_rg.f90 b/src/MNH/rain_ice_fast_rg.f90
new file mode 100644
index 0000000000000000000000000000000000000000..1829f8ca02c85b9718e63e4499fd344ec08f09f6
--- /dev/null
+++ b/src/MNH/rain_ice_fast_rg.f90
@@ -0,0 +1,422 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_FAST_RG
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_FAST_RG
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_FAST_RG(KRR, OMICRO, PRHODREF, PRVT, PRCT, PRRT, PRIT, PRST, PRGT, PCIT, &
+                            PRHODJ, PPRES, PZT, PLBDAR, PLBDAS, PLBDAG, PLSFACT, PLVFACT, &
+                            PCJ, PKA, PDV, PRHODJ3D, PTHS3D, PRCS, PRRS, PRIS, PRSS, PRGS, PRHS, PTHS, &
+                            PUSW, PRDRYG, PRWETG)
+
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH
+use MODD_CST,            only: XCI, XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT
+use MODD_RAIN_ICE_DESCR, only: XBS, XCEXVT, XCXG, XCXS, XDG, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: NDRYLBDAG, NDRYLBDAR, NDRYLBDAS, X0DEPG, X1DEPG, XCOLEXIG, XCOLEXSG, XCOLIG, XCOLSG, XDRYINTP1G, &
+                               XDRYINTP1R, XDRYINTP1S, XDRYINTP2G, XDRYINTP2R, XDRYINTP2S, XEX0DEPG, XEX1DEPG, XEXICFRR,        &
+                               XEXRCFRI, XFCDRYG, XFIDRYG, XFRDRYG, XFSDRYG, XICFRR, XKER_RDRYG, XKER_SDRYG, XLBRDRYG1,         &
+                               XLBRDRYG2, XLBRDRYG3, XLBSDRYG1, XLBSDRYG2, XLBSDRYG3, XRCFRI
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+INTEGER,                    INTENT(IN)    :: KRR      ! Number of moist variables
+LOGICAL,  DIMENSION(:,:,:), intent(in)    :: OMICRO   ! Test where to compute all processes
+REAL,     DIMENSION(:),     intent(in)    :: PRHODREF ! RHO Dry REFerence
+REAL,     DIMENSION(:),     intent(in)    :: PRVT     ! Water vapor m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRCT     ! Cloud water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRRT     ! Rain water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRIT     ! Pristine ice m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRST     ! Snow/aggregate m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRGT     ! Graupel m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PCIT     ! Pristine ice conc. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRHODJ   ! RHO times Jacobian
+REAL,     DIMENSION(:),     intent(in)    :: PPRES    ! Pressure
+REAL,     DIMENSION(:),     intent(in)    :: PZT      ! Temperature
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAR   ! Slope parameter of the raindrop  distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAS   ! Slope parameter of the aggregate distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAG   ! Slope parameter of the graupel   distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLSFACT  ! L_s/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PLVFACT  ! L_v/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PCJ      ! Function to compute the ventilation coefficient
+REAL,     DIMENSION(:),     intent(in)    :: PKA      ! Thermal conductivity of the air
+REAL,     DIMENSION(:),     intent(in)    :: PDV      ! Diffusivity of water vapor in the air
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ3D ! Dry density * Jacobian
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PTHS3D   ! Theta source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRCS     ! Cloud water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRRS     ! Rain water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRIS     ! Pristine ice m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRSS     ! Snow/aggregate m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRGS     ! Graupel m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRHS     ! Hail m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PTHS     ! Theta source
+REAL,     DIMENSION(:),     intent(inout) :: PUSW     ! Undersaturation over water
+REAL,     DIMENSION(:),     intent(out)   :: PRDRYG   ! Dry growth rate of the graupeln
+REAL,     DIMENSION(:),     intent(out)   :: PRWETG   ! Wet growth rate of the graupeln
+!
+!*       0.2  declaration of local variables
+!
+INTEGER                              :: IGDRY
+INTEGER                              :: JJ
+INTEGER, DIMENSION(:), ALLOCATABLE   :: IVEC1, IVEC2      ! Vectors of indices for interpolations
+LOGICAL, DIMENSION(size(PRHODREF))   :: GDRY              ! Test where to compute dry growth
+REAL,    DIMENSION(size(PRHODREF))   :: ZZW               ! Work array
+REAL,    DIMENSION(:), ALLOCATABLE   :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors for interpolations
+REAL,    DIMENSION(size(PRHODREF),7) :: ZZW1              ! Work arrays
+!
+!-------------------------------------------------------------------------------
+!
+!*       6.1    rain contact freezing
+!
+  ZZW1(:,3:4) = 0.0
+  WHERE( (PRIT(:)>XRTMIN(4)) .AND. (PRRT(:)>XRTMIN(3)) .AND.  &
+                             (PRIS(:)>0.0) .AND. (PRRS(:)>0.0) )
+    ZZW1(:,3) = MIN( PRIS(:),XICFRR * PRIT(:)                & ! RICFRRG
+                                    * PLBDAR(:)**XEXICFRR    &
+                                    * PRHODREF(:)**(-XCEXVT) )
+    ZZW1(:,4) = MIN( PRRS(:),XRCFRI * PCIT(:)                & ! RRCFRIG
+                                    * PLBDAR(:)**XEXRCFRI    &
+                                    * PRHODREF(:)**(-XCEXVT-1.) )
+    PRIS(:) = PRIS(:) - ZZW1(:,3)
+    PRRS(:) = PRRS(:) - ZZW1(:,4)
+    PRGS(:) = PRGS(:) + ZZW1(:,3)+ZZW1(:,4)
+    PTHS(:) = PTHS(:) + ZZW1(:,4)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*RRCFRIG)
+  END WHERE
+  IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                              4,'CFRZ_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (                                                 &
+                     UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              8,'CFRZ_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              9,'CFRZ_BU_RRI')
+  IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                     UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             11,'CFRZ_BU_RRG')
+!
+!*       6.2    compute the Dry growth case
+!
+  ZZW1(:,:) = 0.0
+  WHERE( (PRGT(:)>XRTMIN(6)) .AND. ((PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0.0)) )
+    ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT)
+    ZZW1(:,1) = MIN( PRCS(:),XFCDRYG * PRCT(:) * ZZW(:) )             ! RCDRYG
+  END WHERE
+  WHERE( (PRGT(:)>XRTMIN(6)) .AND. ((PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0)) )
+    ZZW(:) = PLBDAG(:)**(XCXG-XDG-2.0) * PRHODREF(:)**(-XCEXVT)
+    ZZW1(:,2) = MIN( PRIS(:),XFIDRYG * EXP( XCOLEXIG*(PZT(:)-XTT) ) &
+                                     * PRIT(:) * ZZW(:) )             ! RIDRYG
+  END WHERE
+!
+!*       6.2.1  accretion of aggregates on the graupeln
+!
+  GDRY(:) = (PRST(:)>XRTMIN(5)) .AND. (PRGT(:)>XRTMIN(6)) .AND. (PRSS(:)>0.0)
+  IGDRY = COUNT( GDRY(:) )
+!
+  IF( IGDRY>0 ) THEN
+!
+!*       6.2.2  allocations
+!
+    ALLOCATE(ZVEC1(IGDRY))
+    ALLOCATE(ZVEC2(IGDRY))
+    ALLOCATE(ZVEC3(IGDRY))
+    ALLOCATE(IVEC1(IGDRY))
+    ALLOCATE(IVEC2(IGDRY))
+!
+!*       6.2.3  select the (PLBDAG,PLBDAS) couplet
+!
+    ZVEC1(:) = PACK( PLBDAG(:),MASK=GDRY(:) )
+    ZVEC2(:) = PACK( PLBDAS(:),MASK=GDRY(:) )
+!
+!*       6.2.4  find the next lower indice for the PLBDAG and for the PLBDAS
+!               in the geometrical set of (Lbda_g,Lbda_s) couplet use to
+!               tabulate the SDRYG-kernel
+!
+    ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
+                          XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
+    IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) )
+    ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) )
+!
+    ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAS)-0.00001,           &
+                          XDRYINTP1S * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2S ) )
+    IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
+    ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
+!
+!*       6.2.5  perform the bilinear interpolation of the normalized
+!               SDRYG-kernel
+!
+    DO JJ = 1,IGDRY
+      ZVEC3(JJ) =  (  XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - XKER_SDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                         * ZVEC1(JJ) &
+                 - (  XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - XKER_SDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                         * (ZVEC1(JJ) - 1.0)
+    END DO
+    ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
+!
+    WHERE( GDRY(:) )
+      ZZW1(:,3) = MIN( PRSS(:),XFSDRYG*ZZW(:)                         & ! RSDRYG
+                                      * EXP( XCOLEXSG*(PZT(:)-XTT) )  &
+                    *( PLBDAS(:)**(XCXS-XBS) )*( PLBDAG(:)**XCXG )    &
+                    *( PRHODREF(:)**(-XCEXVT-1.) )                    &
+                         *( XLBSDRYG1/( PLBDAG(:)**2              ) + &
+                            XLBSDRYG2/( PLBDAG(:)   * PLBDAS(:)   ) + &
+                            XLBSDRYG3/(               PLBDAS(:)**2) ) )
+    END WHERE
+    DEALLOCATE(IVEC2)
+    DEALLOCATE(IVEC1)
+    DEALLOCATE(ZVEC3)
+    DEALLOCATE(ZVEC2)
+    DEALLOCATE(ZVEC1)
+  END IF
+!
+!*       6.2.6  accretion of raindrops on the graupeln
+!
+  GDRY(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRGT(:)>XRTMIN(6)) .AND. (PRRS(:)>0.0)
+  IGDRY = COUNT( GDRY(:) )
+!
+  IF( IGDRY>0 ) THEN
+!
+!*       6.2.7  allocations
+!
+    ALLOCATE(ZVEC1(IGDRY))
+    ALLOCATE(ZVEC2(IGDRY))
+    ALLOCATE(ZVEC3(IGDRY))
+    ALLOCATE(IVEC1(IGDRY))
+    ALLOCATE(IVEC2(IGDRY))
+!
+!*       6.2.8  select the (PLBDAG,PLBDAR) couplet
+!
+    ZVEC1(:) = PACK( PLBDAG(:),MASK=GDRY(:) )
+    ZVEC2(:) = PACK( PLBDAR(:),MASK=GDRY(:) )
+!
+!*       6.2.9  find the next lower indice for the PLBDAG and for the PLBDAR
+!               in the geometrical set of (Lbda_g,Lbda_r) couplet use to
+!               tabulate the RDRYG-kernel
+!
+    ZVEC1(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAG)-0.00001,           &
+                          XDRYINTP1G * LOG( ZVEC1(1:IGDRY) ) + XDRYINTP2G ) )
+    IVEC1(1:IGDRY) = INT( ZVEC1(1:IGDRY) )
+    ZVEC1(1:IGDRY) = ZVEC1(1:IGDRY) - FLOAT( IVEC1(1:IGDRY) )
+!
+    ZVEC2(1:IGDRY) = MAX( 1.00001, MIN( FLOAT(NDRYLBDAR)-0.00001,           &
+                          XDRYINTP1R * LOG( ZVEC2(1:IGDRY) ) + XDRYINTP2R ) )
+    IVEC2(1:IGDRY) = INT( ZVEC2(1:IGDRY) )
+    ZVEC2(1:IGDRY) = ZVEC2(1:IGDRY) - FLOAT( IVEC2(1:IGDRY) )
+!
+!*       6.2.10 perform the bilinear interpolation of the normalized
+!               RDRYG-kernel
+!
+    DO JJ = 1,IGDRY
+      ZVEC3(JJ) =  (  XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - XKER_RDRYG(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                                  * ZVEC1(JJ) &
+                 - (  XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - XKER_RDRYG(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                         * (ZVEC1(JJ) - 1.0)
+    END DO
+    ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GDRY,FIELD=0.0 )
+!
+    WHERE( GDRY(:) )
+      ZZW1(:,4) = MIN( PRRS(:),XFRDRYG*ZZW(:)                    & ! RRDRYG
+                        *( PLBDAR(:)**(-4) )*( PLBDAG(:)**XCXG ) &
+                               *( PRHODREF(:)**(-XCEXVT-1.) )   &
+                    *( XLBRDRYG1/( PLBDAG(:)**2              ) + &
+                       XLBRDRYG2/( PLBDAG(:)   * PLBDAR(:)   ) + &
+                       XLBRDRYG3/(               PLBDAR(:)**2) ) )
+    END WHERE
+    DEALLOCATE(IVEC2)
+    DEALLOCATE(IVEC1)
+    DEALLOCATE(ZVEC3)
+    DEALLOCATE(ZVEC2)
+    DEALLOCATE(ZVEC1)
+  END IF
+!
+  PRDRYG(:) = ZZW1(:,1) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,4)
+!
+!*       6.3    compute the Wet growth case
+!
+  ZZW(:) = 0.0
+  PRWETG(:) = 0.0
+  WHERE( PRGT(:)>XRTMIN(6) )
+    ZZW1(:,5) = MIN( PRIS(:),                                    &
+                ZZW1(:,2) / (XCOLIG*EXP(XCOLEXIG*(PZT(:)-XTT)) ) ) ! RIWETG
+    ZZW1(:,6) = MIN( PRSS(:),                                    &
+                ZZW1(:,3) / (XCOLSG*EXP(XCOLEXSG*(PZT(:)-XTT)) ) ) ! RSWETG
+!
+    ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
+    ZZW(:) =   PKA(:)*(XTT-PZT(:)) +                              &
+             ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) &
+                           *(XESTT-ZZW(:))/(XRV*PZT(:))           )
+!
+! compute RWETG
+!
+    PRWETG(:)=MAX( 0.0,                                               &
+                 ( ZZW(:) * ( X0DEPG*       PLBDAG(:)**XEX0DEPG +     &
+                              X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG ) +   &
+                 ( ZZW1(:,5)+ZZW1(:,6) ) *                            &
+                 ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PZT(:)))   ) ) / &
+                            ( PRHODREF(:)*(XLMTT-XCL*(XTT-PZT(:))) )   )
+  END WHERE
+!
+!*       6.4    Select Wet or Dry case
+!
+   ZZW(:) = 0.0
+  IF     ( KRR == 7 ) THEN
+   WHERE( PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT                            &
+                                        .AND.                          & ! Wet
+                              PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ) ! case
+     ZZW(:) = PRWETG(:) - ZZW1(:,5) - ZZW1(:,6) ! RCWETG+RRWETG
+!
+! limitation of the available rainwater mixing ratio (RRWETH < RRS !)
+!
+    ZZW1(:,7) = MAX( 0.0,MIN( ZZW(:),PRRS(:)+ZZW1(:,1) ) )
+    PUSW(:)   = ZZW1(:,7) / ZZW(:)
+    ZZW1(:,5) = ZZW1(:,5)*PUSW(:)
+    ZZW1(:,6) = ZZW1(:,6)*PUSW(:)
+    PRWETG(:) = ZZW1(:,7) + ZZW1(:,5) + ZZW1(:,6)
+!
+    PRCS(:) = PRCS(:) - ZZW1(:,1)
+    PRIS(:) = PRIS(:) - ZZW1(:,5)
+    PRSS(:) = PRSS(:) - ZZW1(:,6)
+!
+! assume a linear percent of conversion of graupel into hail
+!
+    PRGS(:) = PRGS(:) + PRWETG(:)                     !     Wet growth
+    ZZW(:)  = PRGS(:)*PRDRYG(:)/(PRWETG(:)+PRDRYG(:)) !        and
+    PRGS(:) = PRGS(:) - ZZW(:)                        !   partial conversion
+    PRHS(:) = PRHS(:) + ZZW(:)                        ! of the graupel into hail
+!
+    PRRS(:) = MAX( 0.0,PRRS(:) - ZZW1(:,7) + ZZW1(:,1) )
+    PTHS(:) = PTHS(:) + ZZW1(:,7)*(PLSFACT(:)-PLVFACT(:))
+                                                 ! f(L_f*(RCWETG+RRWETG))
+   END WHERE
+   ELSE IF( KRR == 6 ) THEN
+     WHERE( PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT                            &
+                                        .AND.                          & ! Wet
+                              PRDRYG(:)>=PRWETG(:) .AND. PRWETG(:)>0.0 ) ! case
+    ZZW(:)  = PRWETG(:)
+    PRCS(:) = PRCS(:) - ZZW1(:,1)
+    PRIS(:) = PRIS(:) - ZZW1(:,5)
+    PRSS(:) = PRSS(:) - ZZW1(:,6)
+    PRGS(:) = PRGS(:) + ZZW(:)
+!
+    PRRS(:) = PRRS(:) - ZZW(:) + ZZW1(:,5) + ZZW1(:,6) + ZZW1(:,1)
+    PTHS(:) = PTHS(:) + (ZZW(:)-ZZW1(:,5)-ZZW1(:,6))*(PLSFACT(:)-PLVFACT(:))
+                                                 ! f(L_f*(RCWETG+RRWETG))
+   END WHERE
+ END IF
+  IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                              4,'WETG_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (                                                 &
+                     UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              7,'WETG_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (                                                 &
+                     UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              8,'WETG_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              9,'WETG_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (                                                 &
+                     UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             10,'WETG_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                     UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             11,'WETG_BU_RRG')
+  IF ( KRR == 7 ) THEN
+    IF (LBUDGET_RH) CALL BUDGET (                                                 &
+                     UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             12,'WETG_BU_RRH')
+  END IF
+
+!
+  WHERE( PRGT(:)>XRTMIN(6) .AND. PZT(:)<XTT                            &
+                                        .AND.                          &
+                               PRDRYG(:)<PRWETG(:) .AND. PRDRYG(:)>0.0 ) ! Dry
+    PRCS(:) = PRCS(:) - ZZW1(:,1)
+    PRIS(:) = PRIS(:) - ZZW1(:,2)
+    PRSS(:) = PRSS(:) - ZZW1(:,3)
+    PRRS(:) = PRRS(:) - ZZW1(:,4)
+    PRGS(:) = PRGS(:) + PRDRYG(:)
+    PTHS(:) = PTHS(:) + (ZZW1(:,1)+ZZW1(:,4))*(PLSFACT(:)-PLVFACT(:)) !
+                      ! f(L_f*(RCDRYG+RRDRYG))
+  END WHERE
+  IF (LBUDGET_TH) CALL BUDGET (                                                    &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                              4,'DRYG_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (                                                 &
+                     UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              7,'DRYG_BU_RRC')
+  IF (LBUDGET_RR) CALL BUDGET (                                                 &
+                     UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              8,'DRYG_BU_RRR')
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              9,'DRYG_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (                                                 &
+                     UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             10,'DRYG_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                     UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             11,'DRYG_BU_RRG')
+!
+!      WHERE ( PZT(:) > XTT ) ! RSWETG case only
+!        PRSS(:) = PRSS(:) - ZZW1(:,6)
+!        PRGS(:) = PRGS(:) + ZZW1(:,6)
+!      END WHERE
+!
+!*       6.5    Melting of the graupeln
+!
+  ZZW(:) = 0.0
+   WHERE( (PRGT(:)>XRTMIN(6)) .AND. (PRGS(:)>0.0) .AND. (PZT(:)>XTT) )
+    ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
+    ZZW(:) =  PKA(:)*(XTT-PZT(:)) +                                 &
+               ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) &
+                           *(XESTT-ZZW(:))/(XRV*PZT(:))             )
+!
+! compute RGMLTR
+!
+    ZZW(:)  = MIN( PRGS(:), MAX( 0.0,( -ZZW(:) *                     &
+                           ( X0DEPG*       PLBDAG(:)**XEX0DEPG +     &
+                             X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG ) -   &
+                                     ( ZZW1(:,1)+ZZW1(:,4) ) *       &
+                              ( PRHODREF(:)*XCL*(XTT-PZT(:))) ) /    &
+                                             ( PRHODREF(:)*XLMTT ) ) )
+    PRRS(:) = PRRS(:) + ZZW(:)
+    PRGS(:) = PRGS(:) - ZZW(:)
+    PTHS(:) = PTHS(:) - ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(-RGMLTR))
+  END WHERE
+    IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                   UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                                4,'GMLT_BU_RTH')
+    IF (LBUDGET_RR) CALL BUDGET (                                                 &
+                       UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                                8,'GMLT_BU_RRR')
+    IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                       UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                               11,'GMLT_BU_RRG')
+!
+END SUBROUTINE RAIN_ICE_FAST_RG
+
+END MODULE MODE_RAIN_ICE_FAST_RG
diff --git a/src/MNH/rain_ice_fast_rh.f90 b/src/MNH/rain_ice_fast_rh.f90
new file mode 100644
index 0000000000000000000000000000000000000000..4691df965e77b57177a460b66366482acaa7a7da
--- /dev/null
+++ b/src/MNH/rain_ice_fast_rh.f90
@@ -0,0 +1,356 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_FAST_RH
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_FAST_RH
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_FAST_RH(OMICRO, PRHODREF, PRVT, PRCT, PRIT, PRST, PRGT, PRHT, PRHODJ, PPRES, &
+                            PZT, PLBDAS, PLBDAG, PLBDAH, PLSFACT, PLVFACT, PCJ, PKA, PDV, PRHODJ3D, PTHS3D, &
+                            PRCS, PRRS, PRIS, PRSS, PRGS, PRHS, PTHS, PUSW)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH
+use MODD_CST,            only: XCI, XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT
+use MODD_RAIN_ICE_DESCR, only: XBG, XBS, XCEXVT, XCXG, XCXH, XCXS, XDH, XLBEXH, XLBH, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: NWETLBDAG, NWETLBDAH, NWETLBDAS, X0DEPH, X1DEPH, &
+                               XEX0DEPH, XEX1DEPH, XFGWETH, XFSWETH, XFWETH, XKER_GWETH, XKER_SWETH, &
+                               XLBGWETH1, XLBGWETH2, XLBGWETH3, XLBSWETH1, XLBSWETH2, XLBSWETH3,     &
+                               XWETINTP1G, XWETINTP1H, XWETINTP1S, XWETINTP2G, XWETINTP2H, XWETINTP2S
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+LOGICAL,  DIMENSION(:,:,:), intent(in)    :: OMICRO   ! Test where to compute all processes
+REAL,     DIMENSION(:),     intent(in)    :: PRHODREF ! RHO Dry REFerence
+REAL,     DIMENSION(:),     intent(in)    :: PRVT     ! Water vapor m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRCT     ! Cloud water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRIT     ! Pristine ice m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRST     ! Snow/aggregate m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRGT     ! Graupel m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRHT    ! Hail m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRHODJ   ! RHO times Jacobian
+REAL,     DIMENSION(:),     intent(in)    :: PPRES    ! Pressure
+REAL,     DIMENSION(:),     intent(in)    :: PZT      ! Temperature
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAS   ! Slope parameter of the aggregate distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAG   ! Slope parameter of the graupel   distribution
+REAL,     DIMENSION(:),     intent(inout) :: PLBDAH   ! Slope parameter of the hail      distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLSFACT  ! L_s/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PLVFACT  ! L_v/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PCJ      ! Function to compute the ventilation coefficient
+REAL,     DIMENSION(:),     intent(in)    :: PKA      ! Thermal conductivity of the air
+REAL,     DIMENSION(:),     intent(in)    :: PDV      ! Diffusivity of water vapor in the air
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ3D ! Dry density * Jacobian
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PTHS3D   ! Theta source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRCS     ! Cloud water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRRS     ! Rain water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRIS     ! Pristine ice m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRSS     ! Snow/aggregate m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRGS     ! Graupel m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRHS     ! Hail m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PTHS     ! Theta source
+REAL,     DIMENSION(:),     intent(inout) :: PUSW     ! Undersaturation over water
+!
+!*       0.2  declaration of local variables
+!
+INTEGER                              :: IHAIL, IGWET
+INTEGER                              :: JJ
+INTEGER, DIMENSION(:), ALLOCATABLE   :: IVEC1, IVEC2      ! Vectors of indices for interpolations
+LOGICAL, DIMENSION(size(PRHODREF))   :: GWET              ! Test where to compute wet growth
+LOGICAL, DIMENSION(size(PRHODREF))   :: GHAIL             ! Test where to compute hail growth
+REAL,    DIMENSION(:), ALLOCATABLE   :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors for interpolations
+REAL,    DIMENSION(size(PRHODREF))   :: ZZW               ! Work array
+REAL,    DIMENSION(size(PRHODREF),6) :: ZZW1              ! Work arrays
+!
+!-------------------------------------------------------------------------------
+!
+  GHAIL(:) = PRHT(:)>XRTMIN(7)
+  IHAIL = COUNT(GHAIL(:))
+!
+  IF( IHAIL>0 ) THEN
+!
+!*       7.2    compute the Wet growth of hail
+!
+    WHERE ( GHAIL(:) )
+      PLBDAH(:)  = XLBH*( PRHODREF(:)*MAX( PRHT(:),XRTMIN(7) ) )**XLBEXH
+    END WHERE
+!
+    ZZW1(:,:) = 0.0
+    WHERE( GHAIL(:) .AND. ((PRCT(:)>XRTMIN(2) .AND. PRCS(:)>0.0)) )
+      ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT)
+      ZZW1(:,1) = MIN( PRCS(:),XFWETH * PRCT(:) * ZZW(:) )             ! RCWETH
+    END WHERE
+    WHERE( GHAIL(:) .AND. ((PRIT(:)>XRTMIN(4) .AND. PRIS(:)>0.0)) )
+      ZZW(:) = PLBDAH(:)**(XCXH-XDH-2.0) * PRHODREF(:)**(-XCEXVT)
+      ZZW1(:,2) = MIN( PRIS(:),XFWETH * PRIT(:) * ZZW(:) )             ! RIWETH
+    END WHERE
+!
+!*       7.2.1  accretion of aggregates on the hailstones
+!
+    GWET(:) = GHAIL(:) .AND. (PRST(:)>XRTMIN(5) .AND. PRSS(:)>0.0)
+    IGWET = COUNT( GWET(:) )
+!
+    IF( IGWET>0 ) THEN
+!
+!*       7.2.2  allocations
+!
+      ALLOCATE(ZVEC1(IGWET))
+      ALLOCATE(ZVEC2(IGWET))
+      ALLOCATE(ZVEC3(IGWET))
+      ALLOCATE(IVEC1(IGWET))
+      ALLOCATE(IVEC2(IGWET))
+!
+!*       7.2.3  select the (PLBDAH,PLBDAS) couplet
+!
+      ZVEC1(:) = PACK( PLBDAH(:),MASK=GWET(:) )
+      ZVEC2(:) = PACK( PLBDAS(:),MASK=GWET(:) )
+!
+!*       7.2.4  find the next lower indice for the PLBDAG and for the PLBDAS
+!               in the geometrical set of (Lbda_h,Lbda_s) couplet use to
+!               tabulate the SWETH-kernel
+!
+      ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAH)-0.00001,           &
+                            XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
+      IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
+      ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
+!
+      ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAS)-0.00001,           &
+                            XWETINTP1S * LOG( ZVEC2(1:IGWET) ) + XWETINTP2S ) )
+      IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
+      ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
+!
+!*       7.2.5  perform the bilinear interpolation of the normalized
+!               SWETH-kernel
+!
+      DO JJ = 1,IGWET
+        ZVEC3(JJ) = (  XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                     - XKER_SWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                                   * ZVEC1(JJ) &
+                   - ( XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                     - XKER_SWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                          * (ZVEC1(JJ) - 1.0)
+      END DO
+      ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 )
+!
+      WHERE( GWET(:) )
+        ZZW1(:,3) = MIN( PRSS(:),XFSWETH*ZZW(:)                       & ! RSWETH
+                      *( PLBDAS(:)**(XCXS-XBS) )*( PLBDAH(:)**XCXH )  &
+                         *( PRHODREF(:)**(-XCEXVT-1.) )               &
+                         *( XLBSWETH1/( PLBDAH(:)**2              ) + &
+                            XLBSWETH2/( PLBDAH(:)   * PLBDAS(:)   ) + &
+                            XLBSWETH3/(               PLBDAS(:)**2) ) )
+      END WHERE
+      DEALLOCATE(IVEC2)
+      DEALLOCATE(IVEC1)
+      DEALLOCATE(ZVEC3)
+      DEALLOCATE(ZVEC2)
+      DEALLOCATE(ZVEC1)
+    END IF
+!
+!*       7.2.6  accretion of graupeln on the hailstones
+!
+    GWET(:) = GHAIL(:) .AND. (PRGT(:)>XRTMIN(6) .AND. PRGS(:)>0.0)
+    IGWET = COUNT( GWET(:) )
+!
+    IF( IGWET>0 ) THEN
+!
+!*       7.2.7  allocations
+!
+      ALLOCATE(ZVEC1(IGWET))
+      ALLOCATE(ZVEC2(IGWET))
+      ALLOCATE(ZVEC3(IGWET))
+      ALLOCATE(IVEC1(IGWET))
+      ALLOCATE(IVEC2(IGWET))
+!
+!*       7.2.8  select the (PLBDAH,PLBDAG) couplet
+!
+      ZVEC1(:) = PACK( PLBDAH(:),MASK=GWET(:) )
+      ZVEC2(:) = PACK( PLBDAG(:),MASK=GWET(:) )
+!
+!*       7.2.9  find the next lower indice for the PLBDAH and for the PLBDAG
+!               in the geometrical set of (Lbda_h,Lbda_g) couplet use to
+!               tabulate the GWETH-kernel
+!
+      ZVEC1(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
+                            XWETINTP1H * LOG( ZVEC1(1:IGWET) ) + XWETINTP2H ) )
+      IVEC1(1:IGWET) = INT( ZVEC1(1:IGWET) )
+      ZVEC1(1:IGWET) = ZVEC1(1:IGWET) - FLOAT( IVEC1(1:IGWET) )
+!
+      ZVEC2(1:IGWET) = MAX( 1.00001, MIN( FLOAT(NWETLBDAG)-0.00001,           &
+                            XWETINTP1G * LOG( ZVEC2(1:IGWET) ) + XWETINTP2G ) )
+      IVEC2(1:IGWET) = INT( ZVEC2(1:IGWET) )
+      ZVEC2(1:IGWET) = ZVEC2(1:IGWET) - FLOAT( IVEC2(1:IGWET) )
+!
+!*       7.2.10 perform the bilinear interpolation of the normalized
+!               GWETH-kernel
+!
+      DO JJ = 1,IGWET
+        ZVEC3(JJ) = (  XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                     - XKER_GWETH(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                                   * ZVEC1(JJ) &
+                  - (  XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                     - XKER_GWETH(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                          * (ZVEC1(JJ) - 1.0)
+      END DO
+      ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GWET,FIELD=0.0 )
+!
+      WHERE( GWET(:) )
+        ZZW1(:,5) = MAX(MIN( PRGS(:),XFGWETH*ZZW(:)                       & ! RGWETH
+                      *( PLBDAG(:)**(XCXG-XBG) )*( PLBDAH(:)**XCXH )  &
+                         *( PRHODREF(:)**(-XCEXVT-1.) )               &
+                         *( XLBGWETH1/( PLBDAH(:)**2              ) + &
+                            XLBGWETH2/( PLBDAH(:)   * PLBDAG(:)   ) + &
+                            XLBGWETH3/(               PLBDAG(:)**2) ) ),0. )
+      END WHERE
+      DEALLOCATE(IVEC2)
+      DEALLOCATE(IVEC1)
+      DEALLOCATE(ZVEC3)
+      DEALLOCATE(ZVEC2)
+      DEALLOCATE(ZVEC1)
+    END IF
+!
+!*       7.3    compute the Wet growth of hail
+!
+    ZZW(:) = 0.0
+    WHERE( GHAIL(:) .AND. PZT(:)<XTT )
+      ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
+      ZZW(:) = PKA(:)*(XTT-PZT(:)) +                                 &
+                ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) &
+                            *(XESTT-ZZW(:))/(XRV*PZT(:))             )
+!
+! compute RWETH
+!
+      ZZW(:)  =  MAX(0.,  ( ZZW(:) * ( X0DEPH*       PLBDAH(:)**XEX0DEPH +     &
+                                X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH ) +   &
+                   ( ZZW1(:,2)+ZZW1(:,3)+ZZW1(:,5) ) *                  &
+                   ( PRHODREF(:)*(XLMTT+(XCI-XCL)*(XTT-PZT(:)))   ) ) / &
+                         ( PRHODREF(:)*(XLMTT-XCL*(XTT-PZT(:))) ) )
+!
+      ZZW1(:,6) = MAX( ZZW(:) - ZZW1(:,2) - ZZW1(:,3) - ZZW1(:,5),0.) ! RCWETH+RRWETH
+    END WHERE
+    WHERE ( GHAIL(:) .AND. PZT(:)<XTT  .AND. ZZW1(:,6)/=0.)
+!
+! limitation of the available rainwater mixing ratio (RRWETH < RRS !)
+!
+      ZZW1(:,4) = MAX( 0.0,MIN( ZZW1(:,6),PRRS(:)+ZZW1(:,1) ) )
+      PUSW(:)   = ZZW1(:,4) / ZZW1(:,6)
+      ZZW1(:,2) = ZZW1(:,2)*PUSW(:)
+      ZZW1(:,3) = ZZW1(:,3)*PUSW(:)
+      ZZW1(:,5) = ZZW1(:,5)*PUSW(:)
+      ZZW(:)    = ZZW1(:,4) + ZZW1(:,2) + ZZW1(:,3) + ZZW1(:,5)
+!
+!*       7.1.6  integrate the Wet growth of hail
+!
+      PRCS(:) = PRCS(:) - ZZW1(:,1)
+      PRIS(:) = PRIS(:) - ZZW1(:,2)
+      PRSS(:) = PRSS(:) - ZZW1(:,3)
+      PRGS(:) = PRGS(:) - ZZW1(:,5)
+      PRHS(:) = PRHS(:) + ZZW(:)
+      PRRS(:) = MAX( 0.0,PRRS(:) - ZZW1(:,4) + ZZW1(:,1) )
+      PTHS(:) = PTHS(:) + ZZW1(:,4)*(PLSFACT(:)-PLVFACT(:))
+                           ! f(L_f*(RCWETH+RRWETH))
+    END WHERE
+  END IF
+    IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                   UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),&
+                                                                4,'WETH_BU_RTH')
+    IF (LBUDGET_RC) CALL BUDGET (                                                 &
+                       UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                                7,'WETH_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (                                                 &
+                       UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                                8,'WETH_BU_RRR')
+    IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                       UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                                9,'WETH_BU_RRI')
+    IF (LBUDGET_RS) CALL BUDGET (                                                 &
+                       UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                               10,'WETH_BU_RRS')
+    IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                       UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                               11,'WETH_BU_RRG')
+    IF (LBUDGET_RH) CALL BUDGET (                                                 &
+                       UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                               12,'WETH_BU_RRH')
+!
+!
+! ici LRECONVH et un flag pour autoriser une reconversion partielle de
+!la grele en gresil
+!
+!  IF( IHAIL>0  ) THEN
+!
+!UPG_CD
+!
+!
+!*       7.45   Conversion of the hailstones into graupel
+!
+!    XDUMMY6=0.01E-3
+!    XDUMMY7=0.001E-3
+!    WHERE( PRHT(:)<XDUMMY6 .AND. PRCT(:)<XDUMMY7 .AND. PZT(:)<XTT )
+!      ZZW(:) = MIN( 1.0,MAX( 0.0,1.0-(PRCT(:)/XDUMMY7) ) )
+!
+! assume a linear percent conversion rate of hail into graupel
+!
+!      ZZW(:)  = PRHS(:)*ZZW(:)
+!      PRGS(:) = PRGS(:) + ZZW(:)                      !   partial conversion
+!      PRHS(:) = PRHS(:) - ZZW(:)                      ! of hail into graupel
+!
+!    END WHERE
+!  END IF
+
+
+
+
+  IF( IHAIL>0 ) THEN
+!
+!*       7.5    Melting of the hailstones
+!
+    ZZW(:) = 0.0
+    WHERE( GHAIL(:) .AND. (PRHS(:)>0.0) .AND. (PZT(:)>XTT) )
+      ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
+      ZZW(:) = PKA(:)*(XTT-PZT(:)) +                              &
+             ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) &
+                             *(XESTT-ZZW(:))/(XRV*PZT(:))         )
+!
+! compute RHMLTR
+!
+      ZZW(:)  = MIN( PRHS(:), MAX( 0.0,( -ZZW(:) *                     &
+                             ( X0DEPH*       PLBDAH(:)**XEX0DEPH +     &
+                               X1DEPH*PCJ(:)*PLBDAH(:)**XEX1DEPH ) -   &
+                      ZZW1(:,6)*( PRHODREF(:)*XCL*(XTT-PZT(:))) ) /    &
+                                               ( PRHODREF(:)*XLMTT ) ) )
+      PRRS(:) = PRRS(:) + ZZW(:)
+      PRHS(:) = PRHS(:) - ZZW(:)
+      PTHS(:) = PTHS(:) - ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(-RHMLTR))
+    END WHERE
+  END IF
+
+    IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                   UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),&
+                                                                4,'HMLT_BU_RTH')
+    IF (LBUDGET_RR) CALL BUDGET (                                                 &
+                       UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                                8,'HMLT_BU_RRR')
+    IF (LBUDGET_RH) CALL BUDGET (                                                 &
+                       UNPACK(PRHS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0), &
+                                                               12,'HMLT_BU_RRH')
+!
+END SUBROUTINE RAIN_ICE_FAST_RH
+
+END MODULE MODE_RAIN_ICE_FAST_RH
diff --git a/src/MNH/rain_ice_fast_ri.f90 b/src/MNH/rain_ice_fast_ri.f90
new file mode 100644
index 0000000000000000000000000000000000000000..2ed51c7ffa059e697affd4a4bce0a4bebb3f32a6
--- /dev/null
+++ b/src/MNH/rain_ice_fast_ri.f90
@@ -0,0 +1,102 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_FAST_RI
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_FAST_RI
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_FAST_RI(OMICRO, PRHODREF, PRIT, PRHODJ, PZT, PSSI, PLSFACT, PLVFACT, &
+                            PAI, PCJ, PRHODJ3D, PTHS3D, PCIT, PRCS, PRIS, PTHS)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RI, LBUDGET_TH
+use MODD_CST,            only: XTT
+use MODD_RAIN_ICE_DESCR, only: XDI, XLBEXI, XLBI, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: X0DEPI, X2DEPI
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+LOGICAL,  DIMENSION(:,:,:), intent(in)    :: OMICRO   ! Test where to compute all processes
+REAL,     DIMENSION(:),     intent(in)    :: PRHODREF ! RHO Dry REFerence
+REAL,     DIMENSION(:),     intent(in)    :: PRIT     ! Pristine ice m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRHODJ   ! RHO times Jacobian
+REAL,     DIMENSION(:),     intent(in)    :: PZT      ! Temperature
+REAL,     DIMENSION(:),     intent(in)    :: PSSI     ! Supersaturation over ice
+REAL,     DIMENSION(:),     intent(in)    :: PLSFACT  ! L_s/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PLVFACT  ! L_v/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PAI      ! Thermodynamical function
+REAL,     DIMENSION(:),     intent(in)    :: PCJ      ! Function to compute the ventilation coefficient
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ3D ! Dry density * Jacobian
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PTHS3D   ! Theta source
+REAL,     DIMENSION(:),     intent(inout) :: PCIT     ! Pristine ice conc. at t
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRCS     ! Cloud water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRIS     ! Pristine ice m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PTHS     ! Theta source
+!
+!*       0.2  declaration of local variables
+!
+REAL, DIMENSION(size(PRHODREF)) :: ZZW  ! Work array
+!-------------------------------------------------------------------------------
+!
+!*       7.1    cloud ice melting
+!
+  ZZW(:) = 0.0
+  WHERE( (PRIS(:)>0.0) .AND. (PZT(:)>XTT) )
+    ZZW(:)  = PRIS(:)
+    PRCS(:) = PRCS(:) + PRIS(:)
+    PTHS(:) = PTHS(:) - PRIS(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(-RIMLTC))
+    PRIS(:) = 0.0
+    PCIT(:) = 0.0
+  END WHERE
+  IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                              4,'IMLT_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (                                                 &
+                     UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              7,'IMLT_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              9,'IMLT_BU_RRI')
+!
+!*       7.2    Bergeron-Findeisen effect: RCBERI
+!
+  ZZW(:) = 0.0
+  WHERE( (PRCS(:)>0.0) .AND. (PSSI(:)>0.0) .AND. &
+         (PRIT(:)>XRTMIN(4)) .AND. (PCIT(:)>0.0)       )
+    ZZW(:) = MIN(1.E8,XLBI*( PRHODREF(:)*PRIT(:)/PCIT(:) )**XLBEXI) ! Lbda_i
+    ZZW(:) = MIN( PRCS(:),( PSSI(:) / (PRHODREF(:)*PAI(:)) ) * PCIT(:) * &
+                  ( X0DEPI/ZZW(:) + X2DEPI*PCJ(:)*PCJ(:)/ZZW(:)**(XDI+2.0) ) )
+    PRCS(:) = PRCS(:) - ZZW(:)
+    PRIS(:) = PRIS(:) + ZZW(:)
+    PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCBERI))
+  END WHERE
+  IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                             4,'BERFI_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (                                                 &
+                     UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             7,'BERFI_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             9,'BERFI_BU_RRI')
+!
+END SUBROUTINE RAIN_ICE_FAST_RI
+
+END MODULE MODE_RAIN_ICE_FAST_RI
diff --git a/src/MNH/rain_ice_fast_rs.f90 b/src/MNH/rain_ice_fast_rs.f90
new file mode 100644
index 0000000000000000000000000000000000000000..3a3749cfa3fe24c176ba0b45fedb7dac4a851fe4
--- /dev/null
+++ b/src/MNH/rain_ice_fast_rs.f90
@@ -0,0 +1,328 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_FAST_RS
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_FAST_RS
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_FAST_RS(PTSTEP, OMICRO, PRHODREF, PRVT, PRCT, PRRT, PRST, PRHODJ, PPRES, PZT, &
+                            PLBDAR, PLBDAS, PLSFACT, PLVFACT, PCJ, PKA, PDV, PRHODJ3D, PTHS3D, &
+                            PRCS, PRRS, PRSS, PRGS, PTHS)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RR, LBUDGET_RS, LBUDGET_TH
+use MODD_CST,            only: XCL, XCPV, XESTT, XLMTT, XLVTT, XMD, XMV, XRV, XTT
+use MODD_RAIN_ICE_DESCR, only: XBS, XCEXVT, XCXS, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: NACCLBDAR, NACCLBDAS, NGAMINC, X0DEPS, X1DEPS, XACCINTP1R, XACCINTP1S, XACCINTP2R, XACCINTP2S, &
+                               XCRIMSG, XCRIMSS, XEX0DEPS, XEX1DEPS, XEXCRIMSG, XEXCRIMSS, XEXSRIMCG, XFRACCSS,               &
+                               XFSACCRG, XFSCVMG, XGAMINC_RIM1, XGAMINC_RIM1, XGAMINC_RIM2, XKER_RACCS,                       &
+                               XKER_RACCSS, XKER_SACCRG, XLBRACCS1, XLBRACCS2, XLBRACCS3, XLBSACCR1, XLBSACCR2, XLBSACCR3,    &
+                               XRIMINTP1, XRIMINTP2, XSRIMCG
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+REAL,                       intent(in)    :: PTSTEP   ! Double Time step
+                                                      ! (single if cold start)
+LOGICAL,  DIMENSION(:,:,:), intent(in)    :: OMICRO   ! Test where to compute all processes
+REAL,     DIMENSION(:),     intent(in)    :: PRHODREF ! RHO Dry REFerence
+REAL,     DIMENSION(:),     intent(in)    :: PRVT     ! Water vapor m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRCT     ! Cloud water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRRT     ! Rain water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRST     ! Snow/aggregate m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRHODJ   ! RHO times Jacobian
+REAL,     DIMENSION(:),     intent(in)    :: PPRES    ! Pressure
+REAL,     DIMENSION(:),     intent(in)    :: PZT      ! Temperature
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAR   ! Slope parameter of the raindrop  distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAS   ! Slope parameter of the aggregate distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLSFACT  ! L_s/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PLVFACT  ! L_v/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PCJ      ! Function to compute the ventilation coefficient
+REAL,     DIMENSION(:),     intent(in)    :: PKA      ! Thermal conductivity of the air
+REAL,     DIMENSION(:),     intent(in)    :: PDV      ! Diffusivity of water vapor in the air
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ3D ! Dry density * Jacobian
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PTHS3D   ! Theta source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRCS     ! Cloud water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRRS     ! Rain water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRSS     ! Snow/aggregate m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRGS     ! Graupel m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PTHS     ! Theta source
+!
+!*       0.2  declaration of local variables
+!
+INTEGER                              :: IGRIM, IGACC
+INTEGER                              :: JJ
+INTEGER, DIMENSION(:), ALLOCATABLE   :: IVEC1, IVEC2      ! Vectors of indices for interpolations
+LOGICAL, DIMENSION(size(PRHODREF))   :: GRIM              ! Test where to compute riming
+LOGICAL, DIMENSION(size(PRHODREF))   :: GACC              ! Test where to compute accretion
+REAL,    DIMENSION(size(PRHODREF))   :: ZZW               ! Work array
+REAL,    DIMENSION(:), ALLOCATABLE   :: ZVEC1,ZVEC2,ZVEC3 ! Work vectors for interpolations
+REAL,    DIMENSION(size(PRHODREF),4) :: ZZW1              ! Work arrays
+!-------------------------------------------------------------------------------
+!
+!*       5.1    cloud droplet riming of the aggregates
+!
+  ZZW1(:,:) = 0.0
+!
+! GRIM(:) = (PRCT(:)>0.0) .AND. (PRST(:)>0.0) .AND.            &
+  GRIM(:) = (PRCT(:)>XRTMIN(2)) .AND. (PRST(:)>XRTMIN(5)) .AND.            &
+                                (PRCS(:)>0.0) .AND. (PZT(:)<XTT)
+  IGRIM = COUNT( GRIM(:) )
+!
+  IF( IGRIM>0 ) THEN
+!
+!        5.1.0  allocations
+!
+    ALLOCATE(ZVEC1(IGRIM))
+    ALLOCATE(ZVEC2(IGRIM))
+    ALLOCATE(IVEC2(IGRIM))
+!
+!        5.1.1  select the PLBDAS
+!
+    ZVEC1(:) = PACK( PLBDAS(:),MASK=GRIM(:) )
+!
+!        5.1.2  find the next lower indice for the PLBDAS in the geometrical
+!               set of Lbda_s used to tabulate some moments of the incomplete
+!               gamma function
+!
+    ZVEC2(1:IGRIM) = MAX( 1.00001, MIN( FLOAT(NGAMINC)-0.00001,           &
+                          XRIMINTP1 * LOG( ZVEC1(1:IGRIM) ) + XRIMINTP2 ) )
+    IVEC2(1:IGRIM) = INT( ZVEC2(1:IGRIM) )
+    ZVEC2(1:IGRIM) = ZVEC2(1:IGRIM) - FLOAT( IVEC2(1:IGRIM) )
+!
+!        5.1.3  perform the linear interpolation of the normalized
+!               "2+XDS"-moment of the incomplete gamma function
+!
+    ZVEC1(1:IGRIM) =   XGAMINC_RIM1( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
+                     - XGAMINC_RIM1( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+    ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 )
+!
+!        5.1.4  riming of the small sized aggregates
+!
+    WHERE ( GRIM(:) )
+      ZZW1(:,1) = MIN( PRCS(:),                                &
+                     XCRIMSS * ZZW(:) * PRCT(:)                & ! RCRIMSS
+                                      *   PLBDAS(:)**XEXCRIMSS &
+                                      * PRHODREF(:)**(-XCEXVT) )
+      PRCS(:) = PRCS(:) - ZZW1(:,1)
+      PRSS(:) = PRSS(:) + ZZW1(:,1)
+      PTHS(:) = PTHS(:) + ZZW1(:,1)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCRIMSS))
+    END WHERE
+!
+!        5.1.5  perform the linear interpolation of the normalized
+!               "XBS"-moment of the incomplete gamma function
+!
+    ZVEC1(1:IGRIM) =  XGAMINC_RIM2( IVEC2(1:IGRIM)+1 )* ZVEC2(1:IGRIM)      &
+                    - XGAMINC_RIM2( IVEC2(1:IGRIM)   )*(ZVEC2(1:IGRIM) - 1.0)
+    ZZW(:) = UNPACK( VECTOR=ZVEC1(:),MASK=GRIM,FIELD=0.0 )
+!
+!        5.1.6  riming-conversion of the large sized aggregates into graupeln
+!
+!
+    WHERE ( GRIM(:) .AND. (PRSS(:)>0.0) )
+      ZZW1(:,2) = MIN( PRCS(:),                     &
+                   XCRIMSG * PRCT(:)                & ! RCRIMSG
+                           *  PLBDAS(:)**XEXCRIMSG  &
+                           * PRHODREF(:)**(-XCEXVT) &
+                           - ZZW1(:,1)              )
+      ZZW1(:,3) = MIN( PRSS(:),                         &
+                       XSRIMCG * PLBDAS(:)**XEXSRIMCG   & ! RSRIMCG
+                               * (1.0 - ZZW(:) )/(PTSTEP*PRHODREF(:)) )
+      PRCS(:) = PRCS(:) - ZZW1(:,2)
+      PRSS(:) = PRSS(:) - ZZW1(:,3)
+      PRGS(:) = PRGS(:) + ZZW1(:,2)+ZZW1(:,3)
+      PTHS(:) = PTHS(:) + ZZW1(:,2)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCRIMSG))
+    END WHERE
+    DEALLOCATE(IVEC2)
+    DEALLOCATE(ZVEC2)
+    DEALLOCATE(ZVEC1)
+  END IF
+  IF (LBUDGET_TH) CALL BUDGET (                                               &
+               UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                             4,'RIM_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (                                               &
+                   UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             7,'RIM_BU_RRC')
+  IF (LBUDGET_RS) CALL BUDGET (                                               &
+                   UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                            10,'RIM_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (                                               &
+                   UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                            11,'RIM_BU_RRG')
+!
+!*       5.2    rain accretion onto the aggregates
+!
+  ZZW1(:,2:3) = 0.0
+   GACC(:) = (PRRT(:)>XRTMIN(3)) .AND. (PRST(:)>XRTMIN(5)) .AND.            &
+                            (PRRS(:)>0.0) .AND. (PZT(:)<XTT)
+  IGACC = COUNT( GACC(:) )
+!
+  IF( IGACC>0 ) THEN
+!
+!        5.2.0  allocations
+!
+    ALLOCATE(ZVEC1(IGACC))
+    ALLOCATE(ZVEC2(IGACC))
+    ALLOCATE(ZVEC3(IGACC))
+    ALLOCATE(IVEC1(IGACC))
+    ALLOCATE(IVEC2(IGACC))
+!
+!        5.2.1  select the (PLBDAS,PLBDAR) couplet
+!
+    ZVEC1(:) = PACK( PLBDAS(:),MASK=GACC(:) )
+    ZVEC2(:) = PACK( PLBDAR(:),MASK=GACC(:) )
+!
+!        5.2.2  find the next lower indice for the PLBDAS and for the PLBDAR
+!               in the geometrical set of (Lbda_s,Lbda_r) couplet use to
+!               tabulate the RACCSS-kernel
+!
+    ZVEC1(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAS)-0.00001,           &
+                          XACCINTP1S * LOG( ZVEC1(1:IGACC) ) + XACCINTP2S ) )
+    IVEC1(1:IGACC) = INT( ZVEC1(1:IGACC) )
+    ZVEC1(1:IGACC) = ZVEC1(1:IGACC) - FLOAT( IVEC1(1:IGACC) )
+!
+    ZVEC2(1:IGACC) = MAX( 1.00001, MIN( FLOAT(NACCLBDAR)-0.00001,           &
+                          XACCINTP1R * LOG( ZVEC2(1:IGACC) ) + XACCINTP2R ) )
+    IVEC2(1:IGACC) = INT( ZVEC2(1:IGACC) )
+    ZVEC2(1:IGACC) = ZVEC2(1:IGACC) - FLOAT( IVEC2(1:IGACC) )
+!
+!        5.2.3  perform the bilinear interpolation of the normalized
+!               RACCSS-kernel
+!
+    DO JJ = 1,IGACC
+      ZVEC3(JJ) =  (  XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - XKER_RACCSS(IVEC1(JJ)+1,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                          * ZVEC1(JJ) &
+                 - (  XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)+1)* ZVEC2(JJ)          &
+                    - XKER_RACCSS(IVEC1(JJ)  ,IVEC2(JJ)  )*(ZVEC2(JJ) - 1.0) ) &
+                                                          * (ZVEC1(JJ) - 1.0)
+    END DO
+    ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 )
+!
+!        5.2.4  raindrop accretion on the small sized aggregates
+!
+    WHERE ( GACC(:) )
+      ZZW1(:,2) =                                            & !! coef of RRACCS
+              XFRACCSS*( PLBDAS(:)**XCXS )*( PRHODREF(:)**(-XCEXVT-1.) ) &
+         *( XLBRACCS1/((PLBDAS(:)**2)               ) +                  &
+            XLBRACCS2/( PLBDAS(:)    * PLBDAR(:)    ) +                  &
+            XLBRACCS3/(               (PLBDAR(:)**2)) )/PLBDAR(:)**4
+      ZZW1(:,4) = MIN( PRRS(:),ZZW1(:,2)*ZZW(:) )           ! RRACCSS
+      PRRS(:) = PRRS(:) - ZZW1(:,4)
+      PRSS(:) = PRSS(:) + ZZW1(:,4)
+      PTHS(:) = PTHS(:) + ZZW1(:,4)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RRACCSS))
+    END WHERE
+!
+!        5.2.4b perform the bilinear interpolation of the normalized
+!               RACCS-kernel
+!
+    DO JJ = 1,IGACC
+      ZVEC3(JJ) =  (   XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
+                    -  XKER_RACCS(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
+                                                                   * ZVEC2(JJ) &
+                 - (   XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
+                    -  XKER_RACCS(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
+                                                           * (ZVEC2(JJ) - 1.0)
+    END DO
+    ZZW1(:,2) = ZZW1(:,2)*UNPACK( VECTOR=ZVEC3(:),MASK=GACC(:),FIELD=0.0 )
+                                                                       !! RRACCS!
+!        5.2.5  perform the bilinear interpolation of the normalized
+!               SACCRG-kernel
+!
+    DO JJ = 1,IGACC
+      ZVEC3(JJ) =  (  XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)+1)* ZVEC1(JJ)          &
+                    - XKER_SACCRG(IVEC2(JJ)+1,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
+                                                          * ZVEC2(JJ) &
+                 - (  XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)+1)* ZVEC1(JJ)          &
+                    - XKER_SACCRG(IVEC2(JJ)  ,IVEC1(JJ)  )*(ZVEC1(JJ) - 1.0) ) &
+                                                          * (ZVEC2(JJ) - 1.0)
+    END DO
+    ZZW(:) = UNPACK( VECTOR=ZVEC3(:),MASK=GACC,FIELD=0.0 )
+!
+!        5.2.6  raindrop accretion-conversion of the large sized aggregates
+!               into graupeln
+!
+    WHERE ( GACC(:) .AND. (PRSS(:)>0.0) )
+      ZZW1(:,2) = MAX( MIN( PRRS(:),ZZW1(:,2)-ZZW1(:,4) ),0.0 )       ! RRACCSG
+    END WHERE
+    WHERE ( GACC(:) .AND. (PRSS(:)>0.0) .AND. ZZW1(:,2)>0.0 )
+      ZZW1(:,3) = MIN( PRSS(:),XFSACCRG*ZZW(:)*                     & ! RSACCRG
+            ( PLBDAS(:)**(XCXS-XBS) )*( PRHODREF(:)**(-XCEXVT-1.) ) &
+           *( XLBSACCR1/((PLBDAR(:)**2)               ) +           &
+              XLBSACCR2/( PLBDAR(:)    * PLBDAS(:)    ) +           &
+              XLBSACCR3/(               (PLBDAS(:)**2)) )/PLBDAR(:) )
+      PRRS(:) = PRRS(:) - ZZW1(:,2)
+      PRSS(:) = PRSS(:) - ZZW1(:,3)
+      PRGS(:) = PRGS(:) + ZZW1(:,2)+ZZW1(:,3)
+      PTHS(:) = PTHS(:) + ZZW1(:,2)*(PLSFACT(:)-PLVFACT(:)) !
+                               ! f(L_f*(RRACCSG))
+    END WHERE
+    DEALLOCATE(IVEC2)
+    DEALLOCATE(IVEC1)
+    DEALLOCATE(ZVEC3)
+    DEALLOCATE(ZVEC2)
+    DEALLOCATE(ZVEC1)
+  END IF
+  IF (LBUDGET_TH) CALL BUDGET (                                               &
+               UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                             4,'ACC_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (                                               &
+                   UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             8,'ACC_BU_RRR')
+  IF (LBUDGET_RS) CALL BUDGET (                                               &
+                   UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                            10,'ACC_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (                                               &
+                   UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                            11,'ACC_BU_RRG')
+!
+!*       5.3    Conversion-Melting of the aggregates
+!
+  ZZW(:) = 0.0
+  WHERE( (PRST(:)>XRTMIN(5)) .AND. (PRSS(:)>0.0) .AND. (PZT(:)>XTT) )
+    ZZW(:) = PRVT(:)*PPRES(:)/((XMV/XMD)+PRVT(:)) ! Vapor pressure
+    ZZW(:) =  PKA(:)*(XTT-PZT(:)) +                                 &
+               ( PDV(:)*(XLVTT + ( XCPV - XCL ) * ( PZT(:) - XTT )) &
+                           *(XESTT-ZZW(:))/(XRV*PZT(:))             )
+!
+! compute RSMLT
+!
+    ZZW(:)  = MIN( PRSS(:), XFSCVMG*MAX( 0.0,( -ZZW(:) *             &
+                           ( X0DEPS*       PLBDAS(:)**XEX0DEPS +     &
+                             X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS ) -   &
+                                     ( ZZW1(:,1)+ZZW1(:,4) ) *       &
+                              ( PRHODREF(:)*XCL*(XTT-PZT(:))) ) /    &
+                                             ( PRHODREF(:)*XLMTT ) ) )
+!
+! note that RSCVMG = RSMLT*XFSCVMG but no heat is exchanged (at the rate RSMLT)
+! because the graupeln produced by this process are still icy!!!
+!
+    PRSS(:) = PRSS(:) - ZZW(:)
+    PRGS(:) = PRGS(:) + ZZW(:)
+  END WHERE
+  IF (LBUDGET_RS) CALL BUDGET (                                                 &
+                     UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             10,'CMEL_BU_RRS')
+  IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                     UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             11,'CMEL_BU_RRG')
+!
+END SUBROUTINE RAIN_ICE_FAST_RS
+
+END MODULE MODE_RAIN_ICE_FAST_RS
diff --git a/src/MNH/rain_ice_nucleation.f90 b/src/MNH/rain_ice_nucleation.f90
new file mode 100644
index 0000000000000000000000000000000000000000..4fd4b262504c3b33897ad10e7b435f1a1f02fce0
--- /dev/null
+++ b/src/MNH/rain_ice_nucleation.f90
@@ -0,0 +1,198 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_NUCLEATION
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC RAIN_ICE_NUCLEATION
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_NUCLEATION(KIB, KIE, KJB, KJE, KKTB, KKTE,KRR,PTSTEP,&
+     PTHT,PPABST,PRHODJ,PRHODREF,PRVT,PRCT,PRRT,PRIT,PRST,PRGT,&
+     PCIT,PEXNREF,PTHS,PRVS,PRIS,PT,PRHT)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RI, LBUDGET_RV, LBUDGET_TH
+use MODD_CST,            only: XALPI, XALPW, XBETAI, XBETAW, XCI, XCL, XCPD, XCPV, XGAMI, XGAMW, &
+                               XLSTT, XMD, XMV, XP00, XRD, XTT
+use MODD_RAIN_ICE_PARAM, only: XALPHA1, XALPHA2, XBETA1, XBETA2, XMNU0, XNU10, XNU20
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+INTEGER, INTENT(IN) :: KIB, KIE, KJB, KJE, KKTB, KKTE
+INTEGER,                          INTENT(IN)    :: KRR     ! Number of moist variable
+REAL,                             INTENT(IN)    :: PTSTEP  ! Double Time step
+                                                           ! (single if cold start)
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PTHT    ! Theta at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PPABST  ! absolute pressure at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRHODREF! Reference density
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRVT    ! Water vapor m.r. at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
+REAL, DIMENSION(:,:,:),           INTENT(INOUT) :: PCIT    ! Pristine ice n.c. at t
+REAL, DIMENSION(:,:,:),           INTENT(IN)    :: PEXNREF ! Reference Exner function
+REAL, DIMENSION(:,:,:),           INTENT(INOUT) :: PTHS    ! Theta source
+REAL, DIMENSION(:,:,:),           INTENT(INOUT) :: PRVS    ! Water vapor m.r. source
+REAL, DIMENSION(:,:,:),           INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:,:,:),           INTENT(OUT)   :: PT      ! Temperature
+REAL, DIMENSION(:,:,:), OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+!
+!*       0.2  declaration of local variables
+!
+INTEGER                            :: INEGT
+INTEGER                            :: JL       ! and PACK intrinsics
+INTEGER, DIMENSION(SIZE(PEXNREF))  :: I1,I2,I3 ! Used to replace the COUNT
+LOGICAL, DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3)) &
+                                   :: GNEGT    ! Test where to compute the HEN process
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRVT     ! Water vapor m.r. at t
+REAL,    DIMENSION(:), ALLOCATABLE :: ZCIT     ! Pristine ice conc. at t
+REAL,    DIMENSION(:), ALLOCATABLE :: ZZT,   & ! Temperature
+                                      ZPRES, & ! Pressure
+                                      ZZW,   & ! Work array
+                                      ZUSW,  & ! Undersaturation over water
+                                      ZSSI     ! Supersaturation over ice
+REAL,    DIMENSION(SIZE(PEXNREF,1),SIZE(PEXNREF,2),SIZE(PEXNREF,3))   &
+                                    :: ZW      ! work array
+!
+!-------------------------------------------------------------------------------
+!
+!
+!  compute the temperature and the pressure
+!
+PT(:,:,:) = PTHT(:,:,:) * ( PPABST(:,:,:) / XP00 ) ** (XRD/XCPD)
+!
+!  optimization by looking for locations where
+!  the temperature is negative only !!!
+!
+GNEGT(:,:,:) = .FALSE.
+GNEGT(KIB:KIE,KJB:KJE,KKTB:KKTE) = PT(KIB:KIE,KJB:KJE,KKTB:KKTE)<XTT
+INEGT = COUNTJV( GNEGT(:,:,:),I1(:),I2(:),I3(:))
+IF( INEGT >= 1 ) THEN
+  ALLOCATE(ZRVT(INEGT)) ;
+  ALLOCATE(ZCIT(INEGT)) ;
+  ALLOCATE(ZZT(INEGT))  ;
+  ALLOCATE(ZPRES(INEGT));
+  DO JL=1,INEGT
+    ZRVT(JL) = PRVT(I1(JL),I2(JL),I3(JL))
+    ZCIT(JL) = PCIT(I1(JL),I2(JL),I3(JL))
+    ZZT(JL) = PT(I1(JL),I2(JL),I3(JL))
+    ZPRES(JL) = PPABST(I1(JL),I2(JL),I3(JL))
+  ENDDO
+  ALLOCATE(ZZW(INEGT))
+  ALLOCATE(ZUSW(INEGT))
+  ALLOCATE(ZSSI(INEGT))
+    ZZW(:) = EXP( XALPI - XBETAI/ZZT(:) - XGAMI*ALOG(ZZT(:) ) )           ! es_i
+    ZZW(:) = MIN(ZPRES(:)/2., ZZW(:))             ! safety limitation
+    ZSSI(:) = ZRVT(:)*( ZPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) ) - 1.0
+                                                      ! Supersaturation over ice
+    ZUSW(:) = EXP( XALPW - XBETAW/ZZT(:) - XGAMW*ALOG(ZZT(:) ) )          ! es_w
+    ZUSW(:) = MIN(ZPRES(:)/2.,ZUSW(:))            ! safety limitation
+    ZUSW(:) = ( ZUSW(:)/ZZW(:) )*( (ZPRES(:)-ZZW(:))/(ZPRES(:)-ZUSW(:)) ) - 1.0
+                             ! Supersaturation of saturated water vapor over ice
+!
+!*       3.1     compute the heterogeneous nucleation source: RVHENI
+!
+!*       3.1.1   compute the cloud ice concentration
+!
+  ZZW(:) = 0.0
+  ZSSI(:) = MIN( ZSSI(:), ZUSW(:) ) ! limitation of SSi according to SSw=0
+  WHERE( (ZZT(:)<XTT-5.0) .AND. (ZSSI(:)>0.0) )
+    ZZW(:) = XNU20 * EXP( XALPHA2*ZSSI(:)-XBETA2 )
+  END WHERE
+  WHERE( (ZZT(:)<=XTT-2.0) .AND. (ZZT(:)>=XTT-5.0) .AND. (ZSSI(:)>0.0) )
+    ZZW(:) = MAX( XNU20 * EXP( -XBETA2 ),XNU10 * EXP( -XBETA1*(ZZT(:)-XTT) ) * &
+                               ( ZSSI(:)/ZUSW(:) )**XALPHA1 )
+  END WHERE
+  ZZW(:) = ZZW(:) - ZCIT(:)
+  IF( MAXVAL(ZZW(:)) > 0.0 ) THEN
+!
+!*       3.1.2   update the r_i and r_v mixing ratios
+!
+    ZZW(:) = MIN( ZZW(:),50.E3 ) ! limitation provisoire a 50 l^-1
+    ZW(:,:,:) = UNPACK( ZZW(:),MASK=GNEGT(:,:,:),FIELD=0.0 )
+    ZW(:,:,:) = MAX( ZW(:,:,:) ,0.0 ) *XMNU0/(PRHODREF(:,:,:)*PTSTEP)
+    PRIS(:,:,:) = PRIS(:,:,:) + ZW(:,:,:)
+    PRVS(:,:,:) = PRVS(:,:,:) - ZW(:,:,:)
+    IF ( KRR == 7 ) THEN
+        PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(XLSTT+(XCPV-XCI)*(PT(:,:,:)-XTT))   &
+                 /( (XCPD + XCPV*PRVT(:,:,:) + XCL*(PRCT(:,:,:)+PRRT(:,:,:))   &
+       + XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)+PRHT(:,:,:)))*PEXNREF(:,:,:) )
+      ELSE IF( KRR == 6 ) THEN
+        PTHS(:,:,:) = PTHS(:,:,:) + ZW(:,:,:)*(XLSTT+(XCPV-XCI)*(PT(:,:,:)-XTT))   &
+                 /( (XCPD + XCPV*PRVT(:,:,:) + XCL*(PRCT(:,:,:)+PRRT(:,:,:))   &
+                   + XCI*(PRIT(:,:,:)+PRST(:,:,:)+PRGT(:,:,:)))*PEXNREF(:,:,:) )
+    END IF
+                                 ! f(L_s*(RVHENI))
+    ZZW(:) = MAX( ZZW(:)+ZCIT(:),ZCIT(:) )
+    PCIT(:,:,:) = MAX( UNPACK( ZZW(:),MASK=GNEGT(:,:,:),FIELD=0.0 ) , &
+                       PCIT(:,:,:) )
+  END IF
+  DEALLOCATE(ZSSI)
+  DEALLOCATE(ZUSW)
+  DEALLOCATE(ZZW)
+  DEALLOCATE(ZPRES)
+  DEALLOCATE(ZZT)
+  DEALLOCATE(ZCIT)
+  DEALLOCATE(ZRVT)
+END IF
+!
+!*       3.1.3   budget storage
+!
+IF (LBUDGET_TH) CALL BUDGET (PTHS(:,:,:)*PRHODJ(:,:,:),4,'HENU_BU_RTH')
+IF (LBUDGET_RV) CALL BUDGET (PRVS(:,:,:)*PRHODJ(:,:,:),6,'HENU_BU_RRV')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9,'HENU_BU_RRI')
+!
+END SUBROUTINE RAIN_ICE_NUCLEATION
+
+FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+IMPLICIT NONE
+!
+!*       0.2  declaration of local variables
+!
+!
+LOGICAL, DIMENSION(:,:,:) :: LTAB ! Mask
+INTEGER, DIMENSION(:) :: I1,I2,I3 ! Used to replace the COUNT and PACK
+INTEGER :: JI,JJ,JK,IC
+!
+!-------------------------------------------------------------------------------
+!
+IC = 0
+DO JK = 1,SIZE(LTAB,3)
+  DO JJ = 1,SIZE(LTAB,2)
+    DO JI = 1,SIZE(LTAB,1)
+      IF( LTAB(JI,JJ,JK) ) THEN
+        IC = IC +1
+        I1(IC) = JI
+        I2(IC) = JJ
+        I3(IC) = JK
+      END IF
+    END DO
+  END DO
+END DO
+!
+END FUNCTION COUNTJV
+
+END MODULE MODE_RAIN_ICE_NUCLEATION
diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90
index b244dfab4da85e1eac273171e8f573ecd6007b30..87e9f33768962e7b866b422c3748f25280d90d73 100644
--- a/src/MNH/rain_ice_red.f90
+++ b/src/MNH/rain_ice_red.f90
@@ -13,7 +13,7 @@ INTERFACE
                             PTHT, PRVT, PRCT, PRRT, PRIT, PRST,                   &
                             PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,       &
                             PINPRC,PINPRR, PEVAP3D,           &
-                            PINPRS, PINPRG, PSIGS, PINDEP, PSEA, PTOWN,                   &
+                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
                             PRHT, PRHS, PINPRH, PFPR                              )
 !
 !
@@ -68,6 +68,7 @@ REAL, DIMENSION(:,:), INTENT(OUT)       :: PINPRR! Rain instant precip
 REAL, DIMENSION(:,:,:), INTENT(OUT)     :: PEVAP3D! Rain evap profile
 REAL, DIMENSION(:,:), INTENT(OUT)       :: PINPRS! Snow instant precip
 REAL, DIMENSION(:,:), INTENT(OUT)       :: PINPRG! Graupel instant precip
+REAL, DIMENSION(:,:,:), INTENT(OUT)     :: PRAINFR! Rain fraction            
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town 
 REAL, DIMENSION(:,:,:), OPTIONAL,  INTENT(IN)    :: PRHT    ! Hail m.r. at t
@@ -85,7 +86,7 @@ END MODULE MODI_RAIN_ICE_RED
                             PTHT, PRVT, PRCT, PRRT, PRIT, PRST,                   &
                             PRGT, PTHS, PRVS, PRCS, PRRS, PRIS, PRSS, PRGS,       &
                             PINPRC,PINPRR, PEVAP3D,           &
-                            PINPRS, PINPRG, PSIGS, PINDEP, PSEA, PTOWN,                   &
+                            PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,  &
                             PRHT, PRHS, PINPRH, PFPR                              )
 !     ######################################################################
 !
@@ -236,6 +237,8 @@ END MODULE MODI_RAIN_ICE_RED
 !!      J.Escobar : 10/2017 : for real*4 , limit exp() in RAIN_ICE_SLOW with XMNH_HUGE_12_LOG
 !!      (C. Abiven, Y. Léauté, V. Seigner, S. Riette) Phasing of Turner rain subgrid param
 !!      (S. Riette) Source code split into several files
+!!                  02/2019 C.Lac add rain fraction as an output field
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !*       0.    DECLARATIONS
 !              ------------
@@ -255,7 +258,6 @@ USE MODI_ICE4_SEDIMENTATION_STAT
 USE MODI_ICE4_SEDIMENTATION_SPLIT
 USE MODI_ICE4_TENDENCIES
 !
-USE MODE_FMWRIT
 USE MODE_ll
 USE MODE_MPPDB
 USE MODE_MSG
@@ -314,6 +316,7 @@ REAL, DIMENSION(:,:), INTENT(OUT)       :: PINPRR! Rain instant precip
 REAL, DIMENSION(:,:,:), INTENT(OUT)     :: PEVAP3D! Rain evap profile
 REAL, DIMENSION(:,:), INTENT(OUT)       :: PINPRS! Snow instant precip
 REAL, DIMENSION(:,:), INTENT(OUT)       :: PINPRG! Graupel instant precip
+REAL, DIMENSION(:,:,:), INTENT(OUT)     :: PRAINFR! Rain fraction
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA ! Sea Mask
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN! Fraction that is town 
 REAL, DIMENSION(:,:,:), OPTIONAL,  INTENT(IN)    :: PRHT    ! Hail m.r. at t
@@ -324,7 +327,7 @@ REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)  :: PFPR ! upper-air precipitati
 !$acc declare present(OSEDIC,HSEDIM,HSUBG_AUCV_RC,OWARM,KKA,KKU,KKL,PTSTEP,KRR)
 !$acc declare present(ODMICRO,PEXN,PDZZ,PRHODJ,PRHODREF,PEXNREF,PPABST,PCIT,PCLDFR,PTHT,PRVT, &
 !$acc &               PRCT,PRRT,PRIT,PRST,PRGT,PSIGS,PTHS,PRVS,PRCS,PRRS,PRIS,PRSS,PRGS,      &
-!$acc &               PINPRC,PINDEP,PINPRR,PEVAP3D,PINPRS,PINPRG)                    &
+!$acc &               PINPRC,PINDEP,PINPRR,PEVAP3D,PINPRS,PINPRG,PRAINFR)                     &
 !$acc &       present(PSEA,PTOWN,PRHT,PRHS,PINPRH,PFPR)
 !
 !*       0.2   Declarations of local variables :
@@ -359,11 +362,10 @@ REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: &
 REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZZ_LVFACT, ZZ_LSFACT, ZLSFACT3D
 !
 !Diagnostics
-REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZRAINFR
 REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2)) :: ZINPRI ! Pristine ice instant precip
 !
 !$acc declare create(ZW,ZT,ZZ_RVHENI_MR,ZZ_RVHENI,ZZ_LVFACT,ZZ_LSFACT,ZLSFACT3D, &
-!$acc &              ZRAINFR,ZINPRI)
+!$acc &              ZINPRI)
 !
 !Packed variables
 REAL, DIMENSION(COUNT(ODMICRO)) :: ZRVT,     & ! Water vapor m.r. at t
@@ -711,7 +713,7 @@ IF(.NOT. LSEDIM_AFTER) THEN
                              &PRIS, PRSS, PRGS, &
                              &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS)
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_RED','no sedimentation scheme for HSEDIM='//TRIM(HSEDIM))
+    call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE_RED', 'no sedimentation scheme for HSEDIM='//HSEDIM )
   END IF
   !
   !*       2.2     budget storage
@@ -935,7 +937,7 @@ DO WHILE(ANY(ZTIME(:)<PTSTEP)) ! Loop to *really* compute tendencies
                         &ZRS_TEND, ZRG_TEND, ZRH_TEND, &
                         &ZA_TH, ZA_RV, ZA_RC, ZA_RR, ZA_RI, ZA_RS, ZA_RG, ZA_RH, &
                         &ZB_TH, ZB_RV, ZB_RC, ZB_RR, ZB_RI, ZB_RS, ZB_RG, ZB_RH, &
-                        &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, ZRAINFR)
+                        &ZHLC_HCF, ZHLC_LCF, ZHLC_HRC, ZHLC_LRC, PRAINFR)
 !$acc end data
     ! External tendencies
 !$acc kernels
@@ -1215,6 +1217,7 @@ IF(IMICRO>0) THEN
 #endif
 ELSE
 !$acc kernels
+  PRAINFR(:,:,:)=0.
   PCIT(:,:,:) = 0.
 !$acc end kernels
 ENDIF
@@ -1867,7 +1870,7 @@ IF(LSEDIM_AFTER) THEN
                              &PRIS, PRSS, PRGS, &
                              &PTHS, ZZ_LVFACT, ZZ_LSFACT, PRHS)
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_RED','no sedimentation scheme for HSEDIM='//TRIM(HSEDIM))
+    call Print_msg( NVERB_FATAL, 'GEN', 'RAIN_ICE_RED', 'no sedimentation scheme for HSEDIM='//HSEDIM )
   END IF
   !
   !*       8.2     budget storage
@@ -1881,6 +1884,8 @@ IF(LSEDIM_AFTER) THEN
   IF ( IRR == 7 .AND. GBUDGET_RH) &
                   CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:), 12, 'SEDI_BU_RRH')
   !
+  !sedimentation of rain fraction
+  CALL ICE4_RAINFR_VERT(IIB, IIE, IIT, IJB, IJE, IJT, IKB, IKE, IKT, KKL, PRAINFR, PRRS(:,:,:)*PTSTEP)
 ENDIF
 !
 !
@@ -1901,6 +1906,7 @@ IF (MPPDB_INITIALIZED) THEN
   CALL MPPDB_CHECK(PEVAP3D,"RAIN_ICE_RED end:PEVAP3D")
   CALL MPPDB_CHECK(PINPRS,"RAIN_ICE_RED end:PINPRS")
   CALL MPPDB_CHECK(PINPRG,"RAIN_ICE_RED end:PINPRG")
+  CALL MPPDB_CHECK(PRAINFR,"RAIN_ICE_RED end:PRAINFR")
   IF (PRESENT(PINPRH)) CALL MPPDB_CHECK(PINPRH,"RAIN_ICE_RED end:PINPRH")
   IF (PRESENT(PFPR)) THEN
     DO JL=1,SIZE(PFPR,4)
diff --git a/src/MNH/rain_ice_sedimentation_split.f90 b/src/MNH/rain_ice_sedimentation_split.f90
new file mode 100644
index 0000000000000000000000000000000000000000..d7637345ed02225b6f2e448e91f151ffcf85d3ec
--- /dev/null
+++ b/src/MNH/rain_ice_sedimentation_split.f90
@@ -0,0 +1,643 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_SEDIMENTATION_SPLIT
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC RAIN_ICE_SEDIMENTATION_SPLIT
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT(KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE, KKT, KKL,&
+  KSPLITR,PTSTEP, &
+  KRR,OSEDIC,ODEPOSC,PINPRC,PINDEP,PINPRR,PINPRS,PINPRG,PDZZ,PRHODREF,PPABST,PTHT,PRHODJ,&
+      PINPRR3D,PRCS,PRCT,PRRS,PRRT,PRIS,PRIT,PRSS,PRST,PRGS,PRGT,PSEA,PTOWN,PINPRH,PRHS,PRHT,PFPR)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS
+use MODD_CST,            only: XCPD, XP00, XRD, XRHOLW
+use MODD_PARAM_ICE,      only: XVDEPOSC
+use MODD_RAIN_ICE_DESCR, only: XCC, XCONC_LAND, xconc_sea, xconc_urban, XDC, XCEXVT, &
+                               XALPHAC, XNUC, XALPHAC2, XNUC2, XLBEXC, XRTMIN, XLBEXC, XLBC
+use MODD_RAIN_ICE_PARAM, only: XEXSEDG, XEXSEDH, XEXCSEDI, XEXSEDR, XEXSEDS, &
+                               XFSEDG, XFSEDH, XFSEDI, XFSEDR, XFSEDS, XFSEDC
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+INTEGER,                            INTENT(IN)    :: KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE, KKT
+INTEGER,                            INTENT(IN)    :: KKL   !vert. levels type 1=MNH -1=ARO
+INTEGER,                            INTENT(IN)    :: KSPLITR ! Number of small time step
+                                                             ! integration for  rain sedimendation
+REAL,                               INTENT(IN)    :: PTSTEP  ! Double Time step
+                                                            ! (single if cold start)
+INTEGER,                            INTENT(IN)    :: KRR     ! Number of moist variable
+LOGICAL,                            INTENT(IN)    :: OSEDIC  ! Switch for droplet sedim.
+LOGICAL,                            INTENT(IN)    :: ODEPOSC ! Switch for droplet depos.
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINPRC  ! Cloud instant precip
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
+REAL, DIMENSION(:,:),               INTENT(OUT)   :: PINPRR  ! Rain instant precip
+REAL, DIMENSION(:,:),               INTENT(OUT)   :: PINPRS  ! Snow instant precip
+REAL, DIMENSION(:,:),               INTENT(OUT)   :: PINPRG  ! Graupel instant precip
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PDZZ    ! Layer thikness (m)
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRHODREF! Reference density
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PPABST  ! absolute pressure at t
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PTHT    ! Theta at time t
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),             INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRRS    ! Rain water m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRIT    ! Pristine ice m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRGS    ! Graupel m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA    ! Sea Mask
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN   ! Fraction that is town
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(OUT)   :: PINPRH  ! Hail instant precip
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR    ! upper-air precipitation fluxes
+!
+!*       0.2  declaration of local variables
+!
+!
+INTEGER, SAVE                      :: IOLDALLOCC = 6000
+INTEGER, SAVE                      :: IOLDALLOCR = 6000
+INTEGER, SAVE                      :: IOLDALLOCI = 6000
+INTEGER, SAVE                      :: IOLDALLOCS = 6000
+INTEGER, SAVE                      :: IOLDALLOCG = 6000
+INTEGER, SAVE                      :: IOLDALLOCH = 6000
+INTEGER                            :: ILENALLOCC,ILENALLOCR,ILENALLOCI,ILENALLOCS,ILENALLOCG,ILENALLOCH
+INTEGER                            :: ILISTLENC,ILISTLENR,ILISTLENI,ILISTLENS,ILISTLENG,ILISTLENH
+INTEGER                            :: ISEDIMR,ISEDIMC, ISEDIMI, ISEDIMS, ISEDIMG, ISEDIMH
+INTEGER                            :: JK            ! Vertical loop index for the rain sedimentation
+INTEGER                            :: JN            ! Temporal loop index for the rain sedimentation
+INTEGER                            :: JJ            ! Loop index for the interpolation
+INTEGER                            :: JL
+INTEGER, DIMENSION(SIZE(PRCS))     :: IC1,IC2,IC3 ! Used to replace the COUNT
+INTEGER, DIMENSION(SIZE(PRCS))     :: IR1,IR2,IR3 ! Used to replace the COUNT
+INTEGER, DIMENSION(SIZE(PRCS))     :: IS1,IS2,IS3 ! Used to replace the COUNT
+INTEGER, DIMENSION(SIZE(PRCS))     :: II1,II2,II3 ! Used to replace the COUNT
+INTEGER, DIMENSION(SIZE(PRCS))     :: IG1,IG2,IG3 ! Used to replace the COUNT
+INTEGER, DIMENSION(SIZE(PRCS))     :: IH1,IH2,IH3 ! Used to replace the COUNT
+INTEGER, DIMENSION(:), ALLOCATABLE :: ILISTR,ILISTC,ILISTI,ILISTS,ILISTG,ILISTH
+LOGICAL, DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2)):: GDEP
+LOGICAL, DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) &
+                                   :: GSEDIMR,GSEDIMC, GSEDIMI, GSEDIMS, GSEDIMG, GSEDIMH ! Test where to compute the SED processes
+REAL                               :: ZINVTSTEP
+REAL                               :: ZTSPLITR ! Small time step for rain sedimentation
+REAL,    DIMENSION(SIZE(XRTMIN))   :: ZRTMIN
+! XRTMIN = Minimum value for the mixing ratio
+! ZRTMIN = Minimum value for the source (tendency)
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRCS    ! Cloud water m.r. source
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRRS    ! Rain water m.r. source
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRIS    ! Pristine ice m.r. source
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRSS    ! Snow/aggregate m.r. source
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRGS    ! Graupel m.r. source
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRHS    ! Hail m.r. source
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRCT    ! Cloud water m.r. at t
+REAL,    DIMENSION(:), ALLOCATABLE :: ZRHODREFC,& ! RHO Dry REFerence
+                                      ZRHODREFR,& ! RHO Dry REFerence
+                                      ZRHODREFI,& ! RHO Dry REFerence
+                                      ZRHODREFS,& ! RHO Dry REFerence
+                                      ZRHODREFG,& ! RHO Dry REFerence
+                                      ZRHODREFH,& ! RHO Dry REFerence
+                                      ZCC,      & ! terminal velocity
+                                      ZFSEDC1D, & ! For cloud sedimentation
+                                      ZWLBDC,   & ! Slope parameter of the droplet  distribution
+                                      ZCONC,    & ! Concentration des aerosols
+                                      ZRAY1D,   & ! Mean radius
+                                      ZWLBDA,   & ! Libre parcours moyen
+                                      ZZT,      & ! Temperature
+                                      ZPRES       ! Pressure
+REAL,    DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2))                   &
+                                   :: ZCONC_TMP    ! Weighted concentration
+REAL,    DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) :: ZCONC3D !  droplet condensation
+REAL,    DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3)) ::  &
+                                      ZRAY,   & ! Cloud Mean radius
+                                      ZLBC,   & ! XLBC weighted by sea fraction
+                                      ZFSEDC
+REAL,    DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3))   &
+                                   :: ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS   ! Mixing ratios created during the time step
+REAL,    DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2),SIZE(PRCS,3))   &
+                                   :: ZW ! work array
+REAL,    DIMENSION(SIZE(PRCS,1),SIZE(PRCS,2),0:SIZE(PRCS,3)+1)   &
+                                   :: ZWSED        ! sedimentation fluxes
+!-------------------------------------------------------------------------------
+!
+!
+!        O. Initialization of for sedimentation
+!
+ZINVTSTEP=1./PTSTEP
+ZTSPLITR= PTSTEP / FLOAT(KSPLITR)
+!
+IF (OSEDIC) PINPRC (:,:) = 0.
+IF (ODEPOSC) PINDEP (:,:) = 0.
+PINPRR (:,:) = 0.
+PINPRR3D (:,:,:) = 0.
+PINPRS (:,:) = 0.
+PINPRG (:,:) = 0.
+IF ( KRR == 7 ) PINPRH (:,:) = 0.
+IF (PRESENT(PFPR)) PFPR(:,:,:,:) = 0.
+!
+!*       1. Parameters for cloud sedimentation
+!
+   IF (OSEDIC) THEN
+    ZRAY(:,:,:)   = 0.
+    ZLBC(:,:,:)   = XLBC(1)
+    ZFSEDC(:,:,:) = XFSEDC(1)
+    ZCONC3D(:,:,:)= XCONC_LAND
+    ZCONC_TMP(:,:)= XCONC_LAND
+    IF (PRESENT(PSEA)) THEN
+      ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
+
+      DO JK=KKTB,KKTE
+        ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
+        ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
+        ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
+        ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
+        ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
+                PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
+      END DO
+    ELSE
+        ZCONC3D(:,:,:) = XCONC_LAND
+        ZRAY(:,:,:)  = 0.5*(GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)))
+    END IF
+    ZRAY(:,:,:)      = MAX(1.,ZRAY(:,:,:))
+    ZLBC(:,:,:)      = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:))
+   ENDIF
+!
+!*       2.    compute the fluxes
+!
+!  optimization by looking for locations where
+!  the precipitating fields are larger than a minimal value only !!!
+!  For optimization we consider each variable separately
+
+ZRTMIN(:)    = XRTMIN(:) * ZINVTSTEP
+IF (OSEDIC) GSEDIMC(:,:,:) = .FALSE.
+GSEDIMR(:,:,:) = .FALSE.
+GSEDIMI(:,:,:) = .FALSE.
+GSEDIMS(:,:,:) = .FALSE.
+GSEDIMG(:,:,:) = .FALSE.
+IF ( KRR == 7 ) GSEDIMH(:,:,:) = .FALSE.
+!
+ILENALLOCR = 0
+IF (OSEDIC) ILENALLOCC = 0
+ILENALLOCI = 0
+ILENALLOCS = 0
+ILENALLOCG = 0
+IF ( KRR == 7 ) ILENALLOCH = 0
+!
+! ZPiS = Specie i source creating during the current time step
+! PRiS = Source of the previous time step
+!
+IF (OSEDIC) THEN
+  ZPRCS(:,:,:) = 0.0
+  ZPRCS(:,:,:) = PRCS(:,:,:)-PRCT(:,:,:)* ZINVTSTEP
+  PRCS(:,:,:)  = PRCT(:,:,:)* ZINVTSTEP
+END IF
+ZPRRS(:,:,:) = 0.0
+ZPRSS(:,:,:) = 0.0
+ZPRGS(:,:,:) = 0.0
+IF ( KRR == 7 ) ZPRHS(:,:,:) = 0.0
+!
+ZPRRS(:,:,:) = PRRS(:,:,:)-PRRT(:,:,:)* ZINVTSTEP
+ZPRSS(:,:,:) = PRSS(:,:,:)-PRST(:,:,:)* ZINVTSTEP
+ZPRGS(:,:,:) = PRGS(:,:,:)-PRGT(:,:,:)* ZINVTSTEP
+IF ( KRR == 7 ) ZPRHS(:,:,:) = PRHS(:,:,:)-PRHT(:,:,:)* ZINVTSTEP
+PRRS(:,:,:)  = PRRT(:,:,:)* ZINVTSTEP
+PRSS(:,:,:)  = PRST(:,:,:)* ZINVTSTEP
+PRGS(:,:,:)  = PRGT(:,:,:)* ZINVTSTEP
+IF ( KRR == 7 ) PRHS(:,:,:)  = PRHT(:,:,:)* ZINVTSTEP
+!
+! PRiS = Source of the previous time step + source created during the subtime
+! step
+!
+DO JN = 1 , KSPLITR
+  IF( JN==1 ) THEN
+   IF (OSEDIC) PRCS(:,:,:) = PRCS(:,:,:) + ZPRCS(:,:,:)/KSPLITR
+   PRRS(:,:,:) = PRRS(:,:,:) + ZPRRS(:,:,:)/KSPLITR
+   PRSS(:,:,:) = PRSS(:,:,:) + ZPRSS(:,:,:)/KSPLITR
+   PRGS(:,:,:) = PRGS(:,:,:) + ZPRGS(:,:,:)/KSPLITR
+   IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:)/KSPLITR
+   DO JK = KKTB , KKTE
+     ZW(:,:,JK) =ZTSPLITR/(PRHODREF(:,:,JK)* PDZZ(:,:,JK))
+   END DO
+ ELSE
+   IF (OSEDIC) PRCS(:,:,:) = PRCS(:,:,:) + ZPRCS(:,:,:)*ZTSPLITR
+   PRRS(:,:,:) = PRRS(:,:,:) + ZPRRS(:,:,:)*ZTSPLITR
+   PRSS(:,:,:) = PRSS(:,:,:) + ZPRSS(:,:,:)*ZTSPLITR
+   PRGS(:,:,:) = PRGS(:,:,:) + ZPRGS(:,:,:)*ZTSPLITR
+   IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:)*ZTSPLITR
+ END IF
+ !
+ IF (OSEDIC) GSEDIMC(KIB:KIE,KJB:KJE,KKTB:KKTE) =                &
+                  PRCS(KIB:KIE,KJB:KJE,KKTB:KKTE)>ZRTMIN(2)
+ GSEDIMR(KIB:KIE,KJB:KJE,KKTB:KKTE) =                            &
+                  PRRS(KIB:KIE,KJB:KJE,KKTB:KKTE)>ZRTMIN(3)
+ GSEDIMI(KIB:KIE,KJB:KJE,KKTB:KKTE) =                            &
+                  PRIS(KIB:KIE,KJB:KJE,KKTB:KKTE)>ZRTMIN(4)
+ GSEDIMS(KIB:KIE,KJB:KJE,KKTB:KKTE) =                            &
+                  PRSS(KIB:KIE,KJB:KJE,KKTB:KKTE)>ZRTMIN(5)
+ GSEDIMG(KIB:KIE,KJB:KJE,KKTB:KKTE) =                            &
+                  PRGS(KIB:KIE,KJB:KJE,KKTB:KKTE)>ZRTMIN(6)
+ IF ( KRR == 7 ) GSEDIMH(KIB:KIE,KJB:KJE,KKTB:KKTE) =            &
+                  PRHS(KIB:KIE,KJB:KJE,KKTB:KKTE)>ZRTMIN(7)
+!
+ IF (OSEDIC) ISEDIMC = COUNTJV( GSEDIMC(:,:,:),IC1(:),IC2(:),IC3(:))
+ ISEDIMR = COUNTJV( GSEDIMR(:,:,:),IR1(:),IR2(:),IR3(:))
+ ISEDIMI = COUNTJV( GSEDIMI(:,:,:),II1(:),II2(:),II3(:))
+ ISEDIMS = COUNTJV( GSEDIMS(:,:,:),IS1(:),IS2(:),IS3(:))
+ ISEDIMG = COUNTJV( GSEDIMG(:,:,:),IG1(:),IG2(:),IG3(:))
+ IF ( KRR == 7 ) ISEDIMH = COUNTJV( GSEDIMH(:,:,:),IH1(:),IH2(:),IH3(:))
+!
+!*       2.1   for cloud
+!
+ IF (OSEDIC) THEN
+  ZWSED(:,:,:) = 0.
+  IF( JN==1 ) PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP
+  IF( ISEDIMC >= 1 ) THEN
+    IF ( ISEDIMC .GT. ILENALLOCC ) THEN
+      IF ( ILENALLOCC .GT. 0 ) THEN
+        DEALLOCATE (ZRCS, ZRHODREFC, ILISTC,ZWLBDC,ZCONC,ZRCT,  &
+                    ZZT,ZPRES,ZRAY1D,ZFSEDC1D,ZWLBDA,ZCC )
+      END IF
+      ILENALLOCC = MAX (IOLDALLOCC, 2*ISEDIMC )
+      IOLDALLOCC = ILENALLOCC
+      ALLOCATE(ZRCS(ILENALLOCC), ZRHODREFC(ILENALLOCC), ILISTC(ILENALLOCC), &
+        ZWLBDC(ILENALLOCC), ZCONC(ILENALLOCC), ZRCT(ILENALLOCC), ZZT(ILENALLOCC), &
+        ZPRES(ILENALLOCC), ZRAY1D(ILENALLOCC), ZFSEDC1D(ILENALLOCC), &
+        ZWLBDA(ILENALLOCC), ZCC(ILENALLOCC)  )
+    END IF
+!
+    DO JL=1,ISEDIMC
+      ZRCS(JL) = PRCS(IC1(JL),IC2(JL),IC3(JL))
+      ZRHODREFC(JL) =  PRHODREF(IC1(JL),IC2(JL),IC3(JL))
+      ZWLBDC(JL) = ZLBC(IC1(JL),IC2(JL),IC3(JL))
+      ZCONC(JL) = ZCONC3D(IC1(JL),IC2(JL),IC3(JL))
+      ZRCT(JL) = PRCT(IC1(JL),IC2(JL),IC3(JL))
+      ZZT(JL) = PTHT(IC1(JL),IC2(JL),IC3(JL))
+      ZPRES(JL) = PPABST(IC1(JL),IC2(JL),IC3(JL))
+      ZRAY1D(JL) = ZRAY(IC1(JL),IC2(JL),IC3(JL))
+      ZFSEDC1D(JL) = ZFSEDC(IC1(JL),IC2(JL),IC3(JL))
+    END DO
+!
+    ILISTLENC = 0
+    DO JL=1,ISEDIMC
+     IF( ZRCS(JL) .GT. ZRTMIN(2) ) THEN
+       ILISTLENC = ILISTLENC + 1
+       ILISTC(ILISTLENC) = JL
+     END IF
+    END DO
+       DO JJ = 1, ILISTLENC
+          JL = ILISTC(JJ)
+          IF (ZRCS(JL) .GT. ZRTMIN(2) .AND. ZRCT(JL) .GT. XRTMIN(2)) THEN
+            ZWLBDC(JL) = ZWLBDC(JL) * ZCONC(JL) / (ZRHODREFC(JL) * ZRCT(JL))
+            ZWLBDC(JL) = ZWLBDC(JL)**XLBEXC
+            ZRAY1D(JL) = ZRAY1D(JL) / ZWLBDC(JL) !! ZRAY : mean diameter=M(1)/2
+            ZZT(JL)    = ZZT(JL) * (ZPRES(JL)/XP00)**(XRD/XCPD)
+            ZWLBDA(JL) = 6.6E-8*(101325./ZPRES(JL))*(ZZT(JL)/293.15)
+            ZCC(JL)    = XCC*(1.+1.26*ZWLBDA(JL)/ZRAY1D(JL)) !! XCC modified for cloud
+            ZWSED (IC1(JL),IC2(JL),IC3(JL))= ZRHODREFC(JL)**(-XCEXVT +1 ) *   &
+              ZWLBDC(JL)**(-XDC)*ZCC(JL)*ZFSEDC1D(JL) * ZRCS(JL)
+          END IF
+       END DO
+  END IF
+       DO JK = KKTB , KKTE
+         PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+       END DO
+       IF (PRESENT(PFPR)) THEN
+         DO JK = KKTB , KKTE
+           PFPR(:,:,JK,2)=ZWSED(:,:,JK)
+         ENDDO
+       ENDIF
+      PINPRC(:,:) = PINPRC(:,:) + ZWSED(:,:,KKB) / XRHOLW / KSPLITR
+      IF( JN==KSPLITR ) THEN
+        PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP
+      END IF
+ END IF
+!
+!*       2.2   for rain
+!
+  IF( JN==1 ) PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP
+  ZWSED(:,:,:) = 0.
+  IF( ISEDIMR >= 1 ) THEN
+    IF ( ISEDIMR .GT. ILENALLOCR ) THEN
+      IF ( ILENALLOCR .GT. 0 ) THEN
+        DEALLOCATE (ZRRS, ZRHODREFR, ILISTR)
+      END IF
+      ILENALLOCR = MAX (IOLDALLOCR, 2*ISEDIMR )
+      IOLDALLOCR = ILENALLOCR
+      ALLOCATE(ZRRS(ILENALLOCR), ZRHODREFR(ILENALLOCR), ILISTR(ILENALLOCR))
+    END IF
+!
+    DO JL=1,ISEDIMR
+      ZRRS(JL) = PRRS(IR1(JL),IR2(JL),IR3(JL))
+      ZRHODREFR(JL) =  PRHODREF(IR1(JL),IR2(JL),IR3(JL))
+    END DO
+!
+    ILISTLENR = 0
+    DO JL=1,ISEDIMR
+     IF( ZRRS(JL) .GT. ZRTMIN(3) ) THEN
+       ILISTLENR = ILISTLENR + 1
+       ILISTR(ILISTLENR) = JL
+     END IF
+    END DO
+       DO JJ = 1, ILISTLENR
+          JL = ILISTR(JJ)
+           ZWSED (IR1(JL),IR2(JL),IR3(JL))= XFSEDR  * ZRRS(JL)**XEXSEDR *   &
+                                        ZRHODREFR(JL)**(XEXSEDR-XCEXVT)
+       END DO
+  END IF
+       DO JK = KKTB , KKTE
+         PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+       END DO
+       IF (PRESENT(PFPR)) THEN
+         DO JK = KKTB , KKTE
+           PFPR(:,:,JK,3)=ZWSED(:,:,JK)
+         ENDDO
+       ENDIF
+       PINPRR(:,:) = PINPRR(:,:) + ZWSED(:,:,KKB)/XRHOLW/KSPLITR
+       PINPRR3D(:,:,:) = PINPRR3D(:,:,:) + ZWSED(:,:,1:KKT)/XRHOLW/KSPLITR
+      IF( JN==KSPLITR ) THEN
+        PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP
+      END IF
+!
+!*       2.3   for pristine ice
+!
+  IF( JN==1 ) PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP
+  ZWSED(:,:,:) = 0.
+  IF( ISEDIMI >= 1 ) THEN
+    IF ( ISEDIMI .GT. ILENALLOCI ) THEN
+      IF ( ILENALLOCI .GT. 0 ) THEN
+        DEALLOCATE (ZRIS, ZRHODREFI, ILISTI)
+      END IF
+      ILENALLOCI = MAX (IOLDALLOCI, 2*ISEDIMI )
+      IOLDALLOCI = ILENALLOCI
+      ALLOCATE(ZRIS(ILENALLOCI), ZRHODREFI(ILENALLOCI), ILISTI(ILENALLOCI))
+    END IF
+!
+    DO JL=1,ISEDIMI
+      ZRIS(JL) = PRIS(II1(JL),II2(JL),II3(JL))
+      ZRHODREFI(JL) =  PRHODREF(II1(JL),II2(JL),II3(JL))
+    END DO
+!
+    ILISTLENI = 0
+    DO JL=1,ISEDIMI
+     IF( ZRIS(JL) .GT.  MAX(ZRTMIN(4),1.0E-7 )) THEN ! limitation of the McF&H formula
+       ILISTLENI = ILISTLENI + 1
+       ILISTI(ILISTLENI) = JL
+     END IF
+    END DO
+       DO JJ = 1, ILISTLENI
+          JL = ILISTI(JJ)
+              ZWSED (II1(JL),II2(JL),II3(JL))= XFSEDI * ZRIS(JL) *  &
+                               ZRHODREFI(JL)**(1.0-XCEXVT) * & !    McF&H
+                               MAX( 0.05E6,-0.15319E6-0.021454E6* &
+                               ALOG(ZRHODREFI(JL)*ZRIS(JL)) )**XEXCSEDI
+       END DO
+  END IF
+       DO JK = KKTB , KKTE
+         PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+       END DO
+       IF (PRESENT(PFPR)) THEN
+         DO JK = KKTB , KKTE
+           PFPR(:,:,JK,4)=ZWSED(:,:,JK)
+         ENDDO
+       ENDIF
+      IF( JN==KSPLITR ) THEN
+        PRIS(:,:,:) = PRIS(:,:,:) * ZINVTSTEP
+      END IF
+!
+!*       2.4   for aggregates/snow
+!
+  IF( JN==1 ) PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
+  ZWSED(:,:,:) = 0.
+  IF( ISEDIMS >= 1 ) THEN
+    IF ( ISEDIMS .GT. ILENALLOCS ) THEN
+      IF ( ILENALLOCS .GT. 0 ) THEN
+        DEALLOCATE (ZRSS, ZRHODREFS, ILISTS)
+      END IF
+      ILENALLOCS = MAX (IOLDALLOCS, 2*ISEDIMS )
+      IOLDALLOCS = ILENALLOCS
+      ALLOCATE(ZRSS(ILENALLOCS), ZRHODREFS(ILENALLOCS), ILISTS(ILENALLOCS))
+    END IF
+!
+    DO JL=1,ISEDIMS
+      ZRSS(JL) = PRSS(IS1(JL),IS2(JL),IS3(JL))
+      ZRHODREFS(JL) =  PRHODREF(IS1(JL),IS2(JL),IS3(JL))
+    END DO
+!
+    ILISTLENS = 0
+    DO JL=1,ISEDIMS
+     IF( ZRSS(JL) .GT. ZRTMIN(5) ) THEN
+       ILISTLENS = ILISTLENS + 1
+       ILISTS(ILISTLENS) = JL
+     END IF
+    END DO
+       DO JJ = 1, ILISTLENS
+          JL = ILISTS(JJ)
+             ZWSED (IS1(JL),IS2(JL),IS3(JL))= XFSEDS * ZRSS(JL)**XEXSEDS *  &
+                                        ZRHODREFS(JL)**(XEXSEDS-XCEXVT)
+       END DO
+  END IF
+       DO JK = KKTB , KKTE
+         PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+       END DO
+       IF (PRESENT(PFPR)) THEN
+         DO JK = KKTB , KKTE
+           PFPR(:,:,JK,5)=ZWSED(:,:,JK)
+         ENDDO
+       ENDIF
+      PINPRS(:,:) = PINPRS(:,:) + ZWSED(:,:,KKB)/XRHOLW/KSPLITR
+      IF( JN==KSPLITR ) THEN
+        PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP
+      END IF
+!
+!*       2.5   for graupeln
+!
+  ZWSED(:,:,:) = 0.
+  IF( JN==1 ) PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
+  IF( ISEDIMG >= 1 ) THEN
+    IF ( ISEDIMG .GT. ILENALLOCG ) THEN
+      IF ( ILENALLOCG .GT. 0 ) THEN
+        DEALLOCATE (ZRGS, ZRHODREFG, ILISTG)
+      END IF
+      ILENALLOCG = MAX (IOLDALLOCG, 2*ISEDIMG )
+      IOLDALLOCG = ILENALLOCG
+      ALLOCATE(ZRGS(ILENALLOCG), ZRHODREFG(ILENALLOCG), ILISTG(ILENALLOCG))
+    END IF
+!
+    DO JL=1,ISEDIMG
+      ZRGS(JL) = PRGS(IG1(JL),IG2(JL),IG3(JL))
+      ZRHODREFG(JL) =  PRHODREF(IG1(JL),IG2(JL),IG3(JL))
+    END DO
+!
+    ILISTLENG = 0
+    DO JL=1,ISEDIMG
+     IF( ZRGS(JL) .GT. ZRTMIN(6) ) THEN
+       ILISTLENG = ILISTLENG + 1
+       ILISTG(ILISTLENG) = JL
+     END IF
+    END DO
+       DO JJ = 1, ILISTLENG
+          JL = ILISTG(JJ)
+             ZWSED (IG1(JL),IG2(JL),IG3(JL))= XFSEDG  * ZRGS(JL)**XEXSEDG *   &
+                                        ZRHODREFG(JL)**(XEXSEDG-XCEXVT)
+       END DO
+END IF
+       DO JK = KKTB , KKTE
+         PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+       END DO
+       IF (PRESENT(PFPR)) THEN
+         DO JK = KKTB , KKTE
+           PFPR(:,:,JK,6)=ZWSED(:,:,JK)
+         ENDDO
+       ENDIF
+       PINPRG(:,:) = PINPRG(:,:) + ZWSED(:,:,KKB)/XRHOLW/KSPLITR
+      IF( JN==KSPLITR ) THEN
+        PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP
+      END IF
+!
+!*       2.6   for hail
+!
+ IF ( KRR == 7 ) THEN
+  IF( JN==1 ) PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
+  ZWSED(:,:,:) = 0.
+  IF( ISEDIMH >= 1 ) THEN
+    IF ( ISEDIMH .GT. ILENALLOCH ) THEN
+      IF ( ILENALLOCH .GT. 0 ) THEN
+        DEALLOCATE (ZRHS, ZRHODREFH, ILISTH)
+      END IF
+      ILENALLOCH = MAX (IOLDALLOCH, 2*ISEDIMH )
+      IOLDALLOCH = ILENALLOCH
+      ALLOCATE(ZRHS(ILENALLOCH), ZRHODREFH(ILENALLOCH), ILISTH(ILENALLOCH))
+    END IF
+!
+    DO JL=1,ISEDIMH
+      ZRHS(JL) = PRHS(IH1(JL),IH2(JL),IH3(JL))
+      ZRHODREFH(JL) =  PRHODREF(IH1(JL),IH2(JL),IH3(JL))
+    END DO
+!
+    ILISTLENH = 0
+    DO JL=1,ISEDIMH
+     IF( ZRHS(JL) .GT. ZRTMIN(7) ) THEN
+       ILISTLENH = ILISTLENH + 1
+       ILISTH(ILISTLENH) = JL
+     END IF
+    END DO
+       DO JJ = 1, ILISTLENH
+          JL = ILISTH(JJ)
+             ZWSED (IH1(JL),IH2(JL),IH3(JL))= XFSEDH  * ZRHS(JL)**XEXSEDH *   &
+                                        ZRHODREFH(JL)**(XEXSEDH-XCEXVT)
+       END DO
+  END IF
+       DO JK = KKTB , KKTE
+         PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+       END DO
+       IF (PRESENT(PFPR)) THEN
+         DO JK = KKTB , KKTE
+           PFPR(:,:,JK,7)=ZWSED(:,:,JK)
+         ENDDO
+       ENDIF
+       PINPRH(:,:) = PINPRH(:,:) + ZWSED(:,:,KKB)/XRHOLW/KSPLITR
+      IF( JN==KSPLITR ) THEN
+        PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP
+      END IF
+ END IF
+!
+END DO
+!
+IF (OSEDIC) THEN
+   IF (ILENALLOCC .GT. 0) DEALLOCATE (ZRCS, ZRHODREFC,  &
+  ILISTC,ZWLBDC,ZCONC,ZRCT, ZZT,ZPRES,ZRAY1D,ZFSEDC1D, ZWLBDA,ZCC)
+END IF
+IF (ILENALLOCR .GT. 0 ) DEALLOCATE(ZRHODREFR,ZRRS,ILISTR)
+IF (ILENALLOCI .GT. 0 ) DEALLOCATE(ZRHODREFI,ZRIS,ILISTI)
+IF (ILENALLOCS .GT. 0 ) DEALLOCATE(ZRHODREFS,ZRSS,ILISTS)
+IF (ILENALLOCG .GT. 0 ) DEALLOCATE(ZRHODREFG,ZRGS,ILISTG)
+IF (KRR == 7 .AND. (ILENALLOCH .GT. 0 )) DEALLOCATE(ZRHODREFH,ZRHS,ILISTH)
+!
+!*       2.3     budget storage
+!
+IF (LBUDGET_RC .AND. OSEDIC) &
+                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
+IF ( KRR == 7 .AND. LBUDGET_RH) &
+                CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
+!
+!
+!
+!*       2.4  DROPLET DEPOSITION AT THE 1ST LEVEL ABOVE GROUND
+!
+IF (ODEPOSC) THEN
+  GDEP(:,:) = .FALSE.
+  GDEP(KIB:KIE,KJB:KJE) =    PRCS(KIB:KIE,KJB:KJE,KKB) >0
+  WHERE (GDEP)
+     PRCS(:,:,KKB) = PRCS(:,:,KKB) - XVDEPOSC * PRCT(:,:,KKB) / PDZZ(:,:,KKB)
+     PINPRC(:,:) = PINPRC(:,:) + XVDEPOSC * PRCT(:,:,KKB) * PRHODREF(:,:,KKB) /XRHOLW
+     PINDEP(:,:) = XVDEPOSC * PRCT(:,:,KKB) * PRHODREF(:,:,KKB) /XRHOLW
+  END WHERE
+END IF
+!
+!*       2.5     budget storage
+!
+IF ( LBUDGET_RC .AND. ODEPOSC ) &
+   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
+!
+
+  END SUBROUTINE RAIN_ICE_SEDIMENTATION_SPLIT
+
+  FUNCTION COUNTJV(LTAB,I1,I2,I3) RESULT(IC)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+IMPLICIT NONE
+!
+!*       0.2  declaration of local variables
+!
+!
+LOGICAL, DIMENSION(:,:,:) :: LTAB ! Mask
+INTEGER, DIMENSION(:) :: I1,I2,I3 ! Used to replace the COUNT and PACK
+INTEGER :: JI,JJ,JK,IC
+!
+!-------------------------------------------------------------------------------
+!
+IC = 0
+DO JK = 1,SIZE(LTAB,3)
+  DO JJ = 1,SIZE(LTAB,2)
+    DO JI = 1,SIZE(LTAB,1)
+      IF( LTAB(JI,JJ,JK) ) THEN
+        IC = IC +1
+        I1(IC) = JI
+        I2(IC) = JJ
+        I3(IC) = JK
+      END IF
+    END DO
+  END DO
+END DO
+!
+END FUNCTION COUNTJV
+
+END MODULE MODE_RAIN_ICE_SEDIMENTATION_SPLIT
diff --git a/src/MNH/rain_ice_sedimentation_stat.f90 b/src/MNH/rain_ice_sedimentation_stat.f90
new file mode 100644
index 0000000000000000000000000000000000000000..e8d07221c69c3258d6849abc51262df27bbd12bb
--- /dev/null
+++ b/src/MNH/rain_ice_sedimentation_stat.f90
@@ -0,0 +1,606 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_SEDIMENTATION_STAT
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_SEDIMENTATION_STAT
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT( KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE, KKT, KKL, KRR,                &
+                                        PTSTEP, OSEDIC, PINPRC, PINDEP,                                         &
+                                        PINPRR, PINPRS, PINPRG, PDZZ, PRHODREF, PPABST, PTHT, PRHODJ, PINPRR3D, &
+                                        PRCS, PRCT, PRRS, PRRT, PRIS, PRSS, PRST, PRGS, PRGT,                   &
+                                        PSEA, PTOWN, PINPRH, PRHS, PRHT, PFPR )
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS
+use MODD_CST,            only: XRHOLW
+use MODD_PARAM_ICE,      only: LDEPOSC, XVDEPOSC
+use MODD_RAIN_ICE_PARAM, only: XEXSEDG, XEXSEDH, XEXCSEDI, XEXSEDR, XEXSEDS, &
+                               XFSEDC, XFSEDG, XFSEDH, XFSEDI, XFSEDR, XFSEDS
+use MODD_RAIN_ICE_DESCR, only: XALPHAC, XALPHAC2, XCC, XCEXVT, XCONC_LAND, XCONC_SEA, XCONC_URBAN, &
+                               XDC, XLBC, XLBEXC, XNUC, XNUC2, XRTMIN
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+INTEGER,                            INTENT(IN)    :: KIB, KIE, KJB, KJE, KKB, KKE, KKTB, KKTE, KKT
+INTEGER,                            INTENT(IN)    :: KKL     ! vert. levels type 1=MNH -1=ARO
+INTEGER,                            INTENT(IN)    :: KRR     ! Number of moist variable
+REAL,                               INTENT(IN)    :: PTSTEP  ! Double Time step
+                                                             ! (single if cold start)
+LOGICAL,                            INTENT(IN)    :: OSEDIC  ! Switch for droplet sedim.
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINPRC  ! Cloud instant precip
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINDEP  ! Cloud instant deposition
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINPRR  ! Rain instant precip
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINPRS  ! Snow instant precip
+REAL, DIMENSION(:,:),               INTENT(INOUT) :: PINPRG  ! Graupel instant precip
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PDZZ    ! Layer thikness (m)
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRHODREF! Reference density
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PPABST  ! absolute pressure at t
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PTHT    ! Theta at time t
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRHODJ  ! Dry density * Jacobian
+REAL, DIMENSION(:,:,:),             INTENT(OUT)   :: PINPRR3D! Rain inst precip 3D
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRCS    ! Cloud water m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRCT    ! Cloud water m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRRS    ! Rain water m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRRT    ! Rain water m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRIS    ! Pristine ice m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRSS    ! Snow/aggregate m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRST    ! Snow/aggregate m.r. at t
+REAL, DIMENSION(:,:,:),             INTENT(INOUT) :: PRGS    ! Graupel m.r. source
+REAL, DIMENSION(:,:,:),             INTENT(IN)    :: PRGT    ! Graupel/hail m.r. at t
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PSEA    ! Sea Mask
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(IN)    :: PTOWN   ! Fraction that is town
+REAL, DIMENSION(:,:),     OPTIONAL, INTENT(INOUT) :: PINPRH  ! Hail instant precip
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(INOUT) :: PRHS    ! Hail m.r. source
+REAL, DIMENSION(:,:,:),   OPTIONAL, INTENT(IN)    :: PRHT    ! Hail m.r. at t
+REAL, DIMENSION(:,:,:,:), OPTIONAL, INTENT(OUT)   :: PFPR    ! upper-air precipitation fluxes
+!
+!*       0.2  declaration of local variables
+!
+INTEGER                           :: JI,JJ,JK
+INTEGER                           :: JCOUNT, JL
+INTEGER, DIMENSION(SIZE(PRHODREF,1)*SIZE(PRHODREF,2)) :: I1, I2
+LOGICAL, DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)) :: GDEP
+REAL                              :: ZINVTSTEP
+REAL                              :: ZP1,ZP2,ZH,ZZWLBDA,ZZWLBDC,ZZCC
+REAL,    DIMENSION(SIZE(XRTMIN))     :: ZRTMIN
+! XRTMIN = Minimum value for the mixing ratio
+! ZRTMIN = Minimum value for the source (tendency)
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2)) :: ZQP
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2))                   &
+                                  :: ZCONC_TMP    ! Weighted concentration
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
+                                  :: ZPRCS,ZPRRS,ZPRSS,ZPRGS,ZPRHS   ! Mixing ratios created during the time step
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) :: ZCONC3D !  droplet condensation
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3)) ::  &
+                                     ZRAY,   & ! Cloud Mean radius
+                                     ZLBC,   & ! XLBC weighted by sea fraction
+                                     ZFSEDC
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),SIZE(PRHODREF,3))   &
+                                  :: ZW ! work array
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),0:SIZE(PRHODREF,3)+1)   &
+                                  :: ZWSED        ! sedimentation fluxes
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),0:SIZE(PRHODREF,3)+1)   &
+                                  :: ZWSEDW1       ! sedimentation speed
+REAL,    DIMENSION(SIZE(PRHODREF,1),SIZE(PRHODREF,2),0:SIZE(PRHODREF,3)+1)   &
+                                  :: ZWSEDW2       ! sedimentation speed
+!-------------------------------------------------------------------------------
+!
+!
+ZINVTSTEP=1./PTSTEP
+!
+!*       1. Parameters for cloud sedimentation
+!
+  IF (OSEDIC) THEN
+    ZRAY(:,:,:)   = 0.
+    ZLBC(:,:,:)   = XLBC(1)
+    ZFSEDC(:,:,:) = XFSEDC(1)
+    ZCONC3D(:,:,:)= XCONC_LAND
+    ZCONC_TMP(:,:)= XCONC_LAND
+    IF (PRESENT(PSEA)) THEN
+      ZCONC_TMP(:,:)=PSEA(:,:)*XCONC_SEA+(1.-PSEA(:,:))*XCONC_LAND
+
+      DO JK=KKTB,KKTE
+        ZLBC(:,:,JK)   = PSEA(:,:)*XLBC(2)+(1.-PSEA(:,:))*XLBC(1)
+        ZFSEDC(:,:,JK) = (PSEA(:,:)*XFSEDC(2)+(1.-PSEA(:,:))*XFSEDC(1))
+        ZFSEDC(:,:,JK) = MAX(MIN(XFSEDC(1),XFSEDC(2)),ZFSEDC(:,:,JK))
+        ZCONC3D(:,:,JK)= (1.-PTOWN(:,:))*ZCONC_TMP(:,:)+PTOWN(:,:)*XCONC_URBAN
+        ZRAY(:,:,JK)   = 0.5*((1.-PSEA(:,:))*GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)) + &
+                PSEA(:,:)*GAMMA(XNUC2+1.0/XALPHAC2)/(GAMMA(XNUC2)))
+      END DO
+    ELSE
+        ZCONC3D(:,:,:) = XCONC_LAND
+        ZRAY(:,:,:)  = 0.5*(GAMMA(XNUC+1.0/XALPHAC)/(GAMMA(XNUC)))
+    END IF
+    ZRAY(:,:,:)      = MAX(1.,ZRAY(:,:,:))
+    ZLBC(:,:,:)      = MAX(MIN(XLBC(1),XLBC(2)),ZLBC(:,:,:))
+  ENDIF
+  IF (LDEPOSC) PINDEP (:,:) = 0.
+!
+!*       2.    compute the fluxes
+!
+
+
+ZRTMIN(:)    = XRTMIN(:) * ZINVTSTEP
+!
+IF (OSEDIC) THEN
+  ZPRCS(:,:,:) = 0.0
+  ZPRCS(:,:,:) = PRCS(:,:,:)-PRCT(:,:,:)* ZINVTSTEP
+  PRCS(:,:,:)  = PRCT(:,:,:)* ZINVTSTEP
+END IF
+ZPRRS(:,:,:) = 0.0
+ZPRSS(:,:,:) = 0.0
+ZPRGS(:,:,:) = 0.0
+IF ( KRR == 7 ) ZPRHS(:,:,:) = 0.0
+!
+ZPRRS(:,:,:) = PRRS(:,:,:)-PRRT(:,:,:)* ZINVTSTEP
+ZPRSS(:,:,:) = PRSS(:,:,:)-PRST(:,:,:)* ZINVTSTEP
+ZPRGS(:,:,:) = PRGS(:,:,:)-PRGT(:,:,:)* ZINVTSTEP
+IF ( KRR == 7 ) ZPRHS(:,:,:) = PRHS(:,:,:)-PRHT(:,:,:)* ZINVTSTEP
+PRRS(:,:,:)  = PRRT(:,:,:)* ZINVTSTEP
+PRSS(:,:,:)  = PRST(:,:,:)* ZINVTSTEP
+PRGS(:,:,:)  = PRGT(:,:,:)* ZINVTSTEP
+IF ( KRR == 7 ) PRHS(:,:,:)  = PRHT(:,:,:)* ZINVTSTEP
+!
+IF (OSEDIC) PRCS(:,:,:) = PRCS(:,:,:) + ZPRCS(:,:,:)
+PRRS(:,:,:) = PRRS(:,:,:) + ZPRRS(:,:,:)
+PRSS(:,:,:) = PRSS(:,:,:) + ZPRSS(:,:,:)
+PRGS(:,:,:) = PRGS(:,:,:) + ZPRGS(:,:,:)
+IF ( KRR == 7 ) PRHS(:,:,:) = PRHS(:,:,:) + ZPRHS(:,:,:)
+IF (PRESENT(PFPR)) PFPR(:,:,:,:) = 0.
+DO JK = KKTB , KKTE
+  ZW(:,:,JK) =PTSTEP/(PRHODREF(:,:,JK)* PDZZ(:,:,JK) )
+END DO
+PINPRR3D (:,:,:) = 0.
+
+!
+!*       2.1   for cloud
+!
+ IF (OSEDIC) THEN
+     PRCS(:,:,:) = PRCS(:,:,:) * PTSTEP
+     ZWSED(:,:,:) = 0.
+     ZWSEDW1(:,:,:) = 0.
+     ZWSEDW2(:,:,:) = 0.
+
+! calculation of P1, P2 and sedimentation flux
+     DO JK = KKE , KKB, -1*KKL
+       !estimation of q' taking into account incomming ZWSED
+       ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
+
+       JCOUNT=COUNTJV2((PRCS(:,:,JK) > ZRTMIN(2) .AND. PRCT(:,:,JK) > ZRTMIN(2)) .OR. &
+                       (ZQP(:,:) > ZRTMIN(2)),I1(:),I2(:))
+       DO JL=1, JCOUNT
+         JI=I1(JL)
+         JJ=I2(JL)
+         !calculation of w
+         ! mars 2009 : ajout d'un test
+         !IF ( PRCS(JI,JJ,JK) > ZRTMIN(2) ) THEN
+         IF(PRCS(JI,JJ,JK) > ZRTMIN(2) .AND. PRCT(JI,JJ,JK) > ZRTMIN(2)) THEN
+           ZZWLBDA=6.6E-8*(101325./PPABST(JI,JJ,JK))*(PTHT(JI,JJ,JK)/293.15)
+           ZZWLBDC=(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK)  &
+                &/(PRHODREF(JI,JJ,JK)*PRCT(JI,JJ,JK)))**XLBEXC
+           ZZCC=XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY(JI,JJ,JK)) !! ZCC  : Fall speed
+           ZWSEDW1 (JI,JJ,JK)=PRHODREF(JI,JJ,JK)**(-XCEXVT ) *   &
+             &  ZZWLBDC**(-XDC)*ZZCC*ZFSEDC(JI,JJ,JK)
+         ENDIF
+         IF ( ZQP(JI,JJ) > ZRTMIN(2) ) THEN
+           ZZWLBDA=6.6E-8*(101325./PPABST(JI,JJ,JK))*(PTHT(JI,JJ,JK)/293.15)
+           ZZWLBDC=(ZLBC(JI,JJ,JK)*ZCONC3D(JI,JJ,JK)  &
+                &/(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)))**XLBEXC
+           ZZCC=XCC*(1.+1.26*ZZWLBDA*ZZWLBDC/ZRAY(JI,JJ,JK)) !! ZCC  : Fall speed
+           ZWSEDW2 (JI,JJ,JK)=PRHODREF(JI,JJ,JK)**(-XCEXVT ) *   &
+             &  ZZWLBDC**(-XDC)*ZZCC*ZFSEDC(JI,JJ,JK)
+         ENDIF
+       ENDDO
+
+       DO JJ = KJB, KJE
+         DO JI = KIB, KIE
+           ZH=PDZZ(JI,JJ,JK)
+           ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH)
+           ! mars 2009 : correction : ZWSEDW1 =>  ZWSEDW2
+           !IF (ZWSEDW1(JI,JJ,JK) /= 0.) THEN
+           IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
+             ZP2 = MAX(0.,1 -  ZH &
+           &  / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
+           ELSE
+             ZP2 = 0.
+           ENDIF
+           ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
+           &ZH*PRCS(JI,JJ,JK)&
+           &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
+         ENDDO
+       ENDDO
+     ENDDO
+
+     DO JK = KKTB , KKTE
+       PRCS(:,:,JK) = PRCS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+     END DO
+     IF (PRESENT(PFPR)) THEN
+       DO JK = KKTB , KKTE
+         PFPR(:,:,JK,2)=ZWSED(:,:,JK)
+       ENDDO
+     ENDIF
+
+     PINPRC(:,:) = ZWSED(:,:,KKB)/XRHOLW                        ! in m/s
+     PRCS(:,:,:) = PRCS(:,:,:) * ZINVTSTEP
+ ENDIF
+
+!
+!*       2.2   for rain
+!
+
+   PRRS(:,:,:) = PRRS(:,:,:) * PTSTEP
+   ZWSED(:,:,:) = 0.
+   ZWSEDW1(:,:,:) = 0.
+   ZWSEDW2(:,:,:) = 0.
+
+! calculation of ZP1, ZP2 and sedimentation flux
+   DO JK = KKE , KKB, -1*KKL
+     !estimation of q' taking into account incomming ZWSED
+     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
+
+     JCOUNT=COUNTJV2((PRRS(:,:,JK) > ZRTMIN(3)) .OR. &
+                     (ZQP(:,:) > ZRTMIN(3)),I1(:),I2(:))
+     DO JL=1, JCOUNT
+       JI=I1(JL)
+       JJ=I2(JL)
+       !calculation of w
+       IF ( PRRS(JI,JJ,JK) > ZRTMIN(3) ) THEN
+         ZWSEDW1 (JI,JJ,JK)= XFSEDR *PRRS(JI,JJ,JK)**(XEXSEDR-1)* &
+         PRHODREF(JI,JJ,JK)**(XEXSEDR-XCEXVT-1)
+       ENDIF
+       IF ( ZQP(JI,JJ) > ZRTMIN(3) ) THEN
+         ZWSEDW2 (JI,JJ,JK)= XFSEDR *(ZQP(JI,JJ))**(XEXSEDR-1)* &
+         PRHODREF(JI,JJ,JK)**(XEXSEDR-XCEXVT-1)
+       ENDIF
+     ENDDO
+     DO JJ = KJB, KJE
+       DO JI = KIB, KIE
+         ZH=PDZZ(JI,JJ,JK)
+         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
+         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
+           ZP2 = MAX(0.,1 -  ZH &
+         & / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
+         ELSE
+           ZP2 = 0.
+         ENDIF
+         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
+         &ZH*PRRS(JI,JJ,JK)&
+         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
+       ENDDO
+     ENDDO
+   ENDDO
+
+   DO JK = KKTB , KKTE
+     PRRS(:,:,JK) = PRRS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+   ENDDO
+   IF (PRESENT(PFPR)) THEN
+     DO JK = KKTB , KKTE
+       PFPR(:,:,JK,3)=ZWSED(:,:,JK)
+     ENDDO
+   ENDIF
+   PINPRR(:,:) = ZWSED(:,:,KKB)/XRHOLW                        ! in m/s
+   PINPRR3D(:,:,:) = ZWSED(:,:,1:KKT)/XRHOLW                        ! in m/s
+   PRRS(:,:,:) = PRRS(:,:,:) * ZINVTSTEP
+
+!
+!*       2.3   for pristine ice
+!
+
+   PRIS(:,:,:) = PRIS(:,:,:) * PTSTEP
+   ZWSED(:,:,:) = 0.
+   ZWSEDW1(:,:,:) = 0.
+   ZWSEDW2(:,:,:) = 0.
+! calculation of ZP1, ZP2 and sedimentation flux
+   DO JK = KKE , KKB, -1*KKL
+     !estimation of q' taking into account incomming ZWSED
+     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
+
+     JCOUNT=COUNTJV2((PRIS(:,:,JK) > MAX(ZRTMIN(4),1.0E-7 )) .OR. &
+                     (ZQP(:,:) > MAX(ZRTMIN(4),1.0E-7 )),I1(:),I2(:))
+     DO JL=1, JCOUNT
+       JI=I1(JL)
+       JJ=I2(JL)
+       !calculation of w
+       IF ( PRIS(JI,JJ,JK) > MAX(ZRTMIN(4),1.0E-7 ) ) THEN
+         ZWSEDW1 (JI,JJ,JK)= XFSEDI *  &
+         &  PRHODREF(JI,JJ,JK)**(XCEXVT) * & !    McF&H
+         &  MAX( 0.05E6,-0.15319E6-0.021454E6* &
+         &  ALOG(PRHODREF(JI,JJ,JK)*PRIS(JI,JJ,JK)) )**XEXCSEDI
+       ENDIF
+       IF ( ZQP(JI,JJ) > MAX(ZRTMIN(4),1.0E-7 ) ) THEN
+         ZWSEDW2 (JI,JJ,JK)= XFSEDI *  &
+         &  PRHODREF(JI,JJ,JK)**(XCEXVT) * & !    McF&H
+         &  MAX( 0.05E6,-0.15319E6-0.021454E6* &
+         &  ALOG(PRHODREF(JI,JJ,JK)*ZQP(JI,JJ)) )**XEXCSEDI
+       ENDIF
+     ENDDO
+     DO JJ = KJB, KJE
+       DO JI = KIB, KIE
+         ZH=PDZZ(JI,JJ,JK)
+         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
+         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
+           ZP2 = MAX(0.,1 - ZH  &
+           &  / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
+         ELSE
+           ZP2 = 0.
+         ENDIF
+         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
+         &ZH*PRIS(JI,JJ,JK)&
+         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
+       ENDDO
+     ENDDO
+   ENDDO
+
+   DO JK = KKTB , KKTE
+     PRIS(:,:,JK) = PRIS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+   ENDDO
+   IF (PRESENT(PFPR)) THEN
+     DO JK = KKTB , KKTE
+       PFPR(:,:,JK,4)=ZWSED(:,:,JK)
+     ENDDO
+   ENDIF
+
+   PRIS(:,:,:) = PRIS(:,:,:) * ZINVTSTEP
+
+
+!
+!*       2.4   for aggregates/snow
+!
+
+   PRSS(:,:,:) = PRSS(:,:,:) * PTSTEP
+   ZWSED(:,:,:) = 0.
+   ZWSEDW1(:,:,:) = 0.
+   ZWSEDW2(:,:,:) = 0.
+
+! calculation of ZP1, ZP2 and sedimentation flux
+   DO JK = KKE , KKB, -1*KKL
+     !estimation of q' taking into account incomming ZWSED
+     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
+
+     JCOUNT=COUNTJV2((PRSS(:,:,JK) > ZRTMIN(5)) .OR. &
+                     (ZQP(:,:) > ZRTMIN(5)),I1(:),I2(:))
+     DO JL=1, JCOUNT
+       JI=I1(JL)
+       JJ=I2(JL)
+       !calculation of w
+       IF (PRSS(JI,JJ,JK) > ZRTMIN(5) ) THEN
+         ZWSEDW1(JI,JJ,JK)=XFSEDS*(PRSS(JI,JJ,JK))**(XEXSEDS-1)*&
+         PRHODREF(JI,JJ,JK)**(XEXSEDS-XCEXVT-1)
+       ENDIF
+       IF ( ZQP(JI,JJ) > ZRTMIN(5) ) THEN
+         ZWSEDW2(JI,JJ,JK)=XFSEDS*(ZQP(JI,JJ))**(XEXSEDS-1)*&
+         PRHODREF(JI,JJ,JK)**(XEXSEDS-XCEXVT-1)
+       ENDIF
+     ENDDO
+     DO JJ = KJB, KJE
+       DO JI = KIB, KIE
+         ZH=PDZZ(JI,JJ,JK)
+         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
+         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
+           ZP2 = MAX(0.,1 - ZH&
+          / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
+         ELSE
+           ZP2 = 0.
+         ENDIF
+         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
+         &ZH*PRSS(JI,JJ,JK)&
+         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
+       ENDDO
+     ENDDO
+   ENDDO
+
+   DO JK = KKTB , KKTE
+     PRSS(:,:,JK) = PRSS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+   ENDDO
+   IF (PRESENT(PFPR)) THEN
+     DO JK = KKTB , KKTE
+       PFPR(:,:,JK,5)=ZWSED(:,:,JK)
+     ENDDO
+   ENDIF
+
+   PINPRS(:,:) = ZWSED(:,:,KKB)/XRHOLW                        ! in m/s
+
+   PRSS(:,:,:) = PRSS(:,:,:) * ZINVTSTEP
+
+
+!
+!*       2.5   for graupeln
+!
+
+   PRGS(:,:,:) = PRGS(:,:,:) * PTSTEP
+   ZWSED(:,:,:) = 0.
+   ZWSEDW1(:,:,:) = 0.
+   ZWSEDW2(:,:,:) = 0.
+
+! calculation of ZP1, ZP2 and sedimentation flux
+   DO JK = KKE,  KKB, -1*KKL
+     !estimation of q' taking into account incomming ZWSED
+     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
+
+     JCOUNT=COUNTJV2((PRGS(:,:,JK) > ZRTMIN(6)) .OR. &
+                     (ZQP(:,:) > ZRTMIN(6)),I1(:),I2(:))
+     DO JL=1, JCOUNT
+       JI=I1(JL)
+       JJ=I2(JL)
+       !calculation of w
+       IF ( PRGS(JI,JJ,JK) > ZRTMIN(6) ) THEN
+         ZWSEDW1 (JI,JJ,JK)= XFSEDG*(PRGS(JI,JJ,JK))**(XEXSEDG-1) * &
+                                  PRHODREF(JI,JJ,JK)**(XEXSEDG-XCEXVT-1)
+       ENDIF
+       IF ( ZQP(JI,JJ) > ZRTMIN(6) ) THEN
+         ZWSEDW2 (JI,JJ,JK)= XFSEDG*(ZQP(JI,JJ))**(XEXSEDG-1) * &
+                                  PRHODREF(JI,JJ,JK)**(XEXSEDG-XCEXVT-1)
+       ENDIF
+     ENDDO
+     DO JJ = KJB, KJE
+       DO JI = KIB, KIE
+         ZH=PDZZ(JI,JJ,JK)
+         ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH )
+         IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
+           ZP2 = MAX(0.,1 - ZH &
+         & / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
+         ELSE
+           ZP2 = 0.
+         ENDIF
+         ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
+         &ZH*PRGS(JI,JJ,JK)&
+         &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
+       ENDDO
+     ENDDO
+   ENDDO
+
+   DO JK = KKTB , KKTE
+         PRGS(:,:,JK) = PRGS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+   ENDDO
+   IF (PRESENT(PFPR)) THEN
+     DO JK = KKTB , KKTE
+       PFPR(:,:,JK,6)=ZWSED(:,:,JK)
+     ENDDO
+   ENDIF
+
+   PINPRG(:,:) = ZWSED(:,:,KKB)/XRHOLW                        ! in m/s
+
+   PRGS(:,:,:) = PRGS(:,:,:) * ZINVTSTEP
+
+!
+!*       2.6   for hail
+!
+ IF ( KRR == 7 ) THEN
+     PRHS(:,:,:) = PRHS(:,:,:) * PTSTEP
+     ZWSED(:,:,:) = 0.
+     ZWSEDW1(:,:,:) = 0.
+     ZWSEDW2(:,:,:) = 0.
+! calculation of ZP1, ZP2 and sedimentation flux
+     DO JK = KKE , KKB, -1*KKL
+     !estimation of q' taking into account incomming ZWSED
+     ZQP(:,:)=ZWSED(:,:,JK+KKL)*ZW(:,:,JK)
+
+     JCOUNT=COUNTJV2((PRHS(:,:,JK)+ZQP(JI,JJ) > ZRTMIN(7)) .OR. &
+                     (ZQP(:,:) > ZRTMIN(7)),I1(:),I2(:))
+     DO JL=1, JCOUNT
+       JI=I1(JL)
+       JJ=I2(JL)
+         !calculation of w
+         IF ((PRHS(JI,JJ,JK)+ZQP(JI,JJ)) > ZRTMIN(7) ) THEN
+           ZWSEDW1 (JI,JJ,JK)= XFSEDH  * (PRHS(JI,JJ,JK))**(XEXSEDH-1) *   &
+                                    PRHODREF(JI,JJ,JK)**(XEXSEDH-XCEXVT-1)
+         ENDIF
+         IF ( ZQP(JI,JJ) > ZRTMIN(7) ) THEN
+           ZWSEDW2 (JI,JJ,JK)= XFSEDH  * ZQP(JI,JJ)**(XEXSEDH-1) *   &
+                                    PRHODREF(JI,JJ,JK)**(XEXSEDH-XCEXVT-1)
+         ENDIF
+       ENDDO
+       DO JJ = KJB, KJE
+         DO JI = KIB, KIE
+           ZH=PDZZ(JI,JJ,JK)
+           ZP1 = MIN(1., ZWSEDW1(JI,JJ,JK) * PTSTEP / ZH)
+           IF (ZWSEDW2(JI,JJ,JK) /= 0.) THEN
+             ZP2 = MAX(0.,1 - ZH &
+           &  / (PTSTEP*ZWSEDW2(JI,JJ,JK)) )
+           ELSE
+             ZP2 = 0.
+           ENDIF
+           ZWSED (JI,JJ,JK)=ZP1*PRHODREF(JI,JJ,JK)*&
+           &ZH*PRHS(JI,JJ,JK)&
+           &* ZINVTSTEP+ ZP2 * ZWSED (JI,JJ,JK+KKL)
+         ENDDO
+       ENDDO
+     ENDDO
+
+     DO JK = KKTB , KKTE
+       PRHS(:,:,JK) = PRHS(:,:,JK) + ZW(:,:,JK)*(ZWSED(:,:,JK+KKL)-ZWSED(:,:,JK))
+     ENDDO
+     IF (PRESENT(PFPR)) THEN
+       DO JK = KKTB , KKTE
+         PFPR(:,:,JK,7)=ZWSED(:,:,JK)
+       ENDDO
+     ENDIF
+
+     PINPRH(:,:) = ZWSED(:,:,KKB)/XRHOLW                        ! in m/s
+
+     PRHS(:,:,:) = PRHS(:,:,:) * ZINVTSTEP
+
+ ENDIF
+!
+
+!
+!*       2.3     budget storage
+!
+IF (LBUDGET_RC .AND. OSEDIC) &
+                CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'SEDI_BU_RRC')
+IF (LBUDGET_RR) CALL BUDGET (PRRS(:,:,:)*PRHODJ(:,:,:),8 ,'SEDI_BU_RRR')
+IF (LBUDGET_RI) CALL BUDGET (PRIS(:,:,:)*PRHODJ(:,:,:),9 ,'SEDI_BU_RRI')
+IF (LBUDGET_RS) CALL BUDGET (PRSS(:,:,:)*PRHODJ(:,:,:),10,'SEDI_BU_RRS')
+IF (LBUDGET_RG) CALL BUDGET (PRGS(:,:,:)*PRHODJ(:,:,:),11,'SEDI_BU_RRG')
+IF ( KRR == 7 .AND. LBUDGET_RH) &
+                CALL BUDGET (PRHS(:,:,:)*PRHODJ(:,:,:),12,'SEDI_BU_RRH')
+!
+!
+!*       2.4  DROPLET DEPOSITION AT THE 1ST LEVEL ABOVE GROUND
+!
+IF (LDEPOSC) THEN
+  GDEP(:,:) = .FALSE.
+  GDEP(KIB:KIE,KJB:KJE) =    PRCS(KIB:KIE,KJB:KJE,KKB) >0
+  WHERE (GDEP)
+     PRCS(:,:,KKB) = PRCS(:,:,KKB) - XVDEPOSC * PRCT(:,:,KKB) / PDZZ(:,:,KKB)
+     PINPRC(:,:) = PINPRC(:,:) + XVDEPOSC * PRCT(:,:,KKB) * PRHODREF(:,:,KKB) /XRHOLW
+     PINDEP(:,:) = XVDEPOSC * PRCT(:,:,KKB) * PRHODREF(:,:,KKB) /XRHOLW
+  END WHERE
+END IF
+!
+!*       2.5     budget storage
+!
+IF ( LBUDGET_RC .AND. LDEPOSC ) &
+   CALL BUDGET (PRCS(:,:,:)*PRHODJ(:,:,:),7 ,'DEPO_BU_RRC')
+!
+END SUBROUTINE RAIN_ICE_SEDIMENTATION_STAT
+
+
+FUNCTION COUNTJV2(LTAB,I1,I2) RESULT(IC)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+IMPLICIT NONE
+!
+!*       0.2  declaration of local variables
+!
+!
+LOGICAL, DIMENSION(:,:) :: LTAB ! Mask
+INTEGER, DIMENSION(:) :: I1,I2 ! Used to replace the COUNT and PACK
+INTEGER :: JI,JJ,IC
+!
+!-------------------------------------------------------------------------------
+!
+IC = 0
+DO JJ = 1,SIZE(LTAB,2)
+  DO JI = 1,SIZE(LTAB,1)
+    IF( LTAB(JI,JJ) ) THEN
+      IC = IC +1
+      I1(IC) = JI
+      I2(IC) = JJ
+    END IF
+  END DO
+END DO
+!
+END FUNCTION COUNTJV2
+
+END MODULE MODE_RAIN_ICE_SEDIMENTATION_STAT
diff --git a/src/MNH/rain_ice_slow.f90 b/src/MNH/rain_ice_slow.f90
new file mode 100644
index 0000000000000000000000000000000000000000..eb46ad5318796fa2e160df3f11f9714c914484c5
--- /dev/null
+++ b/src/MNH/rain_ice_slow.f90
@@ -0,0 +1,237 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_SLOW
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_SLOW
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_SLOW(OMICRO, PINVTSTEP, PRHODREF,                      &
+                         PRCT, PRRT, PRIT, PRST, PRGT, PRHODJ, PZT, PPRES, &
+                         PLSFACT, PLVFACT,                                 &
+                         PSSI, PRHODJ3D, PTHS3D, PRVS3D,                   &
+                         PRVS, PRCS, PRRS, PRIS, PRSS, PRGS, PTHS,         &
+                         PAI, PCJ, PKA, PDV, PLBDAS, PLBDAG)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RG, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, LBUDGET_TH
+use MODD_CST,            only: XALPI, XBETAI, XCI, XCPV, XGAMI, XLSTT, XMNH_HUGE_12_LOG, XP00, XRV, XTT
+use MODD_RAIN_ICE_DESCR, only: XCEXVT, XLBDAS_MAX, XLBEXG, XLBEXS, XLBG, XLBS, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: X0DEPG, X0DEPS, X1DEPG, X1DEPS, XACRIAUTI, XALPHA3, XBCRIAUTI, XBETA3, XCOLEXIS, XCRIAUTI, &
+                               XEX0DEPG, XEX0DEPS, XEX1DEPG, XEX1DEPS, XEXIAGGS, XFIAGGS, XHON, XSCFAC, XTEXAUTI, XTIMAUTI
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+LOGICAL,  DIMENSION(:,:,:), intent(in)    :: OMICRO   ! Test where to compute all processes
+REAL,                       intent(in)    :: PINVTSTEP
+REAL,     DIMENSION(:),     intent(in)    :: PRHODREF ! RHO Dry REFerence
+REAL,     DIMENSION(:),     intent(in)    :: PRCT     ! Cloud water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRRT     ! Rain water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRIT     ! Pristine ice m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRST     ! Snow/aggregate m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRGT     ! Graupel m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRHODJ   ! RHO times Jacobian
+REAL,     DIMENSION(:),     intent(in)    :: PZT      ! Temperature
+REAL,     DIMENSION(:),     intent(in)    :: PPRES    ! Pressure
+REAL,     DIMENSION(:),     intent(in)    :: PLSFACT  ! L_s/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PLVFACT  ! L_v/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PSSI     ! Supersaturation over ice
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ3D ! Dry density * Jacobian
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PTHS3D   ! Theta source
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRVS3D   ! Water vapor m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRVS     ! Water vapor m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRCS     ! Cloud water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRRS     ! Rain water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRIS     ! Pristine ice m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRSS     ! Snow/aggregate m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRGS     ! Graupel m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PTHS     ! Theta source
+REAL,     DIMENSION(:),     intent(OUT)   :: PAI      ! Thermodynamical function
+REAL,     DIMENSION(:),     intent(OUT)   :: PCJ      ! Function to compute the ventilation coefficient
+REAL,     DIMENSION(:),     intent(OUT)   :: PKA      ! Thermal conductivity of the air
+REAL,     DIMENSION(:),     intent(OUT)   :: PDV      ! Diffusivity of water vapor in the air
+REAL,     DIMENSION(:),     intent(OUT)   :: PLBDAS   ! Slope parameter of the aggregate distribution
+REAL,     DIMENSION(:),     intent(OUT)   :: PLBDAG   ! Slope parameter of the graupel   distribution
+!
+!*       0.2  declaration of local variables
+!
+REAL, DIMENSION(size(PRHODREF)) :: ZZW      ! Work array
+REAL, DIMENSION(size(PRHODREF)) :: ZCRIAUTI ! Snow-to-ice autoconversion thres.
+!
+!-------------------------------------------------------------------------------
+!
+!
+!*       3.2     compute the homogeneous nucleation source: RCHONI
+!
+  ZZW(:) = 0.0
+  WHERE( (PZT(:)<XTT-35.0) .AND. (PRCT(:)>XRTMIN(2)) .AND. (PRCS(:)>0.) )
+    ZZW(:) = MIN( PRCS(:),XHON*PRHODREF(:)*PRCT(:)       &
+                                 *EXP( MIN(XMNH_HUGE_12_LOG,XALPHA3*(PZT(:)-XTT)-XBETA3) ) )
+                                 ! *EXP( XALPHA3*(PZT(:)-XTT)-XBETA3 ) )
+    PRIS(:) = PRIS(:) + ZZW(:)
+    PRCS(:) = PRCS(:) - ZZW(:)
+    PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCHONI))
+  ENDWHERE
+!
+  IF (LBUDGET_TH) CALL BUDGET (                                                &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),  &
+                                                              4,'HON_BU_RTH')
+  IF (LBUDGET_RC) CALL BUDGET (                                                &
+                     UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
+                                                              7,'HON_BU_RRC')
+  IF (LBUDGET_RI) CALL BUDGET (                                                &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
+                                                              9,'HON_BU_RRI')
+!
+!*       3.3     compute the spontaneous freezing source: RRHONG
+!
+  ZZW(:) = 0.0
+  WHERE( (PZT(:)<XTT-35.0) .AND. (PRRT(:)>XRTMIN(3)) .AND. (PRRS(:)>0.) )
+    ZZW(:) = MIN( PRRS(:),PRRT(:)* PINVTSTEP )
+    PRGS(:) = PRGS(:) + ZZW(:)
+    PRRS(:) = PRRS(:) - ZZW(:)
+    PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RRHONG))
+  ENDWHERE
+!
+  IF (LBUDGET_TH) CALL BUDGET (                                                &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),  &
+                                                              4,'SFR_BU_RTH')
+  IF (LBUDGET_RR) CALL BUDGET (                                                &
+                     UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
+                                                              8,'SFR_BU_RRR')
+  IF (LBUDGET_RG) CALL BUDGET (                                                &
+                     UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
+                                                             11,'SFR_BU_RRG')
+!
+!*       3.4    compute the deposition, aggregation and autoconversion sources
+!
+  PKA(:) = 2.38E-2 + 0.0071E-2 * ( PZT(:) - XTT )          ! k_a
+  PDV(:) = 0.211E-4 * (PZT(:)/XTT)**1.94 * (XP00/PPRES(:)) ! D_v
+!
+!*       3.4.1  compute the thermodynamical function A_i(T,P)
+!*              and the c^prime_j (in the ventilation factor)
+!
+
+  PAI(:) = EXP( XALPI - XBETAI/PZT(:) - XGAMI*ALOG(PZT(:) ) ) ! es_i
+  PAI(:) = ( XLSTT + (XCPV-XCI)*(PZT(:)-XTT) )**2 / (PKA(:)*XRV*PZT(:)**2) &
+                                 + ( XRV*PZT(:) ) / (PDV(:)*PAI(:))
+  PCJ(:) = XSCFAC * PRHODREF(:)**0.3 / SQRT( 1.718E-5+0.0049E-5*(PZT(:)-XTT) )
+!
+!*       3.4.2  compute the riming-conversion of r_c for r_i production: RCAUTI
+!
+!  ZZW(:) = 0.0
+!  ZTIMAUTIC = SQRT( XTIMAUTI*XTIMAUTC )
+!  WHERE ( (PRCT(:)>0.0) .AND. (PRIT(:)>0.0) .AND. (PRCS(:)>0.0) )
+!    ZZW(:) = MIN( PRCS(:),ZTIMAUTIC * MAX( SQRT( PRIT(:)*PRCT(:) ),0.0 ) )
+!    PRIS(:) = PRIS(:) + ZZW(:)
+!    PRCS(:) = PRCS(:) - ZZW(:)
+!    PTHS(:) = PTHS(:) + ZZW(:)*(PLSFACT(:)-PLVFACT(:)) ! f(L_f*(RCAUTI))
+!  END WHERE
+!
+!*       3.4.3  compute the deposition on r_s: RVDEPS
+!
+  WHERE ( PRST(:)>0.0 )
+    PLBDAS(:)  = MIN( XLBDAS_MAX,                                           &
+                      XLBS*( PRHODREF(:)*MAX( PRST(:),XRTMIN(5) ) )**XLBEXS )
+  END WHERE
+  ZZW(:) = 0.0
+  WHERE ( (PRST(:)>XRTMIN(5)) .AND. (PRSS(:)>0.0) )
+    ZZW(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) *                               &
+             ( X0DEPS*PLBDAS(:)**XEX0DEPS + X1DEPS*PCJ(:)*PLBDAS(:)**XEX1DEPS )
+    ZZW(:) =         MIN( PRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
+                   - MIN( PRSS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
+    PRSS(:) = PRSS(:) + ZZW(:)
+    PRVS(:) = PRVS(:) - ZZW(:)
+    PTHS(:) = PTHS(:) + ZZW(:)*PLSFACT(:)
+  END WHERE
+  IF (LBUDGET_TH) CALL BUDGET (                                                &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),  &
+                                                              4,'DEPS_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (                                                &
+                 UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:),  &
+                                                              6,'DEPS_BU_RRV')
+  IF (LBUDGET_RS) CALL BUDGET (                                                &
+                     UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),   &
+                                                             10,'DEPS_BU_RRS')
+!
+!*       3.4.4  compute the aggregation on r_s: RIAGGS
+!
+  ZZW(:) = 0.0
+  WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRST(:)>XRTMIN(5)) .AND. (PRIS(:)>0.0) )
+    ZZW(:) = MIN( PRIS(:),XFIAGGS * EXP( XCOLEXIS*(PZT(:)-XTT) ) &
+                                  * PRIT(:)                      &
+                                  * PLBDAS(:)**XEXIAGGS          &
+                                  * PRHODREF(:)**(-XCEXVT)       )
+    PRSS(:)  = PRSS(:)  + ZZW(:)
+    PRIS(:)  = PRIS(:)  - ZZW(:)
+  END WHERE
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              9,'AGGS_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (                                                 &
+                     UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             10,'AGGS_BU_RRS')
+!
+!*       3.4.5  compute the autoconversion of r_i for r_s production: RIAUTS
+!
+!  ZCRIAUTI(:)=MIN(XCRIAUTI,10**(0.06*(PZT(:)-XTT)-3.5))
+  ZCRIAUTI(:)=MIN(XCRIAUTI,10**(XACRIAUTI*(PZT(:)-XTT)+XBCRIAUTI))
+  ZZW(:) = 0.0
+  WHERE ( (PRIT(:)>XRTMIN(4)) .AND. (PRIS(:)>0.0) )
+    ZZW(:) = MIN( PRIS(:),XTIMAUTI * EXP( XTEXAUTI*(PZT(:)-XTT) ) &
+                            * MAX( PRIT(:)-ZCRIAUTI(:),0.0 ) )
+    PRSS(:)  = PRSS(:)  + ZZW(:)
+    PRIS(:)  = PRIS(:)  - ZZW(:)
+  END WHERE
+  IF (LBUDGET_RI) CALL BUDGET (                                                 &
+                     UNPACK(PRIS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              9,'AUTS_BU_RRI')
+  IF (LBUDGET_RS) CALL BUDGET (                                                 &
+                     UNPACK(PRSS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             10,'AUTS_BU_RRS')
+!
+!*       3.4.6  compute the deposition on r_g: RVDEPG
+!
+!
+  WHERE ( PRGT(:)>0.0 )
+    PLBDAG(:)  = XLBG*( PRHODREF(:)*MAX( PRGT(:),XRTMIN(6) ) )**XLBEXG
+  END WHERE
+  ZZW(:) = 0.0
+  WHERE ( (PRGT(:)>XRTMIN(6)) .AND. (PRGS(:)>0.0) )
+    ZZW(:) = ( PSSI(:)/(PRHODREF(:)*PAI(:)) ) *                               &
+             ( X0DEPG*PLBDAG(:)**XEX0DEPG + X1DEPG*PCJ(:)*PLBDAG(:)**XEX1DEPG )
+    ZZW(:) =         MIN( PRVS(:),ZZW(:)      )*(0.5+SIGN(0.5,ZZW(:))) &
+                   - MIN( PRGS(:),ABS(ZZW(:)) )*(0.5-SIGN(0.5,ZZW(:)))
+    PRGS(:) = PRGS(:) + ZZW(:)
+    PRVS(:) = PRVS(:) - ZZW(:)
+    PTHS(:) = PTHS(:) + ZZW(:)*PLSFACT(:)
+  END WHERE
+  IF (LBUDGET_TH) CALL BUDGET (                                                 &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                              4,'DEPG_BU_RTH')
+  IF (LBUDGET_RV) CALL BUDGET (                                                 &
+                 UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:),   &
+                                                              6,'DEPG_BU_RRV')
+  IF (LBUDGET_RG) CALL BUDGET (                                                 &
+                     UNPACK(PRGS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                             11,'DEPG_BU_RRG')
+!
+END SUBROUTINE RAIN_ICE_SLOW
+
+END MODULE MODE_RAIN_ICE_SLOW
diff --git a/src/MNH/rain_ice_warm.f90 b/src/MNH/rain_ice_warm.f90
new file mode 100644
index 0000000000000000000000000000000000000000..d83fad363c1beddefca094af98daad3a0d2e1d1f
--- /dev/null
+++ b/src/MNH/rain_ice_warm.f90
@@ -0,0 +1,237 @@
+!MNH_LIC Copyright 1995-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 25/02/2019: split rain_ice (cleaner and easier to maintain/debug)
+!-----------------------------------------------------------------
+MODULE MODE_RAIN_ICE_WARM
+
+  IMPLICIT NONE
+
+  PRIVATE
+
+  PUBLIC :: RAIN_ICE_WARM
+
+CONTAINS
+
+SUBROUTINE RAIN_ICE_WARM(OMICRO, PRHODREF, PRVT, PRCT, PRRT, PHLC_HCF, PHLC_LCF, PHLC_HRC, PHLC_LRC,           &
+                         PRHODJ, PPRES, PZT, PLBDAR, PLBDAR_RF, PLVFACT, PCJ, PKA, PDV, PRF, PCF, PTHT, PTHLT, &
+                         PRHODJ3D, PTHS3D, PRVS3D, PRVS, PRCS, PRRS, PTHS, PUSW, PEVAP3D)
+!
+!*      0. DECLARATIONS
+!          ------------
+!
+use MODD_BUDGET,         only: LBUDGET_RC, LBUDGET_RR, LBUDGET_RV, LBUDGET_TH
+use MODD_CST,            only: XALPW, XBETAW, XCL, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
+use MODD_PARAM_ICE,      only: CSUBG_RC_RR_ACCR, CSUBG_RR_EVAP
+use MODD_RAIN_ICE_DESCR, only: XCEXVT, XRTMIN
+use MODD_RAIN_ICE_PARAM, only: X0EVAR, X1EVAR, XCRIAUTC, XEX0EVAR, XEX1EVAR, XEXCACCR, XFCACCR, XTIMAUTC
+!
+use MODE_MSG
+!
+use MODI_BUDGET
+!
+IMPLICIT NONE
+!
+!*       0.1   Declarations of dummy arguments :
+!
+LOGICAL,  DIMENSION(:,:,:), intent(in)    :: OMICRO   ! Test where to compute all processes
+REAL,     DIMENSION(:),     intent(in)    :: PRHODREF ! RHO Dry REFerence
+REAL,     DIMENSION(:),     intent(in)    :: PRVT     ! Water vapor m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRCT     ! Cloud water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PRRT     ! Rain water m.r. at t
+REAL,     DIMENSION(:),     intent(in)    :: PHLC_HCF ! HLCLOUDS : fraction of High Cloud Fraction in grid
+REAL,     DIMENSION(:),     intent(in)    :: PHLC_LCF ! HLCLOUDS : fraction of Low  Cloud Fraction in grid
+REAL,     DIMENSION(:),     intent(in)    :: PHLC_HRC ! HLCLOUDS : LWC that is High LWC in grid
+REAL,     DIMENSION(:),     intent(in)    :: PHLC_LRC ! HLCLOUDS : LWC that is Low  LWC in grid
+REAL,     DIMENSION(:),     intent(in)    :: PRHODJ   ! RHO times Jacobian
+REAL,     DIMENSION(:),     intent(in)    :: PPRES    ! Pressure
+REAL,     DIMENSION(:),     intent(in)    :: PZT      ! Temperature
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAR   ! Slope parameter of the raindrop  distribution
+REAL,     DIMENSION(:),     intent(in)    :: PLBDAR_RF! Slope parameter of the raindrop  distribution
+                                                      ! for the Rain Fraction part
+REAL,     DIMENSION(:),     intent(in)    :: PLVFACT  ! L_v/(Pi_ref*C_ph)
+REAL,     DIMENSION(:),     intent(in)    :: PCJ      ! Function to compute the ventilation coefficient
+REAL,     DIMENSION(:),     intent(in)    :: PKA      ! Thermal conductivity of the air
+REAL,     DIMENSION(:),     intent(in)    :: PDV      ! Diffusivity of water vapor in the air
+REAL,     DIMENSION(:),     intent(in)    :: PRF      ! Rain fraction
+REAL,     DIMENSION(:),     intent(in)    :: PCF      ! Cloud fraction
+REAL,     DIMENSION(:),     intent(in)    :: PTHT     ! Potential temperature
+REAL,     DIMENSION(:),     intent(in)    :: PTHLT    ! Liquid potential temperature
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRHODJ3D ! Dry density * Jacobian
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PTHS3D   ! Theta source
+REAL,     DIMENSION(:,:,:), INTENT(IN)    :: PRVS3D   ! Water vapor m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRVS     ! Water vapor m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRCS     ! Cloud water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PRRS     ! Rain water m.r. source
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PTHS     ! Theta source
+!PW: PUSW could be a purely local variable?
+REAL,     DIMENSION(:),     INTENT(INOUT) :: PUSW     ! Undersaturation over water
+REAL,     DIMENSION(:,:,:), INTENT(INOUT) :: PEVAP3D  ! Rain evap profile
+!
+!*       0.2  declaration of local variables
+!
+REAL, DIMENSION(size(PRHODREF)) :: ZZW  ! Work array
+REAL, DIMENSION(size(PRHODREF)) :: ZZW2 ! Work array
+REAL, DIMENSION(size(PRHODREF)) :: ZZW3 ! Work array
+REAL, DIMENSION(size(PRHODREF)) :: ZZW4 ! Work array
+!
+!-------------------------------------------------------------------------------
+!
+!*       4.2    compute the autoconversion of r_c for r_r production: RCAUTR
+!
+
+    WHERE( PRCS(:)>0.0 .AND. PHLC_HCF(:).GT.0.0 )
+      ZZW(:) = XTIMAUTC*MAX( PHLC_HRC(:)/PHLC_HCF(:)  - XCRIAUTC/PRHODREF(:),0.0)
+      ZZW(:) = MIN( PRCS(:),PHLC_HCF(:)*ZZW(:))
+      PRCS(:) = PRCS(:) - ZZW(:)
+      PRRS(:) = PRRS(:) + ZZW(:)
+    END WHERE
+!
+      IF (LBUDGET_RC) CALL BUDGET (                                               &
+                       UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                                7,'AUTO_BU_RRC')
+      IF (LBUDGET_RR) CALL BUDGET (                                               &
+                       UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                                8,'AUTO_BU_RRR')
+!
+!*       4.3    compute the accretion of r_c for r_r production: RCACCR
+!
+    IF (CSUBG_RC_RR_ACCR=='NONE') THEN
+      !CLoud water and rain are diluted over the grid box
+      WHERE( PRCT(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 )
+        ZZW(:) = MIN( PRCS(:), XFCACCR * PRCT(:)                &
+                 * PLBDAR(:)**XEXCACCR    &
+                 * PRHODREF(:)**(-XCEXVT) )
+        PRCS(:) = PRCS(:) - ZZW(:)
+        PRRS(:) = PRRS(:) + ZZW(:)
+      END WHERE
+
+    ELSEIF (CSUBG_RC_RR_ACCR=='PRFR') THEN
+      !Cloud water is concentrated over its fraction with possibly to parts with high and low content as set for autoconversion
+      !Rain is concnetrated over its fraction
+      !Rain in high content area fraction: PHLC_HCF
+      !Rain in low content area fraction:
+      ! if PRF<PCF (rain is entirely falling in cloud): PRF-PHLC_HCF
+      ! if PRF>PCF (rain is falling in cloud and in clear sky): PCF-PHLC_HCF
+      ! => min(PCF, PRF)-PHLC_HCF
+      ZZW(:) = 0.
+      WHERE( PHLC_HRC(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 &
+            .AND. PHLC_HCF(:)>0 )
+        !Accretion due to rain falling in high cloud content
+        ZZW(:) = XFCACCR * ( PHLC_HRC(:)/PHLC_HCF(:) )     &
+               * PLBDAR_RF(:)**XEXCACCR &
+               * PRHODREF(:)**(-XCEXVT) &
+               * PHLC_HCF
+      END WHERE
+      WHERE( PHLC_LRC(:)>XRTMIN(2) .AND. PRRT(:)>XRTMIN(3) .AND. PRCS(:)>0.0 &
+            .AND. PHLC_LCF(:)>0 )
+        !We add acrretion due to rain falling in low cloud content
+        ZZW(:) = ZZW(:) + XFCACCR * ( PHLC_LRC(:)/PHLC_LCF(:) )     &
+                        * PLBDAR_RF(:)**XEXCACCR &
+                        * PRHODREF(:)**(-XCEXVT) &
+                        * (MIN(PCF(:), PRF(:))-PHLC_HCF(:))
+      END WHERE
+      ZZW(:)=MIN(PRCS(:), ZZW(:))
+      PRCS(:) = PRCS(:) - ZZW(:)
+      PRRS(:) = PRRS(:) + ZZW(:)
+
+    ELSE
+      !wrong CSUBG_RC_RR_ACCR case
+      WRITE(*,*) 'wrong CSUBG_RC_RR_ACCR case'
+            CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_WARM','')
+    ENDIF
+
+    IF (LBUDGET_RC) CALL BUDGET (                                               &
+                     UNPACK(PRCS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              7,'ACCR_BU_RRC')
+    IF (LBUDGET_RR) CALL BUDGET (                                               &
+                     UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              8,'ACCR_BU_RRR')
+!
+!*       4.4    compute the evaporation of r_r: RREVAV
+!
+    ZZW(:) = 0.0
+
+    IF (CSUBG_RR_EVAP=='NONE') THEN
+      !Evaporation only when there's no cloud (RC must be 0)
+       WHERE( (PRRT(:)>XRTMIN(3)) .AND. (PRCT(:)<=XRTMIN(2)) )
+          ZZW(:)  = EXP( XALPW - XBETAW/PZT(:) - XGAMW*ALOG(PZT(:) ) ) ! es_w
+          PUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) )
+                                                        ! Undersaturation over water
+          ZZW(:) = ( XLVTT+(XCPV-XCL)*(PZT(:)-XTT) )**2 / ( PKA(:)*XRV*PZT(:)**2 ) &
+               + ( XRV*PZT(:) ) / ( PDV(:)*ZZW(:) )
+          ZZW(:) = MIN( PRRS(:),( MAX( 0.0,PUSW(:) )/(PRHODREF(:)*ZZW(:)) ) *      &
+            ( X0EVAR*PLBDAR(:)**XEX0EVAR+X1EVAR*PCJ(:)*PLBDAR(:)**XEX1EVAR ) )
+          PRRS(:) = PRRS(:) - ZZW(:)
+          PRVS(:) = PRVS(:) + ZZW(:)
+          PTHS(:) = PTHS(:) - ZZW(:)*PLVFACT(:)
+       END WHERE
+
+    ELSEIF (CSUBG_RR_EVAP=='CLFR' .OR. CSUBG_RR_EVAP=='PRFR') THEN
+      !Evaporation in clear sky part
+      !With CLFR, rain is diluted over the grid box
+      !With PRFR, rain is concentrated in its fraction
+      !Use temperature and humidity in clear sky part like Bechtold et al. (1993)
+      IF (CSUBG_RR_EVAP=='CLFR') THEN
+        ZZW4(:)=1. !Precipitation fraction
+        ZZW3(:)=PLBDAR(:)
+      ELSE
+        ZZW4(:)=PRF(:) !Precipitation fraction
+        ZZW3(:)=PLBDAR_RF(:)
+      ENDIF
+
+      !ATTENTION
+      !Il faudrait recalculer les variables PKA, PDV, PCJ en tenant compte de la température T^u
+      !Ces variables devraient être sorties de rain_ice_slow et on mettrait le calcul de T^u, T^s
+      !et plusieurs versions (comme actuellement, en ciel clair, en ciel nuageux) de PKA, PDV, PCJ dans rain_ice
+      !On utiliserait la bonne version suivant l'option NONE, CLFR... dans l'évaporation et ailleurs
+
+      WHERE(  (PRRT(:)>XRTMIN(3)) .AND. ( ZZW4(:) > PCF(:) ) )
+        ! outside the cloud (environment) the use of T^u (unsaturated) instead of T
+        ! Bechtold et al. 1993
+        !
+        ! T^u = T_l = theta_l * (T/theta)
+        ZZW2(:) =  PTHLT(:) * PZT(:) / PTHT(:)
+        !
+        ! es_w with new T^u
+        ZZW(:)  = EXP( XALPW - XBETAW/ZZW2(:) - XGAMW*ALOG(ZZW2(:) ) )
+        !
+        ! S, Undersaturation over water (with new theta^u)
+        PUSW(:) = 1.0 - PRVT(:)*( PPRES(:)-ZZW(:) ) / ( (XMV/XMD) * ZZW(:) )
+        !
+        ZZW(:) = ( XLVTT+(XCPV-XCL)*(ZZW2(:)-XTT) )**2 / ( PKA(:)*XRV*ZZW2(:)**2 ) &
+               + ( XRV*ZZW2(:) ) / ( PDV(:)*ZZW(:) )
+        !
+        ZZW(:) = MAX( 0.0,PUSW(:) )/(PRHODREF(:)*ZZW(:))  *      &
+               ( X0EVAR*ZZW3(:)**XEX0EVAR+X1EVAR*PCJ(:)*ZZW3(:)**XEX1EVAR )
+        !
+        ZZW(:) = MIN( PRRS(:),  ZZW(:) *( ZZW4(:) - PCF(:) ) )
+        !
+        PRRS(:) = PRRS(:) - ZZW(:)
+        PRVS(:) = PRVS(:) + ZZW(:)
+        PTHS(:) = PTHS(:) - ZZW(:)*PLVFACT(:)
+      END WHERE
+
+    ELSE
+      !wrong CSUBG_RR_EVAP case
+      WRITE(*,*) 'wrong CSUBG_RR_EVAP case'
+      CALL PRINT_MSG(NVERB_FATAL,'GEN','RAIN_ICE_WARM','')
+    END IF
+
+    IF (LBUDGET_TH) CALL BUDGET (                                               &
+                 UNPACK(PTHS(:),MASK=OMICRO(:,:,:),FIELD=PTHS3D)*PRHODJ3D(:,:,:),   &
+                                                              4,'REVA_BU_RTH')
+    IF (LBUDGET_RV) CALL BUDGET (                                               &
+                 UNPACK(PRVS(:),MASK=OMICRO(:,:,:),FIELD=PRVS3D)*PRHODJ3D(:,:,:),   &
+                                                              6,'REVA_BU_RRV')
+    IF (LBUDGET_RR) CALL BUDGET (                                               &
+                     UNPACK(PRRS(:)*PRHODJ(:),MASK=OMICRO(:,:,:),FIELD=0.0),    &
+                                                              8,'REVA_BU_RRR')
+    PEVAP3D(:,:,:)=UNPACK(ZZW(:),MASK=OMICRO(:,:,:),FIELD=PEVAP3D(:,:,:))
+!
+  END SUBROUTINE RAIN_ICE_WARM
+
+END MODULE MODE_RAIN_ICE_WARM
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 8f4e4835a34e939884aa517bc353b000a844383b..047a7618837fe20f15acf3aa2ad4595b807d3bff 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1998-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.
 !-----------------------------------------------------------------
 !     #################################
@@ -10,7 +10,7 @@ INTERFACE
 SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,TPPRE_REAL1,HGRIB,TPPGDFILE,    &
                     PTIME_HORI,KVERB,ODUMMY_REAL                         ) 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 CHARACTER(LEN=4),  INTENT(IN)    :: HFILE       ! which file ('ATM0','ATM1' or 'CHEM')
 TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPPRE_REAL1 ! PRE_REAL1 file
@@ -75,7 +75,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     : contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_PGDDIM    : contains dimension of PGD fields
 !!         NPGDIMAX: dimension along x (no external point)
 !!         NPGDJMAX: dimension along y (no external point)
@@ -128,17 +128,20 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!         Pergaud  : 2018 add GFS
 !!                   01/2019 (G.Delautier via Q.Rodier) for GRIB2 ARPEGE and AROME from EPYGRAM
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  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
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !------------
 !
 USE MODE_DATETIME
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_ll, ONLY: UPCASE
+USE MODE_IO_FILE,    ONLY: IO_File_close
 USE MODE_MSG
 USE MODE_TIME
 USE MODE_THERMO
+USE MODE_TOOLS, ONLY: UPCASE
 !
 USE MODI_READ_HGRID_n
 USE MODI_READ_VER_GRID
@@ -152,7 +155,8 @@ USE MODI_CH_AER_INIT_SOA
 USE MODI_INI_CTURB
 USE MODI_CH_OPEN_INPUT
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
+USE MODD_FIELD_n, ONLY: XZWS, XZWS_DEFAULT
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
@@ -282,6 +286,7 @@ INTEGER  :: ITIME
 INTEGER  :: IDATE
 INTEGER  :: ITIMESTEP
 CHARACTER(LEN=10) :: CSTEPUNIT
+CHARACTER(LEN=15)  :: YVAL
 !chemistery field
 CHARACTER(LEN=16)                  :: YPRE_MOC="PRE_MOC1.nam"
 INTEGER, DIMENSION(:), ALLOCATABLE :: INUMGRIB, INUMLEV  ! grib
@@ -325,6 +330,7 @@ INTEGER                            :: IMI
 TYPE(TFILEDATA),POINTER             :: TZFILE
 INTEGER, DIMENSION(JP_GFS)    :: IP_GFS   ! list of pressure levels for GFS model
 INTEGER :: IVERSION,ILEVTYPE
+LOGICAL                                       :: GFIND  ! to test if sea wave height is found
 !---------------------------------------------------------------------------------------
 IP_GFS=(/1000,975,950,925,900,850,800,750,700,650,600,550,500,450,400,350,300,&
            250,200,150,100,70,50,30,20,10/)!
@@ -387,7 +393,7 @@ ALLOCATE (ZYOUT(INO))
 IF (HFILE(1:3)=='ATM' .OR. HFILE=='CHEM') THEN
   WRITE (ILUOUT0,'(A,A4)') ' -- Grib reader started for ',HFILE
 ELSE
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','bad input argument')
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE','bad input argument')
 END IF
 !
 !* 2.1 Charge in memory the grib messages
@@ -395,16 +401,14 @@ END IF
 ! open grib file
 CALL GRIB_OPEN_FILE(IUNIT,HGRIB,'R',IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  !callabortstop
   WRITE(YMSG,*) 'Error opening the grib file ',TRIM(HGRIB),', error code ', IRET_GRIB
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 ! count the messages in the file
 CALL GRIB_COUNT_IN_FILE(IUNIT,ICOUNT,IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  !callabortstop
   WRITE(YMSG,*) 'Error in reading the grib file ',TRIM(HGRIB),', error code ', IRET_GRIB
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 ALLOCATE(IGRIB(ICOUNT))
 ! initialize the tabular with a negativ number 
@@ -414,9 +418,8 @@ IGRIB(:)=-12
 DO JLOOP=1,ICOUNT
 CALL GRIB_NEW_FROM_FILE(IUNIT,IGRIB(JLOOP),IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  !callabortstop
   WRITE(YMSG,*) 'Error in reading the grib file - ILOOP=',JLOOP,' - error code ', IRET_GRIB
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 END DO
 ! close the grib file
@@ -429,15 +432,13 @@ CALL GRIB_CLOSE_FILE(IUNIT)
 !
 CALL GRIB_GET(IGRIB(1),'centre',ICENTER,IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  !callabortstop
   WRITE(YMSG,*) 'Error in reading center - error code ', IRET_GRIB
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 CALL GRIB_GET(IGRIB(1),'typeOfGrid',HGRID,IRET_GRIB)
 IF (IRET_GRIB /= 0) THEN
-  !callabortstop
   WRITE(YMSG,*) 'Error in reading type of grid - error code ', IRET_GRIB
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
 END IF
 !
 IMODEL = -1
@@ -489,8 +490,7 @@ SELECT CASE (ICENTER)
     ALLOCATE(ZPARAM(6))
 END SELECT
 IF (IMODEL==-1) THEN
-!callabortstop
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','unsupported Grib file format')
+  CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE','unsupported Grib file format')
 END IF
 !
 !---------------------------------------------------------------------------------------
@@ -565,6 +565,56 @@ ELSE IF (HFILE=='CHEM') THEN
 END IF
 DEALLOCATE (ZOUT)
 !
+! *** BEGIN MODIF SB ADD HS ***
+!---------------------------------------------------------------------------------------
+!* 2.3 bis Read and interpol Sea Wave significant height
+!---------------------------------------------------------------------------------------
+WRITE (ILUOUT0,'(A)') ' | Searching sea wave significant height'
+SELECT CASE (IMODEL)
+  CASE(0) ! ECMWF
+    ALLOCATE (XZWS(IIU,IJU))
+    GFIND=.FALSE.
+    !    
+    CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=140229)
+    IF(INUM < 0) THEN
+      CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=229)
+      !
+      IF(INUM < 0) THEN
+        WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+        WRITE (ILUOUT0,'(A)')' | !!! WARNING !!! Sea wave height is missing in '// &
+               'the GRIB file - the default value of '//TRIM(YVAL)//' meters is used'
+        XZWS = XZWS_DEFAULT
+      ELSE
+        GFIND=.TRUE.
+      END IF
+    ELSE
+      GFIND=.TRUE. 
+    END IF
+  !
+  IF(GFIND) THEN
+    !!!!!!!!!!! Faire en sorte de le faire que pour le CASE(0)
+    ! Sea wave significant height disponible uniquement pour ECMWF
+    ! recuperation du tableau de valeurs
+    CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
+    ALLOCATE(IINLO(INJ))
+    CALL COORDINATE_CONVERSION(IMODEL,IGRIB(INUM),IIU,IJU,ZLONOUT,ZLATOUT,&
+          ZXOUT,ZYOUT,INI,ZPARAM,IINLO)
+    ALLOCATE(ZVALUE(ISIZE))
+    CALL GRIB_GET(IGRIB(INUM),'values',ZVALUE)
+    ! Change 9999 value to -1
+    WHERE(ZVALUE.EQ.9999.) ZVALUE=0.
+    ALLOCATE(ZOUT(INO))
+    CALL HORIBL(ZPARAM(3),ZPARAM(4),ZPARAM(5),ZPARAM(6),INT(ZPARAM(2)),IINLO,INI, &
+              ZVALUE,INO,ZXOUT,ZYOUT,ZOUT,.FALSE.,PTIME_HORI,.FALSE.)
+    DEALLOCATE(IINLO)
+    DEALLOCATE(ZVALUE)
+    ! Stores the field in a 2 dimension array
+    CALL ARRAY_1D_TO_2D (INO,ZOUT,IIU,IJU,XZWS)
+    DEALLOCATE (ZOUT)
+  END IF
+END SELECT
+  ! *** END MODIF SB ADD HS ***
+!
 !---------------------------------------------------------------------------------------
 !* 2.4 Interpolation surface pressure
 !---------------------------------------------------------------------------------------
@@ -583,11 +633,7 @@ SELECT CASE (IMODEL)
   CASE(10) ! NCEP
       CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=134)
 END SELECT
-IF(INUM < 0) THEN
-   WRITE (ILUOUT0,'(A)')'Surface pressure is missing - abort'
-   CALL ABORT
-   STOP
-ENDIF 
+IF( INUM < 0 ) call Print_msg( NVERB_FATAL, 'IO', 'READ_ALL_DATA_GRIB_CASE', 'surface pressure is missing' )
 ! recuperation du tableau de valeurs
 CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
 ALLOCATE(ZVALUE(ISIZE))
@@ -616,13 +662,12 @@ CALL GRIB_GET(IGRIB(INUM_ZS),'Nj',INJ_ZS)
 !
 IF ( HGRID(1:7)=='regular' .AND. HGRID_ZS(1:7)=='reduced' .AND.&
      INJ == INJ_ZS) THEN
-   WRITE (ILUOUT0,'(A)')'HGRID(1:7)==regular .AND. HGRID_ZS(1:7)==reduced .AND. INJ == INJ_ZS - abort'
-   CALL ABORT
-   STOP
+  call Print_msg( NVERB_FATAL, 'IO', 'READ_ALL_DATA_GRIB_CASE', &
+                  'HGRID(1:7)==regular .AND. HGRID_ZS(1:7)==reduced .AND. INJ == INJ_ZS' )
 ELSE
    ALLOCATE(ZWORK_LNPS(SIZE(ZLNPS_G)))
    ZWORK_LNPS(:) = ZLNPS_G(:)
-ENDIF   
+ENDIF
 !
 IF (HFILE(1:3)=='ATM') THEN
   ALLOCATE (XPS_LS(IIU,IJU))
@@ -682,33 +727,17 @@ IF (IMODEL/=10) THEN
     ISTARTLEVEL=0
     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ISTARTLEVEL)
   ENDIF
-  IF(INUM < 0) THEN
-    WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
-    CALL ABORT
-    STOP
-  ENDIF      
+  IF(INUM < 0) call Print_msg( NVERB_FATAL, 'IO', 'READ_ALL_DATA_GRIB_CASE', 'air temperature is missing' )
   CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ISTARTLEVEL)
-  IF(INUM < 0) THEN
-    WRITE (ILUOUT0,'(A)')'Atmospheric specific humidity is missing - abort'
-    CALL ABORT
-    STOP
-  ENDIF 
+  IF(INUM < 0) call Print_msg( NVERB_FATAL, 'IO', 'READ_ALL_DATA_GRIB_CASE', 'atmospheric specific humidity is missing' )
 ELSE ! NCEP
   ISTARTLEVEL=10
   IT=130
   IQ=157
   CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ISTARTLEVEL)
-  IF(INUM < 0) THEN
-    WRITE (ILUOUT0,'(A)')'Air temperature is missing - abort'
-    CALL ABORT
-    STOP
-  ENDIF      
+  IF(INUM < 0) call Print_msg( NVERB_FATAL, 'IO', 'READ_ALL_DATA_GRIB_CASE', 'air temperature is missing' )
   CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ISTARTLEVEL)
-  IF(INUM < 0) THEN
-    WRITE (ILUOUT0,'(A)')'Atmospheric relative humidity is missing - abort'
-    CALL ABORT
-    STOP
-  ENDIF 
+  IF(INUM < 0) call Print_msg( NVERB_FATAL, 'IO', 'READ_ALL_DATA_GRIB_CASE', 'atmospheric relative humidity is missing' )
 ENDIF
 !
 IF (IMODEL/=10) THEN ! others than NCEP
@@ -727,16 +756,14 @@ IF (IMODEL/=10) THEN ! others than NCEP
     ILEV1 = JLOOP1-1+ISTARTLEVEL
     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ILEV1)
     IF (INUM< 0) THEN
-    !callabortstop
       WRITE(YMSG,*) 'atmospheric humidity level ',JLOOP1,' is missing'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'values',ZQ_G(:,INLEVEL-JLOOP1+1))
     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ILEV1)
     IF (INUM< 0) THEN
-      !callabortstop
       WRITE(YMSG,*) 'atmospheric temperature level ',JLOOP1,' is missing'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'values',ZT_G(:,INLEVEL-JLOOP1+1))
     CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
@@ -746,17 +773,15 @@ ELSE ! NCEP
     ILEV1 = IP_GFS(JLOOP1)
     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IQ,KLEV1=ILEV1)
     IF (INUM< 0) THEN
-    !callabortstop
       WRITE(YMSG,*) 'atmospheric humidity level ',JLOOP1,' is missing'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'values',ZQ_G(:,JLOOP1),IRET_GRIB)
     WRITE (ILUOUT0,*) 'Q ',ILEV1,IRET_GRIB
     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IT,KLEV1=ILEV1)
     IF (INUM< 0) THEN
-      !callabortstop
       WRITE(YMSG,*) 'atmospheric temperature level ',JLOOP1,' is missing'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'values',ZT_G(:,JLOOP1),IRET_GRIB)
     WRITE (ILUOUT0,*) 'T ',ILEV1,IRET_GRIB
@@ -793,8 +818,7 @@ IF (IMODEL/=10) THEN ! others than NCEP
        ALLOCATE(ZPV(IPV))
        CALL GRIB_GET(IGRIB(INUM),'pv',ZPV)
     ELSE
-       !callabortstop
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','there is no PV value in this message')
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE','there is no PV value in this message')
     ENDIF
     SELECT CASE (IMODEL)
       CASE (0,3,4,6,7)
@@ -822,8 +846,7 @@ IF (IMODEL/=10) THEN ! others than NCEP
         END DO
     END SELECT
   ELSE
-   !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','level definition section is missing')
+    CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE','level definition section is missing')
   END IF
 ELSE
   ALLOCATE (XA_LS(INLEVEL))
@@ -1073,9 +1096,8 @@ IF (NRR >1) THEN
         CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1)
 
         IF (INUM < 0) THEN
-          !callabortstop
           WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
-          CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+          CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
         END IF
         CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
         ALLOCATE(ZVALUE(ISIZE))
@@ -1095,9 +1117,8 @@ IF (NRR >1) THEN
       CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=6,KNUMBER=6,KLEV1=ILEV1)
 
       IF (INUM < 0) THEN
-        !callabortstop
         WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+        CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
       END IF
       CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
       ALLOCATE(ZVALUE(ISIZE))
@@ -1115,9 +1136,8 @@ IF (NRR >1) THEN
       CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=85,KLEV1=ILEV1)
 
       IF (INUM < 0) THEN
-        !callabortstop
         WRITE(YMSG,*) 'Specific ratio for rain at level ',JLOOP1,' is missing'
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+        CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
       END IF
       CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
       ALLOCATE(ZVALUE(ISIZE))
@@ -1135,9 +1155,8 @@ IF (NRR >1) THEN
       ILEV1 = JLOOP1-1+ISTARTLEVEL
       CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=82,KLEV1=ILEV1)
       IF (INUM < 0) THEN
-        !callabortstop
         WRITE(YMSG,*) 'Specific ratio for ICE at level ',JLOOP1,' is missing'
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+        CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
       END IF
       CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
       ALLOCATE(ZVALUE(ISIZE))
@@ -1155,9 +1174,8 @@ IF (NRR >1) THEN
       ILEV1 = JLOOP1-1+ISTARTLEVEL
       CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=86,KLEV1=ILEV1)
       IF (INUM < 0) THEN
-        !callabortstop
         WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+        CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
       END IF
       CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
       ALLOCATE(ZVALUE(ISIZE))
@@ -1175,9 +1193,8 @@ IF (NRR >1) THEN
       ILEV1 = JLOOP1-1+ISTARTLEVEL
       CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=1,KNUMBER=32,KLEV1=ILEV1)
       IF (INUM < 0) THEN
-        !callabortstop
         WRITE(YMSG,*) 'Specific ratio ',IPAR,' at level ',JLOOP1,' is missing'
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+        CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
       END IF
       CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
       ALLOCATE(ZVALUE(ISIZE))
@@ -1202,9 +1219,8 @@ IF (CTURB=='TKEL') THEN
       CALL SEARCH_FIELD(IGRIB,INUM,KDIS=0,KCAT=19,KNUMBER=11,KLEV1=ILEV1)
     END IF
     IF (INUM <  0) THEN
-      !callabortstop
       WRITE(YMSG,*) 'TKE at level ',JLOOP1,' is missing'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
     ALLOCATE(ZVALUE(ISIZE))
@@ -1241,8 +1257,7 @@ IF (IMODEL==5) THEN
     DEALLOCATE(XSV_LS)
     ALLOCATE (XSV_LS(IIU,IJU,INLEVEL,NSV))
   ELSE
-    !callabortstop
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE','Mocage model: Bad input argument in read_all_data_grib_case')
+    CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE','Mocage model: Bad input argument in read_all_data_grib_case')
   END IF
   XSV_LS(:,:,:,:) = 0.
   ILEV1=-1
@@ -1282,7 +1297,7 @@ IF (IMODEL==5) THEN
   ENDIF
   !
   ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
   !
   !*  2.6.2   exchange mocage values onto prognostic variables XSV_LS
@@ -1302,9 +1317,8 @@ IF (IMODEL==5) THEN
         ILEV1 = JLOOP1
         CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=INUMGRIB(JN),KLEV1=ILEV1)
         IF (INUM <  0) THEN
-          !callabortstop
           WRITE(YMSG,*) 'Atmospheric ',INUMGRIB(JN),' grib chemical species level ',JLOOP1,' is missing'
-          CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+          CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
         END IF
         CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
         ALLOCATE(IINLO(INJ))
@@ -1405,9 +1419,8 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   ! read component u 
   CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1)
   IF (INUM < 0) THEN
-    !callabortstop
     WRITE(YMSG,*) 'wind vector component "u" at level ',JLOOP1,' is missing'
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+    CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
   ALLOCATE(ZVALUE(ISIZE))
@@ -1437,9 +1450,8 @@ DO JLOOP1 = ISTARTLEVEL, ISTARTLEVEL+INLEVEL-1
   END IF
   CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR+1,KLEV1=ILEV1)
   IF (INUM < 0) THEN
-    !callabortstop
     WRITE(YMSG,*) 'wind vector component "v" at level ',JLOOP1,' is missing'
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+    CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   CALL GRIB_GET_SIZE(IGRIB(INUM),'values',ISIZE)
   ALLOCATE(ZVALUE(ISIZE))
@@ -1660,7 +1672,7 @@ IF (ODUMMY_REAL) THEN
   !*       2.10.1   read 2D dummy fields
   !
   ! close file
-  CALL IO_FILE_CLOSE_ll(TPPRE_REAL1)
+  CALL IO_File_close(TPPRE_REAL1)
   ! open input file
   CALL CH_OPEN_INPUT(TPPRE_REAL1%CNAME, "DUMMY_2D", TZFILE, ILUOUT0, KVERB)
   ICHANNEL = TZFILE%NLU
@@ -1727,7 +1739,7 @@ IF (ODUMMY_REAL) THEN
     !
   END DO
   !
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
   !
   IF (NVERB>=10) THEN
@@ -1740,9 +1752,8 @@ IF (ODUMMY_REAL) THEN
   !
   IF (IVAR /= IMOC) THEN
     WRITE (ILUOUT0,'(A,I3,A,I3,A)') ' -> Number of correct lines (',IVAR,') is different of ',IMOC,' - abort'
-   !callabortstop
     WRITE(YMSG,*) 'number of correct lines (',IVAR,') is different of ',IMOC
-    CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+    CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
   END IF
   !
   !* 2.10.2 read and interpolate variables onto dummy variables XDUMMY_2D
@@ -1752,9 +1763,8 @@ IF (ODUMMY_REAL) THEN
     CALL SEARCH_FIELD(IGRIB,INUM,KPARAM=IPAR,KLEV1=ILEV1)
     IF (INUM < 0) THEN
       WRITE (ILUOUT0,'(A,I3,A,I2,A)') ' -> 2D field ',INUMGRIB(JI),' is missing - abort'
-      !callabortstop
       WRITE(YMSG,*) '2D field ',INUMGRIB(JI),' is missing'
-      CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_ALL_DATA_GRIB_CASE',YMSG)
+      CALL PRINT_MSG(NVERB_FATAL,'IO','READ_ALL_DATA_GRIB_CASE',YMSG)
     END IF
     CALL GRIB_GET(IGRIB(INUM),'Nj',INJ,IRET_GRIB)
     ALLOCATE(IINLO(INJ))
@@ -1829,7 +1839,6 @@ INTEGER                 :: JLOOP2_A1T2
 INTEGER                 :: JPOS_A1T2
 !
 IF (KN1 < KL1*KL2) THEN
- !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','ARRAY_1D_TO_2D','sizes do not match')
 END IF
 JPOS_A1T2 = 1
@@ -1854,8 +1863,6 @@ SUBROUTINE SEARCH_FIELD(KGRIB,KNUM,KPARAM,KDIS,KCAT,KNUMBER,KLEV1)
 USE MODD_LUNIT
 USE GRIB_API
 !
-USE MODE_IO_ll
-!
 IMPLICIT NONE
 !
 !
@@ -1882,14 +1889,15 @@ INTEGER :: ILUOUT0   ! Logical unit number of the listing
 ILUOUT0 = TLUOUT0%NLU
 !
 ISEARCH=0
+! Initialize as not found
+KNUM = -1
+!
 IF (PRESENT(KPARAM)) ISEARCH=ISEARCH+1
 IF (PRESENT(KDIS)) ISEARCH=ISEARCH+1
 IF (PRESENT(KCAT)) ISEARCH=ISEARCH+1
 IF (PRESENT(KNUMBER)) ISEARCH=ISEARCH+1
 IF (PRESENT(KLEV1)) ISEARCH=ISEARCH+1
-
-
-
+!
 DO JLOOP=1,SIZE(KGRIB)
       IFOUND = 0
       ! 
@@ -1982,16 +1990,15 @@ DO JLOOP=1,SIZE(KGRIB)
           CYCLE
         ENDIF
       ENDIF
-      ! 
+      !
       IF (IFOUND == ISEARCH) THEN
           KNUM=JLOOP
           EXIT
       ELSE  ! field not found
           KNUM=-1
       END IF
- 
 END DO
-
+!
 END SUBROUTINE SEARCH_FIELD
 !#################################################################################
 SUBROUTINE COORDINATE_CONVERSION(KMODEL,KGRIB,KNOLON,KNOLARG,&
diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90
index 0b619c2a13c02f3d698c93e9e32f93cb49da2153..01c538421733253be7d23140abe417bd99ff1add 100644
--- a/src/MNH/read_all_data_mesonh_case.f90
+++ b/src/MNH/read_all_data_mesonh_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -10,7 +10,7 @@ INTERFACE
       SUBROUTINE READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1,HFMFILE,TPPGDFILE, &
                               HDAD_NAME                                   )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TZPRE_REAL1 !PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(IN)    :: HFMFILE    ! name of the Mesonh input file
@@ -111,9 +111,8 @@ END MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_IO_FILE,       only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 USE MODI_READ_GRID_TIME_MESONH_CASE ! interface modules
@@ -128,7 +127,7 @@ USE MODI_ZS_BOUNDARY
 !
 USE MODD_CONF           ! declaration modules
 USE MODD_CONF_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAM_n
 USE MODD_LUNIT
 USE MODD_LUNIT_n
@@ -221,9 +220,9 @@ ZRES    = XRES
 YOUTFILE=CINIFILE
 CINIFILE=HFMFILE
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_REAL1)
+CALL IO_File_close(TZPRE_REAL1)
 CALL INIT_MNH
-CALL IO_FILE_OPEN_ll(TZPRE_REAL1)
+CALL IO_File_open(TZPRE_REAL1)
 !
 CINIFILE=YOUTFILE
 !
@@ -306,14 +305,14 @@ CALL READ_PRC_FMFILE(IIINF_LS,IISUP_LS,IJINF_LS,IJSUP_LS                     )
 !                 ---------
 !
 ALLOCATE(XZS(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
-CALL IO_READ_FIELD(TPPGDFILE,'ZS',XZS)
+CALL IO_Field_read(TPPGDFILE,'ZS',XZS)
 CALL ZS_BOUNDARY(XZS,XZS_LS)
 !
 ALLOCATE(XZSMT(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
 IF (TPPGDFILE%NMNHVERSION(1)<4 .OR. (TPPGDFILE%NMNHVERSION(1)==4 .AND. TPPGDFILE%NMNHVERSION(2)<=6)) THEN
   XZSMT = XZS
 ELSE
-  CALL IO_READ_FIELD(TPPGDFILE,'ZSMT',XZSMT)
+  CALL IO_Field_read(TPPGDFILE,'ZSMT',XZSMT)
 END IF 
 CALL ZS_BOUNDARY(XZSMT,XZSMT_LS)
 !
diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index 23bf979a709323cd5287553be47e3d15d46d4087..778b9e29c97c92e0e4d788fff847280ba6944660 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2012-2017 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-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.
 !-----------------------------------------------------------------
 !     ################################
@@ -10,7 +10,7 @@ INTERFACE
 SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, &
                                       PTIME_HORI,KVERB,ODUMMY_REAL ) 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file
 CHARACTER(LEN=28),  INTENT(IN)    :: HFILE      ! name of the NETCDF file
@@ -71,7 +71,7 @@ END MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     : contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_PGDDIM    : contains dimension of PGD fields
 !!         NPGDIMAX: dimension along x (no external point)
 !!         NPGDJMAX: dimension along y (no external point)
@@ -83,6 +83,8 @@ END MODULE MODI_READ_CHEM_DATA_NETCDF_CASE
 !!      Original    23/01/12 (C. Mari) 
 !!      A. Berger   20/03/12 adapt whatever the chemical mechanism in BASIC
 !!      P. Wautelet 30/10/17 use F90 module for netCDF
+!!      J.Pianezzej 13/02/2019 : correction for use of MEGAN
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -99,26 +101,26 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY: TFILEDATA
+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
 !
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_IO_FILE,    only: IO_File_close
 USE MODE_MPPDB
 USE MODE_THERMO
 USE MODE_TIME
+USE MODE_TOOLS,      ONLY: UPCASE
 !
 USE MODI_CH_AER_INIT_SOA
 USE MODI_CH_INIT_SCHEME_n
-USE MODI_CH_OPEN_INPUT  
+USE MODI_CH_OPEN_INPUT
 USE MODI_HORIBL
 USE MODI_INI_NSV
 USE MODI_READ_HGRID_n
@@ -188,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 
@@ -389,7 +391,7 @@ ELSEIF (CDUMMY1=="12") THEN
        itimeindex=2
 ELSEIF (CDUMMY1=="18") THEN
        itimeindex=3
-ELSEIF (CDUMMY1=="24") THEN
+ELSEIF ((CDUMMY1=="24").OR.(CDUMMY1=="00")) THEN
        itimeindex=4
 ENDIF
  start3d(4) = itimeindex
@@ -728,7 +730,7 @@ if (status /= nf90_noerr) call handle_err(status)
 
 ! close
 ! file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 
 
 !-------------------------------------------------------------
@@ -760,15 +762,18 @@ WRITE (ILUOUT0,'(A,A4,A)') ' -- netcdf decoder for ',HFILE,' file ended successf
 !
 CONTAINS
 !
-!     #############################
-      SUBROUTINE HANDLE_ERR(STATUS)
-!     #############################
-     INTEGER(KIND=IDCDF_KIND) STATUS
-     IF (STATUS .NE. NF90_NOERR) THEN
-        PRINT *, NF90_STRERROR(STATUS)
-     STOP 'Stopped'
-     ENDIF
-     END SUBROUTINE HANDLE_ERR
+! #############################
+  subroutine handle_err(status)
+! #############################
+    use mode_msg
+
+    integer(kind=CDFINT) status
+
+    if ( status /= NF90_NOERR ) then
+      call Print_msg( NVERB_FATAL, 'IO', 'HANDLE_ERR', NF90_STRERROR(status) )
+    end if
+
+  end subroutine handle_err
 !
 !
 !     #############################################
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 86cde7c7452ef41297279fee4a21aabe068e89fa..294bafd4550f4587cd8e8d6d913b82d3aee35b64 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -22,7 +22,7 @@ INTERFACE
                    KRIMX,KRIMY,KSV_USER,                                         &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,HEQNSYS     )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
 INTEGER,            INTENT(IN)  :: KMI    ! Model index
@@ -196,7 +196,7 @@ END MODULE MODI_READ_DESFM_n
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_IO_ll,   ONLY: NVERB_FATAL, TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/read_dummy_gr_fieldn.f90 b/src/MNH/read_dummy_gr_fieldn.f90
index be766bd67b5efec20925e2b75e27a9a556ddf911..cd3e1b1570fff1d8f23d33a82dc91a0a92efe3e4 100644
--- a/src/MNH/read_dummy_gr_fieldn.f90
+++ b/src/MNH/read_dummy_gr_fieldn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE READ_DUMMY_GR_FIELD_n(TPINIFILE,KIINF,KISUP,KJINF,KJSUP,OREAD_ALL)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 !*       0.1   declarations of arguments
 !
@@ -74,12 +74,12 @@ END MODULE MODI_READ_DUMMY_GR_FIELD_n
 !*       0.    DECLARATIONS
 !
 USE MODD_DUMMY_GR_FIELD_n
-USE MODE_FIELD,      ONLY : TFIELDDATA,TYPEINT,TYPEREAL
+USE MODE_FIELD,         ONLY: TFIELDDATA, TYPEINT, TYPEREAL
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT, NMNHNAMELGTMAX
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_PARAMETERS,    ONLY: JPHEXT, NMNHNAMELGTMAX
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -134,8 +134,8 @@ ELSE
   IJINF = KJINF
   IJSUP = KJSUP
   !
-  CALL IO_READ_FIELD(TPINIFILE,'IMAX',IIWORK)
-  CALL IO_READ_FIELD(TPINIFILE,'JMAX',IJWORK)
+  CALL IO_Field_read(TPINIFILE,'IMAX',IIWORK)
+  CALL IO_Field_read(TPINIFILE,'JMAX',IJWORK)
   !
   ALLOCATE(ZWORK(IIWORK+2*JPHEXT,IJWORK+2*JPHEXT))
 END IF
@@ -158,7 +158,7 @@ IF (TPINIFILE%NMNHVERSION(1)>=4) THEN
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,NDUMMY_GR_NBR,IRESP)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,NDUMMY_GR_NBR,IRESP)
   !
   IF (IRESP/=0) THEN
     !callabortstop
@@ -189,7 +189,7 @@ DO JDUMMY=1,NDUMMY_GR_NBR
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
   !
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZWORK(:,:),IRESP)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,ZWORK(:,:),IRESP)
   !
   IF (IRESP/=0) THEN
     !callabortstop
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index e8f0e9d738b2c9c6fe179715410d8ec5850e9f33..075e87d75cd8d9fa54a8e620bd48956803a021dd 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -23,7 +23,7 @@ INTERFACE
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
                    HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD                    )
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 !
 INTEGER,            INTENT(IN) :: KMI    ! Model index
 TYPE(TFILEDATA),    INTENT(IN) :: TPEXSEGFILE ! EXSEG file
@@ -291,6 +291,8 @@ END MODULE MODI_READ_EXSEG_n
 !!      Modification   01/2019   (Q. Rodier) define XCEDIS depending on BL89 or RM17 mixing length
 !!      Modification   01/2019   (P. Wautelet) bugs correction: incorrect writes
 !!      Modification   01/2019   (R. Honnert) remove SURF in CMF_UPDRAFT
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -299,7 +301,7 @@ USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_CONFZ
 USE MODD_CONF_n,  ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_VAR_ll,  ONLY: NPROC
 !
@@ -352,7 +354,6 @@ USE MODD_GET_n
 USE MODD_GR_FIELD_n
 !
 USE MODE_POS
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_TEST_NAM_VAR
@@ -1030,7 +1031,7 @@ SELECT CASE ( CCLOUD )
       WRITE(UNIT=ILUOUT,FMT='("YOU WANT TO USE A 2-MOMENT MICROPHYSICAL ",  &
            &" SCHEME BUT YOU DIDNT FILL CORRECTLY NAM_PARAM_LIMA",             &
            &" YOU HAVE TO FILL FINI_CCN ")')
-      STOP
+      call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' )
     END IF
 !
     IF(LACTI .AND. NMOD_CCN == 0) THEN
@@ -1038,7 +1039,7 @@ SELECT CASE ( CCLOUD )
       WRITE(UNIT=ILUOUT,FMT='("ACTIVATION OF AEROSOL PARTICLES IS NOT ",      &
            &"POSSIBLE IF NMOD_CCN HAS VALUE ZERO. YOU HAVE TO SET AN UPPER ", &
            &"VALUE OF NMOD_CCN IN ORDER TO USE LIMA WARM ACTIVATION SCHEME.")') 
-      STOP
+      call Print_msg( NVERB_FATAL, 'GEN', 'READ_EXSEG_n', '' )
     END IF
 !
     IF(LNUCL .AND. NMOD_IFN == 0 .AND. (.NOT.LMEYERS)) THEN
@@ -1418,6 +1419,12 @@ ELSE
   END IF
 END IF
 !
+IF(CTURBLEN=='RM17') THEN
+  XCEDIS=0.34
+ELSE
+  XCEDIS=0.84
+END IF
+!
 !*       3.3  Moist turbulence
 !
 IF ( LUSERC .AND. CTURB /= 'NONE' ) THEN
@@ -1739,6 +1746,7 @@ END IF
 IF (LSALT) THEN
   IF (OSALT) THEN
     CGETSVT(NSV_SLTBEG:NSV_SLTEND)='READ'
+    CGETZWS='READ'
 !   IF(CCONF=='START') CGETSVT(NSV_SLTBEG:NSV_SLTEND)='INIT'
   ELSE
     WRITE(UNIT=ILUOUT,FMT=9001) KMI
@@ -1746,6 +1754,7 @@ IF (LSALT) THEN
          &SCHEME IN INITIAL FMFILE",/,&
          & "THE SALT VARIABLES HAVE BEEN INITIALIZED TO ZERO ")') 
     CGETSVT(NSV_SLTBEG:NSV_SLTEND)='INIT'
+    CGETZWS='INIT'
   END IF
   IF (LDEPOS_SLT(KMI)) THEN
 
@@ -1770,9 +1779,9 @@ IF (LSALT) THEN
     CGETSVT(NSV_SLTDEPBEG:NSV_SLTDEPEND)='INIT'    
    END IF
   END IF
-  IF(NMODE_SLT.GT.3 .OR. NMODE_SLT.LT.1) THEN
+  IF(NMODE_SLT.GT.5 .OR. NMODE_SLT.LT.1) THEN
     WRITE(UNIT=ILUOUT,FMT=9003) KMI
-    WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 3 ")') 
+    WRITE(UNIT=ILUOUT,FMT='("SALT MODES MUST BE BETWEEN 1 and 5 ")') 
  !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_EXSEG_n','')
   END IF     
@@ -1806,7 +1815,7 @@ IF (LSALT) THEN
     IF(.NOT.ALLOCATED(CDESLTNAMES)) THEN
       ALLOCATE(CDESLTNAMES(NMODE_SLT*2))
       DO JMODE=1,NMODE_SLT  
-        IMODEIDX=JPDUSTORDER(JMODE)
+        IMODEIDX=JPSALTORDER(JMODE)
         CDESLTNAMES(JMODE) = YPDESLT_INI(IMODEIDX)
         CDESLTNAMES(NMODE_SLT+JMODE) = YPDESLT_INI(NMODE_SLT+IMODEIDX)
       ENDDO
diff --git a/src/MNH/read_exspa.f90 b/src/MNH/read_exspa.f90
index 4ca2bb66d8340c77e30723e2a2d109702ceba621..f2b15fa20424d42bb1a3d96e232ad0ad479b5926 100644
--- a/src/MNH/read_exspa.f90
+++ b/src/MNH/read_exspa.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.
 !-----------------------------------------------------------------
 !######################
@@ -94,6 +94,7 @@ END MODULE MODI_READ_EXSPA
 !!      Modification 30/03/12  (S.Bielli) add NAM_NCOUT for netcdf output (removed 08/07/2016)
 !!      Modification 08/07/2016 (P.Wautelet) removed MNH_NCWRIT define
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !
 !-------------------------------------------------------------------------------
 !
@@ -101,13 +102,13 @@ END MODULE MODI_READ_EXSPA
 !               ------------
 !
 USE MODD_CONF
-USE MODD_IO_ll,   ONLY : TFILEDATA,TFILE_OUTPUTLISTING
+USE MODD_IO,      ONLY : TFILEDATA,TFILE_OUTPUTLISTING
 USE MODD_LUNIT_n, ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS
 !
-USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO,               only: IO_Config_set
+USE MODE_IO_FILE,          only: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_POS
 USE MODE_MODELN_HANDLER
 !
@@ -201,17 +202,16 @@ YSPANBR     = '00'
 YDADINIFILE = ' '
 YDADSPAFILE = ' '
 !
-LUNIT_MODEL(2)%CLUOUT = 'OUTPUT_LISTING2'
-CALL IO_FILE_ADD2LIST(LUNIT_MODEL(2)%TLUOUT,LUNIT_MODEL(2)%CLUOUT,'OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(LUNIT_MODEL(2)%TLUOUT)
+CALL IO_File_add2list(LUNIT_MODEL(2)%TLUOUT,'OUTPUT_LISTING2','OUTPUTLISTING','WRITE')
+CALL IO_File_open(LUNIT_MODEL(2)%TLUOUT)
 !
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => LUNIT_MODEL(2)%TLUOUT
 !
 ILUOUT=LUNIT_MODEL(2)%TLUOUT%NLU
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPAWN1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'SPAWN1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUSPA = TZNMLFILE%NLU
 !
 !
@@ -239,8 +239,8 @@ LUNIT_MODEL(2)%CINIFILEPGD = CINIFILEPGD
 CALL POSNAM(ILUSPA,'NAM_CONFIO',GFOUND,ILUOUT)
 IF (GFOUND) READ(ILUSPA,NAM_CONFIO)
 !
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !
 !*       3.    model 1 and SON1 FM file name (passed as arguments)
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 10730a3ead87e0d0197687351e0b17f8e5ce34fd..a6523b5d5916d74be0ba7dc13a90343ac83cae1e 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -8,42 +8,40 @@
 !
 INTERFACE 
 !
-      SUBROUTINE READ_FIELD(TPINIFILE,KIU,KJU,KKU,PTSTEP,                    &
-            HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,                &
+      SUBROUTINE READ_FIELD(TPINIFILE,KIU,KJU,KKU,                           &
+            HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS,        &
             HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,     &
             HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME,      &
             HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll,  &
             KSIZELBXTKE_ll,KSIZELBYTKE_ll,                                   &
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
             PUM,PVM,PWM,PDUM,PDVM,PDWM,                                      &
-            PUT,PVT,PWT,PTHT,PPABST,PPABSM,PTKET,PRTKEMS,                    &
-            PRT,PSVT,PCIT,PDRYMASST,                                         &
+            PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS,                           &
+            PRT,PSVT,PZWS,PCIT,PDRYMASST,                                    &            
             PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR,       &
-            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                                 &
+            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM, PLSZWSM,                        &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
             PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,            &
             KFRC,TPDTFRC,PUFRC,PVFRC,PWFRC,PTHFRC,PRVFRC,                    &
             PTENDTHFRC,PTENDRVFRC,PGXTHFRC,PGYTHFRC,PPGROUNDFRC,PATC,        &
-            PTENDUFRC,PTENDVFRC,                                             &            
+            PTENDUFRC,PTENDVFRC,                                             &
             KADVFRC,TPDTADVFRC,PDTHFRC,PDRVFRC,                              &
             KRELFRC,TPDTRELFRC, PTHREL, PRVREL,                              &
             PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M,                              &
             PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD,PRSVS_CLD       )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_TIME ! for type DATE_TIME
 !
 !
 TYPE(TFILEDATA),           INTENT(IN)  :: TPINIFILE    !Initial file
 INTEGER,                   INTENT(IN)  :: KIU, KJU, KKU   
                              ! array sizes in x, y and z  directions
-REAL,                      INTENT(IN)  :: PTSTEP       
-                             ! current Time STEP   
 ! 
 CHARACTER (LEN=*),         INTENT(IN)  :: HGETTKET,                          &
                                           HGETRVT,HGETRCT,HGETRRT,           &
                                           HGETRIT,HGETRST,HGETRGT,HGETRHT,   & 
-                                          HGETCIT,HGETSRCT,                  &
+                                          HGETCIT,HGETSRCT, HGETZWS,         &
                                           HGETSIGS,HGETCLDFR,HGETBL_DEPTH,   &
                                           HGETSBL_DEPTH,HGETPHC,HGETPHR
 CHARACTER (LEN=*), DIMENSION(:),INTENT(IN)  :: HGETSVT
@@ -72,9 +70,9 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PUT,PVT,PWT     ! U,V,W at t
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PTHT,PTKET      ! theta, tke and
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PRTKEMS         ! tke adv source
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPABST          ! pressure at t
-REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPABSM          ! pressure at t-1
 REAL, DIMENSION(:,:,:,:),  INTENT(OUT) :: PRT,PSVT        ! moist and scalar
                                                           ! variables at t
+REAL, DIMENSION(:,:),      INTENT(INOUT) :: PZWS
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSRCT           ! turbulent flux
                                                           !  <s'Rc'> at t 
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCIT            ! ice conc. at t
@@ -88,6 +86,7 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPHR            ! pH value in rainwate
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSUM,PLSVM,PLSWM    ! Wind
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSTHM,  PLSRVM      ! Mass
 ! LB fields
+REAL, DIMENSION(:,:),            INTENT(OUT) :: PLSZWSM              ! significant height of sea waves
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Wind
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXTHM              ! Mass
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBYUM,PLBYVM,PLBYWM ! Wind
@@ -124,23 +123,23 @@ END INTERFACE
 END MODULE MODI_READ_FIELD
 !
 !     ########################################################################
-      SUBROUTINE READ_FIELD(TPINIFILE,KIU,KJU,KKU,PTSTEP,                    &
-            HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,                &
+      SUBROUTINE READ_FIELD(TPINIFILE,KIU,KJU,KKU,                           &
+            HGETTKET,HGETRVT,HGETRCT,HGETRRT,HGETRIT,HGETCIT,HGETZWS,        &
             HGETRST,HGETRGT,HGETRHT,HGETSVT,HGETSRCT,HGETSIGS,HGETCLDFR,     &
             HGETBL_DEPTH,HGETSBL_DEPTH,HGETPHC,HGETPHR,HUVW_ADV_SCHEME,      &
             HTEMP_SCHEME,KSIZELBX_ll,KSIZELBXU_ll,KSIZELBY_ll,KSIZELBYV_ll,  &
             KSIZELBXTKE_ll,KSIZELBYTKE_ll,                                   &
             KSIZELBXR_ll,KSIZELBYR_ll,KSIZELBXSV_ll,KSIZELBYSV_ll,           &
             PUM,PVM,PWM,PDUM,PDVM,PDWM,                                      &
-            PUT,PVT,PWT,PTHT,PPABST,PPABSM,PTKET,PRTKEMS,                    &
-            PRT,PSVT,PCIT,PDRYMASST,                                         &
+            PUT,PVT,PWT,PTHT,PPABST,PTKET,PRTKEMS,                           &
+            PRT,PSVT,PZWS,PCIT,PDRYMASST,                                    &
             PSIGS,PSRCT,PCLDFR,PBL_DEPTH,PSBL_DEPTH,PWTHVMF,PPHC,PPHR,       &
-            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                                 &
+            PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,                         &
             PLBXUM,PLBXVM,PLBXWM,PLBXTHM,PLBXTKEM,PLBXRM,PLBXSVM,            &
             PLBYUM,PLBYVM,PLBYWM,PLBYTHM,PLBYTKEM,PLBYRM,PLBYSVM,            &
             KFRC,TPDTFRC,PUFRC,PVFRC,PWFRC,PTHFRC,PRVFRC,                    &
             PTENDTHFRC,PTENDRVFRC,PGXTHFRC,PGYTHFRC,PPGROUNDFRC,PATC,        &
-            PTENDUFRC,PTENDVFRC,                                             &            
+            PTENDUFRC,PTENDVFRC,                                             &
             KADVFRC,TPDTADVFRC,PDTHFRC,PDRVFRC,                              &
             KRELFRC,TPDTRELFRC, PTHREL, PRVREL,                              &
             PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M,                              &
@@ -237,6 +236,10 @@ END MODULE MODI_READ_FIELD
 !!                   09/2017 Q.Rodier add LTEND_UV_FRC
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!          V. Vionnet  07/17    add blowing snow scheme
+!!          P. Wautelet 01/2019  corrected intent of PDUM,PDVM,PDWM (OUT->INOUT)
+!  P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments (bugfix: PPABSM was intent(OUT))
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !!-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -251,6 +254,7 @@ USE MODD_CST
 USE MODD_CTURB
 USE MODD_DUST
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+USE MODD_FIELD_n,         only: XZWS_DEFAULT
 #ifdef MNH_FOREFIRE
 USE MODD_FOREFIRE
 #endif
@@ -258,7 +262,7 @@ USE MODD_BLOWSNOW
 USE MODD_BLOWSNOW_n
 
 USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LATZ_EDFLX
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_LUNIT_N,         ONLY: TLUOUT
@@ -276,10 +280,10 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_SALT
 USE MODD_TIME ! for type DATE_TIME
 !
-USE MODE_FIELD,           ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEDATE,TYPEREAL
-USE MODE_FMREAD
-USE MODE_IO_ll,           ONLY: UPCASE
+USE MODE_FIELD,           ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME, TYPEDATE, TYPEREAL
+USE MODE_IO_FIELD_READ,   only: IO_Field_read
 USE MODE_MSG
+USE MODE_TOOLS,           ONLY: UPCASE
 !
 USE MODI_INI_LB
 USE MODI_INI_LS
@@ -293,13 +297,11 @@ IMPLICIT NONE
 TYPE(TFILEDATA),           INTENT(IN)  :: TPINIFILE    !Initial file
 INTEGER,                   INTENT(IN)  :: KIU, KJU, KKU   
                              ! array sizes in x, y and z  directions
-REAL,                      INTENT(IN)  :: PTSTEP       
-                             ! current Time STEP   
 ! 
 CHARACTER (LEN=*),         INTENT(IN)  :: HGETTKET,                          &
                                           HGETRVT,HGETRCT,HGETRRT,           &
                                           HGETRIT,HGETRST,HGETRGT,HGETRHT,   & 
-                                          HGETCIT,HGETSRCT,                  &
+                                          HGETCIT,HGETSRCT,HGETZWS,          &
                                           HGETSIGS,HGETCLDFR,HGETBL_DEPTH,   &
                                           HGETSBL_DEPTH,HGETPHC,HGETPHR
 CHARACTER (LEN=*), DIMENSION(:),INTENT(IN)  :: HGETSVT
@@ -320,7 +322,7 @@ INTEGER, INTENT(IN) :: KSIZELBYTKE_ll                ! for TKE
 INTEGER, INTENT(IN) :: KSIZELBYR_ll,KSIZELBYSV_ll    ! for Rx and SV 
 !
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PUM,PVM,PWM     ! U,V,W at t-dt
-REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PDUM,PDVM,PDWM  ! Difference on U,V,W 
+REAL, DIMENSION(:,:,:),    INTENT(INOUT) :: PDUM,PDVM,PDWM  ! Difference on U,V,W
                                                           ! between t+dt and t-dt
 REAL, DIMENSION(:,:),      INTENT(OUT) :: PBL_DEPTH       ! BL depth
 REAL, DIMENSION(:,:),      INTENT(OUT) :: PSBL_DEPTH      ! SBL depth
@@ -330,9 +332,9 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PUT,PVT,PWT     ! U,V,W at t
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PTHT,PTKET      ! theta, tke and
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PRTKEMS         ! tke adv source
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPABST          ! pressure at t
-REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPABSM          ! pressure at t-1
 REAL, DIMENSION(:,:,:,:),  INTENT(OUT) :: PRT,PSVT        ! moist and scalar
                                                           ! variables at t
+REAL, DIMENSION(:,:),      INTENT(INOUT) :: PZWS
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PSRCT           ! turbulent flux
                                                           !  <s'Rc'> at t 
 REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PCIT            ! ice conc. at t
@@ -345,6 +347,7 @@ REAL, DIMENSION(:,:,:),    INTENT(OUT) :: PPHR            ! pH value in rainwate
 !
 !
 ! Larger Scale fields
+REAL, DIMENSION(:,:),            INTENT(OUT) :: PLSZWSM              ! significant height of sea waves
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSUM,PLSVM,PLSWM    ! Wind
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSTHM,  PLSRVM      ! Mass
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLBXUM,PLBXVM,PLBXWM ! Wind
@@ -390,6 +393,7 @@ INTEGER                      :: JT           ! loop index
 LOGICAL                      :: GLSOURCE     ! switch for the source term (for ini_ls and ini_lb)
 CHARACTER(LEN=2)             :: INDICE
 CHARACTER(LEN=3)             :: YFRC         ! To mark the different forcing dates
+CHARACTER(LEN=15)            :: YVAL
 REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK        ! to compute supersaturation
 TYPE(TFIELDDATA)             :: TZFIELD
 !
@@ -412,33 +416,33 @@ IF (TPINIFILE%NMNHVERSION(1)<5) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'UM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PUT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PUT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'VM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PVT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PVT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'WM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PWT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PWT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'THM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PTHT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'PABSM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPABST)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPABST)
 ELSE
-  CALL IO_READ_FIELD(TPINIFILE,'UT',PUT)
-  CALL IO_READ_FIELD(TPINIFILE,'VT',PVT)
-  CALL IO_READ_FIELD(TPINIFILE,'WT',PWT)
-  CALL IO_READ_FIELD(TPINIFILE,'THT',PTHT)
-  CALL IO_READ_FIELD(TPINIFILE,'PABST',PPABST)
+  CALL IO_Field_read(TPINIFILE,'UT',PUT)
+  CALL IO_Field_read(TPINIFILE,'VT',PVT)
+  CALL IO_Field_read(TPINIFILE,'WT',PWT)
+  CALL IO_Field_read(TPINIFILE,'THT',PTHT)
+  CALL IO_Field_read(TPINIFILE,'PABST',PPABST)
 ENDIF
 !
 SELECT CASE(HGETTKET)                   
@@ -447,28 +451,43 @@ SELECT CASE(HGETTKET)
       CALL FIND_FIELD_ID_FROM_MNHNAME('TKET',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'TKEM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTKET)
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PTKET)
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'TKET',PTKET)
+      CALL IO_Field_read(TPINIFILE,'TKET',PTKET)
     END IF
     IF ( ( (TPINIFILE%NMNHVERSION(1)==5 .AND. TPINIFILE%NMNHVERSION(2)>0) .OR. TPINIFILE%NMNHVERSION(1)>5 ) &
         .AND. (CCONF == 'RESTA') .AND. LSPLIT_CFL) THEN
-      CALL IO_READ_FIELD(TPINIFILE,'TKEMS',PRTKEMS)
+      CALL IO_Field_read(TPINIFILE,'TKEMS',PRTKEMS)
     END IF
   CASE('INIT')
     PTKET(:,:,:)   = XTKEMIN
     PRTKEMS(:,:,:) = 0.
 END SELECT 
 !
+SELECT CASE(HGETZWS)
+  CASE('READ')
+    CALL IO_Field_read(TPINIFILE,'ZWS',PZWS,IRESP)
+    !If the field ZWS is not in the file, set its value to XZWS_DEFAULT
+    !ZWS is present in files since MesoNH 5.4.2
+    IF ( IRESP/=0 ) THEN
+      WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+      CALL PRINT_MSG(NVERB_WARNING,'IO','READ_FIELD','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
+      PZWS(:,:) = XZWS_DEFAULT
+    END IF
+
+  CASE('INIT')
+    PZWS(:,:)=0.
+END SELECT 
+!
 SELECT CASE(HGETRVT)             ! vapor
   CASE('READ')
     IF (TPINIFILE%NMNHVERSION(1)<5) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RVM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RVT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RVT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RVT',PRT(:,:,:,IDX_RVT))
+      CALL IO_Field_read(TPINIFILE,'RVT',PRT(:,:,:,IDX_RVT))
     END IF
   CASE('INIT')
     PRT(:,:,:,IDX_RVT) = 0.
@@ -480,9 +499,9 @@ SELECT CASE(HGETRCT)             ! cloud
       CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RCM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RCT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RCT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RCT',PRT(:,:,:,IDX_RCT))
+      CALL IO_Field_read(TPINIFILE,'RCT',PRT(:,:,:,IDX_RCT))
     END IF
   CASE('INIT')
     PRT(:,:,:,IDX_RCT) = 0.
@@ -494,9 +513,9 @@ SELECT CASE(HGETRRT)             ! rain
       CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RRM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RRT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RRT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RRT',PRT(:,:,:,IDX_RRT))
+      CALL IO_Field_read(TPINIFILE,'RRT',PRT(:,:,:,IDX_RRT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RRT) = 0.
@@ -508,9 +527,9 @@ SELECT CASE(HGETRIT)             ! cloud ice
       CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RIM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RIT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RIT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RIT',PRT(:,:,:,IDX_RIT))
+      CALL IO_Field_read(TPINIFILE,'RIT',PRT(:,:,:,IDX_RIT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RIT) = 0.
@@ -522,9 +541,9 @@ SELECT CASE(HGETRST)             ! snow
       CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RSM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RST))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RST))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RST',PRT(:,:,:,IDX_RST))
+      CALL IO_Field_read(TPINIFILE,'RST',PRT(:,:,:,IDX_RST))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RST) = 0.
@@ -536,9 +555,9 @@ SELECT CASE(HGETRGT)             ! graupel
       CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RGM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RGT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RGT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RGT',PRT(:,:,:,IDX_RGT))
+      CALL IO_Field_read(TPINIFILE,'RGT',PRT(:,:,:,IDX_RGT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RGT) = 0.
@@ -550,9 +569,9 @@ SELECT CASE(HGETRHT)             ! hail
       CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RHM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RHT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RHT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RHT',PRT(:,:,:,IDX_RHT))
+      CALL IO_Field_read(TPINIFILE,'RHT',PRT(:,:,:,IDX_RHT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RHT) = 0.
@@ -560,7 +579,7 @@ END SELECT
 !
 SELECT CASE(HGETCIT)             ! ice concentration
   CASE('READ')
-    IF (SIZE(PCIT) /= 0 ) CALL IO_READ_FIELD(TPINIFILE,'CIT',PCIT)
+    IF (SIZE(PCIT) /= 0 ) CALL IO_Field_read(TPINIFILE,'CIT',PCIT)
   CASE('INIT')
     PCIT(:,:,:)=0.
 END SELECT
@@ -584,7 +603,7 @@ IF (NSV_USER>0) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -606,7 +625,7 @@ IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
         TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
         IF (LSUPSAT .AND. (HGETRVT == 'READ') ) THEN
@@ -637,7 +656,7 @@ IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
         TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -707,7 +726,7 @@ DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
     END IF
 !
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
   CASE ('INIT')
     PSVT(:,:,:,JSV) = 0.
   END SELECT
@@ -733,7 +752,7 @@ IF (NSV_ELECEND>=NSV_ELECBEG) THEN
           TZFIELD%CUNITS     = 'm-3'
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
         END IF
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -756,7 +775,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHGSBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHIM',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -780,7 +799,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'M'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)'
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
 !***ATTENTION: BUG ? field written with a M suffix, read with a T suffix
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
@@ -804,7 +823,7 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -826,7 +845,7 @@ IF (NSV_SLTEND>=NSV_SLTBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -848,7 +867,7 @@ IF (NSV_SLTDEPEND>=NSV_SLTDEPBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -870,7 +889,7 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -892,7 +911,7 @@ IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -914,7 +933,7 @@ IF (NSV_AEREND>=NSV_AERBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -936,7 +955,7 @@ IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -958,7 +977,7 @@ IF (NSV_LGEND>=NSV_LGBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -980,7 +999,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CUNITS     = 'kg kg-1'
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           PSVT(:,:,:,JSV) = 0.
         END IF
@@ -989,7 +1008,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
         TZFIELD%CUNITS     = 'm-3'
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PATC(:,:,:,JSV-NSV_PPBEG+1),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PATC(:,:,:,JSV-NSV_PPBEG+1),IRESP)
         IF (IRESP/=0) THEN
           PATC(:,:,:,JSV-NSV_PPBEG+1) = 0.
         ENDIF
@@ -1016,7 +1035,7 @@ IF (NSV_FFEND>=NSV_FFBEG) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
         IF (IRESP /= 0) THEN
           PSVT(:,:,:,JSV) = 0.
         END IF
@@ -1042,7 +1061,7 @@ IF (NSV_CSEND>=NSV_CSBEG) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
         IF (IRESP /= 0) THEN
           PSVT(:,:,:,JSV) = 0.
         END IF
@@ -1067,7 +1086,7 @@ IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
         TZFIELD%CMNHNAME   = 'LINOXT'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -1088,7 +1107,7 @@ IF (NSV_SNWEND>=NSV_SNWBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -1108,7 +1127,7 @@ IF (NSV_SNW>=1) THEN
         WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV      
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)') 'X_Y_Z_','SNOWCANO',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XSNWCANO(:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,XSNWCANO(:,:,JSV))
       CASE ('INIT')
         XSNWCANO(:,:,JSV) = 0.
     END SELECT
@@ -1119,28 +1138,28 @@ END IF
 !
 IF (CCONF == 'RESTA') THEN
   IF (CTEMP_SCHEME/='LEFR') THEN
-    CALL IO_READ_FIELD(TPINIFILE,'US_PRES',PRUS_PRES)
-    CALL IO_READ_FIELD(TPINIFILE,'VS_PRES',PRVS_PRES)
-    CALL IO_READ_FIELD(TPINIFILE,'WS_PRES',PRWS_PRES)
+    CALL IO_Field_read(TPINIFILE,'US_PRES',PRUS_PRES)
+    CALL IO_Field_read(TPINIFILE,'VS_PRES',PRVS_PRES)
+    CALL IO_Field_read(TPINIFILE,'WS_PRES',PRWS_PRES)
   END IF
   IF (LSPLIT_CFL) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'THS_CLD',PRTHS_CLD)
+    CALL IO_Field_read(TPINIFILE,'THS_CLD',PRTHS_CLD)
     DO JRR = 1, SIZE(PRT,4)
       SELECT CASE(JRR)
         CASE (1)
-          CALL IO_READ_FIELD(TPINIFILE,'RVS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RVS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (2)
-          CALL IO_READ_FIELD(TPINIFILE,'RCS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RCS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (3)
-          CALL IO_READ_FIELD(TPINIFILE,'RRS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RRS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (4)
-          CALL IO_READ_FIELD(TPINIFILE,'RIS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RIS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (5)
-          CALL IO_READ_FIELD(TPINIFILE,'RSS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RSS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (6)
-          CALL IO_READ_FIELD(TPINIFILE,'RGS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RGS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (7)
-          CALL IO_READ_FIELD(TPINIFILE,'RHS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RHS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_FIELD','PRT is too big')
       END SELECT
@@ -1157,7 +1176,7 @@ IF (CCONF == 'RESTA') THEN
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 3
         TZFIELD%LTIMEDEP   = .TRUE.
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
       END IF
       IF (JSV == NSV_C2R2BEG ) THEN
         TZFIELD%CMNHNAME   = 'RSVS_CLD2'
@@ -1170,7 +1189,7 @@ IF (CCONF == 'RESTA') THEN
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 3
         TZFIELD%LTIMEDEP   = .TRUE.
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -1181,12 +1200,12 @@ END IF
 IF (CPROGRAM=='MESONH' .AND. HUVW_ADV_SCHEME(1:3)=='CEN' .AND. &
         HTEMP_SCHEME == 'LEFR' ) THEN
   IF (CCONF=='RESTA') THEN
-    CALL IO_READ_FIELD(TPINIFILE,'UM', PUM)
-    CALL IO_READ_FIELD(TPINIFILE,'VM', PVM)
-    CALL IO_READ_FIELD(TPINIFILE,'WM', PWM)
-    CALL IO_READ_FIELD(TPINIFILE,'DUM',PDUM)
-    CALL IO_READ_FIELD(TPINIFILE,'DVM',PDVM)
-    CALL IO_READ_FIELD(TPINIFILE,'DWM',PDWM)
+    CALL IO_Field_read(TPINIFILE,'UM', PUM)
+    CALL IO_Field_read(TPINIFILE,'VM', PVM)
+    CALL IO_Field_read(TPINIFILE,'WM', PWM)
+    CALL IO_Field_read(TPINIFILE,'DUM',PDUM)
+    CALL IO_Field_read(TPINIFILE,'DVM',PDVM)
+    CALL IO_Field_read(TPINIFILE,'DWM',PDWM)
   ELSE
     PUM = PUT
     PVM = PVT
@@ -1197,7 +1216,7 @@ END IF
 !*       2.2a  3D LS fields  
 !
 !
-CALL INI_LS(TPINIFILE,HGETRVT,GLSOURCE,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM)
+CALL INI_LS(TPINIFILE,HGETRVT,GLSOURCE,PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM)
 !
 !
 !*       2.2b  2D "surfacic" LB fields   
@@ -1215,39 +1234,39 @@ CALL INI_LB(TPINIFILE,GLSOURCE,ISV,                                   &
 !
 !*       2.3  Some special variables:
 !
-CALL IO_READ_FIELD(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass
+CALL IO_Field_read(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass
 !
 SELECT CASE(HGETSRCT)                ! turbulent flux SRC at time t
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'SRCT',PSRCT)
+    CALL IO_Field_read(TPINIFILE,'SRCT',PSRCT)
   CASE('INIT')
     PSRCT(:,:,:)=0.
 END SELECT
 !
 SELECT CASE(HGETSIGS)                ! subgrid condensation
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'SIGS',PSIGS)
+    CALL IO_Field_read(TPINIFILE,'SIGS',PSIGS)
   CASE('INIT')
     PSIGS(:,:,:)=0.
 END SELECT
 !
 SELECT CASE(HGETPHC)             ! pH in cloud water
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'PHC',PPHC)
+    CALL IO_Field_read(TPINIFILE,'PHC',PPHC)
   CASE('INIT')
     PPHC(:,:,:)=0.
 END SELECT
 !
 SELECT CASE(HGETPHR)             ! pH in rainwater
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'PHR',PPHR)
+    CALL IO_Field_read(TPINIFILE,'PHR',PPHR)
   CASE('INIT')
     PPHR(:,:,:)=0.
 END SELECT
 !
 IRESP=0
 IF(HGETCLDFR=='READ') THEN           ! cloud fraction
-  CALL IO_READ_FIELD(TPINIFILE,'CLDFR',PCLDFR,IRESP)
+  CALL IO_Field_read(TPINIFILE,'CLDFR',PCLDFR,IRESP)
 ENDIF
 IF(HGETCLDFR=='INIT' .OR. IRESP /= 0) THEN
   IF(SIZE(PRT,4) > 3) THEN
@@ -1268,7 +1287,7 @@ ENDIF
 !* boundary layer depth
 !
 IF (HGETBL_DEPTH=='READ') THEN
-  CALL IO_READ_FIELD(TPINIFILE,'BL_DEPTH',PBL_DEPTH)
+  CALL IO_Field_read(TPINIFILE,'BL_DEPTH',PBL_DEPTH)
 ELSE
   PBL_DEPTH(:,:)=XUNDEF
 END IF
@@ -1276,7 +1295,7 @@ END IF
 !* surface boundary layer depth
 !
 IF (HGETSBL_DEPTH=='READ') THEN
-  CALL IO_READ_FIELD(TPINIFILE,'SBL_DEPTH',PSBL_DEPTH)
+  CALL IO_Field_read(TPINIFILE,'SBL_DEPTH',PSBL_DEPTH)
 ELSE
   PSBL_DEPTH(:,:)=0.
 END IF
@@ -1286,7 +1305,7 @@ END IF
 SELECT CASE(HGETTKET)                   
   CASE('READ') 
     IF (CSCONV=='EDKF') THEN 
-      CALL IO_READ_FIELD(TPINIFILE,'WTHVMF',PWTHVMF)
+      CALL IO_Field_read(TPINIFILE,'WTHVMF',PWTHVMF)
     ELSE
       PWTHVMF(:,:,:)=0
     ENDIF
@@ -1314,7 +1333,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPDTFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'UFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1326,7 +1345,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PUFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'VFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1338,7 +1357,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'WFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1350,7 +1369,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PWFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PWFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'THFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1362,7 +1381,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1374,7 +1393,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1386,7 +1405,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1398,7 +1417,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDRVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1410,7 +1429,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PGXTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PGXTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1422,7 +1441,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PGYTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PGYTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1434,7 +1453,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPGROUNDFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PPGROUNDFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'TENDUFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1446,7 +1465,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDUFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1458,7 +1477,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDVFRC(:,JT))
   END DO
 END IF
 !
@@ -1478,7 +1497,7 @@ IF (L2D_ADV_FRC) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTADVFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPDTADVFRC(JT))
     !
     TZFIELD%CMNHNAME   = 'TH_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1490,7 +1509,7 @@ IF (L2D_ADV_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDTHFRC(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PDTHFRC(:,:,:,JT))
     !
     TZFIELD%CMNHNAME   = 'Q_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1502,7 +1521,7 @@ IF (L2D_ADV_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDRVFRC(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PDRVFRC(:,:,:,JT))
   ENDDO
 ENDIF
 !
@@ -1521,7 +1540,7 @@ IF (L2D_REL_FRC) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTRELFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPDTRELFRC(JT))
     !
     ! Relaxation
     TZFIELD%CMNHNAME   = 'TH_REL'//YFRC
@@ -1534,7 +1553,7 @@ IF (L2D_REL_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHREL(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTHREL(:,:,:,JT))
     !
     TZFIELD%CMNHNAME   = 'Q_REL'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1546,13 +1565,13 @@ IF (L2D_REL_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRVREL(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PRVREL(:,:,:,JT))
   ENDDO
 ENDIF
 !
 IF (LUV_FLX) THEN
   IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'VU_FLX',PVU_FLUX_M)
+    CALL IO_Field_read(TPINIFILE,'VU_FLX',PVU_FLUX_M)
   ELSE IF (CCONF == 'START') THEN
     PVU_FLUX_M(:,:,:)=0.
   END IF
@@ -1560,8 +1579,8 @@ ENDIF
 !
 IF (LTH_FLX) THEN
   IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'VT_FLX',PVTH_FLUX_M)
-    CALL IO_READ_FIELD(TPINIFILE,'WT_FLX',PWTH_FLUX_M)
+    CALL IO_Field_read(TPINIFILE,'VT_FLX',PVTH_FLUX_M)
+    CALL IO_Field_read(TPINIFILE,'WT_FLX',PWTH_FLUX_M)
    ELSE IF (CCONF == 'START') THEN
        PWTH_FLUX_M(:,:,:)=0.
        PVTH_FLUX_M(:,:,:)=0.
diff --git a/src/MNH/read_grid_time_mesonh_case.f90 b/src/MNH/read_grid_time_mesonh_case.f90
index 9c2c6669ee73b63f80a483ca4007bcedb86eb5a5..58599b38386dd2225254c6590127c93be7efdf97 100644
--- a/src/MNH/read_grid_time_mesonh_case.f90
+++ b/src/MNH/read_grid_time_mesonh_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -90,15 +90,15 @@ END MODULE MODI_READ_GRID_TIME_MESONH_CASE
 USE MODD_CONF
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_PREP_REAL
 USE MODD_TIME
 USE MODD_TIME_n
 !
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_find_byname
 !
 USE MODI_DEFAULT_SLEVE
 USE MODI_READ_HGRID
@@ -152,12 +152,12 @@ ZEPS=1.E-10
 !
 !PW: TODO: temporary: look for file from its name
 !     TPFMFILE should be passed in arguments
-CALL IO_FILE_FIND_BYNAME(HFMFILE,TZFMFILE,IRESP)
+CALL IO_File_find_byname(HFMFILE,TZFMFILE,IRESP)
 !
 !*       1.1   Original FMfile name
 !              --------------------
 !
-CALL IO_READ_FIELD(TZFMFILE,'DAD_NAME',HDAD_NAME)
+CALL IO_Field_read(TZFMFILE,'DAD_NAME',HDAD_NAME)
 !
 !-------------------------------------------------------------------------------
 !
@@ -167,12 +167,12 @@ CALL IO_READ_FIELD(TZFMFILE,'DAD_NAME',HDAD_NAME)
 !*       2.1    Projection :
 !               ----------
 !
-CALL IO_READ_FIELD(TZFMFILE,'LON0',ZLON0_LS)
+CALL IO_Field_read(TZFMFILE,'LON0',ZLON0_LS)
 ZLON0_LS =ZLON0_LS +NINT((XLON0    -ZLON0_LS )/360.)*360.
 ! 
-CALL IO_READ_FIELD(TZFMFILE,'RPK', ZRPK_LS)
-CALL IO_READ_FIELD(TZFMFILE,'LAT0',ZLAT0_LS)
-CALL IO_READ_FIELD(TZFMFILE,'BETA',ZBETA_LS)
+CALL IO_Field_read(TZFMFILE,'RPK', ZRPK_LS)
+CALL IO_Field_read(TZFMFILE,'LAT0',ZLAT0_LS)
+CALL IO_Field_read(TZFMFILE,'BETA',ZBETA_LS)
 !
 IF (     (ABS(ZLAT0_LS-XLAT0)>ZEPS*MAX(1.,ABS(XLAT0)))               &
    .OR.  (ABS(ZLON0_LS-XLON0)>ZEPS*MAX(1.,ABS(XLON0)))               &
@@ -215,30 +215,30 @@ END IF
 !               -------------
 !
 !
-CALL IO_READ_FIELD(TZFMFILE,'KMAX',ILMAX_LS)
+CALL IO_Field_read(TZFMFILE,'KMAX',ILMAX_LS)
 !
 ILMAX_LS=ILMAX_LS+2*JPVEXT
 !
 ALLOCATE(XZHAT_LS(ILMAX_LS))
-CALL IO_READ_FIELD(TZFMFILE,'ZHAT',XZHAT_LS)
+CALL IO_Field_read(TZFMFILE,'ZHAT',XZHAT_LS)
 !
 CALL DEFAULT_SLEVE(LSLEVE_LS,XLEN1_LS,XLEN2_LS)
 IF (TZFMFILE%NMNHVERSION(1)<4 .OR. (TZFMFILE%NMNHVERSION(1)==4 .AND. TZFMFILE%NMNHVERSION(2)<=6)) THEN
   LSLEVE_LS = .FALSE.
 ELSE
-  CALL IO_READ_FIELD(TZFMFILE,'SLEVE',LSLEVE_LS)
+  CALL IO_Field_read(TZFMFILE,'SLEVE',LSLEVE_LS)
   IF (LSLEVE_LS) THEN
-    CALL IO_READ_FIELD(TZFMFILE,'LEN1',XLEN1_LS)
-    CALL IO_READ_FIELD(TZFMFILE,'LEN2',XLEN2_LS)
+    CALL IO_Field_read(TZFMFILE,'LEN1',XLEN1_LS)
+    CALL IO_Field_read(TZFMFILE,'LEN2',XLEN2_LS)
   END IF
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_read(TZFMFILE,'THINSHELL',LTHINSHELL)
 !
 !*       2.5    Time variables :
 !               --------------
 !
-CALL IO_READ_FIELD(TZFMFILE,'DTCUR',TDTCUR)
+CALL IO_Field_read(TZFMFILE,'DTCUR',TDTCUR)
 !
 TDTMOD=TDTCUR
 TDTSEG=TDTCUR
diff --git a/src/MNH/read_hgrid.f90 b/src/MNH/read_hgrid.f90
index b501ea10088792d607002228cf6c7a30611a220f..26b9881e4dd96a27160ffd4aec883c38abc99446 100644
--- a/src/MNH/read_hgrid.f90
+++ b/src/MNH/read_hgrid.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE READ_HGRID(KMI,TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,           INTENT(IN)  :: KMI          ! model index
 TYPE(TFILEDATA),   INTENT(IN)  :: TPFMFILE     ! file n
@@ -80,18 +80,17 @@ END MODULE MODI_READ_HGRID
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_CONF, ONLY : CPROGRAM
+USE MODD_CONF,          ONLY: CPROGRAM
 USE MODD_GRID
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM,    ONLY : SET_FMPACK_ll
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_IO,            ONLY: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -148,9 +147,9 @@ END IF
 !*       2.1    General information :
 !               -------------------
 !
-CALL IO_READ_FIELD(TPFMFILE,'MY_NAME',     HMY_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'DAD_NAME',    HDAD_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
+CALL IO_Field_read(TPFMFILE,'MY_NAME',     HMY_NAME)
+CALL IO_Field_read(TPFMFILE,'DAD_NAME',    HDAD_NAME)
+CALL IO_Field_read(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
 !
 !*       2.2    Grid information :
 !               ----------------
@@ -159,14 +158,14 @@ CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
 !GET_DIM_PHYS_ll impact => 1st one no visible impact
 CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX)
 !
-CALL IO_READ_FIELD(TPFMFILE,'LAT0',  XLAT0)
-CALL IO_READ_FIELD(TPFMFILE,'LON0',  XLON0)
-CALL IO_READ_FIELD(TPFMFILE,'RPK',   XRPK)
-CALL IO_READ_FIELD(TPFMFILE,'BETA',  XBETA)
-CALL IO_READ_FIELD(TPFMFILE,'LATORI',XPGDLATOR)
-CALL IO_READ_FIELD(TPFMFILE,'LONORI',XPGDLONOR)
-CALL IO_READ_FIELD(TPFMFILE,'IMAX',  NPGDIMAX)
-CALL IO_READ_FIELD(TPFMFILE,'JMAX',  NPGDJMAX)
+CALL IO_Field_read(TPFMFILE,'LAT0',  XLAT0)
+CALL IO_Field_read(TPFMFILE,'LON0',  XLON0)
+CALL IO_Field_read(TPFMFILE,'RPK',   XRPK)
+CALL IO_Field_read(TPFMFILE,'BETA',  XBETA)
+CALL IO_Field_read(TPFMFILE,'LATORI',XPGDLATOR)
+CALL IO_Field_read(TPFMFILE,'LONORI',XPGDLONOR)
+CALL IO_Field_read(TPFMFILE,'IMAX',  NPGDIMAX)
+CALL IO_Field_read(TPFMFILE,'JMAX',  NPGDJMAX)
 !
 !20131010 recompute properly NPGDIMAX NPGDJMAX
 !GET_DIM_PHYS_ll impact 2nd one => prevent run failures
@@ -175,38 +174,38 @@ CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX)
 IF (.NOT.(ALLOCATED(XPGDXHAT))) ALLOCATE(XPGDXHAT(NPGDIMAX+2*JPHEXT))
 IF (.NOT.(ALLOCATED(XPGDYHAT))) ALLOCATE(XPGDYHAT(NPGDJMAX+2*JPHEXT))
 !20131023 change FMREAD option '--' -> 'XX' ou 'YY' for // reading
-CALL IO_READ_FIELD(TPFMFILE,'XHAT',XPGDXHAT)
-CALL IO_READ_FIELD(TPFMFILE,'YHAT',XPGDYHAT)
+CALL IO_Field_read(TPFMFILE,'XHAT',XPGDXHAT)
+CALL IO_Field_read(TPFMFILE,'YHAT',XPGDYHAT)
 !
 !*       3.   Read the configuration (MODD_CONF)
 !
-CALL IO_READ_FIELD(TPFMFILE,'L1D',G1D,IRESP)
+CALL IO_Field_read(TPFMFILE,'L1D',G1D,IRESP)
 IF (IRESP/=0) THEN
   G1D=.FALSE.
   IF( (NPGDIMAX == 1).AND.(NPGDJMAX == 1) ) G1D=.TRUE.
 ENDIF
 !
-CALL IO_READ_FIELD(TPFMFILE,'L2D',G2D,IRESP)
+CALL IO_Field_read(TPFMFILE,'L2D',G2D,IRESP)
 IF (IRESP/=0) THEN
   G2D=.FALSE.
   IF( (NPGDIMAX /= 1).AND.(NPGDJMAX == 1) ) G2D=.TRUE.
 ENDIF
 !
-CALL IO_READ_FIELD(TPFMFILE,'PACK',GPACK,IRESP)
+CALL IO_Field_read(TPFMFILE,'PACK',GPACK,IRESP)
 IF (IRESP/=0) GPACK=.TRUE.
 !
-CALL SET_FMPACK_ll(G1D,G2D,GPACK)
+CALL IO_Pack_set(G1D,G2D,GPACK)
 !-------------------------------------------------------------------------------
 IF (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%NMNHVERSION(2)<=5)) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LONOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XPGDLONOR)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XPGDLONOR)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LATOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XPGDLATOR)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XPGDLATOR)
   !
   ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2))
   ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2))
diff --git a/src/MNH/read_hgridn.f90 b/src/MNH/read_hgridn.f90
index 7dd64e89aa3fbb7515b450eeac208a8963b0bfea..0989fed5359ea361bf8667a872ea934124fa094d 100644
--- a/src/MNH/read_hgridn.f90
+++ b/src/MNH/read_hgridn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -10,7 +10,7 @@
 INTERFACE
       SUBROUTINE READ_HGRID_n(TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN)  :: TPFMFILE     ! file n
 CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME     ! True Name of FM-file
@@ -55,8 +55,8 @@ END MODULE MODI_READ_HGRID_n
 !!        NJMAX
 !!      Module MODD_PARAMETERS :
 !!        JPHEXT
-!!      Module MODD_LUNIT :
-!!        CLUOUT
+!!      Module MODD_LUNIT_n :
+!!        TLUOUT
 !!
 !!    REFERENCE
 !!    ---------
@@ -82,14 +82,14 @@ USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LUNIT_n
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
+USE MODD_PARAMETERS,    ONLY: JPHEXT, JPVEXT, JPMODELMAX
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
+USE MODE_IO,            only: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -125,9 +125,9 @@ ILUOUT = TLUOUT%NLU
 !*       1.     General information :
 !               -------------------
 !
-CALL IO_READ_FIELD(TPFMFILE,'MY_NAME',     HMY_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'DAD_NAME',    HDAD_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
+CALL IO_Field_read(TPFMFILE,'MY_NAME',     HMY_NAME)
+CALL IO_Field_read(TPFMFILE,'DAD_NAME',    HDAD_NAME)
+CALL IO_Field_read(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
 !
 !*       2.     Grid information :
 !               ----------------
@@ -136,16 +136,16 @@ IF( (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%N
    .AND. HSTORAGE_TYPE == 'PG') THEN
   LCARTESIAN=.FALSE.
 ELSE
-  CALL IO_READ_FIELD(TPFMFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_read(TPFMFILE,'CARTESIAN',LCARTESIAN)
 ENDIF
-CALL IO_READ_FIELD(TPFMFILE,'LAT0',ZLAT0)
-CALL IO_READ_FIELD(TPFMFILE,'LON0',ZLON0)
-CALL IO_READ_FIELD(TPFMFILE,'BETA',ZBETA,IRESP)
+CALL IO_Field_read(TPFMFILE,'LAT0',ZLAT0)
+CALL IO_Field_read(TPFMFILE,'LON0',ZLON0)
+CALL IO_Field_read(TPFMFILE,'BETA',ZBETA,IRESP)
 IF(IRESP/=0) ZBETA=0.
 IF (.NOT.LCARTESIAN ) THEN
-  CALL IO_READ_FIELD(TPFMFILE,'RPK',   ZRPK)
-  CALL IO_READ_FIELD(TPFMFILE,'LATORI',XLATORI)
-  CALL IO_READ_FIELD(TPFMFILE,'LONORI',XLONORI)
+  CALL IO_Field_read(TPFMFILE,'RPK',   ZRPK)
+  CALL IO_Field_read(TPFMFILE,'LATORI',XLATORI)
+  CALL IO_Field_read(TPFMFILE,'LONORI',XLONORI)
 ENDIF
 !
 IMI = GET_CURRENT_MODEL_INDEX()
@@ -184,9 +184,9 @@ IF (CPROGRAM/='IDEAL ') THEN
   !            b) and arrays XXHAT, XYHAT, XZS, XZSMT are deallocated after this 
   !               routine (as in ini_size_spawn.f90)
   !$20140506 try 'XX','YY' it is FMREADN0_LL scalar reading so leave '--'
-  CALL IO_READ_FIELD(TPFMFILE,'IMAX',  NIMAX)
-  CALL IO_READ_FIELD(TPFMFILE,'JMAX',  NJMAX)
-  CALL IO_READ_FIELD(TPFMFILE,'JPHEXT',IJPHEXT)
+  CALL IO_Field_read(TPFMFILE,'IMAX',  NIMAX)
+  CALL IO_Field_read(TPFMFILE,'JMAX',  NJMAX)
+  CALL IO_Field_read(TPFMFILE,'JPHEXT',IJPHEXT)
   IF ( IJPHEXT .NE. JPHEXT ) THEN
      IF (CPROGRAM == 'REAL' ) THEN
         WRITE(ILUOUT,FMT=*) ' READ_HGRID_N : JPHEXT in PRE_REAL1.nam/NAM_REAL_CONF ( or default value )&
@@ -205,21 +205,21 @@ END IF
 !*       2.1  Read the configuration (MODD_CONF)
 !
 IF (IMI == 1) THEN   
-  CALL IO_READ_FIELD(TPFMFILE,'L1D',L1D,IRESP)
+  CALL IO_Field_read(TPFMFILE,'L1D',L1D,IRESP)
   IF (IRESP/=0) THEN
     L1D=.FALSE.
     IF( (NIMAX == 1).AND.(NJMAX == 1) ) L1D=.TRUE.
   ENDIF
 !
-  CALL IO_READ_FIELD(TPFMFILE,'L2D',L2D,IRESP)
+  CALL IO_Field_read(TPFMFILE,'L2D',L2D,IRESP)
   IF (IRESP/=0) THEN
     L2D=.FALSE.
     IF( (NIMAX /= 1).AND.(NJMAX == 1) ) L2D=.TRUE.
   ENDIF
 !
-  CALL IO_READ_FIELD(TPFMFILE,'PACK',LPACK,IRESP)
+  CALL IO_Field_read(TPFMFILE,'PACK',LPACK,IRESP)
   IF (IRESP/=0) LPACK=.TRUE.
-!  CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+!  CALL IO_Pack_set(L1D,L2D,LPACK)
 END IF
 !
 !*       2.2    Grid information :
@@ -246,8 +246,8 @@ ELSE
 ENDIF
 !JUAN REALZ
 
-CALL IO_READ_FIELD(TPFMFILE,'XHAT',XXHAT)
-CALL IO_READ_FIELD(TPFMFILE,'YHAT',XYHAT)
+CALL IO_Field_read(TPFMFILE,'XHAT',XXHAT)
+CALL IO_Field_read(TPFMFILE,'YHAT',XYHAT)
 !
 !JUAN REALZ
 IF ( CPROGRAM .EQ. "REAL  " ) THEN
@@ -257,7 +257,7 @@ IF (.NOT. (ASSOCIATED(XZS))) ALLOCATE(XZS(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
 ENDIF
 !JUAN REALZ
 
-CALL IO_READ_FIELD(TPFMFILE,'ZS',XZS)
+CALL IO_Field_read(TPFMFILE,'ZS',XZS)
 !
 !JUAN REALZ
 IF ( CPROGRAM .EQ. "REAL  " ) THEN
@@ -270,7 +270,7 @@ ENDIF
 IF (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%NMNHVERSION(2)<=6)) THEN
   XZSMT = XZS
 ELSE
-  CALL IO_READ_FIELD(TPFMFILE,'ZSMT',XZSMT)
+  CALL IO_Field_read(TPFMFILE,'ZSMT',XZSMT)
 !
 END IF
 !
@@ -279,12 +279,12 @@ IF (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%NM
   CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LONOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XLONORI)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XLONORI)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LATOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XLATORI)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XLATORI)
   !
   ZXHATM = - 0.5 * (XXHAT(1)+XXHAT(2))
   ZYHATM = - 0.5 * (XYHAT(1)+XYHAT(2))
diff --git a/src/MNH/read_precip_field.f90 b/src/MNH/read_precip_field.f90
index 78217595739967fe4884b85b272b70a96f7bcd68..c8251ed16cbbccf986e54766818b98ac79ff38bd 100644
--- a/src/MNH/read_precip_field.f90
+++ b/src/MNH/read_precip_field.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.
 !-----------------------------------------------------------------
 !     #############################
@@ -11,17 +11,16 @@
 !
 INTERFACE
 !
-      SUBROUTINE READ_PRECIP_FIELD(TPINIFILE,HLUOUT,HPROGRAM,HCONF,                &
+      SUBROUTINE READ_PRECIP_FIELD(TPINIFILE,HPROGRAM,HCONF,                       &
                               HGETRCT,HGETRRT,HGETRST,HGETRGT,HGETRHT,             &
                               PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, &
                               PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH     )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 !*       0.1   declarations of arguments
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPINIFILE ! Initial file
-CHARACTER (LEN=*),      INTENT(IN)    :: HLUOUT    ! name for output-listing of nested models
 CHARACTER (LEN=*),      INTENT(IN)    :: HPROGRAM  !
 CHARACTER (LEN=*),      INTENT(IN)    :: HCONF     !
 !                    
@@ -50,7 +49,7 @@ END INTERFACE
 END MODULE MODI_READ_PRECIP_FIELD 
 !
 !     ##############################################################################
-      SUBROUTINE READ_PRECIP_FIELD(TPINIFILE,HLUOUT,HPROGRAM,HCONF,                &
+      SUBROUTINE READ_PRECIP_FIELD(TPINIFILE,HPROGRAM,HCONF,                       &
                               HGETRCT,HGETRRT,HGETRST,HGETRGT,HGETRHT,             &
                               PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, &
                               PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH     )
@@ -93,25 +92,24 @@ END MODULE MODI_READ_PRECIP_FIELD
 !!      (C.Lac)        04/03/13  add YGETxxx for FIT scheme
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !!
 !-----------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAM_ICE,  ONLY : LDEPOSC
-USE MODD_PARAM_C2R2, ONLY : LDEPOC
-USE MODD_PARAM_LIMA, ONLY : MDEPOC=>LDEPOC                   
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_PARAM_ICE,     ONLY: LDEPOSC
+USE MODD_PARAM_C2R2,    ONLY: LDEPOC
+USE MODD_PARAM_LIMA,    ONLY: MDEPOC=>LDEPOC
 !
-USE MODE_FIELD,      ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 !
 IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPINIFILE ! Initial file
-CHARACTER (LEN=*),      INTENT(IN)    :: HLUOUT    ! name for output-listing of nested models
 CHARACTER (LEN=*),      INTENT(IN)    :: HPROGRAM  !
 CHARACTER (LEN=*),      INTENT(IN)    :: HCONF     !
 !                    
@@ -172,13 +170,13 @@ IF (SIZE(PINPRC) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRC(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRC(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRC(:,:) = 0.0
@@ -192,13 +190,13 @@ IF (SIZE(PINPRC) /= 0 .AND. (LDEPOSC .OR. LDEPOC .OR. MDEPOC) ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINDEP(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACDEP(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINDEP(:,:) = 0.0
@@ -212,19 +210,19 @@ IF (SIZE(PINPRR) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRR(:,:)=Z2D(:,:)/(1000.*3600.)
     !
-    CALL IO_READ_FIELD(TPINIFILE,'INPRR3D',Z3D,IRESP)
+    CALL IO_Field_read(TPINIFILE,'INPRR3D',Z3D,IRESP)
     IF (IRESP == 0) PINPRR3D(:,:,:)=Z3D(:,:,:)
     !
-    CALL IO_READ_FIELD(TPINIFILE,'EVAP3D',Z3D,IRESP)
+    CALL IO_Field_read(TPINIFILE,'EVAP3D',Z3D,IRESP)
     IF (IRESP == 0) PEVAP3D(:,:,:)=Z3D(:,:,:)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRR(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRR(:,:) = 0.0
@@ -240,13 +238,13 @@ IF (SIZE(PINPRS) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRS(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRS(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRS(:,:) = 0.0
@@ -260,13 +258,13 @@ IF (SIZE(PINPRG) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRG(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRG(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRG(:,:) = 0.0
@@ -280,13 +278,13 @@ IF (SIZE(PINPRH) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRH(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRH(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRH(:,:) = 0.0
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index 21ddfeba6708d033295a94378d08843ffff32332..e274f4d85c008a739630af86561798170bc3d9fb 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -1,13 +1,17 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-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:
 !!  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
 
+use mode_msg
+
 IMPLICIT NONE
 
 CONTAINS
@@ -15,7 +19,6 @@ CONTAINS
 SUBROUTINE PREPARE_METADATA_READ_SURF(HREC,HDIR,KGRID,KTYPE,KDIMS,HSUBR,TPFIELD)
 !
 USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST, TYPECHAR, TYPEDATE, TYPELOG
-USE MODE_MSG
 !
 CHARACTER(LEN=LEN_HREC),INTENT(IN)  :: HREC     ! name of the article to write
 CHARACTER(LEN=2),       INTENT(IN)  :: HDIR     ! Expected type of the data field (XX,XY,--...)
@@ -136,14 +139,13 @@ END MODULE MODE_READ_SURF_MNH_TOOLS
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODD_CONF,        ONLY: CPROGRAM
-USE MODD_GRID,        ONLY: XRPK,XBETA,XLAT0,XLON0
-USE MODD_IO_SURF_MNH, ONLY: TOUT, TPINFILE
-USE MODD_PARAMETERS,  ONLY: JPHEXT, XUNDEF
+USE MODD_CONF,          ONLY: CPROGRAM
+USE MODD_GRID,          ONLY: XRPK,XBETA,XLAT0,XLON0
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
+USE MODD_PARAMETERS,    ONLY: JPHEXT, XUNDEF
 !
-USE MODE_FIELD,       ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_GRIDPROJ
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
@@ -157,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
 !
@@ -175,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
@@ -186,26 +189,26 @@ IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN
       ZRPK  = XRPK
       ZBETA = XBETA
       !* reads projection and grid data in the file
-      CALL IO_READ_FIELD(TPINFILE,'LAT0',XLAT0)
-      CALL IO_READ_FIELD(TPINFILE,'LON0',XLON0)
-      CALL IO_READ_FIELD(TPINFILE,'RPK', XRPK)
-      CALL IO_READ_FIELD(TPINFILE,'BETA',XBETA)
+      CALL IO_Field_read(TPINFILE,'LAT0',XLAT0)
+      CALL IO_Field_read(TPINFILE,'LON0',XLON0)
+      CALL IO_Field_read(TPINFILE,'RPK', XRPK)
+      CALL IO_Field_read(TPINFILE,'BETA',XBETA)
       !
-      CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
-      CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
+      CALL IO_Field_read(TPINFILE,'IMAX',IIMAX)
+      CALL IO_Field_read(TPINFILE,'JMAX',IJMAX)
       ALLOCATE(ZXHAT(IIMAX+2*JPHEXT),ZYHAT(IJMAX+2*JPHEXT))
-      CALL IO_READ_FIELD(TPINFILE,'XHAT',ZXHAT)
-      CALL IO_READ_FIELD(TPINFILE,'YHAT',ZYHAT)
+      CALL IO_Field_read(TPINFILE,'XHAT',ZXHAT)
+      CALL IO_Field_read(TPINFILE,'YHAT',ZYHAT)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'LONOR'
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZLONOR)
+      CALL IO_Field_read(TPINFILE,TZFIELD,ZLONOR)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'LATOR'
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZLATOR)
+      CALL IO_Field_read(TPINFILE,TZFIELD,ZLATOR)
       !
       ZXHATM = - 0.5 * (ZXHAT(1)+ZXHAT(2))
       ZYHATM = - 0.5 * (ZYHAT(1)+ZYHAT(2))
@@ -227,10 +230,11 @@ END IF
 
 IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA'  &
                  .OR. HREC=='LATORI'.OR. HREC=='LONORI'                  ) THEN
-  CALL IO_READ_FIELD(TPINFILE,HREC,PFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,HREC,PFIELD,KRESP)
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEREAL,0,'READ_SURFX0_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
+  HCOMMENT = TZFIELD%CCOMMENT
 END IF
 
 IF (KRESP /=0) THEN
@@ -284,22 +288,20 @@ END SUBROUTINE READ_SURFX0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_CST,         ONLY : XPI
+USE MODD_CST,           ONLY: XPI
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE, &
-                             NIU_ALL, NJU_ALL, NIB_ALL,    &
-                             NJB_ALL, NIE_ALL, NJE_ALL,    &
-                             NMASK_ALL
-USE MODD_PARAMETERS, ONLY: XUNDEF
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE, &
+                              NIU_ALL, NJU_ALL, NIB_ALL,    &
+                              NJB_ALL, NIE_ALL, NJE_ALL,    &
+                              NMASK_ALL
+USE MODD_PARAMETERS,    ONLY: XUNDEF
 !
 USE MODI_PACK_2D_1D
 !
@@ -313,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.
@@ -345,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
@@ -370,18 +373,17 @@ END IF
 !
 IF (HREC=='LAT') THEN
 
-  CALL IO_READ_FIELD(TPINFILE,'LAT0',ZW,KRESP)
+  CALL IO_Field_read(TPINFILE,'LAT0',ZW,KRESP)
   PFIELD(:) = ZW
 
 ELSE IF (HREC=='LON') THEN
 
-  CALL IO_READ_FIELD(TPINFILE,'LON0',ZW,KRESP)
+  CALL IO_Field_read(TPINFILE,'LON0',ZW,KRESP)
   PFIELD(:) = ZW
 
 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,7 +397,8 @@ ELSE IF (HREC=='XX') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  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,7 +417,8 @@ ELSE IF (HREC=='DX') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  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,7 +437,8 @@ ELSE IF (HREC=='YY') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  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,7 +457,8 @@ ELSE IF (HREC=='DY') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  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
@@ -468,7 +474,7 @@ ELSE
   YREC(1:LEN(HREC)) = HREC
   IF (HREC(1:8)=='Q_CANYON') THEN
     IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN
-      CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
+      CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
       IF (YSTORAGE_TYPE=='TT') THEN
         PFIELD = 0.
         DEALLOCATE(IMASK)
@@ -480,7 +486,7 @@ ELSE
   END IF
   IF (HREC(1:8)=='T_CANYON') THEN
     IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN
-      CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
+      CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
       IF (YSTORAGE_TYPE=='TT') YREC = 'T_ROAD1             '
     END IF
   END IF
@@ -494,14 +500,15 @@ ELSE
 !
   IF (HDIR=='H') THEN
     CALL PREPARE_METADATA_READ_SURF(YREC,'XY',4,TYPEREAL,2,'READ_SURFX1_MNH',TZFIELD)
-    CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+    CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
   ELSEIF (HDIR=='A'.OR.HDIR=='E') THEN
     CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,2,'READ_SURFX1_MNH',TZFIELD)
-    CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+    CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
   ELSE
     CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,1,'READ_SURFX1_MNH',TZFIELD)
-    CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP)
+    CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
   END IF
+  HCOMMENT = TZFIELD%CCOMMENT
 !
   IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
@@ -574,16 +581,14 @@ END SUBROUTINE READ_SURFX1_MNH
 !             ------------
 !
 USE MODE_ll
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, &
-                             NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, NMASK_ALL
-USE MODD_PARAMETERS,  ONLY : XUNDEF
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, &
+                              NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, NMASK_ALL
+USE MODD_PARAMETERS,    ONLY: XUNDEF
 !
 USE MODI_PACK_2D_1D
 !
@@ -598,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.
@@ -631,16 +636,18 @@ ILUOUT = TOUT%NLU
 IF (HDIR=='H') THEN
   ALLOCATE(ZWORK(NIU,NJU,SIZE(PFIELD,2)))
   CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEREAL,3,'READ_SURFX2_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
 ELSEIF (HDIR=='A'.OR.HDIR=='E') THEN
   ALLOCATE(ZWORK(NIU_ALL,NJU_ALL,SIZE(PFIELD,2)))
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',4,TYPEREAL,3,'READ_SURFX2_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',4,TYPEREAL,2,'READ_SURFX2_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
 END IF
 !
+HCOMMENT = TZFIELD%CCOMMENT
+!
 IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
     WRITE(ILUOUT,*) '-------'
@@ -710,20 +717,18 @@ END SUBROUTINE READ_SURFX2_MNH
 !
 USE MODE_ll
 USE MODE_FIELD,          ONLY: TFIELDDATA,TYPELOG,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
-USE MODD_CST,            ONLY : XPI
+USE MODD_DATA_COVER_PAR, ONLY: JPCOVER
+USE MODD_CST,            ONLY: XPI
 !
-USE MODD_IO_SURF_MNH,    ONLY : TOUT, TPINFILE, NMASK, &
-                                NIU, NJU, NIB, NJB, NIE, NJE, &
-                                NIU_ALL, NJU_ALL, NIB_ALL,    &
-                                NJB_ALL, NIE_ALL, NJE_ALL,    &
-                                NMASK_ALL
+USE MODD_IO_SURF_MNH,    ONLY: TOUT, TPINFILE, NMASK, &
+                               NIU, NJU, NIB, NJB, NIE, NJE, &
+                               NIU_ALL, NJU_ALL, NIB_ALL,    &
+                               NJB_ALL, NIE_ALL, NJE_ALL,    &
+                               NMASK_ALL
 !
 USE MODI_PACK_2D_1D
 !
@@ -736,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.
@@ -800,8 +805,8 @@ NCOVER=COUNT(OFLAG)
 ALLOCATE (ZWORK3D(IIU,IJU,NCOVER))
 ZWORK3D(:,:,:) =  0.0
 !
-CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION)
-CALL IO_READ_FIELD(TPINFILE,'BUG',    IBUGFIX)
+CALL IO_Field_read(TPINFILE,'VERSION',IVERSION)
+CALL IO_Field_read(TPINFILE,'BUG',    IBUGFIX)
 
 IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN
   GCOVER_PACKED = .FALSE.
@@ -816,7 +821,7 @@ ELSE
   TZFIELD%NTYPE      = TYPELOG
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED)
+  CALL IO_Field_read(TPINFILE,TZFIELD,GCOVER_PACKED)
 END IF
 !
 IF (.NOT. GCOVER_PACKED) THEN
@@ -835,15 +840,17 @@ IF (.NOT. GCOVER_PACKED) THEN
     TZFIELD%CDIR       = YDIR
     IF (OFLAG(JL2)) THEN
       ICOVER=ICOVER+1
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,ICOVER),IRESP)
+      CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK3D(:,:,ICOVER),IRESP)
     END IF
     IF (IRESP/=0) KRESP=IRESP
   END DO
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,YDIR,4,TYPEREAL,3,'READ_SURFX2COV_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP)
 END IF
 !
+HCOMMENT = TZFIELD%CCOMMENT
+!
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
   WRITE(ILUOUT,*) '-------'
@@ -904,20 +911,18 @@ END SUBROUTINE READ_SURFX2COV_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPELOG,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
-USE MODD_CST,         ONLY : XPI
+USE MODD_CST,           ONLY: XPI
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE, &
-                             NIU_ALL, NJU_ALL, NIB_ALL,    &
-                             NJB_ALL, NIE_ALL, NJE_ALL,    &
-                             NMASK_ALL
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK,        &
+                              NIU, NJU, NIB, NJB, NIE, NJE, &
+                              NIU_ALL, NJU_ALL, NIB_ALL,    &
+                              NJB_ALL, NIE_ALL, NJE_ALL,    &
+                              NMASK_ALL
 !
 USE MODI_PACK_2D_1D
 !
@@ -930,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.
@@ -995,8 +1000,8 @@ END IF
 ALLOCATE (ZWORK2D(IIU,IJU))
 ZWORK2D(:,:) =  0.0
 !
-CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION)
-CALL IO_READ_FIELD(TPINFILE,'BUG',    IBUGFIX)
+CALL IO_Field_read(TPINFILE,'VERSION',IVERSION)
+CALL IO_Field_read(TPINFILE,'BUG',    IBUGFIX)
 
 IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN
   GCOVER_PACKED = .FALSE.
@@ -1011,7 +1016,7 @@ ELSE
   TZFIELD%NTYPE      = TYPELOG
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,GCOVER_PACKED,KRESP)
 END IF
 !
 IF (.NOT. GCOVER_PACKED) THEN
@@ -1026,15 +1031,13 @@ IF (.NOT. GCOVER_PACKED) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK2D,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK2D,KRESP)
 ELSE
-  WRITE(ILUOUT,*) 'WARNING'
-  WRITE(ILUOUT,*) '-------'
-  WRITE(ILUOUT,*) 'error : GCOVER_PACKED = ', GCOVER_PACKED, ' and we try to read the covers one by one '
-  WRITE(ILUOUT,*) ' '
-  CALL ABORT
+  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,*) '-------'
@@ -1092,16 +1095,15 @@ END SUBROUTINE READ_SURFX2COV_1COV_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEINT
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE
-USE MODD_CONF,        ONLY : CPROGRAM
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_CONF,          ONLY: CPROGRAM
 !
 !
 !
@@ -1112,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
 !
@@ -1126,15 +1128,17 @@ 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
-   CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
-   CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
+   CALL IO_Field_read(TPINFILE,'IMAX',IIMAX)
+   CALL IO_Field_read(TPINFILE,'JMAX',IJMAX)
    KFIELD = IIMAX * IJMAX
 ELSE
    CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD)
-   CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP)
+   CALL IO_Field_read(TPINFILE,TZFIELD,KFIELD,KRESP)
+   HCOMMENT = TZFIELD%CCOMMENT
 
     IF (KRESP /=0) THEN
       WRITE(ILUOUT,*) 'WARNING'
@@ -1189,14 +1193,13 @@ END SUBROUTINE READ_SURFN0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEINT
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE
 !
 USE MODI_PACK_2D_1D
 !
@@ -1208,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.
@@ -1231,13 +1234,13 @@ ILUOUT = TOUT%NLU
 IF (HDIR=='-') THEN
 !
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,1,'READ_SURFN1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,KFIELD,KRESP)
 !
 ELSE IF (HDIR=='H') THEN
   ALLOCATE(IWORK(NIU,NJU))
 !
   CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFN1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,IWORK,KRESP)
 !
  IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
@@ -1249,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
 !
@@ -1296,16 +1301,16 @@ END SUBROUTINE READ_SURFN1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
+USE MODE_FIELD,         ONLY: TFIELDDATA, TYPECHAR
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR
-USE MODE_FMREAD
 USE MODE_MSG
 USE MODE_POS
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
-USE MODD_CONF,        ONLY : LCARTESIAN, CPROGRAM
-USE MODD_LUNIT,       ONLY : TPGDFILE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
+USE MODD_CONF,          ONLY: LCARTESIAN, CPROGRAM
+USE MODD_LUNIT,         ONLY: TPGDFILE
 !
 !
 IMPLICIT NONE
@@ -1315,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
 !
@@ -1338,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))
@@ -1381,7 +1387,7 @@ IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NM
       END IF
     CASE DEFAULT
       CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD)
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP)
+      CALL IO_Field_read(TPINFILE,TZFIELD,HFIELD,KRESP)
       !
       IF (KRESP /=0) THEN
         CALL PRINT_MSG(NVERB_FATAL,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': error when reading article '//TRIM(HREC)// &
@@ -1399,7 +1405,8 @@ ELSE IF ( HREC=='GRID_TYPE'.AND. ( &
   END IF
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP)
+  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)// &
@@ -1451,12 +1458,11 @@ END SUBROUTINE READ_SURFC0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPEINT,TYPELOG
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT,TYPELOG
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
@@ -1472,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.
@@ -1493,7 +1499,7 @@ ILUOUT = TOUT%NLU
 !
 IF (HDIR=='-') THEN
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,1,'READ_SURFL1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
 
   IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
@@ -1508,7 +1514,7 @@ ELSE IF (HDIR=='H') THEN
 !
   ALLOCATE(IWORK(NIU,NJU))
   CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFL1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,IWORK,KRESP)
   WHERE (IWORK==1) GWORK = .TRUE.
   DEALLOCATE(IWORK)
 !
@@ -1524,6 +1530,9 @@ ELSE IF (HDIR=='H') THEN
 !
   DEALLOCATE(GWORK)
 END IF
+
+HCOMMENT = TZFIELD%CCOMMENT
+
 !-------------------------------------------------------------------------------
 END SUBROUTINE READ_SURFL1_MNH
 !
@@ -1567,13 +1576,12 @@ END SUBROUTINE READ_SURFL1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPELOG
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
 !
 !
 IMPLICIT NONE
@@ -1583,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
 !
@@ -1611,7 +1619,7 @@ IF (HREC=='ECOCLIMAP') THEN
 END IF
 !
 CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD)
-CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP)
+CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
 HCOMMENT = TZFIELD%CCOMMENT
 !
 IF (KRESP /=0) THEN
@@ -1665,13 +1673,12 @@ END SUBROUTINE READ_SURFL0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPECHAR
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
 USE MODD_TYPE_DATE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
 !
 !
 IMPLICIT NONE
@@ -1684,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
 !
@@ -1703,9 +1710,10 @@ 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_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
+  CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
 ELSE
   TZFIELD%CMNHNAME   = 'STORAGETYPE'
   TZFIELD%CSTDNAME   = ''
@@ -1717,7 +1725,7 @@ ELSE
   TZFIELD%NTYPE      = TYPECHAR
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40)
+  CALL IO_Field_read(TPINFILE,TZFIELD,YFILETYPE40)
   YFILETYPE2 = YFILETYPE40(1:2)
 END IF
 IF (YFILETYPE2(1:2)=='PG') THEN
@@ -1730,7 +1738,7 @@ IF (YFILETYPE2(1:2)=='PG') THEN
   RETURN
 END IF
 !
-CALL IO_READ_FIELD(TPINFILE,HREC,TZDATETIME,KRESP)
+CALL IO_Field_read(TPINFILE,HREC,TZDATETIME,KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
@@ -1789,12 +1797,11 @@ END SUBROUTINE READ_SURFT0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR,TYPEINT,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TYPECHAR, TYPEINT, TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
 !
 !
 IMPLICIT NONE
@@ -1809,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
 !
@@ -1827,9 +1834,10 @@ 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_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
+  CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
 ELSE
   TZFIELD%CMNHNAME   = 'STORAGETYPE'
   TZFIELD%CSTDNAME   = ''
@@ -1841,7 +1849,7 @@ ELSE
   TZFIELD%NTYPE      = TYPECHAR
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40)
+  CALL IO_Field_read(TPINFILE,TZFIELD,YFILETYPE40)
   YFILETYPE2 = YFILETYPE40(1:2)
 END IF
 !IF (YFILETYPE2(1:2)=='PG') THEN
@@ -1859,13 +1867,13 @@ 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
 TZFIELD%LTIMEDEP   = .FALSE.
 !
-CALL IO_READ_FIELD(TPINFILE,TZFIELD,ITDATE(:,:),KRESP)
+CALL IO_Field_read(TPINFILE,TZFIELD,ITDATE(:,:),KRESP)
 !
 KYEAR(:)  = ITDATE(1,:)
 KMONTH(:) = ITDATE(2,:)
@@ -1884,13 +1892,13 @@ 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
 TZFIELD%LTIMEDEP   = .FALSE.
 !
-CALL IO_READ_FIELD(TPINFILE,TZFIELD,PTIME(:),KRESP)
+CALL IO_Field_read(TPINFILE,TZFIELD,PTIME(:),KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90
index e03293b38e7e7e0cd556a569ba248fd9b888aac3..e9d83fe22a861c9cdba80ad3e0c4cf3c2abf1221 100644
--- a/src/MNH/read_ver_grid.f90
+++ b/src/MNH/read_ver_grid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE READ_VER_GRID(TPPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),POINTER,      INTENT(IN) :: TPPRE_REAL1! namelist file
 REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PZHAT      ! vertival grid of input fmfile
@@ -70,7 +70,7 @@ END MODULE MODI_READ_VER_GRID
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1
 !!         XZHAT
 !!      Module MODD_DIM1
@@ -104,11 +104,10 @@ END MODULE MODI_READ_VER_GRID
 USE MODD_CONF           ! declaration modules
 USE MODD_DIM_n, NKMAX_n=>NKMAX
 USE MODD_GRID_n, LSLEVE_n=>LSLEVE, XLEN1_n=>XLEN1, XLEN2_n=>XLEN2
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
-USE MODE_FM
 USE MODE_MSG
 USE MODE_POS
 !
diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90
index 0073804642c9429198876d832d7395e767c4597b..e057e1223321a3a8f3f6a1748d82da97d3a72b12 100644
--- a/src/MNH/rel_forcingn.f90
+++ b/src/MNH/rel_forcingn.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2010-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     #####################
       MODULE MODI_REL_FORCING_n
 !     #####################
@@ -70,7 +71,7 @@ END MODULE MODI_REL_FORCING_n
 !!        TDTADVFRC: date of each advecting-forcing profile
 !!        XUFRC,XVFRC,XWFRC,XTHFRC,XRVFRC: advecting-forcing variables
 !!      Module MODD_LUNIT :  contains logical unit names for all models
-!!        CLUOUT0 : name of output-listing
+!!        TLUOUT0 : name of output-listing
 !!      Module MODD_PARAMETERS: declaration of parameter variables
 !!        JPVEXT: define the number of marginal points out of the 
 !!        physical domain along the vertical direction.    
@@ -108,7 +109,6 @@ USE MODD_RELFRC_n     ! Modules for time evolving advfrc
 USE MODD_TIME
 !
 USE MODE_DATETIME
-USE MODE_IO_ll
 !
 USE MODI_BUDGET
 USE MODI_SHUMAN
diff --git a/src/MNH/reset_exseg.f90 b/src/MNH/reset_exseg.f90
index ba9b61d895766d71d4c857c159f2f89d368e54cc..5c6a80d42b249e954c295db03ba6176789c28f6a 100644
--- a/src/MNH/reset_exseg.f90
+++ b/src/MNH/reset_exseg.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !     #######################
@@ -9,9 +9,7 @@
 !
 INTERFACE
 !
-      SUBROUTINE RESET_EXSEG(HLUOUT)
-!
-CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT ! Name  for output listing
+      SUBROUTINE RESET_EXSEG()
 !
 END SUBROUTINE RESET_EXSEG
 !
@@ -20,7 +18,7 @@ END INTERFACE
 END MODULE MODI_RESET_EXSEG
 !
 !     ##############################
-      SUBROUTINE RESET_EXSEG(HLUOUT)
+      SUBROUTINE RESET_EXSEG()
 !     ##############################
 !
 !!****  *RESET_EXSEG* - routine used to mofify the EXSEG1.nam informations
@@ -57,21 +55,20 @@ END MODULE MODI_RESET_EXSEG
 !!      Modifications  04/06/02  (P Jabouille) reset radiation and convective options
 !!                   02/2018 Q.Libois ECRAD
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FILE,          ONLY : IO_File_open,IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
 USE MODE_POS
 !
 USE MODD_DIAG_FLAG
 USE MODD_CH_MNHC_n, ONLY: LUSECHEM
 USE MODD_CONF_n, ONLY: LUSERV
 USE MODD_GET_n
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_PARAM_n, ONLY: CDCONV, CRAD
 USE MODN_PARAM_KAFR_n
 USE MODN_PARAM_RAD_n
@@ -82,8 +79,6 @@ IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
 !
-CHARACTER (LEN=*),  INTENT(IN) :: HLUOUT ! Name for output listing
-!
 !*       0.2   declarations of local variables
 !
 INTEGER :: IRESP,ILUNAM        ! return code and logical unit number
@@ -100,8 +95,8 @@ TYPE(TFILEDATA),POINTER :: TZNMLFILE! Namelist file
 !
 TZNMLFILE  => NULL()
 !
-CALL IO_FILE_FIND_BYNAME('DIAG1.nam',TZNMLFILE,IRESP)
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_find_byname('DIAG1.nam',TZNMLFILE,IRESP)
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 !-------------------------------------------------------------------------------
@@ -189,6 +184,6 @@ PRINT*,' '
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 END SUBROUTINE RESET_EXSEG
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index ab576c43984a2eb1086698e864eeaf5c0f542761..78e14a357529a973f4b6409088f60b1fd8f9288b 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -24,10 +24,10 @@ INTERFACE
                                   PINPRS,PINPRG,PINPRH,     &
                                   PSOLORG,PMI,                                         &
 !                                   PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH,         &
-                                  PINDEP, PSUPSAT,  PNACT, PNPRO,PSSPRO,               &
+                                  PINDEP, PSUPSAT,  PNACT, PNPRO,PSSPRO, PRAINFR,      &
                                   PSEA,PTOWN          )   
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 CHARACTER(LEN=4),         INTENT(IN)   :: HCLOUD   ! kind of cloud
 CHARACTER(LEN=4),         INTENT(IN)   :: HACTCCN  ! kind of CCN activation scheme
@@ -135,7 +135,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PSUPSAT  !sursat
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNACT    !concentrtaion d'aérosols activés au temps t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNPRO    !concentrtaion d'aérosols activés au temps t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PSSPRO   !sursat
-!
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR  ! Rain fraction
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA  ! Land Sea mask
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction
 !
@@ -161,7 +161,7 @@ END MODULE MODI_RESOLVED_CLOUD
                                   PINPRS,PINPRG,PINPRH,     &
                                   PSOLORG,PMI,                                         &
 !                                   PSPEEDC, PSPEEDR, PSPEEDS, PSPEEDG, PSPEEDH,         &
-                                  PINDEP, PSUPSAT,  PNACT, PNPRO,PSSPRO,               &
+                                  PINDEP, PSUPSAT,  PNACT, PNPRO,PSSPRO, PRAINFR,      &
                                   PSEA,PTOWN          )   
 !     ##########################################################################
 !
@@ -269,30 +269,37 @@ END MODULE MODI_RESOLVED_CLOUD
 !!      S.Riette  : 11/2016 : ice_adjust before and after rain_ice
 !!                            ICE3/ICE4 modified, old version under LRED=F   
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      P. Wautelet: 01/02/2019: ZRSMIN is now allocatable (instead of size of XRTMIN which was sometimes not allocated)
+!!                   02/2019 C.Lac add rain fraction as an output field
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_BUDGET
-USE MODD_CH_AEROSOL , ONLY : LORILAM
-USE MODD_CONF
-USE MODD_CST
-USE MODD_DUST , ONLY : LDUST
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_NSV
-USE MODD_PARAMETERS
-USE MODD_PARAM_C2R2
-USE MODD_PARAM_ICE,  ONLY : CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED
-USE MODD_PARAM_LIMA, ONLY : LCOLD, XCONC_CCN_TOT, NMOD_CCN, NMOD_IFN, NMOD_IMM, LPTSPLIT, &
-                            YRTMIN=>XRTMIN, YCTMIN=>XCTMIN
-USE MODD_RAIN_ICE_DESCR
-USE MODD_SALT , ONLY : LSALT
+USE MODD_BUDGET,         ONLY: LBUDGET_TH, LBUDGET_RC, LBUDGET_RG, LBUDGET_RH, LBUDGET_RI, LBUDGET_RR, LBUDGET_RS, LBUDGET_RV, &
+                               LBUDGET_SV
+USE MODD_CH_AEROSOL,     ONLY: LORILAM
+USE MODD_DUST,           ONLY: LDUST
+USE MODD_CST,            ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XMNH_TINY, XP00, XRD, XRHOLW, XTT
+USE MODD_DUST ,          ONLY: LDUST
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_NSV,            ONLY: NSV_C1R3END, NSV_C2R2BEG, NSV_C2R2END,                            &
+                               NSV_LIMA_BEG, NSV_LIMA_END, NSV_LIMA_CCN_FREE, NSV_LIMA_IFN_FREE, &
+                               NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR
+USE MODD_PARAM_C2R2,     ONLY: LSUPSAT
+USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
+USE MODD_PARAM_ICE,      ONLY: CSEDIM, LADJ_BEFORE, LADJ_AFTER, CFRAC_ICE_ADJUST, LRED
+USE MODD_PARAM_LIMA,     ONLY: LCOLD, XCONC_CCN_TOT, NMOD_CCN, NMOD_IFN, NMOD_IMM, LPTSPLIT, &
+                               YRTMIN=>XRTMIN, YCTMIN=>XCTMIN
+USE MODD_RAIN_ICE_DESCR, ONLY: XRTMIN
+USE MODD_SALT,           ONLY: LSALT
 !
 USE MODE_ll
-USE MODE_FM
 USE MODE_MPPDB
 USE MODE_MSG
 !
+#ifdef MNH_BITREP
+USE MODI_BITREP
+#endif
 USE MODI_BUDGET
 USE MODI_C2R2_ADJUST
 USE MODI_C3R5_ADJUST
@@ -301,24 +308,20 @@ USE MODI_GET_HALO
 USE MODI_ICE_ADJUST
 USE MODI_ICE_C1R3
 USE MODI_KHKO_NOTADJUST
+USE MODI_LIMA
+USE MODI_LIMA_ADJUST
+USE MODI_LIMA_COLD
+USE MODI_LIMA_MIXED
+USE MODI_LIMA_WARM
+USE MODI_RAIN_C2R2_KHKO
 USE MODI_RAIN_ICE
 USE MODI_RAIN_ICE_RED
-USE MODI_RAIN_C2R2_KHKO
 USE MODI_SHUMAN
 #ifdef _OPENACC
 USE MODI_SHUMAN_DEVICE
 #endif
 USE MODI_SLOW_TERMS
 !
-#ifdef MNH_BITREP
-USE MODI_BITREP
-#endif
-USE MODI_LIMA
-USE MODI_LIMA_ADJUST
-USE MODI_LIMA_COLD
-USE MODI_LIMA_MIXED
-USE MODI_LIMA_WARM
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -431,7 +434,7 @@ REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PSUPSAT  !sursat
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNACT    !concentrtaion d'aérosols activés au temps t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PNPRO    !concentrtaion d'aérosols activés au temps t
 REAL, DIMENSION(:,:,:),   INTENT(INOUT) :: PSSPRO   !sursat
-!
+REAL, DIMENSION(:,:,:),   INTENT(OUT)   :: PRAINFR  ! Rain fraction
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PSEA  ! Land Sea mask
 REAL, DIMENSION(:,:), OPTIONAL, INTENT(IN) :: PTOWN ! Town fraction
 !
@@ -489,10 +492,10 @@ REAL  :: ZRATIO                     ! ZMASSTOT / ZMASSCOR
 !
 INTEGER                               :: ISVBEG ! first scalar index for microphysics
 INTEGER                               :: ISVEND ! last  scalar index for microphysics
+REAL, DIMENSION(:),       ALLOCATABLE :: ZRSMIN ! Minimum value for tendencies
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVT   ! scalar variable for microphysics only
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZSVS   ! scalar tendency for microphysics only
 LOGICAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3)):: LLMICRO ! mask to limit computation
-REAL, DIMENSION(SIZE(XRTMIN)) :: ZRSMIN ! Minimum value for tendencies
 ! REAL, DIMENSION(SIZE(PZZ,1),SIZE(PZZ,2),SIZE(PZZ,3), KRR) :: ZFPR
 !
 INTEGER                               :: JMOD, JMOD_IFN
@@ -625,6 +628,7 @@ IF (HCLOUD=='C2R2' .OR. HCLOUD=='C3R5' .OR. HCLOUD=='KHKO' .OR. HCLOUD=='LIMA')
 END IF
 IF (HCLOUD(1:3)=='ICE' .AND. LRED) THEN
 !$acc kernels
+  ALLOCATE(ZRSMIN(SIZE(XRTMIN)))
   ZRSMIN(:) = XRTMIN(:) / PTSTEP
 !$acc end kernels
 ENDIF
@@ -1201,8 +1205,8 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                     PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3),      &
                     PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),            &
                     PINPRC,PINPRR, PEVAP3D,                              &
-!                     PINPRS, PINPRG, PSIGS, PINDEP, PSEA,PTOWN, PFPR=ZFPR)
-                    PINPRS, PINPRG, PSIGS, PINDEP, PSEA=PSEA,PTOWN=PTOWN)
+!                     PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR,, PSEA,PTOWN, PFPR=ZFPR)
+                    PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA=PSEA,PTOWN=PTOWN)
 !$acc end data
     ELSE 
 !$acc update device(PCIT,PCLDFR,                                       &
@@ -1221,7 +1225,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','C2R2//KHKO not yet implemente
                     PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3),      &
                     PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),            &
                     PINPRC, PINPRR, PINPRR3D, PEVAP3D,                   &
-                    PINPRS, PINPRG, PSIGS, PINDEP,                       &
+                    PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR,              &
 !                     PSEA, PTOWN, PFPR=ZFPR                               )
                     PSEA, PTOWN                               )
 !$acc end data
@@ -1307,7 +1311,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented')
                     PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3),       &
                     PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),             &
                     PINPRC, PINPRR, PEVAP3D,                              &
-                    PINPRS, PINPRG, PSIGS, PINDEP, PSEA, PTOWN,           &
+                    PINPRS, PINPRG, PSIGS, PINDEP, PRAINFR, PSEA, PTOWN,    &
 !                     PRT(:,:,:,7), PRS(:,:,:,7), PINPRH, PFPR=ZFPR         )
                     PRT(:,:,:,7), PRS(:,:,:,7), PINPRH        )
     ELSE
@@ -1322,7 +1326,7 @@ CALL PRINT_MSG(NVERB_FATAL,'GEN','RESOLVED_CLOUD','ICE4 not yet implemented')
                     PTHS, PRS(:,:,:,1), PRS(:,:,:,2), PRS(:,:,:,3),       &
                     PRS(:,:,:,4), PRS(:,:,:,5), PRS(:,:,:,6),             &
                     PINPRC, PINPRR, PINPRR3D, PEVAP3D,           &
-                    PINPRS, PINPRG, PSIGS,PINDEP,              &
+                    PINPRS, PINPRG, PSIGS,PINDEP, PRAINFR,                &
                     PSEA, PTOWN,                                          &
 !                     PRT(:,:,:,7),  PRS(:,:,:,7), PINPRH,PFPR=ZFPR )
                     PRT(:,:,:,7),  PRS(:,:,:,7), PINPRH)
diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90
index aaa23d218592064ab5631658ba5454a42d6a3048..2f97d01ac175e333560a4f404e94fa2cfbfe27ee 100644
--- a/src/MNH/resolved_elecn.f90
+++ b/src/MNH/resolved_elecn.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_RESOLVED_ELEC_n
 !     ###########################
@@ -165,9 +166,10 @@ END MODULE MODI_RESOLVED_ELEC_n
 !!      M. Chong      26/01/10  Add Small ions parameters
 !!      M. Chong      31/07/14  Add explicit LiNOx
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!  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 05/2016-04/2018: new data structures and calls for I/O
+!  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 14/03/2019: bugfix: correct management of files
 !!
 !-------------------------------------------------------------------------------
 !
@@ -175,15 +177,15 @@ END MODULE MODI_RESOLVED_ELEC_n
 !              ------------
 !
 USE MODE_ELEC_ll
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list, IO_File_find_byname
 USE MODE_ll
 !
 USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZX, XDZY, XDZZ 
 USE MODD_FIELD_n, ONLY : XRSVS
 USE MODD_CONF, ONLY : L1D, L2D, CEXP
 USE MODD_CST
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA, TFILE_DUMMY
 USE MODD_PARAMETERS, ONLY : JPVEXT
 USE MODD_ELEC_DESCR
 USE MODD_ELEC_n
@@ -344,16 +346,21 @@ CHARACTER (LEN=32) :: YASCFILE
 REAL               :: ZTEMP_DIST
 CHARACTER (LEN=18) :: YNAME
 LOGICAL            :: GLMA_FILE
-TYPE(TFILEDATA),POINTER :: TZFILE_FGEOM_COORD
-TYPE(TFILEDATA),POINTER :: TZFILE_FGEOM_DIAG
-TYPE(TFILEDATA),POINTER :: TZFILE_LMA
-TYPE(TFILEDATA),POINTER :: TZFILE_SERIES_CLOUD_ELEC
+LOGICAL,                 SAVE :: GFIRST_CALL = .TRUE.
+TYPE(TFILEDATA),POINTER, SAVE :: TZFILE_FGEOM_COORD       => NULL()
+TYPE(TFILEDATA),POINTER, SAVE :: TZFILE_FGEOM_DIAG        => NULL()
+TYPE(TFILEDATA),POINTER, SAVE :: TZFILE_LMA               => NULL()
+TYPE(TFILEDATA),POINTER, SAVE :: TZFILE_SERIES_CLOUD_ELEC => NULL()
 !
 NULLIFY(TZFIELDS_ll)
-TZFILE_FGEOM_COORD       => NULL()
-TZFILE_FGEOM_DIAG        => NULL()
-TZFILE_LMA               => NULL()
-TZFILE_SERIES_CLOUD_ELEC => NULL()
+!
+IF ( GFIRST_CALL ) THEN
+  GFIRST_CALL = .FALSE.
+  TZFILE_FGEOM_COORD       => TFILE_DUMMY
+  TZFILE_FGEOM_DIAG        => TFILE_DUMMY
+  TZFILE_LMA               => TFILE_DUMMY
+  TZFILE_SERIES_CLOUD_ELEC => TFILE_DUMMY
+END IF
 !
 !------------------------------------------------------------------------------
 !
@@ -846,8 +853,9 @@ ENDIF
 IF (KTCOUNT==1 .AND. IPROC==0) THEN
   IF (LFLASH_GEOM) THEN
     YASCFILE = CEXP//"_fgeom_diag.asc"
-    CALL IO_FILE_ADD2LIST(TZFILE_FGEOM_DIAG,YASCFILE,'TXT','WRITE')
-    CALL IO_FILE_OPEN_ll(TZFILE_FGEOM_DIAG,HPOSITION='APPEND',HSTATUS='NEW')
+    TZFILE_FGEOM_DIAG => NULL()
+    CALL IO_File_add2list(TZFILE_FGEOM_DIAG,YASCFILE,'TXT','WRITE')
+    CALL IO_File_open(TZFILE_FGEOM_DIAG,HPOSITION='APPEND',HSTATUS='NEW')
     ILU = TZFILE_FGEOM_DIAG%NLU
     WRITE (UNIT=ILU, FMT='(A)') '--------------------------------------------------------'
     WRITE (UNIT=ILU, FMT='(A)') '*FLASH CHARACTERISTICS FROM FLASH_GEOM_ELEC*'
@@ -870,8 +878,9 @@ IF (KTCOUNT==1 .AND. IPROC==0) THEN
 !
     IF (LSAVE_COORD) THEN
       YASCFILE = CEXP//"_fgeom_coord.asc"
-      CALL IO_FILE_ADD2LIST(TZFILE_FGEOM_COORD,YASCFILE,'TXT','WRITE')
-      CALL IO_FILE_OPEN_ll(TZFILE_FGEOM_COORD,HPOSITION='APPEND',HSTATUS='NEW')
+      TZFILE_FGEOM_COORD => NULL()
+      CALL IO_File_add2list(TZFILE_FGEOM_COORD,YASCFILE,'TXT','WRITE')
+      CALL IO_File_open(TZFILE_FGEOM_COORD,HPOSITION='APPEND',HSTATUS='NEW')
       ILU = TZFILE_FGEOM_COORD%NLU
       WRITE (UNIT=ILU,FMT='(A)') '------------------------------------------'
       WRITE (UNIT=ILU,FMT='(A)') '*****FLASH COORD. FROM FLASH_GEOM_ELEC****'
@@ -888,8 +897,9 @@ IF (KTCOUNT==1 .AND. IPROC==0) THEN
 !
   IF (LSERIES_ELEC) THEN
     YASCFILE = CEXP//"_series_cloud_elec.asc"
-    CALL IO_FILE_ADD2LIST(TZFILE_SERIES_CLOUD_ELEC,YASCFILE,'TXT','WRITE')
-    CALL IO_FILE_OPEN_ll(TZFILE_SERIES_CLOUD_ELEC,HPOSITION='APPEND',HSTATUS='NEW')
+    TZFILE_SERIES_CLOUD_ELEC => NULL()
+    CALL IO_File_add2list(TZFILE_SERIES_CLOUD_ELEC,YASCFILE,'TXT','WRITE')
+    CALL IO_File_open(TZFILE_SERIES_CLOUD_ELEC,HPOSITION='APPEND',HSTATUS='NEW')
     ILU = TZFILE_SERIES_CLOUD_ELEC%NLU
     WRITE (UNIT=ILU, FMT='(A)') '----------------------------------------------------'
     WRITE (UNIT=ILU, FMT='(A)') '********* RESULTS FROM of LSERIES_ELEC *************'
@@ -935,8 +945,8 @@ IF (LFLASH_GEOM .AND. LLMA) THEN
 !
   IF (GLMA_FILE) THEN
     IF(CLMA_FILE(1:5) /= "BEGIN") THEN ! close previous file if exists
-      CALL IO_FILE_FIND_BYNAME(CLMA_FILE,TZFILE_LMA,IERR)
-      CALL IO_FILE_CLOSE_ll(TZFILE_LMA)
+      CALL IO_File_find_byname(CLMA_FILE,TZFILE_LMA,IERR)
+      CALL IO_File_close(TZFILE_LMA)
       TZFILE_LMA => NULL()
     ENDIF
 !
@@ -949,8 +959,9 @@ IF (LFLASH_GEOM .AND. LLMA) THEN
     CLMA_FILE = CEXP//"_SIMLMA_"//YNAME//".dat"
 !
     IF ( IPROC .EQ. 0 ) THEN
-      CALL IO_FILE_ADD2LIST(TZFILE_LMA,CLMA_FILE,'TXT','WRITE')
-      CALL IO_FILE_OPEN_ll(TZFILE_LMA,HPOSITION='APPEND',HSTATUS='NEW')
+      TZFILE_LMA => NULL()
+      CALL IO_File_add2list(TZFILE_LMA,CLMA_FILE,'TXT','WRITE')
+      CALL IO_File_open(TZFILE_LMA,HPOSITION='APPEND',HSTATUS='NEW')
       ILU = TZFILE_LMA%NLU
       WRITE (UNIT=ILU,FMT='(A)') '----------------------------------------'
       WRITE (UNIT=ILU,FMT='(A)') '*** FLASH COORD. FROM LMA SIMULATOR ****'
@@ -1026,10 +1037,22 @@ END IF
 !
 !   Close Ascii Files if KTCOUNT = NSTOP
 IF (OEXIT .AND. IPROC==0) THEN
-  IF (LFLASH_GEOM)                  CALL IO_FILE_CLOSE_ll(TZFILE_FGEOM_DIAG)
-  IF(LFLASH_GEOM .AND. LSAVE_COORD) CALL IO_FILE_CLOSE_ll(TZFILE_FGEOM_COORD)
-  IF (LSERIES_ELEC)                 CALL IO_FILE_CLOSE_ll(TZFILE_SERIES_CLOUD_ELEC)
-  IF (LFLASH_GEOM .AND. LLMA)       CALL IO_FILE_CLOSE_ll(TZFILE_LMA)
+  IF (LFLASH_GEOM) THEN
+    CALL IO_File_close(TZFILE_FGEOM_DIAG)
+    TZFILE_FGEOM_DIAG => TFILE_DUMMY
+  END IF
+  IF (LFLASH_GEOM .AND. LSAVE_COORD) THEN
+    CALL IO_File_close(TZFILE_FGEOM_COORD)
+    TZFILE_FGEOM_COORD => TFILE_DUMMY
+  END IF
+  IF (LSERIES_ELEC) THEN
+    CALL IO_File_close(TZFILE_SERIES_CLOUD_ELEC)
+    TZFILE_SERIES_CLOUD_ELEC => TFILE_DUMMY
+  END IF
+  IF (LFLASH_GEOM .AND. LLMA) THEN
+    CALL IO_File_close(TZFILE_LMA)
+    TZFILE_LMA => TFILE_DUMMY
+  END IF
 ENDIF
 !
 !
diff --git a/src/MNH/retrieve1_nest_infon.f90 b/src/MNH/retrieve1_nest_infon.f90
index 03b49bc76a3ef17ad6dadd7e242c54bd0fee213e..8edcfee3808642754cfa8bad3f227d8ed1b99470 100644
--- a/src/MNH/retrieve1_nest_infon.f90
+++ b/src/MNH/retrieve1_nest_infon.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 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.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 spawn 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ################################
       MODULE MODI_RETRIEVE1_NEST_INFO_n
 !     ################################
@@ -72,8 +67,6 @@ END MODULE MODI_RETRIEVE1_NEST_INFO_n
 !!        NIMAX, NJMAX
 !!      Module MODD_PARAMETERS :
 !!        JPHEXT
-!!      Module MODD_LUNIT :
-!!        CLUOUT
 !!
 !!    REFERENCE
 !!    ---------
@@ -89,6 +82,7 @@ END MODULE MODI_RETRIEVE1_NEST_INFO_n
 !!      Original        26/09/96
 !!      Modification    30/07/97 (Masson) group MODI_RETRIEVE2_NEST_INFOn
 !!      Modification    04/05/00 (Jabouille) test on CPROGRAM to fill working modules
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -99,6 +93,8 @@ USE MODD_DIM_n
 USE MODD_PGDGRID
 USE MODD_PGDDIM
 USE MODD_CONF
+!
+use mode_msg
 USE MODE_MODELN_HANDLER 
 !
 USE MODI_RETRIEVE2_NEST_INFO_n
@@ -124,11 +120,7 @@ INTEGER :: IMI
 !-------------------------------------------------------------------------------
 !
 !
-IF (KMI<=KDAD) THEN
-   !callabortstop
-  CALL ABORT
-  STOP
-ENDIF
+IF ( KMI <= KDAD ) call Print_msg( NVERB_FATAL, 'GEN', 'RETRIEVE1_NEST_INFO_n', 'KMI<=KDAD' )
 !
 IMI = GET_CURRENT_MODEL_INDEX()
 CALL GOTO_MODEL(KDAD)   
diff --git a/src/MNH/retrieve2_nest_infon.f90 b/src/MNH/retrieve2_nest_infon.f90
index 9464e043180001fc701b10ca84446b7b5f499361..b974932530682ad0186d3465847a2dbb0b6597e9 100644
--- a/src/MNH/retrieve2_nest_infon.f90
+++ b/src/MNH/retrieve2_nest_infon.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.
 !-----------------------------------------------------------------
 !     ################################
@@ -71,7 +71,7 @@ END MODULE MODI_RETRIEVE2_NEST_INFO_n
 !!      Module MODD_PARAMETERS :
 !!        JPHEXT
 !!      Module MODD_LUNIT :
-!!        CLUOUT
+!!        TLUOUT0
 !!
 !!    REFERENCE
 !!    ---------
@@ -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
 !-------------------------------------------------------------------------------
 !
@@ -100,14 +100,15 @@ USE MODD_DIM_ll,       ONLY: NXOR_ALL, NXEND_ALL, NYOR_ALL, NYEND_ALL, NIMAX_TMP
 USE MODD_DIM_n,        ONLY: NIMAX, NJMAX
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,        ONLY: ISNPROC, ISP
+USE MODD_IO,           ONLY: ISNPROC, ISP
 USE MODD_LUNIT,        ONLY: TLUOUT0
 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/salt_filter.f90 b/src/MNH/salt_filter.f90
index bff76dfe979c1d70196c4698031c2fa097ef0aee..bc40e889136a14db3727ae76c2c90da0e3572948 100644
--- a/src/MNH/salt_filter.f90
+++ b/src/MNH/salt_filter.f90
@@ -45,19 +45,8 @@ END MODULE MODI_SALT_FILTER
 !!   MODIFICATIONS
 !!    -------------
 !!   Original
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
-! Entry variables:
-!
-! PRSVS(INOUT)       -Array of moments included in PRSVS
-!
-!*************************************************************
-! Exit variables:
-!
-!*************************************************************
-! Variables used during the deposition velocity calculation
-! 
-! ZVGK       -Polydisperse settling velocity of the kth moment (m/s)
-!************************************************************
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -66,10 +55,12 @@ END MODULE MODI_SALT_FILTER
 !   IMPLICIT ARGUMENTS
 !
 USE MODD_SALT
-USE MODD_CSTS_SALT
-!
 USE MODE_SALT_PSD
-USE MODD_CST, ONLY : XMNH_TINY
+
+!+ Marine
+USE MODI_INIT_SALT
+!- Marine
+
 !
 IMPLICIT NONE
 !
@@ -78,27 +69,156 @@ IMPLICIT NONE
 REAL,  DIMENSION(:,:,:,:),  INTENT(INOUT) :: PSV
 REAL,  DIMENSION(:,:,:),    INTENT(IN)    :: PRHODREF
 !
-!*       0.2   Declarations of local variables :
-!
-INTEGER :: JN
-INTEGER :: IMODEIDX
-REAL,    DIMENSION(NMODE_SLT*3) :: ZPMIN
-REAL,    DIMENSION(NMODE_SLT)   :: ZINIRADIUS
-REAL,    DIMENSION(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3), NMODE_SLT*3)  :: ZM                  ! [aerosol units] local array which goes to output later
-
-REAL :: ZRGMIN, ZSIGMIN
-REAL :: ZRHOP, ZMI
-INTEGER,DIMENSION(NMODE_SLT) :: NM0, NM3, NM6
-!
-!*       0.3  initialize constant
-!
-ZRHOP = XDENSITY_SALT
-ZMI   = XMOLARWEIGHT_SALT ! molecular mass in kg/mol
-!
+!*      0.2    declarations local variables
+!
+REAL                                  :: ZRHOI               ! [kg/m3] density of aerosol
+REAL                                  :: ZMI                 ! [kg/mol] molar weight of aerosol
+REAL                                  :: ZRGMIN              ! [um] minimum radius accepted
+REAL                                  :: ZSIGMIN             ! minimum standard deviation accepted
+REAL,DIMENSION(:,:,:,:), ALLOCATABLE  :: ZM                  ! [aerosol units] local array which goes to output later
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZMMIN               ! [aerosol units] minimum values for N, sigma, M
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM0                 ! [idx] index for Mode 0 in passed variables
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM3                 ! [idx] indexes for Mode 3 in passed variables
+INTEGER,DIMENSION(:),    ALLOCATABLE  :: NM6                 ! [idx] indexes for Mode 6 in passed variables
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZINIRADIUS          ! initial mean radius
+REAL,DIMENSION(:),       ALLOCATABLE  :: ZINISIGMA           ! initial standard deviation
+INTEGER                               :: JN,IMODEIDX,JJ      ! [idx] loop counters
+
 !-------------------------------------------------------------------------------
+!+ Marine
+CALL INIT_SALT
+!- Marine
+
+
+ALLOCATE (NM0(NMODE_SLT))
+ALLOCATE (NM3(NMODE_SLT))
+ALLOCATE (NM6(NMODE_SLT))
+ALLOCATE (ZM(SIZE(PSV,1), SIZE(PSV,2), SIZE(PSV,3), NMODE_SLT*3))
+ALLOCATE (ZMMIN(NMODE_SLT*3))
+ALLOCATE (ZINIRADIUS(NMODE_SLT))
+ALLOCATE (ZINISIGMA(NMODE_SLT))
+
+PSV(:,:,:,:) = MAX(PSV(:,:,:,:), XMNH_TINY)
+
+DO JN=1,NMODE_SLT
+  IMODEIDX = JPSALTORDER(JN)
+  !Calculations here are for one mode only
+   ZINISIGMA(JN) = XINISIG_SLT(IMODEIDX)
+  IF (CRGUNITS=="MASS") THEN
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX) * EXP(-3.*(LOG(XINISIG_SLT(IMODEIDX)))**2)
+  ELSE
+    ZINIRADIUS(JN) = XINIRADIUS_SLT(IMODEIDX)
+  END IF
+
+  !Set counter for number, M3 and M6
+  NM0(JN) = 1+(JN-1)*3
+  NM3(JN) = 2+(JN-1)*3
+  NM6(JN) = 3+(JN-1)*3
+  !Get minimum values possible
+  ZMMIN(NM0(JN)) = XN0MIN_SLT(IMODEIDX)
+  ZRGMIN         = ZINIRADIUS(JN)
+  IF (LVARSIG_SLT) THEN
+    ZSIGMIN = XSIGMIN_SLT
+  ELSE
+    ZSIGMIN = XINISIG_SLT(IMODEIDX)
+  ENDIF
+  ZMMIN(NM3(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**3)*EXP(4.5 * LOG(ZSIGMIN)**2)
+  ZMMIN(NM6(JN)) = ZMMIN(NM0(JN)) * (ZRGMIN**6)*EXP(18. * LOG(ZSIGMIN)**2)
+END DO
+!
+!Set density of aerosol, here dust (kg/m3)
+ZRHOI = XDENSITY_SALT
+!Set molecular weight of dust !NOTE THAT THIS IS NOW IN KG
+ZMI   = XMOLARWEIGHT_SALT
+!
+DO JN=1,NMODE_SLT
+     !calculate moment 3 from total aerosol mass (molec_{aer}/molec_{air} ==>
+     IF (LVARSIG_SLT) THEN
+     ZM(:,:,:,NM3(JN)) =                        &
+          PSV(:,:,:,2+(JN-1)*3)                & !molec_{aer}/molec_{aer}
+          * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+          * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+          * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+          * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+          / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+    ELSE
+       IF ((LRGFIX_SLT)) THEN
+          ZM(:,:,:,NM3(JN)) =                   &
+          PSV(:,:,:,JN)                        & !molec_{aer}/molec_{aer}
+          * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+          * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+          * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+          * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+          / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+      ELSE
+          ZM(:,:,:,NM3(JN)) =                   &
+          PSV(:,:,:,2+(JN-1)*2)                & !molec_{aer}/molec_{aer}
+          * (ZMI/XMD)                           & !==>kg_{aer}/kg_{aer}
+          * PRHODREF(:,:,:)                     & !==>kg_{aer}/m3_{air}
+          * (1.d0/ZRHOI)                        & !==>m3_{aer}/m3_{air}
+          * XM3TOUM3_SALT                            & !==>um3_{aer}/m3_{air}
+          / (XPI * 4./3.)                         !==>um3_{aer}/m3_{air} (volume ==> 3rd moment)
+      END IF
+    END IF
+
+! calculate moment 0 from dispersion and mean radius
+     ZM(:,:,:,NM0(JN))=  ZM(:,:,:,NM3(JN))/&
+       ((ZINIRADIUS(JN)**3)*EXP(4.5 * LOG(ZINISIGMA(JN))**2))
+
+
+! calculate moment 6 from dispersion and mean radius
+     ZM(:,:,:,NM6(JN)) = ZM(:,:,:,NM0(JN)) * (ZINIRADIUS(JN)**6) * &
+               EXP(18 *(LOG(ZINISIGMA(JN)))**2)
+
+     IF (LVARSIG_SLT) THEN
+     WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.&
+            (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))).OR.&
+            (ZM(:,:,:,NM6(JN)) .LT. ZMMIN(NM6(JN))))
+     ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN))
+     ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN))
+     ZM(:,:,:,NM6(JN)) = ZMMIN(NM6(JN))
+     END WHERE
+
+     ELSE IF (.NOT.(LRGFIX_SLT)) THEN
+
+     WHERE ((ZM(:,:,:,NM0(JN)) .LT. ZMMIN(NM0(JN))).OR.&
+            (ZM(:,:,:,NM3(JN)) .LT. ZMMIN(NM3(JN))))
+     ZM(:,:,:,NM0(JN)) = ZMMIN(NM0(JN))
+     ZM(:,:,:,NM3(JN)) = ZMMIN(NM3(JN))
+     END WHERE
+     ENDIF
+
+    ! return to concentration #/m3 =>  (#/molec_{air}
+     IF (LVARSIG_SLT) THEN
+     PSV(:,:,:,1+(JN-1)*3) = ZM(:,:,:,NM0(JN)) * XMD / &
+                              (XAVOGADRO*PRHODREF(:,:,:))
+
+     PSV(:,:,:,2+(JN-1)*3) = ZM(:,:,:,NM3(JN)) * XMD  * XPI * 4./3 * ZRHOI / &
+                              (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+
+     PSV(:,:,:,3+(JN-1)*3) = ZM(:,:,:,NM6(JN)) * XMD  / &
+                              ( XAVOGADRO*PRHODREF(:,:,:) * 1.d-6)
+     ELSE IF (LRGFIX_SLT) THEN
+      PSV(:,:,:,JN)        = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                              (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+     ELSE
+     PSV(:,:,:,1+(JN-1)*2) = ZM(:,:,:,NM0(JN)) * XMD / &
+                              (XAVOGADRO*PRHODREF(:,:,:))
+
+     PSV(:,:,:,2+(JN-1)*2) = ZM(:,:,:,NM3(JN)) * XMD * XPI * 4./3. * ZRHOI  / &
+                              (ZMI*PRHODREF(:,:,:)*XM3TOUM3_SALT)
+     END IF
 
 !
-PSV(:,:,:,:) =  MAX(PSV(:,:,:,:), XMNH_TINY)
-!
+END DO  !Loop on modes
+
+DEALLOCATE(ZINIRADIUS)
+DEALLOCATE(ZMMIN)
+DEALLOCATE(ZINISIGMA)
+DEALLOCATE(ZM)
+DEALLOCATE(NM6)
+DEALLOCATE(NM3)
+DEALLOCATE(NM0)
+
 
 END SUBROUTINE SALT_FILTER
diff --git a/src/MNH/saltlfin.f90 b/src/MNH/saltlfin.f90
index c3a2650b09b25c8d0c1e9b9d87396867f464e2f3..e99be7c7ae28aaa87a751dbbee645ab9dbde10f6 100644
--- a/src/MNH/saltlfin.f90
+++ b/src/MNH/saltlfin.f90
@@ -14,10 +14,14 @@
 !
 INTERFACE
 !
-SUBROUTINE SALTLFI_n(PSV, PRHODREF)
+!++cb++24/10/16
+!SUBROUTINE SALTLFI_n(PSV, PRHODREF)
+SUBROUTINE SALTLFI_n(PSV, PRHODREF, PZZ)
 IMPLICIT NONE
-REAL,       DIMENSION(:,:,:,:),  INTENT(INOUT) :: PSV
-REAL,       DIMENSION(:,:,:),  INTENT(IN) :: PRHODREF
+REAL, DIMENSION(:,:,:,:),  INTENT(INOUT) :: PSV
+REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PRHODREF
+REAL, DIMENSION(:,:,:),    INTENT(IN)    :: PZZ
+
 END SUBROUTINE SALTLFI_n
 !
 END INTERFACE
@@ -26,7 +30,8 @@ END MODULE MODI_SALTLFI_n
 !
 !
 !     ############################################################
-      SUBROUTINE SALTLFI_n(PSV, PRHODREF)
+!      SUBROUTINE SALTLFI_n(PSV, PRHODREF)
+      SUBROUTINE SALTLFI_n(PSV, PRHODREF, PZZ)
 !     ############################################################
 !
 !!    PURPOSE
@@ -43,9 +48,9 @@ END MODULE MODI_SALTLFI_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!    none
-!!
 !!    2014    P.Tulet  modif calcul ZM
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+
 !!    EXTERNAL
 !!    --------
 !!    None
@@ -57,7 +62,9 @@ END MODULE MODI_SALTLFI_n
 !
 USE MODD_SALT
 USE MODD_NSV
-USE MODD_GRID_n, ONLY: XZZ
+!++cb++24/10/16
+!USE MODD_GRID_n, ONLY: XZZ
+!--cb--
 USE MODD_CSTS_SALT
 USE MODD_CST, ONLY :    &
        XPI              & !Definition of pi
@@ -75,6 +82,7 @@ IMPLICIT NONE
 !
 REAL,   DIMENSION(:,:,:,:),    INTENT(INOUT) :: PSV
 REAL,   DIMENSION(:,:,:),      INTENT(IN) :: PRHODREF
+REAL,   DIMENSION(:,:,:),      INTENT(IN) :: PZZ
 !
 !
 !*      0.2    declarations local variables
@@ -88,9 +96,12 @@ REAL,DIMENSION(:),       ALLOCATABLE  :: ZMMIN
 REAL,DIMENSION(:),       ALLOCATABLE  :: ZINIRADIUS, ZINISIGMA
 REAL,DIMENSION(:,:),     ALLOCATABLE  :: ZSEA
 INTEGER :: IKU
+!+Marine
+INTEGER :: IMOMENTS
+!-Marine
 INTEGER :: JI, JJ, JN, JK  ! loop counter
 INTEGER :: IMODEIDX  ! index mode
-REAL, PARAMETER  :: ZN_SALT=0.1 ! particles of sea salt/cm3 {air}
+REAL, PARAMETER  :: ZN_SALT=1E4 ! multiplcative factor for X0MIN
 REAL, PARAMETER  :: ZCLM=800. ! Marine Salt layer (m)
 REAL    :: ZN_SALTN
 !
@@ -102,6 +113,7 @@ REAL    :: ZN_SALTN
 !        1.1    initialisation 
 !
 IKU=SIZE(PSV,3)
+!+ Marine
 !
 ALLOCATE (IM0(NMODE_SLT))
 ALLOCATE (IM3(NMODE_SLT))
@@ -115,11 +127,20 @@ ALLOCATE (ZMMIN(NMODE_SLT*3))
 ALLOCATE (ZSEA(SIZE(PSV,1), SIZE(PSV,2)))
 
 ZSEA(:,:) = 0.
-WHERE ((XZZ(:,:,1) .LT. 0.1).AND.(XZZ(:,:,1) .GE. 0.)) 
+!++cb++20/10/16
+!WHERE ((XZZ(:,:,1) .LT. 0.1).AND.(XZZ(:,:,1) .GE. 0.)) 
+!  ZSEA(:,:) = 1.
+!END WHERE
+!++cb++24/10/16
+!WHERE (XZZ(:,:,1) .LE. 0.01) 
+WHERE (PZZ(:,:,1) .LE. 0.01)
+!--cb--
   ZSEA(:,:) = 1.
 END WHERE
+!--cb--
 !
 !
+!+ Marine
 DO JN = 1, NMODE_SLT
   IM0(JN) = 1+(JN-1)*3
   IM3(JN) = 2+(JN-1)*3
@@ -146,8 +167,8 @@ DO JN = 1, NMODE_SLT
 ENDDO
 !
 !
-ZRHOI = XDENSITY_SALT !1.8e3 !++changed alfgr
-!ZMI   = XMOLARWEIGHT_SALT*1.D3 !100.  !++changed alfgr
+!XDENSITY_SALT est fixé dans modd_csts_salt.f90
+ZRHOI = XDENSITY_SALT 
 ZMI   = XMOLARWEIGHT_SALT 
 ZDEN2MOL = 1E-6 * XAVOGADRO / XMD
 ZFAC=(4./3.)*XPI*ZRHOI*1.e-9
@@ -158,18 +179,37 @@ DO JN=1,NMODE_SLT
 !*       1.1    calculate moment 0 from sea salt number by m3
 !
 ! initial vertical profil of sea salt  and convert in  #/m3
-  IF (JN == 1) ZN_SALTN = 1E-4  *  ZN_SALT *1E6
-  IF (JN == 2) ZN_SALTN = 1.   *  ZN_SALT *1E6
-  IF (JN == 3) ZN_SALTN = 10 *  ZN_SALT *1E6
-  DO JK=1, SIZE(XZZ,3) 
-    DO JJ=1, SIZE(XZZ,2) 
-      DO JI=1, SIZE(XZZ,1) 
-        IF (XZZ(JI,JJ,JK) .LT. 600.) THEN
-         ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN 
-        ELSE IF ((XZZ(JI,JJ,JK) .GE. 600.).AND.(XZZ(JI,JJ,JK) .LT. 1000.)) THEN 
-         ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN - ZN_SALTN*(1.-1E-3)*(XZZ(JI,JJ,JK)-600.) / 400.
-        ELSE IF (XZZ(JI,JJ,JK) .GE. 1000.) THEN
-         ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN *1E-3
+!+Marine : (reprendre XN0MIN_SLT de modd_salt.f90).
+! Pas plus simple de fixer une dimension à ZN_SALT qui dépend de JN pour ne pas
+! avoir à rappeler le schéma d'émission?
+  IF(NMODE_SLT == 5)THEN
+    IF (JN == 1) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT 
+    IF (JN == 2) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT
+    IF (JN == 3) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT
+    IF (JN == 4) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT
+    IF (JN == 5) ZN_SALTN = XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT
+  ELSE 
+    IF (JN == 1) ZN_SALTN =  XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT 
+    IF (JN == 2) ZN_SALTN =  XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT
+    IF (JN == 3) ZN_SALTN =  XN0MIN_SLT(JPSALTORDER(JN)) *  ZN_SALT
+  END IF
+!-Marine
+  DO JK=1, SIZE(PSV,3) 
+    DO JJ=1, SIZE(PSV,2) 
+      DO JI=1, SIZE(PSV,1) 
+!++cb++24/10/16
+!        IF (XZZ(JI,JJ,JK) .LT. 600.) THEN
+        IF (PZZ(JI,JJ,JK) .LT. 600.) THEN
+          ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN 
+!        ELSE IF ((XZZ(JI,JJ,JK) .GE. 600.).AND.(XZZ(JI,JJ,JK) .LT. 1000.)) THEN 
+        ELSE IF ((PZZ(JI,JJ,JK) .GE. 600.).AND.(PZZ(JI,JJ,JK) .LT. 1000.)) THEN
+!          ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN - ZN_SALTN*(1.-1E-3)*(XZZ(JI,JJ,JK)-600.) / 400.
+          ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN - &
+                                 ZN_SALTN * (1.-1E-3) * (PZZ(JI,JJ,JK)-600.) / 400.
+!        ELSE IF (XZZ(JI,JJ,JK) .GE. 1000.) THEN
+        ELSE IF (PZZ(JI,JJ,JK) .GE. 1000.) THEN
+          ZM(JI,JJ,JK,IM0(JN)) = ZN_SALTN * 1E-3
+!--cb--
         END IF
       END DO
     END DO
@@ -179,7 +219,7 @@ DO JN=1,NMODE_SLT
     END WHERE
     WHERE ((ZSEA(:,:) .GT. 0.).AND.(ZSEA(:,:) .LT. 1.))
       ZM(:,:,JK,IM0(JN)) = ZM(:,:,JK,IM0(JN))-(ZM(:,:,JK,IM0(JN)) -ZN_SALTN *1E-3) * &
-      (1. - ZSEA(:,:))
+                           (1. - ZSEA(:,:))
     END WHERE
   END DO
 
@@ -198,12 +238,31 @@ DO JN=1,NMODE_SLT
   ZM(:,:,:,IM6(JN)) = MAX(ZMMIN(IM6(JN)), ZM(:,:,:,IM6(JN)))
 !
 !*       1.4    output concentration
+!+ Marine
+!  PSV(:,:,:,1+(JN-1)*3) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:))
+!  PSV(:,:,:,2+(JN-1)*3) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3.  / &
+!                           (ZMI*PRHODREF(:,:,:)*(1.d0/ZRHOI)*XM3TOUM3_SALT)
+!
+!  PSV(:,:,:,3+(JN-1)*3) = ZM(:,:,:,IM6(JN)) *  XMD / (XAVOGADRO*PRHODREF(:,:,:)*1.d-6)
 !
-  PSV(:,:,:,1+(JN-1)*3) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:))
-  PSV(:,:,:,2+(JN-1)*3) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3.  / &
-                           (ZMI*PRHODREF(:,:,:)*(1.d0/ZRHOI)*XM3TOUM3_SALT)
+!++cb++20/10/16
+  IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG + 1) / NMODE_SLT
+!--cb--
 
-  PSV(:,:,:,3+(JN-1)*3) = ZM(:,:,:,IM6(JN)) *  XMD / (XAVOGADRO*PRHODREF(:,:,:)*1.d-6)
+  IF (IMOMENTS == 3) THEN
+    PSV(:,:,:,1+(JN-1)*3) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:))
+    PSV(:,:,:,2+(JN-1)*3) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3.  / &
+                            (ZMI*PRHODREF(:,:,:)*(1.d0/ZRHOI)*XM3TOUM3_SALT)
+
+    PSV(:,:,:,3+(JN-1)*3) = ZM(:,:,:,IM6(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:)*1.d-6)
+  ELSE IF (IMOMENTS == 2) THEN
+    PSV(:,:,:,1+(JN-1)*2) = ZM(:,:,:,IM0(JN)) * XMD / (XAVOGADRO*PRHODREF(:,:,:))
+    PSV(:,:,:,2+(JN-1)*2) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3.  / &
+                            (ZMI*PRHODREF(:,:,:)*(1.d0/ZRHOI)*XM3TOUM3_SALT)
+  ELSE 
+    PSV(:,:,:,JN) = ZM(:,:,:,IM3(JN)) * XMD*XPI * 4./3.  / &
+                            (ZMI*PRHODREF(:,:,:)*(1.d0/ZRHOI)*XM3TOUM3_SALT)
+  END IF
 !
 END DO
 !
diff --git a/src/MNH/series_cloud_elec.f90 b/src/MNH/series_cloud_elec.f90
index f12d2fdcc054ab93ba7fcebc59e96ee5a7cfc252..6bd26c192d27311fc15960e005344dce7e9e7c62 100644
--- a/src/MNH/series_cloud_elec.f90
+++ b/src/MNH/series_cloud_elec.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_SERIES_CLOUD_ELEC
 !     #############################
@@ -14,7 +15,7 @@ INTERFACE
                                 TPFILE_SERIES_CLOUD_ELEC,       &
                                 PINPRR                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KTCOUNT  ! Temporal loop counter
 !
@@ -88,7 +89,7 @@ END MODULE MODI_SERIES_CLOUD_ELEC
 !
 USE MODD_CONF, ONLY : CEXP
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_REF
 USE MODD_PARAMETERS
 USE MODD_ELEC_DESCR
diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90
index 9fff8dfb88f7aec0e107f3886fff7e9a1a3cd40d..c592e4b540e9bab63c7a48062de2430efad3081b 100644
--- a/src/MNH/seriesn.f90
+++ b/src/MNH/seriesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !     ###################
@@ -63,7 +63,6 @@ USE MODD_TIME_n, ONLY: TDTCUR
 USE MODI_GET_SURF_VAR_n
 !
 USE MODE_DATETIME
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/set_advfrc.f90 b/src/MNH/set_advfrc.f90
index fbdd5d92a0ca977c0f75f07b03e27ba2ff97a52d..b931fe38b25df299015f2528102b153cdf644489 100644
--- a/src/MNH/set_advfrc.f90
+++ b/src/MNH/set_advfrc.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
       MODULE MODI_SETADVFRC
@@ -10,7 +10,7 @@ INTERFACE
 !
 SUBROUTINE SET_ADVFRC(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -85,13 +85,12 @@ USE MODD_DIM_n
 USE MODD_FRC
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n,    ONLY: TLUOUT
 USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT
 USE MODD_REF
 ! 
 USE MODE_DATETIME
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_THERMO
 !
diff --git a/src/MNH/set_bogus_vortex.f90 b/src/MNH/set_bogus_vortex.f90
index 28ae29f476af3a7540f8e624b28e9580b60710e3..4cc56703d6fb758eb51589cb2af19b4cf6197424 100644
--- a/src/MNH/set_bogus_vortex.f90
+++ b/src/MNH/set_bogus_vortex.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2001-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-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.
 !-----------------------------------------------------------------
 !     ############################
@@ -73,9 +73,8 @@ END MODULE MODI_SET_BOGUS_VORTEX
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-USE MODE_IO_ll
 USE MODE_GRIDPROJ
+USE MODE_ll
 USE MODE_MSG
 !
 USE MODD_HURR_CONF,  ONLY: XLATBOG,XLONBOG,XVTMAXSURF,XRADWINDSURF, &
diff --git a/src/MNH/set_conc_lima.f90 b/src/MNH/set_conc_lima.f90
index c111ac6434d0a331477bd5c881a309a47eeb1c72..6f9e6c6ad06019e5104d70c6a2c4e92c01462bd4 100644
--- a/src/MNH/set_conc_lima.f90
+++ b/src/MNH/set_conc_lima.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
@@ -91,9 +91,6 @@ USE MODD_NSV,             ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_ACTI, NS
 USE MODD_CST,             ONLY : XPI, XRHOLW, XRHOLI
 USE MODD_CONF,            ONLY : NVERB
 USE MODD_LUNIT_n,         ONLY : TLUOUT
-
-!
-USE MODE_FM
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/set_cstn.f90 b/src/MNH/set_cstn.f90
index 66ad7d4ccc6efb6134ba4a4f20342c5fae331dea..f51497f748ae1dc62f0503491c7926bfdb4699e1 100644
--- a/src/MNH/set_cstn.f90
+++ b/src/MNH/set_cstn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE SET_CSTN(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS,OPV_PERT,ORMV_BL,PJ,OSHIFT,PCORIOZ) 
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE ! outpput data file
 TYPE(TFILEDATA),        INTENT(IN)  :: TPEXPREFILE ! input data file
@@ -133,8 +133,8 @@ END MODULE MODI_SET_CSTN
 !!        XRD   : Gas constant  for dry air
 !!        XCPD : Specific heat for dry air at constant pressure
 !!
-!!      Module MODD_LUNIT1  : contains logical unit names 
-!!        CLUOUT : name of output-listing
+!!      Module MODD_LUNIT_n  : contains logical unit names
+!!        TLUOUT : name of output-listing
 !!
 !!      Module MODD_CONF    : contains configuration variables for all models. 
 !!        NVERB : verbosity level for output-listing
@@ -172,11 +172,10 @@ END MODULE MODI_SET_CSTN
 USE MODD_CONF
 USE MODD_CST
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_LUNIT_n,    ONLY: CLUOUT, TLUOUT
+USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_LUNIT_n,    ONLY: TLUOUT
 USE MODD_PARAMETERS, ONLY: JPHEXT
 !
-USE MODE_FM
 USE MODE_THERMO
 USE MODE_ll
 USE MODE_MPPDB
diff --git a/src/MNH/set_frc.f90 b/src/MNH/set_frc.f90
index a78aed447248e2114d306eea3c22ba27cbcd9da4..8744c8d9d884afd7e4e7e38e61bd747b0b9d37a1 100644
--- a/src/MNH/set_frc.f90
+++ b/src/MNH/set_frc.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ###################
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE SET_FRC(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -56,7 +56,7 @@ END MODULE MODI_SET_FRC
 !!        XRV   : Gas constant for vapor
 !!        XRD   : Gas constant for dry air
 !!      Module MODD_LUNIT1  : contains logical unit names
-!!        CLUOUT : name of output-listing
+!!        TLUOUT : name of output-listing
 !!      Module MODD_GRID1: declaration of grid variables
 !!        XZHAT: height levels without orography
 !!      Module  MODD_CONF   : contains configuration variables for all models
@@ -107,14 +107,12 @@ USE MODD_GRID_n
 USE MODD_CONF
 USE MODD_FRC
 USE MODD_GRID
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_REF
 USE MODD_PARAMETERS
 !
 USE MODE_DATETIME
 USE MODE_THERMO
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_HEIGHT_PRESS  ! interface modules
diff --git a/src/MNH/set_geosbal.f90 b/src/MNH/set_geosbal.f90
index 4c0316cd6b16fb37fdfd7a2e86fcb2f55b02dac0..10287c546607fc73c1514b27bea0e810ece3f539 100644
--- a/src/MNH/set_geosbal.f90
+++ b/src/MNH/set_geosbal.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -195,9 +195,6 @@ END MODULE MODI_SET_GEOSBAL
 !!        XP00  : reference pressure
 !!        XOMEGA : earth rotation
 !!
-!!      Module MODD_LUNIT1  : contains logical unit names
-!!        CLUOUT : name of output-listing
-!!
 !!      Module MODD_CONF    : contains configuration variables for all models.
 !!
 !!        L2D        : logical for 2D model version
diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90
index 0880b974cd302c996e1bb4d1b9ca62e8ffbc9edc..6bd63a50719bd39eca5446d96ffe6f79ddbad481 100644
--- a/src/MNH/set_grid.f90
+++ b/src/MNH/set_grid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -24,7 +24,7 @@ INTERFACE
                           KBAK_NUMB,KOUT_NUMB,TPBACKUPN,TPOUTPUTN             )
 !
 USE MODD_TYPE_DATE
-USE MODD_IO_ll, ONLY: TFILEDATA,TOUTBAK
+USE MODD_IO, ONLY: TFILEDATA,TOUTBAK
 !
 INTEGER,                INTENT(IN)  :: KMI       ! Model index
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE !Initial file
@@ -237,19 +237,18 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_DYN
 USE MODD_GRID
-USE MODD_IO_ll,   ONLY: TFILEDATA,TOUTBAK
+USE MODD_IO,      ONLY: TFILEDATA,TOUTBAK
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_OUT_n,   ONLY: OUT_MODEL
 USE MODD_PARAMETERS
 USE MODD_NESTING
 !
-USE MODE_FIELD,   ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_GATHER_ll
 USE MODE_GRIDCART
 USE MODE_GRIDPROJ
-USE MODE_IO_MANAGE_STRUCT
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_Bakout_struct_prepare
 USE MODE_ll
 USE MODE_TIME
 !
@@ -343,43 +342,43 @@ TYPE(TFIELDDATA)       :: TZFIELD
 !
 !*       1.1   Spatial grid
 !
-CALL IO_READ_FIELD(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
+CALL IO_Field_read(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
 IF (IRESP /= 0) CSTORAGE_TYPE='TT'
 !
 IF (KMI == 1) THEN
   ! this parameter is also useful in the cartesian to
   ! compute the sun position for the radiation scheme
-  CALL IO_READ_FIELD(TPINIFILE,'LON0',XLON0)
+  CALL IO_Field_read(TPINIFILE,'LON0',XLON0)
   !
   ! this parameter is also useful in the cartesian to
   ! compute the Coriolis parameter
-  CALL IO_READ_FIELD(TPINIFILE,'LAT0',XLAT0)
+  CALL IO_Field_read(TPINIFILE,'LAT0',XLAT0)
   !
   ! this parameter is also useful in the cartesian to
   ! rotate the simulatin domain
-  CALL IO_READ_FIELD(TPINIFILE,'BETA',XBETA)
+  CALL IO_Field_read(TPINIFILE,'BETA',XBETA)
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'XHAT',PXHAT)
-CALL IO_READ_FIELD(TPINIFILE,'YHAT',PYHAT)
+CALL IO_Field_read(TPINIFILE,'XHAT',PXHAT)
+CALL IO_Field_read(TPINIFILE,'YHAT',PYHAT)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'RPK',XRPK)
+  CALL IO_Field_read(TPINIFILE,'RPK',XRPK)
   !
   IF ( (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>5) .OR. TPINIFILE%NMNHVERSION(1)>4 ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'LONORI',PLONORI)
-    CALL IO_READ_FIELD(TPINIFILE,'LATORI',PLATORI)
+    CALL IO_Field_read(TPINIFILE,'LONORI',PLONORI)
+    CALL IO_Field_read(TPINIFILE,'LATORI',PLATORI)
   !
   ELSE                     
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PLONORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PLONORI)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PLATORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PLATORI)
     !
     ALLOCATE(ZXHAT_ll(KIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(KJMAX_ll+2 * JPHEXT))
     CALL GATHERALL_FIELD_ll('XX',PXHAT,ZXHAT_ll,IRESP) !//
@@ -394,9 +393,9 @@ IF (.NOT.LCARTESIAN) THEN
   !
 END IF
 
-CALL IO_READ_FIELD(TPINIFILE,'ZS',PZS)
-CALL IO_READ_FIELD(TPINIFILE,'ZHAT',PZHAT)
-CALL IO_READ_FIELD(TPINIFILE,'ZTOP',PZTOP)
+CALL IO_Field_read(TPINIFILE,'ZS',PZS)
+CALL IO_Field_read(TPINIFILE,'ZHAT',PZHAT)
+CALL IO_Field_read(TPINIFILE,'ZTOP',PZTOP)
 !
 CALL DEFAULT_SLEVE(OSLEVE,PLEN1,PLEN2)
 !
@@ -404,25 +403,25 @@ IF ( TPINIFILE%NMNHVERSION(1)<4 .OR. (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFIL
   PZSMT  = PZS
   OSLEVE = .FALSE.
 ELSE
-  CALL IO_READ_FIELD(TPINIFILE,'ZSMT',PZSMT)
-  CALL IO_READ_FIELD(TPINIFILE,'SLEVE',OSLEVE)
+  CALL IO_Field_read(TPINIFILE,'ZSMT',PZSMT)
+  CALL IO_Field_read(TPINIFILE,'SLEVE',OSLEVE)
 END IF
 !
 IF (OSLEVE) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'LEN1',PLEN1)
-  CALL IO_READ_FIELD(TPINIFILE,'LEN2',PLEN2)
+  CALL IO_Field_read(TPINIFILE,'LEN1',PLEN1)
+  CALL IO_Field_read(TPINIFILE,'LEN2',PLEN2)
 END IF
 !
 !*       1.2   Temporal grid
 !
-CALL IO_READ_FIELD(TPINIFILE,'DTMOD',TPDTMOD)
-CALL IO_READ_FIELD(TPINIFILE,'DTCUR',TPDTCUR)
+CALL IO_Field_read(TPINIFILE,'DTMOD',TPDTMOD)
+CALL IO_Field_read(TPINIFILE,'DTCUR',TPDTCUR)
 !
 IF (KMI == 1) THEN
-CALL IO_READ_FIELD(TPINIFILE,'DTEXP',TDTEXP)
+CALL IO_Field_read(TPINIFILE,'DTEXP',TDTEXP)
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'DTSEG',TDTSEG)
+CALL IO_Field_read(TPINIFILE,'DTSEG',TDTSEG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -453,7 +452,7 @@ KSTOP = NINT(PSEGLEN/PTSTEP)
 !*       2.3    Temporal grid - outputs managment
 !
 ! The output/backups times have been read only by model 1
-IF (CPROGRAM == 'MESONH' .AND. KMI == 1) CALL IO_PREPARE_BAKOUT_STRUCT(ISUP,PTSTEP,PSEGLEN)
+IF (CPROGRAM == 'MESONH' .AND. KMI == 1) CALL IO_Bakout_struct_prepare(ISUP,PTSTEP,PSEGLEN)
 !
 KBAK_NUMB => OUT_MODEL(KMI)%NBAK_NUMB
 KOUT_NUMB => OUT_MODEL(KMI)%NOUT_NUMB
diff --git a/src/MNH/set_mass.f90 b/src/MNH/set_mass.f90
index afcc068fe5e295f6dc88cf790334ec9f43b5ce40..e66add53264a14cdb3864464cddbbe3fb2d041a9 100644
--- a/src/MNH/set_mass.f90
+++ b/src/MNH/set_mass.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2010-2018 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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     ########################
       MODULE MODI_SET_MASS
@@ -12,7 +12,7 @@ SUBROUTINE SET_MASS(TPFILE,OPROFILE_IN_PROC, PZFLUX_PROFILE,
                     KILOC,KJLOC,PZS_MX,PZMASS_MX,PZFLUX_MX,PPGROUND,                   &
                     PTHVM,PMRM,PUW,PVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,PMRCM,PMRIM,PCORIOZ)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN) :: TPFILE    ! File characteristics
 LOGICAL,                INTENT(IN) :: OPROFILE_IN_PROC ! initialization profile in current processor
@@ -124,7 +124,7 @@ SUBROUTINE SET_MASS(TPFILE,OPROFILE_IN_PROC, PZFLUX_PROFILE,
 ! use des modules
 USE MODD_GRID_n ! declarative modules
 USE MODD_GRID
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_FIELD_n
diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90
index 8bc9b5cd66b420741a89315018d4e5aa0972cf82..40906e759cfeef7c91e6800571c7435286ff96ce 100644
--- a/src/MNH/set_perturb.f90
+++ b/src/MNH/set_perturb.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE SET_PERTURB(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -108,14 +108,13 @@ USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_FIELD_n
 USE MODD_GRID_n
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LBC_n
-USE MODD_LUNIT_n, ONLY: CLUOUT, TLUOUT
+USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_LSFIELD_n
 USE MODD_PARAMETERS
 USE MODD_REF_n
 !
-USE MODE_FM
 USE MODE_GATHER_ll
 USE MODE_ll
 USE MODE_MPPDB
@@ -273,7 +272,7 @@ SELECT CASE(CPERT_KIND)
     END DO
 !
     CALL MPPDB_CHECK3D(ZDIST,"SET_PERTURB::ZDIST",PRECISION)
-    CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION)
+    !CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION)
 !
     IF ( LSET_RHU) THEN
        ZT(:,:,:)  = 0.0
@@ -309,7 +308,7 @@ SELECT CASE(CPERT_KIND)
       END WHERE
     END IF
     CALL MPPDB_CHECK3D(XRT(:,:,:,1),"SET_PERTURB::XRT",PRECISION)
-    CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION)
+    !CALL MPPDB_CHECK3D(XTHM,"SET_PERTURB::XTHM",PRECISION)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/set_ref.f90 b/src/MNH/set_ref.f90
index f666cb6f1dc6247c2c98471d67ef64b8e47e3651..74890f3e829b5e588a56db66d74bcfa60853c3ac 100644
--- a/src/MNH/set_ref.f90
+++ b/src/MNH/set_ref.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !###################
@@ -14,7 +14,7 @@ INTERFACE
                          PREFMASS,PMASS_O_PHI0,PLINMASS,                   &
                          PRHODREF,PTHVREF,PRVREF,PEXNREF,PRHODJ            )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 INTEGER,                INTENT(IN)  :: KMI       ! Model index 
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
@@ -155,12 +155,12 @@ END MODULE MODI_SET_REF
 !              ------------ 
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,   ONLY : TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 USE MODD_REF
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MPPDB
 USE MODE_REPRO_SUM
@@ -255,9 +255,9 @@ ILUOUT = TLUOUT%NLU
 !              ----------------------------------------------------
 !
 IF (KMI == 1) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'RHOREFZ',XRHODREFZ)
-  CALL IO_READ_FIELD(TPINIFILE,'THVREFZ',XTHVREFZ)
-  CALL IO_READ_FIELD(TPINIFILE,'EXNTOP', XEXNTOP)
+  CALL IO_Field_read(TPINIFILE,'RHOREFZ',XRHODREFZ)
+  CALL IO_Field_read(TPINIFILE,'THVREFZ',XTHVREFZ)
+  CALL IO_Field_read(TPINIFILE,'EXNTOP', XEXNTOP)
 !
   LNEUTRAL=.FALSE.
   IF (MAXVAL(XTHVREFZ(IKB:IKE))-MINVAL(XTHVREFZ(IKB:IKE)) < 1.E-10) LNEUTRAL=.TRUE.
diff --git a/src/MNH/set_refz.f90 b/src/MNH/set_refz.f90
index d0b12152ef6ac33442b2fea5c2518550bcd74551..b8b10b3b75dc9c4f4f69bc0c632c59ebcd3aba6d 100644
--- a/src/MNH/set_refz.f90
+++ b/src/MNH/set_refz.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -82,7 +82,7 @@ END MODULE MODI_SET_REFZ
 !!      Module MODD_CONF      : contains configuration variables for all models. 
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_REF       : contains anelastic reference state variables
 !!         XEXNTOP : reference state Exner function at model top
 !!         XRHODREFZ: reference state profile of rhod
diff --git a/src/MNH/set_relfrc.f90 b/src/MNH/set_relfrc.f90
index a87a28a7d314dcc0fc6286bf0f78d014577e0b3b..7c7fc25b1aeb15115d282bba56bd8f513ab701ab 100644
--- a/src/MNH/set_relfrc.f90
+++ b/src/MNH/set_relfrc.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
       MODULE MODI_SET_RELFRC
@@ -10,7 +10,7 @@ INTERFACE
 !
 SUBROUTINE SET_RELFRC(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -83,15 +83,13 @@ USE MODD_CST
 USE MODD_FRC
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS, ONLY: JPHEXT
 USE MODD_REF
 USE MODD_RELFRC_n
 ! 
 USE MODE_DATETIME
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_THERMO 
 !
diff --git a/src/MNH/set_rsou.f90 b/src/MNH/set_rsou.f90
index 8a16aa38e7eb7c344b2cea2a8e9388177d587705..6c38994c69acbdb6fa7395694f04c42626af5acf 100644
--- a/src/MNH/set_rsou.f90
+++ b/src/MNH/set_rsou.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE SET_RSOU(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS,OPV_PERT,&
                           ORMV_BL,PJ,OSHIFT,PCORIOZ) 
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE ! outpput data file
 TYPE(TFILEDATA),        INTENT(IN)  :: TPEXPREFILE ! input data file
@@ -206,7 +206,7 @@ END MODULE MODI_SET_RSOU
 !!        XCPD : Specific heat for dry air at constant pressure
 !!
 !!      Module MODD_LUNIT1  : contains logical unit names 
-!!        CLUOUT : name of output-listing
+!!        TLUOUT : name of output-listing
 !!
 !!      Module MODD_CONF    : contains configuration variables for all models. 
 !!        NVERB : verbosity level for output-listing
@@ -254,13 +254,11 @@ USE MODD_CST
 USE MODD_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS, ONLY: JPHEXT
 USE MODD_PARAM_n,    ONLY: CCLOUD
-! 
-USE MODE_FM
-USE MODE_IO_ll
+!
 USE MODE_ll
 USE MODE_MSG
 USE MODE_THERMO
diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90
index 5eb20fb6df83fa56317189f8455c0e49cdfb8f89..ba8bdd4f2c8618bd0072d8100bd07bda3bf5bbf2 100644
--- a/src/MNH/set_subdomain.f90
+++ b/src/MNH/set_subdomain.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #########################
@@ -10,7 +10,7 @@ INTERFACE
       SUBROUTINE SET_SUBDOMAIN(TPNMLFILE,TPATMFILE,KXOR_DAD,KYOR_DAD, &
                                KXOR,KYOR,KDXRATIO,KDYRATIO            )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPNMLFILE ! namelist file
 TYPE(TFILEDATA),   INTENT(IN) :: TPATMFILE ! atmospheric MNH file
@@ -85,23 +85,20 @@ END MODULE MODI_SET_SUBDOMAIN
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_GRIDPROJ       ! executive module
-USE MODE_POS
-USE MODE_FM
-USE MODE_IO_ll
-USE MODE_MSG
-!
-USE MODD_CONF           ! declaration modules
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_LUNIT
+USE MODD_CONF
+USE MODD_DIM_n, ONLY: NIMAX_n=>NIMAX,NJMAX_n=>NJMAX
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_DIM_n, ONLY: NIMAX_n=>NIMAX,NJMAX_n=>NJMAX
-USE MODD_PGDGRID
-USE MODD_PGDDIM
+USE MODD_IO,    ONLY: TFILEDATA
+USE MODD_LUNIT
 USE MODD_PARAMETERS
+USE MODD_PGDDIM
+USE MODD_PGDGRID
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
+USE MODE_GRIDPROJ
+USE MODE_MSG
+USE MODE_POS
 !
 IMPLICIT NONE
 !
@@ -222,24 +219,24 @@ WRITE(ILUOUT0,*) 'given or computed NYOR  = ',NYOR
 !*       4.1   TEST if FATHER of atmospheric MNH file exists:
 !              ---------------------------------------------
 !
-CALL IO_READ_FIELD(TPATMFILE,'DAD_NAME',YDADFILE,IRESP)
+CALL IO_Field_read(TPATMFILE,'DAD_NAME',YDADFILE,IRESP)
 IF ( IRESP /= 0  ) YDADFILE='                          '
 !
 IF (LEN_TRIM(YDADFILE)/=0) THEN
-  CALL IO_READ_FIELD(TPATMFILE,'DXRATIO',KDXRATIO,IRESP)
+  CALL IO_Field_read(TPATMFILE,'DXRATIO',KDXRATIO,IRESP)
   IF ( IRESP /= 0 .OR. KDXRATIO == 0 ) THEN
     KDXRATIO=1
   END IF
   !
-  CALL IO_READ_FIELD(TPATMFILE,'DYRATIO',KDYRATIO,IRESP)
+  CALL IO_Field_read(TPATMFILE,'DYRATIO',KDYRATIO,IRESP)
   IF ( IRESP /= 0 .OR. KDYRATIO == 0 ) THEN
     KDYRATIO=1
   END IF
   !
-  CALL IO_READ_FIELD(TPATMFILE,'XOR',KXOR,IRESP)
+  CALL IO_Field_read(TPATMFILE,'XOR',KXOR,IRESP)
   IF ( IRESP /= 0 ) KXOR_DAD=1
   !
-  CALL IO_READ_FIELD(TPATMFILE,'YOR',KYOR,IRESP)
+  CALL IO_Field_read(TPATMFILE,'YOR',KYOR,IRESP)
   IF ( IRESP /= 0 ) KYOR_DAD=1
 END IF
 !
diff --git a/src/MNH/shallow_mf.f90 b/src/MNH/shallow_mf.f90
index 2212bbb89a452fd2398791c02f645eaacaf9671f..52a1a7aef3d49a52fcbe9659a4f596cf52f6b822 100644
--- a/src/MNH/shallow_mf.f90
+++ b/src/MNH/shallow_mf.f90
@@ -1,7 +1,8 @@
 !MNH_LIC Copyright 1994-2018 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
      MODULE MODI_SHALLOW_MF
 !    ######################
@@ -167,6 +168,7 @@ END MODULE MODI_SHALLOW_MF
 !!      Philippe Wautelet 28/05/2018: corrected truncated integer division (2/3 -> 2./3.)
 !!      Q.Rodier  01/2019 : support RM17 mixing length
 !!      R.Honnert 1/2019  : remove SURF 
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -393,9 +395,7 @@ ELSEIF (HMF_UPDRAFT == 'HRIO') THEN
                        PEMF,PDETR,                               &
                        PENTR,ZBUO_INTEG,KKLCL,KKETL,KKCTL,ZDEPTH )
 ELSE
-  WRITE(*,*) ' STOP'                                                     
-  WRITE(*,*) ' NO UPDRAFT MODEL FOR EDKF : CMF_UPDRAFT =',HMF_UPDRAFT 
-  CALL PRINT_MSG(NVERB_FATAL,'GEN','SHALLOW_MF','')  
+  call Print_msg( NVERB_FATAL, 'GEN', 'SHALLOW_MF', 'no updraft model for EDKF: CMF_UPDRAFT='//trim(HMF_UPDRAFT) )
 ENDIF
 
 !!! 5. Compute diagnostic convective cloud fraction and content
@@ -450,10 +450,8 @@ ENDIF
                 PFLXZTHMF,PFLXZTHVMF,PFLXZRMF,PFLXZUMF,PFLXZVMF,         &
                 ZFLXZSVMF                                                )
        ELSE
-         WRITE(*,*) ' STOP'                                                     
-         WRITE(*,*) ' NO UPDRAFT MODEL FOR EDKF : CMF_UPDRAFT =',HMF_UPDRAFT 
-         CALL PRINT_MSG(NVERB_FATAL,'GEN','SHALLOW_MF','') 
-       ENDIF  
+         call Print_msg( NVERB_FATAL, 'GEN', 'SHALLOW_MF', 'no updraft model for EDKF: CMF_UPDRAFT='//trim(HMF_UPDRAFT) )
+       END IF
 
      IF (HMF_UPDRAFT == 'BOUT') THEN
       !! calcul de la hauteur de la couche limite ou de L_up
diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90
index ba519f8e3eefe4a15b9471ff07ebca2530fea29c..5e76f58c51e5632ec4c68795e8c7457b3d025a16 100644
--- a/src/MNH/shallow_mf_pack.f90
+++ b/src/MNH/shallow_mf_pack.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2010-2018 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 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_ll, 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_IO_ll, ONLY: TFILEDATA
+USE MODD_CST
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_NSV
-USE MODD_PARAM_ICE, ONLY : CFRAC_ICE_SHALLOW_MF
+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_FMWRIT
+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 
 
@@ -390,7 +395,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   ! stores the conservative mixing ratio vertical flux
   ZWORK(:,:,:)=RESHAPE(ZFLXZRMF(:,:),(/ IIU,IJU,IKU /) )
@@ -404,7 +409,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   ! stores the theta_v vertical flux
   TZFIELD%CMNHNAME   = 'MF_THVW_FLX'
@@ -417,7 +422,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PFLXZTHVMF)
+  CALL IO_Field_write(TPFILE,TZFIELD,PFLXZTHVMF)
   !
  IF (OMIXUV) THEN
   ! stores the U momentum vertical flux
@@ -432,7 +437,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   ! stores the V momentum vertical flux
   ZWORK(:,:,:)=RESHAPE(ZFLXZVMF(:,:),(/ IIU,IJU,IKU /) )
@@ -446,7 +451,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
  END IF
 END IF
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index b083a03d68516e936982ae973153c0c63e69351b..b0f75841c3fc10bfe0c3c8ab5b0a094d5ec36649 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_SPAWN_FIELD2
@@ -9,16 +9,16 @@ MODULE MODI_SPAWN_FIELD2
 INTERFACE
 !
       SUBROUTINE SPAWN_FIELD2(KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,HTURB,   &
-               PUT,PVT,PWT,PTHVT,PRT,PHUT,PTKET,PSVT,PATC,                     &
+               PUT,PVT,PWT,PTHVT,PRT,PHUT,PTKET,PSVT,PZWS,PATC,                &
                PSRCT,PSIGS,                                                    &
-               PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                                &
+               PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,                        &
                PDTHFRC,PDRVFRC,PTHREL,PRVREL,                                  &
                PVU_FLUX_M,PVTH_FLUX_M,PWTH_FLUX_M,                             &
                TPSONFILE,KIUSON,KJUSON,                                        &
                KIB2,KJB2,KIE2,KJE2,                                            &
                KIB1,KJB1,KIE1,KJE1                                             )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,   INTENT(IN)  :: KXOR,KXEND !  horizontal position (i,j) of the ORigin and END  
 INTEGER,   INTENT(IN)  :: KYOR,KYEND ! of the model 2 domain, relative to model 1
@@ -30,11 +30,13 @@ REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PUT,PVT,PWT        !  model 2
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PTKET              ! variables
 REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PRT,PSVT,PATC      !   at t
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PTHVT,PHUT         !
+REAL, DIMENSION(:,:),     INTENT(OUT) :: PZWS
 !
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PSRCT,PSIGS  ! secondary
                                                             ! prognostic variables
            ! Larger Scale fields for relaxation and diffusion
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSUM, PLSVM, PLSWM 
+REAL, DIMENSION(:,:),            INTENT(OUT) :: PLSZWSM
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSTHM,  PLSRVM     
 REAL, DIMENSION(:,:,:,:),        INTENT(OUT) :: PDTHFRC,PDRVFRC
 REAL, DIMENSION(:,:,:,:),        INTENT(OUT) :: PTHREL,PRVREL
@@ -55,9 +57,9 @@ END INTERFACE
 END MODULE MODI_SPAWN_FIELD2
 !     ##########################################################################
       SUBROUTINE SPAWN_FIELD2(KXOR,KYOR,KXEND,KYEND,KDXRATIO,KDYRATIO,HTURB,   &
-               PUT,PVT,PWT,PTHVT,PRT,PHUT,PTKET,PSVT,PATC,                     &
+               PUT,PVT,PWT,PTHVT,PRT,PHUT,PTKET,PSVT, PZWS,PATC,                &
                PSRCT,PSIGS,                                                    &
-               PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,                                &
+               PLSUM,PLSVM,PLSWM,PLSTHM,PLSRVM,PLSZWSM,                        &
                PDTHFRC,PDRVFRC,PTHREL,PRVREL,                                  &
                PVU_FLUX_M,PVTH_FLUX_M,PWTH_FLUX_M,                             &
                TPSONFILE,KIUSON,KJUSON,                                        &
@@ -150,6 +152,8 @@ END MODULE MODI_SPAWN_FIELD2
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Modification 05/03/2018 (J.Escobar) bypass gridnesting special case KD(X/Y)RATIO == 1 not parallelized
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -162,34 +166,35 @@ USE MODD_CH_AEROSOL,      ONLY: CAERONAMES
 USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
 USE MODD_CONF
 USE MODD_CST
-USE MODD_CONF_n,          ONLY:  CONF_MODEL
+USE MODD_CONF_n,          ONLY: CONF_MODEL
 USE MODD_DUST,            ONLY: CDUSTNAMES
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_FIELD_n,         ONLY:  FIELD_MODEL
-USE MODD_IO_ll,           ONLY : TFILEDATA
+USE MODD_FIELD_n,         ONLY: FIELD_MODEL, XZWS_DEFAULT
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LATZ_EDFLX
-USE MODD_LBC_n,           ONLY:  LBC_MODEL
+USE MODD_LBC_n,           ONLY: LBC_MODEL
 USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_LUNIT_n,         ONLY:  LUNIT_MODEL,TLUOUT
+USE MODD_LUNIT_n,         ONLY: LUNIT_MODEL,TLUOUT
 USE MODD_NSV
-USE MODD_REF_n,           ONLY:  REF_MODEL
+USE MODD_REF_n,           ONLY: REF_MODEL
 USE MODD_PARAMETERS
-USE MODD_PARAM_LIMA     , ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
-                                 LSCAV, LAERO_MASS, LHHONI
-USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_NAMES, CAERO_MASS
+USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
+                                LSCAV, LAERO_MASS, LHHONI
+USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
+USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_RELFRC_n 
 USE MODD_SALT,            ONLY: CSALTNAMES
 USE MODD_SPAWN
 !
 USE MODE_FIELD,           ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMREAD
-USE MODE_IO_ll,           ONLY: UPCASE
+USE MODE_IO_FIELD_READ,   only: IO_Field_read
 USE MODE_ll
+USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
 USE MODE_THERMO
+USE MODE_TOOLS,           ONLY: UPCASE
 !
 USE MODI_BIKHARDT
 !
@@ -205,6 +210,7 @@ INTEGER,   INTENT(IN)  :: KDYRATIO   ! between model 2 and model 1
 CHARACTER (LEN=4), INTENT(IN) :: HTURB !  Kind of turbulence parameterization
 !
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PUT,PVT,PWT        !  model 2
+REAL, DIMENSION(:,:),     INTENT(OUT) :: PZWS
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PTKET              ! variables
 REAL, DIMENSION(:,:,:,:), INTENT(OUT) :: PRT,PSVT,PATC      !   at t
 REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PTHVT,PHUT         !
@@ -213,6 +219,7 @@ REAL, DIMENSION(:,:,:),   INTENT(OUT) :: PSRCT,PSIGS  ! secondary
                                                             ! prognostic variables
            ! Larger Scale fields for relaxation and diffusion
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSUM, PLSVM, PLSWM 
+REAL, DIMENSION(:,:),            INTENT(OUT) :: PLSZWSM
 REAL, DIMENSION(:,:,:),          INTENT(OUT) :: PLSTHM,  PLSRVM 
 REAL, DIMENSION(:,:,:,:),        INTENT(OUT) :: PDTHFRC,PDRVFRC
 REAL, DIMENSION(:,:,:,:),        INTENT(OUT) :: PTHREL,PRVREL
@@ -238,6 +245,7 @@ REAL, DIMENSION(SIZE(XRT1,1),SIZE(XRT1,2),SIZE(XRT1,3)) :: ZHUT ! relative humid
 REAL, DIMENSION(SIZE(XTHT1,1),SIZE(XTHT1,2),SIZE(XTHT1,3)) :: ZTHVT! virtual pot. T
                                                                 ! (model 1)          
 !$20140708
+REAL, DIMENSION(:,:),   ALLOCATABLE   :: ZZWS_C, ZLSZWSM_C
 !$***** 3D
 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZUT_C, ZLSUM_C 
 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZVT_C, ZLSVM_C
@@ -261,11 +269,13 @@ INTEGER  :: IINFO_ll
 !$
 ! Arrays for reading fields of input SON 1 file
 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZWORK3D
+REAL, DIMENSION(:,:),   ALLOCATABLE   :: ZWORK2D
 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZTHT1,ZTHVT1
 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZPABST1,ZHUT1
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRT1
 LOGICAL :: GUSERV
 !
+CHARACTER(LEN=15) :: YVAL
 CHARACTER(LEN=2)  :: INDICE
 INTEGER           :: I
 TYPE(TFIELDDATA)             :: TZFIELD
@@ -291,6 +301,7 @@ CALL COMPUTE_THV_HU(CONF_MODEL(1)%LUSERV,XRT1,XTHT1,XPABST1,ZTHVT,ZHUT)
 !
 IF (PRESENT(TPSONFILE)) THEN
   ALLOCATE(ZWORK3D(KIUSON,KJUSON,SIZE(PUT,3)))
+  ALLOCATE(ZWORK2D(KIUSON,KJUSON))
   ALLOCATE(ZPABST1(KIE1-KIB1+1,KJE1-KJB1+1,SIZE(PUT,3)))
   ALLOCATE(ZTHT1(KIE1-KIB1+1,KJE1-KJB1+1,SIZE(PUT,3)))
   ALLOCATE(ZTHVT1(KIE1-KIB1+1,KJE1-KJB1+1,SIZE(PUT,3)))
@@ -402,6 +413,8 @@ END IF
   CALL GET_CHILD_DIM_ll(2, IDIMX_C, IDIMY_C, IINFO_ll)
 !
 !$20140708 use  ZTHVM_C in BIKAT top cal PTHVM_C
+  ALLOCATE(ZZWS_C(IDIMX_C,IDIMY_C))
+  ALLOCATE(ZLSZWSM_C(IDIMX_C,IDIMY_C))
   !$**** 3D
   ALLOCATE(ZUT_C(IDIMX_C,IDIMY_C,SIZE(PUT,3)))
   ALLOCATE(ZLSUM_C(IDIMX_C,IDIMY_C,SIZE(PUT,3)))
@@ -434,6 +447,8 @@ END IF
   ZVT_C   =0.
   ZWT_C   =0.
   ZTHVT_C =0.
+  ZZWS_C  =0.
+  ZLSZWSM_C=0.
   ZHUT_C  =0.
   ZTKET_C =0.
   ZSRCT_C =0.
@@ -449,6 +464,14 @@ END IF
   ZRVREL_C=0.
   ZTHREL_C=00
 !
+    CALL SET_LSFIELD_1WAY_ll(XZWS1(:,:),ZZWS_C(:,:),2)
+    CALL SET_LSFIELD_1WAY_ll(XLSZWSM1(:,:),ZLSZWSM_C(:,:),2)
+    !
+    CALL LS_FORCING_ll(2, IINFO_ll, .TRUE.)
+    CALL GO_TOMODEL_ll(2, IINFO_ll)
+    CALL GOTO_MODEL(2)
+    CALL UNSET_LSFIELD_1WAY_ll()
+    !
   !$***** 3D VARS
   DO JI=1,SIZE(PUT,3)
     CALL GOTO_MODEL(1)
@@ -566,6 +589,21 @@ END IF
                    2,2,IDIMX_C-1,IDIMY_C-1,KDXRATIO,KDYRATIO,3,     &
                    LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,ZLSVM_C,PLSVM)
     CALL MPPDB_CHECK3D(PLSVM,"SPAWN_FIELD2:PLSVM",PRECISION)
+
+!                        Interpolation of the ZWS variable at t
+!
+    CALL BIKHARDT (XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, &
+                   XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, &
+                   2,2,IDIMX_C-1,IDIMY_C-1,KDXRATIO,KDYRATIO,3,     &
+                   LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,ZZWS_C,PZWS)
+    CALL MPPDB_CHECK2D(PZWS,"SPAWN_FIELD2:PZWS",PRECISION)
+!
+    CALL BIKHARDT (XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4, &
+                   XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4, &
+                   2,2,IDIMX_C-1,IDIMY_C-1,KDXRATIO,KDYRATIO,3,     &
+                   LBC_MODEL(1)%CLBCX,LBC_MODEL(1)%CLBCY,ZLSZWSM_C,PLSZWSM)
+    CALL MPPDB_CHECK2D(PLSZWSM,"SPAWN_FIELD2:PLSZWSM",PRECISION)
+!
 !
 !                        Interpolation of variables at t
 !
@@ -719,49 +757,58 @@ IF (PRESENT(TPSONFILE)) THEN
   !
   !variables which always exist
   !
-  CALL IO_READ_FIELD(TPSONFILE,'UT',ZWORK3D) ! U wind component at time t
+  CALL IO_Field_read(TPSONFILE,'UT',ZWORK3D) ! U wind component at time t
   PUT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'VT',ZWORK3D) ! V wind component at time t
+  CALL IO_Field_read(TPSONFILE,'VT',ZWORK3D) ! V wind component at time t
   PVT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'WT',ZWORK3D) ! W wind component at time t
+  CALL IO_Field_read(TPSONFILE,'WT',ZWORK3D) ! W wind component at time t
   PWT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
+  CALL IO_Field_read(TPSONFILE,'ZWS',ZWORK2D,IRESP) !
+  !If the field ZWS is not in the file, set its value to XZWS_DEFAULT
+  !ZWS is present in files since MesoNH 5.4.2
+  IF ( IRESP/=0 ) THEN
+    WRITE (YVAL,'( E15.8 )') XZWS_DEFAULT
+    CALL PRINT_MSG(NVERB_WARNING,'IO','SPAWN_FIELD2','ZWS not found in file: using default value: '//TRIM(YVAL)//' m')
+    ZWORK2D(:,:) = XZWS_DEFAULT
+  END IF
+  PZWS(KIB2:KIE2,KJB2:KJE2) = ZWORK2D(KIB1:KIE1,KJB1:KJE1)
   !
   ! moist variables
   !
   IRR=1
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
     GUSERV=.TRUE.
-    CALL IO_READ_FIELD(TPSONFILE,'RVT',ZWORK3D,IRESP) ! Vapor at time t
+    CALL IO_Field_read(TPSONFILE,'RVT',ZWORK3D,IRESP) ! Vapor at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RCT',ZWORK3D,IRESP) ! Cloud at time t
+    CALL IO_Field_read(TPSONFILE,'RCT',ZWORK3D,IRESP) ! Cloud at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RRT',ZWORK3D,IRESP) ! Rain at time t
+    CALL IO_Field_read(TPSONFILE,'RRT',ZWORK3D,IRESP) ! Rain at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RIT',ZWORK3D,IRESP) ! Ice at time t
+    CALL IO_Field_read(TPSONFILE,'RIT',ZWORK3D,IRESP) ! Ice at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RST',ZWORK3D,IRESP) ! Snow at time t
+    CALL IO_Field_read(TPSONFILE,'RST',ZWORK3D,IRESP) ! Snow at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RGT',ZWORK3D,IRESP) ! Graupel at time t
+    CALL IO_Field_read(TPSONFILE,'RGT',ZWORK3D,IRESP) ! Graupel at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'HVT',ZWORK3D,IRESP) ! Hail at time t
+    CALL IO_Field_read(TPSONFILE,'HVT',ZWORK3D,IRESP) ! Hail at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
@@ -769,9 +816,9 @@ IF (PRESENT(TPSONFILE)) THEN
   WRITE(ILUOUT,FMT=*) 'SPAWN_FIELD2: spawing with a SON input file'
   WRITE(ILUOUT,FMT=*) '    ',CONF_MODEL(1)%NRR,' moist variables in model1 and model2, ',    &
                              IRR,' moist variables in input SON'
-  CALL IO_READ_FIELD(TPSONFILE,'THT',ZWORK3D) ! Theta at time t
+  CALL IO_Field_read(TPSONFILE,'THT',ZWORK3D) ! Theta at time t
   ZTHT1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'PABST',ZWORK3D) ! Pressure at time t
+  CALL IO_Field_read(TPSONFILE,'PABST',ZWORK3D) ! Pressure at time t
   ZPABST1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   !
   CALL COMPUTE_THV_HU(GUSERV,ZRT1,ZTHT1,ZPABST1,ZTHVT1,ZHUT1)
@@ -785,7 +832,7 @@ IF (PRESENT(TPSONFILE)) THEN
   ! TKE variables
   !
   IF (HTURB/='NONE') THEN
-    CALL IO_READ_FIELD(TPSONFILE,'TKET',ZWORK3D,IRESP) ! Turbulence Kinetic Energy at time t
+    CALL IO_Field_read(TPSONFILE,'TKET',ZWORK3D,IRESP) ! Turbulence Kinetic Energy at time t
     IF(IRESP==0) PTKET(KIB2:KIE2,KJB2:KJE2,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   END IF
   !
@@ -806,7 +853,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -825,7 +872,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -891,7 +938,7 @@ IF (PRESENT(TPSONFILE)) THEN
       END IF
       ! time t
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+      CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
       IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     END DO
     !
@@ -915,7 +962,7 @@ IF (PRESENT(TPSONFILE)) THEN
           TZFIELD%CUNITS   = 'm-3'
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
         END IF
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -935,7 +982,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -956,7 +1003,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -976,7 +1023,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -996,7 +1043,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1016,7 +1063,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1036,7 +1083,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1058,7 +1105,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = 'LINOX'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1078,7 +1125,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1099,7 +1146,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1120,7 +1167,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1140,7 +1187,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1161,7 +1208,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_FFBEG-1
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_FFBEG-1
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1171,10 +1218,10 @@ IF (PRESENT(TPSONFILE)) THEN
   ! Secondary pronostic variables
   !
   IF (HTURB /= 'NONE' .AND. IRR>1) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'SRCT',ZWORK3D,IRESP) ! turbulent flux SRC at time t
+    CALL IO_Field_read(TPSONFILE,'SRCT',ZWORK3D,IRESP) ! turbulent flux SRC at time t
     IF(IRESP == 0) PSRCT(KIB2:KIE2,KJB2:KJE2,:) =                    &
                                         ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-    CALL IO_READ_FIELD(TPSONFILE,'SIGS',ZWORK3D,IRESP) ! subgrid condensation
+    CALL IO_Field_read(TPSONFILE,'SIGS',ZWORK3D,IRESP) ! subgrid condensation
     IF(IRESP == 0) PSIGS(KIB2:KIE2,KJB2:KJE2,:) =                    &
                                         ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   END IF
diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90
index c1e938c6a440a49c179b11a99c53965b4b9ce801..1a6e192263046c9860869d72f42ab84a1b25791c 100644
--- a/src/MNH/spawn_grid2.f90
+++ b/src/MNH/spawn_grid2.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !######################
@@ -164,8 +164,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_BIKHARDT_n
 USE MODD_VAR_ll
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_TIME
 USE MODE_GRIDPROJ
 !
diff --git a/src/MNH/spawn_lsn.f90 b/src/MNH/spawn_lsn.f90
index 74f43ed3e08b907f5d8a4b778f63f4b72249cd79..88d40d981a5826dc3400f7c3752262678fff458c 100644
--- a/src/MNH/spawn_lsn.f90
+++ b/src/MNH/spawn_lsn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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 nesting 2006/06/19 11:16:39
-!-----------------------------------------------------------------
 !     ####################
       MODULE MODI_SPAWN_LS_n
 !     ####################
@@ -21,9 +16,9 @@ INTERFACE
                     HLBCX,HLBCY,PZZ,PZHAT,OSLEVE,PLEN1,PLEN2,        &
                     PCOEFLIN_LBXM,                                   &
                                   PLSTHM,PLSRVM,                     &
-                                  PLSUM,PLSVM,PLSWM,                 &
+                                  PLSUM,PLSVM,PLSWM,PLSZWSM,         &
                                   PLSTHS,PLSRVS,                     &
-                                  PLSUS,PLSVS,PLSWS                  )
+                                  PLSUS,PLSVS,PLSWS,PLSZWSS          )
 !
 INTEGER,   INTENT(IN)  :: KDAD      ! number of the DAD model
 REAL,             INTENT(IN)    :: PTSTEP   !  Time step
@@ -48,8 +43,11 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBXM ! coefficient used for
 !  
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLSTHM,PLSRVM ! Large Scale fields at t-dt
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLSUM,PLSVM,PLSWM ! Large Scale fields at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN)    :: PLSZWSM          ! Large Scale fields at t-dt
+
 REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLSTHS,PLSRVS ! Large Scale source terms 
 REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLSUS,PLSVS,PLSWS ! Large Scale source terms 
+REAL, DIMENSION(:,:),   INTENT(OUT)   :: PLSZWSS
 !
 END SUBROUTINE SPAWN_LS_n
 !
@@ -66,9 +64,9 @@ END MODULE MODI_SPAWN_LS_n
                     HLBCX,HLBCY,PZZ,PZHAT,OSLEVE,PLEN1,PLEN2,        &
                     PCOEFLIN_LBXM,                                   &
                                   PLSTHM,PLSRVM,                     &
-                                  PLSUM,PLSVM,PLSWM,                 &
+                                  PLSUM,PLSVM,PLSWM,PLSZWSM,         &
                                   PLSTHS,PLSRVS,                     &
-                                  PLSUS,PLSVS,PLSWS                  )
+                                  PLSUS,PLSVS,PLSWS,PLSZWSS          )
 !     ################################################################
 !
 !!****  *SPAWN_LS_n* - Refresh of the Large Scale sources 
@@ -125,7 +123,8 @@ END MODULE MODI_SPAWN_LS_n
 !!      Original     22/12/97
 !!    P. Jabouille   19/04/00 parallelisation
 !!      J.Escobar : 18/12/2015 : Correction of bug in bound in // for NHALO <>1 
-!!
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 20/03/2019: fixes: wrong order of the dummy arguments + double deallocate
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -174,8 +173,10 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PCOEFLIN_LBXM ! coefficient used for
 !
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLSTHM,PLSRVM ! Large Scale fields at t-dt
 REAL, DIMENSION(:,:,:), INTENT(IN)    :: PLSUM,PLSVM,PLSWM ! Large Scale fields at t-dt
+REAL, DIMENSION(:,:),   INTENT(IN)    :: PLSZWSM          ! Large Scale fields at t-dt
 REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLSTHS,PLSRVS ! Large Scale source terms
 REAL, DIMENSION(:,:,:), INTENT(OUT)   :: PLSUS,PLSVS,PLSWS ! Large Scale source terms
+REAL, DIMENSION(:,:),   INTENT(OUT)   :: PLSZWSS
 !
 !
 !*       0.2   declarations of local variables
@@ -202,8 +203,10 @@ TYPE(LIST_ll), POINTER :: TZLSFIELD_ll   ! list of metric coefficient fields
 INTEGER :: IINFO_ll, IDIMX, IDIMY
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTLSUM, ZTLSVM, ZTLSWM, ZTLSTHM, ZTLSRVM
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTZS,ZZS
+REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTZWS
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZTZSMT,ZZSMT
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: Z1,Z2,Z3,Z4,Z5
+REAL, DIMENSION(:,:),   ALLOCATABLE :: Z6
 !
 !-------------------------------------------------------------------------------
 !
@@ -235,6 +238,7 @@ ALLOCATE(ZTLSVM(IDIMX,IDIMY,SIZE(PLSVM,3)))
 ALLOCATE(ZTLSWM(IDIMX,IDIMY,SIZE(PLSWM,3)))
 ALLOCATE(ZTLSTHM(IDIMX,IDIMY,SIZE(PLSTHM,3)))
 ALLOCATE(ZTLSRVM(IDIMX,IDIMY,SIZE(PLSRVM,3)))
+ALLOCATE(ZTZWS(IDIMX,IDIMY))
 !
 IF(GVERT_INTERP) THEN
   ALLOCATE(ZTZS  (IDIMX,IDIMY,1))
@@ -250,6 +254,7 @@ ALLOCATE(Z2(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3)))
 ALLOCATE(Z3(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3)))
 ALLOCATE(Z4(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3)))
 ALLOCATE(Z5(SIZE(XLSUM,1),SIZE(XLSUM,2),SIZE(XLSUM,3)))
+ALLOCATE(Z6(SIZE(XLSUM,1),SIZE(XLSUM,2)))
 !
 Z1=XLSUM+XLSUS*ZTIME
 CALL SET_LSFIELD_1WAY_ll(Z1, ZTLSUM, KMI)
@@ -263,6 +268,10 @@ IF ( SIZE(PLSRVM,1) /= 0 ) THEN
   Z5=XLSRVM+XLSRVS*ZTIME
   CALL SET_LSFIELD_1WAY_ll(Z5, ZTLSRVM, KMI)
 ENDIF
+IF ( SIZE(PLSZWSM,1) /= 0 ) THEN
+  Z6=XLSZWSM+XLSZWSS*ZTIME
+  CALL SET_LSFIELD_1WAY_ll(Z6, ZTZWS, KMI)
+ENDIF
 !
 IF ( GVERT_INTERP ) THEN
    CALL SET_LSFIELD_1WAY_ll(ZZS,   ZTZS,   KMI)
@@ -273,7 +282,7 @@ ENDIF
 !
 CALL LS_FORCING_ll(KMI, IINFO_ll)
 !
-DEALLOCATE(Z1,Z2,Z3,Z4,Z5)
+DEALLOCATE(Z1,Z2,Z3,Z4,Z5,Z6)
 !
 !        1.5  Back to the (current) child model
 !
@@ -355,6 +364,12 @@ IF ( SIZE(PLSRVM,1) /= 0 ) THEN
                  2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,         &
                  HLBCX,HLBCY,ZTLSRVM,PLSRVS(IIB:IIE,IJB:IJE,:))
 END IF
+IF ( SIZE(PLSZWSM,1) /= 0 ) THEN
+  CALL BIKHARDT (PBMX1,PBMX2,PBMX3,PBMX4,PBMY1,PBMY2,PBMY3,PBMY4, &
+                 PBFX1,PBFX2,PBFX3,PBFX4,PBFY1,PBFY2,PBFY3,PBFY4, &
+                 2,2,IDIMX-1,IDIMY-1,KDXRATIO,KDYRATIO,1,         &
+                 HLBCX,HLBCY,ZTZWS,PLSZWSS(IIB:IIE,IJB:IJE))
+END IF
 !
 !*      3.2  Vertical linear interpolation on the mass grid
 !
@@ -384,6 +399,9 @@ PLSTHS(:,:,:)   = (PLSTHS(:,:,:) - PLSTHM(:,:,:)) / ZTIME
 IF ( SIZE(PLSRVM,1) /= 0 ) THEN
   PLSRVS(:,:,:)   = (PLSRVS(:,:,:) - PLSRVM(:,:,:)) / ZTIME
 END IF
+IF ( SIZE(PLSZWSM,1) /= 0 ) THEN
+  PLSZWSS(:,:)   = (PLSZWSS(:,:) - PLSZWSM(:,:)) / ZTIME
+END IF
 !
 !------------------------------------------------------------------------------
 !
@@ -452,7 +470,7 @@ END IF
 !
 PLSVS(:,:,:)   = (PLSVS(:,:,:) - PLSVM(:,:,:)) / ZTIME
 !
-DEALLOCATE(ZTLSUM,ZTLSVM,ZTLSWM,ZTLSTHM,ZTLSRVM)
+DEALLOCATE(ZTLSUM,ZTLSVM,ZTLSWM,ZTLSTHM,ZTLSRVM,ZTZWS)
 IF(GVERT_INTERP) DEALLOCATE(ZTZS,ZZS)
 IF(GVERT_INTERP) DEALLOCATE(ZTZSMT,ZZSMT)
 !
@@ -462,6 +480,7 @@ CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSVS)
 CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSWS)
 CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSTHS)
 IF(SIZE(PLSRVM) /= 0) CALL ADD3DFIELD_ll(TZLSFIELD_ll, PLSRVS)
+IF(SIZE(PLSZWSM) /= 0) CALL ADD2DFIELD_ll(TZLSFIELD_ll, PLSZWSS)
 CALL UPDATE_HALO_ll(TZLSFIELD_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZLSFIELD_ll)
 !------------------------------------------------------------------------------
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index d920dbc0cf86068f1382448fc4e0a07c59680955..33c2a15786a8a92e74f21b6969f1b52bf10baa54 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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_SPAWN_MODEL2
 !########################
@@ -90,10 +91,10 @@ END MODULE MODI_SPAWN_MODEL2
 !!      TOTAL_DMASS   : to compute the total mass of dry air
 !!      ANEL_BALANCE2  : to apply an anelastic correction in the case of changing
 !!                      resolution between the two models
-!!      IO_FILE_OPEN_ll : to open a FM-file (DESFM + LFIFM)
+!!      IO_File_open : to open a FM-file (DESFM + LFIFM)
 !!      WRITE_DESFM   : to write the  DESFM file
 !!      WRITE_LFIFM   : to write the  LFIFM file  
-!!      IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM)
+!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
 !!      INI_BIKHARDT2     : initializes Bikhardt coefficients
 !!
 !!
@@ -191,6 +192,11 @@ END MODULE MODI_SPAWN_MODEL2
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!                    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
+!  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
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -228,7 +234,8 @@ USE MODD_CH_MNHC_n
 USE MODD_PASPOL_n
 !$20140515
 USE MODD_VAR_ll, ONLY : NPROC
-USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX
+USE MODD_IO, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX
+use modd_precision, only: MNHREAL_MPI
 !
 USE MODE_GRIDCART         ! Executive modules
 USE MODE_GRIDPROJ
@@ -256,12 +263,11 @@ USE MODI_CH_INIT_SCHEME_n
 !$20140710
 USE MODI_UPDATE_METRICS
 !
-USE MODE_FM
-USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MODELN_HANDLER
-USE MODE_FMREAD
 USE MODE_MPPDB
 !
 USE MODE_THERMO
@@ -286,6 +292,7 @@ USE MODD_PASPOL, ONLY : LPASPOL
 !
 USE MODD_MPIF
 USE MODD_VAR_ll
+use modd_precision, only: LFIINT
 !
 IMPLICIT NONE
 !
@@ -313,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
@@ -489,15 +496,15 @@ IF (LEN_TRIM(HSONFILE) /= 0 ) THEN
 !        3.3.1  Opening the son input file and reading the grid
 ! 
   WRITE(ILUOUT,*) 'SPAWN_MODEL2: spawning with a SON input file :',TRIM(HSONFILE)
-  CALL IO_FILE_ADD2LIST(TZSONFILE,TRIM(HSONFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZSONFILE)
-  CALL IO_READ_FIELD(TZSONFILE,'DAD_NAME',YDAD_SON)
-  CALL IO_READ_FIELD(TZSONFILE,'IMAX',    IIMAXSON)
-  CALL IO_READ_FIELD(TZSONFILE,'JMAX',    IJMAXSON)
-  CALL IO_READ_FIELD(TZSONFILE,'XOR',     IXORSON)
-  CALL IO_READ_FIELD(TZSONFILE,'YOR',     IYORSON)
-  CALL IO_READ_FIELD(TZSONFILE,'DXRATIO', IDXRATIOSON)
-  CALL IO_READ_FIELD(TZSONFILE,'DYRATIO', IDYRATIOSON)
+  CALL IO_File_add2list(TZSONFILE,TRIM(HSONFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZSONFILE)
+  CALL IO_Field_read(TZSONFILE,'DAD_NAME',YDAD_SON)
+  CALL IO_Field_read(TZSONFILE,'IMAX',    IIMAXSON)
+  CALL IO_Field_read(TZSONFILE,'JMAX',    IJMAXSON)
+  CALL IO_Field_read(TZSONFILE,'XOR',     IXORSON)
+  CALL IO_Field_read(TZSONFILE,'YOR',     IYORSON)
+  CALL IO_Field_read(TZSONFILE,'DXRATIO', IDXRATIOSON)
+  CALL IO_Field_read(TZSONFILE,'DYRATIO', IDYRATIOSON)
   !
   IF (ADJUSTL(ADJUSTR(YDAD_SON)).NE.ADJUSTL(ADJUSTR(CMY_NAME(1)))) THEN 
     WRITE(ILUOUT,*) 'SPAWN_MODEL2: DAD of SON file is different from the one of model2'
@@ -650,16 +657,12 @@ ELSE
   NRIMY=0
 END IF
 IF (NRIMX >= IIU/2-1) THEN      ! Error ! this case is not supported - it should be, but there is a bug
-  WRITE(*,*) "Error : The size of the LBX zone is too big for the size of the subdomains"
-  WRITE(*,*) "Try with less cores, a smaller LBX size, or a bigger grid in X "
-  CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'SPAWN_MODEL2', 'The size of the LBX zone is too big for the size of the subdomains. '// &
+                  'Try with less processes, a smaller LBX size or a bigger grid in X.' )
 ENDIF
 IF ( ( .NOT. L2D ) .AND. (NRIMY >= IJU/2-1) ) THEN  ! Error ! this case is not supported - it should be, but there is a bug
-  WRITE(*,*) "Error : The size of the LBY zone is too big for the size of the subdomains"
-  WRITE(*,*) "Try with less cores, a smaller LBY size, or a bigger grid in Y "
-  CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'SPAWN_MODEL2', 'The size of the LBY zone is too big for the size of the subdomains. '// &
+                  'Try with less processes, a smaller LBY size or a bigger grid in Y.' )
 ENDIF
 !
 LHORELAX_UVWTH=.TRUE.
@@ -703,6 +706,8 @@ ALLOCATE(ZJ(IIU,IJU,IKU))
 !
 !*       4.2   Prognostic (and diagnostic) variables (module MODD_FIELD2) :
 !
+ALLOCATE(XZWS(IIU,IJU)); XZWS(:,:) = XZWS_DEFAULT
+ALLOCATE(XLSZWSM(IIU,IJU))
 ALLOCATE(XUT(IIU,IJU,IKU))
 ALLOCATE(XVT(IIU,IJU,IKU))
 ALLOCATE(XWT(IIU,IJU,IKU))
@@ -1117,18 +1122,18 @@ ALLOCATE(ZHUT(IIU,IJU,IKU))
 MPPDB_CHECK_LB = .TRUE.
 IF (GNOSON) THEN
   CALL SPAWN_FIELD2 (NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO,CTURB,            &
-                 XUT,XVT,XWT,ZTHVT,XRT,ZHUT,XTKET,XSVT,XATC,                   &
+                 XUT,XVT,XWT,ZTHVT,XRT,ZHUT,XTKET,XSVT,XZWS,XATC,              &
                  XSRCT,XSIGS,                                                  &
-                 XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,                              &
+                 XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,                      &
                  XDTHFRC,XDRVFRC,XTHREL,XRVREL,                                &
                  XVU_FLUX_M,XVTH_FLUX_M,XWTH_FLUX_M            )
   CALL MPPDB_CHECK3D(XUT,"SPAWN_M2 after SPAWN_FIELD2:XUT",PRECISION)
 ELSE
   CALL MPPDB_CHECK3D(XUT,"SPAWN_M2 before SPAWN_FIELD2:XUT",PRECISION)
   CALL SPAWN_FIELD2 (NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO,CTURB,            &
-                 XUT,XVT,XWT,ZTHVT,XRT,ZHUT,XTKET,XSVT,XATC,                   &
+                 XUT,XVT,XWT,ZTHVT,XRT,ZHUT,XTKET,XSVT,XZWS,XATC,              &
                  XSRCT,XSIGS,                                                  &
-                 XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,                              &
+                 XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XLSZWSM,                      &
                  XDTHFRC,XDRVFRC,XTHREL,XRVREL,                                &                 
                  XVU_FLUX_M, XVTH_FLUX_M,XWTH_FLUX_M,                          &
                  TZSONFILE,IIUSON,IJUSON,                                      &
@@ -1156,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)
@@ -1186,7 +1191,7 @@ CALL SPAWN_PRESSURE2(NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO,   &
 !
 IF (.NOT.GNOSON) THEN
   ALLOCATE(ZWORK3D(IIUSON,IJUSON,IKU))
-  CALL IO_READ_FIELD(TZSONFILE,'PABST',ZWORK3D)
+  CALL IO_Field_read(TZSONFILE,'PABST',ZWORK3D)
   XPABST(IIB2:IIE2,IJB2:IJE2,:) = ZWORK3D(IIB1:IIE1,IJB1:IJE1,:)
   DEALLOCATE(ZWORK3D)
 END IF
@@ -1201,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 :
@@ -1436,9 +1441,9 @@ ELSE
      CMY_NAME(2)=ADJUSTL(ADJUSTR(CINIFILE)//'.spr'//ADJUSTL(HSPANBR))
 END IF
 !
-CALL IO_FILE_ADD2LIST(TZFILE,CMY_NAME(2),'SPAWNING','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_File_add2list(TZFILE,CMY_NAME(2),'MNH','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
-CALL IO_FILE_OPEN_ll(TZFILE)
+CALL IO_File_open(TZFILE)
 !
 CALL WRITE_DESFM_n(2,TZFILE)
 !
@@ -1464,7 +1469,7 @@ ELSE
   CDAD_NAME(2)=CMY_NAME(1) ! model 1 becomes the DAD of model 2 (spawned one)
 ENDIF
 !
-CALL IO_WRITE_HEADER(TZFILE,HDAD_NAME=CDAD_NAME(2))
+CALL IO_Header_write(TZFILE,HDAD_NAME=CDAD_NAME(2))
 CALL WRITE_LFIFM_n(TZFILE,CDAD_NAME(2))
 !
 CALL SECOND_MNH(ZTIME2)
@@ -1490,9 +1495,9 @@ ZSURF2 = ZTIME2 - ZTIME1
 !*	 8.    CLOSES THE FMFILE
 !	       ----------------- 
 !
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 IF (ASSOCIATED(TZSONFILE)) THEN
-  CALL IO_FILE_CLOSE_ll(TZSONFILE)
+  CALL IO_File_close(TZSONFILE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -1655,7 +1660,7 @@ WRITE(ILUOUT,*) ' ------------------------------------------------------------ '
 6  FORMAT(' |    SPAWN_MODEL2     |     ',F8.3,'      |     ',F8.3,'     |')
 !
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TLUOUT)
 !
 9900  FORMAT(' K = 001    ZHAT = ',E14.7)
 9901  FORMAT(' K = ',I3.3,'    ZHAT = ',E14.7,'    DZ = ' ,E14.7)
diff --git a/src/MNH/spawn_surf.f90 b/src/MNH/spawn_surf.f90
index f9e126c209b7dfb521d46ef0f99f0de3106ebc52..deee96b3bd6a5bf44d5f35efadbafaa9a45f2e19 100644
--- a/src/MNH/spawn_surf.f90
+++ b/src/MNH/spawn_surf.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
 !-----------------------------------------------------------------
 !######################## 
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE SPAWN_SURF (HINIFILE, HINIFILEPGD, TPOUTDATAFILE, OSPAWN_SURF)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 
 !
 CHARACTER (LEN=*),      INTENT(IN) :: HINIFILE     ! Input file
@@ -75,7 +75,7 @@ END MODULE MODI_SPAWN_SURF
 !
 USE MODD_CONF,         ONLY : NVERB
 USE MODD_GRID_n,       ONLY : XZS
-USE MODD_IO_ll,        ONLY : TFILEDATA
+USE MODD_IO,           ONLY : TFILEDATA
 USE MODD_IO_SURF_MNH,  ONLY : COUTFILE
 USE MODD_LUNIT,        ONLY : TPGDFILE, TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
@@ -84,8 +84,6 @@ USE MODD_PARAM_n,      ONLY : CSURF
 USE MODD_TIME_n,       ONLY : TDTCUR
 !
 USE MODE_ll
-USE MODE_FMWRIT
-USE MODE_IO_ll
 USE MODE_MODELN_HANDLER
 USE MODE_PREP_CTL,     ONLY : PREP_CTL
 !
diff --git a/src/MNH/spawn_surf2_rain.f90 b/src/MNH/spawn_surf2_rain.f90
index 2a776304a2947ffc2616a6035cb98c84e6b9e888..0c324004db2bc022e01a0d0851e92d327c927cb5 100644
--- a/src/MNH/spawn_surf2_rain.f90
+++ b/src/MNH/spawn_surf2_rain.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-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.
 !-----------------------------------------------------------------
 !###########################
@@ -17,7 +17,7 @@ INTERFACE
                               KIB2,KJB2,KIE2,KJE2,                                 &
                               KIB1,KJB1,KIE1,KJE1                                  )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -91,7 +91,7 @@ END MODULE MODI_SPAWN_SURF2_RAIN
 !!    ---------
 !!
 !!       Book1 of the documentation
-!!      
+!!
 !!
 !!    AUTHOR
 !!    ------
@@ -109,17 +109,17 @@ END MODULE MODI_SPAWN_SURF2_RAIN
 !!      C.Lac 10/2016 : Add droplet deposition for fog
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      J.Escobar 05/03/2018 : bypass gridnesting special case KD(X/Y)RATIO == 1 not parallelized
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
 !
 USE MODD_BIKHARDT_n
-USE MODD_CONF,    ONLY : CCONF,CPROGRAM
-USE MODD_FIELD_n, ONLY : XTHT
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_LBC_n,   ONLY : LBC_MODEL
-USE MODD_LUNIT_n, ONLY : CLUOUT
+USE MODD_CONF,    ONLY: CCONF, CPROGRAM
+USE MODD_FIELD_n, ONLY: XTHT
+USE MODD_IO,      ONLY: TFILEDATA
+USE MODD_LBC_n,   ONLY: LBC_MODEL
 USE MODD_SPAWN
 !
 USE MODE_MODELN_HANDLER
@@ -413,7 +413,7 @@ IF (PRESENT(TPSONFILE)) THEN
     ALLOCATE(ZACPRH1(0,0))
     YGETRHT='SKIP'
   END IF
-  CALL READ_PRECIP_FIELD(TPSONFILE,CLUOUT,CPROGRAM,CCONF,                            &
+  CALL READ_PRECIP_FIELD(TPSONFILE,CPROGRAM,CCONF,                                   &
                          YGETRCT,YGETRRT,YGETRST,YGETRGT,YGETRHT,                    &
                          ZINPRC1,ZACPRC1,ZINDEP1,ZACDEP1,ZINPRR1,ZINPRR3D1,ZEVAP3D1, &
                          ZACPRR1,ZINPRS1,ZACPRS1,                                    &
diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90
index 63bd460afb8f08731bf07d128f906fe8fa5da562..ea7ad57684df040d48e490829a65991582d45b1c 100644
--- a/src/MNH/spawn_zs.f90
+++ b/src/MNH/spawn_zs.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2005-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-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.
 !-----------------------------------------------------------------
 !###################
@@ -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
 !
@@ -114,7 +115,6 @@ USE MODI_ZS_BOUNDARY
 !
 USE MODE_MODELN_HANDLER
 !
-USE MODE_FM
 USE MODE_MPPDB
 USE MODD_VAR_ll
 USE MODE_ll
@@ -192,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
@@ -414,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/spawning.f90 b/src/MNH/spawning.f90
index 7ab352665080b6bc19ddcea1d8107ccae3e71e25..2480473be3a44be2ae754e179093f444bf3c264b 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !     ################
@@ -74,6 +74,9 @@
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -101,7 +104,7 @@ USE MODD_CURVCOR_n
 USE MODD_DIM_n
 USE MODD_DYN_n, LRES_n=>LRES, XRES_n=>XRES 
 USE MODD_FIELD_n
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
+USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
 USE MODD_LSFIELD_n
 USE MODD_LBC_n
 USE MODD_LUNIT_n
@@ -111,12 +114,12 @@ USE MODD_REF_n
 USE MODD_TIME_n
 USE MODD_CH_MNHC_n
 USE MODD_GRID_n
-! 
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME,IO_FILE_PRINT_LIST
+!
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname, IO_Filelist_print
 USE MODE_ll
 USE MODE_POS
-USE MODE_FM
 USE MODE_MODELN_HANDLER
 !
 USE MODI_SPAWN_MODEL2    
@@ -165,7 +168,7 @@ CALL VERSION
 CPROGRAM='SPAWN '
 CDOMAIN= ''
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !-------------------------------------------------------------------------------
 !
 !*       1.    SPAWNING INITIALIZATION 
@@ -180,8 +183,8 @@ CALL READ_EXSPA(CINIFILE,CINIFILEPGD,&
 !*       2.    NAM_BLANK, NAM_SPAWN_SURF and NAM_CONFZ READING AND EXSPA file CLOSURE
 !              ----------------------------------------
 !
-CALL IO_FILE_FIND_BYNAME('SPAWN1.nam',TZEXPAFILE,IRESP)
-CALL IO_FILE_OPEN_ll(TZEXPAFILE)
+CALL IO_File_find_byname('SPAWN1.nam',TZEXPAFILE,IRESP)
+CALL IO_File_open(TZEXPAFILE)
 ILUSPA = TZEXPAFILE%NLU
 !
 CALL INIT_NMLVAR
@@ -194,7 +197,7 @@ CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
 CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
-CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
+CALL IO_File_close(TZEXPAFILE)
 !
 !-------------------------------------------------------------------------------
 !
@@ -203,9 +206,9 @@ CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
 !
 CALL INIT_MNH
 !
-CALL IO_FILE_FIND_BYNAME(TRIM(CINIFILE),TZINIFILE,IRESP)
-CALL IO_FILE_CLOSE_ll(TZINIFILE)
-CALL IO_FILE_CLOSE_ll(TINIFILEPGD,OPARALLELIO=.FALSE.)
+CALL IO_File_find_byname(TRIM(CINIFILE),TZINIFILE,IRESP)
+CALL IO_File_close(TZINIFILE)
+CALL IO_File_close(TINIFILEPGD)
 !-------------------------------------------------------------------------------
 !
 !*       4.    INITIALIZATION OF OUTER POINTS OF MODEL 1
@@ -226,7 +229,7 @@ CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION)
 !*       5.    SPAWNING OF MODEL 2 FROM MODEL 1
 !              --------------------------------
 !
-CALL IO_FILE_OPEN_ll(TZEXPAFILE)
+CALL IO_File_open(TZEXPAFILE)
 ILUSPA = TZEXPAFILE%NLU
 !
 CALL SET_POINTERS_TO_MODEL1()
@@ -236,7 +239,7 @@ CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
 CALL GOTO_MODEL(1)
-CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
+CALL IO_File_close(TZEXPAFILE)
 !
 CALL GO_TOMODEL_ll(2,IINFO_ll)
 !
@@ -246,15 +249,13 @@ CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
 !
 CALL SURFEX_DEALLO_LIST
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TLUOUT)
 !
 CALL END_PARA_ll(IINFO_ll)
-!JUAN CALL ABORT
-STOP
 
-CONTAINS 
+CONTAINS
 
 SUBROUTINE INIT_NMLVAR
 LRES=LRES_n
@@ -292,12 +293,14 @@ XRT1 => XRT
 XUT1 => XUT
 XVT1 => XVT
 XWT1 => XWT
+XZWS1 => XZWS
 XSRCT1 => XSRCT
 XSIGS1 => XSIGS
 TDTCUR1 => TDTCUR
 XLSUM1 => XLSUM
 XLSVM1 => XLSVM
 XLSWM1 => XLSWM
+XLSZWSM1 => XLSZWSM
 XLSTHM1 => XLSTHM
 XLSRVM1 => XLSRVM
 !
diff --git a/src/MNH/spec_ver_int.f90 b/src/MNH/spec_ver_int.f90
index abd3ed1e047741f659adc7fd2efc3c9c86d8c519..752f233df40446b29a850a818645f6c1f8b4be42 100644
--- a/src/MNH/spec_ver_int.f90
+++ b/src/MNH/spec_ver_int.f90
@@ -1,6 +1,6 @@
 !MNH_LIC Copyright 2000-2018 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.
 !-----------------------------------------------------------------
 !      #################
@@ -50,6 +50,7 @@ END MODULE MODI_SPEC_VER_INT
 !!    -------------
 !!      Original         07/02/00
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !!
 !! --------------------------------------------------------------------------
 !       
@@ -59,8 +60,10 @@ END MODULE MODI_SPEC_VER_INT
 USE MODD_LES
 USE MODD_PARAMETERS
 !
-USE MODE_ll
 USE MODE_GATHER_ll
+USE MODE_ll
+use mode_msg
+!
 USE MODI_VER_INTERP_LIN
 !
 IMPLICIT NONE
@@ -102,16 +105,13 @@ ELSE IF (CSPECTRA_LEVEL_TYPE=='Z') THEN
     PA_SPEC = XUNDEF
   END WHERE
 ELSE
-  PRINT*, '-------> STOP in SPEC_VER_INT <----------'
- !callabortstop
-CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'SPEC_VER_INT', 'invalid CSPECTRA_LEVEL_TYPE ('//CSPECTRA_LEVEL_TYPE//')' )
 END IF
 !
 !-------------------------------------------------------------------------------
 !
-! ONE PROCESSOR ONLY
-! ------------------
+! ONE PROCESS ONLY
+! ----------------
 !
 CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll)
 ALLOCATE(ZA_ll(IIMAX_ll+2*JPHEXT,IJMAX_ll+2*JPHEXT,NSPECTRA_K))
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index ef3367cdc9e0a60eb485978090a64bc2b1302db1..22878e5a926e5263f3e868a0ef20357e13ea4179 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######spl
       PROGRAM SPECTRE
 !     ############
@@ -24,7 +25,7 @@
 !
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
+USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n
 USE MODD_TIME_n
@@ -36,10 +37,10 @@ USE MODI_SPECTRE_AROME
 !
 USE MODE_MSG
 USE MODE_POS
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_MODELN_HANDLER
-USE MODE_FM
 !USE MODD_TYPE_DATE
 USE MODI_VERSION
 !
@@ -84,7 +85,7 @@ CALL GOTO_MODEL(1)
 CALL VERSION
 CPROGRAM='SPEC  '
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 ! initialization 
 YINIFILE(:)   = '                         '
@@ -120,8 +121,8 @@ PRINT*, '*********************************************************************'
 PRINT*, '*********************************************************************'
 PRINT*, ' '
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPEC1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'SPEC1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 PRINT*, 'READ THE SPEC1.NAM FILE'
@@ -162,9 +163,9 @@ IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFIO)
   PRINT*, '  namelist NAM_CONFIO read'
 END IF
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 CINIFILE = YINIFILE(1)
 !
@@ -188,10 +189,10 @@ ENDIF
 IF (CTYPEFILE=='MESONH') THEN
   CALL SPECTRE_MESONH(YOUTFILE)
   !
-  CALL IO_FILE_CLOSE_ll(LUNIT_MODEL(1)%TINIFILE)
-  IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
-  CALL IO_FILE_CLOSE_ll(TLUOUT0)
-  CALL IO_FILE_CLOSE_ll(TLUOUT)
+  CALL IO_File_close(LUNIT_MODEL(1)%TINIFILE)
+  IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
+  CALL IO_File_close(TLUOUT0)
+  CALL IO_File_close(TLUOUT)
 ELSEIF (CTYPEFILE=='AROME ')THEN
  CALL SPECTRE_AROME(CINIFILE,YOUTFILE,XDELTAX,XDELTAY,NI,NJ,NK)
 ELSE
diff --git a/src/MNH/spectre_arome.f90 b/src/MNH/spectre_arome.f90
index 532c3d9794e0859740b4b6115e3941c38de5d077..81a83ebc2089429df9c56f7ecaa107e050d6d94e 100644
--- a/src/MNH/spectre_arome.f90
+++ b/src/MNH/spectre_arome.f90
@@ -2,6 +2,11 @@
 !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 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!-----------------------------------------------------------------
 !     ####################
       MODULE MODI_SPECTRE_AROME
 !     ####################
@@ -22,14 +27,9 @@ END MODULE
 
 SUBROUTINE SPECTRE_AROME(HINIFILE,HOUTFILE,PDELTAX,PDELTAY,KI,KJ,KK)
 !     ######################################################################
-!     
-! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
 !
 USE MODD_CONF
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_IO, only: IO_Pack_set
 USE MODD_SPECTRE
 USE MODI_COMPUTE_SPECTRE
 USE MODD_PARAMETERS
@@ -54,7 +54,7 @@ INTEGER :: JJJ,III,JERR
 CALL SET_SPLITTING_ll(CSPLIT)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT, NHALO)
 CALL SET_DAD0_ll()
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 ALLOCATE(ZWORK1(KI+2,KJ+2,KK+2))
 !
 IF (LSPECTRE_U) THEN
diff --git a/src/MNH/test_nam_var.f90 b/src/MNH/test_nam_var.f90
index d26aca6f0579f3563c8fc2c607fcfa7f92a3cefc..476cf1a4d8460ad0feef3bb54068a2520d472823 100644
--- a/src/MNH/test_nam_var.f90
+++ b/src/MNH/test_nam_var.f90
@@ -80,11 +80,14 @@ END MODULE MODI_TEST_NAM_VAR
 !!      original                                                     17/04/98
 !!      10/2016 (C.Lac) Increase of the number of values
 !!      P.Wautelet 22/01/2019: use standard FLUSH statement instead of non standard intrinsics
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !----------------------------------------------------------------------------
 !
 !*      0.    DECLARATIONS
 !             ------------
 !
+use mode_msg
+!
 IMPLICIT NONE
 !
 !*      0.1   Declarations of arguments
@@ -183,8 +186,6 @@ IF ( PRESENT (HVALUE11) ) WRITE (KLUOUT,*) '"',HVALUE11,'"'
 IF ( PRESENT (HVALUE12) ) WRITE (KLUOUT,*) '"',HVALUE12,'"'
 FLUSH(unit=KLUOUT)
 !
- !callabortstop
-CALL ABORT
-STOP
+call Print_msg( NVERB_FATAL, 'GEN', 'TEST_NAM_VARC0', trim(HVAR)//' is not allowed for variable '//trim(HNAME) )
 !-------------------------------------------------------------------------------
 END SUBROUTINE TEST_NAM_VARC0
diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90
index 6132cdc2ac6c732ed0b8b9c57a293c806445bca3..ed98e4519bb820e5dd4793416885b8460cf513c4 100644
--- a/src/MNH/tke_eps_sources.f90
+++ b/src/MNH/tke_eps_sources.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###########################
@@ -15,7 +15,7 @@ INTERFACE
                       TPFILE,OCLOSE_OUT,OTURB_DIAG,                         &
                       PTP,PRTKES,PRTKESM, PRTHLS,PCOEF_DISS,PTR,PDISS       )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                 INTENT(IN)   ::  KKA          !near ground array index  
 INTEGER,                 INTENT(IN)   ::  KKU          !uppest atmosphere array index
@@ -179,15 +179,15 @@ END MODULE MODI_TKE_EPS_SOURCES
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_BUDGET
 USE MODD_LES
 USE MODD_DIAG_IN_RUN, ONLY : LDIAG_IN_RUN, XCURRENT_TKE_DISS
 !
 USE MODE_ll
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -526,7 +526,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PDP)
+  CALL IO_Field_write(TPFILE,TZFIELD,PDP)
 !
 ! stores the thermal production 
 !
@@ -540,7 +540,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PTP)
+  CALL IO_Field_write(TPFILE,TZFIELD,PTP)
 !
 ! stores the whole turbulent transport
 !
@@ -554,7 +554,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PTR)
+  CALL IO_Field_write(TPFILE,TZFIELD,PTR)
 !
 ! stores the dissipation of TKE 
 !
@@ -568,7 +568,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PDISS)
+  CALL IO_Field_write(TPFILE,TZFIELD,PDISS)
 END IF
 !
 ! Storage in the LES configuration of the Dynamic Production of TKE and
diff --git a/src/MNH/tools.f90 b/src/MNH/tools.f90
new file mode 100644
index 0000000000000000000000000000000000000000..68a195fac3c0874493ec93b5f4ced23a6c58ab93
--- /dev/null
+++ b/src/MNH/tools.f90
@@ -0,0 +1,46 @@
+!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.
+!-----------------------------------------------------------------
+
+!################
+module mode_tools
+!################
+!
+!    Purpose
+!    -------
+!
+!     The Purpose of this module is to provide useful tools for MesoNH
+!
+!    Author
+!    ------
+!     P. Wautelet 14/02/2019
+!
+
+implicit none
+
+private
+
+public :: upcase
+
+contains
+
+function upcase(hstring)
+  character(len=*), intent(in) :: hstring
+  character(len=len(hstring))  :: upcase
+
+  integer :: jc
+  integer, parameter :: iamin = iachar("a")
+  integer, parameter :: iamaj = iachar("A")
+
+  do jc = 1,len(hstring)
+    if ( hstring(jc:jc) >= "a" .and. hstring(jc:jc) <= "z" ) then
+      upcase(jc:jc) = achar( iachar( hstring(jc:jc) ) - iamin + iamaj )
+    else
+      upcase(jc:jc) = hstring(jc:jc)
+    end if
+  end do
+end function upcase
+
+end module mode_tools
diff --git a/src/MNH/transfer_file.f90 b/src/MNH/transfer_file.f90
deleted file mode 100644
index 0fe173610cb2d26b89142c94d1133669e55a6dda..0000000000000000000000000000000000000000
--- a/src/MNH/transfer_file.f90
+++ /dev/null
@@ -1,92 +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.
-!-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! masdev4_7 BUG1 2007/06/15 17:47:18
-!-----------------------------------------------------------------
-!#########################
-MODULE MODI_TRANSFER_FILE
-!#########################
-!
-INTERFACE
-      SUBROUTINE TRANSFER_FILE(HTRANS,HCPIO,HFILENAME)
-!
-CHARACTER(LEN=*), INTENT(IN) :: HTRANS    ! unix command for transfer
-CHARACTER(LEN=*), INTENT(IN) :: HCPIO     ! CPIO option
-CHARACTER(LEN=*), INTENT(IN) :: HFILENAME ! name of the file to transfer
-!
-END SUBROUTINE TRANSFER_FILE
-END INTERFACE
-END MODULE MODI_TRANSFER_FILE
-!
-!     ################################################
-      SUBROUTINE TRANSFER_FILE(HTRANS,HCPIO,HFILENAME)
-!     ################################################
-!
-!!****  *TRANSFER_FILE* - writes transfer.x command for a file in the pipe_name
-!! 
-!!    PURPOSE
-!!    -------
-!!    This subroutine writes the unix command line HTRANS HCPIO HFILENAME
-!!    in the file pipe_name and flushes the buffer.
-!!
-!!**  METHOD
-!!    ------
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!      Routine FLUSH : to flush the buffer
-!!     
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!      Book 2
-!!
-!!    AUTHOR
-!!    ------
-!!	
-!!      V.Masson  Meteo-France
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!      Original    10/04/95
-!!      modified by E.pesin 03/98 (for FUJITSU machine)
-!-------------------------------------------------------------------------------
-!
-!*       0.    DECLARATIONS
-!              ------------
-!
-IMPLICIT NONE
-!
-!*       0.1   Declaration of arguments
-!              ------------------------
-!
-CHARACTER(LEN=*), INTENT(IN) :: HTRANS    ! unix command for transfer
-CHARACTER(LEN=*), INTENT(IN) :: HCPIO     ! CPIO option
-CHARACTER(LEN=*), INTENT(IN) :: HFILENAME ! name of the file to transfer
-!
-!*       0.2   Declaration of local variables
-!              ------------------------------
-!
-CHARACTER(LEN=100)            :: YCOMMAND  ! command writen in pipe_name
-!
-!-------------------------------------------------------------------------------
-!
-WRITE(YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER 2>&1 &")') TRIM(HTRANS),TRIM(HCPIO),TRIM(HFILENAME)
-PRINT *,'YCOMMAND =',YCOMMAND
-!
-print*, 'WARNING: routine TRANSFER_FILE DOES NOT WORK'
-!!!!!CALL SYSTEM(YCOMMAND)
-print*, 'WARNING: "CALL SYSTEM(YCOMMAND)" is not called in TRANSFER_FILE routine'
-!
-!-------------------------------------------------------------------------------
-!
-END SUBROUTINE TRANSFER_FILE
diff --git a/src/MNH/trid.f90 b/src/MNH/trid.f90
index 3f57d6a9c4897e67eaf7921d7b001023f9f82a5e..db2600ee0af0faddad79ec73885f01419298441e 100644
--- a/src/MNH/trid.f90
+++ b/src/MNH/trid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ################
@@ -171,7 +171,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 !JUAN
diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90
index c72b598703421105f35c5bb78ec8c6faa24b7970..4a74457910674c6edca3bf6f463ba8ed82fda929 100644
--- a/src/MNH/tridz.f90
+++ b/src/MNH/tridz.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ################
@@ -180,7 +180,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !JUAN P1/P2 SPLITTING
 USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll,GET_ORZ_ll,LWESTZ_ll,LSOUTHZ_ll
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index fefaad26a82654914fae4471d87860c5836e4144..03573095bad297e5abc533d0e8cd7db033630516 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################ 
@@ -25,7 +25,7 @@ INTERFACE
                 PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTR,PDISS,PLEM    )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -350,7 +350,7 @@ USE MODD_CST
 USE MODD_CTURB
 USE MODD_CONF
 USE MODD_BUDGET
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
 !
@@ -378,8 +378,8 @@ USE MODI_TM06
 USE MODI_UPDATE_LM
 USE MODI_GET_HALO
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_SBL
 !
 USE MODI_EMOIST
@@ -755,7 +755,7 @@ IF (KRRL >=1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZATHETA)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZATHETA)
 ! 
     TZFIELD%CMNHNAME   = 'AMOIST'
     TZFIELD%CSTDNAME   = ''
@@ -767,7 +767,7 @@ IF (KRRL >=1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZAMOIST)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZAMOIST)
   END IF
 !
 ELSE
@@ -1237,7 +1237,11 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
+<<<<<<< HEAD
   CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PLEM)
+=======
+  CALL IO_Field_write(TPFILE,TZFIELD,ZLM)
+>>>>>>> MNH-55X
 !
   IF (KRR /= 0) THEN
 !
@@ -1254,7 +1258,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(PTHLT)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PTHLT)
+    CALL IO_Field_write(TPFILE,TZFIELD,PTHLT)
 !
 ! stores the conservative mixing ratio
 !
@@ -1269,7 +1273,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(PRT)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRT(:,:,:,1))
+    CALL IO_Field_write(TPFILE,TZFIELD,PRT(:,:,:,1))
    END IF
 END IF
 !
@@ -2032,7 +2036,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PLEM)
+  CALL IO_Field_write(TPFILE,TZFIELD,PLEM)
 ENDIF
 !
 ! Amplification of the mixing length when the criteria are verified
@@ -2058,7 +2062,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCOEF_AMPL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZCOEF_AMPL)
   !
   TZFIELD%CMNHNAME   = 'LM_CLOUD'
   TZFIELD%CSTDNAME   = ''
@@ -2069,7 +2073,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLM_CLOUD)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZLM_CLOUD)
   !
 ENDIF
 !
diff --git a/src/MNH/turb_cloud_index.f90 b/src/MNH/turb_cloud_index.f90
index b9a42c2fcfbb98adf5b71b83604818d336964cfd..a224e27eb694ad36e42c8559521034e5de408996 100644
--- a/src/MNH/turb_cloud_index.f90
+++ b/src/MNH/turb_cloud_index.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################
@@ -14,7 +14,7 @@ INTERFACE
                                   PRRS,PRM,PRHODJ,PDXX,PDYY,PDZZ,PDZX,PDZY, &
                                   PCEI                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time step
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
@@ -85,11 +85,11 @@ END MODULE MODI_TURB_CLOUD_INDEX
 !
 !-------------------------------------------------------------------------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_PARAMETERS,     ONLY: JPVEXT
 !
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 !
@@ -259,7 +259,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRVCI)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZRVCI)
   !
   TZFIELD%CMNHNAME   = 'GX_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -271,7 +271,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZG_RVCI(:,:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZG_RVCI(:,:,:,1))
   !
   TZFIELD%CMNHNAME   = 'GY_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -283,7 +283,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZG_RVCI(:,:,:,2))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZG_RVCI(:,:,:,2))
   !
   TZFIELD%CMNHNAME   = 'GNORM_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -295,7 +295,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZGNORM_RVCI)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZGNORM_RVCI)
   !
   TZFIELD%CMNHNAME   = 'QX_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -307,7 +307,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,1))
   !
   TZFIELD%CMNHNAME   = 'QY_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -319,7 +319,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,2))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,2))
   !
   TZFIELD%CMNHNAME   = 'QNORM_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -331,7 +331,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZQNORM_RVCI)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZQNORM_RVCI)
   !
   TZFIELD%CMNHNAME   = 'CEI'
   TZFIELD%CSTDNAME   = ''
@@ -343,7 +343,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PCEI)
+  CALL IO_Field_write(TPFILE,TZFIELD,PCEI)
 END IF
 !
 END SUBROUTINE TURB_CLOUD_INDEX
diff --git a/src/MNH/turb_hor.f90 b/src/MNH/turb_hor.f90
index 2b91e31073da9f16662b93935b1a220f71f5cc91..a68194934cb88840011944590c6be2162e1d84c0 100644
--- a/src/MNH/turb_hor.f90
+++ b/src/MNH/turb_hor.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ####################  
@@ -27,7 +27,7 @@ INTERFACE
                       PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS               )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KSPLT         ! current split index
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
@@ -266,7 +266,7 @@ END MODULE MODI_TURB_HOR
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90
index 3541f5a414398231105020f5481c07fc2018a70a..ed514e98a3fe789e356ee4f969aa878d2c37b378 100644
--- a/src/MNH/turb_hor_dyn_corr.f90
+++ b/src/MNH/turb_hor_dyn_corr.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 MODULE MODI_TURB_HOR_DYN_CORR
@@ -22,7 +22,7 @@ INTERFACE
                       PDP,PTP,                                       &
                       PRUS,PRVS,PRWS                                 )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 REAL,                     INTENT(IN)    ::  PTSTEP       ! timestep
@@ -147,18 +147,18 @@ END MODULE MODI_TURB_HOR_DYN_CORR
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_NSV
 !
 USE MODE_ll
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -566,7 +566,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the U tendency
@@ -758,7 +758,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 !!! wait for the computation of PRUS (that uses ZTMP1_DEVICE and ZTMP3_DEVICE)
@@ -939,7 +939,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 !
diff --git a/src/MNH/turb_hor_splt.f90 b/src/MNH/turb_hor_splt.f90
index 1171330fcc71a78514caa2df988b581abb5c74d7..ac27858c6095a1b63afcf08921aec124e4207dff 100644
--- a/src/MNH/turb_hor_splt.f90
+++ b/src/MNH/turb_hor_splt.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #########################  
@@ -26,7 +26,7 @@ INTERFACE
                       PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS               )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KSPLIT        ! number of time splitting
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
@@ -268,7 +268,7 @@ END MODULE MODI_TURB_HOR_SPLT
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
 !
diff --git a/src/MNH/turb_hor_sv_flux.f90 b/src/MNH/turb_hor_sv_flux.f90
index e89be47b72ad198db9c707ce16bf7eb5e390902f..4148d7f780dbf8a2966401ca7d3624122371427f 100644
--- a/src/MNH/turb_hor_sv_flux.f90
+++ b/src/MNH/turb_hor_sv_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ############################
@@ -20,7 +20,7 @@ INTERFACE
                       PSVM,                                          &
                       PRSVS                                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -122,14 +122,14 @@ END MODULE MODI_TURB_HOR_SV_FLUX
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_NSV, ONLY : NSV_LGBEG,NSV_LGEND
+USE MODD_NSV,            ONLY: NSV_LGBEG, NSV_LGEND
 USE MODD_LES
 USE MODD_BLOWSNOW
 !
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -323,7 +323,7 @@ DO JSV=1,ISV
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXX)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXX)
   END IF
 !
   IF (LLES_CALL .AND. KSPLT==1) THEN
@@ -436,7 +436,7 @@ DO JSV=1,ISV
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXY)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXY)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXY)
     END IF
 !
   ELSE
diff --git a/src/MNH/turb_hor_thermo_corr.f90 b/src/MNH/turb_hor_thermo_corr.f90
index 415cc363d562b30c0aa1c57dbf468eb774e2b4af..551945145af507066cb79fa9e97080a5973ee8c8 100644
--- a/src/MNH/turb_hor_thermo_corr.f90
+++ b/src/MNH/turb_hor_thermo_corr.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################################
@@ -20,7 +20,7 @@ INTERFACE
                       PLOCPEXNM,PATHETA,PAMOIST,PSRCM,               &
                       PSIGS                                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -131,12 +131,12 @@ END MODULE MODI_TURB_HOR_THERMO_CORR
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -382,7 +382,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) &
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
   END IF
 !
 ! Storage in the LES configuration (addition to TURB_VER computation)
@@ -580,7 +580,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) &
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
     END IF
 !
 !   Storage in the LES configuration (addition to TURB_VER computation)
@@ -756,7 +756,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) &
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
     END IF
     !
     !   Storage in the LES configuration (addition to TURB_VER computation)
diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90
index edd82d225a9fb4dc2d40df5b04d681675a66f1f2..540ac628ba3028a0cadaf92d425605e1e0d7d4dc 100644
--- a/src/MNH/turb_hor_thermo_flux.f90
+++ b/src/MNH/turb_hor_thermo_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################################ 
@@ -21,7 +21,7 @@ INTERFACE
                       PATHETA,PAMOIST,PSRCM,PFRAC_ICE,               &
                       PRTHLS,PRRS                                    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KSPLT         ! split process index
 INTEGER,                  INTENT(IN)    :: KRR           ! number of moist var.
@@ -141,12 +141,12 @@ END MODULE MODI_TURB_HOR_THERMO_FLUX
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -521,7 +521,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -658,7 +658,7 @@ IF (KRR/=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
   END IF
   !
   IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -919,7 +919,7 @@ END IF
 !!    TZFIELD%NTYPE      = TYPEREAL
 !!    TZFIELD%NDIMS      = 3
 !!    TZFIELD%LTIMEDEP   = .TRUE.
-!!    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVPTU)
+!!    CALL IO_Field_write(TPFILE,TZFIELD,ZVPTU)
 !!  END IF
 !!!
 !!ELSE
@@ -1023,7 +1023,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -1358,7 +1358,7 @@ IF (KRR/=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
   END IF
   !
   IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -1640,7 +1640,7 @@ END IF
 !!    TZFIELD%NTYPE      = TYPEREAL
 !!    TZFIELD%NDIMS      = 3
 !!    TZFIELD%LTIMEDEP   = .TRUE.
-!!    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVPTV)
+!!    CALL IO_Field_write(TPFILE,TZFIELD,ZVPTV)
 !!  END IF
 !!!
 !!ELSE
diff --git a/src/MNH/turb_hor_uv.f90 b/src/MNH/turb_hor_uv.f90
index 5dfa85f5678c6c083c4e9931ac5c811db7dbafc9..fb1481548a886ffbe49f40bb461da34d966e26c5 100644
--- a/src/MNH/turb_hor_uv.f90
+++ b/src/MNH/turb_hor_uv.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -22,7 +22,7 @@ INTERFACE
                       PDP,                                           &
                       PRUS,PRVS                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -133,12 +133,12 @@ END MODULE MODI_TURB_HOR_UV
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -417,7 +417,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 !
diff --git a/src/MNH/turb_hor_uw.f90 b/src/MNH/turb_hor_uw.f90
index e693b33f3938721960c436a1e99613bba0689c8f..0b43466fa3961d3ca3ee732008735c533d0765fa 100644
--- a/src/MNH/turb_hor_uw.f90
+++ b/src/MNH/turb_hor_uw.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -20,7 +20,7 @@ INTERFACE
                       PDP,                                           &
                       PRUS,PRWS                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -122,13 +122,13 @@ END MODULE MODI_TURB_HOR_UW
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_NSV
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -264,7 +264,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 !
diff --git a/src/MNH/turb_hor_vw.f90 b/src/MNH/turb_hor_vw.f90
index b54ce312cc7567bb05394cf1eb73c15a4a180ea0..641f760b4796a86cd554954a6db69d161daac26b 100644
--- a/src/MNH/turb_hor_vw.f90
+++ b/src/MNH/turb_hor_vw.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -20,7 +20,7 @@ INTERFACE
                       PDP,                                           &
                       PRVS,PRWS                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -125,13 +125,13 @@ END MODULE MODI_TURB_HOR_VW
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_NSV
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -290,7 +290,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLX)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! compute the source for rho*V due to this residual flux ( the other part is
diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90
index bfe58c1b2a0ae5dfaf7f80999f33e57c062969c8..2867e1195a9cc3ddcd3aabf7f92ad9a86a3a9eb9 100644
--- a/src/MNH/turb_ver.f90
+++ b/src/MNH/turb_ver.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -27,7 +27,7 @@ INTERFACE
                       PDP,PTP,PSIGS,PWTH,PWRC,PWSV                  )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -338,10 +338,10 @@ END MODULE MODI_TURB_VER
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
-USE MODD_NSV, ONLY : NSV
+USE MODD_NSV,            ONLY: NSV
 USE MODD_BLANK
 !
 USE MODI_PRANDTL
@@ -356,8 +356,8 @@ USE MODI_TURB_VER_SV_CORR
 USE MODI_LES_MEAN_SUBGRID
 USE MODI_SBL_DEPTH
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
@@ -737,7 +737,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
   !$acc update self(ZPHI3)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPHI3)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZPHI3)
 !
 ! stores the Turbulent Schmidt number
 ! 
@@ -752,7 +752,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
   !$acc update self(ZPSI3)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPSI3)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZPSI3)
 !
 !
 ! stores the Turbulent Schmidt number for the scalar variables
@@ -769,7 +769,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
     WRITE(TZFIELD%CMNHNAME, '("PSI_SV_",I3.3)') JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPSI_SV(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPSI_SV(:,:,:,JSV))
   END DO
 !
 END IF
diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90
index 7699a7021d829b7d839a06f2cf53fbefe6f25726..e85ea649b6431a247a718cc39c6b35700ec12d1b 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -23,7 +23,7 @@ INTERFACE
                       PRUS,PRVS,PRWS,                               &
                       PDP                                           )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -297,32 +297,31 @@ END MODULE MODI_TURB_VER_DYN_FLUX
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
+USE MODD_PARAMETERS
 !
-!
+#ifdef MNH_BITREP
+USE MODI_BITREP
+#endif
+USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_GRADIENT_W
-USE MODI_GRADIENT_M
+USE MODI_LES_MEAN_SUBGRID
+USE MODI_SECOND_MNH
 #ifndef _OPENACC
 USE MODI_SHUMAN
 #else
 USE MODI_SHUMAN_DEVICE
 #endif
-USE MODI_TRIDIAG 
-USE MODI_TRIDIAG_WIND 
-USE MODE_FMWRIT
-USE MODI_LES_MEAN_SUBGRID
+USE MODI_TRIDIAG
+USE MODI_TRIDIAG_WIND
 !
-USE MODI_SECOND_MNH
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-#ifdef MNH_BITREP
-USE MODI_BITREP
-#endif
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
 !
 IMPLICIT NONE
 !
@@ -641,7 +640,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 ! first part of total momentum flux
@@ -1056,7 +1055,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 ! second part of total momentum flux
@@ -1320,7 +1319,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT .AND. HTURBDIM == '1DIM') THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXZ)
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/turb_ver_sv_flux.f90 b/src/MNH/turb_ver_sv_flux.f90
index f6fa4af5cf340fd3e40225b809188c317d583a74..841371a5460d0be73f463e6876a64828a54b8126 100644
--- a/src/MNH/turb_ver_sv_flux.f90
+++ b/src/MNH/turb_ver_sv_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -21,7 +21,7 @@ INTERFACE
                       PTKEM,PLM,PPSI_SV,                            &
                       PRSVS,PWSV                                    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -269,14 +269,14 @@ END MODULE MODI_TURB_VER_SV_FLUX
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_CONF
-USE MODD_NSV, ONLY : XSVMIN,NSV_LGBEG,NSV_LGEND
+USE MODD_NSV,            ONLY: XSVMIN, NSV_LGBEG, NSV_LGEND
 USE MODD_BLOWSNOW
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
@@ -472,7 +472,7 @@ DO JSV=1,ISV
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     !
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
   !
   ! Storage in the LES configuration
diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90
index 221d78aa53f5b4ca6a8030461d69b5ee31b2da94..b1059b576354e547326aec8a6cfcce5e2cce41e9 100644
--- a/src/MNH/turb_ver_thermo_corr.f90
+++ b/src/MNH/turb_ver_thermo_corr.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -25,7 +25,7 @@ INTERFACE
                       PFWTH,PFWR,PFTH2,PFR2,PFTHR,                  &
                       PTHLP,PRP,PSIGS                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -325,7 +325,7 @@ END MODULE MODI_TURB_VER_THERMO_CORR
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_LES
@@ -340,10 +340,10 @@ USE MODI_SHUMAN
 USE MODI_SHUMAN_DEVICE
 #endif
 USE MODI_TRIDIAG 
-USE MODE_FMWRIT
 USE MODI_LES_MEAN_SUBGRID
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
@@ -750,7 +750,7 @@ END IF
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXZ)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
 !
 ! and we store in LES configuration
@@ -1067,7 +1067,7 @@ END IF
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXZ)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
     END IF
 !
 ! and we store in LES configuration
@@ -1349,7 +1349,7 @@ END IF
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXZ)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
     END IF
     !
     ! and we store in LES configuration
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index 2ebe8030987ca123da1b6a9a72677b08da86f873..f910e5cdf6d824fa466bd1c92e04c0178cabe8de 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -26,7 +26,7 @@ INTERFACE
                       PFWTH,PFWR,PFTH2,PFR2,PFTHR,PBL_DEPTH,        &
                       PWTHV,PRTHLS,PRRS,PTHLP,PRP,PTP,PWTH,PWRC     )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -344,7 +344,7 @@ END MODULE MODI_TURB_VER_THERMO_FLUX
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_LES
@@ -359,12 +359,12 @@ USE MODI_SHUMAN
 USE MODI_SHUMAN_DEVICE
 #endif
 USE MODI_TRIDIAG 
-USE MODE_FMWRIT
 USE MODI_LES_MEAN_SUBGRID
 USE MODI_TRIDIAG_THERMO
 USE MODI_TM06_H
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
@@ -767,7 +767,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 ! Contribution of the conservative temperature flux to the buoyancy flux
@@ -1169,7 +1169,7 @@ IF (KRR /= 0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
   !
   ! Contribution of the conservative water flux to the Buoyancy flux
@@ -1376,7 +1376,7 @@ IF ( ((OTURB_FLX .AND. OCLOSE_OUT) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
 !$acc update self(ZFLXZ)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
   !  
 ! and we store in LES configuration this subgrid flux <w'rc'>
diff --git a/src/MNH/two_wayn.f90 b/src/MNH/two_wayn.f90
index ff6e46c091d5e44627998416fde2fba7de6018a4..62f7596c7c77eb388a070c87d364bbc5e63a1331 100644
--- a/src/MNH/two_wayn.f90
+++ b/src/MNH/two_wayn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1997-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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.
 !-----------------------------------------------------------------
 !     ###################
@@ -112,7 +112,8 @@ END MODULE MODI_TWO_WAY_n
 !!      Bosseur & Filippi 07/2013 Adds Forefire
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!      Modification    01/2016  (JP Pinty) Add LIMA
-!!  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 29/03/2019: bugfix: use correct sizes for 3rd dimension in allocation and loops when CRAD/='NONE'
 !------------------------------------------------------------------------------
 !
 !*      0.   DECLARATIONS
@@ -950,9 +951,10 @@ IF (LINTER) THEN
     ALLOCATE(ZSCAFLASWD(IXOR:IXEND,IYOR:IYEND, SIZE(PSCAFLASWD, 3))) 
     ALLOCATE(ZDIRSRFSWD(IXOR:IXEND,IYOR:IYEND, SIZE(PDIRSRFSWD, 3)))  
   ELSE
-    ALLOCATE(ZDIRFLASWD(0,0,0))
-    ALLOCATE(ZSCAFLASWD(0,0,0))
-    ALLOCATE(ZDIRSRFSWD(0,0,0))
+    !3rd dimension size can also be allocated with a zero size
+    ALLOCATE( ZDIRFLASWD(0, 0, SIZE( PDIRFLASWD, 3 )) )
+    ALLOCATE( ZSCAFLASWD(0, 0, SIZE( PSCAFLASWD, 3 )) )
+    ALLOCATE( ZDIRSRFSWD(0, 0, SIZE( PDIRSRFSWD, 3 )) )
   ENDIF
 ELSE
   ALLOCATE(ZUM(0,0,0))
@@ -971,9 +973,11 @@ ELSE
   ALLOCATE(ZINPRH(0,0))
   ALLOCATE(ZPRCONV(0,0))
   ALLOCATE(ZPRSCONV(0,0))
-  ALLOCATE(ZDIRFLASWD(0,0,0))                            
-  ALLOCATE(ZSCAFLASWD(0,0,0))                            
-  ALLOCATE(ZDIRSRFSWD(0,0,0))
+  !3rd dimension of ZDIRFLASWD, ZSCAFLASWD and ZDIRSRFSWD is allocated with a not necessarily zero size
+  !because it needs to be to this size for the SET_LSFIELD_2WAY_ll loops if CRAD/='NONE'
+  ALLOCATE( ZDIRFLASWD(0, 0, SIZE( PDIRFLASWD, 3 )) )
+  ALLOCATE( ZSCAFLASWD(0, 0, SIZE( PSCAFLASWD, 3 )) )
+  ALLOCATE( ZDIRSRFSWD(0, 0, SIZE( PDIRSRFSWD, 3 )) )
 ENDIF
 !
 ! Initialize the list for the forcing
@@ -1011,11 +1015,15 @@ IF (CDCONV /= 'NONE') THEN
   CALL SET_LSFIELD_2WAY_ll(ZPRSCONV , ZTPRSCONV) 
 END IF
 IF (CRAD /= 'NONE') THEN
- DO JVAR=1,SIZE( PDIRFLASWD,3)                                
-   CALL SET_LSFIELD_2WAY_ll(ZDIRFLASWD(:,:,JVAR) , ZTDIRFLASWD(:,:,JVAR)) 
-   CALL SET_LSFIELD_2WAY_ll(ZSCAFLASWD(:,:,JVAR) , ZTSCAFLASWD(:,:,JVAR)) 
-   CALL SET_LSFIELD_2WAY_ll(ZDIRSRFSWD(:,:,JVAR) , ZTDIRSRFSWD(:,:,JVAR)) 
- ENDDO
+  DO JVAR = 1, SIZE( PDIRFLASWD, 3 )
+    CALL SET_LSFIELD_2WAY_ll(ZDIRFLASWD(:,:,JVAR) , ZTDIRFLASWD(:,:,JVAR))
+  END DO
+  DO JVAR = 1, SIZE( PSCAFLASWD, 3 )
+    CALL SET_LSFIELD_2WAY_ll(ZSCAFLASWD(:,:,JVAR) , ZTSCAFLASWD(:,:,JVAR))
+  END DO
+  DO JVAR = 1, SIZE( PDIRSRFSWD, 3 )
+    CALL SET_LSFIELD_2WAY_ll(ZDIRSRFSWD(:,:,JVAR) , ZTDIRSRFSWD(:,:,JVAR))
+  END DO
 END IF
 CALL SET_LSFIELD_2WAY_ll(ZRHODJ, ZTRHODJ)
 CALL SET_LSFIELD_2WAY_ll(ZRHODJU, ZTRHODJU)
diff --git a/src/MNH/update_nsv.f90 b/src/MNH/update_nsv.f90
index 0677a414a46cbded8d51314faa2b24d5ab35f780..3d691aa48dabfe34ea208d0107de0cf630208887 100644
--- a/src/MNH/update_nsv.f90
+++ b/src/MNH/update_nsv.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 !     ######spl
         MODULE MODI_UPDATE_NSV
 !       ######################
@@ -24,17 +25,20 @@ END MODULE MODI_UPDATE_NSV
 !!  Modify (Escobar ) 2/2014 : add Forefire var
 !!  Modify (Vie) 2016 : add LIMA
 !!         V. Vionnet 7/2017 : add blowing snow var
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
+!
 USE MODD_CONF, ONLY : NVERB
 USE MODD_NSV
+
+use mode_msg
+
 IMPLICIT NONE 
+
 INTEGER, INTENT(IN) :: KMI ! Model index
 !
 ! STOP if INI_NSV has not be called yet
 IF (.NOT. LINI_NSV) THEN
-  PRINT *, 'UPDATE_NSV  FATAL Error : can t continue because INI_NSV was not called.'
-!callabortstop
-  CALL ABORT
-  STOP
+  call Print_msg( NVERB_FATAL, 'GEN', 'UPDATE_NSV', 'can not continue because INI_NSV was not called' )
 END IF
 !
 ! Update the NSV_* variables from original NSV_*_A arrays
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/uv_to_zonal_and_merid.f90 b/src/MNH/uv_to_zonal_and_merid.f90
index c78aa754a9c1775d62f5e538eda66c364d84148d..1403691bc4aa5fb2508a579179af35330f8f383c 100644
--- a/src/MNH/uv_to_zonal_and_merid.f90
+++ b/src/MNH/uv_to_zonal_and_merid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !     #################################
@@ -9,7 +9,7 @@
 INTERFACE UV_TO_ZONAL_AND_MERID
       SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA
 !
 REAL, DIMENSION(:,:,:),                  INTENT(IN)  :: PU       ! Input U component
@@ -24,7 +24,7 @@ END SUBROUTINE UV_TO_ZONAL_AND_MERID3D
 !
       SUBROUTINE UV_TO_ZONAL_AND_MERID2D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,    ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA
 !
 REAL, DIMENSION(:,:),                    INTENT(IN)  :: PU       ! Input U component
@@ -47,7 +47,7 @@ INTERFACE
 !
       SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,    ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA
 !
 REAL, DIMENSION(:,:,:),                  INTENT(IN)  :: PU       ! Input U component
@@ -105,12 +105,12 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,   ONLY: TFILEDATA,NVERB_ERROR,NVERB_INFO,NVERB_WARNING
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD,   ONLY: TFIELDDATA
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_SHUMAN
@@ -220,8 +220,8 @@ IF(PRESENT(TPFILE)) THEN
     CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID3D','inconsistent values for TZFIELDS(x)%HDIR')
   END IF
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(1),ZZC(:,:,:))
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(2),ZMC(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELDS(1),ZZC(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELDS(2),ZMC(:,:,:))
 ELSE IF (PRESENT(PZC).AND.PRESENT(PMC)) THEN
   PZC(:,:,:)=ZZC(:,:,:)
   PMC(:,:,:)=ZMC(:,:,:)
@@ -276,11 +276,11 @@ END SUBROUTINE UV_TO_ZONAL_AND_MERID3D
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA,NVERB_WARNING
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA, NVERB_WARNING
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 !
-USE MODE_FIELD,   ONLY: TFIELDDATA
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_UV_TO_ZONAL_AND_MERID3D
@@ -332,8 +332,8 @@ IF(PRESENT(TPFILE)) THEN
     CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID2D','inconsistent values for TZFIELDS(x)%HDIR')
   END IF
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(1),ZZC3D(:,:,1))
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(2),ZMC3D(:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELDS(1),ZZC3D(:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELDS(2),ZMC3D(:,:,1))
 ELSE IF (PRESENT(PZC).AND.PRESENT(PMC)) THEN
   PZC(:,:)=ZZC3D(:,:,1)
   PMC(:,:)=ZMC3D(:,:,1)
diff --git a/src/MNH/ver_dyn.f90 b/src/MNH/ver_dyn.f90
index 5b6911d3eeccba0f8db3a2c386786858074ae759..009e8bd33abd589b5039ba81f1ad81dcc1ca5d51 100644
--- a/src/MNH/ver_dyn.f90
+++ b/src/MNH/ver_dyn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###################
@@ -87,7 +87,7 @@ END MODULE MODI_VER_DYN
 !!    ------------------
 !!
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_FIELD1    : contains prognostics  variables
 !!         XUM : U (:,:,:)         at t-dt
 !!         XVM : V (:,:,:,:)       at t-dt
@@ -383,7 +383,7 @@ END IF
 !
 !20131126 add check on XWM,XLSWM
 CALL MPPDB_CHECK3D(XWT,"VER_DYN5::XWT",PRECISION)
-CALL MPPDB_CHECK3D(XLSWM,"VER_DYN5::XLSWM",PRECISION)
+! CALL MPPDB_CHECK3D(XLSWM,"VER_DYN5::XLSWM",PRECISION)
 !
 DEALLOCATE(NKLIN)
 DEALLOCATE(XCOEFLIN)
diff --git a/src/MNH/ver_int_dyn.f90 b/src/MNH/ver_int_dyn.f90
index 4a564f41069ecef8cf9f71b004f57e656cff50f4..1065cdc10a890b91b3cdee4f2164fc58bcc768b4 100644
--- a/src/MNH/ver_int_dyn.f90
+++ b/src/MNH/ver_int_dyn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######spl
@@ -70,7 +70,7 @@ END MODULE MODI_VER_INT_DYN
 !!      Module MODD_CONF      : contains configuration variables for all models.
 !!         NVERB : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1     : contains grid variables for model1
 !!         XZS   : orography of MESO-NH
 !!         XZZ   : altitude of the w points in the MESO-NH grid.
diff --git a/src/MNH/ver_int_thermo.f90 b/src/MNH/ver_int_thermo.f90
index cb815488f7f73331d28de0250f7f9ab920b9b744..0463f3006389a1eb7e2022e1b07b647026303091 100644
--- a/src/MNH/ver_int_thermo.f90
+++ b/src/MNH/ver_int_thermo.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -12,7 +12,7 @@ INTERFACE
                                 PPMHP_MX,PEXNTOP2D,PTHV,PR,PPMHP,PDIAG,            &
                                 PLSTH_MX, PLSRV_MX, PLSTHM, PLSRVM                 )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE     ! File characteristics
 LOGICAL,                  INTENT(IN)  :: OSHIFT     ! T: vertical shift of BL (used for GRIB file data)
@@ -100,7 +100,7 @@ END MODULE MODI_VER_INT_THERMO
 !!      Module MODD_CONF1
 !!         NRR
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_GRID1     : contains grid variables for model1
 !!         XZS   : orography of MESO-NH
 !!         XZZ   : altitude of the w points in the MESO-NH grid.
@@ -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
@@ -144,8 +145,8 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_GRID_n
-USE MODD_IO_ll,       ONLY: TFILEDATA
-USE MODD_LUNIT,       ONLY: CLUOUT0, TLUOUT0
+USE MODD_IO,          ONLY: TFILEDATA
+USE MODD_LUNIT,       ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_VER_INTERP_LIN
 !
@@ -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 7325b1acd54d78e49b3676a7dfa1d08367bede77..dd63ee4930a93e915281f554d08de0426983dcd1 100644
--- a/src/MNH/ver_interp_to_mixed_grid.f90
+++ b/src/MNH/ver_interp_to_mixed_grid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################################
@@ -109,7 +109,7 @@ END MODULE MODI_VER_INTERP_TO_MIXED_GRID
 !!      Module MODD_CONF1
 !!         NRR
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_CST       : contains physical constants
 !!         XRD : gas constant for dry air
 !!         XRV : gas constant for vapor
@@ -160,14 +160,13 @@ 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
 !              ------------
 !
 USE MODE_THERMO
-USE MODE_FM
-USE MODE_IO_ll
 !
 USE MODI_COEF_VER_INTERP_LIN
 USE MODI_VER_INTERP_LIN
@@ -450,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/ver_prep_gribex_case.f90 b/src/MNH/ver_prep_gribex_case.f90
index 4368fc4c10aabfd7cfdaa393f936683276450f38..1c6ea2b2af6033a4dc355ca8f44fb22be3ae1cb5 100644
--- a/src/MNH/ver_prep_gribex_case.f90
+++ b/src/MNH/ver_prep_gribex_case.f90
@@ -1,13 +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
-! MASDEV4_7 prep_real 2006/05/23 14:49:51
-!-----------------------------------------------------------------
 !     ################################
       MODULE MODI_VER_PREP_GRIBEX_CASE
 !     ################################
@@ -52,7 +47,7 @@ END MODULE MODI_VER_PREP_GRIBEX_CASE
 !!      Module MODD_CONF1     : contains configuration variables for all models.
 !!         NVERB      : verbosity level for output-listing
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_CST       : contains physical constants
 !!         XRD : gas constant for dry air
 !!         XRV : gas constant for vapor
diff --git a/src/MNH/ver_prep_netcdf_case.f90 b/src/MNH/ver_prep_netcdf_case.f90
index df0f3b7fcbb7538ceaf6b066df7a1e2c28244443..c17a1c963ebd775319412d8f7a485a27625b09d4 100644
--- a/src/MNH/ver_prep_netcdf_case.f90
+++ b/src/MNH/ver_prep_netcdf_case.f90
@@ -84,6 +84,7 @@ END MODULE MODI_VER_PREP_NETCDF_CASE
 !!                  May 2006                 Remove EPS
 !!                  Oct 2017 (J.Escobar) minor, missing USE MODI_SECOND_MNH
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!                  Mars 2019 (Q. Rodier): missing SECOND_MNH(ZTIME1)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -141,6 +142,7 @@ INTEGER                            :: JK      ! loop counter
 !-------------------------------------------------------------------------------
 !
 ILUOUT0 = TLUOUT0%NLU
+CALL SECOND_MNH(ZTIME1)
 !
 !*       1.    CHANGING OF VARIABLES
 !              ---------------------
@@ -190,7 +192,7 @@ DEALLOCATE(ZSV_LS)
 !*       3.    ERROR CONTROL
 !              -------------
 !
-CALL SECOND_MNH(ZTIME1)
+CALL SECOND_MNH(ZTIME2)
 PDIAG = ZTIME2 - ZTIME1
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ver_thermo.f90 b/src/MNH/ver_thermo.f90
index 1a13b3ad198633c5a48f9c2d2cf002093702cf67..25f46514d304aa77598eea6b7e3fdf070aea5109 100644
--- a/src/MNH/ver_thermo.f90
+++ b/src/MNH/ver_thermo.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -12,7 +12,7 @@ INTERFACE
                             PDXX,PDYY,PEXNTOP2D,PPSURF,PDIAG,                              &
                             PLSTH_MX,PLSRV_MX                                              )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE     ! File characteristics
 LOGICAL,                  INTENT(IN)  :: OSHIFT     ! T: vertical shift of BL (used for GRIB file data)
@@ -94,7 +94,7 @@ END MODULE MODI_VER_THERMO
 !!      Module MODD_CONF1     : contains configuration variables for model 1.
 !!         NRR     : number of moist variables
 !!      Module MODD_LUNIT     :  contains logical unit names for all models
-!!         CLUOUT0 : name of output-listing
+!!         TLUOUT0 : name of output-listing
 !!      Module MODD_CST       : contains physical constants
 !!         XRD : gas constant for dry air
 !!         XRV : gas constant for vapor
@@ -153,25 +153,24 @@ END MODULE MODI_VER_THERMO
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_ARGSLIST_ll, ONLY: LIST_ll
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_DYN_n
-USE MODD_FIELD_n,     ONLY: XTHT,XRT,XPABST,XDRYMASST
+USE MODD_FIELD_n,        ONLY: XTHT,XRT,XPABST,XDRYMASST
 USE MODD_GRID_n
-USE MODD_IO_ll,       ONLY: TFILEDATA,TFILE_DUMMY
+USE MODD_IO,             ONLY: TFILEDATA,TFILE_DUMMY
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
-USE MODD_LUNIT,       ONLY: CLUOUT0,TLUOUT0
-USE MODD_LUNIT_n,     ONLY: CLUOUT
+USE MODD_LUNIT,          ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_REF_n
 !
 USE MODD_DIM_n
 USE MODE_EXTRAPOL
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
 USE MODE_MPPDB
 !
@@ -305,7 +304,7 @@ IF (NVERB>=10) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHV)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZTHV)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/viscosity.f90 b/src/MNH/viscosity.f90
index 5d822248a7121c7e01e01fef0f5ca28a00bf4209..f047a5405a3a638958afbd3f21e42fb770188a10 100644
--- a/src/MNH/viscosity.f90
+++ b/src/MNH/viscosity.f90
@@ -1,8 +1,9 @@
-!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_VISCOSITY
 !     #####################
@@ -103,7 +104,6 @@ SUBROUTINE VISCOSITY(HLBCX, HLBCY, KRR, KSV, PNU, PPRANDTL,          &
   USE MODD_BUDGET
   USE MODE_ll
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-  USE MODE_FM
   USE MODI_BUDGET
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index b9cd28388de27506234212a38328f53fd73c7f19..3e4e7370ef4ba9607708e8888524e41d59e5243f 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_AIRCRAFT_BALLOON(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
 !
@@ -63,14 +63,15 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !!     Oct 2016 : G.Delautier LIMA
 !!     August 2016 (M.Leriche) Add mass concentration of aerosol species
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!     P. Wautelet 29/01/2019: bug: moved an instruction later (to prevent access to a not allocated array)
 !!
 !! --------------------------------------------------------------------------
-!       
+!
 !*      0. DECLARATIONS
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
@@ -210,12 +211,12 @@ INTEGER :: JLOOP
 !
 !----------------------------------------------------------------------------
 !
-IKU = SIZE(TPFLYER%RTZ,2)    !number of vertical levels           
 IF (TPFLYER%NMODEL==0) RETURN
 IF (ALL(TPFLYER%X==XUNDEF)) RETURN
 IF (COUNT(TPFLYER%X/=XUNDEF)<=1) RETURN
 IF ( IMI /= TPFLYER%NMODEL ) RETURN
 !
+IKU = SIZE(TPFLYER%RTZ,2) !number of vertical levels
 !
 IPROC = 20 + SIZE(TPFLYER%R,2) + SIZE(TPFLYER%SV,2) &
        + 2 + SIZE(TPFLYER%SVW_FLUX,2)
diff --git a/src/MNH/write_balloonn.f90 b/src/MNH/write_balloonn.f90
index 3bfb6091a8f7ad4f0aa4fb62e0524d2ecb307f50..c1d82c1b2378f84d968575a363c334a81ee306a0 100644
--- a/src/MNH/write_balloonn.f90
+++ b/src/MNH/write_balloonn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2001-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-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.
 !-----------------------------------------------------------------
 !     ###########################
@@ -10,7 +10,7 @@
 INTERFACE
 !
 SUBROUTINE WRITE_BALLOON_n(TPFILE)
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -64,8 +64,8 @@ END MODULE MODI_WRITE_BALLOON_n
 !              ------------
 !
 USE MODD_AIRCRAFT_BALLOON
-USE MODD_GRID,  ONLY: XLONORI,XLATORI
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_GRID, ONLY: XLONORI, XLATORI
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_LUNIT_n
 !
 USE MODE_GRIDPROJ
@@ -96,8 +96,8 @@ CONTAINS
 !-------------------------------------------------------------------------------
 SUBROUTINE WRITE_LFI_BALLOON(TPFLYER)
 !
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 TYPE(FLYER),        INTENT(IN)       :: TPFLYER
 !
@@ -123,7 +123,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLAT)
+CALL IO_Field_write(TPFILE,TZFIELD,ZLAT)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'LON'
 TZFIELD%CSTDNAME   = ''
@@ -135,7 +135,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLON)
+CALL IO_Field_write(TPFILE,TZFIELD,ZLON)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'ALT'
 TZFIELD%CSTDNAME   = ''
@@ -147,7 +147,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TPFLYER%Z_CUR)
+CALL IO_Field_write(TPFILE,TZFIELD,TPFLYER%Z_CUR)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'WASCENT'
 TZFIELD%CSTDNAME   = ''
@@ -159,7 +159,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TPFLYER%WASCENT)
+CALL IO_Field_write(TPFILE,TZFIELD,TPFLYER%WASCENT)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'RHO'
 TZFIELD%CSTDNAME   = ''
@@ -171,7 +171,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TPFLYER%RHO)
+CALL IO_Field_write(TPFILE,TZFIELD,TPFLYER%RHO)
 !
 !
 !
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index c70ee075f93e523eaf2f078906ac0b58a0c41b3e..e24f6a3009250f1f268fe012cc47cad643d5603a 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !######################## 
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE WRITE_BUDGET(TPDIAFILE,TPDTCUR, &
                               TPDTMOD,PTSTEP, KSV)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
@@ -131,12 +131,12 @@ END MODULE MODI_WRITE_BUDGET
 !*       0.    
 !              ------------
 USE MODD_BUDGET
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 !
 USE MODE_DATETIME
-USE MODE_FIELD,   ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_TIME
 !
 USE MODI_END_CART_COMPRESS
@@ -199,7 +199,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTSTEP)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,PTSTEP)
 !
 TZFIELD%CMNHNAME   = 'BULEN'
 TZFIELD%CSTDNAME   = ''
@@ -211,7 +211,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,XBULEN)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,XBULEN)
 !
 !*   1.1   initialize NBUTSHIFT
 !           ---------------------
@@ -1031,7 +1031,7 @@ SELECT CASE (CBUTYPE)
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 6
         TZFIELD%LTIMEDEP   = .FALSE.
-        CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:))
+        CALL IO_Field_write(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:))
         WRITE(YRECFM,FMT="('MASK_',I4.4)") NBUTSHIFT
         CALL MENU_DIACHRO(TPDIAFILE,YRECFM)
         DEALLOCATE(ZWORKMASK)
diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90
index 223153f59c195a6f5df469b0eb72ec364db1bc8e..fc96071c8c8ae39e628d89700febd2003da034a3 100644
--- a/src/MNH/write_desfmn.f90
+++ b/src/MNH/write_desfmn.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE WRITE_DESFM_n(KMI,TPDATAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,            INTENT(IN)  :: KMI        ! Model index
 TYPE(TFILEDATA),    INTENT(IN)  :: TPDATAFILE ! Datafile
@@ -150,7 +150,7 @@ END MODULE MODI_WRITE_DESFM_n
 !              ------------
 USE MODD_CONF
 USE MODD_DYN_n,   ONLY: LHORELAX_SVLIMA
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 544eda16f7747b1d6f6a6890a272a9113a344184..5e24bc549cb02cc744252b57a5ce0e58ce34f76c 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.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.
 !-----------------------------------------------------------------
 !     #################################################################
@@ -75,13 +75,12 @@
 !
 USE MODD_BUDGET
 USE MODD_CONF
-USE MODE_FIELD
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_PARAMETERS,     ONLY: JPHEXT
 !
+USE MODE_FIELD
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_box
 USE MODE_ll
-USE MODE_FMWRIT
-USE MODE_IO_ll
 !
 USE MODI_MENU_DIACHRO
 !
@@ -229,7 +228,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HTYPE)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HTYPE)
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  1st record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -273,7 +272,7 @@ SELECT CASE(HTYPE)
     ITABCHAR(29)=IIMASK; ITABCHAR(30)=IJMASK
     ITABCHAR(31)=IKMASK; ITABCHAR(32)=ITMASK
     ITABCHAR(33)=INMASK; ITABCHAR(34)=IPMASK
-    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+    CALL IO_Field_write(TPDIAFILE,TZFIELD,ITABCHAR)
     DEALLOCATE(ITABCHAR)
     IF (NVERB>=5) THEN
       WRITE(ILUOUTDIA,*)' ILENTITRE,ILENUNITE,ILENCOMMENT ',ILENTITRE,ILENUNITE,ILENCOMMENT
@@ -294,7 +293,7 @@ SELECT CASE(HTYPE)
     ITABCHAR(20)=IIMASK; ITABCHAR(21)=IJMASK
     ITABCHAR(22)=IKMASK; ITABCHAR(23)=ITMASK
     ITABCHAR(24)=INMASK; ITABCHAR(25)=IPMASK
-    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+    CALL IO_Field_write(TPDIAFILE,TZFIELD,ITABCHAR)
     DEALLOCATE(ITABCHAR)
 END SELECT
 IF (NVERB>=5) THEN
@@ -313,7 +312,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HTITRE(1:IP))
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HTITRE(1:IP))
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  3rd record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -331,7 +330,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HUNITE(1:IP))
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HUNITE(1:IP))
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  4th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -349,7 +348,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HCOMMENT(1:IP))
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HCOMMENT(1:IP))
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  5th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -383,7 +382,7 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 5
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD_BOX(TPDIAFILE,TZFIELD,'BUDGET',PVAR(:,:,:,:,:,J), &
+    CALL IO_Field_write_BOX(TPDIAFILE,TZFIELD,'BUDGET',PVAR(:,:,:,:,:,J), &
                             KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT)
   ELSE
     TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
@@ -396,7 +395,7 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 5
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
+    CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
   ENDIF
 ELSE
     TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
@@ -409,7 +408,7 @@ ELSE
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 5
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
 END IF
   IF (NVERB>=5) THEN
     WRITE(ILUOUTDIA,*)J,TRIM(TZFIELD%CMNHNAME)
@@ -431,7 +430,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJT)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJT)
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  7th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -453,7 +452,7 @@ IF(PRESENT(PTRAJX))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJX)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJX)
 ENDIF
 !
 !                        ou
@@ -469,7 +468,7 @@ IF(PRESENT(PMASK))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 6
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PMASK)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PMASK)
 ENDIF
 !
 ! 9eme enregistrement TRAJY
@@ -485,7 +484,7 @@ IF(PRESENT(PTRAJY))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJY)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJY)
 ENDIF
 !
 ! 10eme enregistrement TRAJZ
@@ -501,7 +500,7 @@ IF(PRESENT(PTRAJZ))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJZ)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJZ)
 ENDIF
 !
 ! 11eme enregistrement PDATIME
@@ -516,7 +515,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PDATIME)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,PDATIME)
 !
 CALL MENU_DIACHRO(TPDIAFILE,HGROUP)
 LPACK=GPACK
diff --git a/src/MNH/write_dummy_gr_fieldn.f90 b/src/MNH/write_dummy_gr_fieldn.f90
index 358a73cbcfc569de349d4c5e6306122b8aabceb2..e177c4e2ed84ac3182383366b0217d31db542ff0 100644
--- a/src/MNH/write_dummy_gr_fieldn.f90
+++ b/src/MNH/write_dummy_gr_fieldn.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.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_DUMMY_GR_FIELD_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
@@ -61,13 +61,13 @@ END MODULE MODI_WRITE_DUMMY_GR_FIELD_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_DUMMY_GR_FIELD_n, ONLY : NDUMMY_GR_NBR, CDUMMY_GR_NAME,    &
-                                  CDUMMY_GR_AREA, XDUMMY_GR_FIELDS
-USE MODD_IO_ll,            ONLY : TFILEDATA
-USE MODD_PARAMETERS,       ONLY : NMNHNAMELGTMAX
+USE MODD_DUMMY_GR_FIELD_n, ONLY: NDUMMY_GR_NBR, CDUMMY_GR_NAME,    &
+                                 CDUMMY_GR_AREA, XDUMMY_GR_FIELDS
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_PARAMETERS,       ONLY: NMNHNAMELGTMAX
 !
-USE MODE_FIELD,            ONLY : TFIELDDATA,TYPEINT,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,            ONLY: TFIELDDATA,TYPEINT,TYPEREAL
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -114,7 +114,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEINT
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NDUMMY_GR_NBR)
+CALL IO_Field_write(TPFILE,TZFIELD,NDUMMY_GR_NBR)
 !
 DO JDUMMY=1,NDUMMY_GR_NBR
   WRITE(YRECFM,'(A8,I3.3)') 'DUMMY_GR',JDUMMY
@@ -134,7 +134,7 @@ DO JDUMMY=1,NDUMMY_GR_NBR
   !
   ZWORK2D(:,:) = XDUMMY_GR_FIELDS(:,:,JDUMMY)
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
 END DO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_hgrid.f90 b/src/MNH/write_hgrid.f90
index 9315a86d13a7c30928e49a9f453c86dbc2fa1e4d..27b0c7d1aed8fc028ca84613ff54591517976327 100644
--- a/src/MNH/write_hgrid.f90
+++ b/src/MNH/write_hgrid.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.
 !-----------------------------------------------------------------
 !     #######################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE WRITE_HGRID(KMI,TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,         INTENT(IN)  :: KMI       ! model index
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE    ! File to write
@@ -58,12 +58,11 @@ END MODULE MODI_WRITE_HGRID
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 !
-USE MODE_FMWRIT
-USE MODE_IO_ll
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_WRITE_HGRIDn
@@ -94,20 +93,20 @@ END IF
 !*       2.     WRITING FROM MODD_PGD...
 !	        ----------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',  XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',  XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',  XBETA)
-CALL IO_WRITE_FIELD(TPFILE,'LATORI',XPGDLATOR)
-CALL IO_WRITE_FIELD(TPFILE,'LONORI',XPGDLONOR)
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',  NPGDIMAX)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',  NPGDJMAX)
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',  XPGDXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',  XPGDYHAT)
+CALL IO_Field_write(TPFILE,'LAT0',  XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',  XLON0)
+CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+CALL IO_Field_write(TPFILE,'BETA',  XBETA)
+CALL IO_Field_write(TPFILE,'LATORI',XPGDLATOR)
+CALL IO_Field_write(TPFILE,'LONORI',XPGDLONOR)
+CALL IO_Field_write(TPFILE,'IMAX',  NPGDIMAX)
+CALL IO_Field_write(TPFILE,'JMAX',  NPGDJMAX)
+CALL IO_Field_write(TPFILE,'XHAT',  XPGDXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',  XPGDYHAT)
 !
 IF (CSTORAGE_TYPE=='TT') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-  CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+  CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_hgridn.f90 b/src/MNH/write_hgridn.f90
index 92765f2f71b98a796d07289becc28e10bb7703b1..4e134e365d4d8bbef29737dac1e09a1572c0c623 100644
--- a/src/MNH/write_hgridn.f90
+++ b/src/MNH/write_hgridn.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.
 !-----------------------------------------------------------------
 !     ########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE WRITE_HGRID_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE    ! File to write
 !
@@ -32,8 +32,8 @@ END MODULE MODI_WRITE_HGRIDn
 !!
 !!    EXTERNAL
 !!    --------
-!!      FMWRIT   : to write data in LFIFM file
-!!       
+!!      IO_Field_write   : to write data in LFIFM file
+!!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------ 
 !!      Module MODD_GRID : contains projection definition
@@ -73,9 +73,9 @@ USE MODD_CONF_n
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 !
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -89,20 +89,20 @@ TYPE(TFILEDATA), INTENT(IN)  :: TPFILE    ! File to write
 ! NONE
 !-------------------------------------------------------------------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',  XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',  XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',  XBETA)
-CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
-CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',  NIMAX)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',  NJMAX)
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',  XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',  XYHAT)
+CALL IO_Field_write(TPFILE,'LAT0',  XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',  XLON0)
+CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+CALL IO_Field_write(TPFILE,'BETA',  XBETA)
+CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
+CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+CALL IO_Field_write(TPFILE,'IMAX',  NIMAX)
+CALL IO_Field_write(TPFILE,'JMAX',  NJMAX)
+CALL IO_Field_write(TPFILE,'XHAT',  XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',  XYHAT)
 !
 IF (CSTORAGE_TYPE=='TT') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-  CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+  CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index b4044c86b79cec0bdaa52f3a69c0e968b622a9c9..32f0fd5835e0e93685737ecda1cee76b6bffd2c0 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1998-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.
 !-----------------------------------------------------------------
 !     ######################
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE WRITE_LB_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 END SUBROUTINE WRITE_LB_n
@@ -76,6 +76,7 @@ END MODULE MODI_WRITE_LB_n
 !!     J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!    J.-P. Pinty  09/02/16 Add LIMA that is LBC for CCN and IFN
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -92,11 +93,11 @@ USE MODD_NSV
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_n
 !
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_lb
 USE MODE_ll
-USE MODE_IO_ll, ONLY: UPCASE, CLOSE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
+USE MODE_TOOLS, ONLY: UPCASE
 !
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
@@ -111,12 +112,14 @@ USE MODI_CH_AER_REALLFI_n
 USE MODD_CONF
 USE MODD_REF,   ONLY : XRHODREFZ
 USE MODD_CONF,  ONLY : CPROGRAM
+USE MODD_GRID_n, ONLY : XZZ
+USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
 USE MODD_DUST
 USE MODD_SALT
 USE MODI_DUSTLFI_n
 USE MODI_SALTLFI_n
 USE MODD_PARAMETERS,      ONLY: JPHEXT
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL
 !
 !
@@ -144,6 +147,12 @@ INTEGER            :: JK
 INTEGER            :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX
 INTEGER            :: IMI    ! Current model index
 CHARACTER(LEN=2)   :: INDICE ! to index CCN and IFN fields of LIMA scheme
+INTEGER           :: I
+INTEGER           :: ILBX,ILBY
+INTEGER           :: IIB, IIE, IJB, IJE, IKB, IKE
+INTEGER           :: IIU, IJU, IKU
+REAL, DIMENSION(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)) :: ZLBXZZ
+REAL, DIMENSION(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)) :: ZLBYZZ
 CHARACTER(LEN=100) :: YMSG
 TYPE(TFIELDDATA)   :: TZFIELD
 !-------------------------------------------------------------------------------
@@ -154,36 +163,46 @@ TYPE(TFIELDDATA)   :: TZFIELD
 ILUOUT = TLUOUT%NLU
 !
 IMI = GET_CURRENT_MODEL_INDEX()
+
+IIB=JPHEXT+1
+IIE=SIZE(XZZ,1)-JPHEXT
+IIU=SIZE(XZZ,1)
+IJB=JPHEXT+1
+IJE=SIZE(XZZ,2)-JPHEXT
+IJU=SIZE(XZZ,2)
+IKB=JPVEXT+1
+IKE=SIZE(XZZ,3)-JPVEXT
+IKU=SIZE(XZZ,3)
 !
 !        2.  WRITE THE DIMENSION OF LB FIELDS
 !            --------------------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'RIMX',NRIMX)
-CALL IO_WRITE_FIELD(TPFILE,'RIMY',NRIMY)
+CALL IO_Field_write(TPFILE,'RIMX',NRIMX)
+CALL IO_Field_write(TPFILE,'RIMY',NRIMY)
 !
 !*       3.  BASIC VARIABLES
 !            --------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'HORELAX_UVWTH',LHORELAX_UVWTH)
+CALL IO_Field_write(TPFILE,'HORELAX_UVWTH',LHORELAX_UVWTH)
 !
 !gathering and writing of the LB fields
-IF(NSIZELBXU_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXUM', NSIZELBXU_ll,XLBXUM)
-IF(NSIZELBX_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXVM', NSIZELBX_ll,XLBXVM)
-IF(NSIZELBX_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXWM', NSIZELBX_ll,XLBXWM)
-IF(NSIZELBY_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYUM', NSIZELBY_ll,XLBYUM)
-IF(NSIZELBYV_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYVM', NSIZELBYV_ll,XLBYVM)
-IF(NSIZELBY_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYWM', NSIZELBY_ll,XLBYWM)
-IF(NSIZELBX_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXTHM',NSIZELBX_ll,XLBXTHM)
-IF(NSIZELBY_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYTHM',NSIZELBY_ll,XLBYTHM)
+IF(NSIZELBXU_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBXUM', NSIZELBXU_ll,XLBXUM)
+IF(NSIZELBX_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBXVM', NSIZELBX_ll,XLBXVM)
+IF(NSIZELBX_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBXWM', NSIZELBX_ll,XLBXWM)
+IF(NSIZELBY_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBYUM', NSIZELBY_ll,XLBYUM)
+IF(NSIZELBYV_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBYVM', NSIZELBYV_ll,XLBYVM)
+IF(NSIZELBY_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBYWM', NSIZELBY_ll,XLBYWM)
+IF(NSIZELBX_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBXTHM',NSIZELBX_ll,XLBXTHM)
+IF(NSIZELBY_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBYTHM',NSIZELBY_ll,XLBYTHM)
 !
 !*        4  LB-TKE
 !            ------
 !
 IF(CTURB/='NONE') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'HORELAX_TKE',LHORELAX_TKE)
+  CALL IO_Field_write(TPFILE,'HORELAX_TKE',LHORELAX_TKE)
 !
-  IF(NSIZELBXTKE_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXTKEM',NSIZELBXTKE_ll,XLBXTKEM)
-  IF(NSIZELBYTKE_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYTKEM',NSIZELBYTKE_ll,XLBYTKEM)
+  IF(NSIZELBXTKE_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBXTKEM',NSIZELBXTKE_ll,XLBXTKEM)
+  IF(NSIZELBYTKE_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBYTKEM',NSIZELBYTKE_ll,XLBYTKEM)
 END IF
 !
 !
@@ -207,7 +226,7 @@ IF (NRR >=1) THEN
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,GHORELAX_R)
+  CALL IO_Field_write(TPFILE,TZFIELD,GHORELAX_R)
   !
   GUSER(:)=(/LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH/)
   YC(:)=(/"V","C","R","I","S","G","H"/)
@@ -229,7 +248,7 @@ IF (NRR >=1) THEN
         TZFIELD%CLONGNAME  = 'LBXR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBX'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXR_ll,XLBXRM(:,:,:,IRR))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXR_ll,XLBXRM(:,:,:,IRR))
       END IF
       !
       IF(NSIZELBYR_ll /= 0) THEN
@@ -237,7 +256,7 @@ IF (NRR >=1) THEN
         TZFIELD%CLONGNAME  = 'LBYR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBY'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXR_ll,XLBYRM(:,:,:,IRR))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXR_ll,XLBYRM(:,:,:,IRR))
       END IF
     END IF
   END DO
@@ -261,7 +280,7 @@ IF (NSV >=1) THEN
   TZFIELD%NTYPE      = TYPELOG
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,GHORELAX_SV)
+  CALL IO_Field_write(TPFILE,TZFIELD,GHORELAX_SV)
 !
   IRIMX =(NSIZELBXSV_ll-2*JPHEXT)/2
   IRIMY =(NSIZELBYSV_ll-2*JPHEXT)/2
@@ -280,7 +299,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -288,7 +307,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -308,7 +327,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -316,7 +335,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -336,7 +355,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -344,7 +363,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -367,7 +386,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -375,7 +394,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
     !
@@ -386,7 +405,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -394,7 +413,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -416,7 +435,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -424,7 +443,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -456,7 +475,7 @@ IF (NSV >=1) THEN
     END IF
     !
     TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
+    TZFIELD%CUNITS     = 'ppp'
     TZFIELD%CDIR       = ''
     TZFIELD%NGRID      = 1
     TZFIELD%NTYPE      = TYPEREAL
@@ -469,7 +488,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -477,7 +496,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
     !
@@ -488,7 +507,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
         END IF             
         !
         IF(NSIZELBYSV_ll /= 0) THEN
@@ -496,7 +515,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF             
       END DO      
     END IF  
@@ -516,7 +535,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
     END IF
     !
     IF(NSIZELBYSV_ll /= 0) THEN
@@ -524,7 +543,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
     END IF
   END DO
   !
@@ -534,7 +553,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
     END IF
     !
     IF(NSIZELBYSV_ll /= 0) THEN
@@ -542,7 +561,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
     END IF
   END DO
   !
@@ -552,7 +571,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
     END IF
     !
     IF(NSIZELBYSV_ll /= 0) THEN
@@ -560,7 +579,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
     END IF
   END DO
   !
@@ -623,14 +642,14 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           ENDIF !Check on border points in X direction
           IF(NSIZELBYSV_ll /= 0) THEN
             TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           ENDIF  !Check on points in Y direction
         ENDDO ! Loop on mode
       ELSE  ! valeur IMOMENTS =/ 1
@@ -646,14 +665,14 @@ IF (NSV >=1) THEN
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBX'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
             ENDIF !Check on border points in X direction
             IF(NSIZELBYSV_ll /= 0) THEN
               TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBY'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
             ENDIF  !Check on points in Y direction
           ENDDO ! Loop on moments
         ENDDO    ! Loop on modes
@@ -664,7 +683,7 @@ IF (NSV >=1) THEN
       !in the same order as the variables in XSVM (i.e. following JPDUSTORDER)
       !
       TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'kg kg-1'
+      TZFIELD%CUNITS     = 'ppp'
       TZFIELD%CDIR       = ''
       TZFIELD%NGRID      = 1
       TZFIELD%NTYPE      = TYPEREAL
@@ -677,7 +696,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
         END IF             
         !
         IF(NSIZELBYSV_ll /= 0) THEN
@@ -685,7 +704,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF
       END DO
       IF (LDEPOS_DST(IMI)) THEN
@@ -695,7 +714,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           END IF             
           !
           IF(NSIZELBYSV_ll /= 0) THEN
@@ -703,7 +722,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           END IF             
         END DO      
       END IF  
@@ -717,6 +736,19 @@ IF (NSV >=1) THEN
     DO JK=1,size(XLBYSVM,3)
       ZRHODREFY(:,:,JK) =  XRHODREFZ(JK)
     ENDDO
+    IIU  = SIZE(XZZ,1)
+    IJU  = SIZE(XZZ,2)
+    IKU  = SIZE(XZZ,3)
+    IF (SIZE(ZLBXZZ) .NE. 0 ) THEN
+      ILBX=SIZE(ZLBXZZ,1)/2-1
+      ZLBXZZ(1:ILBX+1,:,:)         = XZZ(IIB-1:IIB-1+ILBX,:,:)
+      ZLBXZZ(ILBX+2:2*ILBX+2,:,:)  = XZZ(IIE+1-ILBX:IIE+1,:,:)
+    ENDIF
+    IF (SIZE(ZLBYZZ) .NE. 0 ) THEN
+      ILBY=SIZE(ZLBYZZ,2)/2-1
+      ZLBYZZ(:,1:ILBY+1,:)        = XZZ(:,IJB-1:IJB-1+ILBY,:)
+      ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:)
+    ENDIF
     IF (NSIZELBXSV_ll /= 0) &
       XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND) = MAX(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), 0.)
     IF (NSIZELBYSV_ll /= 0) &
@@ -727,16 +759,16 @@ IF (NSV >=1) THEN
         XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX(XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0.)      
     IF ((LSLTINIT).OR.(LSLTPRES)) THEN ! GRIBEX case (dust initialization)
       IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX)
+        CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX, ZLBXZZ)
       END IF
       IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY)
+        CALL SALTLFI_n(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY, ZLBYZZ)
       END IF
       IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX)
+        CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX, ZLBXZZ)
       END IF
       IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY)
+        CALL SALTLFI_n(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY, ZLBYZZ)
       END IF
     END IF
     !
@@ -771,14 +803,14 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           ENDIF !Check on border points in X direction
           IF(NSIZELBYSV_ll /= 0) THEN
             TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           ENDIF  !Check on points in Y direction
         ENDDO ! Loop on mode
       ELSE  ! valeur IMOMENTS =/ 1
@@ -794,14 +826,14 @@ IF (NSV >=1) THEN
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBX'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
             ENDIF !Check on border points in X direction
             IF(NSIZELBYSV_ll /= 0) THEN
               TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBY'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
             ENDIF  !Check on points in Y direction
           ENDDO ! Loop on moments
         ENDDO    ! Loop on modes
@@ -810,7 +842,7 @@ IF (NSV >=1) THEN
       ! We are in the subprogram MESONH, CSALTNAMES are allocated and are 
       !in the same order as the variables in XSVM (i.e. following JPSALTORDER)
       TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'kg kg-1'
+      TZFIELD%CUNITS     = 'ppp'
       TZFIELD%CDIR       = ''
       TZFIELD%NGRID      = 1
       TZFIELD%NTYPE      = TYPEREAL
@@ -823,7 +855,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
         END IF             
         !
         IF(NSIZELBYSV_ll /= 0) THEN
@@ -831,7 +863,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF            
       END DO
       IF (LDEPOS_SLT(IMI)) THEN
@@ -841,7 +873,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           END IF             
           !
           IF(NSIZELBYSV_ll /= 0) THEN
@@ -849,7 +881,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           END IF             
         END DO      
       END IF  
@@ -872,7 +904,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
 !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -880,7 +912,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -900,7 +932,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -908,7 +940,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -928,7 +960,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -936,7 +968,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -957,7 +989,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -965,7 +997,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90
index 628ba7d6fcfd5fda8907b31c0c306e2e838e3a34..dc12b57cabc42288aa6f4d366456a91f4450f27a 100644
--- a/src/MNH/write_les_budgetn.f90
+++ b/src/MNH/write_les_budgetn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
@@ -58,7 +58,7 @@ END MODULE MODI_WRITE_LES_BUDGET_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_CONF_n
diff --git a/src/MNH/write_les_rt_budgetn.f90 b/src/MNH/write_les_rt_budgetn.f90
index 558f7df3a9fa0edecd7edcdecdd3dd5dfac557d5..92f37d1dbbe8cd2a6c95b775d401f9d5ad97dd4c 100644
--- a/src/MNH/write_les_rt_budgetn.f90
+++ b/src/MNH/write_les_rt_budgetn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_RT_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
@@ -57,7 +57,7 @@ END MODULE MODI_WRITE_LES_RT_BUDGET_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_LES_BUDGET
diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90
index af1d62eac8b63f07339292499f8ced91f1e0e536..10df1eebe24ef9fa2df341213eac4eceec3bba35 100644
--- a/src/MNH/write_les_sv_budgetn.f90
+++ b/src/MNH/write_les_sv_budgetn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_SV_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
@@ -57,7 +57,7 @@ END MODULE MODI_WRITE_LES_SV_BUDGET_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_CONF_n
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index 260b53bf076d5fb42893d7942e2185ce608c3501..1ae4ad90c4df2ed27e600a5de13bbcc226ba3c50 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
@@ -56,14 +56,15 @@ END MODULE MODI_WRITE_LES_n
 !!                          11/15 (C.Lac) Add production terms of TKE
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!
+!!!!                     02/2019 (C. Lac) Add rain fraction as a LES diagnostic
+
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_FIELD_n
@@ -382,6 +383,10 @@ IF (LUSERR) &
 CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RR ",YSUBTITLE(:), &
   "Mean Rr Profile"//YSUBTITLE(:),"kg kg-1",XLES_MEAN_Rr,HLES_AVG)
 
+IF (LUSERR) &
+CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RF ",YSUBTITLE(:), &
+  "Mean RF Profile"//YSUBTITLE(:),"1",XLES_MEAN_RF,HLES_AVG)
+
 IF (LUSERI) &
 CALL LES_DIACHRO_MASKS(TPDIAFILE,"MEAN_RI ",YSUBTITLE(:), &
   "Mean Ri Profile"//YSUBTITLE(:),"kg kg-1",XLES_MEAN_Ri,HLES_AVG)
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 150421cb6a5e824e9d822c7cbb22f1e9d435d141..20aa0f4647beb92f0df37401df66e993e28eb2f0 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !################################
@@ -9,7 +9,7 @@ MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 INTERFACE
       SUBROUTINE WRITE_LFIFM1_FOR_DIAG(TPFILE,HDADFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE       ! outpput data file
 CHARACTER(LEN=28), INTENT(IN) :: HDADFILE     ! corresponding FM-file name of 
@@ -142,6 +142,8 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!       D.Ricard and P.Marquet 2016-2017 : THETAL + THETAS1 POVOS1 or THETAS2 POVOS2
 !!                                        if  LMOIST_L     LMOIST_S1   or  LMOIST_S2
+!  P. Wautelet 08/02/2019: minor bug: compute ZWORK36 only when needed
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -152,7 +154,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_METRICS_n
 USE MODD_TIME
 USE MODD_TIME_n
@@ -202,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
 !
@@ -230,15 +233,15 @@ USE MODI_FREE_ATM_PROFILE
 USE MODI_GPS_ZENITH
 USE MODI_CONTRAV
 !
-USE MODE_FM,              ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
 USE MODE_GRIDPROJ
 USE MODE_FIELD
-USE MODE_FMWRIT
 USE MODE_GATHER_ll
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST
 USE MODE_THERMO
+USE MODE_TOOLS,            ONLY: UPCASE
 USE MODE_MODELN_HANDLER
 USE MODI_LIDAR
 USE MODI_CLUSTERING
@@ -365,43 +368,43 @@ TZRSFILE => NULL()
 !
 !*       1.0    TPFILE%CNAME and HDADFILE :
 !
-CALL IO_WRITE_FIELD(TPFILE,'MASDEV',   NMASDEV)
-CALL IO_WRITE_FIELD(TPFILE,'BUGFIX',   NBUGFIX)
-CALL IO_WRITE_FIELD(TPFILE,'BIBUSER',  CBIBUSER)
-CALL IO_WRITE_FIELD(TPFILE,'PROGRAM',  CPROGRAM)
+CALL IO_Field_write(TPFILE,'MASDEV',   NMASDEV)
+CALL IO_Field_write(TPFILE,'BUGFIX',   NBUGFIX)
+CALL IO_Field_write(TPFILE,'BIBUSER',  CBIBUSER)
+CALL IO_Field_write(TPFILE,'PROGRAM',  CPROGRAM)
 !
-CALL IO_WRITE_FIELD(TPFILE,'L1D',      L1D)
-CALL IO_WRITE_FIELD(TPFILE,'L2D',      L2D)
-CALL IO_WRITE_FIELD(TPFILE,'PACK',     LPACK)
+CALL IO_Field_write(TPFILE,'L1D',      L1D)
+CALL IO_Field_write(TPFILE,'L2D',      L2D)
+CALL IO_Field_write(TPFILE,'PACK',     LPACK)
 !
-CALL IO_WRITE_FIELD(TPFILE,'MY_NAME',  TPFILE%CNAME)
-CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME', HDADFILE)
+CALL IO_Field_write(TPFILE,'MY_NAME',  TPFILE%CNAME)
+CALL IO_Field_write(TPFILE,'DAD_NAME', HDADFILE)
 !
 IF (LEN_TRIM(HDADFILE)>0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'DXRATIO',NDXRATIO_ALL(1))
-  CALL IO_WRITE_FIELD(TPFILE,'DYRATIO',NDYRATIO_ALL(1))
-  CALL IO_WRITE_FIELD(TPFILE,'XOR',    NXOR_ALL(1))
-  CALL IO_WRITE_FIELD(TPFILE,'YOR',    NYOR_ALL(1))
+  CALL IO_Field_write(TPFILE,'DXRATIO',NDXRATIO_ALL(1))
+  CALL IO_Field_write(TPFILE,'DYRATIO',NDYRATIO_ALL(1))
+  CALL IO_Field_write(TPFILE,'XOR',    NXOR_ALL(1))
+  CALL IO_Field_write(TPFILE,'YOR',    NYOR_ALL(1))
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'SURF',     CSURF)
+CALL IO_Field_write(TPFILE,'SURF',     CSURF)
 !
 !*       1.1    Type and Dimensions :
 !
-CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE','DI')
+CALL IO_Field_write(TPFILE,'STORAGE_TYPE','DI')
 !
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
+CALL IO_Field_write(TPFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_write(TPFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_write(TPFILE,'KMAX',NKMAX)
 !
-CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',JPHEXT)
+CALL IO_Field_write(TPFILE,'JPHEXT',JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-  CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-  CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
+  CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+  CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+  CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
 ! 
 !* diagnostic of 1st mass point
 !
@@ -413,40 +416,41 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
-  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
+  CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
+  CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
 !
 END IF 
 !
-CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
+CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_write(TPFILE,'LAT0',XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',XLON0)
+CALL IO_Field_write(TPFILE,'BETA',XBETA)
 !
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
+CALL IO_Field_write(TPFILE,'XHAT',XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',XYHAT)
+CALL IO_Field_write(TPFILE,'ZHAT',XZHAT)
+CALL IO_Field_write(TPFILE,'ZTOP',XZTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
-CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
+CALL IO_Field_write(TPFILE,'ZS',   XZS)
+CALL IO_Field_write(TPFILE,'ZWS',  XZWS)
+CALL IO_Field_write(TPFILE,'ZSMT', XZSMT)
+CALL IO_Field_write(TPFILE,'SLEVE',LSLEVE)
 !
 IF (LSLEVE) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
-  CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
+  CALL IO_Field_write(TPFILE,'LEN1',XLEN1)
+  CALL IO_Field_write(TPFILE,'LEN2',XLEN2)
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
-CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
-CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
-CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
+CALL IO_Field_write(TPFILE,'DTMOD',TDTMOD)
+CALL IO_Field_write(TPFILE,'DTCUR',TDTCUR)
+CALL IO_Field_write(TPFILE,'DTEXP',TDTEXP)
+CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
-CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
 !
 IF (LCARTESIAN .AND. LWIND_ZM) THEN
   LWIND_ZM=.FALSE.
@@ -454,12 +458,12 @@ IF (LCARTESIAN .AND. LWIND_ZM) THEN
 END IF
 !*       1.4    Reference state variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', XEXNTOP)
+CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHODREF',XRHODREF)
-CALL IO_WRITE_FIELD(TPFILE,'THVREF', XTHVREF)
+CALL IO_Field_write(TPFILE,'RHODREF',XRHODREF)
+CALL IO_Field_write(TPFILE,'THVREF', XTHVREF)
 !
 !
 !*       1.5    Variables necessary for plots
@@ -468,11 +472,11 @@ CALL IO_WRITE_FIELD(TPFILE,'THVREF', XTHVREF)
 ! level or constant theta level or constant PV level
 !
 IF (INDEX(CISO,'PR') /= 0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'PABST',XPABST)
+  CALL IO_Field_write(TPFILE,'PABST',XPABST)
 END IF
 !
 IF (INDEX(CISO,'TK') /= 0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'THT',XTHT)
+  CALL IO_Field_write(TPFILE,'THT',XTHT)
 END IF
 !
 ZCORIOZ(:,:,:)=SPREAD( XCORIOZ(:,:),DIM=3,NCOPIES=IKU )
@@ -503,13 +507,13 @@ IF (INDEX(CISO,'EV') /= 0) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPOVO)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZPOVO)
 END IF
 !
 !
 IF (LVAR_RS) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'UT',XUT)
-  CALL IO_WRITE_FIELD(TPFILE,'VT',XVT)
+  CALL IO_Field_write(TPFILE,'UT',XUT)
+  CALL IO_Field_write(TPFILE,'VT',XVT)
   !
   IF (LWIND_ZM) THEN
     TZFIELD2(1)%CMNHNAME   = 'UM_ZM'
@@ -537,20 +541,20 @@ IF (LVAR_RS) THEN
     CALL UV_TO_ZONAL_AND_MERID(XUT,XVT,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2)
   END IF
   !
-  CALL IO_WRITE_FIELD(TPFILE,'WT',XWT)
+  CALL IO_Field_write(TPFILE,'WT',XWT)
   !
   !   write mixing ratio for water vapor required to plot radio-soundings
   !
   IF (LUSERV) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
+    CALL IO_Field_write(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
   END IF
 END IF
 !
 !*   Latitude and Longitude arrays
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT)
-  CALL IO_WRITE_FIELD(TPFILE,'LON',XLON)
+  CALL IO_Field_write(TPFILE,'LAT',XLAT)
+  CALL IO_Field_write(TPFILE,'LON',XLON)
 END IF
 !
 !
@@ -562,15 +566,15 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD)
 !
 IF (LVAR_TURB) THEN
   IF (CTURB /= 'NONE') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'TKET',XTKET)
+    CALL IO_Field_write(TPFILE,'TKET',XTKET)
     !
     IF( NRR > 1 ) THEN
-      CALL IO_WRITE_FIELD(TPFILE,'SRCT',XSRCT)
-      CALL IO_WRITE_FIELD(TPFILE,'SIGS',XSIGS)
+      CALL IO_Field_write(TPFILE,'SRCT',XSRCT)
+      CALL IO_Field_write(TPFILE,'SIGS',XSIGS)
     END IF
     ! 
     IF(CTOM=='TM06') THEN
-      CALL IO_WRITE_FIELD(TPFILE,'BL_DEPTH',XBL_DEPTH)
+      CALL IO_Field_write(TPFILE,'BL_DEPTH',XBL_DEPTH)
     END IF
   END IF
 END IF
@@ -584,15 +588,15 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRR*3.6E6)
+  CALL IO_Field_write(TPFILE,TZFIELD,XINPRR*3.6E6)
   !
-  CALL IO_WRITE_FIELD(TPFILE,'INPRR3D',XINPRR3D)
-  CALL IO_WRITE_FIELD(TPFILE,'EVAP3D', XEVAP3D)
+  CALL IO_Field_write(TPFILE,'INPRR3D',XINPRR3D)
+  CALL IO_Field_write(TPFILE,'EVAP3D', XEVAP3D)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRR*1.0E3)
+  CALL IO_Field_write(TPFILE,TZFIELD,XACPRR*1.0E3)
   !
   IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR.&
       CCLOUD == 'KHKO' .OR. CCLOUD == 'LIMA') THEN 
@@ -600,56 +604,56 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm hour-1'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRC*3.6E6)
+      CALL IO_Field_write(TPFILE,TZFIELD,XINPRC*3.6E6)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRC*1.0E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XACPRC*1.0E3)
     END IF 
     IF (SIZE(XINDEP) /= 0 ) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm hour-1'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINDEP*3.6E6)
+      CALL IO_Field_write(TPFILE,TZFIELD,XINDEP*3.6E6)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACDEP*1.0E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XACDEP*1.0E3)
     END IF 
   END IF 
   IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'LIMA') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRS*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRS*3.6E6)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRS*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRS*1.0E3)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRG*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRG*3.6E6)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRG*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRG*1.0E3)
   !
     IF (SIZE(XINPRH) /= 0 ) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm hour-1'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRH*3.6E6)
+      CALL IO_Field_write(TPFILE,TZFIELD,XINPRH*3.6E6)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRH*1.0E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XACPRH*1.0E3)
     ENDIF
   !
     ZWORK21(:,:) = XINPRR(:,:) + XINPRS(:,:) + XINPRG(:,:)
@@ -660,7 +664,7 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21*3.6E6)
   !
     ZWORK21(:,:) = (XACPRR(:,:) + XACPRS(:,:) + XACPRG(:,:))*1.0E3
     IF (SIZE(XINPRC) /= 0 ) &      
@@ -671,7 +675,7 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21*1.0E3)
   !
   END IF
   !
@@ -681,17 +685,17 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRCONV*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XPRCONV*3.6E6)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPACCONV*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XPACCONV*1.0E3)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRSCONV*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XPRSCONV*3.6E6)
   END IF
 END IF
 IF (LVAR_PR ) THEN
@@ -729,7 +733,7 @@ IF (LVAR_PR ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
 ENDIF
 !
 !
@@ -738,14 +742,14 @@ IF (LHU_FLX) THEN
   ZWORK35(:,:,:) = XRHODREF(:,:,:) * XRT(:,:,:,1)
   ZWORK31(:,:,:) = MXM(ZWORK35(:,:,:)) * XUT(:,:,:)
   ZWORK32(:,:,:) = MYM(ZWORK35(:,:,:)) * XVT(:,:,:)
+  ZWORK35(:,:,:) = GX_U_M(1,IKU,1,ZWORK31,XDXX,XDZZ,XDZX) + GY_V_M(1,IKU,1,ZWORK32,XDYY,XDZZ,XDZY)
   IF  (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN
     ZWORK36(:,:,:) = ZWORK35(:,:,:) + XRHODREF(:,:,:) * (XRT(:,:,:,2) + &
     XRT(:,:,:,3) + XRT(:,:,:,4) + XRT(:,:,:,5) + XRT(:,:,:,6))
     ZWORK33(:,:,:) = MXM(ZWORK36(:,:,:)) * XUT(:,:,:)
     ZWORK34(:,:,:) = MYM(ZWORK36(:,:,:)) * XVT(:,:,:)
+    ZWORK36(:,:,:) = GX_U_M(1,IKU,1,ZWORK33,XDXX,XDZZ,XDZX) + GY_V_M(1,IKU,1,ZWORK34,XDYY,XDZZ,XDZY)
   ENDIF
-  ZWORK35(:,:,:) = GX_U_M(1,IKU,1,ZWORK31,XDXX,XDZZ,XDZX) + GY_V_M(1,IKU,1,ZWORK32,XDYY,XDZZ,XDZY)
-  ZWORK36(:,:,:) = GX_U_M(1,IKU,1,ZWORK33,XDXX,XDZZ,XDZX) + GY_V_M(1,IKU,1,ZWORK34,XDYY,XDZZ,XDZY)
   !
   ! Integration sur 3000 m
   !
@@ -808,7 +812,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   !  
   TZFIELD%CMNHNAME   = 'VM90'
   TZFIELD%CSTDNAME   = ''
@@ -820,7 +824,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
   !  composantes U et V du flux d'humidité intégré sur 3000 metres
   TZFIELD%CMNHNAME   = 'UM91'
   TZFIELD%CSTDNAME   = ''
@@ -832,7 +836,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   !
   TZFIELD%CMNHNAME   = 'VM91'
   TZFIELD%CSTDNAME   = ''
@@ -844,7 +848,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
   !   Convergence d'humidité
   TZFIELD%CMNHNAME   = 'HMCONV'
@@ -857,7 +861,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK35)
+  CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK35)
   !
   !   Convergence d'humidité intégré sur 3000 mètres
   TZFIELD%CMNHNAME   = 'HMCONV3000'
@@ -870,7 +874,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK25)
+  CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK25)
   !
   IF  (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN
     !  composantes U et V du flux surfacique d'hydrométéores  
@@ -884,7 +888,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     ! 
     TZFIELD%CMNHNAME   = 'VM92'
     TZFIELD%CSTDNAME   = ''
@@ -896,7 +900,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
     !  composantes U et V du flux d'hydrométéores intégré sur 3000 metres
     TZFIELD%CMNHNAME   = 'UM93'
     TZFIELD%CSTDNAME   = ''
@@ -908,7 +912,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK23)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK23)
     ! 
     TZFIELD%CMNHNAME   = 'VM93'
     TZFIELD%CSTDNAME   = ''
@@ -920,7 +924,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK24)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK24)
     !   Convergence d'hydrométéores
     TZFIELD%CMNHNAME   = 'HMCONV_TT'
     TZFIELD%CSTDNAME   = ''
@@ -932,7 +936,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK36)
+    CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK36)
     !   Convergence d'hydrométéores intégré sur 3000 mètres
     TZFIELD%CMNHNAME   = 'HMCONV3000_TT'
     TZFIELD%CSTDNAME   = ''
@@ -944,7 +948,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK26)
+    CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK26)
   ENDIF
 ENDIF
 !
@@ -964,43 +968,43 @@ IF (LVAR_MRW .OR. LLIMA_DIAG) THEN
       TZFIELD%CLONGNAME  = 'MRV'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRV'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RVT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RVT)*1.E3)
     END IF
     IF (LUSERC) THEN
       TZFIELD%CMNHNAME   = 'MRC'
       TZFIELD%CLONGNAME  = 'MRC'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRC'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*1.E3)
 !
       TZFIELD%CMNHNAME   = 'VRC'
       TZFIELD%CLONGNAME  = 'VRC'
       TZFIELD%CUNITS     = '1' !vol/vol
       TZFIELD%CCOMMENT   = 'X_Y_Z_VRC (vol/vol)'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*XRHODREF(:,:,:)/1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*XRHODREF(:,:,:)/1.E3)
     END IF
     IF (LUSERR) THEN
       TZFIELD%CMNHNAME   = 'MRR'
       TZFIELD%CLONGNAME  = 'MRR'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRR'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*1.E3)
 !
       TZFIELD%CMNHNAME   = 'VRR'
       TZFIELD%CLONGNAME  = 'VRR'
       TZFIELD%CUNITS     = '1' !vol/vol
       TZFIELD%CCOMMENT   = 'X_Y_Z_VRR (vol/vol)'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*XRHODREF(:,:,:)/1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*XRHODREF(:,:,:)/1.E3)
     END IF
     IF (LUSERI) THEN
       TZFIELD%CMNHNAME   = 'MRI'
       TZFIELD%CLONGNAME  = 'MRI'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRI'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RIT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RIT)*1.E3)
 !
       IF (LUSECI) THEN
-        CALL IO_WRITE_FIELD(TPFILE,'CIT',XCIT(:,:,:))
+        CALL IO_Field_write(TPFILE,'CIT',XCIT(:,:,:))
       END IF
     END IF
     IF (LUSERS) THEN
@@ -1008,21 +1012,21 @@ IF (LVAR_MRW .OR. LLIMA_DIAG) THEN
       TZFIELD%CLONGNAME  = 'MRS'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRS'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RST)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RST)*1.E3)
     END IF
     IF (LUSERG) THEN
       TZFIELD%CMNHNAME   = 'MRG'
       TZFIELD%CLONGNAME  = 'MRG'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRG'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RGT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RGT)*1.E3)
     END IF
     IF (LUSERH) THEN
       TZFIELD%CMNHNAME   = 'MRH'
       TZFIELD%CLONGNAME  = 'MRH'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRH'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RHT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RHT)*1.E3)
     END IF
   END IF
 END IF
@@ -1044,7 +1048,7 @@ IF (LVAR_MRSV) THEN
     WRITE(TZFIELD%CMNHNAME,'(A4,I3.3)')'MRSV',JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E3)
   END DO
 END IF
 ! microphysical C2R2 scheme scalar variables
@@ -1068,7 +1072,7 @@ IF(LVAR_MRW) THEN
         ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-3
       END IF
       WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     END DO
   END IF
   ! microphysical C3R5 scheme additional scalar variables
@@ -1085,7 +1089,7 @@ IF(LVAR_MRW) THEN
       TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E-3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E-3)
     END DO
   END IF
 END IF
@@ -1158,7 +1162,7 @@ IF (LLIMA_DIAG) THEN
     !
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-6*XRHODREF(:,:,:)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !
   IF (LUSERC) THEN
@@ -1173,7 +1177,7 @@ IF (LLIMA_DIAG) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK31(:,:,:)=XRT(:,:,:,2)*1.E3*XRHODREF(:,:,:)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 !
   IF (LUSERI) THEN
@@ -1188,7 +1192,7 @@ IF (LLIMA_DIAG) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK31(:,:,:)=XRT(:,:,:,4)*1.E3*XRHODREF(:,:,:)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 !
 END IF
@@ -1206,7 +1210,7 @@ IF (LCHEMDIAG) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
 END IF
 IF (LCHAQDIAG) THEN    !aqueous concentration in M
@@ -1227,7 +1231,7 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
     WHERE(((XRT(:,:,:,2)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
       ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,2))
     ENDWHERE
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
   !
   ZWORK31(:,:,:)=0.
@@ -1238,7 +1242,7 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
     WHERE(((XRT(:,:,:,3)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
       ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,3))
     ENDWHERE
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !  ZWORK31(:,:,:)=0.
 !  DO JSV = NSV_CHICBEG,NSV_CHICEND   ! ice phase
@@ -1248,7 +1252,7 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
 !    WHERE(((XRT(:,:,:,3)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
 !      ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,3))
 !    ENDWHERE
-!    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+!    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !  END DO
 END IF
 
@@ -1278,7 +1282,7 @@ IF (LPASPOL) THEN
     WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'PPT',JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTMP)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTMP)
   END DO
   DEALLOCATE(ZTMP)
   DEALLOCATE(ZRHOT)
@@ -1297,7 +1301,7 @@ IF (LCONDSAMP) THEN
     WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'CST',JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
   END DO
 END IF
 !
@@ -1314,7 +1318,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
   !
   ZWORK21(:,:) = 0.
   DO JK = IKB,IKE
@@ -1333,7 +1337,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21(:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
   !
   IF(.NOT.ALLOCATED(ZBET_SNW)) &
         ALLOCATE(ZBET_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3)))
@@ -1355,7 +1359,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_SNW(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SNW(:,:,:))
   !
   TZFIELD%CMNHNAME   = 'SNWBETA'
   TZFIELD%CSTDNAME   = ''
@@ -1367,7 +1371,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZBET_SNW(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZBET_SNW(:,:,:))
   !
   TZFIELD%CMNHNAME   = 'SNWNOA'
   TZFIELD%CSTDNAME   = ''
@@ -1379,7 +1383,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1))
   !
   TZFIELD%CMNHNAME   = 'SNWMASS'
   TZFIELD%CSTDNAME   = ''
@@ -1391,7 +1395,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2))
   !
   ZWORK21(:,:) = 0.
   DO JK = IKB,IKE
@@ -1409,7 +1413,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21(:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
 END IF
 ! Lagrangian variables
 IF (LTRAJ) THEN
@@ -1426,7 +1430,7 @@ IF (LTRAJ) THEN
     TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A20,I3.3,A4)')'X_Y_Z_','Lagrangian variable ',JSV,' (M)'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
   END DO
   ! X coordinate
   DO JK=1,IKU
@@ -1440,7 +1444,7 @@ IF (LTRAJ) THEN
   TZFIELD%CMNHNAME   = 'X'
   TZFIELD%CLONGNAME  = 'X'
   TZFIELD%CCOMMENT   = 'X_Y_Z_X coordinate'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   ! Y coordinate
   DO JK=1,IKU
     DO JI=1,IIU
@@ -1453,7 +1457,7 @@ IF (LTRAJ) THEN
   TZFIELD%CMNHNAME   = 'Y'
   TZFIELD%CLONGNAME  = 'Y'
   TZFIELD%CCOMMENT   = 'X_Y_Z_Y coordinate'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 END IF
 ! linox scalar variables
 IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) THEN
@@ -1468,7 +1472,7 @@ IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
 END IF
 IF (LELECDIAG .AND. CELEC .NE. "NONE") THEN
@@ -1490,7 +1494,7 @@ IF (LELECDIAG .AND. CELEC .NE. "NONE") THEN
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
     END IF
     ZWORK31(:,:,:)=XSVT(:,:,:,JSV) * XRHODREF(:,:,:)  ! C/kg --> C/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 END IF
 ! Sea Salt variables
@@ -1514,7 +1518,7 @@ IF (LSALT) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','SALT',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
   CALL PPP2SALT(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND),XRHODREF,&
@@ -1528,30 +1532,30 @@ IF (LSALT) THEN
   TZFIELD%LTIMEDEP   = .TRUE.
   !
   DO JJ=1,NMODE_SLT
-    TZFIELD%CMNHNAME   = 'SLTRGA'
-    TZFIELD%CLONGNAME  = 'SLTRGA'
+    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTRGA',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) SALT MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_SLT(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SLT(:,:,:,JJ))
     !
-    TZFIELD%CMNHNAME   = 'SLTRGAM'
-    TZFIELD%CLONGNAME  = 'SLTRGAM'
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTRGAM',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) SALT MODE ',JJ
     ZWORK31(:,:,:)=ZRG_SLT(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_SLT(:,:,:,JJ)))**2))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm-3'
     WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 SALT MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZN0_SLT(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_SLT(:,:,:,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTSIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA SALT MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSIG_SLT(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_SLT(:,:,:,JJ))
     !SALT MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SLTMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1560,7 +1564,7 @@ IF (LSALT) THEN
     ZWORK31(:,:,:)= ZN0_SLT(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
        * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18 &  !um-->m
        * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !SALT BURDEN (g/m2)
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -1579,7 +1583,7 @@ IF (LSALT) THEN
     TZFIELD%CUNITS     = 'g m-2'
     WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
     TZFIELD%NDIMS      = 2
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
     !
     TZFIELD%NDIMS      = 3
   ENDDO
@@ -1600,7 +1604,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CDESLTNAMES(JSV)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','SALTDEP',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSSLTDEP(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSSLTDEP(:,:,:,JSV)*1.E9)
   END DO
   !
   DO JJ=1,NMODE_SLT
@@ -1630,7 +1634,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
                     * XAVOGADRO       & !==>#/mole
                     / XMD             & !==>#/kg_{air}
                     * XRHODREF(:,:,:)   !==>#/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! CLOUD:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1639,7 +1643,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
                     * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
                     * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !   FOR RAIN DROPS
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPN0A',JJ+NMODE_SLT
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1666,7 +1670,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
                     * XAVOGADRO       & !==>#/mole
                     / XMD             & !==>#/kg_{air}
                     * XRHODREF(:,:,:)   !==>#/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! RAIN:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ+NMODE_SLT
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1675,7 +1679,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
                     * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
                     * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !
 END IF
@@ -1700,36 +1704,36 @@ IF (LDUST) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUST',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
   CALL PPP2DUST(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND),XRHODREF,&
                PSIG3D=ZSIG_DST, PRG3D=ZRG_DST, PN3D=ZN0_DST)
   DO JJ=1,NMODE_DST
-    TZFIELD%CMNHNAME   = 'DSTRGA'
-    TZFIELD%CLONGNAME  = 'DSTRGA'
+    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTRGA',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) DUST MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_DST(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_DST(:,:,:,JJ))
     !
-    TZFIELD%CMNHNAME   = 'DSTRGAM'
-    TZFIELD%CLONGNAME  = 'DSTRGAM'
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTRGAM',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) DUST MODE ',JJ
     ZWORK31(:,:,:)=ZRG_DST(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_DST(:,:,:,JJ)))**2))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm-3'
     WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 DUST MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZN0_DST(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_DST(:,:,:,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTSIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA DUST MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSIG_DST(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_DST(:,:,:,JJ))
     !DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'DSTMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1738,7 +1742,7 @@ IF (LDUST) THEN
     ZWORK31(:,:,:)= ZN0_DST(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
        * (ZRG_DST(:,:,:,JJ)**3)*1.d-18 &  !um-->m
        * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !DUST BURDEN (g/m2)
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -1757,7 +1761,7 @@ IF (LDUST) THEN
     TZFIELD%CUNITS     = 'g m-2'
     WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
     TZFIELD%NDIMS      = 2
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
     !
     TZFIELD%NDIMS      = 3
   ENDDO
@@ -1778,7 +1782,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CDEDSTNAMES(JSV)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUSTDEP',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSDSTDEP(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSDSTDEP(:,:,:,JSV)*1.E9)
   END DO
   !
   DO JJ=1,NMODE_DST
@@ -1808,7 +1812,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
                     * XAVOGADRO                     & !==>#/mole
                     / XMD                           & !==>#/kg_{air}
                     * XRHODREF(:,:,:)                 !==>#/m3  
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! CLOUD:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1817,7 +1821,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
           * (ZRG_DST(:,:,:,JJ)**3)*1.d-18               &  !um-->m
           * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !   FOR RAIN DROPS
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPN0A',JJ+NMODE_DST
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1844,7 +1848,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
                     * XAVOGADRO       & !==>#/mole
                     / XMD             & !==>#/kg_{air}
                     * XRHODREF(:,:,:)   !==>#/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! RAIN:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ+NMODE_DST
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1853,7 +1857,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
                     * (ZRG_DST(:,:,:,JJ)**3)*1.d-18     &  !um-->m
                     * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !
 END IF
@@ -1871,7 +1875,7 @@ IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','AERO',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
   IF (.NOT.(ASSOCIATED(XN3D)))   &
@@ -1888,132 +1892,132 @@ IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
     TZFIELD%CLONGNAME  = 'RGA'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'RG (nb) AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRG3D(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRG3D(:,:,:,JJ))
     !
     TZFIELD%CMNHNAME   = 'RGAM'
     TZFIELD%CLONGNAME  = 'RGAM'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A20,I1)')'RG (m) AEROSOL MODE ',JJ
     ZWORK31(:,:,:)=XRG3D(:,:,:,JJ) / (EXP(-3.*(LOG(XSIG3D(:,:,:,JJ)))**2))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'N0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'cm-3'
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XN3D(:,:,:,JJ)*1.E-6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XN3D(:,:,:,JJ)*1.E-6)
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
     WRITE(TZFIELD%CCOMMENT,'(A19,I1)')'SIGMA AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSIG3D(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSIG3D(:,:,:,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MSO4',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS SO4 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SO4,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SO4,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNO3',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NO3 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NO3,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NO3,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNH3',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NH3 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NH3,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NH3,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MH2O',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS H2O AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_H2O,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_H2O,JJ))
     !
     IF (NSOA .EQ. 10) THEN
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA1',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA1 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA1,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA1,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA2',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA2 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA2,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA2,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA3',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA3 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA3,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA3,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA4',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA4 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA4,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA4,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA5',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA5 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA5,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA5,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA6',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA6 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA6,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA6,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA7',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA7 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA7,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA7,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA8',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA8 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA8,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA8,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA9',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA9 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA9,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA9,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'MSOA10',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA10,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA10,JJ))
     END IF
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MOC',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS OC AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_OC,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_OC,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MBC',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS BC AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_BC,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_BC,JJ))
   ENDDO
 END IF
 !
 !* Large Scale variables
 !
 IF (LVAR_LS) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LSUM', XLSUM)
-  CALL IO_WRITE_FIELD(TPFILE,'LSVM', XLSVM)
+  CALL IO_Field_write(TPFILE,'LSUM', XLSUM)
+  CALL IO_Field_write(TPFILE,'LSVM', XLSVM)
   !
   IF (LWIND_ZM) THEN
     TZFIELD2(1)%CMNHNAME   = 'LSUM_ZM'
@@ -2041,14 +2045,14 @@ IF (LVAR_LS) THEN
     CALL UV_TO_ZONAL_AND_MERID(XLSUM,XLSVM,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2)
   ENDIF
   !
-  CALL IO_WRITE_FIELD(TPFILE,'LSWM', XLSWM)
-  CALL IO_WRITE_FIELD(TPFILE,'LSTHM',XLSTHM)
+  CALL IO_Field_write(TPFILE,'LSWM', XLSWM)
+  CALL IO_Field_write(TPFILE,'LSTHM',XLSTHM)
 !
   IF (LUSERV) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LSRVM',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'g kg-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XLSRVM(:,:,:)*1.E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XLSRVM(:,:,:)*1.E3)
   END IF
 END IF
 !
@@ -2069,7 +2073,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XUFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'VFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2081,7 +2085,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'WFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2093,7 +2097,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XWFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'THFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2105,7 +2109,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2117,7 +2121,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2129,7 +2133,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2141,7 +2145,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2153,7 +2157,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGXTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGXTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2165,7 +2169,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGYTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGYTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2177,7 +2181,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPGROUNDFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XPGROUNDFRC(JT))
 !
   END DO
 END IF
@@ -2200,17 +2204,17 @@ IF (LTPZH .OR. LCOREF) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
   ZWORK31(:,:,:)=ZTEMP(:,:,:) - XTT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
 !* Pressure in hPa        
   CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME   = 'PRES'
   TZFIELD%CUNITS = 'hPa'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPABST(:,:,:)*1E-2)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPABST(:,:,:)*1E-2)
 !
 !* Geopotential in meters
-  CALL IO_WRITE_FIELD(TPFILE,'ALT',XZZ)
+  CALL IO_Field_write(TPFILE,'ALT',XZZ)
 !
 !* Relative humidity in percent
   IF (LUSERV) THEN
@@ -2238,7 +2242,7 @@ IF (LTPZH .OR. LCOREF) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     TZFIELD%CMNHNAME   = 'VPRES'
     TZFIELD%CSTDNAME   = 'water_vapor_partial_pressure_in_air'
@@ -2251,7 +2255,7 @@ IF (LTPZH .OR. LCOREF) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK33(:,:,:)=ZWORK33(:,:,:)*ZWORK32(:,:,:)*1E-4
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     !
     IF (LCOREF) THEN
       ZWORK33(:,:,:)=(77.6*( XPABST(:,:,:)*1E-2                &
@@ -2267,7 +2271,7 @@ IF (LTPZH .OR. LCOREF) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
       !
       ZWORK33(:,:,:)=ZWORK33(:,:,:)+MZF(1,IKU,1,XZZ(:,:,:))*1E6/XRADIUS
       TZFIELD%CMNHNAME   = 'MCOREF'
@@ -2280,7 +2284,7 @@ IF (LTPZH .OR. LCOREF) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     END IF
   ELSE
     PRINT*, 'NO WATER VAPOR IN ',TPFILE%CNAME,' RELATIVE HUMIDITY IS NOT COMPUTED'
@@ -2321,7 +2325,7 @@ IF ( LMOIST_V .OR. LMSLP .OR. CBLTOP/='NONE' ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAV)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAV)
   END IF
 !
 END IF
@@ -2354,7 +2358,7 @@ IF (LVISI) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVISIKUN)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZVISIKUN)
 !
     IF ((CCLOUD == 'C2R2') .OR. (CCLOUD =='KHKO')) THEN
       ZVISIGUL(:,:,:) = 10000.
@@ -2374,7 +2378,7 @@ IF (LVISI) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVISIGUL)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZVISIGUL)
 ! Visibity Zhang                      
       TZFIELD%CMNHNAME   = 'VISIZHA'
       TZFIELD%CSTDNAME   = ''
@@ -2386,7 +2390,7 @@ IF (LVISI) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVISIZHA)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZVISIZHA)
 !
       DEALLOCATE(ZVISIGUL,ZVISIZHA)
     END IF
@@ -2421,7 +2425,7 @@ IF (( LMOIST_E .OR. LBV_FR ) .AND. (NRR>0)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAE)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAE)
   END IF
 END IF
 !-------------------------------------------------------------------------------
@@ -2447,7 +2451,7 @@ IF (LMOIST_ES .AND. (NRR>0)) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAES)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAES)
 ENDIF
 !
 !-------------------------------------------------------------------------------
@@ -2498,7 +2502,7 @@ IF ( LMOIST_L .OR. LMOIST_S1 .OR. LMOIST_S2 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAL)
   END IF
 !
 END IF
@@ -2553,7 +2557,7 @@ IF ( LMOIST_S1 .OR. LMOIST_S2 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAS1)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAS1)
   END IF
   IF (LMOIST_S2) THEN
 ! The Moist-air Entropy potential temperature (2nd order)
@@ -2567,7 +2571,7 @@ IF ( LMOIST_S1 .OR. LMOIST_S2 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAS2)  
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAS2)  
   END IF
 !
 END IF
@@ -2590,7 +2594,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !    
 ! Vorticity y
   ZWORK32(:,:,:)=MZF(1,IKU,1,MXF(MYM(ZVOY(:,:,:))))
@@ -2604,7 +2608,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
   !
   IF (LWIND_ZM) THEN
     TZFIELD2(1)%CMNHNAME   = 'UM1_ZM'
@@ -2644,7 +2648,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
 ! Absolute Vorticity 
   ZWORK31(:,:,:)=MYF(MXF(ZVOZ(:,:,:))) + ZCORIOZ(:,:,:)
@@ -2658,7 +2662,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
 END IF
 !    
@@ -2690,7 +2694,7 @@ IF ( LMEAN_POVO ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 END IF
 !
 ! Virtual Potential Vorticity in PV units
@@ -2712,7 +2716,7 @@ IF (LMOIST_V .AND. (NRR>0) ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 !
   IF (LMEAN_POVO) THEN
     IWORK1(:,:)=0
@@ -2734,7 +2738,7 @@ IF (LMOIST_V .AND. (NRR>0) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
 END IF
 !
@@ -2758,7 +2762,7 @@ IF (LMOIST_E .AND. (NRR>0) ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 !
   IF (LMEAN_POVO) THEN
     IWORK1(:,:)=0
@@ -2780,7 +2784,7 @@ IF (LMOIST_E .AND. (NRR>0) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
     DEALLOCATE(IWORK1)
   END IF 
   !
@@ -2805,7 +2809,7 @@ IF (LMOIST_ES .AND. (NRR>0) ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 ENDIF
 !
 !
@@ -2826,7 +2830,7 @@ IF (LDIV) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   IF (LUSERV) THEN
     TZFIELD%CMNHNAME   = 'HMDIV'
@@ -2842,7 +2846,7 @@ IF (LDIV) THEN
     ZWORK31=MXM(XRHODREF*XRT(:,:,:,1))*XUT
     ZWORK32=MYM(XRHODREF*XRT(:,:,:,1))*XVT
     ZWORK33=GX_U_M(1,IKU,1,ZWORK31,XDXX,XDZZ,XDZX) + GY_V_M(1,IKU,1,ZWORK32,XDYY,XDZZ,XDZY)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
   END IF
 !
 ENDIF
@@ -2874,7 +2878,7 @@ IF (LCLSTR) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICLUSTERID)
+  CALL IO_Field_write(TPFILE,TZFIELD,ICLUSTERID)
   !
   TZFIELD%CMNHNAME   = 'CLUSTERLV'
   TZFIELD%CSTDNAME   = ''
@@ -2886,7 +2890,7 @@ IF (LCLSTR) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICLUSTERLV)
+  CALL IO_Field_write(TPFILE,TZFIELD,ICLUSTERLV)
   !
   TZFIELD%CMNHNAME   = 'CLDSIZE'
   TZFIELD%CSTDNAME   = ''
@@ -2898,7 +2902,7 @@ IF (LCLSTR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCLDSIZE)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZCLDSIZE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -2951,7 +2955,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 ! 
     TZFIELD%CMNHNAME   = 'VM88'
     TZFIELD%CSTDNAME   = ''
@@ -2963,7 +2967,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     IF (LWIND_ZM) THEN
       TZFIELD2(1)%CMNHNAME   = 'UM88_ZM'
@@ -2996,7 +3000,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME  = 'WM88'
     TZFIELD%CLONGNAME = 'WM88'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWT)
+    CALL IO_Field_write(TPFILE,TZFIELD,XWT)
   END IF
 !
   IF (LAGEO) THEN
@@ -3013,7 +3017,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     TZFIELD%CMNHNAME   = 'VM89'
     TZFIELD%CSTDNAME   = ''
@@ -3025,7 +3029,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     IF (LWIND_ZM) THEN
       TZFIELD2(1)%CMNHNAME   = 'UM89_ZM'
@@ -3058,7 +3062,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME  = 'WM89'
     TZFIELD%CLONGNAME = 'WM89'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWT)
+    CALL IO_Field_write(TPFILE,TZFIELD,XWT)
   END IF
 !
 END IF
@@ -3082,7 +3086,7 @@ IF(LWIND_CONTRAV) THEN!$
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -3115,7 +3119,7 @@ IF (LMSLP) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -3140,7 +3144,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:) = 0.
@@ -3160,7 +3164,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:) = 0.
@@ -3180,7 +3184,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3200,7 +3204,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3220,7 +3224,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3240,7 +3244,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3260,7 +3264,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
 END IF
 !
@@ -3301,7 +3305,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   ELSE
     PRINT * ,'YOU WANT TO COMPUTE THE ACCUMULATED RAIN'
     PRINT * ,'BUT NO RAIN IS PRESENT IN THE MODEL' 
@@ -3327,7 +3331,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
         JJ=INT(XMEAN_PR(JK+1))
         WRITE(TZFIELD%CMNHNAME,'(A9,2I2.2)')'LS_ACTOPR',JI,JJ
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+        CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
       END IF
     END DO
     !
@@ -3366,7 +3370,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   ELSE
     PRINT * ,'YOU WANT TO COMPUTE THE RAIN RATE'
     PRINT * ,'BUT NO RAIN IS PRESENT IN THE MODEL' 
@@ -3386,7 +3390,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   END IF
 !
 END IF
@@ -3415,7 +3419,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   !
   TZFIELD%CMNHNAME   = 'CINMAX'
   TZFIELD%CSTDNAME   = ''
@@ -3427,7 +3431,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
   IF (NCAPE >=1) THEN
     TZFIELD%CMNHNAME   = 'CAPE3D'
@@ -3440,7 +3444,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     TZFIELD%CMNHNAME   = 'CIN3D'
     TZFIELD%CSTDNAME   = 'atmosphere_convective_inhibition'
@@ -3452,7 +3456,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     !
     TZFIELD%CMNHNAME   = 'DCAPE3D'
     TZFIELD%CSTDNAME   = ''
@@ -3464,7 +3468,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
   END IF
   !
   IF (NCAPE >=2) THEN
@@ -3482,7 +3486,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 ENDIF
 !
@@ -3514,7 +3518,7 @@ IF (LBV_FR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !  
   IF (NRR > 0) THEN
     ZWORK32(:,:,:)=DZM(1,IKU,1,ZTHETAE(:,:,:))/ MZM(1,IKU,1,ZTHETAE(:,:,:))
@@ -3540,7 +3544,7 @@ IF (LBV_FR) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 END IF
 !
@@ -3568,7 +3572,7 @@ IF ( NGPS>=0 ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
   IF (NGPS>=1) THEN
     TZFIELD%CMNHNAME   = 'ZHD'
@@ -3581,7 +3585,7 @@ IF ( NGPS>=0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK23)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK23)
     !
     TZFIELD%CMNHNAME   = 'ZWD'
     TZFIELD%CSTDNAME   = ''
@@ -3593,7 +3597,7 @@ IF ( NGPS>=0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK24)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK24)
     !
   END IF
   !
@@ -3638,7 +3642,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   TZFIELD%CMNHNAME   = 'VDOP'
   TZFIELD%CSTDNAME   = ''
@@ -3650,7 +3654,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
 !
   TZFIELD%CMNHNAME   = 'ZDR'
   TZFIELD%CSTDNAME   = ''
@@ -3662,7 +3666,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
 !
   TZFIELD%CMNHNAME   = 'KDP'
   TZFIELD%CSTDNAME   = ''
@@ -3674,7 +3678,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 !
    ELSE 
     !
@@ -3831,8 +3835,8 @@ IF(LRADAR .AND. LUSERR) THEN
           WRITE(YGRID_SIZE,'(I3.3)') 2*NMAX
           DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
             YRS=YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//YGRID_SIZE//TRIM(TPFILE%CNAME)
-            CALL IO_FILE_ADD2LIST(TZRSFILE,YRS,'TXT','WRITE',KRECL=8192)
-            CALL IO_FILE_OPEN_ll(TZRSFILE,HSTATUS='NEW')
+            CALL IO_File_add2list(TZRSFILE,YRS,'TXT','WRITE',KRECL=8192)
+            CALL IO_File_open(TZRSFILE,HSTATUS='NEW')
             ILURS = TZRSFILE%NLU
             WRITE(ILURS,'(A,4F12.6,2I5)') '**domaine LATLON ',ZWORK43(JI,1,1),ZWORK43(JI,4*NMAX-1,2*NMAX), &
                   ZWORK43(JI,2,1),ZWORK43(JI,4*NMAX,2*NMAX),2*NMAX,2*NMAX !! HEADER
@@ -3846,14 +3850,14 @@ IF(LRADAR .AND. LUSERR) THEN
             DO JV=2*NMAX,1,-1
               WRITE(ILURS,*) CLATLON(JV)
             END DO                  
-            CALL IO_FILE_CLOSE_ll(TZRSFILE)
+            CALL IO_File_close(TZRSFILE)
             TZRSFILE => NULL()
           END DO               
         END DO
         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
@@ -3861,15 +3865,15 @@ IF(LRADAR .AND. LUSERR) THEN
                 INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL)))
           DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
             YRS="P"//YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//TRIM(TPFILE%CNAME)
-            CALL IO_FILE_ADD2LIST(TZRSFILE,YRS,'TXT','WRITE')
-            CALL IO_FILE_OPEN_ll(TZRSFILE)
+            CALL IO_File_add2list(TZRSFILE,YRS,'TXT','WRITE')
+            CALL IO_File_open(TZRSFILE)
             ILURS = TZRSFILE%NLU
             DO JH=1,NBAZIM
               DO JV=1,NBSTEPMAX+1
                 WRITE(ILURS,"(F15.7)") ZWORK42_BIS(JI,JEL,JH,JV,JJ)
               END DO
             END DO                                    
-            CALL IO_FILE_CLOSE_ll(TZRSFILE)
+            CALL IO_File_close(TZRSFILE)
             TZRSFILE => NULL()
           END DO
         END DO
@@ -3982,7 +3986,7 @@ IF (LLIDAR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   TZFIELD%CMNHNAME   = 'LIPAR'
   TZFIELD%CSTDNAME   = ''
@@ -3994,7 +3998,7 @@ IF (LLIDAR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
 !
 END IF
 !
@@ -4038,7 +4042,7 @@ IF (CBLTOP == 'THETA') THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSHMIX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZSHMIX)
   !
   DEALLOCATE(ZSHMIX)
 ELSEIF (CBLTOP == 'RICHA') THEN
@@ -4082,7 +4086,7 @@ ELSEIF (CBLTOP == 'RICHA') THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSHMIX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZSHMIX)
   !
   DEALLOCATE(ZRIB,ZSHMIX)
 ENDIF
@@ -4099,10 +4103,10 @@ IF (ALLOCATED(ZTHETAV)) DEALLOCATE(ZTHETAV)
 !* Ligthning
 !
 IF ( LCH_CONV_LINOX ) THEN 
-  CALL IO_WRITE_FIELD(TPFILE,'IC_RATE',    XIC_RATE)
-  CALL IO_WRITE_FIELD(TPFILE,'CG_RATE',    XCG_RATE)
-  CALL IO_WRITE_FIELD(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
-  CALL IO_WRITE_FIELD(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
+  CALL IO_Field_write(TPFILE,'IC_RATE',    XIC_RATE)
+  CALL IO_Field_write(TPFILE,'CG_RATE',    XCG_RATE)
+  CALL IO_Field_write(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
+  CALL IO_Field_write(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
 END IF
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 1c0b42a312e96be3d7e7a33a828d635dad301fb5..4908ec514781ac6d48a5ffeb717a3024e9f4007e 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-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.
 !-----------------------------------------------------------------
 !     ######################################
@@ -10,7 +10,7 @@ INTERFACE
 !
    SUBROUTINE WRITE_LFIFM1_FOR_DIAG_SUPP(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 !*       0.1   Declarations of arguments
 !
@@ -96,7 +96,7 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP
 !
 USE MODE_ll
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF_n
 USE MODD_CONF
@@ -157,7 +157,7 @@ USE MODI_RADTR_SATEL
 USE MODI_UV_TO_ZONAL_AND_MERID
 !
 USE MODE_FIELD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GET_SURF_UNDEF
 !
@@ -242,7 +242,7 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD)
 !
 IF (NCONV_KF >= 0) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'CAPE',XCAPE)
+  CALL IO_Field_write(TPFILE,'CAPE',XCAPE)
 !
   ! top height (km) of convective clouds
   ZWORK21(:,:)= 0.
@@ -261,7 +261,7 @@ IF (NCONV_KF >= 0) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !
   ! base height (km) of convective clouds
   ZWORK21(:,:)= 0.
@@ -280,15 +280,15 @@ IF (NCONV_KF >= 0) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !
 END IF
 IF (NCONV_KF >= 1) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'DTHCONV',XDTHCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRVCONV',XDRVCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRCCONV',XDRCCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRICONV',XDRICONV)
+  CALL IO_Field_write(TPFILE,'DTHCONV',XDTHCONV)
+  CALL IO_Field_write(TPFILE,'DRVCONV',XDRVCONV)
+  CALL IO_Field_write(TPFILE,'DRCCONV',XDRCCONV)
+  CALL IO_Field_write(TPFILE,'DRICONV',XDRICONV)
 !  
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
     ! User scalar variables
@@ -305,7 +305,7 @@ IF (NCONV_KF >= 1) THEN
         WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A2,I3.3,A20)')'X_Y_Z_','SV',JSV,' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! microphysical C2R2 scheme scalar variables
@@ -322,7 +322,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! microphysical C3R5 scheme additional scalar variables
@@ -339,7 +339,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! electrical scalar variables
@@ -356,7 +356,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! chemical scalar variables
@@ -373,7 +373,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! lagrangian variables
@@ -390,17 +390,17 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
   END IF
 !
 END IF
 IF (NCONV_KF >= 2) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'PRLFLXCONV',XPRLFLXCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'PRSFLXCONV',XPRSFLXCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'UMFCONV',   XUMFCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DMFCONV',   XDMFCONV)
+  CALL IO_Field_write(TPFILE,'PRLFLXCONV',XPRLFLXCONV)
+  CALL IO_Field_write(TPFILE,'PRSFLXCONV',XPRSFLXCONV)
+  CALL IO_Field_write(TPFILE,'UMFCONV',   XUMFCONV)
+  CALL IO_Field_write(TPFILE,'DMFCONV',   XDMFCONV)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -461,7 +461,7 @@ IF (LCLD_COV .AND. LUSERC) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !
 !  Higher top of the different species of clouds
 !
@@ -498,7 +498,7 @@ IF (LCLD_COV .AND. LUSERC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   ENDIF
 !
   TZFIELD%CMNHNAME   = 'TCL'
@@ -511,9 +511,9 @@ IF (LCLD_COV .AND. LUSERC) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'CLDFR',XCLDFR)
+  CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR)
 !
 !  Visibility                                    
 !
@@ -532,7 +532,7 @@ IF (LCLD_COV .AND. LUSERC) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   DEALLOCATE(IWORK1,IWORK2,ICL_HE_ST,GMASK2,ZWORK22)
 END IF
@@ -544,24 +544,24 @@ END IF
 !
 IF (NRAD_3D >= 0) THEN
   IF (CRAD /= 'NONE') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'DTHRAD',      XDTHRAD)
-    CALL IO_WRITE_FIELD(TPFILE,'FLALWD',      XFLALWD)
-    CALL IO_WRITE_FIELD(TPFILE,'DIRFLASWD',   XDIRFLASWD)
-    CALL IO_WRITE_FIELD(TPFILE,'SCAFLASWD',   XSCAFLASWD)
-    CALL IO_WRITE_FIELD(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
-    CALL IO_WRITE_FIELD(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
-    CALL IO_WRITE_FIELD(TPFILE,'ZENITH',      XZENITH)
-    CALL IO_WRITE_FIELD(TPFILE,'AZIM',        XAZIM)
-    CALL IO_WRITE_FIELD(TPFILE,'DIR_ALB',     XDIR_ALB)
-    CALL IO_WRITE_FIELD(TPFILE,'SCA_ALB',     XSCA_ALB)
+    CALL IO_Field_write(TPFILE,'DTHRAD',      XDTHRAD)
+    CALL IO_Field_write(TPFILE,'FLALWD',      XFLALWD)
+    CALL IO_Field_write(TPFILE,'DIRFLASWD',   XDIRFLASWD)
+    CALL IO_Field_write(TPFILE,'SCAFLASWD',   XSCAFLASWD)
+    CALL IO_Field_write(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
+    CALL IO_Field_write(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
+    CALL IO_Field_write(TPFILE,'ZENITH',      XZENITH)
+    CALL IO_Field_write(TPFILE,'AZIM',        XAZIM)
+    CALL IO_Field_write(TPFILE,'DIR_ALB',     XDIR_ALB)
+    CALL IO_Field_write(TPFILE,'SCA_ALB',     XSCA_ALB)
     !
     CALL PRINT_MSG(NVERB_INFO,'IO','WRITE_LFIFM1_FOR_DIAG_SUPP','EMIS: writing only first band')
     CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%NDIMS = 2
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XEMIS(:,:,1))
+    CALL IO_Field_write(TPFILE,TZFIELD,XEMIS(:,:,1))
     !
-    CALL IO_WRITE_FIELD(TPFILE,'TSRAD',       XTSRAD)
+    CALL IO_Field_write(TPFILE,'TSRAD',       XTSRAD)
   ELSE
     PRINT*,'YOU WANT DIAGNOSTICS RELATED TO RADIATION'
     PRINT*,' BUT NO RADIATIVE SCHEME WAS ACTIVATED IN THE MODEL'
@@ -585,7 +585,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !Dust optical depth
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -606,7 +606,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !Dust extinction (optical depth per km)
     DO JK=IKB,IKE
       IKRAD = JK - JPVEXT
@@ -622,7 +622,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
   IF (LSALT) THEN
 !Salt optical depth between two vertical levels
@@ -641,7 +641,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !Salt optical depth
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -662,7 +662,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !Salt extinction (optical depth per km)
     DO JK=IKB,IKE
       IKRAD = JK - JPVEXT
@@ -678,7 +678,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
   IF (LORILAM) THEN
 !Orilam anthropogenic optical depth between two vertical levels
@@ -697,7 +697,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !Orilam anthropogenic optical depth
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -718,7 +718,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !Orilam anthropogenic extinction (optical depth per km)
     DO JK=IKB,IKE
       IKRAD = JK - JPVEXT
@@ -734,7 +734,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 END IF
 !
@@ -756,7 +756,7 @@ IF (LCHEMDIAG) THEN
     TZFIELD%CMNHNAME   = 'FLX_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A,A)')'X_Y_Z_',TRIM(CNAMES(JSV-NSV_CHEMBEG+1)),' Net chemical flux'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9)
   END DO
 END IF
 !-------------------------------------------------------------------------------
@@ -817,7 +817,7 @@ IF (LEN_TRIM(CRAD_SAT) /= 0 .AND. NRR /=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZIRBT)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZIRBT)
     !
     TZFIELD%CMNHNAME   = TRIM(YNAM_SAT(JI))//'_WVBT'
     TZFIELD%CSTDNAME   = ''
@@ -829,7 +829,7 @@ IF (LEN_TRIM(CRAD_SAT) /= 0 .AND. NRR /=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWVBT)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWVBT)
   END DO
   DEALLOCATE(ZIRBT,ZWVBT)
 END IF
@@ -926,7 +926,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_ZON10M)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_ZON10M)
     !
     TZFIELD%CMNHNAME   = 'VM10'
     TZFIELD%CSTDNAME   = ''
@@ -938,7 +938,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_MER10M)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_MER10M)
   ENDIF
   !
   IF (SIZE(XTKET)>0) THEN
@@ -954,7 +954,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   IF(ANY(XCURRENT_SFCO2/=XUNDEF))THEN
@@ -968,7 +968,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_SFCO2)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SFCO2)
   END IF
   !
   IF(ANY(XCURRENT_SWD/=XUNDEF))THEN
@@ -982,7 +982,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_SWD)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SWD)
   END IF
   !
   IF(ANY(XCURRENT_SWU/=XUNDEF))THEN
@@ -996,7 +996,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_SWU)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SWU)
   END IF
 !
   IF(ANY(XCURRENT_LWD/=XUNDEF))THEN
@@ -1010,7 +1010,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_LWD)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWD)
   END IF
 !
   IF(ANY(XCURRENT_LWU/=XUNDEF))THEN
@@ -1024,7 +1024,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_LWD)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWD)
   END IF
 END IF
 
@@ -1083,7 +1083,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'K'
     TZFIELD%CCOMMENT   = 'X_Y_potential temperature '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 ! *********************
 ! Wind
@@ -1096,7 +1096,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_U component of wind '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
   !
   ZWORK31(:,:,:) = MYF(XVT(:,:,:))
@@ -1107,7 +1107,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_V component of wind '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 ! *********************
 ! Water Vapour Mixing Ratio
@@ -1119,7 +1119,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'g kg-1'
     TZFIELD%CCOMMENT   = 'X_Y_Vapor Mixing Ratio '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK)*1.E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK)*1.E3)
   END DO
 ! *********************
 ! Geopotential in meters
@@ -1132,7 +1132,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm'
     TZFIELD%CCOMMENT   = 'X_Y_ALTitude '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 !
   DEALLOCATE(ZWRES,ZPRES,ZWORK32,ZWORK33,ZWORK34)
@@ -1187,7 +1187,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'Pa'
     TZFIELD%CCOMMENT   = 'X_Y_pressure '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
 ! *********************
 ! Potential Vorticity
@@ -1215,7 +1215,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'PVU'
     TZFIELD%CCOMMENT   = 'X_Y_POtential VOrticity '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
 ! *********************
 ! Wind
@@ -1227,7 +1227,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_U component of wind '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
   !
   ZWORK31(:,:,:) = MYF(XVT(:,:,:))
@@ -1237,7 +1237,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_V component of wind '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
 !
   DEALLOCATE(ZWTH,ZTH,ZWORK32,ZWORK33,ZWORK34)
@@ -1280,7 +1280,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZAL)
 !
 !*       Standard Variables
 !
@@ -1301,7 +1301,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   END IF
 ! *********************
 ! Precipitation
@@ -1320,7 +1320,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   END IF
 ! *********************
 ! Pressure
@@ -1337,7 +1337,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
 ! *********************
 ! Potential Vorticity
 ! *********************
@@ -1370,7 +1370,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
 ! *********************
 ! Wind
 ! *********************
@@ -1387,7 +1387,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   !
   ZWORK31(:,:,:) = MYF(XVT(:,:,:))
   CALL ZINTER(ZWORK31, XZZ, ZWAL, ZAL, IIU, IJU, IKU, IKB, IAL, XUNDEF)
@@ -1402,7 +1402,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
 ! *********************
 ! Dust extinction (optical depth per km)
 ! *********************
@@ -1423,7 +1423,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   END IF
 !
 ! *********************
@@ -1465,7 +1465,7 @@ IF (LCOARSE) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !---------------------------------
 ! MOVING AVERAGE OF TKE OVER IDX+1 POINTS
   IDX = IDX/2
@@ -1495,7 +1495,7 @@ IF (LCOARSE) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -1517,7 +1517,7 @@ IF (NEQ_BUDGET>0) THEN
     TZFIELD%CMNHNAME   = TRIM(CNAMES_BUDGET(JSV))//'_BUDGET'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES_BUDGET(JSV))//'_BUDGET'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTCHEM(JSV)%XB_REAC(:,:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTCHEM(JSV)%XB_REAC(:,:,:,:))
   END DO
   !
   TZFIELD%CUNITS     = ''
@@ -1528,7 +1528,7 @@ IF (NEQ_BUDGET>0) THEN
     TZFIELD%CMNHNAME   = TRIM(CNAMES_BUDGET(JSV))//'_CHREACLIST'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = TRIM(CNAMES_BUDGET(JSV))//'_REACTION_LIST'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTCHEM(JSV)%NB_REAC(:))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTCHEM(JSV)%NB_REAC(:))
   END DO
 END IF
 !
@@ -1547,12 +1547,12 @@ IF (NEQ_PLT>0) THEN
     TZFIELD%CMNHNAME   = TRIM(CNAMES_PRODLOSST(JSV))//'_PROD'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES_PRODLOSST(JSV))//'_PROD'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPROD(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XPROD(:,:,:,JSV))
     !
     TZFIELD%CMNHNAME   = TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XLOSS(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XLOSS(:,:,:,JSV))
   END DO
 END IF
 !
diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90
index 528b58ed0d22e15f2cdb2ce885701ac41b29eb65..2e96502f1a4d3d4ac4a9472e35ce1bd522386d5c 100644
--- a/src/MNH/write_lfifmn_fordiachron.f90
+++ b/src/MNH/write_lfifmn_fordiachron.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #############################################
@@ -98,11 +98,11 @@ USE MODD_LUNIT_n
 USE MODD_TIME
 USE MODD_TYPE_DATE
 USE MODD_NESTING
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
-USE MODE_FMWRIT
 USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
 !
 IMPLICIT NONE
@@ -131,26 +131,26 @@ LPACK=.FALSE.
 !
 !*       1.0    Version :
 !
-CALL IO_WRITE_FIELD(TPFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TPFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TPFILE,'PACK',LPACK)
-CALL IO_WRITE_FIELD(TPFILE,'SURF',CSURF)
+CALL IO_Field_write(TPFILE,'L1D', L1D)
+CALL IO_Field_write(TPFILE,'L2D', L2D)
+CALL IO_Field_write(TPFILE,'PACK',LPACK)
+CALL IO_Field_write(TPFILE,'SURF',CSURF)
 !
 !*       1.1    Dimensions :
 !
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
+CALL IO_Field_write(TPFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_write(TPFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_write(TPFILE,'KMAX',NKMAX)
 !
-CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',JPHEXT)
+CALL IO_Field_write(TPFILE,'JPHEXT',JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-  CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-  CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
+  CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+  CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+  CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
   !
   !* diagnostic of 1st mass point
   !
@@ -162,47 +162,47 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
-  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
+  CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
+  CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
+CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_write(TPFILE,'LAT0',XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',XLON0)
+CALL IO_Field_write(TPFILE,'BETA',XBETA)
 !
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
+CALL IO_Field_write(TPFILE,'XHAT',XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',XYHAT)
+CALL IO_Field_write(TPFILE,'ZHAT',XZHAT)
+CALL IO_Field_write(TPFILE,'ZTOP',XZTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
-CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
+CALL IO_Field_write(TPFILE,'ZS',   XZS)
+CALL IO_Field_write(TPFILE,'ZSMT', XZSMT)
+CALL IO_Field_write(TPFILE,'SLEVE',LSLEVE)
 !
 IF (LSLEVE) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
-  CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
+  CALL IO_Field_write(TPFILE,'LEN1',XLEN1)
+  CALL IO_Field_write(TPFILE,'LEN2',XLEN2)
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
-CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
-CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
-CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
+CALL IO_Field_write(TPFILE,'DTMOD',TDTMOD)
+CALL IO_Field_write(TPFILE,'DTCUR',TDTCUR)
+CALL IO_Field_write(TPFILE,'DTEXP',TDTEXP)
+CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
-CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
 !
 !*       1.6    Reference state variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', XEXNTOP)
+CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHODREF',XRHODREF)
-CALL IO_WRITE_FIELD(TPFILE,'THVREF', XTHVREF)
+CALL IO_Field_write(TPFILE,'RHODREF',XRHODREF)
+CALL IO_Field_write(TPFILE,'THVREF', XTHVREF)
 !
 LPACK=GPACK
 !
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 43257ca72e5ab481765afe3cd87e47147b63b28d..75c4c6d8f0157264aa29c590de96ef8033ef9cd5 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE WRITE_LFIFM_n(TPFILE,HDADFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -169,7 +169,9 @@ END MODULE MODI_WRITE_LFIFM_n
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!       V. Vionnet    07/2017, add blowing snow variables
 !!       P.Wautelet    11/01/2019: bug correction in write XBL_DEPTH->XSBL_DEPTH
-!!                   
+!!       C.Lac         18/02/2019: 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 10/04/2019: replace ABORT and STOP calls by Print_msg
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -238,16 +240,16 @@ USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
 USE MODD_LIMA_PRECIP_SCAVENGING_n
 !
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
-USE MODE_FMWRIT
+USE MODE_IO_FILE,        only: IO_File_close
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_IO_ll, ONLY: UPCASE,CLOSE_ll
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_FIELD
 USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
+USE MODE_TOOLS, ONLY: UPCASE
 !
 USE MODI_WRITE_LB_n
 USE MODI_WRITE_BALLOON_n
@@ -339,29 +341,29 @@ IKE=IKU-JPVEXT
 !
 !*       1.0    File and HDADFILE writing :
 !
-CALL IO_WRITE_FIELD(TPFILE,'FILETYPE',TPFILE%CTYPE)
+CALL IO_Field_write(TPFILE,'FILETYPE',TPFILE%CTYPE)
 !
 IF (LEN_TRIM(HDADFILE)>0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'DXRATIO',NDXRATIO_ALL(IMI))
-  CALL IO_WRITE_FIELD(TPFILE,'DYRATIO',NDYRATIO_ALL(IMI))
-  CALL IO_WRITE_FIELD(TPFILE,'XOR',    NXOR_ALL(IMI))
-  CALL IO_WRITE_FIELD(TPFILE,'YOR',    NYOR_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'DXRATIO',NDXRATIO_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'DYRATIO',NDYRATIO_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'XOR',    NXOR_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'YOR',    NYOR_ALL(IMI))
 END IF
 !
 !*       1.1    Type and Dimensions :
 !
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
+CALL IO_Field_write(TPFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_write(TPFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_write(TPFILE,'KMAX',NKMAX)
 !
-CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',JPHEXT)
+CALL IO_Field_write(TPFILE,'JPHEXT',JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-  CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-  CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
+  CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+  CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+  CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
 ! 
 !* diagnostic of 1st mass point
 !
@@ -373,51 +375,54 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
-  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
+  CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
+  CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
 END IF 
 !
-CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
+CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_write(TPFILE,'LAT0',XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',XLON0)
+CALL IO_Field_write(TPFILE,'BETA',XBETA)
 !
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
+CALL IO_Field_write(TPFILE,'XHAT',XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',XYHAT)
+CALL IO_Field_write(TPFILE,'ZHAT',XZHAT)
+CALL IO_Field_write(TPFILE,'ZTOP',XZTOP)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT)
-  CALL IO_WRITE_FIELD(TPFILE,'LON',XLON)
+  CALL IO_Field_write(TPFILE,'LAT',XLAT)
+  CALL IO_Field_write(TPFILE,'LON',XLON)
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
-CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
+CALL IO_Field_write(TPFILE,'ZS',   XZS)
+IF(ASSOCIATED(XZWS)) THEN
+  CALL IO_Field_write(TPFILE,'ZWS',  XZWS)
+END IF
+CALL IO_Field_write(TPFILE,'ZSMT', XZSMT)
+CALL IO_Field_write(TPFILE,'SLEVE',LSLEVE)
 !
 IF (LSLEVE) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
-  CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
+  CALL IO_Field_write(TPFILE,'LEN1',XLEN1)
+  CALL IO_Field_write(TPFILE,'LEN2',XLEN2)
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
-CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
-CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
-CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
+CALL IO_Field_write(TPFILE,'DTMOD',TDTMOD)
+CALL IO_Field_write(TPFILE,'DTCUR',TDTCUR)
+CALL IO_Field_write(TPFILE,'DTEXP',TDTEXP)
+CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'L1D',      L1D)
-CALL IO_WRITE_FIELD(TPFILE,'L2D',      L2D)
-CALL IO_WRITE_FIELD(TPFILE,'PACK',     LPACK)
-CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
-CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'L1D',      L1D)
+CALL IO_Field_write(TPFILE,'L2D',      L2D)
+CALL IO_Field_write(TPFILE,'PACK',     LPACK)
+CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
 !
-CALL IO_WRITE_FIELD(TPFILE,'SURF',     CSURF)
-CALL IO_WRITE_FIELD(TPFILE,'CPL_AROME',LCPL_AROME)
-CALL IO_WRITE_FIELD(TPFILE,'COUPLING', LCOUPLING)
+CALL IO_Field_write(TPFILE,'SURF',     CSURF)
+CALL IO_Field_write(TPFILE,'CPL_AROME',LCPL_AROME)
+CALL IO_Field_write(TPFILE,'COUPLING', LCOUPLING)
 !
 !*       1.4    Prognostic variables :
 !
@@ -429,27 +434,27 @@ CALL IO_WRITE_FIELD(TPFILE,'COUPLING', LCOUPLING)
 !  CALL EXTRAPOL('E',XUT)
 !  CALL EXTRAPOL('N',XUT)
 !  CALL EXTRAPOL('S',XUT)
-CALL MPPDB_CHECK3D(XUT,"write_lfifmn before IO_WRITE_FIELD::XUT",PRECISION)
-CALL IO_WRITE_FIELD(TPFILE,'UT',XUT)
-CALL MPPDB_CHECK3D(XUT,"write_lfifmn after IO_WRITE_FIELD::XUT",PRECISION)
+CALL MPPDB_CHECK3D(XUT,"write_lfifmn before IO_Field_write::XUT",PRECISION)
+CALL IO_Field_write(TPFILE,'UT',XUT)
+CALL MPPDB_CHECK3D(XUT,"write_lfifmn after IO_Field_write::XUT",PRECISION)
 !
 !20131128 check XVT-> X_Y_W_V wind component for PRC
 CALL MPPDB_CHECK3D(XVT,"write_lfifmn::XVT",PRECISION)
 !
-CALL IO_WRITE_FIELD(TPFILE,'VT',XVT)
-CALL IO_WRITE_FIELD(TPFILE,'WT',XWT)
+CALL IO_Field_write(TPFILE,'VT',XVT)
+CALL IO_Field_write(TPFILE,'WT',XWT)
 !
-CALL IO_WRITE_FIELD(TPFILE,'THT',XTHT)
+CALL IO_Field_write(TPFILE,'THT',XTHT)
 !
 !*       1.4.2  Time t-dt:
 !
 IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'UM', XUM)
-  CALL IO_WRITE_FIELD(TPFILE,'VM', XVM)
-  CALL IO_WRITE_FIELD(TPFILE,'WM', XWM)
-  CALL IO_WRITE_FIELD(TPFILE,'DUM',XDUM)
-  CALL IO_WRITE_FIELD(TPFILE,'DVM',XDVM)
-  CALL IO_WRITE_FIELD(TPFILE,'DWM',XDWM)
+  CALL IO_Field_write(TPFILE,'UM', XUM)
+  CALL IO_Field_write(TPFILE,'VM', XVM)
+  CALL IO_Field_write(TPFILE,'WM', XWM)
+  CALL IO_Field_write(TPFILE,'DUM',XDUM)
+  CALL IO_Field_write(TPFILE,'DVM',XDVM)
+  CALL IO_Field_write(TPFILE,'DWM',XDWM)
 END IF
 !
 IF (MEAN_COUNT /= 0) THEN
@@ -467,20 +472,20 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind'
   ZWORK3D = XUM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'U2ME'
   TZFIELD%CLONGNAME  = 'U2ME'
   TZFIELD%CUNITS     = 'm2 s-2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind variance'
   ZWORK3D = XU2_MEAN/MEAN_COUNT-XUM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'UMMA'
   TZFIELD%CLONGNAME  = 'UMMA'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_U component of max wind'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XUM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XUM_MAX)
 !
   TZFIELD%NGRID      = 3
 !
@@ -489,20 +494,20 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind'
   ZWORK3D = XVM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'V2ME'
   TZFIELD%CLONGNAME  = 'V2ME'
   TZFIELD%CUNITS     = 'm2 s-2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind variance'
   ZWORK3D = XV2_MEAN/MEAN_COUNT-XVM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'VMMA'
   TZFIELD%CLONGNAME  = 'VMMA'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XVM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XVM_MAX)
 !
   TZFIELD%NGRID      = 4
 !
@@ -511,20 +516,20 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind'
   ZWORK3D = XWM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'W2ME'
   TZFIELD%CLONGNAME  = 'W2ME'
   TZFIELD%CUNITS     = 'm2 s-2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind variance'
   ZWORK3D = XW2_MEAN/MEAN_COUNT-XWM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'WMMA'
   TZFIELD%CLONGNAME  = 'WMMA'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical max wind'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XWM_MAX)
 !
   TZFIELD%NGRID      = 1
 !
@@ -533,60 +538,60 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature'
   ZWORK3D = XTHM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'TH2ME'
   TZFIELD%CLONGNAME  = 'TH2ME'
   TZFIELD%CUNITS     = 'K2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature variance'
   ZWORK3D = XTH2_MEAN/MEAN_COUNT-XTHM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'THMMA'
   TZFIELD%CLONGNAME  = 'THMMA'
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_max potential temperature'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XTHM_MAX)
 !
   TZFIELD%CMNHNAME   = 'TEMPMME'
   TZFIELD%CLONGNAME  = 'TEMPMME'
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature'
   ZWORK3D = XTEMPM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'TEMP2ME'
   TZFIELD%CLONGNAME  = 'TEMP2ME'
   TZFIELD%CUNITS     = 'K2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature variance'
   ZWORK3D = XTEMP2_MEAN/MEAN_COUNT-XTEMPM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'TEMPMMA'
   TZFIELD%CLONGNAME  = 'TEMPMMA'
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_max temperature'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTEMPM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XTEMPM_MAX)
 !
   TZFIELD%CMNHNAME   = 'PABSMME'
   TZFIELD%CLONGNAME  = 'PABSMME'
   TZFIELD%CUNITS     = 'Pa'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure'
   ZWORK3D = XPABSM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'PABS2ME'
   TZFIELD%CLONGNAME  = 'PABS2ME'
   TZFIELD%CUNITS     = 'Pa2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure variance'
   ZWORK3D = XPABS2_MEAN/MEAN_COUNT-XPABSM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'PABSMMA'
   TZFIELD%CLONGNAME  = 'PABSMMA'
   TZFIELD%CUNITS     = 'Pa'
   TZFIELD%CCOMMENT   = 'X_Y_Z_max ABSolute Pressure'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPABSM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPABSM_MAX)
 !
   IF (CTURB /= 'NONE') THEN
     TZFIELD%CMNHNAME   = 'TKEMME'
@@ -594,52 +599,52 @@ IF (MEAN_COUNT /= 0) THEN
     TZFIELD%CUNITS     = 'm2 s-2'
     TZFIELD%CCOMMENT   = 'X_Y_Z_mean kinetic energy'
     ZWORK3D= XTKEM_MEAN/MEAN_COUNT
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
     TZFIELD%CMNHNAME   = 'TKEMMA'
     TZFIELD%CLONGNAME  = 'TKEMMA'
     TZFIELD%CUNITS     = 'm2 s-2'
     TZFIELD%CCOMMENT   = 'X_Y_Z_max kinetic energy'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTKEM_MAX)
+    CALL IO_Field_write(TPFILE,TZFIELD,XTKEM_MAX)
   END IF
 !
 END IF
 !
 !
 IF (CTURB /= 'NONE') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'TKET',XTKET)
-  IF (CPROGRAM == 'MESONH' .AND. LSPLIT_CFL) CALL IO_WRITE_FIELD(TPFILE,'TKEMS',XRTKEMS)
+  CALL IO_Field_write(TPFILE,'TKET',XTKET)
+  IF (CPROGRAM == 'MESONH' .AND. LSPLIT_CFL) CALL IO_Field_write(TPFILE,'TKEMS',XRTKEMS)
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'PABST',XPABST)
+CALL IO_Field_write(TPFILE,'PABST',XPABST)
 !
 IF (NRR >=1) THEN
-  IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
+  IF (LUSERV) CALL IO_Field_write(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
   IF (LUSERC) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RCT',XRT(:,:,:,IDX_RCT))
+    CALL IO_Field_write(TPFILE,'RCT',XRT(:,:,:,IDX_RCT))
     WRITE (ILUOUT,*) IDX_RCT,' RC min-max ',MIN_ll(XRT(:,:,:,IDX_RCT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RCT),INFO_ll)
   END IF
   IF (LUSERR) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RRT',XRT(:,:,:,IDX_RRT))
+    CALL IO_Field_write(TPFILE,'RRT',XRT(:,:,:,IDX_RRT))
     WRITE (ILUOUT,*) IDX_RRT,' RR min-max ',MIN_ll(XRT(:,:,:,IDX_RRT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RRT),INFO_ll)
   END IF 
   IF (LUSERI) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RIT',XRT(:,:,:,IDX_RIT))
+    CALL IO_Field_write(TPFILE,'RIT',XRT(:,:,:,IDX_RIT))
     WRITE (ILUOUT,*) IDX_RIT,' RI min-max ',MIN_ll(XRT(:,:,:,IDX_RIT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RIT),INFO_ll)
     IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN
-      CALL IO_WRITE_FIELD(TPFILE,'CIT',XCIT(:,:,:))
+      CALL IO_Field_write(TPFILE,'CIT',XCIT(:,:,:))
     END IF
   END IF 
   IF (LUSERS) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RST',XRT(:,:,:,IDX_RST))
+    CALL IO_Field_write(TPFILE,'RST',XRT(:,:,:,IDX_RST))
     WRITE (ILUOUT,*) IDX_RST,' RS min-max ',MINVAL(XRT(:,:,:,IDX_RST)),MAXVAL(XRT(:,:,:,IDX_RST))
   END IF
   IF (LUSERG) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RGT',XRT(:,:,:,IDX_RGT))
+    CALL IO_Field_write(TPFILE,'RGT',XRT(:,:,:,IDX_RGT))
     WRITE (ILUOUT,*) IDX_RGT,' RG min-max ',MINVAL(XRT(:,:,:,IDX_RGT)),MAXVAL(XRT(:,:,:,IDX_RGT))
   END IF 
-  IF (LUSERH) CALL IO_WRITE_FIELD(TPFILE,'RHT',XRT(:,:,:,IDX_RHT))
+  IF (LUSERH) CALL IO_Field_write(TPFILE,'RHT',XRT(:,:,:,IDX_RHT))
 END IF
 !
 IF (NSV >=1) THEN
@@ -658,7 +663,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -676,7 +681,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -694,7 +699,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -765,7 +770,7 @@ IF (NSV >=1) THEN
     END IF
     !
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
 !
     JSA=JSA+1
   END DO
@@ -773,7 +778,7 @@ IF (NSV >=1) THEN
   IF (LSCAV .AND. LAERO_MASS) THEN
   IF (ASSOCIATED(XINPAP)) THEN
   IF (SIZE(XINPAP) /= 0 ) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'INPAP',XINPAP)
+    CALL IO_Field_write(TPFILE,'INPAP',XINPAP)
     !
     ZWORK2D(:,:)  = XRHOLW*XINPRR(:,:)*XSVT(:,:,2,NSV_LIMA_SCAVMASS)/ &
                                         max( 1.e-20,XRT(:,:,2,3) ) !~2=at ground level
@@ -787,9 +792,9 @@ IF (NSV >=1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
     !
-    CALL IO_WRITE_FIELD(TPFILE,'ACPAP',XACPAP)
+    CALL IO_Field_write(TPFILE,'ACPAP',XACPAP)
   END IF
   END IF
   END IF
@@ -815,15 +820,15 @@ IF (NSV >=1) THEN
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
       END IF
       ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
       JSA=JSA+1
     END DO
   END IF
   !
   IF (CELEC /= 'NONE') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'EFIELDU',XEFIELDU)
-    CALL IO_WRITE_FIELD(TPFILE,'EFIELDV',XEFIELDV)
-    CALL IO_WRITE_FIELD(TPFILE,'EFIELDW',XEFIELDW)
+    CALL IO_Field_write(TPFILE,'EFIELDU',XEFIELDU)
+    CALL IO_Field_write(TPFILE,'EFIELDV',XEFIELDV)
+    CALL IO_Field_write(TPFILE,'EFIELDW',XEFIELDW)
  !
     TZFIELD%CMNHNAME   = 'EMODULE'
     TZFIELD%CSTDNAME   = ''
@@ -836,34 +841,34 @@ IF (NSV >=1) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK3D(:,:,:) = (XEFIELDU**2 + XEFIELDV**2 + XEFIELDW**2)**0.5
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IAGGS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XNI_IAGGS*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XNI_IAGGS*1.E12)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IDRYG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XNI_IDRYG*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XNI_IDRYG*1.E12)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('NI_SDRYG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XNI_SDRYG*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XNI_SDRYG*1.E12)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('INDUC_CG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XIND_RATE*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XIND_RATE*1.E12)
  !
-    CALL IO_WRITE_FIELD(TPFILE,'TRIG_IC',   NMAP_TRIG_IC)
-    CALL IO_WRITE_FIELD(TPFILE,'IMPACT_CG', NMAP_IMPACT_CG)
-    CALL IO_WRITE_FIELD(TPFILE,'AREA_CG',   NMAP_2DAREA_CG)
-    CALL IO_WRITE_FIELD(TPFILE,'AREA_IC',   NMAP_2DAREA_IC)
-    CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DCG',NMAP_3DCG)
-    CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DIC',NMAP_3DIC)
+    CALL IO_Field_write(TPFILE,'TRIG_IC',   NMAP_TRIG_IC)
+    CALL IO_Field_write(TPFILE,'IMPACT_CG', NMAP_IMPACT_CG)
+    CALL IO_Field_write(TPFILE,'AREA_CG',   NMAP_2DAREA_CG)
+    CALL IO_Field_write(TPFILE,'AREA_IC',   NMAP_2DAREA_IC)
+    CALL IO_Field_write(TPFILE,'FLASH_3DCG',NMAP_3DCG)
+    CALL IO_Field_write(TPFILE,'FLASH_3DIC',NMAP_3DIC)
  !
     IF (LLNOX_EXPLICIT) THEN
       TZFIELD%CMNHNAME   = 'LINOX'
@@ -876,7 +881,7 @@ IF (NSV >=1) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,NSV_LNOXEND))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,NSV_LNOXEND))
       JSA=JSA+1
     END IF
   END IF
@@ -894,7 +899,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -912,18 +917,18 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
 !
   IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. (.NOT. LSUPSAT)) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'SUPSATMAX',XSUPSAT(:,:,:))
-    CALL IO_WRITE_FIELD(TPFILE,'NACT',     XNACT(:,:,:))
+    CALL IO_Field_write(TPFILE,'SUPSATMAX',XSUPSAT(:,:,:))
+    CALL IO_Field_write(TPFILE,'NACT',     XNACT(:,:,:))
   END IF
   IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. LSUPSAT) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'SSPRO',XSSPRO(:,:,:))
-    CALL IO_WRITE_FIELD(TPFILE,'NPRO', XNPRO(:,:,:))
+    CALL IO_Field_write(TPFILE,'SSPRO',XSSPRO(:,:,:))
+    CALL IO_Field_write(TPFILE,'NPRO', XNPRO(:,:,:))
   END IF
 !
 #ifdef MNH_FOREFIRE
@@ -941,7 +946,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -959,7 +964,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME=TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
     TZFIELD%CSTDNAME   = ''
@@ -973,7 +978,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)')'X_Y_Z_','SNOWCANO',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWCANO(:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSNWCANO(:,:,JSV))
       JSA=JSA+1
     END DO
   ENDIF
@@ -991,7 +996,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   !
@@ -1024,7 +1029,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ppp'
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       !
       YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without T
     END DO
@@ -1035,7 +1040,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CUNITS     = 'ppp'
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         !
         YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without M
       END DO
@@ -1048,14 +1053,14 @@ IF (NSV >=1) THEN
         TZFIELD%CUNITS     = 'mol i m-2'
         TZFIELD%CCOMMENT   = 'X_Y_Accumulated moles of aqueous species at the surface'
         ZWORK2D(:,:)  = XACPRAQ(:,:,JSV-NSV_CHACBEG-NSV_CHAC/2+1)
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+        CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       END DO
       TZFIELD%NDIMS = 3
     END IF
     IF (LUSECHAQ.AND.LCH_PH) THEN  ! pH values in cloud
-      CALL IO_WRITE_FIELD(TPFILE,'PHC',XPHC)
+      CALL IO_Field_write(TPFILE,'PHC',XPHC)
       IF (NRR>=3) THEN
-        CALL IO_WRITE_FIELD(TPFILE,'PHR',XPHR)
+        CALL IO_Field_write(TPFILE,'PHR',XPHR)
         ! compute mean pH in accumulated surface water
         !ZWORK2D(:,:) = 10**(-XCH_PHINIT)
         WHERE (XACPRR > 0.)
@@ -1075,7 +1080,7 @@ IF (NSV >=1) THEN
         TZFIELD%NGRID      = 1
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 2
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+        CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       ENDIF
     ENDIF
   ELSE IF (LCH_CONV_LINOX) THEN
@@ -1091,7 +1096,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = 'LINOXT'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
     END DO
   ENDIF  
@@ -1114,7 +1119,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_AERBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERBEG ',JSV
         IF (JSV==NSV_AEREND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AEREND ',JSV
         YCHNAMES(JSV-JSA)=  TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1133,7 +1138,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_AERDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPBEG ',JSV
         IF (JSV==NSV_AERDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1155,12 +1160,9 @@ IF (NSV >=1) THEN
       IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1)/NMODE_DST  
       !Should equal 3 at this point
       IF (IMOMENTS > 3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must equal or inferior to 3'
+        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be less or equal to 3'
         WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
- !callabortstop
-        CALL IO_FILE_CLOSE_ll(TLUOUT)
-        CALL ABORT
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LFIFM_n', 'number of moments must be less or equal to 3' )
       END IF ! Test IMOMENTS
       ALLOCATE(YDSTNAMES(NSV_DSTEND - NSV_DSTBEG+1))
       !
@@ -1181,7 +1183,7 @@ IF (NSV >=1) THEN
           TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+          CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
           YDSTNAMES((JMODE-1)*IMOMENTS+1)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
         END DO ! Loop on mode
       ELSE
@@ -1194,7 +1196,7 @@ IF (NSV >=1) THEN
             TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-            CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+            CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
             YDSTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
           END DO ! Loop on moment
         END DO ! loop on mode
@@ -1220,7 +1222,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_DSTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTBEG ',JSV
         IF (JSV==NSV_DSTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1239,7 +1241,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_DSTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPBEG ',JSV
         IF (JSV==NSV_DSTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1249,9 +1251,9 @@ IF (NSV >=1) THEN
   ! sea salt scalar variables
   IF (LSALT) THEN
     IF ((CPROGRAM == 'REAL  ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT)) &
-      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
+      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
     IF ((CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
-      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
+      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
     !At this point, we have the tracer array in order of importance, i.e.
     !if mode 2 is most important it will occupy place 1-3 of XSVT  
     IF (((CPROGRAM == 'REAL  ').AND.(LSLTINIT)).OR.&
@@ -1261,12 +1263,9 @@ IF (NSV >=1) THEN
       IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1)/NMODE_SLT  
       !Should equal 3 at this point
       IF (IMOMENTS .NE. 3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
+        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be equal to 3'
         WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
- !callabortstop
-        CALL IO_FILE_CLOSE_ll(TLUOUT)
-        CALL ABORT
-        STOP
+        call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LFIFM_n', 'number of moments must be equal to 3' )
       END IF
       ALLOCATE(YSLTNAMES(NSV_SLTEND - NSV_SLTBEG+1))
       TZFIELD%CSTDNAME   = ''
@@ -1288,7 +1287,7 @@ IF (NSV >=1) THEN
           TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+          CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
           YSLTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
         END DO ! Loop on moments
       END DO   ! Loop on modes
@@ -1312,7 +1311,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_SLTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTBEG ',JSV
         IF (JSV==NSV_SLTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1331,7 +1330,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_SLTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPBEG ',JSV
         IF (JSV==NSV_SLTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1352,7 +1351,7 @@ IF (NSV >=1) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICH_NBR)
+  CALL IO_Field_write(TPFILE,TZFIELD,ICH_NBR)
   !
   IF (ICH_NBR/=0) THEN
     TZFIELD%CMNHNAME   = 'NSV.TITRE'
@@ -1373,7 +1372,7 @@ IF (NSV >=1) THEN
         ICH_NAMES(ILREC*(JSV-1)+JT) = ICHAR(YCHNAMES(JSV)(JT:JT))
       ENDDO
     ENDDO
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICH_NAMES)
+    CALL IO_Field_write(TPFILE,TZFIELD,ICH_NAMES)
     DEALLOCATE(YCHNAMES,ICH_NAMES)
   END IF 
   !
@@ -1391,66 +1390,66 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
     END DO
   END IF
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'LSUM', XLSUM)
-CALL IO_WRITE_FIELD(TPFILE,'LSVM', XLSVM)
-CALL IO_WRITE_FIELD(TPFILE,'LSWM', XLSWM)
-CALL IO_WRITE_FIELD(TPFILE,'LSTHM',XLSTHM)
-IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'LSRVM',XLSRVM)
+CALL IO_Field_write(TPFILE,'LSUM', XLSUM)
+CALL IO_Field_write(TPFILE,'LSVM', XLSVM)
+CALL IO_Field_write(TPFILE,'LSWM', XLSWM)
+CALL IO_Field_write(TPFILE,'LSTHM',XLSTHM)
+IF (LUSERV) CALL IO_Field_write(TPFILE,'LSRVM',XLSRVM)
 !
 CALL WRITE_LB_n(TPFILE)
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'DRYMASST',XDRYMASST)
+CALL IO_Field_write(TPFILE,'DRYMASST',XDRYMASST)
 !
 IF( CTURB /= 'NONE' .AND. CTOM=='TM06') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'BL_DEPTH',XBL_DEPTH)
+  CALL IO_Field_write(TPFILE,'BL_DEPTH',XBL_DEPTH)
 END IF
 !
 IF( CTURB /= 'NONE' .AND. LRMC01) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'SBL_DEPTH',XSBL_DEPTH)
+  CALL IO_Field_write(TPFILE,'SBL_DEPTH',XSBL_DEPTH)
 END IF
 !
 IF( CTURB /= 'NONE' .AND. CSCONV == 'EDKF' .AND.(CPROGRAM == 'MESONH' .OR. CPROGRAM == 'DIAG')) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'WTHVMF',XWTHVMF)
+  CALL IO_Field_write(TPFILE,'WTHVMF',XWTHVMF)
 END IF
 !
 IF( NRR > 1 .AND. CTURB /= 'NONE' ) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'SRCT',XSRCT)
-  CALL IO_WRITE_FIELD(TPFILE,'SIGS',XSIGS)
+  CALL IO_Field_write(TPFILE,'SRCT',XSRCT)
+  CALL IO_Field_write(TPFILE,'SIGS',XSIGS)
 END IF
 !
 !*       1.5    Reference state variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', XEXNTOP)
+CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
 !
 !
 !*       1.6  Tendencies                                         
 !
 IF (CPROGRAM == 'MESONH') THEN
   IF (CTEMP_SCHEME/='LEFR') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'US_PRES',XRUS_PRES)
-    CALL IO_WRITE_FIELD(TPFILE,'VS_PRES',XRVS_PRES)
-    CALL IO_WRITE_FIELD(TPFILE,'WS_PRES',XRWS_PRES)
+    CALL IO_Field_write(TPFILE,'US_PRES',XRUS_PRES)
+    CALL IO_Field_write(TPFILE,'VS_PRES',XRVS_PRES)
+    CALL IO_Field_write(TPFILE,'WS_PRES',XRWS_PRES)
   END IF
   IF (LSPLIT_CFL) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'THS_CLD',XRTHS_CLD)
+    CALL IO_Field_write(TPFILE,'THS_CLD',XRTHS_CLD)
 !
     IF (NRR >=1) THEN
-      IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'RVS_CLD',XRRS_CLD(:,:,:,IDX_RVT))
-      IF (LUSERC) CALL IO_WRITE_FIELD(TPFILE,'RCS_CLD',XRRS_CLD(:,:,:,IDX_RCT))
-      IF (LUSERR) CALL IO_WRITE_FIELD(TPFILE,'RRS_CLD',XRRS_CLD(:,:,:,IDX_RRT))
-      IF (LUSERI) CALL IO_WRITE_FIELD(TPFILE,'RIS_CLD',XRRS_CLD(:,:,:,IDX_RIT))
-      IF (LUSERS) CALL IO_WRITE_FIELD(TPFILE,'RSS_CLD',XRRS_CLD(:,:,:,IDX_RST))
-      IF (LUSERG) CALL IO_WRITE_FIELD(TPFILE,'RGS_CLD',XRRS_CLD(:,:,:,IDX_RGT))
-      IF (LUSERH) CALL IO_WRITE_FIELD(TPFILE,'RHS_CLD',XRRS_CLD(:,:,:,IDX_RHT))
+      IF (LUSERV) CALL IO_Field_write(TPFILE,'RVS_CLD',XRRS_CLD(:,:,:,IDX_RVT))
+      IF (LUSERC) CALL IO_Field_write(TPFILE,'RCS_CLD',XRRS_CLD(:,:,:,IDX_RCT))
+      IF (LUSERR) CALL IO_Field_write(TPFILE,'RRS_CLD',XRRS_CLD(:,:,:,IDX_RRT))
+      IF (LUSERI) CALL IO_Field_write(TPFILE,'RIS_CLD',XRRS_CLD(:,:,:,IDX_RIT))
+      IF (LUSERS) CALL IO_Field_write(TPFILE,'RSS_CLD',XRRS_CLD(:,:,:,IDX_RST))
+      IF (LUSERG) CALL IO_Field_write(TPFILE,'RGS_CLD',XRRS_CLD(:,:,:,IDX_RGT))
+      IF (LUSERH) CALL IO_Field_write(TPFILE,'RHS_CLD',XRRS_CLD(:,:,:,IDX_RHT))
     END IF 
   END IF
 END IF 
@@ -1469,7 +1468,7 @@ END IF
 !       TZFIELD%NTYPE      = TYPEREAL
 !       TZFIELD%NDIMS      = 3
 !       TZFIELD%LTIMEDEP   = .TRUE.
-!       CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
+!       CALL IO_Field_write(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
 !     END IF
 !     IF (JSV == NSV_C2R2END ) THEN
 !       TZFIELD%CMNHNAME   = 'RSVS_CLD2'
@@ -1482,7 +1481,7 @@ END IF
 !       TZFIELD%NTYPE      = TYPEREAL
 !       TZFIELD%NDIMS      = 3
 !       TZFIELD%LTIMEDEP   = .TRUE.
-!       CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
+!       CALL IO_Field_write(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
 !     END IF
 !    END DO
 ! END IF
@@ -1492,31 +1491,32 @@ END IF
 !
 !
 IF (CRAD /= 'NONE') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'DTRAD_FULL',TDTRAD_FULL)
-  CALL IO_WRITE_FIELD(TPFILE,'DTRAD_CLLY',TDTRAD_CLONLY)
-!
-  CALL IO_WRITE_FIELD(TPFILE,'DTHRAD',      XDTHRAD)
-  CALL IO_WRITE_FIELD(TPFILE,'FLALWD',      XFLALWD)
-  CALL IO_WRITE_FIELD(TPFILE,'DIRFLASWD',   XDIRFLASWD)
-  CALL IO_WRITE_FIELD(TPFILE,'SCAFLASWD',   XSCAFLASWD)
-  CALL IO_WRITE_FIELD(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
-  CALL IO_WRITE_FIELD(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
-  CALL IO_WRITE_FIELD(TPFILE,'ZENITH',      XZENITH)
-  CALL IO_WRITE_FIELD(TPFILE,'AZIM',        XAZIM)
-  CALL IO_WRITE_FIELD(TPFILE,'DIR_ALB',     XDIR_ALB)
-  CALL IO_WRITE_FIELD(TPFILE,'SCA_ALB',     XSCA_ALB)
+  CALL IO_Field_write(TPFILE,'DTRAD_FULL',TDTRAD_FULL)
+  CALL IO_Field_write(TPFILE,'DTRAD_CLLY',TDTRAD_CLONLY)
+!
+  CALL IO_Field_write(TPFILE,'DTHRAD',      XDTHRAD)
+  CALL IO_Field_write(TPFILE,'FLALWD',      XFLALWD)
+  CALL IO_Field_write(TPFILE,'DIRFLASWD',   XDIRFLASWD)
+  CALL IO_Field_write(TPFILE,'SCAFLASWD',   XSCAFLASWD)
+  CALL IO_Field_write(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
+  CALL IO_Field_write(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
+  CALL IO_Field_write(TPFILE,'ZENITH',      XZENITH)
+  CALL IO_Field_write(TPFILE,'AZIM',        XAZIM)
+  CALL IO_Field_write(TPFILE,'DIR_ALB',     XDIR_ALB)
+  CALL IO_Field_write(TPFILE,'SCA_ALB',     XSCA_ALB)
   !
   CALL PRINT_MSG(NVERB_INFO,'IO','WRITE_LFIFM_n','EMIS: writing only first band')
   CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%NDIMS = 2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XEMIS(:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,XEMIS(:,:,1))
   !
-  CALL IO_WRITE_FIELD(TPFILE,'TSRAD',       XTSRAD)
+  CALL IO_Field_write(TPFILE,'TSRAD',       XTSRAD)
 ENDIF
 !
 IF (NRR > 1 .AND. CPROGRAM == 'MESONH') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'CLDFR',XCLDFR)
+  CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR)
+  CALL IO_Field_write(TPFILE,'RAINFR',XRAINFR)
 END IF
 !
 !
@@ -1527,33 +1527,33 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
 !
 ! 
 !
-  CALL IO_WRITE_FIELD(TPFILE,'DTDCONV',  TDTDCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'COUNTCONV',NCOUNTCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DTHCONV',  XDTHCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRVCONV',  XDRVCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRCCONV',  XDRCCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRICONV',  XDRICONV)
+  CALL IO_Field_write(TPFILE,'DTDCONV',  TDTDCONV)
+  CALL IO_Field_write(TPFILE,'COUNTCONV',NCOUNTCONV)
+  CALL IO_Field_write(TPFILE,'DTHCONV',  XDTHCONV)
+  CALL IO_Field_write(TPFILE,'DRVCONV',  XDRVCONV)
+  CALL IO_Field_write(TPFILE,'DRCCONV',  XDRCCONV)
+  CALL IO_Field_write(TPFILE,'DRICONV',  XDRICONV)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRCONV*3.6E6)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPRCONV*3.6E6)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPACCONV*1.0E3)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPACCONV*1.0E3)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRSCONV*3.6E6)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPRSCONV*3.6E6)
 !
   IF ( LCH_CONV_LINOX ) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'IC_RATE',    XIC_RATE)
-    CALL IO_WRITE_FIELD(TPFILE,'CG_RATE',    XCG_RATE)
-    CALL IO_WRITE_FIELD(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
-    CALL IO_WRITE_FIELD(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
+    CALL IO_Field_write(TPFILE,'IC_RATE',    XIC_RATE)
+    CALL IO_Field_write(TPFILE,'CG_RATE',    XCG_RATE)
+    CALL IO_Field_write(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
+    CALL IO_Field_write(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
   END IF
 !
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
@@ -1571,31 +1571,31 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C2R2BEG, NSV_C2R2END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C1R3BEG, NSV_C1R3END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_ELECBEG, NSV_ELECEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_PPBEG, NSV_PPEND
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
 #ifdef MNH_FOREFIRE
     IF (LFOREFIRE) THEN
@@ -1603,7 +1603,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
         WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
 #endif
@@ -1612,14 +1612,14 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
       IF (LORILAM) THEN
         DO JSV = NSV_AERBEG, NSV_AEREND
           TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+          CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
         END DO
       END IF
 ! linox scalar variables
@@ -1628,26 +1628,26 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_LINOX'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     DO JSV = NSV_LGBEG, NSV_LGEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_DSTBEG, NSV_DSTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_SLTBEG, NSV_SLTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
   END IF
 !
@@ -1662,12 +1662,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRC*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRC*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRC*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRC*1.0E3)
 !
   ENDIF
   ENDIF
@@ -1677,12 +1677,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINDEP*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINDEP*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACDEP*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACDEP*1.0E3)
 !
   ENDIF
   ENDIF
@@ -1692,15 +1692,15 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRR*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRR*3.6E6)
 !
-    CALL IO_WRITE_FIELD(TPFILE,'INPRR3D',XINPRR3D)
-    CALL IO_WRITE_FIELD(TPFILE,'EVAP3D', XEVAP3D)
+    CALL IO_Field_write(TPFILE,'INPRR3D',XINPRR3D)
+    CALL IO_Field_write(TPFILE,'EVAP3D', XEVAP3D)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRR*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRR*1.0E3)
 !
   ENDIF
   ENDIF
@@ -1710,12 +1710,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRS*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRS*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRS*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRS*1.0E3)
   END IF
   END IF
 !
@@ -1724,12 +1724,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRG*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRG*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRG*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRG*1.0E3)
   END IF
   END IF
 !
@@ -1738,12 +1738,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRH*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRH*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRH*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRH*1.0E3)
   ENDIF
   ENDIF
 !
@@ -1756,7 +1756,7 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D*3.6E6)
 !
     ZWORK2D = XACPRR + XACPRS
     IF (SIZE(XINPRG) /= 0 ) ZWORK2D = ZWORK2D + XACPRG
@@ -1765,7 +1765,7 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D*1.0E3)
   END IF
   END IF
 !
@@ -1784,7 +1784,7 @@ IF(LBLOWSNOW) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
       ZWORK2D(:,:) = 0.
       DO JK = IKB,IKE
         ZWORK2D(:,:) = ZWORK2D(:,:)+XSNWSUBL3D(:,:,JK) * &
@@ -1802,7 +1802,7 @@ IF(LBLOWSNOW) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 2
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D(:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D(:,:))
     END IF
   END IF
 ENDIF
@@ -1812,7 +1812,7 @@ ENDIF
 !
 IF (LFORCING) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'FRC',NFRC)
+  CALL IO_Field_write(TPFILE,'FRC',NFRC)
 !
   DO JT=1,NFRC
 !
@@ -1828,7 +1828,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TDTFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,TDTFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'UFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1840,7 +1840,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XUFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'VFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1852,7 +1852,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'WFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1864,7 +1864,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XWFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'THFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1876,7 +1876,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1888,7 +1888,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1900,7 +1900,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1912,7 +1912,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1924,7 +1924,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGXTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGXTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1936,7 +1936,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGYTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGYTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1948,7 +1948,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPGROUNDFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XPGROUNDFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'TENDUFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1960,7 +1960,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDUFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1972,7 +1972,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDVFRC(:,JT))
 !
   END DO
 !
@@ -1992,7 +1992,7 @@ IF ( L2D_ADV_FRC ) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NADVFRC)
+  CALL IO_Field_write(TPFILE,TZFIELD,NADVFRC)
 !
   DO JT=1,NADVFRC
 !
@@ -2008,7 +2008,7 @@ IF ( L2D_ADV_FRC ) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TDTADVFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,TDTADVFRC(JT))
 !                                                                
     TZFIELD%CMNHNAME   = 'TH_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2020,7 +2020,7 @@ IF ( L2D_ADV_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDTHFRC(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XDTHFRC(:,:,:,JT))
 !    
     TZFIELD%CMNHNAME   = 'Q_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2032,7 +2032,7 @@ IF ( L2D_ADV_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDRVFRC(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XDRVFRC(:,:,:,JT))
 !
   ENDDO
 ENDIF
@@ -2049,7 +2049,7 @@ IF ( L2D_REL_FRC ) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NRELFRC)
+  CALL IO_Field_write(TPFILE,TZFIELD,NRELFRC)
 !
   DO JT=1,NRELFRC
 !
@@ -2065,7 +2065,7 @@ IF ( L2D_REL_FRC ) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TDTRELFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,TDTRELFRC(JT))
 !                                                                
     TZFIELD%CMNHNAME   = 'TH_REL'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2077,7 +2077,7 @@ IF ( L2D_REL_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHREL(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTHREL(:,:,:,JT))
 !    
     TZFIELD%CMNHNAME   = 'Q_REL'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2089,7 +2089,7 @@ IF ( L2D_REL_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRVREL(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRVREL(:,:,:,JT))
 !
   ENDDO
 ENDIF
@@ -2097,11 +2097,11 @@ ENDIF
 !*       1.11bis   Eddy Fluxes variables    ! Modif PP
 !
 IF ( LTH_FLX ) THEN
-   CALL IO_WRITE_FIELD(TPFILE,'VT_FLX',XVTH_FLUX_M)
-   CALL IO_WRITE_FIELD(TPFILE,'WT_FLX',XWTH_FLUX_M)
+   CALL IO_Field_write(TPFILE,'VT_FLX',XVTH_FLUX_M)
+   CALL IO_Field_write(TPFILE,'WT_FLX',XWTH_FLUX_M)
 END IF
 !
-IF ( LUV_FLX) CALL IO_WRITE_FIELD(TPFILE,'VU_FLX',XVU_FLUX_M)
+IF ( LUV_FLX) CALL IO_Field_write(TPFILE,'VU_FLX',XVU_FLUX_M)
 !
 !*       1.12   Balloon variables
 !
@@ -2119,36 +2119,36 @@ IF ( CPROGRAM=='REAL  ' ) THEN
 !
 !             i) Total fields (TOT=BASIC+TOTDIS)
 !
-      CALL IO_WRITE_FIELD(TPFILE,'UT15',   XUTOT)
-      CALL IO_WRITE_FIELD(TPFILE,'VT15',   XVTOT)
-      CALL IO_WRITE_FIELD(TPFILE,'TEMPTOT',XTTOT)
-      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESTOT',XPTOT)
-      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMTOT', XQTOT)
+      CALL IO_Field_write(TPFILE,'UT15',   XUTOT)
+      CALL IO_Field_write(TPFILE,'VT15',   XVTOT)
+      CALL IO_Field_write(TPFILE,'TEMPTOT',XTTOT)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_Field_write(TPFILE,'PRESTOT',XPTOT)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_Field_write(TPFILE,'HUMTOT', XQTOT)
 !
 !             ii) Environmental fields (ENV=TOT-VORDIS)
 !
-      CALL IO_WRITE_FIELD(TPFILE,'UT16',   XUENV)
-      CALL IO_WRITE_FIELD(TPFILE,'VT16',   XVENV)
-      CALL IO_WRITE_FIELD(TPFILE,'TEMPENV',XTENV)
-      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESENV',XPENV)
-      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMENV', XQENV)
+      CALL IO_Field_write(TPFILE,'UT16',   XUENV)
+      CALL IO_Field_write(TPFILE,'VT16',   XVENV)
+      CALL IO_Field_write(TPFILE,'TEMPENV',XTENV)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_Field_write(TPFILE,'PRESENV',XPENV)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_Field_write(TPFILE,'HUMENV', XQENV)
 !
     END IF
     IF (NDIAG_FILT >=1) THEN
 !
 !             iii) Basic (filtered) fields
 !
-      CALL IO_WRITE_FIELD(TPFILE,'UT17',   XUBASIC)
-      CALL IO_WRITE_FIELD(TPFILE,'VT17',   XVBASIC)
-      CALL IO_WRITE_FIELD(TPFILE,'TEMPBAS',XTBASIC)
-      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESBAS',XPBASIC)
-      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMBAS', XQBASIC)
+      CALL IO_Field_write(TPFILE,'UT17',   XUBASIC)
+      CALL IO_Field_write(TPFILE,'VT17',   XVBASIC)
+      CALL IO_Field_write(TPFILE,'TEMPBAS',XTBASIC)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_Field_write(TPFILE,'PRESBAS',XPBASIC)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_Field_write(TPFILE,'HUMBAS', XQBASIC)
     END IF
     IF (NDIAG_FILT >=2) THEN
 !
 !             iv) Total disturbance tangential wind
 !
-      CALL IO_WRITE_FIELD(TPFILE,'VTDIS',XVTDIS)
+      CALL IO_Field_write(TPFILE,'VTDIS',XVTDIS)
 !
     END IF
 !
@@ -2169,7 +2169,7 @@ IF ( CPROGRAM=='REAL  ' ) THEN
       TZFIELD%CMNHNAME   = ADJUSTL(CDUMMY_2D(JSA))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDUMMY_2D(:,:,JSA))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDUMMY_2D(:,:,JSA))
     END DO
   END IF
 !
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index a011479a3aec3833065e4a014f0e5f86ffd64fe6..b70fe68aa07c4e64b9abf90081b591f66930374d 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
@@ -67,7 +67,7 @@ END MODULE MODI_WRITE_PROFILER_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90
index 9a0430e09585b8fbff097e61394abc09802a8db1..d4851b5a335e5f7b4b1e0c208a61ee9499ef5cd4 100644
--- a/src/MNH/write_seriesn.f90
+++ b/src/MNH/write_seriesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !########################
@@ -13,7 +13,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_SERIES_n(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
 !
@@ -67,14 +67,13 @@ END MODULE MODI_WRITE_SERIES_n
 !*    0. Declaration
 !     --------------
 ! 
-USE MODD_IO_ll,   ONLY: NGEN_VERB,TFILEDATA
+USE MODD_IO,      ONLY: NGEN_VERB, TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 USE MODD_SERIES
 USE MODD_SERIES_n
 !
 USE MODE_GATHER_ll
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index 2a67c0fa17ab93dbc644751da8d13850fb9a607e..92722fe09c8748365494f66fe7cd59f0728b584a 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-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.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_STATION_n(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
@@ -64,7 +64,7 @@ END MODULE MODI_WRITE_STATION_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90
index 9455eaa0abd81d933ee279cd48b0e1fc649def38..2fb2021b5e149b35978a03228e44c19f23c3d528 100644
--- a/src/MNH/write_surf_mnh.f90
+++ b/src/MNH/write_surf_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1997-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1997-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 MODE_WRITE_SURF_MNH_TOOLS
@@ -171,15 +171,15 @@ END MODULE MODE_WRITE_SURF_MNH_TOOLS
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF,          ONLY: CPROGRAM
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
+USE MODD_CONF,           ONLY: CPROGRAM
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
 USE MODD_GRID
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
+USE MODD_IO,             ONLY: TFILE_SURFEX
 !
 IMPLICIT NONE
 !
@@ -209,7 +209,7 @@ IF( ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA'  &
 ELSE
   !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEREAL,0,'WRITE_SURFX0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,PFIELD,KRESP)
   !
   IF (TRIM(CPROGRAM)=='PGD') THEN
     !Store these variables (necessary for PREP_PGD program when writing netCDF files)
@@ -276,20 +276,21 @@ END SUBROUTINE WRITE_SURFX0_MNH
 !!
 !!      original                                                     01/08/03
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!  P. Wautelet 01/02/2019: bug: forgotten if for iib=iie and XX (same as for YY)
 !----------------------------------------------------------------------------
 !
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
+USE MODE_FIELD,          ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_TOOLS_ll
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
 USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
 USE MODD_GRID_n,        ONLY: XXHAT, XYHAT
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
+USE MODD_IO,            ONLY: TFILE_SURFEX
 USE MODD_IO_SURF_MNH,   ONLY :NMASK, CMASK,                          &
                               NIU, NJU, NIB, NJB, NIE, NJE,          &
                               NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
@@ -412,7 +413,7 @@ END IF
 
  CALL GET_SURF_UNDEF(ZUNDEF)
  WHERE (ZWORK==ZUNDEF) ZWORK=XUNDEF
-!
+ !
 !! Add cases in 2D (IJB=IJE) and 1D (IJB=IJE and IIB=IIE) 
 !! to write the correct mesh
 IF (      (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
@@ -425,7 +426,7 @@ IF (      (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
       ZW1D(      J1D) = 2. * ZW1D(J1D+1)   - ZW1D(J1D+2)
       ZW1D(IIU+1-J1D) = 2. * ZW1D(IIU-J1D) - ZW1D(IIU-J1D-1)
     END DO
-  ELSE IF (IIB==IIE .AND. HREC=='DX') THEN
+  ELSE IF (IIB==IIE .AND. (HREC=='DX' .OR. HREC=='XX')) THEN
     ZW1D(IIB-1) = - 0.5 * ZWORK(IIB,1+JPHEXT)
     ZW1D(IIB)   =   0.5 * ZWORK(IIB,1+JPHEXT)
     ZW1D(IIB+1) =   1.5 * ZWORK(IIB,1+JPHEXT)
@@ -435,11 +436,11 @@ IF (      (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CDIR  = '--'
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
   END IF
   IF (HDIR=='H') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IIU-NHALO),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IIU-NHALO),KRESP)
     IF (.NOT. (ASSOCIATED(XXHAT))) THEN
       !Store XXHAT if not yet done (necessary for PREP_PGD program when writing netCDF files)
       ALLOCATE(XXHAT(IIU-2*NHALO))
@@ -466,11 +467,11 @@ ELSE IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CDIR  = '--'
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
   END IF
   IF (HDIR=='H') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IJU-NHALO),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IJU-NHALO),KRESP)
     IF (.NOT. (ASSOCIATED(XYHAT))) THEN
       !Store XYHAT if not yet done (necessary for PREP_PGD program when writing netCDF files)
       ALLOCATE(XYHAT(IJU-2*NHALO))
@@ -480,13 +481,13 @@ ELSE IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
   DEALLOCATE(ZW1D)
 ELSE IF (HDIR=='H') THEN
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO),KRESP)
 ELSE IF (HDIR=='A') THEN
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(:,:),KRESP)
 ELSE
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,1,'WRITE_SURFX1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PFIELD(:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,PFIELD(:),KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -544,20 +545,20 @@ END SUBROUTINE WRITE_SURFX1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG,TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPELOG,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_TOOLS_ll
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_DATA_COVER_PAR,ONLY : JPCOVER
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY :NMASK, CMASK,                          &
-                              NIU, NJU, NIB, NJB, NIE, NJE,          &
-                              NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
-                              NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
-USE MODD_PARAMETERS,    ONLY: XUNDEF, JPHEXT
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_DATA_COVER_PAR, ONLY: JPCOVER
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK,                          &
+                               NIU, NJU, NIB, NJB, NIE, NJE,          &
+                               NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
+                               NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
+USE MODD_PARAMETERS,     ONLY: XUNDEF, JPHEXT
 !
 USE MODI_GET_SURF_UNDEF
 USE MODI_UNPACK_1D_2D
@@ -647,7 +648,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPELOG
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,GCOVER_PACKED,KRESP)
+CALL IO_Field_write(TFILE_SURFEX,TZFIELD,GCOVER_PACKED,KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE ( YMSG, '( I5 )' ) KRESP
@@ -681,12 +682,12 @@ IF (.NOT. GCOVER_PACKED) THEN
     TZFIELD%CCOMMENT   = 'X_Y_'//TRIM(YREC)
     IF (OFLAG(JL2)) THEN
       ICOVER=ICOVER+1
-      CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,ICOVER),KRESP)
+      CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,ICOVER),KRESP)
     END IF
   END DO
 ELSE 
   CALL PREPARE_METADATA_WRITE_SURF(HREC,YDIR,HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2COV_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
 END IF
 !
 DEALLOCATE(ZWORK3D)
@@ -745,20 +746,20 @@ END SUBROUTINE WRITE_SURFX2COV_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_TOOLS_ll
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_DATA_COVER_PAR,ONLY : JPCOVER
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY :NMASK, CMASK,                          &
-                              NIU, NJU, NIB, NJB, NIE, NJE,          &
-                              NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
-                              NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
-USE MODD_PARAMETERS,    ONLY: XUNDEF
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_DATA_COVER_PAR, ONLY: JPCOVER
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK,                          &
+                               NIU, NJU, NIB, NJB, NIE, NJE,          &
+                               NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
+                               NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
+USE MODD_PARAMETERS,     ONLY: XUNDEF
 !
 USE MODI_GET_SURF_UNDEF
 USE MODI_UNPACK_1D_2D
@@ -826,11 +827,11 @@ IF (HDIR=='H' .OR. HDIR=='A') THEN
 !
   IF (HDIR=='H') THEN
     CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2_MNH',TZFIELD)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
   END IF
   IF (HDIR=='A') THEN
     CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2_MNH',TZFIELD)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(:,:,:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(:,:,:),KRESP)
   END IF
 !
   DEALLOCATE(ZWORK)
@@ -841,7 +842,7 @@ ELSE IF (HDIR=='-') THEN
   WHERE (ZFIELD==ZUNDEF) ZFIELD=XUNDEF
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX2_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZFIELD(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZFIELD(:,:),KRESP)
 !
   DEALLOCATE(ZFIELD)
 END IF
@@ -896,15 +897,15 @@ END SUBROUTINE WRITE_SURFX2_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEINT
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NIU_ALL, NJU_ALL
-USE MODD_PARAMETERS,    ONLY: JPHEXT
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NIU_ALL, NJU_ALL
+USE MODD_PARAMETERS,     ONLY: JPHEXT
 !
 IMPLICIT NONE
 !
@@ -931,14 +932,14 @@ IF( (HREC=='IMAX' .OR. HREC=='JMAX' .OR. HREC=='KMAX') .AND.  &
 !
 ELSE IF (HREC=='VERSION' .OR. HREC=='BUG') THEN
   !Field is in fieldlist
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,HREC,KFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,HREC,KFIELD,KRESP)
 ELSE
   IFIELD = KFIELD
   IF (HREC=='IMAX') IFIELD = NIU_ALL-2*JPHEXT
   IF (HREC=='JMAX') IFIELD = NJU_ALL-2*JPHEXT
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEINT,0,'WRITE_SURFN0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,IFIELD,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -991,15 +992,15 @@ END SUBROUTINE WRITE_SURFN0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEINT
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NMASK, CMASK, &
-                              NIU, NJU, NIB, NJB, NIE, NJE
-USE MODD_PARAMETERS,    ONLY: NUNDEF
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK, &
+                               NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_PARAMETERS,     ONLY: NUNDEF
 !
 USE MODI_UNPACK_1D_2D
 !
@@ -1030,7 +1031,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFN1_MNH',TRIM(TFILE_SURFEX%CNAME)//':
 IF (HDIR=='-') THEN
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEINT,1,'WRITE_SURFN1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,KFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,KFIELD,KRESP)
 !
 ELSE IF (HDIR=='H') THEN
 !
@@ -1040,7 +1041,7 @@ ELSE IF (HDIR=='H') THEN
   CALL UNPACK_1D_2D(NMASK,KFIELD,IWORK(NIB:NIE,NJB:NJE))
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEINT,2,'WRITE_SURFN1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
 !
   DEALLOCATE(IWORK)
 END IF
@@ -1094,14 +1095,14 @@ END SUBROUTINE WRITE_SURFN1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPECHAR,TYPELOG
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPECHAR,TYPELOG
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NIU_ALL, NJU_ALL
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NIU_ALL, NJU_ALL
 !
 IMPLICIT NONE
 !
@@ -1129,7 +1130,7 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     GCARTESIAN = .TRUE.
   END IF
   !
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,'CARTESIAN',GCARTESIAN,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,'CARTESIAN',GCARTESIAN,KRESP)
   !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
@@ -1139,7 +1140,7 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
 END IF
 !
 CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPECHAR,0,'WRITE_SURFC0_MNH',TZFIELD)
-CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,HFIELD,KRESP)
+CALL IO_Field_write(TFILE_SURFEX,TZFIELD,HFIELD,KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE ( YMSG, '( I5 )' ) KRESP
@@ -1190,15 +1191,15 @@ END SUBROUTINE WRITE_SURFC0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT,TYPELOG
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEINT,TYPELOG
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NMASK, CMASK, &
-                              NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK, &
+                               NIU, NJU, NIB, NJB, NIE, NJE
 !
 USE MODI_UNPACK_1D_2D
 !
@@ -1234,7 +1235,7 @@ IF (HDIR=='-') THEN
     RETURN
   ELSE
     CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,1,'WRITE_SURFL1_MNH',TZFIELD)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,OFIELD(:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,OFIELD(:),KRESP)
   END IF
 !
 ELSE IF (HDIR=='H') THEN
@@ -1249,7 +1250,7 @@ ELSE IF (HDIR=='H') THEN
   WHERE(GWORK) IWORK = 1
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEINT,2,'WRITE_SURFL1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
   !
   DEALLOCATE(IWORK)
   DEALLOCATE(GWORK)
@@ -1305,14 +1306,14 @@ END SUBROUTINE WRITE_SURFL1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPELOG
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: CMASK
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: CMASK
 !
 IMPLICIT NONE
 !
@@ -1336,7 +1337,7 @@ IF( (CMASK /= 'FULL  ').AND. (HREC=='COVER') ) THEN
   RETURN
 ELSE
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,0,'WRITE_SURFL0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,OFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,OFIELD,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -1388,14 +1389,14 @@ END SUBROUTINE WRITE_SURFL0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY: TFIELDDATA, TYPEDATE
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEDATE
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_IO_FILE
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
 USE MODD_TYPE_DATE
 !
 !
@@ -1431,7 +1432,7 @@ ELSE
   TZDATA%TIME  = PTIME
   !  
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEDATE,0,'WRITE_SURFT0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,TZDATA,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,TZDATA,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -1482,13 +1483,13 @@ END SUBROUTINE WRITE_SURFT0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,        ONLY: TFIELDDATA, TYPEINT, TYPEREAL
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEINT, TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_IO_FILE
 USE MODE_MSG
 !
-USE MODD_IO_ll,        ONLY: TFILE_SURFEX
-USE MODD_CONF_n,       ONLY : CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
 !
 !
 IMPLICIT NONE
@@ -1534,7 +1535,7 @@ ELSE
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ITDATE(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ITDATE(:,:),KRESP)
   !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
@@ -1552,7 +1553,7 @@ ELSE
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PTIME(:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,PTIME(:),KRESP)
 !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
diff --git a/src/MNH/write_ts1d.f90 b/src/MNH/write_ts1d.f90
index df0cd10bdacd3dcb2804d7a1b043cec6a8db4859..f57d26eef48fbf62659b9a077cc6eeafe7d1ade2 100644
--- a/src/MNH/write_ts1d.f90
+++ b/src/MNH/write_ts1d.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
 !-----------------------------------------------------------------
 !!    #############################
@@ -70,16 +70,14 @@
 !!
 !!    EXTERNAL
 !!    --------
-!!    OPEN_ll and CLOSE_ll  ! attribute a free I/O unit and close it again
 
 
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
 
 USE MODE_DATETIME
-USE MODE_FM,              ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST
-USE MODE_IO_ll
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_GRIDPROJ
 USE MODE_ll
 !
@@ -89,7 +87,7 @@ USE MODD_NSV,             ONLY: NSV,NSV_CHEMBEG,NSV_CHEMEND,  &
 USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, LORILAM
 USE MODD_DYN_n,           ONLY: XTSTEP       ! time-step of the model
 USE MODD_DIM_n,           ONLY: NKMAX        ! # of points in Z of the physical grid
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,           ONLY: TFILEDATA
 USE MODD_PARAMETERS,      ONLY: JPVEXT   ! vertical external points number
 USE MODD_GRID,      ONLY: XLATORI,XLONORI
 USE MODD_GRID_n,    ONLY: XXHAT,XYHAT,XZZ
@@ -121,7 +119,6 @@ USE MODD_CH_JVALUES_n,    ONLY: XJVALUES   ! Jvalues and
 USE MODD_CH_INIT_JVALUES, ONLY:JPJVMAX ! their number
 USE MODD_PARAMETERS,      ONLY: XUNDEF
 USE MODD_DIAG_FLAG,       ONLY: LCHEMDIAG, XCHEMLAT, XCHEMLON
-USE MODI_TRANSFER_FILE
 
 IMPLICIT NONE
 !!    EXPLICIT ARGUMENTS
@@ -232,8 +229,8 @@ DO JN=1,NBPROF
       (JINDEX >= 1).AND.(JINDEX <= IJU)) THEN  
   ! write picasso def-file
     IF (GSFIRSTCALL) THEN
-      CALL IO_FILE_ADD2LIST(TZFILE,YSIO1DDEF,'TXT','WRITE')
-      CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
+      CALL IO_File_add2list(TZFILE,YSIO1DDEF,'TXT','WRITE')
+      CALL IO_File_open(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
       ISIO1D = TZFILE%NLU
 
     ! write comment
@@ -276,13 +273,12 @@ DO JN=1,NBPROF
       END IF
     END DO
   
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
-    CALL TRANSFER_FILE('fujitransfer.x','NIL',YSIO1DDEF)
 
     ! open picasso dat-file
-    CALL IO_FILE_ADD2LIST(TZFILE,YSIO1DDAT,'TXT','WRITE')
-    CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
+    CALL IO_File_add2list(TZFILE,YSIO1DDAT,'TXT','WRITE')
+    CALL IO_File_open(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
     ISIO1D = TZFILE%NLU
 
     ! calculate ISSKIP
@@ -390,14 +386,12 @@ DO JN=1,NBPROF
     ENDDO
 
     IF ((CPROGRAM =='DIAG  ').AND.(LCHEMDIAG)) THEN
-      CALL IO_FILE_CLOSE_ll(TZFILE)
+      CALL IO_File_close(TZFILE)
       TZFILE => NULL()
-      CALL TRANSFER_FILE('fujitransfer.x','NIL',YSIO1DDAT)
     END IF
  
     IF (L1D) THEN
       GSFIRSTCALL = .FALSE.
-      CALL TRANSFER_FILE('fujitransfer.x','NIL',YSIO1DDAT)
     END IF
 
   END IF
diff --git a/src/MNH/xy_to_latlon.f90 b/src/MNH/xy_to_latlon.f90
index 606aa70aaaba86ee8c7b3ab04b9c97af5501d05d..49fa91ab68950f5d1e6ab3a900e503b078828fd4 100644
--- a/src/MNH/xy_to_latlon.f90
+++ b/src/MNH/xy_to_latlon.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2006-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2006-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.
 !-----------------------------------------------------------------
 !     ####################
@@ -54,28 +54,29 @@
 !!    no transfer of the file when closing   Dec. 09, 1996 (V.Masson)
 !!    + changes call to READ_HGRID
 !!  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
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
 !
-USE MODD_GRID      
-USE MODD_IO_ll,  ONLY: TFILEDATA
+USE MODD_GRID
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
-USE MODE_FM
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 !
 USE MODI_INI_CST
 USE MODI_READ_HGRID
 !
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
 !
 IMPLICIT NONE
 !
@@ -117,21 +118,21 @@ CALL INI_CST
 !
 !*    2.     Reading of namelist file
 !            ------------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'XY2LATLON1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'XY2LATLON1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 INAM=TZNMLFILE%NLU
 READ(INAM,NAM_INIFILE)
 READ(INAM,NAM_CONFIO)
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !*    1.     Opening of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_ADD2LIST(TZINIFILE,TRIM(YINIFILE),'UNKNOWN','READ',KLFITYPE=2,KLFIVERB=2)
-CALL IO_FILE_OPEN_ll(TZINIFILE)
+CALL IO_File_add2list(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2)
+CALL IO_File_open(TZINIFILE)
 !
 !*    2.     Reading of MESONH file
 !            ----------------------
@@ -141,7 +142,7 @@ CALL READ_HGRID(0,TZINIFILE,YNAME,YDAD,YSTORAGE_TYPE)
 !*    3.     Closing of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZINIFILE)
+CALL IO_File_close(TZINIFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/zdiffusetup.f90 b/src/MNH/zdiffusetup.f90
index 29dafe66044e369939c000360dc4ab8657ad1fc5..40f2b1c795934cd9bf7c22920fd03520900a4a60 100644
--- a/src/MNH/zdiffusetup.f90
+++ b/src/MNH/zdiffusetup.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2006-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 newsrc 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ####################
       MODULE MODI_ZDIFFUSETUP
 !     ####################
@@ -54,8 +49,10 @@ END MODULE MODI_ZDIFFUSETUP
 !!    ------
 !!
 !!      G. Zängl       * University of Munich*
-!!      J.Escobar 7/10/2015 : remove print
-!!
+!
+! Modifications:
+!  J. Escobar  07/10/2015: remove print
+!  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !
 !*       0.    DECLARATIONS
 !              ------------ 
@@ -278,6 +275,8 @@ CONTAINS
 
 SUBROUTINE INDINT_HALO2(KII,KIJ,PZMASS,PKIND,KKMIN,KIB,KJB)
 
+use mode_msg
+
 IMPLICIT NONE
 
 INTEGER, INTENT(IN) :: KII,KIJ    ! Relative position of remote points
@@ -322,9 +321,7 @@ ELSE IF ((KIJ.EQ.0).AND.(KII.NE.0)) THEN
 
 
 ELSE
- !callabortstop
-CALL ABORT
-  STOP 'Error in zdiffusetup'
+  call Print_msg( NVERB_FATAL, 'GEN', 'INDINT_HALO2', 'KII=0 and KIJ=0' )
 ENDIF
 
 DO JI = II1,II2
@@ -372,21 +369,15 @@ DO JI = II1,II2
     ENDDO
   ENDDO
 ENDDO
-IF (MINVAL(KKMIN) .EQ. 0 ) THEN
-print *," zdiffusetup::PROBLEME MINVAL(KKMIN) .EQ. 0 "
-call abort()
-STOP
-ELSE
-!print *," zdiffusetup:: OK "
+
+IF ( MINVAL(KKMIN) == 0 ) THEN
+  call Print_msg( NVERB_FATAL, 'GEN', 'INDINT_HALO2', 'MINVAL(KKMIN)=0' )
 ENDIF
-IF (MINVAL(INT(PKIND)) .EQ. 0 ) THEN
-print *," zdiffusetup::PROBLEME MINVAL(INT(PKIND)) .EQ. 0 "
-!PKIND = MAX (1.00001,PKIND)
-call abort()
-STOP
-ELSE
-!print *," zdiffusetup:: OK "
+
+IF ( MINVAL(INT(PKIND)) == 0 ) THEN
+  call Print_msg( NVERB_FATAL, 'GEN', 'INDINT_HALO2', 'MINVAL(INT(PKIND))=0' )
 ENDIF
+
 END SUBROUTINE INDINT_HALO2
 
 END SUBROUTINE ZDIFFUSETUP
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index af620d5b8b42d0197d85d8ce18f6ffeddc23258d..90103c5141e3712d2c40af6ca916c184b0856162 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2005-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-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.
 !-----------------------------------------------------------------
 !     ################
@@ -40,6 +40,8 @@
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!    08/07/2016  P.Wautelet Removed MNH_NCWRIT define
 !!  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
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !!
 !----------------------------------------------------------------------------
 !
@@ -47,19 +49,20 @@
 !            -----------
 !
 USE MODD_CONF,   ONLY : CPROGRAM, L1D, L2D, LPACK
-USE MODD_IO_ll,  ONLY:  NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
-USE MODD_LUNIT,  ONLY : CLUOUT0, TLUOUT0, TOUTDATAFILE
+USE MODD_IO,     ONLY:  NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_LUNIT,  ONLY : TLUOUT0, TOUTDATAFILE
 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_FM
-USE MODE_FMWRIT
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST, IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -119,16 +122,15 @@ CALL INI_CST
 !*    1.      Set default names and parallelized I/O
 !             --------------------------------------
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
-CLUOUT0='OUTPUT_LISTING0'                    ! name of the output-listing
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 TFILE_OUTPUTLISTING => TLUOUT0
 ILUOUT0=TLUOUT0%NLU
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_ZOOM1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'PRE_ZOOM1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 CPGDFILE  = 'PGDFILE'                         ! name of the input file
@@ -138,7 +140,7 @@ CALL POSNAM(ILUNAM,'NAM_PGDFILE',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGDFILE)
 CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
 !------------------------------------------------------------------------------
 !
@@ -148,8 +150,8 @@ CALL SET_CONFIO_ll()
 !*    2.1     Open PGD file
 !             -------------
 !
-CALL IO_FILE_ADD2LIST(TZPGDFILE,TRIM(CPGDFILE),'UNKNOWN','READ',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=2,KLFIVERB=5)
-CALL IO_FILE_OPEN_ll(TZPGDFILE)
+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
 !             -----------------------
@@ -159,15 +161,15 @@ CALL READ_HGRID(1,TZPGDFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE)
 ! NIMAX, NJMAX: size of input domain
 ALLOCATE(ZZS1  (NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
 ALLOCATE(ZZSMT1(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
-CALL IO_READ_FIELD(TZPGDFILE,'ZS',ZZS1)
-CALL IO_READ_FIELD(TZPGDFILE,'ZSMT',ZZSMT1)
+CALL IO_Field_read(TZPGDFILE,'ZS',ZZS1)
+CALL IO_Field_read(TZPGDFILE,'ZSMT',ZZSMT1)
 !
 !*    2.3     Define subdomain
 !             ----------------
 !
 CALL SET_SUBDOMAIN(TZNMLFILE,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO)
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 ! NIMAX, NJMAX: size of output domain
 !
@@ -194,16 +196,16 @@ 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),'ZOOMPGD','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_ll(TZZOOMFILE)
+CALL IO_File_open(TZZOOMFILE)
 CALL WRITE_HGRID(1,TZZOOMFILE)
 !
 !*    2.5     Preparation of surface physiographic fields
 !             -------------------------------------------
 !
-CALL IO_READ_FIELD(TZPGDFILE,'SURF',CSURF)
+CALL IO_Field_read(TZPGDFILE,'SURF',CSURF)
 !
 !
 IF (CSURF=='EXTE') THEN
@@ -223,26 +225,26 @@ IF (CSURF=='EXTE') THEN
 ELSE
   ALLOCATE(ZZS2(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
   ZZS2(:,:)=ZZS1(IXOR:IXOR+NIMAX+2*JPHEXT-1,IYOR:IYOR+NJMAX+2*JPHEXT-1)
-  CALL IO_WRITE_FIELD(TZZOOMFILE,'ZS',ZZS2)
+  CALL IO_Field_write(TZZOOMFILE,'ZS',ZZS2)
 END IF
 !
 ALLOCATE(ZZSMT2(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
 ZZSMT2(:,:)=ZZSMT1(IXOR:IXOR+NIMAX+2*JPHEXT-1,IYOR:IYOR+NJMAX+2*JPHEXT-1)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'ZSMT',ZZSMT2)
+CALL IO_Field_write(TZZOOMFILE,'ZSMT',ZZSMT2)
 !
 !*    2.7     Write configuration variables in the output file
 !             ------------------------------------------------
 !
-CALL IO_WRITE_HEADER(TZZOOMFILE)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'DXRATIO',IDXRATIO)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'DYRATIO',IDYRATIO)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'XOR',    IXOR_DAD)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'YOR',    IYOR_DAD)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'L1D',    L1D)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'L2D',    L2D)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'PACK',   LPACK)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'SURF',   CSURF)
-CALL IO_FILE_CLOSE_ll(TZZOOMFILE)
+CALL IO_Header_write(TZZOOMFILE)
+CALL IO_Field_write(TZZOOMFILE,'DXRATIO',IDXRATIO)
+CALL IO_Field_write(TZZOOMFILE,'DYRATIO',IDYRATIO)
+CALL IO_Field_write(TZZOOMFILE,'XOR',    IXOR_DAD)
+CALL IO_Field_write(TZZOOMFILE,'YOR',    IYOR_DAD)
+CALL IO_Field_write(TZZOOMFILE,'L1D',    L1D)
+CALL IO_Field_write(TZZOOMFILE,'L2D',    L2D)
+CALL IO_Field_write(TZZOOMFILE,'PACK',   LPACK)
+CALL IO_Field_write(TZZOOMFILE,'SURF',   CSURF)
+CALL IO_File_close(TZZOOMFILE)
 !
 !*    2.8     Shift to new PGD file
 !             ---------------------
@@ -254,16 +256,16 @@ CPGDFILE = YZOOMFILE
 !*    3.     CLOSE PARALLELIZED I/O
 !            ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZPGDFILE)
+CALL IO_File_close(TZPGDFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 WRITE(ILUOUT0,*)
 WRITE(ILUOUT0,*) '***************************'
 WRITE(ILUOUT0,*) '* ZOOM_PGD ends correctly *'
 WRITE(ILUOUT0,*) '***************************'
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 
diff --git a/src/MNH/zsmt_pgd.f90 b/src/MNH/zsmt_pgd.f90
index 14a4be23bbce0a159b70a471aad86fc578fcb36d..4fa76acf100db303d96422853df7bbd998f7f663 100644
--- a/src/MNH/zsmt_pgd.f90
+++ b/src/MNH/zsmt_pgd.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2005-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-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_ZSMT_PGD
 !     ######################
@@ -10,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE ZSMT_PGD(TPFILE,KZSFILTER,KSLEVE,KLOCZSFILTER,OHSLOP,PHSLOP,PSMOOTH_ZS)
 !
-USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),     INTENT(IN)  :: TPFILE       ! File characteristics
 INTEGER,             INTENT(IN)  :: KZSFILTER    ! number of iterations for fine orography
@@ -65,13 +66,12 @@ END MODULE MODI_ZSMT_PGD
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_LUNIT,      ONLY : CLUOUT0
+USE MODD_IO,         ONLY : TFILEDATA
 USE MODD_PARAMETERS, ONLY : JPHEXT, XUNDEF
 !
 USE MODI_MNHGET_SURF_PARAM_n
-USE MODE_FMREAD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll        , ONLY : GET_DIM_EXT_ll , ADD2DFIELD_ll , CLEANLIST_ll , UPDATE_HALO_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll 
 USE MODI_SUM_ll
@@ -150,12 +150,12 @@ ALLOCATE(ZSMOOTH_ZSINI(IIU,IJU))
 ALLOCATE(ZXHAT(IIU))
 ALLOCATE(ZYHAT(IJU))
 !
-CALL IO_READ_FIELD(TPFILE,'XHAT',ZXHAT)
-CALL IO_READ_FIELD(TPFILE,'YHAT',ZYHAT)
+CALL IO_Field_read(TPFILE,'XHAT',ZXHAT)
+CALL IO_Field_read(TPFILE,'YHAT',ZYHAT)
 
 !PW: bug/TODO: read a field in a file opened in WRITE mode
-!There is a test in IO_READ_FIELD_BYFIELD_X2 to allow this if TPFILE%CMODE='LFICDF4'
-CALL IO_READ_FIELD(TPFILE,'ZS',ZZS)
+!There is a test in IO_Field_read_BYFIELD_X2 to allow this if TPFILE%CMODE='LFICDF4'
+CALL IO_Field_read(TPFILE,'ZS',ZZS)
 !
 DO JI=1,JPHEXT
 ZZS(JI,:) = ZZS(IIB,:)
@@ -342,7 +342,7 @@ IF(OHSLOP) THEN
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  TZFIELD%LTIMEDEP   = .FALSE.
- CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSLOPEX)
+ CALL IO_Field_write(TPFILE,TZFIELD,ZSLOPEX)
  !
  TZFIELD%CMNHNAME   = 'ZSLOPEY'
  TZFIELD%CSTDNAME   = ''
@@ -354,7 +354,7 @@ IF(OHSLOP) THEN
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  TZFIELD%LTIMEDEP   = .FALSE.
- CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSLOPEY)
+ CALL IO_Field_write(TPFILE,TZFIELD,ZSLOPEY)
  !
  TZFIELD%CMNHNAME   = 'ZS_FILTR'
  TZFIELD%CSTDNAME   = ''
@@ -366,7 +366,7 @@ IF(OHSLOP) THEN
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  TZFIELD%LTIMEDEP   = .FALSE.
- CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSMOOTH_ZSINI-ZFINE_ZS)
+ CALL IO_Field_write(TPFILE,TZFIELD,ZSMOOTH_ZSINI-ZFINE_ZS)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -374,8 +374,8 @@ END IF
 !              ---------------------------------------
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',  ZFINE_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT',ZSLEVE_ZS)
+CALL IO_Field_write(TPFILE,'ZS',  ZFINE_ZS)
+CALL IO_Field_write(TPFILE,'ZSMT',ZSLEVE_ZS)
 !
 DEALLOCATE(ZZS)
 DEALLOCATE(ZFINE_ZS)
diff --git a/src/MNH/zsmt_pic.f90 b/src/MNH/zsmt_pic.f90
index e036a4c822a726cb25b42a9f6ef613a0648ee694..403b2a4635ef063d8b9009cff4123e54cfcf3928 100644
--- a/src/MNH/zsmt_pic.f90
+++ b/src/MNH/zsmt_pic.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-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 newsrc 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_ZSMT_PIC
 !     ######################
@@ -61,7 +56,6 @@ END MODULE MODI_ZSMT_PIC
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_LUNIT,      ONLY : CLUOUT0
 USE MODD_PARAMETERS, ONLY : XUNDEF
 USE MODD_GRID_n,     ONLY : XZS,XZSMT
 !
diff --git a/src/Makefile b/src/Makefile
index ef4e4220cf8b008d851c17ba137fa40a7bf4382a..0e20e4a2ab02a54c4be1be985ac1ad7cc52bb84c 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -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.
 ##########################################################
 #                                                        #
@@ -58,7 +58,7 @@ include Rules.$(ARCH)$(F).mk
 #   All modification are allowed !!!!!                   #
 #   adding new subroutines                               #
 #       or                                               #
-#   adding new modules                                   #       
+#   adding new modules                                   #
 #                                                        #
 #   REM : if during modification, you deleting some      #
 #         FORTRAN subroutines you must also deleted the  #
@@ -86,6 +86,7 @@ endif
 #
 ifdef DO_COMP_MASTER
 VPATH += $(OBJDIR_MASTER) $(OBJDIR_MASTER)/MOD
+INC += -I$(B)$(OBJDIR_MASTER)/MOD
 endif
 #
 ##########################################################
@@ -339,8 +340,8 @@ gribapi_clean :
 ##########################################################
 ifeq "$(VER_CDF)" "CDFAUTO"
 #
-HDF_OPT    = ${OPT_BASE_I4:-$OPT_BASE}
-NETCDF_OPT = ${OPT_BASE_I4:-$OPT_BASE}
+HDF_OPT    ?= ${OPT_BASE_I4:-$OPT_BASE}
+NETCDF_OPT ?= ${OPT_BASE_I4:-$OPT_BASE}
 #
 cdf : $(CDF_MOD)
 $(CDF_MOD) :
@@ -352,6 +353,12 @@ $(CDF_MOD) :
 	cd ${DIR_CDFC} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 --disable-dap \
 	CC="$(CC)" CFLAGS="$(NETCDF_OPT)" CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lhdf5_hl -lhdf5 -lsz -laec -lz" && \
 	$(MAKE) && $(MAKE) install && $(MAKE) clean
+ifdef MNH_FOREFIRE
+	cd ${DIR_CDFCXX} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 \
+	CXX="$(CXX)" CXXFLAGS="$(NETCDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT) $(NETCDF_SUPPFLAGS)" FFLAGS="$(NETCDF_OPT)"  \
+	CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz" && \
+	$(MAKE) && $(MAKE) install && $(MAKE) clean
+endif
 	cd ${DIR_CDFF} && ./configure --disable-shared --prefix=${CDF_PATH} --libdir=${CDF_PATH}/lib64 \
 	CC="$(CC)" CFLAGS="$(NETCDF_OPT)" FC="$(FC)" FCFLAGS="$(NETCDF_OPT) $(NETCDF_SUPPFLAGS)" FFLAGS="$(NETCDF_OPT)"  \
 	CPPFLAGS="${INC_NETCDF}" ${CDF_CONF} LDFLAGS="-L${CDF_PATH}/lib64" LIBS="-lnetcdf -lhdf5_hl -lhdf5 -lsz -laec -lz" && \
@@ -363,6 +370,9 @@ cleancdf :
 	cd ${DIR_LIBAEC} && $(MAKE) clean
 	cd ${DIR_HDF} && $(MAKE) clean 
 	cd ${DIR_CDFC} && $(MAKE) clean 
+ifdef MNH_FOREFIRE
+	cd ${DIR_CDFCXX} && $(MAKE) clean 
+endif
 	cd ${DIR_CDFF} && $(MAKE) clean
 endif
 ##########################################################
@@ -380,8 +390,26 @@ cleanmaster : cleanoasis
 cleanoasis :
 	- [ -d ${OASIS_PATH} ] && rm -fr  ${OASIS_PATH}
 endif
+##########################################################
+#                                                        #
+# EXTRA LIB : S4PY                                       #
+#                                                        #
+##########################################################
+ifdef MNH_S4PY
+all : libs4py.so
 
+OBJ_S4PY=$(OBJDIR_MASTER)/spll_wcompress_field.o $(OBJDIR_MASTER)/spll_wdecompress_field.o \
+$(OBJDIR_MASTER)/spll_wget_compheader.o $(OBJDIR_MASTER)/spll_wlficas.o \
+$(OBJDIR_MASTER)/spll_wlfiecr.o $(OBJDIR_MASTER)/spll_wlfifer.o \
+$(OBJDIR_MASTER)/spll_wlfilec.o $(OBJDIR_MASTER)/spll_wlfinaf.o \
+$(OBJDIR_MASTER)/spll_wlfinfo.o $(OBJDIR_MASTER)/spll_wlfiouv.o $(OBJDIR_MASTER)/spll_wlfipos.o \
+$(OBJDIR_MASTER)/spll_NEWLFI_ALL.o $(OBJDIR_MASTER)/spll_lockasgn.o \
+$(OBJDIR_MASTER)/spll_lockoff.o $(OBJDIR_MASTER)/spll_lockon.o $(OBJDIR_MASTER)/spll_lockrel.o \
+$(OBJDIR_MASTER)/fswap8buff.o $(OBJDIR_MASTER)/spll_remark2.o
 
+libs4py.so : progmaster
+	$(CC) -shared $(LDFLAGS) -o $(OBJDIR_MASTER)/$@ $(OBJ_S4PY) $(LIBS)
+endif
 ##########################################################
 #                                                        #
 # PROGRAM RULES                                          #
@@ -525,10 +553,12 @@ ARFLAGS=r
 #
 
 %.o:%.f90
+	echo "inc=$(INC)"
 	$(F90) -I$(OBJDIR) $(INC) -c $(F90FLAGS) $< 
 	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
 
 %.o:%.f
+	echo "inc=$(INC)"
 	$(F77) -I$(OBJDIR) $(INC) -c $(F77FLAGS)  $<  
 	-mv  $(*F).o $(OBJDIR)/. || echo OK $(*F).o
 
diff --git a/src/Makefile.MESONH.mk b/src/Makefile.MESONH.mk
index 8c5990af5320d824b7a820268c2cfbd8d783317c..f7b5994ea41d7dcf9088fd8a535921006ca9b110 100644
--- a/src/Makefile.MESONH.mk
+++ b/src/Makefile.MESONH.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.
 ##########################################################
 #                                                        #
@@ -106,7 +106,7 @@ endif
 # PRE_BUG TEST !!!
 #
 DIR_SURCOUCHE += LIB/SURCOUCHE/src
-#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -DMNH_MPI_BSEND -DNAGf95
+#CPPFLAGS_SURCOUCHE = -DMNH_MPI_BSEND
 #
 ifdef DIR_SURCOUCHE
 DIR_MASTER   += $(DIR_SURCOUCHE)
@@ -229,10 +229,6 @@ OBJS_I8=spll_NEWLFI_ALL.o
 $(OBJS_I8) : OPT = $(OPT_BASE) $(OPT_PERF2) $(OPT_INT8)
 endif
 #
-# Management/parametrisation of size of RECL for LFI I/O speedup 
-#
-LFI_RECL?=512
-#
 DIR_MASTER          += $(DIR_NEWLFI)
 CPPFLAGS            += $(CPPFLAGS_NEWLFI)
 OBJS_LISTE_MASTER   += fswap8buff.o
@@ -242,6 +238,30 @@ VPATH               += $(DIR_NEWLFI)
 #ARCH_XYZ    := $(ARCH_XYZ)-$(VER_NEWLFI)
 endif
 ##########################################################
+#           Source COMPRESS                              #
+##########################################################
+ifdef MNH_COMPRESS
+DIR_COMPRESS           = ../LIBTOOLS/lib/COMPRESS/src
+INC_COMPRESS           = -I$(B)$(DIR_COMPRESS)
+DIR_MASTER            += $(DIR_COMPRESS)
+OBJS_LISTE_MASTER     += bitbuff.o nearestpow2.o
+INC                   += $(INC_COMPRESS)
+VPATH                 += $(DIR_COMPRESS)
+CPPFLAGS_COMPRESS     ?= -DLITTLE_endian
+CPPFLAGS              += $(CPPFLAGS_COMPRESS)
+endif
+##########################################################
+#           Source S4PY                                  #
+##########################################################
+ifdef MNH_S4PY
+DIR_S4PY               = LIB/s4py
+INC_S4PY               = -I$(B)$(DIR_S4PY)
+DIR_MASTER            += $(DIR_S4PY)
+OBJS_LISTE_MASTER     += init_gfortran.o
+INC                   += $(INC_S4PY)
+VPATH                 += $(DIR_S4PY)
+endif
+##########################################################
 #           Source FOREFIRE                              #
 ##########################################################
 ifdef MNH_FOREFIRE
@@ -252,6 +272,7 @@ OBJS_LISTE_MASTER     += C_ForeFire_Interface.o
 INC                   += $(INC_FOREFIRE)
 VPATH                 += $(DIR_FOREFIRE)
 CPPFLAGS              += -DMNH_FOREFIRE
+ARCH_XYZ    := $(ARCH_XYZ)-FF
 endif
 ##########################################################
 #           Source TOOLS                                 #
@@ -467,6 +488,7 @@ endif
 #
 ifeq "$(VER_CDF)" "CDFAUTO"
 DIR_CDFC?=${SRC_MESONH}/src/LIB/netcdf-${VERSION_CDFC}
+DIR_CDFCXX?=${SRC_MESONH}/src/LIB/netcdf-cxx-${VERSION_CDFCXX}
 DIR_CDFF?=${SRC_MESONH}/src/LIB/netcdf-fortran-${VERSION_CDFF}
 CDF_PATH?=${SRC_MESONH}/src/LIB/netcdf-${ARCH}-R${MNH_REAL}I${MNH_INT}
 CDF_MOD?=${CDF_PATH}/include/netcdf.mod
diff --git a/src/Rules.AIX64.mk b/src/Rules.AIX64.mk
index b4de87fcfcd412263c2d4368d91f4926c9c1682d..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.
 ##########################################################
 #                                                        #
@@ -25,15 +25,12 @@ OPT_I8    = -qintsize=8
 # Integer 4/8 option
 #
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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) 
@@ -84,9 +81,9 @@ endif
 CPP = /usr/lib/cpp -C -P -qlanglvl=classic
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -DMNH_SP4 -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE = -DMNH_SP4
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAMAX1=MAX -DMNH -DSFX_MNH
 #
 # Gribex flags
@@ -101,6 +98,16 @@ CNAME_GRIBEX=""
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.BG.mk b/src/Rules.BG.mk
index d3d34f3f65b1ef977c168061d198e87ace822cad..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.
 ##########################################################
 #                                                        #
@@ -30,15 +30,12 @@ OPT_I4      = -qintsize=4
 # Integer 4/8 option
 #
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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
 #
@@ -94,10 +91,10 @@ CPP = cpp -P -traditional -Wcomment
 CC  = mpixlc_r
 #
 CPPFLAGS_SURFEX    =
-#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -DMNH_SP4 -DMNH_MPI_ISEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -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} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DLINUX  -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAMAX1=MAX -DMNH -DSFX_MNH
 #
 # Gribex flags
@@ -112,6 +109,16 @@ CNAME_GRIBEX=""
 #if MNH_TOOLS exists => compile the tools
 #MNH_TOOLS = no
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+#MNH_COMPRESS=no
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.BGQ.mk b/src/Rules.BGQ.mk
index e1e735144e46e8f1e5aa763e8bddd442e68ee7b5..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.
 ##########################################################
 #                                                        #
@@ -34,16 +34,13 @@ OPT_I4      = -qintsize=4 -qxlf77=intarg
 #
 MNH_REAL  ?=8
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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
 #
@@ -143,10 +140,10 @@ CPP = cpp -P -traditional -Wcomment
 
 #
 CPPFLAGS_SURFEX    =
-#CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -DMNH_SP4 -DMNH_MPI_ISEND -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -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} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DLINUX  -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAMAX1=MAX -DMNH -DSFX_MNH
 #
 # Rules for GA = Global Array
@@ -171,6 +168,16 @@ GRIBAPI_CONF= --host=powerpc64-bgq-linux
 #if MNH_TOOLS exists => compile the tools
 #MNH_TOOLS = no
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+#MNH_COMPRESS=no
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.LXNAGfor.mk b/src/Rules.LXNAGfor.mk
index d7a8adf967c88fa5ea120ee2497133d9ec976d60..318cb4ba34a70725def6ace645a075ffe1ba2494 100644
--- a/src/Rules.LXNAGfor.mk
+++ b/src/Rules.LXNAGfor.mk
@@ -19,21 +19,17 @@ OPT_R8    = -r8
 #
 MNH_REAL  ?=8
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 #
 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
 #
@@ -72,9 +68,9 @@ FX90FLAGS     =  $(OPT) -fixed
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DMNH_LINUX -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
 
 #
@@ -94,6 +90,16 @@ NETCDF_SUPPFLAGS = -dusty -kind=byte
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
@@ -121,5 +127,5 @@ OBJS_I4=spll_modd_netcdf.o
 $(OBJS_I4) : OPT = $(OPT_BASE_I4)
 endif
 # 
-LIST_MISMATCH=MPI_Allgatherv,MPI_Allreduce,MPI_Bcast,MPI_Bsend,MPI_Gather,MPI_Gatherv,MPI_Recv,LEPOLY
+LIST_MISMATCH=MPI_Allgatherv,MPI_Allreduce,MPI_Bcast,MPI_Bsend,MPI_Gather,MPI_Gatherv,MPI_Recv,LEPOLY,EXTRACT_BBUFF,FILL_BBUFF
 
diff --git a/src/Rules.LXarm.mk b/src/Rules.LXarm.mk
index 7622b6807a92a23c80581b34ac798fbae9d1b04a..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.
 ##########################################################
 #                                                        #
@@ -29,21 +29,17 @@ OPT_R8    = -r8
 #
 MNH_REAL  ?=8
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 #
 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
 #
@@ -88,9 +84,9 @@ FX90FLAGS     =  $(OPT)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DMNH_LINUX -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
 ifdef VER_GA
 CPPFLAGS_SURCOUCHE += -DMNH_GA
@@ -116,7 +112,15 @@ MNH_TOOLS=yes
 endif
 endif
 #
+## COMPRESS flag
 #
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
 #
 ##########################################################
 #                                                        #
diff --git a/src/Rules.LXcray.mk b/src/Rules.LXcray.mk
index 1fbd6578c079a9edf04324e5b4e2c00132417628..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.
 ##########################################################
 #                                                        #
@@ -22,16 +22,13 @@ OPT_I8     =  -sdefault64
 # Integer 4/8 option
 #
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 OPT_BASE_I4       := $(OPT_BASE)
 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
 #
@@ -84,9 +81,9 @@ LDFLAGS    =   -Wl,-warn-once $(PAR) $(OPT_BASE)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND) 
+CPPFLAGS_SURCOUCHE = -DDEV_NULL
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH 
 ifdef VER_GA
 CPPFLAGS_SURCOUCHE += -DMNH_GA
@@ -109,6 +106,16 @@ GRIBAPI_CONF="FCFLAGS= -em -ef "
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.LXg95.mk b/src/Rules.LXg95.mk
index fa86c4daf1e6d4f721e6b44e86c15a39e26700af..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.
 ##########################################################
 #                                                        #
@@ -18,15 +18,12 @@ OPT_I8     =  -i8
 # Integer 4/8 option
 #
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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,11 +61,10 @@ LDFLAGS   =  -Wl,-warn-once
 CPP = cpp -P -traditional -Wcomment
 #
 LFI_INT  ?=4
-LFI_RECL ?=512
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE = -DMNH_MPI_DOUBLE_PRECISION -DMNH_LINUX -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} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX  -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DAINT=INT -DAMOD=MOD -DMNH -DSFX_MNH
 #
 # Gribex flags
@@ -81,6 +77,16 @@ CNAME_GRIBEX=g95
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.LXgfortran.mk b/src/Rules.LXgfortran.mk
index 26ff8eee58007d53025fb64547e1bada45341e7c..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.
 ##########################################################
 #                                                        #
@@ -26,21 +26,17 @@ OPT_R8    = -fdefault-real-8 -fdefault-double-8
 #
 MNH_REAL  ?=8
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 #
 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
 #
@@ -58,6 +54,7 @@ endif
 #
 #  
 CC = gcc
+CXX = g++
 FC = gfortran 
 ifeq "$(VER_MPI)" "MPIAUTO"
 F90 = mpif90
@@ -79,9 +76,9 @@ FX90FLAGS     =  $(OPT)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DMNH_LINUX -DDEV_NULL  -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
 ifdef VER_GA
 CPPFLAGS_SURCOUCHE += -DMNH_GA
@@ -97,6 +94,8 @@ CNAME_GRIBEX=_gfortran
 # Netcdf/HDF5 flags
 #
 HDF_CONF= CFLAGS=-std=c99
+HDF_OPT ?= -fPIC
+NETCDF_OPT ?= -fPIC
 #
 ## LIBTOOLS flags
 #
@@ -107,7 +106,15 @@ MNH_TOOLS=yes
 endif
 endif
 #
+## COMPRESS flag
 #
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
 #
 ##########################################################
 #                                                        #
diff --git a/src/Rules.LXifort.mk b/src/Rules.LXifort.mk
index 48b9c5c99e0d6f784f892b511f153f4cee506e0c..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.
 ##########################################################
 #                                                        #
@@ -21,20 +21,16 @@ OPT_R8     =  -r8
 #
 MNH_REAL  ?=8
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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
 #
@@ -128,6 +124,7 @@ endif
 #
 #
 CC ?= gcc
+CXX ?= g++
 FC = ifort
 ifeq "$(VER_MPI)" "MPIAUTO"
 ifneq "$(findstring TAU,$(XYZ))" ""
@@ -176,9 +173,9 @@ LDFLAGS    =   -Wl,-warn-once $(PAR) -Wl,-rpath=$(LD_LIBRARY_PATH) $(OPT_BASE)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DMNH_LINUX -DDEV_NULL -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE += -DDEV_NULL
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH 
 ifdef VER_GA
 CPPFLAGS_SURCOUCHE += -DMNH_GA
@@ -191,6 +188,12 @@ endif
 TARGET_GRIBEX=linux
 CNAME_GRIBEX=ifort
 #
+# Netcdf/HDF5 flags
+#
+HDF_CONF= CFLAGS=-std=c99
+HDF_OPT ?= -fPIC
+NETCDF_OPT ?= -fPIC
+#
 # LIBTOOLS flags
 #
 #if MNH_TOOLS exists => compile the tools
@@ -198,6 +201,16 @@ ifeq "$(MNH_INT)" "4"
 MNH_TOOLS=yes
 endif
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.LXpathf95.mk b/src/Rules.LXpathf95.mk
index 014fcbaf4445afc7f81a69a5b50bdca85bca6cfd..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_LINUX -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
@@ -57,6 +57,16 @@ CNAME_GRIBEX=pathf95
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.LXpgi.mk b/src/Rules.LXpgi.mk
index 92ff4a70900af191a6a427411f8965752ed5b44f..21e995fab794f1cf2d243cc41e751e8f7b69ba0d 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.
 ##########################################################
 #                                                        #
@@ -51,20 +51,16 @@ IGNORE_OBJS += pgprof.o
 #
 MNH_REAL  ?=8
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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
 #
@@ -150,9 +146,9 @@ LDFLAGS    =   -Wl,-warn-once $(OPT)
 CPP = cpp -P -traditional -Wcomment
 #
 CPPFLAGS_SURFEX    =
-CPPFLAGS_SURCOUCHE += -DMNH_LINUX -DMNH_MPI_RANK_KIND=$(MNH_MPI_RANK_KIND)
+CPPFLAGS_SURCOUCHE +=
 CPPFLAGS_RAD       =
-CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DSWAPIO -DLINUX -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DMNH_PGI -DSFX_MNH
 CPPFLAGS_MNH      += -Uvector -Upixel
 #
@@ -176,6 +172,16 @@ endif
 #if MNH_TOOLS exists => compile the tools
 MNH_TOOLS = yes
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+MNH_COMPRESS=yes
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/Rules.SX8.mk b/src/Rules.SX8.mk
index e5bb540f66d76050a6a8b064dbf354dbf02f4736..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.
 ##########################################################
 #                                                        #
@@ -24,15 +24,12 @@ OPT_I8    = -ew
 # Integer 4/8 option
 #
 MNH_INT   ?=4
-LFI_RECL  ?=512
 #
 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,9 +84,9 @@ 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} -DLFI_RECL=${LFI_RECL}
+CPPFLAGS_NEWLFI    = -DMNH_SX5 -DLFI_INT=${LFI_INT}
 CPPFLAGS_MNH       = -DMNH -DSFX_MNH
 #
 # Gribex flags
@@ -103,6 +100,16 @@ CNAME_GRIBEX=sxmpif90
 #if MNH_TOOLS exists => compile the tools
 #MNH_TOOLS = no
 #
+## COMPRESS flag
+#
+#if MNH_COMPRESS exists => compile the COMPRESS library (for LFI files)
+#MNH_COMPRESS=no
+#
+## S4PY flag
+#
+#if MNH_S4PY exists => compile the libs4py library (for epygram)
+#MNH_S4PY=no
+#
 ##########################################################
 #                                                        #
 # Source of MESONH PACKAGE  Distribution                 #
diff --git a/src/SURFEX/average_diag.F90 b/src/SURFEX/average_diag.F90
index 14364414e2a727b0a4b755b47730504e59c2ca61..158ea03afe9871fea872a33336159082b6ca6aec 100644
--- a/src/SURFEX/average_diag.F90
+++ b/src/SURFEX/average_diag.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #########
       SUBROUTINE AVERAGE_DIAG(PFRAC_TILE, DGO, D, ND, DC, NDC      )                                
@@ -37,6 +37,7 @@
 !!      Modified    08/2009 (B. Decharme) : new diag
 !     02/2010 - S. Riette - Security for wind average in case of XUNDEF values
 !       B. decharme 04/2013 : Add EVAP and SUBL diag
+!       P. Wautelet 02/2019: bug: fixed intent of PFIELD_OUT (OUT->INOUT)
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -323,7 +324,7 @@ IMPLICIT NONE
 !
 REAL, DIMENSION(:),INTENT(IN)   :: PFRAC
 REAL, DIMENSION(:),INTENT(IN)   :: PFIELD_IN
-REAL, DIMENSION(:), INTENT(OUT) :: PFIELD_OUT
+REAL, DIMENSION(:), INTENT(INOUT) :: PFIELD_OUT
 INTEGER, INTENT(IN) :: KTILE
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 INTEGER :: JT
@@ -350,7 +351,7 @@ IMPLICIT NONE
 !
 REAL, DIMENSION(:),INTENT(IN)   :: PFRAC
 REAL, DIMENSION(:,:),INTENT(IN)   :: PFIELD_IN
-REAL, DIMENSION(:,:), INTENT(OUT) :: PFIELD_OUT
+REAL, DIMENSION(:,:), INTENT(INOUT) :: PFIELD_OUT
 INTEGER, INTENT(IN) :: KTILE
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 INTEGER :: JT, JL
@@ -379,7 +380,7 @@ IMPLICIT NONE
 REAL, DIMENSION(:),INTENT(IN)   :: PFRAC
 REAL, DIMENSION(:),INTENT(IN)   :: PFIELD_IN
 REAL, DIMENSION(:),INTENT(IN)   :: PREF
-REAL, DIMENSION(:), INTENT(OUT) :: PFIELD_OUT
+REAL, DIMENSION(:), INTENT(INOUT) :: PFIELD_OUT
 INTEGER, INTENT(IN) :: KTILE
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
@@ -413,7 +414,7 @@ IMPLICIT NONE
 !
 REAL, DIMENSION(:),INTENT(IN)   :: PFRAC
 REAL, DIMENSION(:),INTENT(IN)   :: PFIELD_IN
-REAL, DIMENSION(:),  INTENT(OUT)  :: PFIELD_OUT
+REAL, DIMENSION(:),  INTENT(INOUT)  :: PFIELD_OUT
 INTEGER, INTENT(IN) :: KTILE
 REAL, DIMENSION(:), INTENT(INOUT) :: PLAND
 REAL, DIMENSION(:), INTENT(INOUT) :: PSEA
diff --git a/src/SURFEX/bilin_value.F90 b/src/SURFEX/bilin_value.F90
index f4aac84c2e69c97f7092bddfdd7178fec9c166fc..48bf32aaa3335f04288061dc54d8d8cb34df244a 100644
--- a/src/SURFEX/bilin_value.F90
+++ b/src/SURFEX/bilin_value.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #########
      SUBROUTINE BILIN_VALUE (KLUOUT,KX,KY,PFIELD1,PCX,PCY,KCI,KCJ,PFIELD2)
@@ -77,7 +77,7 @@
 !!
 !!      Original     01/2004
 ! TD&DD: added OpenMP directives
-
+!       P. Wautelet 08/02/2019: initialize ZFIELD1 even if of size=1
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -200,7 +200,8 @@ ELSE
       IS2 = IBOR(2,2,0)-IBOR(2,1,0)+1
       ISIZE = IS1*IS2
       ALLOCATE(ZFIELD1(IS1,IS2,INL))
-      IF (SUM(IBOR(:,:,0))/=0) THEN    
+      IF(ISIZE==1) ZFIELD1(:,:,:) = XUNDEF !Necessary to initialize ZFIELD1 in all cases (value could be anything)
+      IF (SUM(IBOR(:,:,0))/=0) THEN
         DO JL=IBOR(2,1,0),IBOR(2,2,0)
           ZFIELD1(:,JL-IBOR(2,1,0)+1,:) = PFIELD1(KX*(JL-1)+IBOR(1,1,0):KX*(JL-1)+IBOR(1,2,0),:)
         ENDDO
diff --git a/src/SURFEX/convert_patch_isba.F90 b/src/SURFEX/convert_patch_isba.F90
index 0ad47ed03181fa254b9bb6478e062eaa474c80b7..cad66666339946c838b566938c50ad491b38e4f0 100644
--- a/src/SURFEX/convert_patch_isba.F90
+++ b/src/SURFEX/convert_patch_isba.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2010-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #########
       SUBROUTINE CONVERT_PATCH_ISBA (DTCO, DTV, IO, KDEC, KDEC2, PCOVER, OCOVER,&
@@ -45,7 +45,8 @@
 !!                           albedo, UV albedo not defined (conserv nrj when
 !!                           coupled to atmosphere)
 !!    P Samuelsson  10/2014  MEB
-!!
+!  P. Wautelet 15/02/2019: bugfix: allocate ZSTRESS only when its size has a meaning
+!
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
@@ -671,13 +672,14 @@ SUBROUTINE SET_STRESS
 IMPLICIT NONE
 !
 REAL, DIMENSION(PK%NSIZE_P)   :: ZWORK
-REAL, DIMENSION(SIZE(DTV%LPAR_STRESS,1),NVEGTYPE) :: ZSTRESS
+REAL, DIMENSION(:,:), ALLOCATABLE :: ZSTRESS
 INTEGER :: JI
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('CONVERT_PATCH_ISBA:SET_STRESS',0,ZHOOK_HANDLE)
 !
 IF (GDATA .AND. ANY(DTV%LDATA_STRESS)) THEN
+  ALLOCATE( ZSTRESS( SIZE(DTV%LPAR_STRESS,1),NVEGTYPE ) )
   ZSTRESS(:,:)=0.
   DO JVEG=1,NVEGTYPE
     DO JI = 1,PK%NSIZE_P
@@ -686,6 +688,7 @@ IF (GDATA .AND. ANY(DTV%LDATA_STRESS)) THEN
   ENDDO
   CALL AV_PGD_PARAM(DTV%XPAR_LAI, DTV%XPAR_VEG, &
                       ZWORK,DTV%XPAR_VEGTYPE,ZSTRESS,YVEG,'ARI',PK%NR_P,IO%NPATCH,KPATCH,KDECADE=KDEC2)
+  DEALLOCATE( ZSTRESS )
 ELSE
   CALL AV_PGD_1P(DTCO, ZWORK,PCOVER,XDATA_STRESS(:,:),YVEG,'ARI',OCOVER,PK%NR_P,IO%NPATCH,KPATCH,KDECADE=KDEC)
 ENDIF
diff --git a/src/SURFEX/coupling_isban.F90 b/src/SURFEX/coupling_isban.F90
index 1250e5719706301ef0e8e6e8fbc5f1db109bc8ea..45e5eea8f4176584b60b89e1c51e6e98230261d6 100644
--- a/src/SURFEX/coupling_isban.F90
+++ b/src/SURFEX/coupling_isban.F90
@@ -69,6 +69,7 @@ SUBROUTINE COUPLING_ISBA_n (DTCO, UG, U, USS, NAG, CHI, NCHI, MGN, MSF,  DTI, ID
 !!      P. LeMoigne  12/2014 EBA scheme update
 !!      R. Seferian  05/2015 : Add coupling fiels to vegetation_evol call
 !!      P. Tulet     06/2016 : call coupling_megan add RN leaves for MEGAN
+!!      J. Pianezzej 02/2019 : correction for use of MEGAN
 !!-------------------------------------------------------------------
 !
 USE MODD_DATA_COVER_n, ONLY : DATA_COVER_t
@@ -1154,6 +1155,12 @@ ENDIF
 IF (CHI%SVI%NBEQ>0 .AND. CHI%LCH_BIO_FLUX) THEN
  IF ((TRIM(CHI%CPARAMBVOC) == 'MEGAN').AND.(ANY(PEK%XLAI(:)/=XUNDEF))) THEN
 
+!UPG*PT
+ WHERE (GBK%XIACAN > 2000.) ! non physical values
+  GBK%XIACAN = 0.
+ END WHERE
+!UPG*PT
+
  CALL COUPLING_MEGAN_n(MGN, CHI, GK, PEK, &
                        KYEAR, KMONTH, KDAY, PTIME, IO%LTR_ML, &
                        IP_SLTYP, ZP_PFT, ZP_EF, &
diff --git a/src/SURFEX/coupling_megann.F90 b/src/SURFEX/coupling_megann.F90
index 6d5641bf78b6f3acecc378ebc22d0bd2b51e0803..88bb6fd8a65007c6e2a7ad20bf6366a8f53cb603 100644
--- a/src/SURFEX/coupling_megann.F90
+++ b/src/SURFEX/coupling_megann.F90
@@ -29,6 +29,7 @@
 !!    -------------
 !!    Original: 25/10/2014
 !!    Modified: 06/07/2017, J. Pianezze, adaptation for SurfEx v8.0
+!!    Modified: 06/07/2018, P. Tulet, correction for T leaf
 !!
 !!    EXTERNAL
 !!    --------
@@ -132,27 +133,14 @@ ZPFD(:) = 0.
 DO JSM = 1,SIZE(PIACAN,2)
   ZPFD(:) = ZPFD(:) + PIACAN(:, JSM)
 END DO
-! Test car PIACAN prends des valeurs non physiques au lever du soleil
-WHERE (ZPFD(:) .GT. 2000.) ZPFD(:) = 0.
 !
-! compute sun and shade leaf temperature upon RN_SHADE and RN_SUNLIT
-! thanks to D. Carrer
-!
-ZLSUT(:) = PTEMP(:) + 3.
+! UPG*PT en attendat un calcul propre. Temperature des feuilles à l'ombre egale a la
+! température de l'air. La temparature des feuilles au soleil egale a la valeur
+! max entre la temperature de l'air et la temperaure radiative.
+ZLSUT(:) = MAX(PLEAFT(:),PTEMP(:))
 ZLSHT(:) = PTEMP(:)
-!
-IF (OTR_ML) THEN
-  ! 
-  ZRN(:) = PRN_SUNLIT(:)**2 + PRN_SHADE(:)**2
-  !
-  WHERE ( ZRN(:).NE.0. )
-    ! for sun leaves
-    ZLSUT(:) = PLEAFT(:) * PRN_SUNLIT(:) * (PRN_SUNLIT(:)+PRN_SHADE(:))/ZRN(:)
-    ! for shade leaves
-    ZLSHT(:) = PLEAFT(:) * PRN_SHADE (:) * (PRN_SUNLIT(:)+PRN_SHADE(:))/ZRN(:)
-  END WHERE
-  !
-END IF
+!UPG*PT
+
 !
 ! MEGAN : calcul des facteurs d'ajustement et de perte dans la canopée.
 ! ZCFSPEC: classe de sorties MEGAN (voir SPC_NOCONVER.EXT)
diff --git a/src/SURFEX/coupling_seaflux_orogn.F90 b/src/SURFEX/coupling_seaflux_orogn.F90
index 71b257f9f1cc6ad8c05be6223221fbc855a7ea35..5d222e8480eba4d94bac84f3c51a259ecb074d32 100644
--- a/src/SURFEX/coupling_seaflux_orogn.F90
+++ b/src/SURFEX/coupling_seaflux_orogn.F90
@@ -11,7 +11,7 @@ SUBROUTINE COUPLING_SEAFLUX_OROG_n (SM, DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, P
                                     PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB,&
                                     PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF,       &
                                     PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF,  &
-                                    PPEQ_B_COEF, HTEST                        )  
+                                    PPEQ_B_COEF, PZWS, HTEST                        )  
 !     ###############################################################################
 !
 !!****  *COUPLING_SEAFLUX_OROG_n * - Modifies the input forcing if not
@@ -38,6 +38,7 @@ SUBROUTINE COUPLING_SEAFLUX_OROG_n (SM, DST, SLT, HPROGRAM, HCOUPLING, PTIMEC, P
 !!      J. Escobar    09/2012 SIZE(PTA) not allowed without-interface , replace by KI
 !!      B. Decharme  04/2013 new coupling variables
 !!                           improve forcing vertical shift
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!-------------------------------------------------------------
 !
 !
@@ -106,6 +107,7 @@ REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizonta
 !                                             !                                       (W/m2)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZWS      ! significant sea wave                  (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PZS       ! atmospheric model orography           (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
@@ -204,7 +206,7 @@ ENDIF
                              PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB,  &
                              PEMIS, PTSURF, PZ0, PZ0H, PQSURF, PPEW_A_COEF,         &
                              PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, ZPET_B_COEF,    &
-                             ZPEQ_B_COEF, HTEST                                     )
+                             ZPEQ_B_COEF, PZWS, HTEST                                     )
 !
 IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_OROG_N',1,ZHOOK_HANDLE)
 !-------------------------------------------------------------------------------------
diff --git a/src/SURFEX/coupling_seaflux_sbln.F90 b/src/SURFEX/coupling_seaflux_sbln.F90
index 857f16473668a9831029b3f31d3bcaab7deb85c3..53aa72d42ebc46a6e8c6ca068027000af37bd2d6 100644
--- a/src/SURFEX/coupling_seaflux_sbln.F90
+++ b/src/SURFEX/coupling_seaflux_sbln.F90
@@ -11,7 +11,7 @@ SUBROUTINE COUPLING_SEAFLUX_SBL_n (CHS, DTS, DGS, O, OR, G, S, SB, DST, SLT,
                                   PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                          &
                                   PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF,      &
                                   PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF,  &
-                                  PPEQ_B_COEF, HTEST                                             )
+                                  PPEQ_B_COEF, PZWS, HTEST                                           )
 !     ###############################################################################
 !
 !!****  *COUPLING_SEAFLUX_SBL_n * - Adds a SBL into SEAFLUX
@@ -38,6 +38,7 @@ SUBROUTINE COUPLING_SEAFLUX_SBL_n (CHS, DTS, DGS, O, OR, G, S, SB, DST, SLT,
 !!      S. Riette   10/2009 Iterative computation of XZ0
 !!      S. Riette   01/2010 Use of interpol_sbl to compute 10m wind diagnostic
 !!      B. Decharme  04/2013 new coupling variables
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !----------------------------------------------------------------
 !
 !
@@ -122,6 +123,7 @@ REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizonta
 !                                             !                                       (W/m2)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZWS      ! significant sea wave                  (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
 REAL, DIMENSION(KI), INTENT(IN)  :: PRAIN     ! liquid precipitation                  (kg/m2/s)
@@ -302,7 +304,7 @@ END IF
              PSV, PCO2, HSV, PRAIN, PSNOW, PLW, PDIR_SW, PSCA_SW, PSW_BANDS, PPS, ZPA,&
              PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB,      &
              PEMIS, PTSURF, PZ0, PZ0H, PQSURF, ZPEW_A_COEF, ZPEW_B_COEF,              &
-             ZPET_A_COEF, ZPEQ_A_COEF, ZPET_B_COEF, ZPEQ_B_COEF, HTEST)
+             ZPET_A_COEF, ZPEQ_A_COEF, ZPET_B_COEF, ZPEQ_B_COEF, PZWS, HTEST)
 !
 !-------------------------------------------------------------------------------------
 !
diff --git a/src/SURFEX/coupling_seafluxn.F90 b/src/SURFEX/coupling_seafluxn.F90
index 5ea7b516c971576bf25a3d80fa24f72ba2f7690c..612b8df120d49a315c7eb105120c4afac78cb6c4 100644
--- a/src/SURFEX/coupling_seafluxn.F90
+++ b/src/SURFEX/coupling_seafluxn.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     ###############################################################################
 SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, &
@@ -10,7 +10,7 @@ SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, &
                                PDIR_SW, PSCA_SW, PSW_BANDS, PPS, PPA, PSFTQ, PSFTH, PSFTS,      &
                                PSFCO2, PSFU, PSFV, PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF,    &
                                PZ0, PZ0H, PQSURF, PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF,        &
-                               PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF,  HTEST                 )  
+                               PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PZWS,  HTEST              )  
 !     ###############################################################################
 !
 !!****  *COUPLING_SEAFLUX_n * - Driver of the WATER_FLUX scheme for sea   
@@ -49,7 +49,9 @@ SUBROUTINE COUPLING_SEAFLUX_n (CHS, DTS, DGS, O, OR, G, S, DST, SLT, &
 !!      Modified    01/2015 : R. Séférian interactive ocaen surface albedo
 !!      Modified    03/2014 : M.N. Bouin possibility of wave parameters from external source
 !!      Modified    11/2014 : J. Pianezze : add currents for wave coupling
-!!                                       
+!!      Modified    02/2019 : S. Bielli Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!!      Modified    03/2019 : P. Wautelet: correct ZWS when variable not present in file
+!!      Modified    03/2019 : P. Wautelet: missing use MODI_GET_LUOUT
 !!---------------------------------------------------------------------
 !
 !
@@ -73,6 +75,10 @@ USE MODD_WATER_PAR,  ONLY : XEMISWAT, XEMISWATICE
 !
 USE MODD_WATER_PAR, ONLY : XALBSEAICE
 !
+#ifdef SFX_MNH
+USE MODD_FIELD_n, only: XZWS_DEFAULT
+#endif
+!
 !
 USE MODI_WATER_FLUX
 USE MODI_MR98
@@ -103,6 +109,7 @@ USE MODI_COUPLING_ICEFLUX_n
 USE MODI_SEAICE_GELATO1D_n
 !
 USE MODI_COUPLING_SLT_n
+USE MODI_GET_LUOUT
 !
 IMPLICIT NONE
 !
@@ -157,6 +164,7 @@ REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizonta
 !                                             !                                       (W/m2)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZWS      ! significant sea wave                  (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
 REAL, DIMENSION(KI), INTENT(IN)  :: PRAIN     ! liquid precipitation                  (kg/m2/s)
@@ -232,6 +240,8 @@ REAL, DIMENSION(KI) :: ZHU        ! Near surface relative humidity
 REAL, DIMENSION(KI) :: ZQA        ! specific humidity (kg/kg)
 REAL, DIMENSION(KI) :: ZEMIS      ! Emissivity at time t
 REAL, DIMENSION(KI) :: ZTRAD      ! Radiative temperature at time t
+REAL, DIMENSION(KI) :: ZHS        ! significant wave height
+REAL, DIMENSION(KI) :: ZTP        ! peak period
 !
 REAL, DIMENSION(KI) :: ZSST       ! XSST corrected for anomalously low values (which actually are sea-ice temp)
 REAL, DIMENSION(KI) :: ZMASK      ! A mask for diagnosing where seaice exists (or, for coupling_iceflux, may appear)
@@ -245,14 +255,17 @@ INTEGER                          :: ISIZE_ICE    ! number of points with some se
 !
 INTEGER                          :: ISWB       ! number of shortwave spectral bands
 INTEGER                          :: JSWB       ! loop counter on shortwave spectral bands
-INTEGER                          :: ISLT       ! number of sea salt variable
 !
 INTEGER :: IBEG, IEND
+INTEGER                          :: ISLT, IDST, JSV, IMOMENT   ! number of sea salt, dust variables
+!
+INTEGER :: ILUOUT
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !-------------------------------------------------------------------------------------
 ! Preliminaries:
 !-------------------------------------------------------------------------------------
+CALL GET_LUOUT(HPROGRAM,ILUOUT)
 IF (LHOOK) CALL DR_HOOK('COUPLING_SEAFLUX_N',0,ZHOOK_HANDLE)
 IF (HTEST/='OK') THEN
   CALL ABOR1_SFX('COUPLING_SEAFLUXN: FATAL ERROR DURING ARGUMENT TRANSFER')        
@@ -277,6 +290,8 @@ ZUSTAR   (:) = XUNDEF
 ZZ0      (:) = XUNDEF
 ZZ0H     (:) = XUNDEF
 ZQSAT    (:) = XUNDEF
+ZHS      (:) = XUNDEF
+ZTP      (:) = XUNDEF
 !
 ZSFTQ_ICE(:) = XUNDEF
 ZSFTH_ICE(:) = XUNDEF
@@ -317,6 +332,29 @@ PSFTS(:,:) = 0.
 ZHU = 1.
 !
 ZQA(:) = PQA(:) / PRHOA(:)
+
+! HS value from ECMWF file
+ZHS(:) = PZWS(:)
+#ifdef CPLOASIS
+! HS value from WW3 if activated
+IF (LCPL_WAVE) THEN
+  ZHS(:)=S%XHS(:)
+  ZTP(:)=S%XTP(:)
+ELSE
+  ZHS(:)=PZWS(:)
+  ZTP(:)=S%XTP(:)
+END IF
+#endif
+! if HS value is undef : constant value and alert message
+IF (ALL(ZHS==XUNDEF)) THEN
+#ifdef SFX_MNH
+ ZHS(:) = XZWS_DEFAULT
+ WRITE (ILUOUT,*) 'WARNING : no HS values from ECMWF or WW3, then it is initialized to a constant value of XZWS_DEFAULT m'
+#else
+ ZHS(:)=2.
+ WRITE (ILUOUT,*) 'WARNING : no HS values from ECMWF or WW3, then it is initialized to a constant value of 2 m'
+#endif
+END IF
 !
 ! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
 ! Time evolution
@@ -374,8 +412,16 @@ CALL COARE30_SEAFLUX(S, ZMASK, ISIZE_WATER, ISIZE_ICE,        &
               PTA, ZEXNA ,PRHOA, ZSST, ZEXNS, ZQA, PRAIN,     &
               PSNOW, ZWIND, PZREF, PUREF, PPS, ZQSAT,         &
               ZSFTH, ZSFTQ, ZUSTAR,                           &
-              ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H       )  
+              ZCD, ZCDN, ZCH, ZCE, ZRI, ZRESA_SEA, ZZ0H     )
 END SELECT
+
+#ifdef CPLOASIS
+IF (.NOT. LCPL_WAVE) THEN
+  S%XHS(:)=ZHS(:)
+  S%XTP(:)=ZTP(:)
+END IF
+#endif
+
 !
 !-------------------------------------------------------------------------------------
 !radiative properties at time t
@@ -442,7 +488,7 @@ PSFCO2(:) = - ZWIND(:)**2 * 1.13E-3 * 8.7 * 44.E-3 / ( 365*24*3600 )
 ! Scalar fluxes:
 !-------------------------------------------------------------------------------------
 !
-IF (CHS%SVS%NBEQ>0) THEN
+IF (CHS%SVS%NBEQ>0.AND.(KI.GT.0)) THEN
   !
   IF (CHS%CCH_DRY_DEP == "WES89") THEN
     !
@@ -475,7 +521,7 @@ IF (CHS%SVS%NBEQ>0) THEN
   !
 ENDIF
 !
-IF (CHS%SVS%NDSTEQ>0) THEN
+IF (CHS%SVS%NDSTEQ>0.AND.(KI.GT.0)) THEN
   !
   IBEG = CHS%SVS%NSV_DSTBEG
   IEND = CHS%SVS%NSV_DSTEND
@@ -499,7 +545,7 @@ IF (CHS%SVS%NDSTEQ>0) THEN
 ENDIF
 
 !
-IF (CHS%SVS%NSLTEQ>0) THEN
+IF (CHS%SVS%NSLTEQ>0.AND.(KI.GT.0)) THEN
   !
   IBEG = CHS%SVS%NSV_SLTBEG
   IEND = CHS%SVS%NSV_SLTEND
@@ -510,6 +556,9 @@ IF (CHS%SVS%NSLTEQ>0) THEN
                       SIZE(ZUSTAR,1),           & !I [nbr] number of sea point
                       ISLT,                     & !I [nbr] number of sea salt variables
                       ZWIND,                    & !I [m/s] wind velocity
+                      ZHS,                      & !I [m] significant sea wave
+                      S%XSST,                   &
+                      ZUSTAR,                   &
                       PSFTS(:,IBEG:IEND) )   
   !
   CALL DSLT_DEP(PSV(:,IBEG:IEND), PSFTS(:,IBEG:IEND), ZUSTAR, ZRESA_SEA, PTA, &
@@ -517,11 +566,11 @@ IF (CHS%SVS%NSLTEQ>0) THEN
                 XDENSITY_SLT, XMOLARWEIGHT_SLT, ZCONVERTFACM0_SLT, ZCONVERTFACM6_SLT, &
                 ZCONVERTFACM3_SLT, LVARSIG_SLT, LRGFIX_SLT, CVERMOD  )  
   !
-  CALL MASSFLUX2MOMENTFLUX(         &
-                PSFTS(:,IBEG:IEND), & !I/O ![kg/m2/sec] In: flux of only mass, out: flux of moments
+  CALL MASSFLUX2MOMENTFLUX(                     &
+                PSFTS(:,IBEG:IEND),             & !I/O [kg/m2/sec] In: flux of only mass, out: flux of moments
                 PRHOA,                          & !I [kg/m3] air density
-                SLT%XEMISRADIUS_SLT,            &!I [um] emitted radius for the modes (max 3)
-                SLT%XEMISSIG_SLT,               &!I [-] emitted sigma for the different modes (max 3)
+                SLT%XEMISRADIUS_SLT,            & !I [um] emitted radius for the modes (max 3)
+                SLT%XEMISSIG_SLT,               & !I [-] emitted sigma for the different modes (max 3)
                 NSLTMDE,                        &
                 ZCONVERTFACM0_SLT,              &
                 ZCONVERTFACM6_SLT,              &
diff --git a/src/SURFEX/coupling_sean.F90 b/src/SURFEX/coupling_sean.F90
index 97a8b1f7c6b4bc5a12c04551a6e869c22869d3b8..ca4ae208190a3df6849a9732c4918ee675ba8c55 100644
--- a/src/SURFEX/coupling_sean.F90
+++ b/src/SURFEX/coupling_sean.F90
@@ -10,7 +10,7 @@ SUBROUTINE COUPLING_SEA_n (SM, DGO, DL, DLC, U, DST, SLT, HPROGRAM, HCOUPLING, P
                  PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                                    &
                  PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF,                &
                  PPEW_A_COEF, PPEW_B_COEF,                                                   &
-                 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST   )  
+                 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PZWS, HTEST   )  
 !     ###############################################################################
 !
 !!****  *COUPLING_SEA_n * - Chooses the surface schemes for sea   
@@ -33,6 +33,7 @@ SUBROUTINE COUPLING_SEA_n (SM, DGO, DL, DLC, U, DST, SLT, HPROGRAM, HCOUPLING, P
 !!    -------------
 !!      Original    01/2004
 !!      B. Decharme  04/2013 new coupling variables
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!-----------------------------------------------------------------------
 !
 !
@@ -104,6 +105,7 @@ REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizonta
 !                                             !                                       (W/m2)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZWS      ! significant sea wave                  (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PZS       ! atmospheric model orography           (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
@@ -150,7 +152,7 @@ IF (U%CSEA=='SEAFLX') THEN
                  PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV,                                    &
                  PTRAD, PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF,                &
                  PPEW_A_COEF, PPEW_B_COEF,                                                   &
-                 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, HTEST                 )  
+                 PPET_A_COEF, PPEQ_A_COEF, PPET_B_COEF, PPEQ_B_COEF, PZWS, HTEST              )  
 ELSE IF (U%CSEA=='FLUX  ') THEN
   CALL COUPLING_IDEAL_FLUX(DGO, DL, DLC, HPROGRAM, HCOUPLING, PTIMEC,                      &
                  PTSTEP, KYEAR, KMONTH, KDAY, PTIME, KI, KSV, KSW,                           &
diff --git a/src/SURFEX/coupling_sltn.F90 b/src/SURFEX/coupling_sltn.F90
index 7e66f3fa5f6cbd143802a1d3f054ce40c4e5b0cc..284fc093527a26c6342ca61c0ac9e7b190aa9b7b 100644
--- a/src/SURFEX/coupling_sltn.F90
+++ b/src/SURFEX/coupling_sltn.F90
@@ -3,16 +3,26 @@
 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !SFX_LIC for details. version 1.
 SUBROUTINE COUPLING_SLT_n (SLT, &
-      KI,                   &!I [nbr] number of sea points 
-      KSLT,                 &!I [nbr] number of sea points 
-      PWIND,                &!I Wind velocity
-      PSFSLT                &!O [kg/m2/sec] flux of sea salt
+      KI,                       &!I [nbr] number of sea points 
+      KSLT,                     &!I [nbr] number of sea salt variables 
+      PWIND,                    &!I Wind velocity
+! ++ PIERRE / MARINE SSA - MODIF ++
+      PWHEIGHT,                 &! Significant height of wind-generated waves (in ECMWF analyses)
+                                 ! local pour l'instant, PWHEIGHT plus tard
+      PSST,                     &! Sea water temperature (C) 
+      PUSTAR,                   &! Friction velocity (ecmwf?) Calcule dans coupling_seafluxn.F90
+! -- PIERRE / MARINE SSA - MODIF --
+      PSFSLT                    &!O [kg/m2/sec] production flux of sea salt
       ) 
   
 !PURPOSE
 !-------
 !  Compute sea salt emission  upon Vignatti et al, 2001
+! ++ PIERRE / MARINE SSA - MODIF ++
+!  Compute sea salt emission  upon Ovadnevaite et al, 2014
+! -- PIERRE / MARINE SSA - MODIF --
 !
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !AUTHOR
 !-------
 ! P. Tulet
@@ -35,45 +45,64 @@ TYPE(SLT_t), INTENT(INOUT) :: SLT
 INTEGER, INTENT(IN)                :: KI             !I Number of sea points
 INTEGER, INTENT(IN)                :: KSLT           !I Number of sea salt emission variables
 REAL, DIMENSION(KI),      INTENT(IN)  :: PWIND       !I wind velocity
-REAL, DIMENSION(KI,KSLT), INTENT(OUT) :: PSFSLT      !Out: mole particles per mole air m/s *(MWdst/MWair*rhoair)(index #1)
-                                                     !Out: kg/m2/s (index #2)
-                                                     !Out: moles m6/moles air m/s *(MWdst/MWair*rhoair)(index #3)
+REAL, DIMENSION(KI,KSLT), INTENT(OUT) :: PSFSLT      !Out: kg/m2/s (index #2)
+! ++ PIERRE / MARINE SSA - MODIF ++
+REAL, DIMENSION(KI),      INTENT(INOUT)  :: PWHEIGHT !Significant height of wind-generated waves (in ECMWF analyses)
+REAL, DIMENSION(KI),      INTENT(IN)  :: PUSTAR   !Friction velocity (ecmwf?) : Unite: m.s^(-2)?
+REAL, DIMENSION(KI),      INTENT(IN)  :: PSST     ! Sea surface temperature (K)
+! -- PIERRE / MARINE SSA - MODIF --
+
 !LOCAL VARIABLES
-REAL,DIMENSION(KI,3)  :: ZSFSLT_MDE       ! sea salt flux from modes
-INTEGER               :: JN, JI           !Counter for sea salt modes
-REAL, DIMENSION(KI)   :: DZSPEED 
-INTEGER, DIMENSION(KI):: WCL
-REAL                  :: ZCONVERTFACM0_SLT
-REAL                  :: ZCONVERTFACM3_SLT
-REAL                  :: ZCONVERTFACM6_SLT
-!
-!REAL, PARAMETER :: MASS1FLUX(0:40) = (/  &
-!          0.000E+00, 2.483E-15, 2.591E-14, 1.022E-13, 2.707E-13, 5.761E-13,  &
-!          1.068E-12, 1.800E-12, 2.829E-12, 4.215E-12, 6.023E-12, 8.317E-12, &
-!          1.117E-11, 1.464E-11, 1.882E-11, 2.378E-11, 2.959E-11, 3.633E-11, &
-!          4.409E-11, 5.296E-11, 6.301E-11, 7.433E-11, 8.693E-11, 1.012E-10, &
-!          1.168E-10, 1.342E-10, 1.532E-10, 1.741E-10, 1.970E-10, 2.219E-10, &
-!          2.489E-10, 2.781E-10, 3.097E-10, 3.437E-10, 3.803E-10, 4.195E-10, &
-!          4.616E-10, 5.065E-10, 5.544E-10, 6.054E-10, 6.711E-10             /) 
-!
-!REAL, PARAMETER :: MASS2FLUX(0:40) = (/  &
-!          0.000E+00, 2.319E-13, 2.411E-12, 9.481E-12, 2.505E-11, 5.321E-11,  &
-!          9.850E-11, 1.658E-10, 2.602E-10, 3.874E-10, 5.529E-10, 7.628E-10,  &
-!          1.023E-09, 1.341E-09, 1.722E-09, 2.175E-09, 2.704E-09, 3.319E-09,  &
-!          4.026E-09, 4.832E-09, 5.746E-09, 6.776E-09, 7.925E-09, 9.214E-09,  &
-!          1.064E-08, 1.221E-08, 1.394E-08, 1.584E-08, 1.791E-08, 2.016E-08,  &
-!          2.261E-08, 2.526E-08, 2.812E-08, 3.120E-08, 3.451E-08, 3.806E-08,  &
-!          4.186E-08, 4.592E-08, 5.025E-08, 5.486E-08, 6.014E-08             /) 
-!
-!REAL, PARAMETER :: MASS3FLUX(0:40) = (/ 0.0, &
-!        1.783E-12, 1.579E-11, 5.852E-11, 1.501E-10, 3.134E-10, 5.740E-10, &
-!        9.597E-10, 1.500E-09, 2.227E-09, 3.175E-09, 4.378E-09, 5.872E-09, &
-!        7.698E-09, 9.897E-09, 1.250E-08, 1.556E-08, 1.912E-08, 2.323E-08, &
-!        2.792E-08, 3.325E-08, 3.927E-08, 4.608E-08, 5.356E-08, 6.194E-08, &
+REAL,DIMENSION(KI,JPMODE_SLT)  :: ZSFSLT_MDE ! sea salt flux from modes
+INTEGER                        :: JN, JI, II !Counter for sea salt modes
+REAL, DIMENSION(KI)            :: DZSPEED 
+INTEGER, DIMENSION(KI)         :: WCL
+REAL                           :: ZCONVERTFACM0_SLT  ![kg/mole*mole/molec] conversion factor
+                                                     !for moment fluxes and used fluxes
+REAL                           :: ZCONVERTFACM3_SLT 
+REAL                           :: ZCONVERTFACM6_SLT 
+!
+! ++ PIERRE / MARINE SSA - MODIF ++
+
+REAL, DIMENSION(5)             :: ZNUWATER   !  Temperature-dependant kinematic viscosity of 
+                                             ! sea-water (table of data to interpolate) (m².s-¹)
+REAL, DIMENSION(5)             :: ZWT ! Sea water temperature in table
+REAL, DIMENSION(KI)            :: ZREYNOLDS ! Reynolds Number
+REAL, DIMENSION(KI)            :: ZHVAGUE  ! sea wave height from wind if ZWS is unknown.
+REAL, DIMENSION(KI)            :: ZVISCO ! Temperature-dependant kinematic viscosity
+                                         ! of sea-water interpolated
+! -- PIERRE / MARINE SSA - MODIF --
+!
+!REAL, PARAMETER :: mass1flux(0:40) = (/  &
+!        0.000E+00, 2.483E-15, 2.591E-14, 1.022E-13, 2.707E-13, 5.761E-13,  &
+!        1.068E-12, 1.800E-12, 2.829E-12, 4.215E-12, 6.023E-12, 8.317E-12, &
+!        1.117E-11, 1.464E-11, 1.882E-11, 2.378E-11, 2.959E-11, 3.633E-11, &
+!        4.409E-11, 5.296E-11, 6.301E-11, 7.433E-11, 8.693E-11, 1.012E-10, &
+!        1.168E-10, 1.342E-10, 1.532E-10, 1.741E-10, 1.970E-10, 2.219E-10, &
+!        2.489E-10, 2.781E-10, 3.097E-10, 3.437E-10, 3.803E-10, 4.195E-10, &
+!        4.616E-10, 5.065E-10, 5.544E-10, 6.054E-10, 6.711E-10             /) 
+
+!REAL, PARAMETER :: mass2flux(0:40) = (/  &
+!        0.000E+00, 2.319E-13, 2.411E-12, 9.481E-12, 2.505E-11, 5.321E-11,  &
+!        9.850E-11, 1.658E-10, 2.602E-10, 3.874E-10, 5.529E-10, 7.628E-10,  &
+!       1.023E-09, 1.341E-09, 1.722E-09, 2.175E-09, 2.704E-09, 3.319E-09,  &
+!       4.026E-09, 4.832E-09, 5.746E-09, 6.776E-09, 7.925E-09, 9.214E-09,  &
+!       1.064E-08, 1.221E-08, 1.394E-08, 1.584E-08, 1.791E-08, 2.016E-08,  &
+!        2.261E-08, 2.526E-08, 2.812E-08, 3.120E-08, 3.451E-08, 3.806E-08,  &
+!        4.186E-08, 4.592E-08, 5.025E-08, 5.486E-08, 6.014E-08             /) 
+
+!REAL, PARAMETER :: mass3flux(0:40) = (/ 0.0, &
+!      1.783E-12, 1.579E-11, 5.852E-11, 1.501E-10, 3.134E-10, 5.740E-10, &
+!      9.597E-10, 1.500E-09, 2.227E-09, 3.175E-09, 4.378E-09, 5.872E-09, &
+!      7.698E-09, 9.897E-09, 1.250E-08, 1.556E-08, 1.912E-08, 2.323E-08, &
+!      2.792E-08, 3.325E-08, 3.927E-08, 4.608E-08, 5.356E-08, 6.194E-08, &
 !        7.121E-08, 8.143E-08, 9.266E-08, 1.049E-07, 1.183E-07, 1.329E-07, &
 !        1.487E-07, 1.658E-07, 1.843E-07, 2.041E-07, 2.255E-07, 2.484E-07, &
 !        2.729E-07, 2.991E-07, 3.270E-07, 3.517E-07 /) 
 
+REAL, PARAMETER :: HVAGUE(1:9) = (/ 0., 0.1, 0.5, 1.25, 2.5, 4., 6., 9., 14. /)
+REAL, PARAMETER :: VVENT(1:9) = (/  1., 2.7, 4.1, 6.3, 8.3, 11.1, 13.8, &
+                                    16.6, 19.4/)
 
 REAL, PARAMETER :: NUMB1FLUX(0:40) = (/ &
          0.000E+00, 3.004E+01, 3.245E+02, 1.306E+03, 3.505E+03, 7.542E+03,  &
@@ -107,7 +136,7 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !!    M0=#/molec_{air}
 !!    M6=um6/molec_{air}*1.d6
 !!    The surface model should have (for sea salt)
-!!    M0=#/m3*[kg_{dst}/mole_{dst}/XAVOGADRO]
+!!    M0=#/m3*[kg_{slt}/mole_{slt}/XAVOGADRO]
 !!    M3=kg/m3
 !!    M6=um6/m3
 !!    REFERENCE
@@ -119,71 +148,175 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK('COUPLING_SLT_N',0,ZHOOK_HANDLE)
 !
 !Factor which is needed so that all gains normal units when leaving ground paramn
-ZCONVERTFACM0_SLT = XMOLARWEIGHT_SLT / XAVOGADRO !(kg_dst/mol_dst)/(molec/mol)
+ZCONVERTFACM0_SLT = XMOLARWEIGHT_SLT / XAVOGADRO !(kg_slt/mol_slt)/(molec/mol)
 !Factor which is needed for moment 6, there is a factor 1.d6 transported around in M6 in MESONH
 ZCONVERTFACM6_SLT = XMOLARWEIGHT_SLT / XAVOGADRO*1.d6
 ZCONVERTFACM3_SLT = 4./3.*XPI*XDENSITY_SLT / 1.d18
 !
 PSFSLT(:,:)=0.d0
 !
-IF (CEMISPARAM_SLT.eq."Vig01")THEN
-  !
-  ! Vignatti et al. 2001 (in particles.cm-2.s-1)
-  ZSFSLT_MDE(:,1) =  10**(0.09  *PWIND(:) + 0.283)   ! fine mode
-  ZSFSLT_MDE(:,2) =  10**(0.0422*PWIND(:) + 0.288)   ! median mode
-  ZSFSLT_MDE(:,3) =  10**(0.069 *PWIND(:) - 3.5)     ! coarse mode
-  ! convert into  particles.m-2.s-1)
-  ZSFSLT_MDE(:,1) = MAX(ZSFSLT_MDE(:,1) * 1E4, 1E-10)  
-  ZSFSLT_MDE(:,2) = MAX(ZSFSLT_MDE(:,2) * 1E4, 1E-10)  
-  ZSFSLT_MDE(:,3) = MAX(ZSFSLT_MDE(:,3) * 1E4, 1E-10)  
-  !
-ELSE ! Use Schultz et al., 2004
-  !
+!+ Marine
+IF (CEMISPARAM_SLT .eq. "Ova14") THEN ! Rajouter Ova14 dans fichier initialisation
+  ZHVAGUE(:)  = 0.
+  DO II = 1, 8
+!++cb++19/10/16 modif de la formule : + de vent => vagues + hautes
+!    WHERE ((PWIND(:) .GT. VVENT(II)).AND.(PWIND(:) .LT. VVENT(II+1)))
+    WHERE ((PWIND(:) .GT. VVENT(II)).AND.(PWIND(:) .LT. VVENT(II+1)))
+!      ZHVAGUE(:) = HVAGUE(II) + (VVENT(II+1)  - PWIND(:)) * &
+      ZHVAGUE(:) = HVAGUE(II) + (PWIND(:)     - VVENT(II+1)) * &
+                                (HVAGUE(II+1) - HVAGUE(II)) / &
+                                (VVENT(II+1)  - VVENT(II))
+!--cb--
+    ENDWHERE
+  ENDDO
+
+  WHERE (PWIND(:) .GE. VVENT(9))
+    ZHVAGUE(:) = HVAGUE(9)
+  END WHERE
+
+  WHERE (PWHEIGHT(:) .EQ. -1.)
+    PWHEIGHT(:) = ZHVAGUE(:)
+  END WHERE
+
+  ZWT = (/ 273.15, 283.15, 293.15, 303.15, 313.15 /)  ! Unite : K
+  ZNUWATER = (/ 1.854E-6, 1.36E-6, 1.051E-6, 0.843E-6, 0.695E-6 /) 
+! Unite : m².s^(-1) Pour une salinite = 35g/kg.
+! En mer Mediterranee = 38.5g/kg (Lewis and Schwartz)
+
+! Initialisation des valeurs de ZVISCO, ZREYNOLDS
+  ZVISCO(:)    = 0.
+  ZREYNOLDS(:) = 0.
+
+  ! Tableau d'interpolation pour calculer ZNUWATER en fonction de la SST
+  ! Cas ou 0 < SST < 10 C
+  WHERE ((PSST(:) >= 273.15).AND.(PSST(:) < 283.15))
+    ZVISCO(:) = ZNUWATER(1) + (PSST(:) - ZWT(1)) * (ZNUWATER(2)-ZNUWATER(1)) / &
+                (ZWT(2) - ZWT(1))
+  ENDWHERE
+
+  ! Cas ou 10 < SST < 20 C
+  WHERE ((PSST(:) >= 283.15).AND.(PSST(:) < 293.15))
+    ZVISCO(:) = ZNUWATER(2) + (PSST(:) - ZWT(2)) * (ZNUWATER(3)-ZNUWATER(2)) / &
+                (ZWT(3) - ZWT(2))
+  ENDWHERE
+
+  ! Cas ou 20 < SST < 30 C
+  WHERE ((PSST(:) >= 293.15).AND.(PSST(:) < 303.15))
+    ZVISCO(:) = ZNUWATER(3) + (PSST(:) - ZWT(3)) * (ZNUWATER(4)-ZNUWATER(3)) / &
+                (ZWT(4) - ZWT(3))
+  ENDWHERE
+
+  ! Cas ou 30 < SST < 40 C
+  WHERE ((PSST(:) >= 303.15).AND.(PSST(:) < 313.15))
+    ZVISCO(:) = ZNUWATER(4) + (PSST(:) - ZWT(4)) * (ZNUWATER(5)-ZNUWATER(4)) / &
+                (ZWT(5) - ZWT(4))
+  ENDWHERE
+
+! Calcul du nombre de Reynolds
+  ZREYNOLDS(:) = (PUSTAR(:) * PWHEIGHT(:)) / ZVISCO(:)
+
+! Calcul du flux en nombre pour chaque mode
+
+! Ovadnevaite et al. 2014 
+!!!!! Total number flux, Unite ZSDSLT_MDE ne correspond pas au total number
+!flux mais au size dependent SSA production flux
+
+! Ecrire equation integration pour chaque mode
+
+!Condition d'emission : ZREYNOLDS > 1E5
+
+  WHERE (ZREYNOLDS(:) > 1.E5)
+    ZSFSLT_MDE(:,1) = 104.51 * ( ZREYNOLDS(:) - 1.E5)**0.556
+    ZSFSLT_MDE(:,2) = 0.044  * ( ZREYNOLDS(:) - 1.E5)**1.08
+    ZSFSLT_MDE(:,3) = 149.64 * ( ZREYNOLDS(:) - 1.E5)**0.545
+    ZSFSLT_MDE(:,4) = 2.96   * ( ZREYNOLDS(:) - 1.E5)**0.79
+  ENDWHERE
+  WHERE (ZREYNOLDS(:) > 2.E5)
+    ZSFSLT_MDE(:,5) = 0.52   * ( ZREYNOLDS(:) - 2.E5)**0.87
+  ENDWHERE
+
+
+
+  WHERE (ZREYNOLDS(:) <= 1.E5)
+    ZSFSLT_MDE(:,1) = 1.E-10
+    ZSFSLT_MDE(:,2) = 1.E-10
+    ZSFSLT_MDE(:,3) = 1.E-10
+    ZSFSLT_MDE(:,4) = 1.E-10
+  ENDWHERE
+  WHERE (ZREYNOLDS(:) <= 2.E5)
+    ZSFSLT_MDE(:,5) = 1.E-10
+  ENDWHERE
+
+! Controle avec des valeurs limites , Pas besoin de la conversion 1E4 pour Ova
+! car deja en m-2
+  ZSFSLT_MDE(:,1) = MAX(ZSFSLT_MDE(:,1) , 1.E-10)
+  ZSFSLT_MDE(:,2) = MAX(ZSFSLT_MDE(:,2) , 1.E-10)
+  ZSFSLT_MDE(:,3) = MAX(ZSFSLT_MDE(:,3) , 1.E-10)
+  ZSFSLT_MDE(:,4) = MAX(ZSFSLT_MDE(:,4) , 1.E-10)
+  ZSFSLT_MDE(:,5) = MAX(ZSFSLT_MDE(:,5) , 1.E-10)
+!- Marine
+
+ELSEIF (CEMISPARAM_SLT .eq. "Vig01") THEN
+! Vignatti et al. 2001 (in particles.cm-2.s-1) : en #.cm-3 en fait
+  ZSFSLT_MDE(:,1) =  10.**(0.09  *PWIND(:) + 0.283)   ! fine mode
+  ZSFSLT_MDE(:,2) =  10.**(0.0422*PWIND(:) + 0.288)   ! median mode
+  ZSFSLT_MDE(:,3) =  10.**(0.069 *PWIND(:) - 3.5)     ! coarse mode
+
+! convert into  particles.m-2.s-1)
+  ZSFSLT_MDE(:,1) = MAX(ZSFSLT_MDE(:,1) * 1.E4, 1.E-10)
+  ZSFSLT_MDE(:,2) = MAX(ZSFSLT_MDE(:,2) * 1.E4, 1.E-10)
+  ZSFSLT_MDE(:,3) = MAX(ZSFSLT_MDE(:,3) * 1.E4, 1.E-10)
+!
+ELSEIF (CEMISPARAM_SLT .eq. "Sch04") THEN! Use Schultz et al., 2004
   WCL(:) = INT(PWIND(:))
   WCL(:) = MAX (0, MIN(WCL(:), 39))
-  !
+ 
   DZSPEED(:) = MAX(0., MIN(PWIND(:) - FLOAT(WCL(:)), 1.))
-  !
-  ! Flux given  in  particles.m-2 s-1
-  !
-  DO JI=1,KI
-    !plm-gfortran
-    ZSFSLT_MDE(JI,1) = NUMB1FLUX(WCL(JI)) + (NUMB1FLUX(WCL(JI)+1)-NUMB1FLUX(WCL(JI)))*DZSPEED(JI)
-    ZSFSLT_MDE(JI,2) = NUMB2FLUX(WCL(JI)) + (NUMB2FLUX(WCL(JI)+1)-NUMB2FLUX(WCL(JI)))*DZSPEED(JI)
-    ZSFSLT_MDE(JI,3) = NUMB3FLUX(WCL(JI)) + (NUMB3FLUX(WCL(JI)+1)-NUMB3FLUX(WCL(JI)))*DZSPEED(JI)
-    !plm-gfortran
-  ENDDO
-  !
+ !
+ ! Flux given  in  particles.m-2 s-1
+ !
+  DO JI = 1, KI
+   !plm-gfortran
+    ZSFSLT_MDE(JI,1) = NUMB1FLUX(WCL(JI)) + &
+                      (NUMB1FLUX(WCL(JI)+1)-NUMB1FLUX(WCL(JI)))*DZSPEED(JI)
+    ZSFSLT_MDE(JI,2) = NUMB2FLUX(WCL(JI)) + &
+                      (NUMB2FLUX(WCL(JI)+1)-NUMB2FLUX(WCL(JI)))*DZSPEED(JI)
+    ZSFSLT_MDE(JI,3) = NUMB3FLUX(WCL(JI)) + &
+                      (NUMB3FLUX(WCL(JI)+1)-NUMB3FLUX(WCL(JI)))*DZSPEED(JI)
+   !plm-gfortran
+  END DO
 END IF
 !
-DO JN=1,JPMODE_SLT
+DO JN = 1, JPMODE_SLT
+
+! convert  particles.m-2 s-1 into kg.m-2.s-1
+! N'est calculé que pour le moment 3 (en masse), la conversion pour les autres
+! flux de moments se fait plus tard (mode_dslt_surf.F90 MASSFLUX2MOMENTFLUX)
+!+Marine
   !
-  IF (LVARSIG_SLT) THEN
-    !
-    PSFSLT(:,1+(JN-1)*3) = ZSFSLT_MDE(:,JORDER_SLT(JN))
-    PSFSLT(:,2+(JN-1)*3) = PSFSLT(:,1+(JN-1)*3) * (SLT%XEMISRADIUS_SLT(JN)**3)*EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JN))**2)  
-    PSFSLT(:,3+(JN-1)*3) = PSFSLT(:,1+(JN-1)*3) * (SLT%XEMISRADIUS_SLT(JN)**6)*EXP(18. * LOG(SLT%XEMISSIG_SLT(JN))**2)  
-    !
-    ! Conversion into fluxes
-    PSFSLT(:,1+(JN-1)*3) = PSFSLT(:,1+(JN-1)*3) * ZCONVERTFACM0_SLT
-    PSFSLT(:,2+(JN-1)*3) = PSFSLT(:,1+(JN-1)*3) * ZCONVERTFACM3_SLT
-    PSFSLT(:,3+(JN-1)*3) = PSFSLT(:,3+(JN-1)*3) * ZCONVERTFACM6_SLT
-
-  ELSE IF (LRGFIX_SLT) THEN
-    PSFSLT(:,JN) =  ZSFSLT_MDE(:,JORDER_SLT(JN)) * (SLT%XEMISRADIUS_SLT(JN)**3)*EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JN))**2) 
-    ! Conversion into fluxes
-    PSFSLT(:,JN) = PSFSLT(:,JN) * ZCONVERTFACM3_SLT
-
-  ELSE
-    PSFSLT(:,1+(JN-1)*2) = ZSFSLT_MDE(:,JORDER_SLT(JN)) 
-    PSFSLT(:,2+(JN-1)*2) = PSFSLT(:,1+(JN-1)*2) * (SLT%XEMISRADIUS_SLT(JN)**3)*EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JN))**2) 
-
-    ! Conversion into fluxes
-    PSFSLT(:,1+(JN-1)*2) = PSFSLT(:,1+(JN-1)*2) * ZCONVERTFACM0_SLT
-    PSFSLT(:,2+(JN-1)*2) = PSFSLT(:,1+(JN-1)*2) * ZCONVERTFACM3_SLT
-
-  ENDIF
+  IF (LVARSIG_SLT) THEN ! cas 3 moment
+
+    PSFSLT(:,2+(JN-1)*3) = ZSFSLT_MDE(:,JORDER_SLT(JN)) &
+                            * ((SLT%XEMISRADIUS_SLT(JORDER_SLT(JN))**3) &
+                            * EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JORDER_SLT(JN)))**2)) &
+                            * ZCONVERTFACM3_SLT
+
+  ELSEIF (LRGFIX_SLT) THEN ! cas 1 moment
+    PSFSLT(:,JN) =  ZSFSLT_MDE(:,JORDER_SLT(JN)) &
+                      * (SLT%XEMISRADIUS_SLT(JORDER_SLT(JN))**3) &
+                      * EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JORDER_SLT(JN)))**2) &
+                      * ZCONVERTFACM3_SLT
+
+  ELSE ! cas 2 moments
+
+    PSFSLT(:,2+(JN-1)*2) = ZSFSLT_MDE(:,JORDER_SLT(JN)) &
+                            * ((SLT%XEMISRADIUS_SLT(JORDER_SLT(JN))**3) &
+                            * EXP(4.5 * LOG(SLT%XEMISSIG_SLT(JORDER_SLT(JN)))**2)) &
+                            * ZCONVERTFACM3_SLT
+! -- PIERRE / MARINE SSA - MODIF --
+  END IF
 END DO
 
+
 IF (LHOOK) CALL DR_HOOK('COUPLING_SLT_N',1,ZHOOK_HANDLE)
 END SUBROUTINE COUPLING_SLT_n
diff --git a/src/SURFEX/coupling_surf_atmn.F90 b/src/SURFEX/coupling_surf_atmn.F90
index f9fdb2f8ecc688ee978fc52c24137e8a27bfd143..9a52eed46e1b6525e9e0ad2a000b97fc84ef205e 100644
--- a/src/SURFEX/coupling_surf_atmn.F90
+++ b/src/SURFEX/coupling_surf_atmn.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #################################################################################
 SUBROUTINE COUPLING_SURF_ATM_n (YSC, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR, KMONTH,  &
@@ -10,7 +10,7 @@ SUBROUTINE COUPLING_SURF_ATM_n (YSC, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR,
                                 PPS, PPA, PSFTQ, PSFTH, PSFTS, PSFCO2, PSFU, PSFV, PTRAD, &
                                 PDIR_ALB, PSCA_ALB, PEMIS, PTSURF, PZ0, PZ0H, PQSURF,     &
                                 PPEW_A_COEF, PPEW_B_COEF, PPET_A_COEF, PPEQ_A_COEF,       &
-                                PPET_B_COEF, PPEQ_B_COEF, HTEST           )
+                                PPET_B_COEF, PPEQ_B_COEF, PZWS, HTEST           )
 !     #################################################################################
 !
 !!****  *COUPLING_INLAND_WATER_n * - Driver to call the schemes for the 
@@ -38,6 +38,8 @@ SUBROUTINE COUPLING_SURF_ATM_n (YSC, HPROGRAM, HCOUPLING, PTIMEC, PTSTEP, KYEAR,
 !!      B. Decharme 04/2013 new coupling variables and replace RW_PRECIP_n by CPL_GCM_n
 !!      Modified    06/2013 by J.Escobar  : replace DOUBLE PRECISION by REAL to handle problem for promotion of real on IBM SP
 !!      R. Séférian 03/2014 Adding decoupling between CO2 seen by photosynthesis and radiative CO2
+!!      P. Wautelet 02/2019 bug correction KI->KSIZE for size of KMASK argument in TREAT_SURF
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!-------------------------------------------------------------
 !
 !
@@ -127,6 +129,7 @@ REAL, DIMENSION(KI), INTENT(IN)  :: PLW       ! longwave radiation (on horizonta
 !                                             !                                       (W/m2)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPS       ! pressure at atmospheric model surface (Pa)
 REAL, DIMENSION(KI), INTENT(IN)  :: PPA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KI), INTENT(IN)  :: PZWS      ! significant sea wave                  (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PZS       ! atmospheric model orography           (m)
 REAL, DIMENSION(KI), INTENT(IN)  :: PCO2      ! CO2 concentration in the air          (kg/m3)
 REAL, DIMENSION(KI), INTENT(IN)  :: PSNOW     ! snow precipitation                    (kg/m2/s)
@@ -450,9 +453,9 @@ SUBROUTINE TREAT_SURF(KTILE,KSIZE,KMASK)
 !
 IMPLICIT NONE
 !
-INTEGER, INTENT(IN)               :: KTILE
-INTEGER, INTENT(IN)               :: KSIZE
-INTEGER, INTENT(IN), DIMENSION(KI) :: KMASK
+INTEGER, INTENT(IN)                   :: KTILE
+INTEGER, INTENT(IN)                   :: KSIZE
+INTEGER, INTENT(IN), DIMENSION(KSIZE) :: KMASK
 !
 REAL, DIMENSION(KSIZE) :: ZP_TSUN     ! solar time                    (s from midnight)
 REAL, DIMENSION(KSIZE) :: ZP_ZREF     ! height of T,q forcing                 (m)
@@ -474,6 +477,7 @@ REAL, DIMENSION(KSIZE) :: ZP_LW       ! longwave radiation (on horizontal surf.)
 !                                              !                                       (W/m2)
 REAL, DIMENSION(KSIZE) :: ZP_PS       ! pressure at atmospheric model surface (Pa)
 REAL, DIMENSION(KSIZE) :: ZP_PA       ! pressure at forcing level             (Pa)
+REAL, DIMENSION(KSIZE) :: ZP_ZWS      ! significant sea wave                  (m)
 REAL, DIMENSION(KSIZE) :: ZP_ZS       ! atmospheric model orography           (m)
 REAL, DIMENSION(KSIZE) :: ZP_CO2      ! CO2 concentration in the air          (kg/m3)
 REAL, DIMENSION(KSIZE,KSV) :: ZP_SV       ! scalar concentration in the air
@@ -531,6 +535,7 @@ DO JJ=1,KSIZE
   ZP_LW(JJ)         = PLW         (JI)
   ZP_PS(JJ)         = PPS         (JI)
   ZP_PA(JJ)         = PPA         (JI)
+  ZP_ZWS(JJ)        = PZWS        (JI)
   ZP_ZS(JJ)         = PZS         (JI)
 ENDDO
 !
@@ -583,7 +588,7 @@ IF (KTILE==1) THEN
                       ZP_PS, ZP_PA, ZP_SFTQ, ZP_SFTH, ZP_SFTS, ZP_SFCO2, ZP_SFU, ZP_SFV,     &
                       ZP_TRAD, ZP_DIR_ALB, ZP_SCA_ALB, ZP_EMIS, ZP_TSURF, ZP_Z0, ZP_Z0H,     &
                       ZP_QSURF, ZP_PEW_A_COEF, ZP_PEW_B_COEF, ZP_PET_A_COEF, ZP_PEQ_A_COEF,  &
-                      ZP_PET_B_COEF, ZP_PEQ_B_COEF, 'OK'        )
+                      ZP_PET_B_COEF, ZP_PEQ_B_COEF, ZP_ZWS, 'OK'        )
   !
 ELSEIF (KTILE==2) THEN
   !
diff --git a/src/SURFEX/default_ch_bio_flux.F90 b/src/SURFEX/default_ch_bio_flux.F90
index a7a3abb71f9543286b4bd27a23babb4f77ecb218..b303ab82f9f9e2de19605c054e48b2b6094dd80e 100644
--- a/src/SURFEX/default_ch_bio_flux.F90
+++ b/src/SURFEX/default_ch_bio_flux.F90
@@ -3,7 +3,7 @@
 !SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !SFX_LIC for details. version 1.
 !     #########
-      SUBROUTINE DEFAULT_CH_BIO_FLUX(OCH_BIO_FLUX)
+      SUBROUTINE DEFAULT_CH_BIO_FLUX(OCH_BIO_FLUX,PDAILYPAR,PDAILYTEMP)
 !     ########################################################################
 !
 !!****  *DEFAULT_CH_BIO_FLUX* - routine to set default values for the configuration for CH_BIO_FLUX scheme
@@ -32,7 +32,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    08/2007 
-
+!!      J.Pianezzej 02/2019 : correction for use of MEGAN
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -49,6 +49,8 @@ IMPLICIT NONE
 !              -------------------------
 !
 LOGICAL,  INTENT(OUT) :: OCH_BIO_FLUX  ! flag for the calculation of biogenic fluxes
+REAL,     INTENT(OUT), OPTIONAL :: PDAILYPAR  ! default values for megan PAR   temperature
+REAL,     INTENT(OUT), OPTIONAL :: PDAILYTEMP ! default values for megan daily temperature
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 
 !
@@ -60,6 +62,8 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('DEFAULT_CH_BIO_FLUX',0,ZHOOK_HANDLE)
 OCH_BIO_FLUX= .FALSE.
+IF (PRESENT(PDAILYPAR))  PDAILYPAR   = 200.
+IF (PRESENT(PDAILYTEMP)) PDAILYTEMP  = 293.
 IF (LHOOK) CALL DR_HOOK('DEFAULT_CH_BIO_FLUX',1,ZHOOK_HANDLE)
 !
 !-------------------------------------------------------------------------------
diff --git a/src/SURFEX/default_slt.F90 b/src/SURFEX/default_slt.F90
index e4f99f54a4c89da71b6fe82f411f277676888cc0..ca96f03f98d0b5c56c5cbd4b31838ac4d8c27045 100644
--- a/src/SURFEX/default_slt.F90
+++ b/src/SURFEX/default_slt.F90
@@ -32,6 +32,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    03/2005 
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -52,8 +53,10 @@ IMPLICIT NONE
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 IF (LHOOK) CALL DR_HOOK('DEFAULT_SLT',0,ZHOOK_HANDLE)
-CEMISPARAM_SLT = 'Vig01'
-JPMODE_SLT     = 3
+! ++ PIERRE / MARINE SSA - MODIF ++
+CEMISPARAM_SLT = 'Ova14'
+JPMODE_SLT     = 5
+! -- PIERRE / MARINE SSA - MODIF --
 LVARSIG_SLT    = .FALSE.
 LRGFIX_SLT     = .TRUE.
 IF (LHOOK) CALL DR_HOOK('DEFAULT_SLT',1,ZHOOK_HANDLE)
diff --git a/src/SURFEX/e_budget.F90 b/src/SURFEX/e_budget.F90
index a717d91e81b0dacd266604e49073136d94ebb081..0615f6428933ad4a0b373c3857e8af20d311180f 100644
--- a/src/SURFEX/e_budget.F90
+++ b/src/SURFEX/e_budget.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #########
       SUBROUTINE E_BUDGET(IO, KK, PK, PEK, DK, DMK, HIMPLICIT_WIND,  &
@@ -76,6 +76,7 @@
 !!      (B. Decharme)        10/14 Bug in DIF composite budget
 !!                                 Use harmonic mean to compute interfacial thermal conductivities
 !!                                 "Restore" flux computed here
+!!      (P. Wautelet)        02/19 Bug in intent of PDEEP_FLUX OUT->INOUT
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -183,7 +184,7 @@ REAL, DIMENSION(:), INTENT(OUT)  :: PALBT, PEMIST, PDQSAT
 REAL, DIMENSION(:), INTENT(IN)   :: PQSAT
 !                                     PQSAT  = saturation vapor humidity
 !
-REAL, DIMENSION(:), INTENT(OUT)    :: PDEEP_FLUX ! Heat flux at bottom of ISBA (W/m2)
+REAL, DIMENSION(:), INTENT(INOUT)  :: PDEEP_FLUX ! Heat flux at bottom of ISBA (W/m2)
 !
 REAL, DIMENSION(:), INTENT(OUT)    :: PRESTORE
 !                                     PRESTORE = surface restore flux (W m-2)
diff --git a/src/SURFEX/get_type_dimn.F90 b/src/SURFEX/get_type_dimn.F90
index b3b98462276242e11e3e7f37dc6cbc980aea6adc..05c60f73b86f8f402d50e74c1027f4e0a674dadf 100644
--- a/src/SURFEX/get_type_dimn.F90
+++ b/src/SURFEX/get_type_dimn.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #####################################
       SUBROUTINE GET_TYPE_DIM_n (DTCO, U, &
@@ -26,6 +26,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    01/2004
+!  P. Wautelet 15/02/2019: move computation of ZLAND (to prevent use of non initialized values)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -99,7 +100,6 @@ ELSE
   ZWATER  = U%XWATER
   ZTOWN   = U%XTOWN
 END IF
-ZLAND = ZTOWN + ZNATURE
 !
 ALLOCATE(ZFULL(ILU))
 ZFULL=1.
@@ -124,6 +124,7 @@ SELECT CASE (HTYPE)
    KDIM = COUNT(ZWATER(:) > 0.)
    !
   CASE ('LAND  ')
+   ZLAND = ZTOWN + ZNATURE
    KDIM = COUNT(ZLAND(:) > 0.)
    !
 END SELECT
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/init_isban.F90 b/src/SURFEX/init_isban.F90
index a6680248b113d1754300bc218d5eb03e11f17c14..dfa0031efbe28ff219ee22d8797ece38d3b8b20b 100644
--- a/src/SURFEX/init_isban.F90
+++ b/src/SURFEX/init_isban.F90
@@ -57,6 +57,7 @@ SUBROUTINE INIT_ISBA_n (DTCO, OREAD_BUDGETC, UG, U, USS, GCP, IM, DTZ,&
 !!      P. Wautelet    16/02/2018: bug correction: allocate some work arrays to 0,1,1 instead of 0,0,1 (crash with XLF)
 !!      V.VIonnet       2017 : Blow snow
 !!      P.Tulet        06/16 : add MEGAN coupling  
+!!      J.Pianezzej    02/2019 : correction for use of MEGAN
 !!
 !-------------------------------------------------------------------------------
 !
@@ -234,7 +235,7 @@ IF (LNAM_READ) THEN
                    IM%O%NNBYEARSPINS, IM%O%NNBYEARSPINW, IM%O%LNITRO_DILU     )
  !                  
  CALL DEFAULT_CH_DEP(IM%CHI%CCH_DRY_DEP)
- CALL DEFAULT_CH_BIO_FLUX(IM%CHI%LCH_BIO_FLUX)                  
+ CALL DEFAULT_CH_BIO_FLUX(IM%CHI%LCH_BIO_FLUX,PDAILYPAR=IM%MGN%XDAILYPAR,PDAILYTEMP=IM%MGN%XDAILYTEMP)                  
  CALL DEFAULT_DIAG_ISBA(IM%ID%O%N2M, IM%ID%O%LSURF_BUDGET, IM%ID%O%L2M_MIN_ZS, IM%ID%O%LRAD_BUDGET, &
                         IM%ID%O%LCOEF, IM%ID%O%LSURF_VARS, IM%ID%DE%LSURF_EVAP_BUDGET,              &
                         IM%ID%DM%LSURF_MISC_BUDGET, IM%ID%DM%LSURF_DIAG_ALBEDO,                     &
diff --git a/src/SURFEX/init_megann.F90 b/src/SURFEX/init_megann.F90
index e4654e149343b95b7002b1189942119ca50ede36..ee3b097f8a6b1a5ee6374c4458225f0cd1d16d81 100644
--- a/src/SURFEX/init_megann.F90
+++ b/src/SURFEX/init_megann.F90
@@ -25,6 +25,7 @@ SUBROUTINE INIT_MEGAN_n(IO, S, K, NP, MSF, MGN, PLAT, HSV, PMEGAN_FIELDS)
 !!    -------------
 !!    Original: 25/10/14
 !!    Modified: 06/2017, J. Pianezze, adaptation for SurfEx v8.0
+!!    Modified: 06/2018, P. Tulet,  add PFT and LAI
 !!
 !!
 !!    EXTERNAL
@@ -44,7 +45,8 @@ USE MODD_DATA_COVER_PAR, ONLY : NVT_C4, NVT_TRBE, NVT_TRBD, NVT_TEBE, &
                     NVT_BOGR, NVT_SHRB, NVT_GRAS, NVT_TROG, NVT_C3,   &
                     NVT_NO, NVT_ROCK, NVT_SNOW, NVT_IRR, NVT_PARK
 !
-USE MODD_SURF_PAR, ONLY : XUNDEF
+USE MODD_SURF_PAR,   ONLY : XUNDEF
+USE MODD_DATA_COVER, ONLY : XDATA_LAI
 !
 USE MODI_VEGTYPE_TO_PATCH
 #ifdef MNH_MEGAN
@@ -86,9 +88,9 @@ REAL, DIMENSION(SIZE(K%XCLAY,1),IO%NPATCH) :: ZH_TREE
 REAL,DIMENSION(SIZE(K%XCLAY,1)) :: ZSILT
 REAL,DIMENSION(SIZE(K%XCLAY,1)) :: ZLAI
 !
-IF (.NOT.IO%LTR_ML) THEN
-  CALL ABOR1_SFX('INIT_MEGANN: FATAL ERROR PUT LTR_ML = T in NAM_ISBA (PREP_PGD step)')
-END IF
+!IF (.NOT.IO%LTR_ML) THEN
+!  CALL ABOR1_SFX('INIT_MEGANN: FATAL ERROR PUT LTR_ML = T in NAM_ISBA (PREP_PGD step)')
+!END IF
 !
 ALLOCATE(MGN%XPFT   (N_MGN_PFT,SIZE(K%XCLAY,1)))
 ALLOCATE(MGN%XEF    (N_MGN_SPC,SIZE(K%XCLAY,1)))
@@ -497,7 +499,25 @@ DO JSV=1, MSF%NMEGAN_NBR
   IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "EFBIDER")  MGN%XEF(18,:) = PMEGAN_FIELDS(:,JSV)
   IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "EFSTRESS") MGN%XEF(19,:) = PMEGAN_FIELDS(:,JSV)
   IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "EFOTHER")  MGN%XEF(20,:) = PMEGAN_FIELDS(:,JSV)
+!  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "LAI")      PLAI(:,1)     = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT1")     MGN%XPFT(1,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT2")     MGN%XPFT(2,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT3")     MGN%XPFT(3,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT4")     MGN%XPFT(4,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT5")     MGN%XPFT(5,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT6")     MGN%XPFT(6,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT7")     MGN%XPFT(7,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT8")     MGN%XPFT(8,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT9")     MGN%XPFT(9,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT10")    MGN%XPFT(10,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT11")    MGN%XPFT(11,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT12")    MGN%XPFT(12,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT13")    MGN%XPFT(13,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT14")    MGN%XPFT(14,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT15")    MGN%XPFT(15,:) = PMEGAN_FIELDS(:,JSV)
+  IF (TRIM(MSF%CMEGAN_NAME(JSV)) == "PFT16")    MGN%XPFT(16,:) = PMEGAN_FIELDS(:,JSV)
 END DO
+
 #endif
 !
 !---------------------------------------------------------------------------
diff --git a/src/SURFEX/init_slt.F90 b/src/SURFEX/init_slt.F90
index 2320d6517af47881244b62bf2f3fb97d39c4841e..44e1e1bf988df95211f08f3e438b918468c72617 100644
--- a/src/SURFEX/init_slt.F90
+++ b/src/SURFEX/init_slt.F90
@@ -5,7 +5,36 @@
 SUBROUTINE INIT_SLT (SLT, &
                      HPROGRAM  &! Program calling unit
        )  
-
+!     ######################################################################
+!
+!!****  *INIT_SLT* - 
+!!
+!!    PURPOSE
+!!    -------
+!
+!!**  METHOD
+!!    ------
+!!    !!
+!!    EXTERNAL
+!!    --------
+!!    
+!!    IMPLICIT ARGUMENTS
+!!    ------------------
+!!
+!!    REFERENCE
+!!    ---------
+!!    
+!!
+!!    AUTHOR
+!!    ------
+!!    ?
+!!
+!!    MODIFICATIONS
+!!    -------------
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!! 
+!------------------------------------------------------------------------------
+!
 !
 USE MODD_SLT_n, ONLY : SLT_t
 !
@@ -38,14 +67,28 @@ ALLOCATE(SLT%XEMISSIG_SLT   (NSLTMDE))
 !Get initial size distributions. This is cut and pasted
 !from dead routine dstpsd.F90
 !Check for different source parameterizations
-IF(CEMISPARAM_SLT.eq."Vig01") THEN
+
+IF (CEMISPARAM_SLT.eq."Ova14") THEN
+  NSLTMDE = 5
+!  JORDER_SLT = (/3,2,1,4,5/) !Salt modes in order of importance
   CRGUNITS   = 'NUMB'
-  XEMISRADIUS_INI_SLT(:) = (/ 0.2, 2.0, 12.  /)  ! [um]  Number median radius She84 p. 75 Table 1
-  XEMISSIG_INI_SLT   (:) = (/ 1.9, 2.0, 3.00 /)  ! [frc] Geometric standard deviation She84 p. 75 Table 1
-ELSE  ! use default of Schultz et al, 2004
-  CRGUNITS   = 'MASS'
-  XEMISRADIUS_INI_SLT(:) = 0.5*(/0.28, 2.25, 15.32/) ! [um] Mass median radius
-  XEMISSIG_INI_SLT   (:) =     (/1.59, 2.00, 2.00 /) ! [frc] Geometric standard deviation
+  XEMISRADIUS_INI_SLT = (/0.009, 0.021, 0.045, 0.115, 0.415/)
+  XEMISSIG_INI_SLT = (/1.37, 1.5, 1.42, 1.53, 1.85/)
+
+ELSE IF(CEMISPARAM_SLT.eq."Vig01") THEN
+   NSLTMDE = 5
+!  JORDER_SLT = (/3,2,1,4,5/) !Salt modes in order of importance, only three modes
+   CRGUNITS   = 'NUMB'
+   XEMISRADIUS_INI_SLT =  (/ 0.2,  2.0, 12.,0.,0. /)         ! [um]  Number median radius Viganati et al., 2001
+   XEMISSIG_INI_SLT = (/ 1.9, 2.0, 3.00,0.,0.  /)  ! [frc] Geometric standard deviation Viganati et al., 2001
+
+ELSE IF(CEMISPARAM_SLT.eq."Sch04") THEN ! use default of Schultz et al, 2004
+   NSLTMDE = 5
+!  JORDER_SLT = (/3,2,1,4,5/), only three modes
+   CRGUNITS   = 'MASS'
+   XEMISRADIUS_INI_SLT = 0.5*(/0.28, 2.25, 15.32, 0., 0./)! [um] Mass median radius
+   XEMISSIG_INI_SLT = (/1.59, 2.00, 2.00, 0., 0./) ! [frc] Geometric standard deviation
+
 ENDIF
 !
 DO JMODE=1,NSLTMDE
diff --git a/src/SURFEX/interpol_npts.F90 b/src/SURFEX/interpol_npts.F90
index b36f719b326260cff0a600f8f6d618ae1828c261..1cf360b69b234eae1c2ae8b35684b7c5e9589793 100644
--- a/src/SURFEX/interpol_npts.F90
+++ b/src/SURFEX/interpol_npts.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #########
       SUBROUTINE INTERPOL_NPTS (UG, U, HPROGRAM,KLUOUT,KNPTS,KCODE,PX,PY,PFIELD,KNEAR_NBR)
@@ -69,7 +69,7 @@ USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
 !
 #ifdef SFX_MNH
-USE MODD_IO_ll, ONLY : ISIOP, ISP, ISNPROC
+USE MODD_IO, ONLY : ISP, ISNPROC, NIO_RANK
 USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
 USE MODE_GATHER_ll
 USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
@@ -178,7 +178,7 @@ IF (IOLD==2) THEN
   ! on met les infos de mésonh
   NRANK = ISP-1
   NPROC = ISNPROC
-  NPIO  = ISIOP-1
+  NPIO  = NIO_RANK-1
   NCOMM = NMNH_COMM_WORLD
   ! 
   !KCODE to 2D
@@ -187,7 +187,7 @@ IF (IOLD==2) THEN
   ISIZE_2D(1+JPHEXT:IIU+JPHEXT,1+JPHEXT:IJU+JPHEXT) = RESHAPE(KCODE, (/ IIU,IJU /) )
   ! tasks to whole domaine
   ALLOCATE(ISIZE_2D_ALL(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-  CALL GATHER_XYFIELD(ISIZE_2D,ISIZE_2D_ALL,ISIOP,NMNH_COMM_WORLD)
+  CALL GATHER_XYFIELD(ISIZE_2D,ISIZE_2D_ALL,NIO_RANK,NMNH_COMM_WORLD)
   DEALLOCATE(ISIZE_2D)
   ALLOCATE(ISIZE_TOT(IDIM_FULL))
   ISIZE_TOT = RESHAPE(ISIZE_2D_ALL(1+JPHEXT:IIMAX+JPHEXT,1+JPHEXT:IJMAX+JPHEXT),(/IDIM_FULL/))
@@ -247,7 +247,7 @@ IF (IOLD==2) THEN
   DEALLOCATE(INUM_1D)
   ! tasks to whole domaine
   ALLOCATE(INUM_2D_ALL(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-  CALL GATHER_XYFIELD(INUM_2D,INUM_2D_ALL,ISIOP,NMNH_COMM_WORLD)
+  CALL GATHER_XYFIELD(INUM_2D,INUM_2D_ALL,NIO_RANK,NMNH_COMM_WORLD)
   DEALLOCATE(INUM_2D)
   ALLOCATE(INUM_TOT(IDIM_FULL))
   INUM_TOT = RESHAPE(INUM_2D_ALL(1+JPHEXT:IIMAX+JPHEXT,1+JPHEXT:IJMAX+JPHEXT),(/IDIM_FULL/))
@@ -263,7 +263,7 @@ IF (IOLD==2) THEN
   DEALLOCATE(IINDEX_1D)
   ! tasks to whole domaine
   ALLOCATE(IINDEX_2D_ALL(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-  CALL GATHER_XYFIELD(IINDEX_2D,IINDEX_2D_ALL,ISIOP,NMNH_COMM_WORLD)
+  CALL GATHER_XYFIELD(IINDEX_2D,IINDEX_2D_ALL,NIO_RANK,NMNH_COMM_WORLD)
   DEALLOCATE(IINDEX_2D)
   ALLOCATE(IINDEX_TOT(IDIM_FULL))
   IINDEX_TOT = RESHAPE(IINDEX_2D_ALL(1+JPHEXT:IIMAX+JPHEXT,1+JPHEXT:IJMAX+JPHEXT),(/IDIM_FULL/))
@@ -276,13 +276,13 @@ IF (IOLD==2) THEN
   !
   ZCOORD_2D = 0.
   ZCOORD_2D(1+JPHEXT:IIU+JPHEXT,1+JPHEXT:IJU+JPHEXT) = RESHAPE(PX, (/ IIU,IJU /) )
-  CALL GATHER_XYFIELD(ZCOORD_2D,ZCOORD_2D_ALL,ISIOP,NMNH_COMM_WORLD)
+  CALL GATHER_XYFIELD(ZCOORD_2D,ZCOORD_2D_ALL,NIO_RANK,NMNH_COMM_WORLD)
   ALLOCATE(ZX(IDIM_FULL))
   ZX = RESHAPE(ZCOORD_2D_ALL(1+JPHEXT:IIMAX+JPHEXT,1+JPHEXT:IJMAX+JPHEXT),(/IDIM_FULL/))
   !
   ZCOORD_2D = 0.
   ZCOORD_2D(1+JPHEXT:IIU+JPHEXT,1+JPHEXT:IJU+JPHEXT) = RESHAPE(PY, (/ IIU,IJU  /) )
-  CALL GATHER_XYFIELD(ZCOORD_2D,ZCOORD_2D_ALL,ISIOP,NMNH_COMM_WORLD)
+  CALL GATHER_XYFIELD(ZCOORD_2D,ZCOORD_2D_ALL,NIO_RANK,NMNH_COMM_WORLD)
   ALLOCATE(ZY(IDIM_FULL))
   ZY = RESHAPE(ZCOORD_2D_ALL(1+JPHEXT:IIMAX+JPHEXT,1+JPHEXT:IJMAX+JPHEXT),(/IDIM_FULL/))
   !
diff --git a/src/SURFEX/make_lcover.F90 b/src/SURFEX/make_lcover.F90
index b793379d7d7857ca86534958f13e9dd05f365c6c..32d01144b21e93409c23bb608fc63bf8661fc93e 100644
--- a/src/SURFEX/make_lcover.F90
+++ b/src/SURFEX/make_lcover.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1997-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 1997-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 
 !     #########
@@ -46,7 +46,7 @@ USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
 !
 #ifdef SFX_MNH
-USE MODD_IO_ll, ONLY : ISIOP, ISP, ISNPROC
+USE MODD_IO, ONLY : ISP, ISNPROC, NIO_RANK
 USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
 #endif
 !
@@ -88,7 +88,7 @@ ICOMM_SAVE = NCOMM
 ! on met les infos de mésonh
 NRANK = ISP-1
 NPROC = ISNPROC
-NPIO = ISIOP-1
+NPIO  = NIO_RANK-1
 NCOMM = NMNH_COMM_WORLD
 #endif
 !
diff --git a/src/SURFEX/modd_megann.F90 b/src/SURFEX/modd_megann.F90
index 25702d033b72cedd26ba9206b71617c6045379fe..3f1e4e1c66ca15aaa3b303c705fc692fc5dbd184 100644
--- a/src/SURFEX/modd_megann.F90
+++ b/src/SURFEX/modd_megann.F90
@@ -26,6 +26,7 @@
 !!    -------------
 !!  16/07/2003 (P. Tulet)    restructured for externalization
 !!  24/05/2017 (J. Pianezze) adaptation for SurfEx v8.0
+!!  13/02/2019 (J. Pianezze) correction for use of MEGAN
 !------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -185,8 +186,8 @@ YMEGAN%LCONVERSION=.FALSE.
 YMEGAN%NVARS3D=0
 YMEGAN%N_SCON_SPC=0
 YMEGAN%XDROUGHT=0.
-YMEGAN%XDAILYPAR=0.
-YMEGAN%XDAILYTEMP=0.
+YMEGAN%XDAILYPAR=150.
+YMEGAN%XDAILYTEMP=293.
 YMEGAN%XMODPREC=0.
 IF (LHOOK) CALL DR_HOOK("MODD_MEGAN_n:MEGAN_INIT",1,ZHOOK_HANDLE)
 END SUBROUTINE MEGAN_INIT
diff --git a/src/SURFEX/modd_pgd_grid.F90 b/src/SURFEX/modd_pgd_grid.F90
index 106a7f63487970c33c1960d6dcce52b5553dfdc4..e9e91a16fee1e32e8ab3ebd7b017ba87b3e56711 100644
--- a/src/SURFEX/modd_pgd_grid.F90
+++ b/src/SURFEX/modd_pgd_grid.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     ##################
       MODULE MODD_PGD_GRID
@@ -17,7 +17,7 @@
 !!    REFERENCE
 !!    ---------
 !!
-!!       
+!!
 !!    AUTHOR
 !!    ------
 !!      V. Masson    *Meteo France*
@@ -25,6 +25,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    10/2003
+!!      P. Wautelet 01/2019: nullify XGRID_PAR at declaration
 !-------------------------------------------------------------------------------
 !
 IMPLICIT NONE
@@ -35,7 +36,7 @@ IMPLICIT NONE
  CHARACTER(LEN=10)           :: CGRID       ! type of grid
 INTEGER                     :: NL          ! number of points of the surface fields
 LOGICAL, DIMENSION(720,360) :: LLATLONMASK ! mask where data are to be read
-REAL, POINTER, DIMENSION(:) :: XGRID_PAR   ! lits of parameters used to define the grid
+REAL, POINTER, DIMENSION(:) :: XGRID_PAR => NULL() ! list of parameters used to define the grid
 INTEGER                     :: NGRID_PAR   ! size of XGRID_PAR
 REAL                        :: XMESHLENGTH ! average mesh length/width (decimal degre)
 !
diff --git a/src/SURFEX/modd_slt_surf.F90 b/src/SURFEX/modd_slt_surf.F90
index 0ee1b2b658f75509634126c22cb7e93e5e97c9ff..5a1c91c90cb2800bcd275d326c6305d6dfc37af5 100644
--- a/src/SURFEX/modd_slt_surf.F90
+++ b/src/SURFEX/modd_slt_surf.F90
@@ -4,13 +4,18 @@
 !SFX_LIC for details. version 1.
 MODULE MODD_SLT_SURF
 !
+! MODIFICATIONS
+!
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+
+
 IMPLICIT NONE
 !
 REAL, PARAMETER  :: XDENSITY_SLT     = 2.1e3    ! [kg/m3] density of sea salt
 REAL, PARAMETER  :: XMOLARWEIGHT_SLT = 58.e-3   ! [kg/mol] molar weight sea salt
 !
-INTEGER, PARAMETER  :: NEMISMODES_MAX=3
-INTEGER, DIMENSION(NEMISMODES_MAX), PARAMETER :: JORDER_SLT=(/3,2,1/) !Dust modes in order of importance
+INTEGER, PARAMETER  :: NEMISMODES_MAX=5
+INTEGER, DIMENSION(NEMISMODES_MAX), PARAMETER :: JORDER_SLT=(/1,2,3,4,5/) !Dust modes in order of importance
 !Set emission related parameters
 REAL,DIMENSION(NEMISMODES_MAX)   :: XEMISRADIUS_INI_SLT          ! number madian radius initialization for sea salt mode (um)
 REAL,DIMENSION(NEMISMODES_MAX)   :: XEMISSIG_INI_SLT             ! dispersion initialization for sea salt mode
diff --git a/src/SURFEX/modd_sltn.F90 b/src/SURFEX/modd_sltn.F90
index 84a48d74c4c7c20da51619e79970ec1ebc6e72ad..4187b72f2450b5a50a00f2607d1ec550871476ad 100644
--- a/src/SURFEX/modd_sltn.F90
+++ b/src/SURFEX/modd_sltn.F90
@@ -10,25 +10,43 @@ MODULE MODD_SLT_n
 !
 !Author: Alf Grini / Pierre Tulet
 !
+! MODIFICATIONS
+!
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
 USE PARKIND1  ,ONLY : JPRB
 !
 IMPLICIT NONE
-!
+
 TYPE SLT_t
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
+!  REAL, DIMENSION(:,:,:),POINTER :: XSFSLT                      ! Sea Salt variables to be send to output
+! -- PIERRE / MARINE SSA DUST - MODIF --
   REAL,DIMENSION(:), POINTER     :: XEMISRADIUS_SLT             ! Number median radius for each source mode
   REAL,DIMENSION(:), POINTER     :: XEMISSIG_SLT                ! sigma for each source mode
 END TYPE SLT_t
+
+
+
+ CONTAINS
+
 !
-CONTAINS
-!
+
+
+
+
 SUBROUTINE SLT_INIT(YSLT)
 TYPE(SLT_t), INTENT(INOUT) :: YSLT
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK("MODD_SLT_N:SLT_INIT",0,ZHOOK_HANDLE)
+! ++ PIERRE / MARINE SSA DUST - MODIF ++
+!  NULLIFY(YSLT%XSFSLT)
+! -- PIERRE / MARINE SSA DUST - MODIF --
   NULLIFY(YSLT%XEMISRADIUS_SLT)
   NULLIFY(YSLT%XEMISSIG_SLT)
 IF (LHOOK) CALL DR_HOOK("MODD_SLT_N:SLT_INIT",1,ZHOOK_HANDLE)
 END SUBROUTINE SLT_INIT
-!
+
+
 END MODULE MODD_SLT_n
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
 !
diff --git a/src/SURFEX/modn_isban.F90 b/src/SURFEX/modn_isban.F90
index 7d7e5643469371159d37757c5be6ce7b04d8054c..2ea5770de36f09326b5d2219eb5302efe3a8cf43 100644
--- a/src/SURFEX/modn_isban.F90
+++ b/src/SURFEX/modn_isban.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !##################
 MODULE MODN_ISBA_n
@@ -27,10 +27,11 @@ MODULE MODN_ISBA_n
 !!
 !!    MODIFICATIONS
 !!    -------------
-!!      Original    01/2004                    
+!!      Original    01/2004
 !!      Modified    08/2009 by B. Decharme : LSURF_BUDGETC for all tiles
 !!      Modified by A.L. Gibelin, 04/2009: add carbon spinup
 !!      P. Tulet & M. Leriche 06/2017 : coupling megan online
+!!      P. Wautelet 01/2019: initialize XDROUGHT, XDAILYPAR, XDAILYTEMP, XMODPREC to prevent not initialized errors later on
 !!
 !-------------------------------------------------------------------------------
 !
@@ -38,8 +39,9 @@ MODULE MODN_ISBA_n
 !             ------------
 !
 !
-USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
-USE PARKIND1  ,ONLY : JPRB
+USE MODD_SURF_PAR, ONLY : XUNDEF
+USE YOMHOOK      , ONLY : LHOOK,   DR_HOOK
+USE PARKIND1     , ONLY : JPRB
 !
 IMPLICIT NONE
 !
@@ -90,10 +92,10 @@ LOGICAL  :: LSURF_VARS
 LOGICAL  :: LCH_BIO_FLUX
 LOGICAL  :: LSOILNOX
 LOGICAL  :: LCH_NO_FLUX
-REAL     :: XDROUGHT 
-REAL     :: XDAILYPAR
-REAL     :: XDAILYTEMP
-REAL     :: XMODPREC
+REAL     :: XDROUGHT = XUNDEF
+REAL     :: XDAILYPAR = XUNDEF
+REAL     :: XDAILYTEMP = XUNDEF
+REAL     :: XMODPREC = XUNDEF
 LOGICAL  :: LGLACIER
 LOGICAL  :: LVEGUPD
 LOGICAL  :: LNITRO_DILU
diff --git a/src/SURFEX/modn_slt.F90 b/src/SURFEX/modn_slt.F90
index 44a889c3f838d35db853431031274e7c30b52680..091c4e400dd9203e36752aa5084e7f688cc20846 100644
--- a/src/SURFEX/modn_slt.F90
+++ b/src/SURFEX/modn_slt.F90
@@ -20,10 +20,11 @@
 !!    MODIFICATIONS
 !!    -------------
 !!    Original 24/02/05
+!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODD_SLT_SURF, ONLY : CEMISPARAM_SLT
+USE MODD_SLT_SURF
 !!
 !-----------------------------------------------------------------------------
 !
@@ -32,7 +33,6 @@ USE MODD_SLT_SURF, ONLY : CEMISPARAM_SLT
 IMPLICIT NONE
 SAVE
 NAMELIST /NAM_SURF_SLT/  &
-       CEMISPARAM_SLT            !Parameterization type   
-
+       CEMISPARAM_SLT, LVARSIG_SLT, LRGFIX_SLT, JPMODE_SLT            !Parameterization type
 !
 END MODULE MODN_SLT
diff --git a/src/SURFEX/prep_grib_grid.F90 b/src/SURFEX/prep_grib_grid.F90
index 9461f2e4015f0d8afca12bdcadf43e548b8f9ab1..de1b379580cd645f181c31d7183c6667fa425616 100644
--- a/src/SURFEX/prep_grib_grid.F90
+++ b/src/SURFEX/prep_grib_grid.F90
@@ -115,8 +115,6 @@ INTEGER                            :: JLOOP1        ! Dummy counter
 !JUAN
 !JUAN
 INTEGER :: INFOMPI, J
-INTEGER(KIND=kindOfInt),DIMENSION(:),ALLOCATABLE            :: INLO_GRIB   ! Number of points along a parallel
-
 !
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
@@ -495,7 +493,7 @@ SELECT CASE (HGRIDTYPE)
          CALL GRIB_IS_MISSING(IGRIB,'pl',IMISSING,IRET)
          IF (IRET == 0 .OR. IMISSING/=1)  THEN !  quasi-regular
            CALL GRIB_GET(IGRIB,'pl',ININLO_GRIB)
-           XILO2=360.-360./(MAXVAL(INLO_GRIB))
+           XILO2=360.-360./(MAXVAL(ININLO_GRIB))
            print*,"XILO2=",XILO2
          ENDIF
          DEALLOCATE(ININLO_GRIB)
diff --git a/src/SURFEX/prep_sst_init.F90 b/src/SURFEX/prep_sst_init.F90
index 3e4b1bfdf84a165cf5fd78018b72bb85d3428d89..d2dd441b4d71af1447a9b5907518ae7d851344d9 100644
--- a/src/SURFEX/prep_sst_init.F90
+++ b/src/SURFEX/prep_sst_init.F90
@@ -36,6 +36,7 @@
 !!    MODIFICATIONS
 !!    -------------
 !!      Original    09/2007
+!!      J.Escobar   03/2019 correction for only 1 file of SST
 !!
 !-------------------------------------------------------------------------------
 !
@@ -80,33 +81,38 @@ REAL(KIND=JPRB) :: ZHOOK_HANDLE
 !
 !
 IF (LHOOK) CALL DR_HOOK('PREP_SST_INIT',0,ZHOOK_HANDLE)
-LOOP: DO JI = DTS%NTIME-1,1,-1
-         KSX = JI
-         IF (.NOT.TEMPORAL_LTS(TPTIME,DTS%TDATA_SST(KSX))) EXIT LOOP
-      ENDDO LOOP
-
-IF ( TEMPORAL_LTS ( TPTIME, DTS%TDATA_SST(KSX) ) ) THEN
-   ZSST(:) = DTS%XDATA_SST(:,KSX)     
-ELSE IF ( .NOT. TEMPORAL_LTS ( TPTIME, DTS%TDATA_SST(DTS%NTIME) ) ) THEN
-  ZSST(:) = DTS%XDATA_SST(:,DTS%NTIME)
+  IF ( DTS%NTIME ==1 ) THEN
+  ! only one value, take this 
+     KSX = 1 
+     ZSST(:) = DTS%XDATA_SST(:,DTS%NTIME)
 ELSE
+  LOOP: DO JI = DTS%NTIME-1,1,-1
+           KSX = JI
+           IF (.NOT.TEMPORAL_LTS(TPTIME,DTS%TDATA_SST(KSX))) EXIT LOOP
+        ENDDO LOOP
+  
+  IF ( TEMPORAL_LTS ( TPTIME, DTS%TDATA_SST(KSX) ) ) THEN
+     ZSST(:) = DTS%XDATA_SST(:,KSX)     
+  ELSE IF ( .NOT. TEMPORAL_LTS ( TPTIME, DTS%TDATA_SST(DTS%NTIME) ) ) THEN
+    ZSST(:) = DTS%XDATA_SST(:,DTS%NTIME)
+  ELSE
 
-   CALL TEMPORAL_DISTS ( DTS%TDATA_SST(KSX+1)%TDATE%YEAR,DTS%TDATA_SST(KSX+1)%TDATE%MONTH,   &
-                         DTS%TDATA_SST(KSX+1)%TDATE%DAY ,DTS%TDATA_SST(KSX+1)%TIME,          &
-                         DTS%TDATA_SST(KSX)%TDATE%YEAR,DTS%TDATA_SST(KSX)%TDATE%MONTH,       &
-                         DTS%TDATA_SST(KSX)%TDATE%DAY ,DTS%TDATA_SST(KSX)%TIME,              &
-                         ZSDTJX                                                      )  
+     CALL TEMPORAL_DISTS ( DTS%TDATA_SST(KSX+1)%TDATE%YEAR,DTS%TDATA_SST(KSX+1)%TDATE%MONTH,   &
+                           DTS%TDATA_SST(KSX+1)%TDATE%DAY ,DTS%TDATA_SST(KSX+1)%TIME,          &
+                           DTS%TDATA_SST(KSX)%TDATE%YEAR,DTS%TDATA_SST(KSX)%TDATE%MONTH,       &
+                           DTS%TDATA_SST(KSX)%TDATE%DAY ,DTS%TDATA_SST(KSX)%TIME,              &
+                           ZSDTJX                                                      )  
 
-   CALL TEMPORAL_DISTS ( TPTIME%TDATE%YEAR   ,TPTIME%TDATE%MONTH,                      &
-                         TPTIME%TDATE%DAY    ,TPTIME%TIME,                             &
-                         DTS%TDATA_SST(KSX)%TDATE%YEAR,DTS%TDATA_SST(KSX)%TDATE%MONTH,       &
-                         DTS%TDATA_SST(KSX)%TDATE%DAY ,DTS%TDATA_SST(KSX)%TIME,              &
-                         ZDT                                                         )  
-!
-    ZALPHA = ZDT / ZSDTJX
-!
-    ZSST(:)= DTS%XDATA_SST(:,KSX)+(DTS%XDATA_SST(:,KSX+1)-DTS%XDATA_SST(:,KSX))*ZALPHA
-                       
+     CALL TEMPORAL_DISTS ( TPTIME%TDATE%YEAR   ,TPTIME%TDATE%MONTH,                      &
+                           TPTIME%TDATE%DAY    ,TPTIME%TIME,                             &
+                           DTS%TDATA_SST(KSX)%TDATE%YEAR,DTS%TDATA_SST(KSX)%TDATE%MONTH,       &
+                           DTS%TDATA_SST(KSX)%TDATE%DAY ,DTS%TDATA_SST(KSX)%TIME,              &
+                           ZDT                                                         )  
+  !
+      ZALPHA = ZDT / ZSDTJX
+  !
+      ZSST(:)= DTS%XDATA_SST(:,KSX)+(DTS%XDATA_SST(:,KSX+1)-DTS%XDATA_SST(:,KSX))*ZALPHA
+  END IF
 END IF
 
 PSST(:) = ZSST(:)
diff --git a/src/SURFEX/writesurf_pgd_isba_parn.F90 b/src/SURFEX/writesurf_pgd_isba_parn.F90
index 381db556ad47e7faa8e5ad7812fa8d1da9a69782..5b9fa2248459c712aa784d36c00259ec1b9ff934 100644
--- a/src/SURFEX/writesurf_pgd_isba_parn.F90
+++ b/src/SURFEX/writesurf_pgd_isba_parn.F90
@@ -1,6 +1,6 @@
-!SFX_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!SFX_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !SFX_LIC This is part of the SURFEX software governed by the CeCILL-C licence
-!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!SFX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !SFX_LIC for details. version 1.
 !     #########
       SUBROUTINE WRITESURF_PGD_ISBA_PAR_n (HSELECT, DTV, HPROGRAM)
@@ -35,6 +35,7 @@
 !!      Original    01/2003 
 !!      P. Le Moigne 12/2004 : add type of photosynthesis 
 !!      P. Samuelsson 10/2014: MEB
+!!      P. Wautelet 01/2019: bug: write L_STRESS only if it exists
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -499,6 +500,7 @@ DO JV=1,DTV%NVEGTYPE
   ENDIF
 ENDDO
 !
+IF (ASSOCIATED(DTV%LPAR_STRESS)) THEN
 YRECFM='L_STRESS'
 YCOMMENT=YRECFM
  CALL WRITE_SURF(HSELECT,HPROGRAM,YRECFM,DTV%LDATA_STRESS,IRESP,HCOMMENT=YCOMMENT,HDIR='-')
@@ -513,6 +515,7 @@ DO JV=1,DTV%NVEGTYPE
   ENDIF
 ENDDO
 DEALLOCATE(ZWORK)
+END IF
 !
 YRECFM='L_H_TREE'
 YCOMMENT=YRECFM
diff --git a/src/configure b/src/configure
index 5e3eadf2e27de4560c56b8fe89f5ab92c4f2521c..06328f15970bf4de1132717556e2b53a4cc1f0ee 100755
--- a/src/configure
+++ b/src/configure
@@ -9,12 +9,13 @@ if [ "x$XYZ" = "x" ]
 then
 # 
 export VERSION_MASTER=${VERSION_MASTER:-MNH-V5-4}
-export VERSION_BUG=${VERSION_BUG:-1}
+export VERSION_BUG=${VERSION_BUG:-2}
 export VERSION_XYZ=${VERSION_XYZ:-${VERSION_MASTER}-${VERSION_BUG}${VER_OASIS:+-${VER_OASIS}}}
-export VERSION_DATE=${VERSION_DATE:-"dd/mm/yyyy"}
+export VERSION_DATE=${VERSION_DATE:-"03/04/2019"}
 export VERSION_LIBAEC=${VERSION_LIBAEC:-"0.3.2"}
 export VERSION_HDF=${VERSION_HDF:-"1.8.20"}
 export VERSION_CDFC=${VERSION_CDFC:-"4.5.0"}
+export VERSION_CDFCXX=${VERSION_CDFCXX:-"4.2"}
 export VERSION_CDFF=${VERSION_CDFF:-"4.4.4"}
 export VERSION_GRIBAPI=${VERSION_GRIBAPI:-"1.26.0-Source"}
 export MNH_INT=${MNH_INT:-"4"}
@@ -54,6 +55,9 @@ module purge
 module load intel/17.0 intelmpi/2017.2.174
 export SLURM_CPU_BIND=none
 export I_MPI_PIN_PROCESSOR_LIST=all:map=spread
+# force CC=gcc , for HDF5 divide by zero problem with icc !!!
+export CC=gcc
+export I_MPI_CC=gcc
 "}
               ;;
 'Linux service'*)
@@ -186,10 +190,9 @@ module load ga/\${VER_GA}
                 export MVWORK=${MVWORK:-YES}
                 export VER_CDF=${VER_CDF:-CDFAUTO}
                 export MNHENV=${MNHENV:-"
-#export OBJDIR_PATH=$WORKDIR/DIR_OBJ_ADA
-export MP_MPILIB=pempi
+#export MP_MPILIB=pempi
 module purge
-module load intel/2013.1
+module load intel/2018.2
 "}
               ;;
 AIX*)
@@ -256,6 +259,7 @@ module rm grib_api eccodes
 prgenvswitchto intel
 module rm intel
 module load intel/17.0.3.053
+export CC=gcc
 "}
                 fi
                 fi
@@ -444,7 +448,7 @@ fi
 #
 ${LOCAL}/bin/eval_dollar  profile_mesonh.ihm > profile_mesonh
 chmod +x profile_mesonh
-XYZ=${ARCH}-R${MNH_REAL}I${MNH_INT}-${VERSION_XYZ}${MNH_ECRAD:+-ECRAD}${VER_USER:+-${VER_USER}}-${VER_MPI}-${OPTLEVEL}
+XYZ=${ARCH}-R${MNH_REAL}I${MNH_INT}-${VERSION_XYZ}${MNH_ECRAD:+-ECRAD}${MNH_FOREFIRE:+-FF}${VER_USER:+-${VER_USER}}-${VER_MPI}-${OPTLEVEL}
 cp profile_mesonh profile_mesonh-${XYZ}
 #
 #  Do some post-install stuff
@@ -481,6 +485,7 @@ if [ "x${VER_CDF}" == "xCDFAUTO" ] ;then
 ( cd $LOCAL/src/LIB ; [ ! -d libaec-${VERSION_LIBAEC} ] && tar xvfz libaec-${VERSION_LIBAEC}.tar.gz )
 ( cd $LOCAL/src/LIB ; [ ! -d hdf5-${VERSION_HDF} ] && tar xvfz hdf5-${VERSION_HDF}.tar.gz )
 ( cd $LOCAL/src/LIB ; [ ! -d netcdf-${VERSION_CDFC} ] && tar xvfz netcdf-${VERSION_CDFC}.tar.gz )
+( cd $LOCAL/src/LIB ; [ ! -d netcdf-cxx-${VERSION_CDFCXX} ] && tar xvfz netcdf-cxx-${VERSION_CDFCXX}.tar.gz )
 ( cd $LOCAL/src/LIB ; [ ! -d netcdf-fortran-${VERSION_CDFF} ] && tar xvfz netcdf-fortran-${VERSION_CDFF}.tar.gz )
 fi
 #
diff --git a/src/job_make_examples_BG b/src/job_make_examples_BG
index a6d8d05185674070ba868f99adc46b495c18513a..3c126674242029a00049b6789ead6dce369308a0 100755
--- a/src/job_make_examples_BG
+++ b/src/job_make_examples_BG
@@ -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.
 # @ job_name =Examples_MNH
 # @ job_type = BLUEGENE
@@ -18,7 +18,7 @@
 set -x
 cd $LOADL_STEP_INITDIR
 
-.  ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-1-MPIAUTO-O2
+.  ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 
 #001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier
diff --git a/src/job_make_examples_BGQ b/src/job_make_examples_BGQ
index 881f6a9472f573fad86921bdae08f0d5874eda35..5b0bf5246a5d019fffc5dfdb5fafca2b802d4768 100755
--- a/src/job_make_examples_BGQ
+++ b/src/job_make_examples_BGQ
@@ -1,4 +1,4 @@
-#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.
@@ -18,7 +18,7 @@
 
 cd $LOADL_STEP_INITDIR
 
-. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-1-MPIAUTO-O2NAN
+. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-2-MPIAUTO-O2NAN
 
 set -x
 
diff --git a/src/job_make_examples_BullX b/src/job_make_examples_BullX
index 549491030b424cc5101fd53bf19f3df19c9aa607..6e53b1a9b2257a6da3a8043f3244934822154073 100755
--- a/src/job_make_examples_BullX
+++ b/src/job_make_examples_BullX
@@ -1,5 +1,5 @@
 #!/bin/bash
-#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.
@@ -19,7 +19,7 @@ set -e
 hostname 
 # Echo des commandes
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O3
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O3
 export MONORUN="Mpirun -np 1 "
 export MPIRUN="Mpirun -np 2 "
 export POSTRUN="time "
diff --git a/src/job_make_examples_BullX_irene b/src/job_make_examples_BullX_irene
index bea1188e9fa1c440b3269614cf46c4057a694f72..6e0f0f1f59d713780ab529e523a4b2cdba1e6f87 100755
--- a/src/job_make_examples_BullX_irene
+++ b/src/job_make_examples_BullX_irene
@@ -21,7 +21,7 @@ set +x
 # Nom de la machine
 hostname 
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O2
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2
 
 set -x
 
diff --git a/src/job_make_examples_BullX_occigen b/src/job_make_examples_BullX_occigen
index f8d5e7c0fc6f048e10e0f80e61d5ba9609e154e0..b5f60e5f497a312918e32ff519ac0f883eccdddf 100755
--- a/src/job_make_examples_BullX_occigen
+++ b/src/job_make_examples_BullX_occigen
@@ -18,7 +18,7 @@ set -x
 # Nom de la machine
 hostname 
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O2
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2
 export MONORUN="Mpirun -prepend-rank -np 1 "
 export MPIRUN="Mpirun -prepend-rank -np 4 "
 export POSTRUN="time "
diff --git a/src/job_make_examples_BullX_eos b/src/job_make_examples_BullX_olympe
similarity index 97%
rename from src/job_make_examples_BullX_eos
rename to src/job_make_examples_BullX_olympe
index 79c7e02e43b098ac44b48df1a085eb745fc87122..d0c38777382dcbab8a12396a468a46c1ab732dd0 100755
--- a/src/job_make_examples_BullX_eos
+++ b/src/job_make_examples_BullX_olympe
@@ -17,7 +17,7 @@ set -x
 # Nom de la machine
 hostname 
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O2
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2
 export MONORUN="mpirun -prepend-rank -np 1 "
 export MPIRUN="mpirun -prepend-rank -np 4 "
 export POSTRUN="time "
diff --git a/src/job_make_examples_CRAY_cca b/src/job_make_examples_CRAY_cca
index 51609eb9801208ba57530efdeaa4814d12185f47..f4c87e365bc013585f8f1f738e68128bf72762ac 100755
--- a/src/job_make_examples_CRAY_cca
+++ b/src/job_make_examples_CRAY_cca
@@ -1,5 +1,5 @@
 #!/bin/bash
-#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.
@@ -28,7 +28,7 @@ cd ${PBS_O_WORKDIR}
 
 ARCH=LXifort
 #ARCH=LXcray
-. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-1-MPICRAY-O2
+. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-2-MPICRAY-O2
 
 
 export MONORUN="aprun -n 1 "
diff --git a/src/job_make_examples_IBM_ada b/src/job_make_examples_IBM_ada
index 1dda93499733b1e16b67c7c4efadd636d8e953a5..43e1d73e003014dfaec460bb66a9a7af339446de 100755
--- a/src/job_make_examples_IBM_ada
+++ b/src/job_make_examples_IBM_ada
@@ -1,11 +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 version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 #MNH_LIC for details. version 1.
 # Nom arbitraire du travail LoadLeveler
 # @ job_name = Sortie_examples_ada
 # Type de travail
-# @ job_type = parallel
+# @ job_type = mpich
 # Fichier de sortie standard du travail
 # @ output = $(job_name).$(jobid)
 # Fichier de sortie d'erreur du travail
@@ -14,25 +14,22 @@
 # @ wall_clock_limit = 3600
 # Nombre de processus demande (ici 1)
 # @ total_tasks = 4
-# @ environment = $DISPLAY
+# @ environment = NB_TASKS=$(total_tasks)
 # @ queue
 
 cd $LOADL_STEP_INITDIR
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O2
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2
 
 # Pour avoir l'echo des commandes
 set -x
 
 #001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier
 
-export MONORUN="Poe -world_sizes 1 "
-export MPIRUN="Poe -world_sizes 4 "
+export MONORUN="Mpirun -np 1 "
+export MPIRUN="Mpirun -prepend-rank -np $NB_TASKS "
 export POSTRUN=" echo "
 
-export MP_MPILIB=pempi
-export MP_LABELIO=yes
-
 time make -k 001_2Drelief
 time make -k 002_3Drelief
 time make -k 003_KW78
@@ -48,4 +45,3 @@ make -k << EOF
 EOF
 #
 
-
diff --git a/src/job_make_examples_IBM_sp6_vargas b/src/job_make_examples_IBM_sp6_vargas
index ef733d1689f9cc04d8feb7bc467460cdeb71beb8..8305c3663166ae8de3a6d8c1a530a6212ca4eaca 100755
--- a/src/job_make_examples_IBM_sp6_vargas
+++ b/src/job_make_examples_IBM_sp6_vargas
@@ -1,4 +1,4 @@
-#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.
@@ -24,7 +24,7 @@
 set -x
 cd $LOADL_STEP_INITDIR
 
-.  ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-1-MPIAUTO-O2
+.  ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 
 #001_2Drelief 002_3Drelief 003_KW78 004_Reunion 007_16janvier
diff --git a/src/job_make_examples_NEC_SX8 b/src/job_make_examples_NEC_SX8
index 6f2c720d9ff70646fe769e41a3eec505cb675be7..fb3a805c0b146a3298f317bb36a053da853fe468 100755
--- a/src/job_make_examples_NEC_SX8
+++ b/src/job_make_examples_NEC_SX8
@@ -1,4 +1,4 @@
-#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.
@@ -18,7 +18,7 @@ hostname
 
 [ -d $PBS_O_WORKDIR ] && cd $PBS_O_WORKDIR
 #
-. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-1-MPIAUTO-O4
+. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O4
 
 export MONORUN="Mpirun -np 1 "
 export MPIRUN="Mpirun -np 2 "
diff --git a/src/job_make_examples_SX8 b/src/job_make_examples_SX8
index 7580cab3983e2108656f8edb1041f243c74ca75f..de30324180c9cfed2e7d48a28b12cd9304dc6c2c 100755
--- a/src/job_make_examples_SX8
+++ b/src/job_make_examples_SX8
@@ -1,4 +1,4 @@
-#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.
@@ -19,7 +19,7 @@ hostname
 [ -d $PBS_O_WORKDIR ] && cd $PBS_O_WORKDIR
 #
 
-. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-1-MPIAUTO-O2
+. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 export MONORUN="Mpirun -np 1 "
 export MPIRUN="Mpirun -np 2 "
diff --git a/src/job_make_examples_cxa b/src/job_make_examples_cxa
index ef7f3eef6555bb4e985ee04775c90417e5959a60..f27bea4fbabebbee2a9f2db0497c3428187da7bf 100755
--- a/src/job_make_examples_cxa
+++ b/src/job_make_examples_cxa
@@ -1,4 +1,4 @@
-#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.
@@ -34,7 +34,7 @@ echo SHELL=$SHELL
 
 cd $LOADL_STEP_INITDIR
 
-.  ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-1-MPIAUTO-O2
+.  ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 ulimit -c 0 # pas de core
 
diff --git a/src/job_make_mesonh_BG b/src/job_make_mesonh_BG
index d6b565eb720d31e11e6eee074f95173bae151499..5b7a12e9d58ea8d185774eece6ce8486e64066d3 100755
--- a/src/job_make_mesonh_BG
+++ b/src/job_make_mesonh_BG
@@ -1,4 +1,4 @@
-#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.
@@ -18,7 +18,7 @@
 set -x
 cd $LOADL_STEP_INITDIR
 
-. ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-1-MPIAUTO-O2
+. ../conf/profile_mesonh-BG-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 #time gmake 
 time gmake -r -j8
diff --git a/src/job_make_mesonh_BGQ b/src/job_make_mesonh_BGQ
index 0908269206a5c674c4b03385dbaab9a52702ae80..6a8dd4cd7866686189d88ce096466b5229767307 100755
--- a/src/job_make_mesonh_BGQ
+++ b/src/job_make_mesonh_BGQ
@@ -1,4 +1,4 @@
-#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.
@@ -34,7 +34,7 @@ set -x
 
 cd $LOADL_STEP_INITDIR
 
-. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-1-MPIAUTO-O2NAN
+. ../conf/profile_mesonh-BGQ-R8I4-MNH-V5-4-2-MPIAUTO-O2NAN
 
 case $LOADL_STEP_NAME in
 
diff --git a/src/job_make_mesonh_BullX b/src/job_make_mesonh_BullX
index 50986a320c58c945abe36856ef465fb8c3c98fb7..0af2e224427ab5a5873e8a65c32e6d52186e746c 100755
--- a/src/job_make_mesonh_BullX
+++ b/src/job_make_mesonh_BullX
@@ -1,5 +1,5 @@
 #!/bin/bash
-#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.
@@ -19,7 +19,7 @@ set -x
 # On va lancer la compilation dans le répertoire de lancement du job
 pwd
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O3
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O3
 
 time gmake -j 4
 time gmake -j 1 installmaster
diff --git a/src/job_make_mesonh_CRAY_cca b/src/job_make_mesonh_CRAY_cca
index 9caef0f66285fff4b592d4ebe7863b343379a0db..1b4de21e1cb8b98a69e7e06b20a2d95590afef7a 100755
--- a/src/job_make_mesonh_CRAY_cca
+++ b/src/job_make_mesonh_CRAY_cca
@@ -1,5 +1,5 @@
 #!/bin/bash
-#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.
@@ -21,7 +21,7 @@ pwd
 
 ARCH=LXifort
 #ARCH=LXcray
-. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-1-MPICRAY-O2
+. ../conf/profile_mesonh-${ARCH}-R8I4-MNH-V5-4-2-MPICRAY-O2
 
 time gmake -j 4 2>&1 | tee sortie_compile_${ARCH}.$$
 time gmake -j 4 2>&1 | tee sortie_compile_${ARCH}2.$$
diff --git a/src/job_make_mesonh_IBM_ada b/src/job_make_mesonh_IBM_ada
index 45fbde3d03cef0adbf2dce6f23c4a22c6f922ded..4d64ed118d6792c9582d6ae47500e5dc1d14af48 100755
--- a/src/job_make_mesonh_IBM_ada
+++ b/src/job_make_mesonh_IBM_ada
@@ -1,4 +1,4 @@
-#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.
@@ -16,7 +16,7 @@
 
 cd $LOADL_STEP_INITDIR
 
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-MPIINTEL-O2
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-MPIINTEL-O2
 
 # Pour avoir l'echo des commandes
 set -x
diff --git a/src/job_make_mesonh_IBM_sp6_vargas b/src/job_make_mesonh_IBM_sp6_vargas
index efb71b6d4be63b057b2a6fcde7926d7b80c49b49..e8f11ad2743ab1306334ca7dca7c86c934f88cae 100755
--- a/src/job_make_mesonh_IBM_sp6_vargas
+++ b/src/job_make_mesonh_IBM_sp6_vargas
@@ -1,4 +1,4 @@
-#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.
@@ -24,7 +24,7 @@
 set -x
 cd $LOADL_STEP_INITDIR
 
-. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-1-MPIAUTO-O2
+. ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 time gmake -j1 gribapi
 time gmake -r -j8
diff --git a/src/job_make_mesonh_MFSX8 b/src/job_make_mesonh_MFSX8
index f8bb0e308eb189c4597140ea014095a40b55a046..c1e15619bbad5f99d0e9f9e531ebd76523d5f872 100644
--- a/src/job_make_mesonh_MFSX8
+++ b/src/job_make_mesonh_MFSX8
@@ -1,4 +1,4 @@
-#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.
@@ -12,7 +12,7 @@ set -x
 # On va lancer la compilation dans le répertoire de lancement du job
 [ ${PBS_O_WORKDIR} ] && cd ${PBS_O_WORKDIR}
 
-. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-1-MPIAUTO-O4
+. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O4
 
 time gmake  -j 4  ########## compile on four processors to speedup the compilation
 time gmake  -j 1 installmaster
diff --git a/src/job_make_mesonh_NEC_SX8 b/src/job_make_mesonh_NEC_SX8
index 095159b3d60c21b0f772be0e5ef79d28fe921742..d8664fc0532a4602f35a951005a2fe7e94ae3da4 100755
--- a/src/job_make_mesonh_NEC_SX8
+++ b/src/job_make_mesonh_NEC_SX8
@@ -1,4 +1,4 @@
-#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.
@@ -11,7 +11,7 @@ set -x
 # On va lancer la compilation dans le répertoire de lancement du job
 [ $PBS_O_WORKDIR ] && cd $PBS_O_WORKDIR
 
-. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-1-MPIAUTO-O4
+. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-MPIAUTO-O4
 
 time gmake  -j 4  
 time gmake  -j 4   #  some time problem with first pass in parallel compilation
diff --git a/src/job_make_mesonh_cxa b/src/job_make_mesonh_cxa
index 69ff158751e074abd06fec6fa10045dadccb37c2..ad5b3a85872bff807991682be89249424f23f0b5 100755
--- a/src/job_make_mesonh_cxa
+++ b/src/job_make_mesonh_cxa
@@ -1,4 +1,4 @@
-#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.
@@ -27,7 +27,7 @@
 set -x
 cd $LOADL_STEP_INITDIR
 
-.  ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-1-MPIAUTO-O2
+.  ../conf/profile_mesonh-AIX64-R8I4-MNH-V5-4-2-MPIAUTO-O2
 
 time gmake -r -j1
 time gmake installmaster
diff --git a/src/job_make_mesonh_user_BullX b/src/job_make_mesonh_user_BullX
index 0ef248049543e665afb9a691969bcd47b7255b9a..324daaf557e995b4e560308a52b1b820d30cad6e 100755
--- a/src/job_make_mesonh_user_BullX
+++ b/src/job_make_mesonh_user_BullX
@@ -1,5 +1,5 @@
 #!/bin/bash
-#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.
@@ -19,7 +19,7 @@ export VER_USER=                ########## Your own USER Directory
 set -x
 
 # On va lancer la compilation dans le répertoire de lancement du job
-. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-1-${VER_USER}-MPIINTEL-O3
+. ../conf/profile_mesonh-LXifort-R8I4-MNH-V5-4-2-${VER_USER}-MPIINTEL-O3
 
 time gmake user
 time gmake -j 1 installuser
diff --git a/src/job_make_mesonh_user_MFSX8 b/src/job_make_mesonh_user_MFSX8
index 4766235b65434a76555fc04803c7a10fb737cf73..407073d7ec4a6023b5a6b2aab6df09d375e2cadc 100644
--- a/src/job_make_mesonh_user_MFSX8
+++ b/src/job_make_mesonh_user_MFSX8
@@ -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.
 #PBS -q compile               # obligatoire pour rester sur la frontale TX-7
 #PBS -l cputim_prc=36000      # temps CPU par processus (défaut 30mn,  max 5h)
@@ -14,7 +14,7 @@ set -x
 [ ${PBS_O_WORKDIR} ] && cd ${PBS_O_WORKDIR}
 
 
-. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-1-${VER_USER}-MPIAUTO-O4
+. ../conf/profile_mesonh-SX8-R8I4-MNH-V5-4-2-${VER_USER}-MPIAUTO-O4
 
 time gmake user
 time gmake -j 1 installuser