From 6cf72ead81757e33ff1f885be15c1bf638fecb69 Mon Sep 17 00:00:00 2001
From: Juan Escobar <escj@aero.obs-mip.fr>
Date: Tue, 21 Jul 2020 10:47:58 +0200
Subject: [PATCH] Juan 21/07/2020:phasage MNH_55_OPENACC de ZSOLVER

---
 anel_balancen.f90 |  33 ++--
 ini_dynamics.f90  |  13 +-
 ini_modeln.f90    | 437 ++++++++++++++++++++++--------------------
 ini_spectren.f90  | 120 +++++-------
 modeln.f90        | 479 +++++++++++++++++++++++-----------------------
 pressurez.f90     |  36 ++--
 read_exsegn.f90   |  13 +-
 spectre.f90       |  32 ++--
 tridz.f90         |  19 +-
 9 files changed, 591 insertions(+), 591 deletions(-)

diff --git a/anel_balancen.f90 b/anel_balancen.f90
index 9ced69e3c..c1659356c 100644
--- a/anel_balancen.f90
+++ b/anel_balancen.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.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
 !!
@@ -104,6 +101,7 @@ END MODULE MODI_ANEL_BALANCE_n
 !!      M.Moge      08/2015   removing UPDATE_HALO_ll(XRHODJ) + EXTRAPOL on ZRU and ZRV in part 3.1
 !!      J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -111,11 +109,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
@@ -231,7 +227,8 @@ CALL MPPDB_CHECK3D(XUT,"anel_balancen1-::XUT",PRECISION)
 !               -------------------------------
 !
 !
-CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,ZDXHATM,ZDYHATM,ZRHOM,        &
+CALL TRIDZ(CLBCX,CLBCY,XMAP,XDXHAT,XDYHAT,CPRESOPT,                     &
+          ZDXHATM,ZDYHATM,ZRHOM,                                        &
           ZAF,ZCF,ZTRIGSX,ZTRIGSY,IIFAXX,IIFAXY,XRHODJ,XTHVREF,XZZ,ZBFY,&
           ZBFB,ZBF_SXP2_YP1_Z,                                          &
           ZAF_ZS,ZBF_ZS,ZCF_ZS,                                         &
@@ -248,7 +245,7 @@ CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen1-after TRIDZ::XRHODJ",PRECISION)
 !*       3.1     multiplication by RHODJ
 !
 !$20140710 UPHALO on XRHODJ
-!CALL ADD3DFIELD_ll(TZFIELDS_ll,XRHODJ)
+!CALL ADD3DFIELD_ll( TZFIELDS_ll, XRHODJ, 'ANEL_BALANCE_n::XRHODJ' )
 !CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
 !CALL CLEANLIST_ll(TZFIELDS_ll)
 CALL MPPDB_CHECK3D(XRHODJ,"anel_balancen3.1-after update halo::XRHODJ",PRECISION)
@@ -257,15 +254,15 @@ CALL MPPDB_CHECK3D(XWT,"anel_balancen3.1-after update halo::XWT",PRECISION)
 !
 ZRU(:,:,:) = MXM(XRHODJ) * XUT(:,:,:)
 ZRV(:,:,:) = MYM(XRHODJ) * XVT(:,:,:)
-ZRW(:,:,:) = MZM(1,IKU,1,XRHODJ) * XWT(:,:,:)
+ZRW(:,:,:) = MZM(XRHODJ) * XWT(:,:,:)
 ZTH(:,:,:) = XTHT(:,:,:)
 ALLOCATE(ZRR(SIZE(XRHODJ,1),SIZE(XRHODJ,2),SIZE(XRHODJ,3),SIZE(XRT,4)))
 ZRR(:,:,:,:) = XRT(:,:,:,:)
 !20131112 appli update_halo_ll
-CALL ADD3DFIELD_ll(TZFIELDS_ll, ZRU)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, ZRV)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, ZRW)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, ZTH)
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRU, 'ANEL_BALANCE_n::ZRU' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRV, 'ANEL_BALANCE_n::ZRV' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZRW, 'ANEL_BALANCE_n::ZRW' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, ZTH, 'ANEL_BALANCE_n::ZTH' )
 CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZFIELDS_ll)
 CALL MPPDB_CHECK3D(ZRU,"anel_balancen3.1-after1stupdhalo::ZRU",PRECISION)
@@ -316,11 +313,11 @@ DEALLOCATE(ZBFY,ZTRIGSX,ZTRIGSY,ZRR,ZBF_SXP2_YP1_Z)
 !20131112 appli update_halo_ll and associated operations
 XUT(:,:,:) = ZRU(:,:,:) / MXM(XRHODJ)
 XVT(:,:,:) = ZRV(:,:,:) / MYM(XRHODJ)
-XWT(:,:,:) = ZRW(:,:,:) / MZM(1,IKU,1,XRHODJ)
+XWT(:,:,:) = ZRW(:,:,:) / MZM(XRHODJ)
 !20131112 appli update_halo_ll to XUT,XVT,XWT
-CALL ADD3DFIELD_ll(TZFIELDS_ll, XUT)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, XVT)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, XWT)
+CALL ADD3DFIELD_ll( TZFIELDS_ll, XUT, 'ANEL_BALANCE_n::XUT' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, XVT, 'ANEL_BALANCE_n::XVT' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, XWT, 'ANEL_BALANCE_n::XWT' )
 CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZFIELDS_ll)
 CALL MPPDB_CHECK3D(XUT,"anel_balancen3.2-afterupdhalo::XUT",PRECISION)
diff --git a/ini_dynamics.f90 b/ini_dynamics.f90
index 4b1b687f9..c46d5ca10 100644
--- a/ini_dynamics.f90
+++ b/ini_dynamics.f90
@@ -8,7 +8,7 @@
 !     ########################
 INTERFACE
 SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,                   &
-               PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,                       &
+               PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,HPRESOPT,              &
                OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV,           &
                OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG,  &
                OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV,                         &
@@ -115,7 +115,8 @@ REAL,     INTENT(IN)   :: PT4DIFU    ! Damping time scale for 2*dx wavelength
 REAL,     INTENT(IN)   :: PT4DIFTH   ! for meteorological scalar variables
 REAL,     INTENT(IN)   :: PT4DIFSV   ! for tracer scalar variables
 
-REAL,     INTENT(IN)   :: PTSTEP     ! Time step    
+REAL,     INTENT(IN)   :: PTSTEP     ! Time step
+CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT        ! choice of the pressure solver
 !
 !  intent out arguments
 !
@@ -187,7 +188,7 @@ END INTERFACE
 END MODULE MODI_INI_DYNAMICS
 !     ######################################################################
 SUBROUTINE INI_DYNAMICS(PLON,PLAT,PRHODJ,PTHVREF,PMAP,PZZ,                   &
-               PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,                       &
+               PDXHAT,PDYHAT,PZHAT,HLBCX,HLBCY,PTSTEP,HPRESOPT,              &
                OVE_RELAX,OVE_RELAX_GRD,OHORELAX_UVWTH,OHORELAX_RV,           &
                OHORELAX_RC,OHORELAX_RR,OHORELAX_RI,OHORELAX_RS,OHORELAX_RG,  &
                OHORELAX_RH,OHORELAX_TKE,OHORELAX_SV,                         &
@@ -393,7 +394,8 @@ REAL,     INTENT(IN)   :: PT4DIFU    ! Damping time scale for 2*dx wavelength
 REAL,     INTENT(IN)   :: PT4DIFTH   ! for meteorological scalar variables
 REAL,     INTENT(IN)   :: PT4DIFSV   ! for tracer scalar variables
 
-REAL,     INTENT(IN)   :: PTSTEP     ! Time step    
+REAL,     INTENT(IN)   :: PTSTEP     ! Time step
+CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT        ! choice of the pressure solver
 !
 !  intent out arguments
 !
@@ -507,7 +509,8 @@ IF (.NOT.L1D) THEN
 !           PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,                            &
 !           PRHODJ,PTHVREF,PZZ,PBFY)
   CALL TRIDZ(HLBCX,HLBCY,                                                 &
-            PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,PAF,                 &
+            PMAP,PDXHAT,PDYHAT,HPRESOPT,                                  &
+            PDXHATM,PDYHATM,PRHOM,PAF,                                    &
             PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,                            &
             PRHODJ,PTHVREF,PZZ,PBFY,PBFB,                                 &
             PBF_SXP2_YP1_Z,                                               &
diff --git a/ini_modeln.f90 b/ini_modeln.f90
index 0f2cf8092..19254a43c 100644
--- a/ini_modeln.f90
+++ b/ini_modeln.f90
@@ -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
@@ -279,180 +276,187 @@ END MODULE MODI_INI_MODEL_n
 !!                   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
+!  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
+!  P. Wautelet 07/06/2019: allocate lookup tables for optical properties only when needed
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-#ifdef CPLOASIS
-  USE MODI_SFX_OASIS_READ_NAM
+#ifdef MNH_ECRAD
+USE YOERDI,                 only: RCCO2
 #endif
-!
-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_GATHER_ll
-USE MODE_MSG
-USE MODE_TYPE_ZDIFFU
-!
-USE MODD_NSV
-USE MODD_PARAMETERS
-USE MODD_CST
+
+USE MODD_2D_FRC
+USE MODD_ADVFRC_n
+USE MODD_ADV_n
+use MODD_AEROSET,           only: POLYTAU, POLYSSA, POLYG
+USE MODD_ARGSLIST_ll,       only: LIST_ll
+USE MODD_BIKHARDT_n
+USE MODD_BLOWSNOW
+USE MODD_BLOWSNOW_n
+USE MODD_BUDGET
+USE MODD_CH_AERO_n,         only: XSOLORG,XMI
+USE MODD_CH_AEROSOL,        only: LORILAM
+USE MODD_CH_BUDGET_n
+USE MODD_CH_FLX_n,          only: XCHFLX
+USE MODD_CH_M9_n,           only:NNONZEROTERMS
+USE MODD_CH_MNHC_n,         only: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, &
+                                  LCH_CONV_LINOX, XCH_TUV_DOBNEW, LCH_PH
+USE MODD_CH_PH_n
+USE MODD_CH_PRODLOSSTOT_n
+USE MODD_CLOUD_MF_n
 USE MODD_CONF
+USE MODD_CONF_n
+USE MODD_CST
+USE MODD_CTURB
+USE MODD_CURVCOR_n
+USE MODD_DEEP_CONVECTION_n
+USE MODD_DEF_EDDY_FLUX_n   ! for VT and WT fluxes
+USE MODD_DEF_EDDYUV_FLUX_n ! FOR UV
+USE MODD_DIAG_FLAG,         only: LCHEMDIAG, CSPEC_BU_DIAG
+USE MODD_DIM_n
+USE MODD_DRAG_n
+USE MODD_DRAGTREE
 USE MODD_DUST
+use MODD_DUST_OPT_LKT,      only: NMAX_RADIUS_LKT_DUST=>NMAX_RADIUS_LKT, NMAX_SIGMA_LKT_DUST=>NMAX_SIGMA_LKT,               &
+                                  NMAX_WVL_SW_DUST=>NMAX_WVL_SW,                                                            &
+                                  XEXT_COEFF_WVL_LKT_DUST=>XEXT_COEFF_WVL_LKT, XEXT_COEFF_550_LKT_DUST=>XEXT_COEFF_550_LKT, &
+                                  XPIZA_LKT_DUST=>XPIZA_LKT, XCGA_LKT_DUST=>XCGA_LKT
 USE MODD_DYN
-USE MODD_DYNZD
-USE MODD_FRC
-USE MODD_REF
-USE MODD_SERIES, ONLY: LSERIES
-USE MODD_TIME
-USE MODD_TURB_CLOUD, ONLY: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI
-USE MODD_NESTING
-USE MODD_PASPOL
-USE MODD_DRAGTREE
-USE MODD_METRICS_n
 USE MODD_DYN_n
+USE MODD_DYNZD
 USE MODD_DYNZD_n
+USE MODD_ELEC_n,            only: XCION_POS_FW, XCION_NEG_FW
 USE MODD_FIELD_n
-USE MODD_PAST_FIELD_n
-USE MODD_MEAN_FIELD_n
-USE MODD_MEAN_FIELD
-USE MODD_ADV_n
-USE MODD_LSFIELD_n
-USE MODD_GRID_n
-USE MODD_GRID, ONLY: XLONORI,XLATORI
-USE MODD_TIME_n
-USE MODD_REF_n
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+USE MODD_FOREFIRE_n
+#endif
+USE MODD_FRC
 USE MODD_FRC_n
-USE MODD_CURVCOR_n
-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_VAR_ll,        ONLY : IP
-!
-USE MODD_STAND_ATM,     ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM
-USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, &
-                           CCHEM_INPUT_FILE, LCH_CONV_LINOX,             &
-                           XCH_TUV_DOBNEW, LCH_PH, CSPEC_BUDGET, CSPEC_PRODLOSS
-USE MODD_CH_PH_n
-USE MODD_CH_AEROSOL, ONLY : LORILAM
-USE MODD_CH_AERO_n,  ONLY : XSOLORG,XMI
-USE MODD_CH_FLX_n,  ONLY : XCHFLX
+USE MODD_GET_n
+USE MODD_GRID_n
+USE MODD_GRID,              only: XLONORI,XLATORI
+USE MODD_IO,                only: CIO_DIR, TFILEDATA, TFILE_DUMMY
+USE MODD_IO_SURF_MNH,       only: IO_SURF_MNH_MODEL
+USE MODD_LATZ_EDFLX
+USE MODD_LBC_n,             only: CLBCX, CLBCY
+USE MODD_LSFIELD_n
+USE MODD_LUNIT_n
+USE MODD_MEAN_FIELD
+USE MODD_MEAN_FIELD_n
+USE MODD_METRICS_n
+USE MODD_MNH_SURFEX_n
+USE MODD_NESTING,           only: CDAD_NAME, NDAD, NDT_2_WAY, NDTRATIO, NDXRATIO_ALL, NDYRATIO_ALL
+USE MODD_NSV
+USE MODD_NSV
+USE MODD_NUDGING_n,         only: LNUDGING
+USE MODD_OUT_n
+USE MODD_PARAMETERS
 USE MODD_PARAM_KAFR_n
 USE MODD_PARAM_MFSHALL_n
-USE MODD_DEEP_CONVECTION_n
-USE MODD_OUT_n
-USE MODD_BIKHARDT_n
-USE MODD_NUDGING_n, ONLY : LNUDGING
-USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG, CSPEC_BU_DIAG
-USE MODD_CLOUD_MF_n
-USE MODD_NSV
-!
-USE MODD_ELEC_n, ONLY : XCION_POS_FW, XCION_NEG_FW
-
-USE MODD_LUNIT_n
-USE MODD_CONF_n
-USE MODD_GET_n
-USE MODD_TURB_n
-USE MODD_CTURB
-USE MODD_LBC_n
+USE MODD_PARAM_n
+USE MODD_PARAM_RAD_n,       only: CAER, CAOP, CLW
+USE MODD_PASPOL
 USE MODD_PASPOL_n
-USE MODD_DRAG_n
-USE MODD_BLOWSNOW
-USE MODD_BLOWSNOW_n
-!
-!
-USE MODI_INI_BUDGET
-USE MODI_INI_SW_SETUP
-USE MODI_INI_LW_SETUP
-USE MODI_SET_GRID
-USE MODI_METRICS
-USE MODI_UPDATE_METRICS
-USE MODI_READ_FIELD
-USE MODI_SET_REF
-USE MODI_INI_DYNAMICS
-USE MODI_INI_TKE_EPS
-USE MODI_SET_DIRCOS
-USE MODI_INI_CPL
-USE MODI_INI_RADIATIONS
-USE MODI_INI_RADIATIONS_ECMWF
-USE MODI_INI_RADIATIONS_ECRAD
+USE MODD_PAST_FIELD_n
+use modd_precision,         only: LFIINT
+USE MODD_RADIATIONS_n
+USE MODD_REF
+USE MODD_REF_n
+USE MODD_RELFRC_n
+use MODD_SALT,              only: LSALT
+use MODD_SALT_OPT_LKT,      only: NMAX_RADIUS_LKT_SALT=>NMAX_RADIUS_LKT, NMAX_SIGMA_LKT_SALT=>NMAX_SIGMA_LKT,               &
+                                  NMAX_WVL_SW_SALT=>NMAX_WVL_SW,                                                            &
+                                  XEXT_COEFF_WVL_LKT_SALT=>XEXT_COEFF_WVL_LKT, XEXT_COEFF_550_LKT_SALT=>XEXT_COEFF_550_LKT, &
+                                  XPIZA_LKT_SALT=>XPIZA_LKT, XCGA_LKT_SALT=>XCGA_LKT
+USE MODD_SERIES,            only: LSERIES
+USE MODD_SHADOWS_n
+USE MODD_STAND_ATM,         only: XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM
+USE MODD_TIME
+USE MODD_TIME_n
+USE MODD_TURB_CLOUD,        only: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI
+USE MODD_TURB_n
+USE MODD_VAR_ll,            only: IP
+
+USE MODE_GATHER_ll
+USE MODE_INI_ONE_WAY_n
+USE MODE_IO
+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
+USE MODE_ll
+USE MODE_MODELN_HANDLER
+USE MODE_MPPDB
+USE MODE_MSG
+USE MODE_SPLITTINGZ_ll,     only: GET_DIM_EXTZ_ll
+USE MODE_TYPE_ZDIFFU
+
+USE MODI_CH_AER_MOD_INIT
+USE MODI_CH_INIT_BUDGET_n
 USE MODI_CH_INIT_FIELD_n
-USE MODI_INI_DEEP_CONVECTION
-USE MODI_INI_BIKHARDT_n
-USE MODI_INI_ONE_WAY_n
+USE MODI_CH_INIT_JVALUES
+USE MODI_CH_INIT_PRODLOSSTOT_n
 USE MODI_GET_SIZEX_LB
 USE MODI_GET_SIZEY_LB
-USE MODI_INI_SPAWN_LS_n
-USE MODI_INI_AIRCRAFT_BALLOON
-USE MODI_UPDATE_NSV
-USE MODI_INI_ELEC_n
-USE MODI_INI_MICRO_n
-USE MODI_INI_LG
-USE MODI_SURF_SOLAR_GEOM
-USE MODI_SUNPOS_n
-USE MODI_INI_SURF_RAD
-USE MODI_MNHGET_SURF_PARAM_n
-USE MODI_MNHREAD_ZS_DUMMY_n
-USE MODI_INIT_GROUND_PARAM_n
-USE MODI_INI_AIRCRAFT_BALLOON
-USE MODI_INI_SURFSTATION_n
-USE MODI_INI_POSPROFILER_n
-USE MODI_CH_INIT_JVALUES
-USE MODI_CH_AER_MOD_INIT
-!
-USE MODD_PARAM_n
-USE MODE_MODELN_HANDLER
-USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll
-!
 USE MODI_INI_AEROSET1
 USE MODI_INI_AEROSET2
 USE MODI_INI_AEROSET3
 USE MODI_INI_AEROSET4
 USE MODI_INI_AEROSET5
 USE MODI_INI_AEROSET6
+USE MODI_INI_AIRCRAFT_BALLOON
+USE MODI_INI_AIRCRAFT_BALLOON
+USE MODI_INI_BIKHARDT_n
+USE MODI_INI_BUDGET
+USE MODI_INI_CPL
+USE MODI_INI_DEEP_CONVECTION
 USE MODI_INI_DRAG
-!
-#ifdef MNH_FOREFIRE
-USE MODD_FOREFIRE
-USE MODD_FOREFIRE_n
-USE MODI_INIT_FOREFIRE_n
-#endif
+USE MODI_INI_DYNAMICS
+USE MODI_INI_ELEC_n
 USE MODI_INI_LES_N
-USE MODD_MNH_SURFEX_n
+USE MODI_INI_LG
+USE MODI_INI_LW_SETUP
+USE MODI_INI_MICRO_n
+USE MODI_INI_POSPROFILER_n
+USE MODI_INI_RADIATIONS
+USE MODI_INI_RADIATIONS_ECMWF
+USE MODI_INI_RADIATIONS_ECRAD
 USE MODI_INI_SERIES_N
-! Eddy fluxes  ! Ajout PP
-USE MODD_DEF_EDDY_FLUX_n   ! for VT and WT fluxes
-USE MODD_DEF_EDDYUV_FLUX_n ! FOR UV
-USE MODD_LATZ_EDFLX
-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_CH_PRODLOSSTOT_n
-USE MODI_CH_INIT_PRODLOSSTOT_n
-!
-USE MODD_CH_BUDGET_n
-USE MODI_CH_INIT_BUDGET_n
-USE MODD_CH_M9_n, ONLY:NNONZEROTERMS
-!
-USE MODE_MPPDB
+USE MODI_INI_SPAWN_LS_n
+USE MODI_INI_SURF_RAD
+USE MODI_INI_SURFSTATION_n
+USE MODI_INI_SW_SETUP
 USE MODI_INIT_AEROSOL_PROPERTIES
-#ifdef MNH_ECRAD
-USE YOERDI   , ONLY :RCCO2
+#ifdef MNH_FOREFIRE
+USE MODI_INIT_FOREFIRE_n
+#endif
+USE MODI_INIT_GROUND_PARAM_n
+USE MODI_INI_TKE_EPS
+USE MODI_METRICS
+USE MODI_MNHGET_SURF_PARAM_n
+USE MODI_MNHREAD_ZS_DUMMY_n
+USE MODI_READ_FIELD
+USE MODI_SET_DIRCOS
+USE MODI_SET_GRID
+USE MODI_SET_REF
+#ifdef CPLOASIS
+USE MODI_SFX_OASIS_READ_NAM
 #endif
+USE MODI_SUNPOS_n
+USE MODI_SURF_SOLAR_GEOM
+USE MODI_UPDATE_METRICS
+USE MODI_UPDATE_NSV
 !
 IMPLICIT NONE
 !
@@ -460,7 +464,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
@@ -564,11 +567,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
@@ -577,11 +580,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
@@ -590,11 +593,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
@@ -605,8 +608,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,")"
@@ -897,6 +900,7 @@ ALLOCATE(XDYY(IIU,IJU,IKU))
 ALLOCATE(XDZX(IIU,IJU,IKU))
 ALLOCATE(XDZY(IIU,IJU,IKU))
 ALLOCATE(XDZZ(IIU,IJU,IKU))
+!$acc enter data create(XDXX,XDYY,XDZZ,XDZX,XDZY)
 !
 !*       3.3   Modules MODD_REF and  MODD_REF_n
 !
@@ -909,6 +913,7 @@ ALLOCATE(XRHODREF(IIU,IJU,IKU))
 ALLOCATE(XTHVREF(IIU,IJU,IKU))
 ALLOCATE(XEXNREF(IIU,IJU,IKU))
 ALLOCATE(XRHODJ(IIU,IJU,IKU))
+!$acc enter data create(XRHODJ)
 IF (CEQNSYS=='DUR' .AND. LUSERV) THEN
   ALLOCATE(XRVREF(IIU,IJU,IKU))
 ELSE
@@ -1128,9 +1133,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
@@ -1140,9 +1143,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
@@ -1536,8 +1537,7 @@ 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
 ! ----------------------------------------------------------------------
 !
@@ -1689,9 +1689,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
   !
@@ -1707,6 +1707,13 @@ IF (KMI == 1) THEN
     IF ( NDAD(KMI) == 7)  CDAD_NAME(KMI) = CEXP//'.7.'//CSEG
     IF ( NDAD(KMI) == 8)  CDAD_NAME(KMI) = CEXP//'.8.'//CSEG
   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
 !
 !-------------------------------------------------------------------------------
@@ -1714,12 +1721,7 @@ END IF
 !*       7.    INITIALIZE GRIDS AND METRIC COEFFICIENTS
 !              ----------------------------------------
 !
-CALL SET_GRID(KMI,TPINIFILE,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll,               &
-              XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4,           &
-              XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4,           &
-              NXOR_ALL(KMI),NYOR_ALL(KMI),NXEND_ALL(KMI),NYEND_ALL(KMI), &
-              NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                       &
-              CLBCX,CLBCY,                                               &
+CALL SET_GRID(KMI,TPINIFILE,IKU,NIMAX_ll,NJMAX_ll,                       &
               XTSTEP,XSEGLEN,                                            &
               XLONORI,XLATORI,XLON,XLAT,                                 &
               XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP,                           &
@@ -1848,9 +1850,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)')&
@@ -1944,6 +1946,7 @@ IF ((KMI==1).AND.(.NOT. LSTEADYLS)) THEN
       ENDDO
 !
 END IF
+ALLOCATE(XLSZWSM(IIU,IJU)) ; XLSZWSM = -1.
 !
 IF ( KMI > 1) THEN
   ! Use dummy pointers to correct an ifort BUG
@@ -2025,20 +2028,20 @@ IF ( KMI > 1) THEN
   DPTR_XLBYRM=>XLBYRM
   DPTR_XLBXSVM=>XLBXSVM
   DPTR_XLBYSVM=>XLBYSVM
-  CALL INI_ONE_WAY_n(NDAD(KMI),CLUOUT,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),      &
-       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                &
-       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,      &
-       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,      &
-       CCLOUD, LUSECHAQ, LUSECHIC,                                                 &
-       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,    &
-       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                  &
-       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                &
-       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                           )
+  CALL INI_ONE_WAY_n(NDAD(KMI),KMI,                                                             &
+       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),                                                     &
+       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                                       &
+       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,                   &
+       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,                   &
+       CCLOUD, LUSECHAQ, LUSECHIC,                                                              &
+       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,                 &
+       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                               &
+       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                             &
+       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                                        )
 END IF
 !
 !
@@ -2057,7 +2060,7 @@ IF (LLG .AND. LINIT_LG .AND. CPROGRAM=='MESONH') &
 !               ------------------------------------------
 !
 CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,            &
-             XZHAT,CLBCX,CLBCY,XTSTEP,                                        &
+             XZHAT,CLBCX,CLBCY,XTSTEP,CPRESOPT,                               &
              LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,              &
              LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG,     &
              LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV,                            &
@@ -2101,7 +2104,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,                  &
@@ -2162,7 +2165,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
@@ -2171,8 +2174,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
@@ -2211,11 +2214,12 @@ ELSE
     XTSRAD   = XTT
     XSEA     = 1.
   END IF
+
 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
@@ -2272,8 +2276,21 @@ IF (CRAD   == 'ECMW') THEN
       ZBARE(:,:) = 0.
     END IF
 !
-    CALL INI_RADIATIONS_ECMWF (TPINIFILE%CNAME,HLUOUT,                                 &
-                               XZHAT,XPABST,XTHT,XTSRAD,XLAT,XLON,TDTCUR,TDTEXP,       &
+    IF ( CAOP=='EXPL' .AND. LDUST ) THEN
+      ALLOCATE( XEXT_COEFF_WVL_LKT_DUST( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) )
+      ALLOCATE( XEXT_COEFF_550_LKT_DUST( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST )                   )
+      ALLOCATE( XPIZA_LKT_DUST         ( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) )
+      ALLOCATE( XCGA_LKT_DUST          ( NMAX_RADIUS_LKT_DUST, NMAX_SIGMA_LKT_DUST, NMAX_WVL_SW_DUST ) )
+    END IF
+!
+    IF ( CAOP=='EXPL' .AND. LSALT ) THEN
+      ALLOCATE( XEXT_COEFF_WVL_LKT_SALT( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT, NMAX_WVL_SW_SALT ) )
+      ALLOCATE( XEXT_COEFF_550_LKT_SALT( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT )                   )
+      ALLOCATE( XPIZA_LKT_SALT         ( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT, NMAX_WVL_SW_SALT ) )
+      ALLOCATE( XCGA_LKT_SALT          ( NMAX_RADIUS_LKT_SALT, NMAX_SIGMA_LKT_SALT, NMAX_WVL_SW_SALT ) )
+    END IF
+!
+    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 )
 !
@@ -2299,9 +2316,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 )
 
@@ -2334,7 +2350,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,&
@@ -2423,12 +2439,17 @@ CALL INI_POSPROFILER_n(XTSTEP, TDTSEG, XSEGLEN, NRR, NSV,  &
 !*      26.     Prognostic aerosols          
 !              ------------------------
 !
-CALL INI_AEROSET1
-CALL INI_AEROSET2
-CALL INI_AEROSET3
-CALL INI_AEROSET4
-CALL INI_AEROSET5
-CALL INI_AEROSET6
+IF ( ( CRAD=='ECMW' .OR. CRAD=='ECRA' ) .AND. CAOP=='EXPL' .AND. LORILAM ) THEN
+  ALLOCATE(POLYTAU(6,10,8,6,13))
+  ALLOCATE(POLYSSA(6,10,8,6,13))
+  ALLOCATE(POLYG  (6,10,8,6,13))
+  CALL INI_AEROSET1
+  CALL INI_AEROSET2
+  CALL INI_AEROSET3
+  CALL INI_AEROSET4
+  CALL INI_AEROSET5
+  CALL INI_AEROSET6
+END IF
 #ifdef MNH_FOREFIRE
 ! 
 !-------------------------------------------------------------------------------
diff --git a/ini_spectren.f90 b/ini_spectren.f90
index 5c33f6a1d..478344320 100644
--- a/ini_spectren.f90
+++ b/ini_spectren.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 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 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)
 !!
@@ -35,21 +34,21 @@ END MODULE MODI_INI_SPECTRE_n
 !!      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
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
-!!
+!  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
+!  S. Bielli      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
+!  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
+!
 !---------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
 USE MODD_ADV_n
+USE MODD_ARGSLIST_ll,   ONLY: LIST_ll
 USE MODD_BIKHARDT_n
 USE MODD_BUDGET
-USE MODD_CH_AERO_n,     ONLY: XSOLORG,XMI
-USE MODD_CH_AEROSOL,    ONLY: LORILAM
-USE MODD_CH_MNHC_n,     ONLY: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, &
-                              CCHEM_INPUT_FILE, LCH_CONV_LINOX,             &
-                              XCH_TUV_DOBNEW, LCH_PH
+USE MODD_CH_MNHC_n,     ONLY: LUSECHAQ, LUSECHIC, LCH_INIT_FIELD
 USE MODD_CH_PH_n
 USE MODD_CLOUD_MF_n
 USE MODD_CST
@@ -58,7 +57,6 @@ USE MODD_CONF_n
 USE MODD_CTURB
 USE MODD_CURVCOR_n
 USE MODD_DEEP_CONVECTION_n
-USE MODD_DIAG_FLAG,     ONLY: LCHEMDIAG
 USE MODD_DIM_n
 USE MODD_DRAGTREE
 USE MODD_DUST
@@ -66,29 +64,26 @@ USE MODD_DYN
 USE MODD_DYN_n
 USE MODD_DYNZD
 USE MODD_DYNZD_n
-USE MODD_ELEC_n,        ONLY: XCION_POS_FW, XCION_NEG_FW
 USE MODD_FIELD_n
 USE MODD_FRC
 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_LBC_n
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_LBC_n,         only: CLBCX, CLBCY
 USE MODD_LSFIELD_n
 USE MODD_LUNIT_n,       ONLY: COUTFILE, TLUOUT
 USE MODD_MEAN_FIELD
 USE MODD_MEAN_FIELD_n
 USE MODD_METRICS_n
-USE MODD_NESTING
+USE MODD_NESTING,       only: NDAD, NDT_2_WAY, NDXRATIO_ALL, NDYRATIO_ALL
 USE MODD_NSV
-USE MODD_NUDGING_n,     ONLY: LNUDGING
 USE MODD_OUT_n
 USE MODD_PARAMETERS
 USE MODD_PARAM_KAFR_n
 USE MODD_PARAM_MFSHALL_n
 USE MODD_PARAM_n
-USE MODD_PARAM_RAD_n,   ONLY: CLW, CAER
 USE MODD_PASPOL
 USE MODD_PASPOL_n
 USE MODD_BLOWSNOW
@@ -97,20 +92,16 @@ USE MODD_PAST_FIELD_n
 USE MODD_RADIATIONS_n
 USE MODD_REF
 USE MODD_REF_n
-USE MODD_SERIES,        ONLY: LSERIES
 USE MODD_SHADOWS_n
 USE MODD_SPECTRE
-USE MODD_STAND_ATM,     ONLY: XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM
 USE MODD_TIME
 USE MODD_TIME_n
-USE MODD_TURB_CLOUD,    ONLY: NMODEL_CLOUD, CTURBLEN_CLOUD,XCEI
 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_INI_ONE_WAY_n
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
@@ -120,7 +111,6 @@ USE MODE_TYPE_ZDIFFU
 USE MODI_INI_BIKHARDT_n
 USE MODI_INI_CPL
 USE MODI_INI_DYNAMICS
-USE MODI_INI_ONE_WAY_n
 USE MODI_INI_SPAWN_LS_n
 USE MODI_GET_SIZEX_LB
 USE MODI_GET_SIZEY_LB
@@ -136,12 +126,10 @@ 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
 !
-INTEGER             :: JSV     ! Loop index
 INTEGER             :: ILUOUT  ! Logical unit number of output-listing
 INTEGER             :: IIU     ! Upper dimension in x direction (local)
 INTEGER             :: IJU     ! Upper dimension in y direction (local)
@@ -149,10 +137,6 @@ INTEGER             :: IIU_ll  ! Upper dimension in x direction (global)
 INTEGER             :: IJU_ll  ! Upper dimension in y direction (global)
 INTEGER             :: IKU     ! Upper dimension in z direction
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ ! Jacobian
-LOGICAL             :: GINIDCONV ! logical switch for the deep convection
-                               ! initialization
-LOGICAL             :: GINIRAD ! logical switch for the radiation
-                               ! initialization
 !
 !
 TYPE(LIST_ll), POINTER :: TZINITHALO2D_ll ! pointer for the list of 2D fields
@@ -169,14 +153,6 @@ INTEGER :: IIY,IJY
 INTEGER :: IIU_B,IJU_B
 INTEGER :: IIU_SXP2_YP1_Z_ll,IJU_SXP2_YP1_Z_ll,IKU_SXP2_YP1_Z_ll
 !
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZCO2   ! CO2 concentration near the surface
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZCOVER ! surface cover types
-INTEGER                             :: ICOVER ! number of cover types
-!
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo
-REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZEMIS    ! emissivity
-REAL, DIMENSION(:,:),   ALLOCATABLE :: ZTSRAD   ! surface temperature
 !------------------------------------------
 ! Dummy pointers needed to correct an ifort Bug
 REAL, DIMENSION(:), POINTER :: DPTR_XZHAT
@@ -225,8 +201,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,")"
@@ -511,9 +487,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
@@ -523,9 +497,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
@@ -710,12 +682,7 @@ CALL INI_BIKHARDT_n (NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),KMI)
 !*       6.    INITIALIZE GRIDS AND METRIC COEFFICIENTS
 !              ----------------------------------------
 !
-CALL SET_GRID(KMI,TPINIFILE,IIU,IJU,IKU,NIMAX_ll,NJMAX_ll,               &
-              XBMX1,XBMX2,XBMX3,XBMX4,XBMY1,XBMY2,XBMY3,XBMY4,           &
-              XBFX1,XBFX2,XBFX3,XBFX4,XBFY1,XBFY2,XBFY3,XBFY4,           &
-              NXOR_ALL(KMI),NYOR_ALL(KMI),NXEND_ALL(KMI),NYEND_ALL(KMI), &
-              NDXRATIO_ALL(KMI),NDYRATIO_ALL(KMI),                       &
-              CLBCX,CLBCY,                                               &
+CALL SET_GRID(KMI,TPINIFILE,IKU,NIMAX_ll,NJMAX_ll,                       &
               XTSTEP,XSEGLEN,                                            &
               XLONORI,XLATORI,XLON,XLAT,                                 &
               XXHAT,XYHAT,XDXHAT,XDYHAT, XMAP,                           &
@@ -746,27 +713,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
 !
 !-------------------------------------------------------------------------------
@@ -895,20 +862,20 @@ IF ( KMI > 1) THEN
   DPTR_XLBYRM=>XLBYRM
   DPTR_XLBXSVM=>XLBXSVM
   DPTR_XLBYSVM=>XLBYSVM
-  CALL INI_ONE_WAY_n(NDAD(KMI),HLUOUT,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),      &
-       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                &
-       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,      &
-       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,      &
-       CCLOUD, LUSECHAQ, LUSECHIC,                                                 &
-       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,    &
-       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                  &
-       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                &
-       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                           )
+  CALL INI_ONE_WAY_n(NDAD(KMI),KMI,                                                             &
+       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),                                                     &
+       DPTR_CLBCX,DPTR_CLBCY,NRIMX,NRIMY,                                                       &
+       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,                   &
+       DPTR_NKLIN_LBXM,DPTR_XCOEFLIN_LBXM,DPTR_NKLIN_LBYM,DPTR_XCOEFLIN_LBYM,                   &
+       CCLOUD, LUSECHAQ, LUSECHIC,                                                              &
+       DPTR_XLBXUM,DPTR_XLBYUM,DPTR_XLBXVM,DPTR_XLBYVM,DPTR_XLBXWM,DPTR_XLBYWM,                 &
+       DPTR_XLBXTHM,DPTR_XLBYTHM,                                                               &
+       DPTR_XLBXTKEM,DPTR_XLBYTKEM,                                                             &
+       DPTR_XLBXRM,DPTR_XLBYRM,DPTR_XLBXSVM,DPTR_XLBYSVM                                        )
 END IF
 !
 !
@@ -927,7 +894,7 @@ ALLOCATE(XALKBAS(0))
 ALLOCATE(XALKWBAS(0))
 !
 CALL INI_DYNAMICS(XLON,XLAT,XRHODJ,XTHVREF,XMAP,XZZ,XDXHAT,XDYHAT,            &
-             XZHAT,CLBCX,CLBCY,XTSTEP,                                        &
+             XZHAT,CLBCX,CLBCY,XTSTEP,CPRESOPT,                               &
              LVE_RELAX,LVE_RELAX_GRD,LHORELAX_UVWTH,LHORELAX_RV,              &
              LHORELAX_RC,LHORELAX_RR,LHORELAX_RI,LHORELAX_RS,LHORELAX_RG,     &
              LHORELAX_RH,LHORELAX_TKE,LHORELAX_SV,                            &
@@ -972,4 +939,3 @@ DEALLOCATE(ZJ)
 !
 
 END SUBROUTINE INI_SPECTRE_n
-
diff --git a/modeln.f90 b/modeln.f90
index 1080c4b61..0b0f5b1b8 100644
--- a/modeln.f90
+++ b/modeln.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.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_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,8 +253,19 @@ 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
+!  P. Wautelet 19/04/2019: removed unused dummy arguments and variables
+!  P. Wautelet 26/04/2019: replace non-standard FLOAT function by REAL function
+!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
+!  J. Escobar  09/07/2019: norme Doctor -> Rename Module Type variable TZ -> T
+!  J. Escobar  09/07/2019: for bug in management of XLSZWSM variable, add/use specific 2D TLSFIELD2D_ll pointer
+!  P. Wautelet 23/07/2019: OpenACC: move data creations from resolved_cloud to modeln and optimize updates
+!  J. Escobar  27/09/2019: add missing report timing of RESOLVED_ELEC
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -265,18 +276,17 @@ USE MODD_ADV_n
 USE MODD_AIRCRAFT_BALLOON
 USE MODD_BAKOUT
 USE MODD_BIKHARDT_n
-USE MODD_BLANK 
+USE MODD_BLANK
 USE MODD_BUDGET
 USE MODD_CH_AERO_n,      ONLY: XSOLORG, XMI
 USE MODD_CH_MNHC_n,      ONLY: LUSECHEM,LCH_CONV_LINOX,LUSECHAQ,LUSECHIC, &
                                LCH_INIT_FIELD
-USE MODD_CLOUD_MF_n  
+USE MODD_CLOUD_MF_n
 USE MODD_VISCOSITY
 USE MODD_DRAG_n
 USE MODD_CLOUDPAR_n
 USE MODD_CONF
 USE MODD_CONF_n
-USE MODD_CST, ONLY: XMD
 USE MODD_CURVCOR_n
 USE MODD_DEEP_CONVECTION_n
 USE MODD_DIM_n
@@ -293,7 +303,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
@@ -313,16 +323,17 @@ USE MODD_PARAM_C1R3,     ONLY: NSEDI => LSEDI, NHHONI => LHHONI
 USE MODD_PARAM_C2R2,     ONLY: NSEDC => LSEDC, NRAIN => LRAIN, NACTIT => LACTIT,LACTTKE,LDEPOC
 USE MODD_PARAMETERS
 USE MODD_PARAM_ICE,      ONLY: LWARM,LSEDIC,LCONVHG,LDEPOSC
-USE MODD_PARAM_LIMA,     ONLY: MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, LACTI,  &
-                               MACTIT => LACTIT, LSCAV, NMOD_CCN, LCOLD,               &
-                               MSEDI => LSEDI, MHHONI => LHHONI, NMOD_IFN, LHAIL,      &
+USE MODD_PARAM_LIMA,     ONLY: MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, &
+                               MACTIT => LACTIT, LSCAV, LCOLD,                 &
+                               MSEDI => LSEDI, MHHONI => LHHONI, LHAIL,        &
                                XRTMIN_LIMA=>XRTMIN, MACTTKE=>LACTTKE
 USE MODD_BLOWSNOW_n
-USE MODD_BLOWSNOW                       
+USE MODD_BLOWSNOW
 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
@@ -333,29 +344,31 @@ USE MODD_SERIES_n,       ONLY: NFREQSERIES
 USE MODD_STATION_n
 USE MODD_SUB_MODEL_n
 USE MODD_TIME
-USE MODD_TIME_n 
+USE MODD_TIME_n
 USE MODD_TIMEZ
 USE MODD_TURB_CLOUD,     ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI
 USE MODD_TURB_n
 !
 USE MODE_DATETIME
 USE MODE_ELEC_ll
-USE MODE_FM
-USE MODE_GRIDCART         
+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
 USE MODE_MPPDB
+USE MODE_ONE_WAY_n
 !
 USE MODI_ADVECTION_METSV
-USE MODI_ADVECTION_UVW     
-USE MODI_ADVECTION_UVW_CEN 
+USE MODI_ADVECTION_UVW
+USE MODI_ADVECTION_UVW_CEN
 USE MODI_ADV_FORCING_n
 USE MODI_AER_MONITOR_n
 USE MODI_AIRCRAFT_BALLOON
+USE MODI_BLOWSNOW
 USE MODI_BOUNDARIES
 USE MODI_BUDGET_FLAGS
 USE MODI_CART_COMPRESS
@@ -370,7 +383,7 @@ USE MODI_FORCING
 USE MODI_FORC_SQUALL_LINE
 USE MODI_FORC_WIND
 USE MODI_GET_HALO
-USE MODI_GRAVITY_IMPL         
+USE MODI_GRAVITY_IMPL
 USE MODI_INI_DIAG_IN_RUN
 USE MODI_INI_LG
 USE MODI_INI_MEAN_FIELD
@@ -387,7 +400,6 @@ USE MODI_MNHGET_SURF_PARAM_n
 USE MODI_MNHWRITE_ZS_DUMMY_n
 USE MODI_NUDGING
 USE MODI_NUM_DIFF
-USE MODI_ONE_WAY_n
 USE MODI_PHYS_PARAM_n
 USE MODI_PRESSUREZ
 USE MODI_PROFILER_n
@@ -415,8 +427,6 @@ USE MODI_WRITE_LFIFMN_FORDIACHRO_n
 USE MODI_WRITE_PROFILER_n
 USE MODI_WRITE_SERIES_n
 USE MODI_WRITE_STATION_n
-USE MODI_BLOWSNOW
-
 USE MODI_WRITE_SURF_ATM_N
 !
 IMPLICIT NONE
@@ -432,44 +442,19 @@ LOGICAL, INTENT(INOUT):: OEXIT
 !
 INTEGER :: ILUOUT      ! Logical unit number for the output listing
 INTEGER :: IIU,IJU,IKU ! array size in first, second and third dimensions
-INTEGER :: IIB,IIE,IJB,IJE,IKB,IKE ! index values for the physical subdomain
+INTEGER :: IIB,IIE,IJB,IJE ! index values for the physical subdomain
 INTEGER :: JSV,JRR     ! Loop index for scalar and moist variables
 INTEGER  :: INBVAR              ! number of HALO2_lls to allocate
-INTEGER  :: IRESP               ! return code in FM routines
 INTEGER  :: IINFO_ll            ! return code of parallel routine
 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
-
-REAL         :: ZSTAT_CSTORE,ZSTAT_CBOUND,ZSTAT_CGUESS,ZSTAT_CADV,ZSTAT_CSOURCES
-REAL         :: ZSTAT_CDIFF,ZSTAT_CRELAX,ZSTAT_CPARAM
-REAL         :: ZSTAT_CSPECTRA,ZSTAT_CRAD_BOUND,ZSTAT_CPRESS
-REAL         :: ZSTAT_CCLOUD,ZSTAT_CSTEP_SWA,ZSTAT_CSTEP_MISC
-REAL         :: ZSTAT_CCOUPL,ZSTAT_CSTEP_BUD,ZSTAT_CSTEP_CDRAG
-REAL         :: ZSTAT_CSTEP_CTRACER,ZSTAT_CSTEP_CELEC
-REAL         :: SCONV_CTURB,ZSTAT_C1WAY,ZSTAT_C2WAY,ZSTAT_CMAFL
-REAL         :: ZSTAT_CRAD,ZSTAT_CDCONV,ZSTAT_CGROUND,ZSTAT_CHALO
-REAL         :: ZSTAT_CFORCING,ZSTAT_CNUDGING,ZSTAT_CCHEM
-!
-REAL         :: ZPERCALL,ZPRICE
-REAL         :: ZPERCSTORE,ZPERCBOUND,ZPERCGUESS,ZPERCADV,ZPERCSOURCES,ZPERCDRAG
-REAL         :: ZPERCDIFF,ZPERCRELAX,ZPERCPARAM
-REAL         :: ZPERCSPECTRA,ZPERCRAD_BOUND,ZPERCPRESS
-REAL         :: ZPERCCLOUD,ZPERCSTEP_SWA,ZPERCSTEP_MISC
-REAL         :: ZPERCELEC
-REAL         :: ZPERCCOUPL,ZPERCSTEP_BUD
-REAL         :: ZPERCTURB,ZPERC1WAY,ZPERC2WAY
-REAL         :: ZPERCRAD,ZPERCSHADOWS,ZPERCKAFR,ZPERCGROUND,ZPERCHALO,ZPERCMAFL,ZPERTRACER
-REAL         :: ZPERCFORCING,ZPERCNUDGING,ZPERCCHEM
-REAL         :: ZTSTEP_UVW   ! Double timestep except for cold start (single)
-REAL         :: ZTSTEP_MET,ZTSTEP_SV ! Effective time step for advection
 !
 INTEGER :: ISYNCHRO          ! model synchronic index relative to its father
                              ! = 1  for the first time step in phase with DAD
@@ -512,46 +497,34 @@ REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG
 REAL, DIMENSION(:,:), POINTER :: DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV
 LOGICAL, DIMENSION(:,:),POINTER :: DPTR_GMASKkids
 !
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDC
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDR
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDS
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDG
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDH
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRC3D
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRS3D
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRG3D
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRH3D
-!
-LOGICAL :: KWARM        
-LOGICAL :: KRAIN        
-LOGICAL :: KSEDC  
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDC
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDR
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDS
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDG
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZSPEEDH
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRC3D
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRS3D
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRG3D
+! REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3))           :: ZINPRH3D
+!
+LOGICAL :: KWARM
+LOGICAL :: KRAIN
+LOGICAL :: KSEDC
 LOGICAL :: KACTIT
 LOGICAL :: KSEDI
 LOGICAL :: KHHONI
-REAL :: TEMPS
-INTEGER :: NSV_END
-CHARACTER (LEN=100) :: YCOMMENT   ! Comment string in LFIFM file
-CHARACTER (LEN=LEN_HREC)  :: YRECFM     ! Name of the desired field in LFIFM file
 !
-INTEGER             :: ILENG      ! Length of comment string in LFIFM file
-INTEGER             :: IGRID      ! C-grid indicator in LFIFM file
-INTEGER             :: ILENCH     ! Length of comment string in LFIFM file
-!
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZRUS,ZRVS,ZRWS
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPABST !To give pressure at t 
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZRUS,ZRVS,ZRWS
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZPABST !To give pressure at t
                                                      ! (and not t+1) to resolved_cloud
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZJ
-!
-! for various testing
-INTEGER :: IK
-REAL, DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZTMP
+REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZJ
 !
 TYPE(LIST_ll), POINTER :: TZFIELDC_ll   ! list of fields to exchange
 TYPE(HALO2LIST_ll), POINTER :: TZHALO2C_ll   ! list of fields to exchange
 LOGICAL :: GCLD                     ! conditionnal call for dust wet deposition
 LOGICAL :: GCLOUD_ONLY              ! conditionnal radiation computations for
                                 !      the only cloudy columns
-REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER)  :: ZWETDEPAER
+REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZWETDEPAER
 
 
 !
@@ -561,6 +534,16 @@ TYPE(TFILEDATA),POINTER :: TZBAKFILE, TZOUTFILE
 !
 TZBAKFILE=> NULL()
 TZOUTFILE=> NULL()
+
+allocate( ZRUS  (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) )
+allocate( ZRVS  (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) )
+allocate( ZRWS  (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) )
+allocate( ZPABST(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) )
+allocate( ZJ    (SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) )
+allocate( ZWETDEPAER(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER) )
+
+!$acc data create( zrws )
+
 !
 !*       0.    MICROPHYSICAL SCHEME
 !              ------------------- 
@@ -610,8 +593,6 @@ ILUOUT = TLUOUT%NLU
 CALL GET_DIM_EXT_ll('B',IIU,IJU)
 IKU=NKMAX+2*JPVEXT
 CALL GET_INDICE_ll (IIB,IJB,IIE,IJE)
-IKB=1+JPVEXT
-IKE=IKU-JPVEXT
 !
 IF (IMI==1) THEN
   GSTEADY_DMASS=LSTEADYLS
@@ -623,12 +604,13 @@ END IF
 !
 IF (KTCOUNT == 1) THEN
 !
-  NULLIFY(TZFIELDS_ll,TZLSFIELD_ll,TZFIELDT_ll)
-  NULLIFY(TZHALO2T_ll)
-  NULLIFY(TZLSHALO2_ll)
-  NULLIFY(TZFIELDSC_ll)
+  NULLIFY(TFIELDS_ll,TLSFIELD_ll,TFIELDT_ll)
+  NULLIFY(TLSFIELD2D_ll)
+  NULLIFY(THALO2T_ll)
+  NULLIFY(TLSHALO2_ll)
+  NULLIFY(TFIELDSC_ll)
 !
-  ALLOCATE(ZWT_ACT_NUC(SIZE(XWT,1),SIZE(XWT,2),SIZE(XWT,3)))
+  ALLOCATE(XWT_ACT_NUC(SIZE(XWT,1),SIZE(XWT,2),SIZE(XWT,3)))
   ALLOCATE(GMASKkids(SIZE(XWT,1),SIZE(XWT,2)))
 !
 ! initialization of the FM file backup/output number
@@ -636,9 +618,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
@@ -647,109 +629,101 @@ IF (KTCOUNT == 1) THEN
 !
 !                 a) Sources terms
 !
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRUS)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRVS)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRWS)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTHS)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRUS_PRES)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRVS_PRES)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRWS_PRES)
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTHS_CLD)
-  IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDS_ll, XRTKES)
-  DO JRR=1,NRR
-    CALL ADD3DFIELD_ll(TZFIELDS_ll, XRRS(:,:,:,JRR))
-    CALL ADD3DFIELD_ll(TZFIELDS_ll, XRRS_CLD(:,:,:,JRR))
-  ENDDO
-  DO JSV=1,NSV
-    CALL ADD3DFIELD_ll(TZFIELDS_ll, XRSVS(:,:,:,JSV))
-    CALL ADD3DFIELD_ll(TZFIELDS_ll, XRSVS_CLD(:,:,:,JSV))
-  ENDDO
-  IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDS_ll, XSRCT)
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS,      'MODEL_n::XRUS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS,      'MODEL_n::XRVS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS,      'MODEL_n::XRWS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS,     'MODEL_n::XRTHS' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRUS_PRES, 'MODEL_n::XRUS_PRES' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRVS_PRES, 'MODEL_n::XRVS_PRES' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRWS_PRES, 'MODEL_n::XRWS_PRES' )
+  CALL ADD3DFIELD_ll( TFIELDS_ll, XRTHS_CLD, 'MODEL_n::XRTHS_CLD' )
+  IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XRTKES, 'MODEL_n::XRTKES' )
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS     (:,:,:,1:NRR), 'MODEL_n::XRRS' )
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRRS_CLD (:,:,:,1:NRR), 'MODEL_n::XRRS_CLD' )
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS    (:,:,:,1:NSV), 'MODEL_n::XRSVS')
+  CALL ADD4DFIELD_ll( TFIELDS_ll, XRSVS_CLD(:,:,:,1:NSV), 'MODEL_n::XRSVS_CLD')
+  IF (SIZE(XSRCT,1) /= 0) CALL ADD3DFIELD_ll( TFIELDS_ll, XSRCT, 'MODEL_n::XSRCT' )
   !
   IF ((LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV) ) THEN
   !
   !                 b) LS fields
   !
-    CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSUM)
-    CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSVM)
-    CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSWM)
-    CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSTHM)
-    CALL ADD2DFIELD_ll(TZLSFIELD_ll, XLSZWSM)
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSUM,   'MODEL_n::XLSUM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSVM,   'MODEL_n::XLSVM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSWM,   'MODEL_n::XLSWM'   )
+    CALL ADD3DFIELD_ll( TLSFIELD_ll,   XLSTHM,  'MODEL_n::XLSTHM'  )
+    CALL ADD2DFIELD_ll( TLSFIELD2D_ll, XLSZWSM, 'MODEL_n::XLSZWSM' )
     IF (NRR >= 1) THEN
-      CALL ADD3DFIELD_ll(TZLSFIELD_ll, XLSRVM)
+      CALL ADD3DFIELD_ll( TLSFIELD_ll, XLSRVM, 'MODEL_n::XLSRVM' )
     ENDIF
   !
   !                 c) Fields at t
   !
-    CALL ADD3DFIELD_ll(TZFIELDT_ll, XUT)
-    CALL ADD3DFIELD_ll(TZFIELDT_ll, XVT)
-    CALL ADD3DFIELD_ll(TZFIELDT_ll, XWT)
-    CALL ADD3DFIELD_ll(TZFIELDT_ll, XTHT)
-    IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll(TZFIELDT_ll, XTKET)
-    DO JRR=1,NRR
-      CALL ADD3DFIELD_ll(TZFIELDT_ll, XRT(:,:,:,JRR))
-    ENDDO
-    DO JSV=1,NSV
-      CALL ADD3DFIELD_ll(TZFIELDT_ll, XSVT(:,:,:,JSV))
-    ENDDO
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XUT,  'MODEL_n::XUT'  )
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XVT,  'MODEL_n::XVT'  )
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XWT,  'MODEL_n::XWT'  )
+    CALL ADD3DFIELD_ll( TFIELDT_ll, XTHT, 'MODEL_n::XTHT' )
+    IF (SIZE(XRTKES,1) /= 0) CALL ADD3DFIELD_ll( TFIELDT_ll, XTKET, 'MODEL_n::XTKET' )
+    CALL ADD4DFIELD_ll(TFIELDT_ll, XRT (:,:,:,1:NRR), 'MODEL_n::XSV'  )
+    CALL ADD4DFIELD_ll(TFIELDT_ll, XSVT(:,:,:,1:NSV), 'MODEL_n::XSVT' )
   !
   !*       1.5   Initialize the list of fields for the halo updates (2nd layer)
   !
     INBVAR = 4+NRR+NSV
     IF (SIZE(XRTKES,1) /= 0) INBVAR=INBVAR+1
-    CALL INIT_HALO2_ll(TZHALO2T_ll,INBVAR,IIU,IJU,IKU)
-    CALL INIT_HALO2_ll(TZLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU)
+    CALL INIT_HALO2_ll(THALO2T_ll,INBVAR,IIU,IJU,IKU)
+    CALL INIT_HALO2_ll(TLSHALO2_ll,4+MIN(1,NRR),IIU,IJU,IKU)
   !
   !*       1.6   Initialise the 2nd layer of the halo of the LS fields
   !
     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)
+       CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll)
+       CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) 
+       CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_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_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_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_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_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_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_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_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
 !
@@ -915,8 +889,6 @@ ZTIME1=ZTIME2
 IF( LLG .AND. IMI==1 ) CALL SETLB_LG
 !
 IF (CCONF == "START" .OR. (CCONF == "RESTA" .AND. KTCOUNT /= 1 )) THEN
-CALL MPPDB_CHECK3DM("before BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,&
-                   &  XUT, XVT, XWT, XTHT, XTKET)
 CALL BOUNDARIES (                                                   &
             XTSTEP,CLBCX,CLBCY,NRR,NSV,KTCOUNT,                     &
             XLBXUM,XLBXVM,XLBXWM,XLBXTHM,XLBXTKEM,XLBXRM,XLBXSVM,   &
@@ -925,8 +897,6 @@ CALL BOUNDARIES (                                                   &
             XLBYUS,XLBYVS,XLBYWS,XLBYTHS,XLBYTKES,XLBYRS,XLBYSVS,   &
             XRHODJ,                                                 &
             XUT, XVT, XWT, XTHT, XTKET, XRT, XSVT, XSRCT            )
-CALL MPPDB_CHECK3DM("after  BOUNDARIES:XUT, XVT, XWT, XTHT, XTKET",PRECISION,&
-                   &  XUT, XVT, XWT, XTHT, XTKET)
 END IF
 !
 CALL SECOND_MNH2(ZTIME2)
@@ -951,10 +921,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)
@@ -994,13 +964,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
@@ -1027,7 +997,7 @@ IF (NBUMOD==IMI .AND. CBUTYPE=='MASK' ) THEN
   IF (LBU_RV)   XBURHODJV(:,NBUTIME,:) = XBURHODJV(:,NBUTIME,:)    &
                             + MASK_COMPRESS(MYM(XRHODJ))
   IF (LBU_RW)   XBURHODJW(:,NBUTIME,:) = XBURHODJW(:,NBUTIME,:)    &
-                            + MASK_COMPRESS(MZM(1,IKU,1,XRHODJ))
+                            + MASK_COMPRESS(MZM(XRHODJ))
   IF (ALLOCATED(XBURHODJ))                                         &
                 XBURHODJ (:,NBUTIME,:) = XBURHODJ (:,NBUTIME,:)    &
                               + MASK_COMPRESS(XRHODJ)
@@ -1039,7 +1009,7 @@ IF (NBUMOD==IMI .AND. CBUTYPE=='CART' ) THEN
   IF (LBU_RV)   XBURHODJV(:,:,:) = XBURHODJV(:,:,:)    &
                 + CART_COMPRESS(MYM(XRHODJ))
   IF (LBU_RW)   XBURHODJW(:,:,:) = XBURHODJW(:,:,:)    &
-                + CART_COMPRESS(MZM(1,IKU,1,XRHODJ))
+                + CART_COMPRESS(MZM(XRHODJ))
   IF (ALLOCATED(XBURHODJ))                             &
                 XBURHODJ (:,:,:) = XBURHODJ (:,:,:)    &
                 + CART_COMPRESS(XRHODJ)
@@ -1117,8 +1087,8 @@ IF (NMODEL>1) THEN
   DPTR_GMASKkids=>GMASKkids
   !
   CALL TWO_WAY(     NRR,NSV,KTCOUNT,DPTR_XRHODJ,IMI,XTSTEP,                                    &
-       DPTR_XUM ,DPTR_XVM ,DPTR_XWM , DPTR_XTHM, DPTR_XRM, DPTR_XTKEM, DPTR_XSVM,              &        
-       DPTR_XRUS,DPTR_XRVS,DPTR_XRWS,DPTR_XRTHS,DPTR_XRRS,DPTR_XRTKES,DPTR_XRSVS,              &
+       DPTR_XUM ,DPTR_XVM ,DPTR_XWM , DPTR_XTHM, DPTR_XRM,DPTR_XSVM,                           &
+       DPTR_XRUS,DPTR_XRVS,DPTR_XRWS,DPTR_XRTHS,DPTR_XRRS,DPTR_XRSVS,                          &
        DPTR_XINPRC,DPTR_XINPRR,DPTR_XINPRS,DPTR_XINPRG,DPTR_XINPRH,DPTR_XPRCONV,DPTR_XPRSCONV, &
        DPTR_XDIRFLASWD,DPTR_XSCAFLASWD,DPTR_XDIRSRFSWD,DPTR_GMASKkids           )
 END IF
@@ -1227,11 +1197,12 @@ XTIME_LES_BU_PROCESS = 0.
 !
 IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN
 !
-  CALL UPDATE_HALO_ll(TZFIELDT_ll, IINFO_ll)
-  CALL UPDATE_HALO2_ll(TZFIELDT_ll, TZHALO2T_ll, IINFO_ll)
+  CALL UPDATE_HALO_ll(TFIELDT_ll, IINFO_ll)
+  CALL UPDATE_HALO2_ll(TFIELDT_ll, THALO2T_ll, IINFO_ll)
   IF ( .NOT. LSTEADYLS ) THEN
-     CALL UPDATE_HALO_ll(TZLSFIELD_ll, IINFO_ll)
-     CALL UPDATE_HALO2_ll(TZLSFIELD_ll, TZLSHALO2_ll, IINFO_ll)
+     CALL UPDATE_HALO_ll(TLSFIELD_ll, IINFO_ll)
+     CALL UPDATE_HALO_ll(TLSFIELD2D_ll,IINFO_ll) 
+     CALL UPDATE_HALO2_ll(TLSFIELD_ll, TLSHALO2_ll, IINFO_ll)
   END IF
   CALL NUM_DIFF ( CLBCX, CLBCY, NRR, NSV,                               &
                   XDK2U, XDK4U, XDK2TH, XDK4TH, XDK2SV, XDK4SV, IMI,    &
@@ -1239,7 +1210,7 @@ IF ( LNUMDIFU .OR. LNUMDIFTH .OR. LNUMDIFSV ) THEN
                   XLSUM,XLSVM,XLSWM,XLSTHM,XLSRVM,XRHODJ,               &
                   XRUS, XRVS, XRWS, XRTHS, XRTKES, XRRS, XRSVS,         &
                   LZDIFFU,LNUMDIFU, LNUMDIFTH, LNUMDIFSV,               &
-                  TZHALO2T_ll, TZLSHALO2_ll,XZDIFFU_HALO2      )
+                  THALO2T_ll, TLSHALO2_ll,XZDIFFU_HALO2      )
 END IF
 !
 DO JSV = NSV_CHEMBEG,NSV_CHEMEND
@@ -1530,11 +1501,19 @@ ZTIME1 = ZTIME2
 XTIME_BU_PROCESS = 0.
 XTIME_LES_BU_PROCESS = 0.
 !
+!$acc data create (XUT, XVT, XWT)                                         &
+!$acc &    copyin (XTHT, XPABST, XRT, XSVT, XRTHS_CLD, XRRS_CLD, XTHVREF) &
+!$acc &    copy   (XRTHS, XRRS, XRUS, XRVS, XRWS)                         &
+!$acc &    copy   (XRWS_PRES)                                             & !XRWS_PRES copy and not copyout (hidden in UPDATE_HALO)
+!$acc &    present(XDXX, XDYY, XDZZ, XDZX, XDZY, XRHODJ)
+!
+!$acc update device(XUT, XVT, XWT, XRHODJ)
 !
 !
-CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,&
-                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ)
- CALL ADVECTION_METSV ( TZBAKFILE, GCLOSE_OUT,CUVW_ADV_SCHEME,         &
+!$acc data copyin (XTKET, XRSVS_CLD) &
+!$acc &    copy   (XRTKES, XRSVS)    &
+!$acc &    copyout(XRTKEMS)
+CALL ADVECTION_METSV ( TZBAKFILE, GCLOSE_OUT,CUVW_ADV_SCHEME,          &
                  CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT,      &
                  LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT,                    &
                  CLBCX, CLBCY, NRR, NSV, TDTCUR, XTSTEP,               &
@@ -1542,8 +1521,7 @@ CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,&
                  XTHVREF, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,        &
                  XRTHS, XRRS, XRTKES, XRSVS,                           &
                  XRTHS_CLD, XRRS_CLD, XRSVS_CLD, XRTKEMS               )
-CALL MPPDB_CHECK3DM("after  ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ ",PRECISION,&
-                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ)
+!$acc end data
 !
 CALL SECOND_MNH2(ZTIME2)
 !
@@ -1554,17 +1532,23 @@ ZTIME1 = ZTIME2
 XTIME_BU_PROCESS = 0.
 XTIME_LES_BU_PROCESS = 0.
 !
-ZRWS = XRWS
+!$acc kernels
+ZRWS(:,:,:) = XRWS(:,:,:)
+!$acc end kernels
 !
 CALL GRAVITY_IMPL ( CLBCX, CLBCY, NRR, NRRL, NRRI,XTSTEP,            &
                  XTHT, XRT, XTHVREF, XRHODJ, XRWS, XRTHS, XRRS,      &
-                 XRTHS_CLD, XRRS_CLD                                 )   
+                 XRTHS_CLD, XRRS_CLD                                 )
 !
 ! At the initial instant the difference with the ref state creates a 
 ! vertical velocity production that must not be advected as it is 
 ! compensated by the pressure gradient
 !
-IF (KTCOUNT == 1 .AND. CCONF=='START') XRWS_PRES = - (XRWS - ZRWS) 
+IF (KTCOUNT == 1 .AND. CCONF=='START') THEN
+!$acc kernels
+  XRWS_PRES(:,:,:) = ZRWS(:,:,:) - XRWS(:,:,:)
+!$acc end kernels
+END IF
 !
 CALL SECOND_MNH2(ZTIME2)
 !
@@ -1574,21 +1558,21 @@ ZTIME1 = ZTIME2
 XTIME_BU_PROCESS = 0.
 XTIME_LES_BU_PROCESS = 0.
 !
-!MPPDB_CHECK_LB=.TRUE.
-CALL MPPDB_CHECK3DM("before ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,&
-                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS)
 IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
   IF (CUVW_ADV_SCHEME=='CEN4TH') THEN
     NULLIFY(TZFIELDC_ll)
     NULLIFY(TZHALO2C_ll)
-      CALL ADD3DFIELD_ll(TZFIELDC_ll, XUT)
-      CALL ADD3DFIELD_ll(TZFIELDC_ll, XVT)
-      CALL ADD3DFIELD_ll(TZFIELDC_ll, XWT)
+      CALL ADD3DFIELD_ll( TZFIELDC_ll, XUT, 'MODEL_n::XUT' )
+      CALL ADD3DFIELD_ll( TZFIELDC_ll, XVT, 'MODEL_n::XVT' )
+      CALL ADD3DFIELD_ll( TZFIELDC_ll, XWT, 'MODEL_n::XWT' )
       CALL INIT_HALO2_ll(TZHALO2C_ll,3,IIU,IJU,IKU)
       CALL UPDATE_HALO_ll(TZFIELDC_ll,IINFO_ll)
       CALL UPDATE_HALO2_ll(TZFIELDC_ll, TZHALO2C_ll, IINFO_ll)
+!$acc update device(XUT, XVT, XWT)
   END IF
- CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME,                &
+!$acc data copyin(XUM, XVM, XWM)    &
+!$acc &    copy  (XDUM, XDVM, XDWM)
+ CALL ADVECTION_UVW_CEN(CUVW_ADV_SCHEME,                           &
                            CLBCX, CLBCY,                           &
                            XTSTEP, KTCOUNT,                        &
                            XUM, XVM, XWM, XDUM, XDVM, XDWM,        &
@@ -1596,6 +1580,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
                            XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,   &
                            XRUS,XRVS, XRWS,                        &
                            TZHALO2C_ll                             )
+!$acc end data
   IF (CUVW_ADV_SCHEME=='CEN4TH') THEN
     CALL CLEANLIST_ll(TZFIELDC_ll)
     NULLIFY(TZFIELDC_ll)
@@ -1604,6 +1589,7 @@ IF ((CUVW_ADV_SCHEME(1:3)=='CEN') .AND. (CTEMP_SCHEME == 'LEFR')) THEN
   END IF
 ELSE
 
+!$acc data copyin(XRUS_PRES, XRVS_PRES)
   CALL ADVECTION_UVW(CUVW_ADV_SCHEME, CTEMP_SCHEME,                  &
                  NWENO_ORDER, LSPLIT_WENO,                           &
                  CLBCX, CLBCY, XTSTEP,                               &
@@ -1611,11 +1597,10 @@ ELSE
                  XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY,               &
                  XRUS, XRVS, XRWS,                                   &
                  XRUS_PRES, XRVS_PRES, XRWS_PRES                     )
+!$acc end data
 END IF
 !
-CALL MPPDB_CHECK3DM("after  ADVEC_UVW:XU/V/W/TH/TKE/T,XRHODJ,XRU/V/Ws",PRECISION,&
-                   &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ,XRUS,XRVS,XRWS)
-!MPPDB_CHECK_LB=.FALSE.
+!$acc end data
 !
 CALL SECOND_MNH2(ZTIME2)
 !
@@ -1637,7 +1622,6 @@ END IF
 !
 ZTIME1 = ZTIME2
 !
-CALL MPPDB_CHECK3DM("before RAD_BOUND :XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
 ZRUS=XRUS
 ZRVS=XRVS
 ZRWS=XRWS
@@ -1670,7 +1654,6 @@ ZPABST = XPABST
 !
 IF(.NOT. L1D) THEN
 !
-CALL MPPDB_CHECK3DM("before pressurez:XRU/V/WS",PRECISION,XRUS,XRVS,XRWS)
   XRUS_PRES = XRUS
   XRVS_PRES = XRVS
   XRWS_PRES = XRWS
@@ -1774,46 +1757,59 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
   IF (CCLOUD == 'C2R2' .OR. CCLOUD == 'KHKO' .OR. CCLOUD == 'C3R5' &
                                              .OR. CCLOUD == "LIMA" ) THEN
     IF ( LFORCING ) THEN
-      ZWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWTFRC(:,:,:)
+      XWT_ACT_NUC(:,:,:) = XWT(:,:,:) + XWTFRC(:,:,:)
     ELSE
-      ZWT_ACT_NUC(:,:,:) = XWT(:,:,:)
+      XWT_ACT_NUC(:,:,:) = XWT(:,:,:)
     END IF
     IF (CTURB /= 'NONE' ) THEN
      IF ( ((CCLOUD=='C2R2'.OR.CCLOUD=='KHKO').AND.LACTTKE) .OR. (CCLOUD=='LIMA'.AND.MACTTKE) ) THEN 
-       ZWT_ACT_NUC(:,:,:) = ZWT_ACT_NUC(:,:,:) +  (2./3. * XTKET(:,:,:))**0.5
+       XWT_ACT_NUC(:,:,:) = XWT_ACT_NUC(:,:,:) +  (2./3. * XTKET(:,:,:))**0.5
      ELSE
-       ZWT_ACT_NUC(:,:,:) = ZWT_ACT_NUC(:,:,:) 
+       XWT_ACT_NUC(:,:,:) = XWT_ACT_NUC(:,:,:) 
      ENDIF
     ENDIF
   ELSE
-    ZWT_ACT_NUC(:,:,:) = 0.
+    XWT_ACT_NUC(:,:,:) = 0.
   END IF
 !
-  XRTHS_CLD  = XRTHS
-  XRRS_CLD   = XRRS
-  XRSVS_CLD  = XRSVS
+  XRTHS_CLD(:, :, : )    = XRTHS(:, :, : )
+  XRRS_CLD (:, :, :, : ) = XRRS(:, :, :, : )
+  XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : )
+!$acc data present(XRHODJ)                                                                       &
+!$acc &    copyin (XZZ, XRHODREF, XEXNREF, ZPABST, XTHT, XSIGS, VSIGQSAT, XMFCONV, XTHM, XPABSM, &
+!$acc &            XRCM, XWT_ACT_NUC, XDTHRAD, XCF_MF, XRC_MF, XRI_MF,                           &
+!$acc &            XSOLORG, XMI)                                                                 &
+!$acc &    copy   (XSUPSAT, XNACT, XNPRO, XSSPRO,                                                &
+!$acc &            XRTHS, XRT, XRRS, XSVT, XRSVS, XCLDFR, XCIT, XINPRR3D, XEVAP3D,               &
+!$acc &            XINPRC, XINPRR, XINPRS, XINPRG, XINPRH, XINDEP)                               &
+!$acc &    copyout(XSRCT, XRAINFR)
   IF (CSURF=='EXTE') THEN
     ALLOCATE (ZSEA(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
     ALLOCATE (ZTOWN(SIZE(XRHODJ,1),SIZE(XRHODJ,2)))
     ZSEA(:,:) = 0.
     ZTOWN(:,:)= 0.
     CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:))
+!$acc data copyin(ZSEA, ZTOWN )
     CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
                           NSPLITG, IMI, KTCOUNT,                               &
                           CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM,               &
                           GCLOSE_OUT, LSUBG_COND,LSIGMAS,CSUBG_AUCV,XTSTEP,    &
                           XZZ, XRHODJ, XRHODREF, XEXNREF,                      &
                           ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM,   &
-                          XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS,            &
+                          XPABSM, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS,            &
                           XSVT, XRSVS,                                         &
                           XSRCT, XCLDFR,XCIT,                                  &
                           LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI,   &
                           LCONVHG, XCF_MF,XRC_MF, XRI_MF,                      &
-                          XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D,             &
-                          XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D,   &
-                          XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
+!                           XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D,             &
+!                           XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D,   &
+                          XINPRC,XINPRR, XINPRR3D, XEVAP3D,             &
+                          XINPRS, XINPRG,XINPRH,   &
+!                           XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
+                          XSOLORG, XMI, &
                           XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR,       &
                           ZSEA, ZTOWN                                          )
+!$acc end data
     DEALLOCATE(ZTOWN)
   ELSE
     CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
@@ -1822,19 +1818,23 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
                           GCLOSE_OUT, LSUBG_COND,LSIGMAS,CSUBG_AUCV,           &
                           XTSTEP,XZZ, XRHODJ, XRHODREF, XEXNREF,               &
                           ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM,   &
-                          XPABSM, ZWT_ACT_NUC,XDTHRAD, XRTHS, XRRS,            &
+                          XPABSM, XWT_ACT_NUC,XDTHRAD, XRTHS, XRRS,            &
                           XSVT, XRSVS,                                         &
                           XSRCT, XCLDFR,XCIT,                                  &
                           LSEDIC,KACTIT, KSEDC, KSEDI, KRAIN, KWARM, KHHONI,   &
                           LCONVHG, XCF_MF,XRC_MF, XRI_MF,                      &
-                          XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D,             &
-                          XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D,   &
-                          XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
+!                           XINPRC,ZINPRC3D,XINPRR, XINPRR3D, XEVAP3D,             &
+!                           XINPRS,ZINPRS3D, XINPRG,ZINPRG3D, XINPRH,ZINPRH3D,   &
+                          XINPRC,XINPRR, XINPRR3D, XEVAP3D,             &
+                          XINPRS, XINPRG,XINPRH,   &
+!                           XSOLORG, XMI,ZSPEEDC, ZSPEEDR, ZSPEEDS, ZSPEEDG, ZSPEEDH, &
+                          XSOLORG, XMI, &
                           XINDEP, XSUPSAT, XNACT, XNPRO,XSSPRO, XRAINFR        )
   END IF
-  XRTHS_CLD  = XRTHS - XRTHS_CLD
-  XRRS_CLD   = XRRS  - XRRS_CLD
-  XRSVS_CLD  = XRSVS - XRSVS_CLD
+!$acc end data
+  XRTHS_CLD(:, :, : )    = XRTHS(:, :, : )    - XRTHS_CLD(:, :, : )
+  XRRS_CLD (:, :, :, : ) = XRRS (:, :, :, : ) - XRRS_CLD (:, :, :, : )
+  XRSVS_CLD(:, :, :, : ) = XRSVS(:, :, :, : ) - XRSVS_CLD(:, :, :, : )
 !
   IF (CCLOUD /= 'REVE' ) THEN
     XACPRR = XACPRR + XINPRR * XTSTEP
@@ -1882,7 +1882,7 @@ XTIME_BU_PROCESS = 0.
 XTIME_LES_BU_PROCESS = 0.
 !
 IF (CELEC /= 'NONE' .AND. (CCLOUD(1:3) == 'ICE')) THEN
-  ZWT_ACT_NUC(:,:,:) = 0.
+  XWT_ACT_NUC(:,:,:) = 0.
 !
   XRTHS_CLD = XRTHS
   XRRS_CLD  = XRRS
@@ -1967,7 +1967,7 @@ END IF
 !
 ZTIME1 = ZTIME2
 !
-CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TZFIELDS_ll,     &
+CALL EXCHANGE (XTSTEP,NRR,NSV,XRHODJ,TFIELDS_ll,     &
                XRUS, XRVS,XRWS,XRTHS,XRRS,XRTKES,XRSVS)
 !
 CALL SECOND_MNH2(ZTIME2)
@@ -2081,7 +2081,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
 !
 !-------------------------------------------------------------------------------
@@ -2117,17 +2117,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
   !
@@ -2185,6 +2185,7 @@ IF (OEXIT) THEN
     CALL TIME_STAT_ll(TIMEZ%T_MAP_SX_YP2_ZP1_B,ZTOT,          '   REMAP FFTXZ-1=>B     ' ,'-','F')
   ! JUAN P1/P2
   CALL TIME_STAT_ll(XT_CLOUD,ZTOT,      ' RESOLVED_CLOUD','=')
+  CALL TIME_STAT_ll(XT_ELEC,ZTOT,      ' RESOLVED_ELEC','=')
   CALL TIME_STAT_ll(XT_HALO,ZTOT,       ' EXCHANGE_HALO','=')
   CALL TIME_STAT_ll(XT_STEP_SWA,ZTOT,   ' ENDSTEP','=')
   CALL TIME_STAT_ll(XT_STEP_BUD,ZTOT,   ' BUDGETS','=')
@@ -2197,8 +2198,8 @@ IF (OEXIT) THEN
            XT_ADV  + XT_FORCING + XT_NUDGING + XT_SOURCES  +  XT_DIFF   + &
            XT_ADVUVW  + XT_GRAV +                                         &
            XT_RELAX+ XT_PARAM   + XT_COUPL   + XT_RAD_BOUND+XT_PRESS    + &
-           XT_CLOUD+  XT_HALO   + XT_SPECTRA + XT_STEP_SWA +XT_STEP_MISC+ &
-           XT_STEP_BUD
+           XT_CLOUD+ XT_ELEC    + XT_HALO    + XT_SPECTRA + XT_STEP_SWA + &
+           XT_STEP_MISC+ XT_STEP_BUD
   CALL TIME_STAT_ll(ZALL,ZTOT,          ' SUM(CALL)','=')
   CALL  TIMING_SEPARATOR('=')
   !
@@ -2220,7 +2221,7 @@ IF (OEXIT) THEN
   !
   ! Timing/ Steps
   !
-  ZTIME_STEP     =  XT_START / FLOAT(KTCOUNT)
+  ZTIME_STEP     =  XT_START / REAL(KTCOUNT)
   WRITE(YTCOUNT,FMT="(I0)") KTCOUNT
   CALL TIME_STAT_ll(ZTIME_STEP,ZTOT,     ' SECOND/STEP='//YTCOUNT,'=')
   !
@@ -2228,7 +2229,7 @@ IF (OEXIT) THEN
   !
   IPOINTS = NIMAX_ll*NJMAX_ll*NKMAX
   WRITE(YPOINTS,FMT="(I0)") IPOINTS
-  ZTIME_STEP_PTS =  ZTIME_STEP / FLOAT(IPOINTS) * 1e6
+  ZTIME_STEP_PTS =  ZTIME_STEP / REAL(IPOINTS) * 1e6
   CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT)
   CALL TIME_STAT_ll(ZTIME_STEP_PTS,ZTOT_PT,  ' MICROSEC/STP/PT='//YPOINTS,'-')
   !
@@ -2236,8 +2237,10 @@ 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
-!
+
+!$acc end data
+
 END SUBROUTINE MODEL_n
diff --git a/pressurez.f90 b/pressurez.f90
index 61e68b29c..c9b2b9db9 100644
--- a/pressurez.f90
+++ b/pressurez.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -229,6 +229,8 @@ 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
+!  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -242,13 +244,14 @@ 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
+USE MODE_SUM2_ll,     ONLY: GMAXLOC_ll
 !
 USE MODI_BUDGET
 USE MODI_CONJGRAD
@@ -264,7 +267,6 @@ USE MODI_MASS_LEAK
 USE MODI_P_ABS
 USE MODI_RICHARDSON
 USE MODI_SHUMAN
-USE MODI_SUM_ll , ONLY : GMAXLOC_ll
 !
 IMPLICIT NONE
 !
@@ -439,9 +441,9 @@ CALL MPPDB_CHECK3D(PRUS,"pressurez 4-before update_halo_ll::PRUS",PRECISION)
 CALL MPPDB_CHECK3D(PRVS,"pressurez 4-before update_halo_ll::PRVS",PRECISION)
 CALL MPPDB_CHECK3D(PRWS,"pressurez 4-before update_halo_ll::PRWS",PRECISION)
 NULLIFY(TZFIELDS_ll)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, PRUS)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, PRVS)
-CALL ADD3DFIELD_ll(TZFIELDS_ll, PRWS)
+CALL ADD3DFIELD_ll( TZFIELDS_ll, PRUS, 'PRESSUREZ::PRUS' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, PRVS, 'PRESSUREZ::PRVS' )
+CALL ADD3DFIELD_ll( TZFIELDS_ll, PRWS, 'PRESSUREZ::PRWS' )
 CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZFIELDS_ll)
 CALL MPPDB_CHECK3D(PRUS,"pressurez 4-after update_halo_ll::PRUS",PRECISION)
@@ -598,10 +600,10 @@ END IF
 CALL MPPDB_CHECK3DM("before MXM PRESSUREZ :PRU/V/WS",PRECISION,PRUS,PRVS,PRWS)
 IF(CEQNSYS=='MAE' .OR. CEQNSYS=='DUR') THEN
   PRUS = PRUS - MXM(PRHODJ * XCPD * ZTHETAV) * ZDV_SOURCE
-  PRWS = PRWS - MZM(1,IKU,1,PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ)
+  PRWS = PRWS - MZM(PRHODJ * XCPD * ZTHETAV) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ)
 ELSEIF(CEQNSYS=='LHE') THEN
   PRUS = PRUS - MXM(PRHODJ) * ZDV_SOURCE
-  PRWS = PRWS - MZM(1,IKU,1,PRHODJ) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ)
+  PRWS = PRWS - MZM(PRHODJ) * GZ_M_W(1,IKU,1,ZPHIT,PDZZ)
 END IF
 !
 IF(.NOT. L2D) THEN
@@ -653,9 +655,9 @@ END IF
     PRVS(:,:,IKE+1)=PRVS(:,:,IKE)
 !
 NULLIFY(TZFIELDS2_ll)
-CALL ADD3DFIELD_ll(TZFIELDS2_ll, PRUS)
-CALL ADD3DFIELD_ll(TZFIELDS2_ll, PRVS)
-CALL ADD3DFIELD_ll(TZFIELDS2_ll, PRWS)
+CALL ADD3DFIELD_ll( TZFIELDS2_ll, PRUS, 'PRESSUREZ::PRUS' )
+CALL ADD3DFIELD_ll( TZFIELDS2_ll, PRVS, 'PRESSUREZ::PRVS' )
+CALL ADD3DFIELD_ll( TZFIELDS2_ll, PRWS, 'PRESSUREZ::PRWS' )
 CALL UPDATE_HALO_ll(TZFIELDS2_ll,IINFO_ll)
 CALL CLEANLIST_ll(TZFIELDS2_ll)
 !
@@ -682,10 +684,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
@@ -718,7 +718,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
@@ -756,7 +756,7 @@ IF ((ZMAX_ll > 1.E-12) .AND. KTCOUNT >0 ) THEN
 !
   END IF
 !
-  CALL ADD3DFIELD_ll(TZFIELDS_ll, PPABST)
+  CALL ADD3DFIELD_ll( TZFIELDS_ll, PPABST, 'PRESSUREZ::PPABST' )
   CALL UPDATE_HALO_ll(TZFIELDS_ll,IINFO_ll)
   CALL CLEANLIST_ll(TZFIELDS_ll)
 !
diff --git a/read_exsegn.f90 b/read_exsegn.f90
index c122e5d24..85e867132 100644
--- a/read_exsegn.f90
+++ b/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
@@ -289,6 +289,10 @@ END MODULE MODI_READ_EXSEG_n
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      Modification   07/2017   (V. Vionnet) add blowing snow scheme
 !!      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
@@ -297,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
 !
@@ -350,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
@@ -1029,7 +1032,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
@@ -1037,7 +1040,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
diff --git a/spectre.f90 b/spectre.f90
index ef3367cdc..545c60629 100644
--- a/spectre.f90
+++ b/spectre.f90
@@ -1,7 +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.
+!-----------------------------------------------------------------
 !     ######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,11 @@ 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_init_ll,          only: END_PARA_ll
 USE MODE_MODELN_HANDLER
-USE MODE_FM
 !USE MODD_TYPE_DATE
 USE MODI_VERSION
 !
@@ -84,7 +86,7 @@ CALL GOTO_MODEL(1)
 CALL VERSION
 CPROGRAM='SPEC  '
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 ! initialization 
 YINIFILE(:)   = '                         '
@@ -120,8 +122,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 +164,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 +190,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/tridz.f90 b/tridz.f90
index 8b101dcf1..203c413f8 100644
--- a/tridz.f90
+++ b/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.
 !-----------------------------------------------------------------
 !     ################
@@ -10,7 +10,8 @@
 INTERFACE
 !
       SUBROUTINE TRIDZ(HLBCX,HLBCY,                                     &
-                      PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,         &
+                      PMAP,PDXHAT,PDYHAT,HPRESOPT,                      &
+                      PDXHATM,PDYHATM,PRHOM,                            &
                       PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,            &
                       PRHODJ,PTHVREF,PZZ,PBFY,PBFB,                     &
                       PBF_SXP2_YP1_Z,                                   &
@@ -33,6 +34,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ        ! height z
 !
 REAL, DIMENSION(:), INTENT(IN) :: PDXHAT          ! Stretching in x direction
 REAL, DIMENSION(:), INTENT(IN) :: PDYHAT          ! Stretching in y direction
+CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT        ! choice of the pressure solver
 !
 REAL, INTENT(OUT) :: PDXHATM                     ! mean grid increment in the x
                                                  ! direction
@@ -76,7 +78,8 @@ END MODULE MODI_TRIDZ
 !
 !     ###################################################################
       SUBROUTINE TRIDZ(HLBCX,HLBCY,                                     &
-                      PMAP,PDXHAT,PDYHAT,PDXHATM,PDYHATM,PRHOM,         &
+                      PMAP,PDXHAT,PDYHAT,HPRESOPT,                      &
+                      PDXHATM,PDYHATM,PRHOM,                            &
                       PAF,PCF,PTRIGSX,PTRIGSY,KIFAXX,KIFAXY,            &
                       PRHODJ,PTHVREF,PZZ,PBFY,PBFB,                     &
                       PBF_SXP2_YP1_Z,                                   &
@@ -190,7 +193,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
@@ -223,6 +225,7 @@ REAL, DIMENSION(:,:,:), INTENT(IN) :: PZZ        ! height z
 !
 REAL, DIMENSION(:), INTENT(IN) :: PDXHAT          ! Stretching in x direction
 REAL, DIMENSION(:), INTENT(IN) :: PDYHAT          ! Stretching in y direction
+CHARACTER (LEN=5), INTENT(IN) :: HPRESOPT         ! choice of the pressure solver
 !
 REAL, INTENT(OUT) :: PDXHATM                     ! mean grid increment in the x
                                                  ! direction
@@ -538,8 +541,10 @@ PCF_ZS(IIB:IIE,IJB:IJE,IKE+1) = 0.0
 
 IKBE = IKU
 
-call mg_main_mnh_init(IIMAX_ll,IKBE,PDXHATM*IIMAX_ll,ZDZM(IKB)*IKBE,&
-                      A_K,B_K,C_K,D_K)
+IF ( HPRESOPT == 'ZSOLV' ) THEN
+   call mg_main_mnh_init(IIMAX_ll,IKBE,PDXHATM*IIMAX_ll,ZDZM(IKB)*IKBE,&
+        A_K,B_K,C_K,D_K)
+END IF
 
 !------------------------------------------------------------------------------
 !*       7.    COMPUTE THE DIAGONAL ELEMENTS B OF THE MATRIX
-- 
GitLab