From bbad15cc209f1ffa3a80ab4fd84962c61768fc94 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 6 Mar 2019 09:44:12 +0100
Subject: [PATCH] Philippe 05/03/2019: IO: rename IO subroutines and modules +
 restructure IO source files

---
 LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90        |   17 +-
 LIBTOOLS/tools/lfi2cdf/src/mode_util.f90      |  184 +--
 src/LIB/SURCOUCHE/src/io_write_field.f90      |  500 ------
 src/LIB/SURCOUCHE/src/modd_io.f90             |    8 +-
 src/LIB/SURCOUCHE/src/mode_allocbuff.f90      |   22 +-
 src/LIB/SURCOUCHE/src/mode_field.f90          |    2 +-
 src/LIB/SURCOUCHE/src/mode_fm.f90             |   34 -
 src/LIB/SURCOUCHE/src/mode_ga.f90             |   18 +-
 src/LIB/SURCOUCHE/src/mode_gather.f90         |   68 +-
 src/LIB/SURCOUCHE/src/mode_init_ll.f90        |    8 +-
 src/LIB/SURCOUCHE/src/mode_io.f90             |   53 +-
 src/LIB/SURCOUCHE/src/mode_io_field_read.f90  |  698 ++++-----
 src/LIB/SURCOUCHE/src/mode_io_field_write.f90 | 1344 +++++++++++------
 src/LIB/SURCOUCHE/src/mode_io_file.f90        |  125 +-
 src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90    |   93 +-
 src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90    |  124 +-
 .../SURCOUCHE/src/mode_io_manage_struct.f90   |  129 +-
 src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90    |  188 +--
 src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90    |  447 +++---
 src/LIB/SURCOUCHE/src/mode_io_tools.f90       |  264 ++--
 src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90   |   16 +-
 src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90   |  246 +--
 src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90   |  190 +--
 src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90   |  599 ++++----
 src/LIB/SURCOUCHE/src/mode_lb_ll.f90          |   13 +-
 src/LIB/SURCOUCHE/src/mode_mppdb.f90          |   11 +-
 src/LIB/SURCOUCHE/src/mode_msg.f90            |   16 +-
 src/LIB/SURCOUCHE/src/mode_scatter.f90        |  106 +-
 src/LIB/SURCOUCHE/src/modi_fm.f90             |   37 -
 src/LIB/SURCOUCHE/src/modi_io.f90             |   49 -
 src/LIB/SURCOUCHE/src/modn_confio.f90         |    8 +-
 src/LIB/SURCOUCHE/src/system_mnh.f90          |    1 -
 src/MNH/adjust_langlois.f90                   |    1 -
 src/MNH/adv_forcingn.f90                      |   16 +-
 src/MNH/advec_4th_order_aux.f90               |   11 +-
 src/MNH/advection_metsv.f90                   |   29 +-
 src/MNH/aerozon.f90                           |    6 +-
 src/MNH/aircraft_balloon_evol.f90             |    5 +-
 src/MNH/anel_balancen.f90                     |    1 -
 src/MNH/budget.f90                            |    6 +-
 src/MNH/c2r2_adjust.f90                       |   22 +-
 src/MNH/call_rttov11.f90                      |   17 +-
 src/MNH/call_rttov8.f90                       |   27 +-
 src/MNH/ch_aer_mod_init.f90                   |   44 +-
 src/MNH/ch_emission_flux0d.f90                |    9 +-
 src/MNH/ch_field_valuen.f90                   |   14 +-
 src/MNH/ch_init_constn.f90                    |   10 +-
 src/MNH/ch_init_meteo.f90                     |    9 +-
 src/MNH/ch_model0d.f90                        |   12 +-
 src/MNH/ch_open_input.f90                     |   16 +-
 src/MNH/ch_read_chem.f90                      |   11 +-
 src/MNH/ch_surface0d.f90                      |   10 +-
 src/MNH/check_zhat.f90                        |   20 +-
 src/MNH/check_zs.f90                          |   24 +-
 src/MNH/close_file_mnh.f90                    |    8 +-
 src/MNH/compare_dad.f90                       |   92 +-
 src/MNH/compare_with_pgd_domain.f90           |    2 -
 src/MNH/compute_r00.f90                       |   61 +-
 src/MNH/compute_spectre.f90                   |    2 -
 src/MNH/define_maskn.f90                      |    6 +-
 src/MNH/detect_field_mnh.f90                  |   19 +-
 src/MNH/diag.f90                              |   49 +-
 src/MNH/elec_fieldn.f90                       |    7 +-
 src/MNH/elec_trid.f90                         |    5 +-
 src/MNH/elec_tridz.f90                        |    5 +-
 src/MNH/endstep_budget.f90                    |    8 +-
 src/MNH/fast_terms.f90                        |    6 +-
 src/MNH/flash_geom_elec.f90                   |   63 +-
 src/MNH/forcing.f90                           |   21 +-
 src/MNH/free_atm_profile.f90                  |   22 +-
 src/MNH/gps_zenith.f90                        |   18 +-
 src/MNH/horibl.f90                            |   11 +-
 src/MNH/ice_adjust.f90                        |   13 +-
 src/MNH/ice_adjust_elec.f90                   |    9 +-
 src/MNH/ini_aircraft_balloon.f90              |   27 +-
 src/MNH/ini_budget.f90                        |   12 +-
 src/MNH/ini_cpl.f90                           |   31 +-
 src/MNH/ini_deep_convection.f90               |   83 +-
 src/MNH/ini_drag.f90                          |    6 +-
 src/MNH/ini_elec.f90                          |   18 +-
 src/MNH/ini_elecn.f90                         |    6 +-
 src/MNH/ini_field_elec.f90                    |    5 +-
 src/MNH/ini_lb.f90                            |  124 +-
 src/MNH/ini_lesn.f90                          |    6 +-
 src/MNH/ini_ls.f90                            |   23 +-
 src/MNH/ini_micron.f90                        |    6 +-
 src/MNH/ini_modeln.f90                        |   46 +-
 src/MNH/ini_param_elec.f90                    |   20 +-
 src/MNH/ini_posprofilern.f90                  |    5 +-
 src/MNH/ini_prog_var.f90                      |   43 +-
 src/MNH/ini_radiations.f90                    |   36 +-
 src/MNH/ini_radiations_ecmwf.f90              |    1 -
 src/MNH/ini_rain_ice.f90                      |    1 -
 src/MNH/ini_rain_ice_elec.f90                 |   10 +-
 src/MNH/ini_segn.f90                          |   58 +-
 src/MNH/ini_seriesn.f90                       |    5 +-
 src/MNH/ini_size_spawn.f90                    |   69 +-
 src/MNH/ini_sizen.f90                         |   55 +-
 src/MNH/ini_spectren.f90                      |   21 +-
 src/MNH/ini_surf_rad.f90                      |   20 +-
 src/MNH/ini_surfstationn.f90                  |    7 +-
 src/MNH/init_for_convlfi.f90                  |   79 +-
 src/MNH/init_ground_paramn.f90                |    5 +-
 src/MNH/init_mnh.f90                          |   11 +-
 src/MNH/khko_notadjust.f90                    |   15 +-
 src/MNH/latlon_to_xy.f90                      |   30 +-
 src/MNH/les_specn.f90                         |    6 +-
 src/MNH/lima.f90                              |   10 +-
 src/MNH/lima_adjust.f90                       |   19 +-
 src/MNH/lima_ccn_activation.f90               |   29 +-
 src/MNH/lima_nucleation_procs.f90             |    9 +-
 src/MNH/lima_warm.f90                         |   11 +-
 src/MNH/lima_warm_nucl.f90                    |   25 +-
 src/MNH/lochead.f90                           |   10 +-
 src/MNH/ls_coupling.f90                       |   21 +-
 src/MNH/menu_diachro.f90                      |   18 +-
 src/MNH/mesonh.f90                            |   12 +-
 src/MNH/mnh2lpdm.f90                          |   48 +-
 src/MNH/mnh2lpdm_ech.f90                      |   52 +-
 src/MNH/mnh2lpdm_ini.f90                      |   35 +-
 src/MNH/mnh_surf_grid_io_init.f90             |   26 +-
 src/MNH/mnhclose_aux_io_surf.f90              |   11 +-
 src/MNH/mnhclose_namelist.f90                 |    4 +-
 src/MNH/mnhclose_write_cover_tex.f90          |   14 +-
 src/MNH/mnhend_io_surfn.f90                   |   10 +-
 src/MNH/mnhinit_io_surfn.f90                  |    2 -
 src/MNH/mnhopen_aux_io_surf.f90               |   23 +-
 src/MNH/mnhopen_namelist.f90                  |   12 +-
 src/MNH/mnhopen_write_cover_tex.f90           |   14 +-
 src/MNH/mnhread_zs_dummyn.f90                 |   36 +-
 src/MNH/mnhwrite_zs_dummyn.f90                |   32 +-
 src/MNH/modd_ch_model0d.f90                   |    2 +-
 src/MNH/modd_io_nam.f90                       |    6 +-
 src/MNH/modd_io_surf_mnh.f90                  |    6 +-
 src/MNH/modd_lunit.f90                        |    2 +-
 src/MNH/modd_lunitn.f90                       |    4 +-
 src/MNH/modd_outn.f90                         |    6 +-
 src/MNH/mode_les_diachro.f90                  |   20 +-
 src/MNH/mode_time.f90                         |    6 +-
 src/MNH/modeln.f90                            |   54 +-
 src/MNH/modules_diachro.f90                   |   10 +-
 src/MNH/open_file_mnh.f90                     |   12 +-
 src/MNH/open_nestpgd_files.f90                |   51 +-
 src/MNH/open_prc_files.f90                    |   30 +-
 src/MNH/paspol.f90                            |   12 +-
 src/MNH/pgd_grid_io_init_mnh.f90              |   34 +-
 src/MNH/phys_paramn.f90                       |   12 +-
 src/MNH/ppm.f90                               |    6 -
 src/MNH/prandtl.f90                           |   20 +-
 src/MNH/prep_ideal_case.f90                   |   80 +-
 src/MNH/prep_nest_pgd.f90                     |   72 +-
 src/MNH/prep_pgd.f90                          |   70 +-
 src/MNH/prep_real_case.f90                    |   42 +-
 src/MNH/prep_surf_mnh.f90                     |    6 +-
 src/MNH/prep_surfex.f90                       |   48 +-
 src/MNH/pressure_in_prep.f90                  |    3 +-
 src/MNH/prognos.f90                           |    5 +-
 src/MNH/radar_rain_ice.f90                    |    6 +-
 src/MNH/radar_scattering.f90                  |   45 +-
 src/MNH/radar_simulator.f90                   |   14 +-
 src/MNH/radiations.f90                        |  106 +-
 src/MNH/rain_c2r2_khko.f90                    |   23 +-
 src/MNH/rain_ice.f90                          |    2 +-
 src/MNH/rain_ice_red.f90                      |    5 +-
 src/MNH/read_all_data_grib_case.f90           |   14 +-
 src/MNH/read_all_data_mesonh_case.f90         |   19 +-
 src/MNH/read_chem_data_netcdf_case.f90        |   12 +-
 src/MNH/read_desfmn.f90                       |    8 +-
 src/MNH/read_dummy_gr_fieldn.f90              |   20 +-
 src/MNH/read_exsegn.f90                       |    5 +-
 src/MNH/read_exspa.f90                        |   20 +-
 src/MNH/read_field.f90                        |  208 +--
 src/MNH/read_grid_time_mesonh_case.f90        |   34 +-
 src/MNH/read_hgrid.f90                        |   53 +-
 src/MNH/read_hgridn.f90                       |   58 +-
 src/MNH/read_precip_field.f90                 |   43 +-
 src/MNH/read_surf_mnh.f90                     |  247 ++-
 src/MNH/read_ver_grid.f90                     |    5 +-
 src/MNH/rel_forcingn.f90                      |    1 -
 src/MNH/reset_exseg.f90                       |   14 +-
 src/MNH/resolved_cloud.f90                    |    4 +-
 src/MNH/resolved_elecn.f90                    |   35 +-
 src/MNH/retrieve2_nest_infon.f90              |    2 +-
 src/MNH/series_cloud_elec.f90                 |    5 +-
 src/MNH/seriesn.f90                           |    5 +-
 src/MNH/set_advfrc.f90                        |    9 +-
 src/MNH/set_bogus_vortex.f90                  |    7 +-
 src/MNH/set_conc_lima.f90                     |    5 +-
 src/MNH/set_cstn.f90                          |    5 +-
 src/MNH/set_frc.f90                           |    6 +-
 src/MNH/set_grid.f90                          |   61 +-
 src/MNH/set_mass.f90                          |    8 +-
 src/MNH/set_perturb.f90                       |    5 +-
 src/MNH/set_ref.f90                           |   16 +-
 src/MNH/set_relfrc.f90                        |   10 +-
 src/MNH/set_rsou.f90                          |    8 +-
 src/MNH/set_subdomain.f90                     |   39 +-
 src/MNH/shallow_mf_pack.f90                   |   24 +-
 src/MNH/spawn_field2.f90                      |   86 +-
 src/MNH/spawn_grid2.f90                       |    6 +-
 src/MNH/spawn_model2.f90                      |   50 +-
 src/MNH/spawn_surf.f90                        |   10 +-
 src/MNH/spawn_surf2_rain.f90                  |   10 +-
 src/MNH/spawn_zs.f90                          |    5 +-
 src/MNH/spawning.f90                          |   36 +-
 src/MNH/spectre.f90                           |   31 +-
 src/MNH/spectre_arome.f90                     |   14 +-
 src/MNH/tke_eps_sources.f90                   |   20 +-
 src/MNH/trid.f90                              |    5 +-
 src/MNH/tridz.f90                             |    5 +-
 src/MNH/turb.f90                              |   28 +-
 src/MNH/turb_cloud_index.f90                  |   30 +-
 src/MNH/turb_hor.f90                          |    8 +-
 src/MNH/turb_hor_dyn_corr.f90                 |   20 +-
 src/MNH/turb_hor_splt.f90                     |    8 +-
 src/MNH/turb_hor_sv_flux.f90                  |   18 +-
 src/MNH/turb_hor_thermo_corr.f90              |   18 +-
 src/MNH/turb_hor_thermo_flux.f90              |   24 +-
 src/MNH/turb_hor_uv.f90                       |   14 +-
 src/MNH/turb_hor_uw.f90                       |   14 +-
 src/MNH/turb_hor_vw.f90                       |   14 +-
 src/MNH/turb_ver.f90                          |   20 +-
 src/MNH/turb_ver_dyn_flux.f90                 |   24 +-
 src/MNH/turb_ver_sv_flux.f90                  |   16 +-
 src/MNH/turb_ver_thermo_corr.f90              |   18 +-
 src/MNH/turb_ver_thermo_flux.f90              |   18 +-
 src/MNH/uv_to_zonal_and_merid.f90             |   34 +-
 src/MNH/ver_int_thermo.f90                    |    4 +-
 src/MNH/ver_interp_to_mixed_grid.f90          |    2 -
 src/MNH/ver_thermo.f90                        |   16 +-
 src/MNH/viscosity.f90                         |    8 +-
 src/MNH/write_aircraft_balloon.f90            |    4 +-
 src/MNH/write_balloonn.f90                    |   24 +-
 src/MNH/write_budget.f90                      |   20 +-
 src/MNH/write_desfmn.f90                      |    4 +-
 src/MNH/write_diachro.f90                     |   43 +-
 src/MNH/write_dummy_gr_fieldn.f90             |   22 +-
 src/MNH/write_hgrid.f90                       |   35 +-
 src/MNH/write_hgridn.f90                      |   38 +-
 src/MNH/write_lbn.f90                         |  134 +-
 src/MNH/write_les_budgetn.f90                 |    8 +-
 src/MNH/write_les_rt_budgetn.f90              |    8 +-
 src/MNH/write_les_sv_budgetn.f90              |    8 +-
 src/MNH/write_lesn.f90                        |    8 +-
 src/MNH/write_lfifm1_for_diag.f90             |  545 ++++---
 src/MNH/write_lfifm1_for_diag_supp.f90        |  164 +-
 src/MNH/write_lfifmn_fordiachron.f90          |   82 +-
 src/MNH/write_lfin.f90                        |  540 +++----
 src/MNH/write_profilern.f90                   |    8 +-
 src/MNH/write_seriesn.f90                     |    9 +-
 src/MNH/write_stationn.f90                    |    8 +-
 src/MNH/write_surf_mnh.f90                    |  184 +--
 src/MNH/write_ts1d.f90                        |   23 +-
 src/MNH/xy_to_latlon.f90                      |   30 +-
 src/MNH/zoom_pgd.f90                          |   72 +-
 src/MNH/zsmt_pgd.f90                          |   27 +-
 256 files changed, 5909 insertions(+), 6346 deletions(-)
 delete mode 100644 src/LIB/SURCOUCHE/src/io_write_field.f90
 delete mode 100644 src/LIB/SURCOUCHE/src/mode_fm.f90
 delete mode 100644 src/LIB/SURCOUCHE/src/modi_fm.f90
 delete mode 100644 src/LIB/SURCOUCHE/src/modi_io.f90

diff --git a/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90 b/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
index 3e0a8b2d7..bb8534b6d 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/lfi2cdf.f90
@@ -1,21 +1,22 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 program LFI2CDF
   USE MODD_CONF,          ONLY: CPROGRAM
   USE MODD_CONFZ,         ONLY: NB_PROCIO_R
   USE MODD_DIM_n,         ONLY: NIMAX_ll, NJMAX_ll, NKMAX
-  USE MODD_IO_ll,         ONLY: LVERB_OUTLST, LVERB_STDOUT, NIO_ABORT_LEVEL, NIO_VERB, NGEN_ABORT_LEVEL, NGEN_VERB
+  USE MODD_IO,            ONLY: LVERB_OUTLST, LVERB_STDOUT, NIO_ABORT_LEVEL, NIO_VERB, NGEN_ABORT_LEVEL, NGEN_VERB
   USE MODD_PARAMETERS,    ONLY: JPHEXT, JPVEXT
   USE MODD_TIMEZ,         ONLY: TIMEZ
 
-  USE MODE_IO_ll,         ONLY: INITIO_ll, SET_CONFIO_ll
   USE MODE_FIELD,         ONLY: INI_FIELD_LIST
+  USE MODE_IO,            ONLY: IO_Init, IO_Config_set
   USE mode_options
   USE MODE_SPLITTINGZ_ll, ONLY: INI_PARAZ_ll
   USE mode_util
+
   USE MODI_VERSION
 
   USE MODN_CONFIO, ONLY: LCDF4, LLFIOUT, LLFIREAD
@@ -43,7 +44,7 @@ program LFI2CDF
 
   CPROGRAM = 'LFICDF'
 
-  CALL INITIO_ll()
+  CALL IO_Init()
   CALL VERSION
   CALL INI_CST
 
@@ -73,17 +74,17 @@ program LFI2CDF
      LCDF4    = .TRUE.
      LLFIOUT  = .FALSE.
      LLFIREAD = .TRUE.
-     CALL SET_CONFIO_ll()
+     CALL IO_Config_set()
   ELSE IF (runmode == MODECDF2CDF) THEN
      LCDF4    = .TRUE.
      LLFIOUT  = .FALSE.
      LLFIREAD = .FALSE.
-     CALL SET_CONFIO_ll()
+     CALL IO_Config_set()
   ELSE
      LCDF4    = .TRUE.
      LLFIOUT  = .TRUE.
      LLFIREAD = .FALSE.
-     CALL SET_CONFIO_ll()
+     CALL IO_Config_set()
   END IF
 
   CALL INI_FIELD_LIST(1)
diff --git a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90 b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
index 7fe27b75a..34c2d8332 100644
--- a/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
+++ b/LIBTOOLS/tools/lfi2cdf/src/mode_util.f90
@@ -1,19 +1,19 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
 !-----------------------------------------------------------------
 MODULE mode_util
-  USE MODD_IO_ll,  ONLY: TFILE_ELT
-  USE MODD_NETCDF, ONLY: DIMCDF, IDCDF_KIND
+  USE MODD_IO,         ONLY: TFILE_ELT
+  USE MODD_NETCDF,     ONLY: DIMCDF, IDCDF_KIND
   USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH, NMNHNAMELGTMAX
 
   USE MODE_FIELD
-  USE MODE_FMREAD
-  USE MODE_FMWRIT
+  USE MODE_IO_FIELD_READ
+  USE MODE_IO_FIELD_WRITE
 
   USE mode_options
 
@@ -59,7 +59,7 @@ CONTAINS
     USE MODD_DIM_n,      ONLY: NIMAX_ll, NJMAX_ll, NKMAX
     USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT, NGRIDUNKNOWN
 
-    use mode_io_tools_nc4, only: io_guess_dimids_nc4
+    use mode_io_tools_nc4, only: IO_Dimids_guess_nc4
 
     TYPE(TFILE_ELT),DIMENSION(:),         INTENT(IN)  :: infiles
     TYPE(TFILE_ELT),DIMENSION(:),         INTENT(IN)  :: outfiles
@@ -242,7 +242,7 @@ CONTAINS
             !
             IF (status == NF90_NOERR) THEN
               tpreclist(ji)%found = .true.
-              CALL IO_GET_METADATA_NC4(kcdf_id2,var_id,tpreclist(ji))
+              CALL IO_Metadata_get_nc4(kcdf_id2,var_id,tpreclist(ji))
             END IF
           END IF
 
@@ -334,7 +334,7 @@ END DO
            status = NF90_INQUIRE_VARIABLE(kcdf_id,var_id, name = tpreclist(ji)%name)
            IF (status /= NF90_NOERR) CALL HANDLE_ERR(status,__LINE__)
            tpreclist(ji)%found  = .TRUE.
-           CALL IO_GET_METADATA_NC4(kcdf_id,var_id,tpreclist(ji))
+           CALL IO_Metadata_get_nc4(kcdf_id,var_id,tpreclist(ji))
          END DO
        END IF
 
@@ -375,13 +375,13 @@ END DO
           ! Determine TDIMS
           IF (runmode==MODELFI2CDF) THEN
             ALLOCATE(tpreclist(ji)%TDIMS(tpreclist(ji)%TFIELD%NDIMS))
-            CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+            CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                      tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
           ELSE !If we read netCDF4, we already have all necessary data
             !Special case for EMIS (only the first band is read/written) -> NDIMS reduced to 2
             if(tpreclist(ji)%TFIELD%CMNHNAME=="EMIS") tpreclist(ji)%TFIELD%NDIMS = 2
 
-            CALL IO_FILL_DIMS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
+            CALL IO_Dims_fill_nc4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
           ENDIF
           IF (IRESP/=0) THEN
             CALL PRINT_MSG(NVERB_WARNING,'IO','parse_infiles','can not guess dimensions for '//tpreclist(ji)%TFIELD%CMNHNAME// &
@@ -409,14 +409,14 @@ END DO
               ! Determine TDIMS
               CALL PRINT_MSG(NVERB_DEBUG,'IO','parse_infiles',tpreclist(ji)%TFIELD%CMNHNAME//': try 3D')
               tpreclist(ji)%TFIELD%NDIMS = 3 !Try with 3D
-              CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+              CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                       tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
               !
               IF (IRESP/=0 .OR. tpreclist(ji)%TDIMS(3)%LEN==1) THEN
                 CALL PRINT_MSG(NVERB_DEBUG,'IO','parse_infiles',tpreclist(ji)%TFIELD%CMNHNAME//': try 2D')
                 !Try again with 2D
                 tpreclist(ji)%TFIELD%NDIMS = 2
-                CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+                CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                         tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
               END IF
               !
@@ -425,7 +425,7 @@ END DO
                 !Try again with 1D
                 tpreclist(ji)%TFIELD%NDIMS = 1
                 tpreclist(ji)%TFIELD%CDIR = '--' !Assumption...
-                CALL IO_GUESS_DIMIDS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
+                CALL IO_Dimids_guess_nc4(outfiles(idx_out)%TFILE,tpreclist(ji)%TFIELD,&
                                         tpreclist(ji)%NSIZE,tpreclist(ji)%TDIMS,IRESP)
               END IF
               !
@@ -474,7 +474,7 @@ END DO
               tpreclist(ji)%TFIELD%CDIR  = 'XY' !Assumption
             END IF
 
-            CALL IO_FILL_DIMS_NC4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
+            CALL IO_Dims_fill_nc4(outfiles(idx_out)%TFILE,tpreclist(ji),IRESP)
 
             IF (tpreclist(ji)%NDIMS_FILE>0) THEN
               IF (tpreclist(ji)%CDIMNAMES_FILE(tpreclist(ji)%NDIMS_FILE)=='time') THEN
@@ -623,7 +623,7 @@ END DO
 
   SUBROUTINE def_ncdf(infiles,outfiles,KNFILES_OUT)
     USE MODD_CONF,   ONLY: NMNHVERSION
-    use mode_io_write_nc4, only: io_write_header_nc4
+    use mode_io_write_nc4, only: IO_Header_write_nc4
 
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(IN) :: infiles
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(IN) :: outfiles
@@ -666,7 +666,7 @@ END DO
       kcdf_id = outfiles(ji)%TFILE%NNCID
 
       ! global attributes
-      CALL IO_WRITE_HEADER_NC4(outfiles(ji)%TFILE)
+      CALL IO_Header_write_nc4(outfiles(ji)%TFILE)
       !
       WRITE(YMNHVERSION,"( I0,'.',I0,'.',I0 )" ) NMNHVERSION(1),NMNHVERSION(2),NMNHVERSION(3)
       status = NF90_PUT_ATT(kcdf_id,NF90_GLOBAL,'lfi2cdf_version',TRIM(YMNHVERSION))
@@ -737,15 +737,15 @@ END DO
         CASE (0)
           ALLOCATE(ITAB1D(1))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB1D2(1))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D(1))
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D(1))
         CASE (1)
           ALLOCATE(ITAB1D(IDIMLEN(1)))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB1D2(IDIMLEN(1)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D)
         CASE (2)
           ALLOCATE(ITAB2D(IDIMLEN(1),IDIMLEN(2)))
           IF (tpreclist(ji)%calc) ALLOCATE(ITAB2D2(IDIMLEN(1),IDIMLEN(2)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
                          //TRIM(tpreclist(ISRC)%name)//' => ignored')
@@ -758,13 +758,13 @@ END DO
 
           SELECT CASE(IDIMS)
           CASE (0)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2(1))
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2(1))
             ITAB1D(1) = ITAB1D(1) + ITAB1D2(1)
           CASE (1)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB1D2)
             ITAB1D(:) = ITAB1D(:) + ITAB1D2(:)
           CASE (2)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,ITAB2D2)
             ITAB2D(:,:) = ITAB2D(:,:) + ITAB2D2(:,:)
           END SELECT
         END DO
@@ -772,15 +772,15 @@ END DO
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
         SELECT CASE(IDIMS)
         CASE (0)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D(1))
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D(1))
           DEALLOCATE(ITAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB1D2)
         CASE (1)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB1D)
           DEALLOCATE(ITAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB1D2)
         CASE (2)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB2D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,ITAB2D)
           DEALLOCATE(ITAB2D)
           IF (tpreclist(ji)%calc) DEALLOCATE(ITAB2D2)
         END SELECT
@@ -793,15 +793,15 @@ END DO
         SELECT CASE(IDIMS)
         CASE (0)
           ALLOCATE(GTAB1D(1))
-          CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D(1))
+          CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D(1))
           tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D(1))
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D(1))
           DEALLOCATE(GTAB1D)
         CASE (1)
           ALLOCATE(GTAB1D(IDIMLEN(1)))
-          CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D)
+          CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,GTAB1D)
           tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,GTAB1D)
           DEALLOCATE(GTAB1D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
@@ -826,23 +826,23 @@ END DO
         CASE (0)
           ALLOCATE(XTAB1D(1))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB1D2(1))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D(1))
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D(1))
         CASE (1)
           ALLOCATE(XTAB1D(IDIMLEN(1)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB1D2(IDIMLEN(1)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D)
         CASE (2)
           ALLOCATE(XTAB2D(IDIMLEN(1),IDIMLEN(2)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB2D2(IDIMLEN(1),IDIMLEN(2)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D)
         CASE (3)
           ALLOCATE(XTAB3D(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB3D2(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D)
         CASE (4)
           ALLOCATE(XTAB4D(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3),IDIMLEN(4)))
           IF (tpreclist(ji)%calc) ALLOCATE(XTAB4D2(IDIMLEN(1),IDIMLEN(2),IDIMLEN(3),IDIMLEN(4)))
-          CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D)
+          CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D)
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_WARNING,'IO','fill_files','too many dimensions for ' &
                          //TRIM(tpreclist(ISRC)%name)//' => ignored')
@@ -855,19 +855,19 @@ END DO
 
           SELECT CASE(IDIMS)
           CASE (0)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2(1))
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2(1))
             XTAB1D(1) = XTAB1D(1) + XTAB1D2(1)
           CASE (1)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB1D2)
             XTAB1D(:) = XTAB1D(:) + XTAB1D2(:)
           CASE (2)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB2D2)
             XTAB2D(:,:) = XTAB2D(:,:) + XTAB2D2(:,:)
           CASE (3)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB3D2)
             XTAB3D(:,:,:) = XTAB3D(:,:,:) + XTAB3D2(:,:,:)
           CASE (4)
-            CALL IO_READ_FIELD(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D2)
+            CALL IO_Field_read(INFILES(1)%TFILE,tpreclist(ISRC)%TFIELD,XTAB4D2)
             XTAB4D(:,:,:,:) = XTAB4D(:,:,:,:) + XTAB4D2(:,:,:,:)
           END SELECT
         END DO
@@ -875,23 +875,23 @@ END DO
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
         SELECT CASE(IDIMS)
         CASE (0)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D(1))
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D(1))
           DEALLOCATE(XTAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB1D2)
         CASE (1)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB1D)
           DEALLOCATE(XTAB1D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB1D2)
         CASE (2)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB2D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB2D)
           DEALLOCATE(XTAB2D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB2D2)
         CASE (3)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB3D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB3D)
           DEALLOCATE(XTAB3D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB3D2)
         CASE (4)
-          CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB4D)
+          CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,XTAB4D)
           DEALLOCATE(XTAB4D)
           IF (tpreclist(ji)%calc) DEALLOCATE(XTAB4D2)
         END SELECT
@@ -908,9 +908,9 @@ END DO
 
         ALLOCATE(CHARACTER(LEN=tpreclist(ji)%NSIZE)::YTAB0D)
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_in(ji)
-        CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,YTAB0D)
+        CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD,YTAB0D)
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-        CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,YTAB0D)
+        CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,YTAB0D)
         DEALLOCATE(YTAB0D)
 
 
@@ -923,9 +923,9 @@ END DO
           CYCLE
         END IF
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_in(ji)
-        CALL IO_READ_FIELD (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD%CMNHNAME,TZDATE)
+        CALL IO_Field_read (INFILES(1)%TFILE,   tpreclist(ji)%TFIELD%CMNHNAME,TZDATE)
         tpreclist(ji)%TFIELD%LTIMEDEP = gtimedep_out(ji)
-        CALL IO_WRITE_FIELD(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,TZDATE)
+        CALL IO_Field_write(outfiles(idx)%TFILE,tpreclist(ji)%TFIELD,TZDATE)
 
 
       CASE default
@@ -947,12 +947,12 @@ END DO
     USE MODD_DIM_n,         ONLY: NIMAX_ll, NJMAX_ll, NKMAX
     USE MODD_GRID,          ONLY: XBETA, XRPK, XLAT0, XLON0, XLATORI, XLONORI
     USE MODD_GRID_n,        ONLY: LSLEVE, XXHAT, XYHAT, XZHAT
-    USE MODD_IO_ll,         ONLY: LIOCDF4
+    USE MODD_IO,            ONLY: LIOCDF4
     USE MODD_PARAMETERS,    ONLY: JPHEXT
     USE MODD_PARAMETERS_ll, ONLY: JPHEXT_ll=>JPHEXT, JPVEXT_ll=>JPVEXT
     USE MODD_TIME_n,        ONLY: TDTCUR, TDTMOD
 
-    USE MODE_FM,               ONLY: IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
+    USE MODE_IO_FILE,          ONLY: IO_FILE_OPEN, IO_FILE_CLOSE
     USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
 
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(OUT) :: infiles
@@ -981,7 +981,7 @@ END DO
        ! NetCDF
        !
        CALL IO_FILE_ADD2LIST(INFILES(1)%TFILE,HINFILE,'MNH','READ',HFORMAT='NETCDF4')
-       CALL IO_FILE_OPEN_ll(INFILES(1)%TFILE)
+       CALL IO_FILE_OPEN(INFILES(1)%TFILE)
 
        nbvar_infile = INFILES(1)%TFILE%NNCNAR
    ELSE
@@ -990,7 +990,7 @@ END DO
        !
        CALL IO_FILE_ADD2LIST(INFILES(1)%TFILE,HINFILE,'MNH','READ', &
                              HFORMAT='LFI',KLFIVERB=0)
-       CALL IO_FILE_OPEN_ll(INFILES(1)%TFILE)
+       CALL IO_FILE_OPEN(INFILES(1)%TFILE)
 
        ilu = INFILES(1)%TFILE%NLFIFLU
 
@@ -998,54 +998,54 @@ END DO
 
        IF (options(OPTLIST)%set) THEN
           CALL LFILAF(iresp,ilu,lfalse)
-          CALL IO_FILE_CLOSE_ll(INFILES(1)%TFILE)
+          CALL IO_FILE_CLOSE(INFILES(1)%TFILE)
           return
        END IF
    END IF
    !
-   !Read problem dimensions and some grid variables (needed to determine domain size and also by IO_FILE_OPEN_ll to create netCDF files)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'JPHEXT',JPHEXT)
+   !Read problem dimensions and some grid variables (needed to determine domain size and also by IO_FILE_OPEN to create netCDF files)
+   CALL IO_Field_read(INFILES(1)%TFILE,'JPHEXT',JPHEXT)
    JPHEXT_ll = JPHEXT
    JPVEXT_ll = JPVEXT
    !
    ALLOCATE(NIMAX_ll,NJMAX_ll,NKMAX)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'IMAX',NIMAX_ll)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'JMAX',NJMAX_ll)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'KMAX',NKMAX,IRESP2)
+   CALL IO_Field_read(INFILES(1)%TFILE,'IMAX',NIMAX_ll)
+   CALL IO_Field_read(INFILES(1)%TFILE,'JMAX',NJMAX_ll)
+   CALL IO_Field_read(INFILES(1)%TFILE,'KMAX',NKMAX,IRESP2)
    IF (IRESP2/=0) NKMAX = 0
    !
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'PROGRAM',CPROGRAM_ORIG)
+   CALL IO_Field_read(INFILES(1)%TFILE,'PROGRAM',CPROGRAM_ORIG)
    !
    ALLOCATE(CSTORAGE_TYPE)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
+   CALL IO_Field_read(INFILES(1)%TFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
    !
    ALLOCATE(XXHAT(NIMAX_ll+2*JPHEXT))
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'XHAT',XXHAT)
+   CALL IO_Field_read(INFILES(1)%TFILE,'XHAT',XXHAT)
    ALLOCATE(XYHAT(NJMAX_ll+2*JPHEXT))
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'YHAT',XYHAT)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'CARTESIAN',LCARTESIAN)
+   CALL IO_Field_read(INFILES(1)%TFILE,'YHAT',XYHAT)
+   CALL IO_Field_read(INFILES(1)%TFILE,'CARTESIAN',LCARTESIAN)
    !
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'LAT0',XLAT0)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'LON0',XLON0)
-   CALL IO_READ_FIELD(INFILES(1)%TFILE,'BETA',XBETA)
+   CALL IO_Field_read(INFILES(1)%TFILE,'LAT0',XLAT0)
+   CALL IO_Field_read(INFILES(1)%TFILE,'LON0',XLON0)
+   CALL IO_Field_read(INFILES(1)%TFILE,'BETA',XBETA)
    !
    IF (.NOT.LCARTESIAN) THEN
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'RPK',   XRPK)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LATORI',XLATORI)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'LONORI',XLONORI)
+     CALL IO_Field_read(INFILES(1)%TFILE,'RPK',   XRPK)
+     CALL IO_Field_read(INFILES(1)%TFILE,'LATORI',XLATORI)
+     CALL IO_Field_read(INFILES(1)%TFILE,'LONORI',XLONORI)
    ENDIF
    !
    IF (TRIM(CPROGRAM_ORIG)/='PGD' .AND. TRIM(CPROGRAM_ORIG)/='NESPGD' .AND. TRIM(CPROGRAM_ORIG)/='ZOOMPG' &
        .AND. .NOT.(TRIM(CPROGRAM_ORIG)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX
      ALLOCATE(XZHAT(NKMAX+2*JPVEXT))
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'ZHAT',XZHAT)
+     CALL IO_Field_read(INFILES(1)%TFILE,'ZHAT',XZHAT)
      ALLOCATE(LSLEVE)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'SLEVE',LSLEVE)
+     CALL IO_Field_read(INFILES(1)%TFILE,'SLEVE',LSLEVE)
      ALLOCATE(TDTMOD)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'DTMOD',TDTMOD,IRESP2)
+     CALL IO_Field_read(INFILES(1)%TFILE,'DTMOD',TDTMOD,IRESP2)
      IF(IRESP2/=0) DEALLOCATE(TDTMOD)
      ALLOCATE(TDTCUR)
-     CALL IO_READ_FIELD(INFILES(1)%TFILE,'DTCUR',TDTCUR,IRESP2)
+     CALL IO_Field_read(INFILES(1)%TFILE,'DTCUR',TDTCUR,IRESP2)
      IF(IRESP2/=0) DEALLOCATE(TDTCUR)
    END IF
    !
@@ -1061,7 +1061,7 @@ END DO
          idx = KNFILES_OUT
          CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,HOUTFILE,'MNH','WRITE', &
                                HFORMAT='NETCDF4',OOLD=.TRUE.)
-         CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+         CALL IO_FILE_OPEN(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
 
          IF (options(OPTCOMPRESS)%set) THEN
            outfiles(idx)%tfile%LNCCOMPRESS       = .TRUE.
@@ -1084,7 +1084,7 @@ END DO
        CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,houtfile,'MNH','WRITE', &
                              HFORMAT='LFI',KLFIVERB=0,OOLD=.TRUE.)
        LIOCDF4 = .FALSE. !Necessary to open correctly the LFI file
-       CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+       CALL IO_FILE_OPEN(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
        LIOCDF4 = .TRUE.
    END IF
    !
@@ -1095,7 +1095,7 @@ END DO
      idx = KNFILES_OUT
      CALL IO_FILE_ADD2LIST(outfiles(idx)%TFILE,'dummy_file','MNH','WRITE', &
                            HFORMAT='NETCDF4',OOLD=.TRUE.)
-     CALL IO_FILE_OPEN_ll(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+     CALL IO_FILE_OPEN(outfiles(idx)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
    END IF
 
    PRINT *,'--> Converted to file: ', TRIM(houtfile)
@@ -1103,7 +1103,7 @@ END DO
   END SUBROUTINE OPEN_FILES
 
   SUBROUTINE OPEN_SPLIT_NCFILES_OUT(outfiles,KNFILES_OUT,houtfile,nbvar,options)
-    USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
+    USE MODE_IO_FILE,          ONLY: IO_FILE_OPEN
     USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
 
     TYPE(TFILE_ELT),DIMENSION(:),  INTENT(INOUT) :: outfiles
@@ -1150,7 +1150,7 @@ END DO
       filename = trim(houtfile)//'.'//TRIM(YVARS(ji))
       CALL IO_FILE_ADD2LIST(outfiles(ji)%TFILE,filename,'MNH','WRITE', &
                             HFORMAT='NETCDF4')
-      CALL IO_FILE_OPEN_ll(outfiles(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+      CALL IO_FILE_OPEN(outfiles(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
 
       IF (options(OPTCOMPRESS)%set) THEN
         outfiles(ji)%tfile%LNCCOMPRESS       = .TRUE.
@@ -1168,7 +1168,7 @@ END DO
   END SUBROUTINE OPEN_SPLIT_NCFILES_OUT
   
   SUBROUTINE CLOSE_FILES(filelist,KNFILES)
-    USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
+    USE MODE_IO_FILE, ONLY: IO_FILE_CLOSE
 
     TYPE(TFILE_ELT),DIMENSION(:),INTENT(INOUT) :: filelist
     INTEGER,                     INTENT(IN)    :: KNFILES
@@ -1179,13 +1179,13 @@ END DO
     CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILES','called')
 
     DO ji=1,KNFILES
-      IF (filelist(ji)%TFILE%LOPENED) CALL IO_FILE_CLOSE_ll(filelist(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
+      IF (filelist(ji)%TFILE%LOPENED) CALL IO_FILE_CLOSE(filelist(ji)%TFILE,HPROGRAM_ORIG=CPROGRAM_ORIG)
     END DO
 
   END SUBROUTINE CLOSE_FILES
 
 
-  SUBROUTINE IO_GET_METADATA_NC4(KFILE_ID,KVAR_ID,TPREC)
+  SUBROUTINE IO_Metadata_get_nc4(KFILE_ID,KVAR_ID,TPREC)
     USE MODD_DIM_n,      ONLY: NKMAX
     USE MODD_PARAMETERS, ONLY: JPVEXT
 
@@ -1198,7 +1198,7 @@ END DO
     INTEGER(KIND=IDCDF_KIND)                 :: ISTATUS
     INTEGER(KIND=IDCDF_KIND),DIMENSION(NF90_MAX_VAR_DIMS) :: IDIMS_ID
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_GET_METADATA_NC4','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Metadata_get_nc4','called')
 
     ISTATUS = NF90_INQUIRE_VARIABLE(KFILE_ID,KVAR_ID,NDIMS = TPREC%NDIMS_FILE, &
                                     XTYPE = TPREC%NTYPE_FILE, DIMIDS = IDIMS_ID)
@@ -1262,12 +1262,12 @@ END DO
 
       ISTATUS = NF90_GET_ATT(KFILE_ID,KVAR_ID,'units',TPREC%CUNITS_FILE)
       IF (ISTATUS /= NF90_NOERR) TPREC%CUNITS_FILE = ''
-  END SUBROUTINE IO_GET_METADATA_NC4
+  END SUBROUTINE IO_Metadata_get_nc4
 
 
-  SUBROUTINE IO_FILL_DIMS_NC4(TPFILE,TPREC,KRESP)
-    USE MODD_IO_ll,        ONLY: TFILEDATA
-    use mode_io_tools_nc4, only: getdimcdf, io_find_dim_byname_nc4
+  SUBROUTINE IO_Dims_fill_nc4(TPFILE,TPREC,KRESP)
+    USE MODD_IO,           ONLY: TFILEDATA
+    use mode_io_tools_nc4, only: IO_Dimcdf_get_nc4, IO_Dim_find_byname_nc4
 
     TYPE(TFILEDATA),INTENT(IN)    :: TPFILE
     TYPE(workfield),INTENT(INOUT) :: TPREC
@@ -1276,12 +1276,12 @@ END DO
     INTEGER              :: JJ
     TYPE(DIMCDF),POINTER :: TZDIMPTR
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILL_DIMS_NC4','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dims_fill_nc4','called')
 
     KRESP = 0
 
     IF (TPREC%NDIMS_FILE<TPREC%TFIELD%NDIMS) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILL_DIMS_NC4','less dimensions than expected for '//TRIM(TPREC%TFIELD%CMNHNAME)// &
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dims_fill_nc4','less dimensions than expected for '//TRIM(TPREC%TFIELD%CMNHNAME)// &
                                         ' => ignored')
       TPREC%tbw   = .FALSE.
       TPREC%tbr   = .FALSE.
@@ -1293,10 +1293,10 @@ END DO
 
     DO JJ=1,TPREC%TFIELD%NDIMS
     !DO JJ=1,TPREC%NDIMS_FILE !NDIMS_FILE can be bigger than NDIMS due to time dimension (it can be ignored here)
-      CALL IO_FIND_DIM_BYNAME_NC4(TPFILE,TPREC%CDIMNAMES_FILE(JJ),TPREC%TDIMS(JJ),KRESP)
+      CALL IO_Dim_find_byname_nc4(TPFILE,TPREC%CDIMNAMES_FILE(JJ),TPREC%TDIMS(JJ),KRESP)
       !If dimension not found => create it
       IF (KRESP/=0)  THEN
-        TZDIMPTR => GETDIMCDF(TPFILE,TPREC%NDIMSIZES_FILE(JJ))
+        TZDIMPTR => IO_Dimcdf_get_nc4(TPFILE,TPREC%NDIMSIZES_FILE(JJ))
         TPREC%TDIMS(JJ) = TZDIMPTR
         KRESP = 0
       END IF
@@ -1308,6 +1308,6 @@ END DO
       END IF
     END DO
 
-  END SUBROUTINE IO_FILL_DIMS_NC4
+  END SUBROUTINE IO_Dims_fill_nc4
 
 END MODULE mode_util
diff --git a/src/LIB/SURCOUCHE/src/io_write_field.f90 b/src/LIB/SURCOUCHE/src/io_write_field.f90
deleted file mode 100644
index 70bca359e..000000000
--- a/src/LIB/SURCOUCHE/src/io_write_field.f90
+++ /dev/null
@@ -1,500 +0,0 @@
-!MNH_LIC Copyright 2016-2018 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-! Original version:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!
-MODULE MODE_IO_WRITE_FIELD
-!
-USE MODD_IO_ll, ONLY: TOUTBAK
-USE MODE_FIELD
-USE MODE_FMWRIT
-!
-IMPLICIT NONE
-!
-CONTAINS
-!
-SUBROUTINE IO_WRITE_FIELDLIST(TPOUTPUT)
-!
-USE MODE_MODELN_HANDLER, ONLY : GET_CURRENT_MODEL_INDEX
-!
-IMPLICIT NONE
-!
-TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
-!
-INTEGER :: IDX
-INTEGER :: IMI
-INTEGER :: JI
-!
-IMI = GET_CURRENT_MODEL_INDEX()
-!
-DO JI = 1,SIZE(TPOUTPUT%NFIELDLIST)
-  IDX = TPOUTPUT%NFIELDLIST(JI)
-  SELECT CASE (TFIELDLIST(IDX)%NDIMS)
-    !
-    !0D output
-    !
-    CASE (0)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !0D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D logical fields')
-          END IF
-        !
-        !0D integer
-        !
-        CASE (TYPEINT)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D integer fields')
-          END IF
-        !
-        !0D logical
-        !
-        CASE (TYPELOG)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D logical fields')
-          END IF
-        !
-        !0D string
-        !
-        CASE (TYPECHAR)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D character fields')
-          END IF
-        !
-        !0D date/time
-        !
-        CASE (TYPEDATE)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_T0D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_T0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_T0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 0D date/time fields')
-          END IF
-        !
-        !0D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 0D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !1D output
-    !
-    CASE (1)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !1D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X1D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D real fields')
-          END IF
-!         !
-!         !1D integer
-!         !
-!         CASE (TYPEINT)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N1D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D integer fields')
-!           END IF
-!         !
-!         !1D logical
-!         !
-!         CASE (TYPELOG)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L1D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_L1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D logical fields')
-!           END IF
-!         !
-!         !1D string
-!         !
-!         CASE (TYPECHAR)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C1D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_C1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 1D character fields')
-!           END IF
-        !
-        !1D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 1D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !2D output
-    !
-    CASE (2)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !2D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X2D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X2D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X2D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 2D real fields')
-          END IF
-        !
-        !2D integer
-        !
-        CASE (TYPEINT)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N2D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N2D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N2D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not allowed for 2D integer fields')
-          END IF
-        !
-        !2D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 2D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !3D output
-    !
-    CASE (3)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !3D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X3D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X3D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X3D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 3D real fields')
-            !PW: TODO?: add missing field in TFIELDLIST?
-            !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
-          END IF
-        !
-        !3D integer
-        !
-        CASE (TYPEINT)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N3D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N3D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_N3D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 3D integer fields')
-            !PW: TODO?: add missing field in TFIELDLIST?
-            !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
-          END IF
-        !
-        !3D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 3D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-    !
-    !4D output
-    !
-    CASE (4)
-      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-        !
-        !4D real
-        !
-        CASE (TYPEREAL)
-          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X4D) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X4D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA) ) THEN
-            PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X4D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-            STOP
-          END IF
-          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-            CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
-          ELSE
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 4D real fields')
-            !PW: TODO?: add missing field in TFIELDLIST?
-            !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
-          END IF
-        !
-        !4D other types
-        !
-        CASE DEFAULT
-          PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 4D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-          STOP
-      END SELECT
-!     !
-!     !5D output
-!     !
-!     CASE (5)
-!       SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-!         !
-!         !5D real
-!         !
-!         CASE (TYPEREAL)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X5D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X5D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X5D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 5D real fields')
-!             !PW: TODO?: add missing field in TFIELDLIST?
-!             !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
-!           END IF
-!         !
-!         !5D other types
-!         !
-!         CASE DEFAULT
-!           PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 5D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!           STOP
-!       END SELECT
-!     !
-!     !6D output
-!     !
-!     CASE (6)
-!       SELECT CASE (TFIELDLIST(IDX)%NTYPE)
-!         !
-!         !6D real
-!         !
-!         CASE (TYPEREAL)
-!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X6D) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X6D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA) ) THEN
-!             PRINT *,'FATAL: IO_WRITE_FIELDLIST: TFIELD_X6D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!             STOP
-!           END IF
-!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
-!             CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
-!           ELSE
-!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELDLIST','CLBTYPE/=NONE not (yet) allowed for 6D real fields')
-!             !PW: TODO?: add missing field in TFIELDLIST?
-!             !CALL IO_WRITE_FIELD_LB(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
-!           END IF
-!         !
-!         !6D other types
-!         !
-!         CASE DEFAULT
-!           PRINT *,'FATAL: IO_WRITE_FIELDLIST: type not yet supported for 4D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-!           STOP
-!       END SELECT
-    !
-    !Other number of dimensions
-    !
-    CASE DEFAULT
-      PRINT *,'FATAL: IO_WRITE_FIELDLIST: number of dimensions not yet supported for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
-      STOP
-  END SELECT
-END DO
-!
-END SUBROUTINE IO_WRITE_FIELDLIST
-!
-!
-!
-SUBROUTINE IO_WRITE_FIELD_USER(TPOUTPUT)
-!
-#if 0
-USE MODD_PARAMETERS, ONLY : JPVEXT
-USE MODD_DYN_n,    ONLY: XTSTEP
-USE MODD_FIELD_n,    ONLY: XUT, XVT, XRT, XTHT
-USE MODD_PRECIP_n, ONLY: XINPRR
-#endif
-!
-IMPLICIT NONE
-!
-TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
-!
-TYPE(TFIELDDATA) :: TZFIELD
-!
-#if 0
-INTEGER          :: IKB
-!
-IKB=JPVEXT+1
-!
-TZFIELD%CMNHNAME   = 'UTLOW'
-TZFIELD%CSTDNAME   = 'x_wind'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'm s-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_U component of wind at lowest physical level'
-TZFIELD%NGRID      = 2
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XUT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'VTLOW'
-TZFIELD%CSTDNAME   = 'y_wind'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'm s-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_V component of wind at lowest physical level'
-TZFIELD%NGRID      = 3
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XVT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'THTLOW'
-TZFIELD%CSTDNAME   = 'air_potential_temperature'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'K'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_potential temperature at lowest physical level'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XTHT(:,:,IKB))
-!
-TZFIELD%CMNHNAME   = 'RVTLOW'
-!TZFIELD%CSTDNAME   = 'humidity_mixing_ratio' !ratio of the mass of water vapor to the mass of dry air
-TZFIELD%CSTDNAME   = 'specific_humidity'     !mass fraction of water vapor in (moist) air
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg kg-1'
-TZFIELD%CDIR       = 'XY'
-TZFIELD%CCOMMENT   = 'X_Y_Z_Vapor mixing Ratio at lowest physical level'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XRT(:,:,IKB,1))
-!
-TZFIELD%CMNHNAME   = 'ACPRRSTEP'
-TZFIELD%CSTDNAME   = 'rainfall_amount'
-TZFIELD%CLONGNAME  = ''
-TZFIELD%CUNITS     = 'kg m-2'
-TZFIELD%CDIR       = ''
-TZFIELD%CCOMMENT   = 'X_Y_ACcumulated Precipitation Rain Rate during timestep'
-TZFIELD%NGRID      = 1
-TZFIELD%NTYPE      = TYPEREAL
-TZFIELD%NDIMS      = 2
-TZFIELD%LTIMEDEP   = .TRUE.
-!XACPRR is multiplied by 1000. to convert from m to kg m-2 (water density is assumed to be 1000 kg m-3)
-CALL IO_WRITE_FIELD(TPOUTPUT%TFILE,TZFIELD,XINPRR*XTSTEP*1.0E3)
-#endif
-!
-END SUBROUTINE IO_WRITE_FIELD_USER
-!
-END MODULE MODE_IO_WRITE_FIELD
diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index eaab4a3f0..5d4b5b00e 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -7,10 +7,10 @@
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN (removed ISTDOUT, ISTDERR, added NNULLUNIT, CNULLFILE)
 !  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll to allow to disable writes (for bench purposes)
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-----------------------------------------------------------------
 
-MODULE MODD_IO_ll
+MODULE MODD_IO
 !
 USE MODD_NETCDF,     ONLY: IDCDF_KIND, IOCDF, TPTR2DIMCDF
 USE MODD_PARAMETERS, ONLY: NDIRNAMELGTMAX, NFILENAMELGTMAX
@@ -20,7 +20,7 @@ IMPLICIT NONE
 !
 INTEGER, PARAMETER :: NVERB_NO=0, NVERB_FATAL=1, NVERB_ERROR=2, NVERB_WARNING=3, NVERB_INFO=4, NVERB_DEBUG=5
 
-INTEGER                     :: NNULLUNIT = -1  ! /dev/null fortran unit, value set in INITIO_ll
+INTEGER                     :: NNULLUNIT = -1  ! /dev/null fortran unit, value set in IO_Init
 CHARACTER(LEN=*), PARAMETER :: CNULLFILE = "/dev/null"
 
 INTEGER, SAVE :: NIO_RANK ! Rank of IO process
@@ -137,4 +137,4 @@ TYPE(TFILEDATA),POINTER,SAVE :: TFILE_OUTPUTLISTING  => NULL() !Pointer used to
 !Non existing file which can be used as a dummy target
 TYPE(TFILEDATA),TARGET, SAVE :: TFILE_DUMMY = TFILEDATA(CNAME="dummy",CDIRNAME=NULL(),TFILES_IOZ=NULL(),TNCCOORDS=NULL())
 
-END MODULE MODD_IO_ll
+END MODULE MODD_IO
diff --git a/src/LIB/SURCOUCHE/src/mode_allocbuff.f90 b/src/LIB/SURCOUCHE/src/mode_allocbuff.f90
index b6ba60133..e6d0e9a1a 100644
--- a/src/LIB/SURCOUCHE/src/mode_allocbuff.f90
+++ b/src/LIB/SURCOUCHE/src/mode_allocbuff.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
@@ -8,8 +8,8 @@
 !-----------------------------------------------------------------
 
 MODULE MODE_ALLOCBUFFER_ll
-USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
-USE MODD_PARAMETERS_ll,ONLY : JPHEXT
+USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
 
 IMPLICIT NONE 
 
@@ -51,7 +51,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_N1
 
 SUBROUTINE ALLOCBUFFER_N2(KTAB_P,KTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 INTEGER,DIMENSION(:,:),POINTER           :: KTAB_P
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KTAB
@@ -85,7 +85,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_N2
 
 SUBROUTINE ALLOCBUFFER_N3(KTAB_P,KTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 INTEGER,DIMENSION(:,:,:),POINTER           :: KTAB_P
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KTAB
@@ -179,7 +179,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X1
 
 SUBROUTINE ALLOCBUFFER_X2(PTAB_P,PTAB,HDIR,OALLOC, KIMAX_ll, KJMAX_ll)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PTAB
@@ -229,7 +229,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X2
 
 SUBROUTINE ALLOCBUFFER_X3(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PTAB
@@ -263,7 +263,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X3
 
 SUBROUTINE ALLOCBUFFER_X4(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PTAB
@@ -299,7 +299,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X4
 
 SUBROUTINE ALLOCBUFFER_X5(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll,         ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PTAB
@@ -337,7 +337,7 @@ END SELECT
 END SUBROUTINE ALLOCBUFFER_X5
 
 SUBROUTINE ALLOCBUFFER_X6(PTAB_P,PTAB,HDIR,OALLOC)
-USE MODD_IO_ll, ONLY : LPACK, L2D
+USE MODD_IO, ONLY: LPACK, L2D
 !
 REAL,DIMENSION(:,:,:,:,:,:),POINTER           :: PTAB_P
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PTAB
diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index e0858d4b3..a7bcc64c5 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -12,7 +12,7 @@
 MODULE MODE_FIELD
 !
 USE MODD_CONF,      ONLY : CPROGRAM
-USE MODD_IO_ll,     ONLY : NVERB_DEBUG,NVERB_INFO,NVERB_WARNING,NVERB_ERROR,NVERB_FATAL
+USE MODD_IO,        ONLY : NVERB_DEBUG, NVERB_INFO, NVERB_WARNING, NVERB_ERROR, NVERB_FATAL
 USE MODD_PARAMETERS
 USE MODD_TYPE_DATE, ONLY : DATE_TIME
 #if defined(MNH_IOCDF4)
diff --git a/src/LIB/SURCOUCHE/src/mode_fm.f90 b/src/LIB/SURCOUCHE/src/mode_fm.f90
deleted file mode 100644
index 04252af39..000000000
--- a/src/LIB/SURCOUCHE/src/mode_fm.f90
+++ /dev/null
@@ -1,34 +0,0 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-! Author(s):
-!
-! Modifications:
-!  D. Gazen    April 2016: change error message
-!  P. Wautelet May 2016  : use NetCDF Fortran module
-!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 29/10/2018: better detection of older MNH version numbers
-!  P. Wautelet 13/12/2018: moved some operations to new mode_io_*_nc4 modules
-!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN + move management
-!                          of NNCID and NLFIFLU to the nc4 and lfi subroutines
-!  P. Wautelet 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
-!                          to allow to disable writes (for bench purposes)
-!  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
-!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
-!  P. Wautelet 19/02/2019: simplification/restructuration/cleaning of open/close subroutines (TBCto be continued)
-!  P. Wautelet 27/02/2019: use recursive calls to open/close DES files
-!  P. Wautelet 27/02/2019: remove CLOSE_ll subroutine (from mode_io.f90)
-!-----------------------------------------------------------------
-
-MODULE MODE_FM
-
-use mode_io_ll
-use mode_io_file
-
-IMPLICIT NONE 
-
-END MODULE MODE_FM
diff --git a/src/LIB/SURCOUCHE/src/mode_ga.f90 b/src/LIB/SURCOUCHE/src/mode_ga.f90
index 7457a7f3e..635888394 100644
--- a/src/LIB/SURCOUCHE/src/mode_ga.f90
+++ b/src/LIB/SURCOUCHE/src/mode_ga.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -6,7 +6,8 @@
 ! Author: J.Escobar
 !
 ! Modifications:
-!  P.Wautelet: 14/12/2018: split from fmwrit_ll.f90
+!  J. Escobar  05/02/2015: use JPHEXT from MODD_PARAMETERS_ll
+!  P. Wautelet 14/12/2018: split from fmwrit_ll.f90
 !-----------------------------------------------------------------
 #ifdef MNH_GA
 MODULE MODE_GA
@@ -36,15 +37,12 @@ MODULE MODE_GA
 
     SUBROUTINE MNH_INIT_GA(MY_NI,MY_NJ,MY_NK,HRECFM,HRW_MODE)
 
-!
-!  Modification
-!  J.Escobar 5/02/2015 : use JPHEXT from MODD_PARAMETERS_ll
+      USE MODD_IO,             ONLY: ISP
+      USE MODD_PARAMETERS_ll,  ONLY: JPHEXT
 
-      USE MODE_TOOLS_ll,       ONLY : GET_GLOBALDIMS_ll
-      USE MODD_PARAMETERS_ll,  ONLY : JPHEXT
-      USE MODD_IO_ll,          ONLY : ISP
-      USE MODE_GATHER_ll,      ONLY : GET_DOMWRITE_ll
-      USE MODE_SCATTER_ll,     ONLY : GET_DOMREAD_ll
+      USE MODE_GATHER_ll,      ONLY: GET_DOMWRITE_ll
+      USE MODE_SCATTER_ll,     ONLY: GET_DOMREAD_ll
+      USE MODE_TOOLS_ll,       ONLY: GET_GLOBALDIMS_ll
 
       IMPLICIT NONE
 
diff --git a/src/LIB/SURCOUCHE/src/mode_gather.f90 b/src/LIB/SURCOUCHE/src/mode_gather.f90
index 756d8dcaa..adf0d7401 100644
--- a/src/LIB/SURCOUCHE/src/mode_gather.f90
+++ b/src/LIB/SURCOUCHE/src/mode_gather.f90
@@ -1,8 +1,15 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
+! Modifications:
+!   J.Escobar 10/02/2012 : Bug , in MPI_RECV replace MPI_STATUSES_IGNORE
+!                          with MPI_STATUS_IGNORE
+!   J.Escobar 22/05/2012 : Bug in ISEND with non-contiguous buffer , reintroduce intermediate buffer
+!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!
+!-----------------------------------------------------------------
 
 #ifdef MNH_MPI_DOUBLE_PRECISION
 #define MPI_FLOAT MPI_DOUBLE_PRECISION
@@ -12,15 +19,9 @@
 
 MODULE MODE_GATHER_ll
 
-! Modifications:
-!   J.Escobar 10/02/2012 : Bug , in MPI_RECV replace MPI_STATUSES_IGNORE
-!                          with MPI_STATUS_IGNORE
-!   J.Escobar 22/05/2012 : Bug in ISEND with non-contiguous buffer , reintroduce intermediate buffer
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!
 USE MODD_MPIF
 !JUANZ
-USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD
 !JUANZ
 
 IMPLICIT NONE 
@@ -182,8 +183,8 @@ END SUBROUTINE GATHERALL_N2
 ! Gather des champs XX (ou YY)
 !
 SUBROUTINE GATHERXX_X1(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,     ONLY: ISP, ISNPROC
+USE MODD_VAR_ll, ONLY: MNH_STATUSES_IGNORE
 
 CHARACTER(LEN=*),        INTENT(IN) :: HDIR
 REAL,DIMENSION(:),TARGET,INTENT(IN) :: PSEND
@@ -256,7 +257,7 @@ END SUBROUTINE GATHERXX_X1
 
 
 SUBROUTINE GATHERXX_X2(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),          INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
@@ -319,7 +320,7 @@ END IF
 END SUBROUTINE GATHERXX_X2
 
 SUBROUTINE GATHERXX_X3(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),            INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -382,7 +383,7 @@ END IF
 END SUBROUTINE GATHERXX_X3
 
 SUBROUTINE GATHERXX_X4(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -445,7 +446,7 @@ END IF
 END SUBROUTINE GATHERXX_X4
 
 SUBROUTINE GATHERXX_X5(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -508,7 +509,7 @@ END IF
 END SUBROUTINE GATHERXX_X5
 
 SUBROUTINE GATHERXX_X6(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                  INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -571,7 +572,7 @@ END IF
 END SUBROUTINE GATHERXX_X6
 
 SUBROUTINE GATHERXX_N1(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),           INTENT(IN) :: HDIR
 INTEGER,DIMENSION(:),TARGET,INTENT(IN) :: KSEND
@@ -636,7 +637,7 @@ END SUBROUTINE GATHERXX_N1
 
 
 SUBROUTINE GATHERXX_N2(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),             INTENT(IN) :: HDIR
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
@@ -700,7 +701,7 @@ END IF
 END SUBROUTINE GATHERXX_N2
 
 SUBROUTINE GATHERXX_N3(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),               INTENT(IN)   :: HDIR
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN)   :: KSEND
@@ -761,7 +762,7 @@ END IF
 END SUBROUTINE GATHERXX_N3
 
 SUBROUTINE GATHERXX_L1(HDIR,OSEND,ORECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),           INTENT(IN)    :: HDIR
 LOGICAL,DIMENSION(:),TARGET,INTENT(IN)    :: OSEND
@@ -828,8 +829,8 @@ END SUBROUTINE GATHERXX_L1
 ! Gather des champs XY
 !
 SUBROUTINE GATHERXY_X2(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO, ONLY: ISP, ISNPROC
+USE MODD_VAR_ll, ONLY: MNH_STATUSES_IGNORE
 
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:),TARGET,INTENT(INOUT):: PRECV
@@ -883,7 +884,7 @@ END IF
 END SUBROUTINE GATHERXY_X2
 
 SUBROUTINE GATHERXY_X3(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -926,7 +927,7 @@ END IF
 END SUBROUTINE GATHERXY_X3
 
 SUBROUTINE GATHERXY_X4(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -969,7 +970,7 @@ END IF
 END SUBROUTINE GATHERXY_X4
 
 SUBROUTINE GATHERXY_X5(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1012,7 +1013,7 @@ END IF
 END SUBROUTINE GATHERXY_X5
 
 SUBROUTINE GATHERXY_X6(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1055,7 +1056,7 @@ END IF
 END SUBROUTINE GATHERXY_X6
 
 SUBROUTINE GATHERXY_N2(KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
 INTEGER,DIMENSION(:,:),TARGET,INTENT(INOUT):: KRECV
@@ -1092,7 +1093,7 @@ END IF
 END SUBROUTINE GATHERXY_N2
 
 SUBROUTINE GATHERXY_N3(KSEND,KRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX,HINTER)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(IN) :: KSEND
 INTEGER,DIMENSION(:,:,:),TARGET,INTENT(INOUT):: KRECV
@@ -1133,7 +1134,7 @@ END IF
 END SUBROUTINE GATHERXY_N3
 
 SUBROUTINE GATHERBOX_X2(PSEND,PRECV,KROOT,KCOMM,KXOBOX,KXEBOX,KYOBOX,KYEBOX)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:),TARGET,INTENT(INOUT):: PRECV
@@ -1176,10 +1177,11 @@ END SUBROUTINE GATHERBOX_X2
 SUBROUTINE GET_DOMWRITE_ll(KIP,HTYPE,KXOR,KXEND,KYOR,KYEND,&
                          & KXORBOX,KXENDBOX,KYORBOX,KYENDBOX,HINTER)
 
-USE MODD_VAR_ll,       ONLY : TCRRT_PROCONF
-USE MODD_STRUCTURE_ll,  ONLY : MODELSPLITTING_ll 
-USE MODE_TOOLS_ll,     ONLY : LWEST_ll,LEAST_ll,LSOUTH_ll,LNORTH_ll
-IMPLICIT NONE 
+USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+USE MODE_TOOLS_ll,     ONLY: LWEST_ll, LEAST_ll, LSOUTH_ll, LNORTH_ll
+USE MODD_VAR_ll,       ONLY: TCRRT_PROCONF
+
+IMPLICIT NONE
 
 INTEGER,                  INTENT(IN)  :: KIP
 CHARACTER(LEN=*),         INTENT(IN)  :: HTYPE
diff --git a/src/LIB/SURCOUCHE/src/mode_init_ll.f90 b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
index 257cc2b9c..aa0d0c7c4 100644
--- a/src/LIB/SURCOUCHE/src/mode_init_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_init_ll.f90
@@ -744,15 +744,13 @@
 !*       0.    DECLARATIONS
 !
   USE MODD_DIM_ll
-!  USE MODD_STRUCTURE_ll
-!  USE MODD_VAR_ll, ONLY : NIOUNIT, YOUTPUTFILE
-  USE MODD_IO_ll,          ONLY : ISP
+  USE MODD_IO,        ONLY: ISP
 #ifdef CPLOASIS
-  USE MODD_SFX_OASIS, ONLY : LOASIS
+  USE MODD_SFX_OASIS, ONLY: LOASIS
 #endif
 !
 #ifdef MNH_GA
-USE MODE_GA
+  USE MODE_GA
 #endif
 !
   IMPLICIT NONE
diff --git a/src/LIB/SURCOUCHE/src/mode_io.f90 b/src/LIB/SURCOUCHE/src/mode_io.f90
index 4ff0f6265..596d631ae 100644
--- a/src/LIB/SURCOUCHE/src/mode_io.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io.f90
@@ -6,13 +6,14 @@
 ! Author(s)
 !  D. Gazen
 ! Modifications:
-!  P. Wautelet 01/03/2019: move OPEN_ll to mode_io_file.f90 and SET_FMPACK_ll to here from mode_fm.f90
+!  P. Wautelet 01/03/2019: move OPEN_ll to mode_io_file.f90 and IO_Pack_set to here from mode_fm.f90
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !
 !-----------------------------------------------------------------
-MODULE MODE_IO_ll
+MODULE MODE_IO
 
   USE MODD_MPIF
-  USE MODD_VAR_ll, ONLY : NMNH_COMM_WORLD
+  USE MODD_VAR_ll, ONLY: NMNH_COMM_WORLD
 
   USE MODE_MSG
 
@@ -20,30 +21,30 @@ MODULE MODE_IO_ll
 
   PRIVATE
 
-  LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when SET_CONFIO_ll is called.
+  LOGICAL,SAVE :: GCONFIO = .FALSE. ! Turn TRUE when IO_Config_set is called.
 
   public :: GCONFIO
-  public :: INITIO_ll, SET_CONFIO_ll
-  public :: SET_FMPACK_ll
+  public :: IO_Init, IO_Config_set
+  public :: IO_Pack_set
 
 CONTAINS 
 
-  SUBROUTINE SET_CONFIO_ll()
+  SUBROUTINE IO_Config_set()
     USE MODN_CONFIO, only: LCDF4, LLFIOUT, LLFIREAD
 
     !Use MODN_CONFIO namelist variables
-    CALL SET_CONFIO_INTERN_ll(LCDF4, LLFIOUT, LLFIREAD)
-  END SUBROUTINE SET_CONFIO_ll
+    CALL IO_Config_set_intern(LCDF4, LLFIOUT, LLFIREAD)
+  END SUBROUTINE IO_Config_set
 
-  SUBROUTINE SET_CONFIO_INTERN_ll(OIOCDF4, OLFIOUT, OLFIREAD)
-    USE MODD_IO_ll, ONLY : LIOCDF4, LLFIOUT, LLFIREAD, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
+  SUBROUTINE IO_Config_set_intern(OIOCDF4, OLFIOUT, OLFIREAD)
+    USE MODD_IO, ONLY: LIOCDF4, LLFIOUT, LLFIREAD, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
 
     LOGICAL, INTENT(IN) :: OIOCDF4, OLFIOUT, OLFIREAD
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','SET_CONFIO_ll','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Config_set','called')
 
     IF (GCONFIO) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','SET_CONFIO_ll','already called (ignoring this call)')
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Config_set','already called (ignoring this call)')
     ELSE
 #if defined(MNH_IOCDF4)
       LIOCDF4  = OIOCDF4
@@ -51,7 +52,7 @@ CONTAINS
       LLFIREAD = OLFIREAD
 
       IF (.NOT.LIOCDF4 .AND. .NOT.LLFIOUT) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','SET_CONFIO_ll','output format forced to netCDF')
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Config_set','output format forced to netCDF')
         LIOCDF4 = .TRUE.
       END IF
 #else
@@ -63,15 +64,15 @@ CONTAINS
 
       ! Set LIO_ALLOW_NO_BACKUP=.true. if writes are disabled (to be coherent)
       IF (LIO_NO_WRITE) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','SET_CONFIO_ll','file writes are disabled')
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Config_set','file writes are disabled')
         LIO_ALLOW_NO_BACKUP = .true.
       END IF
     END IF
 
-  END SUBROUTINE SET_CONFIO_INTERN_ll
+  END SUBROUTINE IO_Config_set_intern
 
-  SUBROUTINE INITIO_ll()
-    USE MODD_IO_ll,     only: CNULLFILE, GSMONOPROC, nio_rank, ISNPROC, ISP, NNULLUNIT
+  SUBROUTINE IO_Init()
+    use MODD_IO, only: CNULLFILE, GSMONOPROC, nio_rank, ISNPROC, ISP, NNULLUNIT
 
     USE MODE_MNH_WORLD, ONLY: INIT_NMNH_COMM_WORLD
 
@@ -80,10 +81,10 @@ CONTAINS
     INTEGER :: IERR, IOS
     character(len=256) :: yioerrmsg
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','INITIO_ll','called')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Init','called')
 
     CALL INIT_NMNH_COMM_WORLD(IERR)
-    IF (IERR .NE.0) CALL PRINT_MSG(NVERB_FATAL,'IO','INITIO_ll','problem with remapping of NMNH_COMM_WORLD')
+    IF (IERR .NE.0) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Init','problem with remapping of NMNH_COMM_WORLD')
 
     !! Now MPI is initialized for sure
 
@@ -105,13 +106,13 @@ CONTAINS
     OPEN(NEWUNIT=NNULLUNIT,STATUS='SCRATCH',ACTION='WRITE',IOSTAT=IOS, IOMSG=yioerrmsg)
 #endif
     IF (IOS /= 0) THEN
-       CALL PRINT_MSG(NVERB_FATAL,'IO','INITIO_ll','problem opening /dev/null :'//trim(yioerrmsg))
+       CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Init','problem opening /dev/null :'//trim(yioerrmsg))
     END IF
-  END SUBROUTINE INITIO_ll
+  END SUBROUTINE IO_Init
 
 
-SUBROUTINE SET_FMPACK_ll(O1D,O2D,OPACK)
-USE MODD_IO_ll,  ONLY: LPACK, L1D, L2D
+SUBROUTINE IO_Pack_set(O1D,O2D,OPACK)
+USE MODD_IO,     ONLY: LPACK, L1D, L2D
 USE MODD_VAR_ll, ONLY: IP
 
 IMPLICIT NONE
@@ -124,6 +125,6 @@ L2D   = O2D
 
 IF ( IP == 1 ) PRINT *,'INIT L1D,L2D,LPACK = ',L1D,L2D,LPACK
 
-END SUBROUTINE SET_FMPACK_ll
+END SUBROUTINE IO_Pack_set
 
-END MODULE MODE_IO_ll
+END MODULE MODE_IO
diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
index 2efa39b22..5a5fcddb8 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_read.f90
@@ -3,6 +3,15 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
+! Modifications:
+!  J. Escobar  22/08/2005: BUG : missing "GOTO 1000" if read field not found
+!  J. Escobar  13/01/2015: remove comment on BCAST(IRESP in FMREADX2_ll
+!  J. Escobar  15/09/2015: WENO5 & JPHEXT <> 1
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  J. Escobar  17/07/2018: reintroduce needed MPI_BARRIER in IO_Field_read_byfield_X3
+!  P. Wautelet 29/01/2019: small bug correction in time measurement in IO_Field_read_byfield_X2
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!-----------------------------------------------------------------
 
 #ifdef MNH_MPI_DOUBLE_PRECISION
 #define MPI_FLOAT MPI_DOUBLE_PRECISION
@@ -10,18 +19,9 @@
 #define MPI_FLOAT MPI_REAL
 #endif
 
-MODULE MODE_FMREAD
-!
-!Correction :
-!  J.Escobar : 22/08/2005 : BUG : manque un "GOTO 1000" si champs
-!              lue non trouvé !!!
-!  J.Escobar : 13/01/2015 : remove comment on BCAST(IRESP in FMREADX2_ll
-!  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  J.Escobar : 17/07/2018 : reintroduce needed MPI_BARRIER in IO_READ_FIELD_BYFIELD_X3
-!  P.Wautelet: 29/01/2019 : small bug correction in time measurement in IO_READ_FIELD_BYFIELD_X2
-!
-USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
+MODULE MODE_IO_FIELD_READ
+!
+USE MODD_IO, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG,TFILEDATA
 USE MODD_MPIF
 !
 USE MODE_FIELD
@@ -35,36 +35,36 @@ IMPLICIT NONE
 
 PRIVATE
 
-INTERFACE IO_READ_FIELD
-   MODULE PROCEDURE IO_READ_FIELD_BYNAME_X0, IO_READ_FIELD_BYNAME_X1,  &
-                    IO_READ_FIELD_BYNAME_X2, IO_READ_FIELD_BYNAME_X3,  &
-                    IO_READ_FIELD_BYNAME_X4, IO_READ_FIELD_BYNAME_X5,  &
-                    IO_READ_FIELD_BYNAME_X6,                           &
-                    IO_READ_FIELD_BYNAME_N0, IO_READ_FIELD_BYNAME_N1,  &
-                    IO_READ_FIELD_BYNAME_N2,                           &
-                    IO_READ_FIELD_BYNAME_L0, IO_READ_FIELD_BYNAME_L1,  &
-                    IO_READ_FIELD_BYNAME_C0,                           &
-                    IO_READ_FIELD_BYNAME_T0,                           &
-                    IO_READ_FIELD_BYFIELD_X0,IO_READ_FIELD_BYFIELD_X1, &
-                    IO_READ_FIELD_BYFIELD_X2,IO_READ_FIELD_BYFIELD_X3, &
-                    IO_READ_FIELD_BYFIELD_X4,IO_READ_FIELD_BYFIELD_X5, &
-                    IO_READ_FIELD_BYFIELD_X6,                          &
-                    IO_READ_FIELD_BYFIELD_N0,IO_READ_FIELD_BYFIELD_N1, &
-                    IO_READ_FIELD_BYFIELD_N2,                          &
-                    IO_READ_FIELD_BYFIELD_L0,IO_READ_FIELD_BYFIELD_L1, &
-                    IO_READ_FIELD_BYFIELD_C0,                          &
-                    IO_READ_FIELD_BYFIELD_T0
-END INTERFACE
+public :: IO_Field_read, IO_Field_read_lb
 
-INTERFACE IO_READ_FIELD_LB
-   MODULE PROCEDURE IO_READ_FIELD_BYNAME_LB, IO_READ_FIELD_BYFIELD_LB
+INTERFACE IO_Field_read
+   MODULE PROCEDURE IO_Field_read_byname_X0, IO_Field_read_byname_X1,  &
+                    IO_Field_read_byname_X2, IO_Field_read_byname_X3,  &
+                    IO_Field_read_byname_X4, IO_Field_read_byname_X5,  &
+                    IO_Field_read_byname_X6,                           &
+                    IO_Field_read_byname_N0, IO_Field_read_byname_N1,  &
+                    IO_Field_read_byname_N2,                           &
+                    IO_Field_read_byname_L0, IO_Field_read_byname_L1,  &
+                    IO_Field_read_byname_C0,                           &
+                    IO_Field_read_byname_T0,                           &
+                    IO_Field_read_byfield_X0,IO_Field_read_byfield_X1, &
+                    IO_Field_read_byfield_X2,IO_Field_read_byfield_X3, &
+                    IO_Field_read_byfield_X4,IO_Field_read_byfield_X5, &
+                    IO_Field_read_byfield_X6,                          &
+                    IO_Field_read_byfield_N0,IO_Field_read_byfield_N1, &
+                    IO_Field_read_byfield_N2,                          &
+                    IO_Field_read_byfield_L0,IO_Field_read_byfield_L1, &
+                    IO_Field_read_byfield_C0,                          &
+                    IO_Field_read_byfield_T0
 END INTERFACE
 
-PUBLIC IO_READ_FIELD,IO_READ_FIELD_LB
+INTERFACE IO_Field_read_lb
+   MODULE PROCEDURE IO_Field_read_byname_lb, IO_Field_read_byfield_lb
+END INTERFACE
 
 CONTAINS 
 
-SUBROUTINE IO_FILE_READ_CHECK(TPFILE,HSUBR,KRESP)
+SUBROUTINE IO_File_read_check(TPFILE,HSUBR,KRESP)
 TYPE(TFILEDATA),  INTENT(IN)  :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)  :: HSUBR
 INTEGER,          INTENT(OUT) :: KRESP
@@ -92,16 +92,16 @@ IF (TPFILE%CFORMAT/='NETCDF4' .AND. TPFILE%CFORMAT/='LFI' .AND. TPFILE%CFORMAT/=
   RETURN
 END IF
 !
-END SUBROUTINE IO_FILE_READ_CHECK
+END SUBROUTINE IO_File_read_check
 
 
-SUBROUTINE IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+SUBROUTINE IO_Field_metadata_bcast(TPFILE,TPFIELD)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 !
 INTEGER :: IERR
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_BCAST_FIELD_METADATA','called for '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_metadata_bcast','called for '//TRIM(TPFIELD%CMNHNAME))
 !
 CALL MPI_BCAST(TPFIELD%CMNHNAME, LEN(TPFIELD%CMNHNAME), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
 CALL MPI_BCAST(TPFIELD%CSTDNAME, LEN(TPFIELD%CSTDNAME), MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -114,10 +114,10 @@ CALL MPI_BCAST(TPFIELD%NGRID,    1,                     MPI_INTEGER,  TPFILE%NMA
 CALL MPI_BCAST(TPFIELD%NTYPE,    1,                     MPI_INTEGER,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
 CALL MPI_BCAST(TPFIELD%NDIMS,    1,                     MPI_INTEGER,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
 !
-END SUBROUTINE IO_BCAST_FIELD_METADATA
+END SUBROUTINE IO_Field_metadata_bcast
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X0(TPFILE,HNAME,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -127,19 +127,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X0
+END SUBROUTINE IO_Field_read_byname_X0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISP,GSMONOPROC
+USE MODD_IO,        ONLY: ISP,GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -149,37 +149,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     ! Broadcast Field
     CALL MPI_BCAST(PFIELD,1,MPI_FLOAT,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -190,13 +190,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X0
+END SUBROUTINE IO_Field_read_byfield_X0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X1(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byname_X1(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -209,20 +209,20 @@ TYPE(ZONE_ll),DIMENSION(ISNPROC),OPTIONAL,INTENT(IN) :: TPSPLITTING  ! splitting
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X1
+END SUBROUTINE IO_Field_read_byname_X1
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X1(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byfield_X1(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : ISP,GSMONOPROC,ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISP, GSMONOPROC, ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 USE MODE_SCATTER_ll
 USE MODE_ALLOCBUFFER_ll
@@ -240,32 +240,32 @@ REAL,DIMENSION(:),POINTER    :: ZFIELDP
 LOGICAL                      :: GALLOC
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X1',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X1',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC, KIMAX_ll, KJMAX_ll)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -276,8 +276,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN
       ! Broadcast Field
@@ -295,13 +295,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X1
+END SUBROUTINE IO_Field_read_byfield_X1
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X2(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byname_X2(TPFILE,HNAME,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),    INTENT(IN)    :: TPFILE
@@ -315,27 +315,27 @@ TYPE(ZONE_ll),DIMENSION(ISNPROC),OPTIONAL,INTENT(IN) :: TPSPLITTING  ! splitting
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X2
+END SUBROUTINE IO_Field_read_byname_X2
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X2(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
+SUBROUTINE IO_Field_read_byfield_X2(TPFILE,TPFIELD,PFIELD,KRESP,KIMAX_ll,KJMAX_ll,TPSPLITTING)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,           ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
+USE MODD_TIMEZ,        ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
 #ifdef MNH_GA
 USE MODE_GA
 #endif
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,   ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),           INTENT(IN)    :: TPFILE
@@ -357,7 +357,7 @@ REAL(KIND=8),DIMENSION(2)    :: T11,T22
 REAL,DIMENSION(:,:),POINTER    :: ZFIELD_GA
 #endif
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 CALL SECOND_MNH2(T11)
 GALLOC = .FALSE.
@@ -365,7 +365,7 @@ IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X2',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X2',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -377,11 +377,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -394,11 +394,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC, KIMAX_ll, KJMAX_ll)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -411,8 +411,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -467,10 +467,10 @@ IF (PRESENT(KRESP)) KRESP = IRESP
 CALL SECOND_MNH2(T22)
 TIMEZ%T_READ2D_ALL=TIMEZ%T_READ2D_ALL + T22 - T11
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X2
+END SUBROUTINE IO_Field_read_byfield_X2
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X3(TPFILE,HNAME,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),      INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),     INTENT(IN)    :: HNAME    ! name of the field to write
@@ -480,29 +480,29 @@ INTEGER,OPTIONAL,     INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X3
+END SUBROUTINE IO_Field_read_byname_X3
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_TIMEZ,        ONLY : TIMEZ
-USE MODD_VAR_ll,       ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,               ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_TIMEZ,            ONLY: TIMEZ
+USE MODD_VAR_ll,           ONLY: MNH_STATUSES_IGNORE
 !
 USE MODE_ALLOCBUFFER_ll
 #ifdef MNH_GA
 USE MODE_GA
 #endif
-USE MODE_IO_TOOLS,         ONLY : IO_FILE
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME
-USE MODE_MNH_TIMING,       ONLY : SECOND_MNH2
+USE MODE_IO_TOOLS,         ONLY: IO_Level2filenumber_get
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
+USE MODE_MNH_TIMING,       ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),TARGET,      INTENT(IN)    :: TPFILE
@@ -539,7 +539,7 @@ TYPE(TX_2DP),ALLOCATABLE,DIMENSION(:) :: T_TX2DP
 REAL,DIMENSION(:,:,:),POINTER              :: ZFIELD_GA
 #endif
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 CALL SECOND_MNH2(T11)
 !
@@ -552,7 +552,7 @@ YDIR = TPFIELD%CDIR
 !
 IHEXTOT = 2*JPHEXT+1
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X3',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X3',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC  .AND. TPFILE%NSUBFILES_IOZ==0 ) THEN ! sequential execution
@@ -565,11 +565,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -581,11 +581,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,YDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-        CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -596,8 +596,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (YDIR == 'XX' .OR. YDIR =='YY') THEN
       ! XX or YY Scatter Field
@@ -631,7 +631,7 @@ IF (IRESP==0) THEN
     ALLOCATE(ZSLICE_ll(0,0)) ! to avoid bug on test of size
     GALLOC_ll = .TRUE.
     DO JKK=1,IKU_ll
-      IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+      IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
       TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
       TZFIELD = TPFIELD
       WRITE(YSUFFIX,'(I4.4)') JKK
@@ -652,11 +652,11 @@ IF (IRESP==0) THEN
         WRITE(YK,'(I4.4)')  JKK
         YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK
         IF (TPFILE%CFORMAT=='NETCDF4') THEN
-          CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+          CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
         ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-          CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+          CALL IO_Field_read_lfi(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
         ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-          CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+          CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
         END IF
         CALL SECOND_MNH2(T1)
         TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0
@@ -696,7 +696,7 @@ IF (IRESP==0) THEN
       NB_REQ=0
       DO JKK=JK,JK_MAX
         IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-          IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+          IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
           TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
           TZFIELD = TPFIELD
           WRITE(YSUFFIX,'(I4.4)') JKK
@@ -718,11 +718,11 @@ IF (IRESP==0) THEN
           WRITE(YK,'(I4.4)')  JKK
           YRECZSLICE = TRIM(TPFIELD%CMNHNAME)//YK
           IF (TZFILE%CFORMAT=='NETCDF4') THEN
-            CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+            CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
           ELSE IF (TZFILE%CFORMAT=='LFI') THEN
-            CALL IO_READ_FIELD_LFI(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+            CALL IO_Field_read_lfi(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
           ELSE IF (TZFILE%CFORMAT=='LFICDF4') THEN
-            CALL IO_READ_FIELD_NC4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
+            CALL IO_Field_read_nc4(TZFILE,TZFIELD,ZSLICE_ll,IRESP_TMP)
           END IF
           CALL SECOND_MNH2(T1)
           TIMEZ%T_READ3D_READ=TIMEZ%T_READ3D_READ + T1 - T0
@@ -771,7 +771,7 @@ IF (IRESP==0) THEN
             ! get the file & rank
             !
             IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-               IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+               IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
                TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
             ELSE
               TZFILE => TPFILE
@@ -808,8 +808,8 @@ IF (IRESP==0) THEN
     DEALLOCATE(REQ_TAB)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
 #endif
 !JUAN BG Z SLICE
@@ -827,13 +827,13 @@ CALL MPI_BARRIER(TPFILE%NMPICOMM,IERR)
 CALL SECOND_MNH2(T22)
 TIMEZ%T_READ3D_ALL=TIMEZ%T_READ3D_ALL + T22 - T11
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X3
+END SUBROUTINE IO_Field_read_byfield_X3
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X4(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPFILE
@@ -844,24 +844,24 @@ INTEGER,OPTIONAL,       INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X4
+END SUBROUTINE IO_Field_read_byname_X4
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,             ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll,   ONLY: ZONE_ll
+USE MODD_TIMEZ,          ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,     ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
@@ -875,14 +875,14 @@ LOGICAL                          :: GALLOC
 INTEGER                          :: IRESP
 INTEGER                          :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X4',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X4',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -894,11 +894,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -910,11 +910,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -925,8 +925,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -952,13 +952,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X4
+END SUBROUTINE IO_Field_read_byfield_X4
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X5(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
@@ -969,24 +969,24 @@ INTEGER,OPTIONAL,         INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X5
+END SUBROUTINE IO_Field_read_byname_X5
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,             ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll,   ONLY: ZONE_ll
+USE MODD_TIMEZ,          ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,     ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),                 INTENT(IN)    :: TPFILE
@@ -1000,14 +1000,14 @@ LOGICAL                            :: GALLOC
 INTEGER                            :: IRESP
 INTEGER                            :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X5',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X5',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -1019,11 +1019,11 @@ IF (IRESP==0) THEN
       ZFIELDP=>PFIELD(:,:,:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
       PFIELD(:,:,:,:,:)=SPREAD(SPREAD(PFIELD(JPHEXT+1,JPHEXT+1,:,:,:),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -1035,11 +1035,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1050,8 +1050,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -1077,13 +1077,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X5
+END SUBROUTINE IO_Field_read_byfield_X5
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_X6(TPFILE,HNAME,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),            INTENT(IN)    :: TPFILE
@@ -1094,24 +1094,24 @@ INTEGER,OPTIONAL,           INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_X6
+END SUBROUTINE IO_Field_read_byname_X6
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,             ONLY: GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
+USE MODD_STRUCTURE_ll,   ONLY: ZONE_ll
+USE MODD_TIMEZ,          ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
+USE MODE_MNH_TIMING,     ONLY: SECOND_MNH2
 USE MODE_SCATTER_ll
 !
 TYPE(TFILEDATA),                   INTENT(IN)    :: TPFILE
@@ -1125,34 +1125,34 @@ LOGICAL                              :: GALLOC
 INTEGER                              :: IRESP
 INTEGER                              :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 ZFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_X6',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_X6',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
     END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(ZFIELDP,PFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1163,8 +1163,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -1184,10 +1184,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_X6
+END SUBROUTINE IO_Field_read_byfield_X6
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_N0(TPFILE,HNAME,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1197,19 +1197,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_N0
+END SUBROUTINE IO_Field_read_byname_N0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP,GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1219,37 +1219,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_N0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(KFIELD,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1259,10 +1259,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_N0
+END SUBROUTINE IO_Field_read_byfield_N0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_N1(TPFILE,HNAME,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),    INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1272,19 +1272,19 @@ INTEGER,OPTIONAL,    INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_N1
+END SUBROUTINE IO_Field_read_byname_N1
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 USE MODE_ALLOCBUFFER_ll
 USE MODE_SCATTER_ll
@@ -1299,32 +1299,32 @@ INTEGER                      :: IRESP
 INTEGER,DIMENSION(:),POINTER :: IFIELDP
 LOGICAL                      :: GALLOC
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 IFIELDP => NULL()
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N1',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_N1',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1335,8 +1335,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR /= 'XX' .AND. TPFIELD%CDIR /='YY') THEN
       ! Broadcast Field
@@ -1354,13 +1354,13 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_N1
+END SUBROUTINE IO_Field_read_byfield_N1
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_N2(TPFILE,HNAME,KFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
+USE MODD_IO,           ONLY: ISNPROC
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
 !
 !
 TYPE(TFILEDATA),       INTENT(IN)    :: TPFILE
@@ -1371,21 +1371,21 @@ INTEGER,OPTIONAL,      INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID    ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_N2
+END SUBROUTINE IO_Field_read_byname_N2
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_IO_ll,        ONLY : GSMONOPROC,ISP,ISNPROC,LPACK,L1D,L2D
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_TIMEZ,        ONLY : TIMEZ
+USE MODD_IO,           ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L1D, L2D
+USE MODD_STRUCTURE_ll, ONLY: ZONE_ll
+USE MODD_TIMEZ,        ONLY: TIMEZ
 !
 USE MODE_ALLOCBUFFER_ll
 USE MODE_SCATTER_ll
@@ -1401,14 +1401,14 @@ LOGICAL                         :: GALLOC
 INTEGER                         :: IRESP
 INTEGER                         :: IHEXTOT
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 GALLOC = .FALSE.
 IRESP = 0
 IFIELDP => NULL()
 !
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_N2',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_N2',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -1420,11 +1420,11 @@ IF (IRESP==0) THEN
       IFIELDP=>KFIELD(:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
     END IF
     IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
       KFIELD(:,:)=SPREAD(SPREAD(KFIELD(JPHEXT+1,JPHEXT+1),DIM=1,NCOPIES=IHEXTOT),DIM=2,NCOPIES=IHEXTOT)
@@ -1436,11 +1436,11 @@ IF (IRESP==0) THEN
       ! I/O process case
       CALL ALLOCBUFFER_ll(IFIELDP,KFIELD,TPFIELD%CDIR,GALLOC)
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
       END IF
     ELSE
       !Not really necessary but useful to suppress alerts with Valgrind
@@ -1451,8 +1451,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     IF (TPFIELD%CDIR == 'XX' .OR. TPFIELD%CDIR == 'YY') THEN
       ! XX or YY Scatter Field
@@ -1481,10 +1481,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_N2
+END SUBROUTINE IO_Field_read_byfield_N2
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_L0(TPFILE,HNAME,OFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1494,19 +1494,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_L0
+END SUBROUTINE IO_Field_read_byname_L0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1516,37 +1516,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_L0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_L0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(OFIELD,1,MPI_LOGICAL,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1556,10 +1556,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_L0
+END SUBROUTINE IO_Field_read_byfield_L0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_L1(TPFILE,HNAME,OFIELD,KRESP)
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),    INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1569,19 +1569,19 @@ INTEGER,OPTIONAL,    INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_L1
+END SUBROUTINE IO_Field_read_byname_L1
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
@@ -1591,37 +1591,37 @@ INTEGER,OPTIONAL,    INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_L1',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_L1',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(OFIELD,SIZE(OFIELD),MPI_LOGICAL,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1631,10 +1631,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_L1
+END SUBROUTINE IO_Field_read_byfield_L1
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP)
+SUBROUTINE IO_Field_read_byname_C0(TPFILE,HNAME,HFIELD,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1644,19 +1644,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_C0
+END SUBROUTINE IO_Field_read_byname_C0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_read_byfield_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1666,37 +1666,37 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER                      :: IERR
 INTEGER                      :: IRESP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_C0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_C0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
       END IF
     END IF
     !
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(HFIELD,LEN(HFIELD),MPI_CHARACTER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
   END IF
@@ -1706,10 +1706,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_C0
+END SUBROUTINE IO_Field_read_byfield_C0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_T0(TPFILE,HNAME,TPDATA,KRESP)
+SUBROUTINE IO_Field_read_byname_T0(TPFILE,HNAME,TPDATA,KRESP)
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*), INTENT(IN)    :: HNAME    ! name of the field to write
@@ -1719,19 +1719,19 @@ INTEGER,OPTIONAL, INTENT(OUT)   :: KRESP    ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD(TPFILE,TFIELDLIST(ID),TPDATA,IRESP)
+IF(IRESP==0) CALL IO_Field_read(TPFILE,TFIELDLIST(ID),TPDATA,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_T0
+END SUBROUTINE IO_Field_read_byname_T0
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_read_byfield_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
-USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+USE MODD_IO, ONLY: ISP, GSMONOPROC
 !
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
@@ -1742,29 +1742,29 @@ INTEGER                      :: IERR
 INTEGER                      :: IRESP
 INTEGER,DIMENSION(3)         :: ITDATE
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_T0',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_T0',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       END IF
   ELSE
     IF (ISP == TPFILE%NMASTER_RANK)  THEN
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-         CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-         CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TPDATA,IRESP)
+         CALL IO_Field_read_lfi(TPFILE,TPFIELD,TPDATA,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TPDATA,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TPDATA,IRESP)
       END IF
       ITDATE(1) = TPDATA%TDATE%YEAR
       ITDATE(2) = TPDATA%TDATE%MONTH
@@ -1774,8 +1774,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     CALL MPI_BCAST(ITDATE,     3,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     CALL MPI_BCAST(TPDATA%TIME,1,MPI_FLOAT,  TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1789,10 +1789,10 @@ IF (IRESP==-111) IRESP = 0 !-111 is not really an error (metadata has changed)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_T0
+END SUBROUTINE IO_Field_read_byfield_T0
 
 
-SUBROUTINE IO_READ_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP)
+SUBROUTINE IO_Field_read_byname_lb(TPFILE,HNAME,KL3D,KRIM,PLB,KRESP)
 !
 TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
 CHARACTER(LEN=*),              INTENT(IN)    :: HNAME   ! name of the field to write
@@ -1804,26 +1804,26 @@ INTEGER,OPTIONAL,              INTENT(OUT)   :: KRESP   ! return-code
 INTEGER :: ID ! Index of the field
 INTEGER :: IRESP ! return_code
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byname_lb',TRIM(TPFILE%CNAME)//': reading '//TRIM(HNAME))
 !
 CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
 !
-IF(IRESP==0) CALL IO_READ_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,KRIM,PLB,IRESP)
+IF(IRESP==0) CALL IO_Field_read_lb(TPFILE,TFIELDLIST(ID),KL3D,KRIM,PLB,IRESP)
 !
 IF (PRESENT(KRESP)) KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_BYNAME_LB
+END SUBROUTINE IO_Field_read_byname_lb
 
-SUBROUTINE IO_READ_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP)
+SUBROUTINE IO_Field_read_byfield_lb(TPFILE,TPFIELD,KL3D,KRIM,PLB,KRESP)
 !
-USE MODD_IO_ll,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
-USE MODD_PARAMETERS_ll,ONLY : JPHEXT
-USE MODD_TIMEZ,        ONLY : TIMEZ
-USE MODD_VAR_ll,       ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,            ONLY: GSMONOPROC, ISP, ISNPROC, LPACK, L2D
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_TIMEZ,         ONLY: TIMEZ
+USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
 !
-USE MODE_DISTRIB_LB
-USE MODE_MNH_TIMING,   ONLY : SECOND_MNH2
-USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
+USE MODE_DISTRIB_lb
+USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
 !
 TYPE(TFILEDATA),               INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),              INTENT(INOUT) :: TPFIELD
@@ -1854,12 +1854,12 @@ REAL(KIND=8),DIMENSION(2)                :: T0,T1,T2,T3
 REAL(KIND=8),DIMENSION(2)                :: T11,T22
 TYPE(TX_3DP),ALLOCATABLE,DIMENSION(:)    :: T_TX3DP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_BYFIELD_LB','reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_byfield_lb','reading '//TRIM(TPFIELD%CMNHNAME))
 !
 YLBTYPE  = TPFIELD%CLBTYPE
 !
 IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_BYFIELD_LB',TRIM(TPFILE%CNAME)//': invalid CLBTYPE (' &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_byfield_lb',TRIM(TPFILE%CNAME)//': invalid CLBTYPE (' &
                  //TRIM(TPFIELD%CLBTYPE)//') for '//TRIM(TPFIELD%CMNHNAME))
   RETURN
 END IF
@@ -1870,7 +1870,7 @@ CALL SECOND_MNH2(T11)
 IRESP = 0
 !------------------------------------------------------------------
 IHEXTOT = 2*JPHEXT+1
-CALL IO_FILE_READ_CHECK(TPFILE,'IO_READ_FIELD_BYFIELD_LB',IRESP)
+CALL IO_File_read_check(TPFILE,'IO_Field_read_byfield_lb',IRESP)
 !
 IF (IRESP==0) THEN
   IF (GSMONOPROC) THEN ! sequential execution
@@ -1888,11 +1888,11 @@ IF (IRESP==0) THEN
       TX3DP => Z3D(:,:,:)
     END IF
     IF (TPFILE%CFORMAT=='NETCDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-      CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
+      CALL IO_Field_read_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
     ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-      CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+      CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
     END IF
     IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
       IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
@@ -1920,11 +1920,11 @@ IF (IRESP==0) THEN
         TX3DP => Z3D(:,:,:)
       END IF
       IF (TPFILE%CFORMAT=='NETCDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFI') THEN
-        CALL IO_READ_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
+        CALL IO_Field_read_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
       ELSE IF (TPFILE%CFORMAT=='LFICDF4') THEN
-        CALL IO_READ_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+        CALL IO_Field_read_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
       END IF
       IF (YLBTYPE == 'LBX' .OR. YLBTYPE == 'LBXU') THEN
         IF (LPACK .AND. L2D) Z3D(:,:,:) = SPREAD(Z3D(:,JPHEXT+1,:),DIM=2,NCOPIES=IHEXTOT)
@@ -1941,8 +1941,8 @@ IF (IRESP==0) THEN
     CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
     !
     !Broadcast header only if IRESP==-111
-    !because metadata of field has been modified in IO_READ_FIELD_xxx
-    IF (IRESP==-111) CALL IO_BCAST_FIELD_METADATA(TPFILE,TPFIELD)
+    !because metadata of field has been modified in IO_Field_read_xxx
+    IF (IRESP==-111) CALL IO_Field_metadata_bcast(TPFILE,TPFIELD)
     !
     NB_REQ=0
     ALLOCATE(REQ_TAB(ISNPROC-1))
@@ -1954,7 +1954,7 @@ IF (IRESP==0) THEN
       ALLOCATE(T_TX3DP(ISNPROC-1))
       IKU = SIZE(Z3D,3)
       DO JI = 1,ISNPROC
-        CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE)
+        CALL GET_DISTRIB_lb(YLBTYPE,JI,'FM','READ',KRIM,IIB,IIE,IJB,IJE)
         IF (IIB /= 0) THEN
           TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
           IF (ISP /= JI) THEN
@@ -1964,7 +1964,7 @@ IF (IRESP==0) THEN
             CALL MPI_ISEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,REQ_TAB(NB_REQ),IERR)
             !CALL MPI_BSEND(T_TX3DP(NB_REQ)%X,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,IERR)
           ELSE
-            CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
+            CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
             PLB(IIB:IIE,IJB:IJE,:) = TX3DP(:,:,:)
           END IF
         END IF
@@ -1986,7 +1986,7 @@ IF (IRESP==0) THEN
        CALL SECOND_MNH2(T0)
       !ALLOCATE(REQ_TAB(1))
       !REQ_TAB=MPI_REQUEST_NULL
-      CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
+      CALL GET_DISTRIB_lb(YLBTYPE,ISP,'LOC','READ',KRIM,IIB,IIE,IJB,IJE)
       IF (IIB /= 0) THEN
         TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
         CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,TPFILE%NMASTER_RANK-1,99,TPFILE%NMPICOMM,STATUS,IERR)
@@ -2011,6 +2011,6 @@ IF (PRESENT(KRESP)) KRESP = IRESP
 CALL SECOND_MNH2(T22)
 TIMEZ%T_READLB_ALL=TIMEZ%T_READLB_ALL + T22 - T11
 !
-END SUBROUTINE IO_READ_FIELD_BYFIELD_LB
+END SUBROUTINE IO_Field_read_byfield_lb
 
-END MODULE MODE_FMREAD
+END MODULE MODE_IO_FIELD_READ
diff --git a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90 b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
index 41c659421..5eddb048c 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_field_write.f90
@@ -4,10 +4,11 @@
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
-!  J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 10/01/2019: do not write scalars in Z-split files
-!  Philippe Wautelet: 10/01/2019: write header also for Z-split files
+!  J. Escobar  15/09/2015: WENO5 & JPHEXT <> 1
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/01/2019: do not write scalars in Z-split files
+!  P. Wautelet 10/01/2019: write header also for Z-split files
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 
 #ifdef MNH_MPI_DOUBLE_PRECISION
@@ -18,10 +19,10 @@
 
 #define MNH_SCALARS_IN_SPLITFILES 0
 
-MODULE MODE_FMWRIT
+MODULE MODE_IO_FIELD_WRITE
 
   USE MODD_MPIF
-  USE MODD_IO_ll, ONLY: TFILEDATA
+  USE MODD_IO, ONLY: TFILEDATA, TOUTBAK
 
   USE MODE_FIELD
   USE MODE_IO_WRITE_LFI
@@ -33,41 +34,42 @@ MODULE MODE_FMWRIT
 
   PRIVATE
 
-  INTERFACE IO_WRITE_FIELD
-     MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_X0, IO_WRITE_FIELD_BYNAME_X1,  &
-                      IO_WRITE_FIELD_BYNAME_X2, IO_WRITE_FIELD_BYNAME_X3,  &
-                      IO_WRITE_FIELD_BYNAME_X4, IO_WRITE_FIELD_BYNAME_X5,  &
-                      IO_WRITE_FIELD_BYNAME_X6,                            &
-                      IO_WRITE_FIELD_BYNAME_N0, IO_WRITE_FIELD_BYNAME_N1,  &
-                      IO_WRITE_FIELD_BYNAME_N2, IO_WRITE_FIELD_BYNAME_N3,  &
-                      IO_WRITE_FIELD_BYNAME_L0, IO_WRITE_FIELD_BYNAME_L1,  &
-                      IO_WRITE_FIELD_BYNAME_C0, IO_WRITE_FIELD_BYNAME_C1,  &
-                      IO_WRITE_FIELD_BYNAME_T0,                            &
-                      IO_WRITE_FIELD_BYFIELD_X0,IO_WRITE_FIELD_BYFIELD_X1, &
-                      IO_WRITE_FIELD_BYFIELD_X2,IO_WRITE_FIELD_BYFIELD_X3, &
-                      IO_WRITE_FIELD_BYFIELD_X4,IO_WRITE_FIELD_BYFIELD_X5, &
-                      IO_WRITE_FIELD_BYFIELD_X6,                           &
-                      IO_WRITE_FIELD_BYFIELD_N0,IO_WRITE_FIELD_BYFIELD_N1, &
-                      IO_WRITE_FIELD_BYFIELD_N2,IO_WRITE_FIELD_BYFIELD_N3, &
-                      IO_WRITE_FIELD_BYFIELD_L0,IO_WRITE_FIELD_BYFIELD_L1, &
-                      IO_WRITE_FIELD_BYFIELD_C0,IO_WRITE_FIELD_BYFIELD_C1, &
-                      IO_WRITE_FIELD_BYFIELD_T0
+  public :: IO_Field_write, IO_Field_write_box, IO_Field_write_lb
+  public :: IO_Header_write
+  public :: IO_Fieldlist_write, IO_Field_user_write
+
+  INTERFACE IO_Field_write
+     MODULE PROCEDURE IO_Field_write_byname_X0, IO_Field_write_byname_X1,  &
+                      IO_Field_write_byname_X2, IO_Field_write_byname_X3,  &
+                      IO_Field_write_byname_X4, IO_Field_write_byname_X5,  &
+                      IO_Field_write_byname_X6,                            &
+                      IO_Field_write_byname_N0, IO_Field_write_byname_N1,  &
+                      IO_Field_write_byname_N2, IO_Field_write_byname_N3,  &
+                      IO_Field_write_byname_L0, IO_Field_write_byname_L1,  &
+                      IO_Field_write_byname_C0, IO_Field_write_byname_C1,  &
+                      IO_Field_write_byname_T0,                            &
+                      IO_Field_write_byfield_X0,IO_Field_write_byfield_X1, &
+                      IO_Field_write_byfield_X2,IO_Field_write_byfield_X3, &
+                      IO_Field_write_byfield_X4,IO_Field_write_byfield_X5, &
+                      IO_Field_write_byfield_X6,                           &
+                      IO_Field_write_byfield_N0,IO_Field_write_byfield_N1, &
+                      IO_Field_write_byfield_N2,IO_Field_write_byfield_N3, &
+                      IO_Field_write_byfield_L0,IO_Field_write_byfield_L1, &
+                      IO_Field_write_byfield_C0,IO_Field_write_byfield_C1, &
+                      IO_Field_write_byfield_T0
   END INTERFACE
 
-  INTERFACE IO_WRITE_FIELD_BOX
-     MODULE PROCEDURE IO_WRITE_FIELD_BOX_BYFIELD_X5
+  INTERFACE IO_Field_write_box
+     MODULE PROCEDURE IO_Field_write_box_byfield_X5
   END INTERFACE
 
-  INTERFACE IO_WRITE_FIELD_LB
-     MODULE PROCEDURE IO_WRITE_FIELD_BYNAME_LB, IO_WRITE_FIELD_BYFIELD_LB
+  INTERFACE IO_Field_write_lb
+     MODULE PROCEDURE IO_Field_write_byname_lb, IO_Field_write_byfield_lb
   END INTERFACE
 
-  PUBLIC IO_WRITE_FIELD, IO_WRITE_FIELD_BOX, IO_WRITE_FIELD_LB
-  PUBLIC IO_WRITE_HEADER
-
 CONTAINS 
 
-  SUBROUTINE FIELD_METADATA_CHECK(TPFIELD,KTYPE,KDIMS,HCALLER)
+  SUBROUTINE IO_Field_metadata_check(TPFIELD,KTYPE,KDIMS,HCALLER)
     TYPE(TFIELDDATA), INTENT(IN) :: TPFIELD ! Field to check
     INTEGER,          INTENT(IN) :: KTYPE   ! Expected datatype
     INTEGER,          INTENT(IN) :: KDIMS   ! Expected number of dimensions
@@ -113,10 +115,10 @@ CONTAINS
       END SELECT
       !
     END SUBROUTINE TYPE_WRITE
-  END SUBROUTINE FIELD_METADATA_CHECK
+  END SUBROUTINE IO_Field_metadata_check
 
 
-  SUBROUTINE IO_FILE_WRITE_CHECK(TPFILE,HSUBR,KRESP)
+  SUBROUTINE IO_File_write_check(TPFILE,HSUBR,KRESP)
     TYPE(TFILEDATA),  INTENT(IN)  :: TPFILE
     CHARACTER(LEN=*), INTENT(IN)  :: HSUBR
     INTEGER,          INTENT(OUT) :: KRESP
@@ -144,10 +146,10 @@ CONTAINS
       RETURN
     END IF
     !
-  END SUBROUTINE IO_FILE_WRITE_CHECK
+  END SUBROUTINE IO_File_write_check
 
 
-  SUBROUTINE IO_WRITE_SELECT_FORMAT(TPFILE,OLFI,ONC4)
+  SUBROUTINE IO_Format_write_select(TPFILE,OLFI,ONC4)
     TYPE(TFILEDATA), INTENT(IN)  :: TPFILE ! File structure
     LOGICAL,         INTENT(OUT) :: OLFI   ! Write in LFI format?
     LOGICAL,         INTENT(OUT) :: ONC4   ! Write in netCDF format?
@@ -156,27 +158,27 @@ CONTAINS
     ONC4 = .FALSE.
     IF (TPFILE%CFORMAT=='LFI'     .OR. TPFILE%CFORMAT=='LFICDF4') OLFI = .TRUE.
     IF (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4') ONC4 = .TRUE.
-  END SUBROUTINE IO_WRITE_SELECT_FORMAT
+  END SUBROUTINE IO_Format_write_select
 
 
-  SUBROUTINE IO_WRITE_HEADER(TPFILE,HDAD_NAME)
+  SUBROUTINE IO_Header_write(TPFILE,HDAD_NAME)
     TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE   ! File structure
     CHARACTER(LEN=*),OPTIONAL,INTENT(IN)  :: HDAD_NAME
 
     integer :: ifile
 
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_FILE','called for file '//TRIM(TPFILE%CNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_write_FILE','called for file '//TRIM(TPFILE%CNAME))
 
-    CALL IO_WRITE_HEADER_ONEFILE(TPFILE,HDAD_NAME)
+    CALL IO_Header_onefile_write(TPFILE,HDAD_NAME)
 
     !Write header also for the Z-split files
     DO IFILE=1,TPFILE%NSUBFILES_IOZ
-      CALL IO_WRITE_HEADER_ONEFILE(TPFILE%TFILES_IOZ(IFILE)%TFILE,HDAD_NAME)
+      CALL IO_Header_onefile_write(TPFILE%TFILES_IOZ(IFILE)%TFILE,HDAD_NAME)
     END DO
-  END SUBROUTINE IO_WRITE_HEADER
+  END SUBROUTINE IO_Header_write
 
 
-  SUBROUTINE IO_WRITE_HEADER_ONEFILE(TPFILE,HDAD_NAME)
+  SUBROUTINE IO_Header_onefile_write(TPFILE,HDAD_NAME)
     !
     USE MODD_CONF
     USE MODD_CONF_n,     ONLY: CSTORAGE_TYPE
@@ -188,23 +190,23 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE :: YDAD_NAME
     INTEGER                      :: ILEN,ILEN2
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_ONEFILE','called for file '//TRIM(TPFILE%CNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_onefile_write','called for file '//TRIM(TPFILE%CNAME))
     !
     IF ( ASSOCIATED(TPFILE%TDADFILE) .AND. PRESENT(HDAD_NAME) ) THEN
       IF ( TRIM(TPFILE%TDADFILE%CNAME) /= TRIM(HDAD_NAME) ) THEN
-        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_HEADER_ONEFILE','TPFILE%TDADFILE%CNAME /= HDAD_NAME')
+        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Header_onefile_write','TPFILE%TDADFILE%CNAME /= HDAD_NAME')
       END IF
     END IF
     !
-    CALL IO_WRITE_HEADER_NC4(TPFILE)
+    CALL IO_Header_write_nc4(TPFILE)
     !
-    CALL IO_WRITE_FIELD(TPFILE,'MNHVERSION',  NMNHVERSION)
-    CALL IO_WRITE_FIELD(TPFILE,'MASDEV',      NMASDEV)
-    CALL IO_WRITE_FIELD(TPFILE,'BUGFIX',      NBUGFIX)
-    CALL IO_WRITE_FIELD(TPFILE,'BIBUSER',     CBIBUSER)
-    CALL IO_WRITE_FIELD(TPFILE,'PROGRAM',     CPROGRAM)
-    CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
-    CALL IO_WRITE_FIELD(TPFILE,'MY_NAME',     TPFILE%CNAME)
+    CALL IO_Field_write(TPFILE,'MNHVERSION',  NMNHVERSION)
+    CALL IO_Field_write(TPFILE,'MASDEV',      NMASDEV)
+    CALL IO_Field_write(TPFILE,'BUGFIX',      NBUGFIX)
+    CALL IO_Field_write(TPFILE,'BIBUSER',     CBIBUSER)
+    CALL IO_Field_write(TPFILE,'PROGRAM',     CPROGRAM)
+    CALL IO_Field_write(TPFILE,'STORAGE_TYPE',CSTORAGE_TYPE)
+    CALL IO_Field_write(TPFILE,'MY_NAME',     TPFILE%CNAME)
     !
     IF ( ASSOCIATED(TPFILE%TDADFILE) ) THEN
       ILEN  = LEN_TRIM(TPFILE%TDADFILE%CNAME)
@@ -227,18 +229,18 @@ CONTAINS
         YDAD_NAME(:) = ' '
       END IF
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_ONEFILE',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_onefile_write',TRIM(TPFILE%CNAME)// &
                      ': TPFILE%TDADFILE not associated and HDAD_NAME not provided')
       ALLOCATE(CHARACTER(LEN=NFILENAMELGTMAXLFI) :: YDAD_NAME)
       YDAD_NAME(:) = ' '
     ENDIF
-    CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME',YDAD_NAME)
+    CALL IO_Field_write(TPFILE,'DAD_NAME',YDAD_NAME)
     DEALLOCATE(YDAD_NAME)
     !
-  END SUBROUTINE IO_WRITE_HEADER_ONEFILE
+  END SUBROUTINE IO_Header_onefile_write
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X0(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X0(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -252,21 +254,21 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X0
+  END SUBROUTINE IO_Field_write_byname_X0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll, ONLY: GSMONOPROC,ISP
+  SUBROUTINE IO_Field_write_byfield_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISP
     !
-    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
     !
     IMPLICIT NONE
     !
@@ -298,22 +300,22 @@ CONTAINS
     IRESP = 0
     TZFILE => NULL()
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X0',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X0',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,0,'IO_WRITE_FIELD_BYFIELD_X0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,0,'IO_Field_write_byfield_X0')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
        ELSE ! multiprocesses execution
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -324,8 +326,8 @@ CONTAINS
           DO IK_FILE=1,TPFILE%NSUBFILES_IOZ
              TZFILE => TPFILE%TFILES_IOZ(IK_FILE)%TFILE
              IF ( ISP == TZFILE%NMASTER_RANK )  THEN
-                IF (GLFI) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,PFIELD,IRESP)
-                IF (GNC4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,PFIELD,IRESP)
+                IF (GLFI) CALL IO_Field_write_lfi(TZFILE,TPFIELD,PFIELD,IRESP)
+                IF (GNC4) CALL IO_Field_write_nc4(TZFILE,TPFIELD,PFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -335,13 +337,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X0
+  END SUBROUTINE IO_Field_write_byfield_X0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X1(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X1(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -355,23 +357,23 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return-code 
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X1
+  END SUBROUTINE IO_Field_write_byname_X1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X1(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll, ONLY: GSMONOPROC,ISP
+  SUBROUTINE IO_Field_write_byfield_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISP
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
     !
     IMPLICIT NONE
     !
@@ -404,18 +406,18 @@ CONTAINS
     YRECFM   = TPFIELD%CMNHNAME
     YDIR     = TPFIELD%CDIR
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,1,'IO_WRITE_FIELD_BYFIELD_X1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,1,'IO_Field_write_byfield_X1')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X1',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
        ELSE ! multiprocesses execution
 #if ( MNH_INT == 4 )
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
@@ -423,7 +425,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -440,8 +442,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -451,14 +453,14 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X1',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X1
+  END SUBROUTINE IO_Field_write_byfield_X1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X2(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X2(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -472,28 +474,28 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return-code 
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X2
+  END SUBROUTINE IO_Field_write_byname_X2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X2(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC,ISP,L1D,L2D,LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
 #ifdef MNH_GA
     USE MODE_GA
 #endif 
     USE MODE_GATHER_ll
-    USE MODE_MNH_TIMING, ONLY : SECOND_MNH2
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
     !
     IMPLICIT NONE
     !
@@ -535,29 +537,29 @@ CONTAINS
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,2,'IO_WRITE_FIELD_BYFIELD_X2')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,2,'IO_Field_write_byfield_X2')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X2',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X2',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN 
           IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN 
              ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSE ! multiprocesses execution
           CALL SECOND_MNH2(T0)
@@ -567,7 +569,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -616,8 +618,8 @@ CONTAINS
           TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0
           !
           IF (ISP == TPFILE%NMASTER_RANK) THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
 #ifdef MNH_GA
          call ga_sync
@@ -632,16 +634,16 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X2',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X2',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X2
+  END SUBROUTINE IO_Field_write_byfield_X2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X3(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X3(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -655,31 +657,31 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X3
+  END SUBROUTINE IO_Field_write_byname_X3
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,            ONLY : GSMONOPROC,ISNPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll,    ONLY : JPHEXT
-    USE MODD_TIMEZ,            ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISNPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll,    ONLY: JPHEXT
+    USE MODD_TIMEZ,            ONLY: TIMEZ
+    USE MODD_VAR_ll,           ONLY: MNH_STATUSES_IGNORE
     !
     USE MODE_ALLOCBUFFER_ll
-    USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,         ONLY : IO_FILE
-    USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME
-    USE MODE_MNH_TIMING,       ONLY : SECOND_MNH2
 #ifdef MNH_GA
     USE MODE_GA
 #endif
-    USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+    USE MODE_GATHER_ll
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
+    USE MODE_IO_TOOLS,         ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,       ONLY: SECOND_MNH2
     !
     !
     !*      0.1   Declarations of arguments
@@ -737,31 +739,31 @@ CONTAINS
     GALLOC_ll = .FALSE.
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,3,'IO_WRITE_FIELD_BYFIELD_X3')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,3,'IO_Field_write_byfield_X3')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X3',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X3',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC .AND. TPFILE%NSUBFILES_IOZ==0 ) THEN ! sequential execution
           !    IF (LPACK .AND. L1D .AND. YDIR=='XY') THEN 
           IF (LPACK .AND. L1D .AND. SIZE(PFIELD,1)==IHEXTOT .AND. SIZE(PFIELD,2)==IHEXTOT) THEN 
              ZFIELDP=>PFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSEIF ( TPFILE%NSUBFILES_IOZ==0 .OR. YDIR=='--' ) THEN  ! multiprocesses execution & 1 proc IO
 #if ( MNH_INT == 4 )
@@ -770,7 +772,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -794,8 +796,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -807,7 +809,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -839,7 +841,7 @@ CONTAINS
          !
          DO JKK=1,IKU_ll
             !
-            IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+            IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
             TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
             !
             IK_RANK = TZFILE%NMASTER_RANK
@@ -860,8 +862,8 @@ CONTAINS
                CALL SECOND_MNH2(T1)
                TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0
                !
-               IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
-               IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+               IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+               IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
                CALL SECOND_MNH2(T2)
                TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1
             END IF
@@ -890,7 +892,7 @@ CONTAINS
                 ! get the file & rank to write this level
                 !
                 IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-                   IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+                   IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
                    TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
                 ELSE
                    TZFILE => TPFILE
@@ -931,7 +933,7 @@ CONTAINS
              !
              DO JKK=JK,JK_MAX
                 IF (TPFILE%NSUBFILES_IOZ .GT. 1 ) THEN
-                   IK_FILE = IO_FILE(JKK,TPFILE%NSUBFILES_IOZ)
+                   IK_FILE = IO_Level2filenumber_get(JKK,TPFILE%NSUBFILES_IOZ)
                    TZFILE => TPFILE%TFILES_IOZ(IK_FILE+1)%TFILE
                 ELSE
                    TZFILE => TPFILE
@@ -960,8 +962,8 @@ CONTAINS
                    END DO
                    CALL SECOND_MNH2(T1)
                    TIMEZ%T_WRIT3D_RECV=TIMEZ%T_WRIT3D_RECV + T1 - T0
-                   IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
-                   IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+                   IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
+                   IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZSLICE_ll,IRESP,KVERTLEVEL=JKK,KZFILE=IK_FILE+1)
                    CALL SECOND_MNH2(T2)
                    TIMEZ%T_WRIT3D_WRIT=TIMEZ%T_WRIT3D_WRIT + T2 - T1
                 END IF
@@ -986,17 +988,17 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X3',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X3',YMSG)
     END IF
     IF (GALLOC)    DEALLOCATE(ZFIELDP)
     IF (GALLOC_ll) DEALLOCATE(ZSLICE_ll)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X3
+  END SUBROUTINE IO_Field_write_byfield_X3
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X4(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X4(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1010,27 +1012,27 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X4
+  END SUBROUTINE IO_Field_write_byname_X4
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,      ONLY : IO_FILE,IO_RANK
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODE_IO_TOOLS,      ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
     !
     !*      0.1   Declarations of arguments
@@ -1064,13 +1066,13 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X4',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X4',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,4,'IO_WRITE_FIELD_BYFIELD_X4')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,4,'IO_Field_write_byfield_X4')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X4',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X4',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
@@ -1080,11 +1082,11 @@ CONTAINS
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSE
 #if ( MNH_INT == 4 )
@@ -1093,7 +1095,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X4','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1116,8 +1118,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1127,14 +1129,14 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X4',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X4',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X4
+  END SUBROUTINE IO_Field_write_byfield_X4
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X5(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X5(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1148,27 +1150,27 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X5
+  END SUBROUTINE IO_Field_write_byname_X5
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,      ONLY : IO_FILE,IO_RANK
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODE_IO_TOOLS,      ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
     !
     !*      0.1   Declarations of arguments
@@ -1202,13 +1204,13 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X5',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X5',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,5,'IO_WRITE_FIELD_BYFIELD_X5')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,5,'IO_Field_write_byfield_X5')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X5',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X5',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
@@ -1218,11 +1220,11 @@ CONTAINS
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(PFIELD,2)==IHEXTOT) THEN
              ZFIELDP=>PFIELD(:,JPHEXT+1:JPHEXT+1,:,:,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
           END IF
        ELSE
 #if ( MNH_INT == 4 )
@@ -1231,7 +1233,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X5','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1255,8 +1257,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1266,14 +1268,14 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X5',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X5',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X5
+  END SUBROUTINE IO_Field_write_byfield_X5
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_X6(TPFILE,HNAME,PFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_X6(TPFILE,HNAME,PFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1287,26 +1289,26 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),PFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_X6
+  END SUBROUTINE IO_Field_write_byname_X6
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6(TPFILE,TPFIELD,PFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_IO_TOOLS,      ONLY : IO_FILE,IO_RANK
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODE_IO_TOOLS,      ONLY: IO_Level2filenumber_get
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
     !
     !*      0.1   Declarations of arguments
@@ -1340,18 +1342,18 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_X6',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_X6',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEREAL,6,'IO_WRITE_FIELD_BYFIELD_X6')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEREAL,6,'IO_Field_write_byfield_X6')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_X6',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_X6',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PFIELD,IRESP)
        ELSE
 #if ( MNH_INT == 4 )
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
@@ -1359,7 +1361,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(PFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_X6','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1378,8 +1380,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1389,14 +1391,14 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_X6',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_X6',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_X6
+  END SUBROUTINE IO_Field_write_byfield_X6
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N0(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N0(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1410,19 +1412,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N0
+  END SUBROUTINE IO_Field_write_byname_N0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0(TPFILE,TPFIELD,KFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !*      0.    DECLARATIONS
     !             ------------
     !
@@ -1447,22 +1449,22 @@ CONTAINS
     IRESP = 0
     TZFILE => NULL()
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,0,'IO_WRITE_FIELD_BYFIELD_N0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,0,'IO_Field_write_byfield_N0')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1473,8 +1475,8 @@ CONTAINS
           DO IK_FILE=1,TPFILE%NSUBFILES_IOZ
              TZFILE => TPFILE%TFILES_IOZ(IK_FILE)%TFILE
              IF ( ISP == TZFILE%NMASTER_RANK )  THEN
-                IF (GLFI) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,KFIELD,IRESP)
-                IF (GNC4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,KFIELD,IRESP)
+                IF (GLFI) CALL IO_Field_write_lfi(TZFILE,TPFIELD,KFIELD,IRESP)
+                IF (GNC4) CALL IO_Field_write_nc4(TZFILE,TPFIELD,KFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -1484,13 +1486,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N0
+  END SUBROUTINE IO_Field_write_byfield_N0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N1(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N1(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1504,20 +1506,20 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N1
+  END SUBROUTINE IO_Field_write_byname_N1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byfield_N1(TPFILE,TPFIELD,KFIELD,KRESP)
     !
-    USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+    USE MODD_IO, ONLY: ISP,GSMONOPROC
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
@@ -1552,18 +1554,18 @@ CONTAINS
     IRESP = 0
     GALLOC = .FALSE.
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,1,'IO_WRITE_FIELD_BYFIELD_N1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,1,'IO_Field_write_byfield_N1')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N1',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
        ELSE ! multiprocesses execution
 #if ( MNH_INT == 4 )
           CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
@@ -1571,7 +1573,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1588,8 +1590,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1599,15 +1601,15 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N1',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(IFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N1
+  END SUBROUTINE IO_Field_write_byfield_N1
 
   
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N2(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N2(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1621,25 +1623,25 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N2
+  END SUBROUTINE IO_Field_write_byname_N2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2(TPFILE,TPFIELD,KFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
     !
     IMPLICIT NONE
     !
@@ -1677,30 +1679,30 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N2',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,2,'IO_WRITE_FIELD_BYFIELD_N2')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,2,'IO_Field_write_byfield_N2')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N2',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N2',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
           IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN 
              IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
              IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
           END IF
        ELSE ! multiprocesses execution
 #if ( MNH_INT == 4 )
@@ -1709,7 +1711,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N2','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1736,8 +1738,8 @@ CONTAINS
           TIMEZ%T_WRIT2D_GATH=TIMEZ%T_WRIT2D_GATH + T1 - T0
           !
           IF (ISP == TPFILE%NMASTER_RANK) THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           END IF
           CALL SECOND_MNH2(T2)
           TIMEZ%T_WRIT2D_WRIT=TIMEZ%T_WRIT2D_WRIT + T2 - T1
@@ -1749,17 +1751,17 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N2',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N2',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(IFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT2D_ALL=TIMEZ%T_WRIT2D_ALL + T22 - T11
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N2
+  END SUBROUTINE IO_Field_write_byfield_N2
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_N3(TPFILE,HNAME,KFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_N3(TPFILE,HNAME,KFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1773,24 +1775,24 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),KFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_N3
+  END SUBROUTINE IO_Field_write_byname_N3
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3(TPFILE,TPFIELD,KFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_TIMEZ,         ONLY : TIMEZ
+  SUBROUTINE IO_Field_write_byfield_N3(TPFILE,TPFIELD,KFIELD,KRESP)
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_TIMEZ,         ONLY: TIMEZ
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
-    USE MODE_MNH_TIMING,    ONLY : SECOND_MNH2
+    USE MODE_MNH_TIMING,    ONLY: SECOND_MNH2
     !
     IMPLICIT NONE
     !
@@ -1827,30 +1829,30 @@ CONTAINS
     !
     IHEXTOT = 2*JPHEXT+1
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_N3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_N3',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     CALL SECOND_MNH2(T11)
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEINT,3,'IO_WRITE_FIELD_BYFIELD_N3')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEINT,3,'IO_Field_write_byfield_N3')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_N3',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_N3',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
           IF (LPACK .AND. L1D .AND. SIZE(KFIELD,1)==IHEXTOT .AND. SIZE(KFIELD,2)==IHEXTOT) THEN 
              IFIELDP=>KFIELD(JPHEXT+1:JPHEXT+1,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
              !    ELSE IF (LPACK .AND. L2D .AND. YDIR=='XY') THEN
           ELSEIF (LPACK .AND. L2D .AND. SIZE(KFIELD,2)==IHEXTOT) THEN
              IFIELDP=>KFIELD(:,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,KFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,KFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,KFIELD,IRESP)
           END IF
        ELSE ! multiprocesses execution
 #if ( MNH_INT == 4 )
@@ -1859,7 +1861,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(KFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_N3','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -1883,8 +1885,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK) THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,IFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1894,17 +1896,17 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_N3',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_N3',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(IFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     CALL SECOND_MNH2(T22)
     TIMEZ%T_WRIT3D_ALL=TIMEZ%T_WRIT3D_ALL + T22 - T11
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_N3
+  END SUBROUTINE IO_Field_write_byfield_N3
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_L0(TPFILE,HNAME,OFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_L0(TPFILE,HNAME,OFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -1918,20 +1920,20 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_L0
+  END SUBROUTINE IO_Field_write_byname_L0
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0(TPFILE,TPFIELD,OFIELD,KRESP)
-    USE MODD_IO_ll,            ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+    USE MODD_IO,               ONLY: GSMONOPROC, ISP
     !
-    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+    USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
     !*      0.    DECLARATIONS
     !             ------------
     !
@@ -1956,22 +1958,22 @@ CONTAINS
     IRESP = 0
     TZFILE => NULL()
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,0,'IO_WRITE_FIELD_BYFIELD_L0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPELOG,0,'IO_Field_write_byfield_L0')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_L0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_L0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
        ELSE
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -1982,8 +1984,8 @@ CONTAINS
           DO IK_FILE=1,TPFILE%NSUBFILES_IOZ
              TZFILE => TPFILE%TFILES_IOZ(IK_FILE)%TFILE
              IF ( ISP == TZFILE%NMASTER_RANK )  THEN
-                IF (GLFI) CALL IO_WRITE_FIELD_LFI(TZFILE,TPFIELD,OFIELD,IRESP)
-                IF (GNC4) CALL IO_WRITE_FIELD_NC4(TZFILE,TPFIELD,OFIELD,IRESP)
+                IF (GLFI) CALL IO_Field_write_lfi(TZFILE,TPFIELD,OFIELD,IRESP)
+                IF (GNC4) CALL IO_Field_write_nc4(TZFILE,TPFIELD,OFIELD,IRESP)
              END IF
           END DO
        ENDIF
@@ -1993,13 +1995,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_L0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L0
+  END SUBROUTINE IO_Field_write_byfield_L0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_L1(TPFILE,HNAME,OFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_L1(TPFILE,HNAME,OFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2013,20 +2015,20 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),OFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_L1
+  END SUBROUTINE IO_Field_write_byname_L1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byfield_L1(TPFILE,TPFIELD,OFIELD,KRESP)
     !
-    USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
+    USE MODD_IO, ONLY: ISP, GSMONOPROC
     !
     USE MODE_ALLOCBUFFER_ll
     USE MODE_GATHER_ll
@@ -2061,18 +2063,18 @@ CONTAINS
     IRESP = 0
     GALLOC = .FALSE.
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_L1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_L1',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPELOG,1,'IO_WRITE_FIELD_BYFIELD_L1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPELOG,1,'IO_Field_write_byfield_L1')
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_L1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_L1',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,OFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,OFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,OFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,OFIELD,IRESP)
        ELSE ! multiprocesses execution
 #if ( MNH_INT == 4 )
           CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER,MPI_MAX,TPFILE%NMPICOMM,IRESP)
@@ -2080,7 +2082,7 @@ CONTAINS
           CALL MPI_ALLREDUCE(SIZE(OFIELD),ISIZEMAX,1,MPI_INTEGER8,MPI_MAX,TPFILE%NMPICOMM,IRESP)
 #endif
           IF (ISIZEMAX==0) THEN
-             CALL PRINT_MSG(NVERB_INFO,'IO','IO_WRITE_FIELD_BYFIELD_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
+             CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_write_byfield_L1','ignoring variable with a zero size ('//TRIM(YRECFM)//')')
              IF (PRESENT(KRESP)) KRESP=0
              RETURN
           END IF
@@ -2097,8 +2099,8 @@ CONTAINS
           END IF
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,GFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,GFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,GFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,GFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -2108,15 +2110,15 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_L1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_L1',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(GFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_L1
+  END SUBROUTINE IO_Field_write_byfield_L1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_C0(TPFILE,HNAME,HFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_C0(TPFILE,HNAME,HFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2130,19 +2132,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_C0
+  END SUBROUTINE IO_Field_write_byname_C0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0(TPFILE,TPFIELD,HFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
     !*      0.    DECLARATIONS
     !             ------------
@@ -2165,27 +2167,27 @@ CONTAINS
     !
     IRESP = 0
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,0,'IO_WRITE_FIELD_BYFIELD_C0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPECHAR,0,'IO_Field_write_byfield_C0')
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (LEN(HFIELD)==0 .AND. GLFI) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',&
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_C0',&
                      'zero-size string not allowed if LFI output for '//TRIM(TPFIELD%CMNHNAME))
     END IF
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_C0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_C0',IRESP)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,HFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,HFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -2195,13 +2197,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_C0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C0
+  END SUBROUTINE IO_Field_write_byfield_C0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_C1(TPFILE,HNAME,HFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_C1(TPFILE,HNAME,HFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2215,19 +2217,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),HFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_C1
+  END SUBROUTINE IO_Field_write_byname_C1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1(TPFILE,TPFIELD,HFIELD,KRESP)
-    USE MODD_IO_ll,         ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_C1(TPFILE,TPFIELD,HFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
     !*      0.    DECLARATIONS
     !             ------------
@@ -2252,13 +2254,13 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE     :: YMSG
     CHARACTER(LEN=6)                 :: YRESP
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPECHAR,1,'IO_WRITE_FIELD_BYFIELD_C1')
+    CALL IO_Field_metadata_check(TPFIELD,TYPECHAR,1,'IO_Field_write_byfield_C1')
     !
     IRESP = 0
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF(GLFI) THEN
       ILE=LEN(HFIELD)
@@ -2281,16 +2283,16 @@ CONTAINS
       END IF
     END IF
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_C1',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_C1',IRESP)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,IFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,HFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,IFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,HFIELD,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -2300,14 +2302,14 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_C1',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_C1',YMSG)
     END IF
     IF (ALLOCATED(IFIELD)) DEALLOCATE(IFIELD)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_C1
+  END SUBROUTINE IO_Field_write_byfield_C1
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_T0(TPFILE,HNAME,TFIELD,KRESP)
+  SUBROUTINE IO_Field_write_byname_T0(TPFILE,HNAME,TFIELD,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2321,19 +2323,19 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD(TPFILE,TFIELDLIST(ID),TFIELD,IRESP)
+    IF(IRESP==0) CALL IO_Field_write(TPFILE,TFIELDLIST(ID),TFIELD,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_T0
+  END SUBROUTINE IO_Field_write_byname_T0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0(TPFILE,TPFIELD,TFIELD,KRESP)
-    USE MODD_IO_ll, ONLY : GSMONOPROC, ISP
+  SUBROUTINE IO_Field_write_byfield_T0(TPFILE,TPFIELD,TFIELD,KRESP)
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     USE MODD_TYPE_DATE
     !
     !*      0.    DECLARATIONS
@@ -2355,24 +2357,24 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE :: YMSG
     CHARACTER(LEN=6)             :: YRESP
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
-    CALL FIELD_METADATA_CHECK(TPFIELD,TYPEDATE,0,'IO_WRITE_FIELD_BYFIELD_T0')
+    CALL IO_Field_metadata_check(TPFIELD,TYPEDATE,0,'IO_Field_write_byfield_T0')
     !
     IRESP = 0
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_T0',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_T0',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TFIELD,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TFIELD,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TFIELD,IRESP)
        ELSE 
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TFIELD,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TFIELD,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TFIELD,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TFIELD,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -2382,13 +2384,13 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_T0',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_T0',YMSG)
     END IF
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_T0
+  END SUBROUTINE IO_Field_write_byfield_T0
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYNAME_LB(TPFILE,HNAME,KL3D,PLB,KRESP)
+  SUBROUTINE IO_Field_write_byname_lb(TPFILE,HNAME,KL3D,PLB,KRESP)
     !
     !*      0.1   Declarations of arguments
     !
@@ -2403,25 +2405,25 @@ CONTAINS
     INTEGER :: ID ! Index of the field
     INTEGER :: IRESP ! return_code
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYNAME_LB',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byname_lb',TRIM(TPFILE%CNAME)//': writing '//TRIM(HNAME))
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HNAME,ID,IRESP)
     !
-    IF(IRESP==0) CALL IO_WRITE_FIELD_LB(TPFILE,TFIELDLIST(ID),KL3D,PLB,IRESP)
+    IF(IRESP==0) CALL IO_Field_write_lb(TPFILE,TFIELDLIST(ID),KL3D,PLB,IRESP)
     !
     IF (PRESENT(KRESP)) KRESP = IRESP
     !
-  END SUBROUTINE IO_WRITE_FIELD_BYNAME_LB
+  END SUBROUTINE IO_Field_write_byname_lb
 
 
-  SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB(TPFILE,TPFIELD,KL3D,PLB,KRESP)
+  SUBROUTINE IO_Field_write_byfield_lb(TPFILE,TPFIELD,KL3D,PLB,KRESP)
     !
-    USE MODD_IO_ll,         ONLY : GSMONOPROC,ISNPROC,ISP,L1D,L2D,LPACK
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_VAR_ll,        ONLY : MNH_STATUSES_IGNORE
+    USE MODD_IO,            ONLY: GSMONOPROC, ISNPROC, ISP, L1D, L2D, LPACK
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
     !
-    USE MODE_DISTRIB_LB
-    USE MODE_TOOLS_ll,      ONLY : GET_GLOBALDIMS_ll
+    USE MODE_DISTRIB_lb
+    USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
     !
     !
     !*      0.1   Declarations of arguments
@@ -2462,15 +2464,15 @@ CONTAINS
     !
     IRESP = 0
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BYFIELD_LB',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_byfield_lb',TRIM(YFILEM)//': writing '//TRIM(YRECFM))
     !
     IF (YLBTYPE/='LBX' .AND. YLBTYPE/='LBXU' .AND. YLBTYPE/='LBY' .AND. YLBTYPE/='LBYV') THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB','unknown LBTYPE ('//YLBTYPE//')')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_lb','unknown LBTYPE ('//YLBTYPE//')')
       RETURN
     END IF
     !
     IF (TPFIELD%CDIR/='') THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_BYFIELD_LB','CDIR was set for '//TRIM(YRECFM))
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_byfield_lb','CDIR was set for '//TRIM(YRECFM))
       TPFIELD%CDIR=''
     END IF
     !
@@ -2480,19 +2482,19 @@ CONTAINS
        GOTO 1000
     END IF
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BYFIELD_LB',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_byfield_lb',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN  ! sequential execution
           IF (LPACK .AND. L2D) THEN
              TX3DP=>PLB(:,JPHEXT+1:JPHEXT+1,:)
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
           ELSE
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,PLB,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,PLB,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,PLB,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,PLB,IRESP)
           END IF
        ELSE
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
@@ -2504,13 +2506,13 @@ CONTAINS
                 ALLOCATE(Z3D(IIMAX_ll+2*JPHEXT,(IRIM+JPHEXT)*2,SIZE(PLB,3)))
              END IF
              DO JI = 1,ISNPROC
-                CALL GET_DISTRIB_LB(YLBTYPE,JI,'FM','WRITE',IRIM,IIB,IIE,IJB,IJE)
+                CALL GET_DISTRIB_lb(YLBTYPE,JI,'FM','WRITE',IRIM,IIB,IIE,IJB,IJE)
                 IF (IIB /= 0) THEN
                    TX3DP=>Z3D(IIB:IIE,IJB:IJE,:)
                    IF (ISP /= JI) THEN
                       CALL MPI_RECV(TX3DP,SIZE(TX3DP),MPI_FLOAT,JI-1,99,TPFILE%NMPICOMM,STATUS,IERR)
                    ELSE
-                      CALL GET_DISTRIB_LB(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
+                      CALL GET_DISTRIB_lb(YLBTYPE,JI,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
                       TX3DP = PLB(IIB:IIE,IJB:IJE,:)
                    END IF
                 END IF
@@ -2520,15 +2522,15 @@ CONTAINS
              ELSE
                 TX3DP=>Z3D
              END IF
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,TX3DP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,TX3DP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,TX3DP,IRESP)
           ELSE
              NB_REQ=0
              ALLOCATE(REQ_TAB(1))
              ALLOCATE(T_TX3DP(1))
              IKU = SIZE(PLB,3)
              ! Other processes
-             CALL GET_DISTRIB_LB(YLBTYPE,ISP,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
+             CALL GET_DISTRIB_lb(YLBTYPE,ISP,'LOC','WRITE',IRIM,IIB,IIE,IJB,IJE)
              IF (IIB /= 0) THEN
                 TX3DP=>PLB(IIB:IIE,IJB:IJE,:)
                 NB_REQ = NB_REQ + 1
@@ -2553,17 +2555,17 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(YRECFM)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BYFIELD_LB',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_byfield_lb',YMSG)
     END IF
     !
     IF (ALLOCATED(Z3D)) DEALLOCATE(Z3D)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BYFIELD_LB
+  END SUBROUTINE IO_Field_write_byfield_lb
 
 
-  SUBROUTINE IO_WRITE_FIELD_BOX_BYFIELD_X5(TPFILE,TPFIELD,HBUDGET,PFIELD,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP)
+  SUBROUTINE IO_Field_write_box_byfield_X5(TPFILE,TPFIELD,HBUDGET,PFIELD,KXOBOX,KXEBOX,KYOBOX,KYEBOX,KRESP)
     !
-    USE MODD_IO_ll, ONLY : GSMONOPROC, ISP
+    USE MODD_IO, ONLY: GSMONOPROC, ISP
     !
     USE MODE_GATHER_ll
     !
@@ -2590,14 +2592,14 @@ CONTAINS
     CHARACTER(LEN=:),ALLOCATABLE        :: YMSG
     CHARACTER(LEN=6)                    :: YRESP
     !
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_BOX_BYFIELD_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_box_byfield_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
     !
     IRESP = 0
     GALLOC = .FALSE.
     !
-    CALL IO_FILE_WRITE_CHECK(TPFILE,'IO_WRITE_FIELD_BOX_BYFIELD_X5',IRESP)
+    CALL IO_File_write_check(TPFILE,'IO_Field_write_box_byfield_X5',IRESP)
     !
-    CALL IO_WRITE_SELECT_FORMAT(TPFILE,GLFI,GNC4)
+    CALL IO_Format_write_select(TPFILE,GLFI,GNC4)
     !
     IF (IRESP==0) THEN
        IF (GSMONOPROC) THEN ! sequential execution
@@ -2608,8 +2610,8 @@ CONTAINS
              ! take the field as a budget
              ZFIELDP=>PFIELD
           END IF
-          IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-          IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+          IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+          IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
        ELSE ! multiprocesses execution
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
              ! Allocate the box
@@ -2625,8 +2627,8 @@ CONTAINS
                & KXOBOX,KXEBOX,KYOBOX,KYEBOX,HBUDGET)
           !
           IF (ISP == TPFILE%NMASTER_RANK)  THEN
-             IF (GLFI) CALL IO_WRITE_FIELD_LFI(TPFILE,TPFIELD,ZFIELDP,IRESP)
-             IF (GNC4) CALL IO_WRITE_FIELD_NC4(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GLFI) CALL IO_Field_write_lfi(TPFILE,TPFIELD,ZFIELDP,IRESP)
+             IF (GNC4) CALL IO_Field_write_nc4(TPFILE,TPFIELD,ZFIELDP,IRESP)
           END IF
           !
           CALL MPI_BCAST(IRESP,1,MPI_INTEGER,TPFILE%NMASTER_RANK-1,TPFILE%NMPICOMM,IERR)
@@ -2636,10 +2638,492 @@ CONTAINS
     IF (IRESP.NE.0) THEN
       WRITE(YRESP, '( I6 )') IRESP
       YMSG = 'RESP='//YRESP//' when writing '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_BOX_BYFIELD_X5',YMSG)
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_box_byfield_X5',YMSG)
     END IF
     IF (GALLOC) DEALLOCATE(ZFIELDP)
     IF (PRESENT(KRESP)) KRESP = IRESP
-  END SUBROUTINE IO_WRITE_FIELD_BOX_BYFIELD_X5
+  END SUBROUTINE IO_Field_write_box_byfield_X5
+
+
+SUBROUTINE IO_Fieldlist_write(TPOUTPUT)
+!
+USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX
+!
+IMPLICIT NONE
+!
+TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
+!
+INTEGER :: IDX
+INTEGER :: IMI
+INTEGER :: JI
+!
+IMI = GET_CURRENT_MODEL_INDEX()
+!
+DO JI = 1,SIZE(TPOUTPUT%NFIELDLIST)
+  IDX = TPOUTPUT%NFIELDLIST(JI)
+  SELECT CASE (TFIELDLIST(IDX)%NDIMS)
+    !
+    !0D output
+    !
+    CASE (0)
+      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !0D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X0D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X0D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 0D logical fields')
+          END IF
+        !
+        !0D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N0D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N0D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 0D integer fields')
+          END IF
+        !
+        !0D logical
+        !
+        CASE (TYPELOG)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L0D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_L0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_L0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L0D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 0D logical fields')
+          END IF
+        !
+        !0D string
+        !
+        CASE (TYPECHAR)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C0D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_C0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_C0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C0D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 0D character fields')
+          END IF
+        !
+        !0D date/time
+        !
+        CASE (TYPEDATE)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_T0D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_T0D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_T0D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_T0D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 0D date/time fields')
+          END IF
+        !
+        !0D other types
+        !
+        CASE DEFAULT
+          PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 0D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+          STOP
+      END SELECT
+    !
+    !1D output
+    !
+    CASE (1)
+      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !1D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X1D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X1D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 1D real fields')
+          END IF
+!         !
+!         !1D integer
+!         !
+!         CASE (TYPEINT)
+!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N1D) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+!             CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N1D(IMI)%DATA)
+!           ELSE
+!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 1D integer fields')
+!           END IF
+!         !
+!         !1D logical
+!         !
+!         CASE (TYPELOG)
+!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_L1D) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_L1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_L1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+!             CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_L1D(IMI)%DATA)
+!           ELSE
+!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 1D logical fields')
+!           END IF
+!         !
+!         !1D string
+!         !
+!         CASE (TYPECHAR)
+!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_C1D) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_C1D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_C1D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+!             CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_C1D(IMI)%DATA)
+!           ELSE
+!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 1D character fields')
+!           END IF
+        !
+        !1D other types
+        !
+        CASE DEFAULT
+          PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 1D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+          STOP
+      END SELECT
+    !
+    !2D output
+    !
+    CASE (2)
+      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !2D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X2D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X2D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X2D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X2D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 2D real fields')
+          END IF
+        !
+        !2D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N2D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N2D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N2D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N2D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not allowed for 2D integer fields')
+          END IF
+        !
+        !2D other types
+        !
+        CASE DEFAULT
+          PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 2D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+          STOP
+      END SELECT
+    !
+    !3D output
+    !
+    CASE (3)
+      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !3D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X3D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X3D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X3D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not (yet) allowed for 3D real fields')
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X3D(IMI)%DATA)
+          END IF
+        !
+        !3D integer
+        !
+        CASE (TYPEINT)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_N3D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N3D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_N3D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not (yet) allowed for 3D integer fields')
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_N3D(IMI)%DATA)
+          END IF
+        !
+        !3D other types
+        !
+        CASE DEFAULT
+          PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 3D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+          STOP
+      END SELECT
+    !
+    !4D output
+    !
+    CASE (4)
+      SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+        !
+        !4D real
+        !
+        CASE (TYPEREAL)
+          IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X4D) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X4D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA) ) THEN
+            PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X4D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+            STOP
+          END IF
+          IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+            CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
+          ELSE
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not (yet) allowed for 4D real fields')
+            !PW: TODO?: add missing field in TFIELDLIST?
+            !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X4D(IMI)%DATA)
+          END IF
+        !
+        !4D other types
+        !
+        CASE DEFAULT
+          PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 4D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+          STOP
+      END SELECT
+!     !
+!     !5D output
+!     !
+!     CASE (5)
+!       SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+!         !
+!         !5D real
+!         !
+!         CASE (TYPEREAL)
+!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X5D) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X5D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X5D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+!             CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
+!           ELSE
+!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not (yet) allowed for 5D real fields')
+!             !PW: TODO?: add missing field in TFIELDLIST?
+!             !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X5D(IMI)%DATA)
+!           END IF
+!         !
+!         !5D other types
+!         !
+!         CASE DEFAULT
+!           PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 5D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!           STOP
+!       END SELECT
+!     !
+!     !6D output
+!     !
+!     CASE (6)
+!       SELECT CASE (TFIELDLIST(IDX)%NTYPE)
+!         !
+!         !6D real
+!         !
+!         CASE (TYPEREAL)
+!           IF ( .NOT.ALLOCATED(TFIELDLIST(IDX)%TFIELD_X6D) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X6D is NOT allocated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( .NOT.ASSOCIATED(TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA) ) THEN
+!             PRINT *,'FATAL: IO_Fieldlist_write: TFIELD_X6D%DATA is not associated for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!             STOP
+!           END IF
+!           IF ( TFIELDLIST(IDX)%CLBTYPE == 'NONE' ) THEN
+!             CALL IO_Field_write(TPOUTPUT%TFILE,TFIELDLIST(IDX),TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
+!           ELSE
+!             CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Fieldlist_write','CLBTYPE/=NONE not (yet) allowed for 6D real fields')
+!             !PW: TODO?: add missing field in TFIELDLIST?
+!             !CALL IO_Field_write_lb(TPOUTPUT%TFILE,TFIELDLIST(IDX),***,TFIELDLIST(IDX)%TFIELD_X6D(IMI)%DATA)
+!           END IF
+!         !
+!         !6D other types
+!         !
+!         CASE DEFAULT
+!           PRINT *,'FATAL: IO_Fieldlist_write: type not yet supported for 4D output of ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+!           STOP
+!       END SELECT
+    !
+    !Other number of dimensions
+    !
+    CASE DEFAULT
+      PRINT *,'FATAL: IO_Fieldlist_write: number of dimensions not yet supported for ',TRIM(TFIELDLIST(IDX)%CMNHNAME)
+      STOP
+  END SELECT
+END DO
+!
+END SUBROUTINE IO_Fieldlist_write
+
+
+SUBROUTINE IO_Field_user_write(TPOUTPUT)
+!
+#if 0
+USE MODD_DYN_n,      ONLY: XTSTEP
+USE MODD_FIELD_n,    ONLY: XUT, XVT, XRT, XTHT
+USE MODD_PARAMETERS, ONLY: JPVEXT
+USE MODD_PRECIP_n,   ONLY: XINPRR
+#endif
+!
+IMPLICIT NONE
+!
+TYPE(TOUTBAK),    INTENT(IN)  :: TPOUTPUT !Output structure
+!
+TYPE(TFIELDDATA) :: TZFIELD
+!
+#if 0
+INTEGER          :: IKB
+!
+IKB=JPVEXT+1
+!
+TZFIELD%CMNHNAME   = 'UTLOW'
+TZFIELD%CSTDNAME   = 'x_wind'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'm s-1'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_U component of wind at lowest physical level'
+TZFIELD%NGRID      = 2
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XUT(:,:,IKB))
+!
+TZFIELD%CMNHNAME   = 'VTLOW'
+TZFIELD%CSTDNAME   = 'y_wind'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'm s-1'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_V component of wind at lowest physical level'
+TZFIELD%NGRID      = 3
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XVT(:,:,IKB))
+!
+TZFIELD%CMNHNAME   = 'THTLOW'
+TZFIELD%CSTDNAME   = 'air_potential_temperature'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'K'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_potential temperature at lowest physical level'
+TZFIELD%NGRID      = 1
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XTHT(:,:,IKB))
+!
+TZFIELD%CMNHNAME   = 'RVTLOW'
+!TZFIELD%CSTDNAME   = 'humidity_mixing_ratio' !ratio of the mass of water vapor to the mass of dry air
+TZFIELD%CSTDNAME   = 'specific_humidity'     !mass fraction of water vapor in (moist) air
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'kg kg-1'
+TZFIELD%CDIR       = 'XY'
+TZFIELD%CCOMMENT   = 'X_Y_Z_Vapor mixing Ratio at lowest physical level'
+TZFIELD%NGRID      = 1
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XRT(:,:,IKB,1))
+!
+TZFIELD%CMNHNAME   = 'ACPRRSTEP'
+TZFIELD%CSTDNAME   = 'rainfall_amount'
+TZFIELD%CLONGNAME  = ''
+TZFIELD%CUNITS     = 'kg m-2'
+TZFIELD%CDIR       = ''
+TZFIELD%CCOMMENT   = 'X_Y_ACcumulated Precipitation Rain Rate during timestep'
+TZFIELD%NGRID      = 1
+TZFIELD%NTYPE      = TYPEREAL
+TZFIELD%NDIMS      = 2
+TZFIELD%LTIMEDEP   = .TRUE.
+!XACPRR is multiplied by 1000. to convert from m to kg m-2 (water density is assumed to be 1000 kg m-3)
+CALL IO_Field_write(TPOUTPUT%TFILE,TZFIELD,XINPRR*XTSTEP*1.0E3)
+#endif
+!
+END SUBROUTINE IO_Field_user_write
+
+END MODULE MODE_IO_FIELD_WRITE
 
-END MODULE MODE_FMWRIT
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file.f90 b/src/LIB/SURCOUCHE/src/mode_io_file.f90
index 9aa4c9a07..f6e62e24e 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file.f90
@@ -27,18 +27,19 @@
 !                                 to disable writes (for bench purposes)
 !  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: move UPCASE function to tools.f90
 !  P. Wautelet 19/02/2019: simplification/restructuration/cleaning of open/close subroutines (TBCto be continued)
 !  P. Wautelet 27/02/2019: use recursive calls to open/close DES files
 !  P. Wautelet 27/02/2019: remove CLOSE_ll subroutine
 !  P. Wautelet 01/03/2019: move open/close subroutines to mode_io_file.f90
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !
 !-----------------------------------------------------------------
 module mode_io_file
 
-use modd_io_ll, only: tfiledata
+use modd_io, only: tfiledata
 
 use mode_msg
 
@@ -46,15 +47,7 @@ implicit none
 
 private
 
-public :: IO_File_close_ll, IO_File_open_ll
-
-interface IO_File_close_ll
-  module procedure IO_File_close
-end interface
-
-interface IO_File_open_ll
-  module procedure IO_File_open
-end interface
+public :: IO_File_close, IO_File_open
 
 
 contains
@@ -63,10 +56,10 @@ contains
 recursive SUBROUTINE IO_File_open(TPFILE,KRESP,HPOSITION,HSTATUS,HPROGRAM_ORIG)
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: LIO_NO_WRITE
+USE MODD_IO,               ONLY: LIO_NO_WRITE
 !
-USE MODE_IO_ll,            ONLY: GCONFIO
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME
+USE MODE_IO,               ONLY: GCONFIO
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list, IO_File_find_byname
 !
 TYPE(TFILEDATA), POINTER, INTENT(INOUT)         :: TPFILE ! File structure
 INTEGER,                  INTENT(OUT), OPTIONAL :: KRESP  ! Return code
@@ -102,7 +95,7 @@ END IF
 TPFILE%LOPENED       = .TRUE.
 !
 !Check if file is in filelist
-CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP)
+CALL IO_File_find_byname(TRIM(TPFILE%CNAME),TZFILE_DUMMY,IRESP)
 IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_open','file '//TRIM(TPFILE%CNAME)//' not in filelist')
 !
 SELECT CASE(TPFILE%CTYPE)
@@ -154,11 +147,11 @@ SELECT CASE(TPFILE%CTYPE)
   !MesoNH files
   !Remark: 'MNH' is more general than MNHBACKUP and could be in fact a MNHBACKUP file
   CASE ('MNH', 'MNHBACKUP', 'MNHDIACHRONIC', 'MNHDIAG', 'MNHOUTPUT', 'PGD')
-    if (.not.GCONFIO) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_open','SET_CONFIO_ll must be called before IO_File_open')
+    if (.not.GCONFIO) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_open','IO_Config_set must be called before IO_File_open')
     !Do not open '.des' file if OUTPUT
     IF(TPFILE%CTYPE/='MNHOUTPUT' .AND. CPROGRAM/='LFICDF') THEN
       !OOLD=T because the file may already be in the list
-      CALL IO_FILE_ADD2LIST(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.)
+      CALL IO_File_add2list(TZFILE_DES,TRIM(TPFILE%CNAME)//'.des','DES',TPFILE%CMODE,TPDATAFILE=TPFILE,OOLD=.TRUE.)
       CALL IO_File_open(TZFILE_DES,HPROGRAM_ORIG=HPROGRAM_ORIG)
     ENDIF
 
@@ -180,15 +173,11 @@ END SUBROUTINE IO_File_open
 
 SUBROUTINE OPEN_ll(TPFILE, KRESP, HMODE, HSTATUS, HPOSITION, HDELIM, HPROGRAM_ORIG)
 
-  use modd_io_ll,  only: ISNPROC, ISP, LVERB_ALLPRC, nio_rank, NNULLUNIT
+  use modd_io,     only: ISNPROC, ISP, LVERB_ALLPRC, nio_rank, NNULLUNIT
   use modd_var_ll, only : nmnh_comm_world
 
-#if defined(MNH_IOCDF4)
-  use mode_io_file_nc4,         only: io_create_file_nc4, io_open_file_nc4
-#endif
-  use mode_io_file_lfi,         only: io_create_file_lfi, io_open_file_lfi
-  USE MODE_IO_MANAGE_STRUCT,    ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME
-  use mode_io_tools,            only: io_rank
+  USE MODE_IO_MANAGE_STRUCT,    ONLY: IO_File_add2list, IO_File_find_byname
+  use mode_io_tools,            only: IO_Rank_master_get
   use mode_tools,               only: upcase
 
     TYPE(TFILEDATA),            INTENT(INOUT) :: TPFILE
@@ -433,19 +422,19 @@ SUBROUTINE OPEN_ll(TPFILE, KRESP, HMODE, HSTATUS, HPOSITION, HDELIM, HPROGRAM_OR
             CALL PRINT_MSG(NVERB_FATAL,'IO','OPEN_ll','SIZE(TPFILE%TFILES_IOZ) /= TPFILE%NSUBFILES_IOZ for '//TRIM(TPFILE%CNAME))
           END IF
           DO IFILE=1,TPFILE%NSUBFILES_IOZ
-             IRANK_PROCIO = 1 + IO_RANK(IFILE-1,ISNPROC,TPFILE%NSUBFILES_IOZ)
+             IRANK_PROCIO = 1 + IO_Rank_master_get( IFILE-1, ISNPROC, TPFILE%NSUBFILES_IOZ )
              WRITE(YFILE ,'(".Z",i3.3)') IFILE
 
-             CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//TRIM(YFILE),TZSPLITFILE,IRESP)
+             CALL IO_File_find_byname(TRIM(TPFILE%CNAME)//TRIM(YFILE),TZSPLITFILE,IRESP)
 
              IF (IRESP/=0) THEN !File not yet in filelist => add it (nothing to do if already in list)
                IF (ALLOCATED(TPFILE%CDIRNAME)) THEN
-                 CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(YFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
+                 CALL IO_File_add2list(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(YFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
                                        HDIRNAME=TPFILE%CDIRNAME,                                                     &
                                        KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, &
                                        HFORMAT=TPFILE%CFORMAT)
                ELSE
-                 CALL IO_FILE_ADD2LIST(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(YFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
+                 CALL IO_File_add2list(TZSPLITFILE,TRIM(TPFILE%CNAME)//TRIM(YFILE),TPFILE%CTYPE,TPFILE%CMODE,        &
                                        KLFINPRAR=TPFILE%NLFINPRAR,KLFITYPE=TPFILE%NLFITYPE,KLFIVERB=TPFILE%NLFIVERB, &
                                        HFORMAT=TPFILE%CFORMAT)
                END IF
@@ -474,32 +463,10 @@ SUBROUTINE OPEN_ll(TPFILE, KRESP, HMODE, HSTATUS, HPOSITION, HDELIM, HPROGRAM_OR
              TZSPLITFILE%NOPEN         = TZSPLITFILE%NOPEN         + 1
              TZSPLITFILE%NOPEN_CURRENT = TZSPLITFILE%NOPEN_CURRENT + 1
 
-#if defined(MNH_IOCDF4)
-             IF (TZSPLITFILE%CFORMAT=='NETCDF4' .OR. TZSPLITFILE%CFORMAT=='LFICDF4') THEN
-                IF (YACTION == 'READ') THEN
-                   ! Open netCDF File for reading
-                   call io_open_file_nc4(tzsplitfile)
-                END IF
-
-                IF (YACTION == 'WRITE') THEN
-                   ! Create netCDF File for writing
-                   call io_create_file_nc4(TZSPLITFILE, hprogram_orig=HPROGRAM_ORIG)
-                END IF
-             END IF
-#endif
-             IF (TZSPLITFILE%CFORMAT=='LFI' .OR. TZSPLITFILE%CFORMAT=='LFICDF4') THEN
-                SELECT CASE (YACTION)
-                  CASE('READ')
-                    call io_open_file_lfi(tzsplitfile,iresp)
-                  CASE('WRITE')
-                    call io_create_file_lfi(tzsplitfile,iresp)
-                END SELECT
-             ENDIF
-             !
+             call IO_File_open_format( tzsplitfile, hprogram_orig=hprogram_orig )
           ENDDO
        END IF
 
-
     END SELECT
 
     TPFILE%NMPICOMM = NMNH_COMM_WORLD
@@ -521,15 +488,15 @@ END SUBROUTINE OPEN_ll
 
 recursive SUBROUTINE IO_File_close(TPFILE,KRESP,HPROGRAM_ORIG)
 !
-USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: NNULLUNIT
+use modd_conf,             only: cprogram
+use modd_io,               only: nnullunit
 
-use mode_io_file_lfi,      only: io_close_file_lfi
+use mode_io_file_lfi,      only: IO_File_close_lfi
 #if defined(MNH_IOCDF4)
-use mode_io_file_nc4,      only: io_close_file_nc4
-use mode_io_write_nc4,     only: io_write_coordvar_nc4
+use mode_io_file_nc4,      only: IO_File_close_nc4
+use mode_io_write_nc4,     only: IO_Coordvar_write_nc4
 #endif
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+use mode_io_manage_struct, only: IO_File_find_byname
 !
 TYPE(TFILEDATA),            INTENT(INOUT) :: TPFILE ! File structure
 INTEGER,          OPTIONAL, INTENT(OUT)   :: KRESP  ! Return code
@@ -582,7 +549,7 @@ SELECT CASE(TPFILE%CTYPE)
   CASE ('MNH', 'MNHBACKUP', 'MNHDIACHRONIC', 'MNHDIAG', 'MNHOUTPUT', 'PGD')
     !Do not close (non-existing) '.des' file if OUTPUT
     IF(TPFILE%CTYPE/='OUTPUT' .AND. CPROGRAM/='LFICDF') THEN
-      CALL IO_FILE_FIND_BYNAME(TRIM(TPFILE%CNAME)//'.des',TZFILE_DES,IRESP)
+      CALL IO_File_find_byname(TRIM(TPFILE%CNAME)//'.des',TZFILE_DES,IRESP)
       IF (IRESP/=0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_close','file '//TRIM(TPFILE%CNAME)//'.des not in filelist')
       CALL IO_File_close(TZFILE_DES,KRESP=IRESP,HPROGRAM_ORIG=HPROGRAM_ORIG)
     ENDIF
@@ -590,18 +557,18 @@ SELECT CASE(TPFILE%CTYPE)
 #if defined(MNH_IOCDF4)
     !Write coordinates variables in NetCDF file
     IF (TPFILE%CMODE == 'WRITE' .AND. (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4')) THEN
-      CALL IO_WRITE_COORDVAR_NC4(TPFILE,HPROGRAM_ORIG=HPROGRAM_ORIG)
+      CALL IO_Coordvar_write_nc4(TPFILE,HPROGRAM_ORIG=HPROGRAM_ORIG)
     END IF
 #endif
 
     if (tpfile%lmaster) then
-      if (tpfile%cformat == 'LFI'     .or. tpfile%cformat == 'LFICDF4') call io_close_file_lfi(tpfile,iresp)
+      if (tpfile%cformat == 'LFI'     .or. tpfile%cformat == 'LFICDF4') call IO_File_close_lfi(tpfile,iresp)
 #if defined(MNH_IOCDF4)
-      if (tpfile%cformat == 'NETCDF4' .or. tpfile%cformat == 'LFICDF4') call io_close_file_nc4(tpfile,iresp)
+      if (tpfile%cformat == 'NETCDF4' .or. tpfile%cformat == 'LFICDF4') call IO_File_close_nc4(tpfile,iresp)
 #endif
     end if
     !
-    CALL IO_ADD2TRANSFER_LIST(TPFILE)
+    CALL IO_Transfer_list_addto(TPFILE)
     !
     SUBFILES: DO JI = 1,TPFILE%NSUBFILES_IOZ
       TZFILE_IOZ => TPFILE%TFILES_IOZ(JI)%TFILE
@@ -616,13 +583,13 @@ SELECT CASE(TPFILE%CTYPE)
 #if defined(MNH_IOCDF4)
       !Write coordinates variables in netCDF file
       IF (TZFILE_IOZ%CMODE == 'WRITE' .AND. (TZFILE_IOZ%CFORMAT=='NETCDF4' .OR. TZFILE_IOZ%CFORMAT=='LFICDF4')) THEN
-        CALL IO_WRITE_COORDVAR_NC4(TZFILE_IOZ,HPROGRAM_ORIG=HPROGRAM_ORIG)
+        CALL IO_Coordvar_write_nc4(TZFILE_IOZ,HPROGRAM_ORIG=HPROGRAM_ORIG)
       END IF
 #endif
       IF (TZFILE_IOZ%LMASTER) THEN
-        if (tzfile_ioz%cformat == 'LFI'     .or. tzfile_ioz%cformat == 'LFICDF4') call io_close_file_lfi(tzfile_ioz,iresp)
+        if (tzfile_ioz%cformat == 'LFI'     .or. tzfile_ioz%cformat == 'LFICDF4') call IO_File_close_lfi(tzfile_ioz,iresp)
 #if defined(MNH_IOCDF4)
-        if (tzfile_ioz%cformat == 'NETCDF4' .or. tzfile_ioz%cformat == 'LFICDF4') call io_close_file_nc4(tzfile_ioz,iresp)
+        if (tzfile_ioz%cformat == 'NETCDF4' .or. tzfile_ioz%cformat == 'LFICDF4') call IO_File_close_nc4(tzfile_ioz,iresp)
 #endif
       END IF
     END DO SUBFILES
@@ -641,9 +608,9 @@ IF (PRESENT(KRESP)) KRESP=IRESP
 END SUBROUTINE IO_File_close
 
 
-subroutine IO_ADD2TRANSFER_LIST(TPFILE)
+subroutine IO_Transfer_list_addto(TPFILE)
 
-USE MODD_CONF,  ONLY : CPROGRAM
+USE MODD_CONF,  ONLY: CPROGRAM
 
 USE MODI_SYSTEM_MNH
 
@@ -657,7 +624,7 @@ INTEGER, SAVE                :: ICPT = 0
 
 YFILEM  = TPFILE%CNAME
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_ADD2TRANSFER_LIST','called for '//TRIM(YFILEM))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Transfer_list_addto','called for '//TRIM(YFILEM))
 
 IF (TPFILE%LMASTER .AND. CPROGRAM/='LFICDF') THEN
   !! Write in pipe
@@ -669,24 +636,24 @@ IF (TPFILE%LMASTER .AND. CPROGRAM/='LFICDF') THEN
 
   SELECT CASE (TPFILE%NLFITYPE)
     CASE(:-1,3:)
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_ADD2TRANSFER_LIST',TRIM(YFILEM)//': incorrect NLFITYPE')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Transfer_list_addto',TRIM(YFILEM)//': incorrect NLFITYPE')
     CASE(0)
       YCPIO='NIL'
     CASE(1)
       YCPIO='MESONH'
     CASE(2)
-      CALL PRINT_MSG(NVERB_INFO,'IO','IO_ADD2TRANSFER_LIST','file '//TRIM(YFILEM)//' not transferred')
+      CALL PRINT_MSG(NVERB_INFO,'IO','IO_Transfer_list_addto','file '//TRIM(YFILEM)//' not transferred')
   END SELECT
 
   if (TPFILE%NLFITYPE==0 .or. TPFILE%NLFITYPE==1) then
     ICPT=ICPT+1
     WRITE (YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER",I3.3,"  2>&1 &")') YTRANS,YCPIO,TRIM(YFILEM),ICPT
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_ADD2TRANSFER_LIST','YCOMMAND='//TRIM(YCOMMAND))
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Transfer_list_addto','YCOMMAND='//TRIM(YCOMMAND))
     CALL SYSTEM_MNH(YCOMMAND)
   end if
 END IF
 
-end subroutine IO_ADD2TRANSFER_LIST
+end subroutine IO_Transfer_list_addto
 
 
 subroutine IO_File_check_format_exist( tpfile )
@@ -750,9 +717,9 @@ end subroutine IO_File_check_format_exist
 subroutine IO_File_open_format( tpfile, hprogram_orig )
 
 #if defined(MNH_IOCDF4)
-use mode_io_file_nc4, only: io_create_file_nc4, io_open_file_nc4
+use mode_io_file_nc4, only: IO_File_create_nc4, IO_File_open_nc4
 #endif
-use mode_io_file_lfi, only: io_create_file_lfi, io_open_file_lfi
+use mode_io_file_lfi, only: IO_File_create_lfi, IO_File_open_lfi
 
 type(tfiledata),            intent(inout) :: tpfile ! File structure
 character(len=*), optional, intent(in)    :: hprogram_orig !To emulate a file coming from this program
@@ -766,9 +733,9 @@ call Print_msg( NVERB_DEBUG, 'IO', 'IO_File_open_format', 'called for '//TRIM(tp
     IF (TPFILE%CFORMAT=='NETCDF4' .OR. TPFILE%CFORMAT=='LFICDF4') THEN
       SELECT CASE (TPFILE%CMODE)
         CASE('READ')
-          call io_open_file_nc4(tpfile)
+          call IO_File_open_nc4(tpfile)
         CASE('WRITE')
-          call io_create_file_nc4(TPFILE, hprogram_orig=HPROGRAM_ORIG)
+          call IO_File_create_nc4(TPFILE, hprogram_orig=HPROGRAM_ORIG)
       END SELECT
     END IF
 #endif
@@ -776,9 +743,9 @@ call Print_msg( NVERB_DEBUG, 'IO', 'IO_File_open_format', 'called for '//TRIM(tp
     IF (TPFILE%CFORMAT=='LFI' .OR. TPFILE%CFORMAT=='LFICDF4') THEN
       SELECT CASE (TPFILE%CMODE)
         CASE('READ')
-          call io_open_file_lfi(tpfile,iresp)
+          call IO_File_open_lfi(tpfile,iresp)
         CASE('WRITE')
-          call io_create_file_lfi(tpfile,iresp)
+          call IO_File_create_lfi(tpfile,iresp)
       END SELECT
     END IF
 
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
index b79ff2ec1..f8645e9ca 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file_lfi.f90
@@ -3,21 +3,22 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Author: P. Wautelet 14/12/2018
+! Author
+!  P. Wautelet 14/12/2018
 !
 !  Remarks: some of the code comes from mode_fm.f90 and mode_io.f90
 !           (was duplicated in the 2 files)
 !
-!  Modifications:
-!     Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!                                    + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
-!                                    + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+! Modifications:
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!                          + move IO_Flu_dealloc and IO_Flu_alloc to mode_io_file_lfi.f90
+!                          + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !
 !-----------------------------------------------------------------
 module mode_io_file_lfi
 
-use modd_io_ll,  only: tfiledata
-use modd_netcdf, only: idcdf_kind
+use modd_io,     only: tfiledata
 
 use mode_msg
 
@@ -25,7 +26,7 @@ implicit none
 
 private
 
-public :: io_create_file_lfi, io_close_file_lfi, io_open_file_lfi
+public :: IO_File_create_lfi, IO_File_close_lfi, IO_File_open_lfi
 
 integer, parameter :: JPRESERVED_UNIT   = 11
 integer, parameter :: JPMAX_UNIT_NUMBER = JPRESERVED_UNIT + 300
@@ -34,10 +35,10 @@ logical,save :: galloc(JPRESERVED_UNIT:JPMAX_UNIT_NUMBER) = .false.
 
 contains
 
-subroutine io_create_file_lfi(tpfile, kstatus)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_lfi,        only: io_prepare_verbosity_lfi
-  use mode_io_tools_mnhversion, only: io_set_mnhversion
+subroutine IO_File_create_lfi(tpfile, kstatus)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_set
+  use mode_io_tools_lfi,        only: IO_Verbosity_prepare_lfi
 
   type(tfiledata), intent(inout) :: tpfile
   integer,         intent(inout) :: kstatus
@@ -50,22 +51,22 @@ subroutine io_create_file_lfi(tpfile, kstatus)
   logical                       :: gnewfi
   logical                       :: gnamfi, gfater, gstats
 
-  call print_msg(NVERB_DEBUG,'IO','io_create_file_lfi','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_create_lfi','called for '//trim(tpfile%cname))
 
   kstatus = 0
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
     iresou = 0
     if ( tpfile%nlfiflu /= -1 ) call print_msg(NVERB_ERROR,'IO', &
-                                               'io_create_file_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
-    tpfile%nlfiflu = ionewflu()
+                                               'IO_File_create_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
+    tpfile%nlfiflu = IO_Flu_alloc()
     gnamfi = .true.
     yforstatus = 'REPLACE'
     gfater = .true.
 
-    call io_prepare_verbosity_lfi(tpfile, imelev, gstats)
+    call IO_Verbosity_prepare_lfi(tpfile, imelev, gstats)
 
     inumbr = tpfile%nlfiflu
     inprar = tpfile%nlfinprar
@@ -78,14 +79,14 @@ subroutine io_create_file_lfi(tpfile, kstatus)
     !test if file is newly defined
     gnewfi = (ininar==0) .or. (imelev<2)
     if (.not.gnewfi) then
-      call print_msg(NVERB_INFO,'IO','io_create_file_lfi','file '//trim(yfilem)//'.lfi previously created with LFI')
+      call print_msg(NVERB_INFO,'IO','IO_File_create_lfi','file '//trim(yfilem)//'.lfi previously created with LFI')
     endif
   end if
-  call io_set_mnhversion(tpfile)
-end subroutine io_create_file_lfi
+  call IO_Mnhversion_set(tpfile)
+end subroutine IO_File_create_lfi
 
 
-subroutine io_close_file_lfi(tpfile, kstatus)
+subroutine IO_File_close_lfi(tpfile, kstatus)
   type(tfiledata),   intent(inout)  :: tpfile
   integer, optional, intent(out)    :: kstatus
 
@@ -93,29 +94,29 @@ subroutine io_close_file_lfi(tpfile, kstatus)
 
   integer(kind=LFI_INT) :: istatus
 
-  call print_msg(NVERB_DEBUG,'IO','io_close_file_lfi','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_close_lfi','called for '//trim(tpfile%cname))
 
   istatus = 0
 
   if (tpfile%lmaster) then
     if ( tpfile%nlfiflu /= -1 ) then
       call lfifer(istatus, tpfile%nlfiflu, YSTATUS)
-      call iofreeflu(int(tpfile%nlfiflu))
+      call IO_Flu_dealloc(int(tpfile%nlfiflu))
       tpfile%nlfiflu = -1
     else
       istatus = -1
-      call print_msg(NVERB_WARNING, 'IO', 'io_close_file_lfi', 'file '//trim(tpfile%cname)//'.lfi is not opened')
+      call print_msg(NVERB_WARNING, 'IO', 'IO_File_close_lfi', 'file '//trim(tpfile%cname)//'.lfi is not opened')
     end if
   end if
 
   if (present(kstatus)) kstatus = int(istatus,kind=kind(kstatus))
-end subroutine io_close_file_lfi
+end subroutine IO_File_close_lfi
 
 
-subroutine io_open_file_lfi(tpfile, kstatus)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_lfi,        only: io_prepare_verbosity_lfi
-  use mode_io_tools_mnhversion, only: io_get_mnhversion
+subroutine IO_File_open_lfi(tpfile, kstatus)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_get
+  use mode_io_tools_lfi,        only: IO_Verbosity_prepare_lfi
 
   type(tfiledata), intent(inout) :: tpfile
   integer,         intent(inout) :: kstatus
@@ -129,22 +130,22 @@ subroutine io_open_file_lfi(tpfile, kstatus)
   logical                      :: gnewfi
   logical                      :: gnamfi, gfater, gstats
 
-  call print_msg(NVERB_DEBUG,'IO','io_open_file_lfi','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_open_lfi','called for '//trim(tpfile%cname))
 
   kstatus = 0
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
     iresou = 0
     if ( tpfile%nlfiflu /= -1 ) call print_msg(NVERB_ERROR,'IO', &
-                                               'io_open_file_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
-    tpfile%nlfiflu = ionewflu()
+                                               'IO_File_open_lfi','file '//trim(yfilem)//'.lfi has already a unit number')
+    tpfile%nlfiflu = IO_Flu_alloc()
     gnamfi = .true.
     yforstatus = 'OLD'
     gfater = .true.
 
-    call io_prepare_verbosity_lfi(tpfile, imelev, gstats)
+    call IO_Verbosity_prepare_lfi(tpfile, imelev, gstats)
 
     inumbr = tpfile%nlfiflu
     inprar = tpfile%nlfinprar
@@ -155,14 +156,14 @@ subroutine io_open_file_lfi(tpfile, kstatus)
 
     if (iresou/=0) kstatus = int(iresou, kind=kind(kstatus))
   end if
-  call io_get_mnhversion(tpfile)
-end subroutine io_open_file_lfi
+  call IO_Mnhversion_get(tpfile)
+end subroutine IO_File_open_lfi
 
 
-function ionewflu()
-  use modd_io_ll, only: nnullunit
+function IO_Flu_alloc()
+  use modd_io, only: nnullunit
 
-  integer :: ionewflu
+  integer :: IO_Flu_alloc
 
   integer :: ji
   integer :: ios
@@ -174,7 +175,7 @@ function ionewflu()
     if ( galloc(ji) ) cycle
     inquire(unit=ji, exist=gexists, opened=gopened, iostat=ios)
     if (gexists .and. .not. gopened .and. ios == 0) then
-      ionewflu   = ji
+      IO_Flu_alloc   = ji
       gfound     = .true.
       galloc(ji) = .true.
       exit
@@ -182,21 +183,21 @@ function ionewflu()
   end do
 
   if (.not. gfound) then
-    call print_msg(NVERB_ERROR,'IO','ionewflu','wrong unit number')
-    ionewflu = nnullunit !/dev/null Fortran unit
+    call print_msg(NVERB_ERROR,'IO','IO_Flu_alloc','wrong unit number')
+    IO_Flu_alloc = nnullunit !/dev/null Fortran unit
   end if
-end function ionewflu
+end function IO_Flu_alloc
 
 
-subroutine iofreeflu(koflu)
+subroutine IO_Flu_dealloc(koflu)
   integer :: koflu
 
   if ( (koflu >= JPRESERVED_UNIT) .and. (koflu <= JPMAX_UNIT_NUMBER) ) then
     galloc(koflu) = .false.
   else
-    call print_msg(NVERB_ERROR,'IO','iofreeflu','wrong unit number')
+    call print_msg(NVERB_ERROR,'IO','IO_Flu_dealloc','wrong unit number')
   end if
-end subroutine iofreeflu
+end subroutine IO_Flu_dealloc
 
 
 end module mode_io_file_lfi
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
index 34b375157..fbc563242 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file_nc4.f90
@@ -3,25 +3,27 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Author: P. Wautelet 13/12/2018
+! Author
+!  P. Wautelet 13/12/2018
 !
 !  Remarks: some of the code comes from mode_fm.f90 and mode_io.f90
 !           (was duplicated in the 2 files)
 !
-!  Modifications:
-!     Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
-!                                    + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
-!                                    + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
-!     Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
+! Modifications:
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!                          + move IOFREEFLU and IONEWFLU to mode_io_file_lfi.f90
+!                          + move management of NNCID and NLFIFLU to the nc4 and lfi subroutines
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_file_nc4
 
-use modd_io_ll,  only: tfiledata
+use modd_io,     only: tfiledata
 use modd_netcdf, only: IDCDF_KIND
 
-use mode_io_tools_nc4, only: io_handle_err_nc4, io_set_knowndims_nc4, newiocdf
+use mode_io_tools_nc4, only: IO_Err_handle_nc4, IO_Knowndims_set_nc4, IO_Iocdf_alloc_nc4
 use mode_msg
 
 use NETCDF,      only: NF90_CLOBBER, NF90_GLOBAL, NF90_NETCDF4, NF90_NOERR, NF90_NOWRITE,  &
@@ -32,13 +34,13 @@ implicit none
 
 private
 
-public :: io_create_file_nc4, io_close_file_nc4, io_open_file_nc4
+public :: IO_File_create_nc4, IO_File_close_nc4, IO_File_open_nc4
 
 contains
 
-subroutine io_create_file_nc4(tpfile,hprogram_orig)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_mnhversion, only: io_set_mnhversion
+subroutine IO_File_create_nc4(tpfile,hprogram_orig)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_set
 
   type(tfiledata),           intent(inout) :: tpfile
   character(len=*),optional, intent(in)    :: hprogram_orig !to emulate a file coming from this program
@@ -46,141 +48,141 @@ subroutine io_create_file_nc4(tpfile,hprogram_orig)
   character(len=:),allocatable :: yfilem  ! name of the file
   integer(kind=IDCDF_KIND)     :: istatus
 
-  call print_msg(NVERB_DEBUG,'IO','io_create_file_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_create_nc4','called for '//trim(tpfile%cname))
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
-    tpfile%tncdims => newiocdf()
+    tpfile%tncdims => IO_Iocdf_alloc_nc4()
     istatus = NF90_CREATE(adjustl(trim(yfilem))//".nc", ior(NF90_CLOBBER,NF90_NETCDF4), tpfile%nncid)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_FATAL,'IO','io_create_file_nc4','NF90_CREATE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
+      call print_msg(NVERB_FATAL,'IO','IO_File_create_nc4','NF90_CREATE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
     end if
     call io_set_not_cleanly_closed_nc4(tpfile)
-    call io_set_mnhversion(tpfile)
-    call io_set_knowndims_nc4(tpfile, hprogram_orig=hprogram_orig)
+    call IO_Mnhversion_set(tpfile)
+    call IO_Knowndims_set_nc4(tpfile, hprogram_orig=hprogram_orig)
   end if
-end subroutine io_create_file_nc4
+end subroutine IO_File_create_nc4
 
 
-subroutine io_close_file_nc4(tpfile,kstatus)
-  use mode_io_tools_nc4, only: cleaniocdf
+subroutine IO_File_close_nc4(tpfile,kstatus)
+  use mode_io_tools_nc4, only: IO_Iocdf_dealloc_nc4
 
   type(tfiledata),                    intent(inout) :: tpfile
   integer(kind=IDCDF_KIND), optional, intent(out)   :: kstatus
 
   integer(kind=IDCDF_KIND) :: istatus
 
-  call print_msg(NVERB_DEBUG,'IO','io_close_file_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_close_nc4','called for '//trim(tpfile%cname))
 
   istatus = 0
 
   if (tpfile%lmaster ) then
     if (tpfile%nncid == -1) then
-      call print_msg(NVERB_WARNING, 'IO', 'io_close_file_nc4', 'file '//trim(tpfile%cname)//'.nc is not opened')
+      call print_msg(NVERB_WARNING, 'IO', 'IO_File_close_nc4', 'file '//trim(tpfile%cname)//'.nc is not opened')
     else
-      if (trim(tpfile%cmode) == 'WRITE') call io_set_cleanly_closed_nc4(tpfile)
+      if (trim(tpfile%cmode) == 'WRITE') call IO_Cleanly_closed_set_nc4(tpfile)
       istatus = NF90_CLOSE(tpfile%nncid)
       if (istatus /= NF90_NOERR) then
-        call print_msg(NVERB_WARNING, 'IO', 'io_close_file_nc4', 'NF90_CLOSE error: '//trim(NF90_STRERROR(istatus)))
+        call print_msg(NVERB_WARNING, 'IO', 'IO_File_close_nc4', 'NF90_CLOSE error: '//trim(NF90_STRERROR(istatus)))
       end if
       tpfile%nncid = -1
-      if (associated(tpfile%tncdims)) call cleaniocdf(tpfile%tncdims)
+      if (associated(tpfile%tncdims)) call IO_Iocdf_dealloc_nc4(tpfile%tncdims)
     end if
   end if
 
   if (present(kstatus)) kstatus = istatus
-end subroutine io_close_file_nc4
+end subroutine IO_File_close_nc4
 
 
-subroutine io_open_file_nc4(tpfile)
-  use mode_io_tools,            only: io_construct_filename
-  use mode_io_tools_mnhversion, only: io_get_mnhversion
+subroutine IO_File_open_nc4(tpfile)
+  use mode_io_tools,            only: IO_Filename_construct
+  use mode_io_tools_mnhversion, only: IO_Mnhversion_get
 
   type(tfiledata), intent(inout) :: tpfile
 
   character(len=:),allocatable :: yfilem  ! name of the file
   integer(kind=IDCDF_KIND)     :: istatus
 
-  call print_msg(NVERB_DEBUG,'IO','io_open_file_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_File_open_nc4','called for '//trim(tpfile%cname))
 
   if (tpfile%lmaster) then
-    call io_construct_filename(tpfile, yfilem)
+    call IO_Filename_construct(tpfile, yfilem)
 
-    tpfile%tncdims => newiocdf()
+    tpfile%tncdims => IO_Iocdf_alloc_nc4()
     istatus = NF90_OPEN(adjustl(trim(yfilem))//".nc", NF90_NOWRITE, tpfile%nncid)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_FATAL, 'IO', 'io_open_file_nc4', 'NF90_OPEN for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
+      call print_msg(NVERB_FATAL, 'IO', 'IO_File_open_nc4', 'NF90_OPEN for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
     end if
 
     istatus = NF90_INQUIRE(tpfile%nncid, nvariables=tpfile%nncnar)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_FATAL,'IO','io_open_file_nc4','NF90_INQUIRE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
+      call print_msg(NVERB_FATAL,'IO','IO_File_open_nc4','NF90_INQUIRE for '//trim(yfilem)//'.nc: '//NF90_STRERROR(istatus))
     end if
   end if
 
   if (trim(tpfile%cmode) == 'READ') then
-    call io_get_mnhversion(tpfile)
-    if (tpfile%lmaster) call io_check_cleanly_closed_nc4(tpfile)
+    call IO_Mnhversion_get(tpfile)
+    if (tpfile%lmaster) call IO_Cleanly_closed_check_nc4(tpfile)
   end if
 
-end subroutine io_open_file_nc4
+end subroutine IO_File_open_nc4
 
 
-subroutine io_check_cleanly_closed_nc4(tpfile)
+subroutine IO_Cleanly_closed_check_nc4(tpfile)
   type(tfiledata), intent(in) :: tpfile
 
   character(len=:), allocatable :: yclean
   integer(kind=IDCDF_KIND) :: ilen, istatus
   integer, dimension(3) :: imnhversion
 
-  call print_msg(NVERB_DEBUG,'IO','io_check_cleanly_closed_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4','called for '//trim(tpfile%cname))
 
   imnhversion = tpfile%nmnhversion
   if ( imnhversion(1)<5                                                 .OR. &
       (imnhversion(1)==5 .AND. imnhversion(2)<4)                        .OR. &
       (imnhversion(1)==5 .AND. imnhversion(2)==4 .AND. imnhversion(3)<2)     ) then
-    call print_msg(NVERB_DEBUG,'IO','io_check_cleanly_closed_nc4', &
+    call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4', &
                    'file '//trim(tpfile%cname)//' is too old (before MNH 5.4.2) to check if cleanly closed')
     return
   end if
 
   istatus = NF90_INQUIRE_ATTRIBUTE(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', len = ilen)
   if (istatus /= NF90_NOERR) then
-    call print_msg(NVERB_ERROR,'IO','io_check_cleanly_closed_nc4', &
+    call print_msg(NVERB_ERROR,'IO','IO_Cleanly_closed_check_nc4', &
                    'MNH_cleanly_closed attribute not found in file '//trim(tpfile%cname))
   else
     allocate( character(len=ilen) :: yclean )
     istatus = NF90_GET_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', yclean)
     if (istatus /= NF90_NOERR) then
-      call print_msg(NVERB_WARNING,'IO','io_check_cleanly_closed_nc4', &
+      call print_msg(NVERB_WARNING,'IO','IO_Cleanly_closed_check_nc4', &
                     'MNH_cleanly_closed attribute not found in file '//trim(tpfile%cname))
     else
       if (yclean == 'yes') then
-        call print_msg(NVERB_DEBUG,'IO','io_check_cleanly_closed_nc4', &
+        call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_check_nc4', &
                       'file '//trim(tpfile%cname)//' was cleanly closed before opening')
       else if (yclean == 'no') then
-        call print_msg(NVERB_ERROR,'IO','io_check_cleanly_closed_nc4', &
+        call print_msg(NVERB_ERROR,'IO','IO_Cleanly_closed_check_nc4', &
                       'file '//trim(tpfile%cname)//' was not cleanly closed before opening')
       else
-        call print_msg(NVERB_ERROR,'IO','io_check_cleanly_closed_nc4', &
+        call print_msg(NVERB_ERROR,'IO','IO_Cleanly_closed_check_nc4', &
                       'invalid MNH_cleanly_closed attribute for file '//trim(tpfile%cname))
       end if
     end if
   end if
-end subroutine io_check_cleanly_closed_nc4
+end subroutine IO_Cleanly_closed_check_nc4
 
 
-subroutine io_set_cleanly_closed_nc4(tpfile)
+subroutine IO_Cleanly_closed_set_nc4(tpfile)
   type(tfiledata), intent(in) :: tpfile
 
   integer(kind=IDCDF_KIND) :: istatus
 
-  call print_msg(NVERB_DEBUG,'IO','io_set_cleanly_closed_nc4','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Cleanly_closed_set_nc4','called for '//trim(tpfile%cname))
 
   istatus = NF90_PUT_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', 'yes')
-  if (istatus /= NF90_NOERR) call io_handle_err_nc4(istatus,'io_set_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
-end subroutine io_set_cleanly_closed_nc4
+  if (istatus /= NF90_NOERR) call IO_Err_handle_nc4(istatus,'IO_Cleanly_closed_set_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
+end subroutine IO_Cleanly_closed_set_nc4
 
 
 subroutine io_set_not_cleanly_closed_nc4(tpfile)
@@ -191,7 +193,7 @@ subroutine io_set_not_cleanly_closed_nc4(tpfile)
   call print_msg(NVERB_DEBUG,'IO','io_set_not_cleanly_closed_nc4','called for '//trim(tpfile%cname))
 
   istatus = NF90_PUT_ATT(tpfile%nncid, NF90_GLOBAL, 'MNH_cleanly_closed', 'no')
-  if (istatus /= NF90_NOERR) call io_handle_err_nc4(istatus,'io_set_not_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
+  if (istatus /= NF90_NOERR) call IO_Err_handle_nc4(istatus,'io_set_not_cleanly_closed_nc4','NF90_PUT_ATT','MNH_cleanly_closed')
 end subroutine io_set_not_cleanly_closed_nc4
 
 end module mode_io_file_nc4
@@ -199,22 +201,22 @@ end module mode_io_file_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_create_file_nc4(a, b)
+subroutine IO_File_create_nc4(a, b)
 use mode_msg
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_create_file_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_create_file_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_create_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_File_create_nc4
 !
-subroutine io_close_file_nc4(a)
+subroutine IO_File_close_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_close_file_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_close_file_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_close_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_File_close_nc4
 !
-subroutine io_open_file_nc4(a)
+subroutine IO_File_open_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_open_file_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_open_file_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_open_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_File_open_nc4
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90 b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
index e3233b76c..8a50caedd 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_manage_struct.f90
@@ -3,31 +3,34 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!!    Authors
-!!    -------
-!
-!     P. Wautelet : 2016: original version
+! Author(s)
+!  P. Wautelet 2016
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
-!                                 to allow to disable writes (for bench purposes)
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 21/01/2019: add LIO_ALLOW_NO_BACKUP and LIO_NO_WRITE to modd_io_ll
+!                          to allow to disable writes (for bench purposes)
 !  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !  P. Wautelet 18/02/2019: bugfixes for nsubfiles_ioz
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 MODULE MODE_IO_MANAGE_STRUCT
 !
-USE MODD_IO_ll
+USE MODD_IO
 USE MODE_MSG
 !
 IMPLICIT NONE
 !
+private
+!
+public :: IO_Bakout_struct_prepare, IO_File_add2list, IO_File_find_byname, IO_Filelist_print
+!
 CONTAINS
 !
 !#########################################################################
-SUBROUTINE IO_PREPARE_BAKOUT_STRUCT(KSUP,PTSTEP,PSEGLEN)
+SUBROUTINE IO_Bakout_struct_prepare(KSUP,PTSTEP,PSEGLEN)
 !#########################################################################
 !
 USE MODD_BAKOUT
@@ -61,7 +64,7 @@ INTEGER, DIMENSION(:), ALLOCATABLE :: IBAK_STEP, IOUT_STEP
 CHARACTER (LEN=4) :: YDADNUMBER       ! Character string for the DAD model file number
 !
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_PREPARE_BAKOUT_STRUCT','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Bakout_struct_prepare','called')
 !
 ! Special case if writes are forced to NO
 IF (LIO_NO_WRITE) THEN
@@ -182,7 +185,7 @@ DO IMI = 1, NMODEL
     ELSE
       IERR_LVL = NVERB_ERROR
     END IF
-    CALL PRINT_MSG(IERR_LVL,'IO','IO_PREPARE_BAKOUT_STRUCT','no (valid) backup time')
+    CALL PRINT_MSG(IERR_LVL,'IO','IO_Bakout_struct_prepare','no (valid) backup time')
   END IF
   !
   IOUT_NUMB = 0
@@ -206,7 +209,7 @@ DO IMI = 1, NMODEL
   !* Find dad output number
   !
   !Security check (if it happens, this part of the code should be exported outside of the IMI loop)
-  IF (NDAD(IMI)>IMI) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_PREPARE_BAKOUT_STRUCT','NDAD(IMI)>IMI')
+  IF (NDAD(IMI)>IMI) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Bakout_struct_prepare','NDAD(IMI)>IMI')
   IF (NDAD(IMI) == IMI .OR.  IMI == 1) THEN
     OUT_MODEL(IMI)%TBACKUPN(:)%NOUTDAD = 0
     DO IPOS = 1,OUT_MODEL(IMI)%NBAK_NUMB
@@ -262,7 +265,7 @@ DO IMI = 1, NMODEL
     DO IPOS = 1,JPOUTVARMAX
       IF (COUT_VAR(IMI,IPOS)/='') IVAR = IVAR + 1
     END DO
-    IF (IVAR==0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_PREPARE_BAKOUT_STRUCT','no fields chosen for output')
+    IF (IVAR==0) CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Bakout_struct_prepare','no fields chosen for output')
     ALLOCATE(OUT_MODEL(IMI)%TOUTPUTN(1)%NFIELDLIST(IVAR))
     !Determine the list of the outputs to do (by field number)
     IVAR = 1
@@ -273,7 +276,7 @@ DO IMI = 1, NMODEL
         CALL FIND_FIELD_ID_FROM_MNHNAME(COUT_VAR(IMI,IPOS),IFIELD,IRESP)
         OUT_MODEL(IMI)%TOUTPUTN(1)%NFIELDLIST(IVAR) = IFIELD
         IF (IRESP/=0) THEN
-          CALL PRINT_MSG(NVERB_FATAL,'IO','IO_PREPARE_BAKOUT_STRUCT','unknown field for output: '//TRIM(COUT_VAR(IMI,IPOS)))
+          CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Bakout_struct_prepare','unknown field for output: '//TRIM(COUT_VAR(IMI,IPOS)))
           !MNH is killed to prevent problems with wrong values in NFIELDLIST
         END IF
         !
@@ -634,9 +637,9 @@ SUBROUTINE POPULATE_STRUCT(TPFILE_FIRST,TPFILE_LAST,KSTEPS,HFILETYPE,TPBAKOUTN)
   END DO
 END SUBROUTINE POPULATE_STRUCT
 !
-END SUBROUTINE IO_PREPARE_BAKOUT_STRUCT
+END SUBROUTINE IO_Bakout_struct_prepare
 !
-SUBROUTINE IO_FILE_ADD2LIST(TPFILE,HNAME,HTYPE,HMODE,                 &
+SUBROUTINE IO_File_add2list(TPFILE,HNAME,HTYPE,HMODE,                 &
                             HFORM,HACCESS,HFORMAT,HDIRNAME,           &
                             KLFINPRAR,KLFITYPE,KLFIVERB,KRECL,KMODEL, &
                             TPDADFILE,TPDATAFILE,OOLD,OSPLIT_IOZ)
@@ -674,7 +677,7 @@ INTEGER :: ILFIVERB
 LOGICAL :: GOLD
 logical :: gsplit_ioz
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','called for '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_add2list','called for '//TRIM(HNAME))
 !
 IMI = GET_CURRENT_MODEL_INDEX()
 !
@@ -686,57 +689,57 @@ END IF
 !
 IF (ASSOCIATED(TPFILE)) THEN
   IF (GOLD) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated. Pointer will be overwritten')
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already associated. Pointer will be overwritten')
     TPFILE => NULL()
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already associated')
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already associated')
   END IF
 END IF
 !
-CALL IO_FILE_FIND_BYNAME(HNAME,TPFILE,IRESP,OOLD=GOLD)
+CALL IO_File_find_byname(HNAME,TPFILE,IRESP,OOLD=GOLD)
 IF (IRESP==0) THEN
   !File has been found
   !Check if really same one (LFI vs netCDF)
   IF (PRESENT(HFORMAT)) THEN
     IF ( (HFORMAT=='LFI' .AND. TPFILE%CFORMAT/='NETCDF4') .OR. (HFORMAT=='NETCDF4' .AND. TPFILE%CFORMAT/='LFI') ) THEN
-      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist')
+      CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already in filelist')
     END IF
   ELSE
     IF (.NOT.GOLD) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already in filelist')
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_ADD2LIST','file '//TRIM(HNAME)//' already in filelist (not unexpected)')
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_add2list','file '//TRIM(HNAME)//' already in filelist (not unexpected)')
     END IF
     RETURN
   END IF
 END IF
 !
 IF(     PRESENT(HFORM) .AND. TRIM(HTYPE)/='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument HFORM is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument HFORM is not used by '//TRIM(HTYPE)//' files')
 IF(.NOT.PRESENT(HFORM) .AND. TRIM(HTYPE)=='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument HFORM is necessary for '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','optional argument HFORM is necessary for '//TRIM(HTYPE)//' files')
 IF(PRESENT(HFORM)) THEN
   IF(HFORM/='FORMATTED' .AND. HFORM/='UNFORMATTED') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HFORM should be FORMATTED or UNFORMATTED and not '//TRIM(HFORM))
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','HFORM should be FORMATTED or UNFORMATTED and not '//TRIM(HFORM))
 END IF
 !
 IF(     PRESENT(HACCESS) .AND. TRIM(HTYPE)/='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument HACCESS is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument HACCESS is not used by '//TRIM(HTYPE)//' files')
 IF(.NOT.PRESENT(HACCESS) .AND. TRIM(HTYPE)=='SURFACE_DATA') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument HACCESS is necessary for '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','optional argument HACCESS is necessary for '//TRIM(HTYPE)//' files')
 IF(PRESENT(HACCESS)) THEN
   IF(HACCESS/='DIRECT' .AND. HACCESS/='SEQUENTIAL' .AND. HACCESS/='STREAM') &
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','HACCESS should be DIRECT, SEQUENTIAL or STREAM and not '//TRIM(HACCESS))
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','HACCESS should be DIRECT, SEQUENTIAL or STREAM and not '//TRIM(HACCESS))
 END IF
 !
 IF (PRESENT(HFORMAT)) THEN
   IF(CPROGRAM=='LFICDF') THEN
     IF (HFORMAT/='LFI' .AND. HFORMAT/='NETCDF4') &
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid HFORMAT ('//TRIM(HFORMAT)//')')
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid HFORMAT ('//TRIM(HFORMAT)//')')
   END IF
 ELSE
   IF(CPROGRAM=='LFICDF') &
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','optional argument HFORMAT is necessary for CPROGRAM='//TRIM(CPROGRAM))
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','optional argument HFORMAT is necessary for CPROGRAM='//TRIM(CPROGRAM))
 END IF
 !
 IF(PRESENT(KLFINPRAR)) THEN
@@ -758,15 +761,15 @@ ELSE
 END IF
 !
 IF(     PRESENT(KRECL) .AND. TRIM(HTYPE)/='SURFACE_DATA' .AND. TRIM(HTYPE)/='TXT') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument KRECL is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument KRECL is not used by '//TRIM(HTYPE)//' files')
 IF(.NOT.PRESENT(KRECL) .AND. TRIM(HTYPE)=='SURFACE_DATA') THEN
     IF(TRIM(HACCESS)=='DIRECT') &
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','optional argument KRECL is necessary for '//TRIM(HTYPE)// &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','optional argument KRECL is necessary for '//TRIM(HTYPE)// &
                                                          ' files in DIRECT access')
 END IF
 !
 IF (PRESENT(TPDATAFILE) .AND. TRIM(HTYPE)/='DES') &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','optional argument TPDATAFILE is not used by '//TRIM(HTYPE)//' files')
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','optional argument TPDATAFILE is not used by '//TRIM(HTYPE)//' files')
 !
 IF (.NOT.ASSOCIATED(TFILE_LAST)) THEN
   ALLOCATE(TFILE_LAST)
@@ -787,7 +790,7 @@ IF (PRESENT(HDIRNAME)) THEN
 END IF
 !
 IF (TRIM(HMODE)/='READ' .AND. TRIM(HMODE)/='WRITE') THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','unknown mode ('//TRIM(HMODE)//') for file '//TRIM(HNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','unknown mode ('//TRIM(HMODE)//') for file '//TRIM(HNAME))
 END IF
 !
 TPFILE%CMODE = HMODE
@@ -819,7 +822,7 @@ SELECT CASE(TPFILE%CTYPE)
   !Chemistry input files
   CASE('CHEMINPUT')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CACCESS = 'SEQUENTIAL'
     TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
@@ -828,7 +831,7 @@ SELECT CASE(TPFILE%CTYPE)
   !Chemistry tabulation files
   CASE('CHEMTAB')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CACCESS = 'SEQUENTIAL'
     TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
@@ -841,14 +844,14 @@ SELECT CASE(TPFILE%CTYPE)
     TPFILE%CFORMAT = 'TEXT'
     TPFILE%NRECL   = 8*1024
     IF (.NOT.PRESENT(TPDATAFILE)) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','missing TPDATAFILE argument for DES file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','missing TPDATAFILE argument for DES file '//TRIM(HNAME))
     ELSE
       IF (.NOT.ASSOCIATED(TPDATAFILE)) &
-        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','TPDATAFILE is not associated for DES file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','TPDATAFILE is not associated for DES file '//TRIM(HNAME))
       TPFILE%TDATAFILE => TPDATAFILE
       TPDATAFILE%TDESFILE => TPFILE
       IF (PRESENT(HDIRNAME)) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST','HDIRNAME argument ignored for DES file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list','HDIRNAME argument ignored for DES file '//TRIM(HNAME))
       IF (ALLOCATED(TPDATAFILE%CDIRNAME)) TPFILE%CDIRNAME = TPDATAFILE%CDIRNAME
     END IF
 
@@ -856,7 +859,7 @@ SELECT CASE(TPFILE%CTYPE)
   !GPS files
   CASE('GPS')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CACCESS = 'SEQUENTIAL'
     TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
@@ -865,7 +868,7 @@ SELECT CASE(TPFILE%CTYPE)
   !Meteo files
   CASE('METEO')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CACCESS = 'SEQUENTIAL'
     TPFILE%CFORM   = 'UNFORMATTED'
     TPFILE%CFORMAT = 'BINARY'
@@ -875,7 +878,7 @@ SELECT CASE(TPFILE%CTYPE)
   !Namelist files
   CASE('NML')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CACCESS = 'SEQUENTIAL'
     TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
@@ -884,7 +887,7 @@ SELECT CASE(TPFILE%CTYPE)
   !OUTPUTLISTING files
   CASE('OUTPUTLISTING')
     IF (TRIM(HMODE)/='WRITE') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CACCESS = 'SEQUENTIAL'
     TPFILE%CFORM   = 'FORMATTED'
     TPFILE%CFORMAT = 'TEXT'
@@ -893,7 +896,7 @@ SELECT CASE(TPFILE%CTYPE)
   !SURFACE_DATA files
   CASE('SURFACE_DATA')
     IF (TRIM(HMODE)/='READ') & !Invalid because not (yet) necessary
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_ADD2LIST','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_add2list','invalid mode '//TRIM(HMODE)//' for file '//TRIM(HNAME))
     TPFILE%CFORMAT = 'SURFACE_DATA'
     TPFILE%CFORM   = HFORM
     TPFILE%CACCESS = HACCESS
@@ -920,7 +923,7 @@ SELECT CASE(TPFILE%CTYPE)
       ELSE IF (LIOCDF4) THEN
         TPFILE%CFORMAT = 'NETCDF4'
       ELSE
-        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','invalid format for file '//TRIM(HNAME))
       END IF
     ELSE IF (TRIM(HMODE)=='WRITE') THEN
       IF (PRESENT(HFORMAT)) THEN
@@ -934,7 +937,7 @@ SELECT CASE(TPFILE%CTYPE)
         TPFILE%CFORMAT = 'LFI'
         TPFILE%NLFINPRAR = ILFINPRAR
       ELSE
-        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid format for file '//TRIM(HNAME))
+        CALL PRINT_MSG(NVERB_FATAL,'IO','IO_File_add2list','invalid format for file '//TRIM(HNAME))
       END IF
     END IF
     !
@@ -948,7 +951,7 @@ SELECT CASE(TPFILE%CTYPE)
     END IF
     !
     IF(PRESENT(TPDADFILE)) THEN
-      IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_ADD2LIST', &
+      IF (.NOT.ASSOCIATED(TPDADFILE)) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_add2list', &
                                                      'TPDADFILE provided but not associated for file '//TRIM(HNAME))
       TPFILE%TDADFILE => TPDADFILE
     ELSE
@@ -957,7 +960,7 @@ SELECT CASE(TPFILE%CTYPE)
 
 
   CASE default
-    call print_msg(NVERB_FATAL,'IO','IO_FILE_ADD2LIST','invalid type '//trim(tpfile%ctype)//' for file '//trim(hname))
+    call print_msg(NVERB_FATAL,'IO','IO_File_add2list','invalid type '//trim(tpfile%ctype)//' for file '//trim(hname))
 END SELECT
 !
 IF(PRESENT(KMODEL)) TPFILE%NMODEL = KMODEL
@@ -966,9 +969,9 @@ TPFILE%LOPENED = .FALSE.
 TPFILE%NOPEN   = 0
 TPFILE%NCLOSE  = 0
 !
-END SUBROUTINE IO_FILE_ADD2LIST
+END SUBROUTINE IO_File_add2list
 !
-SUBROUTINE IO_FILE_FIND_BYNAME(HNAME,TPFILE,KRESP,OOLD)
+SUBROUTINE IO_File_find_byname(HNAME,TPFILE,KRESP,OOLD)
 !
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAX
 !
@@ -981,7 +984,7 @@ LOGICAL, OPTIONAL,      INTENT(IN)  :: OOLD   ! FALSE if new file (should not be
 TYPE(TFILEDATA),POINTER :: TZFILE ! File structure
 LOGICAL                 :: GOLD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME','looking for '//TRIM(HNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_find_byname','looking for '//TRIM(HNAME))
 !
 NULLIFY(TPFILE)
 KRESP = 0
@@ -993,10 +996,10 @@ ELSE
 END IF
 !
 IF (LEN_TRIM(HNAME)>NFILENAMELGTMAX) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','HNAME length is bigger than NFILENAMELGTMAX for '//TRIM(HNAME))
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_find_byname','HNAME length is bigger than NFILENAMELGTMAX for '//TRIM(HNAME))
 !
 IF (.NOT.ASSOCIATED(TFILE_FIRST)) THEN
-  IF (GOLD) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FILE_FIND_BYNAME','filelist is empty')
+  IF (GOLD) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_File_find_byname','filelist is empty')
 ELSE
   !
   TZFILE => TFILE_FIRST
@@ -1012,19 +1015,19 @@ ELSE
 END IF
 !
 IF (.NOT.ASSOCIATED(TPFILE)) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME','file '//TRIM(HNAME)//' not found in list')
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_find_byname','file '//TRIM(HNAME)//' not found in list')
   KRESP = -1 !File not found
 ELSE
   IF (GOLD) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_FIND_BYNAME',TRIM(HNAME)//' was found')
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_File_find_byname',TRIM(HNAME)//' was found')
   ELSE !File should not be found
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_FILE_FIND_BYNAME',TRIM(HNAME)//' was found (unexpected)')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_File_find_byname',TRIM(HNAME)//' was found (unexpected)')
   END IF
 END IF
 !
-END SUBROUTINE IO_FILE_FIND_BYNAME
+END SUBROUTINE IO_File_find_byname
 !
-SUBROUTINE IO_FILE_PRINT_LIST(TPFILE_FIRST)
+SUBROUTINE IO_Filelist_print(TPFILE_FIRST)
 !
 USE MODD_VAR_ll, ONLY : IP
 !
@@ -1034,7 +1037,7 @@ TYPE(TFILEDATA),POINTER :: TZFILE ! File structure
 !
 IF (IP/=1 .AND. .NOT.LVERB_ALLPRC) RETURN
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FILE_PRINT_LIST','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Filelist_print','called')
 !
 IF (PRESENT(TPFILE_FIRST)) THEN
   IF (.NOT.ASSOCIATED(TPFILE_FIRST)) RETURN
@@ -1060,6 +1063,6 @@ DO WHILE (ASSOCIATED(TZFILE%TFILE_NEXT))
 END DO
 WRITE (*,'(/)')
 !
-END SUBROUTINE IO_FILE_PRINT_LIST
+END SUBROUTINE IO_Filelist_print
 !
 END MODULE MODE_IO_MANAGE_STRUCT
diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
index 91e4e0031..991a0c4b4 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_read_lfi.f90
@@ -1,15 +1,17 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-module mode_io_read_lfi
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 21/06/2018:      read and write correctly if MNH_REAL=4
-!  Philippe Wautelet: 14/12/2018:      split fmreadwrit.f90
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 21/06/2018: read and write correctly if MNH_REAL=4
+!  P. Wautelet 14/12/2018: split fmreadwrit.f90
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!-----------------------------------------------------------------
+module mode_io_read_lfi
 !
-USE MODD_IO_ll
+USE MODD_IO
 USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH
 !
 USE MODE_FIELD, ONLY : TFIELDDATA
@@ -19,26 +21,26 @@ IMPLICIT NONE
 !
 PRIVATE
 !
+public :: IO_Field_read_lfi
+!
 INTEGER, PARAMETER :: JPXKRK = NLFIMAXCOMMENTLENGTH
 INTEGER, PARAMETER :: JPXFIE = 1.5E8
 !
-INTERFACE IO_READ_FIELD_LFI
-   MODULE PROCEDURE IO_READ_FIELD_LFI_X0, IO_READ_FIELD_LFI_X1, &
-                    IO_READ_FIELD_LFI_X2, IO_READ_FIELD_LFI_X3, &
-                    IO_READ_FIELD_LFI_X4, IO_READ_FIELD_LFI_X5, &
-                    IO_READ_FIELD_LFI_X6,                       &
-                    IO_READ_FIELD_LFI_N0, IO_READ_FIELD_LFI_N1, &
-                    IO_READ_FIELD_LFI_N2,                       &
-                    IO_READ_FIELD_LFI_L0, IO_READ_FIELD_LFI_L1, &
-                    IO_READ_FIELD_LFI_C0,                       &
-                    IO_READ_FIELD_LFI_T0
-END INTERFACE IO_READ_FIELD_LFI
-!
-PUBLIC IO_READ_FIELD_LFI
+INTERFACE IO_Field_read_lfi
+   MODULE PROCEDURE IO_Field_read_lfi_X0, IO_Field_read_lfi_X1, &
+                    IO_Field_read_lfi_X2, IO_Field_read_lfi_X3, &
+                    IO_Field_read_lfi_X4, IO_Field_read_lfi_X5, &
+                    IO_Field_read_lfi_X6,                       &
+                    IO_Field_read_lfi_N0, IO_Field_read_lfi_N1, &
+                    IO_Field_read_lfi_N2,                       &
+                    IO_Field_read_lfi_L0, IO_Field_read_lfi_L1, &
+                    IO_Field_read_lfi_C0,                       &
+                    IO_Field_read_lfi_T0
+END INTERFACE IO_Field_read_lfi
 !
 CONTAINS
 !
-SUBROUTINE IO_READ_FIELD_LFI_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -58,11 +60,11 @@ INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 REAL,DIMENSION(1)                        :: ZFIELD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   !TRANSFER_I8_R works with 1D arrays
@@ -74,10 +76,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X0
+END SUBROUTINE IO_Field_read_lfi_X0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -96,11 +98,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = TRANSFER_I8_R(IWORK(IWORK(2)+3:))
 !
@@ -108,10 +110,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X1
+END SUBROUTINE IO_Field_read_lfi_X1
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X2(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -130,11 +132,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -142,10 +144,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X2
+END SUBROUTINE IO_Field_read_lfi_X2
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -164,11 +166,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -176,10 +178,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X3
+END SUBROUTINE IO_Field_read_lfi_X3
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -198,11 +200,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -210,10 +212,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X4
+END SUBROUTINE IO_Field_read_lfi_X4
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -232,11 +234,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -244,10 +246,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X5
+END SUBROUTINE IO_Field_read_lfi_X5
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -266,11 +268,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) PFIELD = RESHAPE( TRANSFER_I8_R(IWORK(IWORK(2)+3:)) , SHAPE(PFIELD) )
 !
@@ -278,10 +280,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_X6
+END SUBROUTINE IO_Field_read_lfi_X6
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -300,11 +302,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) KFIELD = IWORK(IWORK(2)+3)
 !
@@ -312,10 +314,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_N0
+END SUBROUTINE IO_Field_read_lfi_N0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -334,11 +336,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) KFIELD(:) = IWORK(IWORK(2)+3:)
 !
@@ -346,10 +348,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_N1
+END SUBROUTINE IO_Field_read_lfi_N1
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -368,11 +370,11 @@ INTEGER                                  :: ILENG
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) KFIELD(:,:) = RESHAPE(IWORK(IWORK(2)+3:),SHAPE(KFIELD))
 !
@@ -380,10 +382,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_N2
+END SUBROUTINE IO_Field_read_lfi_N2
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -403,11 +405,11 @@ INTEGER                                  :: IFIELD
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   IFIELD = IWORK(IWORK(2)+3)
@@ -416,7 +418,7 @@ IF (GGOOD) THEN
   ELSE IF (IFIELD==1) THEN
     OFIELD = .TRUE.
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_lfi_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
                                                            //TRIM(TPFIELD%CMNHNAME))
     OFIELD = .TRUE.
     IRESP = -112
@@ -427,10 +429,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_L0
+END SUBROUTINE IO_Field_read_lfi_L0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -451,11 +453,11 @@ INTEGER, DIMENSION(SIZE(OFIELD))         :: IFIELD
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(OFIELD)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   IFIELD(:) = IWORK(IWORK(2)+3:)
@@ -470,7 +472,7 @@ IF (GGOOD) THEN
     END IF
   END DO
   IF (IRESP==-112) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_lfi_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
                                                            //TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -479,10 +481,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_L1
+END SUBROUTINE IO_Field_read_lfi_L1
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_read_lfi_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
 !
@@ -504,7 +506,7 @@ INTEGER                                  :: ILENG, ILENGMAX, JLOOP
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 LOGICAL                                  :: GGOOD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = LEN(HFIELD)
 ILENGMAX = ILENG
@@ -514,11 +516,11 @@ IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN
   ILENG = MIN(LEN(HFIELD),NFILENAMELGTMAXLFI)
   ILENGMAX = NFILENAMELGTMAXLFI
   IF (LEN(HFIELD)<NFILENAMELGTMAXLFI) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_lfi_C0',TRIM(TPFILE%CNAME)// &
                       ': LEN(HFIELD)<NFILENAMELGTMAXLFI')
 END IF
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,ILENGMAX,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TPFIELD,ILENGMAX,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   DO JLOOP=1,ILENG
@@ -530,10 +532,10 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_READ_FIELD_LFI_C0
+END SUBROUTINE IO_Field_read_lfi_C0
 !
 !
-SUBROUTINE IO_READ_FIELD_LFI_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_read_lfi_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODE_MSG
 USE MODD_TYPE_DATE
@@ -557,7 +559,7 @@ TYPE(TFIELDDATA)                         :: TZFIELD
 INTEGER, DIMENSION(3)                    :: ITDATE    ! date array
 REAL,DIMENSION(1)                        :: ZTIME
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_LFI_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_lfi_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 !
 TZFIELD = TPFIELD
 !
@@ -568,7 +570,7 @@ TZFIELD%CCOMMENT = 'YYYYMMDD'
 !
 ILENG=SIZE(ITDATE)
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   TPDATA%TDATE%YEAR  = IWORK(IWORK(2)+2+1)
@@ -590,7 +592,7 @@ TZFIELD%CCOMMENT = 'SECONDS'
 !
 ILENG=1
 !
-CALL IO_READ_CHECK_FIELD_LFI(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
+CALL IO_Field_read_check_lfi(TPFILE,TZFIELD,ILENG,IWORK,ITOTAL,IRESP,GGOOD)
 !
 IF (GGOOD) THEN
   !TRANSFER_I8_R works with 1D arrays
@@ -602,10 +604,10 @@ IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
 KRESP = IRESP
 !
-END SUBROUTINE IO_READ_FIELD_LFI_T0
+END SUBROUTINE IO_Field_read_lfi_T0
 !
 !
-SUBROUTINE IO_READ_CHECK_FIELD_LFI(TPFILE,TPFIELD,KLENG,KWORK,KTOTAL,KRESP,OGOOD)
+SUBROUTINE IO_Field_read_check_lfi(TPFILE,TPFIELD,KLENG,KWORK,KTOTAL,KRESP,OGOOD)
 !
 USE MODD_PARAMETERS, ONLY: NGRIDUNKNOWN
 !
@@ -634,7 +636,7 @@ GOLDMNH = TPFILE%NMNHVERSION(1)<5 .OR. (TPFILE%NMNHVERSION(1)==5 .AND. TPFILE%NM
 !
 YRECFM=TRIM(TPFIELD%CMNHNAME)
 IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI','field name was truncated to '&
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi','field name was truncated to '&
                  //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
 !
 !*      2.a   LET'S GET SOME INFORMATION ON THE DESIRED ARTICLE
@@ -645,17 +647,17 @@ CALL LFINFO(KRESP,INUMBR,YRECFM,KTOTAL,IPOSEX)
 IF (KRESP.NE.0) THEN
   WRITE(YRESP, '( I12 )') KRESP
   YMSG = 'RESP='//TRIM(ADJUSTL(YRESP))//' in call to LFINFO when reading '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI',YMSG)
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi',YMSG)
   OGOOD = .FALSE.
   RETURN
 ELSEIF (KTOTAL.EQ.0) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': record length is zero for ' &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)//': record length is zero for ' &
                                                                   //TRIM(TPFIELD%CMNHNAME))
   KRESP=-47
   OGOOD = .FALSE.
   RETURN
 ELSEIF (KTOTAL.GT.JPXFIE) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)// &
                                ': record length exceeds the maximum value in FM for '//TRIM(TPFIELD%CMNHNAME))
   KRESP=-48
   OGOOD = .FALSE.
@@ -670,7 +672,7 @@ CALL LFILEC(KRESP,INUMBR,YRECFM,KWORK,KTOTAL)
 IF (KRESP.NE.0) THEN
   WRITE(YRESP, '( I12 )') KRESP
   YMSG = 'RESP='//TRIM(ADJUSTL(YRESP))//' in call to LFILEC when reading '//TRIM(TPFIELD%CMNHNAME)//' in '//TRIM(TPFILE%CNAME)
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI',YMSG)
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi',YMSG)
   OGOOD = .FALSE.
   RETURN
 ENDIF
@@ -683,7 +685,7 @@ IROW=KLENG+ICOMLEN+2
 IF (KTOTAL.NE.IROW) THEN
   WRITE(YRECLENGTH_FILE,'(I12)') KTOTAL-2-ICOMLEN
   WRITE(YRECLENGTH_MEM, '(I12)') KLENG
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI','wrong field size for '//TRIM(TPFIELD%CMNHNAME) &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi','wrong field size for '//TRIM(TPFIELD%CMNHNAME) &
                                      //' (expected: '//TRIM(ADJUSTL(YRECLENGTH_MEM))//                            &
                                      ', in file: '   //TRIM(ADJUSTL(YRECLENGTH_FILE))//')')
   KRESP=-63
@@ -701,21 +703,21 @@ IF (KWORK(1)/=TPFIELD%NGRID) THEN
   ELSE
     IERRLEVEL = NVERB_ERROR
   END IF
-  CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID value ('//TRIM(ADJUSTL(YVAL_MEM))// &
+  CALL PRINT_MSG(IERRLEVEL,'IO','IO_Field_read_check_lfi','expected GRID value ('//TRIM(ADJUSTL(YVAL_MEM))// &
                  ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
   IF(.NOT.GOLDMNH) THEN !Do not modify probably incorrect grid number (to prevent problems later with other correct files)
     TPFIELD%NGRID = KWORK(1)
     KRESP = -111 !Used later to broadcast modified metadata
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_LFI','expected GRID    found in file for field ' &
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_check_lfi','expected GRID    found in file for field ' &
                                                             //TRIM(TPFIELD%CMNHNAME))
 ENDIF
 !
 YCOMMENT=''
 SELECT CASE (ICOMLEN)
 CASE(:-1)
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': comment length is negative for ' &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)//': comment length is negative for ' &
                                                                   //TRIM(TPFIELD%CMNHNAME))
   KRESP=-58
   OGOOD = .FALSE.
@@ -728,23 +730,23 @@ CASE(1:JPXKRK)
     YCOMMENT(J:J)=CHAR(ICOMMENT(J))
   ENDDO
 CASE(JPXKRK+1:)
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_LFI',TRIM(TPFILE%CNAME)//': comment is too long in file for ' &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_read_check_lfi',TRIM(TPFILE%CNAME)//': comment is too long in file for ' &
                                                                   //TRIM(TPFIELD%CMNHNAME))
   KRESP=-56
   RETURN
 END SELECT
 !
 IF (TRIM(YCOMMENT)/=TRIM(TPFIELD%CCOMMENT)) THEN
-  CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_LFI','expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)// &
+  CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_read_check_lfi','expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)// &
                  ') is different than found ('//TRIM(YCOMMENT)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
   TPFIELD%CCOMMENT=TRIM(YCOMMENT)
   KRESP = -111 !Used later to broadcast modified metadata
 ELSE
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_LFI','expected COMMENT found in file for field ' &
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_check_lfi','expected COMMENT found in file for field ' &
                                                             //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
-END SUBROUTINE IO_READ_CHECK_FIELD_LFI
+END SUBROUTINE IO_Field_read_check_lfi
 !
 !
 FUNCTION TRANSFER_I8_R(KFIELDIN) RESULT(PFIELDOUT)
diff --git a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
index 9fb6870ad..2b760b114 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_read_nc4.f90
@@ -3,21 +3,22 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Modifications:
-!    P. Wautelet : may 2016   : use NetCDF Fortran module
-!    J.Escobar   : 14/12/2017 : Correction for MNH_INT=8
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!    P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files
-!  Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
+! Modifications:
+!  P. Wautelet may 2016  : use NetCDF Fortran module
+!  J. Escobar  14/12/2017: correction for MNH_INT=8
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_read_nc4
 
-use modd_io_ll,        only: tfiledata
+use modd_io,           only: tfiledata
 use modd_netcdf,       only: IDCDF_KIND
 
 use mode_field,        only: tfielddata
-use mode_io_tools_nc4, only: cleanmnhname, io_handle_err_nc4
+use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Err_handle_nc4
 use mode_msg
 
 use NETCDF,            only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64,  &
@@ -29,23 +30,23 @@ implicit none
 
 private
 
-public :: io_read_field_nc4
+public :: IO_Field_read_nc4
 
-INTERFACE IO_READ_FIELD_NC4
-   MODULE PROCEDURE IO_READ_FIELD_NC4_X0,IO_READ_FIELD_NC4_X1, &
-                    IO_READ_FIELD_NC4_X2,IO_READ_FIELD_NC4_X3, &
-                    IO_READ_FIELD_NC4_X4,IO_READ_FIELD_NC4_X5, &
-                    IO_READ_FIELD_NC4_X6,                      &
-                    IO_READ_FIELD_NC4_N0,IO_READ_FIELD_NC4_N1, &
-                    IO_READ_FIELD_NC4_N2,                      &
-                    IO_READ_FIELD_NC4_L0,IO_READ_FIELD_NC4_L1, &
-                    IO_READ_FIELD_NC4_C0,                      &
-                    IO_READ_FIELD_NC4_T0
-END INTERFACE IO_READ_FIELD_NC4
+INTERFACE IO_Field_read_nc4
+   MODULE PROCEDURE IO_Field_read_nc4_X0,IO_Field_read_nc4_X1, &
+                    IO_Field_read_nc4_X2,IO_Field_read_nc4_X3, &
+                    IO_Field_read_nc4_X4,IO_Field_read_nc4_X5, &
+                    IO_Field_read_nc4_X6,                      &
+                    IO_Field_read_nc4_N0,IO_Field_read_nc4_N1, &
+                    IO_Field_read_nc4_N2,                      &
+                    IO_Field_read_nc4_L0,IO_Field_read_nc4_L1, &
+                    IO_Field_read_nc4_C0,                      &
+                    IO_Field_read_nc4_T0
+END INTERFACE IO_Field_read_nc4
 
 contains
 
-SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,KRESP,HCALENDAR)
+SUBROUTINE IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,KVARID,KRESP,HCALENDAR)
 !
 USE MODD_PARAMETERS, ONLY: NGRIDUNKNOWN
 !
@@ -64,7 +65,7 @@ CHARACTER(LEN=12)            :: YVAL_FILE, YVAL_MEM
 CHARACTER(LEN=:),ALLOCATABLE :: YVALUE
 LOGICAL                      :: GOLDMNH !if old version of MesoNH (<5.4, old files without complete and correct metadata)
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)//': called for field '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)//': called for field '//TRIM(TPFIELD%CMNHNAME))
 !
 KRESP = 0
 INCID = TPFILE%NNCID
@@ -85,7 +86,7 @@ IF (STATUS == NF90_NOERR) THEN
   IF (IGRID/=TPFIELD%NGRID) THEN
     WRITE(YVAL_FILE,'(I12)') IGRID
     WRITE(YVAL_MEM, '(I12)') TPFIELD%NGRID
-    CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(IERRLEVEL,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID     value ('//TRIM(ADJUSTL(YVAL_MEM))//             &
                    ') is different than found in file ('//TRIM(ADJUSTL(YVAL_FILE))//') for variable '//TRIM(TPFIELD%CMNHNAME))
     IF (.NOT.GOLDMNH) THEN !Do not modify probably incorrect grid number (to prevent problems later with other correct files)
@@ -93,15 +94,15 @@ IF (STATUS == NF90_NOERR) THEN
       KRESP = -111 !Used later to broadcast modified metadata
     END IF
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID found in file for field '//TRIM(TPFIELD%CMNHNAME))
   ENDIF
 ELSE !no GRID
   IF (TPFIELD%NGRID==0 .OR. TPFIELD%NGRID==NGRIDUNKNOWN) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no GRID (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(IERRLEVEL,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(IERRLEVEL,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected GRID but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 ENDIF
@@ -114,26 +115,26 @@ IF (STATUS == NF90_NOERR) THEN
   STATUS = NF90_GET_ATT(INCID, KVARID, 'comment', YVALUE)
   IF (LEN_TRIM(TPFIELD%CCOMMENT)==0 .AND. LEN_TRIM(YVALUE)>0) THEN
     !Expected comment is empty, read comment is not
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': COMMENT  found (unexpected) in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CCOMMENT=TRIM(YVALUE)
   ELSE IF (TRIM(YVALUE)/=TRIM(TPFIELD%CCOMMENT)) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected COMMENT ('//TRIM(TPFIELD%CCOMMENT)//                    &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CCOMMENT=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected COMMENT  found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no COMMENT
   IF (LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no COMMENT (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected COMMENT but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -145,22 +146,22 @@ IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
   STATUS = NF90_GET_ATT(INCID, KVARID, 'standard_name', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CSTDNAME)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected STDNAME  ('//TRIM(TPFIELD%CSTDNAME)//                      &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CSTDNAME=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected STDNAME  found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no STDNAME
   IF (LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no STDNAME (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected STDNAME but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -172,22 +173,22 @@ IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
   STATUS = NF90_GET_ATT(INCID, KVARID, 'long_name', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CLONGNAME)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected LONGNAME ('//TRIM(TPFIELD%CLONGNAME)//                  &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
     TPFIELD%CLONGNAME=TRIM(YVALUE)
     KRESP = -111 !Used later to broadcast modified metadata
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected LONGNAME found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no LONGNAME
   IF (LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no LONGNAME (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected LONGNAME but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
 END IF
@@ -200,30 +201,30 @@ IF (STATUS == NF90_NOERR) THEN
   STATUS = NF90_GET_ATT(INCID, KVARID, 'units', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(TPFIELD%CUNITS)) THEN
     IF(.NOT.PRESENT(HCALENDAR)) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': expected UNITS ('//TRIM(TPFIELD%CUNITS)//                           &
                      ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
       KRESP = -111 !Used later to broadcast modified metadata
     ELSE
-      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': UNITS found in file for field '//TRIM(TPFIELD%CMNHNAME)//' (will be analysed later)')
     END IF
     TPFIELD%CUNITS=TRIM(YVALUE)
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected UNITS    found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no UNITS
   IF (LEN_TRIM(TPFIELD%CUNITS)==0) THEN
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': no UNITS (as expected) in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
     IF(.NOT.PRESENT(HCALENDAR)) THEN
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': expected UNITS but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
     ELSE
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                      ': expected UNITS but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
       KRESP = -3
     END IF
@@ -238,24 +239,24 @@ IF (STATUS == NF90_NOERR) THEN
   ALLOCATE(CHARACTER(LEN=ILEN) :: YVALUE)
   STATUS = NF90_GET_ATT(INCID, KVARID, 'calendar', YVALUE)
   IF (TRIM(YVALUE)/=TRIM(HCALENDAR)) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected CALENDAR ('//TRIM(HCALENDAR)//                             &
                    ') is different than found ('//TRIM(YVALUE)//') in file for field '//TRIM(TPFIELD%CMNHNAME))
   ELSE
-    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                    ': expected CALENDAR found in file for field '//TRIM(TPFIELD%CMNHNAME))
   END IF
   DEALLOCATE(YVALUE)
 ELSE !no CALENDAR
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_READ_CHECK_FIELD_ATTR_NC4',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_read_check_nc4',TRIM(TPFILE%CNAME)// &
                  ': expected CALENDAR but not found in file for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 ENDIF
 !
-END SUBROUTINE IO_READ_CHECK_FIELD_ATTR_NC4
+END SUBROUTINE IO_Field_attr_read_check_nc4
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X0(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X0(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 REAL,             INTENT(OUT)   :: PFIELD
@@ -269,22 +270,22 @@ INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
 CHARACTER(LEN=30)        :: YVARNAME
 INTEGER                  :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -293,13 +294,13 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Read variable
   STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
   IF (STATUS /= NF90_NOERR) THEN
-    CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+    CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
     GOTO 1000
   END IF
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+  CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong size or type)')
   IRESP = -3
 END IF
@@ -307,10 +308,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X0
+END SUBROUTINE IO_Field_read_nc4_X0
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X1(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X1(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:),INTENT(OUT)   :: PFIELD
@@ -326,22 +327,22 @@ CHARACTER(LEN=30)        :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER                  :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -349,24 +350,24 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 1 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN == SIZE(PFIELD)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -374,10 +375,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X1
+END SUBROUTINE IO_Field_read_nc4_X1
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X2(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X2(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),    INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),   INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:),INTENT(OUT)   :: PFIELD
@@ -393,22 +394,22 @@ CHARACTER(LEN=30)        :: YVARNAME
 INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN
 INTEGER                  :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -416,39 +417,39 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 !Treat special case of a degenerated 3D array (3rd dimension size is 1)
 IF (IDIMS==3) THEN
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   IF (IDIMLEN(3)==1) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)// &
                    ': reading 3D array with degenerated third dimension in 2D array for '//TRIM(YVARNAME))
     IDIMS = 2
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
   END IF
 END IF
 
 IF (IDIMS == 2 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -456,10 +457,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X2
+END SUBROUTINE IO_Field_read_nc4_X2
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X3(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X3(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),      INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),     INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:),INTENT(OUT)   :: PFIELD
@@ -475,22 +476,22 @@ INTEGER(KIND=IDCDF_KIND),DIMENSION(3)                 :: IDIMLEN
 CHARACTER(LEN=30)                                     :: YVARNAME
 INTEGER                                               :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -498,28 +499,28 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 3 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. IDIMLEN(3) == SIZE(PFIELD,3)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X3','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X3','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -527,10 +528,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X3
+END SUBROUTINE IO_Field_read_nc4_X3
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X4(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X4(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),        INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),       INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:,:),INTENT(OUT)   :: PFIELD
@@ -546,22 +547,22 @@ INTEGER(KIND=IDCDF_KIND),DIMENSION(4)                 :: IDIMLEN
 CHARACTER(LEN=30)                                     :: YVARNAME
 INTEGER                                               :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -569,31 +570,31 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 4 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. &
        IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X4','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X4','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -601,10 +602,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X4
+END SUBROUTINE IO_Field_read_nc4_X4
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X5(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X5(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),         INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:,:,:),INTENT(OUT)   :: PFIELD
@@ -620,22 +621,22 @@ INTEGER(KIND=IDCDF_KIND),DIMENSION(5)                 :: IDIMLEN
 CHARACTER(LEN=30)                                     :: YVARNAME
 INTEGER                                               :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -643,15 +644,15 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(5), LEN=IDIMLEN(5))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. &
        IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4) .AND. &
@@ -659,18 +660,18 @@ IF (IDIMS == 5 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X5','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X5','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -678,10 +679,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X5
+END SUBROUTINE IO_Field_read_nc4_X5
 
 
-SUBROUTINE IO_READ_FIELD_NC4_X6(TPFILE, TPFIELD, PFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_X6(TPFILE, TPFIELD, PFIELD, KRESP)
 TYPE(TFILEDATA),            INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),           INTENT(INOUT) :: TPFIELD
 REAL,DIMENSION(:,:,:,:,:,:),INTENT(OUT)   :: PFIELD
@@ -697,22 +698,22 @@ INTEGER(KIND=IDCDF_KIND),DIMENSION(6)                 :: IDIMLEN
 CHARACTER(LEN=30)                                     :: YVARNAME
 INTEGER                                               :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -720,17 +721,17 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(4), LEN=IDIMLEN(4))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(5), LEN=IDIMLEN(5))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(6), LEN=IDIMLEN(6))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF ( IDIMLEN(1) == SIZE(PFIELD,1) .AND. IDIMLEN(2) == SIZE(PFIELD,2) .AND. &
        IDIMLEN(3) == SIZE(PFIELD,3) .AND. IDIMLEN(4) == SIZE(PFIELD,4) .AND. &
@@ -738,18 +739,18 @@ IF (IDIMS == 6 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, PFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_X6','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_X6','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -757,10 +758,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_X6
+END SUBROUTINE IO_Field_read_nc4_X6
 
 
-SUBROUTINE IO_READ_FIELD_NC4_N0(TPFILE, TPFIELD, KFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_N0(TPFILE, TPFIELD, KFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 INTEGER,          INTENT(OUT)   :: KFIELD
@@ -774,22 +775,22 @@ INTEGER(KIND=IDCDF_KIND) :: IDIMS   ! number of dimensions
 CHARACTER(LEN=30)        :: YVARNAME
 INTEGER                  :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -799,13 +800,13 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64) ) THEN
    ! Read variable
    STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD)
    IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
    END IF
    ! Read and check attributes of variable
-   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+   CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
    IRESP = -3
 END IF
@@ -813,10 +814,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_N0
+END SUBROUTINE IO_Field_read_nc4_N0
 
 
-SUBROUTINE IO_READ_FIELD_NC4_N1(TPFILE, TPFIELD, KFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_N1(TPFILE, TPFIELD, KFIELD, KRESP)
 TYPE(TFILEDATA),         INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),        INTENT(INOUT) :: TPFIELD
 INTEGER, DIMENSION(:),   INTENT(OUT)   :: KFIELD
@@ -832,22 +833,22 @@ CHARACTER(LEN=30)        :: YVARNAME
 INTEGER(KIND=IDCDF_KIND) :: IDIMLEN
 INTEGER                  :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -856,24 +857,24 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 1 .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN == SIZE(KFIELD)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -881,10 +882,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_N1
+END SUBROUTINE IO_Field_read_nc4_N1
 
 
-SUBROUTINE IO_READ_FIELD_NC4_N2(TPFILE, TPFIELD, KFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_N2(TPFILE, TPFIELD, KFIELD, KRESP)
 TYPE(TFILEDATA),         INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),        INTENT(INOUT) :: TPFIELD
 INTEGER, DIMENSION(:,:), INTENT(OUT)   :: KFIELD
@@ -900,22 +901,22 @@ CHARACTER(LEN=30)        :: YVARNAME
 INTEGER(KIND=IDCDF_KIND),DIMENSION(3) :: IDIMLEN
 INTEGER                  :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -923,13 +924,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 !Treat special case of a degenerated 3D array (3rd dimension size is 1)
 IF (IDIMS==3) THEN
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(3), LEN=IDIMLEN(3))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   IF (IDIMLEN(3)==1) THEN
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)// &
+    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)// &
                    ': reading 3D array with degenerated third dimension in 2D array for '//TRIM(YVARNAME))
     IDIMS = 2
   ELSE
-    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
+    CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': wrong number of dimensions for '//TRIM(YVARNAME))
   END IF
 END IF
 
@@ -937,26 +938,26 @@ END IF
 IF (IDIMS == SIZE(SHAPE(KFIELD)) .AND. (ITYPE == NF90_INT .OR. ITYPE == NF90_INT64 .OR. ITYPE == NF90_INT1) ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN(1))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(2), LEN=IDIMLEN(2))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN(1) == SIZE(KFIELD,1) .AND. IDIMLEN(2) == SIZE(KFIELD,2)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, KFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_N2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_N2','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -964,9 +965,9 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_N2
+END SUBROUTINE IO_Field_read_nc4_N2
 
-SUBROUTINE IO_READ_FIELD_NC4_L0(TPFILE, TPFIELD, OFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_L0(TPFILE, TPFIELD, OFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 LOGICAL,          INTENT(OUT)   :: OFIELD
@@ -981,22 +982,22 @@ CHARACTER(LEN=30)        :: YVARNAME
 INTEGER                  :: IRESP
 INTEGER                  :: IFIELD
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -1007,7 +1008,7 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
   ! Read variable
   STATUS = NF90_GET_VAR(INCID, IVARID, IFIELD)
   IF (STATUS /= NF90_NOERR) THEN
-    CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+    CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
     GOTO 1000
   END IF
 
@@ -1016,16 +1017,16 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
   ELSE IF (IFIELD==1) THEN
     OFIELD = .TRUE.
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': invalid value in file for ' &
                                                            //TRIM(TPFIELD%CMNHNAME))
     OFIELD = .TRUE.
     IRESP = -112
   END IF
 
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+  CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong size or type)')
   IRESP = -3
 END IF
@@ -1033,10 +1034,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_L0
+END SUBROUTINE IO_Field_read_nc4_L0
 
 
-SUBROUTINE IO_READ_FIELD_NC4_L1(TPFILE, TPFIELD, OFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_L1(TPFILE, TPFIELD, OFIELD, KRESP)
 TYPE(TFILEDATA),     INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA),    INTENT(INOUT) :: TPFIELD
 LOGICAL,DIMENSION(:),INTENT(OUT)   :: OFIELD
@@ -1054,22 +1055,22 @@ INTEGER                  :: IRESP
 INTEGER                  :: JI
 INTEGER,DIMENSION(SIZE(OFIELD)) :: IFIELD
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 !Neglect the time dimension (of size 1)
 IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
@@ -1079,13 +1080,13 @@ IF (TPFIELD%LTIMEDEP) IDIMS=IDIMS-1
 IF (IDIMS == 1 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF90_INT64)  ) THEN
   ! Check size of variable before reading
   STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
 
   IF (IDIMLEN == SIZE(OFIELD)) THEN
     ! Read variable
     STATUS = NF90_GET_VAR(INCID, IVARID, IFIELD)
     IF (STATUS /= NF90_NOERR) THEN
-      CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_L1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+      CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_L1','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
       GOTO 1000
     END IF
 
@@ -1100,19 +1101,19 @@ IF (IDIMS == 1 .AND. (ITYPE == NF90_INT1 .OR. ITYPE == NF90_INT .OR. ITYPE == NF
       END IF
     END DO
     IF (IRESP==-112) THEN
-      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_LFI_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
+      CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': invalid value(s) in file for ' &
                                                              //TRIM(TPFIELD%CMNHNAME))
     END IF
 
     ! Read and check attributes of variable
-    CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+    CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
   ELSE
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' not read (wrong size)')
     IRESP = -3
   END IF
 ELSE
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                          ' not read (wrong number of dimensions or wrong type)')
   IRESP = -3
 END IF
@@ -1120,10 +1121,10 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_L1
+END SUBROUTINE IO_Field_read_nc4_L1
 
 
-SUBROUTINE IO_READ_FIELD_NC4_C0(TPFILE, TPFIELD, HFIELD, KRESP)
+SUBROUTINE IO_Field_read_nc4_C0(TPFILE, TPFIELD, HFIELD, KRESP)
 TYPE(TFILEDATA),  INTENT(IN)    :: TPFILE
 TYPE(TFIELDDATA), INTENT(INOUT) :: TPFIELD
 CHARACTER(LEN=*), INTENT(OUT)   :: HFIELD
@@ -1140,44 +1141,44 @@ CHARACTER(LEN=:),ALLOCATABLE :: YSTR
 INTEGER(KIND=IDCDF_KIND)     :: IDIMLEN
 INTEGER                      :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS, DIMIDS=IVDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 IF (IDIMS == 1 .AND. (ITYPE == NF90_CHAR) ) THEN
    ! Check size of variable before reading
    STATUS = NF90_INQUIRE_DIMENSION(INCID, IVDIMS(1), LEN=IDIMLEN)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_INQUIRE_DIMENSION',TRIM(YVARNAME))
    !
    ALLOCATE(CHARACTER(LEN=IDIMLEN)::YSTR)
    ! Read variable
    STATUS = NF90_GET_VAR(INCID, IVARID, YSTR)
    IF (STATUS /= NF90_NOERR) THEN
-     CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_C0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+     CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_C0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
      GOTO 1000
    END IF
    IF (LEN_TRIM(YSTR) > LEN(HFIELD)) &
-     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' truncated')
+     CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' truncated')
    HFIELD = TRIM(YSTR)
    DEALLOCATE(YSTR)
 
    ! Read and check attributes of variable
-   CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP)
+   CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP)
 ELSE
-   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
    IRESP = -3
 END IF
@@ -1185,9 +1186,9 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_C0
+END SUBROUTINE IO_Field_read_nc4_C0
 
-SUBROUTINE IO_READ_FIELD_NC4_T0(TPFILE, TPFIELD, TPDATA, KRESP)
+SUBROUTINE IO_Field_read_nc4_T0(TPFILE, TPFIELD, TPDATA, KRESP)
 !
 USE MODD_TYPE_DATE
 !
@@ -1208,32 +1209,32 @@ CHARACTER(LEN=:),ALLOCATABLE :: YSTR
 INTEGER(KIND=IDCDF_KIND)     :: IDIMLEN
 INTEGER                      :: IDX,IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_READ_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': reading '//TRIM(TPFIELD%CMNHNAME))
 
 IRESP = 0
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! Get variable ID, NDIMS and TYPE
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
-  CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
+  CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_T0','NF90_INQ_VARID',TRIM(YVARNAME),IRESP)
   GOTO 1000
 END IF
 STATUS = NF90_INQUIRE_VARIABLE(INCID, IVARID, XTYPE=ITYPE, NDIMS=IDIMS)
-IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
+IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_T0','NF90_INQUIRE_VARIABLE',TRIM(YVARNAME))
 
 IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   ! Read time
   STATUS = NF90_GET_VAR(INCID, IVARID, TPDATA%TIME)
   IF (STATUS /= NF90_NOERR) THEN
-    CALL IO_HANDLE_ERR_NC4(status,'IO_READ_FIELD_NC4_T0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
+    CALL IO_Err_handle_nc4(status,'IO_Field_read_nc4_T0','NF90_GET_VAR',TRIM(YVARNAME),IRESP)
     GOTO 1000
   END IF
   ! Read and check attributes of variable
-  CALL IO_READ_CHECK_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,IRESP,HCALENDAR='standard')
+  CALL IO_Field_attr_read_check_nc4(TPFILE,TPFIELD,IVARID,IRESP,HCALENDAR='standard')
   ! Extract date from UNITS
   IDX =  INDEX(TPFIELD%CUNITS,'since ')
   READ(TPFIELD%CUNITS(IDX+6 :IDX+9), '( I4.4 )') TPDATA%TDATE%YEAR
@@ -1241,14 +1242,14 @@ IF (IDIMS == 0 .AND. (ITYPE == NF90_FLOAT .OR. ITYPE == NF90_DOUBLE) ) THEN
   READ(TPFIELD%CUNITS(IDX+14:IDX+15),'( I2.2 )') TPDATA%TDATE%DAY
   ! Simple check (should catch most errors)
   IF ( TPDATA%TDATE%DAY<1 .OR. TPDATA%TDATE%DAY>31 .OR. TPDATA%TDATE%MONTH<1 .OR. TPDATA%TDATE%MONTH>12 ) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                            ' read date is invalid')
     IRESP = -3
   END IF
   ! Correct date and time (necessary for example if time is bigger than 86400 s)
   CALL DATETIME_CORRECTDATE(TPDATA)
 ELSE
-   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_READ_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
+   CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)// &
                                                           ' not read (wrong size or type)')
    IRESP = -3
 END IF
@@ -1256,7 +1257,7 @@ END IF
 1000 CONTINUE
 KRESP = IRESP
 
-END SUBROUTINE IO_READ_FIELD_NC4_T0
+END SUBROUTINE IO_Field_read_nc4_T0
 
 
 end module mode_io_read_nc4
@@ -1264,10 +1265,10 @@ end module mode_io_read_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_read_field_nc4(a, b, c, d, e, f, g)
+subroutine IO_Field_read_nc4(a, b, c, d, e, f, g)
 use mode_msg
 integer :: a, b, c, d, e, f, g
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_read_field_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_read_field_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_read_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Field_read_nc4
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
index 9e8dd1fc8..8b666ab46 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools.f90
@@ -1,69 +1,70 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Modifications:
-!    P. Wautelet : 13/12/2018 : extracted from mode_io.f90
-!    P. Wautelet : 14/12/2018 : added io_construct_filename
+! Modifications:
+!  P. Wautelet 13/12/2018: extracted from mode_io.f90
+!  P. Wautelet 14/12/2018: added IO_Filename_construct
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 module mode_io_tools
 
-use modd_io_ll, only: tfiledata
+use modd_io, only: tfiledata
 
 implicit none
 
 private
 
-public :: io_file, io_rank, io_construct_filename
+public :: IO_Level2filenumber_get, IO_Rank_master_get, IO_Filename_construct
 
 contains
 
-  FUNCTION io_file(k,nb_proc_io)
-    !
-    ! return the file number where to write the K level of data
-    !
-    IMPLICIT NONE
-    INTEGER(kind=MNH_MPI_RANK_KIND)                   :: k,nb_proc_io
-    INTEGER(kind=MNH_MPI_RANK_KIND)                   :: io_file
+FUNCTION IO_Level2filenumber_get(k,nb_proc_io)
+  !
+  ! return the file number where to write the K level of data
+  !
+  IMPLICIT NONE
+  INTEGER(kind=MNH_MPI_RANK_KIND)                   :: k,nb_proc_io
+  INTEGER(kind=MNH_MPI_RANK_KIND)                   :: IO_Level2filenumber_get
 
-    io_file = MOD ((k-1) , nb_proc_io )
+  IO_Level2filenumber_get = MOD ((k-1) , nb_proc_io )
 
-  END FUNCTION io_file
+END FUNCTION IO_Level2filenumber_get
 
-  FUNCTION IO_RANK(IFILE,nb_proc,nb_proc_io,offset_rank)
-    !
-    ! return the proc number which must write the 'IFILE' file
-    !
-    IMPLICIT NONE
-    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IFILE,nb_proc,nb_proc_io
-    INTEGER(kind=MNH_MPI_RANK_KIND),OPTIONAL         :: offset_rank
+FUNCTION IO_Rank_master_get(IFILE,nb_proc,nb_proc_io,offset_rank)
+  !
+  ! return the proc number which must write the 'IFILE' file
+  !
+  IMPLICIT NONE
+  INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IFILE,nb_proc,nb_proc_io
+  INTEGER(kind=MNH_MPI_RANK_KIND),OPTIONAL         :: offset_rank
 
-    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IO_RANK
+  INTEGER(kind=MNH_MPI_RANK_KIND)                  :: IO_Rank_master_get
 
-    INTEGER(kind=MNH_MPI_RANK_KIND)                  :: ipas,irest
+  INTEGER(kind=MNH_MPI_RANK_KIND)                  :: ipas,irest
 
-    ipas  =        nb_proc / nb_proc_io
-    irest =  MOD ( nb_proc , nb_proc_io )
+  ipas  =        nb_proc / nb_proc_io
+  irest =  MOD ( nb_proc , nb_proc_io )
 
-    IF  (ipas /= 0 ) THEN
-       IO_RANK=ipas * IFILE + MIN(IFILE , irest )
-    ELSE
-       IO_RANK=MOD(IFILE , nb_proc )
-    ENDIF
+  IF  (ipas /= 0 ) THEN
+     IO_Rank_master_get=ipas * IFILE + MIN(IFILE , irest )
+  ELSE
+     IO_Rank_master_get=MOD(IFILE , nb_proc )
+  ENDIF
 
-    !
-    ! optional rank to shift for read test
-    !
-    IF (PRESENT(offset_rank)) THEN
-       IF ( offset_rank .GT.0 ) IO_RANK=MOD(IO_RANK+offset_rank,nb_proc)
-       IF ( offset_rank .LT.0 ) IO_RANK=MOD(nb_proc-IO_RANK+offset_rank,nb_proc)
-    ENDIF
+  !
+  ! optional rank to shift for read test
+  !
+  IF (PRESENT(offset_rank)) THEN
+     IF ( offset_rank .GT.0 ) IO_Rank_master_get=MOD(IO_Rank_master_get+offset_rank,nb_proc)
+     IF ( offset_rank .LT.0 ) IO_Rank_master_get=MOD(nb_proc-IO_Rank_master_get+offset_rank,nb_proc)
+  ENDIF
 
-  END FUNCTION IO_RANK
+END FUNCTION IO_Rank_master_get
 
 
-subroutine io_construct_filename(tpfile,hfilem)
+subroutine IO_Filename_construct(tpfile,hfilem)
   type(tfiledata),               intent(inout) :: tpfile
   character(len=:), allocatable, intent(out)   :: hfilem
 
@@ -77,8 +78,7 @@ subroutine io_construct_filename(tpfile,hfilem)
     hfilem = trim(tpfile%cname)
   end if
 
-end subroutine io_construct_filename
-
+end subroutine IO_Filename_construct
 
 end module mode_io_tools
 
@@ -86,7 +86,7 @@ end module mode_io_tools
 
 module mode_io_tools_mnhversion
 
-use modd_io_ll, only: tfiledata
+use modd_io, only: tfiledata
 
 use mode_msg
 
@@ -94,109 +94,107 @@ implicit none
 
 private
 
-public :: io_get_mnhversion, io_set_mnhversion
+public :: IO_Mnhversion_get, IO_Mnhversion_set
 
 contains
 
-  subroutine io_get_mnhversion(tpfile)
-  !Compare MNHVERSION of file with current version and store it in file metadata
-    use modd_conf,   only: nmnhversion
-    use modd_io_ll,  only: tfiledata
-    use mode_field,  only: tfielddata,typeint
-    use mode_fmread, only: io_read_field
-
-    type(tfiledata), intent(inout) :: tpfile
-
-    character(len=12)       :: ymnhversion_file,ymnhversion_curr
-    integer :: imasdev,ibugfix
-    integer :: iresp
-    integer,dimension(3)    :: imnhversion
-    type(tfielddata)        :: tzfield
-
-    call print_msg(NVERB_DEBUG,'IO','io_get_mnhversion','called for '//trim(tpfile%cname))
-
-    if ( trim(tpfile%cmode) /= 'READ' ) &
-      call print_msg(NVERB_FATAL,'IO','io_get_mnhversion',trim(tpfile%cname)// 'not opened in read mode')
-
-    imnhversion(:) = 0
-    !use tzfield because tfieldlist could be not initialised
-    tzfield%cmnhname   = 'MNHVERSION'
-    tzfield%cstdname   = ''
-    tzfield%clongname  = 'MesoNH version'
-    tzfield%cunits     = ''
-    tzfield%cdir       = '--'
-    tzfield%ccomment   = ''
-    tzfield%ngrid      = 0
-    tzfield%ntype      = TYPEINT
-    tzfield%ndims      = 1
-    tzfield%ltimedep   = .false.
-    call io_read_field(tpfile,tzfield,imnhversion,iresp)
+subroutine IO_Mnhversion_get(tpfile)
+!Compare MNHVERSION of file with current version and store it in file metadata
+  use modd_conf,          only: nmnhversion
+  use mode_field,         only: tfielddata,typeint
+  use mode_io_field_read, only: IO_Field_read
+
+  type(tfiledata), intent(inout) :: tpfile
+
+  character(len=12)       :: ymnhversion_file,ymnhversion_curr
+  integer :: imasdev,ibugfix
+  integer :: iresp
+  integer,dimension(3)    :: imnhversion
+  type(tfielddata)        :: tzfield
+
+  call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_get','called for '//trim(tpfile%cname))
+
+  if ( trim(tpfile%cmode) /= 'READ' ) &
+    call print_msg(NVERB_FATAL,'IO','IO_Mnhversion_get',trim(tpfile%cname)// 'not opened in read mode')
+
+  imnhversion(:) = 0
+  !use tzfield because tfieldlist could be not initialised
+  tzfield%cmnhname   = 'MNHVERSION'
+  tzfield%cstdname   = ''
+  tzfield%clongname  = 'MesoNH version'
+  tzfield%cunits     = ''
+  tzfield%cdir       = '--'
+  tzfield%ccomment   = ''
+  tzfield%ngrid      = 0
+  tzfield%ntype      = TYPEINT
+  tzfield%ndims      = 1
+  tzfield%ltimedep   = .false.
+  call IO_Field_read(tpfile,tzfield,imnhversion,iresp)
+  if (iresp/=0) then
+    tzfield%cmnhname   = 'MASDEV'
+    tzfield%clongname  = 'MesoNH version (without bugfix)'
+    tzfield%ndims      = 0
+    call IO_Field_read(tpfile,tzfield,imasdev,iresp)
     if (iresp/=0) then
-      tzfield%cmnhname   = 'MASDEV'
-      tzfield%clongname  = 'MesoNH version (without bugfix)'
-      tzfield%ndims      = 0
-      call io_read_field(tpfile,tzfield,imasdev,iresp)
-      if (iresp/=0) then
-        call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','unknown MASDEV version for '//trim(tpfile%cname))
-      else
-        if (imasdev<100) then
-          imnhversion(1)=imasdev/10
-          imnhversion(2)=mod(imasdev,10)
-        else !for example for mnh 4.10
-          imnhversion(1)=imasdev/100
-          imnhversion(2)=mod(imasdev,100)
-        end if
-      end if
-      !
-      tzfield%cmnhname   = 'BUGFIX'
-      tzfield%clongname  = 'MesoNH bugfix number'
-      call io_read_field(tpfile,tzfield,ibugfix,iresp)
-      if (iresp/=0) then
-        call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','unknown BUGFIX version for '//trim(tpfile%cname))
-      else
-        imnhversion(3)=ibugfix
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown MASDEV version for '//trim(tpfile%cname))
+    else
+      if (imasdev<100) then
+        imnhversion(1)=imasdev/10
+        imnhversion(2)=mod(imasdev,10)
+      else !for example for mnh 4.10
+        imnhversion(1)=imasdev/100
+        imnhversion(2)=mod(imasdev,100)
       end if
     end if
     !
-    write(ymnhversion_file,"( I0,'.',I0,'.',I0 )" ) imnhversion(1),imnhversion(2),imnhversion(3)
-    write(ymnhversion_curr,"( I0,'.',I0,'.',I0 )" ) nmnhversion(1),nmnhversion(2),nmnhversion(3)
+    tzfield%cmnhname   = 'BUGFIX'
+    tzfield%clongname  = 'MesoNH bugfix number'
+    call IO_Field_read(tpfile,tzfield,ibugfix,iresp)
+    if (iresp/=0) then
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','unknown BUGFIX version for '//trim(tpfile%cname))
+    else
+      imnhversion(3)=ibugfix
+    end if
+  end if
+  !
+  write(ymnhversion_file,"( I0,'.',I0,'.',I0 )" ) imnhversion(1),imnhversion(2),imnhversion(3)
+  write(ymnhversion_curr,"( I0,'.',I0,'.',I0 )" ) nmnhversion(1),nmnhversion(2),nmnhversion(3)
+  !
+  if ( imnhversion(1)==0 .and. imnhversion(2)==0 .and. imnhversion(3)==0 ) then
+    call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                  ' was written with an unknown version of MesoNH')
+    else if (  imnhversion(1)< nmnhversion(1) .or. &
+            (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)< nmnhversion(2)) .or. &
+            (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)<nmnhversion(3)) ) then
+    call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with an older version of MesoNH ('//trim(ymnhversion_file)//&
+                    ' instead of '//trim(ymnhversion_curr)//')')
+    else if (  imnhversion(1)> nmnhversion(1) .or. &
+              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)> nmnhversion(2)) .or. &
+              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)>nmnhversion(3)) ) then
+      call print_msg(NVERB_WARNING,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with a more recent version of MesoNH ('//trim(ymnhversion_file)//&
+                    ' instead of '//trim(ymnhversion_curr)//')')
+    else
+      call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_get','file '//trim(tpfile%cname)//&
+                    ' was written with the same version of MesoNH ('//trim(ymnhversion_curr)//')')
+    end if
     !
-    if ( imnhversion(1)==0 .and. imnhversion(2)==0 .and. imnhversion(3)==0 ) then
-      call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                    ' was written with an unknown version of MesoNH')
-      else if (  imnhversion(1)< nmnhversion(1) .or. &
-              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)< nmnhversion(2)) .or. &
-              (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)<nmnhversion(3)) ) then
-      call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                      ' was written with an older version of MesoNH ('//trim(ymnhversion_file)//&
-                      ' instead of '//trim(ymnhversion_curr)//')')
-      else if (  imnhversion(1)> nmnhversion(1) .or. &
-                (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)> nmnhversion(2)) .or. &
-                (imnhversion(1)==nmnhversion(1) .and. imnhversion(2)==nmnhversion(2) .and. imnhversion(3)>nmnhversion(3)) ) then
-        call print_msg(NVERB_WARNING,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                      ' was written with a more recent version of MesoNH ('//trim(ymnhversion_file)//&
-                      ' instead of '//trim(ymnhversion_curr)//')')
-      else
-        call print_msg(NVERB_DEBUG,'IO','io_get_mnhversion','file '//trim(tpfile%cname)//&
-                      ' was written with the same version of MesoNH ('//trim(ymnhversion_curr)//')')
-      end if
-      !
-      tpfile%nmnhversion(:) = imnhversion(:)
-  end subroutine io_get_mnhversion
+    tpfile%nmnhversion(:) = imnhversion(:)
+end subroutine IO_Mnhversion_get
 
 
-  subroutine io_set_mnhversion(tpfile)
-    use modd_conf,  only: nmnhversion
-    use modd_io_ll, only: tfiledata
+subroutine IO_Mnhversion_set(tpfile)
+  use modd_conf,  only: nmnhversion
 
-    type(tfiledata), intent(inout) :: tpfile
+  type(tfiledata), intent(inout) :: tpfile
 
-    call print_msg(NVERB_DEBUG,'IO','io_set_mnhversion','called for '//trim(tpfile%cname))
+  call print_msg(NVERB_DEBUG,'IO','IO_Mnhversion_set','called for '//trim(tpfile%cname))
 
-    if ( trim(tpfile%cmode) /= 'WRITE' ) &
-      call print_msg(NVERB_FATAL,'IO','io_set_mnhversion',trim(tpfile%cname)// 'not opened in write mode')
+  if ( trim(tpfile%cmode) /= 'WRITE' ) &
+    call print_msg(NVERB_FATAL,'IO','IO_Mnhversion_set',trim(tpfile%cname)// 'not opened in write mode')
 
-    tpfile%nmnhversion(:) = nmnhversion(:)
-  end subroutine io_set_mnhversion
+  tpfile%nmnhversion(:) = nmnhversion(:)
+end subroutine IO_Mnhversion_set
 
 end module mode_io_tools_mnhversion
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
index a55365550..c320a2c7d 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_lfi.f90
@@ -1,24 +1,26 @@
-!MNH_LIC Copyright 2018-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2018-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Creation:
-!    P. Wautelet : 14/12/2018
+! Author(s):
+!  P. Wautelet : 14/12/2018
+! Modifications:
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 module mode_io_tools_lfi
 
-use modd_io_ll, only: tfiledata
+use modd_io, only: tfiledata
 
 implicit none
 
 private
 
-public :: io_prepare_verbosity_lfi
+public :: IO_Verbosity_prepare_lfi
 
 contains
 
-subroutine io_prepare_verbosity_lfi(tpfile, kmelev, ostats)
+subroutine IO_Verbosity_prepare_lfi(tpfile, kmelev, ostats)
   type(tfiledata),       intent(in)  :: tpfile
   integer(kind=LFI_INT), intent(out) :: kmelev
   logical,               intent(out) :: ostats
@@ -38,7 +40,7 @@ subroutine io_prepare_verbosity_lfi(tpfile, kmelev, ostats)
       kmelev = 2
   end select
 
-end subroutine io_prepare_verbosity_lfi
+end subroutine IO_Verbosity_prepare_lfi
 
 
 end module mode_io_tools_lfi
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
index b66011fac..638340f23 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
@@ -3,17 +3,18 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Modifications:
-!    P. Wautelet : may 2016   : use NetCDF Fortran module
-!    J.Escobar   : 14/12/2017 : Correction for MNH_INT=8
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!    P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files
-!  Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
+! Modifications:
+!  P. Wautelet may 2016  : use NetCDF Fortran module
+!  J.Escobar   14/12/2017: correction for MNH_INT=8
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_tools_nc4
 
-use modd_io_ll,  only: tfiledata
+use modd_io,     only: tfiledata
 use modd_netcdf, only: dimcdf, IDCDF_KIND, iocdf, tdim_dummy
 
 use mode_field,  only: tfielddata
@@ -26,12 +27,13 @@ implicit none
 
 private
 
-public :: io_find_dim_byname_nc4, io_guess_dimids_nc4, io_set_knowndims_nc4
-public :: cleaniocdf, cleanmnhname, fillvdims, getdimcdf, getstrdimid, io_handle_err_nc4, newiocdf
+public :: IO_Dim_find_byname_nc4, IO_Dimids_guess_nc4, IO_Knowndims_set_nc4
+public :: IO_Iocdf_alloc_nc4, IO_Iocdf_dealloc_nc4, IO_Mnhname_clean
+public :: IO_Dimcdf_get_nc4, IO_Strdimid_get_nc4, IO_Vdims_fill_nc4, IO_Err_handle_nc4
 
 contains
 
-SUBROUTINE IO_FIND_DIM_BYNAME_NC4(TPFILE, HDIMNAME, TPDIM, KRESP)
+SUBROUTINE IO_Dim_find_byname_nc4(TPFILE, HDIMNAME, TPDIM, KRESP)
 TYPE(TFILEDATA),         INTENT(IN)  :: TPFILE
 CHARACTER(LEN=*),        INTENT(IN)  :: HDIMNAME
 TYPE(DIMCDF),            INTENT(OUT) :: TPDIM
@@ -39,12 +41,12 @@ INTEGER,                 INTENT(OUT) :: KRESP
 !
 TYPE(DIMCDF), POINTER :: TMP
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_FIND_DIM_BYNAME_NC4','called for dimension name '//TRIM(HDIMNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dim_find_byname_nc4','called for dimension name '//TRIM(HDIMNAME))
 !
 KRESP = -2
 !
 IF(.NOT.ASSOCIATED(TPFILE%TNCDIMS%DIMLIST)) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_FIND_DIM_BYNAME_NC4','DIMLIST not associated for file  '//TRIM(TPFILE%CNAME))
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dim_find_byname_nc4','DIMLIST not associated for file  '//TRIM(TPFILE%CNAME))
   KRESP = -1
   RETURN
 END IF
@@ -60,10 +62,10 @@ DO WHILE(ASSOCIATED(TMP))
   TMP => TMP%NEXT
 END DO
 !
-END SUBROUTINE IO_FIND_DIM_BYNAME_NC4
+END SUBROUTINE IO_Dim_find_byname_nc4
 
 
-SUBROUTINE IO_GUESS_DIMIDS_NC4(TPFILE, TPFIELD, KLEN, TPDIMS, KRESP)
+SUBROUTINE IO_Dimids_guess_nc4(TPFILE, TPFIELD, KLEN, TPDIMS, KRESP)
 !
 USE MODE_FIELD, ONLY: TYPECHAR
 !
@@ -81,7 +83,7 @@ CHARACTER(LEN=32)     :: YINT
 CHARACTER(LEN=2)      :: YDIR
 TYPE(DIMCDF), POINTER :: PTDIM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_GUESS_DIMIDS_NC4','called for '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimids_guess_nc4','called for '//TRIM(TPFIELD%CMNHNAME))
 !
 IGRID  =  TPFIELD%NGRID
 YDIR   =  TPFIELD%CDIR
@@ -92,11 +94,11 @@ PTDIM => NULL()
 !
 IF(IGRID<0 .OR. IGRID>8) THEN
   WRITE(YINT,'( I0 )') IGRID
-  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_GUESS_DIMIDS_NC4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Dimids_guess_nc4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 IF(IGRID==0 .AND. YDIR/='--' .AND. YDIR/=''  ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '&
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '&
                  //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
@@ -109,16 +111,16 @@ IF (IGRID==0) THEN
         ILEN = 1
       END IF
     CASE (1)
-      PTDIM => GETDIMCDF(TPFILE,KLEN)
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE,KLEN)
       TPDIMS(1) = PTDIM
       ILEN      = PTDIM%LEN
     CASE DEFAULT
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','NGRID=0 and NDIMS>1 not yet supported (field '&
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','NGRID=0 and NDIMS>1 not yet supported (field '&
                      //TRIM(TPFIELD%CMNHNAME)//')')
   END SELECT
 ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN
   IF (TPFIELD%NDIMS/=3) THEN
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','CLBTYPE/=NONE and NDIMS/=3 not supported (field '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','CLBTYPE/=NONE and NDIMS/=3 not supported (field '&
                      //TRIM(TPFIELD%CMNHNAME)//')')
   END IF
   !
@@ -129,9 +131,9 @@ ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN
     TPDIMS(3) = PTDIM
     ILEN = TPDIMS(2)%LEN * TPDIMS(3)%LEN
     ISIZE = KLEN/ILEN
-    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                               'can not guess 1st dimension for field '//TRIM(TPFIELD%CMNHNAME))
-    PTDIM => GETDIMCDF(TPFILE, ISIZE)
+    PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
     TPDIMS(1) = PTDIM
     ILEN       = ILEN * PTDIM%LEN
   ELSE IF (TPFIELD%CLBTYPE=='LBY' .OR. TPFIELD%CLBTYPE=='LBYV') THEN
@@ -141,13 +143,13 @@ ELSE IF (TPFIELD%CLBTYPE/='NONE') THEN
     TPDIMS(3) = PTDIM
     ILEN = TPDIMS(1)%LEN * TPDIMS(3)%LEN
     ISIZE = KLEN/ILEN
-    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+    IF (MOD(KLEN,ILEN)/=0) CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                               'can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME))
-    PTDIM => GETDIMCDF(TPFILE, ISIZE)
+    PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
     TPDIMS(2) = PTDIM
     ILEN       = ILEN * PTDIM%LEN
   ELSE
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','invalid CLBTYPE ('//TPFIELD%CLBTYPE//') for field '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','invalid CLBTYPE ('//TPFIELD%CLBTYPE//') for field '&
                      //TRIM(TPFIELD%CMNHNAME))
   END IF
 ELSE
@@ -162,7 +164,7 @@ ELSE
       ELSE IF ( YDIR == 'ZZ' ) THEN
         PTDIM => TPFILE%TNCCOORDS(3,IGRID)%TDIM
       ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension
-        PTDIM => GETDIMCDF(TPFILE, KLEN)
+        PTDIM => IO_Dimcdf_get_nc4(TPFILE, KLEN)
       END IF
       ILEN       = PTDIM%LEN
       TPDIMS(JI) = PTDIM
@@ -172,13 +174,13 @@ ELSE
       ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension
         ISIZE = KLEN/ILEN
         IF (MOD(KLEN,ILEN)/=0) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                             'can not guess 2nd and last dimension for field '//TRIM(TPFIELD%CMNHNAME))
           EXIT
         END IF
-        PTDIM => GETDIMCDF(TPFILE, ISIZE)
+        PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
       ELSE
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME))
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','can not guess 2nd dimension for field '//TRIM(TPFIELD%CMNHNAME))
         EXIT
       END IF
       ILEN       = ILEN * PTDIM%LEN
@@ -188,20 +190,20 @@ ELSE
         IF (JI==TPFIELD%NDIMS .AND. KLEN/ILEN==1 .AND. MOD(KLEN,ILEN)==0) THEN
           !The last dimension is of size 1 => probably time dimension
           ISIZE = 1
-          PTDIM => GETDIMCDF(TPFILE,ISIZE)
+          PTDIM => IO_Dimcdf_get_nc4(TPFILE,ISIZE)
         ELSE
           PTDIM => TPFILE%TNCCOORDS(3,IGRID)%TDIM
         END IF
       ELSE IF (JI==TPFIELD%NDIMS) THEN !Guess last dimension
         ISIZE = KLEN/ILEN
         IF (MOD(KLEN,ILEN)/=0) THEN
-          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+          CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                             'can not guess 3rd and last dimension for field '//TRIM(TPFIELD%CMNHNAME))
           EXIT
         END IF
-        PTDIM => GETDIMCDF(TPFILE, ISIZE)
+        PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
       ELSE
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess 3rd dimension for field '//TRIM(TPFIELD%CMNHNAME))
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','can not guess 3rd dimension for field '//TRIM(TPFIELD%CMNHNAME))
         EXIT
       END IF
       ILEN       = ILEN * PTDIM%LEN
@@ -209,30 +211,30 @@ ELSE
     ELSE IF (JI==4 .AND. JI==TPFIELD%NDIMS) THEN !Guess last dimension
       ISIZE = KLEN/ILEN
       IF (MOD(KLEN,ILEN)/=0) THEN
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4', &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4', &
                                           'can not guess 4th and last dimension for field '//TRIM(TPFIELD%CMNHNAME))
         EXIT
       END IF
-      PTDIM => GETDIMCDF(TPFILE, ISIZE)
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, ISIZE)
       ILEN       = ILEN * PTDIM%LEN
       TPDIMS(JI) = PTDIM
     ELSE
-      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_GUESS_DIMIDS_NC4','can not guess dimension above 4 for field '&
+      CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Dimids_guess_nc4','can not guess dimension above 4 for field '&
                      //TRIM(TPFIELD%CMNHNAME))
     END IF
   END DO
 END IF
 !
 IF (KLEN /= ILEN) THEN
-  CALL PRINT_MSG(NVERB_INFO,'IO','IO_GUESS_DIMIDS_NC4','can not guess dimensions of field '&
+  CALL PRINT_MSG(NVERB_INFO,'IO','IO_Dimids_guess_nc4','can not guess dimensions of field '&
                                    //TRIM(TPFIELD%CMNHNAME))
   KRESP = 1
 END IF
 !
-END SUBROUTINE IO_GUESS_DIMIDS_NC4
+END SUBROUTINE IO_Dimids_guess_nc4
 
 
-SUBROUTINE IO_SET_KNOWNDIMS_NC4(TPFILE,HPROGRAM_ORIG)
+SUBROUTINE IO_Knowndims_set_nc4(TPFILE,HPROGRAM_ORIG)
 
 USE MODD_CONF,          ONLY: CPROGRAM
 USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
@@ -246,7 +248,7 @@ CHARACTER(LEN=:),ALLOCATABLE :: YPROGRAM
 INTEGER                      :: IIU_ll, IJU_ll, IKU
 TYPE(IOCDF), POINTER         :: PIOCDF
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_SET_KNOWNDIMS_NC4','called for '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Knowndims_set_nc4','called for '//TRIM(TPFILE%CNAME))
 
 PIOCDF => TPFILE%TNCDIMS
 
@@ -260,17 +262,17 @@ IIU_ll = NIMAX_ll + 2*JPHEXT
 IJU_ll = NJMAX_ll + 2*JPHEXT
 IKU    = NKMAX    + 2*JPVEXT
 
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI))      PIOCDF%DIM_NI      => GETDIMCDF(TPFILE, IIU_ll, 'ni')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ))      PIOCDF%DIM_NJ      => GETDIMCDF(TPFILE, IJU_ll, 'nj')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_U))    PIOCDF%DIM_NI_U    => GETDIMCDF(TPFILE, IIU_ll, 'ni_u')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_U))    PIOCDF%DIM_NJ_U    => GETDIMCDF(TPFILE, IJU_ll, 'nj_u')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_V))    PIOCDF%DIM_NI_V    => GETDIMCDF(TPFILE, IIU_ll, 'ni_v')
-IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_V))    PIOCDF%DIM_NJ_V    => GETDIMCDF(TPFILE, IJU_ll, 'nj_v')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI))      PIOCDF%DIM_NI      => IO_Dimcdf_get_nc4(TPFILE, IIU_ll, 'ni')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ))      PIOCDF%DIM_NJ      => IO_Dimcdf_get_nc4(TPFILE, IJU_ll, 'nj')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_U))    PIOCDF%DIM_NI_U    => IO_Dimcdf_get_nc4(TPFILE, IIU_ll, 'ni_u')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_U))    PIOCDF%DIM_NJ_U    => IO_Dimcdf_get_nc4(TPFILE, IJU_ll, 'nj_u')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NI_V))    PIOCDF%DIM_NI_V    => IO_Dimcdf_get_nc4(TPFILE, IIU_ll, 'ni_v')
+IF (.NOT. ASSOCIATED(PIOCDF%DIM_NJ_V))    PIOCDF%DIM_NJ_V    => IO_Dimcdf_get_nc4(TPFILE, IJU_ll, 'nj_v')
 IF (TRIM(YPROGRAM)/='PGD' .AND. TRIM(YPROGRAM)/='NESPGD' .AND. TRIM(YPROGRAM)/='ZOOMPG' &
     .AND. .NOT.(TRIM(YPROGRAM)=='REAL' .AND. CSTORAGE_TYPE=='SU') ) THEN !condition to detect PREP_SURFEX
-  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL))   PIOCDF%DIM_LEVEL   => GETDIMCDF(TPFILE, IKU   , 'level')
-  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL_W)) PIOCDF%DIM_LEVEL_W => GETDIMCDF(TPFILE, IKU   , 'level_w')
-  IF (.NOT. ASSOCIATED(PIOCDF%DIMTIME)) PIOCDF%DIMTIME => GETDIMCDF(TPFILE, NF90_UNLIMITED, 'time')
+  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL))   PIOCDF%DIM_LEVEL   => IO_Dimcdf_get_nc4(TPFILE, IKU   , 'level')
+  IF (.NOT. ASSOCIATED(PIOCDF%DIM_LEVEL_W)) PIOCDF%DIM_LEVEL_W => IO_Dimcdf_get_nc4(TPFILE, IKU   , 'level_w')
+  IF (.NOT. ASSOCIATED(PIOCDF%DIMTIME)) PIOCDF%DIMTIME => IO_Dimcdf_get_nc4(TPFILE, NF90_UNLIMITED, 'time')
 ELSE
   !PGD and SURFEX files for MesoNH have no vertical levels or time scale
   !These dimensions are allocated to default values
@@ -321,15 +323,15 @@ TPFILE%TNCCOORDS(2,8)%TDIM => PIOCDF%DIM_NJ_V
 TPFILE%TNCCOORDS(3,8)%TDIM => PIOCDF%DIM_LEVEL_W
 
 
-END SUBROUTINE IO_SET_KNOWNDIMS_NC4
+END SUBROUTINE IO_Knowndims_set_nc4
 
 
-SUBROUTINE CLEANIOCDF(PIOCDF)
+SUBROUTINE IO_Iocdf_dealloc_nc4(PIOCDF)
 TYPE(IOCDF),  POINTER :: PIOCDF
 
 INTEGER(KIND=IDCDF_KIND) :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','CLEANIOCDF','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Iocdf_dealloc_nc4','called')
 
 ! Clean DIMLIST and DIMSTR
 CALL CLEANLIST(PIOCDF%DIMLIST)
@@ -351,10 +353,10 @@ END DO
 
 END SUBROUTINE CLEANLIST
 
-END SUBROUTINE CLEANIOCDF
+END SUBROUTINE IO_Iocdf_dealloc_nc4
 
 
-SUBROUTINE FILLVDIMS(TPFILE, TPFIELD, KSHAPE, KVDIMS)
+SUBROUTINE IO_Vdims_fill_nc4(TPFILE, TPFIELD, KSHAPE, KVDIMS)
 TYPE(TFILEDATA),                      INTENT(IN)  :: TPFILE
 TYPE(TFIELDDATA),                     INTENT(IN)  :: TPFIELD
 INTEGER(KIND=IDCDF_KIND),DIMENSION(:),INTENT(IN)  :: KSHAPE
@@ -366,16 +368,16 @@ CHARACTER(LEN=32)     :: YINT
 CHARACTER(LEN=2)      :: YDIR
 TYPE(DIMCDF), POINTER :: PTDIM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','FILLVDIMS','called for '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Vdims_fill_nc4','called for '//TRIM(TPFIELD%CMNHNAME))
 !
-IF (SIZE(KSHAPE) < 1 .AND. .NOT.TPFIELD%LTIMEDEP) CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','empty KSHAPE')
+IF (SIZE(KSHAPE) < 1 .AND. .NOT.TPFIELD%LTIMEDEP) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','empty KSHAPE')
 !
 IGRID  =  TPFIELD%NGRID
 YDIR   =  TPFIELD%CDIR
 !
 IF(SIZE(KSHAPE)/=TPFIELD%NDIMS) THEN
   WRITE(YINT,'( I0,"/",I0 )') SIZE(KSHAPE),TPFIELD%NDIMS
-  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' &
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','SIZE(KSHAPE)/=TPFIELD%NDIMS ('//TRIM(YINT)//') for field ' &
                  //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
@@ -389,11 +391,12 @@ END IF
 !
 IF(IGRID<0 .OR. IGRID>8) THEN
   WRITE(YINT,'( I0 )') IGRID
-  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','invalid NGRID ('//TRIM(YINT)//') for field '//TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 IF(IGRID==0 .AND. YDIR/='--' .AND. YDIR/=''  ) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','FILLVDIMS','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Vdims_fill_nc4','invalid YDIR ('//TRIM(YDIR)//') with NGRID=0 for field ' &
+                 //TRIM(TPFIELD%CMNHNAME))
 END IF
 !
 DO JI=1,SIZE(KSHAPE)
@@ -405,34 +408,34 @@ DO JI=1,SIZE(KSHAPE)
     ELSE IF ( YDIR == 'ZZ'                .AND. KSHAPE(1)==TPFILE%TNCCOORDS(3,IGRID)%TDIM%LEN) THEN
       KVDIMS(1) = TPFILE%TNCCOORDS(3,IGRID)%TDIM%ID
     ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(1)); KVDIMS(1) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(1)); KVDIMS(1) = PTDIM%ID
     END IF
   ELSE IF (JI == 2) THEN
     IF ( YDIR == 'XY' .AND. KSHAPE(2)==TPFILE%TNCCOORDS(2,IGRID)%TDIM%LEN) THEN
       KVDIMS(2) = TPFILE%TNCCOORDS(2,IGRID)%TDIM%ID
     ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(2)); KVDIMS(2) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(2)); KVDIMS(2) = PTDIM%ID
     END IF
   ELSE IF (JI == 3) THEN
     IF ( YDIR == 'XY' .AND. KSHAPE(3)==TPFILE%TNCCOORDS(3,IGRID)%TDIM%LEN) THEN
       KVDIMS(3) = TPFILE%TNCCOORDS(3,IGRID)%TDIM%ID
     ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(3)); KVDIMS(3) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(3)); KVDIMS(3) = PTDIM%ID
     END IF
   ELSE
-      PTDIM => GETDIMCDF(TPFILE, KSHAPE(JI)); KVDIMS(JI) = PTDIM%ID
+      PTDIM => IO_Dimcdf_get_nc4(TPFILE, KSHAPE(JI)); KVDIMS(JI) = PTDIM%ID
   END IF
 END DO
 !
-END SUBROUTINE FILLVDIMS
+END SUBROUTINE IO_Vdims_fill_nc4
 
 
-FUNCTION GETDIMCDF(TPFILE, KLEN, HDIMNAME)
+FUNCTION IO_Dimcdf_get_nc4(TPFILE, KLEN, HDIMNAME)
 TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
 CHARACTER(LEN=*), OPTIONAL :: HDIMNAME ! When provided don't search but
                                        ! simply create with name HDIMNAME
-TYPE(DIMCDF), POINTER   :: GETDIMCDF
+TYPE(DIMCDF), POINTER   :: IO_Dimcdf_get_nc4
 
 TYPE(DIMCDF), POINTER :: TMP
 INTEGER               :: COUNT
@@ -442,7 +445,7 @@ INTEGER(KIND=IDCDF_KIND) :: STATUS
 LOGICAL                  :: GCHKLEN !Check if KLEN is valid
 TYPE(IOCDF), POINTER     :: PIOCDF
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','GETDIMCDF','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimcdf_get_nc4','called')
 
 PIOCDF => TPFILE%TNCDIMS
 
@@ -457,7 +460,7 @@ END IF
 WRITE(YSUFFIX,'(I0)') KLEN
 
 IF (GCHKLEN .AND. KLEN < 1) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','GETDIMCDF','KLEN='//TRIM(YSUFFIX))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Dimcdf_get_nc4','KLEN='//TRIM(YSUFFIX))
 END IF
 
 IF (PRESENT(HDIMNAME)) THEN
@@ -481,34 +484,34 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    TMP%NAME = YDIMNAME
    TMP%LEN = KLEN
    STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID)
-   IF (STATUS /= NF90_NOERR) CALL io_handle_err_nc4(status,'GETDIMCDF','NF90_DEF_DIM',trim(TMP%NAME))
+   IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Dimcdf_get_nc4','NF90_DEF_DIM',trim(TMP%NAME))
    NULLIFY(TMP%NEXT)
    TMP%NEXT       => PIOCDF%DIMLIST
    PIOCDF%DIMLIST => TMP
-CALL PRINT_MSG(NVERB_DEBUG,'IO','GETDIMCDF','new dimension: '//TRIM(TMP%NAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Dimcdf_get_nc4','new dimension: '//TRIM(TMP%NAME))
 END IF
 
-GETDIMCDF => TMP
+IO_Dimcdf_get_nc4 => TMP
 
-END FUNCTION GETDIMCDF
+END FUNCTION IO_Dimcdf_get_nc4
 
 
-FUNCTION GETSTRDIMID(TPFILE,KLEN)
+FUNCTION IO_Strdimid_get_nc4(TPFILE,KLEN)
 TYPE(TFILEDATA),         INTENT(IN) :: TPFILE
 INTEGER(KIND=IDCDF_KIND),INTENT(IN) :: KLEN
-INTEGER(KIND=IDCDF_KIND)            :: GETSTRDIMID
+INTEGER(KIND=IDCDF_KIND)            :: IO_Strdimid_get_nc4
 
 TYPE(DIMCDF), POINTER :: TMP
 TYPE(IOCDF),  POINTER :: TZIOCDF
 CHARACTER(LEN=16)     :: YSUFFIX
 INTEGER(KIND=IDCDF_KIND) :: STATUS
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','GETSTRDIMID','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Strdimid_get_nc4','called')
 
 WRITE(YSUFFIX,'(I0)') KLEN
 
 IF (KLEN < 1) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','GETSTRDIMID','KLEN='//TRIM(YSUFFIX))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Strdimid_get_nc4','KLEN='//TRIM(YSUFFIX))
 END IF
 
 ! Search string dimension with KLEN length
@@ -524,37 +527,36 @@ IF (.NOT. ASSOCIATED(TMP)) THEN
    TMP%NAME = 'char'//TRIM(YSUFFIX)
    TMP%LEN = KLEN
    STATUS = NF90_DEF_DIM(TPFILE%NNCID, TMP%NAME, KLEN, TMP%ID)
-   IF (STATUS /= NF90_NOERR) CALL io_handle_err_nc4(status,'GETSTRDIMID','NF90_DEF_DIM',trim(TMP%NAME))
+   IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Strdimid_get_nc4','NF90_DEF_DIM',trim(TMP%NAME))
    NULLIFY(TMP%NEXT)
    TMP%NEXT      => TPFILE%TNCDIMS%DIMSTR
    TZIOCDF => TPFILE%TNCDIMS
    TZIOCDF%DIMSTR => TMP
 END IF
 
-GETSTRDIMID = TMP%ID
+IO_Strdimid_get_nc4 = TMP%ID
 
-END FUNCTION GETSTRDIMID
+END FUNCTION IO_Strdimid_get_nc4
 
 
-FUNCTION NEWIOCDF()
-TYPE(IOCDF), POINTER :: NEWIOCDF
+FUNCTION IO_Iocdf_alloc_nc4()
+TYPE(IOCDF), POINTER :: IO_Iocdf_alloc_nc4
 TYPE(IOCDF), POINTER :: TZIOCDF
 INTEGER              :: IRESP
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','NEWIOCDF','called')
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Iocdf_alloc_nc4','called')
 
 ALLOCATE(TZIOCDF, STAT=IRESP)
 IF (IRESP > 0) THEN
-  CALL PRINT_MSG(NVERB_FATAL,'IO','NEWIOCDF','memory allocation error')
-  STOP
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Iocdf_alloc_nc4','memory allocation error')
 END IF
 
-NEWIOCDF=>TZIOCDF
+IO_Iocdf_alloc_nc4=>TZIOCDF
 
-END FUNCTION NEWIOCDF
+END FUNCTION IO_Iocdf_alloc_nc4
 
 
-subroutine io_handle_err_nc4(kstatus,hsubr,hncsubr,hvar,kresp)
+subroutine IO_Err_handle_nc4(kstatus,hsubr,hncsubr,hvar,kresp)
 integer(kind=IDCDF_KIND),intent(in)  :: kstatus
 character(len=*),        intent(in)  :: hsubr
 character(len=*),        intent(in)  :: hncsubr
@@ -575,10 +577,10 @@ if (kstatus /= NF90_NOERR) then
     call print_msg(NVERB_ERROR,  'IO',trim(hsubr),trim(hvar)//': '//trim(hncsubr)//': '//trim(NF90_STRERROR(kstatus)))
   end if
 end if
-end subroutine io_handle_err_nc4
+end subroutine IO_Err_handle_nc4
 
 
-SUBROUTINE CLEANMNHNAME(HINNAME,HOUTNAME)
+SUBROUTINE IO_Mnhname_clean(HINNAME,HOUTNAME)
   CHARACTER(LEN=*),INTENT(IN)  :: HINNAME
   CHARACTER(LEN=*),INTENT(OUT) :: HOUTNAME
 
@@ -610,66 +612,66 @@ end module mode_io_tools_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_find_dim_byname_nc4(a, b, c, d)
+subroutine IO_Dim_find_byname_nc4(a, b, c, d)
 use mode_msg
 integer :: a, b, c, d
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_find_dim_byname_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_find_dim_byname_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Dim_find_byname_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Dim_find_byname_nc4
 !
-subroutine io_guess_dimids_nc4(a, b, c, d)
+subroutine IO_Dimids_guess_nc4(a, b, c, d)
 use mode_msg
 integer :: a, b, c, d
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_guess_dimids_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_guess_dimids_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Dimids_guess_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Dimids_guess_nc4
 !
-subroutine io_set_knowndims_nc4(a, b)
+subroutine IO_Knowndims_set_nc4(a, b)
 use mode_msg
 integer :: a, b,
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_set_knowndims_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_set_knowndims_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Knowndims_set_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Knowndims_set_nc4
 !
-subroutine cleaniocdf(a)
+subroutine IO_Iocdf_dealloc_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','cleaniocdf','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine cleaniocdf
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Iocdf_dealloc_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Iocdf_dealloc_nc4
 !
-subroutine cleanmnhname(a, b)
+subroutine IO_Mnhname_clean(a, b)
 use mode_msg
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','cleanmnhname','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine cleanmnhname
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Mnhname_clean','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Mnhname_clean
 !
-subroutine fillvdims(a, b, c, d)
+subroutine IO_Vdims_fill_nc4(a, b, c, d)
 use mode_msg
 integer :: a, b, c, d
-CALL PRINT_MSG(NVERB_ERROR,'IO','fillvdims','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine fillvdims
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Vdims_fill_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Vdims_fill_nc4
 !
-function getdimcdf(a, b, c)
+function IO_Dimcdf_get_nc4(a, b, c)
 use mode_msg
-integer :: getdimcdf
+integer :: IO_Dimcdf_get_nc4
 integer :: a, b, c
-CALL PRINT_MSG(NVERB_ERROR,'IO','getdimcdf','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end function getdimcdf
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Dimcdf_get_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end function IO_Dimcdf_get_nc4
 !
-function getstrdimid(a, b)
+function IO_Strdimid_get_nc4(a, b)
 use mode_msg
-integer :: getstrdimid
+integer :: IO_Strdimid_get_nc4
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','getstrdimid','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end function getstrdimid
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Strdimid_get_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end function IO_Strdimid_get_nc4
 !
-subroutine io_handle_err_nc4(a, b, c, d, e)
+subroutine IO_Err_handle_nc4(a, b, c, d, e)
 use mode_msg
 integer :: a, b, c, d, e
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_handle_err_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_handle_err_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Err_handle_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Err_handle_nc4
 !
-function newiocdf()
+function IO_Iocdf_alloc_nc4()
 use mode_msg
-integer :: newiocdf
-CALL PRINT_MSG(NVERB_ERROR,'IO','newiocdf','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end function newiocdf()
+integer :: IO_Iocdf_alloc_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Iocdf_alloc_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end function IO_Iocdf_alloc_nc4()
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
index 0ec774476..5dc2195e0 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_lfi.f90
@@ -3,44 +3,46 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-module mode_io_write_lfi
 ! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 21/06/2018:      read and write correctly if MNH_REAL=4
-!  Philippe Wautelet: 14/12/2018:      split fmreadwrit.f90
-!  Philippe Wautelet: 11/01/2019:      do not write variables with a zero size
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 21/06/2018: read and write correctly if MNH_REAL=4
+!  P. Wautelet 14/12/2018: split fmreadwrit.f90
+!  P. Wautelet 11/01/2019: do not write variables with a zero size
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
+!-----------------------------------------------------------------
+module mode_io_write_lfi
 !
-USE MODD_IO_ll
+USE MODD_IO
 USE MODD_PARAMETERS, ONLY: NLFIMAXCOMMENTLENGTH
 !
-USE MODE_FIELD, ONLY : TFIELDDATA
+USE MODE_FIELD,      ONLY: TFIELDDATA
 USE MODE_MSG
 !
 IMPLICIT NONE
 !
 PRIVATE
 !
+public :: IO_Field_write_lfi
+!
 INTEGER, PARAMETER :: JPXKRK = NLFIMAXCOMMENTLENGTH
 INTEGER, PARAMETER :: JPXFIE = 1.5E8
 !
-INTERFACE IO_WRITE_FIELD_LFI
-   MODULE PROCEDURE IO_WRITE_FIELD_LFI_X0,IO_WRITE_FIELD_LFI_X1, &
-                    IO_WRITE_FIELD_LFI_X2,IO_WRITE_FIELD_LFI_X3, &
-                    IO_WRITE_FIELD_LFI_X4,IO_WRITE_FIELD_LFI_X5, &
-                    IO_WRITE_FIELD_LFI_X6,                       &
-                    IO_WRITE_FIELD_LFI_N0,IO_WRITE_FIELD_LFI_N1, &
-                    IO_WRITE_FIELD_LFI_N2,IO_WRITE_FIELD_LFI_N3, &
-                    IO_WRITE_FIELD_LFI_L0,IO_WRITE_FIELD_LFI_L1, &
-                    IO_WRITE_FIELD_LFI_C0,                       &
-                    IO_WRITE_FIELD_LFI_T0
-END INTERFACE IO_WRITE_FIELD_LFI
-!
-PUBLIC IO_WRITE_FIELD_LFI
+INTERFACE IO_Field_write_lfi
+   MODULE PROCEDURE IO_Field_write_lfi_X0,IO_Field_write_lfi_X1, &
+                    IO_Field_write_lfi_X2,IO_Field_write_lfi_X3, &
+                    IO_Field_write_lfi_X4,IO_Field_write_lfi_X5, &
+                    IO_Field_write_lfi_X6,                       &
+                    IO_Field_write_lfi_N0,IO_Field_write_lfi_N1, &
+                    IO_Field_write_lfi_N2,IO_Field_write_lfi_N3, &
+                    IO_Field_write_lfi_L0,IO_Field_write_lfi_L1, &
+                    IO_Field_write_lfi_C0,                       &
+                    IO_Field_write_lfi_T0
+END INTERFACE IO_Field_write_lfi
 !
 CONTAINS
 !
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -58,7 +60,7 @@ INTEGER(KIND=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
@@ -68,7 +70,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8( (/PFIELD/) , IWORK(LEN(TPFIELD%CCOMMENT)+3:) )
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,TRIM(TPFIELD%CMNHNAME),IWORK,ITOTAL)
 ENDIF
@@ -77,9 +79,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X0
+END SUBROUTINE IO_Field_write_lfi_X0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -97,12 +99,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X1','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X1','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -113,7 +115,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(PFIELD,IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X1','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -122,9 +124,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X1
+END SUBROUTINE IO_Field_write_lfi_X1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE)
+SUBROUTINE IO_Field_write_lfi_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE)
 !
 IMPLICIT NONE
 !
@@ -152,26 +154,26 @@ IRESP=0
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
 !
 IF (PRESENT(KVERTLEVEL)) THEN
   IF (.NOT.PRESENT(KZFILE)) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_LFI_X2','KZFILE argument not provided')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_lfi_X2','KZFILE argument not provided')
     RETURN
   END IF
   WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL
   YVARNAME = TRIM(TPFIELD%CMNHNAME)//YSUFFIX
-  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_LFI_X2','KZFILE value too high')
+  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_write_lfi_X2','KZFILE value too high')
   TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE
 ELSE
   YVARNAME = TRIM(TPFIELD%CMNHNAME)
   TZFILE => TPFILE
 ENDIF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X2','writing '//TRIM(YVARNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X2','writing '//TRIM(YVARNAME))
 !
 CALL WRITE_PREPARE(TPFIELD,ILENG,IWORK,ITOTAL,IRESP)
 !
@@ -179,7 +181,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(YVARNAME)
   IF( LEN_TRIM(YVARNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X2','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X2','field name was truncated to '&
                    //YRECFM//' for '//TRIM(YVARNAME))
   CALL LFIECR(IRESP,TZFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -188,9 +190,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X2
+END SUBROUTINE IO_Field_write_lfi_X2
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -208,12 +210,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X3','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X3','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -224,7 +226,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X3','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X3','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -233,9 +235,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X3
+END SUBROUTINE IO_Field_write_lfi_X3
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -253,12 +255,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X4','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X4','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X4','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X4','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -269,7 +271,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X4','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X4','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -278,9 +280,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X4
+END SUBROUTINE IO_Field_write_lfi_X4
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -298,12 +300,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X5','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X5','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X5','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X5','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -314,7 +316,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X5','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X5','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -323,9 +325,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X5
+END SUBROUTINE IO_Field_write_lfi_X5
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -343,12 +345,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_X6','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_X6','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(PFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X6','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X6','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -359,7 +361,7 @@ IF (IRESP==0) THEN
   CALL TRANSFER_R_I8(RESHAPE(PFIELD,(/ILENG/)),IWORK(LEN(TPFIELD%CCOMMENT)+3:))
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_X6','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_X6','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -368,9 +370,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_X6
+END SUBROUTINE IO_Field_write_lfi_X6
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -388,7 +390,7 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
@@ -398,7 +400,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3)=KFIELD
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -407,9 +409,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N0
+END SUBROUTINE IO_Field_write_lfi_N0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -427,12 +429,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N1','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N1','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -443,7 +445,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = KFIELD(:)
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N1','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -452,9 +454,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N1
+END SUBROUTINE IO_Field_write_lfi_N1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -472,12 +474,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N2','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N2','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N2','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -488,7 +490,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = RESHAPE( KFIELD(:,:) , (/ SIZE(KFIELD) /) )
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N2','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N2','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -497,9 +499,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N2
+END SUBROUTINE IO_Field_write_lfi_N2
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_N3(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_N3(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -517,12 +519,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_N3','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_N3','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(KFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N3','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -533,7 +535,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = RESHAPE( KFIELD(:,:,:) , (/ SIZE(KFIELD) /) )
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_N3','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_N3','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -542,9 +544,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_N3
+END SUBROUTINE IO_Field_write_lfi_N3
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -563,7 +565,7 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_L0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_L0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = 1
 !
@@ -580,7 +582,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3)=IFIELD
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_L0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -589,9 +591,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_L0
+END SUBROUTINE IO_Field_write_lfi_L0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
 IMPLICIT NONE
 !
@@ -610,12 +612,12 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_L1','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_L1','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG = SIZE(OFIELD)
 !
 IF ( ILENG==0 ) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_L1','ignoring variable with a zero size ('//TRIM(TPFIELD%CMNHNAME)//')')
   KRESP = 0
   RETURN
 END IF
@@ -633,7 +635,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TPFIELD%CCOMMENT)+3:) = IFIELD(:)
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_L1','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_L1','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -642,9 +644,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_L1
+END SUBROUTINE IO_Field_write_lfi_L1
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_write_lfi_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 USE MODD_PARAMETERS, ONLY: NFILENAMELGTMAXLFI
 !
@@ -664,7 +666,7 @@ INTEGER(kind=LFI_INT)                    :: IRESP, ITOTAL
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_C0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_C0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ILENG=LEN(HFIELD)
 ILENGMAX = ILENG
@@ -675,7 +677,7 @@ IF (TPFIELD%CMNHNAME=='MY_NAME' .OR. TPFIELD%CMNHNAME=='DAD_NAME') THEN
   ILENG = MIN(LEN(HFIELD),NFILENAMELGTMAXLFI)
   ILENGMAX = NFILENAMELGTMAXLFI
   IF (LEN_TRIM(HFIELD)>ILENGMAX) &
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0',TRIM(TPFILE%CNAME)// &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_C0',TRIM(TPFILE%CNAME)// &
                       ': MY_NAME was truncated from '//TRIM(HFIELD)//' to '//HFIELD(1:NFILENAMELGTMAXLFI))
 END IF
 !
@@ -691,7 +693,7 @@ IF (IRESP==0) THEN
   END DO
   YRECFM=TRIM(TPFIELD%CMNHNAME)
   IF( LEN_TRIM(TPFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_C0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_C0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TPFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -700,9 +702,9 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_C0
+END SUBROUTINE IO_Field_write_lfi_C0
 !
-SUBROUTINE IO_WRITE_FIELD_LFI_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_write_lfi_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODD_TYPE_DATE
 !
@@ -724,7 +726,7 @@ INTEGER, DIMENSION(3)                    :: ITDATE    ! date array
 INTEGER(KIND=8),DIMENSION(:),ALLOCATABLE :: IWORK
 CHARACTER(LEN=LEN_HREC)                  :: YRECFM
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_LFI_T0','writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_lfi_T0','writing '//TRIM(TPFIELD%CMNHNAME))
 !
 TZFIELD = TPFIELD
 !
@@ -743,7 +745,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TZFIELD%CCOMMENT)+3:)=ITDATE(:)
   YRECFM=TRIM(TZFIELD%CMNHNAME)
   IF( LEN_TRIM(TZFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_T0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_T0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TZFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -767,7 +769,7 @@ IF (IRESP==0) THEN
   IWORK(LEN(TZFIELD%CCOMMENT)+3) = TRANSFER(TPDATA%TIME,IWORK(1))
   YRECFM=TRIM(TZFIELD%CMNHNAME)
   IF( LEN_TRIM(TZFIELD%CMNHNAME) > LEN(YRECFM) ) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_LFI_T0','field name was truncated to '&
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_lfi_T0','field name was truncated to '&
                    //YRECFM//' for '//TRIM(TZFIELD%CMNHNAME))
   CALL LFIECR(IRESP,TPFILE%NLFIFLU,YRECFM,IWORK,ITOTAL)
 ENDIF
@@ -776,7 +778,7 @@ KRESP=IRESP
 !
 IF (ALLOCATED(IWORK)) DEALLOCATE(IWORK)
 !
-END SUBROUTINE IO_WRITE_FIELD_LFI_T0
+END SUBROUTINE IO_Field_write_lfi_T0
 !
 SUBROUTINE WRITE_PREPARE(TPFIELD,KLENG,KWORK,KTOTAL,KRESP)
 !
diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
index c6837768f..0fc391c69 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90
@@ -3,23 +3,24 @@
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!  Modifications:
-!    P. Wautelet : may 2016   : use NetCDF Fortran module
-!    J.Escobar   : 14/12/2017 : Correction for MNH_INT=8
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!    P. Wautelet : 13/12/2018 : split of mode_netcdf into multiple modules/files
-!  Philippe Wautelet: 10/01/2019: replace handle_err by io_handle_err_nc4 for better netCDF error messages
-!    P. Wautelet : 11/01/2019 : NVERB_INFO->NVERB_WARNING for zero size fields
-!    P. Wautelet : 01/02/2019 : IO_WRITE_COORDVAR_NC4: bug: use of non-associated pointers (PIOCDF%DIM_Nx_y)
+! Modifications:
+!  P. Wautelet may 2016  : use NetCDF Fortran module
+!  J. Escobar  14/12/2017: correction for MNH_INT=8
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 13/12/2018: split of mode_netcdf into multiple modules/files
+!  P. Wautelet 10/01/2019: replace handle_err by IO_Err_handle_nc4 for better netCDF error messages
+!  P. Wautelet 11/01/2019: NVERB_INFO->NVERB_WARNING for zero size fields
+!  P. Wautelet 01/02/2019: IO_Coordvar_write_nc4: bug: use of non-associated pointers (PIOCDF%DIM_Nx_y)
+!  P. Wautelet 05/03/2019: rename IO subroutines and modules
 !-----------------------------------------------------------------
 #if defined(MNH_IOCDF4)
 module mode_io_write_nc4
 
-use modd_io_ll,        only: gsmonoproc, tfiledata
+use modd_io,           only: gsmonoproc, tfiledata
 use modd_netcdf,       only: dimcdf, IDCDF_KIND, iocdf
 
 use mode_field,        only: tfielddata
-use mode_io_tools_nc4, only: cleanmnhname, fillvdims, getdimcdf, getstrdimid, io_handle_err_nc4
+use mode_io_tools_nc4, only: IO_Mnhname_clean, IO_Vdims_fill_nc4, IO_Dimcdf_get_nc4, IO_Strdimid_get_nc4, IO_Err_handle_nc4
 use mode_msg
 
 use NETCDF,            only: NF90_CHAR, NF90_DOUBLE, NF90_FLOAT, NF90_INT, NF90_INT1, NF90_INT64, &
@@ -31,19 +32,19 @@ implicit none
 
 private
 
-public :: io_write_coordvar_nc4, io_write_field_nc4, io_write_header_nc4
+public :: IO_Coordvar_write_nc4, IO_Field_write_nc4, IO_Header_write_nc4
 
-INTERFACE IO_WRITE_FIELD_NC4
-   MODULE PROCEDURE IO_WRITE_FIELD_NC4_X0,IO_WRITE_FIELD_NC4_X1, &
-                    IO_WRITE_FIELD_NC4_X2,IO_WRITE_FIELD_NC4_X3, &
-                    IO_WRITE_FIELD_NC4_X4,IO_WRITE_FIELD_NC4_X5, &
-                    IO_WRITE_FIELD_NC4_X6,                       &
-                    IO_WRITE_FIELD_NC4_N0,IO_WRITE_FIELD_NC4_N1, &
-                    IO_WRITE_FIELD_NC4_N2,IO_WRITE_FIELD_NC4_N3, &
-                    IO_WRITE_FIELD_NC4_L0,IO_WRITE_FIELD_NC4_L1, &
-                    IO_WRITE_FIELD_NC4_C0,IO_WRITE_FIELD_NC4_C1, &
-                    IO_WRITE_FIELD_NC4_T0
-END INTERFACE IO_WRITE_FIELD_NC4
+INTERFACE IO_Field_write_nc4
+   MODULE PROCEDURE IO_Field_write_nc4_X0,IO_Field_write_nc4_X1, &
+                    IO_Field_write_nc4_X2,IO_Field_write_nc4_X3, &
+                    IO_Field_write_nc4_X4,IO_Field_write_nc4_X5, &
+                    IO_Field_write_nc4_X6,                       &
+                    IO_Field_write_nc4_N0,IO_Field_write_nc4_N1, &
+                    IO_Field_write_nc4_N2,IO_Field_write_nc4_N3, &
+                    IO_Field_write_nc4_L0,IO_Field_write_nc4_L1, &
+                    IO_Field_write_nc4_C0,IO_Field_write_nc4_C1, &
+                    IO_Field_write_nc4_T0
+END INTERFACE IO_Field_write_nc4
 
 integer,parameter :: NSTRINGCHUNKSIZE = 16 !Dimension of the chunks of strings
                                            !(to limit the number of dimensions for strings)
@@ -53,7 +54,7 @@ integer(kind=IDCDF_KIND),parameter :: DEFLATE = 1
 
 contains
 
-SUBROUTINE IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,KVARID,OEXISTED,KSHAPE,HCALENDAR,OISCOORD)
+SUBROUTINE IO_Field_attr_write_nc4(TPFILE,TPFIELD,KVARID,OEXISTED,KSHAPE,HCALENDAR,OISCOORD)
 !
 USE MODD_CONF,   ONLY: CPROGRAM, LCARTESIAN
 USE MODD_CONF_n, ONLY: CSTORAGE_TYPE
@@ -73,15 +74,15 @@ INTEGER(KIND=IDCDF_KIND)     :: STATUS
 CHARACTER(LEN=:),ALLOCATABLE :: YCOORDS
 LOGICAL                      :: GISCOORD
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','called for field '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','called for field '//TRIM(TPFIELD%CMNHNAME))
 !
 IF(LEN_TRIM(TPFIELD%CSTDNAME)==0 .AND. LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','at least long_name or standard_name must be provided &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','at least long_name or standard_name must be provided &
   &to respect CF-convention for variable '//TRIM(TPFIELD%CMNHNAME))
 ENDIF
 !
 IF (TPFIELD%NDIMS>1 .AND. .NOT.PRESENT(KSHAPE)) &
-  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_ATTR_NC4','KSHAPE not provided for '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_attr_write_nc4','KSHAPE not provided for '//TRIM(TPFIELD%CMNHNAME))
 !
 IF (PRESENT(OISCOORD)) THEN
   GISCOORD = OISCOORD
@@ -93,55 +94,55 @@ INCID = TPFILE%NNCID
 !
 ! Standard_name attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CSTDNAME)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CSTDNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CSTDNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'standard_name', TRIM(TPFIELD%CSTDNAME))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','standard_name for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','standard_name for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! Long_name attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CLONGNAME)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CLONGNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CLONGNAME not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'long_name', TRIM(TPFIELD%CLONGNAME))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','long_name for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','long_name for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! Canonical units attribute definition (CF convention)
 IF(LEN_TRIM(TPFIELD%CUNITS)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CUNITS not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CUNITS not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'units', TRIM(TPFIELD%CUNITS))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','units for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','units for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! GRID attribute definition
 IF(TPFIELD%NGRID<0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%NGRID not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%NGRID not set for variable '//TRIM(TPFIELD%CMNHNAME))
 !Do not write GRID attribute if NGRID=0
 ELSE IF (TPFIELD%NGRID>0) THEN
   STATUS = NF90_PUT_ATT(INCID, KVARID, 'grid', TPFIELD%NGRID)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','grid for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','grid for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! COMMENT attribute definition
 IF(LEN_TRIM(TPFIELD%CCOMMENT)==0) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','TPFIELD%CCOMMENT not set for variable '//TRIM(TPFIELD%CMNHNAME))
 ELSE
   STATUS = NF90_PUT_ATT(INCID, KVARID,'comment', TRIM(TPFIELD%CCOMMENT))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','comment for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','comment for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
 ! Calendar (CF convention)
 IF(PRESENT(HCALENDAR)) THEN
-  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_ATTR_NC4','CALENDAR provided for variable '//TRIM(TPFIELD%CMNHNAME))
+  CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_attr_write_nc4','CALENDAR provided for variable '//TRIM(TPFIELD%CMNHNAME))
   STATUS = NF90_PUT_ATT(INCID, KVARID,'calendar', TRIM(HCALENDAR))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','calendar for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','calendar for ' &
                                                    //trim(TPFIELD%CMNHNAME))
 ENDIF
 !
@@ -172,14 +173,14 @@ IF (.NOT.GISCOORD) THEN
           CASE (8) !fw point (=uvw point)
             YCOORDS='latitude_f longitude_f'
           CASE DEFAULT
-            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_ATTR_NC4','invalid NGRID for variable '//TRIM(TPFIELD%CMNHNAME))
+            CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_attr_write_nc4','invalid NGRID for variable '//TRIM(TPFIELD%CMNHNAME))
         END SELECT
         !
         STATUS = NF90_PUT_ATT(INCID, KVARID,'coordinates',YCOORDS)
-        IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','coordinates')
+        IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','coordinates')
         DEALLOCATE(YCOORDS)
       ELSE
-        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','coordinates not implemented for variable ' &
+        CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','coordinates not implemented for variable ' &
                                                                     //TRIM(TPFIELD%CMNHNAME))
       END IF
     ELSE
@@ -190,7 +191,7 @@ ENDIF
 !
 IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN
   IF (TPFIELD%NFILLVALUE>=TPFIELD%NVALIDMIN .AND. TPFIELD%NFILLVALUE<=TPFIELD%NVALIDMAX) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','_FillValue is not outside of valid_min - valid_max'// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','_FillValue is not outside of valid_min - valid_max'// &
                                                                 'interval for variable '//TRIM(TPFIELD%CMNHNAME))
   !
   ! Fillvalue (CF/COMODO convention)
@@ -199,20 +200,20 @@ IF(TPFIELD%NTYPE==TYPEINT .AND. TPFIELD%NDIMS>0) THEN
   !          * it cannot be modified if some data has already been written (->check OEXISTED)
   IF(.NOT.OEXISTED) THEN
     STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%NFILLVALUE)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','_FillValue')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','_FillValue')
   END IF
   !
   ! Valid_min/max (CF/COMODO convention)
   STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%NVALIDMIN)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_min')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_min')
   !
   STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max',TPFIELD%NVALIDMAX)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_max')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_max')
 ENDIF
 !
 IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
   IF (TPFIELD%XFILLVALUE>=TPFIELD%XVALIDMIN .AND. TPFIELD%XFILLVALUE<=TPFIELD%XVALIDMAX) &
-    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_ATTR_NC4','_FillValue is not outside of valid_min - valid_max'// &
+    CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_attr_write_nc4','_FillValue is not outside of valid_min - valid_max'// &
                                                                 'interval for variable '//TRIM(TPFIELD%CMNHNAME))
   !
   ! Fillvalue (CF/COMODO convention)
@@ -225,7 +226,7 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
     ELSE
       STATUS = NF90_PUT_ATT(INCID, KVARID,'_FillValue', TPFIELD%XFILLVALUE)
     END IF
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','_FillValue')
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','_FillValue')
   END IF
   !
   ! Valid_min/max (CF/COMODO convention)
@@ -234,20 +235,20 @@ IF(TPFIELD%NTYPE==TYPEREAL .AND. TPFIELD%NDIMS>0) THEN
   ELSE
     STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_min', TPFIELD%XVALIDMIN)
   END IF
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_min')
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_min')
   !
   IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
     STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max', REAL(TPFIELD%XVALIDMAX,KIND=4))
   ELSE
     STATUS = NF90_PUT_ATT(INCID, KVARID,'valid_max',TPFIELD%XVALIDMAX)
   END IF
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_ATTR_NC4','NF90_PUT_ATT','valid_max')
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_attr_write_nc4','NF90_PUT_ATT','valid_max')
 ENDIF
 !
-END SUBROUTINE IO_WRITE_FIELD_ATTR_NC4
+END SUBROUTINE IO_Field_attr_write_nc4
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X0(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X0(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -262,7 +263,7 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
 INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -270,21 +271,21 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
      ! Define the variable
 #if (MNH_REAL == 8)
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_DOUBLE, IVDIMS, IVARID)
 #else
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_DEF_VAR',trim(YVARNAME))
      DEALLOCATE(IVDIMS)
    ELSE
      ! Define the scalar variable
@@ -293,24 +294,24 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVARID)
 #endif
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X0
+END SUBROUTINE IO_Field_write_nc4_X0
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X1(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X1(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -325,7 +326,7 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
 INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -333,19 +334,19 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -357,30 +358,30 @@ IF (STATUS /= NF90_NOERR) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
    END IF
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X1
+END SUBROUTINE IO_Field_write_nc4_X1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE,OISCOORD)
+SUBROUTINE IO_Field_write_nc4_X2(TPFILE,TPFIELD,PFIELD,KRESP,KVERTLEVEL,KZFILE,OISCOORD)
 !
 TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -406,10 +407,10 @@ IRESP = 0
 IF (PRESENT(KVERTLEVEL)) THEN
   WRITE(YSUFFIX,'(I4.4)') KVERTLEVEL
   IF (.NOT.PRESENT(KZFILE)) THEN
-    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE argument not provided')
+    CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_nc4_X2','KZFILE argument not provided')
     RETURN
   END IF
-  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_WRITE_FIELD_NC4_X2','KZFILE value too high')
+  IF (KZFILE>TPFILE%NSUBFILES_IOZ) CALL PRINT_MSG(NVERB_FATAL,'IO','IO_Field_write_nc4_X2','KZFILE value too high')
   TZFILE => TPFILE%TFILES_IOZ(KZFILE)%TFILE
   TZFIELD = TPFIELD
   TZFIELD%CMNHNAME  = TRIM(TZFIELD%CMNHNAME)//YSUFFIX
@@ -421,26 +422,26 @@ ELSE
   TZFIELD = TPFIELD
 ENDIF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X2',TRIM(TZFILE%CNAME)//': writing '//TRIM(TZFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TZFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TZFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TZFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TZFILE, TZFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    IF (TZFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -452,30 +453,30 @@ IF (STATUS /= NF90_NOERR) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
    END IF
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TZFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TZFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X2',TRIM(TZFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X2',TRIM(TZFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
+CALL IO_Field_attr_write_nc4(TZFILE,TZFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND),OISCOORD=OISCOORD)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X2
+END SUBROUTINE IO_Field_write_nc4_X2
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X3(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X3(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -491,7 +492,7 @@ INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -499,19 +500,19 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -523,31 +524,31 @@ IF (STATUS /= NF90_NOERR) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
    END IF
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_DEF_VAR',trim(YVARNAME))
 
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X3
+END SUBROUTINE IO_Field_write_nc4_X3
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X4(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X4(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),           INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),          INTENT(IN) :: TPFIELD
@@ -563,7 +564,7 @@ INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X4',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -571,19 +572,19 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X4','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X4','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -595,31 +596,31 @@ IF (STATUS /= NF90_NOERR) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
    END IF
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_DEF_VAR',trim(YVARNAME))
 
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X4',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X4','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X4
+END SUBROUTINE IO_Field_write_nc4_X4
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X5(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X5(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),           INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),          INTENT(IN) :: TPFIELD
@@ -635,7 +636,7 @@ INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X5',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -643,19 +644,19 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X5','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X5','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -667,31 +668,31 @@ IF (STATUS /= NF90_NOERR) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
    END IF
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_DEF_VAR',trim(YVARNAME))
 
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X5',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X5','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X5
+END SUBROUTINE IO_Field_write_nc4_X5
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_X6(TPFILE,TPFIELD,PFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_X6(TPFILE,TPFIELD,PFIELD,KRESP)
 !
 TYPE(TFILEDATA),             INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),            INTENT(IN) :: TPFIELD
@@ -707,7 +708,7 @@ INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_X6',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -715,19 +716,19 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(PFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X6','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X6','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(PFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    IF (TPFILE%LNCREDUCE_FLOAT_PRECISION) THEN
@@ -739,36 +740,37 @@ IF (STATUS /= NF90_NOERR) THEN
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIMS, IVARID)
 #endif
    END IF
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_DEF_VAR',trim(YVARNAME))
 
      ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_X6',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(PFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, PFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_X6','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_X6
+END SUBROUTINE IO_Field_write_nc4_X6
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N0(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N0(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
 #if 0
-USE MODD_PARAMETERS_ll,  ONLY : JPHEXT, JPVEXT
-USE MODD_IO_ll, ONLY : LPACK,L1D,L2D
+USE MODD_IO,             ONLY: LPACK,L1D,L2D
+USE MODD_PARAMETERS_ll,  ONLY: JPHEXT, JPVEXT
+#else
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 #endif
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
@@ -785,7 +787,7 @@ INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 TYPE(IOCDF), POINTER     :: TZIOCDF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -793,21 +795,21 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
      ! Define the variable
 #if ( MNH_INT == 4 )
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT,   IVDIMS, IVARID)
 #else
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
 #endif
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_DEF_VAR',trim(YVARNAME))
      DEALLOCATE(IVDIMS)
    ELSE
      ! Define the scalar variable
@@ -816,48 +818,49 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVARID)
 #endif
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 !
 ! Use IMAX, JMAX, KMAX to define DIM_NI, DIM_NJ, DIM_LEVEL
 ! /!\ Can only work if IMAX, JMAX or KMAX are written before any array
 !
 #if 0
-IF (YVARNAME == 'IMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NI)) TPFILE%TNCDIMS%DIM_NI=>GETDIMCDF(TPFILE%TNCDIMS,KFIELD+2*JPHEXT,'X')
+IF (YVARNAME == 'IMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NI)) TPFILE%TNCDIMS%DIM_NI=>IO_Dimcdf_get_nc4(TPFILE%TNCDIMS,KFIELD+2*JPHEXT,'X')
 IF (YVARNAME == 'JMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_NJ)) THEN
    IF (LPACK .AND. L2D) THEN
-      TPFILE%TNCDIMS%DIM_NJ=>GETDIMCDF(TPFILE, 1,'Y')
+      TPFILE%TNCDIMS%DIM_NJ=>IO_Dimcdf_get_nc4(TPFILE, 1,'Y')
    ELSE
-      TPFILE%TNCDIMS%DIM_NJ=>GETDIMCDF(TPFILE, KFIELD+2*JPHEXT, 'Y')
+      TPFILE%TNCDIMS%DIM_NJ=>IO_Dimcdf_get_nc4(TPFILE, KFIELD+2*JPHEXT, 'Y')
    END IF
 END IF
 #endif
 IF (YVARNAME == 'KMAX' .AND. .NOT. ASSOCIATED(TPFILE%TNCDIMS%DIM_LEVEL)) THEN
   TZIOCDF => TPFILE%TNCDIMS
-  TZIOCDF%DIM_LEVEL=>GETDIMCDF(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
+  TZIOCDF%DIM_LEVEL=>IO_Dimcdf_get_nc4(TPFILE,INT(KFIELD+2*JPVEXT,KIND=IDCDF_KIND),'Z')
 END IF
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N0
+END SUBROUTINE IO_Field_write_nc4_N0
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N1(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N1(TPFILE,TPFIELD,KFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
 #if 0
-USE MODD_PARAMETERS_ll,  ONLY : JPHEXT, JPVEXT
-USE MODD_IO_ll, ONLY : LPACK,L1D,L2D
+USE MODD_IO,             ONLY: LPACK,L1D,L2D
+USE MODD_PARAMETERS_ll,  ONLY: JPHEXT, JPVEXT
+#else
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 #endif
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
@@ -873,7 +876,7 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE :: IVDIMS
 INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -881,19 +884,19 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(KFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
 #if ( MNH_INT == 4 )
@@ -901,25 +904,25 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
 #endif
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N1','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N1','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N1
+END SUBROUTINE IO_Field_write_nc4_N1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N2(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N2(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),TARGET,INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -936,26 +939,26 @@ LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N2',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(KFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N2','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
 #if ( MNH_INT == 4 )
@@ -963,29 +966,29 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
 #endif
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N2',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N2','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N2
+END SUBROUTINE IO_Field_write_nc4_N2
 
-SUBROUTINE IO_WRITE_FIELD_NC4_N3(TPFILE,TPFIELD,KFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_N3(TPFILE,TPFIELD,KFIELD,KRESP)
 !
 TYPE(TFILEDATA),TARGET,  INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),        INTENT(IN) :: TPFIELD
@@ -1002,26 +1005,26 @@ LOGICAL                  :: GEXISTED !True if variable was already defined
 !
 IRESP = 0
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_N3',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 ! Get the Netcdf file ID
 INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(KFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N3','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(KFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
 #if ( MNH_INT == 4 )
@@ -1029,31 +1032,31 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT64, IVDIMS, IVARID)
 #endif
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_DEF_VAR',trim(YVARNAME))
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_DEF_VAR',trim(YVARNAME))
    ! Add compression if asked for
    IF (TPFILE%LNCCOMPRESS) THEN
      STATUS = NF90_DEF_VAR_DEFLATE(INCID, IVARID, SHUFFLE, DEFLATE, TPFILE%NNCCOMPRESS_LEVEL)
-     IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
+     IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_DEF_VAR_DEFLATE',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_N3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_N3',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED,KSHAPE=INT(SHAPE(KFIELD),KIND=IDCDF_KIND))
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, KFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_N3','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_N3
+END SUBROUTINE IO_Field_write_nc4_N3
 
-SUBROUTINE IO_WRITE_FIELD_NC4_L0(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_L0(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -1069,7 +1072,7 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE      :: IVDIMS
 INTEGER                  :: IRESP
 LOGICAL                  :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -1077,28 +1080,28 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (TPFIELD%LTIMEDEP) THEN
      ! Get the netcdf dimensions
-     CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
+     CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
      ! Define the variable
      ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L0','NF90_DEF_VAR',trim(YVARNAME))
      DEALLOCATE(IVDIMS)
    ELSE
      ! Define the scalar variable
      ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
      STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L0','NF90_DEF_VAR',trim(YVARNAME))
    END IF
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_L0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 !Convert LOGICAL to INTEGER (LOGICAL format not supported by netCDF files)
@@ -1109,17 +1112,17 @@ ELSE
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_L0
+END SUBROUTINE IO_Field_write_nc4_L0
 
-SUBROUTINE IO_WRITE_FIELD_NC4_L1(TPFILE,TPFIELD,OFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_L1(TPFILE,TPFIELD,OFIELD,KRESP)
 !
-USE MODD_PARAMETERS_ll,  ONLY : JPVEXT
+USE MODD_PARAMETERS_ll,  ONLY: JPVEXT
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -1135,7 +1138,7 @@ INTEGER(KIND=IDCDF_KIND), DIMENSION(:), ALLOCATABLE      :: IVDIMS
 INTEGER                                                  :: IRESP
 LOGICAL                                                  :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_L1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 ! Get the Netcdf file ID
@@ -1143,27 +1146,27 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    IF (SIZE(OFIELD)==0) THEN
-     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
+     CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_L1','ignoring variable with a zero size ('//TRIM(YVARNAME)//')')
      KRESP = 0
      RETURN
    END IF
 
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(OFIELD),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    ! Use of NF90_INT1 datatype (=NF90_BYTE) that is enough to store a boolean
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_INT1, IVDIMS, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L1','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L1','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_L1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 !Convert LOGICAL to INTEGER (LOGICAL format not supported by netCDF files)
@@ -1174,18 +1177,18 @@ ELSEWHERE
 END WHERE
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, IFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_L1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_L1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMS)) DEALLOCATE(IVDIMS)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_L1
+END SUBROUTINE IO_Field_write_nc4_L1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_C0(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_C0(TPFILE,TPFIELD,HFIELD,KRESP)
 !
 TYPE(TFILEDATA),       INTENT(IN) :: TPFILE
 TYPE(TFIELDDATA),      INTENT(IN) :: TPFIELD
@@ -1201,7 +1204,7 @@ INTEGER                                :: IRESP, ILEN
 CHARACTER(LEN=:),ALLOCATABLE           :: YFIELD
 LOGICAL                                :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !Store the character string in a string of a size multiple of NSTRINGCHUNKSIZE
@@ -1215,39 +1218,39 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 IF (TPFIELD%LTIMEDEP) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)// &
                  ': time dependent variable not (yet) possible for 0D variable '//TRIM(TPFIELD%CMNHNAME))
 !
 ! The variable should not already exist but who knows ?
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id
-   IVDIMS(1) = GETSTRDIMID(TPFILE,INT(ILEN,KIND=IDCDF_KIND))
+   IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,INT(ILEN,KIND=IDCDF_KIND))
    ! Define the variable
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C0','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_C0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ALLOCATE(CHARACTER(LEN=ILEN)::YFIELD)
 YFIELD(1:LEN_TRIM(HFIELD))=TRIM(HFIELD)
 YFIELD(LEN_TRIM(HFIELD)+1:)=' '
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, YFIELD)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 DEALLOCATE(YFIELD)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_C0
+END SUBROUTINE IO_Field_write_nc4_C0
 
-SUBROUTINE IO_WRITE_FIELD_NC4_C1(TPFILE,TPFIELD,HFIELD,KRESP)
+SUBROUTINE IO_Field_write_nc4_C1(TPFILE,TPFIELD,HFIELD,KRESP)
 !  Modif
 !    J.Escobar : 25/04/2018 : missing 'IF ALLOCATED(IVDIMSTMP)' DEALLOCATE
 !----------------------------------------------------------------
@@ -1268,7 +1271,7 @@ INTEGER(KIND=IDCDF_KIND)               :: ILEN, ISIZE
 INTEGER                                :: IRESP
 LOGICAL                                :: GEXISTED !True if variable was already defined
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 
@@ -1280,11 +1283,11 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 IF (TPFIELD%LTIMEDEP) THEN
   !This is an error (+return) and not a warning because IVDIMSTMP could be of size 2 if LTIMEDEP=T
-  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)// &
                  ': time dependent variable not (yet) possible for '//TRIM(TPFIELD%CMNHNAME))
   RETURN
 END IF
@@ -1293,30 +1296,30 @@ END IF
 STATUS = NF90_INQ_VARID(INCID, YVARNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf string dimensions id
-   IVDIMS(1) = GETSTRDIMID(TPFILE,ILEN)
-   CALL FILLVDIMS(TPFILE, TPFIELD, (/ISIZE/), IVDIMSTMP)
+   IVDIMS(1) = IO_Strdimid_get_nc4(TPFILE,ILEN)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, (/ISIZE/), IVDIMSTMP)
    IVDIMS(2) = IVDIMSTMP(1)
    ! Define the variable
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_CHAR, IVDIMS, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C1','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C1','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_C1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_C1',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TPFIELD,IVARID,GEXISTED)
+CALL IO_Field_attr_write_nc4(TPFILE,TPFIELD,IVARID,GEXISTED)
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, HFIELD(1:ISIZE)(1:ILEN), START=(/IONE,IONE/), COUNT=(/ILEN,ISIZE/))
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_C1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_C1','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF(ALLOCATED(IVDIMSTMP)) DEALLOCATE(IVDIMSTMP)
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_C1
+END SUBROUTINE IO_Field_write_nc4_C1
 
 
-SUBROUTINE IO_WRITE_FIELD_NC4_T0(TPFILE,TPFIELD,TPDATA,KRESP)
+SUBROUTINE IO_Field_write_nc4_T0(TPFILE,TPFIELD,TPDATA,KRESP)
 !
 USE MODD_TIME_n,     ONLY: TDTMOD
 USE MODD_TYPE_DATE
@@ -1340,7 +1343,7 @@ LOGICAL                                :: GEXISTED !True if variable was already
 REAL                                   :: ZDELTATIME !Distance in seconds since reference date and time
 TYPE(DATE_TIME)                        :: TZREF
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': writing '//TRIM(TPFIELD%CMNHNAME))
 !
 IRESP = 0
 !
@@ -1351,14 +1354,14 @@ INCID = TPFILE%NNCID
 !
 GEXISTED = .FALSE.
 !
-CALL CLEANMNHNAME(TPFIELD%CMNHNAME,YVARNAME)
+CALL IO_Mnhname_clean(TPFIELD%CMNHNAME,YVARNAME)
 !
 TZFIELD%CMNHNAME = TRIM(YVARNAME)
 !
 ! Model beginning date (TDTMOD%TDATE) is used as the reference date
 ! Reference time is set to 0.
 IF (.NOT.ASSOCIATED(TDTMOD)) THEN
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)// &
                  ': '//TRIM(TZFIELD%CMNHNAME)//': DTMOD is not associated and not known. Reference date set to 2000/01/01')
   TZREF%TDATE%YEAR  = 2000
   TZREF%TDATE%MONTH = 1
@@ -1373,7 +1376,7 @@ WRITE(YUNITS,'( "seconds since ",I4.4,"-",I2.2,"-",I2.2," 00:00:00 +0:00" )') &
 TZFIELD%CUNITS = TRIM(YUNITS)
 !
 IF (TPFIELD%LTIMEDEP) &
-  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)// &
+  CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)// &
                  ': time dependent variable not (yet) possible for 0D variable '//TRIM(TPFIELD%CMNHNAME))
 !
 ! The variable should not already exist but who knows ?
@@ -1385,21 +1388,21 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
    STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVARID)
 #endif
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(YVARNAME))
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(YVARNAME))
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(YVARNAME)//' already defined')
 END IF
 
 ! Write metadata
-CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED,HCALENDAR='standard')
+CALL IO_Field_attr_write_nc4(TPFILE,TZFIELD,IVARID,GEXISTED,HCALENDAR='standard')
 !
 ! Compute the temporal distance from reference
 CALL DATETIME_DISTANCE(TZREF,TPDATA,ZDELTATIME)
 
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_PUT_VAR',trim(YVARNAME),IRESP)
 
 IF (IRESP/=0) THEN
   KRESP = IRESP
@@ -1421,19 +1424,19 @@ TZFIELD%CCOMMENT  = 'YYYYMMDD'
 STATUS = NF90_INQ_VARID(INCID, TZFIELD%CMNHNAME, IVARID)
 IF (STATUS /= NF90_NOERR) THEN
    ! Get the netcdf dimensions
-   CALL FILLVDIMS(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), IVDIMS)
+   CALL IO_Vdims_fill_nc4(TPFILE, TPFIELD, INT(SHAPE(ITDATE),KIND=IDCDF_KIND), IVDIMS)
 
    ! Define the variable
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_INT, IVDIMS, IVARID)
-     IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
-   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED)
+     IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
+   CALL IO_Field_attr_write_nc4(TPFILE,TZFIELD,IVARID,GEXISTED)
 ELSE
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
 END IF
 
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, ITDATE)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
 
 IF (IRESP/=0) THEN
   KRESP = IRESP
@@ -1456,22 +1459,22 @@ IF (STATUS /= NF90_NOERR) THEN
 #else
    STATUS = NF90_DEF_VAR(INCID, TZFIELD%CMNHNAME, NF90_FLOAT,  IVARID)
 #endif
-   IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
-   CALL IO_WRITE_FIELD_ATTR_NC4(TPFILE,TZFIELD,IVARID,GEXISTED)
+   IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_DEF_VAR',trim(TZFIELD%CMNHNAME))
+   CALL IO_Field_attr_write_nc4(TPFILE,TZFIELD,IVARID,GEXISTED)
 ELSE
    GEXISTED = .TRUE.
-   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_WRITE_FIELD_NC4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
+   CALL PRINT_MSG(NVERB_WARNING,'IO','IO_Field_write_nc4_T0',TRIM(TPFILE%CNAME)//': '//TRIM(TZFIELD%CMNHNAME)//' already defined')
 END IF
 
 ! Write the data
 STATUS = NF90_PUT_VAR(INCID, IVARID, TPDATA%TIME)
-IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'IO_WRITE_FIELD_NC4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
+IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'IO_Field_write_nc4_T0','NF90_PUT_VAR',trim(TZFIELD%CMNHNAME),IRESP)
 #endif
 
 KRESP = IRESP
-END SUBROUTINE IO_WRITE_FIELD_NC4_T0
+END SUBROUTINE IO_Field_write_nc4_T0
 
-SUBROUTINE IO_WRITE_COORDVAR_NC4(TPFILE,HPROGRAM_ORIG)
+SUBROUTINE IO_Coordvar_write_nc4(TPFILE,HPROGRAM_ORIG)
 USE MODD_CONF,       ONLY: CPROGRAM, LCARTESIAN
 USE MODD_CONF_n,     ONLY: CSTORAGE_TYPE
 USE MODD_GRID,       ONLY: XLATORI, XLONORI
@@ -1500,7 +1503,7 @@ REAL,DIMENSION(:,:),POINTER     :: ZLAT, ZLON
 type(dimcdf), pointer           :: tzdim_ni, tzdim_nj, tzdim_ni_u, tzdim_nj_u, tzdim_ni_v, tzdim_nj_v
 TYPE(IOCDF),  POINTER           :: PIOCDF
 
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_COORDVAR_NC4','called for '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Coordvar_write_nc4','called for '//TRIM(TPFILE%CNAME))
 
 ZXHAT => NULL()
 ZYHAT => NULL()
@@ -1704,33 +1707,33 @@ SUBROUTINE WRITE_HOR_COORD(TDIM,HLONGNAME,HSTDNAME,HAXIS,PSHIFT,KBOUNDLOW,KBOUND
 #else
       STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIM, IVARID)
 #endif
-      IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_DEF_VAR',trim(YVARNAME))
+      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_DEF_VAR',trim(YVARNAME))
     ELSE
       CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_HOR_COORD',TRIM(YVARNAME)//' already defined')
     END IF
 
     ! Write metadata
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name',HLONGNAME)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name',HSTDNAME)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
     IF (PRESENT(PCOORDS)) THEN
       STATUS = NF90_PUT_ATT(INCID, IVARID, 'units','m')
-      IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
+      IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
     END IF
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis',HAXIS)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_axis_shift',PSHIFT)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
                                                      //trim(YVARNAME))
     WRITE(YRANGE,'( I0,":",I0 )') 1+KBOUNDLOW,ISIZE-KBOUNDHIGH
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_dynamic_range',TRIM(YRANGE))
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
                                                      //trim(YVARNAME))
 
     ! Write the data
     STATUS = NF90_PUT_VAR(INCID, IVARID, ZTAB)
-    IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_HOR_COORD','NF90_PUT_VAR',trim(YVARNAME),IRESP)
+    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_HOR_COORD','NF90_PUT_VAR',trim(YVARNAME),IRESP)
   END IF
 
   IF (GALLOC) DEALLOCATE(ZTAB)
@@ -1775,9 +1778,9 @@ SUBROUTINE WRITE_HOR_2DCOORD(PX,PY,HLAT,HLON)
     ENDIF
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME(HLAT,ID,IRESP)
-    CALL IO_WRITE_FIELD_NC4_X2(TPFILE,TFIELDLIST(ID),ZTAB1,IRESP,OISCOORD=.TRUE.)
+    CALL IO_Field_write_nc4_X2(TPFILE,TFIELDLIST(ID),ZTAB1,IRESP,OISCOORD=.TRUE.)
     CALL FIND_FIELD_ID_FROM_MNHNAME(HLON,ID,IRESP)
-    CALL IO_WRITE_FIELD_NC4_X2(TPFILE,TFIELDLIST(ID),ZTAB2,IRESP,OISCOORD=.TRUE.)
+    CALL IO_Field_write_nc4_X2(TPFILE,TFIELDLIST(ID),ZTAB2,IRESP,OISCOORD=.TRUE.)
   END IF
 
   IF (GALLOC1) DEALLOCATE(ZTAB1)
@@ -1815,56 +1818,56 @@ SUBROUTINE WRITE_VER_COORD(TDIM,HLONGNAME,HSTDNAME,HCOMPNAME,PSHIFT,KBOUNDLOW,KB
 #else
     STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIM, IVARID)
 #endif
-    IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_DEF_VAR',trim(YVARNAME))
+    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_DEF_VAR',trim(YVARNAME))
   ELSE
     CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_VER_COORD',TRIM(YVARNAME)//' already defined')
   END IF
 
   ! Write metadata
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name',HLONGNAME)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name',HSTDNAME)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'units','m')
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','Z')
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'positive','up')
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','positive for '//trim(YVARNAME))
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','positive for '//trim(YVARNAME))
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_axis_shift',PSHIFT)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_axis_shift for ' &
                                                    //trim(YVARNAME))
   WRITE(YRANGE,'( I0,":",I0 )') 1+KBOUNDLOW,ISIZE-KBOUNDHIGH
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'c_grid_dynamic_range',TRIM(YRANGE))
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','c_grid_dynamic_range for ' &
                                                    //trim(YVARNAME))
   !
   IF (GSLEVE) THEN
     !Remark: ZS, ZSMT and ZTOP in the formula are the same for mass point or flux point
     STATUS = NF90_PUT_ATT(INCID, IVARID,'formula_terms','s: '//TRIM(YVARNAME)//                   &
                                         ' height: ZTOP oro_ls: ZSMT oro: ZS len1: LEN1 len2: LEN2')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_definition','z(n,k,j,i)=s(k)'//                                      &
                           '+ oro_ls(j,i)*sinh((height/len1)**1.35-(s(k)/len1)**1.35)/sinh((s(k)/len1)**1.35)'//        &
                           '+(oro(j,i)-oro_ls(j,i))*sinh((height/len2)**1.35-(s(k)/len2)**1.35)/sinh((s(k)/len2)**1.35)')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
                                                      //trim(YVARNAME))
   ELSE
     !Remark: ZS and ZTOP in the formula are the same for mass point or flux point
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_terms','s: '//TRIM(YVARNAME)//' height: ZTOP orog: ZS')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_terms for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'formula_definition','z(n,k,j,i)=s(k)*(height-orog(j,i))/height+orog(j,i)')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','formula_definition for ' &
                                                      //trim(YVARNAME))
   ENDIF
   !
   STATUS = NF90_PUT_ATT(INCID, IVARID, 'computed_standard_name',HCOMPNAME)
-  IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_ATT','computed_standard_name for ' &
+  IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_ATT','computed_standard_name for ' &
                                                    //trim(YVARNAME))
 
   ! Write the data
   STATUS = NF90_PUT_VAR(INCID, IVARID, PCOORDS)
-  IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_VER_COORD','NF90_PUT_VAR',trim(YVARNAME))
+  IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_VER_COORD','NF90_PUT_VAR',trim(YVARNAME))
 
 END SUBROUTINE WRITE_VER_COORD
 
@@ -1899,24 +1902,24 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
 #else
       STATUS = NF90_DEF_VAR(INCID, YVARNAME, NF90_FLOAT,  IVDIM, IVARID)
 #endif
-      IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_DEF_VAR',trim(YVARNAME))
+      IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_DEF_VAR',trim(YVARNAME))
     ELSE
       CALL PRINT_MSG(NVERB_ERROR,'IO','WRITE_TIME_COORD',TRIM(YVARNAME)//' already defined')
     END IF
 
     ! Write metadata
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'long_name','time axis')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','long_name for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'standard_name','time')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','standard_name for '//trim(YVARNAME))
     WRITE(YUNITS,'( "seconds since ",I4.4,"-",I2.2,"-",I2.2," 00:00:00 +0:00" )') &
           TDTMOD%TDATE%YEAR,TDTMOD%TDATE%MONTH,TDTMOD%TDATE%DAY
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'units',YUNITS)
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','units for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID, 'axis','T')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','axis for '//trim(YVARNAME))
     STATUS = NF90_PUT_ATT(INCID, IVARID,'calendar','standard')
-    IF (STATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','calendar for '//trim(YVARNAME))
+    IF (STATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_ATT','calendar for '//trim(YVARNAME))
 
     ! Model beginning date (TDTMOD%TDATE) is used as the reference date
     ! Reference time is set to 0.
@@ -1926,15 +1929,15 @@ SUBROUTINE WRITE_TIME_COORD(TDIM)
     CALL DATETIME_DISTANCE(TZREF,TDTCUR,ZDELTATIME)
     ! Write the data
     STATUS = NF90_PUT_VAR(INCID, IVARID, ZDELTATIME)
-    IF (status /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(status,'WRITE_TIME_COORD','NF90_PUT_VAR',trim(YVARNAME))
+    IF (status /= NF90_NOERR) CALL IO_Err_handle_nc4(status,'WRITE_TIME_COORD','NF90_PUT_VAR',trim(YVARNAME))
   END IF
 
 END SUBROUTINE WRITE_TIME_COORD
 
-END SUBROUTINE IO_WRITE_COORDVAR_NC4
+END SUBROUTINE IO_Coordvar_write_nc4
 
 
-SUBROUTINE IO_WRITE_HEADER_NC4(TPFILE)
+SUBROUTINE IO_Header_write_nc4(TPFILE)
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE ! File structure
 !
@@ -1942,30 +1945,30 @@ INTEGER(KIND=IDCDF_KIND)     :: ISTATUS
 !
 IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_WRITE_HEADER_NC4','called for file '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Header_write_nc4','called for file '//TRIM(TPFILE%CNAME))
 !
 IF (TPFILE%LMASTER)  THEN
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'Conventions', 'CF-1.7 COMODO-1.4')
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','Conventions')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','Conventions')
 
 #if (MNH_REAL == 8)
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '8')
 #else
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_REAL', '4')
 #endif
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_REAL')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_REAL')
 
 #if (MNH_INT == 4)
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '4')
 #else
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'MNH_INT', '8')
 #endif
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_INT')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_FILE_WRITE_HEADER','NF90_PUT_ATT','MNH_INT')
 
 !title
 
   !history
-  CALL IO_APPEND_HISTORY_NC4(TPFILE)
+  CALL IO_History_append_nc4(TPFILE)
 
 !institution
 
@@ -1976,12 +1979,12 @@ IF (TPFILE%LMASTER)  THEN
 !references
 END IF
 !
-END SUBROUTINE IO_WRITE_HEADER_NC4
+END SUBROUTINE IO_Header_write_nc4
 
 
-SUBROUTINE IO_APPEND_HISTORY_NC4(TPFILE)
+SUBROUTINE IO_History_append_nc4(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE ! File structure
 !
@@ -1995,7 +1998,7 @@ INTEGER,DIMENSION(8)         :: IDATETIME
 !
 IF (TRIM(TPFILE%CFORMAT)/='NETCDF4' .AND. TRIM(TPFILE%CFORMAT)/='LFICDF4') RETURN
 !
-CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_APPEND_HISTORY_NC4','called for file '//TRIM(TPFILE%CNAME))
+CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_History_append_nc4','called for file '//TRIM(TPFILE%CNAME))
 !
 IF (TPFILE%LMASTER)  THEN
   !Check if history attribute already exists in file and read it
@@ -2003,7 +2006,7 @@ IF (TPFILE%LMASTER)  THEN
   IF (ISTATUS == NF90_NOERR) THEN
     ALLOCATE(CHARACTER(LEN=ILEN_PREV) :: YHISTORY_PREV)
     ISTATUS = NF90_GET_ATT(TPFILE%NNCID, NF90_GLOBAL, 'history', YHISTORY_PREV)
-    IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(ISTATUS,'IO_APPEND_HISTORY_NC4','NF90_GET_ATT','history')
+    IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(ISTATUS,'IO_History_append_nc4','NF90_GET_ATT','history')
     YHISTORY_PREV = YHISTORY_PREV
   ELSE
     ILEN_PREV = 0
@@ -2029,10 +2032,10 @@ IF (TPFILE%LMASTER)  THEN
     YHISTORY = YHISTORY_NEW//NEW_LINE('A')//YHISTORY_PREV
   END IF
   ISTATUS = NF90_PUT_ATT(TPFILE%NNCID, NF90_GLOBAL, 'history', YHISTORY  )
-  IF (ISTATUS /= NF90_NOERR) CALL IO_HANDLE_ERR_NC4(istatus,'IO_APPEND_HISTORY_NC4','NF90_PUT_ATT','history')
+  IF (ISTATUS /= NF90_NOERR) CALL IO_Err_handle_nc4(istatus,'IO_History_append_nc4','NF90_PUT_ATT','history')
 END IF
 
-END SUBROUTINE IO_APPEND_HISTORY_NC4
+END SUBROUTINE IO_History_append_nc4
 
 
 end module mode_io_write_nc4
@@ -2040,22 +2043,22 @@ end module mode_io_write_nc4
 !
 ! External dummy subroutines
 !
-subroutine io_write_coordvar_nc4(a, b)
+subroutine IO_Coordvar_write_nc4(a, b)
 use mode_msg
 integer :: a, b
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_write_coordvar_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_write_coordvar_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Coordvar_write_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Coordvar_write_nc4
 !
-subroutine io_write_field_nc4(a, b, c, d, e, f, g)
+subroutine IO_Field_write_nc4(a, b, c, d, e, f, g)
 use mode_msg
 integer :: a, b, c, d, e, f, g
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_write_field_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_write_field_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Field_write_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Field_write_nc4
 !
-subroutine io_write_header_nc4(a)
+subroutine IO_Header_write_nc4(a)
 use mode_msg
 integer :: a
-CALL PRINT_MSG(NVERB_ERROR,'IO','io_write_header_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
-end subroutine io_write_header_nc4
+CALL PRINT_MSG(NVERB_ERROR,'IO','IO_Header_write_nc4','empty call. Compile with -DMNH_IOCDF4 flag to enable NetCDF')
+end subroutine IO_Header_write_nc4
 !
 #endif
diff --git a/src/LIB/SURCOUCHE/src/mode_lb_ll.f90 b/src/LIB/SURCOUCHE/src/mode_lb_ll.f90
index 72b5dc99b..19fcea8e5 100644
--- a/src/LIB/SURCOUCHE/src/mode_lb_ll.f90
+++ b/src/LIB/SURCOUCHE/src/mode_lb_ll.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1999-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 
@@ -1666,14 +1666,11 @@
 !               ------------
 !
   USE MODD_CONF
-!  USE MODD_DIM_n
   USE MODD_DYN_n
-  USE MODD_IO_ll, ONLY : ISP,GSMONOPROC
-!  USE MODE_ll
-  USE MODE_IO_ll
-  USE MODE_MPPDB
+  USE MODD_IO,            ONLY: ISP
+  USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+
   USE MODE_DISTRIB_LB
-  USE MODD_PARAMETERS_ll, ONLY : JPHEXT
   !
   IMPLICIT NONE
   !
diff --git a/src/LIB/SURCOUCHE/src/mode_mppdb.f90 b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
index 575fb7b8e..ae15313af 100644
--- a/src/LIB/SURCOUCHE/src/mode_mppdb.f90
+++ b/src/LIB/SURCOUCHE/src/mode_mppdb.f90
@@ -610,13 +610,14 @@ CONTAINS
 
   SUBROUTINE MPPDB_CHECKLB(PLB,MESSAGE,PRECISION,HLBTYPE,KRIM)
 
-    USE MODD_PARAMETERS_ll, ONLY : JPHEXT
-    USE MODD_VAR_ll    , ONLY : MPI_PRECISION ,  NMNH_COMM_WORLD
-    USE MODD_IO_ll,        ONLY : ISP,ISNPROC,GSMONOPROC,LPACK,L2D
-    USE MODD_MPIF      , ONLY   : MPI_INTEGER, MPI_STATUS_IGNORE
+    USE MODD_IO,            ONLY: GSMONOPROC, ISP, ISNPROC, L2D, LPACK
+    USE MODD_MPIF,          ONLY: MPI_INTEGER, MPI_STATUS_IGNORE
+    USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+    USE MODD_VAR_ll,        ONLY: MPI_PRECISION, NMNH_COMM_WORLD
 
     USE MODE_DISTRIB_LB
-    USE MODE_TOOLS_ll,     ONLY : GET_GLOBALDIMS_ll
+    USE MODE_TOOLS_ll,      ONLY: GET_GLOBALDIMS_ll
+
     IMPLICIT NONE
 
     REAL, DIMENSION(:,:,:) , TARGET      :: PLB
diff --git a/src/LIB/SURCOUCHE/src/mode_msg.f90 b/src/LIB/SURCOUCHE/src/mode_msg.f90
index ad5cd4191..27d206a3a 100644
--- a/src/LIB/SURCOUCHE/src/mode_msg.f90
+++ b/src/LIB/SURCOUCHE/src/mode_msg.f90
@@ -10,7 +10,7 @@
 !-----------------------------------------------------------------
 MODULE MODE_MSG
 !
-USE MODD_IO_ll, ONLY : NVERB_FATAL,NVERB_ERROR,NVERB_WARNING,NVERB_INFO,NVERB_DEBUG
+USE MODD_IO, ONLY: NVERB_FATAL, NVERB_ERROR, NVERB_WARNING, NVERB_INFO, NVERB_DEBUG
 !
 IMPLICIT NONE
 !
@@ -18,18 +18,16 @@ CONTAINS
 !
 SUBROUTINE PRINT_MSG(KVERB,HDOMAIN,HSUBR,HMSG)
 !
-USE ISO_FORTRAN_ENV, ONLY : ERROR_UNIT, OUTPUT_UNIT
+USE ISO_FORTRAN_ENV, ONLY: ERROR_UNIT, OUTPUT_UNIT
 !
-USE MODD_CONF,   ONLY : CPROGRAM
-USE MODD_IO_ll,  ONLY : NIO_VERB,NIO_ABORT_LEVEL,NGEN_VERB,NGEN_ABORT_LEVEL, &
-                        LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, TFILE_OUTPUTLISTING
-USE MODD_LUNIT,  ONLY : TLUOUT0
-USE MODD_VAR_ll, ONLY : IP, NMNH_COMM_WORLD
+USE MODD_CONF,       ONLY: CPROGRAM
+USE MODD_IO,         ONLY: NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, &
+                           LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, TFILE_OUTPUTLISTING
+USE MODD_LUNIT,      ONLY: TLUOUT0
+USE MODD_VAR_ll,     ONLY: IP, NMNH_COMM_WORLD
 !
 use modi_tools_c
 !
-!USE MODE_FM,     ONLY : IO_FILE_CLOSE_ll
-!
 INTEGER,         INTENT(IN) :: KVERB   !Verbosity level
 CHARACTER(LEN=*),INTENT(IN) :: HDOMAIN !Domain/category of message
 CHARACTER(LEN=*),INTENT(IN) :: HSUBR   !Subroutine/function name
diff --git a/src/LIB/SURCOUCHE/src/mode_scatter.f90 b/src/LIB/SURCOUCHE/src/mode_scatter.f90
index cc933744a..8ee7b755f 100644
--- a/src/LIB/SURCOUCHE/src/mode_scatter.f90
+++ b/src/LIB/SURCOUCHE/src/mode_scatter.f90
@@ -1,16 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for CVS information
-!-----------------------------------------------------------------
-! $Source$
-! $Name$ 
-! $Revision$ 
-! $Date$
-!-----------------------------------------------------------------
-!-----------------------------------------------------------------
 
 #ifdef MNH_MPI_DOUBLE_PRECISION
 #define MPI_FLOAT MPI_DOUBLE_PRECISION
@@ -32,8 +24,6 @@ IMPLICIT NONE
 
 PRIVATE
 
-!INCLUDE 'mpif.h'
-
 INTERFACE SCATTER_XXFIELD
   MODULE PROCEDURE SCATTERXX_X1,SCATTERXX_X2,SCATTERXX_X3&
        & ,SCATTERXX_X4,SCATTERXX_X5,SCATTERXX_X6,&
@@ -50,10 +40,10 @@ PUBLIC SCATTER_XXFIELD,SCATTER_XYFIELD,GET_DOMREAD_ll
 CONTAINS 
 
 SUBROUTINE SCATTERXX_X1(HDIR,PSEND,PRECV,KROOT,KCOMM, TPSPLITTING)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_PARAMETERS_ll, ONLY : JPHEXT
+USE MODD_IO,            ONLY: ISP, ISNPROC
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_STRUCTURE_ll,  ONLY: ZONE_ll
+USE MODD_VAR_ll,        ONLY: MNH_STATUSES_IGNORE
 
 CHARACTER(LEN=*),          INTENT(IN) :: HDIR
 REAL,DIMENSION(:), TARGET, INTENT(IN) :: PSEND
@@ -61,14 +51,11 @@ REAL,DIMENSION(:),         INTENT(INOUT):: PRECV
 INTEGER,                   INTENT(IN) :: KROOT
 INTEGER,                   INTENT(IN) :: KCOMM
 TYPE(ZONE_ll), DIMENSION(ISNPROC), OPTIONAL :: TPSPLITTING  ! splitting of the domain
-  
-!INCLUDE 'mpif.h'
 
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:), POINTER :: TX1DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 INTEGER,ALLOCATABLE,DIMENSION(:)    :: REQ_TAB
 INTEGER                           :: NB_REQ
@@ -122,9 +109,9 @@ END IF
 END SUBROUTINE SCATTERXX_X1
 
 SUBROUTINE SCATTERXX_X2(HDIR,PSEND,PRECV,KROOT,KCOMM, TPSPLITTING)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_STRUCTURE_ll, ONLY : ZONE_ll
-USE MODD_PARAMETERS_ll, ONLY : JPHEXT
+USE MODD_IO,            ONLY: ISP, ISNPROC
+USE MODD_PARAMETERS_ll, ONLY: JPHEXT
+USE MODD_STRUCTURE_ll,  ONLY: ZONE_ll
 
 CHARACTER(LEN=*),           INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:), TARGET,INTENT(IN) :: PSEND
@@ -133,13 +120,10 @@ INTEGER,                    INTENT(IN) :: KROOT
 INTEGER,                    INTENT(IN) :: KCOMM
 TYPE(ZONE_ll), DIMENSION(ISNPROC), OPTIONAL :: TPSPLITTING  ! splitting of the domain
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -172,7 +156,7 @@ END IF
 END SUBROUTINE SCATTERXX_X2
 
 SUBROUTINE SCATTERXX_X3(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:), TARGET, INTENT(IN) :: PSEND
@@ -180,13 +164,10 @@ REAL,DIMENSION(:,:,:),         INTENT(INOUT):: PRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -212,7 +193,7 @@ END IF
 END SUBROUTINE SCATTERXX_X3
 
 SUBROUTINE SCATTERXX_X4(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -220,13 +201,10 @@ REAL,DIMENSION(:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:),    POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -252,7 +230,7 @@ END IF
 END SUBROUTINE SCATTERXX_X4
 
 SUBROUTINE SCATTERXX_X5(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -260,14 +238,11 @@ REAL,DIMENSION(:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                         INTENT(IN) :: KROOT
 INTEGER,                         INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
-  
+
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
     CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
@@ -292,7 +267,7 @@ END IF
 END SUBROUTINE SCATTERXX_X5
 
 SUBROUTINE SCATTERXX_X6(HDIR,PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),                  INTENT(IN) :: HDIR
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
@@ -300,13 +275,10 @@ REAL,DIMENSION(:,:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                           INTENT(IN) :: KROOT
 INTEGER,                           INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE)  :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -332,7 +304,7 @@ END IF
 END SUBROUTINE SCATTERXX_X6
 
 SUBROUTINE SCATTERXX_N1(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),           INTENT(IN) :: HDIR
 INTEGER,DIMENSION(:),TARGET,INTENT(IN) :: KSEND
@@ -340,13 +312,10 @@ INTEGER,DIMENSION(:),       INTENT(INOUT):: KRECV
 INTEGER,                    INTENT(IN) :: KROOT
 INTEGER,                    INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 INTEGER, DIMENSION(:), POINTER :: TI2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -372,7 +341,7 @@ END IF
 END SUBROUTINE SCATTERXX_N1
 
 SUBROUTINE SCATTERXX_N2(HDIR,KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 CHARACTER(LEN=*),              INTENT(IN) :: HDIR
 INTEGER, DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
@@ -380,13 +349,10 @@ INTEGER, DIMENSION(:,:),       INTENT(INOUT):: KRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 INTEGER, DIMENSION(:,:), POINTER :: TI2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -412,21 +378,18 @@ END IF
 END SUBROUTINE SCATTERXX_N2
 
 SUBROUTINE SCATTERXY_X2(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
-USE MODD_VAR_ll, ONLY : MNH_STATUSES_IGNORE
+USE MODD_IO,     ONLY: ISP, ISNPROC
+USE MODD_VAR_ll, ONLY: MNH_STATUSES_IGNORE
 
 REAL,DIMENSION(:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:),       INTENT(INOUT):: PRECV
 INTEGER,                   INTENT(IN) :: KROOT
 INTEGER,                   INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:), POINTER :: TX2DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 INTEGER,ALLOCATABLE,DIMENSION(:)    :: REQ_TAB
 INTEGER                           :: NB_REQ
@@ -468,20 +431,17 @@ END IF
 END SUBROUTINE  SCATTERXY_X2
 
 SUBROUTINE SCATTERXY_X3(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                     INTENT(IN) :: KROOT
 INTEGER,                     INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
   
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -503,20 +463,17 @@ END IF
 END SUBROUTINE  SCATTERXY_X3
 
 SUBROUTINE SCATTERXY_X4(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                       INTENT(IN) :: KROOT
 INTEGER,                       INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -538,21 +495,18 @@ END IF
 END SUBROUTINE  SCATTERXY_X4
 
 SUBROUTINE SCATTERXY_X5(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                         INTENT(IN) :: KROOT
 INTEGER,                         INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
-  
+
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
     CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
@@ -573,21 +527,18 @@ END IF
 END SUBROUTINE  SCATTERXY_X5
 
 SUBROUTINE SCATTERXY_X6(PSEND,PRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 REAL,DIMENSION(:,:,:,:,:,:),TARGET,INTENT(IN) :: PSEND
 REAL,DIMENSION(:,:,:,:,:,:),       INTENT(INOUT):: PRECV
 INTEGER,                           INTENT(IN) :: KROOT
 INTEGER,                           INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-  
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 REAL,DIMENSION(:,:,:,:,:,:), POINTER :: TX3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
-  
+
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
     CALL GET_DOMREAD_ll(JI,IXO,IXE,IYO,IYE)
@@ -608,20 +559,17 @@ END IF
 END SUBROUTINE  SCATTERXY_X6
 
 SUBROUTINE SCATTERXY_N2(KSEND,KRECV,KROOT,KCOMM)
-USE MODD_IO_ll, ONLY : ISP, ISNPROC
+USE MODD_IO, ONLY: ISP, ISNPROC
 
 INTEGER,DIMENSION(:,:),TARGET,INTENT(IN) :: KSEND
 INTEGER,DIMENSION(:,:),       INTENT(INOUT):: KRECV
 INTEGER,                      INTENT(IN) :: KROOT
 INTEGER,                      INTENT(IN) :: KCOMM
 
-!INCLUDE 'mpif.h'
-
 INTEGER :: IERR
 INTEGER :: JI
 INTEGER :: IXO,IXE,IYO,IYE
 INTEGER ,DIMENSION(:,:), POINTER :: TI3DP
-!INTEGER, DIMENSION(MPI_STATUS_SIZE) :: STATUS
 
 IF (ISP == KROOT) THEN
   DO JI = 1,ISNPROC
@@ -643,8 +591,8 @@ END IF
 END SUBROUTINE  SCATTERXY_N2
 
 SUBROUTINE GET_DOMREAD_ll(KIP,KXOR,KXEND,KYOR,KYEND)
-USE MODD_VAR_ll,      ONLY : TCRRT_PROCONF
-USE MODD_STRUCTURE_ll, ONLY : MODELSPLITTING_ll
+USE MODD_STRUCTURE_ll, ONLY: MODELSPLITTING_ll
+USE MODD_VAR_ll,       ONLY: TCRRT_PROCONF
 
 IMPLICIT NONE 
 
diff --git a/src/LIB/SURCOUCHE/src/modi_fm.f90 b/src/LIB/SURCOUCHE/src/modi_fm.f90
deleted file mode 100644
index c64838a04..000000000
--- a/src/LIB/SURCOUCHE/src/modi_fm.f90
+++ /dev/null
@@ -1,37 +0,0 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
-!-----------------------------------------------------------------
-
-MODULE MODI_FM_ll
-!
-INTERFACE 
-!
-SUBROUTINE SET_FMPACK_ll(O1D,O2D,OPACK)
-LOGICAL, INTENT(IN) :: O1D,O2D,OPACK
-END SUBROUTINE SET_FMPACK_ll
-!
-SUBROUTINE IO_FILE_OPEN_ll(TPFILE,KRESP,HPOSITION,HSTATUS,HPROGRAM_ORIG)
-USE MODD_IO_ll, ONLY: TFILEDATA
-TYPE(TFILEDATA),POINTER,INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,                INTENT(OUT), OPTIONAL :: KRESP  ! Return code
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HPOSITION
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HSTATUS
-CHARACTER(LEN=*),       INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-END SUBROUTINE IO_FILE_OPEN_ll
-!
-SUBROUTINE IO_FILE_CLOSE_ll(TPFILE,KRESP,HPROGRAM_ORIG)
-USE MODD_IO_ll, ONLY: TFILEDATA
-TYPE(TFILEDATA),  INTENT(INOUT)         :: TPFILE ! File structure
-INTEGER,          INTENT(OUT), OPTIONAL :: KRESP  ! Return code
-CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-END SUBROUTINE IO_FILE_CLOSE_ll
-!
-END INTERFACE
-END MODULE MODI_FM_ll
diff --git a/src/LIB/SURCOUCHE/src/modi_io.f90 b/src/LIB/SURCOUCHE/src/modi_io.f90
deleted file mode 100644
index b4fee82f8..000000000
--- a/src/LIB/SURCOUCHE/src/modi_io.f90
+++ /dev/null
@@ -1,49 +0,0 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
-!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
-!MNH_LIC for details. version 1.
-!-----------------------------------------------------------------
-! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 06/02/2019: simplify OPEN_ll and do somme assignments at a more logical place
-!  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
-!-----------------------------------------------------------------
-
-MODULE MODI_IO_ll
-!
-INTERFACE 
-  SUBROUTINE INITIO_ll()
-  END SUBROUTINE INITIO_ll
-
-  SUBROUTINE OPEN_ll(&
-       TPFILE,  &
-       MODE,    &
-       STATUS,  &
-       IOSTAT,  &
-       POSITION,&
-       DELIM,    &
-       HPROGRAM_ORIG)
-
-    USE MODD_IO_ll, ONLY : TFILEDATA
-
-    TYPE(TFILEDATA), INTENT(INOUT)         :: TPFILE
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: MODE
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: STATUS
-    INTEGER,         INTENT(OUT)           :: IOSTAT
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: POSITION
-    CHARACTER(len=*),INTENT(IN),  OPTIONAL :: DELIM
-    CHARACTER(LEN=*),INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
-  END SUBROUTINE OPEN_ll
-
-  SUBROUTINE CLOSE_ll(TPFILE,IOSTAT,HPROGRAM_ORIG)
-  USE MODD_IO_ll, ONLY : TFILEDATA
-
-    TYPE(TFILEDATA),  INTENT(IN)            :: TPFILE
-    INTEGER,          INTENT(OUT), OPTIONAL :: IOSTAT
-    CHARACTER(LEN=*), INTENT(IN),  OPTIONAL :: HPROGRAM_ORIG !To emulate a file coming from this program
- END SUBROUTINE CLOSE_ll
-
-END INTERFACE
-!
-END MODULE MODI_IO_ll
diff --git a/src/LIB/SURCOUCHE/src/modn_confio.f90 b/src/LIB/SURCOUCHE/src/modn_confio.f90
index b4a4ea3be..8505a61f9 100644
--- a/src/LIB/SURCOUCHE/src/modn_confio.f90
+++ b/src/LIB/SURCOUCHE/src/modn_confio.f90
@@ -13,7 +13,7 @@
 !!    -------
 !     Define I/O configuration variables that can be set with the NAM_CONFIO namelist
 !!    /!\ These variables must be transmitted to the SURCOUCHE library via the
-!!    SET_CONFIO_ll subroutine before the FIRST call to IO_FILE_OPEN_ll
+!!    IO_Config_set subroutine before the FIRST call to IO_FILE_OPEN_ll
 !
 !!
 !!**  IMPLICIT ARGUMENTS
@@ -36,9 +36,9 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_IO_ll, ONLY : LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, &
-                       NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, &
-                       CIO_DIR, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
+USE MODD_IO, ONLY : LVERB_OUTLST, LVERB_STDOUT, LVERB_ALLPRC, &
+                    NIO_VERB, NIO_ABORT_LEVEL, NGEN_VERB, NGEN_ABORT_LEVEL, &
+                    CIO_DIR, LIO_ALLOW_NO_BACKUP, LIO_NO_WRITE
 !
 IMPLICIT NONE
 !
diff --git a/src/LIB/SURCOUCHE/src/system_mnh.f90 b/src/LIB/SURCOUCHE/src/system_mnh.f90
index ccdcc751d..b43981265 100644
--- a/src/LIB/SURCOUCHE/src/system_mnh.f90
+++ b/src/LIB/SURCOUCHE/src/system_mnh.f90
@@ -12,7 +12,6 @@ SUBROUTINE SYSTEM_MNH(HCOMMAND)
 !!    Modifications:
 !!      Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
 !!
-  USE MODE_IO_ll
 !!
 !*       0.    DECLARATIONS
 !              ------------
diff --git a/src/MNH/adjust_langlois.f90 b/src/MNH/adjust_langlois.f90
index 57f958bdf..ed6df1d2a 100644
--- a/src/MNH/adjust_langlois.f90
+++ b/src/MNH/adjust_langlois.f90
@@ -118,7 +118,6 @@ USE MODD_BUDGET
 !
 USE MODI_CONDENSATION
 USE MODI_BUDGET
-USE MODE_FMWRIT
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/adv_forcingn.f90 b/src/MNH/adv_forcingn.f90
index a4a4038b6..5a8246825 100644
--- a/src/MNH/adv_forcingn.f90
+++ b/src/MNH/adv_forcingn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2010-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     #####################
       MODULE MODI_ADV_FORCING_n
@@ -100,21 +100,17 @@ END MODULE MODI_ADV_FORCING_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_DATETIME
-USE MODE_FM
-USE MODE_IO_ll
-!
+USE MODD_ADVFRC_n     ! Modules for time evolving advfrc
+USE MODD_BUDGET
 USE MODD_DYN
 USE MODD_LUNIT, ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_TIME
-USE MODD_BUDGET
 !
-USE MODI_BUDGET
+USE MODE_DATETIME
 !
-USE MODD_ADVFRC_n     ! Modules for time evolving advfrc
+USE MODI_BUDGET
 USE MODI_SHUMAN
-!USE MODD_FRC
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/advec_4th_order_aux.f90 b/src/MNH/advec_4th_order_aux.f90
index 6bffab256..190a59d22 100644
--- a/src/MNH/advec_4th_order_aux.f90
+++ b/src/MNH/advec_4th_order_aux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###############################
@@ -106,11 +106,10 @@ END MODULE MODI_ADVEC_4TH_ORDER_AUX
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-!
+USE MODD_ARGSLIST_ll, ONLY: HALO2LIST_ll
 USE MODD_CONF
-USE MODD_ARGSLIST_ll, ONLY : HALO2LIST_ll
-USE MODE_IO_ll
+!
+USE MODE_ll
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/advection_metsv.f90 b/src/MNH/advection_metsv.f90
index 3ec0b2a5c..485238b02 100644
--- a/src/MNH/advection_metsv.f90
+++ b/src/MNH/advection_metsv.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###########################
@@ -17,7 +17,7 @@ INTERFACE
                             PRTHS, PRRS, PRTKES, PRSVS,                        &
                             PRTHS_CLD, PRRS_CLD, PRSVS_CLD, PRTKES_ADV         )
 !
-USE MODD_IO_ll,     ONLY: TFILEDATA
+USE MODD_IO,     ONLY: TFILEDATA
 USE MODD_TYPE_DATE, ONLY: DATE_TIME
 !
 LOGICAL,                INTENT(IN)   ::  OCLOSE_OUT   ! switch for syncronous
@@ -143,19 +143,18 @@ END MODULE MODI_ADVECTION_METSV
 !
 USE MODD_BUDGET
 USE MODD_CST 
-USE MODD_CTURB,     ONLY: XTKEMIN
-USE MODD_CONF,      ONLY: LNEUTRAL,NHALO,L1D, L2D
-USE MODD_IO_ll,     ONLY: TFILEDATA
-USE MODD_LUNIT_n,   ONLY: TLUOUT
+USE MODD_CTURB,          ONLY: XTKEMIN
+USE MODD_CONF,           ONLY: LNEUTRAL,NHALO,L1D, L2D
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_PARAM_n
-USE MODD_TYPE_DATE, ONLY: DATE_TIME
+USE MODD_TYPE_DATE,      ONLY: DATE_TIME
 USE MODD_BLOWSNOW
 USE MODD_BLOWSNOW_n
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD,     ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
-USE MODE_IO_ll
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
 USE MODE_MSG
 !
@@ -342,7 +341,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFLU)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFLU)
 !
   IF (.NOT. L2D) THEN
     TZFIELD%CMNHNAME   = 'CFLV'
@@ -355,7 +354,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFLV)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFLV)
   END IF
 !
     TZFIELD%CMNHNAME   = 'CFLW'
@@ -368,7 +367,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFLW)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFLW)
 !
     TZFIELD%CMNHNAME   = 'CFL'
     TZFIELD%CSTDNAME   = ''
@@ -380,7 +379,7 @@ IF (OCLOSE_OUT .AND. OCFL_WRIT .AND. (.NOT. L1D)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCFL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZCFL)
 END IF
 !
 !* prints in the output file the maximum CFL
diff --git a/src/MNH/aerozon.f90 b/src/MNH/aerozon.f90
index 04808cb47..41989f6b5 100644
--- a/src/MNH/aerozon.f90
+++ b/src/MNH/aerozon.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -162,8 +162,6 @@ USE MODD_GROUND_PAR
 USE MODD_PARAM_RAD_n,  ONLY: LFIX_DAT
 !
 USE MODE_ll
-USE MODE_FM
-USE MODE_FMREAD
 !
 USE MODI_SHUMAN
 USE MODI_INI_RADCONF
diff --git a/src/MNH/aircraft_balloon_evol.f90 b/src/MNH/aircraft_balloon_evol.f90
index df4675587..12f4f595d 100644
--- a/src/MNH/aircraft_balloon_evol.f90
+++ b/src/MNH/aircraft_balloon_evol.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ##########################
@@ -175,7 +175,6 @@ USE MODE_DATETIME
 USE MODE_FGAU,             ONLY: GAULAG
 USE MODE_FSCATTER,         ONLY: QEPSW,QEPSI,BHMIE,MOMG,MG
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/anel_balancen.f90 b/src/MNH/anel_balancen.f90
index ad0f32051..e5aa55cfe 100644
--- a/src/MNH/anel_balancen.f90
+++ b/src/MNH/anel_balancen.f90
@@ -108,7 +108,6 @@ END MODULE MODI_ANEL_BALANCE_n
 !
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MODELN_HANDLER
 !
 USE MODD_CONF    ! declarative modules
diff --git a/src/MNH/budget.f90 b/src/MNH/budget.f90
index a4d5256d2..c8fe1b6cb 100644
--- a/src/MNH/budget.f90
+++ b/src/MNH/budget.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !##################
@@ -90,8 +90,6 @@ USE MODD_CONF, ONLY : LCHECK
 USE MODD_NSV,  ONLY : NSV
 USE MODD_LES
 !
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_LES_BUDGET
diff --git a/src/MNH/c2r2_adjust.f90 b/src/MNH/c2r2_adjust.f90
index 29333957d..aeaeaa05e 100644
--- a/src/MNH/c2r2_adjust.f90
+++ b/src/MNH/c2r2_adjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -15,7 +15,7 @@ INTERFACE
                              PTHS, PRVS, PRCS, PCNUCS,                    &
                              PCCS, PSRCS, PCLDFR, PRRS )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KRR      ! Number of moist variables
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE   ! Output file
@@ -152,18 +152,18 @@ END MODULE MODI_C2R2_ADJUST
 USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODD_NSV,     ONLY: NSV_C2R2BEG
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
+USE MODD_NSV,            ONLY: NSV_C2R2BEG
 USE MODD_PARAMETERS
 !
-USE MODI_CONDENS
-USE MODI_BUDGET
-!
 USE MODE_FIELD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
+USE MODI_CONDENS
+USE MODI_BUDGET
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
@@ -423,7 +423,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW1)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW1)
 END IF
 !
 !
diff --git a/src/MNH/call_rttov11.f90 b/src/MNH/call_rttov11.f90
index 3a5f6b338..70d452642 100644
--- a/src/MNH/call_rttov11.f90
+++ b/src/MNH/call_rttov11.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ########################
@@ -12,7 +12,7 @@ INTERFACE
                 PTHT, PRT, PPABST, PZZ, PMFCONV, PCLDFR, PULVLKB, PVLVLKB,  &
                 OUSERI, KRTTOVINFO, TPFILE    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER, INTENT(IN)   :: KDLON !number of columns where the
                                !radiation calculations are performed
@@ -90,23 +90,20 @@ SUBROUTINE CALL_RTTOV11(KDLON, KFLEV, PEMIS, PTSRAD,     &
 USE MODD_CST
 USE MODD_PARAMETERS
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_DEEP_CONVECTION_n
 USE MODD_REF_n
 USE MODD_RADIATIONS_n,  ONLY : XSEA
 !
 USE MODN_CONF
-!                                
+!
 USE MODI_DETER_ANGLE
 USE MODI_PINTER
 !
 USE MODE_FIELD
-USE MODE_FMWRIT
-USE MODE_FMREAD
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_POS
 !
@@ -579,7 +576,7 @@ DO JSAT=1,IJSAT ! loop over sensors
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .FALSE.
 !    PRINT *,'YRECFM='//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZBT(:,:,JCH))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZBT(:,:,JCH))
   END DO
   DEALLOCATE(chanprof,frequencies,emissivity,calcemis,profiles,cld_profiles)
   DEALLOCATE(ZBT)
diff --git a/src/MNH/call_rttov8.f90 b/src/MNH/call_rttov8.f90
index d8ae1818b..6180ec0f9 100644
--- a/src/MNH/call_rttov8.f90
+++ b/src/MNH/call_rttov8.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -12,7 +12,7 @@ INTERFACE
                 PTHT, PRT, PPABST, PZZ, PMFCONV, PCLDFR, PULVLKB, PVLVLKB,  &
                 OUSERI, KRTTOVINFO, TPFILE    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER, INTENT(IN)   :: KDLON !number of columns where the
                                !radiation calculations are performed
@@ -90,7 +90,7 @@ SUBROUTINE CALL_RTTOV8(KDLON, KFLEV, KSTATM, PEMIS, PTSRAD, PSTATM,     &
 !!              ------------
 !!
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_GRID_n
 USE MODD_DEEP_CONVECTION_n
@@ -98,18 +98,15 @@ USE MODD_REF_n
 USE MODD_RADIATIONS_n,  ONLY : XSEA
 !
 USE MODN_CONF
-!                                
+!
 USE MODD_RAD_TRANSF
-!                               
+!
 USE MODI_DETER_ANGLE
 USE MODI_PINTER
 !
 USE MODE_FIELD
-USE MODE_FMWRIT
-USE MODE_FMREAD
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_POS
 !
@@ -1582,7 +1579,7 @@ DO JSAT=1,IJSAT ! loop over sensors
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
     PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZANTMP)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZANTMP)
   END IF
   DEALLOCATE(ZANTMP)
 ! -----------------------------------------------------------------------------
@@ -1641,7 +1638,7 @@ DO JSAT=1,IJSAT ! loop over sensors
     PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT, &
          MINVAL(ZTBTMP(:,:,JCH),ZTBTMP(:,:,JCH)/=XUNDEF), &
          MAXVAL(ZTBTMP(:,:,JCH),ZTBTMP(:,:,JCH)/=XUNDEF)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTBTMP(:,:,JCH))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTBTMP(:,:,JCH))
     IF (KRTTOVINFO(3,JSAT) == 4.AND. JCH==3 ) THEN ! AMSU-B
       TZFIELD%CMNHNAME   = TRIM(YBEG)//'_UTH'
       TZFIELD%CSTDNAME   = ''
@@ -1670,7 +1667,7 @@ DO JSAT=1,IJSAT ! loop over sensors
           END IF
         END DO
       END DO
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZUTH)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZUTH)
       DEALLOCATE(ZUTH)
     END IF
   END DO
@@ -1737,7 +1734,7 @@ DO JSAT=1,IJSAT ! loop over sensors
       PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT, &
            MINVAL(ZTEMPK(:,:,:),ZTEMPK(:,:,:)/=XUNDEF), &
            MAXVAL(ZTEMPK(:,:,:),ZTEMPK(:,:,:)/=XUNDEF)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTEMPK(:,:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZTEMPK(:,:,:))
       !
       TZFIELD%CMNHNAME   = TRIM(YBEG)//'_'//TRIM(YEND)//'JAV'
       TZFIELD%CSTDNAME   = ''
@@ -1754,7 +1751,7 @@ DO JSAT=1,IJSAT ! loop over sensors
       PRINT *,TZFIELD%CMNHNAME//TZFIELD%CCOMMENT, &
            MINVAL(ZWVAPK(:,:,:),ZWVAPK(:,:,:)/=XUNDEF), &
            MAXVAL(ZWVAPK(:,:,:),ZWVAPK(:,:,:)/=XUNDEF)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWVAPK(:,:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWVAPK(:,:,:))
     END DO
     DEALLOCATE(ZTEMPKP,ZWVAPKP,ZFIN)
   ENDIF
diff --git a/src/MNH/ch_aer_mod_init.f90 b/src/MNH/ch_aer_mod_init.f90
index 86313a9ed..b5a2409aa 100644
--- a/src/MNH/ch_aer_mod_init.f90
+++ b/src/MNH/ch_aer_mod_init.f90
@@ -1,4 +1,4 @@
-!ORILAM_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!ORILAM_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
 !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !ORILAM_LIC for details.
@@ -50,11 +50,11 @@ END MODULE MODI_CH_AER_MOD_INIT
 !!    ------------------
 USE MODD_CH_AEROSOL
 USE MODD_GLO
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_UNIFACPARAM
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open,IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_UNIFAC
 !
 !
@@ -84,8 +84,8 @@ TZFILE => NULL()
 ! Initialize the mineral tabulation 
 IF (CMINERAL == 'NARES') THEN
 !       .. the file ares.w contains the weights of the model
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares1A.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares1A.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I1IA,J1JA,K1KA 
         DO JI=1,I1IA 
@@ -100,11 +100,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J1JA+1 
           READ(ILU,*) (W1JKA(JJ,JK),JK=1,K1KA) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares1C.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares1C.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I1IC,J1JC,K1KC 
         DO JI=1,I1IC 
@@ -119,11 +119,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J1JC+1 
           READ(ILU,*) (W1JKC(JJ,JK),JK=1,K1KC) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares2A.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares2A.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I2IA,J2JA,K2KA 
         DO JI=1,I2IA 
@@ -138,11 +138,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J2JA+1 
           READ(ILU,*) (W2JKA(JJ,JK),JK=1,K2KA) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares2B.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares2B.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I2IB,J2JB,K2KB 
         DO JI=1,I2IB 
@@ -157,11 +157,11 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J2JB+1 
           READ(ILU,*) (W2JKB(JJ,JK),JK=1,K2KB) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
-        CALL IO_FILE_ADD2LIST(TZFILE,'ares2C.w','CHEMTAB','READ')
-        CALL IO_FILE_OPEN_ll(TZFILE)
+        CALL IO_File_add2list(TZFILE,'ares2C.w','CHEMTAB','READ')
+        CALL IO_File_open(TZFILE)
         ILU = TZFILE%NLU
         READ(ILU,*) I2IC,J2JC,K2KC 
         DO JI=1,I2IC 
@@ -176,7 +176,7 @@ IF (CMINERAL == 'NARES') THEN
         DO JJ=1,J2JC+1 
           READ(ILU,*) (W2JKC(JJ,JK),JK=1,K2KC) 
         ENDDO
-        CALL IO_FILE_CLOSE_ll(TZFILE)
+        CALL IO_File_close(TZFILE)
         TZFILE => NULL()
         !
 END IF
@@ -188,8 +188,8 @@ IF (CMINERAL == 'TABUL') THEN
   IF(.NOT.ALLOCATED(znh)) ALLOCATE(znh(22))
   IF(.NOT.ALLOCATED(zni)) ALLOCATE(zni(22))
   IF(.NOT.ALLOCATED(zf)) ALLOCATE(zf(16,11,22,22,22,3))
-  CALL IO_FILE_ADD2LIST(TZFILE,'AEROMIN_NEW','CHEMTAB','READ')
-  CALL IO_FILE_OPEN_ll(TZFILE)
+  CALL IO_File_add2list(TZFILE,'AEROMIN_NEW','CHEMTAB','READ')
+  CALL IO_File_open(TZFILE)
   ILU = TZFILE%NLU
 
   WRITE(*,*) 'LOADING MINERAL AEROSOL DATA ...'
@@ -220,7 +220,7 @@ IF (CMINERAL == 'TABUL') THEN
   ENDDO
   ENDDO
   WRITE(*,*) 'END LOADING'
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 ENDIF
 
diff --git a/src/MNH/ch_emission_flux0d.f90 b/src/MNH/ch_emission_flux0d.f90
index 2cbcf2ff6..2795fe267 100644
--- a/src/MNH/ch_emission_flux0d.f90
+++ b/src/MNH/ch_emission_flux0d.f90
@@ -73,15 +73,14 @@ END MODULE MODI_CH_EMISSION_FLUX0D
 !!
 !!    EXTERNAL
 !!    --------
-USE MODD_IO_ll,         ONLY: TFILEDATA
-USE MODE_FM,            ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_ll
+USE MODD_IO,      ONLY: TFILEDATA
+USE MODE_IO_FILE, ONLY: IO_File_close
 !
 USE MODI_CH_OPEN_INPUT
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODD_CH_M9_n,      ONLY: NEQ, CNAMES
+USE MODD_CH_M9_n, ONLY: NEQ, CNAMES
 !!
 !------------------------------------------------------------------------------
 !
@@ -198,7 +197,7 @@ IF (LSFIRSTCALL) THEN
 !
 ! close file
 !
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
 !
 !*       2.   MAP DATA ONTO PROGNOSTIC VARIABLES
 !        ---------------------------------------
diff --git a/src/MNH/ch_field_valuen.f90 b/src/MNH/ch_field_valuen.f90
index c20e8e858..22796effc 100644
--- a/src/MNH/ch_field_valuen.f90
+++ b/src/MNH/ch_field_valuen.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !!    ############################ 
@@ -74,8 +74,8 @@ END MODULE MODI_CH_FIELD_VALUE_n
 !!    EXTERNAL
 !!    --------
 USE MODI_CH_OPEN_INPUT  ! open general purpose ASCII input file
-USE MODD_IO_ll,         ONLY: TFILEDATA
-USE MODE_FM,            ONLY: IO_FILE_CLOSE_ll
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODE_IO_FILE,       ONLY: IO_File_close
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -169,7 +169,7 @@ firstcall: IF (GSFIRSTCALL) THEN
   END IF
 !
 ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 !
 ! check if Z-profile is given in increasing order, otherwise stop
@@ -214,7 +214,7 @@ firstcall: IF (GSFIRSTCALL) THEN
   ENDDO
 !
 ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 !
 !
@@ -261,7 +261,7 @@ firstcall: IF (GSFIRSTCALL) THEN
   ENDDO
 !
 ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
 !
 ENDIF firstcall
diff --git a/src/MNH/ch_init_constn.f90 b/src/MNH/ch_init_constn.f90
index 4d5dc7882..08109e2bf 100644
--- a/src/MNH/ch_init_constn.f90
+++ b/src/MNH/ch_init_constn.f90
@@ -61,8 +61,8 @@ END MODULE MODI_CH_INIT_CONST_n
 !!    EXTERNAL
 !!    --------
 USE MODI_CH_OPEN_INPUT  ! open the general purpose ASCII input file
-USE MODD_IO_ll,         ONLY: TFILEDATA
-USE MODE_FM,            ONLY: IO_FILE_CLOSE_ll
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODE_IO_FILE,       ONLY: IO_File_close
 
 !!
 !!    IMPLICIT ARGUMENTS
@@ -151,7 +151,7 @@ DO JI = 1, IMASS
 END DO
 !
 ! close file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 TZFILE => NULL()
 !
 !
@@ -205,7 +205,7 @@ DO JI = 1, IREACT
 END DO
 !
 ! close file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 TZFILE => NULL()
 !
 !
@@ -262,7 +262,7 @@ DO JNREAL = 1, IHENRY
 END DO
 !
 ! close file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 TZFILE => NULL()
 !
 IF (KVERB >= 10) THEN
diff --git a/src/MNH/ch_init_meteo.f90 b/src/MNH/ch_init_meteo.f90
index 95191d0f6..d290e5196 100644
--- a/src/MNH/ch_init_meteo.f90
+++ b/src/MNH/ch_init_meteo.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !!    #########################
@@ -58,8 +58,7 @@ END MODULE MODI_CH_INIT_METEO
 !!    EXTERNAL
 !!    --------
 USE MODI_CH_OPEN_INPUT
-USE MODE_FM,         ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_ll
+USE MODE_IO_FILE,     ONLY: IO_File_close
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -138,6 +137,6 @@ END DO
 !
 ! close file
 !
-CALL IO_FILE_CLOSE_ll(TMETEOFILE)
+CALL IO_File_close(TMETEOFILE)
 !
 END SUBROUTINE CH_INIT_METEO
diff --git a/src/MNH/ch_model0d.f90 b/src/MNH/ch_model0d.f90
index da17517f3..fbff58f80 100644
--- a/src/MNH/ch_model0d.f90
+++ b/src/MNH/ch_model0d.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
@@ -81,10 +81,10 @@ USE MODD_CH_M9_n,     ONLY: NEQ, NREAC,      & ! no. of species & reactions
                             CNAMES,          & ! names of chem. species
                             METEOTRANSTYPE     ! TYPE of meteo struct variable
 
-USE MODD_CONF, ONLY : CPROGRAM 
-USE MODD_CH_M9_SCHEME, ONLY :  CCSTYPE,TACCS
+USE MODD_CONF,         ONLY: CPROGRAM
+USE MODD_CH_M9_SCHEME, ONLY:  CCSTYPE,TACCS
 
-USE MODE_IO_ll
+USE MODE_IO,           only: IO_Init
 USE MODE_MODELN_HANDLER
 !!
 !!
@@ -184,7 +184,7 @@ XCH_TUV_DOBNEW = 320.  ! O3 dobson (to be modified)
 !
 !*       1.   INITIALISATION
 !        -------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
 !*       1.1  read namelist and initialize time control variables
 !
diff --git a/src/MNH/ch_open_input.f90 b/src/MNH/ch_open_input.f90
index 95f17a316..8ffa174d6 100644
--- a/src/MNH/ch_open_input.f90
+++ b/src/MNH/ch_open_input.f90
@@ -11,7 +11,7 @@ INTERFACE
 !!
 SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB)
 !
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -72,10 +72,10 @@ SUBROUTINE CH_OPEN_INPUT(HCHEM_INPUT_FILE,HKEYWORD,TPFILE,KLUOUT,KVERB)
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 !
 IMPLICIT NONE
 !
@@ -91,7 +91,7 @@ INTEGER,                 INTENT(IN)  :: KVERB            ! verbosity level
 !
 CHARACTER(LEN=79) :: YIN ! character string for line-by-line read
 INTEGER :: ILU
-INTEGER :: IRESP         ! return code from IO_FILE_OPEN_ll
+INTEGER :: IRESP         ! return code from IO_File_open
 !
 !-------------------------------------------------------------------------------
 !
@@ -101,13 +101,13 @@ TPFILE => NULL()
 !              -----------------------
 !
 IF (KVERB >= 5) WRITE(KLUOUT,*) "CH_OPEN_INPUT: opening file ", HCHEM_INPUT_FILE
-CALL IO_FILE_ADD2LIST(TPFILE,HCHEM_INPUT_FILE,'CHEMINPUT','READ',OOLD=.TRUE.)
-CALL IO_FILE_OPEN_ll(TPFILE,KRESP=IRESP)
+CALL IO_File_add2list(TPFILE,HCHEM_INPUT_FILE,'CHEMINPUT','READ',OOLD=.TRUE.)
+CALL IO_File_open(TPFILE,KRESP=IRESP)
 ILU = TPFILE%NLU
 !
 IF (IRESP /= 0) THEN
   WRITE(KLUOUT,*) "CH_OPEN_INPUT ERROR: unable to open file", HCHEM_INPUT_FILE
-  WRITE(KLUOUT,*) "                     IO_FILE_OPEN_ll return code is: ", IRESP
+  WRITE(KLUOUT,*) "                     IO_File_open return code is: ", IRESP
   WRITE(KLUOUT,*) "                     the program will be stopped now"
   ! callabortstop
   CALL ABORT
diff --git a/src/MNH/ch_read_chem.f90 b/src/MNH/ch_read_chem.f90
index 56e358524..fe8e3fbe6 100644
--- a/src/MNH/ch_read_chem.f90
+++ b/src/MNH/ch_read_chem.f90
@@ -60,16 +60,17 @@ END MODULE MODI_CH_READ_CHEM
 !!
 !!    EXTERNAL
 !!    --------
+USE MODE_IO_FILE,    ONLY: IO_File_close
+!
 USE MODI_CH_OPEN_INPUT
 USE MODI_CH_READ_VECTOR
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
-USE MODD_CH_MODEL0D, ONLY: NVERB
-USE MODD_CH_M9_n, ONLY:      NEQ, CNAMES
 USE MODD_CH_AEROSOL
+USE MODD_CH_M9_n,    ONLY: NEQ, CNAMES
+USE MODD_CH_MODEL0D, ONLY: NVERB
+USE MODD_IO,         ONLY: TFILEDATA
 !!
 !!    EXPLICIT ARGUMENTS
 !!    ------------------
@@ -109,7 +110,7 @@ IF (HFILE(1:14) .EQ. "CHCONTROL1.nam") THEN
   CALL CH_READ_VECTOR(NEQ, CNAMES, PCONC, 0.0, IIN, 6, NVERB)
   IF (LORILAM) CALL CH_READ_VECTOR(SIZE(PAERO,1), CAERONAMES, PAERO, 0.0, IIN, 6, NVERB)
 !
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
 !
 ELSE
 !
diff --git a/src/MNH/ch_surface0d.f90 b/src/MNH/ch_surface0d.f90
index dd3a11ff3..ce3bab6c4 100644
--- a/src/MNH/ch_surface0d.f90
+++ b/src/MNH/ch_surface0d.f90
@@ -252,8 +252,8 @@ CONTAINS
 !
 SUBROUTINE CH_SURFACE0D_SETPARAM
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
+USE MODD_IO,      ONLY: TFILEDATA
+USE MODE_IO_FILE, ONLY: IO_File_close, IO_File_open
 !
 IMPLICIT NONE
 !
@@ -302,15 +302,15 @@ IF (LSFIRSTCALL) THEN
   LSFIRSTCALL = .FALSE.
   CALL CH_OPEN_INPUT("SURFACE.nam", "SURFDATA", TZFILE, 6, NVERB)
   ISURFIO = TZFILE%NLU
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
 !
 END IF
 !
 IF (PTSIMUL .GE. TNEXTUPDATE) THEN
   PRINT *, "updating surface variables from file ",TRIM(TZFILE%CNAME)
-  CALL IO_FILE_OPEN_ll(TZFILE)
+  CALL IO_File_open(TZFILE)
   READ(ISURFIO,NAM_SURF)
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   ! PRINT *, "current setting is:"
   ! WRITE(*,NAM_SURF)
   TNEXTUPDATE = PTSIMUL + TVALID
diff --git a/src/MNH/check_zhat.f90 b/src/MNH/check_zhat.f90
index ca9094fa9..1f4487567 100644
--- a/src/MNH/check_zhat.f90
+++ b/src/MNH/check_zhat.f90
@@ -75,12 +75,12 @@ END MODULE MODI_CHECK_ZHAT
 USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_PARAMETERS
 !
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_find_byname
 !
 IMPLICIT NONE
 !
@@ -114,16 +114,16 @@ ILUOUT0 = TLUOUT0%NLU
 !*            1. Reading grid and dimension
 !                --------------------------
 !
-CALL IO_FILE_FIND_BYNAME(TRIM(HFMFILE),TZFMFILE,IRESP)
+CALL IO_File_find_byname(TRIM(HFMFILE),TZFMFILE,IRESP)
 !
-CALL IO_READ_FIELD(TZFMFILE,'KMAX',IKMAX)
+CALL IO_Field_read(TZFMFILE,'KMAX',IKMAX)
 ALLOCATE(ZZHAT(IKMAX+2*JPVEXT))
-CALL IO_READ_FIELD(TZFMFILE,'ZHAT',ZZHAT)
-CALL IO_READ_FIELD(TZFMFILE,'THINSHELL',GTHINSHELL)
+CALL IO_Field_read(TZFMFILE,'ZHAT',ZZHAT)
+CALL IO_Field_read(TZFMFILE,'THINSHELL',GTHINSHELL)
 IF ( TZFMFILE%NMNHVERSION(1)<4 .OR. (TZFMFILE%NMNHVERSION(1)==4 .AND. TZFMFILE%NMNHVERSION(2)<=6) ) THEN
   GSLEVE = .FALSE.
 ELSE
-  CALL IO_READ_FIELD(TZFMFILE,'SLEVE',GSLEVE)
+  CALL IO_Field_read(TZFMFILE,'SLEVE',GSLEVE)
 ENDIF
 !
 !*            2. Check dimensions
@@ -171,8 +171,8 @@ END IF
 !                -------------------------------------
 !
 IF ( GSLEVE .AND. LSLEVE ) THEN
-  CALL IO_READ_FIELD(TZFMFILE,'LEN1',ZLEN1)
-  CALL IO_READ_FIELD(TZFMFILE,'LEN2',ZLEN2)
+  CALL IO_Field_read(TZFMFILE,'LEN1',ZLEN1)
+  CALL IO_Field_read(TZFMFILE,'LEN2',ZLEN2)
   IF (ZLEN1 /= XLEN1 .OR. ZLEN2 /= XLEN2) THEN
     HDAD_NAME=' '
     WRITE (ILUOUT0,*) '********************************************************'
diff --git a/src/MNH/check_zs.f90 b/src/MNH/check_zs.f90
index 42b9aaa6f..bab046512 100644
--- a/src/MNH/check_zs.f90
+++ b/src/MNH/check_zs.f90
@@ -81,13 +81,13 @@ END MODULE MODI_CHECK_ZS
 USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_NESTING
 USE MODD_PARAMETERS
 !
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_find_byname
 !
 IMPLICIT NONE
 !
@@ -128,9 +128,9 @@ ILUOUT0 = TLUOUT0%NLU
 !*            1. Reading of aspect ratios and dimensions
 !                ---------------------------------------
 !
-CALL IO_FILE_FIND_BYNAME(TRIM(HFMFILE),TZFMFILE,IRESP)
+CALL IO_File_find_byname(TRIM(HFMFILE),TZFMFILE,IRESP)
 !
-CALL IO_READ_FIELD(TZFMFILE,'DXRATIO',IDXRATIO,IRESP)
+CALL IO_Field_read(TZFMFILE,'DXRATIO',IDXRATIO,IRESP)
 IF ( IRESP /= 0 .OR. IDXRATIO == 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'resolution ratio in x direction not present in fmfile; no nesting allowed'
@@ -139,7 +139,7 @@ IF ( IRESP /= 0 .OR. IDXRATIO == 0 ) THEN
   RETURN
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'DYRATIO',IDYRATIO,IRESP)
+CALL IO_Field_read(TZFMFILE,'DYRATIO',IDYRATIO,IRESP)
 IF ( IRESP /= 0 .OR. IDYRATIO == 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'resolution ratio in y direction not present in fmfile; no nesting allowed'
@@ -148,7 +148,7 @@ IF ( IRESP /= 0 .OR. IDYRATIO == 0 ) THEN
   RETURN 
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'XOR',NXOR_ALL(1),IRESP)
+CALL IO_Field_read(TZFMFILE,'XOR',NXOR_ALL(1),IRESP)
 IF ( IRESP /= 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'position XOR not present in fmfile; no nesting allowed'
@@ -157,7 +157,7 @@ IF ( IRESP /= 0 ) THEN
   RETURN
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'YOR',NYOR_ALL(1),IRESP)
+CALL IO_Field_read(TZFMFILE,'YOR',NYOR_ALL(1),IRESP)
 IF ( IRESP /= 0 ) THEN
   WRITE (ILUOUT0,*) '********************************************************'
   WRITE (ILUOUT0,*) 'resolution YOR not present in fmfile; no nesting allowed'
@@ -166,11 +166,11 @@ IF ( IRESP /= 0 ) THEN
   RETURN 
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TZFMFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TZFMFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TZFMFILE,'JMAX',IJMAX)
 !
 ALLOCATE(ZZS(IIMAX+2*JPHEXT,IJMAX+2*JPHEXT))
-CALL IO_READ_FIELD(TZFMFILE,'ZS',ZZS)
+CALL IO_Field_read(TZFMFILE,'ZS',ZZS)
 !
 !*            2. Allocate coarse arrays
 !                ----------------------
@@ -236,7 +236,7 @@ END IF
 !
 IF (LSLEVE) THEN
 !
-  CALL IO_READ_FIELD(TZFMFILE,'ZSMT',ZZS)
+  CALL IO_Field_read(TZFMFILE,'ZSMT',ZZS)
 !
 !*            5. Average the smooth orographies
 !                ------------------------------
diff --git a/src/MNH/close_file_mnh.f90 b/src/MNH/close_file_mnh.f90
index 2bb13e611..6d3d87e4b 100644
--- a/src/MNH/close_file_mnh.f90
+++ b/src/MNH/close_file_mnh.f90
@@ -54,12 +54,12 @@ END MODULE MODI_CLOSE_FILE_MNH
 !              ------------
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_IO_NAM,           ONLY: TFILE
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll
+USE MODE_IO_FILE,          ONLY: IO_File_close
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -96,7 +96,7 @@ END SELECT
 !
 IF (ILUOUT==KUNIT) THEN
   CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(TZFILE%CNAME))
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   RETURN
 END IF
 !
@@ -110,7 +110,7 @@ IF (.NOT.ASSOCIATED(TFILE)) CALL PRINT_MSG(NVERB_FATAL,'IO','CLOSE_FILE_MNH','TF
 CALL PRINT_MSG(NVERB_DEBUG,'IO','CLOSE_FILE_MNH','called for '//TRIM(TFILE%CNAME))
 !
 IF (TFILE%NLU==KUNIT) THEN
-  CALL IO_FILE_CLOSE_ll(TFILE)
+  CALL IO_File_close(TFILE)
   TFILE => NULL()
 ELSE
   WRITE(ILUOUT,*) 'Error for closing a file: '
diff --git a/src/MNH/compare_dad.f90 b/src/MNH/compare_dad.f90
index 8c2662bb7..4efd6a8f4 100644
--- a/src/MNH/compare_dad.f90
+++ b/src/MNH/compare_dad.f90
@@ -43,8 +43,8 @@ END MODULE MODI_COMPARE_DAD
 !!    EXTERNAL
 !!    --------
 !!
-!!      IO_FILE_OPEN_ll  : to open a FM-file (DESFM + LFIFM)
-!!      IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM)
+!!      IO_File_open  : to open a FM-file (DESFM + LFIFM)
+!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
 !!
 !!
 !!
@@ -58,7 +58,7 @@ END MODULE MODI_COMPARE_DAD
 !!
 !!      Original     O8/04/04 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -66,15 +66,15 @@ END MODULE MODI_COMPARE_DAD
 !
 !
 USE MODD_CONF
-USE MODD_IO_ll,      ONLY: TFILEDATA
-USE MODD_LUNIT_n,    ONLY: TLUOUT
-USE MODD_PARAMETERS, ONLY: JPHEXT,JPVEXT,NMNHNAMELGTMAX
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_LUNIT_n,          ONLY: TLUOUT
+USE MODD_PARAMETERS,       ONLY: JPHEXT, JPVEXT, NMNHNAMELGTMAX
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
 USE MODE_GRIDPROJ
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_MANAGE_STRUCT, ONLY : IO_File_add2list
 !
 !
 IMPLICIT NONE
@@ -137,12 +137,12 @@ ZLATORI_2=0.
 !*   2.    Read DAD of initial file
 !          ------------------------
 !
-CALL IO_FILE_ADD2LIST(TZDADINIFILE,TRIM(HDADINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-CALL IO_FILE_OPEN_ll(TZDADINIFILE)
+CALL IO_File_add2list(TZDADINIFILE,TRIM(HDADINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+CALL IO_File_open(TZDADINIFILE)
 !
-CALL IO_READ_FIELD(TZDADINIFILE,'IMAX',IIMAX_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'JMAX',IJMAX_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'KMAX',IKMAX_1)
+CALL IO_Field_read(TZDADINIFILE,'IMAX',IIMAX_1)
+CALL IO_Field_read(TZDADINIFILE,'JMAX',IJMAX_1)
+CALL IO_Field_read(TZDADINIFILE,'KMAX',IKMAX_1)
 !
 IIU_1=IIMAX_1 + 2 * JPHEXT
 IJU_1=IJMAX_1 + 2 * JPHEXT
@@ -151,32 +151,32 @@ IKU_1=IKMAX_1 + 2 * JPVEXT
 ALLOCATE(ZXHAT_1(IIU_1))
 ALLOCATE(ZYHAT_1(IJU_1))
 ALLOCATE(ZZHAT_1(IKU_1))
-CALL IO_READ_FIELD(TZDADINIFILE,'XHAT',ZXHAT_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'YHAT',ZYHAT_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'ZHAT',ZZHAT_1)
+CALL IO_Field_read(TZDADINIFILE,'XHAT',ZXHAT_1)
+CALL IO_Field_read(TZDADINIFILE,'YHAT',ZYHAT_1)
+CALL IO_Field_read(TZDADINIFILE,'ZHAT',ZZHAT_1)
 !
 ALLOCATE(ZZS_1(IIU_1,IJU_1))
-CALL IO_READ_FIELD(TZDADINIFILE,'ZS',ZZS_1)
+CALL IO_Field_read(TZDADINIFILE,'ZS',ZZS_1)
 !
-CALL IO_READ_FIELD(TZDADINIFILE,'LON0',ZLON0_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'LAT0',ZLAT0_1)
-CALL IO_READ_FIELD(TZDADINIFILE,'BETA',ZBETA_1)
+CALL IO_Field_read(TZDADINIFILE,'LON0',ZLON0_1)
+CALL IO_Field_read(TZDADINIFILE,'LAT0',ZLAT0_1)
+CALL IO_Field_read(TZDADINIFILE,'BETA',ZBETA_1)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TZDADINIFILE,'RPK',ZRPK_1)
-  CALL IO_READ_FIELD(TZDADINIFILE,'LATORI',ZLATORI_1)
-  CALL IO_READ_FIELD(TZDADINIFILE,'LONORI',ZLONORI_1)
+  CALL IO_Field_read(TZDADINIFILE,'RPK',ZRPK_1)
+  CALL IO_Field_read(TZDADINIFILE,'LATORI',ZLATORI_1)
+  CALL IO_Field_read(TZDADINIFILE,'LONORI',ZLONORI_1)
   !
   IF (TZDADINIFILE%NMNHVERSION(1)<4 .OR. (TZDADINIFILE%NMNHVERSION(1)==4 .AND. TZDADINIFILE%NMNHVERSION(2)<=5) ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TZDADINIFILE,TZFIELD,ZLONORI_1)
+    CALL IO_Field_read(TZDADINIFILE,TZFIELD,ZLONORI_1)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TZDADINIFILE,TZFIELD,ZLATORI_1)
+    CALL IO_Field_read(TZDADINIFILE,TZFIELD,ZLATORI_1)
     !
     ZXHATM = - 0.5 * (ZXHAT_1(1)+ZXHAT_1(2))
     ZYHATM = - 0.5 * (ZYHAT_1(1)+ZYHAT_1(2))
@@ -186,19 +186,19 @@ IF (.NOT.LCARTESIAN) THEN
   END IF
 ENDIF
 !
-CALL IO_FILE_CLOSE_ll(TZDADINIFILE)
+CALL IO_File_close(TZDADINIFILE)
 !
 !-------------------------------------------------------------------------------
 !
 !*   3.    Read DAD of spawning file 
 !          ------------------------
 !
-CALL IO_FILE_ADD2LIST(TZDADSPAFILE,TRIM(HDADSPAFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-CALL IO_FILE_OPEN_ll(TZDADSPAFILE)
+CALL IO_File_add2list(TZDADSPAFILE,TRIM(HDADSPAFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+CALL IO_File_open(TZDADSPAFILE)
 !
-CALL IO_READ_FIELD(TZDADSPAFILE,'IMAX',IIMAX_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'JMAX',IJMAX_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'KMAX',IKMAX_2)
+CALL IO_Field_read(TZDADSPAFILE,'IMAX',IIMAX_2)
+CALL IO_Field_read(TZDADSPAFILE,'JMAX',IJMAX_2)
+CALL IO_Field_read(TZDADSPAFILE,'KMAX',IKMAX_2)
 !
 IIU_2=IIMAX_2 + 2 * JPHEXT
 IJU_2=IJMAX_2 + 2 * JPHEXT
@@ -207,32 +207,32 @@ IKU_2=IKMAX_2 + 2 * JPVEXT
 ALLOCATE(ZXHAT_2(IIU_2))
 ALLOCATE(ZYHAT_2(IJU_2))
 ALLOCATE(ZZHAT_2(IKU_2))
-CALL IO_READ_FIELD(TZDADSPAFILE,'XHAT',ZXHAT_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'YHAT',ZYHAT_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'ZHAT',ZZHAT_2)
+CALL IO_Field_read(TZDADSPAFILE,'XHAT',ZXHAT_2)
+CALL IO_Field_read(TZDADSPAFILE,'YHAT',ZYHAT_2)
+CALL IO_Field_read(TZDADSPAFILE,'ZHAT',ZZHAT_2)
 !
 ALLOCATE(ZZS_2(IIU_2,IJU_2))
-CALL IO_READ_FIELD(TZDADSPAFILE,'ZS',ZZS_2)
+CALL IO_Field_read(TZDADSPAFILE,'ZS',ZZS_2)
 !
-CALL IO_READ_FIELD(TZDADSPAFILE,'LON0',ZLON0_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'LAT0',ZLAT0_2)
-CALL IO_READ_FIELD(TZDADSPAFILE,'BETA',ZBETA_2)
+CALL IO_Field_read(TZDADSPAFILE,'LON0',ZLON0_2)
+CALL IO_Field_read(TZDADSPAFILE,'LAT0',ZLAT0_2)
+CALL IO_Field_read(TZDADSPAFILE,'BETA',ZBETA_2)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TZDADSPAFILE,'RPK',ZRPK_2)
-  CALL IO_READ_FIELD(TZDADSPAFILE,'LATORI',ZLATORI_2)
-  CALL IO_READ_FIELD(TZDADSPAFILE,'LONORI',ZLONORI_2)
+  CALL IO_Field_read(TZDADSPAFILE,'RPK',ZRPK_2)
+  CALL IO_Field_read(TZDADSPAFILE,'LATORI',ZLATORI_2)
+  CALL IO_Field_read(TZDADSPAFILE,'LONORI',ZLONORI_2)
   !
   IF (TZDADSPAFILE%NMNHVERSION(1)<4 .OR. (TZDADSPAFILE%NMNHVERSION(1)==4 .AND. TZDADSPAFILE%NMNHVERSION(2)<=5)) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TZDADSPAFILE,TZFIELD,ZLONORI_2)
+    CALL IO_Field_read(TZDADSPAFILE,TZFIELD,ZLONORI_2)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TZDADSPAFILE,TZFIELD,ZLATORI_2)
+    CALL IO_Field_read(TZDADSPAFILE,TZFIELD,ZLATORI_2)
     !
     ZXHATM = - 0.5 * (ZXHAT_2(1)+ZXHAT_2(2))
     ZYHATM = - 0.5 * (ZYHAT_2(1)+ZYHAT_2(2))
@@ -242,7 +242,7 @@ IF (.NOT.LCARTESIAN) THEN
   END IF
 ENDIF  
 !
-CALL IO_FILE_CLOSE_ll(TZDADSPAFILE)
+CALL IO_File_close(TZDADSPAFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/compare_with_pgd_domain.f90 b/src/MNH/compare_with_pgd_domain.f90
index 1378b63db..028dc1f80 100644
--- a/src/MNH/compare_with_pgd_domain.f90
+++ b/src/MNH/compare_with_pgd_domain.f90
@@ -79,8 +79,6 @@ END MODULE MODI_COMPARE_WITH_PGD_DOMAIN
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODD_CONF        ! declaration modules
diff --git a/src/MNH/compute_r00.f90 b/src/MNH/compute_r00.f90
index 2c76d7f39..b3f1d31e7 100644
--- a/src/MNH/compute_r00.f90
+++ b/src/MNH/compute_r00.f90
@@ -10,7 +10,7 @@
 INTERFACE
 SUBROUTINE COMPUTE_R00(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! Output file
 !
@@ -56,35 +56,32 @@ END MODULE MODI_COMPUTE_R00
 !!                              change of YCOMMENT
 !!     Mai 2016 (G.Delautier) replace LG?M by LG?T
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
-!    
-USE MODD_FIELD_n
+!
+USE MODD_CONF
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_FIELD_n
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT_n
-USE MODD_GRID_n
-USE MODD_STO_FILE
-USE MODD_CONF
+USE MODD_NSV,              ONLY: NSV_LGBEG, NSV_LGEND
 USE MODD_PARAMETERS
-USE MODD_NSV,            ONLY : NSV_LGBEG,NSV_LGEND
-!
-USE MODI_SHUMAN
-!
+USE MODD_STO_FILE
+USE MODD_TYPE_DATE
 USE MODD_VAR_ll
 !
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_ll
 USE MODE_MSG
-USE MODD_TYPE_DATE
+!
+USE MODI_SHUMAN
 !
 IMPLICIT NONE
 !
@@ -239,8 +236,8 @@ END IF
 ! is performed
 DO JFILECUR=1,NFILES
   !
-  CALL IO_FILE_ADD2LIST(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZTRACFILE)
+  CALL IO_File_add2list(TZTRACFILE,CFILES(NBRFILES(JFILECUR)),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZTRACFILE)
 !
 !*       4.1  check if this file is a start instant
 !
@@ -257,7 +254,7 @@ DO JFILECUR=1,NFILES
 !
   IF (GSTART) THEN
     !
-    CALL IO_READ_FIELD(TZTRACFILE,'DTCUR',TDTCUR_START)
+    CALL IO_Field_read(TZTRACFILE,'DTCUR',TDTCUR_START)
     IHOUR   = INT(TDTCUR_START%TIME/3600.)
     ZREMAIN = MOD(TDTCUR_START%TIME,3600.)
     IMINUTE = INT(ZREMAIN/60.)
@@ -265,9 +262,9 @@ DO JFILECUR=1,NFILES
     WRITE(YDATE,FMT='(1X,I4.4,I2.2,I2.2,2X,I2.2,"H",I2.2,"M", &
          & F5.2,"S")') TDTCUR_START%TDATE, IHOUR,IMINUTE,ZSECOND  
     !
-    CALL IO_READ_FIELD(TZTRACFILE,'THT',ZTH0(:,:,:))
+    CALL IO_Field_read(TZTRACFILE,'THT',ZTH0(:,:,:))
     !
-    CALL IO_READ_FIELD(TZTRACFILE,'RVT',ZRV0(:,:,:))
+    CALL IO_Field_read(TZTRACFILE,'RVT',ZRV0(:,:,:))
     ZRV0(:,:,:)=ZRV0(:,:,:)*1.E+3  ! ZRV0 in g/kg
     !
   END IF
@@ -288,7 +285,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZX00(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZX00(:,:,:))
     !
     WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'Y0',INBR_START
     TZFIELD%CSTDNAME   = ''
@@ -301,7 +298,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZY00(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZY00(:,:,:))
     !
     WRITE(TZFIELD%CMNHNAME,'(A2,I2.2)')'Z0',INBR_START
     TZFIELD%CSTDNAME   = ''
@@ -314,7 +311,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZZ00(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZZ00(:,:,:))
   END IF
 !
 !
@@ -343,7 +340,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK1(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK1(:,:,:))
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I2.2)')'RV0',INBR_START
     TZFIELD%CSTDNAME   = ''
@@ -356,7 +353,7 @@ DO JFILECUR=1,NFILES
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2(:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2(:,:,:))
   ENDIF
 !*       4.4   compute the origin of the particules using one more segment
 !
@@ -372,17 +369,17 @@ DO JFILECUR=1,NFILES
     !
     TZFIELD%CMNHNAME   = 'LGXT'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZX0)
+    CALL IO_Field_read(TZTRACFILE,TZFIELD,ZX0)
     ZX0(:,:,:)=ZX0(:,:,:)*1.E-3   ! ZX0 in km
     !
     TZFIELD%CMNHNAME   = 'LGYT'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZY0)
+    CALL IO_Field_read(TZTRACFILE,TZFIELD,ZY0)
     ZY0(:,:,:)=ZY0(:,:,:)*1.E-3   ! ZY0 in km
     !
     TZFIELD%CMNHNAME   = 'LGZT'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TZTRACFILE,TZFIELD,ZZ0)
+    CALL IO_Field_read(TZTRACFILE,TZFIELD,ZZ0)
     ZZ0(:,:,:)=ZZ0(:,:,:)*1.E-3   ! ZZ0 in km
     !
     ! old position of the set of particles
@@ -418,7 +415,7 @@ DO JFILECUR=1,NFILES
 !
 !*       4.5   close the input file
 !
-  CALL IO_FILE_CLOSE_ll(TZTRACFILE)
+  CALL IO_File_close(TZTRACFILE)
 !
 END DO
 !
diff --git a/src/MNH/compute_spectre.f90 b/src/MNH/compute_spectre.f90
index 6a31130f0..9d5237cac 100644
--- a/src/MNH/compute_spectre.f90
+++ b/src/MNH/compute_spectre.f90
@@ -61,8 +61,6 @@ USE MODD_CONF
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_LUNIT_n,  ONLY: TLUOUT
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_SPLITTINGZ_ll
 !
diff --git a/src/MNH/define_maskn.f90 b/src/MNH/define_maskn.f90
index a22147d55..abd56bf02 100644
--- a/src/MNH/define_maskn.f90
+++ b/src/MNH/define_maskn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ########################
@@ -63,8 +63,6 @@ USE MODD_LUNIT
 USE MODD_NESTING
 USE MODD_NEST_PGD_n
 !
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
diff --git a/src/MNH/detect_field_mnh.f90 b/src/MNH/detect_field_mnh.f90
index 1b4fc3b3c..8d94c1c35 100644
--- a/src/MNH/detect_field_mnh.f90
+++ b/src/MNH/detect_field_mnh.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! MASDEV4_7 surfex 2006/05/18 13:07:25
-!-----------------------------------------------------------------
 !      #####################
 MODULE MODI_DETECT_FIELD_MNH
 !      #####################
@@ -72,15 +67,13 @@ SUBROUTINE DETECT_FIELD_MNH(HPROGRAM,KI,KJ,PFIELD,OITSHERE)
 !
 !
 !
-USE MODE_FM
+USE MODD_PARAMETERS,  ONLY: XUNDEF, JPHEXT
+USE MODD_IO_SURF_MNH, ONLY: NMASK, NIU, NJU, NIB, NJB, NIE, NJE
+!
 USE MODE_ll
-USE MODE_IO_ll
-
-USE MODD_PARAMETERS,     ONLY : XUNDEF, JPHEXT
 !
-USE MODD_IO_SURF_MNH, ONLY : NMASK, NIU, NJU, NIB, NJB, NIE, NJE
-
 USE MODI_UNPACK_1D_2D
+!
 IMPLICIT NONE
 !
 !*       0.1   declarations of arguments
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index f05ff2240..1ad4aa373 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -88,7 +88,7 @@
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  V.Vionnet 07/2017 add LWIND_CONTRAV
 !!  11/2017      (D. Ricard, P. Marquet) add diagnostics for THETAS 
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -106,9 +106,9 @@ USE MODD_DYN
 USE MODD_DYN_n
 USE MODD_FIELD_n
 USE MODD_GR_FIELD_n
-USE MODD_GRID,             ONLY: XLONORI,XLATORI
+USE MODD_GRID,             ONLY: XLONORI, XLATORI
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: CIO_DIR,NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_SURFEX
+USE MODD_IO,               ONLY: CIO_DIR, NIO_VERB, NVERB_DEBUG, TFILEDATA, TFILE_SURFEX
 USE MODD_LBC_n
 USE MODD_LES
 USE MODD_LES_BUDGET
@@ -136,11 +136,10 @@ USE MODD_TURB_n
 USE MODD_VAR_ll
 !
 USE MODE_DATETIME
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list,IO_Filelist_print
 USE MODE_ll
 USE MODE_MNH_TIMING
 USE MODE_MODELN_HANDLER
@@ -245,7 +244,7 @@ CALL GOTO_MODEL(1)
 CALL VERSION
 CPROGRAM='DIAG  '
 !
-CALL INITIO_ll()
+CALL IO_Init()
 CALL SECOND_MNH2(ZTIME1)
 ZTIME0=ZTIME1
 !
@@ -392,8 +391,8 @@ NDXCOARSE=1
 !*       1.0   Namelist reading
 !              ----------------
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'DIAG1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'DIAG1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 !
@@ -424,9 +423,9 @@ CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
 IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFIO)
 END IF
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 CINIFILE = YINIFILE(1)
 CINIFILEPGD = YINIFILEPGD(1)
@@ -459,7 +458,7 @@ ENDIF
 !
 INPRAR = 24 +2*(4+NRR+NSV)
 !
-CALL IO_FILE_ADD2LIST(TOUTDATAFILE,TRIM(CINIFILE)//YSUFFIX,'MNHDIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_File_add2list(TOUTDATAFILE,TRIM(CINIFILE)//YSUFFIX,'MNHDIAG','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZSTART=ZTIME2-ZTIME1
@@ -505,7 +504,7 @@ ENDIF
 !
 !*       4.0    Stores the fields in MESONH files if necessary
 !
-CALL IO_FILE_OPEN_ll(TOUTDATAFILE)
+CALL IO_File_open(TOUTDATAFILE)
 !
 CALL WRITE_LFIFM1_FOR_DIAG(TOUTDATAFILE,CDAD_NAME(1))
 !
@@ -522,10 +521,10 @@ ZTIME1=ZTIME2
 !
 IF ( LAIRCRAFT_BALLOON ) THEN
 !
-  CALL IO_FILE_ADD2LIST(TZDIACFILE,TRIM(CINIFILE)//'BAL','MNHDIACHRONIC','WRITE', &
+  CALL IO_File_add2list(TZDIACFILE,TRIM(CINIFILE)//'BAL','MNHDIACHRONIC','WRITE', &
                         HDIRNAME=CIO_DIR,KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
-  CALL IO_FILE_OPEN_ll(TZDIACFILE)
+  CALL IO_File_open(TZDIACFILE)
 !
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER OPEN DIACHRONIC FILE'
@@ -556,11 +555,11 @@ IF ( LAIRCRAFT_BALLOON ) THEN
     TXDTBAL%TIME=TXDTBAL%TIME + XSTEP_AIRCRAFT_BALLOON
     CALL DATETIME_CORRECTDATE(TXDTBAL)
   ENDDO
-  CALL IO_WRITE_HEADER(TZDIACFILE)
+  CALL IO_Header_write(TZDIACFILE)
   CALL WRITE_LFIFMN_FORDIACHRO_n(TZDIACFILE)
   CALL WRITE_AIRCRAFT_BALLOON(TZDIACFILE)
   CALL MENU_DIACHRO(TZDIACFILE,'END')
-  CALL IO_FILE_CLOSE_ll(TZDIACFILE)
+  CALL IO_File_close(TZDIACFILE)
   WRITE(ILUOUT0,*) ' '
   WRITE(ILUOUT0,*) 'DIAG AFTER CLOSE DIACHRONIC FILE'
   WRITE(ILUOUT0,*) ' '
@@ -751,12 +750,12 @@ DEALLOCATE(GMASKkids)
 DEALLOCATE(ZWETDEPAER)
 IF (GCLOSE_OUT) THEN
   GCLOSE_OUT=.FALSE.
-  CALL IO_FILE_CLOSE_ll(TOUTDATAFILE)
+  CALL IO_File_close(TOUTDATAFILE)
 END IF
 !
-CALL IO_FILE_CLOSE_ll(TINIFILE)
-IF (LEN_TRIM(CINIFILEPGD)>0) CALL IO_FILE_CLOSE_ll(TINIFILEPGD)
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TINIFILE)
+IF (LEN_TRIM(CINIFILEPGD)>0) CALL IO_File_close(TINIFILEPGD)
+CALL IO_File_close(TLUOUT)
 !
 CALL SECOND_MNH2(ZTIME2)
 ZTIME2=ZTIME2-ZTIME0
@@ -802,7 +801,7 @@ ZTIME2=ZTIME2-ZTIME0
 !WRITE(ILUOUT0,*) '|---------------------| -------------------|-------------------|'
 !
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) '***************************** **************'
@@ -811,7 +810,7 @@ WRITE(ILUOUT0,*) '**************************** ***************'
 !WRITE(ILUOUT0,*) '  (see time analysis in ',TRIM(TLUOUT0%CNAME),' )'
 WRITE(ILUOUT0,*) ' '
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !-------------------------------------------------------------------------------
 !
 !*      10.    FINALIZE THE PARALLEL SESSION
diff --git a/src/MNH/elec_fieldn.f90 b/src/MNH/elec_fieldn.f90
index 6b7aaf8f3..f39cdc7ab 100644
--- a/src/MNH/elec_fieldn.f90
+++ b/src/MNH/elec_fieldn.f90
@@ -1,8 +1,8 @@
-
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !      ########################
        MODULE MODI_ELEC_FIELD_n
 !      ########################
@@ -58,7 +58,6 @@ USE MODI_GRADIENT_M
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 !
 USE MODE_ll
-USE MODE_FM
 !
 !
 IMPLICIT NONE
diff --git a/src/MNH/elec_trid.f90 b/src/MNH/elec_trid.f90
index e8a95db3b..2a8c5aad1 100644
--- a/src/MNH/elec_trid.f90
+++ b/src/MNH/elec_trid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #####################
@@ -185,7 +185,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 !JUAN
diff --git a/src/MNH/elec_tridz.f90 b/src/MNH/elec_tridz.f90
index 214fc6a88..5c5ce6796 100644
--- a/src/MNH/elec_tridz.f90
+++ b/src/MNH/elec_tridz.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -193,7 +193,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !++cb - Z_SPLITTING
 USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll,GET_ORZ_ll,LWESTZ_ll,LSOUTHZ_ll
diff --git a/src/MNH/endstep_budget.f90 b/src/MNH/endstep_budget.f90
index eff9d4bfe..d6c619db4 100644
--- a/src/MNH/endstep_budget.f90
+++ b/src/MNH/endstep_budget.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !##########################
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE ENDSTEP_BUDGET(TPDIAFILE,KTCOUNT,       &
                                TPDTCUR,TPDTMOD,PTSTEP,KSV)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPDIAFILE  ! file to write
@@ -101,7 +101,7 @@ END MODULE MODI_ENDSTEP_BUDGET
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TIME
 USE MODD_BUDGET
 !
diff --git a/src/MNH/fast_terms.f90 b/src/MNH/fast_terms.f90
index 12bb06a95..eba11a693 100644
--- a/src/MNH/fast_terms.f90
+++ b/src/MNH/fast_terms.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -162,8 +162,6 @@ USE MODD_CONF
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
-USE MODE_FMWRIT
-!
 USE MODI_BUDGET
 USE MODI_CONDENS
 USE MODI_GET_HALO
diff --git a/src/MNH/flash_geom_elec.f90 b/src/MNH/flash_geom_elec.f90
index e0b13e74f..b34d69118 100644
--- a/src/MNH/flash_geom_elec.f90
+++ b/src/MNH/flash_geom_elec.f90
@@ -13,7 +13,7 @@ INTERFACE
                                   TPFILE_FGEOM_DIAG, TPFILE_FGEOM_COORD, TPFILE_LMA,     &
                                   PTOWN, PSEA                                            )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KTCOUNT  ! Temporal loop counter
 INTEGER,                  INTENT(IN)    :: KMI      ! current model index
@@ -98,44 +98,43 @@ END MODULE MODI_FLASH_GEOM_ELEC_n
 !*      0.      DECLARATIONS
 !               ------------
 !
-USE MODD_CST, ONLY : XAVOGADRO, XMD
-USE MODD_CONF, ONLY : CEXP, LCARTESIAN
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
-USE MODD_GRID, ONLY : XLATORI,XLONORI
-USE MODD_GRID_n, ONLY : XXHAT, XYHAT, XZHAT
-USE MODD_DYN_n, ONLY : XDXHATM, XDYHATM, NSTOP
-USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZZ ! in linox_production
-USE MODD_ELEC_DESCR 
-USE MODD_ELEC_PARAM, ONLY : XFQLIGHTR, XEXQLIGHTR, &
-                            XFQLIGHTI, XEXQLIGHTI, &
-                            XFQLIGHTS, XEXQLIGHTS, &
-                            XFQLIGHTG, XEXQLIGHTG, &
-                            XFQLIGHTH, XEXQLIGHTH, &
-                            XFQLIGHTC
-USE MODD_RAIN_ICE_DESCR, ONLY : XLBR, XLBEXR, XLBS, XLBEXS, &
-                                XLBG, XLBEXG, XLBH, XLBEXH, &
-                                XRTMIN
-USE MODD_NSV, ONLY : NSV_ELECBEG, NSV_ELECEND, NSV_ELEC
-USE MODD_VAR_ll, ONLY : NPROC,NMNH_COMM_WORLD
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
+USE MODD_CONF,           ONLY: CEXP, LCARTESIAN
+USE MODD_CST,            ONLY: XAVOGADRO, XMD
+USE MODD_DYN_n,          ONLY: XDXHATM, XDYHATM, NSTOP
+USE MODD_ELEC_DESCR
+USE MODD_ELEC_FLASH
+USE MODD_ELEC_PARAM,     ONLY: XFQLIGHTR, XEXQLIGHTR, &
+                               XFQLIGHTI, XEXQLIGHTI, &
+                               XFQLIGHTS, XEXQLIGHTS, &
+                               XFQLIGHTG, XEXQLIGHTG, &
+                               XFQLIGHTH, XEXQLIGHTH, &
+                               XFQLIGHTC
+USE MODD_GRID,           ONLY: XLATORI,XLONORI
+USE MODD_GRID_n,         ONLY: XXHAT, XYHAT, XZHAT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LMA_SIMULATOR
+USE MODD_METRICS_n,      ONLY: XDXX, XDYY, XDZZ ! in linox_production
+USE MODD_NSV,            ONLY: NSV_ELECBEG, NSV_ELECEND, NSV_ELEC
+USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT
+USE MODD_RAIN_ICE_DESCR, ONLY: XLBR, XLBEXR, XLBS, XLBEXS, &
+                               XLBG, XLBEXG, XLBH, XLBEXH, &
+                               XRTMIN
 USE MODD_SUB_ELEC_n
 USE MODD_TIME_n
-USE MODD_LMA_SIMULATOR
-USE MODD_ELEC_FLASH
-!
-USE MODI_SHUMAN
-USE MODI_TO_ELEC_FIELD_n
-USE MODI_ION_ATTACH_ELEC
+USE MODD_VAR_ll,         ONLY: NPROC,NMNH_COMM_WORLD
 !
+USE MODE_ELEC_ll
+USE MODE_GRIDPROJ
+USE MODE_ll
+USE MODE_MPPDB
 #ifdef MNH_PGI
 USE MODE_PACK_PGI
 #endif
 !
-USE MODE_ll
-USE MODE_ELEC_ll
-USE MODE_GRIDPROJ
-USE MODE_MPPDB
+USE MODI_ION_ATTACH_ELEC
+USE MODI_SHUMAN
+USE MODI_TO_ELEC_FIELD_n
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90
index ebb2873db..e2cecf24f 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###################
@@ -151,25 +151,22 @@ END MODULE MODI_FORCING
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_DATETIME
-USE MODE_FM
-USE MODE_IO_ll
-USE MODE_MSG
-!
+USE MODD_BUDGET
 USE MODD_CONF
+USE MODD_CST
 USE MODD_DYN
 USE MODD_FRC
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_TIME
-USE MODD_BUDGET
-USE MODD_CST
 !
-USE MODI_SHUMAN
-USE MODI_UPSTREAM_Z
-USE MODI_BUDGET
+USE MODE_DATETIME
+USE MODE_MSG
 !
+USE MODI_BUDGET
 USE MODI_GET_HALO
+USE MODI_SHUMAN
+USE MODI_UPSTREAM_Z
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/free_atm_profile.f90 b/src/MNH/free_atm_profile.f90
index fe785ac91..d4ae43d2a 100644
--- a/src/MNH/free_atm_profile.f90
+++ b/src/MNH/free_atm_profile.f90
@@ -10,7 +10,7 @@ INTERFACE
       SUBROUTINE FREE_ATM_PROFILE(TPFILE,PVAR_MX,PZMASS_MX,PZS_LS,PZSMT_LS,PCLIMGR,&
                            PF_FREE,PZ_FREE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE    ! File characteristics
 REAL,   DIMENSION(:,:,:), INTENT(IN)  :: PVAR_MX   ! thermodynamical field
@@ -93,20 +93,20 @@ END MODULE MODI_FREE_ATM_PROFILE
 !
 USE MODD_CONF
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_LUNIT, ONLY: TLUOUT0
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT,          ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_VER_INTERP_LIN
 !
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEINT, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_MPPDB
+!
 USE MODI_COEF_VER_INTERP_LIN
 USE MODI_PGDFILTER
 USE MODI_VER_INTERP_LIN
 USE MODI_VERT_COORD
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEINT, TYPEREAL
-USE MODE_FMWRIT
-USE MODE_MPPDB
-!
 IMPLICIT NONE
 !
 !*       0.1   Declaration of arguments
@@ -477,7 +477,7 @@ IF (CPROGRAM == 'DIAG  ' ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,Z2D)
+  CALL IO_Field_write(TPFILE,TZFIELD,Z2D)
 !
 !*      11.2  Writing of level of boundary layer top
 !             --------------------------------------
@@ -493,7 +493,7 @@ IF (CPROGRAM == 'DIAG  ' ) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,IK_BL_TOP)
+  CALL IO_Field_write(TPFILE,TZFIELD,IK_BL_TOP)
 END IF
 !
 IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
@@ -513,7 +513,7 @@ IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,Z2D)
+  CALL IO_Field_write(TPFILE,TZFIELD,Z2D)
 !
 !*      11.4  Writing of free atmosphere 3D profiles
 !             --------------------------------------
@@ -534,7 +534,7 @@ IF (CPROGRAM /= 'DIAG  ' .AND. CPROGRAM /= 'IDEAL ' ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,Z3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,Z3D)
 !
 END IF
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/gps_zenith.f90 b/src/MNH/gps_zenith.f90
index ea3602360..613ad8f2b 100644
--- a/src/MNH/gps_zenith.f90
+++ b/src/MNH/gps_zenith.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !##########################################
@@ -77,15 +77,15 @@ END MODULE MODI_GPS_ZENITH
 USE MODD_CST
 USE MODD_DIAG_FLAG
 USE MODD_GR_FIELD_n
-USE MODD_GRID,             ONLY: XLONORI,XLATORI
+USE MODD_GRID,             ONLY: XLONORI, XLATORI
 USE MODD_GRID_n
 USE MODE_GRIDPROJ
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_TOOLS_ll,         ONLY: LWEST_ll, LEAST_ll, LNORTH_ll, LSOUTH_ll
 !
 USE MODI_INTERPOL_STATION
@@ -275,8 +275,8 @@ PRINT *,'Number of GPS STATIONS ', ISTATIONS
 !
 IF (ISTATIONS >0 ) THEN 
 !
-  CALL IO_FILE_ADD2LIST(TZFILE,HFGRI,'GPS','WRITE')
-  CALL IO_FILE_OPEN_ll(TZFILE)
+  CALL IO_File_add2list(TZFILE,HFGRI,'GPS','WRITE')
+  CALL IO_File_open(TZFILE)
   IFGRI = TZFILE%NLU
   PRINT *,'File ',TRIM(HFGRI),' opened with unit= ',IFGRI,' IRESP= ',IRESP
   WRITE(IFGRI,*,IOSTAT=IRESP) 'Number of STATIONS', ISTATIONS
@@ -432,7 +432,7 @@ IF (ISTATIONS >0 ) THEN
 !
   1000 FORMAT('STATION ',A10,' ZHD: ',F8.5,' ZWD: ',F8.5,' ZTD: ',F8.5)
 ! 
-  CALL IO_FILE_CLOSE_ll(TZFILE,IRESP)
+  CALL IO_File_close(TZFILE,IRESP)
   PRINT *,'File ',TRIM(HFGRI),' closed, IRESP= ',IRESP
 !
   DEALLOCATE(ZXHATM)
diff --git a/src/MNH/horibl.f90 b/src/MNH/horibl.f90
index f9d47b2d9..cab3e58d9 100644
--- a/src/MNH/horibl.f90
+++ b/src/MNH/horibl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1999-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
@@ -136,13 +136,10 @@ END MODULE MODI_HORIBL
 !*      0. DECLARATIONS
 !       ---------------
 !
-USE MODE_FM
-USE MODE_IO_ll
-USE MODE_MSG
-!
 USE MODD_LUNIT
+USE MODD_PARAMETERS, ONLY: XUNDEF
 !
-USE MODD_PARAMETERS,ONLY : XUNDEF
+USE MODE_MSG
 !
 USE MODI_SECOND_MNH
 !
diff --git a/src/MNH/ice_adjust.f90 b/src/MNH/ice_adjust.f90
index d1682f4ac..2008de1af 100644
--- a/src/MNH/ice_adjust.f90
+++ b/src/MNH/ice_adjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -170,14 +170,13 @@ END MODULE MODI_ICE_ADJUST
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAMETERS
-USE MODD_CST
-USE MODD_CONF
 USE MODD_BUDGET
+USE MODD_CONF
+USE MODD_CST
+USE MODD_PARAMETERS
 !
-USE MODI_CONDENSATION
 USE MODI_BUDGET
-USE MODE_FMWRIT
+USE MODI_CONDENSATION
 USE MODI_GET_HALO
 !
 IMPLICIT NONE
diff --git a/src/MNH/ice_adjust_elec.f90 b/src/MNH/ice_adjust_elec.f90
index 8a0b414fc..cdc92d380 100644
--- a/src/MNH/ice_adjust_elec.f90
+++ b/src/MNH/ice_adjust_elec.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
-!-----------------------------------------------------------------
 !     ###########################
       MODULE MODI_ICE_ADJUST_ELEC
 !     ###########################
@@ -186,7 +182,6 @@ USE MODD_RAIN_ICE_DESCR, ONLY : XRTMIN, XBI
 !
 USE MODI_CONDENSATION
 USE MODI_BUDGET
-USE MODE_FMWRIT
 USE MODI_GET_HALO
 !
 IMPLICIT NONE
diff --git a/src/MNH/ini_aircraft_balloon.f90 b/src/MNH/ini_aircraft_balloon.f90
index 28c4089c9..2d5cc4fb3 100644
--- a/src/MNH/ini_aircraft_balloon.f90
+++ b/src/MNH/ini_aircraft_balloon.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #########################
@@ -14,7 +14,7 @@ INTERFACE
                                       KRR, KSV, KKU, OUSETKE,       &
                                       PLATOR, PLONOR                )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),    INTENT(IN) :: TPINIFILE !Initial file
@@ -85,14 +85,13 @@ USE MODD_CONF
 USE MODD_DIAG_FLAG
 USE MODD_DYN_n
 USE MODD_GRID
-USE MODD_IO_ll,   ONLY : TFILEDATA
-USE MODD_LUNIT_n, ONLY : TLUOUT
-USE MODD_PARAM_n, ONLY : CCLOUD
+USE MODD_IO,         ONLY: TFILEDATA
+USE MODD_LUNIT_n,    ONLY: TLUOUT
+USE MODD_PARAM_n,    ONLY: CCLOUD
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD,   ONLY : TFIELDDATA, TYPEREAL
+USE MODE_FIELD,      ONLY: TFIELDDATA, TYPEREAL
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
@@ -455,7 +454,7 @@ END SUBROUTINE ALLOCATE_FLYER
 !----------------------------------------------------------------------------
 SUBROUTINE INI_LAUNCH(KNBR,TPFLYER)
 !
-USE MODE_FMREAD
+use MODE_IO_FIELD_READ, only: IO_Field_read
 !
 INTEGER,     INTENT(IN)    :: KNBR
 TYPE(FLYER), INTENT(INOUT) :: TPFLYER
@@ -490,7 +489,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZLAT,IRESP)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,ZLAT,IRESP)
   !
   IF ( IRESP /= 0 ) THEN
     WRITE(ILUOUT,*) "INI_LAUCH: Initial location take for ",TPFLYER%TITLE
@@ -505,7 +504,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZLON)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,ZLON)
     !
     TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'ALT'
     TZFIELD%CSTDNAME   = ''
@@ -517,7 +516,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%Z_CUR)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPFLYER%Z_CUR)
     !
     TPFLYER%P_CUR   = XUNDEF
     !
@@ -531,7 +530,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%WASCENT)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPFLYER%WASCENT)
     !
     TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'RHO'
     TZFIELD%CSTDNAME   = ''
@@ -543,7 +542,7 @@ IF ( CPROGRAM == 'MESONH' .OR. CPROGRAM == 'SPAWN ' .OR. CPROGRAM == 'REAL  ' )
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPFLYER%RHO)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPFLYER%RHO)
     !
     CALL SM_XYHAT(PLATOR,PLONOR,&
               ZLAT,ZLON,        &
diff --git a/src/MNH/ini_budget.f90 b/src/MNH/ini_budget.f90
index 4593b1fe7..da0eef4b2 100644
--- a/src/MNH/ini_budget.f90
+++ b/src/MNH/ini_budget.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/ini_budget.f90,v $ $Revision: 1.3.2.5.2.2.2.2.10.2.2.5.2.1 $
-! masdev4_8 budget 2008/06/20 10:08:26
-!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_INI_BUDGET
 !     ###################### 
@@ -163,8 +158,6 @@ END MODULE MODI_INI_BUDGET
 !*       0.    DECLARATIONS
 !              ------------ 
 !
-USE MODE_FM
-!
 USE MODD_PARAMETERS
 USE MODD_BUDGET
 USE MODD_DYN
@@ -181,7 +174,6 @@ USE MODD_PARAM_LIMA, ONLY : OWARM=>LWARM, OCOLD=>LCOLD, OSEDI=>LSEDI,   &
                             NMOD_CCN
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 IMPLICIT NONE
diff --git a/src/MNH/ini_cpl.f90 b/src/MNH/ini_cpl.f90
index a53e37642..c7229f794 100644
--- a/src/MNH/ini_cpl.f90
+++ b/src/MNH/ini_cpl.f90
@@ -140,8 +140,8 @@ END MODULE MODI_INI_CPL
 !!
 !!    EXTERNAL
 !!    --------
-!!      IO_READ_FIELD: to read data in LFI_FM file
-!!      IO_FILE_CLOSE_ll : to close a FM-file
+!!      IO_Field_read: to read data in LFI_FM file
+!!      IO_File_close : to close a FM-file
 !!      INI_LS      : to initialize larger scale fields
 !!      INI_LB      : to initialize "2D" surfacic LB fields 
 !!      DATETIME_DISTANCE : compute the temporal distance in seconds between 2 dates
@@ -209,7 +209,7 @@ END MODULE MODI_INI_CPL
 !!                     (J.Escobar) 26/03/2014 bug in init of NSV_USER on RESTA case
 !!                     (P.Wautelet)28/03/2018 replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -218,7 +218,8 @@ USE MODD_CH_MNHC_n
 USE MODD_CONF
 USE MODD_CTURB
 USE MODD_DYN
-USE MODD_LUNIT_n, ONLY: CCPLFILE, TCPLFILE, TLUOUT
+USE MODD_LUNIT_n,          ONLY: CCPLFILE, TCPLFILE, TLUOUT
+USE MODD_NESTING
 USE MODD_NSV
 USE MODD_PARAMETERS
 USE MODD_TIME_n
@@ -229,12 +230,10 @@ USE MODD_TIME_n
 ! #endif
 !
 USE MODE_DATETIME
-USE MODE_FM, ONLY: IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          only: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MSG
-USE MODD_NESTING
 USE MODE_TIME
 !
 USE MODI_INI_LS
@@ -344,15 +343,15 @@ ILUOUT = TLUOUT%NLU
 !
 DO JCI=1,NCPL_NBR
   WRITE(YCI,'(I2.0)') JCI
-  CALL IO_FILE_ADD2LIST(TCPLFILE(JCI)%TZFILE,CCPLFILE(JCI),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TCPLFILE(JCI)%TZFILE,KRESP=IRESP)
+  CALL IO_File_add2list(TCPLFILE(JCI)%TZFILE,CCPLFILE(JCI),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TCPLFILE(JCI)%TZFILE,KRESP=IRESP)
   IF (IRESP /= 0) THEN
     CALL PRINT_MSG(NVERB_FATAL,'IO','INI_CPL','problem when opening coupling file '//TRIM(YCI))
   END IF
 !
 !*       2.1   Read current time in coupling files
 !
-  CALL IO_READ_FIELD(TCPLFILE(JCI)%TZFILE,'DTCUR',TDTCPL(JCI))
+  CALL IO_Field_read(TCPLFILE(JCI)%TZFILE,'DTCUR',TDTCPL(JCI))
 !
 !*       2.2   Check chronological order
 !
@@ -445,9 +444,9 @@ END DO
 !
 !*      3.1   Read dimensions in coupling file and checks with initial file
 !
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
 !
 IKU=SIZE(PLSUM,3)
 !
@@ -510,7 +509,7 @@ CALL INI_LB(TCPLFILE(NCPL_CUR)%TZFILE,GLSOURCE,KSV,                  &
 !
 !*      3.5   Close the coupling file
 !
-CALL IO_FILE_CLOSE_ll(TCPLFILE(NCPL_CUR)%TZFILE)
+CALL IO_File_close(TCPLFILE(NCPL_CUR)%TZFILE)
 !!-------------------------------------------------------------------------------
 !
 !*      6.    FORMATS
diff --git a/src/MNH/ini_deep_convection.f90 b/src/MNH/ini_deep_convection.f90
index 1622565cc..6934822e3 100644
--- a/src/MNH/ini_deep_convection.f90
+++ b/src/MNH/ini_deep_convection.f90
@@ -18,7 +18,7 @@ INTERFACE
                                      OCH_CONV_LINOX, PIC_RATE, PCG_RATE,                &
                                      PIC_TOTAL_NUMBER, PCG_TOTAL_NUMBER                 )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_TIME
 !
 TYPE(TFILEDATA),        INTENT(IN) :: TPINIFILE ! Initial file
@@ -115,27 +115,26 @@ END MODULE MODI_INI_DEEP_CONVECTION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_TIME
-USE MODD_CONVPAR
+USE MODD_CH_AEROSOL,      ONLY: CAERONAMES
 USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY : C1R3NAMES
-USE MODD_ELEC_DESCR,      ONLY : CELECNAMES
+USE MODD_CONVPAR
+USE MODD_DUST,            ONLY: CDUSTNAMES
+USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_NSV, ONLY : NSV,NSV_USER,NSV_CHEMBEG,NSV_CHEMEND,NSV_C2R2BEG,NSV_C2R2END, &
-                     NSV_LGBEG,NSV_LGEND,NSV_LNOXBEG,NSV_LNOXEND, &
-                     NSV_DSTBEG,NSV_DSTEND, NSV_AERBEG,NSV_AEREND, &
-                     NSV_SLTBEG,NSV_SLTEND, NSV_PPBEG,NSV_PPEND, &
-                     NSV_C1R3BEG,NSV_C1R3END, NSV_ELECBEG,NSV_ELECEND
-USE MODD_CH_AEROSOL, ONLY : CAERONAMES
-USE MODD_DUST, ONLY : CDUSTNAMES
-USE MODD_SALT, ONLY : CSALTNAMES
+USE MODD_NSV,             ONLY: NSV, NSV_USER, NSV_CHEMBEG, NSV_CHEMEND, NSV_C2R2BEG, NSV_C2R2END, &
+                                NSV_LGBEG, NSV_LGEND, NSV_LNOXBEG, NSV_LNOXEND, &
+                                NSV_DSTBEG, NSV_DSTEND, NSV_AERBEG, NSV_AEREND, &
+                                NSV_SLTBEG, NSV_SLTEND, NSV_PPBEG, NSV_PPEND, &
+                                NSV_C1R3BEG, NSV_C1R3END, NSV_ELECBEG, NSV_ELECEND
+USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
+USE MODD_SALT,            ONLY: CSALTNAMES
+USE MODD_TIME
 !
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_TOOLS, ONLY: UPCASE
+USE MODE_IO_FIELD_READ,   only: IO_Field_read
+USE MODE_TOOLS,           ONLY: UPCASE
 !
 IMPLICIT NONE
 !
@@ -225,36 +224,36 @@ IF ( OINIDCONV ) THEN
 !
 ELSE
 !
-  CALL IO_READ_FIELD(TPINIFILE,'DTDCONV',  TPDTDCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'COUNTCONV',KCOUNTCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DTHCONV',  PDTHCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DRVCONV',  PDRVCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DRCCONV',  PDRCCONV)
-  CALL IO_READ_FIELD(TPINIFILE,'DRICONV',  PDRICONV)
+  CALL IO_Field_read(TPINIFILE,'DTDCONV',  TPDTDCONV)
+  CALL IO_Field_read(TPINIFILE,'COUNTCONV',KCOUNTCONV)
+  CALL IO_Field_read(TPINIFILE,'DTHCONV',  PDTHCONV)
+  CALL IO_Field_read(TPINIFILE,'DRVCONV',  PDRVCONV)
+  CALL IO_Field_read(TPINIFILE,'DRCCONV',  PDRCCONV)
+  CALL IO_Field_read(TPINIFILE,'DRICONV',  PDRICONV)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPRCONV)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPRCONV)
   PPRCONV=PPRCONV/(1000.*3600.) ! conversion into m/s units
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPRSCONV)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPRSCONV)
   PPRSCONV=PPRSCONV/(1000.*3600.) ! conversion into m/s units
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPACCONV)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPACCONV)
   PPACCONV=PPACCONV/1000.       ! conversion into m unit
 !
   IF ( OCH_CONV_LINOX ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'IC_RATE',    PIC_RATE)
-    CALL IO_READ_FIELD(TPINIFILE,'CG_RATE',    PCG_RATE)
-    CALL IO_READ_FIELD(TPINIFILE,'IC_TOTAL_NB',PIC_TOTAL_NUMBER)
-    CALL IO_READ_FIELD(TPINIFILE,'CG_TOTAL_NB',PCG_TOTAL_NUMBER)
+    CALL IO_Field_read(TPINIFILE,'IC_RATE',    PIC_RATE)
+    CALL IO_Field_read(TPINIFILE,'CG_RATE',    PCG_RATE)
+    CALL IO_Field_read(TPINIFILE,'IC_TOTAL_NB',PIC_TOTAL_NUMBER)
+    CALL IO_Field_read(TPINIFILE,'CG_TOTAL_NB',PCG_TOTAL_NUMBER)
   END IF
 !
 !
@@ -272,67 +271,67 @@ ELSE
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C2R2BEG, NSV_C2R2END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C1R3BEG, NSV_C1R3END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_ELECBEG, NSV_ELECEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_CHEMBEG, NSV_CHEMEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_AERBEG, NSV_AEREND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_LNOXBEG,NSV_LNOXEND
       TZFIELD%CMNHNAME   = 'DSVCONV_LINOX'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_DSTBEG, NSV_DSTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_SLTBEG, NSV_SLTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_LGBEG, NSV_LGEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_PPBEG, NSV_PPEND
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
     END DO
  END SELECT
 !
diff --git a/src/MNH/ini_drag.f90 b/src/MNH/ini_drag.f90
index 39bcf5b53..aea5faa99 100644
--- a/src/MNH/ini_drag.f90
+++ b/src/MNH/ini_drag.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_INI_DRAG
 !     ######################
@@ -52,7 +53,6 @@ END MODULE MODI_INI_DRAG
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-USE MODE_FM
 USE MODE_ll
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/ini_elec.f90 b/src/MNH/ini_elec.f90
index 4dfdd8e47..55ff715c4 100644
--- a/src/MNH/ini_elec.f90
+++ b/src/MNH/ini_elec.f90
@@ -43,26 +43,22 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODE_IO_ll
-USE MODE_FM
-USE MODE_FMREAD
-!
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_LUNIT_n
-USE MODD_NSV, ONLY : NSV,NSV_ELEC,NSV_ELECBEG,NSV_ELECEND
-USE MODD_PARAMETERS
-USE MODD_CST
 USE MODD_CONF
+USE MODD_CST
 USE MODD_DYN
+USE MODD_IO,          ONLY: TFILEDATA
+USE MODD_LUNIT_n
+USE MODD_NSV,         ONLY: NSV, NSV_ELEC, NSV_ELECBEG, NSV_ELECEND
+USE MODD_PARAMETERS
 USE MODD_REF
 USE MODD_TIME
 !
-USE MODN_CONF_n
+USE MODE_ll
 !
 USE MODI_INI_CLOUD
 !
+USE MODN_CONF_n
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/ini_elecn.f90 b/src/MNH/ini_elecn.f90
index f668ebc3a..292304f41 100644
--- a/src/MNH/ini_elecn.f90
+++ b/src/MNH/ini_elecn.f90
@@ -12,7 +12,7 @@ INTERFACE
                              PTSTEP, PZZ,                      &
                              PDXX, PDYY, PDZZ, PDZX, PDZY      )
 !
-USE MODD_IO_ll,  ONLY : TFILEDATA
+USE MODD_IO,  ONLY : TFILEDATA
 !
 INTEGER,           INTENT(IN) :: KLUOUT   ! Logical unit number for prints
 CHARACTER (LEN=4), INTENT(IN) :: HELEC    ! atmospheric electricity scheme
@@ -93,7 +93,7 @@ USE MODD_ELEC_n, ONLY : XRHOM_E, XAF_E, XCF_E, XBFY_E, XBFB_E, XBF_SXP2_YP1_Z_E
 USE MODD_GET_n, ONLY : CGETINPRC, CGETINPRR, CGETINPRS, CGETINPRG, CGETINPRH, &            
                        CGETCLOUD, CGETSVT
 USE MODD_GRID_n, ONLY : XMAP, XDXHAT, XDYHAT
-USE MODD_IO_ll,  ONLY : TFILEDATA
+USE MODD_IO,  ONLY : TFILEDATA
 USE MODD_LBC_n, ONLY : CLBCX, CLBCY
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAM_C2R2, ONLY : LDEPOC
@@ -107,8 +107,6 @@ USE MODD_REF_n, ONLY : XRHODJ, XTHVREF
 USE MODD_TIME
 !
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODE_IO_ll
-USE MODE_FMREAD
 USE MODE_ll
 !
 USE MODI_ELEC_TRIDZ
diff --git a/src/MNH/ini_field_elec.f90 b/src/MNH/ini_field_elec.f90
index 9fa4a9fb1..86b68ca99 100644
--- a/src/MNH/ini_field_elec.f90
+++ b/src/MNH/ini_field_elec.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     ##########################
       MODULE MODI_INI_FIELD_ELEC
@@ -78,7 +78,6 @@ USE MODI_GDIV
 USE MODI_SHUMAN
 !
 USE MODE_ll
-USE MODE_FM
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90
index 004e340ec..046270d70 100644
--- a/src/MNH/ini_lb.f90
+++ b/src/MNH/ini_lb.f90
@@ -21,7 +21,7 @@ SUBROUTINE INI_LB(TPINIFILE,OLSOURCE,KSV,                                   &
      PLBYUMM,PLBYVMM,PLBYWMM,PLBYTHMM,PLBYTKEMM,PLBYRMM,PLBYSVMM,           &
      PLENG )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),       INTENT(IN)   :: TPINIFILE ! Initial file
 LOGICAL,               INTENT(IN)   :: OLSOURCE  ! switch for the source term
@@ -144,7 +144,7 @@ USE MODD_CONF
 USE MODD_DUST
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_NSV
@@ -157,7 +157,7 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_SALT
 !
 USE MODE_FIELD,           ONLY: TFIELDDATA,TYPELOG,TYPEREAL
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ,   only: IO_Field_read, IO_Field_read_lb
 USE MODE_MSG
 USE MODE_TOOLS, ONLY: UPCASE
 !
@@ -237,7 +237,7 @@ TYPE(TFIELDDATA)  :: TZFIELD
 !*       0.    READ CPL_AROME to know which LB_fileds there are to read
 !              --------------------
 IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>8) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'CPL_AROME',LCPL_AROME)
+  CALL IO_Field_read(TPINIFILE,'CPL_AROME',LCPL_AROME)
 ELSE
   LCPL_AROME=.FALSE.
 ENDIF
@@ -256,12 +256,12 @@ ILUOUT = TLUOUT%NLU
 !
 !*       2.1   read the number of available points for the horizontal relaxation
 ! for basic variables 
-CALL IO_READ_FIELD(TPINIFILE,'RIMX',ILBSIZEX)
-CALL IO_READ_FIELD(TPINIFILE,'RIMY',ILBSIZEY)
+CALL IO_Field_read(TPINIFILE,'RIMX',ILBSIZEX)
+CALL IO_Field_read(TPINIFILE,'RIMY',ILBSIZEY)
 !
 !*        2.2 Basic variables
 ! 
-CALL IO_READ_FIELD(TPINIFILE,'HORELAX_UVWTH',GHORELAX_UVWTH)
+CALL IO_Field_read(TPINIFILE,'HORELAX_UVWTH',GHORELAX_UVWTH)
                                 !
 IF (GHORELAX_UVWTH) THEN 
   IRIMX =(KSIZELBX_ll-2*JPHEXT)/2   
@@ -284,35 +284,35 @@ ELSE
 ENDIF
 !
 IF (KSIZELBXU_ll/= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
 END IF
 
 IF ( KSIZELBX_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
 ENDIF
 
 IF ( KSIZELBX_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
 END IF
 
 IF ( KSIZELBY_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
 END IF
 
 IF ( KSIZELBYV_ll  /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
 END IF
 
 IF (KSIZELBY_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
 END IF
 
 IF (KSIZELBX_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
 END IF
 
 IF ( KSIZELBY_ll /= 0) THEN
-  CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
+  CALL IO_Field_read_lb(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
 END IF
 !
 !*        2.3  LB-TKE
@@ -329,7 +329,7 @@ CASE('READ')
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize LBXTKES and LBYTKES')
     ENDIF
   ELSE
-    CALL IO_READ_FIELD(TPINIFILE,'HORELAX_TKE',GHORELAX_TKE)
+    CALL IO_Field_read(TPINIFILE,'HORELAX_TKE',GHORELAX_TKE)
     IF (GHORELAX_TKE) THEN 
       IRIMX=(KSIZELBXTKE_ll-2*JPHEXT)/2   
       IRIMY=(KSIZELBYTKE_ll-2*JPHEXT)/2
@@ -343,11 +343,11 @@ CASE('READ')
     ENDIF
 !
     IF (KSIZELBXTKE_ll /= 0) THEN
-      CALL IO_READ_FIELD_LB(TPINIFILE,'LBXTKEM',IL3DX,IRIMX,PLBXTKEM)
+      CALL IO_Field_read_lb(TPINIFILE,'LBXTKEM',IL3DX,IRIMX,PLBXTKEM)
     END IF
 !
     IF (KSIZELBYTKE_ll /= 0) THEN  
-      CALL IO_READ_FIELD_LB(TPINIFILE,'LBYTKEM',IL3DY,IRIMY,PLBYTKEM)
+      CALL IO_Field_read_lb(TPINIFILE,'LBYTKEM',IL3DY,IRIMY,PLBYTKEM)
     END IF
   ENDIF
 CASE('INIT')
@@ -371,7 +371,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_R)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_R)
   !
   YGETRXM(:)=(/HGETRVM,HGETRCM,HGETRRM,HGETRIM,HGETRSM,HGETRGM,HGETRHM/)
   YC(:)=(/"V","C","R","I","S","G","H"/)
@@ -405,7 +405,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         TZFIELD%CLONGNAME  = 'LBXR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBX'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
-        CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
+        CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
       END IF
       !
       IF ( KSIZELBYR_ll /= 0 ) THEN
@@ -413,7 +413,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         TZFIELD%CLONGNAME  = 'LBYR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBY'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
-        CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
+        CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
       END IF
     CASE('INIT')
       IRR=IRR+1 
@@ -440,7 +440,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
           TZFIELD%CLONGNAME  = 'LBXR'//YC(JRR)//'M'
           TZFIELD%CLBTYPE    = 'LBX'
           TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXRM(:,:,:,IRR))
         ENDIF
       END IF
       !
@@ -458,7 +458,7 @@ IF(KSIZELBXR_ll  > 0 ) THEN
            TZFIELD%CLONGNAME  = 'LBYR'//YC(JRR)//'M'
            TZFIELD%CLBTYPE    = 'LBY'
            TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
-           CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
+           CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYRM(:,:,:,IRR))
          ENDIF
        END IF
     CASE('INIT')
@@ -484,7 +484,7 @@ IF (KSV > 0) THEN
     TZFIELD%NTYPE      = TYPELOG
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,GHORELAX_SV)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_SV)
     IF ( GHORELAX_SV ) THEN
       IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2   
       IRIMY=(KSIZELBYSV_ll-2*JPHEXT)/2
@@ -516,7 +516,7 @@ IF (NSV_USER>0) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -535,7 +535,7 @@ IF (NSV_USER>0) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -572,7 +572,7 @@ IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -591,7 +591,7 @@ IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -628,7 +628,7 @@ IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -647,7 +647,7 @@ IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -688,7 +688,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBXSVMM)) THEN
@@ -707,7 +707,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBYSVMM)) THEN
@@ -745,7 +745,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBXSVMM)) THEN
@@ -764,7 +764,7 @@ IF (CCLOUD=='LIMA' ) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+            CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
             IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
               IF (IRESP/=0) THEN
                 IF (PRESENT(PLBYSVMM)) THEN
@@ -802,7 +802,7 @@ IF (NSV_ELECEND>=NSV_ELECBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -820,7 +820,7 @@ IF (NSV_ELECEND>=NSV_ELECBEG) THEN
           TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -857,7 +857,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -876,7 +876,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -913,7 +913,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -932,7 +932,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -969,7 +969,7 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -988,7 +988,7 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1025,7 +1025,7 @@ IF (NSV_AEREND>=NSV_AERBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1044,7 +1044,7 @@ IF (NSV_AEREND>=NSV_AERBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1081,7 +1081,7 @@ IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1100,7 +1100,7 @@ IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1137,7 +1137,7 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1156,7 +1156,7 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1193,7 +1193,7 @@ IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1212,7 +1212,7 @@ IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1250,7 +1250,7 @@ IF (NSV_SLTEND>=NSV_SLTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1269,7 +1269,7 @@ IF (NSV_SLTEND>=NSV_SLTBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1306,7 +1306,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1325,7 +1325,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1363,7 +1363,7 @@ IF (NSV_FFEND>=NSV_FFBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           WRITE(ILUOUT,*) 'ForeFire LBX_FF ', IRESP
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
@@ -1383,7 +1383,7 @@ IF (NSV_FFEND>=NSV_FFBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1421,7 +1421,7 @@ IF (NSV_CSEND>=NSV_CSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1440,7 +1440,7 @@ IF (NSV_CSEND>=NSV_CSBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1477,7 +1477,7 @@ IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1496,7 +1496,7 @@ IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
@@ -1533,7 +1533,7 @@ IF (NSV_LGEND>=NSV_LGBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBXSVMM)) THEN
@@ -1552,7 +1552,7 @@ IF (NSV_LGEND>=NSV_LGBEG) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_READ_FIELD_LB(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
+          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
           IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
             IF (IRESP/=0) THEN
               IF (PRESENT(PLBYSVMM)) THEN
diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90
index 3f398b419..48e83c6fb 100644
--- a/src/MNH/ini_lesn.f90
+++ b/src/MNH/ini_lesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -41,7 +41,6 @@
 !
 USE MODE_ll
 USE MODE_GATHER_ll
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -66,7 +65,6 @@ USE MODD_DYN
 USE MODD_NSV, ONLY: NSV ! update_nsv is done in INI_MODEL
 USE MODD_CONDSAMP, ONLY : LCONDSAMP
 !
-
 USE MODI_INI_LES_CART_MASKn
 USE MODI_COEF_VER_INTERP_LIN
 !
diff --git a/src/MNH/ini_ls.f90 b/src/MNH/ini_ls.f90
index 5cf231784..4fe067049 100644
--- a/src/MNH/ini_ls.f90
+++ b/src/MNH/ini_ls.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -15,7 +15,7 @@ INTERFACE
            PLSUMM,PLSVMM,PLSWMM,PLSTHMM,PLSRVMM,PDRYMASST,PLENG, &
            OSTEADY_DMASS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPINIFILE ! Initial file
 CHARACTER (LEN=*),      INTENT(IN)    :: HGETRVM   ! GET indicator
@@ -87,10 +87,9 @@ END MODULE MODI_INI_LS
 !*       0.    DECLARATIONS
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_TIME ! for type DATE_TIME
+USE MODD_IO,            ONLY: TFILEDATA
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -134,13 +133,13 @@ LOGICAL,                INTENT(IN),    OPTIONAL :: OSTEADY_DMASS         ! Md ev
 !*       2.    READ LARGE SCALE FIELDS
 !              -----------------------
 !
-CALL IO_READ_FIELD(TPINIFILE,'LSUM', PLSUM)
-CALL IO_READ_FIELD(TPINIFILE,'LSVM', PLSVM)
-CALL IO_READ_FIELD(TPINIFILE,'LSWM', PLSWM)
-CALL IO_READ_FIELD(TPINIFILE,'LSTHM',PLSTHM)
+CALL IO_Field_read(TPINIFILE,'LSUM', PLSUM)
+CALL IO_Field_read(TPINIFILE,'LSVM', PLSVM)
+CALL IO_Field_read(TPINIFILE,'LSWM', PLSWM)
+CALL IO_Field_read(TPINIFILE,'LSTHM',PLSTHM)
 !
 IF (HGETRVM == 'READ') THEN         ! LS-vapor                                    
-  CALL IO_READ_FIELD(TPINIFILE,'LSRVM',PLSRVM)
+  CALL IO_Field_read(TPINIFILE,'LSRVM',PLSRVM)
 ENDIF
 !
 !
@@ -172,7 +171,7 @@ IF (OLSOURCE) THEN
 ! Dry mass
    IF(.NOT. OSTEADY_DMASS) THEN
      IF (PRESENT(PDRYMASSS).AND.PRESENT(PDRYMASST)) THEN
-       CALL IO_READ_FIELD(TPINIFILE,'DRYMASST',PDRYMASSS)
+       CALL IO_Field_read(TPINIFILE,'DRYMASST',PDRYMASSS)
        PDRYMASSS   = (PDRYMASSS - PDRYMASST) / PLENG
      ENDIF
    ENDIF
diff --git a/src/MNH/ini_micron.f90 b/src/MNH/ini_micron.f90
index e45a6b56b..718eebb46 100644
--- a/src/MNH/ini_micron.f90
+++ b/src/MNH/ini_micron.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -10,7 +10,7 @@
 INTERFACE
       SUBROUTINE INI_MICRO_n  ( TPINIFILE,KLUOUT )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN) :: TPINIFILE ! Initial file
 INTEGER,         INTENT(IN) :: KLUOUT    ! Logical unit number for prints
@@ -61,7 +61,7 @@ END MODULE MODI_INI_MICRO_n
 !
 !
 USE MODD_CONF, ONLY : CCONF,CPROGRAM       
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_GET_n, ONLY : CGETRCT,CGETRRT, CGETRST, CGETRGT, CGETRHT, CGETCLOUD
 USE MODD_DIM_n, ONLY : NIMAX_ll, NJMAX_ll
 USE MODD_PARAMETERS, ONLY : JPVEXT, JPHEXT
diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90
index c4fc6fb9a..20ad8d343 100644
--- a/src/MNH/ini_modeln.f90
+++ b/src/MNH/ini_modeln.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
        SUBROUTINE INI_MODEL_n(KMI,TPINIFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,          INTENT(IN)   :: KMI       ! Model Index
 TYPE(TFILEDATA),  INTENT(IN)   :: TPINIFILE ! Initial file
@@ -63,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
@@ -74,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
@@ -278,7 +276,7 @@ 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 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !  P. Wautelet 14/02/2019: remove HINIFILE dummy argument from INI_RADIATIONS_ECMWF/ECRAD
 !---------------------------------------------------------------------------------
@@ -292,10 +290,10 @@ END MODULE MODI_INI_MODEL_n
 !
 USE MODE_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_FM, ONLY: IO_FILE_OPEN_ll
-USE MODE_FMREAD
+USE MODE_IO
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
 USE MODE_GATHER_ll
 USE MODE_MSG
 USE MODE_TYPE_ZDIFFU
@@ -436,7 +434,7 @@ USE MODD_ADVFRC_n
 USE MODD_RELFRC_n
 USE MODD_2D_FRC
 USE MODD_IO_SURF_MNH, ONLY : IO_SURF_MNH_MODEL
-USE MODD_IO_ll,       ONLY : CIO_DIR,TFILEDATA,TFILE_DUMMY,TFILE_FIRST,TFILE_LAST
+USE MODD_IO,       ONLY: CIO_DIR, TFILEDATA, TFILE_DUMMY, TFILE_FIRST, TFILE_LAST
 !
 USE MODD_CH_PRODLOSSTOT_n
 USE MODI_CH_INIT_PRODLOSSTOT_n
@@ -557,11 +555,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
@@ -570,11 +568,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
@@ -583,11 +581,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
@@ -598,8 +596,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,")"
@@ -1664,7 +1662,7 @@ IF (KMI == 1) THEN
   DO IMI = 1 , NMODEL
     WRITE(IO_SURF_MNH_MODEL(IMI)%COUTFILE,'(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))
     WRITE(YNAME, '(A,".",I1,".",A)') CEXP,IMI,TRIM(ADJUSTL(CSEG))//'.000'
-    CALL IO_FILE_ADD2LIST(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE',  &
+    CALL IO_File_add2list(LUNIT_MODEL(IMI)%TDIAFILE,YNAME,'MNHDIACHRONIC','WRITE',  &
                           HDIRNAME=CIO_DIR,                                         &
                           KLFINPRAR=INT(50,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=NVERB, &
                           TPDADFILE=LUNIT_MODEL(NDAD(IMI))%TDIAFILE )
@@ -2132,7 +2130,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
@@ -2141,8 +2139,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),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
-    CALL IO_FILE_OPEN_ll(TINIFILEPGD,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
@@ -2184,8 +2182,8 @@ ELSE
 END IF
 IF (CSURF=='EXTE' .AND. (CPROGRAM=='SPAWN ')) THEN
   ! ouverture du fichier PGD
-  CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TINIFILEPGD,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
diff --git a/src/MNH/ini_param_elec.f90 b/src/MNH/ini_param_elec.f90
index fc1adb10d..ca55b7664 100644
--- a/src/MNH/ini_param_elec.f90
+++ b/src/MNH/ini_param_elec.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     	##########################
@@ -12,7 +12,7 @@ INTERFACE
         SUBROUTINE INI_PARAM_ELEC (TPINIFILE, HGETSVM, PRHO00,       &
                                    KRR, KND, PFDINFTY, IIU, IJU, IKU )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE ! Initial file
 CHARACTER (LEN=*), DIMENSION(:),INTENT(IN)  :: HGETSVM
@@ -94,15 +94,15 @@ USE MODD_CST
 USE MODD_ELEC_n
 USE MODD_ELEC_DESCR
 USE MODD_ELEC_PARAM
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_NSV,   ONLY : NSV_ELECEND
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_NSV,            ONLY: NSV_ELECEND
 USE MODD_PARAMETERS
 USE MODD_PARAM_ICE
 USE MODD_RAIN_ICE_DESCR
 USE MODD_RAIN_ICE_PARAM
 USE MODD_VAR_ll
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
 !
 USE MODI_MOMG
 USE MODI_RRCOLSS
@@ -348,10 +348,10 @@ XEW(:,:,:) = 0.
 !
 SELECT CASE(HGETSVM(NSV_ELECEND))
   CASE ('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'NI_IAGGS',XNI_IAGGS)
-    CALL IO_READ_FIELD(TPINIFILE,'NI_IDRYG',XNI_IDRYG)
-    CALL IO_READ_FIELD(TPINIFILE,'NI_SDRYG',XNI_SDRYG)
-    CALL IO_READ_FIELD(TPINIFILE,'INDUC_CG',XIND_RATE)
+    CALL IO_Field_read(TPINIFILE,'NI_IAGGS',XNI_IAGGS)
+    CALL IO_Field_read(TPINIFILE,'NI_IDRYG',XNI_IDRYG)
+    CALL IO_Field_read(TPINIFILE,'NI_SDRYG',XNI_SDRYG)
+    CALL IO_Field_read(TPINIFILE,'INDUC_CG',XIND_RATE)
   CASE ('INIT')
     XNI_IAGGS(:,:,:) = 0.
     XNI_IDRYG(:,:,:) = 0.
diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90
index 846d52d74..88b86c3cb 100644
--- a/src/MNH/ini_posprofilern.f90
+++ b/src/MNH/ini_posprofilern.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #########################
@@ -84,7 +84,6 @@ USE MODD_TYPE_PROFILER
 USE MODD_TYPE_DATE
 !
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 75d6242b8..f02cd9c38 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -93,7 +93,7 @@ END MODULE MODI_INI_PROG_VAR
 !!                  Mai 2017 (M. Leriche) read aerosol namelists before call ini_nsv
 !!                  Mai 2017 (M. Leriche) Get wet dep. sv in Meso-NH init file
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
@@ -110,7 +110,7 @@ USE MODD_DIM_n
 USE MODD_DUST
 USE MODD_DYN_n
 USE MODD_FIELD_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LSFIELD_n
 USE MODD_LUNIT
 USE MODD_LUNIT_n,          ONLY: TLUOUT
@@ -120,11 +120,10 @@ USE MODD_PARAMETERS
 USE MODD_SALT
 USE MODD_TURB_n
 !
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
-USE MODE_FIELD,            ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll, IO_FILE_OPEN_ll
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
 USE MODE_POS
@@ -215,24 +214,24 @@ ALLOCATE(XSVT(0,0,0,0))
 IF(PRESENT(HCHEMFILE)) THEN
   WRITE(ILUOUT,*) 'Routine INI_PROG_VAR: CHEMical species read in ',TRIM(HCHEMFILE)
   ! Read dimensions in chem file and checks with output file
-  CALL IO_FILE_ADD2LIST(TZCHEMFILE,TRIM(HCHEMFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZCHEMFILE)
+  CALL IO_File_add2list(TZCHEMFILE,TRIM(HCHEMFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZCHEMFILE)
   !
   ILUDES = TZCHEMFILE%TDESFILE%NLU
   !
-  CALL IO_READ_FIELD(TZCHEMFILE,'IMAX',IIMAX,IRESP)
+  CALL IO_Field_read(TZCHEMFILE,'IMAX',IIMAX,IRESP)
   IF (IRESP/=0) THEN
    !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','IMAX not found in the CHEM file '//TRIM(HCHEMFILE))
   END IF !IRESP
   !
-  CALL IO_READ_FIELD(TZCHEMFILE,'JMAX',IJMAX,IRESP)
+  CALL IO_Field_read(TZCHEMFILE,'JMAX',IJMAX,IRESP)
   IF (IRESP/=0) THEN
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','JMAX not found in the CHEM file '//TRIM(HCHEMFILE))
   END IF !IRESP
   !
-  CALL IO_READ_FIELD(TZCHEMFILE,'KMAX',IKMAX,IRESP)
+  CALL IO_Field_read(TZCHEMFILE,'KMAX',IKMAX,IRESP)
   IF (IRESP/=0) THEN
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR','KMAX not found in the CHEM file '//TRIM(HCHEMFILE))
@@ -286,7 +285,7 @@ IF(PRESENT(HCHEMFILE)) THEN
       TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+      CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE
         XSVT(:,:,:,JSV) = 0.
@@ -313,7 +312,7 @@ IF(PRESENT(HCHEMFILE)) THEN
       TZFIELD%CMNHNAME   = TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+      CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
         LORILAM=.FALSE.
@@ -338,7 +337,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_AER(IMI)=.FALSE.
@@ -367,7 +366,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
         END IF !IRESP
@@ -382,7 +381,7 @@ IF(PRESENT(HCHEMFILE)) THEN
           TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+          CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
           IF (IRESP/=0) THEN
             CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//&
                                              ' not found in the CHEM file '//TRIM(HCHEMFILE))
@@ -412,7 +411,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_DST(IMI)=.FALSE.
@@ -441,7 +440,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
         END IF !IRESP
@@ -456,7 +455,7 @@ IF(PRESENT(HCHEMFILE)) THEN
           TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+          CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
           IF (IRESP/=0) THEN
             CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
           END IF !IRESP
@@ -486,7 +485,7 @@ IF(PRESENT(HCHEMFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
           LDEPOS_SLT(IMI)=.FALSE.
@@ -495,7 +494,7 @@ IF(PRESENT(HCHEMFILE)) THEN
     ENDIF ! ldepos_slt 
   END IF  ! LSALT
   !
-  CALL IO_FILE_CLOSE_ll(TZCHEMFILE)
+  CALL IO_File_close(TZCHEMFILE)
   !
 ELSE ! HCHEMFILE
   IF (NSV >=1) THEN
diff --git a/src/MNH/ini_radiations.f90 b/src/MNH/ini_radiations.f90
index a9af173cf..640467fbb 100644
--- a/src/MNH/ini_radiations.f90
+++ b/src/MNH/ini_radiations.f90
@@ -18,7 +18,7 @@ INTERFACE
          PRADEFF,PSWU,PSWD,PLWU,PLWD,PDTHRADSW,PDTHRADLW               )
 !
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_IO_ll,       ONLY : TFILEDATA
+USE MODD_IO,       ONLY : TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
@@ -115,16 +115,16 @@ END MODULE MODI_INI_RADIATIONS
 !
 !MESO-NH modules
 !
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-USE MODD_CST,         ONLY : XPI
-USE MODD_CONF,        ONLY : LFLAT, L2D
-USE MODD_IO_ll,       ONLY : TFILEDATA
+USE MODD_ARGSLIST_ll,   ONLY: LIST_ll
+USE MODD_CST,           ONLY: XPI
+USE MODD_CONF,          ONLY: LFLAT, L2D
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LES
-USE MODD_PARAMETERS,  ONLY : JPVEXT
-USE MODD_PARAM_RAD_n, ONLY : LFIX_DAT
+USE MODD_PARAMETERS,    ONLY: JPVEXT
+USE MODD_PARAM_RAD_n,   ONLY: LFIX_DAT
 USE MODD_TYPE_DATE
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 !
 USE MODI_SHUMAN
@@ -308,16 +308,16 @@ IF ( OINIRAD ) THEN
   PDIRSRFSWD(:,:,:)= 0.
   KCLEARCOL_TM1    = 0
 ELSE
-  CALL IO_READ_FIELD(TPINIFILE,'DTRAD_FULL',  TPDTRAD_FULL)
-  CALL IO_READ_FIELD(TPINIFILE,'DTRAD_CLLY',  TPDTRAD_CLONLY)
-  CALL IO_READ_FIELD(TPINIFILE,'DTHRAD',      PDTHRAD)
-  CALL IO_READ_FIELD(TPINIFILE,'FLALWD',      PFLALWD)
-  CALL IO_READ_FIELD(TPINIFILE,'DIRFLASWD',   PDIRFLASWD)
-  CALL IO_READ_FIELD(TPINIFILE,'SCAFLASWD',   PSCAFLASWD)
-  CALL IO_READ_FIELD(TPINIFILE,'DIRSRFSWD',   PDIRSRFSWD)
-  CALL IO_READ_FIELD(TPINIFILE,'CLEARCOL_TM1',KCLEARCOL_TM1)
-  CALL IO_READ_FIELD(TPINIFILE,'ZENITH',      PZENITH)
-  CALL IO_READ_FIELD(TPINIFILE,'AZIM',        PAZIM)
+  CALL IO_Field_read(TPINIFILE,'DTRAD_FULL',  TPDTRAD_FULL)
+  CALL IO_Field_read(TPINIFILE,'DTRAD_CLLY',  TPDTRAD_CLONLY)
+  CALL IO_Field_read(TPINIFILE,'DTHRAD',      PDTHRAD)
+  CALL IO_Field_read(TPINIFILE,'FLALWD',      PFLALWD)
+  CALL IO_Field_read(TPINIFILE,'DIRFLASWD',   PDIRFLASWD)
+  CALL IO_Field_read(TPINIFILE,'SCAFLASWD',   PSCAFLASWD)
+  CALL IO_Field_read(TPINIFILE,'DIRSRFSWD',   PDIRSRFSWD)
+  CALL IO_Field_read(TPINIFILE,'CLEARCOL_TM1',KCLEARCOL_TM1)
+  CALL IO_Field_read(TPINIFILE,'ZENITH',      PZENITH)
+  CALL IO_Field_read(TPINIFILE,'AZIM',        PAZIM)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_radiations_ecmwf.f90 b/src/MNH/ini_radiations_ecmwf.f90
index 2ee41916e..cf0ba2ebc 100644
--- a/src/MNH/ini_radiations_ecmwf.f90
+++ b/src/MNH/ini_radiations_ecmwf.f90
@@ -196,7 +196,6 @@ USE MODD_STAND_ATM
 USE MODD_PARAM_RAD_n,  ONLY: LFIX_DAT
 !
 USE MODE_ll
-USE MODE_FM
 !
 USE MODI_INI_RADCONF
 USE MODI_INI_HOR_AERCLIM
diff --git a/src/MNH/ini_rain_ice.f90 b/src/MNH/ini_rain_ice.f90
index 530ad47cd..9420cb1e7 100644
--- a/src/MNH/ini_rain_ice.f90
+++ b/src/MNH/ini_rain_ice.f90
@@ -107,7 +107,6 @@ END MODULE MODI_INI_RAIN_ICE
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
 USE MODD_CST
 USE MODD_LUNIT
 USE MODD_PARAMETERS
diff --git a/src/MNH/ini_rain_ice_elec.f90 b/src/MNH/ini_rain_ice_elec.f90
index 15721ada4..d352581f8 100644
--- a/src/MNH/ini_rain_ice_elec.f90
+++ b/src/MNH/ini_rain_ice_elec.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$
-! masdev4_7 BUG1 2007/06/15 17:47:18
-!-----------------------------------------------------------------
 !      #############################
        MODULE MODI_INI_RAIN_ICE_ELEC
 !      #############################
@@ -97,7 +92,6 @@ END MODULE MODI_INI_RAIN_ICE_ELEC
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
 USE MODD_CST
 USE MODD_LUNIT
 USE MODD_PARAMETERS
diff --git a/src/MNH/ini_segn.f90 b/src/MNH/ini_segn.f90
index b011e0892..0abca3844 100644
--- a/src/MNH/ini_segn.f90
+++ b/src/MNH/ini_segn.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE INI_SEG_n(KMI,TPINIFILE,HINIFILEPGD,PTSTEP_ALL)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 INTEGER,                    INTENT(IN)    :: KMI          !Model index
 TYPE(TFILEDATA),   POINTER, INTENT(OUT)   :: TPINIFILE    !Initial file
@@ -73,7 +73,7 @@ END MODULE MODI_INI_SEG_n
 !!      The  name of the initial file is read in EXSEG file.     
 !!         - Default values are supplied for variables in descriptor files
 !!      (by DEFAULT_DESFM).
-!!         - The Initial file (LFIFM + DESFM) is opened by IO_FILE_OPEN_ll.
+!!         - The Initial file (LFIFM + DESFM) is opened by IO_File_open.
 !!         - The descriptor DESFM file is read (by READ_DESFM_n). 
 !!         - The descriptor file EXSEG is read (by READ_EXSEG_n) and coherence
 !!      between the initial file and the description of segment is also checked 
@@ -90,7 +90,7 @@ END MODULE MODI_INI_SEG_n
 !!    EXTERNAL
 !!    --------
 !!      FMATTR        : to associate a logical unit number to a file 
-!!      IO_FILE_OPEN_ll : to open descriptor file or LFI file
+!!      IO_File_open : to open descriptor file or LFI file
 !!      DEFAULT_DESFM1: to set default values
 !!      READ_DESFM_n    : to read a DESFM file 
 !!      READ_EXSEG_n    : to read a EXSEG file
@@ -162,7 +162,7 @@ END MODULE MODI_INI_SEG_n
 !!                       04/2016   add ABORT if CINIFILEPGD is not specified (G.Delautier)
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!                       07/2017   add GBLOWSNOW (V. Vionnet)
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
@@ -172,7 +172,7 @@ USE MODD_CONF
 USE MODD_CONF_n,           ONLY: CSTORAGE_TYPE
 USE MODN_CONFZ
 USE MODD_DYN
-USE MODD_IO_ll,            ONLY: NVERB_FATAL,NVERB_WARNING,TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_IO,               ONLY: NVERB_FATAL, NVERB_WARNING, TFILE_OUTPUTLISTING, TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n,          ONLY: CINIFILE_n=> CINIFILE, TINIFILE_n => TINIFILE, CINIFILEPGD_n=> CINIFILEPGD, TLUOUT, LUNIT_MODEL
 USE MODD_PARAM_n,          ONLY: CSURF
@@ -180,10 +180,10 @@ USE MODD_PARAMETERS
 USE MODD_REF,              ONLY: LBOUSS
 !
 USE MODE_FIELD
-USE MODE_FMREAD
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll, IO_FILE_OPEN_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO,               only: IO_Config_set
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 USE MODE_POS
 !
@@ -259,9 +259,9 @@ TZFILE_DES => NULL()
 !              ---------------------------------------
 !
 WRITE(YMI,'(I2.0)') KMI
-CALL IO_FILE_ADD2LIST(LUNIT_MODEL(KMI)%TLUOUT,'OUTPUT_LISTING'//ADJUSTL(YMI),'OUTPUTLISTING','WRITE')
+CALL IO_File_add2list(LUNIT_MODEL(KMI)%TLUOUT,'OUTPUT_LISTING'//ADJUSTL(YMI),'OUTPUTLISTING','WRITE')
 TLUOUT => LUNIT_MODEL(KMI)%TLUOUT !Necessary because TLUOUT was initially pointing to NULL
-CALL IO_FILE_OPEN_ll(TLUOUT)
+CALL IO_File_open(TLUOUT)
 !
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT
@@ -272,8 +272,8 @@ WRITE(UNIT=ILUOUT,FMT='(50("*"),/,"*",17X,"MODEL ",I1," LISTING",16X,"*",/,  &
             & 50("*"))') KMI
 !
 IF (CPROGRAM=='MESONH') THEN
-  CALL IO_FILE_ADD2LIST(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ')
-  CALL IO_FILE_OPEN_ll(TZFILE_DES)
+  CALL IO_File_add2list(TZFILE_DES,'EXSEG'//TRIM(ADJUSTL(YMI))//'.nam','NML','READ')
+  CALL IO_File_open(TZFILE_DES)
 !
 !*       1.3   SPAWNING or SPEC or REAL program case
 !              ---------------------
@@ -281,8 +281,8 @@ IF (CPROGRAM=='MESONH') THEN
 ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  '.OR. CPROGRAM=='SPEC  ') THEN
   YINIFILE    = CINIFILE_n
   HINIFILEPGD = CINIFILEPGD_n
-  CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TPINIFILE)
+  CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TPINIFILE)
   TZFILE_DES => TPINIFILE%TDESFILE
 !
 !*       1.3bis   DIAG program case
@@ -290,8 +290,8 @@ ELSE IF (CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  '.OR. CPROGRAM=='SPEC  ') THEN
 ELSE IF (CPROGRAM=='DIAG  ') THEN
   YINIFILE    = CINIFILE_n
   HINIFILEPGD = CINIFILEPGD_n
-  CALL IO_FILE_ADD2LIST(TINIFILE_n,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TINIFILE_n)
+  CALL IO_File_add2list(TINIFILE_n,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TINIFILE_n)
   TPINIFILE  => TINIFILE_n
   TZFILE_DES => TPINIFILE%TDESFILE
 !   
@@ -334,14 +334,14 @@ IF (CPROGRAM=='MESONH') THEN
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFZ)
       CALL POSNAM(ILUSEG,'NAM_CONFIO',GFOUND,ILUOUT)
       IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_CONFIO)
-      CALL SET_CONFIO_ll()
+      CALL IO_Config_set()
    END IF
   HINIFILEPGD=CINIFILEPGD_n
   YINIFILE=CINIFILE_n
 
-  CALL IO_FILE_ADD2LIST(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_add2list(TPINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
   TINIFILE_n => TPINIFILE !Necessary because TINIFILE was initially pointing to NULL
-  CALL IO_FILE_OPEN_ll(TPINIFILE)
+  CALL IO_File_open(TPINIFILE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -384,7 +384,7 @@ END IF
 !
 IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
   IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>9) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'COUPLING',LCOUPLING)
+    CALL IO_Field_read(TPINIFILE,'COUPLING',LCOUPLING)
     IF (LCOUPLING) THEN
       WRITE(ILUOUT,*) 'Error with the initial file'
       WRITE(ILUOUT,*) 'The file',YINIFILE,' was created with LCOUPLING=.TRUE.'
@@ -397,7 +397,7 @@ IF (CPROGRAM=='MESONH' .OR. CPROGRAM=='SPAWN ') THEN
 END IF
 !
 ! Read the storage type
-  CALL IO_READ_FIELD(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
+  CALL IO_Field_read(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
   IF (IRESP /= 0) THEN
     WRITE(ILUOUT,FMT=9002) 'STORAGE_TYPE',IRESP
 !callabortstop
@@ -405,18 +405,18 @@ END IF
   END IF
 IF (KMI == 1) THEN 
 ! Read the geometry kind 
-  CALL IO_READ_FIELD(TPINIFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_read(TPINIFILE,'CARTESIAN',LCARTESIAN)
 ! Read the thinshell approximation
-  CALL IO_READ_FIELD(TPINIFILE,'THINSHELL',LTHINSHELL)
+  CALL IO_Field_read(TPINIFILE,'THINSHELL',LTHINSHELL)
 !
   IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=6) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-   CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D,IRESP)
+   CALL IO_Field_read(TPINIFILE,'L1D',L1D,IRESP)
    IF (IRESP/=0)  L1D=.FALSE.
 !
-   CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D,IRESP)
+   CALL IO_Field_read(TPINIFILE,'L2D',L2D,IRESP)
    IF (IRESP/=0)  L2D=.FALSE.
 !
-   CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK,IRESP)
+   CALL IO_Field_read(TPINIFILE,'PACK',LPACK,IRESP)
    IF (IRESP/=0) LPACK=.TRUE.
   ELSE
    L1D=.FALSE.
@@ -424,7 +424,7 @@ IF (KMI == 1) THEN
    LPACK=.TRUE.
   END IF
   IF ((TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>=10) .OR. TPINIFILE%NMNHVERSION(1)>4) THEN
-   CALL IO_READ_FIELD(TPINIFILE,'LBOUSS',LBOUSS)
+   CALL IO_Field_read(TPINIFILE,'LBOUSS',LBOUSS)
   END IF
 !
 END IF
@@ -467,7 +467,7 @@ END IF
 !*      7.    CLOSE  FILES
 !             ------------
 !
-IF (CPROGRAM=='MESONH') CALL IO_FILE_CLOSE_ll(TZFILE_DES)
+IF (CPROGRAM=='MESONH') CALL IO_File_close(TZFILE_DES)
 !
 !-------------------------------------------------------------------------------
 9002  FORMAT(/,'FATAL ERROR IN INI_SEG_n: pb to read ',A16,' IRESP=',I3)
diff --git a/src/MNH/ini_seriesn.f90 b/src/MNH/ini_seriesn.f90
index e584ca73a..a6f861ec4 100644
--- a/src/MNH/ini_seriesn.f90
+++ b/src/MNH/ini_seriesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ########################
@@ -47,7 +47,6 @@
 !     --------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
diff --git a/src/MNH/ini_size_spawn.f90 b/src/MNH/ini_size_spawn.f90
index e8707b14f..ee52cc7b6 100644
--- a/src/MNH/ini_size_spawn.f90
+++ b/src/MNH/ini_size_spawn.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE INI_SIZE_SPAWN(HLBCX,HLBCY,HPRESOPT,KITR,TPINIFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 CHARACTER (LEN=4),DIMENSION(2), INTENT(IN)    :: HLBCX,HLBCY ! LBC types for model1
 CHARACTER (LEN=5),              INTENT(IN)    :: HPRESOPT    ! Pressure solver option of model1
@@ -44,9 +44,9 @@ END MODULE MODI_INI_SIZE_SPAWN
 !!    EXTERNAL
 !!    --------
 !!    DEFAULT_DESFM2
-!!    IO_FILE_OPEN_ll
+!!    IO_File_open
 !!    READ_HGRID
-!!    IO_FILE_CLOSE_ll
+!!    IO_File_close
 !!    RETRIEVE_NEST_INFO
 !!
 !!    IMPLICIT ARGUMENTS
@@ -67,35 +67,34 @@ END MODULE MODI_INI_SIZE_SPAWN
 !!         J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!         J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
 !
 USE MODD_CONF
-USE MODD_DIM_n, ONLY : DIM_MODEL
-USE MODD_DYN_n, ONLY : CPRESOPT, NITR
+USE MODD_DIM_n,            ONLY: DIM_MODEL
+USE MODD_DYN_n,            ONLY: CPRESOPT, NITR
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY : ISNPROC, ISP, TFILEDATA
+USE MODD_IO,               ONLY: ISNPROC, ISP, TFILEDATA
 USE MODD_LBC_n
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 USE MODD_SPAWN
-USE MODD_VAR_ll, ONLY : YSPLITTING
+USE MODD_VAR_ll,           ONLY: YSPLITTING
 !
-USE MODE_ll
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
+USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
@@ -187,7 +186,7 @@ IF (LBAL_ONLY) THEN
 !callabortstop
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_SPAWN','YDADINIFILE not initialized in namelist NAM_LUNIT2_SPA')
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',YDAD_NAME)
+      CALL IO_Field_read(TPINIFILE,'DAD_NAME',YDAD_NAME)
       IF (ADJUSTL(ADJUSTR(YDAD_NAME)) .NE. ADJUSTL(ADJUSTR(CDADINIFILE))) THEN
         WRITE(ILUOUT,*) 'ERROR in INI_SIZE_SPAWN: YDADINIFILE is NOT the DAD of model 1'
         WRITE(ILUOUT,*) ' YDADINIFILE='//TRIM(CDADINIFILE)
@@ -212,12 +211,12 @@ ENDIF
 !
 IF (LEN_TRIM(CDOMAIN)>0) THEN
 !
-  CALL IO_READ_FIELD(TPINIFILE,'LAT0',  XLAT0)
-  CALL IO_READ_FIELD(TPINIFILE,'LON0',  XLON0)
-  CALL IO_READ_FIELD(TPINIFILE,'RPK',   XRPK)
-  CALL IO_READ_FIELD(TPINIFILE,'BETA',  XBETA)
-  CALL IO_READ_FIELD(TPINIFILE,'LATORI',XPGDLATOR)
-  CALL IO_READ_FIELD(TPINIFILE,'LONORI',XPGDLONOR)
+  CALL IO_Field_read(TPINIFILE,'LAT0',  XLAT0)
+  CALL IO_Field_read(TPINIFILE,'LON0',  XLON0)
+  CALL IO_Field_read(TPINIFILE,'RPK',   XRPK)
+  CALL IO_Field_read(TPINIFILE,'BETA',  XBETA)
+  CALL IO_Field_read(TPINIFILE,'LATORI',XPGDLATOR)
+  CALL IO_Field_read(TPINIFILE,'LONORI',XPGDLONOR)
   !
   !$20140602 INSERT BIG MODIF JUAN May27
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -227,15 +226,15 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN
 ! initialize grid2 dims, xor, xend and ratio so to initialize in INI_CHILD 
 ! structures TCRRT_COMDATA%T_CHILDREN%T_SPLITB and TCRRT_PROCONF%T_CHILDREN
 !$20140602 add condition on npproc
-  CALL IO_FILE_ADD2LIST(TZDOMAIN,TRIM(CDOMAIN),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZDOMAIN)
+  CALL IO_File_add2list(TZDOMAIN,TRIM(CDOMAIN),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZDOMAIN)
   !
-  CALL IO_READ_FIELD(TZDOMAIN,'DXRATIO',NDXRATIO)
-  CALL IO_READ_FIELD(TZDOMAIN,'DYRATIO',NDYRATIO)
-  CALL IO_READ_FIELD(TZDOMAIN,'XOR',    NXOR)
-  CALL IO_READ_FIELD(TZDOMAIN,'YOR',    NYOR)
-  CALL IO_READ_FIELD(TZDOMAIN,'IMAX',   IIMAX_ll)
-  CALL IO_READ_FIELD(TZDOMAIN,'JMAX',   IJMAX_ll)
+  CALL IO_Field_read(TZDOMAIN,'DXRATIO',NDXRATIO)
+  CALL IO_Field_read(TZDOMAIN,'DYRATIO',NDYRATIO)
+  CALL IO_Field_read(TZDOMAIN,'XOR',    NXOR)
+  CALL IO_Field_read(TZDOMAIN,'YOR',    NYOR)
+  CALL IO_Field_read(TZDOMAIN,'IMAX',   IIMAX_ll)
+  CALL IO_Field_read(TZDOMAIN,'JMAX',   IJMAX_ll)
   NXEND=NXOR+IIMAX_ll/NDXRATIO+2*JPHEXT-1
   NYEND=NYOR+IJMAX_ll/NDYRATIO+2*JPHEXT-1
   !
@@ -258,21 +257,21 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN
 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   !$
   ALLOCATE(XPGDXHAT(DIM_MODEL(1)%NIMAX+2*JPHEXT))
-  CALL IO_READ_FIELD(TPINIFILE,'XHAT',XPGDXHAT)
+  CALL IO_Field_read(TPINIFILE,'XHAT',XPGDXHAT)
   !
   ALLOCATE(XPGDYHAT(DIM_MODEL(1)%NJMAX+2*JPHEXT))
-  CALL IO_READ_FIELD(TPINIFILE,'YHAT',XPGDYHAT)
+  CALL IO_Field_read(TPINIFILE,'YHAT',XPGDYHAT)
   !
   IF (TPINIFILE%NMNHVERSION(1)<4 .OR. (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)<=5)) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XPGDLONOR)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XPGDLONOR)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XPGDLATOR)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XPGDLATOR)
     !
     ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2))
     ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2))
@@ -285,7 +284,7 @@ IF (LEN_TRIM(CDOMAIN)>0) THEN
 !*     1.4   read grid in file CDOMAIN if available :
 !
   CALL READ_HGRID(2,TZDOMAIN,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE)
-  CALL IO_FILE_CLOSE_ll(TZDOMAIN)
+  CALL IO_File_close(TZDOMAIN)
   CALL RETRIEVE1_NEST_INFO_n(1,2,NXOR,NYOR,NXSIZE,NYSIZE,NDXRATIO,NDYRATIO)
   DEALLOCATE(XZS,XZSMT,XXHAT,XYHAT)
 !
diff --git a/src/MNH/ini_sizen.f90 b/src/MNH/ini_sizen.f90
index e3e757376..5e21aeeaf 100644
--- a/src/MNH/ini_sizen.f90
+++ b/src/MNH/ini_sizen.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE INI_SIZE_n( KMI, TPINIFILE, HINIFILEPGD )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 INTEGER,            INTENT(IN)    :: KMI          !Model Index
 TYPE(TFILEDATA),    INTENT(IN)    :: TPINIFILE    !Initial file
@@ -54,7 +54,7 @@ END MODULE MODI_INI_SIZE_n
 !!   
 !!    EXTERNAL
 !!    --------
-!!      IO_READ_FIELD : to read a LFIFM file
+!!      IO_Field_read : to read a LFIFM file
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------ 
@@ -101,21 +101,20 @@ END MODULE MODI_INI_SIZE_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CONF,       ONLY: CCONF, LCARTESIAN, NVERB, LTHINSHELL, NHALO, CSPLIT, &
-                           L1D, L2D, LPACK
-USE MODD_CONFZ,      ONLY: NZ_PROC
-USE MODD_DIM_n,      ONLY: NIMAX_ll, NJMAX_ll, NKMAX
-USE MODD_DYN,        ONLY: LCORIO
-USE MODD_IO_ll,      ONLY: GSMONOPROC, TFILEDATA
-USE MODD_LBC_n,      ONLY: CLBCX, CLBCY
-USE MODD_LUNIT_n,    ONLY: CINIFILE, CINIFILEPGD, TLUOUT
-USE MODD_NESTING,    ONLY: CMY_NAME, CDAD_NAME, NDAD, NDXRATIO_ALL, NDYRATIO_ALL, &
-                           NXOR_ALL, NYOR_ALL, NXEND_ALL,NYEND_ALL
-USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPHEXT,JPVEXT 
-!
-USE MODE_FM,         ONLY: SET_FMPACK_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODD_CONF,          ONLY: CCONF, LCARTESIAN, NVERB, LTHINSHELL, NHALO, CSPLIT, &
+                              L1D, L2D, LPACK
+USE MODD_CONFZ,         ONLY: NZ_PROC
+USE MODD_DIM_n,         ONLY: NIMAX_ll, NJMAX_ll, NKMAX
+USE MODD_DYN,           ONLY: LCORIO
+USE MODD_IO,            ONLY: GSMONOPROC, TFILEDATA
+USE MODD_LBC_n,         ONLY: CLBCX, CLBCY
+USE MODD_LUNIT_n,       ONLY: CINIFILE, CINIFILEPGD, TLUOUT
+USE MODD_NESTING,       ONLY: CMY_NAME, CDAD_NAME, NDAD, NDXRATIO_ALL, NDYRATIO_ALL, &
+                              NXOR_ALL, NYOR_ALL, NXEND_ALL,NYEND_ALL
+USE MODD_PARAMETERS,    ONLY: JPMODELMAX, JPHEXT,JPVEXT
+!
+USE MODE_IO,            ONLY: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MSG
 USE MODE_POS
@@ -150,14 +149,14 @@ CINIFILEPGD=HINIFILEPGD
 !
 !*       2.0   Retrieve DAD_NAME and MY_NAME to check the DAD model identity
 !
-CALL IO_READ_FIELD(TPINIFILE,'MY_NAME',CMY_NAME(KMI),IRESP)
+CALL IO_Field_read(TPINIFILE,'MY_NAME',CMY_NAME(KMI),IRESP)
 IF (IRESP /= 0)  THEN
   WRITE(ILUOUT,FMT=9000) 'MY_NAME',IRESP
 !callabortstop
   CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','')
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'DAD_NAME',CDAD_NAME(KMI),IRESP)
+CALL IO_Field_read(TPINIFILE,'DAD_NAME',CDAD_NAME(KMI),IRESP)
 IF (IRESP /= 0)  THEN
   WRITE(ILUOUT,FMT=9000) 'DAD_NAME',IRESP
 !callabortstop
@@ -185,10 +184,10 @@ END IF
 !*       3.1  Read dimensions in initial file and initialize  subdomain 
 !             dimensions and parallel variables
 !
-CALL IO_READ_FIELD(TPINIFILE,'IMAX',  NIMAX_ll)
-CALL IO_READ_FIELD(TPINIFILE,'JMAX',  NJMAX_ll)
-CALL IO_READ_FIELD(TPINIFILE,'KMAX',  NKMAX)
-CALL IO_READ_FIELD(TPINIFILE,'JPHEXT',IJPHEXT)
+CALL IO_Field_read(TPINIFILE,'IMAX',  NIMAX_ll)
+CALL IO_Field_read(TPINIFILE,'JMAX',  NJMAX_ll)
+CALL IO_Field_read(TPINIFILE,'KMAX',  NKMAX)
+CALL IO_Field_read(TPINIFILE,'JPHEXT',IJPHEXT)
 !
 IF ( IJPHEXT .NE. JPHEXT ) THEN
    WRITE(ILUOUT,FMT=*) ' INI_SIZE_N : JPHEXT in namelist NAM_CONF ( or default or .des value )&
@@ -218,10 +217,10 @@ ENDIF
 !   read the nested model location in its father's grid
 !   and compute the coordinates of the corner points
 IF (LEN_TRIM(CDAD_NAME(KMI))>0) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'DXRATIO',NDXRATIO_ALL(KMI))
-  CALL IO_READ_FIELD(TPINIFILE,'DYRATIO',NDYRATIO_ALL(KMI))
-  CALL IO_READ_FIELD(TPINIFILE,'XOR',NXOR_ALL(KMI))
-  CALL IO_READ_FIELD(TPINIFILE,'YOR',NYOR_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'DXRATIO',NDXRATIO_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'DYRATIO',NDYRATIO_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'XOR',NXOR_ALL(KMI))
+  CALL IO_Field_read(TPINIFILE,'YOR',NYOR_ALL(KMI))
   NXEND_ALL(KMI)=NXOR_ALL(KMI)-1 + NIMAX_ll/NDXRATIO_ALL(KMI) +2*JPHEXT
   NYEND_ALL(KMI)=NYOR_ALL(KMI)-1 + NJMAX_ll/NDYRATIO_ALL(KMI) +2*JPHEXT
 ELSE
@@ -273,7 +272,7 @@ IF (KMI == 1) THEN
     CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_SIZE_n','this is a 2D simulation: it has to be performed in monoprocess mode')
   ENDIF
 !
-  CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+  CALL IO_Pack_set(L1D,L2D,LPACK)
 !
 END IF
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90
index 93075f50a..e18f019a1 100644
--- a/src/MNH/ini_spectren.f90
+++ b/src/MNH/ini_spectren.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
        SUBROUTINE INI_SPECTRE_n(KMI,TPINIFILE)
 !
-       USE MODD_IO_ll, ONLY: TFILEDATA
+       USE MODD_IO, ONLY: TFILEDATA
 !
        INTEGER,           INTENT(IN) :: KMI       ! Model index 
        TYPE(TFILEDATA),   INTENT(IN) :: TPINIFILE ! Initial file
@@ -71,7 +71,7 @@ USE MODD_FRC_n
 USE MODD_GET_n
 USE MODD_GRID,          ONLY: XLONORI,XLATORI
 USE MODD_GRID_n
-USE MODD_IO_ll,         ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
 USE MODD_LUNIT_n,       ONLY: COUTFILE, TLUOUT
@@ -106,9 +106,8 @@ USE MODD_TURB_n
 USE MODD_VAR_ll,        ONLY: IP
 !
 USE MODD_ARGSLIST_ll,   ONLY: LIST_ll
-USE MODE_FMREAD
 USE MODE_GATHER_ll
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
@@ -221,8 +220,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,")"
@@ -742,27 +741,27 @@ NDT_2_WAY(KMI)=4
 
 IF (LSPECTRE_U) THEN
   ALLOCATE(XUT(IIU,IJU,IKU))      ; XUT  = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'UT',XUT)
+  CALL IO_Field_read(TPINIFILE,'UT',XUT)
 END IF
 !
 IF (LSPECTRE_V) THEN
   ALLOCATE(XVT(IIU,IJU,IKU))      ; XVT  = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'VT',XVT)
+  CALL IO_Field_read(TPINIFILE,'VT',XVT)
 END IF
 !
 IF (LSPECTRE_W) THEN  
   ALLOCATE(XWT(IIU,IJU,IKU))      ; XWT  = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'WT',XWT)
+  CALL IO_Field_read(TPINIFILE,'WT',XWT)
 END IF
 !
 IF (LSPECTRE_TH) THEN
   ALLOCATE(XTHT(IIU,IJU,IKU))     ; XTHT = 0.0
-  CALL IO_READ_FIELD(TPINIFILE,'THT',XTHT)
+  CALL IO_Field_read(TPINIFILE,'THT',XTHT)
 END IF
 !
 IF (LSPECTRE_RV) THEN
   ALLOCATE(XRT(IIU,IJU,IKU,NRR))
-  CALL IO_READ_FIELD(TPINIFILE,'RVT',XRT(:,:,:,1))
+  CALL IO_Field_read(TPINIFILE,'RVT',XRT(:,:,:,1))
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/ini_surf_rad.f90 b/src/MNH/ini_surf_rad.f90
index e3c30fdf8..a6c4934e7 100644
--- a/src/MNH/ini_surf_rad.f90
+++ b/src/MNH/ini_surf_rad.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -11,7 +11,7 @@ INTERFACE
 !
     SUBROUTINE INI_SURF_RAD(TPINIFILE, PDIR_ALB, PSCA_ALB, PEMIS, PTSRAD)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
 REAL, DIMENSION(:,:,:), INTENT(OUT) :: PDIR_ALB  ! Direct albedo
@@ -63,10 +63,10 @@ END MODULE MODI_INI_SURF_RAD
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 !
-USE MODE_FIELD, ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: FIND_FIELD_ID_FROM_MNHNAME, TFIELDDATA, TFIELDLIST
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -85,17 +85,17 @@ INTEGER           :: IID, IRESP
 TYPE(TFIELDDATA)  :: TZFIELD
 !-------------------------------------------------------------------------------
 !
-CALL IO_READ_FIELD(TPINIFILE,'DIR_ALB',PDIR_ALB)
-CALL IO_READ_FIELD(TPINIFILE,'SCA_ALB',PSCA_ALB)
+CALL IO_Field_read(TPINIFILE,'DIR_ALB',PDIR_ALB)
+CALL IO_Field_read(TPINIFILE,'SCA_ALB',PSCA_ALB)
 !
 CALL PRINT_MSG(NVERB_INFO,'IO','INI_SURF_RAD','EMIS: reading only first band (copy on others)')
 CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS',IID,IRESP)
 TZFIELD = TFIELDLIST(IID)
 TZFIELD%NDIMS = 2
-CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PEMIS(:,:,1))
+CALL IO_Field_read(TPINIFILE,TZFIELD,PEMIS(:,:,1))
 PEMIS(:,:,:) = SPREAD(SOURCE=PEMIS(:,:,1),DIM=3,NCOPIES=SIZE(PEMIS,3))
 !
-CALL IO_READ_FIELD(TPINIFILE,'TSRAD',PTSRAD)
+CALL IO_Field_read(TPINIFILE,'TSRAD',PTSRAD)
 !  
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90
index 887733ede..3d8f08596 100644
--- a/src/MNH/ini_surfstationn.f90
+++ b/src/MNH/ini_surfstationn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #########################
@@ -68,7 +68,7 @@ END MODULE MODI_INI_SURFSTATION_n
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!
 !! --------------------------------------------------------------------------
-!       
+!
 !*      0. DECLARATIONS
 !          ------------
 !
@@ -82,7 +82,6 @@ USE MODD_STATION_n
 USE MODD_TYPE_DATE
 !
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/init_for_convlfi.f90 b/src/MNH/init_for_convlfi.f90
index d302211ec..733aa93ca 100644
--- a/src/MNH/init_for_convlfi.f90
+++ b/src/MNH/init_for_convlfi.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -11,7 +11,7 @@ MODULE MODI_INIT_FOR_CONVLFI
 INTERFACE
       SUBROUTINE INIT_FOR_CONVLFI(TPINIFILE)
 !
-USE MODD_IO_ll,ONLY: TFILEDATA
+USE MODD_IO,ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)    :: TPINIFILE   ! file being read
 !
@@ -66,7 +66,7 @@ END MODULE MODI_INIT_FOR_CONVLFI
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll,ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_CST
@@ -74,20 +74,19 @@ USE MODD_DIM_n
 USE MODD_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_LUNIT_n,       ONLY: TLUOUT
 USE MODD_TIME
 USE MODD_TIME_n
-USE MODD_VAR_ll, ONLY : NPROC
+USE MODD_VAR_ll,        ONLY: NPROC
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_TIME
 USE MODE_GRIDPROJ
 USE MODE_GRIDCART
 !
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_GATHER_ll
-USE MODE_IO_ll
+USE MODE_IO,            only: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 !
 USE MODI_INI_CST
@@ -127,39 +126,39 @@ TYPE(TFIELDDATA)    :: TZFIELD
 !
 !*       1.1   Read the geometry kind in the LFIFM file (Cartesian or spherical)
 !
-CALL IO_READ_FIELD(TPINIFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_read(TPINIFILE,'CARTESIAN',LCARTESIAN)
 !
 !*       1.2  Read configuration and dimensions in initial file and initialize
 !             subdomain dimensions and parallel variables
 !
-CALL IO_READ_FIELD(TPINIFILE,'IMAX',NIMAX_ll)
-CALL IO_READ_FIELD(TPINIFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_read(TPINIFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_read(TPINIFILE,'JMAX',NJMAX_ll)
 !
-CALL IO_READ_FIELD(TPINIFILE,'L1D',L1D,IRESP)
+CALL IO_Field_read(TPINIFILE,'L1D',L1D,IRESP)
 IF (IRESP/=0) THEN
   L1D=.FALSE.
   IF( (NIMAX_ll == 1).AND.(NJMAX_ll == 1) ) L1D=.TRUE.
 ENDIF  
 !
-CALL IO_READ_FIELD(TPINIFILE,'L2D',L2D,IRESP)
+CALL IO_Field_read(TPINIFILE,'L2D',L2D,IRESP)
 IF (IRESP/=0) THEN
   L2D=.FALSE.
   IF( (NIMAX_ll /= 1).AND.(NJMAX_ll == 1) ) L2D=.TRUE.
 ENDIF  
 !
-CALL IO_READ_FIELD(TPINIFILE,'PACK',LPACK,IRESP)
+CALL IO_Field_read(TPINIFILE,'PACK',LPACK,IRESP)
 IF (IRESP/=0) LPACK=.TRUE.
 !
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 !
-CALL IO_READ_FIELD(TPINIFILE,'KMAX',NKMAX)
+CALL IO_Field_read(TPINIFILE,'KMAX',NKMAX)
 !
 CSPLIT ='BSPLITTING' ; NHALO = 1
 CALL SET_SPLITTING_ll(CSPLIT)
 CALL SET_JP_ll(1,JPHEXT,JPVEXT, NHALO)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX)
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_LBX_ll('OPEN', 1)
 CALL SET_LBY_ll('OPEN', 1)
 CALL SET_XRATIO_ll(1, 1)
@@ -185,27 +184,27 @@ CALL GET_DIM_PHYS_ll('B',NIMAX,NJMAX)
 !
 !        2.1  reading
 !
-CALL IO_READ_FIELD(TPINIFILE,'LAT0',XLAT0)
-CALL IO_READ_FIELD(TPINIFILE,'LON0',XLON0)
-CALL IO_READ_FIELD(TPINIFILE,'BETA',XBETA)
-CALL IO_READ_FIELD(TPINIFILE,'XHAT',XXHAT)
-CALL IO_READ_FIELD(TPINIFILE,'YHAT',XYHAT)
+CALL IO_Field_read(TPINIFILE,'LAT0',XLAT0)
+CALL IO_Field_read(TPINIFILE,'LON0',XLON0)
+CALL IO_Field_read(TPINIFILE,'BETA',XBETA)
+CALL IO_Field_read(TPINIFILE,'XHAT',XXHAT)
+CALL IO_Field_read(TPINIFILE,'YHAT',XYHAT)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'RPK',XRPK)
-  CALL IO_READ_FIELD(TPINIFILE,'LONORI',XLONORI)
-  CALL IO_READ_FIELD(TPINIFILE,'LATORI',XLATORI)
+  CALL IO_Field_read(TPINIFILE,'RPK',XRPK)
+  CALL IO_Field_read(TPINIFILE,'LONORI',XLONORI)
+  CALL IO_Field_read(TPINIFILE,'LATORI',XLATORI)
   !
   IF (TPINIFILE%NMNHVERSION(1)<4 .OR. (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)<=5)) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XLONORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XLONORI)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XLATORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,XLATORI)
     !
     ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT))
     CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !//
@@ -220,29 +219,29 @@ IF (.NOT.LCARTESIAN) THEN
 END IF
 !
 ALLOCATE(XZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'ZS',XZS,IRESP)
+CALL IO_Field_read(TPINIFILE,'ZS',XZS,IRESP)
 IF (IRESP/=0) XZS(:,:)=0.
 !
 ALLOCATE(XZSMT(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'ZSMT',XZSMT,IRESP)
+CALL IO_Field_read(TPINIFILE,'ZSMT',XZSMT,IRESP)
 IF (IRESP/=0) XZSMT(:,:)=XZS(:,:)
 !
 ALLOCATE(XZHAT(IKU))
-CALL IO_READ_FIELD(TPINIFILE,'ZHAT',XZHAT)
-CALL IO_READ_FIELD(TPINIFILE,'ZTOP',XZTOP)
+CALL IO_Field_read(TPINIFILE,'ZHAT',XZHAT)
+CALL IO_Field_read(TPINIFILE,'ZTOP',XZTOP)
 !
-CALL IO_READ_FIELD(TPINIFILE,'SLEVE',LSLEVE,IRESP)
+CALL IO_Field_read(TPINIFILE,'SLEVE',LSLEVE,IRESP)
 IF (IRESP/=0) LSLEVE = .FALSE.
 !
 IF (LSLEVE) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'LEN1',XLEN1)
-  CALL IO_READ_FIELD(TPINIFILE,'LEN2',XLEN2)
+  CALL IO_Field_read(TPINIFILE,'LEN1',XLEN1)
+  CALL IO_Field_read(TPINIFILE,'LEN2',XLEN2)
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'DTEXP',TDTEXP)
-CALL IO_READ_FIELD(TPINIFILE,'DTMOD',TDTMOD)
-CALL IO_READ_FIELD(TPINIFILE,'DTSEG',TDTSEG)
-CALL IO_READ_FIELD(TPINIFILE,'DTCUR',TDTCUR)
+CALL IO_Field_read(TPINIFILE,'DTEXP',TDTEXP)
+CALL IO_Field_read(TPINIFILE,'DTMOD',TDTMOD)
+CALL IO_Field_read(TPINIFILE,'DTSEG',TDTSEG)
+CALL IO_Field_read(TPINIFILE,'DTCUR',TDTCUR)
 !
 YTITLE='CURRENT DATE AND TIME'
 CALL SM_PRINT_TIME(TDTCUR,TLUOUT,YTITLE)
@@ -271,7 +270,7 @@ END IF
 !*       3.    INITIALIZE THE PROGNOSTIC AND SURFACE FIELDS (read_field)
 !              --------------------------------------------
 ALLOCATE(XPABST(IIU,IJU,IKU))
-CALL IO_READ_FIELD(TPINIFILE,'PABST',XPABST)
+CALL IO_Field_read(TPINIFILE,'PABST',XPABST)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/init_ground_paramn.f90 b/src/MNH/init_ground_paramn.f90
index 95a5bcee7..f8e37bd5a 100644
--- a/src/MNH/init_ground_paramn.f90
+++ b/src/MNH/init_ground_paramn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -74,7 +74,6 @@ END MODULE MODI_INIT_GROUND_PARAM_n
 !              ------------
 !
 USE MODE_DATETIME
-USE MODE_IO_ll
 USE MODE_FIELD
 USE MODE_ll
 !
diff --git a/src/MNH/init_mnh.f90 b/src/MNH/init_mnh.f90
index debf3b7a0..18c169617 100644
--- a/src/MNH/init_mnh.f90
+++ b/src/MNH/init_mnh.f90
@@ -77,7 +77,7 @@
 !              ------------
 USE MODD_CONF
 USE MODD_DYN_n, ONLY: CPRESOPT,NITR ! only for spawning purpose
-USE MODD_IO_ll, ONLY: TFILE_OUTPUTLISTING,TPTR2FILE
+USE MODD_IO,    ONLY: TFILE_OUTPUTLISTING, TPTR2FILE
 USE MODD_LBC_n, ONLY: CLBCX,CLBCY   ! only for spawning purpose
 USE MODD_LUNIT
 USE MODD_LUNIT_n
@@ -85,9 +85,8 @@ USE MODD_MNH_SURFEX_n
 USE MODD_PARAMETERS
 !
 USE MODE_FIELD
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_SPLITTINGZ_ll
@@ -127,8 +126,8 @@ CHARACTER(LEN=4), DIMENSION(:), POINTER :: DPTR_CLBCX,DPTR_CLBCY
 !
 !
 IF (CPROGRAM/='REAL  ') THEN
-  CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-  CALL IO_FILE_OPEN_ll(TLUOUT0)
+  CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+  CALL IO_File_open(TLUOUT0)
   !Set output file for PRINT_MSG
   TFILE_OUTPUTLISTING => TLUOUT0
   ILUOUT0=TLUOUT0%NLU
diff --git a/src/MNH/khko_notadjust.f90 b/src/MNH/khko_notadjust.f90
index a1cf0d41e..2cd179fc5 100644
--- a/src/MNH/khko_notadjust.f90
+++ b/src/MNH/khko_notadjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -15,7 +15,7 @@ INTERFACE
                                 PTHS, PRVS, PRCS, PRRS, PCCS, PCNUCS, PSAT,         &
                                 PCLDFR, PSRCS, PNPRO,PSSPRO                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KRR      ! Number of moist variables
 INTEGER,                  INTENT(IN)    :: KTCOUNT      ! Number of moist variables
@@ -99,7 +99,7 @@ END MODULE MODI_KHKO_NOTADJUST
 USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_NSV,             ONLY: NSV_C2R2BEG
 USE MODD_PARAMETERS
@@ -107,8 +107,7 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: XRTMIN
 
 !
 USE MODE_FIELD,           ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
-USE MODE_IO_ll
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_BUDGET
@@ -391,7 +390,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   TZFIELD%CMNHNAME   = 'ACT_OD'
   TZFIELD%CSTDNAME   = ''
@@ -403,7 +402,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZACT)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZACT)
 END IF
 !
 !*       7.  STORE THE BUDGET TERMS
diff --git a/src/MNH/latlon_to_xy.f90 b/src/MNH/latlon_to_xy.f90
index c79760c69..0b6d8b658 100644
--- a/src/MNH/latlon_to_xy.f90
+++ b/src/MNH/latlon_to_xy.f90
@@ -55,28 +55,28 @@
 !!    no transfer of the file when closing   Dec. 09, 1996 (V.Masson)
 !!    + changes call to READ_HGRID
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_GRID      
-USE MODD_IO_ll,  ONLY: TFILEDATA
+USE MODD_GRID
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
-USE MODE_FM
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 !
 USE MODI_INI_CST
 USE MODI_READ_HGRID
 !
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
 !
 IMPLICIT NONE
 !
@@ -119,22 +119,22 @@ CALL INI_CST
 !*    2.     Reading of namelist file
 !            ------------------------
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'LATLON2XY1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 INAM=TZNMLFILE%NLU
 READ(INAM,NAM_INIFILE)
 !
 READ(INAM,NAM_CONFIO)
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !*    1.     Opening of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_ADD2LIST(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2)
-CALL IO_FILE_OPEN_ll(TZINIFILE)
+CALL IO_File_add2list(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2)
+CALL IO_File_open(TZINIFILE)
 !
 !*    2.     Reading of MESONH file
 !            ----------------------
@@ -144,7 +144,7 @@ CALL READ_HGRID(0,TZINIFILE,YNAME,YDAD,YSTORAGE_TYPE)
 !*    3.     Closing of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZINIFILE)
+CALL IO_File_close(TZINIFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/les_specn.f90 b/src/MNH/les_specn.f90
index be4c3b404..d95300068 100644
--- a/src/MNH/les_specn.f90
+++ b/src/MNH/les_specn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -58,7 +58,7 @@ CONTAINS
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,    ONLY: TFILEDATA
 USE MODD_LBC_n, ONLY: CLBCX, CLBCY
 USE MODD_LES
 USE MODD_LES_n
diff --git a/src/MNH/lima.f90 b/src/MNH/lima.f90
index d9149be2a..ea0244c42 100644
--- a/src/MNH/lima.f90
+++ b/src/MNH/lima.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !      ######spl
 MODULE MODI_LIMA
@@ -18,7 +18,7 @@ INTERFACE
                      PINPRC, PINDEP, PINPRR, PINPRI, PINPRS, PINPRG, PINPRH, &
                      PEVAP3D                                         )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KKA   !near ground array index  
 INTEGER,                  INTENT(IN)    :: KKU   !uppest atmosphere array index
@@ -99,8 +99,8 @@ END MODULE MODI_LIMA
 !!
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_CLOUDPAR_n,     ONLY : NSPLITR, NSPLITG
 USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
 USE MODD_PARAM_LIMA,     ONLY : LCOLD, LRAIN, LWARM, NMOD_CCN, NMOD_IFN, NMOD_IMM, LHHONI,      &
diff --git a/src/MNH/lima_adjust.f90 b/src/MNH/lima_adjust.f90
index 7d20f4f44..2f0957ca1 100644
--- a/src/MNH/lima_adjust.f90
+++ b/src/MNH/lima_adjust.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -15,7 +15,7 @@ INTERFACE
                              PRT, PRS, PSVT, PSVS,                             &
                              PTHS, PSRCS, PCLDFR                               )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)   :: KRR        ! Number of moist variables
 INTEGER,                  INTENT(IN)   :: KMI        ! Model index 
@@ -144,8 +144,8 @@ END MODULE MODI_LIMA_ADJUST
 USE MODD_BUDGET
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_NSV
 USE MODD_PARAMETERS
 USE MODD_PARAM_LIMA
@@ -153,9 +153,8 @@ USE MODD_PARAM_LIMA_COLD
 USE MODD_PARAM_LIMA_MIXED
 USE MODD_PARAM_LIMA_WARM
 !
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODE_FIELD,            ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
 !
 USE MODI_BUDGET
 USE MODI_CONDENS
@@ -1133,7 +1132,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
 !
@@ -1188,7 +1187,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
 END IF
 !
 !
diff --git a/src/MNH/lima_ccn_activation.f90 b/src/MNH/lima_ccn_activation.f90
index 884c98379..4b6d1c348 100644
--- a/src/MNH/lima_ccn_activation.f90
+++ b/src/MNH/lima_ccn_activation.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !      ###############################
        MODULE MODI_LIMA_CCN_ACTIVATION
@@ -10,7 +10,7 @@ INTERFACE
    SUBROUTINE LIMA_CCN_ACTIVATION (PTSTEP, TPFILE, OCLOSE_OUT,                 &
                                    PRHODREF, PEXNREF, PPABST, ZT, ZTM, PW_NU,   &
                                    PTHT, PRVT, PRCT, PCCT, PRRT, PNFT, PNAT     )
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
                                                       ! (single if cold start)
@@ -92,20 +92,19 @@ END MODULE MODI_LIMA_CCN_ACTIVATION
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
-USE MODD_CST,             ONLY : XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
-USE MODD_PARAM_LIMA,      ONLY : LACTIT, NMOD_CCN, XKHEN_MULTI, XCTMIN, XLIMIT_FACTOR
-USE MODD_PARAM_LIMA_WARM, ONLY : XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, &
-                                 XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XPSI1
+USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT
+USE MODD_CST,             ONLY: XALPW, XBETAW, XCL, XCPD, XCPV, XGAMW, XLVTT, XMD, XMV, XRV, XTT
+USE MODD_PARAM_LIMA,      ONLY: LACTIT, NMOD_CCN, XKHEN_MULTI, XCTMIN, XLIMIT_FACTOR
+USE MODD_PARAM_LIMA_WARM, ONLY: XWMIN, NAHEN, NHYP, XAHENINTP1, XAHENINTP2, XCSTDCRIT, XHYPF12, &
+                                XHYPINTP1, XHYPINTP2, XTMIN, XHYPF32, XPSI3, XAHENG, XPSI1
 !
 USE MODI_GAMMA
 USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n,         ONLY : TLUOUT
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODD_IO,              ONLY: TFILEDATA
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODE_FIELD,           ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -467,7 +466,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
   !
   TZFIELD%CMNHNAME   ='NACT'
   TZFIELD%CSTDNAME   = ''
@@ -479,7 +478,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW2)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
 END IF
 !
 !
diff --git a/src/MNH/lima_nucleation_procs.f90 b/src/MNH/lima_nucleation_procs.f90
index f18b78589..e3efc478d 100644
--- a/src/MNH/lima_nucleation_procs.f90
+++ b/src/MNH/lima_nucleation_procs.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2018-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !      ###############################
        MODULE MODI_LIMA_NUCLEATION_PROCS
 !      ###############################
@@ -13,7 +14,7 @@ INTERFACE
                                      PCCT, PCRT, PCIT,                             &
                                      PNFT, PNAT, PIFT, PINT, PNIT, PNHT            )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
 TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
@@ -78,7 +79,7 @@ USE MODD_BUDGET,     ONLY : LBU_ENABLE, LBUDGET_TH, LBUDGET_RV, LBUDGET_RC, LBUD
 USE MODD_NSV,        ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_FREE,               &
                             NSV_LIMA_NI, NSV_LIMA_IFN_FREE
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODI_BUDGET
 USE MODI_LIMA_CCN_ACTIVATION
 USE MODI_LIMA_PHILLIPS_IFN_NUCLEATION
diff --git a/src/MNH/lima_warm.f90 b/src/MNH/lima_warm.f90
index 35961b3ba..1ac67f3ce 100644
--- a/src/MNH/lima_warm.f90
+++ b/src/MNH/lima_warm.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      #####################
@@ -16,7 +16,7 @@ INTERFACE
                             PTHS, PRS, PSVS,                              &
                             PINPRC, PINPRR, PINDEP, PINPRR3D, PEVAP3D     )
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 !
 LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
                                                       ! activation by radiative
@@ -144,14 +144,11 @@ USE MODD_NSV
 USE MODD_BUDGET
 USE MODI_BUDGET
 !
-USE MODE_FM
-USE MODE_FMWRIT
-!
 USE MODI_LIMA_WARM_SEDIMENTATION
 USE MODI_LIMA_WARM_NUCL
 USE MODI_LIMA_WARM_COAL
 USE MODI_LIMA_WARM_EVAP
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 !
 IMPLICIT NONE
diff --git a/src/MNH/lima_warm_nucl.f90 b/src/MNH/lima_warm_nucl.f90
index 66b235e48..71974fc8c 100644
--- a/src/MNH/lima_warm_nucl.f90
+++ b/src/MNH/lima_warm_nucl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2013-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2013-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ##########################
@@ -13,7 +13,7 @@ INTERFACE
                                  PRCM, PRVT, PRCT, PRRT,                          &
                                  PTHS, PRVS, PRCS, PCCS, PNFS, PNAS               )
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 !
 LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
                                                       ! activation by radiative
@@ -108,19 +108,18 @@ END MODULE MODI_LIMA_WARM_NUCL
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_PARAMETERS,     ONLY : JPHEXT, JPVEXT
+USE MODD_PARAMETERS,      ONLY : JPHEXT, JPVEXT
 USE MODD_CST
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_LIMA_WARM
 !
 USE MODI_GAMMA
-USE MODI_LIMA_FUNCTIONS, ONLY : COUNTJV
+USE MODI_LIMA_FUNCTIONS,  ONLY : COUNTJV
 !
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
+USE MODD_IO,              ONLY: TFILEDATA
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODE_FIELD,           ONLY : TFIELDDATA, TYPEREAL
 !
 IMPLICIT NONE
 !
@@ -132,7 +131,7 @@ LOGICAL,                  INTENT(IN)    :: OACTIT     ! Switch to activate the
 REAL,                     INTENT(IN)    :: PTSTEP     ! Double Time step
                                                       ! (single if cold start)
 INTEGER,                  INTENT(IN)    :: KMI        ! Model index 
-TYPE(TFILEDATA),          INTENT(IN)   :: TPFILE     ! Output file
+TYPE(TFILEDATA),          INTENT(IN)    :: TPFILE     ! Output file
 LOGICAL,                  INTENT(IN)    :: OCLOSE_OUT ! Conditional closure of 
                                                       ! the output FM file
 !
@@ -535,7 +534,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW)
   !
   TZFIELD%CMNHNAME   ='NACT'
   TZFIELD%CSTDNAME   = ''
@@ -547,7 +546,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZW2)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZW2)
 END IF
 !
 !
diff --git a/src/MNH/lochead.f90 b/src/MNH/lochead.f90
index d77bbadba..5bb77e10e 100644
--- a/src/MNH/lochead.f90
+++ b/src/MNH/lochead.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###################
@@ -77,9 +77,9 @@ END MODULE MODI_LOCHEAD
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_IO_ll,            ONLY : TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_FIND_BYNAME
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
 !
 IMPLICIT NONE
 !
@@ -125,7 +125,7 @@ TYPE(TFILEDATA),POINTER    :: TZFILE
 !-------------------------------------------------------------------------------
 !
 IF (ODATASAVE) THEN
-  CALL IO_FILE_FIND_BYNAME(HSAVEDDATAFILE,TZFILE,IRESP)
+  CALL IO_File_find_byname(HSAVEDDATAFILE,TZFILE,IRESP)
   ISAVE = TZFILE%NLU
 END IF
 !
diff --git a/src/MNH/ls_coupling.f90 b/src/MNH/ls_coupling.f90
index b2d17436a..8b9430d83 100644
--- a/src/MNH/ls_coupling.f90
+++ b/src/MNH/ls_coupling.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ############################## 
@@ -124,8 +124,8 @@ END MODULE MODI_LS_COUPLING
 !!
 !!    EXTERNAL
 !!    --------
-!!      IO_READ_FIELD : to read data in file
-!!      IO_FILE_CLOSE_ll : to close a file
+!!      IO_Field_read : to read data in file
+!!      IO_File_close : to close a file
 !!      INI_LS      : to initialize larger scale fields
 !!      INI_LB      : to initialize "2D" surfacic LB fields 
 !!
@@ -186,9 +186,8 @@ USE MODD_PASPOL
 #endif
 USE MODD_CH_MNHC_n
 !
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ, only: IO_Field_read
+USE MODE_IO_FILE,       only: IO_File_close
 USE MODE_MSG
 !
 USE MODI_INI_LS
@@ -274,9 +273,9 @@ LOGICAL               :: GLSOURCE ! switch for the source term (for ini_ls and i
 !
 !*      1.1  Check dimensions
 !
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
-CALL IO_READ_FIELD(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TCPLFILE(NCPL_CUR)%TZFILE,'KMAX',IKMAX)
 !
 IKU=SIZE(PLSTHM,3)
 !
@@ -345,7 +344,7 @@ CALL INI_LB(TCPLFILE(NCPL_CUR)%TZFILE,GLSOURCE,KSV,                   &
 !
 !*      1.4  Close the coupling file
 !
-CALL IO_FILE_CLOSE_ll(TCPLFILE(NCPL_CUR)%TZFILE)
+CALL IO_File_close(TCPLFILE(NCPL_CUR)%TZFILE)
 !
 !-------------------------------------------------------------------------------
 
diff --git a/src/MNH/menu_diachro.f90 b/src/MNH/menu_diachro.f90
index b9147f3b2..7cf66861c 100644
--- a/src/MNH/menu_diachro.f90
+++ b/src/MNH/menu_diachro.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################################################
@@ -54,11 +54,11 @@
 !              ------------
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             only: TFILEDATA
 !
 USE MODE_FIELD
-USE MODE_FMREAD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -103,7 +103,7 @@ IF(HGROUP == 'END')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ILENG)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,ILENG)
 
   ALLOCATE(ITABCHAR(ILENG))
   DO JJ=1,IGROUP
@@ -122,7 +122,7 @@ IF(HGROUP == 'END')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,ITABCHAR)
 
   DEALLOCATE(ITABCHAR)
 
@@ -138,7 +138,7 @@ ELSE IF(HGROUP == 'READ')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPDIAFILE,TZFIELD,ILENG,IRESPDIA)
+  CALL IO_Field_read(TPDIAFILE,TZFIELD,ILENG,IRESPDIA)
   IF(IRESPDIA == -47)THEN
 !   print *,' No record MENU_BUDGET '
     LPACK=GPACK
@@ -156,7 +156,7 @@ ELSE IF(HGROUP == 'READ')THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+  CALL IO_Field_read(TPDIAFILE,TZFIELD,ITABCHAR)
   IGROUP=ILENG/NMNHNAMELGTMAX
   DO JJ=1,IGROUP
     DO J = 1,NMNHNAMELGTMAX
diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90
index b058f104f..8964d79d1 100644
--- a/src/MNH/mesonh.f90
+++ b/src/MNH/mesonh.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -90,14 +90,14 @@
 USE MODD_CONF
 USE MODD_NESTING
 USE MODD_CONF_n
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG
+USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG
 !
 USE MODI_MODEL_n
 USE MODI_KID_MODEL
 !
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_MANAGE_STRUCT, only: IO_Filelist_print
 USE MODE_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_PRINT_LIST
 USE MODE_MODELN_HANDLER
 !
 USE MODI_VERSION
@@ -144,7 +144,7 @@ CALL GOTO_MODEL(1,ONOFIELDLIST=.TRUE.)
   CALL SFX_OASIS_INIT(CNAMELIST, NMNH_COMM_WORLD)
 #endif
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 CALL VERSION
 CPROGRAM='MESONH'
@@ -213,7 +213,7 @@ DO
   !
 END DO
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnh2lpdm.f90 b/src/MNH/mnh2lpdm.f90
index 77ff393c7..08b1957a2 100644
--- a/src/MNH/mnh2lpdm.f90
+++ b/src/MNH/mnh2lpdm.f90
@@ -13,7 +13,7 @@
 !       Modification  : 07.01.2006 (T.LAUVAUX, adaptation LPDM)
 !       Modification  : 04.01.2009 (F. BONNARDOT, DP/SER/ENV )
 !  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !
 !-----------------------------------------------------------------------------
 !
@@ -25,12 +25,12 @@
 !*	0.1 Modules.
 !
 USE MODD_CONF,             ONLY : CPROGRAM
-USE MODD_IO_ll,            ONLY : TFILEDATA,TPTR2FILE
+USE MODD_IO,               ONLY : TFILEDATA,TPTR2FILE
 USE MODD_MNH2LPDM
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_IO_ll,            ONLY: INITIO_ll,SET_CONFIO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO,               ONLY: IO_Init, IO_Config_set
+USE MODE_IO_FILE,          ONLY: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MODELN_HANDLER
 USE MODE_POS
 !
@@ -74,19 +74,19 @@ CALL GOTO_MODEL(1)
 !
 !*	1.2 Initialisation routines LL.
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 !
 !*	1.3 Ouverture du fichier log.
 !
-CALL IO_FILE_ADD2LIST(TZLOGFILE,YFLOG,'TXT','WRITE')
-CALL IO_FILE_OPEN_ll(TZLOGFILE)
+CALL IO_File_add2list(TZLOGFILE,YFLOG,'TXT','WRITE')
+CALL IO_File_open(TZLOGFILE)
 !
 !
 !*	1.4 Lecture des namelists.
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,YFNML,'NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,YFNML,'NML','READ')
+CALL IO_File_open(TZNMLFILE)
 IFNML = TZNMLFILE%NLU
 
 READ(UNIT=IFNML,NML=NAM_TURB)
@@ -100,18 +100,18 @@ END IF
 LCDF4 = .FALSE.
 LLFIOUT  = .FALSE.
 LLFIREAD = .FALSE.
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !
 !*	1.5 Comptage des FM a traiter.
 !
 IF (LEN_TRIM(CFMNH(1))>0) THEN
    NBMNH=1
-   CALL IO_FILE_ADD2LIST(TZFMNH(1)%TZFILE,TRIM(CFMNH(1)),'MNH','READ',KLFITYPE=2,KLFIVERB=IVERB)
+   CALL IO_File_add2list(TZFMNH(1)%TZFILE,TRIM(CFMNH(1)),'MNH','READ',KLFITYPE=2,KLFIVERB=IVERB)
    DO WHILE (CFMNH(NBMNH+1).NE.'VIDE')
       NBMNH=NBMNH+1
-      CALL IO_FILE_ADD2LIST(TZFMNH(NBMNH)%TZFILE,TRIM(CFMNH(NBMNH)),'MNH','READ',KLFITYPE=2,KLFIVERB=IVERB)
+      CALL IO_File_add2list(TZFMNH(NBMNH)%TZFILE,TRIM(CFMNH(NBMNH)),'MNH','READ',KLFITYPE=2,KLFIVERB=IVERB)
    END DO
    print *,NBMNH,' fichiers a traiter.'
 ELSE
@@ -126,10 +126,10 @@ ENDIF
 !
 !*	2.1 Ouverture des fichiers METEO et GRILLE et DATE.
 !
-CALL IO_FILE_ADD2LIST(TZGRIDFILE,CFGRI,'TXT','WRITE')
-CALL IO_FILE_OPEN_ll(TZGRIDFILE)
-CALL IO_FILE_ADD2LIST(TZDATEFILE,CFDAT,'TXT','WRITE')
-CALL IO_FILE_OPEN_ll(TZDATEFILE)
+CALL IO_File_add2list(TZGRIDFILE,CFGRI,'TXT','WRITE')
+CALL IO_File_open(TZGRIDFILE)
+CALL IO_File_add2list(TZDATEFILE,CFDAT,'TXT','WRITE')
+CALL IO_File_open(TZDATEFILE)
 !
 !
 !*	2.2 Preparation du couplage.
@@ -141,20 +141,20 @@ CALL MNH2LPDM_INI(TZFMNH(1)%TZFILE,TZFMNH(NBMNH)%TZFILE,TZLOGFILE,TZGRIDFILE,TZD
 !
 DO JFIC=1,NBMNH
    print*,"CFMTO(JFIC)=",CFMTO(JFIC)
-   CALL IO_FILE_ADD2LIST(TZMETEOFILE,CFMTO(JFIC),'METEO','WRITE')
-   CALL IO_FILE_OPEN_ll(TZMETEOFILE)
+   CALL IO_File_add2list(TZMETEOFILE,CFMTO(JFIC),'METEO','WRITE')
+   CALL IO_File_open(TZMETEOFILE)
    CALL MNH2LPDM_ECH(TZFMNH(JFIC)%TZFILE,TZMETEOFILE)
    print*,"CLOSE_LL(CFMTO(JFIC)"
-   CALL IO_FILE_CLOSE_ll(TZMETEOFILE)
+   CALL IO_File_close(TZMETEOFILE)
    TZMETEOFILE => NULL()
 END DO
 !
 !
 !*	2.4 Fermeture des fichiers, METEO, GRILLE et LOG.
 !
-CALL IO_FILE_CLOSE_ll(TZGRIDFILE)
-CALL IO_FILE_CLOSE_ll(TZDATEFILE)
-CALL IO_FILE_CLOSE_ll(TZLOGFILE)
+CALL IO_File_close(TZGRIDFILE)
+CALL IO_File_close(TZDATEFILE)
+CALL IO_File_close(TZLOGFILE)
 !
 !
 !
diff --git a/src/MNH/mnh2lpdm_ech.f90 b/src/MNH/mnh2lpdm_ech.f90
index e7b334e84..462bd2ae4 100644
--- a/src/MNH/mnh2lpdm_ech.f90
+++ b/src/MNH/mnh2lpdm_ech.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2009-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2009-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------------
 !     ######spl
@@ -24,7 +24,7 @@
 !
 !
 USE MODD_DIM_n
-USE MODD_IO_ll,ONLY : TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_TIME_n
 USE MODD_GRID_n
 !
@@ -34,9 +34,9 @@ USE MODD_TIME
 !
 USE MODD_MNH2LPDM
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 !
 USE MODI_INI_CST
 !
@@ -76,11 +76,11 @@ IFMTO = TPMETEOFILE%NLU
 !
 !*	2.1 Ouverture du fichier Meso-NH.
 !
-CALL IO_FILE_OPEN_ll(TPFILE)
+CALL IO_File_open(TPFILE)
 !
 !*	2.2 Date et heure courante.
 !
-CALL IO_READ_FIELD(TPFILE,'DTCUR',TZDTCUR)
+CALL IO_Field_read(TPFILE,'DTCUR',TZDTCUR)
 ! 
 ICURAA=MOD(TZDTCUR%TDATE%YEAR,100)  ! Annee sur 2 caracteres.
 ICURMM=TZDTCUR%TDATE%MONTH
@@ -100,28 +100,28 @@ print 20300, ICURJJ,ICURMM,ICURAA,ICURHH,ICURMN,ICURSS
 !
 !*	2.3 Lecture des champs Meso-NH de base.
 !
-CALL IO_READ_FIELD(TPFILE,'UT',     XUT)
-CALL IO_READ_FIELD(TPFILE,'VT',     XVT)
-CALL IO_READ_FIELD(TPFILE,'WT',     XWT)
-CALL IO_READ_FIELD(TPFILE,'THT',    XTHT)
-CALL IO_READ_FIELD(TPFILE,'TKET',   XTKET)
+CALL IO_Field_read(TPFILE,'UT',     XUT)
+CALL IO_Field_read(TPFILE,'VT',     XVT)
+CALL IO_Field_read(TPFILE,'WT',     XWT)
+CALL IO_Field_read(TPFILE,'THT',    XTHT)
+CALL IO_Field_read(TPFILE,'TKET',   XTKET)
 !PW:TODO: where are these fields (LM,THW_FLX,DISS,FMU,FMV) written?
 !Warning: not in fieldlist => won't be found
-CALL IO_READ_FIELD(TPFILE,'LM',     XLM)
-CALL IO_READ_FIELD(TPFILE,'THW_FLX',XWPTHP)
-CALL IO_READ_FIELD(TPFILE,'DISS',   XDISSIP)
-CALL IO_READ_FIELD(TPFILE,'FMU',    XSFU)
-CALL IO_READ_FIELD(TPFILE,'FMV',    XSFV)
-CALL IO_READ_FIELD(TPFILE,'INPRT',  XINRT)
-CALL IO_READ_FIELD(TPFILE,'RVT',    XRMVT)
-CALL IO_READ_FIELD(TPFILE,'RCT',    XRMCT)
-CALL IO_READ_FIELD(TPFILE,'RRT',    XRMRT)
+CALL IO_Field_read(TPFILE,'LM',     XLM)
+CALL IO_Field_read(TPFILE,'THW_FLX',XWPTHP)
+CALL IO_Field_read(TPFILE,'DISS',   XDISSIP)
+CALL IO_Field_read(TPFILE,'FMU',    XSFU)
+CALL IO_Field_read(TPFILE,'FMV',    XSFV)
+CALL IO_Field_read(TPFILE,'INPRT',  XINRT)
+CALL IO_Field_read(TPFILE,'RVT',    XRMVT)
+CALL IO_Field_read(TPFILE,'RCT',    XRMCT)
+CALL IO_Field_read(TPFILE,'RRT',    XRMRT)
 !
 !              Lecture des donnees Meso-NH terminee.'
 !
 !*	2.4 Fermeture du fichier Meso-NH.
 !
-CALL IO_FILE_CLOSE_ll(TPFILE)
+CALL IO_File_close(TPFILE)
 !
 !
 !*	3.  PREPARATION DES DONNEES.
@@ -376,8 +376,8 @@ XSSFV(:,:) = XSFV(NSIB:NSIE,NSJB:NSJE)
   !
      IF (IGRILLE.EQ.2) THEN
      WRITE(YFTURB,'("TURB_LPDM",5I2.2)') ICURAA,ICURMM,ICURJJ,ICURHH,ICURMN
-     CALL IO_FILE_ADD2LIST(TZFILE,YFTURB,'TXT','WRITE')
-     CALL IO_FILE_OPEN_ll(TZFILE)
+     CALL IO_File_add2list(TZFILE,YFTURB,'TXT','WRITE')
+     CALL IO_File_open(TZFILE)
      IFTURB = TZFILE%NLU
      WRITE(UNIT=IFTURB,FMT='(5A12)') "WSTAR       ","USTAR       ", &
                                      "HMIX        ","LMO         ", &
@@ -398,7 +398,7 @@ XSSFV(:,:) = XSFV(NSIB:NSIE,NSJB:NSJE)
                                     XSTIMEU(15,15,JK),XSTIMEW(15,15,JK)
   
      ENDDO
-     CALL IO_FILE_CLOSE_ll(TZFILE)
+     CALL IO_File_close(TZFILE)
      ENDIF
 !
                
diff --git a/src/MNH/mnh2lpdm_ini.f90 b/src/MNH/mnh2lpdm_ini.f90
index f7d71da91..7c185cfde 100644
--- a/src/MNH/mnh2lpdm_ini.f90
+++ b/src/MNH/mnh2lpdm_ini.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2009-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     ######spl
         SUBROUTINE MNH2LPDM_INI(TPFILE1,TPFILE2,TPLOGFILE,TPGRIDFILE,TPDATEFILE)
@@ -33,7 +33,7 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_MNH2LPDM
 USE MODD_PARAMETERS
@@ -41,10 +41,9 @@ USE MODD_TIME
 USE MODD_TIME_n
 !
 USE MODE_DATETIME
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
+USE MODE_IO_FILE,       only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MODELN_HANDLER
 !
 USE MODI_INI_CST
@@ -100,15 +99,15 @@ CALL GOTO_MODEL(1)
 !
 !*	2.1 Ouverture du fichier Meso-NH.
 !
-CALL IO_FILE_OPEN_ll(TPFILE1)
-CALL IO_FILE_OPEN_ll(TPFILE2)
+CALL IO_File_open(TPFILE1)
+CALL IO_File_open(TPFILE2)
 !
 !
 !*      2.2 Date et heure du modele.
 !
-CALL IO_READ_FIELD(TPFILE1,'DTEXP',TZDTEXP1)
-CALL IO_READ_FIELD(TPFILE1,'DTCUR',TZDTCUR1)
-CALL IO_READ_FIELD(TPFILE2,'DTCUR',TZDTCUR2)
+CALL IO_Field_read(TPFILE1,'DTEXP',TZDTEXP1)
+CALL IO_Field_read(TPFILE1,'DTCUR',TZDTCUR1)
+CALL IO_Field_read(TPFILE2,'DTCUR',TZDTCUR2)
 !
 CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR1,ZECHEANCE1)
 CALL DATETIME_DISTANCE(TZDTEXP1,TZDTCUR2,ZECHEANCE2)
@@ -164,7 +163,7 @@ NJE=NJU-JPHEXT
 !
 !*	2.4 Nombre de niveaux-verticaux.
 !
-CALL IO_READ_FIELD(TPFILE1,'KMAX',NKMAX)
+CALL IO_Field_read(TPFILE1,'KMAX',NKMAX)
 !WRITE(IFLOG,*) '%%% MNH2S2_INI Lecture du nombre de niveau OK.'
 !
 NKU = NKMAX+2*JPVEXT
@@ -194,17 +193,17 @@ ALLOCATE( XSFV(NIU,NJU))
 !
 !*	2.6 Decoupage vertical.
 !
-CALL IO_READ_FIELD(TPFILE1,'ZHAT',XZHAT)
-CALL IO_READ_FIELD(TPFILE1,'ZTOP',XZTOP)
+CALL IO_Field_read(TPFILE1,'ZHAT',XZHAT)
+CALL IO_Field_read(TPFILE1,'ZTOP',XZTOP)
 !
 !*	2.7 Orographie. 
 !
-CALL IO_READ_FIELD(TPFILE1,'ZS',XZS)
+CALL IO_Field_read(TPFILE1,'ZS',XZS)
 !
 !*	2.8 Rugosite Z0. 
 !
 !PW:TODO: where is this field written? Warning: not in fieldlist => won't be found
-CALL IO_READ_FIELD(TPFILE1,'Z0',XZ0)
+CALL IO_Field_read(TPFILE1,'Z0',XZ0)
 !
 XXPTSOMNH=XXHAT(1)+(XXHAT(2)-XXHAT(1))/2
 XYPTSOMNH=XYHAT(1)+(XYHAT(2)-XYHAT(1))/2
@@ -435,8 +434,8 @@ DEALLOCATE(XZHAT)
 !
 !	 Fermeture du fichier Meso-NH.
 !
-CALL IO_FILE_CLOSE_ll(TPFILE1)
-CALL IO_FILE_CLOSE_ll(TPFILE2)
+CALL IO_File_close(TPFILE1)
+CALL IO_File_close(TPFILE2)
 !
 !
 !-------------------------------------------'
diff --git a/src/MNH/mnh_surf_grid_io_init.f90 b/src/MNH/mnh_surf_grid_io_init.f90
index 7c87e7fc0..3da201159 100644
--- a/src/MNH/mnh_surf_grid_io_init.f90
+++ b/src/MNH/mnh_surf_grid_io_init.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2015-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2015-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !#######################
@@ -43,19 +43,6 @@ MODULE MODI_MNH_SURF_GRID_IO_INIT
     !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
     !----------------------------------------------------------------------------
     !
-    !*    0.     DECLARATION
-    !            -----------
-    !
-    USE MODE_ll
-    USE MODE_FM
-    USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-    USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
-    !
-    USE MODE_SPLITTINGZ_ll
-    !
-    USE MODI_GET_SURF_GRID_DIM_N
-    USE MODI_GET_LUOUT
-    !
     IMPLICIT NONE
     !
     !*    0.1    Declaration of dummy arguments
@@ -105,10 +92,9 @@ END MODULE MODI_MNH_SURF_GRID_IO_INIT
 !            -----------
 !
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
+USE MODE_IO,         only: IO_Pack_set
+USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT, JPMODELMAX
+USE MODD_CONF,       ONLY: CPROGRAM, L1D, L2D, LPACK
 !
 !JUANZ
 USE MODE_SPLITTINGZ_ll
@@ -139,7 +125,7 @@ IF (CPROGRAM=='IDEAL ' .OR. CPROGRAM=='SPAWN ' .OR. CPROGRAM=='REAL  ') RETURN
 L1D=(KIMAX==1).AND.(KJMAX==1)
 L2D=(KIMAX/=1).AND.(KJMAX==1)
 LPACK=L1D.OR.L2D
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(KIMAX, KJMAX, 1)
diff --git a/src/MNH/mnhclose_aux_io_surf.f90 b/src/MNH/mnhclose_aux_io_surf.f90
index 6a1b88477..ba818000a 100644
--- a/src/MNH/mnhclose_aux_io_surf.f90
+++ b/src/MNH/mnhclose_aux_io_surf.f90
@@ -50,17 +50,16 @@ END MODULE MODI_MNHCLOSE_AUX_IO_SURF
 !!      Original    09/2003 
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_IO_SURF_MNH, ONLY: TPINFILE, CACTION, NMASK_ALL, NMASK
+!
+USE MODE_IO_FILE,     only: IO_File_close
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
-
-USE MODD_IO_SURF_MNH, ONLY : TPINFILE, CACTION, NMASK_ALL, NMASK
 !
 IMPLICIT NONE
 !
@@ -79,7 +78,7 @@ INTEGER           :: IRESP          ! return-code if a problem appears
 !-------------------------------------------------------------------------------
 !
 IF (CACTION=='OPEN  ') THEN
-  CALL IO_FILE_CLOSE_ll(TPINFILE)
+  CALL IO_File_close(TPINFILE)
   CACTION='      '
 END IF
 !
diff --git a/src/MNH/mnhclose_namelist.f90 b/src/MNH/mnhclose_namelist.f90
index 1e7544b0a..824cdb3f0 100644
--- a/src/MNH/mnhclose_namelist.f90
+++ b/src/MNH/mnhclose_namelist.f90
@@ -58,7 +58,7 @@ USE MODD_IO_NAM,           ONLY: TNAM
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll
+USE MODE_IO_FILE,          ONLY: IO_File_close
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -89,7 +89,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHCLOSE_NAMELIST','called for '//TRIM(TNAM%CNA
 !  -------------------
 !
 IF (TNAM%NLU==KLUNAM) THEN
-  CALL IO_FILE_CLOSE_ll(TNAM)
+  CALL IO_File_close(TNAM)
   TNAM => NULL()
 ELSE
   SELECT CASE(CPROGRAM)
diff --git a/src/MNH/mnhclose_write_cover_tex.f90 b/src/MNH/mnhclose_write_cover_tex.f90
index 7415fd379..c041ea0d0 100644
--- a/src/MNH/mnhclose_write_cover_tex.f90
+++ b/src/MNH/mnhclose_write_cover_tex.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################################
@@ -40,10 +40,10 @@
 !              ------------
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FILE,          ONLY: IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
 !
 !
 IMPLICIT NONE
@@ -68,8 +68,8 @@ TYPE(TFILEDATA),POINTER :: TZFILE
 TZFILE => NULL()
 !
 IF (TRIM(CPROGRAM)=='PGD') THEN
-  CALL IO_FILE_FIND_BYNAME(YTEX,TZFILE,IRESP)
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_find_byname(YTEX,TZFILE,IRESP)
+  CALL IO_File_close(TZFILE)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnhend_io_surfn.f90 b/src/MNH/mnhend_io_surfn.f90
index 3e09c9598..6a1d1c034 100644
--- a/src/MNH/mnhend_io_surfn.f90
+++ b/src/MNH/mnhend_io_surfn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #########################
@@ -52,12 +52,10 @@ END MODULE MODI_MNHEND_IO_SURF_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
-!
 USE MODD_IO_SURF_MNH, ONLY : CACTION, TPINFILE, COUTFILE, NMASK, NMASK_ALL
 !
+USE MODE_ll
+!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
diff --git a/src/MNH/mnhinit_io_surfn.f90 b/src/MNH/mnhinit_io_surfn.f90
index f242171c8..16fda8024 100644
--- a/src/MNH/mnhinit_io_surfn.f90
+++ b/src/MNH/mnhinit_io_surfn.f90
@@ -66,8 +66,6 @@ USE MODD_LUNIT_n,          ONLY: CMASK_SURFEX, TINIFILE, TINIFILEPGD, TLUOUT
 USE MODD_MNH_SURFEX_n,     ONLY: YSURF_CUR
 USE MODD_PARAMETERS,       ONLY: JPHEXT
 !
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
diff --git a/src/MNH/mnhopen_aux_io_surf.f90 b/src/MNH/mnhopen_aux_io_surf.f90
index 2c4a223fb..262a09b08 100644
--- a/src/MNH/mnhopen_aux_io_surf.f90
+++ b/src/MNH/mnhopen_aux_io_surf.f90
@@ -53,9 +53,9 @@ END MODULE MODI_MNHOPEN_AUX_IO_SURF
 !!         J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!         J.Escobar : 02/06/2016 : abort MNHOPEN with STOP if problem with OPEN of INPUT/READ file 
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -70,10 +70,9 @@ USE MODD_LUNIT,            ONLY: TPGDFILE, TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n,          ONLY: TLUOUT
 USE MODD_PARAMETERS,       ONLY: JPHEXT
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list, IO_File_find_byname
 USE MODE_MSG
 !
 USE MODI_GET_1D_MASK
@@ -141,8 +140,8 @@ ELSE
 END IF
 !
 IF (HFILE/=YFILE .AND. HFILE/=YPGDFILE) THEN
-  CALL IO_FILE_ADD2LIST(TPINFILE,TRIM(HFILE),'PGD','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.)
-  CALL IO_FILE_OPEN_ll(TPINFILE,KRESP=IRESP)
+  CALL IO_File_add2list(TPINFILE,TRIM(HFILE),'PGD','READ',KLFITYPE=2,KLFIVERB=5,OOLD=.TRUE.)
+  CALL IO_File_open(TPINFILE,KRESP=IRESP)
   !
   IF (IRESP .NE. 0) THEN
     PRINT*," /!\  MNHOPEN_AUX_IO_SURF :: FATAL PROBLEM OPENING INPUT/READ FILES =", HFILE
@@ -150,7 +149,7 @@ IF (HFILE/=YFILE .AND. HFILE/=YPGDFILE) THEN
   ENDIF
   CACTION = 'OPEN  '
 ELSE
-  CALL IO_FILE_FIND_BYNAME(TRIM(HFILE),TPINFILE,IRESP)
+  CALL IO_File_find_byname(TRIM(HFILE),TPINFILE,IRESP)
 END IF
 !
 COUTFILE = HFILE
@@ -158,11 +157,11 @@ COUTFILE = HFILE
 !
 !*       3.    initialisation of 2D arrays for entire physical field
 !
-CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
-CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
+CALL IO_Field_read(TPINFILE,'IMAX',IIMAX)
+CALL IO_Field_read(TPINFILE,'JMAX',IJMAX)
 CALL MNH_SURF_GRID_IO_INIT(IIMAX,IJMAX)
 IJPHEXT= 1
-CALL IO_READ_FIELD(TPINFILE,'JPHEXT',IJPHEXT)
+CALL IO_Field_read(TPINFILE,'JPHEXT',IJPHEXT)
 IF ( IJPHEXT .NE. JPHEXT ) THEN
    WRITE(ILUOUT,FMT=*) ' MNHOPEN_AUX_IO : JPHEXT in PRE_PGD1.nam/NAM_CONF_PGD ( or default value )&
       & JPHEXT=',JPHEXT
diff --git a/src/MNH/mnhopen_namelist.f90 b/src/MNH/mnhopen_namelist.f90
index 7820d3e0d..d594b6e5f 100644
--- a/src/MNH/mnhopen_namelist.f90
+++ b/src/MNH/mnhopen_namelist.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #############################
@@ -57,8 +57,8 @@ END MODULE MODI_MNHOPEN_NAMELIST
 USE MODD_CONF,             ONLY: CPROGRAM
 USE MODD_IO_NAM,           ONLY: TNAM
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -113,8 +113,8 @@ END IF
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','MNHOPEN_NAMELIST','called for '//TRIM(YNAM))
 !
-CALL IO_FILE_ADD2LIST(TNAM,TRIM(YNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list
-CALL IO_FILE_OPEN_ll(TNAM)
+CALL IO_File_add2list(TNAM,TRIM(YNAM),'NML','READ',OOLD=.TRUE.) !OOLD=T because the file may already be in list
+CALL IO_File_open(TNAM)
 !
 KLUNAM = TNAM%NLU
 !
diff --git a/src/MNH/mnhopen_write_cover_tex.f90 b/src/MNH/mnhopen_write_cover_tex.f90
index 73904aa62..941758e61 100644
--- a/src/MNH/mnhopen_write_cover_tex.f90
+++ b/src/MNH/mnhopen_write_cover_tex.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################################
@@ -40,10 +40,10 @@
 !              ------------
 !
 USE MODD_CONF,             ONLY: CPROGRAM
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 !
 !
 IMPLICIT NONE
@@ -67,8 +67,8 @@ TYPE(TFILEDATA),POINTER :: TZFILE
 TZFILE => NULL()
 !
 IF (TRIM(CPROGRAM)=='PGD') THEN
-  CALL IO_FILE_ADD2LIST(TZFILE,YTEX,'TXT','WRITE')
-  CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND')
+  CALL IO_File_add2list(TZFILE,YTEX,'TXT','WRITE')
+  CALL IO_File_open(TZFILE,HPOSITION='REWIND')
   KTEX = TZFILE%NLU
 ELSE
   KTEX=0
diff --git a/src/MNH/mnhread_zs_dummyn.f90 b/src/MNH/mnhread_zs_dummyn.f90
index 94376de62..eb5eb084a 100644
--- a/src/MNH/mnhread_zs_dummyn.f90
+++ b/src/MNH/mnhread_zs_dummyn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE MNHREAD_ZS_DUMMY_n(TPINIFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),    INTENT(IN)   :: TPINIFILE    !Initial file
 !
@@ -57,16 +57,16 @@ END MODULE MODI_MNHREAD_ZS_DUMMY_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_GRID_n,     ONLY : XZS
-USE MODD_GR_FIELD_n, ONLY : XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
-                            XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAM_n,    ONLY : CSURF
+USE MODD_GRID_n,        ONLY: XZS
+USE MODD_GR_FIELD_n,    ONLY: XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
+                              XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_PARAM_n,       ONLY: CSURF
 !
 USE MODI_READ_DUMMY_GR_FIELD_n
 !
 USE MODE_ll
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 !
 IMPLICIT NONE
 !
@@ -101,7 +101,7 @@ CALL GET_DIM_EXT_ll('B',IIU,IJU)
 !               ---------
 IF (.NOT.(ASSOCIATED(XZS))) THEN
   ALLOCATE(XZS(IIU,IJU))
-  CALL IO_READ_FIELD(TPINIFILE,'ZS',XZS)
+  CALL IO_Field_read(TPINIFILE,'ZS',XZS)
 END IF
 !
 IF (CSURF /='EXTE') RETURN
@@ -113,28 +113,28 @@ IF (CSURF /='EXTE') RETURN
 !               --------------------------
 !
 IF (.NOT.(ASSOCIATED(XSSO_ANISOTROPY))) ALLOCATE(XSSO_ANISOTROPY(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_ANIS',XSSO_ANISOTROPY(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_ANIS',XSSO_ANISOTROPY(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSSO_SLOPE))) ALLOCATE(XSSO_SLOPE(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_SLOPE',XSSO_SLOPE(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_SLOPE',XSSO_SLOPE(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSSO_DIRECTION))) ALLOCATE(XSSO_DIRECTION(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_DIR',XSSO_DIRECTION(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_DIR',XSSO_DIRECTION(:,:))
 !
 IF (.NOT.(ASSOCIATED(XAVG_ZS))) ALLOCATE(XAVG_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'AVG_ZS',XAVG_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'AVG_ZS',XAVG_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSIL_ZS))) ALLOCATE(XSIL_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SIL_ZS',XSIL_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'SIL_ZS',XSIL_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XMAX_ZS))) ALLOCATE(XMAX_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'MAX_ZS',XMAX_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'MAX_ZS',XMAX_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XMIN_ZS))) ALLOCATE(XMIN_ZS(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'MIN_ZS',XMIN_ZS(:,:))
+CALL IO_Field_read(TPINIFILE,'MIN_ZS',XMIN_ZS(:,:))
 !
 IF (.NOT.(ASSOCIATED(XSSO_STDEV))) ALLOCATE(XSSO_STDEV(IIU,IJU))
-CALL IO_READ_FIELD(TPINIFILE,'SSO_STDEV',XSSO_STDEV(:,:))
+CALL IO_Field_read(TPINIFILE,'SSO_STDEV',XSSO_STDEV(:,:))
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/mnhwrite_zs_dummyn.f90 b/src/MNH/mnhwrite_zs_dummyn.f90
index 708cf971d..29392ec2b 100644
--- a/src/MNH/mnhwrite_zs_dummyn.f90
+++ b/src/MNH/mnhwrite_zs_dummyn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE MNHWRITE_ZS_DUMMY_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
@@ -57,15 +57,15 @@ END MODULE MODI_MNHWRITE_ZS_DUMMY_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_GR_FIELD_n, ONLY : XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
-                            XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
+USE MODD_GR_FIELD_n,     ONLY: XSSO_STDEV, XSSO_ANISOTROPY, XSSO_DIRECTION, XSSO_SLOPE, &
+                               XAVG_ZS, XSIL_ZS, XMIN_ZS, XMAX_ZS
 !
-USE MODD_PARAM_n,    ONLY : CSURF
-USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_PARAM_n,        ONLY: CSURF
+USE MODD_IO,             ONLY: TFILEDATA
 !
 USE MODI_WRITE_DUMMY_GR_FIELD_n
 !
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -92,14 +92,14 @@ IF (CSURF /='EXTE') RETURN
 !*       2.     Orographic characteristics :
 !               --------------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'SSO_ANIS', XSSO_ANISOTROPY)
-CALL IO_WRITE_FIELD(TPFILE,'SSO_SLOPE',XSSO_SLOPE)
-CALL IO_WRITE_FIELD(TPFILE,'SSO_DIR',  XSSO_DIRECTION)
-CALL IO_WRITE_FIELD(TPFILE,'AVG_ZS',   XAVG_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'SIL_ZS',   XSIL_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'MAX_ZS',   XMAX_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'MIN_ZS',   XMIN_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'SSO_STDEV',XSSO_STDEV)
+CALL IO_Field_write(TPFILE,'SSO_ANIS', XSSO_ANISOTROPY)
+CALL IO_Field_write(TPFILE,'SSO_SLOPE',XSSO_SLOPE)
+CALL IO_Field_write(TPFILE,'SSO_DIR',  XSSO_DIRECTION)
+CALL IO_Field_write(TPFILE,'AVG_ZS',   XAVG_ZS)
+CALL IO_Field_write(TPFILE,'SIL_ZS',   XSIL_ZS)
+CALL IO_Field_write(TPFILE,'MAX_ZS',   XMAX_ZS)
+CALL IO_Field_write(TPFILE,'MIN_ZS',   XMIN_ZS)
+CALL IO_Field_write(TPFILE,'SSO_STDEV',XSSO_STDEV)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modd_ch_model0d.f90 b/src/MNH/modd_ch_model0d.f90
index f55a168be..0dd1a92ad 100644
--- a/src/MNH/modd_ch_model0d.f90
+++ b/src/MNH/modd_ch_model0d.f90
@@ -43,7 +43,7 @@
 !*       0.   DECLARATIONS
 !        -----------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 SAVE
diff --git a/src/MNH/modd_io_nam.f90 b/src/MNH/modd_io_nam.f90
index 8c4a8e628..e5249d0d4 100644
--- a/src/MNH/modd_io_nam.f90
+++ b/src/MNH/modd_io_nam.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -31,7 +31,7 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !------------------------------------------------------------------------------
diff --git a/src/MNH/modd_io_surf_mnh.f90 b/src/MNH/modd_io_surf_mnh.f90
index dffcc6bc7..635f6b6ed 100644
--- a/src/MNH/modd_io_surf_mnh.f90
+++ b/src/MNH/modd_io_surf_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ##################
@@ -32,7 +32,7 @@
 !
 !*       0.   DECLARATIONS
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY: JPMODELMAX
 
 IMPLICIT NONE
diff --git a/src/MNH/modd_lunit.f90 b/src/MNH/modd_lunit.f90
index a409e852d..d19cf3d35 100644
--- a/src/MNH/modd_lunit.f90
+++ b/src/MNH/modd_lunit.f90
@@ -38,7 +38,7 @@
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE 
 !
diff --git a/src/MNH/modd_lunitn.f90 b/src/MNH/modd_lunitn.f90
index 9462e7bbf..4ac4a5c31 100644
--- a/src/MNH/modd_lunitn.f90
+++ b/src/MNH/modd_lunitn.f90
@@ -42,7 +42,7 @@
 !             ------------
 !
 !
-USE MODD_IO_ll,      ONLY: TFILEDATA, TPTR2FILE
+USE MODD_IO,         ONLY: TFILEDATA, TPTR2FILE
 USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPCPLFILEMAX 
 
 IMPLICIT NONE
@@ -82,7 +82,7 @@ CONTAINS
 
 SUBROUTINE LUNIT_GOTO_MODEL(KFROM, KTO)
 !
-USE MODD_IO_ll, ONLY : TFILE_OUTPUTLISTING
+USE MODD_IO, ONLY : TFILE_OUTPUTLISTING
 !
 INTEGER, INTENT(IN) :: KFROM, KTO
 !
diff --git a/src/MNH/modd_outn.f90 b/src/MNH/modd_outn.f90
index 0dceb304a..7a3ff7e78 100644
--- a/src/MNH/modd_outn.f90
+++ b/src/MNH/modd_outn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ################
@@ -39,7 +39,7 @@
 !
 !
 USE MODD_PARAMETERS, ONLY: JPMODELMAX, JPOUTMAX
-USE MODD_IO_ll, ONLY:TOUTBAK
+USE MODD_IO,         ONLY: TOUTBAK
 IMPLICIT NONE
 
 TYPE OUT_t
diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index 462859ff0..3e07a46f6 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications
@@ -726,7 +726,7 @@ END SUBROUTINE LES_TIME_AVG
 SUBROUTINE LES_DIACHRO(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -854,7 +854,7 @@ END SUBROUTINE LES_DIACHRO
 SUBROUTINE LES_DIACHRO_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !###########################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -980,7 +980,7 @@ END SUBROUTINE LES_DIACHRO_SV
 SUBROUTINE LES_DIACHRO_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#####################################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1111,7 +1111,7 @@ END SUBROUTINE LES_DIACHRO_MASKS
 SUBROUTINE LES_DIACHRO_SV_MASKS(TPDIAFILE,HGROUP,HTITLE,HCOMMENT,HUNIT,PFIELD,HAVG)
 !########################################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1247,7 +1247,7 @@ END SUBROUTINE LES_DIACHRO_SV_MASKS
 SUBROUTINE LES_DIACHRO_SURF(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !#############################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1361,7 +1361,7 @@ END SUBROUTINE LES_DIACHRO_SURF
 SUBROUTINE LES_DIACHRO_SURF_SV(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELD,HAVG)
 !################################################################
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODI_WRITE_DIACHRO
@@ -1479,7 +1479,7 @@ SUBROUTINE LES_DIACHRO_2PT(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PFIELDX,PFIELDY,HAVG)
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODD_CONF
@@ -1638,7 +1638,7 @@ SUBROUTINE LES_DIACHRO_SPEC(TPDIAFILE,HGROUP,HCOMMENT,HUNIT,PSPECTRAX,PSPECTRAY)
 !* Modification 01/04/03 (V. Masson) safer use of ZWORK6 with loops
 !
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_GRID
 USE MODD_CONF
diff --git a/src/MNH/mode_time.f90 b/src/MNH/mode_time.f90
index 1ac45c254..0f71113f9 100644
--- a/src/MNH/mode_time.f90
+++ b/src/MNH/mode_time.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -39,7 +39,7 @@
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TIME
 !
 IMPLICIT NONE
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index bece43011..62c57bede 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -62,7 +62,7 @@ END MODULE MODI_MODEL_n
 !!
 !!    EXTERNAL
 !!    --------
-!!      Subroutine IO_FILE_OPEN_ll: to open a file
+!!      Subroutine IO_File_open: to open a file
 !!      Subroutine WRITE_DESFM: to write the descriptive part of a FMfile
 !!      Subroutine WRITE_LFIFM: to write the binary part of a FMfile
 !!      Subroutine SET_MASK   : to compute all the masks selected for budget
@@ -89,7 +89,7 @@ END MODULE MODI_MODEL_n
 !!                                 compute the large scale fields, used to
 !!                                 couple Model_n with outer informations.
 !!      Subroutine ENDSTEP_BUDGET: writes the budget informations.
-!!      Subroutine IO_FILE_CLOSE_ll: closes a file
+!!      Subroutine IO_File_close: closes a file
 !!      Subroutine DATETIME_CORRECTDATE: transform the current time in GMT
 !!      Subroutine FORCING : computes forcing terms
 !!      Subroutine ADD3DFIELD_ll : add a field to 3D-list
@@ -254,7 +254,7 @@ END MODULE MODI_MODEL_n
 !!  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)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -293,7 +293,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
@@ -318,7 +318,7 @@ USE MODD_PARAM_LIMA,     ONLY: MSEDC => LSEDC, MWARM => LWARM, MRAIN => LRAIN, L
                                MSEDI => LSEDI, MHHONI => LHHONI, NMOD_IFN, 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
@@ -340,19 +340,19 @@ 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 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
@@ -370,7 +370,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
@@ -635,9 +635,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
@@ -946,10 +946,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)
@@ -989,13 +989,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
@@ -2073,7 +2073,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
 !
 !-------------------------------------------------------------------------------
@@ -2109,11 +2109,11 @@ 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)
+  CALL IO_File_close(TINIFILE)
+  IF (CSURF=="EXTE") CALL IO_File_close(TINIFILEPGD)
 !
 !*       28.1   print statistics!
 !
@@ -2228,8 +2228,8 @@ IF (OEXIT) THEN
   !
   !
   !
-  CALL IO_FILE_CLOSE_ll(TLUOUT)
-  IF (IMI==NMODEL) CALL IO_FILE_CLOSE_ll(TLUOUT0)
+  CALL IO_File_close(TLUOUT)
+  IF (IMI==NMODEL) CALL IO_File_close(TLUOUT0)
 END IF
 !
 END SUBROUTINE MODEL_n
diff --git a/src/MNH/modules_diachro.f90 b/src/MNH/modules_diachro.f90
index 2dd05edff..75fafa132 100644
--- a/src/MNH/modules_diachro.f90
+++ b/src/MNH/modules_diachro.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 ! Modifications:
@@ -13,7 +13,7 @@
 INTERFACE
 !
 SUBROUTINE MENU_DIACHRO(TPDIAFILE,HGROUP)
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE    ! file to write
 CHARACTER(LEN=*), INTENT(IN) :: HGROUP
@@ -31,7 +31,7 @@ END MODULE MODI_MENU_DIACHRO
 INTERFACE
 !
 SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n(TPFILE)
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 TYPE(TFILEDATA),INTENT(IN) :: TPFILE
 END SUBROUTINE WRITE_LFIFMN_FORDIACHRO_n
 !
@@ -49,7 +49,7 @@ SUBROUTINE WRITE_DIACHRO(TPDIAFILE,TPLUOUTDIA,HGROUP,HTYPE,          &
       HTITRE,HUNITE,HCOMMENT,OICP,OJCP,OKCP,KIL,KIH,KJL,KJH,KKL,KKH, &
       PTRAJX,PTRAJY,PTRAJZ,PMASK)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),              INTENT(IN)          :: TPDIAFILE    ! file to write
 TYPE(TFILEDATA),              INTENT(IN)          :: TPLUOUTDIA
diff --git a/src/MNH/open_file_mnh.f90 b/src/MNH/open_file_mnh.f90
index 8762e066e..4a0539ec7 100644
--- a/src/MNH/open_file_mnh.f90
+++ b/src/MNH/open_file_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #########################
@@ -59,8 +59,8 @@ END MODULE MODI_OPEN_FILE_MNH
 !
 USE MODD_IO_NAM,           ONLY: TFILE
 !
-USE MODE_FM,               ONLY: IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -84,10 +84,10 @@ INTEGER :: IRESP
 !
 CALL PRINT_MSG(NVERB_DEBUG,'IO','OPEN_FILE_MNH','called for '//TRIM(HFILE))
 !
-CALL IO_FILE_ADD2LIST(TFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, &
+CALL IO_File_add2list(TFILE,TRIM(HFILE),'SURFACE_DATA',HACTION, &
                       HFORM=HFORM,HACCESS=HACCESS,KRECL=KRECL,  &
                       OOLD=.TRUE.) !OOLD=T because the file may already be in list
-CALL IO_FILE_OPEN_ll(TFILE)
+CALL IO_File_open(TFILE)
 !
 KUNIT = TFILE%NLU
 !
diff --git a/src/MNH/open_nestpgd_files.f90 b/src/MNH/open_nestpgd_files.f90
index 18d8f5f51..d331134d6 100644
--- a/src/MNH/open_nestpgd_files.f90
+++ b/src/MNH/open_nestpgd_files.f90
@@ -10,7 +10,7 @@ MODULE MODI_OPEN_NESTPGD_FILES
 INTERFACE
       SUBROUTINE OPEN_NESTPGD_FILES(TPFILEPGD,TPFILENESTPGD)
 !
-USE MODD_IO_ll, ONLY : TPTR2FILE
+USE MODD_IO, ONLY : TPTR2FILE
 !
 TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,       INTENT(OUT) :: TPFILEPGD     ! Input  PGD files
 TYPE(TPTR2FILE),DIMENSION(:),ALLOCATABLE,TARGET,INTENT(OUT) :: TPFILENESTPGD ! Output PGD files
@@ -67,35 +67,32 @@ END MODULE MODI_OPEN_NESTPGD_FILES
 !!                   J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!    P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
+USE MODD_CONF
+USE MODD_CONF,             ONLY: NHALO_CONF_MNH => NHALO
+USE MODD_IO,               ONLY: TFILE_OUTPUTLISTING, TFILEDATA, TPTR2FILE
 USE MODD_LUNIT
 USE MODD_LUNIT_n
-USE MODD_CONF
 USE MODD_NESTING
 USE MODD_PARAMETERS
-USE MODD_IO_ll, ONLY : TFILE_OUTPUTLISTING,TFILEDATA,TPTR2FILE
-!
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_FM,               ONLY : IO_FILE_OPEN_ll, IO_FILE_CLOSE_ll
-USE MODE_POS
-USE MODE_MSG
 !
+USE MODE_IO,               ONLY: IO_Config_set
+USE MODE_IO_FILE,          ONLY: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MODELN_HANDLER
-!
-USE MODD_PARAMETERS, ONLY : JPHEXT  
-USE MODD_CONF, ONLY       : NHALO_CONF_MNH => NHALO
+USE MODE_MSG
+USE MODE_POS
 !
 USE MODN_CONFZ
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
 !
 IMPLICIT NONE
 !
@@ -159,8 +156,8 @@ HPRE_NEST_PGD='PRE_NEST_PGD1.nam'
 !*       2.    OPENING OF TLUOUT0
 !              ------------------
 !
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT0
 !
@@ -171,8 +168,8 @@ ILUOUT0=TLUOUT0%NLU
 !*       3.    OPENNING OF PRE_NEST_PGD1.nam
 !              -----------------------------
 !
-CALL IO_FILE_ADD2LIST(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
-CALL IO_FILE_OPEN_ll(TZPRE_NEST_PGD)
+CALL IO_File_add2list(TZPRE_NEST_PGD,TRIM(HPRE_NEST_PGD),'NML','READ')
+CALL IO_File_open(TZPRE_NEST_PGD)
 IPRE_NEST_PGD = TZPRE_NEST_PGD%NLU
 !reading of NAM_CONFZ
 CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFZ',GFOUND)
@@ -285,8 +282,8 @@ END DO
 !
 DO JPGD=1,NMODEL
   WRITE(YLUOUT,'("OUTPUT_LISTING",I0)') JPGD
-  CALL IO_FILE_ADD2LIST(LUNIT_MODEL(JPGD)%TLUOUT,YLUOUT,'OUTPUTLISTING','WRITE')
-  CALL IO_FILE_OPEN_ll(LUNIT_MODEL(JPGD)%TLUOUT)
+  CALL IO_File_add2list(LUNIT_MODEL(JPGD)%TLUOUT,YLUOUT,'OUTPUTLISTING','WRITE')
+  CALL IO_File_open(LUNIT_MODEL(JPGD)%TLUOUT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -299,26 +296,26 @@ IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_NEST_PGD)
 !
 CALL POSNAM(IPRE_NEST_PGD,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=IPRE_NEST_PGD,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
 ALLOCATE(TPFILEPGD    (NMODEL))
 ALLOCATE(TPFILENESTPGD(NMODEL))
 !
 DO JPGD=1,NMODEL
-  CALL IO_FILE_ADD2LIST(TPFILEPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD)),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_add2list(TPFILEPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD)),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
   !
   IF (NDAD(JPGD)>=1) THEN
     TZDADFILE => TPFILENESTPGD(NDAD(JPGD))%TZFILE
-    CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PGD', &
+    CALL IO_File_add2list(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PGD', &
                           'WRITE',KLFITYPE=1,KLFIVERB=NVERB,KMODEL=JPGD,TPDADFILE=TZDADFILE)
   ELSE
     NULLIFY(TZDADFILE)
-    CALL IO_FILE_ADD2LIST(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PGD', &
+    CALL IO_File_add2list(TPFILENESTPGD(JPGD)%TZFILE,TRIM(YPGD(JPGD))//'.nest'//ADJUSTL(YNEST),'PGD', &
                           'WRITE',KLFITYPE=1,KLFIVERB=NVERB,KMODEL=JPGD)
   END IF
 END DO
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD)
+CALL IO_File_close(TZPRE_NEST_PGD)
 !-------------------------------------------------------------------------------
 !
 !*       7.    OPENING OF INPUT PGD FILES
@@ -327,7 +324,7 @@ CALL IO_FILE_CLOSE_ll(TZPRE_NEST_PGD)
 !Remark: output PGD files are opened later when the mesh dimensions are known
 !
 DO JPGD=1,NMODEL
-  CALL IO_FILE_OPEN_ll(TPFILEPGD(JPGD)%TZFILE)
+  CALL IO_File_open(TPFILEPGD(JPGD)%TZFILE)
 END DO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/open_prc_files.f90 b/src/MNH/open_prc_files.f90
index 42cee97ca..bb02f6951 100644
--- a/src/MNH/open_prc_files.f90
+++ b/src/MNH/open_prc_files.f90
@@ -13,7 +13,7 @@ INTERFACE
                                                 HSURFFILE,HSURFFILETYPE, &
                                                 HPGDFILE,TPPGDFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),POINTER, INTENT(OUT) :: TPPRE_REAL1FILE ! PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(OUT) :: HATMFILE     ! name of the input atmospheric file
@@ -91,9 +91,9 @@ END MODULE MODI_OPEN_PRC_FILES
 !!      J.Escobar : 19/04/2016 : Pb IOZ/NETCDF , missing OPARALLELIO=.FALSE. for PGD files
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      P. Wautelet  01/02/2019 added missing initialization to NULL for files with OUT intent
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
@@ -105,16 +105,16 @@ USE MODD_CONF_n
 !JUAN Z_SPLITTING
 !USE MODD_CONFZ
 !JUAN Z_SPLITTING
-USE MODD_IO_ll, ONLY: TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_IO,               ONLY: TFILE_OUTPUTLISTING, TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n, CINIFILE_n=>CINIFILE , CINIFILEPGD_n=>CINIFILEPGD
 !
 !
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
-USE MODE_POS
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_IO,               only: IO_Config_set
+USE MODE_IO_FILE,          only: IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MSG
+USE MODE_POS
 !
 USE MODN_CONFIO, ONLY : NAM_CONFIO
 !JUAN Z_SPLITTING
@@ -171,8 +171,8 @@ HSURFFILETYPE='MESONH'
 !*       2.    OPENNING OF THE OUTPUT LISTING FILE
 !              -----------------------------------
 !
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT0
 !
@@ -185,8 +185,8 @@ IF (NVERB>=5) WRITE(ILUOUT0,*) 'Routine OPEN_PRC_FILES started'
 !              -------------------------
 !
 TPPRE_REAL1FILE => NULL()
-CALL IO_FILE_ADD2LIST(TPPRE_REAL1FILE,'PRE_REAL1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TPPRE_REAL1FILE,KRESP=IRESP)
+CALL IO_File_add2list(TPPRE_REAL1FILE,'PRE_REAL1.nam','NML','READ')
+CALL IO_File_open(TPPRE_REAL1FILE,KRESP=IRESP)
 IPRE_REAL1=TPPRE_REAL1FILE%NLU
 IF (IRESP.NE.0 ) THEN
    !callabortstop
@@ -204,7 +204,7 @@ IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFZ)
 !JUANZ
 CALL POSNAM(IPRE_REAL1,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=IPRE_REAL1,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
 CINIFILE = CINIFILE_n
 CALL POSNAM(IPRE_REAL1,'NAM_FILE_NAMES',GFOUND,ILUOUT0)
@@ -271,8 +271,8 @@ ELSE
 !              -----------------------------------
 !
   TPPGDFILE => NULL()
-  CALL IO_FILE_ADD2LIST(TPPGDFILE,TRIM(HPGDFILE),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TPPGDFILE,IRESP)
+  CALL IO_File_add2list(TPPGDFILE,TRIM(HPGDFILE),'PGD','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TPPGDFILE,IRESP)
   IF (IRESP/=0) THEN
 !callabortstop
     CALL PRINT_MSG(NVERB_FATAL,'GEN','OPEN_PRC_FILES',' problem during opening of PGD file '//TRIM(HPGDFILE))
diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90
index 4cab8bd6b..1fee61de9 100644
--- a/src/MNH/paspol.f90
+++ b/src/MNH/paspol.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######spl
      MODULE MODI_PASPOL
 !    ################## 
@@ -10,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE PASPOL (PTSTEP, PSFSV, KLUOUT, KVERB, OCLOSE_OUT, TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -67,7 +68,7 @@ END MODULE MODI_PASPOL
 USE MODD_PARAMETERS
 USE MODD_NSV
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_GRIDPROJ
 USE MODD_PASPOL
 USE MODD_CTURB
@@ -75,9 +76,8 @@ USE MODI_SHUMAN
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_GRADIENT_M
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FM
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_DYN_n
 USE MODD_CONF
@@ -591,7 +591,7 @@ IF (OCLOSE_OUT) THEN
     TZFIELD%CLONGNAME = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
     !
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTEMPO)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTEMPO)
   END DO
   !
   DEALLOCATE(ZTEMPO)
diff --git a/src/MNH/pgd_grid_io_init_mnh.f90 b/src/MNH/pgd_grid_io_init_mnh.f90
index e7e416226..202333f7d 100644
--- a/src/MNH/pgd_grid_io_init_mnh.f90
+++ b/src/MNH/pgd_grid_io_init_mnh.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !#######################
@@ -59,19 +59,6 @@ MODULE MODI_PGD_GRID_IO_INIT_MNH
     !
     USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
     !
-    USE MODE_ll
-    USE MODE_FM
-    USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-    USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
-    !
-    USE MODE_IO_ll
-    !JUANZ
-    USE MODE_SPLITTINGZ_ll
-    !JUANZ
-    !
-    USE MODI_GET_SURF_GRID_DIM_N
-    USE MODI_GET_LUOUT
-    !
     IMPLICIT NONE
     !
     !*    0.1    Declaration of dummy arguments
@@ -140,22 +127,19 @@ END MODULE MODI_PGD_GRID_IO_INIT_MNH
 !*    0.     DECLARATION
 !            -----------
 !
-USE MODD_SURF_ATM_GRID_n, ONLY : SURF_ATM_GRID_t
+USE MODD_CONF,            ONLY: CPROGRAM, L1D, L2D, LPACK
+USE MODD_DIM_n,           ONLY: NIMAX_ll, NJMAX_ll, NKMAX
+USE MODD_MNH_SURFEX_n
+USE MODD_PARAMETERS,      ONLY: JPHEXT, JPVEXT, JPMODELMAX
+USE MODD_SURF_ATM_GRID_n, ONLY: SURF_ATM_GRID_t
 !
+USE MODE_IO,              only: IO_Pack_set
 USE MODE_ll
-USE MODE_FM
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
-USE MODD_CONF,       ONLY : CPROGRAM, L1D, L2D, LPACK
-USE MODD_DIM_n,      ONLY : NIMAX_ll, NJMAX_ll, NKMAX
-!
-!JUANZ
 USE MODE_SPLITTINGZ_ll
-!JUANZ
 !
 USE MODI_GET_SURF_GRID_DIM_N
 USE MODI_GET_LUOUT
 !
-USE MODD_MNH_SURFEX_n
 !
 IMPLICIT NONE
 !
@@ -227,7 +211,7 @@ END IF
 L1D=(IIMAX==1).AND.(IJMAX==1)
 L2D=(IIMAX/=1).AND.(IJMAX==1)
 LPACK=L1D.OR.L2D
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 NIMAX_ll = IIMAX
diff --git a/src/MNH/phys_paramn.f90 b/src/MNH/phys_paramn.f90
index 106ec1623..9fa7c447d 100644
--- a/src/MNH/phys_paramn.f90
+++ b/src/MNH/phys_paramn.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !    ########################
      MODULE MODI_PHYS_PARAM_n  
 !    ########################
@@ -13,7 +14,7 @@ INTERFACE
                               PRAD,PSHADOWS,PKAFR,PGROUND,PMAFL,PDRAG,PTURB,PTRACER,       &
                               PTIME_BU, PWETDEPAER, OMASKkids,OCLOUD_ONLY                  )           
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,           INTENT(IN)     :: KTCOUNT   ! temporal iteration count
 TYPE(TFILEDATA),   INTENT(IN)     :: TPFILE    ! Synchronous output file
@@ -239,8 +240,6 @@ END MODULE MODI_PHYS_PARAM_n
 !    
 USE MODE_DATETIME
 USE MODE_ll
-USE MODE_FM
-USE MODE_FMWRIT
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 !
 USE MODD_BLANK
@@ -248,7 +247,7 @@ USE MODD_CST
 USE MODD_DYN
 USE MODD_CONF
 USE MODD_FRC
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_GRID
 USE MODD_NSV
@@ -303,7 +302,6 @@ USE MODI_CONVECTION
 USE MODI_BUDGET
 USE MODI_PASPOL
 USE MODI_CONDSAMP
-USE MODE_FM
 USE MODE_MODELN_HANDLER
 USE MODI_SEDIM_DUST
 USE MODI_SEDIM_SALT
diff --git a/src/MNH/ppm.f90 b/src/MNH/ppm.f90
index 446178015..779233104 100644
--- a/src/MNH/ppm.f90
+++ b/src/MNH/ppm.f90
@@ -193,7 +193,6 @@ END MODULE MODI_PPM
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODI_SHUMAN
 USE MODI_GET_HALO
 !
@@ -633,7 +632,6 @@ END FUNCTION PPM_01_X
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODI_SHUMAN
 USE MODI_GET_HALO
 !
@@ -1275,7 +1273,6 @@ END FUNCTION PPM_01_Z
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODI_SHUMAN
 USE MODI_GET_HALO
 !
@@ -1540,7 +1537,6 @@ END FUNCTION PPM_S0_X
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODI_SHUMAN
 USE MODI_GET_HALO
 !
@@ -1933,7 +1929,6 @@ END FUNCTION PPM_S0_Z
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODI_SHUMAN
 !
 USE MODD_CONF
@@ -2186,7 +2181,6 @@ END FUNCTION PPM_S1_X
 !-------------------------------------------------------------------------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODI_SHUMAN
 !
 USE MODD_CONF
diff --git a/src/MNH/prandtl.f90 b/src/MNH/prandtl.f90
index 13537544f..85e161424 100644
--- a/src/MNH/prandtl.f90
+++ b/src/MNH/prandtl.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ###################
@@ -22,7 +22,7 @@ INTERFACE
                          PETHETA, PEMOIST                      )
 !
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -197,7 +197,7 @@ END MODULE MODI_PRANDTL
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
 USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
@@ -206,7 +206,7 @@ USE MODI_GRADIENT_M
 USE MODI_EMOIST
 USE MODI_ETHETA
 USE MODI_SHUMAN
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -526,7 +526,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PREDTH1)
+  CALL IO_Field_write(TPFILE,TZFIELD,PREDTH1)
   !
   ! stores the RED_R1
   TZFIELD%CMNHNAME   = 'RED_R1'
@@ -539,7 +539,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PREDR1)
+  CALL IO_Field_write(TPFILE,TZFIELD,PREDR1)
   !
   ! stores the RED2_TH3
   TZFIELD%CMNHNAME   = 'RED2_TH3'
@@ -552,7 +552,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRED2TH3)
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2TH3)
   !
   ! stores the RED2_R3
   TZFIELD%CMNHNAME   = 'RED2_R3'
@@ -565,7 +565,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRED2R3)
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2R3)
   !
   ! stores the RED2_THR3
   TZFIELD%CMNHNAME   = 'RED2_THR3'
@@ -578,7 +578,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRED2THR3)
+  CALL IO_Field_write(TPFILE,TZFIELD,PRED2THR3)
   !
 END IF
 !
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 7a64a4869..6454934b0 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -171,10 +171,10 @@
 !!      SET_REF       : to compute  rhoJ 
 !!      RESSURE_IN_PREP : to apply an anelastic correction in the case of
 !!                        non-vanishing orography 
-!!      IO_FILE_OPEN_ll : to open a FM-file (DESFM + LFIFM)
+!!      IO_File_open : to open a FM-file (DESFM + LFIFM)
 !!      WRITE_DESFM   : to write the  DESFM file
 !!      WRI_LFIFM     : to write the   LFIFM file  
-!!      IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM)
+!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
 !!
 !!      MXM,MYM,MZM   : Shuman operators
 !!      WGUESS        : to compute W with the continuity equation from 
@@ -311,7 +311,7 @@
 !!      P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!  01/2018      (G.Delautier) SURFEX 8.1
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
@@ -323,7 +323,7 @@ USE MODD_ARGSLIST_ll, ONLY : LIST_ll
 USE MODD_DIM_n
 USE MODD_CONF
 USE MODD_CST
-USE MODD_GRID         
+USE MODD_GRID
 USE MODD_GRID_n
 USE MODD_METRICS_n
 USE MODD_PGDDIM
@@ -347,7 +347,7 @@ USE MODD_SALT,      ONLY:  LSALT, NMODE_SLT, CRGUNITS, XINISIG_SLT, XINIRADIUS_S
 USE MODD_VAR_ll,    ONLY:  NPROC
 USE MODD_LUNIT,     ONLY:  TLUOUT0, TOUTDATAFILE
 USE MODD_LUNIT_n
-USE MODD_IO_ll,     ONLY: NIO_VERB,NVERB_DEBUG,TFILE_DUMMY,TFILE_OUTPUTLISTING
+USE MODD_IO,        ONLY: NIO_VERB, NVERB_DEBUG, TFILE_DUMMY, TFILE_OUTPUTLISTING
 USE MODD_CONF_n
 USE MODD_NSV,      ONLY : NSV,NSV_CHEM,           &
                           NSV_DSTEND, NSV_DSTBEG
@@ -358,11 +358,12 @@ USE MODE_THERMO
 USE MODE_POS
 USE MODE_GRIDCART         ! Executive modules
 USE MODE_GRIDPROJ
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_GATHER_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init, IO_Pack_set
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list,IO_Filelist_print
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_FIELD
@@ -421,11 +422,10 @@ USE MODI_SET_RELFRC
 !
 USE MODI_INI_CST
 USE MODI_INI_NEB
-USE MODE_FMWRIT
 USE MODI_WRITE_HGRID
 USE MODD_MPIF
 USE MODD_VAR_ll
-USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_SURFEX
+USE MODD_IO, ONLY: TFILEDATA,TFILE_SURFEX
 !
 USE MODE_MPPDB
 !
@@ -617,7 +617,7 @@ CALL MPPDB_INIT()
 !
 CALL GOTO_MODEL(1)
 !
-CALL INITIO_ll()
+CALL IO_Init()
 NULLIFY(TZ_FIELDS_ll)
 CALL VERSION
 CPROGRAM='IDEAL '
@@ -665,15 +665,15 @@ CALL DEFAULT_EXPRE
 !              and open these files :
 ! 
 ! 
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING1','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING1','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 NLUOUT = TLUOUT0%NLU
 !Set output files for PRINT_MSG
 TLUOUT              => TLUOUT0
 TFILE_OUTPUTLISTING => TLUOUT0
 !
-CALL IO_FILE_ADD2LIST(TZEXPREFILE,'PRE_IDEA1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZEXPREFILE)
+CALL IO_File_add2list(TZEXPREFILE,'PRE_IDEA1.nam','NML','READ')
+CALL IO_File_open(TZEXPREFILE)
 NLUPRE=TZEXPREFILE%NLU
 !
 !*       3.2   read in NLUPRE the namelist informations
@@ -691,7 +691,7 @@ IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFZ)
 !JUANZ
 CALL POSNAM(NLUPRE,'NAM_CONFIO',GFOUND,NLUOUT)
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 CALL POSNAM(NLUPRE,'NAM_GRID_PRE',GFOUND,NLUOUT)
 IF (GFOUND) READ(UNIT=NLUPRE,NML=NAM_GRID_PRE)
 CALL POSNAM(NLUPRE,'NAM_GRIDH_PRE',GFOUND,NLUOUT)
@@ -710,13 +710,13 @@ CALL INI_FIELD_SCALARS()
 !
 IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN 
   ! open the PGD_FILE
-  CALL IO_FILE_ADD2LIST(TPGDFILE,TRIM(CPGD_FILE),'PGD','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TPGDFILE)
+  CALL IO_File_add2list(TPGDFILE,TRIM(CPGD_FILE),'PGD','READ',KLFINPRAR=NNPRAR,KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TPGDFILE)
 
   ! read the grid in the PGD file
-  CALL IO_READ_FIELD(TPGDFILE,'IMAX',  NIMAX)
-  CALL IO_READ_FIELD(TPGDFILE,'JMAX',  NJMAX)
-  CALL IO_READ_FIELD(TPGDFILE,'JPHEXT',IJPHEXT)
+  CALL IO_Field_read(TPGDFILE,'IMAX',  NIMAX)
+  CALL IO_Field_read(TPGDFILE,'JMAX',  NJMAX)
+  CALL IO_Field_read(TPGDFILE,'JPHEXT',IJPHEXT)
 
   IF ( CPGD_FILE /= CINIFILEPGD) THEN
      WRITE(NLUOUT,FMT=*) ' WARNING : in PRE_IDEA1.nam, in NAM_LUNITn you&
@@ -911,7 +911,7 @@ ENDIF
 CALL SET_JP_ll(1,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(NIMAX_ll, NJMAX_ll, NKMAX)
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 CALL SET_LBX_ll(CLBCX(1), 1)
 CALL SET_LBY_ll(CLBCY(1), 1)
 CALL SET_XRATIO_ll(1, 1)
@@ -1713,7 +1713,7 @@ END IF
 !  before calling chemistry
 CCONF = 'START'
 CSTORAGE_TYPE='TT'                  
-CALL IO_FILE_CLOSE_ll(TZEXPREFILE)  ! Close the EXPRE file
+CALL IO_File_close(TZEXPREFILE)  ! Close the EXPRE file
 !
 IF ( LCH_INIT_FIELD ) CALL CH_INIT_FIELD_n(1, NLUOUT, NVERB)
 !
@@ -1730,11 +1730,11 @@ NNPRAR = 22 + 2*(NRR+NSV)   &    ! 22 = number of grid variables + reference
                                  ! variables at time t and t-dt
 NTYPE=1
 !
-CALL IO_FILE_ADD2LIST(TINIFILE,TRIM(CINIFILE),'MNH','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
+CALL IO_File_add2list(TINIFILE,TRIM(CINIFILE),'MNH','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
 !
-CALL IO_FILE_OPEN_ll(TINIFILE)
+CALL IO_File_open(TINIFILE)
 !
-CALL IO_WRITE_HEADER(TINIFILE)
+CALL IO_Header_write(TINIFILE)
 !
 CALL WRITE_DESFM_n(1,TINIFILE)
 !
@@ -1770,8 +1770,8 @@ IF (CSURF =='EXTE') THEN
     TPGDFILE => TINIFILE
     CALL PGD_GRID_SURF_ATM(YSURF_CUR%UG, YSURF_CUR%U,YSURF_CUR%GCP,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.,HDIR='-')
     CALL PGD_SURF_ATM     (YSURF_CUR,'MESONH',TINIFILE%CNAME,'MESONH',.TRUE.)
-    CALL IO_FILE_ADD2LIST(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
-    CALL IO_FILE_OPEN_ll (TINIFILEPGD)
+    CALL IO_File_add2list(TINIFILEPGD,TRIM(CINIFILEPGD),'PGD','WRITE',KLFINPRAR=NNPRAR,KLFITYPE=NTYPE,KLFIVERB=NVERB)
+    CALL IO_File_open (TINIFILEPGD)
     TPGDFILE => TINIFILEPGD
   ELSE
   ! ... or read from file.
@@ -1790,12 +1790,12 @@ IF (CSURF =='EXTE') THEN
     !* writing of physiographic fields in the file
     CSTORAGE_TYPE='PG'
     !
-    CALL IO_WRITE_HEADER(TINIFILEPGD)
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'JPHEXT', JPHEXT)    
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'SURF','EXTE')
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'L1D', L1D)
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'L2D', L2D)
-    CALL IO_WRITE_FIELD(TINIFILEPGD,'PACK',LPACK)
+    CALL IO_Header_write(TINIFILEPGD)
+    CALL IO_Field_write(TINIFILEPGD,'JPHEXT', JPHEXT)    
+    CALL IO_Field_write(TINIFILEPGD,'SURF','EXTE')
+    CALL IO_Field_write(TINIFILEPGD,'L1D', L1D)
+    CALL IO_Field_write(TINIFILEPGD,'L2D', L2D)
+    CALL IO_Field_write(TINIFILEPGD,'PACK',LPACK)
     CALL WRITE_HGRID(1,TINIFILEPGD)
     !
     TOUTDATAFILE => TINIFILEPGD
@@ -1825,11 +1825,11 @@ END IF
 !             ---------------
 !
 IF (CSURF =='EXTE' .AND. (LEN_TRIM(CPGD_FILE)==0 .OR. .NOT. LREAD_GROUND_PARAM)) THEN
-  CALL IO_FILE_CLOSE_ll(TINIFILEPGD)
+  CALL IO_File_close(TINIFILEPGD)
 ENDIF
-CALL IO_FILE_CLOSE_ll(TINIFILE)
+CALL IO_File_close(TINIFILE)
 IF( LEN_TRIM(CPGD_FILE) /= 0 ) THEN
-  CALL IO_FILE_CLOSE_ll(TPGDFILE)
+  CALL IO_File_close(TPGDFILE)
 ENDIF
 !
 !
@@ -1896,9 +1896,9 @@ WRITE(NLUOUT,FMT=*) '****************************************************'
 WRITE(NLUOUT,FMT=*) '* PREP_IDEAL_CASE: PREP_IDEAL_CASE ENDS CORRECTLY. *'
 WRITE(NLUOUT,FMT=*) '****************************************************'
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TLUOUT)
 !
 CALL END_PARA_ll(IINFO_ll)
 !
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index 8e7270040..5b5a884f4 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -91,7 +91,7 @@
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!      P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -101,7 +101,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_DIM_n
-USE MODD_IO_ll,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
+USE MODD_IO,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
 USE MODD_GRID_n,           ONLY: XZSMT
 USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
@@ -110,11 +110,11 @@ USE MODD_PARAMETERS
 USE MODD_VAR_ll,           ONLY: NPROC, IP, NMNH_COMM_WORLD
 !
 USE MODE_FIELD,            ONLY: INI_FIELD_LIST
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Init, IO_Pack_set
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_ll
 USE MODE_MNH_WORLD,        ONLY: INIT_NMNH_COMM_WORLD
 USE MODE_MODELN_HANDLER
@@ -168,7 +168,7 @@ CALL MPPDB_INIT()
 CALL VERSION
 CPROGRAM='NESPGD'
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !!$CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 !
 !*       1.    INITIALIZATION OF PHYSICAL CONSTANTS
@@ -202,14 +202,14 @@ CALL INI_FIELD_LIST()
 CALL SET_DAD0_ll()
 DO JPGD=1,NMODEL
   ! read and set dimensions and ratios of model JPGD
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'IMAX',   IIMAX)
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'JMAX',   IJMAX)
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'XSIZE',  NXSIZE(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'YSIZE',  NYSIZE(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'IMAX',   IIMAX)
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'JMAX',   IJMAX)
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'XSIZE',  NXSIZE(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'YSIZE',  NYSIZE(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
   CALL SET_DIM_ll(IIMAX, IJMAX, 1)
   ! compute origin and end of local subdomain of model JPGD
   ! initialize variables from MODD_NESTING, origin and end of global model JPGD in coordinates of its father
@@ -246,10 +246,10 @@ DO JPGD=1,NMODEL
   CALL GOTO_MODEL(JPGD)
   CALL GO_TOMODEL_ll(JPGD,IINFO_ll)
   CALL GOTO_SURFEX(JPGD)
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'L1D', L1D_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'L2D', L2D_ALL(JPGD))
-  CALL IO_READ_FIELD(TZFILEPGD(JPGD)%TZFILE,'PACK',LPACK_ALL(JPGD))
-  CALL SET_FMPACK_ll(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'L1D', L1D_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'L2D', L2D_ALL(JPGD))
+  CALL IO_Field_read(TZFILEPGD(JPGD)%TZFILE,'PACK',LPACK_ALL(JPGD))
+  CALL IO_Pack_set(L1D_ALL(JPGD),L2D_ALL(JPGD),LPACK_ALL(JPGD))
   CALL READ_HGRID(JPGD,TZFILEPGD(JPGD)%TZFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE)
   CSTORAGE_TYPE='PG'
 END DO
@@ -335,12 +335,12 @@ DO JPGD=1,NMODEL
   TOUTDATAFILE => TZFILENESTPGD(JPGD)%TZFILE
   CALL GOTO_MODEL(JPGD)
   !Open done here because grid dimensions have to be known
-  CALL IO_FILE_OPEN_ll(TZFILENESTPGD(JPGD)%TZFILE)
+  CALL IO_File_open(TZFILENESTPGD(JPGD)%TZFILE)
   CALL GOTO_SURFEX(JPGD)
   TFILE_SURFEX => TZFILENESTPGD(JPGD)%TZFILE
   CALL WRITE_PGD_SURF_ATM_n(YSURF_CUR,'MESONH')
   NULLIFY(TFILE_SURFEX)
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'ZSMT',XZSMT)
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'ZSMT',XZSMT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -350,18 +350,18 @@ END DO
 !
 !
 DO JPGD=1,NMODEL
-  CALL IO_WRITE_HEADER(TZFILENESTPGD(JPGD)%TZFILE)
+  CALL IO_Header_write(TZFILENESTPGD(JPGD)%TZFILE)
   IF ( ASSOCIATED(TZFILENESTPGD(JPGD)%TZFILE%TDADFILE) ) THEN
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
-    CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'DXRATIO',NDXRATIO_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'DYRATIO',NDYRATIO_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'XOR',    NXOR_ALL(JPGD))
+    CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'YOR',    NYOR_ALL(JPGD))
   END IF
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'SURF',  'EXTE')
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'L1D',   L1D_ALL(JPGD))
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'L2D',   L2D_ALL(JPGD))
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'PACK',  LPACK_ALL(JPGD))
-  CALL IO_WRITE_FIELD(TZFILENESTPGD(JPGD)%TZFILE,'JPHEXT',JPHEXT)
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'SURF',  'EXTE')
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'L1D',   L1D_ALL(JPGD))
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'L2D',   L2D_ALL(JPGD))
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'PACK',  LPACK_ALL(JPGD))
+  CALL IO_Field_write(TZFILENESTPGD(JPGD)%TZFILE,'JPHEXT',JPHEXT)
 END DO
 !
 !-------------------------------------------------------------------------------
@@ -370,8 +370,8 @@ END DO
 !              --------------------
 !
 DO JPGD=1,NMODEL
-  CALL IO_FILE_CLOSE_ll(TZFILEPGD(JPGD)%TZFILE)
-  CALL IO_FILE_CLOSE_ll(TZFILENESTPGD(JPGD)%TZFILE)
+  CALL IO_File_close(TZFILEPGD(JPGD)%TZFILE)
+  CALL IO_File_close(TZFILENESTPGD(JPGD)%TZFILE)
 END DO
 !
 !* loop to spare enough time to transfer commands before end of program
@@ -384,14 +384,14 @@ END DO
 !*      12.    EPILOGUE
 !              --------
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 WRITE(ILUOUT0,FMT=*)
 WRITE(ILUOUT0,FMT=*) '************************************************'
 WRITE(ILUOUT0,FMT=*) '* PREP_NEST_PGD: PREP_NEST_PGD ends correctly. *'
 WRITE(ILUOUT0,FMT=*) '************************************************'
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index c06a62092..81ab9dd5e 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -74,9 +74,9 @@
 !!  01/2018      (G.Delautier) SURFEX 8.1
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!  Q. Rodier 01/2019 : add a new filtering for very high slopes in NAM_ZSFILTER
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !
 !----------------------------------------------------------------------------
@@ -89,18 +89,18 @@ USE MODD_CONF_n,ONLY : CSTORAGE_TYPE
 USE MODD_LUNIT,  ONLY : TLUOUT0
 USE MODD_LUNIT_n,ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS, ONLY : XUNDEF
-USE MODD_IO_ll,   ONLY : NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX
+USE MODD_IO,   ONLY : NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX
 USE MODD_IO_SURF_MNH, ONLY : NHALO
 USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR
 !
-USE MODE_POS
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_FIELD
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
-USE MODE_FIELD
+USE MODE_POS
 !
 USE MODI_ZSMT_PGD
 !
@@ -164,12 +164,12 @@ CPROGRAM='PGD   '
 !*    1.      Set default names and parallelized I/O
 !             --------------------------------------
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 NHALO=15
 !
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 !
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => TLUOUT0
@@ -178,8 +178,8 @@ LUNIT_MODEL(1)%TLUOUT => TLUOUT0
 ILUOUT0=TLUOUT0%NLU
 !
 !JUAN
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_PGD1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE,KRESP=IRESP)
+CALL IO_File_add2list(TZNMLFILE,'PRE_PGD1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE,KRESP=IRESP)
 ILUNAM = TZNMLFILE%NLU
 IF (IRESP.NE.0 ) THEN
   WRITE(YMSG,*) 'file PRE_PGD1.nam not found, IRESP=', IRESP
@@ -206,9 +206,9 @@ ENDIF
 !JUANZ
 CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 !
 CALL SURFEX_ALLOC_LIST(1)
@@ -248,16 +248,16 @@ CALL PGD_SURF_ATM(YSURF_CUR,'MESONH','                            ','      ',.FA
 !*    3.      Writes the physiographic fields
 !             -------------------------------
 !
-CALL IO_FILE_ADD2LIST(TZFILE,CPGDFILE,'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5)
+CALL IO_File_add2list(TZFILE,CPGDFILE,'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5)
 !
-CALL IO_FILE_OPEN_ll(TZFILE)
+CALL IO_File_open(TZFILE)
 !
-CALL IO_WRITE_HEADER(TZFILE)
+CALL IO_Header_write(TZFILE)
 !
-CALL IO_WRITE_FIELD(TZFILE,'SURF','EXTE')
-CALL IO_WRITE_FIELD(TZFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TZFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TZFILE,'PACK',LPACK)
+CALL IO_Field_write(TZFILE,'SURF','EXTE')
+CALL IO_Field_write(TZFILE,'L1D', L1D)
+CALL IO_Field_write(TZFILE,'L2D', L2D)
+CALL IO_Field_write(TZFILE,'PACK',LPACK)
 IF ( NDXRATIO <= 0 .AND. NDYRATIO <= 0 ) THEN
   NDXRATIO = 1
   NDYRATIO = 1
@@ -270,13 +270,13 @@ IF ( NXOR <= 0 .AND. NYOR <= 0 ) THEN
   NXOR = 1
   NYOR = 1
 ENDIF
-CALL IO_WRITE_FIELD(TZFILE,'DXRATIO',NDXRATIO)
-CALL IO_WRITE_FIELD(TZFILE,'DYRATIO',NDYRATIO)
-CALL IO_WRITE_FIELD(TZFILE,'XSIZE',  NXSIZE)
-CALL IO_WRITE_FIELD(TZFILE,'YSIZE',  NYSIZE)
-CALL IO_WRITE_FIELD(TZFILE,'XOR',    NXOR)
-CALL IO_WRITE_FIELD(TZFILE,'YOR',    NYOR)
-CALL IO_WRITE_FIELD(TZFILE,'JPHEXT', JPHEXT)
+CALL IO_Field_write(TZFILE,'DXRATIO',NDXRATIO)
+CALL IO_Field_write(TZFILE,'DYRATIO',NDYRATIO)
+CALL IO_Field_write(TZFILE,'XSIZE',  NXSIZE)
+CALL IO_Field_write(TZFILE,'YSIZE',  NYSIZE)
+CALL IO_Field_write(TZFILE,'XOR',    NXOR)
+CALL IO_Field_write(TZFILE,'YOR',    NYOR)
+CALL IO_Field_write(TZFILE,'JPHEXT', JPHEXT)
 !
 TFILE_SURFEX => TZFILE
 ALLOCATE(YSURF_CUR%DUO%CSELECT(0))
@@ -313,8 +313,8 @@ IF (.NOT.LCARTESIAN) THEN
      ZWORK_LON(:,1) = ZWORK_LON(:,2)
      ZWORK_LON(:,IJMAX+2) = ZWORK_LON(:,IJMAX+1)           
    ENDIF   
-   CALL IO_WRITE_FIELD(TZFILE,'LAT',ZWORK_LAT)
-   CALL IO_WRITE_FIELD(TZFILE,'LON',ZWORK_LON)
+   CALL IO_Field_write(TZFILE,'LAT',ZWORK_LAT)
+   CALL IO_Field_write(TZFILE,'LON',ZWORK_LON)
    !
    DEALLOCATE(ZWORK,ZWORK_LAT,ZWORK_LON)
 END IF
@@ -328,13 +328,13 @@ WRITE(ILUOUT0,*) '***************************'
 !*    6.      Close parallelized I/O
 !             ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 !
 CALL SURFEX_DEALLO_LIST
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 06d09417c..7f87fe6a1 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -259,7 +259,7 @@
 !!                              initialized
 !!      Routine WRITE_DESFM1  : to write a DESFM file.
 !!      Routine WRITE_LFIFM1  : to write a LFIFM file.
-!!      Routine IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM).
+!!      Routine IO_File_close : to close a FM-file (DESFM + LFIFM).
 !!
 !!      Module MODE_GRIDPROJ  : contains conformal projection routines
 !!    
@@ -378,7 +378,7 @@
 !!    P.Wautelet : 08/07/2016 : removed MNH_NCWRIT define
 !!     B.VIE 2016 : LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !-------------------------------------------------------------------------------
 !
@@ -399,7 +399,7 @@ USE MODD_GR_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
 USE MODD_HURR_CONF
-USE MODD_IO_ll,            ONLY: TFILEDATA,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
+USE MODD_IO,               ONLY: TFILEDATA,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
 USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
@@ -417,13 +417,13 @@ USE MODD_TURB_n
 !
 USE MODE_EXTRAPOL
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT,           ONLY: IO_WRITE_HEADER
 USE MODE_GRIDCART
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST, IO_FILE_FIND_BYNAME,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname,IO_Filelist_print
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
@@ -564,7 +564,7 @@ IDX_RVT = 1
 !
 !*       2.    OPENNING OF THE FILES
 !              ---------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
 CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
                                    ,YCHEMFILE,YCHEMFILETYPE &
@@ -626,8 +626,8 @@ IF (YATMFILETYPE == 'GRIBEX') THEN
 CALL INIT_NMLVAR()
 CALL READ_VER_GRID(TZPRE_REAL1FILE)
 !
-CALL IO_READ_FIELD(TPGDFILE,'IMAX',NIMAX)
-CALL IO_READ_FIELD(TPGDFILE,'JMAX',NJMAX)
+CALL IO_Field_read(TPGDFILE,'IMAX',NIMAX)
+CALL IO_Field_read(TPGDFILE,'JMAX',NJMAX)
 !
 NIMAX_ll=NIMAX   !! _ll variables are global variables
 NJMAX_ll=NJMAX   !! but the old names are kept in PRE_IDEA1.nam file
@@ -740,14 +740,14 @@ IF(LEN_TRIM(YCHEMFILE)>0)THEN
   CALL READ_CHEM_DATA_NETCDF_CASE(TZPRE_REAL1FILE,YCHEMFILE,TPGDFILE,ZHORI,NVERB,LDUMMY_REAL)
 END IF
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE)
+CALL IO_File_close(TZPRE_REAL1FILE)
 !
 CALL SECOND_MNH(ZTIME2)
 ZREAD = ZTIME2 - ZTIME1 - ZHORI
 !-------------------------------------------------------------------------------
 !
-CALL IO_FILE_ADD2LIST(TINIFILE,CINIFILE,'MNH','WRITE',KLFITYPE=1,KLFIVERB=NVERB)
-CALL IO_FILE_OPEN_ll(TINIFILE)
+CALL IO_File_add2list(TINIFILE,CINIFILE,'MNH','WRITE',KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_File_open(TINIFILE)
 !
 ZTIME1=ZTIME2
 !
@@ -1048,7 +1048,7 @@ IF (YATMFILETYPE=='GRIBEX') THEN
 END IF
 !
 CALL WRITE_DESFM_n(1,TINIFILE)
-CALL IO_WRITE_HEADER(TINIFILE,HDAD_NAME=YDAD_NAME)
+CALL IO_Header_write(TINIFILE,HDAD_NAME=YDAD_NAME)
 CALL WRITE_LFIFM_n(TINIFILE,YDAD_NAME)
 ! 
 CALL SECOND_MNH(ZTIME2)
@@ -1071,8 +1071,8 @@ CALL MNHWRITE_ZS_DUMMY_n(TINIFILE)
 CALL DEALLOCATE_MODEL1(3)
 !
 IF (YATMFILETYPE=='MESONH'.AND. YATMFILE/=YPGDFILE) THEN
-  CALL IO_FILE_FIND_BYNAME(TRIM(YATMFILE),TZATMFILE,IRESP)
-  CALL IO_FILE_CLOSE_ll(TZATMFILE)
+  CALL IO_File_find_byname(TRIM(YATMFILE),TZATMFILE,IRESP)
+  CALL IO_File_close(TZATMFILE)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -1178,12 +1178,12 @@ END IF
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_FILE_CLOSE_ll(TINIFILE)
-CALL IO_FILE_CLOSE_ll(TPGDFILE)
+CALL IO_File_close(TINIFILE)
+CALL IO_File_close(TPGDFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 !
 CALL END_PARA_ll(IINFO_ll)
diff --git a/src/MNH/prep_surf_mnh.f90 b/src/MNH/prep_surf_mnh.f90
index afe9493b2..0e6c02cfb 100644
--- a/src/MNH/prep_surf_mnh.f90
+++ b/src/MNH/prep_surf_mnh.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
@@ -53,7 +53,7 @@ USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
 USE MODD_TIME_n,      ONLY : TDTCUR
 !
-USE MODE_FM,       ONLY : IO_FILE_OPEN_ll
+USE MODE_IO_FILE,     ONLY: IO_File_open
 USE MODE_PREP_CTL, ONLY : PREP_CTL
 !
 USE MODI_INIT_PGD_SURF_ATM
@@ -100,7 +100,7 @@ CALL INIT_PGD_SURF_ATM(YSURF_CUR,'MESONH','PRE',HATMFILE,YATMFILETYPE,  &
 CALL PREP_SURF_ATM(YSURF_CUR,'MESONH',HATMFILE,YATMFILETYPE,HATMFILE,YATMFILETYPE,YLCTL)
 IF (PRESENT(OINIFILEOPEN)) THEN
   !This is done here because model dimensions were not known before this call (for PREP_SURFEX)
-  IF (OINIFILEOPEN) CALL IO_FILE_OPEN_ll(TINIFILE)
+  IF (OINIFILEOPEN) CALL IO_File_open(TINIFILE)
 END IF
 CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','PRE',.FALSE.)
 CALL WRITE_DIAG_SURF_ATM_n(YSURF_CUR,'MESONH','PRE')
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 5de5ce5c6..c21d5caa8 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -26,7 +26,7 @@
 !!    10/10/2011  J.Escobar call INI_PARAZ_ll
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -35,7 +35,7 @@
 USE MODD_CONF,        ONLY : CPROGRAM,&
                              L1D, L2D, LPACK
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
-USE MODD_IO_ll,       ONLY : TFILEDATA, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
+USE MODD_IO,          ONLY : TFILEDATA, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
 USE MODD_LUNIT,       ONLY : TPGDFILE, TLUOUT0
 USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
@@ -43,11 +43,11 @@ USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
 USE MODD_TIME_n,      ONLY : TDTCUR
 !
 USE MODE_FIELD
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_FMWRIT
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -100,7 +100,7 @@ CSTORAGE_TYPE='SU'
 !
 !*       2.    OPENNING OF THE FILES
 !              ---------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
 CALL OPEN_PRC_FILES(TZPRE_REAL1FILE,YATMFILE, YATMFILETYPE,TZATMFILE &
                                    ,YCHEMFILE,YCHEMFILETYPE &
@@ -122,7 +122,7 @@ CALL INI_CST
 !
 !*       4.1   reading of configuration variables
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_REAL1FILE)
+CALL IO_File_close(TZPRE_REAL1FILE)
 !
 !*       4.2   reading of values of some configuration variables in namelist
 !
@@ -130,8 +130,8 @@ CALL INI_FIELD_LIST(1)
 !
 CALL INI_FIELD_SCALARS()
 !
-CALL IO_READ_FIELD(TPGDFILE,'IMAX',II)
-CALL IO_READ_FIELD(TPGDFILE,'JMAX',IJ)
+CALL IO_Field_read(TPGDFILE,'IMAX',II)
+CALL IO_Field_read(TPGDFILE,'JMAX',IJ)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT,JPHEXT)
 CALL SET_DAD0_ll()
 CALL SET_DIM_ll(II, IJ, 1)
@@ -156,10 +156,10 @@ CALL INI_PARAZ_ll(IINFO_ll)
 !* reading of date
 !
 IF (YATMFILETYPE=='MESONH') THEN
-  CALL IO_FILE_ADD2LIST(TZATMFILE,TRIM(YATMFILE),'MNH','READ',KLFITYPE=1,KLFIVERB=1)
-  CALL IO_FILE_OPEN_ll(TZATMFILE)
-  CALL IO_READ_FIELD(TZATMFILE,'DTCUR',TDTCUR)
-  CALL IO_FILE_CLOSE_ll(TZATMFILE)
+  CALL IO_File_add2list(TZATMFILE,TRIM(YATMFILE),'MNH','READ',KLFITYPE=1,KLFIVERB=1)
+  CALL IO_File_open(TZATMFILE)
+  CALL IO_Field_read(TZATMFILE,'DTCUR',TDTCUR)
+  CALL IO_File_close(TZATMFILE)
 ELSE
   TDTCUR%TDATE%YEAR = NUNDEF
   TDTCUR%TDATE%MONTH= NUNDEF
@@ -172,7 +172,7 @@ YSURF_CUR => YSURF_LIST(1)
 CALL READ_ALL_NAMELISTS(YSURF_CUR,'MESONH','PRE',.FALSE.)
 CALL GOTO_SURFEX(1)
 !
-CALL IO_FILE_ADD2LIST(TINIFILE,TRIM(CINIFILE),'PGD','WRITE',KLFITYPE=1,KLFIVERB=1)
+CALL IO_File_add2list(TINIFILE,TRIM(CINIFILE),'PGD','WRITE',KLFITYPE=1,KLFIVERB=1)
 !The open is done later in PREP_SURF_MNH when domain dimensions are known
 !
 TFILE_SURFEX => TINIFILE
@@ -181,11 +181,11 @@ NULLIFY(TFILE_SURFEX)
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_WRITE_HEADER(TINIFILE)
-CALL IO_WRITE_FIELD(TINIFILE,'SURF','EXTE')
-CALL IO_WRITE_FIELD(TINIFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TINIFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TINIFILE,'PACK',LPACK)
+CALL IO_Header_write(TINIFILE)
+CALL IO_Field_write(TINIFILE,'SURF','EXTE')
+CALL IO_Field_write(TINIFILE,'L1D', L1D)
+CALL IO_Field_write(TINIFILE,'L2D', L2D)
+CALL IO_Field_write(TINIFILE,'PACK',LPACK)
 !
 !-------------------------------------------------------------------------------
 WRITE(ILUOUT0,*) ' '
@@ -194,11 +194,11 @@ WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '|   PREP_SURFEX ends correctly   |'
 WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '----------------------------------'
-CALL IO_FILE_CLOSE_ll(TINIFILE)
+CALL IO_File_close(TINIFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 CALL SURFEX_DEALLO_LIST
diff --git a/src/MNH/pressure_in_prep.f90 b/src/MNH/pressure_in_prep.f90
index 844b549d6..7fafcfd88 100644
--- a/src/MNH/pressure_in_prep.f90
+++ b/src/MNH/pressure_in_prep.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1998-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
@@ -71,7 +71,6 @@ END MODULE MODI_PRESSURE_IN_PREP
 !              ------------
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_ANEL_BALANCE_n
diff --git a/src/MNH/prognos.f90 b/src/MNH/prognos.f90
index 791f813af..569a2aa08 100644
--- a/src/MNH/prognos.f90
+++ b/src/MNH/prognos.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2012-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2012-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     #######################
       MODULE MODI_PROGNOS
@@ -67,7 +67,6 @@ USE MODD_CST
 USE MODD_PARAM_C2R2
 USE MODD_RAIN_C2R2_KHKO_PARAM
 !
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_GAMMA
diff --git a/src/MNH/radar_rain_ice.f90 b/src/MNH/radar_rain_ice.f90
index f3d2e2a0d..eddac2294 100644
--- a/src/MNH/radar_rain_ice.f90
+++ b/src/MNH/radar_rain_ice.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 
 !      ##########################
@@ -128,8 +128,6 @@ USE MODD_PARAMETERS
 USE MODD_PARAM_n, ONLY : CCLOUD
 USE MODD_LUNIT
 !
-USE MODE_IO_ll
-!
 IMPLICIT NONE
 !
 !*       0.1   Declarations of dummy arguments :
diff --git a/src/MNH/radar_scattering.f90 b/src/MNH/radar_scattering.f90
index fdc5bf15f..dc3ddc1e5 100644
--- a/src/MNH/radar_scattering.f90
+++ b/src/MNH/radar_scattering.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source$ $Revision$ $Date$
-!-----------------------------------------------------------------
 !     ######spl
        MODULE MODI_RADAR_SCATTERING 
 !      #############################
@@ -106,7 +102,7 @@ END MODULE MODI_RADAR_SCATTERING
 !              ------------
 !
 USE MODD_CST
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,           ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 USE MODD_RAIN_ICE_DESCR, ONLY: XALPHAR_I=>XALPHAR,XNUR_I=>XNUR,XDR_I=>XDR,XLBEXR_I=>XLBEXR,&
@@ -140,10 +136,9 @@ USE MODE_READTMAT
 USE MODE_FGAU , ONLY:GAULAG
 USE MODI_GAMMA, ONLY:GAMMA
 !
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_ll
 USE MODD_LUNIT
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_MSG
 
 !
@@ -750,8 +745,8 @@ DO JI=1,INBRAD
                  E12.5,2X,E12.5,2X,E12.5,2X,E12.5,2X,E12.5)
 
     !rain
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(1),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(1),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(1))
@@ -764,7 +759,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE) 
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()    
     WRITE(ILUOUT0,*) "NLIGNE rain",ILINE      
     ILINE=2
@@ -777,8 +772,8 @@ DO JI=1,INBRAD
     ZIM_S22S11_T_R(ILINE),ZRE_S22FMS11FT_T_R(ILINE),ZIM_S22FT_T_R(ILINE),ZIM_S11FT_T_R(ILINE)
    
     !snow
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(2),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(2),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(2))
@@ -791,7 +786,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
     WRITE(ILUOUT0,*) "NLIGNE snow",ILINE    
     ILINE=2
@@ -804,8 +799,8 @@ DO JI=1,INBRAD
     ZIM_S22S11_T_S(ILINE),ZRE_S22FMS11FT_T_S(ILINE),ZIM_S22FT_T_S(ILINE),ZIM_S11FT_T_S(ILINE)
  
     !graupel
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(3),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(3),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(3))
@@ -818,7 +813,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
     WRITE(ILUOUT0,*) "NLIGNE graupel",ILINE    
     ILINE=2
@@ -831,8 +826,8 @@ DO JI=1,INBRAD
     ZIM_S22S11_T_G(ILINE),ZRE_S22FMS11FT_T_G(ILINE),ZIM_S22FT_T_G(ILINE),ZIM_S11FT_T_G(ILINE)
 
     !wet graupel
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(4),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(4),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(4))
@@ -845,7 +840,7 @@ DO JI=1,INBRAD
       ZIM_S22S11_T_W(ILINE),ZRE_S22FMS11FT_T_W(ILINE),ZIM_S22FT_T_W(ILINE),ZIM_S11FT_T_W(ILINE)
       ILINE=ILINE+1
     ENDDO
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
     WRITE(ILUOUT0,*) "NLIGNE wet graupel",ILINE    
     ILINE=2
@@ -858,8 +853,8 @@ DO JI=1,INBRAD
 
     !hail
     IF (GHAIL) THEN
-    CALL IO_FILE_ADD2LIST(TZFILE,YFILE_COEFINT(5),'TXT','READ')
-    CALL IO_FILE_OPEN_ll(TZFILE,KRESP=IRESP)
+    CALL IO_File_add2list(TZFILE,YFILE_COEFINT(5),'TXT','READ')
+    CALL IO_File_open(TZFILE,KRESP=IRESP)
     IUNIT = TZFILE%NLU
     IF ( IRESP /= 0 ) THEN       
       WRITE(YMSG,*) "problem opening file ",TRIM(YFILE_COEFINT(5))
@@ -872,7 +867,7 @@ DO JI=1,INBRAD
         ZIM_S22S11_T_H(ILINE),ZRE_S22FMS11FT_T_H(ILINE),ZIM_S22FT_T_H(ILINE),ZIM_S11FT_T_H(ILINE)
         ILINE=ILINE+1
       ENDDO
-      CALL IO_FILE_CLOSE_ll(TZFILE)
+      CALL IO_File_close(TZFILE)
       TZFILE => NULL()
       WRITE(ILUOUT0,*) "NLIGNE hail",ILINE    
       ILINE=2
diff --git a/src/MNH/radar_simulator.f90 b/src/MNH/radar_simulator.f90
index 0735b1dc5..1d09ecc69 100644
--- a/src/MNH/radar_simulator.f90
+++ b/src/MNH/radar_simulator.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/Attic/radar_simulator.f90,v $ $Revision: 1.1.2.3.2.1.12.2.2.2 $ $Date: 2015/09/16 14:31:20 $
-!-----------------------------------------------------------------
 !      ###########################
        MODULE MODI_RADAR_SIMULATOR 
 !      ###########################
@@ -63,10 +59,7 @@ END MODULE MODI_RADAR_SIMULATOR
 !!      Module MODD_RAIN_ICE_PARAM
 !!      Module MODD_PARAMETERS
 !!      Module MODD_LUNIT
-!
-!!      Module MODE_IO_ll
-!!      Module MODE_FM
-!
+!!
 !!      Module MODD_GR_FIELD_n
 !!      Module MODD_GRID_n
 !!      Module MODD_CONF_n
@@ -139,7 +132,6 @@ USE MODD_REF
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODD_GR_FIELD_n
diff --git a/src/MNH/radiations.f90 b/src/MNH/radiations.f90
index 2bec821d7..efd8bca80 100644
--- a/src/MNH/radiations.f90
+++ b/src/MNH/radiations.f90
@@ -132,7 +132,7 @@ USE MODD_CST
 USE MODD_DUST,        ONLY: LDUST
 USE MODD_GRID ,       ONLY: XLAT0, XLON0
 USE MODD_GRID_n ,     ONLY: XLAT, XLON
-USE MODD_IO_ll,       ONLY: TFILEDATA
+USE MODD_IO,          ONLY: TFILEDATA
 USE MODD_LUNIT_n,     ONLY: TLUOUT
 USE MODD_NSV,         ONLY: NSV_C2R2,NSV_C2R2BEG,NSV_C2R2END,     &
                             NSV_C1R3,NSV_C1R3BEG,NSV_C1R3END,     &
@@ -150,10 +150,10 @@ USE MODD_SALT,        ONLY: LSALT
 USE MODD_TIME
 !
 USE MODE_DUSTOPT
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_REPRO_SUM, ONLY : SUM_DD_R2_R1_ll,SUM_DD_R1_ll
+USE MODE_REPRO_SUM,      ONLY : SUM_DD_R2_R1_ll,SUM_DD_R1_ll
 !
 #ifdef MNH_PGI
 USE MODE_PACK_PGI
@@ -2699,7 +2699,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2720,7 +2720,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2741,7 +2741,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2762,7 +2762,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2783,7 +2783,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2804,7 +2804,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       DO JJ=IJB,IJE
@@ -2823,7 +2823,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       DO JJ=IJB,IJE
@@ -2842,7 +2842,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2860,7 +2860,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
 !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2878,7 +2878,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2896,7 +2896,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
   END IF
   !
   !
@@ -2920,7 +2920,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2941,7 +2941,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2962,7 +2962,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2983,7 +2983,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3004,7 +3004,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3025,7 +3025,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK-JPVEXT
@@ -3046,7 +3046,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK-JPVEXT
@@ -3067,7 +3067,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3085,7 +3085,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3103,7 +3103,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3121,7 +3121,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
   END IF
   !
   !
@@ -3142,7 +3142,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3160,7 +3160,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3178,7 +3178,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3196,7 +3196,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3214,7 +3214,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3232,7 +3232,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
     !
     !
   END IF
@@ -3258,7 +3258,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3279,7 +3279,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3300,7 +3300,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3321,7 +3321,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3342,7 +3342,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     ! 
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3363,7 +3363,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3384,7 +3384,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3405,7 +3405,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     !
     ! spectral bands
     IF (KSWB_OLD==6) THEN
@@ -3432,7 +3432,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTAUAZ(:,:,:,JBAND))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZTAUAZ(:,:,:,JBAND))
       !
       TZFIELD%CMNHNAME   = 'SSAAER_'//YBAND_NAME(JBAND)
       TZFIELD%CSTDNAME   = ''
@@ -3444,7 +3444,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPIZAZ(:,:,:,JBAND))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPIZAZ(:,:,:,JBAND))
       !
       TZFIELD%CMNHNAME   = 'GAER_'//YBAND_NAME(JBAND)
       TZFIELD%CSTDNAME   = ''
@@ -3456,7 +3456,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCGAZ(:,:,:,JBAND))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZCGAZ(:,:,:,JBAND))
     ENDDO
 
     DO JBAND=1,KSWB_OLD
@@ -3479,7 +3479,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
       !
       DO JK=IKB,IKE
         JKRAD = JK - JPVEXT
@@ -3500,7 +3500,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
       !
       DO JK=IKB,IKE
         JKRAD = JK - JPVEXT
@@ -3521,7 +3521,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
     END DO
   END IF
   !
@@ -3549,7 +3549,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
 ! 
 !cumulated optical thickness of aerosols
 !cumul begin from the top of the domain, not from the TOA !      
@@ -3580,7 +3580,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! sea
     DO JK=IKB,IKE
@@ -3609,7 +3609,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! desert
     DO JK=IKB,IKE
@@ -3638,7 +3638,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! urban
     DO JK=IKB,IKE
@@ -3667,7 +3667,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! Volcanoes
     DO JK=IKB,IKE
@@ -3696,7 +3696,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
 !
 ! stratospheric background
     DO JK=IKB,IKE
@@ -3725,7 +3725,7 @@ IF( OCLOSE_OUT .AND. (KRAD_DIAG >= 1) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSTORE_3D2)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
   ENDIF
 END IF
 !
diff --git a/src/MNH/rain_c2r2_khko.f90 b/src/MNH/rain_c2r2_khko.f90
index 33f070d10..9139c8987 100644
--- a/src/MNH/rain_c2r2_khko.f90
+++ b/src/MNH/rain_c2r2_khko.f90
@@ -1,12 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
-!--------------- special set of characters for RCS information
-!-----------------------------------------------------------------
-! $Source: /home/cvsroot/MNH-VX-Y-Z/src/MNH/Attic/rain_c2r2_khko.f90,v $ $Revision: 1.1.2.1.2.3 $
-!-----------------------------------------------------------------
 !      ######################
        MODULE MODI_RAIN_C2R2_KHKO
 !      ######################
@@ -24,7 +20,7 @@ INTERFACE
                             PSOLORG, PMI, HACTCCN,                              &
                             PINDEP, PSUPSAT, PNACT                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 CHARACTER(LEN=*),         INTENT(IN)    :: HCLOUD   !  kind of cloud
 
@@ -225,7 +221,7 @@ END MODULE MODI_RAIN_C2R2_KHKO
 USE MODD_PARAMETERS
 USE MODD_CST
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAM_C2R2
 USE MODD_RAIN_C2R2_DESCR
 USE MODD_RAIN_C2R2_KHKO_PARAM
@@ -238,9 +234,8 @@ USE MODD_SALT
 USE MODI_BUDGET
 !
 USE MODE_FIELD
-USE MODE_FM
 USE MODE_ll
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODI_GAMMA
 !
 IMPLICIT NONE
@@ -602,7 +597,7 @@ INTEGER                           :: J1
 !   TZFIELD%NTYPE      = TYPEREAL
 !   TZFIELD%NDIMS      = 3
 !   TZFIELD%LTIMEDEP   = .TRUE.
-!   CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCHEN)
+!   CALL IO_Field_write(TPFILE,TZFIELD,ZCHEN)
 ! END IF
 !
 !-------------------------------------------------------------------------------
@@ -885,7 +880,7 @@ IF ( OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZZW1LOG)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZZW1LOG)
 END IF
 !
 !*       3.4   budget storage
@@ -1912,7 +1907,7 @@ DO JN = 1 , KSPLITR
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWSEDC)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWSEDC)
   !
   TZFIELD%CMNHNAME   = 'SEDFLUXR'
   TZFIELD%CSTDNAME   = ''
@@ -1924,7 +1919,7 @@ DO JN = 1 , KSPLITR
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWSEDR)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWSEDR)
  END IF
 END DO
 !
diff --git a/src/MNH/rain_ice.f90 b/src/MNH/rain_ice.f90
index 06f621435..4e627a348 100644
--- a/src/MNH/rain_ice.f90
+++ b/src/MNH/rain_ice.f90
@@ -2,6 +2,7 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######spl
        MODULE MODI_RAIN_ICE
 !      ####################
@@ -252,7 +253,6 @@ USE MODD_BUDGET
 USE MODD_LES
 USE MODI_BUDGET
 USE MODI_GAMMA
-USE MODE_FMWRIT
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/rain_ice_red.f90 b/src/MNH/rain_ice_red.f90
index b2d30ddf9..3f92b1f9e 100644
--- a/src/MNH/rain_ice_red.f90
+++ b/src/MNH/rain_ice_red.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     ######spl
        MODULE MODI_RAIN_ICE_RED
@@ -254,7 +254,6 @@ USE MODI_ICE4_SEDIMENTATION_STAT
 USE MODI_ICE4_SEDIMENTATION_SPLIT
 USE MODI_ICE4_NUCLEATION_WRAPPER
 USE MODI_ICE4_TENDENCIES
-USE MODE_FMWRIT
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/read_all_data_grib_case.f90 b/src/MNH/read_all_data_grib_case.f90
index 8d26d8f74..b782886d0 100644
--- a/src/MNH/read_all_data_grib_case.f90
+++ b/src/MNH/read_all_data_grib_case.f90
@@ -10,7 +10,7 @@ INTERFACE
 SUBROUTINE READ_ALL_DATA_GRIB_CASE(HFILE,TPPRE_REAL1,HGRIB,TPPGDFILE,    &
                     PTIME_HORI,KVERB,ODUMMY_REAL                         ) 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 CHARACTER(LEN=4),  INTENT(IN)    :: HFILE       ! which file ('ATM0','ATM1' or 'CHEM')
 TYPE(TFILEDATA),POINTER,INTENT(INOUT) :: TPPRE_REAL1 ! PRE_REAL1 file
@@ -134,7 +134,7 @@ END MODULE MODI_READ_ALL_DATA_GRIB_CASE
 !------------
 !
 USE MODE_DATETIME
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
+USE MODE_IO_FILE,    ONLY: IO_File_close
 USE MODE_MSG
 USE MODE_TIME
 USE MODE_THERMO
@@ -152,7 +152,7 @@ USE MODI_CH_AER_INIT_SOA
 USE MODI_INI_CTURB
 USE MODI_CH_OPEN_INPUT
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
@@ -1282,7 +1282,7 @@ IF (IMODEL==5) THEN
   ENDIF
   !
   ! close file
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
   !
   !*  2.6.2   exchange mocage values onto prognostic variables XSV_LS
@@ -1660,7 +1660,7 @@ IF (ODUMMY_REAL) THEN
   !*       2.10.1   read 2D dummy fields
   !
   ! close file
-  CALL IO_FILE_CLOSE_ll(TPPRE_REAL1)
+  CALL IO_File_close(TPPRE_REAL1)
   ! open input file
   CALL CH_OPEN_INPUT(TPPRE_REAL1%CNAME, "DUMMY_2D", TZFILE, ILUOUT0, KVERB)
   ICHANNEL = TZFILE%NLU
@@ -1727,7 +1727,7 @@ IF (ODUMMY_REAL) THEN
     !
   END DO
   !
-  CALL IO_FILE_CLOSE_ll(TZFILE)
+  CALL IO_File_close(TZFILE)
   TZFILE => NULL()
   !
   IF (NVERB>=10) THEN
@@ -1854,8 +1854,6 @@ SUBROUTINE SEARCH_FIELD(KGRIB,KNUM,KPARAM,KDIS,KCAT,KNUMBER,KLEV1)
 USE MODD_LUNIT
 USE GRIB_API
 !
-USE MODE_IO_ll
-!
 IMPLICIT NONE
 !
 !
diff --git a/src/MNH/read_all_data_mesonh_case.f90 b/src/MNH/read_all_data_mesonh_case.f90
index 0b619c2a1..01c538421 100644
--- a/src/MNH/read_all_data_mesonh_case.f90
+++ b/src/MNH/read_all_data_mesonh_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -10,7 +10,7 @@ INTERFACE
       SUBROUTINE READ_ALL_DATA_MESONH_CASE(TZPRE_REAL1,HFMFILE,TPPGDFILE, &
                               HDAD_NAME                                   )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),POINTER, INTENT(INOUT) :: TZPRE_REAL1 !PRE_REAL1 file
 CHARACTER(LEN=28), INTENT(IN)    :: HFMFILE    ! name of the Mesonh input file
@@ -111,9 +111,8 @@ END MODULE MODI_READ_ALL_DATA_MESONH_CASE
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_IO_FILE,       only: IO_File_close, IO_File_open
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 USE MODI_READ_GRID_TIME_MESONH_CASE ! interface modules
@@ -128,7 +127,7 @@ USE MODI_ZS_BOUNDARY
 !
 USE MODD_CONF           ! declaration modules
 USE MODD_CONF_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAM_n
 USE MODD_LUNIT
 USE MODD_LUNIT_n
@@ -221,9 +220,9 @@ ZRES    = XRES
 YOUTFILE=CINIFILE
 CINIFILE=HFMFILE
 !
-CALL IO_FILE_CLOSE_ll(TZPRE_REAL1)
+CALL IO_File_close(TZPRE_REAL1)
 CALL INIT_MNH
-CALL IO_FILE_OPEN_ll(TZPRE_REAL1)
+CALL IO_File_open(TZPRE_REAL1)
 !
 CINIFILE=YOUTFILE
 !
@@ -306,14 +305,14 @@ CALL READ_PRC_FMFILE(IIINF_LS,IISUP_LS,IJINF_LS,IJSUP_LS                     )
 !                 ---------
 !
 ALLOCATE(XZS(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
-CALL IO_READ_FIELD(TPPGDFILE,'ZS',XZS)
+CALL IO_Field_read(TPPGDFILE,'ZS',XZS)
 CALL ZS_BOUNDARY(XZS,XZS_LS)
 !
 ALLOCATE(XZSMT(IISUP_LS-IIINF_LS+1,IJSUP_LS-IJINF_LS+1))
 IF (TPPGDFILE%NMNHVERSION(1)<4 .OR. (TPPGDFILE%NMNHVERSION(1)==4 .AND. TPPGDFILE%NMNHVERSION(2)<=6)) THEN
   XZSMT = XZS
 ELSE
-  CALL IO_READ_FIELD(TPPGDFILE,'ZSMT',XZSMT)
+  CALL IO_Field_read(TPPGDFILE,'ZSMT',XZSMT)
 END IF 
 CALL ZS_BOUNDARY(XZSMT,XZSMT_LS)
 !
diff --git a/src/MNH/read_chem_data_netcdf_case.f90 b/src/MNH/read_chem_data_netcdf_case.f90
index 1ba217830..b92f56cc4 100644
--- a/src/MNH/read_chem_data_netcdf_case.f90
+++ b/src/MNH/read_chem_data_netcdf_case.f90
@@ -10,7 +10,7 @@ INTERFACE
 SUBROUTINE READ_CHEM_DATA_NETCDF_CASE(TPPRE_REAL1,HFILE,TPPGDFILE, &
                                       PTIME_HORI,KVERB,ODUMMY_REAL ) 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),POINTER,INTENT(IN) :: TPPRE_REAL1 ! PRE_REAL1 file
 CHARACTER(LEN=28),  INTENT(IN)    :: HFILE      ! name of the NETCDF file
@@ -99,7 +99,7 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT,      ONLY: TLUOUT0
 USE MODE_MODELN_HANDLER
 USE MODD_NETCDF,     ONLY:IDCDF_KIND
@@ -110,15 +110,15 @@ USE MODD_PREP_REAL
 USE MODD_TIME
 USE MODD_TIME_n
 !
-USE MODE_FM
+USE MODE_IO_FILE,    only: IO_File_close
 USE MODE_MPPDB
 USE MODE_THERMO
 USE MODE_TIME
-USE MODE_TOOLS, ONLY: UPCASE
+USE MODE_TOOLS,      ONLY: UPCASE
 !
 USE MODI_CH_AER_INIT_SOA
 USE MODI_CH_INIT_SCHEME_n
-USE MODI_CH_OPEN_INPUT  
+USE MODI_CH_OPEN_INPUT
 USE MODI_HORIBL
 USE MODI_INI_NSV
 USE MODI_READ_HGRID_n
@@ -728,7 +728,7 @@ if (status /= nf90_noerr) call handle_err(status)
 
 ! close
 ! file
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 
 
 !-------------------------------------------------------------
diff --git a/src/MNH/read_desfmn.f90 b/src/MNH/read_desfmn.f90
index 86cde7c74..294bafd45 100644
--- a/src/MNH/read_desfmn.f90
+++ b/src/MNH/read_desfmn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################
@@ -22,7 +22,7 @@ INTERFACE
                    KRIMX,KRIMY,KSV_USER,                                         &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,HEQNSYS     )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
 INTEGER,            INTENT(IN)  :: KMI    ! Model index
@@ -196,7 +196,7 @@ END MODULE MODI_READ_DESFM_n
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODD_IO_ll,   ONLY: NVERB_FATAL, TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/read_dummy_gr_fieldn.f90 b/src/MNH/read_dummy_gr_fieldn.f90
index be766bd67..cd3e1b157 100644
--- a/src/MNH/read_dummy_gr_fieldn.f90
+++ b/src/MNH/read_dummy_gr_fieldn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE READ_DUMMY_GR_FIELD_n(TPINIFILE,KIINF,KISUP,KJINF,KJSUP,OREAD_ALL)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 !*       0.1   declarations of arguments
 !
@@ -74,12 +74,12 @@ END MODULE MODI_READ_DUMMY_GR_FIELD_n
 !*       0.    DECLARATIONS
 !
 USE MODD_DUMMY_GR_FIELD_n
-USE MODE_FIELD,      ONLY : TFIELDDATA,TYPEINT,TYPEREAL
+USE MODE_FIELD,         ONLY: TFIELDDATA, TYPEINT, TYPEREAL
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT, NMNHNAMELGTMAX
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_PARAMETERS,    ONLY: JPHEXT, NMNHNAMELGTMAX
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
 IMPLICIT NONE
@@ -134,8 +134,8 @@ ELSE
   IJINF = KJINF
   IJSUP = KJSUP
   !
-  CALL IO_READ_FIELD(TPINIFILE,'IMAX',IIWORK)
-  CALL IO_READ_FIELD(TPINIFILE,'JMAX',IJWORK)
+  CALL IO_Field_read(TPINIFILE,'IMAX',IIWORK)
+  CALL IO_Field_read(TPINIFILE,'JMAX',IJWORK)
   !
   ALLOCATE(ZWORK(IIWORK+2*JPHEXT,IJWORK+2*JPHEXT))
 END IF
@@ -158,7 +158,7 @@ IF (TPINIFILE%NMNHVERSION(1)>=4) THEN
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,NDUMMY_GR_NBR,IRESP)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,NDUMMY_GR_NBR,IRESP)
   !
   IF (IRESP/=0) THEN
     !callabortstop
@@ -189,7 +189,7 @@ DO JDUMMY=1,NDUMMY_GR_NBR
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
   !
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,ZWORK(:,:),IRESP)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,ZWORK(:,:),IRESP)
   !
   IF (IRESP/=0) THEN
     !callabortstop
diff --git a/src/MNH/read_exsegn.f90 b/src/MNH/read_exsegn.f90
index e8f0e9d73..05faa7b8c 100644
--- a/src/MNH/read_exsegn.f90
+++ b/src/MNH/read_exsegn.f90
@@ -23,7 +23,7 @@ INTERFACE
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
                    HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD                    )
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 !
 INTEGER,            INTENT(IN) :: KMI    ! Model index
 TYPE(TFILEDATA),    INTENT(IN) :: TPEXSEGFILE ! EXSEG file
@@ -299,7 +299,7 @@ USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_CONFZ
 USE MODD_CONF_n,  ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_VAR_ll,  ONLY: NPROC
 !
@@ -352,7 +352,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
diff --git a/src/MNH/read_exspa.f90 b/src/MNH/read_exspa.f90
index 1eb9bd915..f2b15fa20 100644
--- a/src/MNH/read_exspa.f90
+++ b/src/MNH/read_exspa.f90
@@ -102,13 +102,13 @@ END MODULE MODI_READ_EXSPA
 !               ------------
 !
 USE MODD_CONF
-USE MODD_IO_ll,   ONLY : TFILEDATA,TFILE_OUTPUTLISTING
+USE MODD_IO,      ONLY : TFILEDATA,TFILE_OUTPUTLISTING
 USE MODD_LUNIT_n, ONLY : LUNIT_MODEL
 USE MODD_PARAMETERS
 !
-USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO,               only: IO_Config_set
+USE MODE_IO_FILE,          only: IO_File_open, IO_File_close
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_POS
 USE MODE_MODELN_HANDLER
 !
@@ -202,16 +202,16 @@ YSPANBR     = '00'
 YDADINIFILE = ' '
 YDADSPAFILE = ' '
 !
-CALL IO_FILE_ADD2LIST(LUNIT_MODEL(2)%TLUOUT,'OUTPUT_LISTING2','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(LUNIT_MODEL(2)%TLUOUT)
+CALL IO_File_add2list(LUNIT_MODEL(2)%TLUOUT,'OUTPUT_LISTING2','OUTPUTLISTING','WRITE')
+CALL IO_File_open(LUNIT_MODEL(2)%TLUOUT)
 !
 !Set output file for PRINT_MSG
 TFILE_OUTPUTLISTING => LUNIT_MODEL(2)%TLUOUT
 !
 ILUOUT=LUNIT_MODEL(2)%TLUOUT%NLU
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPAWN1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'SPAWN1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUSPA = TZNMLFILE%NLU
 !
 !
@@ -239,8 +239,8 @@ LUNIT_MODEL(2)%CINIFILEPGD = CINIFILEPGD
 CALL POSNAM(ILUSPA,'NAM_CONFIO',GFOUND,ILUOUT)
 IF (GFOUND) READ(ILUSPA,NAM_CONFIO)
 !
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !
 !*       3.    model 1 and SON1 FM file name (passed as arguments)
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 819595627..9c305af69 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -30,7 +30,7 @@ INTERFACE
             PVTH_FLUX_M,PWTH_FLUX_M,PVU_FLUX_M,                              &
             PRUS_PRES,PRVS_PRES,PRWS_PRES,PRTHS_CLD,PRRS_CLD,PRSVS_CLD       )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_TIME ! for type DATE_TIME
 !
 !
@@ -259,7 +259,7 @@ USE MODD_BLOWSNOW
 USE MODD_BLOWSNOW_n
 
 USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LATZ_EDFLX
 USE MODD_LG,              ONLY: CLGNAMES
 USE MODD_LUNIT_N,         ONLY: TLUOUT
@@ -277,8 +277,8 @@ USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_SALT
 USE MODD_TIME ! for type DATE_TIME
 !
-USE MODE_FIELD,           ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEDATE,TYPEREAL
-USE MODE_FMREAD
+USE MODE_FIELD,           ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME, TYPEDATE, TYPEREAL
+USE MODE_IO_FIELD_READ,   only: IO_Field_read
 USE MODE_MSG
 USE MODE_TOOLS,           ONLY: UPCASE
 !
@@ -413,33 +413,33 @@ IF (TPINIFILE%NMNHVERSION(1)<5) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('UT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'UM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PUT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PUT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('VT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'VM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PVT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PVT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('WT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'WM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PWT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PWT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('THT',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'THM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHT)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PTHT)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'PABSM'
-  CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPABST)
+  CALL IO_Field_read(TPINIFILE,TZFIELD,PPABST)
 ELSE
-  CALL IO_READ_FIELD(TPINIFILE,'UT',PUT)
-  CALL IO_READ_FIELD(TPINIFILE,'VT',PVT)
-  CALL IO_READ_FIELD(TPINIFILE,'WT',PWT)
-  CALL IO_READ_FIELD(TPINIFILE,'THT',PTHT)
-  CALL IO_READ_FIELD(TPINIFILE,'PABST',PPABST)
+  CALL IO_Field_read(TPINIFILE,'UT',PUT)
+  CALL IO_Field_read(TPINIFILE,'VT',PVT)
+  CALL IO_Field_read(TPINIFILE,'WT',PWT)
+  CALL IO_Field_read(TPINIFILE,'THT',PTHT)
+  CALL IO_Field_read(TPINIFILE,'PABST',PPABST)
 ENDIF
 !
 SELECT CASE(HGETTKET)                   
@@ -448,13 +448,13 @@ SELECT CASE(HGETTKET)
       CALL FIND_FIELD_ID_FROM_MNHNAME('TKET',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'TKEM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTKET)
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PTKET)
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'TKET',PTKET)
+      CALL IO_Field_read(TPINIFILE,'TKET',PTKET)
     END IF
     IF ( ( (TPINIFILE%NMNHVERSION(1)==5 .AND. TPINIFILE%NMNHVERSION(2)>0) .OR. TPINIFILE%NMNHVERSION(1)>5 ) &
         .AND. (CCONF == 'RESTA') .AND. LSPLIT_CFL) THEN
-      CALL IO_READ_FIELD(TPINIFILE,'TKEMS',PRTKEMS)
+      CALL IO_Field_read(TPINIFILE,'TKEMS',PRTKEMS)
     END IF
   CASE('INIT')
     PTKET(:,:,:)   = XTKEMIN
@@ -467,9 +467,9 @@ SELECT CASE(HGETRVT)             ! vapor
       CALL FIND_FIELD_ID_FROM_MNHNAME('RVT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RVM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RVT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RVT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RVT',PRT(:,:,:,IDX_RVT))
+      CALL IO_Field_read(TPINIFILE,'RVT',PRT(:,:,:,IDX_RVT))
     END IF
   CASE('INIT')
     PRT(:,:,:,IDX_RVT) = 0.
@@ -481,9 +481,9 @@ SELECT CASE(HGETRCT)             ! cloud
       CALL FIND_FIELD_ID_FROM_MNHNAME('RCT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RCM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RCT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RCT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RCT',PRT(:,:,:,IDX_RCT))
+      CALL IO_Field_read(TPINIFILE,'RCT',PRT(:,:,:,IDX_RCT))
     END IF
   CASE('INIT')
     PRT(:,:,:,IDX_RCT) = 0.
@@ -495,9 +495,9 @@ SELECT CASE(HGETRRT)             ! rain
       CALL FIND_FIELD_ID_FROM_MNHNAME('RRT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RRM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RRT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RRT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RRT',PRT(:,:,:,IDX_RRT))
+      CALL IO_Field_read(TPINIFILE,'RRT',PRT(:,:,:,IDX_RRT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RRT) = 0.
@@ -509,9 +509,9 @@ SELECT CASE(HGETRIT)             ! cloud ice
       CALL FIND_FIELD_ID_FROM_MNHNAME('RIT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RIM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RIT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RIT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RIT',PRT(:,:,:,IDX_RIT))
+      CALL IO_Field_read(TPINIFILE,'RIT',PRT(:,:,:,IDX_RIT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RIT) = 0.
@@ -523,9 +523,9 @@ SELECT CASE(HGETRST)             ! snow
       CALL FIND_FIELD_ID_FROM_MNHNAME('RST',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RSM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RST))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RST))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RST',PRT(:,:,:,IDX_RST))
+      CALL IO_Field_read(TPINIFILE,'RST',PRT(:,:,:,IDX_RST))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RST) = 0.
@@ -537,9 +537,9 @@ SELECT CASE(HGETRGT)             ! graupel
       CALL FIND_FIELD_ID_FROM_MNHNAME('RGT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RGM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RGT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RGT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RGT',PRT(:,:,:,IDX_RGT))
+      CALL IO_Field_read(TPINIFILE,'RGT',PRT(:,:,:,IDX_RGT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RGT) = 0.
@@ -551,9 +551,9 @@ SELECT CASE(HGETRHT)             ! hail
       CALL FIND_FIELD_ID_FROM_MNHNAME('RHT',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'RHM'
-      CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RHT))
+      CALL IO_Field_read(TPINIFILE,TZFIELD,PRT(:,:,:,IDX_RHT))
     ELSE
-      CALL IO_READ_FIELD(TPINIFILE,'RHT',PRT(:,:,:,IDX_RHT))
+      CALL IO_Field_read(TPINIFILE,'RHT',PRT(:,:,:,IDX_RHT))
     END IF 
   CASE('INIT')
     PRT(:,:,:,IDX_RHT) = 0.
@@ -561,7 +561,7 @@ END SELECT
 !
 SELECT CASE(HGETCIT)             ! ice concentration
   CASE('READ')
-    IF (SIZE(PCIT) /= 0 ) CALL IO_READ_FIELD(TPINIFILE,'CIT',PCIT)
+    IF (SIZE(PCIT) /= 0 ) CALL IO_Field_read(TPINIFILE,'CIT',PCIT)
   CASE('INIT')
     PCIT(:,:,:)=0.
 END SELECT
@@ -585,7 +585,7 @@ IF (NSV_USER>0) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -607,7 +607,7 @@ IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
         TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
         IF (LSUPSAT .AND. (HGETRVT == 'READ') ) THEN
@@ -638,7 +638,7 @@ IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
         TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -708,7 +708,7 @@ DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
     END IF
 !
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
   CASE ('INIT')
     PSVT(:,:,:,JSV) = 0.
   END SELECT
@@ -734,7 +734,7 @@ IF (NSV_ELECEND>=NSV_ELECBEG) THEN
           TZFIELD%CUNITS     = 'm-3'
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
         END IF
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -757,7 +757,7 @@ IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHGSBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHIM',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -781,7 +781,7 @@ IF (NSV_CHACEND>=NSV_CHACBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'M'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)'
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
 !***ATTENTION: BUG ? field written with a M suffix, read with a T suffix
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
@@ -805,7 +805,7 @@ IF (NSV_CHICEND>=NSV_CHICBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -827,7 +827,7 @@ IF (NSV_SLTEND>=NSV_SLTBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -849,7 +849,7 @@ IF (NSV_SLTDEPEND>=NSV_SLTDEPBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -871,7 +871,7 @@ IF (NSV_DSTEND>=NSV_DSTBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -893,7 +893,7 @@ IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -915,7 +915,7 @@ IF (NSV_AEREND>=NSV_AERBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -937,7 +937,7 @@ IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -959,7 +959,7 @@ IF (NSV_LGEND>=NSV_LGBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -981,7 +981,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CUNITS     = 'kg kg-1'
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           PSVT(:,:,:,JSV) = 0.
         END IF
@@ -990,7 +990,7 @@ IF (NSV_PPEND>=NSV_PPBEG) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
         TZFIELD%CUNITS     = 'm-3'
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PATC(:,:,:,JSV-NSV_PPBEG+1),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PATC(:,:,:,JSV-NSV_PPBEG+1),IRESP)
         IF (IRESP/=0) THEN
           PATC(:,:,:,JSV-NSV_PPBEG+1) = 0.
         ENDIF
@@ -1017,7 +1017,7 @@ IF (NSV_FFEND>=NSV_FFBEG) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
         IF (IRESP /= 0) THEN
           PSVT(:,:,:,JSV) = 0.
         END IF
@@ -1043,7 +1043,7 @@ IF (NSV_CSEND>=NSV_CSBEG) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
         IF (IRESP /= 0) THEN
           PSVT(:,:,:,JSV) = 0.
         END IF
@@ -1068,7 +1068,7 @@ IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
         TZFIELD%CMNHNAME   = 'LINOXT'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -1089,7 +1089,7 @@ IF (NSV_SNWEND>=NSV_SNWBEG) THEN
         TZFIELD%CMNHNAME   = TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
       CASE ('INIT')
         PSVT(:,:,:,JSV) = 0.
     END SELECT
@@ -1109,7 +1109,7 @@ IF (NSV_SNW>=1) THEN
         WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV      
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)') 'X_Y_Z_','SNOWCANO',JSV
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,XSNWCANO(:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,XSNWCANO(:,:,JSV))
       CASE ('INIT')
         XSNWCANO(:,:,JSV) = 0.
     END SELECT
@@ -1120,28 +1120,28 @@ END IF
 !
 IF (CCONF == 'RESTA') THEN
   IF (CTEMP_SCHEME/='LEFR') THEN
-    CALL IO_READ_FIELD(TPINIFILE,'US_PRES',PRUS_PRES)
-    CALL IO_READ_FIELD(TPINIFILE,'VS_PRES',PRVS_PRES)
-    CALL IO_READ_FIELD(TPINIFILE,'WS_PRES',PRWS_PRES)
+    CALL IO_Field_read(TPINIFILE,'US_PRES',PRUS_PRES)
+    CALL IO_Field_read(TPINIFILE,'VS_PRES',PRVS_PRES)
+    CALL IO_Field_read(TPINIFILE,'WS_PRES',PRWS_PRES)
   END IF
   IF (LSPLIT_CFL) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'THS_CLD',PRTHS_CLD)
+    CALL IO_Field_read(TPINIFILE,'THS_CLD',PRTHS_CLD)
     DO JRR = 1, SIZE(PRT,4)
       SELECT CASE(JRR)
         CASE (1)
-          CALL IO_READ_FIELD(TPINIFILE,'RVS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RVS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (2)
-          CALL IO_READ_FIELD(TPINIFILE,'RCS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RCS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (3)
-          CALL IO_READ_FIELD(TPINIFILE,'RRS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RRS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (4)
-          CALL IO_READ_FIELD(TPINIFILE,'RIS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RIS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (5)
-          CALL IO_READ_FIELD(TPINIFILE,'RSS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RSS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (6)
-          CALL IO_READ_FIELD(TPINIFILE,'RGS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RGS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE (7)
-          CALL IO_READ_FIELD(TPINIFILE,'RHS_CLD',PRRS_CLD(:,:,:,JRR))
+          CALL IO_Field_read(TPINIFILE,'RHS_CLD',PRRS_CLD(:,:,:,JRR))
         CASE DEFAULT
           CALL PRINT_MSG(NVERB_FATAL,'GEN','READ_FIELD','PRT is too big')
       END SELECT
@@ -1158,7 +1158,7 @@ IF (CCONF == 'RESTA') THEN
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 3
         TZFIELD%LTIMEDEP   = .TRUE.
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
       END IF
       IF (JSV == NSV_C2R2BEG ) THEN
         TZFIELD%CMNHNAME   = 'RSVS_CLD2'
@@ -1171,7 +1171,7 @@ IF (CCONF == 'RESTA') THEN
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 3
         TZFIELD%LTIMEDEP   = .TRUE.
-        CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
+        CALL IO_Field_read(TPINIFILE,TZFIELD,PRSVS_CLD(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -1182,12 +1182,12 @@ END IF
 IF (CPROGRAM=='MESONH' .AND. HUVW_ADV_SCHEME(1:3)=='CEN' .AND. &
         HTEMP_SCHEME == 'LEFR' ) THEN
   IF (CCONF=='RESTA') THEN
-    CALL IO_READ_FIELD(TPINIFILE,'UM', PUM)
-    CALL IO_READ_FIELD(TPINIFILE,'VM', PVM)
-    CALL IO_READ_FIELD(TPINIFILE,'WM', PWM)
-    CALL IO_READ_FIELD(TPINIFILE,'DUM',PDUM)
-    CALL IO_READ_FIELD(TPINIFILE,'DVM',PDVM)
-    CALL IO_READ_FIELD(TPINIFILE,'DWM',PDWM)
+    CALL IO_Field_read(TPINIFILE,'UM', PUM)
+    CALL IO_Field_read(TPINIFILE,'VM', PVM)
+    CALL IO_Field_read(TPINIFILE,'WM', PWM)
+    CALL IO_Field_read(TPINIFILE,'DUM',PDUM)
+    CALL IO_Field_read(TPINIFILE,'DVM',PDVM)
+    CALL IO_Field_read(TPINIFILE,'DWM',PDWM)
   ELSE
     PUM = PUT
     PVM = PVT
@@ -1216,39 +1216,39 @@ CALL INI_LB(TPINIFILE,GLSOURCE,ISV,                                   &
 !
 !*       2.3  Some special variables:
 !
-CALL IO_READ_FIELD(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass
+CALL IO_Field_read(TPINIFILE,'DRYMASST',PDRYMASST) ! dry mass
 !
 SELECT CASE(HGETSRCT)                ! turbulent flux SRC at time t
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'SRCT',PSRCT)
+    CALL IO_Field_read(TPINIFILE,'SRCT',PSRCT)
   CASE('INIT')
     PSRCT(:,:,:)=0.
 END SELECT
 !
 SELECT CASE(HGETSIGS)                ! subgrid condensation
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'SIGS',PSIGS)
+    CALL IO_Field_read(TPINIFILE,'SIGS',PSIGS)
   CASE('INIT')
     PSIGS(:,:,:)=0.
 END SELECT
 !
 SELECT CASE(HGETPHC)             ! pH in cloud water
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'PHC',PPHC)
+    CALL IO_Field_read(TPINIFILE,'PHC',PPHC)
   CASE('INIT')
     PPHC(:,:,:)=0.
 END SELECT
 !
 SELECT CASE(HGETPHR)             ! pH in rainwater
   CASE('READ')
-    CALL IO_READ_FIELD(TPINIFILE,'PHR',PPHR)
+    CALL IO_Field_read(TPINIFILE,'PHR',PPHR)
   CASE('INIT')
     PPHR(:,:,:)=0.
 END SELECT
 !
 IRESP=0
 IF(HGETCLDFR=='READ') THEN           ! cloud fraction
-  CALL IO_READ_FIELD(TPINIFILE,'CLDFR',PCLDFR,IRESP)
+  CALL IO_Field_read(TPINIFILE,'CLDFR',PCLDFR,IRESP)
 ENDIF
 IF(HGETCLDFR=='INIT' .OR. IRESP /= 0) THEN
   IF(SIZE(PRT,4) > 3) THEN
@@ -1269,7 +1269,7 @@ ENDIF
 !* boundary layer depth
 !
 IF (HGETBL_DEPTH=='READ') THEN
-  CALL IO_READ_FIELD(TPINIFILE,'BL_DEPTH',PBL_DEPTH)
+  CALL IO_Field_read(TPINIFILE,'BL_DEPTH',PBL_DEPTH)
 ELSE
   PBL_DEPTH(:,:)=XUNDEF
 END IF
@@ -1277,7 +1277,7 @@ END IF
 !* surface boundary layer depth
 !
 IF (HGETSBL_DEPTH=='READ') THEN
-  CALL IO_READ_FIELD(TPINIFILE,'SBL_DEPTH',PSBL_DEPTH)
+  CALL IO_Field_read(TPINIFILE,'SBL_DEPTH',PSBL_DEPTH)
 ELSE
   PSBL_DEPTH(:,:)=0.
 END IF
@@ -1287,7 +1287,7 @@ END IF
 SELECT CASE(HGETTKET)                   
   CASE('READ') 
     IF (CSCONV=='EDKF') THEN 
-      CALL IO_READ_FIELD(TPINIFILE,'WTHVMF',PWTHVMF)
+      CALL IO_Field_read(TPINIFILE,'WTHVMF',PWTHVMF)
     ELSE
       PWTHVMF(:,:,:)=0
     ENDIF
@@ -1315,7 +1315,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPDTFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'UFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1327,7 +1327,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PUFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'VFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1339,7 +1339,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'WFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1351,7 +1351,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PWFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PWFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'THFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1363,7 +1363,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1375,7 +1375,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1387,7 +1387,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1399,7 +1399,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDRVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1411,7 +1411,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PGXTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PGXTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1423,7 +1423,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PGYTHFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PGYTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1435,7 +1435,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PPGROUNDFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PPGROUNDFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'TENDUFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1447,7 +1447,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDUFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1459,7 +1459,7 @@ IF ( LFORCING ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTENDVFRC(:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTENDVFRC(:,JT))
   END DO
 END IF
 !
@@ -1479,7 +1479,7 @@ IF (L2D_ADV_FRC) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTADVFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPDTADVFRC(JT))
     !
     TZFIELD%CMNHNAME   = 'TH_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1491,7 +1491,7 @@ IF (L2D_ADV_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDTHFRC(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PDTHFRC(:,:,:,JT))
     !
     TZFIELD%CMNHNAME   = 'Q_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1503,7 +1503,7 @@ IF (L2D_ADV_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PDRVFRC(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PDRVFRC(:,:,:,JT))
   ENDDO
 ENDIF
 !
@@ -1522,7 +1522,7 @@ IF (L2D_REL_FRC) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,TPDTRELFRC(JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,TPDTRELFRC(JT))
     !
     ! Relaxation
     TZFIELD%CMNHNAME   = 'TH_REL'//YFRC
@@ -1535,7 +1535,7 @@ IF (L2D_REL_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PTHREL(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PTHREL(:,:,:,JT))
     !
     TZFIELD%CMNHNAME   = 'Q_REL'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1547,13 +1547,13 @@ IF (L2D_REL_FRC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PRVREL(:,:,:,JT))
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PRVREL(:,:,:,JT))
   ENDDO
 ENDIF
 !
 IF (LUV_FLX) THEN
   IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'VU_FLX',PVU_FLUX_M)
+    CALL IO_Field_read(TPINIFILE,'VU_FLX',PVU_FLUX_M)
   ELSE IF (CCONF == 'START') THEN
     PVU_FLUX_M(:,:,:)=0.
   END IF
@@ -1561,8 +1561,8 @@ ENDIF
 !
 IF (LTH_FLX) THEN
   IF ( CCONF /= 'START' .OR. CPROGRAM=='SPAWN ' ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'VT_FLX',PVTH_FLUX_M)
-    CALL IO_READ_FIELD(TPINIFILE,'WT_FLX',PWTH_FLUX_M)
+    CALL IO_Field_read(TPINIFILE,'VT_FLX',PVTH_FLUX_M)
+    CALL IO_Field_read(TPINIFILE,'WT_FLX',PWTH_FLUX_M)
    ELSE IF (CCONF == 'START') THEN
        PWTH_FLUX_M(:,:,:)=0.
        PVTH_FLUX_M(:,:,:)=0.
diff --git a/src/MNH/read_grid_time_mesonh_case.f90 b/src/MNH/read_grid_time_mesonh_case.f90
index 9c2c6669e..58599b383 100644
--- a/src/MNH/read_grid_time_mesonh_case.f90
+++ b/src/MNH/read_grid_time_mesonh_case.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -90,15 +90,15 @@ END MODULE MODI_READ_GRID_TIME_MESONH_CASE
 USE MODD_CONF
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_LUNIT,            ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_PREP_REAL
 USE MODD_TIME
 USE MODD_TIME_n
 !
-USE MODE_FMREAD
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_find_byname
 !
 USE MODI_DEFAULT_SLEVE
 USE MODI_READ_HGRID
@@ -152,12 +152,12 @@ ZEPS=1.E-10
 !
 !PW: TODO: temporary: look for file from its name
 !     TPFMFILE should be passed in arguments
-CALL IO_FILE_FIND_BYNAME(HFMFILE,TZFMFILE,IRESP)
+CALL IO_File_find_byname(HFMFILE,TZFMFILE,IRESP)
 !
 !*       1.1   Original FMfile name
 !              --------------------
 !
-CALL IO_READ_FIELD(TZFMFILE,'DAD_NAME',HDAD_NAME)
+CALL IO_Field_read(TZFMFILE,'DAD_NAME',HDAD_NAME)
 !
 !-------------------------------------------------------------------------------
 !
@@ -167,12 +167,12 @@ CALL IO_READ_FIELD(TZFMFILE,'DAD_NAME',HDAD_NAME)
 !*       2.1    Projection :
 !               ----------
 !
-CALL IO_READ_FIELD(TZFMFILE,'LON0',ZLON0_LS)
+CALL IO_Field_read(TZFMFILE,'LON0',ZLON0_LS)
 ZLON0_LS =ZLON0_LS +NINT((XLON0    -ZLON0_LS )/360.)*360.
 ! 
-CALL IO_READ_FIELD(TZFMFILE,'RPK', ZRPK_LS)
-CALL IO_READ_FIELD(TZFMFILE,'LAT0',ZLAT0_LS)
-CALL IO_READ_FIELD(TZFMFILE,'BETA',ZBETA_LS)
+CALL IO_Field_read(TZFMFILE,'RPK', ZRPK_LS)
+CALL IO_Field_read(TZFMFILE,'LAT0',ZLAT0_LS)
+CALL IO_Field_read(TZFMFILE,'BETA',ZBETA_LS)
 !
 IF (     (ABS(ZLAT0_LS-XLAT0)>ZEPS*MAX(1.,ABS(XLAT0)))               &
    .OR.  (ABS(ZLON0_LS-XLON0)>ZEPS*MAX(1.,ABS(XLON0)))               &
@@ -215,30 +215,30 @@ END IF
 !               -------------
 !
 !
-CALL IO_READ_FIELD(TZFMFILE,'KMAX',ILMAX_LS)
+CALL IO_Field_read(TZFMFILE,'KMAX',ILMAX_LS)
 !
 ILMAX_LS=ILMAX_LS+2*JPVEXT
 !
 ALLOCATE(XZHAT_LS(ILMAX_LS))
-CALL IO_READ_FIELD(TZFMFILE,'ZHAT',XZHAT_LS)
+CALL IO_Field_read(TZFMFILE,'ZHAT',XZHAT_LS)
 !
 CALL DEFAULT_SLEVE(LSLEVE_LS,XLEN1_LS,XLEN2_LS)
 IF (TZFMFILE%NMNHVERSION(1)<4 .OR. (TZFMFILE%NMNHVERSION(1)==4 .AND. TZFMFILE%NMNHVERSION(2)<=6)) THEN
   LSLEVE_LS = .FALSE.
 ELSE
-  CALL IO_READ_FIELD(TZFMFILE,'SLEVE',LSLEVE_LS)
+  CALL IO_Field_read(TZFMFILE,'SLEVE',LSLEVE_LS)
   IF (LSLEVE_LS) THEN
-    CALL IO_READ_FIELD(TZFMFILE,'LEN1',XLEN1_LS)
-    CALL IO_READ_FIELD(TZFMFILE,'LEN2',XLEN2_LS)
+    CALL IO_Field_read(TZFMFILE,'LEN1',XLEN1_LS)
+    CALL IO_Field_read(TZFMFILE,'LEN2',XLEN2_LS)
   END IF
 END IF
 !
-CALL IO_READ_FIELD(TZFMFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_read(TZFMFILE,'THINSHELL',LTHINSHELL)
 !
 !*       2.5    Time variables :
 !               --------------
 !
-CALL IO_READ_FIELD(TZFMFILE,'DTCUR',TDTCUR)
+CALL IO_Field_read(TZFMFILE,'DTCUR',TDTCUR)
 !
 TDTMOD=TDTCUR
 TDTSEG=TDTCUR
diff --git a/src/MNH/read_hgrid.f90 b/src/MNH/read_hgrid.f90
index b501ea100..26b9881e4 100644
--- a/src/MNH/read_hgrid.f90
+++ b/src/MNH/read_hgrid.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE READ_HGRID(KMI,TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,           INTENT(IN)  :: KMI          ! model index
 TYPE(TFILEDATA),   INTENT(IN)  :: TPFMFILE     ! file n
@@ -80,18 +80,17 @@ END MODULE MODI_READ_HGRID
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_CONF, ONLY : CPROGRAM
+USE MODD_CONF,          ONLY: CPROGRAM
 USE MODD_GRID
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM,    ONLY : SET_FMPACK_ll
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_IO,            ONLY: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -148,9 +147,9 @@ END IF
 !*       2.1    General information :
 !               -------------------
 !
-CALL IO_READ_FIELD(TPFMFILE,'MY_NAME',     HMY_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'DAD_NAME',    HDAD_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
+CALL IO_Field_read(TPFMFILE,'MY_NAME',     HMY_NAME)
+CALL IO_Field_read(TPFMFILE,'DAD_NAME',    HDAD_NAME)
+CALL IO_Field_read(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
 !
 !*       2.2    Grid information :
 !               ----------------
@@ -159,14 +158,14 @@ CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
 !GET_DIM_PHYS_ll impact => 1st one no visible impact
 CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX)
 !
-CALL IO_READ_FIELD(TPFMFILE,'LAT0',  XLAT0)
-CALL IO_READ_FIELD(TPFMFILE,'LON0',  XLON0)
-CALL IO_READ_FIELD(TPFMFILE,'RPK',   XRPK)
-CALL IO_READ_FIELD(TPFMFILE,'BETA',  XBETA)
-CALL IO_READ_FIELD(TPFMFILE,'LATORI',XPGDLATOR)
-CALL IO_READ_FIELD(TPFMFILE,'LONORI',XPGDLONOR)
-CALL IO_READ_FIELD(TPFMFILE,'IMAX',  NPGDIMAX)
-CALL IO_READ_FIELD(TPFMFILE,'JMAX',  NPGDJMAX)
+CALL IO_Field_read(TPFMFILE,'LAT0',  XLAT0)
+CALL IO_Field_read(TPFMFILE,'LON0',  XLON0)
+CALL IO_Field_read(TPFMFILE,'RPK',   XRPK)
+CALL IO_Field_read(TPFMFILE,'BETA',  XBETA)
+CALL IO_Field_read(TPFMFILE,'LATORI',XPGDLATOR)
+CALL IO_Field_read(TPFMFILE,'LONORI',XPGDLONOR)
+CALL IO_Field_read(TPFMFILE,'IMAX',  NPGDIMAX)
+CALL IO_Field_read(TPFMFILE,'JMAX',  NPGDJMAX)
 !
 !20131010 recompute properly NPGDIMAX NPGDJMAX
 !GET_DIM_PHYS_ll impact 2nd one => prevent run failures
@@ -175,38 +174,38 @@ CALL GET_DIM_PHYS_ll ( 'B',NPGDIMAX,NPGDJMAX)
 IF (.NOT.(ALLOCATED(XPGDXHAT))) ALLOCATE(XPGDXHAT(NPGDIMAX+2*JPHEXT))
 IF (.NOT.(ALLOCATED(XPGDYHAT))) ALLOCATE(XPGDYHAT(NPGDJMAX+2*JPHEXT))
 !20131023 change FMREAD option '--' -> 'XX' ou 'YY' for // reading
-CALL IO_READ_FIELD(TPFMFILE,'XHAT',XPGDXHAT)
-CALL IO_READ_FIELD(TPFMFILE,'YHAT',XPGDYHAT)
+CALL IO_Field_read(TPFMFILE,'XHAT',XPGDXHAT)
+CALL IO_Field_read(TPFMFILE,'YHAT',XPGDYHAT)
 !
 !*       3.   Read the configuration (MODD_CONF)
 !
-CALL IO_READ_FIELD(TPFMFILE,'L1D',G1D,IRESP)
+CALL IO_Field_read(TPFMFILE,'L1D',G1D,IRESP)
 IF (IRESP/=0) THEN
   G1D=.FALSE.
   IF( (NPGDIMAX == 1).AND.(NPGDJMAX == 1) ) G1D=.TRUE.
 ENDIF
 !
-CALL IO_READ_FIELD(TPFMFILE,'L2D',G2D,IRESP)
+CALL IO_Field_read(TPFMFILE,'L2D',G2D,IRESP)
 IF (IRESP/=0) THEN
   G2D=.FALSE.
   IF( (NPGDIMAX /= 1).AND.(NPGDJMAX == 1) ) G2D=.TRUE.
 ENDIF
 !
-CALL IO_READ_FIELD(TPFMFILE,'PACK',GPACK,IRESP)
+CALL IO_Field_read(TPFMFILE,'PACK',GPACK,IRESP)
 IF (IRESP/=0) GPACK=.TRUE.
 !
-CALL SET_FMPACK_ll(G1D,G2D,GPACK)
+CALL IO_Pack_set(G1D,G2D,GPACK)
 !-------------------------------------------------------------------------------
 IF (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%NMNHVERSION(2)<=5)) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LONOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XPGDLONOR)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XPGDLONOR)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LATOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XPGDLATOR)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XPGDLATOR)
   !
   ZXHATM = - 0.5 * (XPGDXHAT(1)+XPGDXHAT(2))
   ZYHATM = - 0.5 * (XPGDYHAT(1)+XPGDYHAT(2))
diff --git a/src/MNH/read_hgridn.f90 b/src/MNH/read_hgridn.f90
index 77aa6acd7..0989fed53 100644
--- a/src/MNH/read_hgridn.f90
+++ b/src/MNH/read_hgridn.f90
@@ -10,7 +10,7 @@
 INTERFACE
       SUBROUTINE READ_HGRID_n(TPFMFILE,HMY_NAME,HDAD_NAME,HSTORAGE_TYPE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN)  :: TPFMFILE     ! file n
 CHARACTER(LEN=28), INTENT(OUT) :: HMY_NAME     ! True Name of FM-file
@@ -82,14 +82,14 @@ USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_LUNIT_n
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT, JPMODELMAX
+USE MODD_PARAMETERS,    ONLY: JPHEXT, JPVEXT, JPMODELMAX
 !
-USE MODE_FIELD, ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
+USE MODE_IO,            only: IO_Pack_set
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
 !
@@ -125,9 +125,9 @@ ILUOUT = TLUOUT%NLU
 !*       1.     General information :
 !               -------------------
 !
-CALL IO_READ_FIELD(TPFMFILE,'MY_NAME',     HMY_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'DAD_NAME',    HDAD_NAME)
-CALL IO_READ_FIELD(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
+CALL IO_Field_read(TPFMFILE,'MY_NAME',     HMY_NAME)
+CALL IO_Field_read(TPFMFILE,'DAD_NAME',    HDAD_NAME)
+CALL IO_Field_read(TPFMFILE,'STORAGE_TYPE',HSTORAGE_TYPE)
 !
 !*       2.     Grid information :
 !               ----------------
@@ -136,16 +136,16 @@ IF( (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%N
    .AND. HSTORAGE_TYPE == 'PG') THEN
   LCARTESIAN=.FALSE.
 ELSE
-  CALL IO_READ_FIELD(TPFMFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_read(TPFMFILE,'CARTESIAN',LCARTESIAN)
 ENDIF
-CALL IO_READ_FIELD(TPFMFILE,'LAT0',ZLAT0)
-CALL IO_READ_FIELD(TPFMFILE,'LON0',ZLON0)
-CALL IO_READ_FIELD(TPFMFILE,'BETA',ZBETA,IRESP)
+CALL IO_Field_read(TPFMFILE,'LAT0',ZLAT0)
+CALL IO_Field_read(TPFMFILE,'LON0',ZLON0)
+CALL IO_Field_read(TPFMFILE,'BETA',ZBETA,IRESP)
 IF(IRESP/=0) ZBETA=0.
 IF (.NOT.LCARTESIAN ) THEN
-  CALL IO_READ_FIELD(TPFMFILE,'RPK',   ZRPK)
-  CALL IO_READ_FIELD(TPFMFILE,'LATORI',XLATORI)
-  CALL IO_READ_FIELD(TPFMFILE,'LONORI',XLONORI)
+  CALL IO_Field_read(TPFMFILE,'RPK',   ZRPK)
+  CALL IO_Field_read(TPFMFILE,'LATORI',XLATORI)
+  CALL IO_Field_read(TPFMFILE,'LONORI',XLONORI)
 ENDIF
 !
 IMI = GET_CURRENT_MODEL_INDEX()
@@ -184,9 +184,9 @@ IF (CPROGRAM/='IDEAL ') THEN
   !            b) and arrays XXHAT, XYHAT, XZS, XZSMT are deallocated after this 
   !               routine (as in ini_size_spawn.f90)
   !$20140506 try 'XX','YY' it is FMREADN0_LL scalar reading so leave '--'
-  CALL IO_READ_FIELD(TPFMFILE,'IMAX',  NIMAX)
-  CALL IO_READ_FIELD(TPFMFILE,'JMAX',  NJMAX)
-  CALL IO_READ_FIELD(TPFMFILE,'JPHEXT',IJPHEXT)
+  CALL IO_Field_read(TPFMFILE,'IMAX',  NIMAX)
+  CALL IO_Field_read(TPFMFILE,'JMAX',  NJMAX)
+  CALL IO_Field_read(TPFMFILE,'JPHEXT',IJPHEXT)
   IF ( IJPHEXT .NE. JPHEXT ) THEN
      IF (CPROGRAM == 'REAL' ) THEN
         WRITE(ILUOUT,FMT=*) ' READ_HGRID_N : JPHEXT in PRE_REAL1.nam/NAM_REAL_CONF ( or default value )&
@@ -205,21 +205,21 @@ END IF
 !*       2.1  Read the configuration (MODD_CONF)
 !
 IF (IMI == 1) THEN   
-  CALL IO_READ_FIELD(TPFMFILE,'L1D',L1D,IRESP)
+  CALL IO_Field_read(TPFMFILE,'L1D',L1D,IRESP)
   IF (IRESP/=0) THEN
     L1D=.FALSE.
     IF( (NIMAX == 1).AND.(NJMAX == 1) ) L1D=.TRUE.
   ENDIF
 !
-  CALL IO_READ_FIELD(TPFMFILE,'L2D',L2D,IRESP)
+  CALL IO_Field_read(TPFMFILE,'L2D',L2D,IRESP)
   IF (IRESP/=0) THEN
     L2D=.FALSE.
     IF( (NIMAX /= 1).AND.(NJMAX == 1) ) L2D=.TRUE.
   ENDIF
 !
-  CALL IO_READ_FIELD(TPFMFILE,'PACK',LPACK,IRESP)
+  CALL IO_Field_read(TPFMFILE,'PACK',LPACK,IRESP)
   IF (IRESP/=0) LPACK=.TRUE.
-!  CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+!  CALL IO_Pack_set(L1D,L2D,LPACK)
 END IF
 !
 !*       2.2    Grid information :
@@ -246,8 +246,8 @@ ELSE
 ENDIF
 !JUAN REALZ
 
-CALL IO_READ_FIELD(TPFMFILE,'XHAT',XXHAT)
-CALL IO_READ_FIELD(TPFMFILE,'YHAT',XYHAT)
+CALL IO_Field_read(TPFMFILE,'XHAT',XXHAT)
+CALL IO_Field_read(TPFMFILE,'YHAT',XYHAT)
 !
 !JUAN REALZ
 IF ( CPROGRAM .EQ. "REAL  " ) THEN
@@ -257,7 +257,7 @@ IF (.NOT. (ASSOCIATED(XZS))) ALLOCATE(XZS(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
 ENDIF
 !JUAN REALZ
 
-CALL IO_READ_FIELD(TPFMFILE,'ZS',XZS)
+CALL IO_Field_read(TPFMFILE,'ZS',XZS)
 !
 !JUAN REALZ
 IF ( CPROGRAM .EQ. "REAL  " ) THEN
@@ -270,7 +270,7 @@ ENDIF
 IF (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%NMNHVERSION(2)<=6)) THEN
   XZSMT = XZS
 ELSE
-  CALL IO_READ_FIELD(TPFMFILE,'ZSMT',XZSMT)
+  CALL IO_Field_read(TPFMFILE,'ZSMT',XZSMT)
 !
 END IF
 !
@@ -279,12 +279,12 @@ IF (TPFMFILE%NMNHVERSION(1)<4 .OR. (TPFMFILE%NMNHVERSION(1)==4 .AND. TPFMFILE%NM
   CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LONOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XLONORI)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XLONORI)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME = 'LATOR'
-  CALL IO_READ_FIELD(TPFMFILE,TZFIELD,XLATORI)
+  CALL IO_Field_read(TPFMFILE,TZFIELD,XLATORI)
   !
   ZXHATM = - 0.5 * (XXHAT(1)+XXHAT(2))
   ZYHATM = - 0.5 * (XYHAT(1)+XYHAT(2))
diff --git a/src/MNH/read_precip_field.f90 b/src/MNH/read_precip_field.f90
index 9450008a6..c8251ed16 100644
--- a/src/MNH/read_precip_field.f90
+++ b/src/MNH/read_precip_field.f90
@@ -16,7 +16,7 @@ INTERFACE
                               PINPRC,PACPRC,PINDEP,PACDEP,PINPRR,PINPRR3D,PEVAP3D, &
                               PACPRR,PINPRS,PACPRS,PINPRG,PACPRG,PINPRH,PACPRH     )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 !*       0.1   declarations of arguments
 !
@@ -97,14 +97,13 @@ END MODULE MODI_READ_PRECIP_FIELD
 !-----------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAM_ICE,  ONLY : LDEPOSC
-USE MODD_PARAM_C2R2, ONLY : LDEPOC
-USE MODD_PARAM_LIMA, ONLY : MDEPOC=>LDEPOC                   
+USE MODD_IO,            ONLY: TFILEDATA
+USE MODD_PARAM_ICE,     ONLY: LDEPOSC
+USE MODD_PARAM_C2R2,    ONLY: LDEPOC
+USE MODD_PARAM_LIMA,    ONLY: MDEPOC=>LDEPOC
 !
-USE MODE_FIELD,      ONLY : TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 !
 IMPLICIT NONE
 !
@@ -171,13 +170,13 @@ IF (SIZE(PINPRC) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRC(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRC(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRC(:,:) = 0.0
@@ -191,13 +190,13 @@ IF (SIZE(PINPRC) /= 0 .AND. (LDEPOSC .OR. LDEPOC .OR. MDEPOC) ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINDEP(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACDEP(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINDEP(:,:) = 0.0
@@ -211,19 +210,19 @@ IF (SIZE(PINPRR) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRR(:,:)=Z2D(:,:)/(1000.*3600.)
     !
-    CALL IO_READ_FIELD(TPINIFILE,'INPRR3D',Z3D,IRESP)
+    CALL IO_Field_read(TPINIFILE,'INPRR3D',Z3D,IRESP)
     IF (IRESP == 0) PINPRR3D(:,:,:)=Z3D(:,:,:)
     !
-    CALL IO_READ_FIELD(TPINIFILE,'EVAP3D',Z3D,IRESP)
+    CALL IO_Field_read(TPINIFILE,'EVAP3D',Z3D,IRESP)
     IF (IRESP == 0) PEVAP3D(:,:,:)=Z3D(:,:,:)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRR(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRR(:,:) = 0.0
@@ -239,13 +238,13 @@ IF (SIZE(PINPRS) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRS(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRS(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRS(:,:) = 0.0
@@ -259,13 +258,13 @@ IF (SIZE(PINPRG) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRG(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRG(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRG(:,:) = 0.0
@@ -279,13 +278,13 @@ IF (SIZE(PINPRH) /= 0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PINPRH(:,:)=Z2D(:,:)/(1000.*3600.)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,Z2D,IRESP)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,Z2D,IRESP)
     IF (IRESP == 0) PACPRH(:,:)=Z2D(:,:)/(1000.)
   CASE ('INIT')
     PINPRH(:,:) = 0.0
diff --git a/src/MNH/read_surf_mnh.f90 b/src/MNH/read_surf_mnh.f90
index 21ddfeba6..09c51cee2 100644
--- a/src/MNH/read_surf_mnh.f90
+++ b/src/MNH/read_surf_mnh.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2003-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -136,14 +136,13 @@ END MODULE MODE_READ_SURF_MNH_TOOLS
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODD_CONF,        ONLY: CPROGRAM
-USE MODD_GRID,        ONLY: XRPK,XBETA,XLAT0,XLON0
-USE MODD_IO_SURF_MNH, ONLY: TOUT, TPINFILE
-USE MODD_PARAMETERS,  ONLY: JPHEXT, XUNDEF
+USE MODD_CONF,          ONLY: CPROGRAM
+USE MODD_GRID,          ONLY: XRPK,XBETA,XLAT0,XLON0
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
+USE MODD_PARAMETERS,    ONLY: JPHEXT, XUNDEF
 !
-USE MODE_FIELD,       ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_GRIDPROJ
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
@@ -186,26 +185,26 @@ IF (HREC=='LONORI' .OR. HREC=='LATORI') THEN
       ZRPK  = XRPK
       ZBETA = XBETA
       !* reads projection and grid data in the file
-      CALL IO_READ_FIELD(TPINFILE,'LAT0',XLAT0)
-      CALL IO_READ_FIELD(TPINFILE,'LON0',XLON0)
-      CALL IO_READ_FIELD(TPINFILE,'RPK', XRPK)
-      CALL IO_READ_FIELD(TPINFILE,'BETA',XBETA)
+      CALL IO_Field_read(TPINFILE,'LAT0',XLAT0)
+      CALL IO_Field_read(TPINFILE,'LON0',XLON0)
+      CALL IO_Field_read(TPINFILE,'RPK', XRPK)
+      CALL IO_Field_read(TPINFILE,'BETA',XBETA)
       !
-      CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
-      CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
+      CALL IO_Field_read(TPINFILE,'IMAX',IIMAX)
+      CALL IO_Field_read(TPINFILE,'JMAX',IJMAX)
       ALLOCATE(ZXHAT(IIMAX+2*JPHEXT),ZYHAT(IJMAX+2*JPHEXT))
-      CALL IO_READ_FIELD(TPINFILE,'XHAT',ZXHAT)
-      CALL IO_READ_FIELD(TPINFILE,'YHAT',ZYHAT)
+      CALL IO_Field_read(TPINFILE,'XHAT',ZXHAT)
+      CALL IO_Field_read(TPINFILE,'YHAT',ZYHAT)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'LONOR'
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZLONOR)
+      CALL IO_Field_read(TPINFILE,TZFIELD,ZLONOR)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CMNHNAME = 'LATOR'
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZLATOR)
+      CALL IO_Field_read(TPINFILE,TZFIELD,ZLATOR)
       !
       ZXHATM = - 0.5 * (ZXHAT(1)+ZXHAT(2))
       ZYHATM = - 0.5 * (ZYHAT(1)+ZYHAT(2))
@@ -227,10 +226,10 @@ END IF
 
 IF ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA'  &
                  .OR. HREC=='LATORI'.OR. HREC=='LONORI'                  ) THEN
-  CALL IO_READ_FIELD(TPINFILE,HREC,PFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,HREC,PFIELD,KRESP)
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEREAL,0,'READ_SURFX0_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
 END IF
 
 IF (KRESP /=0) THEN
@@ -284,22 +283,20 @@ END SUBROUTINE READ_SURFX0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_CST,         ONLY : XPI
+USE MODD_CST,           ONLY: XPI
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE, &
-                             NIU_ALL, NJU_ALL, NIB_ALL,    &
-                             NJB_ALL, NIE_ALL, NJE_ALL,    &
-                             NMASK_ALL
-USE MODD_PARAMETERS, ONLY: XUNDEF
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE, &
+                              NIU_ALL, NJU_ALL, NIB_ALL,    &
+                              NJB_ALL, NIE_ALL, NJE_ALL,    &
+                              NMASK_ALL
+USE MODD_PARAMETERS,    ONLY: XUNDEF
 !
 USE MODI_PACK_2D_1D
 !
@@ -370,12 +367,12 @@ END IF
 !
 IF (HREC=='LAT') THEN
 
-  CALL IO_READ_FIELD(TPINFILE,'LAT0',ZW,KRESP)
+  CALL IO_Field_read(TPINFILE,'LAT0',ZW,KRESP)
   PFIELD(:) = ZW
 
 ELSE IF (HREC=='LON') THEN
 
-  CALL IO_READ_FIELD(TPINFILE,'LON0',ZW,KRESP)
+  CALL IO_Field_read(TPINFILE,'LON0',ZW,KRESP)
   PFIELD(:) = ZW
 
 ELSE IF (HREC=='MESH_SIZE') THEN
@@ -395,7 +392,7 @@ ELSE IF (HREC=='XX') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
   DO JJ = 1,IJU
     ZWORK(IIB:IIE,JJ) = 0.5 * ZWORK1D(IIB:IIE) + 0.5 * ZWORK1D(IIB+1:IIE+1)
   END DO
@@ -414,7 +411,7 @@ ELSE IF (HREC=='DX') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
   DO JJ = 1,IJU
     ZWORK(IIB:IIE,JJ) = - ZWORK1D(IIB:IIE) + ZWORK1D(IIB+1:IIE+1)
   END DO
@@ -433,7 +430,7 @@ ELSE IF (HREC=='YY') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
   DO JI = 1,IIU
     ZWORK(JI,IJB:IJE) = 0.5 * ZWORK1D(IJB:IJE) + 0.5 * ZWORK1D(IJB+1:IJE+1)
   END DO
@@ -452,7 +449,7 @@ ELSE IF (HREC=='DY') THEN
   ELSE
     TZFIELD%CDIR       = '--'
   END IF
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK1D,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK1D,KRESP)
   DO JI = 1,IIU
     ZWORK(JI,IJB:IJE) = - ZWORK1D(IJB:IJE) + ZWORK1D(IJB+1:IJE+1)
   END DO
@@ -468,7 +465,7 @@ ELSE
   YREC(1:LEN(HREC)) = HREC
   IF (HREC(1:8)=='Q_CANYON') THEN
     IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN
-      CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
+      CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
       IF (YSTORAGE_TYPE=='TT') THEN
         PFIELD = 0.
         DEALLOCATE(IMASK)
@@ -480,7 +477,7 @@ ELSE
   END IF
   IF (HREC(1:8)=='T_CANYON') THEN
     IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<=5)) THEN
-      CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
+      CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YSTORAGE_TYPE)
       IF (YSTORAGE_TYPE=='TT') YREC = 'T_ROAD1             '
     END IF
   END IF
@@ -494,13 +491,13 @@ ELSE
 !
   IF (HDIR=='H') THEN
     CALL PREPARE_METADATA_READ_SURF(YREC,'XY',4,TYPEREAL,2,'READ_SURFX1_MNH',TZFIELD)
-    CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+    CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
   ELSEIF (HDIR=='A'.OR.HDIR=='E') THEN
     CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,2,'READ_SURFX1_MNH',TZFIELD)
-    CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+    CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
   ELSE
     CALL PREPARE_METADATA_READ_SURF(YREC,'--',4,TYPEREAL,1,'READ_SURFX1_MNH',TZFIELD)
-    CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP)
+    CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
   END IF
 !
   IF (KRESP /=0) THEN
@@ -574,16 +571,14 @@ END SUBROUTINE READ_SURFX1_MNH
 !             ------------
 !
 USE MODE_ll
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, &
-                             NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, NMASK_ALL
-USE MODD_PARAMETERS,  ONLY : XUNDEF
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, NIU, NJU, NIB, NJB, NIE, NJE, &
+                              NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL, NIE_ALL, NJE_ALL, NMASK_ALL
+USE MODD_PARAMETERS,    ONLY: XUNDEF
 !
 USE MODI_PACK_2D_1D
 !
@@ -631,14 +626,14 @@ ILUOUT = TOUT%NLU
 IF (HDIR=='H') THEN
   ALLOCATE(ZWORK(NIU,NJU,SIZE(PFIELD,2)))
   CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEREAL,3,'READ_SURFX2_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
 ELSEIF (HDIR=='A'.OR.HDIR=='E') THEN
   ALLOCATE(ZWORK(NIU_ALL,NJU_ALL,SIZE(PFIELD,2)))
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',4,TYPEREAL,3,'READ_SURFX2_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK,KRESP)
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',4,TYPEREAL,2,'READ_SURFX2_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,PFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,PFIELD,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -710,20 +705,18 @@ END SUBROUTINE READ_SURFX2_MNH
 !
 USE MODE_ll
 USE MODE_FIELD,          ONLY: TFIELDDATA,TYPELOG,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_DATA_COVER_PAR, ONLY : JPCOVER
-USE MODD_CST,            ONLY : XPI
+USE MODD_DATA_COVER_PAR, ONLY: JPCOVER
+USE MODD_CST,            ONLY: XPI
 !
-USE MODD_IO_SURF_MNH,    ONLY : TOUT, TPINFILE, NMASK, &
-                                NIU, NJU, NIB, NJB, NIE, NJE, &
-                                NIU_ALL, NJU_ALL, NIB_ALL,    &
-                                NJB_ALL, NIE_ALL, NJE_ALL,    &
-                                NMASK_ALL
+USE MODD_IO_SURF_MNH,    ONLY: TOUT, TPINFILE, NMASK, &
+                               NIU, NJU, NIB, NJB, NIE, NJE, &
+                               NIU_ALL, NJU_ALL, NIB_ALL,    &
+                               NJB_ALL, NIE_ALL, NJE_ALL,    &
+                               NMASK_ALL
 !
 USE MODI_PACK_2D_1D
 !
@@ -800,8 +793,8 @@ NCOVER=COUNT(OFLAG)
 ALLOCATE (ZWORK3D(IIU,IJU,NCOVER))
 ZWORK3D(:,:,:) =  0.0
 !
-CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION)
-CALL IO_READ_FIELD(TPINFILE,'BUG',    IBUGFIX)
+CALL IO_Field_read(TPINFILE,'VERSION',IVERSION)
+CALL IO_Field_read(TPINFILE,'BUG',    IBUGFIX)
 
 IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN
   GCOVER_PACKED = .FALSE.
@@ -816,7 +809,7 @@ ELSE
   TZFIELD%NTYPE      = TYPELOG
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED)
+  CALL IO_Field_read(TPINFILE,TZFIELD,GCOVER_PACKED)
 END IF
 !
 IF (.NOT. GCOVER_PACKED) THEN
@@ -835,13 +828,13 @@ IF (.NOT. GCOVER_PACKED) THEN
     TZFIELD%CDIR       = YDIR
     IF (OFLAG(JL2)) THEN
       ICOVER=ICOVER+1
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,ICOVER),IRESP)
+      CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK3D(:,:,ICOVER),IRESP)
     END IF
     IF (IRESP/=0) KRESP=IRESP
   END DO
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,YDIR,4,TYPEREAL,3,'READ_SURFX2COV_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK3D(:,:,:),KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -904,20 +897,18 @@ END SUBROUTINE READ_SURFX2COV_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPELOG,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG,TYPEREAL
 USE MODE_ll
-USE MODE_IO_ll
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
-USE MODD_CST,         ONLY : XPI
+USE MODD_CST,           ONLY: XPI
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE, &
-                             NIU_ALL, NJU_ALL, NIB_ALL,    &
-                             NJB_ALL, NIE_ALL, NJE_ALL,    &
-                             NMASK_ALL
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK,        &
+                              NIU, NJU, NIB, NJB, NIE, NJE, &
+                              NIU_ALL, NJU_ALL, NIB_ALL,    &
+                              NJB_ALL, NIE_ALL, NJE_ALL,    &
+                              NMASK_ALL
 !
 USE MODI_PACK_2D_1D
 !
@@ -995,8 +986,8 @@ END IF
 ALLOCATE (ZWORK2D(IIU,IJU))
 ZWORK2D(:,:) =  0.0
 !
-CALL IO_READ_FIELD(TPINFILE,'VERSION',IVERSION)
-CALL IO_READ_FIELD(TPINFILE,'BUG',    IBUGFIX)
+CALL IO_Field_read(TPINFILE,'VERSION',IVERSION)
+CALL IO_Field_read(TPINFILE,'BUG',    IBUGFIX)
 
 IF (IVERSION<7 .OR. (IVERSION==7 .AND. IBUGFIX==0)) THEN
   GCOVER_PACKED = .FALSE.
@@ -1011,7 +1002,7 @@ ELSE
   TZFIELD%NTYPE      = TYPELOG
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,GCOVER_PACKED,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,GCOVER_PACKED,KRESP)
 END IF
 !
 IF (.NOT. GCOVER_PACKED) THEN
@@ -1026,7 +1017,7 @@ IF (.NOT. GCOVER_PACKED) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,ZWORK2D,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,ZWORK2D,KRESP)
 ELSE
   WRITE(ILUOUT,*) 'WARNING'
   WRITE(ILUOUT,*) '-------'
@@ -1092,16 +1083,15 @@ END SUBROUTINE READ_SURFX2COV_1COV_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEINT
-USE MODE_FM
-USE MODE_FMREAD
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE
-USE MODD_CONF,        ONLY : CPROGRAM
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_CONF,          ONLY: CPROGRAM
 !
 !
 !
@@ -1129,12 +1119,12 @@ ILUOUT = TOUT%NLU
 !
 IF (HREC=='DIM_FULL' .AND. ( CPROGRAM=='IDEAL ' .OR.  &
                                   CPROGRAM=='SPAWN ' .OR. CPROGRAM=='ZOOMPG' ))THEN
-   CALL IO_READ_FIELD(TPINFILE,'IMAX',IIMAX)
-   CALL IO_READ_FIELD(TPINFILE,'JMAX',IJMAX)
+   CALL IO_Field_read(TPINFILE,'IMAX',IIMAX)
+   CALL IO_Field_read(TPINFILE,'JMAX',IJMAX)
    KFIELD = IIMAX * IJMAX
 ELSE
    CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,0,'READ_SURFN0_MNH',TZFIELD)
-   CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP)
+   CALL IO_Field_read(TPINFILE,TZFIELD,KFIELD,KRESP)
 
     IF (KRESP /=0) THEN
       WRITE(ILUOUT,*) 'WARNING'
@@ -1189,14 +1179,13 @@ END SUBROUTINE READ_SURFN0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEINT
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE
 !
 USE MODI_PACK_2D_1D
 !
@@ -1231,13 +1220,13 @@ ILUOUT = TOUT%NLU
 IF (HDIR=='-') THEN
 !
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPEINT,1,'READ_SURFN1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,KFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,KFIELD,KRESP)
 !
 ELSE IF (HDIR=='H') THEN
   ALLOCATE(IWORK(NIU,NJU))
 !
   CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFN1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,IWORK,KRESP)
 !
  IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
@@ -1296,16 +1285,16 @@ END SUBROUTINE READ_SURFN1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
+USE MODE_FIELD,         ONLY: TFIELDDATA, TYPECHAR
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR
-USE MODE_FMREAD
 USE MODE_MSG
 USE MODE_POS
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
-USE MODD_CONF,        ONLY : LCARTESIAN, CPROGRAM
-USE MODD_LUNIT,       ONLY : TPGDFILE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
+USE MODD_CONF,          ONLY: LCARTESIAN, CPROGRAM
+USE MODD_LUNIT,         ONLY: TPGDFILE
 !
 !
 IMPLICIT NONE
@@ -1381,7 +1370,7 @@ IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NM
       END IF
     CASE DEFAULT
       CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD)
-      CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP)
+      CALL IO_Field_read(TPINFILE,TZFIELD,HFIELD,KRESP)
       !
       IF (KRESP /=0) THEN
         CALL PRINT_MSG(NVERB_FATAL,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': error when reading article '//TRIM(HREC)// &
@@ -1399,7 +1388,7 @@ ELSE IF ( HREC=='GRID_TYPE'.AND. ( &
   END IF
 ELSE
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPECHAR,0,'READ_SURFC0_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,HFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,HFIELD,KRESP)
   !
   IF (KRESP /=0) THEN
         CALL PRINT_MSG(NVERB_FATAL,'IO','READ_SURFC0_MNH',TRIM(TPINFILE%CNAME)//': error when reading article '//TRIM(HREC)// &
@@ -1451,12 +1440,11 @@ END SUBROUTINE READ_SURFC0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE, NMASK, &
-                             NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE, NMASK, &
+                              NIU, NJU, NIB, NJB, NIE, NJE
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPEINT,TYPELOG
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT,TYPELOG
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
@@ -1493,7 +1481,7 @@ ILUOUT = TOUT%NLU
 !
 IF (HDIR=='-') THEN
   CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,1,'READ_SURFL1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
 
   IF (KRESP /=0) THEN
     WRITE(ILUOUT,*) 'WARNING'
@@ -1508,7 +1496,7 @@ ELSE IF (HDIR=='H') THEN
 !
   ALLOCATE(IWORK(NIU,NJU))
   CALL PREPARE_METADATA_READ_SURF(HREC,'XY',4,TYPEINT,2,'READ_SURFL1_MNH',TZFIELD)
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,IWORK,KRESP)
+  CALL IO_Field_read(TPINFILE,TZFIELD,IWORK,KRESP)
   WHERE (IWORK==1) GWORK = .TRUE.
   DEALLOCATE(IWORK)
 !
@@ -1567,13 +1555,12 @@ END SUBROUTINE READ_SURFL1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPELOG
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 USE MODE_READ_SURF_MNH_TOOLS
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
 !
 !
 IMPLICIT NONE
@@ -1611,7 +1598,7 @@ IF (HREC=='ECOCLIMAP') THEN
 END IF
 !
 CALL PREPARE_METADATA_READ_SURF(HREC,'--',0,TYPELOG,0,'READ_SURFL0_MNH',TZFIELD)
-CALL IO_READ_FIELD(TPINFILE,TZFIELD,OFIELD,KRESP)
+CALL IO_Field_read(TPINFILE,TZFIELD,OFIELD,KRESP)
 HCOMMENT = TZFIELD%CCOMMENT
 !
 IF (KRESP /=0) THEN
@@ -1665,13 +1652,12 @@ END SUBROUTINE READ_SURFL0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA,TYPECHAR
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
 USE MODD_TYPE_DATE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
 !
 !
 IMPLICIT NONE
@@ -1705,7 +1691,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT0_MNH',TRIM(TPINFILE%CNAME)//': readi
 ILUOUT = TOUT%NLU
 !
 IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN
-  CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
+  CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
 ELSE
   TZFIELD%CMNHNAME   = 'STORAGETYPE'
   TZFIELD%CSTDNAME   = ''
@@ -1717,7 +1703,7 @@ ELSE
   TZFIELD%NTYPE      = TYPECHAR
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40)
+  CALL IO_Field_read(TPINFILE,TZFIELD,YFILETYPE40)
   YFILETYPE2 = YFILETYPE40(1:2)
 END IF
 IF (YFILETYPE2(1:2)=='PG') THEN
@@ -1730,7 +1716,7 @@ IF (YFILETYPE2(1:2)=='PG') THEN
   RETURN
 END IF
 !
-CALL IO_READ_FIELD(TPINFILE,HREC,TZDATETIME,KRESP)
+CALL IO_Field_read(TPINFILE,HREC,TZDATETIME,KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
@@ -1789,12 +1775,11 @@ END SUBROUTINE READ_SURFT0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY : TFIELDDATA,TYPECHAR,TYPEINT,TYPEREAL
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,         ONLY: TFIELDDATA, TYPECHAR, TYPEINT, TYPEREAL
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_MSG
 !
-USE MODD_IO_SURF_MNH, ONLY : TOUT, TPINFILE
+USE MODD_IO_SURF_MNH,   ONLY: TOUT, TPINFILE
 !
 !
 IMPLICIT NONE
@@ -1829,7 +1814,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','READ_SURFT1_MNH',TRIM(TPINFILE%CNAME)//': readi
 ILUOUT = TOUT%NLU
 !
 IF (TPINFILE%NMNHVERSION(1)<4 .OR. (TPINFILE%NMNHVERSION(1)==4 .AND. TPINFILE%NMNHVERSION(2)<6)) THEN
-  CALL IO_READ_FIELD(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
+  CALL IO_Field_read(TPINFILE,'STORAGE_TYPE',YFILETYPE2)
 ELSE
   TZFIELD%CMNHNAME   = 'STORAGETYPE'
   TZFIELD%CSTDNAME   = ''
@@ -1841,7 +1826,7 @@ ELSE
   TZFIELD%NTYPE      = TYPECHAR
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_READ_FIELD(TPINFILE,TZFIELD,YFILETYPE40)
+  CALL IO_Field_read(TPINFILE,TZFIELD,YFILETYPE40)
   YFILETYPE2 = YFILETYPE40(1:2)
 END IF
 !IF (YFILETYPE2(1:2)=='PG') THEN
@@ -1865,7 +1850,7 @@ TZFIELD%NTYPE      = TYPEINT
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
 !
-CALL IO_READ_FIELD(TPINFILE,TZFIELD,ITDATE(:,:),KRESP)
+CALL IO_Field_read(TPINFILE,TZFIELD,ITDATE(:,:),KRESP)
 !
 KYEAR(:)  = ITDATE(1,:)
 KMONTH(:) = ITDATE(2,:)
@@ -1890,7 +1875,7 @@ TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
 !
-CALL IO_READ_FIELD(TPINFILE,TZFIELD,PTIME(:),KRESP)
+CALL IO_Field_read(TPINFILE,TZFIELD,PTIME(:),KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE(ILUOUT,*) 'WARNING'
diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90
index 42183bf94..e9d83fe22 100644
--- a/src/MNH/read_ver_grid.f90
+++ b/src/MNH/read_ver_grid.f90
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE READ_VER_GRID(TPPRE_REAL1,PZHAT,OSLEVE,PLEN1,PLEN2)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),POINTER,      INTENT(IN) :: TPPRE_REAL1! namelist file
 REAL, DIMENSION(:), OPTIONAL, INTENT(IN) :: PZHAT      ! vertival grid of input fmfile
@@ -104,11 +104,10 @@ END MODULE MODI_READ_VER_GRID
 USE MODD_CONF           ! declaration modules
 USE MODD_DIM_n, NKMAX_n=>NKMAX
 USE MODD_GRID_n, LSLEVE_n=>LSLEVE, XLEN1_n=>XLEN1, XLEN2_n=>XLEN2
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
-USE MODE_FM
 USE MODE_MSG
 USE MODE_POS
 !
diff --git a/src/MNH/rel_forcingn.f90 b/src/MNH/rel_forcingn.f90
index b85cff608..e057e1223 100644
--- a/src/MNH/rel_forcingn.f90
+++ b/src/MNH/rel_forcingn.f90
@@ -109,7 +109,6 @@ USE MODD_RELFRC_n     ! Modules for time evolving advfrc
 USE MODD_TIME
 !
 USE MODE_DATETIME
-USE MODE_IO_ll
 !
 USE MODI_BUDGET
 USE MODI_SHUMAN
diff --git a/src/MNH/reset_exseg.f90 b/src/MNH/reset_exseg.f90
index ca4903a6d..5c6a80d42 100644
--- a/src/MNH/reset_exseg.f90
+++ b/src/MNH/reset_exseg.f90
@@ -60,17 +60,15 @@ END MODULE MODI_RESET_EXSEG
 !
 !*       0.    DECLARATIONS
 !              ------------
-USE MODE_FM, ONLY : IO_FILE_OPEN_ll,IO_FILE_CLOSE_ll
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME
+USE MODE_IO_FILE,          ONLY : IO_File_open,IO_File_close
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_find_byname
 USE MODE_POS
 !
 USE MODD_DIAG_FLAG
 USE MODD_CH_MNHC_n, ONLY: LUSECHEM
 USE MODD_CONF_n, ONLY: LUSERV
 USE MODD_GET_n
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_PARAM_n, ONLY: CDCONV, CRAD
 USE MODN_PARAM_KAFR_n
 USE MODN_PARAM_RAD_n
@@ -97,8 +95,8 @@ TYPE(TFILEDATA),POINTER :: TZNMLFILE! Namelist file
 !
 TZNMLFILE  => NULL()
 !
-CALL IO_FILE_FIND_BYNAME('DIAG1.nam',TZNMLFILE,IRESP)
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_find_byname('DIAG1.nam',TZNMLFILE,IRESP)
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 !-------------------------------------------------------------------------------
@@ -186,6 +184,6 @@ PRINT*,' '
 !
 !-------------------------------------------------------------------------------
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 END SUBROUTINE RESET_EXSEG
diff --git a/src/MNH/resolved_cloud.f90 b/src/MNH/resolved_cloud.f90
index 7713aeb71..67ba3a572 100644
--- a/src/MNH/resolved_cloud.f90
+++ b/src/MNH/resolved_cloud.f90
@@ -25,7 +25,7 @@ INTERFACE
                                   PINDEP, PSUPSAT,  PNACT, PNPRO,PSSPRO,               &
                                   PSEA,PTOWN          )   
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 CHARACTER(LEN=4),         INTENT(IN)   :: HCLOUD   ! kind of cloud
 CHARACTER(LEN=4),         INTENT(IN)   :: HACTCCN  ! kind of CCN activation scheme
@@ -275,7 +275,7 @@ USE MODD_CH_AEROSOL,     ONLY: LORILAM
 USE MODD_DUST,           ONLY: LDUST
 USE MODD_CST,            ONLY: XCI, XCL, XCPD, XCPV, XLSTT, XLVTT, XMNH_TINY, XP00, XRD, XRHOLW, XTT
 USE MODD_DUST ,          ONLY: LDUST
-USE MODD_IO_ll,          ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_NSV,            ONLY: NSV_C1R3END, NSV_C2R2BEG, NSV_C2R2END,                            &
                                NSV_LIMA_BEG, NSV_LIMA_END, NSV_LIMA_CCN_FREE, NSV_LIMA_IFN_FREE, &
                                NSV_LIMA_NC, NSV_LIMA_NI, NSV_LIMA_NR
diff --git a/src/MNH/resolved_elecn.f90 b/src/MNH/resolved_elecn.f90
index aaa23d218..f1d9b42f9 100644
--- a/src/MNH/resolved_elecn.f90
+++ b/src/MNH/resolved_elecn.f90
@@ -2,6 +2,7 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ###########################
       MODULE MODI_RESOLVED_ELEC_n
 !     ###########################
@@ -175,15 +176,15 @@ END MODULE MODI_RESOLVED_ELEC_n
 !              ------------
 !
 USE MODE_ELEC_ll
-USE MODE_FM,               ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_ADD2LIST,IO_FILE_FIND_BYNAME
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list, IO_File_find_byname
 USE MODE_ll
 !
 USE MODD_METRICS_n, ONLY : XDXX, XDYY, XDZX, XDZY, XDZZ 
 USE MODD_FIELD_n, ONLY : XRSVS
 USE MODD_CONF, ONLY : L1D, L2D, CEXP
 USE MODD_CST
-USE MODD_IO_ll,            ONLY: TFILEDATA
+USE MODD_IO,            ONLY: TFILEDATA
 USE MODD_PARAMETERS, ONLY : JPVEXT
 USE MODD_ELEC_DESCR
 USE MODD_ELEC_n
@@ -846,8 +847,8 @@ ENDIF
 IF (KTCOUNT==1 .AND. IPROC==0) THEN
   IF (LFLASH_GEOM) THEN
     YASCFILE = CEXP//"_fgeom_diag.asc"
-    CALL IO_FILE_ADD2LIST(TZFILE_FGEOM_DIAG,YASCFILE,'TXT','WRITE')
-    CALL IO_FILE_OPEN_ll(TZFILE_FGEOM_DIAG,HPOSITION='APPEND',HSTATUS='NEW')
+    CALL IO_File_add2list(TZFILE_FGEOM_DIAG,YASCFILE,'TXT','WRITE')
+    CALL IO_File_open(TZFILE_FGEOM_DIAG,HPOSITION='APPEND',HSTATUS='NEW')
     ILU = TZFILE_FGEOM_DIAG%NLU
     WRITE (UNIT=ILU, FMT='(A)') '--------------------------------------------------------'
     WRITE (UNIT=ILU, FMT='(A)') '*FLASH CHARACTERISTICS FROM FLASH_GEOM_ELEC*'
@@ -870,8 +871,8 @@ IF (KTCOUNT==1 .AND. IPROC==0) THEN
 !
     IF (LSAVE_COORD) THEN
       YASCFILE = CEXP//"_fgeom_coord.asc"
-      CALL IO_FILE_ADD2LIST(TZFILE_FGEOM_COORD,YASCFILE,'TXT','WRITE')
-      CALL IO_FILE_OPEN_ll(TZFILE_FGEOM_COORD,HPOSITION='APPEND',HSTATUS='NEW')
+      CALL IO_File_add2list(TZFILE_FGEOM_COORD,YASCFILE,'TXT','WRITE')
+      CALL IO_File_open(TZFILE_FGEOM_COORD,HPOSITION='APPEND',HSTATUS='NEW')
       ILU = TZFILE_FGEOM_COORD%NLU
       WRITE (UNIT=ILU,FMT='(A)') '------------------------------------------'
       WRITE (UNIT=ILU,FMT='(A)') '*****FLASH COORD. FROM FLASH_GEOM_ELEC****'
@@ -888,8 +889,8 @@ IF (KTCOUNT==1 .AND. IPROC==0) THEN
 !
   IF (LSERIES_ELEC) THEN
     YASCFILE = CEXP//"_series_cloud_elec.asc"
-    CALL IO_FILE_ADD2LIST(TZFILE_SERIES_CLOUD_ELEC,YASCFILE,'TXT','WRITE')
-    CALL IO_FILE_OPEN_ll(TZFILE_SERIES_CLOUD_ELEC,HPOSITION='APPEND',HSTATUS='NEW')
+    CALL IO_File_add2list(TZFILE_SERIES_CLOUD_ELEC,YASCFILE,'TXT','WRITE')
+    CALL IO_File_open(TZFILE_SERIES_CLOUD_ELEC,HPOSITION='APPEND',HSTATUS='NEW')
     ILU = TZFILE_SERIES_CLOUD_ELEC%NLU
     WRITE (UNIT=ILU, FMT='(A)') '----------------------------------------------------'
     WRITE (UNIT=ILU, FMT='(A)') '********* RESULTS FROM of LSERIES_ELEC *************'
@@ -935,8 +936,8 @@ IF (LFLASH_GEOM .AND. LLMA) THEN
 !
   IF (GLMA_FILE) THEN
     IF(CLMA_FILE(1:5) /= "BEGIN") THEN ! close previous file if exists
-      CALL IO_FILE_FIND_BYNAME(CLMA_FILE,TZFILE_LMA,IERR)
-      CALL IO_FILE_CLOSE_ll(TZFILE_LMA)
+      CALL IO_File_find_byname(CLMA_FILE,TZFILE_LMA,IERR)
+      CALL IO_File_close(TZFILE_LMA)
       TZFILE_LMA => NULL()
     ENDIF
 !
@@ -949,8 +950,8 @@ IF (LFLASH_GEOM .AND. LLMA) THEN
     CLMA_FILE = CEXP//"_SIMLMA_"//YNAME//".dat"
 !
     IF ( IPROC .EQ. 0 ) THEN
-      CALL IO_FILE_ADD2LIST(TZFILE_LMA,CLMA_FILE,'TXT','WRITE')
-      CALL IO_FILE_OPEN_ll(TZFILE_LMA,HPOSITION='APPEND',HSTATUS='NEW')
+      CALL IO_File_add2list(TZFILE_LMA,CLMA_FILE,'TXT','WRITE')
+      CALL IO_File_open(TZFILE_LMA,HPOSITION='APPEND',HSTATUS='NEW')
       ILU = TZFILE_LMA%NLU
       WRITE (UNIT=ILU,FMT='(A)') '----------------------------------------'
       WRITE (UNIT=ILU,FMT='(A)') '*** FLASH COORD. FROM LMA SIMULATOR ****'
@@ -1026,10 +1027,10 @@ END IF
 !
 !   Close Ascii Files if KTCOUNT = NSTOP
 IF (OEXIT .AND. IPROC==0) THEN
-  IF (LFLASH_GEOM)                  CALL IO_FILE_CLOSE_ll(TZFILE_FGEOM_DIAG)
-  IF(LFLASH_GEOM .AND. LSAVE_COORD) CALL IO_FILE_CLOSE_ll(TZFILE_FGEOM_COORD)
-  IF (LSERIES_ELEC)                 CALL IO_FILE_CLOSE_ll(TZFILE_SERIES_CLOUD_ELEC)
-  IF (LFLASH_GEOM .AND. LLMA)       CALL IO_FILE_CLOSE_ll(TZFILE_LMA)
+  IF (LFLASH_GEOM)                  CALL IO_File_close(TZFILE_FGEOM_DIAG)
+  IF(LFLASH_GEOM .AND. LSAVE_COORD) CALL IO_File_close(TZFILE_FGEOM_COORD)
+  IF (LSERIES_ELEC)                 CALL IO_File_close(TZFILE_SERIES_CLOUD_ELEC)
+  IF (LFLASH_GEOM .AND. LLMA)       CALL IO_File_close(TZFILE_LMA)
 ENDIF
 !
 !
diff --git a/src/MNH/retrieve2_nest_infon.f90 b/src/MNH/retrieve2_nest_infon.f90
index 8ab5618e7..1e3b0776c 100644
--- a/src/MNH/retrieve2_nest_infon.f90
+++ b/src/MNH/retrieve2_nest_infon.f90
@@ -100,7 +100,7 @@ USE MODD_DIM_ll,       ONLY: NXOR_ALL, NXEND_ALL, NYOR_ALL, NYEND_ALL, NIMAX_TMP
 USE MODD_DIM_n,        ONLY: NIMAX, NJMAX
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,        ONLY: ISNPROC, ISP
+USE MODD_IO,           ONLY: ISNPROC, ISP
 USE MODD_LUNIT,        ONLY: TLUOUT0
 USE MODD_MPIF
 USE MODD_PARAMETERS
diff --git a/src/MNH/series_cloud_elec.f90 b/src/MNH/series_cloud_elec.f90
index f12d2fdcc..6bd26c192 100644
--- a/src/MNH/series_cloud_elec.f90
+++ b/src/MNH/series_cloud_elec.f90
@@ -2,6 +2,7 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     #############################
       MODULE MODI_SERIES_CLOUD_ELEC
 !     #############################
@@ -14,7 +15,7 @@ INTERFACE
                                 TPFILE_SERIES_CLOUD_ELEC,       &
                                 PINPRR                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KTCOUNT  ! Temporal loop counter
 !
@@ -88,7 +89,7 @@ END MODULE MODI_SERIES_CLOUD_ELEC
 !
 USE MODD_CONF, ONLY : CEXP
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_REF
 USE MODD_PARAMETERS
 USE MODD_ELEC_DESCR
diff --git a/src/MNH/seriesn.f90 b/src/MNH/seriesn.f90
index 9fff8dfb8..c592e4b54 100644
--- a/src/MNH/seriesn.f90
+++ b/src/MNH/seriesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###################
@@ -63,7 +63,6 @@ USE MODD_TIME_n, ONLY: TDTCUR
 USE MODI_GET_SURF_VAR_n
 !
 USE MODE_DATETIME
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/set_advfrc.f90 b/src/MNH/set_advfrc.f90
index fbdd5d92a..b931fe38b 100644
--- a/src/MNH/set_advfrc.f90
+++ b/src/MNH/set_advfrc.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
       MODULE MODI_SETADVFRC
@@ -10,7 +10,7 @@ INTERFACE
 !
 SUBROUTINE SET_ADVFRC(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -85,13 +85,12 @@ USE MODD_DIM_n
 USE MODD_FRC
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n,    ONLY: TLUOUT
 USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT
 USE MODD_REF
 ! 
 USE MODE_DATETIME
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_THERMO
 !
diff --git a/src/MNH/set_bogus_vortex.f90 b/src/MNH/set_bogus_vortex.f90
index 28ae29f47..4cc56703d 100644
--- a/src/MNH/set_bogus_vortex.f90
+++ b/src/MNH/set_bogus_vortex.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2001-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ############################
@@ -73,9 +73,8 @@ END MODULE MODI_SET_BOGUS_VORTEX
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-USE MODE_IO_ll
 USE MODE_GRIDPROJ
+USE MODE_ll
 USE MODE_MSG
 !
 USE MODD_HURR_CONF,  ONLY: XLATBOG,XLONBOG,XVTMAXSURF,XRADWINDSURF, &
diff --git a/src/MNH/set_conc_lima.f90 b/src/MNH/set_conc_lima.f90
index c111ac643..6f9e6c6ad 100644
--- a/src/MNH/set_conc_lima.f90
+++ b/src/MNH/set_conc_lima.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
 !MNH_LIC for details. version 1.
@@ -91,9 +91,6 @@ USE MODD_NSV,             ONLY : NSV_LIMA_NC, NSV_LIMA_NR, NSV_LIMA_CCN_ACTI, NS
 USE MODD_CST,             ONLY : XPI, XRHOLW, XRHOLI
 USE MODD_CONF,            ONLY : NVERB
 USE MODD_LUNIT_n,         ONLY : TLUOUT
-
-!
-USE MODE_FM
 !
 IMPLICIT NONE
 !
diff --git a/src/MNH/set_cstn.f90 b/src/MNH/set_cstn.f90
index a75a5d7dd..f51497f74 100644
--- a/src/MNH/set_cstn.f90
+++ b/src/MNH/set_cstn.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE SET_CSTN(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS,OPV_PERT,ORMV_BL,PJ,OSHIFT,PCORIOZ) 
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE ! outpput data file
 TYPE(TFILEDATA),        INTENT(IN)  :: TPEXPREFILE ! input data file
@@ -172,11 +172,10 @@ END MODULE MODI_SET_CSTN
 USE MODD_CONF
 USE MODD_CST
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n,    ONLY: TLUOUT
 USE MODD_PARAMETERS, ONLY: JPHEXT
 !
-USE MODE_FM
 USE MODE_THERMO
 USE MODE_ll
 USE MODE_MPPDB
diff --git a/src/MNH/set_frc.f90 b/src/MNH/set_frc.f90
index 539bd74ea..8744c8d9d 100644
--- a/src/MNH/set_frc.f90
+++ b/src/MNH/set_frc.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE SET_FRC(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -107,14 +107,12 @@ USE MODD_GRID_n
 USE MODD_CONF
 USE MODD_FRC
 USE MODD_GRID
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_REF
 USE MODD_PARAMETERS
 !
 USE MODE_DATETIME
 USE MODE_THERMO
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 !
 USE MODI_HEIGHT_PRESS  ! interface modules
diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90
index 0880b974c..6bd63a507 100644
--- a/src/MNH/set_grid.f90
+++ b/src/MNH/set_grid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ####################
@@ -24,7 +24,7 @@ INTERFACE
                           KBAK_NUMB,KOUT_NUMB,TPBACKUPN,TPOUTPUTN             )
 !
 USE MODD_TYPE_DATE
-USE MODD_IO_ll, ONLY: TFILEDATA,TOUTBAK
+USE MODD_IO, ONLY: TFILEDATA,TOUTBAK
 !
 INTEGER,                INTENT(IN)  :: KMI       ! Model index
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE !Initial file
@@ -237,19 +237,18 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_DYN
 USE MODD_GRID
-USE MODD_IO_ll,   ONLY: TFILEDATA,TOUTBAK
+USE MODD_IO,      ONLY: TFILEDATA,TOUTBAK
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_OUT_n,   ONLY: OUT_MODEL
 USE MODD_PARAMETERS
 USE MODD_NESTING
 !
-USE MODE_FIELD,   ONLY: TFIELDDATA,TFIELDLIST,FIND_FIELD_ID_FROM_MNHNAME
-USE MODE_FM
-USE MODE_FMREAD
+USE MODE_FIELD,            ONLY: TFIELDDATA, TFIELDLIST, FIND_FIELD_ID_FROM_MNHNAME
 USE MODE_GATHER_ll
 USE MODE_GRIDCART
 USE MODE_GRIDPROJ
-USE MODE_IO_MANAGE_STRUCT
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_MANAGE_STRUCT, only: IO_Bakout_struct_prepare
 USE MODE_ll
 USE MODE_TIME
 !
@@ -343,43 +342,43 @@ TYPE(TFIELDDATA)       :: TZFIELD
 !
 !*       1.1   Spatial grid
 !
-CALL IO_READ_FIELD(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
+CALL IO_Field_read(TPINIFILE,'STORAGE_TYPE',CSTORAGE_TYPE,IRESP)
 IF (IRESP /= 0) CSTORAGE_TYPE='TT'
 !
 IF (KMI == 1) THEN
   ! this parameter is also useful in the cartesian to
   ! compute the sun position for the radiation scheme
-  CALL IO_READ_FIELD(TPINIFILE,'LON0',XLON0)
+  CALL IO_Field_read(TPINIFILE,'LON0',XLON0)
   !
   ! this parameter is also useful in the cartesian to
   ! compute the Coriolis parameter
-  CALL IO_READ_FIELD(TPINIFILE,'LAT0',XLAT0)
+  CALL IO_Field_read(TPINIFILE,'LAT0',XLAT0)
   !
   ! this parameter is also useful in the cartesian to
   ! rotate the simulatin domain
-  CALL IO_READ_FIELD(TPINIFILE,'BETA',XBETA)
+  CALL IO_Field_read(TPINIFILE,'BETA',XBETA)
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'XHAT',PXHAT)
-CALL IO_READ_FIELD(TPINIFILE,'YHAT',PYHAT)
+CALL IO_Field_read(TPINIFILE,'XHAT',PXHAT)
+CALL IO_Field_read(TPINIFILE,'YHAT',PYHAT)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'RPK',XRPK)
+  CALL IO_Field_read(TPINIFILE,'RPK',XRPK)
   !
   IF ( (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFILE%NMNHVERSION(2)>5) .OR. TPINIFILE%NMNHVERSION(1)>4 ) THEN
-    CALL IO_READ_FIELD(TPINIFILE,'LONORI',PLONORI)
-    CALL IO_READ_FIELD(TPINIFILE,'LATORI',PLATORI)
+    CALL IO_Field_read(TPINIFILE,'LONORI',PLONORI)
+    CALL IO_Field_read(TPINIFILE,'LATORI',PLATORI)
   !
   ELSE                     
     CALL FIND_FIELD_ID_FROM_MNHNAME('LONORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LONOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PLONORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PLONORI)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('LATORI',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME = 'LATOR'
-    CALL IO_READ_FIELD(TPINIFILE,TZFIELD,PLATORI)
+    CALL IO_Field_read(TPINIFILE,TZFIELD,PLATORI)
     !
     ALLOCATE(ZXHAT_ll(KIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(KJMAX_ll+2 * JPHEXT))
     CALL GATHERALL_FIELD_ll('XX',PXHAT,ZXHAT_ll,IRESP) !//
@@ -394,9 +393,9 @@ IF (.NOT.LCARTESIAN) THEN
   !
 END IF
 
-CALL IO_READ_FIELD(TPINIFILE,'ZS',PZS)
-CALL IO_READ_FIELD(TPINIFILE,'ZHAT',PZHAT)
-CALL IO_READ_FIELD(TPINIFILE,'ZTOP',PZTOP)
+CALL IO_Field_read(TPINIFILE,'ZS',PZS)
+CALL IO_Field_read(TPINIFILE,'ZHAT',PZHAT)
+CALL IO_Field_read(TPINIFILE,'ZTOP',PZTOP)
 !
 CALL DEFAULT_SLEVE(OSLEVE,PLEN1,PLEN2)
 !
@@ -404,25 +403,25 @@ IF ( TPINIFILE%NMNHVERSION(1)<4 .OR. (TPINIFILE%NMNHVERSION(1)==4 .AND. TPINIFIL
   PZSMT  = PZS
   OSLEVE = .FALSE.
 ELSE
-  CALL IO_READ_FIELD(TPINIFILE,'ZSMT',PZSMT)
-  CALL IO_READ_FIELD(TPINIFILE,'SLEVE',OSLEVE)
+  CALL IO_Field_read(TPINIFILE,'ZSMT',PZSMT)
+  CALL IO_Field_read(TPINIFILE,'SLEVE',OSLEVE)
 END IF
 !
 IF (OSLEVE) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'LEN1',PLEN1)
-  CALL IO_READ_FIELD(TPINIFILE,'LEN2',PLEN2)
+  CALL IO_Field_read(TPINIFILE,'LEN1',PLEN1)
+  CALL IO_Field_read(TPINIFILE,'LEN2',PLEN2)
 END IF
 !
 !*       1.2   Temporal grid
 !
-CALL IO_READ_FIELD(TPINIFILE,'DTMOD',TPDTMOD)
-CALL IO_READ_FIELD(TPINIFILE,'DTCUR',TPDTCUR)
+CALL IO_Field_read(TPINIFILE,'DTMOD',TPDTMOD)
+CALL IO_Field_read(TPINIFILE,'DTCUR',TPDTCUR)
 !
 IF (KMI == 1) THEN
-CALL IO_READ_FIELD(TPINIFILE,'DTEXP',TDTEXP)
+CALL IO_Field_read(TPINIFILE,'DTEXP',TDTEXP)
 END IF
 !
-CALL IO_READ_FIELD(TPINIFILE,'DTSEG',TDTSEG)
+CALL IO_Field_read(TPINIFILE,'DTSEG',TDTSEG)
 !
 !-------------------------------------------------------------------------------
 !
@@ -453,7 +452,7 @@ KSTOP = NINT(PSEGLEN/PTSTEP)
 !*       2.3    Temporal grid - outputs managment
 !
 ! The output/backups times have been read only by model 1
-IF (CPROGRAM == 'MESONH' .AND. KMI == 1) CALL IO_PREPARE_BAKOUT_STRUCT(ISUP,PTSTEP,PSEGLEN)
+IF (CPROGRAM == 'MESONH' .AND. KMI == 1) CALL IO_Bakout_struct_prepare(ISUP,PTSTEP,PSEGLEN)
 !
 KBAK_NUMB => OUT_MODEL(KMI)%NBAK_NUMB
 KOUT_NUMB => OUT_MODEL(KMI)%NOUT_NUMB
diff --git a/src/MNH/set_mass.f90 b/src/MNH/set_mass.f90
index afcc068fe..e66add532 100644
--- a/src/MNH/set_mass.f90
+++ b/src/MNH/set_mass.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2010-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2010-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !     ########################
       MODULE MODI_SET_MASS
@@ -12,7 +12,7 @@ SUBROUTINE SET_MASS(TPFILE,OPROFILE_IN_PROC, PZFLUX_PROFILE,
                     KILOC,KJLOC,PZS_MX,PZMASS_MX,PZFLUX_MX,PPGROUND,                   &
                     PTHVM,PMRM,PUW,PVW,OSHIFT,OBOUSS,PJ,HFUNU,HFUNV,PMRCM,PMRIM,PCORIOZ)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN) :: TPFILE    ! File characteristics
 LOGICAL,                INTENT(IN) :: OPROFILE_IN_PROC ! initialization profile in current processor
@@ -124,7 +124,7 @@ SUBROUTINE SET_MASS(TPFILE,OPROFILE_IN_PROC, PZFLUX_PROFILE,
 ! use des modules
 USE MODD_GRID_n ! declarative modules
 USE MODD_GRID
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_FIELD_n
diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90
index 1689ac4b1..40906e759 100644
--- a/src/MNH/set_perturb.f90
+++ b/src/MNH/set_perturb.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE SET_PERTURB(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -108,14 +108,13 @@ USE MODD_CONF
 USE MODD_DIM_n
 USE MODD_FIELD_n
 USE MODD_GRID_n
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LBC_n
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_LSFIELD_n
 USE MODD_PARAMETERS
 USE MODD_REF_n
 !
-USE MODE_FM
 USE MODE_GATHER_ll
 USE MODE_ll
 USE MODE_MPPDB
diff --git a/src/MNH/set_ref.f90 b/src/MNH/set_ref.f90
index f666cb6f1..74890f3e8 100644
--- a/src/MNH/set_ref.f90
+++ b/src/MNH/set_ref.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !###################
@@ -14,7 +14,7 @@ INTERFACE
                          PREFMASS,PMASS_O_PHI0,PLINMASS,                   &
                          PRHODREF,PTHVREF,PRVREF,PEXNREF,PRHODJ            )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 INTEGER,                INTENT(IN)  :: KMI       ! Model index 
 TYPE(TFILEDATA),        INTENT(IN)  :: TPINIFILE ! Initial file
@@ -155,12 +155,12 @@ END MODULE MODI_SET_REF
 !              ------------ 
 USE MODD_CONF
 USE MODD_CST
-USE MODD_IO_ll,   ONLY : TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 USE MODD_REF
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
 USE MODE_ll
 USE MODE_MPPDB
 USE MODE_REPRO_SUM
@@ -255,9 +255,9 @@ ILUOUT = TLUOUT%NLU
 !              ----------------------------------------------------
 !
 IF (KMI == 1) THEN
-  CALL IO_READ_FIELD(TPINIFILE,'RHOREFZ',XRHODREFZ)
-  CALL IO_READ_FIELD(TPINIFILE,'THVREFZ',XTHVREFZ)
-  CALL IO_READ_FIELD(TPINIFILE,'EXNTOP', XEXNTOP)
+  CALL IO_Field_read(TPINIFILE,'RHOREFZ',XRHODREFZ)
+  CALL IO_Field_read(TPINIFILE,'THVREFZ',XTHVREFZ)
+  CALL IO_Field_read(TPINIFILE,'EXNTOP', XEXNTOP)
 !
   LNEUTRAL=.FALSE.
   IF (MAXVAL(XTHVREFZ(IKB:IKE))-MINVAL(XTHVREFZ(IKB:IKE)) < 1.E-10) LNEUTRAL=.TRUE.
diff --git a/src/MNH/set_relfrc.f90 b/src/MNH/set_relfrc.f90
index a87a28a7d..7c7fc25b1 100644
--- a/src/MNH/set_relfrc.f90
+++ b/src/MNH/set_relfrc.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
       MODULE MODI_SET_RELFRC
@@ -10,7 +10,7 @@ INTERFACE
 !
 SUBROUTINE SET_RELFRC(TPEXPREFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPEXPREFILE ! input data file
 !
@@ -83,15 +83,13 @@ USE MODD_CST
 USE MODD_FRC
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS, ONLY: JPHEXT
 USE MODD_REF
 USE MODD_RELFRC_n
 ! 
 USE MODE_DATETIME
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_MSG
 USE MODE_THERMO 
 !
diff --git a/src/MNH/set_rsou.f90 b/src/MNH/set_rsou.f90
index 509989b14..6c38994c6 100644
--- a/src/MNH/set_rsou.f90
+++ b/src/MNH/set_rsou.f90
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE SET_RSOU(TPFILE,TPEXPREFILE,HFUNU,HFUNV,KILOC,KJLOC,OBOUSS,OPV_PERT,&
                           ORMV_BL,PJ,OSHIFT,PCORIOZ) 
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),        INTENT(IN)  :: TPFILE ! outpput data file
 TYPE(TFILEDATA),        INTENT(IN)  :: TPEXPREFILE ! input data file
@@ -254,13 +254,11 @@ USE MODD_CST
 USE MODD_FIELD_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,      ONLY: TFILEDATA
+USE MODD_IO,         ONLY: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_PARAMETERS, ONLY: JPHEXT
 USE MODD_PARAM_n,    ONLY: CCLOUD
-! 
-USE MODE_FM
-USE MODE_IO_ll
+!
 USE MODE_ll
 USE MODE_MSG
 USE MODE_THERMO
diff --git a/src/MNH/set_subdomain.f90 b/src/MNH/set_subdomain.f90
index 5eb20fb6d..ba8bdd4f2 100644
--- a/src/MNH/set_subdomain.f90
+++ b/src/MNH/set_subdomain.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #########################
@@ -10,7 +10,7 @@ INTERFACE
       SUBROUTINE SET_SUBDOMAIN(TPNMLFILE,TPATMFILE,KXOR_DAD,KYOR_DAD, &
                                KXOR,KYOR,KDXRATIO,KDYRATIO            )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPNMLFILE ! namelist file
 TYPE(TFILEDATA),   INTENT(IN) :: TPATMFILE ! atmospheric MNH file
@@ -85,23 +85,20 @@ END MODULE MODI_SET_SUBDOMAIN
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_GRIDPROJ       ! executive module
-USE MODE_POS
-USE MODE_FM
-USE MODE_IO_ll
-USE MODE_MSG
-!
-USE MODD_CONF           ! declaration modules
-USE MODD_IO_ll, ONLY : TFILEDATA
-USE MODD_LUNIT
+USE MODD_CONF
+USE MODD_DIM_n, ONLY: NIMAX_n=>NIMAX,NJMAX_n=>NJMAX
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_DIM_n, ONLY: NIMAX_n=>NIMAX,NJMAX_n=>NJMAX
-USE MODD_PGDGRID
-USE MODD_PGDDIM
+USE MODD_IO,    ONLY: TFILEDATA
+USE MODD_LUNIT
 USE MODD_PARAMETERS
+USE MODD_PGDDIM
+USE MODD_PGDGRID
 !
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ, only: IO_Field_read
+USE MODE_GRIDPROJ
+USE MODE_MSG
+USE MODE_POS
 !
 IMPLICIT NONE
 !
@@ -222,24 +219,24 @@ WRITE(ILUOUT0,*) 'given or computed NYOR  = ',NYOR
 !*       4.1   TEST if FATHER of atmospheric MNH file exists:
 !              ---------------------------------------------
 !
-CALL IO_READ_FIELD(TPATMFILE,'DAD_NAME',YDADFILE,IRESP)
+CALL IO_Field_read(TPATMFILE,'DAD_NAME',YDADFILE,IRESP)
 IF ( IRESP /= 0  ) YDADFILE='                          '
 !
 IF (LEN_TRIM(YDADFILE)/=0) THEN
-  CALL IO_READ_FIELD(TPATMFILE,'DXRATIO',KDXRATIO,IRESP)
+  CALL IO_Field_read(TPATMFILE,'DXRATIO',KDXRATIO,IRESP)
   IF ( IRESP /= 0 .OR. KDXRATIO == 0 ) THEN
     KDXRATIO=1
   END IF
   !
-  CALL IO_READ_FIELD(TPATMFILE,'DYRATIO',KDYRATIO,IRESP)
+  CALL IO_Field_read(TPATMFILE,'DYRATIO',KDYRATIO,IRESP)
   IF ( IRESP /= 0 .OR. KDYRATIO == 0 ) THEN
     KDYRATIO=1
   END IF
   !
-  CALL IO_READ_FIELD(TPATMFILE,'XOR',KXOR,IRESP)
+  CALL IO_Field_read(TPATMFILE,'XOR',KXOR,IRESP)
   IF ( IRESP /= 0 ) KXOR_DAD=1
   !
-  CALL IO_READ_FIELD(TPATMFILE,'YOR',KYOR,IRESP)
+  CALL IO_Field_read(TPATMFILE,'YOR',KYOR,IRESP)
   IF ( IRESP /= 0 ) KYOR_DAD=1
 END IF
 !
diff --git a/src/MNH/shallow_mf_pack.f90 b/src/MNH/shallow_mf_pack.f90
index ba519f8e3..7ffbbb145 100644
--- a/src/MNH/shallow_mf_pack.f90
+++ b/src/MNH/shallow_mf_pack.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2010-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2010-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !    ######################
      MODULE MODI_SHALLOW_MF_PACK
@@ -21,7 +21,7 @@ INTERFACE
                 PSIGMF,PRC_MF,PRI_MF,PCF_MF,PFLXZTHVMF  )
 !     #################################################################
 !!
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !               
 !*               1.1  Declaration of Arguments
 !                
@@ -123,14 +123,14 @@ END MODULE MODI_SHALLOW_MF_PACK
 USE MODD_PARAMETERS
 USE MODD_CST
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_NSV
-USE MODD_PARAM_ICE, ONLY : CFRAC_ICE_SHALLOW_MF
+USE MODD_PARAM_ICE,       ONLY: CFRAC_ICE_SHALLOW_MF
 USE MODD_PARAM_MFSHALL_n
 USE MODD_BUDGET
 
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,           ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE,  only: IO_Field_write
 
 USE MODI_SHALLOW_MF
 USE MODI_BUDGET
@@ -390,7 +390,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   ! stores the conservative mixing ratio vertical flux
   ZWORK(:,:,:)=RESHAPE(ZFLXZRMF(:,:),(/ IIU,IJU,IKU /) )
@@ -404,7 +404,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   ! stores the theta_v vertical flux
   TZFIELD%CMNHNAME   = 'MF_THVW_FLX'
@@ -417,7 +417,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PFLXZTHVMF)
+  CALL IO_Field_write(TPFILE,TZFIELD,PFLXZTHVMF)
   !
  IF (OMIXUV) THEN
   ! stores the U momentum vertical flux
@@ -432,7 +432,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
   ! stores the V momentum vertical flux
   ZWORK(:,:,:)=RESHAPE(ZFLXZVMF(:,:),(/ IIU,IJU,IKU /) )
@@ -446,7 +446,7 @@ IF ( OMF_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK)
   !
  END IF
 END IF
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index 69346e7ba..8c6748d5a 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -18,7 +18,7 @@ INTERFACE
                KIB2,KJB2,KIE2,KJE2,                                            &
                KIB1,KJB1,KIE1,KJE1                                             )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,   INTENT(IN)  :: KXOR,KXEND !  horizontal position (i,j) of the ORigin and END  
 INTEGER,   INTENT(IN)  :: KYOR,KYEND ! of the model 2 domain, relative to model 1
@@ -162,29 +162,29 @@ USE MODD_CH_AEROSOL,      ONLY: CAERONAMES
 USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
 USE MODD_CONF
 USE MODD_CST
-USE MODD_CONF_n,          ONLY:  CONF_MODEL
+USE MODD_CONF_n,          ONLY: CONF_MODEL
 USE MODD_DUST,            ONLY: CDUSTNAMES
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_FIELD_n,         ONLY:  FIELD_MODEL
-USE MODD_IO_ll,           ONLY : TFILEDATA
+USE MODD_FIELD_n,         ONLY: FIELD_MODEL
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LATZ_EDFLX
-USE MODD_LBC_n,           ONLY:  LBC_MODEL
+USE MODD_LBC_n,           ONLY: LBC_MODEL
 USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_LUNIT_n,         ONLY:  LUNIT_MODEL,TLUOUT
+USE MODD_LUNIT_n,         ONLY: LUNIT_MODEL,TLUOUT
 USE MODD_NSV
-USE MODD_REF_n,           ONLY:  REF_MODEL
+USE MODD_REF_n,           ONLY: REF_MODEL
 USE MODD_PARAMETERS
-USE MODD_PARAM_LIMA     , ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
-                                 LSCAV, LAERO_MASS, LHHONI
-USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_NAMES, CAERO_MASS
+USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
+                                LSCAV, LAERO_MASS, LHHONI
+USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
+USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
 USE MODD_RELFRC_n 
 USE MODD_SALT,            ONLY: CSALTNAMES
 USE MODD_SPAWN
 !
 USE MODE_FIELD,           ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMREAD
+USE MODE_IO_FIELD_READ,   only: IO_Field_read
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
@@ -719,11 +719,11 @@ IF (PRESENT(TPSONFILE)) THEN
   !
   !variables which always exist
   !
-  CALL IO_READ_FIELD(TPSONFILE,'UT',ZWORK3D) ! U wind component at time t
+  CALL IO_Field_read(TPSONFILE,'UT',ZWORK3D) ! U wind component at time t
   PUT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'VT',ZWORK3D) ! V wind component at time t
+  CALL IO_Field_read(TPSONFILE,'VT',ZWORK3D) ! V wind component at time t
   PVT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'WT',ZWORK3D) ! W wind component at time t
+  CALL IO_Field_read(TPSONFILE,'WT',ZWORK3D) ! W wind component at time t
   PWT(KIB2:KIE2,KJB2:KJE2,:) = ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   !
   ! moist variables
@@ -731,37 +731,37 @@ IF (PRESENT(TPSONFILE)) THEN
   IRR=1
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
     GUSERV=.TRUE.
-    CALL IO_READ_FIELD(TPSONFILE,'RVT',ZWORK3D,IRESP) ! Vapor at time t
+    CALL IO_Field_read(TPSONFILE,'RVT',ZWORK3D,IRESP) ! Vapor at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RCT',ZWORK3D,IRESP) ! Cloud at time t
+    CALL IO_Field_read(TPSONFILE,'RCT',ZWORK3D,IRESP) ! Cloud at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RRT',ZWORK3D,IRESP) ! Rain at time t
+    CALL IO_Field_read(TPSONFILE,'RRT',ZWORK3D,IRESP) ! Rain at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RIT',ZWORK3D,IRESP) ! Ice at time t
+    CALL IO_Field_read(TPSONFILE,'RIT',ZWORK3D,IRESP) ! Ice at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RST',ZWORK3D,IRESP) ! Snow at time t
+    CALL IO_Field_read(TPSONFILE,'RST',ZWORK3D,IRESP) ! Snow at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'RGT',ZWORK3D,IRESP) ! Graupel at time t
+    CALL IO_Field_read(TPSONFILE,'RGT',ZWORK3D,IRESP) ! Graupel at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
   IF (IRR<=CONF_MODEL(1)%NRR) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'HVT',ZWORK3D,IRESP) ! Hail at time t
+    CALL IO_Field_read(TPSONFILE,'HVT',ZWORK3D,IRESP) ! Hail at time t
     IF(IRESP==0) ZRT1(:,:,:,IRR)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     IF(IRESP==0) IRR=IRR+1
   END IF
@@ -769,9 +769,9 @@ IF (PRESENT(TPSONFILE)) THEN
   WRITE(ILUOUT,FMT=*) 'SPAWN_FIELD2: spawing with a SON input file'
   WRITE(ILUOUT,FMT=*) '    ',CONF_MODEL(1)%NRR,' moist variables in model1 and model2, ',    &
                              IRR,' moist variables in input SON'
-  CALL IO_READ_FIELD(TPSONFILE,'THT',ZWORK3D) ! Theta at time t
+  CALL IO_Field_read(TPSONFILE,'THT',ZWORK3D) ! Theta at time t
   ZTHT1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-  CALL IO_READ_FIELD(TPSONFILE,'PABST',ZWORK3D) ! Pressure at time t
+  CALL IO_Field_read(TPSONFILE,'PABST',ZWORK3D) ! Pressure at time t
   ZPABST1(:,:,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   !
   CALL COMPUTE_THV_HU(GUSERV,ZRT1,ZTHT1,ZPABST1,ZTHVT1,ZHUT1)
@@ -785,7 +785,7 @@ IF (PRESENT(TPSONFILE)) THEN
   ! TKE variables
   !
   IF (HTURB/='NONE') THEN
-    CALL IO_READ_FIELD(TPSONFILE,'TKET',ZWORK3D,IRESP) ! Turbulence Kinetic Energy at time t
+    CALL IO_Field_read(TPSONFILE,'TKET',ZWORK3D,IRESP) ! Turbulence Kinetic Energy at time t
     IF(IRESP==0) PTKET(KIB2:KIE2,KJB2:KJE2,:)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   END IF
   !
@@ -806,7 +806,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -825,7 +825,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -891,7 +891,7 @@ IF (PRESENT(TPSONFILE)) THEN
       END IF
       ! time t
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+      CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
       IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
     END DO
     !
@@ -915,7 +915,7 @@ IF (PRESENT(TPSONFILE)) THEN
           TZFIELD%CUNITS   = 'm-3'
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
         END IF
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -935,7 +935,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -956,7 +956,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -976,7 +976,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -996,7 +996,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1016,7 +1016,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1036,7 +1036,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1058,7 +1058,7 @@ IF (PRESENT(TPSONFILE)) THEN
         TZFIELD%CMNHNAME   = 'LINOX'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1078,7 +1078,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1099,7 +1099,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1120,7 +1120,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1140,7 +1140,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1161,7 +1161,7 @@ IF (PRESENT(TPSONFILE)) THEN
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_FFBEG-1
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_FFBEG-1
-        CALL IO_READ_FIELD(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
+        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
         IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
       END DO
     END IF
@@ -1171,10 +1171,10 @@ IF (PRESENT(TPSONFILE)) THEN
   ! Secondary pronostic variables
   !
   IF (HTURB /= 'NONE' .AND. IRR>1) THEN
-    CALL IO_READ_FIELD(TPSONFILE,'SRCT',ZWORK3D,IRESP) ! turbulent flux SRC at time t
+    CALL IO_Field_read(TPSONFILE,'SRCT',ZWORK3D,IRESP) ! turbulent flux SRC at time t
     IF(IRESP == 0) PSRCT(KIB2:KIE2,KJB2:KJE2,:) =                    &
                                         ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-    CALL IO_READ_FIELD(TPSONFILE,'SIGS',ZWORK3D,IRESP) ! subgrid condensation
+    CALL IO_Field_read(TPSONFILE,'SIGS',ZWORK3D,IRESP) ! subgrid condensation
     IF(IRESP == 0) PSIGS(KIB2:KIE2,KJB2:KJE2,:) =                    &
                                         ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
   END IF
diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90
index c1e938c6a..1a6e19226 100644
--- a/src/MNH/spawn_grid2.f90
+++ b/src/MNH/spawn_grid2.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################
@@ -164,8 +164,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_BIKHARDT_n
 USE MODD_VAR_ll
 USE MODE_ll
-USE MODE_FM
-USE MODE_IO_ll
 USE MODE_TIME
 USE MODE_GRIDPROJ
 !
diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90
index 38dd08f61..b54c1e9e3 100644
--- a/src/MNH/spawn_model2.f90
+++ b/src/MNH/spawn_model2.f90
@@ -2,6 +2,7 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !########################
 MODULE MODI_SPAWN_MODEL2
 !########################
@@ -90,10 +91,10 @@ END MODULE MODI_SPAWN_MODEL2
 !!      TOTAL_DMASS   : to compute the total mass of dry air
 !!      ANEL_BALANCE2  : to apply an anelastic correction in the case of changing
 !!                      resolution between the two models
-!!      IO_FILE_OPEN_ll : to open a FM-file (DESFM + LFIFM)
+!!      IO_File_open : to open a FM-file (DESFM + LFIFM)
 !!      WRITE_DESFM   : to write the  DESFM file
 !!      WRITE_LFIFM   : to write the  LFIFM file  
-!!      IO_FILE_CLOSE_ll : to close a FM-file (DESFM + LFIFM)
+!!      IO_File_close : to close a FM-file (DESFM + LFIFM)
 !!      INI_BIKHARDT2     : initializes Bikhardt coefficients
 !!
 !!
@@ -191,7 +192,7 @@ END MODULE MODI_SPAWN_MODEL2
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!                    10/2016 (C.Lac) Add droplet deposition
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -229,7 +230,7 @@ USE MODD_CH_MNHC_n
 USE MODD_PASPOL_n
 !$20140515
 USE MODD_VAR_ll, ONLY : NPROC
-USE MODD_IO_ll, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX
+USE MODD_IO, ONLY: TFILEDATA,TFILE_DUMMY,TFILE_SURFEX
 !
 USE MODE_GRIDCART         ! Executive modules
 USE MODE_GRIDPROJ
@@ -257,12 +258,11 @@ USE MODI_CH_INIT_SCHEME_n
 !$20140710
 USE MODI_UPDATE_METRICS
 !
-USE MODE_FM
-USE MODE_FMWRIT, ONLY : IO_WRITE_HEADER
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MODELN_HANDLER
-USE MODE_FMREAD
 USE MODE_MPPDB
 !
 USE MODE_THERMO
@@ -490,15 +490,15 @@ IF (LEN_TRIM(HSONFILE) /= 0 ) THEN
 !        3.3.1  Opening the son input file and reading the grid
 ! 
   WRITE(ILUOUT,*) 'SPAWN_MODEL2: spawning with a SON input file :',TRIM(HSONFILE)
-  CALL IO_FILE_ADD2LIST(TZSONFILE,TRIM(HSONFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
-  CALL IO_FILE_OPEN_ll(TZSONFILE)
-  CALL IO_READ_FIELD(TZSONFILE,'DAD_NAME',YDAD_SON)
-  CALL IO_READ_FIELD(TZSONFILE,'IMAX',    IIMAXSON)
-  CALL IO_READ_FIELD(TZSONFILE,'JMAX',    IJMAXSON)
-  CALL IO_READ_FIELD(TZSONFILE,'XOR',     IXORSON)
-  CALL IO_READ_FIELD(TZSONFILE,'YOR',     IYORSON)
-  CALL IO_READ_FIELD(TZSONFILE,'DXRATIO', IDXRATIOSON)
-  CALL IO_READ_FIELD(TZSONFILE,'DYRATIO', IDYRATIOSON)
+  CALL IO_File_add2list(TZSONFILE,TRIM(HSONFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=NVERB)
+  CALL IO_File_open(TZSONFILE)
+  CALL IO_Field_read(TZSONFILE,'DAD_NAME',YDAD_SON)
+  CALL IO_Field_read(TZSONFILE,'IMAX',    IIMAXSON)
+  CALL IO_Field_read(TZSONFILE,'JMAX',    IJMAXSON)
+  CALL IO_Field_read(TZSONFILE,'XOR',     IXORSON)
+  CALL IO_Field_read(TZSONFILE,'YOR',     IYORSON)
+  CALL IO_Field_read(TZSONFILE,'DXRATIO', IDXRATIOSON)
+  CALL IO_Field_read(TZSONFILE,'DYRATIO', IDYRATIOSON)
   !
   IF (ADJUSTL(ADJUSTR(YDAD_SON)).NE.ADJUSTL(ADJUSTR(CMY_NAME(1)))) THEN 
     WRITE(ILUOUT,*) 'SPAWN_MODEL2: DAD of SON file is different from the one of model2'
@@ -1187,7 +1187,7 @@ CALL SPAWN_PRESSURE2(NXOR,NYOR,NXEND,NYEND,NDXRATIO,NDYRATIO,   &
 !
 IF (.NOT.GNOSON) THEN
   ALLOCATE(ZWORK3D(IIUSON,IJUSON,IKU))
-  CALL IO_READ_FIELD(TZSONFILE,'PABST',ZWORK3D)
+  CALL IO_Field_read(TZSONFILE,'PABST',ZWORK3D)
   XPABST(IIB2:IIE2,IJB2:IJE2,:) = ZWORK3D(IIB1:IIE1,IJB1:IJE1,:)
   DEALLOCATE(ZWORK3D)
 END IF
@@ -1437,9 +1437,9 @@ ELSE
      CMY_NAME(2)=ADJUSTL(ADJUSTR(CINIFILE)//'.spr'//ADJUSTL(HSPANBR))
 END IF
 !
-CALL IO_FILE_ADD2LIST(TZFILE,CMY_NAME(2),'MNH','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
+CALL IO_File_add2list(TZFILE,CMY_NAME(2),'MNH','WRITE',KLFINPRAR=INPRAR,KLFITYPE=1,KLFIVERB=NVERB)
 !
-CALL IO_FILE_OPEN_ll(TZFILE)
+CALL IO_File_open(TZFILE)
 !
 CALL WRITE_DESFM_n(2,TZFILE)
 !
@@ -1465,7 +1465,7 @@ ELSE
   CDAD_NAME(2)=CMY_NAME(1) ! model 1 becomes the DAD of model 2 (spawned one)
 ENDIF
 !
-CALL IO_WRITE_HEADER(TZFILE,HDAD_NAME=CDAD_NAME(2))
+CALL IO_Header_write(TZFILE,HDAD_NAME=CDAD_NAME(2))
 CALL WRITE_LFIFM_n(TZFILE,CDAD_NAME(2))
 !
 CALL SECOND_MNH(ZTIME2)
@@ -1491,9 +1491,9 @@ ZSURF2 = ZTIME2 - ZTIME1
 !*	 8.    CLOSES THE FMFILE
 !	       ----------------- 
 !
-CALL IO_FILE_CLOSE_ll(TZFILE)
+CALL IO_File_close(TZFILE)
 IF (ASSOCIATED(TZSONFILE)) THEN
-  CALL IO_FILE_CLOSE_ll(TZSONFILE)
+  CALL IO_File_close(TZSONFILE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -1656,7 +1656,7 @@ WRITE(ILUOUT,*) ' ------------------------------------------------------------ '
 6  FORMAT(' |    SPAWN_MODEL2     |     ',F8.3,'      |     ',F8.3,'     |')
 !
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TLUOUT)
 !
 9900  FORMAT(' K = 001    ZHAT = ',E14.7)
 9901  FORMAT(' K = ',I3.3,'    ZHAT = ',E14.7,'    DZ = ' ,E14.7)
diff --git a/src/MNH/spawn_surf.f90 b/src/MNH/spawn_surf.f90
index f9e126c20..deee96b3b 100644
--- a/src/MNH/spawn_surf.f90
+++ b/src/MNH/spawn_surf.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2004-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2004-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################## 
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE SPAWN_SURF (HINIFILE, HINIFILEPGD, TPOUTDATAFILE, OSPAWN_SURF)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 
 !
 CHARACTER (LEN=*),      INTENT(IN) :: HINIFILE     ! Input file
@@ -75,7 +75,7 @@ END MODULE MODI_SPAWN_SURF
 !
 USE MODD_CONF,         ONLY : NVERB
 USE MODD_GRID_n,       ONLY : XZS
-USE MODD_IO_ll,        ONLY : TFILEDATA
+USE MODD_IO,           ONLY : TFILEDATA
 USE MODD_IO_SURF_MNH,  ONLY : COUTFILE
 USE MODD_LUNIT,        ONLY : TPGDFILE, TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
@@ -84,8 +84,6 @@ USE MODD_PARAM_n,      ONLY : CSURF
 USE MODD_TIME_n,       ONLY : TDTCUR
 !
 USE MODE_ll
-USE MODE_FMWRIT
-USE MODE_IO_ll
 USE MODE_MODELN_HANDLER
 USE MODE_PREP_CTL,     ONLY : PREP_CTL
 !
diff --git a/src/MNH/spawn_surf2_rain.f90 b/src/MNH/spawn_surf2_rain.f90
index a1f774f4f..0c324004d 100644
--- a/src/MNH/spawn_surf2_rain.f90
+++ b/src/MNH/spawn_surf2_rain.f90
@@ -17,7 +17,7 @@ INTERFACE
                               KIB2,KJB2,KIE2,KJE2,                                 &
                               KIB1,KJB1,KIE1,KJE1                                  )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -116,10 +116,10 @@ END MODULE MODI_SPAWN_SURF2_RAIN
 !               ------------
 !
 USE MODD_BIKHARDT_n
-USE MODD_CONF,    ONLY : CCONF,CPROGRAM
-USE MODD_FIELD_n, ONLY : XTHT
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_LBC_n,   ONLY : LBC_MODEL
+USE MODD_CONF,    ONLY: CCONF, CPROGRAM
+USE MODD_FIELD_n, ONLY: XTHT
+USE MODD_IO,      ONLY: TFILEDATA
+USE MODD_LBC_n,   ONLY: LBC_MODEL
 USE MODD_SPAWN
 !
 USE MODE_MODELN_HANDLER
diff --git a/src/MNH/spawn_zs.f90 b/src/MNH/spawn_zs.f90
index 63bd460af..f015f586f 100644
--- a/src/MNH/spawn_zs.f90
+++ b/src/MNH/spawn_zs.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2005-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !###################
@@ -114,7 +114,6 @@ USE MODI_ZS_BOUNDARY
 !
 USE MODE_MODELN_HANDLER
 !
-USE MODE_FM
 USE MODE_MPPDB
 USE MODD_VAR_ll
 USE MODE_ll
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index 54c6103b6..4e654fff1 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -75,7 +75,7 @@
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
-!                          (nsubfiles_ioz is now determined in IO_FILE_ADD2LIST)
+!                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -103,7 +103,7 @@ USE MODD_CURVCOR_n
 USE MODD_DIM_n
 USE MODD_DYN_n, LRES_n=>LRES, XRES_n=>XRES 
 USE MODD_FIELD_n
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
+USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
 USE MODD_LSFIELD_n
 USE MODD_LBC_n
 USE MODD_LUNIT_n
@@ -113,12 +113,12 @@ USE MODD_REF_n
 USE MODD_TIME_n
 USE MODD_CH_MNHC_n
 USE MODD_GRID_n
-! 
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY: IO_FILE_FIND_BYNAME,IO_FILE_PRINT_LIST
+!
+USE MODE_IO,               only: IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname, IO_Filelist_print
 USE MODE_ll
 USE MODE_POS
-USE MODE_FM
 USE MODE_MODELN_HANDLER
 !
 USE MODI_SPAWN_MODEL2    
@@ -167,7 +167,7 @@ CALL VERSION
 CPROGRAM='SPAWN '
 CDOMAIN= ''
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !-------------------------------------------------------------------------------
 !
 !*       1.    SPAWNING INITIALIZATION 
@@ -182,8 +182,8 @@ CALL READ_EXSPA(CINIFILE,CINIFILEPGD,&
 !*       2.    NAM_BLANK, NAM_SPAWN_SURF and NAM_CONFZ READING AND EXSPA file CLOSURE
 !              ----------------------------------------
 !
-CALL IO_FILE_FIND_BYNAME('SPAWN1.nam',TZEXPAFILE,IRESP)
-CALL IO_FILE_OPEN_ll(TZEXPAFILE)
+CALL IO_File_find_byname('SPAWN1.nam',TZEXPAFILE,IRESP)
+CALL IO_File_open(TZEXPAFILE)
 ILUSPA = TZEXPAFILE%NLU
 !
 CALL INIT_NMLVAR
@@ -196,7 +196,7 @@ CALL POSNAM(ILUSPA,'NAM_CONFZ',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONFZ)
 CALL POSNAM(ILUSPA,'NAM_CONF_SPAWN',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_CONF_SPAWN)
-CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
+CALL IO_File_close(TZEXPAFILE)
 !
 !-------------------------------------------------------------------------------
 !
@@ -205,9 +205,9 @@ CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
 !
 CALL INIT_MNH
 !
-CALL IO_FILE_FIND_BYNAME(TRIM(CINIFILE),TZINIFILE,IRESP)
-CALL IO_FILE_CLOSE_ll(TZINIFILE)
-CALL IO_FILE_CLOSE_ll(TINIFILEPGD)
+CALL IO_File_find_byname(TRIM(CINIFILE),TZINIFILE,IRESP)
+CALL IO_File_close(TZINIFILE)
+CALL IO_File_close(TINIFILEPGD)
 !-------------------------------------------------------------------------------
 !
 !*       4.    INITIALIZATION OF OUTER POINTS OF MODEL 1
@@ -228,7 +228,7 @@ CALL MPPDB_CHECK3D(XUT,"SPAWNING-after boundaries::XUT",PRECISION)
 !*       5.    SPAWNING OF MODEL 2 FROM MODEL 1
 !              --------------------------------
 !
-CALL IO_FILE_OPEN_ll(TZEXPAFILE)
+CALL IO_File_open(TZEXPAFILE)
 ILUSPA = TZEXPAFILE%NLU
 !
 CALL SET_POINTERS_TO_MODEL1()
@@ -238,7 +238,7 @@ CALL POSNAM(ILUSPA,'NAM_SPAWN_SURF',GFOUND)
 IF (GFOUND) READ(UNIT=ILUSPA,NML=NAM_SPAWN_SURF)
 CALL UPDATE_MODD_FROM_NMLVAR
 CALL GOTO_MODEL(1)
-CALL IO_FILE_CLOSE_ll(TZEXPAFILE)
+CALL IO_File_close(TZEXPAFILE)
 !
 CALL GO_TOMODEL_ll(2,IINFO_ll)
 !
@@ -248,9 +248,9 @@ CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
 !
 CALL SURFEX_DEALLO_LIST
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT)
+CALL IO_File_close(TLUOUT)
 !
 CALL END_PARA_ll(IINFO_ll)
 !JUAN CALL ABORT
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index ef3367cdc..22878e5a9 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -1,7 +1,8 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######spl
       PROGRAM SPECTRE
 !     ############
@@ -24,7 +25,7 @@
 !
 !
 USE MODD_CONF
-USE MODD_IO_ll, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
+USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
 USE MODD_LUNIT
 USE MODD_LUNIT_n
 USE MODD_TIME_n
@@ -36,10 +37,10 @@ USE MODI_SPECTRE_AROME
 !
 USE MODE_MSG
 USE MODE_POS
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST,IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_MODELN_HANDLER
-USE MODE_FM
 !USE MODD_TYPE_DATE
 USE MODI_VERSION
 !
@@ -84,7 +85,7 @@ CALL GOTO_MODEL(1)
 CALL VERSION
 CPROGRAM='SPEC  '
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
 ! initialization 
 YINIFILE(:)   = '                         '
@@ -120,8 +121,8 @@ PRINT*, '*********************************************************************'
 PRINT*, '*********************************************************************'
 PRINT*, ' '
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'SPEC1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'SPEC1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 PRINT*, 'READ THE SPEC1.NAM FILE'
@@ -162,9 +163,9 @@ IF (GFOUND) THEN
   READ(UNIT=ILUNAM,NML=NAM_CONFIO)
   PRINT*, '  namelist NAM_CONFIO read'
 END IF
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 CINIFILE = YINIFILE(1)
 !
@@ -188,10 +189,10 @@ ENDIF
 IF (CTYPEFILE=='MESONH') THEN
   CALL SPECTRE_MESONH(YOUTFILE)
   !
-  CALL IO_FILE_CLOSE_ll(LUNIT_MODEL(1)%TINIFILE)
-  IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
-  CALL IO_FILE_CLOSE_ll(TLUOUT0)
-  CALL IO_FILE_CLOSE_ll(TLUOUT)
+  CALL IO_File_close(LUNIT_MODEL(1)%TINIFILE)
+  IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
+  CALL IO_File_close(TLUOUT0)
+  CALL IO_File_close(TLUOUT)
 ELSEIF (CTYPEFILE=='AROME ')THEN
  CALL SPECTRE_AROME(CINIFILE,YOUTFILE,XDELTAX,XDELTAY,NI,NJ,NK)
 ELSE
diff --git a/src/MNH/spectre_arome.f90 b/src/MNH/spectre_arome.f90
index 532c3d979..81a83ebc2 100644
--- a/src/MNH/spectre_arome.f90
+++ b/src/MNH/spectre_arome.f90
@@ -2,6 +2,11 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+! Modifications:
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 10/01/2019: use NEWUNIT argument of OPEN
+!-----------------------------------------------------------------
 !     ####################
       MODULE MODI_SPECTRE_AROME
 !     ####################
@@ -22,14 +27,9 @@ END MODULE
 
 SUBROUTINE SPECTRE_AROME(HINIFILE,HOUTFILE,PDELTAX,PDELTAY,KI,KJ,KK)
 !     ######################################################################
-!     
-! Modifications:
-!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  Philippe Wautelet: 10/01/2019: use NEWUNIT argument of OPEN
 !
 USE MODD_CONF
-USE MODE_FM
-USE MODE_IO_ll
+USE MODE_IO, only: IO_Pack_set
 USE MODD_SPECTRE
 USE MODI_COMPUTE_SPECTRE
 USE MODD_PARAMETERS
@@ -54,7 +54,7 @@ INTEGER :: JJJ,III,JERR
 CALL SET_SPLITTING_ll(CSPLIT)
 CALL SET_JP_ll(JPMODELMAX,JPHEXT,JPVEXT, NHALO)
 CALL SET_DAD0_ll()
-CALL SET_FMPACK_ll(L1D,L2D,LPACK)
+CALL IO_Pack_set(L1D,L2D,LPACK)
 ALLOCATE(ZWORK1(KI+2,KJ+2,KK+2))
 !
 IF (LSPECTRE_U) THEN
diff --git a/src/MNH/tke_eps_sources.f90 b/src/MNH/tke_eps_sources.f90
index 883dabdc2..910497fcb 100644
--- a/src/MNH/tke_eps_sources.f90
+++ b/src/MNH/tke_eps_sources.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###########################
@@ -15,7 +15,7 @@ INTERFACE
                       TPFILE,OCLOSE_OUT,OTURB_DIAG,                         &
                       PTP,PRTKES,PRTKESM, PRTHLS,PCOEF_DISS,PTR,PDISS       )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                 INTENT(IN)   ::  KKA          !near ground array index  
 INTEGER,                 INTENT(IN)   ::  KKU          !uppest atmosphere array index
@@ -175,15 +175,15 @@ END MODULE MODI_TKE_EPS_SOURCES
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_BUDGET
 USE MODD_LES
 USE MODD_DIAG_IN_RUN, ONLY : LDIAG_IN_RUN, XCURRENT_TKE_DISS
 !
 USE MODE_ll
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -426,7 +426,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PDP)
+  CALL IO_Field_write(TPFILE,TZFIELD,PDP)
 !
 ! stores the thermal production 
 !
@@ -440,7 +440,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PTP)
+  CALL IO_Field_write(TPFILE,TZFIELD,PTP)
 !
 ! stores the whole turbulent transport
 !
@@ -454,7 +454,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PTR)
+  CALL IO_Field_write(TPFILE,TZFIELD,PTR)
 !
 ! stores the dissipation of TKE 
 !
@@ -468,7 +468,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PDISS)
+  CALL IO_Field_write(TPFILE,TZFIELD,PDISS)
 END IF
 !
 ! Storage in the LES configuration of the Dynamic Production of TKE and
diff --git a/src/MNH/trid.f90 b/src/MNH/trid.f90
index 3f57d6a9c..db2600ee0 100644
--- a/src/MNH/trid.f90
+++ b/src/MNH/trid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ################
@@ -171,7 +171,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !
 !JUAN
diff --git a/src/MNH/tridz.f90 b/src/MNH/tridz.f90
index c72b59870..4a7445791 100644
--- a/src/MNH/tridz.f90
+++ b/src/MNH/tridz.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ################
@@ -180,7 +180,6 @@ USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
 USE MODE_ll
-USE MODE_IO_ll
 USE MODE_MSG
 !JUAN P1/P2 SPLITTING
 USE MODE_SPLITTINGZ_ll , ONLY : GET_DIM_EXTZ_ll,GET_ORZ_ll,LWESTZ_ll,LSOUTHZ_ll
diff --git a/src/MNH/turb.f90 b/src/MNH/turb.f90
index 5e304989b..835d79d0e 100644
--- a/src/MNH/turb.f90
+++ b/src/MNH/turb.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################ 
@@ -25,7 +25,7 @@ INTERFACE
                 PFLXZTHVMF,PWTH,PWRC,PWSV,PDYP,PTHP,PTR,PDISS,PLEM    )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -350,7 +350,7 @@ USE MODD_CST
 USE MODD_CTURB
 USE MODD_CONF
 USE MODD_BUDGET
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
 !
@@ -372,8 +372,8 @@ USE MODI_TM06
 USE MODI_UPDATE_LM
 USE MODI_GET_HALO
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_SBL
 !
 USE MODI_EMOIST
@@ -688,7 +688,7 @@ IF (KRRL >=1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZATHETA)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZATHETA)
 ! 
     TZFIELD%CMNHNAME   = 'AMOIST'
     TZFIELD%CSTDNAME   = ''
@@ -700,7 +700,7 @@ IF (KRRL >=1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZAMOIST)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZAMOIST)
   END IF
 !
 ELSE
@@ -1058,7 +1058,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLM)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZLM)
 !
   IF (KRR /= 0) THEN
 !
@@ -1074,7 +1074,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PTHLT)
+    CALL IO_Field_write(TPFILE,TZFIELD,PTHLT)
 !
 ! stores the conservative mixing ratio
 !
@@ -1088,7 +1088,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PRT(:,:,:,1))
+    CALL IO_Field_write(TPFILE,TZFIELD,PRT(:,:,:,1))
    END IF
 END IF
 !
@@ -1703,7 +1703,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLM)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZLM)
 ENDIF
 !
 ! Amplification of the mixing length when the criteria are verified
@@ -1729,7 +1729,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCOEF_AMPL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZCOEF_AMPL)
   !
   TZFIELD%CMNHNAME   = 'LM_CLOUD'
   TZFIELD%CSTDNAME   = ''
@@ -1740,7 +1740,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NGRID      = 1
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLM_CLOUD)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZLM_CLOUD)
   !
 ENDIF
 !
diff --git a/src/MNH/turb_cloud_index.f90 b/src/MNH/turb_cloud_index.f90
index b9a42c2fc..a224e27eb 100644
--- a/src/MNH/turb_cloud_index.f90
+++ b/src/MNH/turb_cloud_index.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################
@@ -14,7 +14,7 @@ INTERFACE
                                   PRRS,PRM,PRHODJ,PDXX,PDYY,PDZZ,PDZX,PDZY, &
                                   PCEI                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 REAL,                   INTENT(IN)   ::  PTSTEP       ! Double Time step
 TYPE(TFILEDATA),        INTENT(IN)   ::  TPFILE       ! Output file
@@ -85,11 +85,11 @@ END MODULE MODI_TURB_CLOUD_INDEX
 !
 !-------------------------------------------------------------------------------
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS, ONLY: JPVEXT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_PARAMETERS,     ONLY: JPVEXT
 !
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 !
@@ -259,7 +259,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRVCI)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZRVCI)
   !
   TZFIELD%CMNHNAME   = 'GX_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -271,7 +271,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZG_RVCI(:,:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZG_RVCI(:,:,:,1))
   !
   TZFIELD%CMNHNAME   = 'GY_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -283,7 +283,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZG_RVCI(:,:,:,2))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZG_RVCI(:,:,:,2))
   !
   TZFIELD%CMNHNAME   = 'GNORM_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -295,7 +295,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZGNORM_RVCI)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZGNORM_RVCI)
   !
   TZFIELD%CMNHNAME   = 'QX_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -307,7 +307,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,1))
   !
   TZFIELD%CMNHNAME   = 'QY_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -319,7 +319,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,2))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZQ_RVCI(:,:,:,2))
   !
   TZFIELD%CMNHNAME   = 'QNORM_RVCI'
   TZFIELD%CSTDNAME   = ''
@@ -331,7 +331,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZQNORM_RVCI)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZQNORM_RVCI)
   !
   TZFIELD%CMNHNAME   = 'CEI'
   TZFIELD%CSTDNAME   = ''
@@ -343,7 +343,7 @@ IF ( OTURB_DIAG .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,PCEI)
+  CALL IO_Field_write(TPFILE,TZFIELD,PCEI)
 END IF
 !
 END SUBROUTINE TURB_CLOUD_INDEX
diff --git a/src/MNH/turb_hor.f90 b/src/MNH/turb_hor.f90
index bc99e3bfc..389d45e49 100644
--- a/src/MNH/turb_hor.f90
+++ b/src/MNH/turb_hor.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ####################  
@@ -27,7 +27,7 @@ INTERFACE
                       PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS               )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KSPLT         ! current split index
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
@@ -255,7 +255,7 @@ END MODULE MODI_TURB_HOR
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
diff --git a/src/MNH/turb_hor_dyn_corr.f90 b/src/MNH/turb_hor_dyn_corr.f90
index 930b8fb69..810c6c616 100644
--- a/src/MNH/turb_hor_dyn_corr.f90
+++ b/src/MNH/turb_hor_dyn_corr.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 MODULE MODI_TURB_HOR_DYN_CORR
@@ -22,7 +22,7 @@ INTERFACE
                       PDP,PTP,                                       &
                       PRUS,PRVS,PRWS                                 )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 REAL,                     INTENT(IN)    ::  PTSTEP       ! timestep
@@ -141,18 +141,18 @@ END MODULE MODI_TURB_HOR_DYN_CORR
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_ARGSLIST_ll, ONLY : LIST_ll
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_NSV
 !
 USE MODE_ll
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -384,7 +384,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the U tendency
@@ -479,7 +479,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the V tendency
@@ -566,7 +566,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! Complete the W tendency
diff --git a/src/MNH/turb_hor_splt.f90 b/src/MNH/turb_hor_splt.f90
index 88158afa3..df281d123 100644
--- a/src/MNH/turb_hor_splt.f90
+++ b/src/MNH/turb_hor_splt.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #########################  
@@ -26,7 +26,7 @@ INTERFACE
                       PRUS,PRVS,PRWS,PRTHLS,PRRS,PRSVS               )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KSPLIT        ! number of time splitting
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
@@ -257,7 +257,7 @@ END MODULE MODI_TURB_HOR_SPLT
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 !
 !
diff --git a/src/MNH/turb_hor_sv_flux.f90 b/src/MNH/turb_hor_sv_flux.f90
index acb3da871..2ff88559c 100644
--- a/src/MNH/turb_hor_sv_flux.f90
+++ b/src/MNH/turb_hor_sv_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ############################
@@ -20,7 +20,7 @@ INTERFACE
                       PSVM,                                          &
                       PRSVS                                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -115,14 +115,14 @@ END MODULE MODI_TURB_HOR_SV_FLUX
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
-USE MODD_NSV, ONLY : NSV_LGBEG,NSV_LGEND
+USE MODD_NSV,            ONLY: NSV_LGBEG, NSV_LGEND
 USE MODD_LES
 USE MODD_BLOWSNOW
 !
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -262,7 +262,7 @@ DO JSV=1,ISV
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXX)
   END IF
 !
   IF (LLES_CALL .AND. KSPLT==1) THEN
@@ -313,7 +313,7 @@ DO JSV=1,ISV
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXY)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXY)
     END IF
 !
   ELSE
diff --git a/src/MNH/turb_hor_thermo_corr.f90 b/src/MNH/turb_hor_thermo_corr.f90
index 8ae8f14fd..e6f89e6d9 100644
--- a/src/MNH/turb_hor_thermo_corr.f90
+++ b/src/MNH/turb_hor_thermo_corr.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################################
@@ -20,7 +20,7 @@ INTERFACE
                       PLOCPEXNM,PATHETA,PAMOIST,PSRCM,               &
                       PSIGS                                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -123,12 +123,12 @@ END MODULE MODI_TURB_HOR_THERMO_CORR
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -281,7 +281,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) &
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
   END IF
 !
 ! Storage in the LES configuration (addition to TURB_VER computation)
@@ -369,7 +369,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) &
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
     END IF
 !
 !   Storage in the LES configuration (addition to TURB_VER computation)
@@ -437,7 +437,7 @@ IF ( ( KRRL > 0 .AND. OSUBG_COND) .OR. ( OTURB_FLX .AND. OCLOSE_OUT ) &
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
     END IF
     !
     !   Storage in the LES configuration (addition to TURB_VER computation)
diff --git a/src/MNH/turb_hor_thermo_flux.f90 b/src/MNH/turb_hor_thermo_flux.f90
index 6bb5399da..188e932c6 100644
--- a/src/MNH/turb_hor_thermo_flux.f90
+++ b/src/MNH/turb_hor_thermo_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ################################ 
@@ -21,7 +21,7 @@ INTERFACE
                       PATHETA,PAMOIST,PSRCM,PFRAC_ICE,               &
                       PRTHLS,PRRS                                    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    :: KSPLT         ! split process index
 INTEGER,                  INTENT(IN)    :: KRR           ! number of moist var.
@@ -132,12 +132,12 @@ END MODULE MODI_TURB_HOR_THERMO_FLUX
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -325,7 +325,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -428,7 +428,7 @@ IF (KRR/=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
   END IF
   !
   IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -477,7 +477,7 @@ END IF
 !!    TZFIELD%NTYPE      = TYPEREAL
 !!    TZFIELD%NDIMS      = 3
 !!    TZFIELD%LTIMEDEP   = .TRUE.
-!!    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVPTU)
+!!    CALL IO_Field_write(TPFILE,TZFIELD,ZVPTU)
 !!  END IF
 !!!
 !!ELSE
@@ -580,7 +580,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -692,7 +692,7 @@ IF (KRR/=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
   END IF
   !
   IF (KSPLT==1 .AND. LLES_CALL) THEN
@@ -745,7 +745,7 @@ END IF
 !!    TZFIELD%NTYPE      = TYPEREAL
 !!    TZFIELD%NDIMS      = 3
 !!    TZFIELD%LTIMEDEP   = .TRUE.
-!!    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVPTV)
+!!    CALL IO_Field_write(TPFILE,TZFIELD,ZVPTV)
 !!  END IF
 !!!
 !!ELSE
diff --git a/src/MNH/turb_hor_uv.f90 b/src/MNH/turb_hor_uv.f90
index d3bba36c2..70210144d 100644
--- a/src/MNH/turb_hor_uv.f90
+++ b/src/MNH/turb_hor_uv.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -22,7 +22,7 @@ INTERFACE
                       PDP,                                           &
                       PRUS,PRVS                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -128,12 +128,12 @@ END MODULE MODI_TURB_HOR_UV
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -285,7 +285,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 !
diff --git a/src/MNH/turb_hor_uw.f90 b/src/MNH/turb_hor_uw.f90
index be7ba4ea7..8860fdfd5 100644
--- a/src/MNH/turb_hor_uw.f90
+++ b/src/MNH/turb_hor_uw.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -20,7 +20,7 @@ INTERFACE
                       PDP,                                           &
                       PRUS,PRWS                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -119,13 +119,13 @@ END MODULE MODI_TURB_HOR_UW
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_NSV
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -234,7 +234,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 !
diff --git a/src/MNH/turb_hor_vw.f90 b/src/MNH/turb_hor_vw.f90
index 8b9231469..a730e736f 100644
--- a/src/MNH/turb_hor_vw.f90
+++ b/src/MNH/turb_hor_vw.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #######################
@@ -20,7 +20,7 @@ INTERFACE
                       PDP,                                           &
                       PRVS,PRWS                                      )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                  INTENT(IN)    ::  KSPLT        ! split process index
 LOGICAL,                  INTENT(IN)    ::  OCLOSE_OUT   ! switch for syncronous
@@ -115,13 +115,13 @@ END MODULE MODI_TURB_HOR_VW
 USE MODD_CST
 USE MODD_CONF
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_NSV
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_M
 USE MODI_GRADIENT_U
@@ -236,7 +236,7 @@ IF ( OCLOSE_OUT .AND. OTURB_FLX ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLX)
 END IF
 !
 ! compute the source for rho*V due to this residual flux ( the other part is
diff --git a/src/MNH/turb_ver.f90 b/src/MNH/turb_ver.f90
index ecf077cbb..b85c896a9 100644
--- a/src/MNH/turb_ver.f90
+++ b/src/MNH/turb_ver.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -27,7 +27,7 @@ INTERFACE
                       PDP,PTP,PSIGS,PWTH,PWRC,PWSV                  )
 
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KRR           ! number of moist var.
 INTEGER,                INTENT(IN)   :: KRRL          ! number of liquid water var.
@@ -326,10 +326,10 @@ END MODULE MODI_TURB_VER
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
-USE MODD_NSV, ONLY : NSV
+USE MODD_NSV,            ONLY: NSV
 USE MODD_BLANK
 !
 USE MODI_PRANDTL
@@ -346,8 +346,8 @@ USE MODI_TURB_VER_SV_CORR
 USE MODI_LES_MEAN_SUBGRID
 USE MODI_SBL_DEPTH
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
@@ -712,7 +712,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPHI3)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZPHI3)
 !
 ! stores the Turbulent Schmidt number
 ! 
@@ -726,7 +726,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPSI3)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZPSI3)
 !
 !
 ! stores the Turbulent Schmidt number for the scalar variables
@@ -742,7 +742,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
     WRITE(TZFIELD%CMNHNAME, '("PSI_SV_",I3.3)') JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPSI_SV(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPSI_SV(:,:,:,JSV))
   END DO
 !
 END IF
diff --git a/src/MNH/turb_ver_dyn_flux.f90 b/src/MNH/turb_ver_dyn_flux.f90
index 93b7f9016..eb6811a8f 100644
--- a/src/MNH/turb_ver_dyn_flux.f90
+++ b/src/MNH/turb_ver_dyn_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -23,7 +23,7 @@ INTERFACE
                       PRUS,PRVS,PRWS,                               &
                       PDP,PTP                                       )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -290,25 +290,25 @@ END MODULE MODI_TURB_VER_DYN_FLUX
 USE MODD_CONF
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
-USE MODD_PARAMETERS
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_NSV
+USE MODD_PARAMETERS
 !
 !
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
 USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
-USE MODI_SHUMAN 
+USE MODI_SECOND_MNH
+USE MODI_SHUMAN
 USE MODI_TRIDIAG 
 USE MODI_TRIDIAG_WIND 
-USE MODE_FMWRIT
 USE MODI_LES_MEAN_SUBGRID
 !
-USE MODI_SECOND_MNH
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
 !
 IMPLICIT NONE
 !
@@ -521,7 +521,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 ! first part of total momentum flux
@@ -695,7 +695,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 ! second part of total momentum flux
@@ -807,7 +807,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT .AND. HTURBDIM == '1DIM') THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 !----------------------------------------------------------------------------
diff --git a/src/MNH/turb_ver_sv_flux.f90 b/src/MNH/turb_ver_sv_flux.f90
index 26b102f73..30de8c5d6 100644
--- a/src/MNH/turb_ver_sv_flux.f90
+++ b/src/MNH/turb_ver_sv_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -21,7 +21,7 @@ INTERFACE
                       PTKEM,PLM,PPSI_SV,                            &
                       PRSVS,PWSV                                    )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -272,14 +272,14 @@ END MODULE MODI_TURB_VER_SV_FLUX
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_LES
 USE MODD_CONF
-USE MODD_NSV, ONLY : XSVMIN,NSV_LGBEG,NSV_LGEND
+USE MODD_NSV,            ONLY: XSVMIN, NSV_LGBEG, NSV_LGEND
 USE MODD_BLOWSNOW
-USE MODE_FIELD, ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
@@ -469,7 +469,7 @@ DO JSV=1,ISV
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     !
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
   !
   ! Storage in the LES configuration
diff --git a/src/MNH/turb_ver_thermo_corr.f90 b/src/MNH/turb_ver_thermo_corr.f90
index e9dcb3f1c..598ad7c83 100644
--- a/src/MNH/turb_ver_thermo_corr.f90
+++ b/src/MNH/turb_ver_thermo_corr.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -25,7 +25,7 @@ INTERFACE
                       PFWTH,PFWR,PFTH2,PFR2,PFTHR,                  &
                       PTHLP,PRP,PSIGS                          )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -314,7 +314,7 @@ END MODULE MODI_TURB_VER_THERMO_CORR
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_LES
@@ -325,12 +325,12 @@ USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
 USE MODI_SHUMAN 
 USE MODI_TRIDIAG 
-USE MODE_FMWRIT
 USE MODI_LES_MEAN_SUBGRID
 USE MODI_PRANDTL
 USE MODI_TRIDIAG_THERMO
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
@@ -582,7 +582,7 @@ END IF
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
 !
 ! and we store in LES configuration
@@ -709,7 +709,7 @@ END IF
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
     END IF
 !
 ! and we store in LES configuration
@@ -816,7 +816,7 @@ END IF
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
     END IF
     !
     ! and we store in LES configuration
diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90
index 0915d2544..5aa9cb6f0 100644
--- a/src/MNH/turb_ver_thermo_flux.f90
+++ b/src/MNH/turb_ver_thermo_flux.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    #################### 
@@ -26,7 +26,7 @@ INTERFACE
                       PFWTH,PFWR,PFTH2,PFR2,PFTHR,PBL_DEPTH,        &
                       PWTHV,PRTHLS,PRRS,PTHLP,PRP,PTP,PWTH,PWRC     )
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,                INTENT(IN)   :: KKA           !near ground array index  
 INTEGER,                INTENT(IN)   :: KKU           !uppest atmosphere array index
@@ -332,7 +332,7 @@ END MODULE MODI_TURB_VER_THERMO_FLUX
 !
 USE MODD_CST
 USE MODD_CTURB
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF
 USE MODD_LES
@@ -343,13 +343,13 @@ USE MODI_GRADIENT_W
 USE MODI_GRADIENT_M
 USE MODI_SHUMAN 
 USE MODI_TRIDIAG 
-USE MODE_FMWRIT
 USE MODI_LES_MEAN_SUBGRID
 USE MODI_PRANDTL
 USE MODI_TRIDIAG_THERMO
 USE MODI_TM06_H
 !
-USE MODE_FIELD, ONLY: TFIELDDATA, TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_PRANDTL
 !
 USE MODI_SECOND_MNH
@@ -617,7 +617,7 @@ IF ( OTURB_FLX .AND. OCLOSE_OUT ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
 END IF
 !
 ! Contribution of the conservative temperature flux to the buoyancy flux
@@ -795,7 +795,7 @@ IF (KRR /= 0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
   !
   ! Contribution of the conservative water flux to the Buoyancy flux
@@ -877,7 +877,7 @@ IF ( ((OTURB_FLX .AND. OCLOSE_OUT) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZFLXZ)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZFLXZ)
   END IF
   !  
 ! and we store in LES configuration this subgrid flux <w'rc'>
diff --git a/src/MNH/uv_to_zonal_and_merid.f90 b/src/MNH/uv_to_zonal_and_merid.f90
index c78aa754a..1403691bc 100644
--- a/src/MNH/uv_to_zonal_and_merid.f90
+++ b/src/MNH/uv_to_zonal_and_merid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #################################
@@ -9,7 +9,7 @@
 INTERFACE UV_TO_ZONAL_AND_MERID
       SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA
 !
 REAL, DIMENSION(:,:,:),                  INTENT(IN)  :: PU       ! Input U component
@@ -24,7 +24,7 @@ END SUBROUTINE UV_TO_ZONAL_AND_MERID3D
 !
       SUBROUTINE UV_TO_ZONAL_AND_MERID2D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,    ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA
 !
 REAL, DIMENSION(:,:),                    INTENT(IN)  :: PU       ! Input U component
@@ -47,7 +47,7 @@ INTERFACE
 !
       SUBROUTINE UV_TO_ZONAL_AND_MERID3D(PU,PV,KGRID,PZC,PMC,TPFILE,TZFIELDS)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,    ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA
 !
 REAL, DIMENSION(:,:,:),                  INTENT(IN)  :: PU       ! Input U component
@@ -105,12 +105,12 @@ USE MODD_CST
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll,   ONLY: TFILEDATA,NVERB_ERROR,NVERB_INFO,NVERB_WARNING
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
-USE MODE_FIELD,   ONLY: TFIELDDATA
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_SHUMAN
@@ -220,8 +220,8 @@ IF(PRESENT(TPFILE)) THEN
     CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID3D','inconsistent values for TZFIELDS(x)%HDIR')
   END IF
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(1),ZZC(:,:,:))
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(2),ZMC(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELDS(1),ZZC(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELDS(2),ZMC(:,:,:))
 ELSE IF (PRESENT(PZC).AND.PRESENT(PMC)) THEN
   PZC(:,:,:)=ZZC(:,:,:)
   PMC(:,:,:)=ZMC(:,:,:)
@@ -276,11 +276,11 @@ END SUBROUTINE UV_TO_ZONAL_AND_MERID3D
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_IO_ll,   ONLY: TFILEDATA,NVERB_WARNING
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA, NVERB_WARNING
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 !
-USE MODE_FIELD,   ONLY: TFIELDDATA
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_UV_TO_ZONAL_AND_MERID3D
@@ -332,8 +332,8 @@ IF(PRESENT(TPFILE)) THEN
     CALL PRINT_MSG(NVERB_WARNING,'IO','UV_TO_ZONAL_AND_MERID2D','inconsistent values for TZFIELDS(x)%HDIR')
   END IF
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(1),ZZC3D(:,:,1))
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELDS(2),ZMC3D(:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELDS(1),ZZC3D(:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELDS(2),ZMC3D(:,:,1))
 ELSE IF (PRESENT(PZC).AND.PRESENT(PMC)) THEN
   PZC(:,:)=ZZC3D(:,:,1)
   PMC(:,:)=ZMC3D(:,:,1)
diff --git a/src/MNH/ver_int_thermo.f90 b/src/MNH/ver_int_thermo.f90
index 03ac8e95b..38b931424 100644
--- a/src/MNH/ver_int_thermo.f90
+++ b/src/MNH/ver_int_thermo.f90
@@ -12,7 +12,7 @@ INTERFACE
                                 PPMHP_MX,PEXNTOP2D,PTHV,PR,PPMHP,PDIAG,            &
                                 PLSTH_MX, PLSRV_MX, PLSTHM, PLSRVM                 )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE     ! File characteristics
 LOGICAL,                  INTENT(IN)  :: OSHIFT     ! T: vertical shift of BL (used for GRIB file data)
@@ -144,7 +144,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_GRID_n
-USE MODD_IO_ll,       ONLY: TFILEDATA
+USE MODD_IO,          ONLY: TFILEDATA
 USE MODD_LUNIT,       ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_VER_INTERP_LIN
diff --git a/src/MNH/ver_interp_to_mixed_grid.f90 b/src/MNH/ver_interp_to_mixed_grid.f90
index 13f9ba705..f1a882848 100644
--- a/src/MNH/ver_interp_to_mixed_grid.f90
+++ b/src/MNH/ver_interp_to_mixed_grid.f90
@@ -166,8 +166,6 @@ END MODULE MODI_VER_INTERP_TO_MIXED_GRID
 !              ------------
 !
 USE MODE_THERMO
-USE MODE_FM
-USE MODE_IO_ll
 !
 USE MODI_COEF_VER_INTERP_LIN
 USE MODI_VER_INTERP_LIN
diff --git a/src/MNH/ver_thermo.f90 b/src/MNH/ver_thermo.f90
index 94f06c8a8..25f46514d 100644
--- a/src/MNH/ver_thermo.f90
+++ b/src/MNH/ver_thermo.f90
@@ -12,7 +12,7 @@ INTERFACE
                             PDXX,PDYY,PEXNTOP2D,PPSURF,PDIAG,                              &
                             PLSTH_MX,PLSRV_MX                                              )
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),          INTENT(IN)  :: TPFILE     ! File characteristics
 LOGICAL,                  INTENT(IN)  :: OSHIFT     ! T: vertical shift of BL (used for GRIB file data)
@@ -153,24 +153,24 @@ END MODULE MODI_VER_THERMO
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_ARGSLIST_ll, ONLY: LIST_ll
+USE MODD_ARGSLIST_ll,    ONLY: LIST_ll
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_DYN_n
-USE MODD_FIELD_n,     ONLY: XTHT,XRT,XPABST,XDRYMASST
+USE MODD_FIELD_n,        ONLY: XTHT,XRT,XPABST,XDRYMASST
 USE MODD_GRID_n
-USE MODD_IO_ll,       ONLY: TFILEDATA,TFILE_DUMMY
+USE MODD_IO,             ONLY: TFILEDATA,TFILE_DUMMY
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
-USE MODD_LUNIT,       ONLY: TLUOUT0
+USE MODD_LUNIT,          ONLY: TLUOUT0
 USE MODD_PARAMETERS
 USE MODD_REF_n
 !
 USE MODD_DIM_n
 USE MODE_EXTRAPOL
-USE MODE_FIELD,       ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
 USE MODE_MPPDB
 !
@@ -304,7 +304,7 @@ IF (NVERB>=10) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHV)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZTHV)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/viscosity.f90 b/src/MNH/viscosity.f90
index 5d822248a..f047a5405 100644
--- a/src/MNH/viscosity.f90
+++ b/src/MNH/viscosity.f90
@@ -1,8 +1,9 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
-! 
+!-----------------------------------------------------------------
+!
 !     #####################
       MODULE MODI_VISCOSITY
 !     #####################
@@ -103,7 +104,6 @@ SUBROUTINE VISCOSITY(HLBCX, HLBCY, KRR, KSV, PNU, PPRANDTL,          &
   USE MODD_BUDGET
   USE MODE_ll
   USE MODD_ARGSLIST_ll, ONLY : LIST_ll
-  USE MODE_FM
   USE MODI_BUDGET
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index 3d021974a..3e4e7370e 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_AIRCRAFT_BALLOON(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN) :: TPDIAFILE ! file to write
 !
@@ -71,7 +71,7 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_balloonn.f90 b/src/MNH/write_balloonn.f90
index 3bfb6091a..c1d82c1b2 100644
--- a/src/MNH/write_balloonn.f90
+++ b/src/MNH/write_balloonn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2001-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ###########################
@@ -10,7 +10,7 @@
 INTERFACE
 !
 SUBROUTINE WRITE_BALLOON_n(TPFILE)
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -64,8 +64,8 @@ END MODULE MODI_WRITE_BALLOON_n
 !              ------------
 !
 USE MODD_AIRCRAFT_BALLOON
-USE MODD_GRID,  ONLY: XLONORI,XLATORI
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_GRID, ONLY: XLONORI, XLATORI
+USE MODD_IO,   ONLY: TFILEDATA
 USE MODD_LUNIT_n
 !
 USE MODE_GRIDPROJ
@@ -96,8 +96,8 @@ CONTAINS
 !-------------------------------------------------------------------------------
 SUBROUTINE WRITE_LFI_BALLOON(TPFLYER)
 !
-USE MODE_FIELD, ONLY : TFIELDDATA, TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 TYPE(FLYER),        INTENT(IN)       :: TPFLYER
 !
@@ -123,7 +123,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLAT)
+CALL IO_Field_write(TPFILE,TZFIELD,ZLAT)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'LON'
 TZFIELD%CSTDNAME   = ''
@@ -135,7 +135,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZLON)
+CALL IO_Field_write(TPFILE,TZFIELD,ZLON)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'ALT'
 TZFIELD%CSTDNAME   = ''
@@ -147,7 +147,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TPFLYER%Z_CUR)
+CALL IO_Field_write(TPFILE,TZFIELD,TPFLYER%Z_CUR)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'WASCENT'
 TZFIELD%CSTDNAME   = ''
@@ -159,7 +159,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TPFLYER%WASCENT)
+CALL IO_Field_write(TPFILE,TZFIELD,TPFLYER%WASCENT)
 !
 TZFIELD%CMNHNAME   = TRIM(TPFLYER%TITLE)//'RHO'
 TZFIELD%CSTDNAME   = ''
@@ -171,7 +171,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .TRUE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TPFLYER%RHO)
+CALL IO_Field_write(TPFILE,TZFIELD,TPFLYER%RHO)
 !
 !
 !
diff --git a/src/MNH/write_budget.f90 b/src/MNH/write_budget.f90
index c70ee075f..e24f6a300 100644
--- a/src/MNH/write_budget.f90
+++ b/src/MNH/write_budget.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################## 
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE WRITE_BUDGET(TPDIAFILE,TPDTCUR, &
                               TPDTMOD,PTSTEP, KSV)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_TYPE_DATE
 !
 TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
@@ -131,12 +131,12 @@ END MODULE MODI_WRITE_BUDGET
 !*       0.    
 !              ------------
 USE MODD_BUDGET
-USE MODD_IO_ll,   ONLY: TFILEDATA
-USE MODD_LUNIT_n, ONLY: TLUOUT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_LUNIT_n,        ONLY: TLUOUT
 !
 USE MODE_DATETIME
-USE MODE_FIELD,   ONLY: TFIELDDATA,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEREAL
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_TIME
 !
 USE MODI_END_CART_COMPRESS
@@ -199,7 +199,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTSTEP)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,PTSTEP)
 !
 TZFIELD%CMNHNAME   = 'BULEN'
 TZFIELD%CSTDNAME   = ''
@@ -211,7 +211,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,XBULEN)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,XBULEN)
 !
 !*   1.1   initialize NBUTSHIFT
 !           ---------------------
@@ -1031,7 +1031,7 @@ SELECT CASE (CBUTYPE)
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 6
         TZFIELD%LTIMEDEP   = .FALSE.
-        CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:))
+        CALL IO_Field_write(TPDIAFILE,TZFIELD,ZWORKMASK(:,:,:,:,:,:))
         WRITE(YRECFM,FMT="('MASK_',I4.4)") NBUTSHIFT
         CALL MENU_DIACHRO(TPDIAFILE,YRECFM)
         DEALLOCATE(ZWORKMASK)
diff --git a/src/MNH/write_desfmn.f90 b/src/MNH/write_desfmn.f90
index 223153f59..fc96071c8 100644
--- a/src/MNH/write_desfmn.f90
+++ b/src/MNH/write_desfmn.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE WRITE_DESFM_n(KMI,TPDATAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,            INTENT(IN)  :: KMI        ! Model index
 TYPE(TFILEDATA),    INTENT(IN)  :: TPDATAFILE ! Datafile
@@ -150,7 +150,7 @@ END MODULE MODI_WRITE_DESFM_n
 !              ------------
 USE MODD_CONF
 USE MODD_DYN_n,   ONLY: LHORELAX_SVLIMA
-USE MODD_IO_ll,   ONLY: TFILEDATA
+USE MODD_IO,      ONLY: TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index 544eda16f..5e24bc549 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #################################################################
@@ -75,13 +75,12 @@
 !
 USE MODD_BUDGET
 USE MODD_CONF
-USE MODE_FIELD
-USE MODD_IO_ll,      ONLY : TFILEDATA
-USE MODD_PARAMETERS, ONLY : JPHEXT
+USE MODD_IO,             ONLY: TFILEDATA
+USE MODD_PARAMETERS,     ONLY: JPHEXT
 !
+USE MODE_FIELD
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_box
 USE MODE_ll
-USE MODE_FMWRIT
-USE MODE_IO_ll
 !
 USE MODI_MENU_DIACHRO
 !
@@ -229,7 +228,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HTYPE)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HTYPE)
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  1st record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -273,7 +272,7 @@ SELECT CASE(HTYPE)
     ITABCHAR(29)=IIMASK; ITABCHAR(30)=IJMASK
     ITABCHAR(31)=IKMASK; ITABCHAR(32)=ITMASK
     ITABCHAR(33)=INMASK; ITABCHAR(34)=IPMASK
-    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+    CALL IO_Field_write(TPDIAFILE,TZFIELD,ITABCHAR)
     DEALLOCATE(ITABCHAR)
     IF (NVERB>=5) THEN
       WRITE(ILUOUTDIA,*)' ILENTITRE,ILENUNITE,ILENCOMMENT ',ILENTITRE,ILENUNITE,ILENCOMMENT
@@ -294,7 +293,7 @@ SELECT CASE(HTYPE)
     ITABCHAR(20)=IIMASK; ITABCHAR(21)=IJMASK
     ITABCHAR(22)=IKMASK; ITABCHAR(23)=ITMASK
     ITABCHAR(24)=INMASK; ITABCHAR(25)=IPMASK
-    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,ITABCHAR)
+    CALL IO_Field_write(TPDIAFILE,TZFIELD,ITABCHAR)
     DEALLOCATE(ITABCHAR)
 END SELECT
 IF (NVERB>=5) THEN
@@ -313,7 +312,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HTITRE(1:IP))
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HTITRE(1:IP))
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  3rd record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -331,7 +330,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HUNITE(1:IP))
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HUNITE(1:IP))
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  4th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -349,7 +348,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPECHAR
 TZFIELD%NDIMS      = 1
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,HCOMMENT(1:IP))
+CALL IO_Field_write(TPDIAFILE,TZFIELD,HCOMMENT(1:IP))
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  5th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -383,7 +382,7 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 5
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD_BOX(TPDIAFILE,TZFIELD,'BUDGET',PVAR(:,:,:,:,:,J), &
+    CALL IO_Field_write_BOX(TPDIAFILE,TZFIELD,'BUDGET',PVAR(:,:,:,:,:,J), &
                             KIL+JPHEXT,KIH+JPHEXT,KJL+JPHEXT,KJH+JPHEXT)
   ELSE
     TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
@@ -396,7 +395,7 @@ IF (PRESENT(OICP) .AND. PRESENT(OJCP)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 5
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
+    CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
   ENDIF
 ELSE
     TZFIELD%CMNHNAME   = TRIM(HGROUP)//'.PROC'//YJ
@@ -409,7 +408,7 @@ ELSE
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 5
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PVAR(:,:,:,:,:,J))
 END IF
   IF (NVERB>=5) THEN
     WRITE(ILUOUTDIA,*)J,TRIM(TZFIELD%CMNHNAME)
@@ -431,7 +430,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJT)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJT)
 
 IF (NVERB>=5) THEN
   WRITE(ILUOUTDIA,*)'  7th record (',TRIM(TZFIELD%CMNHNAME),'): OK'
@@ -453,7 +452,7 @@ IF(PRESENT(PTRAJX))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJX)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJX)
 ENDIF
 !
 !                        ou
@@ -469,7 +468,7 @@ IF(PRESENT(PMASK))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 6
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PMASK)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PMASK)
 ENDIF
 !
 ! 9eme enregistrement TRAJY
@@ -485,7 +484,7 @@ IF(PRESENT(PTRAJY))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJY)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJY)
 ENDIF
 !
 ! 10eme enregistrement TRAJZ
@@ -501,7 +500,7 @@ IF(PRESENT(PTRAJZ))THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PTRAJZ)
+  CALL IO_Field_write(TPDIAFILE,TZFIELD,PTRAJZ)
 ENDIF
 !
 ! 11eme enregistrement PDATIME
@@ -516,7 +515,7 @@ TZFIELD%NGRID      = KGRID(1)
 TZFIELD%NTYPE      = TYPEREAL
 TZFIELD%NDIMS      = 2
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPDIAFILE,TZFIELD,PDATIME)
+CALL IO_Field_write(TPDIAFILE,TZFIELD,PDATIME)
 !
 CALL MENU_DIACHRO(TPDIAFILE,HGROUP)
 LPACK=GPACK
diff --git a/src/MNH/write_dummy_gr_fieldn.f90 b/src/MNH/write_dummy_gr_fieldn.f90
index 358a73cbc..e177c4e2e 100644
--- a/src/MNH/write_dummy_gr_fieldn.f90
+++ b/src/MNH/write_dummy_gr_fieldn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_DUMMY_GR_FIELD_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
@@ -61,13 +61,13 @@ END MODULE MODI_WRITE_DUMMY_GR_FIELD_n
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_DUMMY_GR_FIELD_n, ONLY : NDUMMY_GR_NBR, CDUMMY_GR_NAME,    &
-                                  CDUMMY_GR_AREA, XDUMMY_GR_FIELDS
-USE MODD_IO_ll,            ONLY : TFILEDATA
-USE MODD_PARAMETERS,       ONLY : NMNHNAMELGTMAX
+USE MODD_DUMMY_GR_FIELD_n, ONLY: NDUMMY_GR_NBR, CDUMMY_GR_NAME,    &
+                                 CDUMMY_GR_AREA, XDUMMY_GR_FIELDS
+USE MODD_IO,               ONLY: TFILEDATA
+USE MODD_PARAMETERS,       ONLY: NMNHNAMELGTMAX
 !
-USE MODE_FIELD,            ONLY : TFIELDDATA,TYPEINT,TYPEREAL
-USE MODE_FMWRIT
+USE MODE_FIELD,            ONLY: TFIELDDATA,TYPEINT,TYPEREAL
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -114,7 +114,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPEINT
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NDUMMY_GR_NBR)
+CALL IO_Field_write(TPFILE,TZFIELD,NDUMMY_GR_NBR)
 !
 DO JDUMMY=1,NDUMMY_GR_NBR
   WRITE(YRECFM,'(A8,I3.3)') 'DUMMY_GR',JDUMMY
@@ -134,7 +134,7 @@ DO JDUMMY=1,NDUMMY_GR_NBR
   !
   ZWORK2D(:,:) = XDUMMY_GR_FIELDS(:,:,JDUMMY)
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
 END DO
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_hgrid.f90 b/src/MNH/write_hgrid.f90
index 9315a86d1..27b0c7d1a 100644
--- a/src/MNH/write_hgrid.f90
+++ b/src/MNH/write_hgrid.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #######################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE WRITE_HGRID(KMI,TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 INTEGER,         INTENT(IN)  :: KMI       ! model index
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE    ! File to write
@@ -58,12 +58,11 @@ END MODULE MODI_WRITE_HGRID
 USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 !
-USE MODE_FMWRIT
-USE MODE_IO_ll
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 !
 USE MODI_WRITE_HGRIDn
@@ -94,20 +93,20 @@ END IF
 !*       2.     WRITING FROM MODD_PGD...
 !	        ----------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',  XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',  XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',  XBETA)
-CALL IO_WRITE_FIELD(TPFILE,'LATORI',XPGDLATOR)
-CALL IO_WRITE_FIELD(TPFILE,'LONORI',XPGDLONOR)
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',  NPGDIMAX)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',  NPGDJMAX)
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',  XPGDXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',  XPGDYHAT)
+CALL IO_Field_write(TPFILE,'LAT0',  XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',  XLON0)
+CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+CALL IO_Field_write(TPFILE,'BETA',  XBETA)
+CALL IO_Field_write(TPFILE,'LATORI',XPGDLATOR)
+CALL IO_Field_write(TPFILE,'LONORI',XPGDLONOR)
+CALL IO_Field_write(TPFILE,'IMAX',  NPGDIMAX)
+CALL IO_Field_write(TPFILE,'JMAX',  NPGDJMAX)
+CALL IO_Field_write(TPFILE,'XHAT',  XPGDXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',  XPGDYHAT)
 !
 IF (CSTORAGE_TYPE=='TT') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-  CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+  CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_hgridn.f90 b/src/MNH/write_hgridn.f90
index 92765f2f7..4e134e365 100644
--- a/src/MNH/write_hgridn.f90
+++ b/src/MNH/write_hgridn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1996-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ########################
@@ -9,7 +9,7 @@
 INTERFACE
       SUBROUTINE WRITE_HGRID_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA), INTENT(IN)  :: TPFILE    ! File to write
 !
@@ -32,8 +32,8 @@ END MODULE MODI_WRITE_HGRIDn
 !!
 !!    EXTERNAL
 !!    --------
-!!      FMWRIT   : to write data in LFIFM file
-!!       
+!!      IO_Field_write   : to write data in LFIFM file
+!!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------ 
 !!      Module MODD_GRID : contains projection definition
@@ -73,9 +73,9 @@ USE MODD_CONF_n
 USE MODD_DIM_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,             ONLY: TFILEDATA
 !
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 IMPLICIT NONE
 !
@@ -89,20 +89,20 @@ TYPE(TFILEDATA), INTENT(IN)  :: TPFILE    ! File to write
 ! NONE
 !-------------------------------------------------------------------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',  XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',  XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',  XBETA)
-CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
-CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',  NIMAX)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',  NJMAX)
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',  XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',  XYHAT)
+CALL IO_Field_write(TPFILE,'LAT0',  XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',  XLON0)
+CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+CALL IO_Field_write(TPFILE,'BETA',  XBETA)
+CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
+CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+CALL IO_Field_write(TPFILE,'IMAX',  NIMAX)
+CALL IO_Field_write(TPFILE,'JMAX',  NJMAX)
+CALL IO_Field_write(TPFILE,'XHAT',  XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',  XYHAT)
 !
 IF (CSTORAGE_TYPE=='TT') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-  CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
+  CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+  CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
 END IF
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 88fc2bf91..5e789e752 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE WRITE_LB_n(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 END SUBROUTINE WRITE_LB_n
@@ -92,7 +92,7 @@ USE MODD_NSV
 USE MODD_PARAM_LIMA
 USE MODD_PARAM_n
 !
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_lb
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -116,7 +116,7 @@ USE MODD_SALT
 USE MODI_DUSTLFI_n
 USE MODI_SALTLFI_n
 USE MODD_PARAMETERS,      ONLY: JPHEXT
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_FIELD, ONLY: TFIELDDATA,TYPELOG,TYPEREAL
 !
 !
@@ -158,32 +158,32 @@ IMI = GET_CURRENT_MODEL_INDEX()
 !        2.  WRITE THE DIMENSION OF LB FIELDS
 !            --------------------------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'RIMX',NRIMX)
-CALL IO_WRITE_FIELD(TPFILE,'RIMY',NRIMY)
+CALL IO_Field_write(TPFILE,'RIMX',NRIMX)
+CALL IO_Field_write(TPFILE,'RIMY',NRIMY)
 !
 !*       3.  BASIC VARIABLES
 !            --------------
 !
-CALL IO_WRITE_FIELD(TPFILE,'HORELAX_UVWTH',LHORELAX_UVWTH)
+CALL IO_Field_write(TPFILE,'HORELAX_UVWTH',LHORELAX_UVWTH)
 !
 !gathering and writing of the LB fields
-IF(NSIZELBXU_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXUM', NSIZELBXU_ll,XLBXUM)
-IF(NSIZELBX_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXVM', NSIZELBX_ll,XLBXVM)
-IF(NSIZELBX_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXWM', NSIZELBX_ll,XLBXWM)
-IF(NSIZELBY_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYUM', NSIZELBY_ll,XLBYUM)
-IF(NSIZELBYV_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYVM', NSIZELBYV_ll,XLBYVM)
-IF(NSIZELBY_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYWM', NSIZELBY_ll,XLBYWM)
-IF(NSIZELBX_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXTHM',NSIZELBX_ll,XLBXTHM)
-IF(NSIZELBY_ll  /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYTHM',NSIZELBY_ll,XLBYTHM)
+IF(NSIZELBXU_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBXUM', NSIZELBXU_ll,XLBXUM)
+IF(NSIZELBX_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBXVM', NSIZELBX_ll,XLBXVM)
+IF(NSIZELBX_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBXWM', NSIZELBX_ll,XLBXWM)
+IF(NSIZELBY_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBYUM', NSIZELBY_ll,XLBYUM)
+IF(NSIZELBYV_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBYVM', NSIZELBYV_ll,XLBYVM)
+IF(NSIZELBY_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBYWM', NSIZELBY_ll,XLBYWM)
+IF(NSIZELBX_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBXTHM',NSIZELBX_ll,XLBXTHM)
+IF(NSIZELBY_ll  /= 0) CALL IO_Field_write_lb(TPFILE,'LBYTHM',NSIZELBY_ll,XLBYTHM)
 !
 !*        4  LB-TKE
 !            ------
 !
 IF(CTURB/='NONE') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'HORELAX_TKE',LHORELAX_TKE)
+  CALL IO_Field_write(TPFILE,'HORELAX_TKE',LHORELAX_TKE)
 !
-  IF(NSIZELBXTKE_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBXTKEM',NSIZELBXTKE_ll,XLBXTKEM)
-  IF(NSIZELBYTKE_ll /= 0) CALL IO_WRITE_FIELD_LB(TPFILE,'LBYTKEM',NSIZELBYTKE_ll,XLBYTKEM)
+  IF(NSIZELBXTKE_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBXTKEM',NSIZELBXTKE_ll,XLBXTKEM)
+  IF(NSIZELBYTKE_ll /= 0) CALL IO_Field_write_lb(TPFILE,'LBYTKEM',NSIZELBYTKE_ll,XLBYTKEM)
 END IF
 !
 !
@@ -207,7 +207,7 @@ IF (NRR >=1) THEN
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,GHORELAX_R)
+  CALL IO_Field_write(TPFILE,TZFIELD,GHORELAX_R)
   !
   GUSER(:)=(/LUSERV,LUSERC,LUSERR,LUSERI,LUSERS,LUSERG,LUSERH/)
   YC(:)=(/"V","C","R","I","S","G","H"/)
@@ -229,7 +229,7 @@ IF (NRR >=1) THEN
         TZFIELD%CLONGNAME  = 'LBXR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBX'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBXR'//YC(JRR)//'M'
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXR_ll,XLBXRM(:,:,:,IRR))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXR_ll,XLBXRM(:,:,:,IRR))
       END IF
       !
       IF(NSIZELBYR_ll /= 0) THEN
@@ -237,7 +237,7 @@ IF (NRR >=1) THEN
         TZFIELD%CLONGNAME  = 'LBYR'//YC(JRR)//'M'
         TZFIELD%CLBTYPE    = 'LBY'
         TZFIELD%CCOMMENT   = '2_Y_Z_LBYR'//YC(JRR)//'M'
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXR_ll,XLBYRM(:,:,:,IRR))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXR_ll,XLBYRM(:,:,:,IRR))
       END IF
     END IF
   END DO
@@ -261,7 +261,7 @@ IF (NSV >=1) THEN
   TZFIELD%NTYPE      = TYPELOG
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,GHORELAX_SV)
+  CALL IO_Field_write(TPFILE,TZFIELD,GHORELAX_SV)
 !
   IRIMX =(NSIZELBXSV_ll-2*JPHEXT)/2
   IRIMY =(NSIZELBYSV_ll-2*JPHEXT)/2
@@ -280,7 +280,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -288,7 +288,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -308,7 +308,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -316,7 +316,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -336,7 +336,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -344,7 +344,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -367,7 +367,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -375,7 +375,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
     !
@@ -386,7 +386,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -394,7 +394,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -416,7 +416,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -424,7 +424,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -469,7 +469,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -477,7 +477,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
     !
@@ -488,7 +488,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
         END IF             
         !
         IF(NSIZELBYSV_ll /= 0) THEN
@@ -496,7 +496,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF             
       END DO      
     END IF  
@@ -516,7 +516,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
     END IF
     !
     IF(NSIZELBYSV_ll /= 0) THEN
@@ -524,7 +524,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
     END IF
   END DO
   !
@@ -534,7 +534,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
     END IF
     !
     IF(NSIZELBYSV_ll /= 0) THEN
@@ -542,7 +542,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
     END IF
   END DO
   !
@@ -552,7 +552,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
     END IF
     !
     IF(NSIZELBYSV_ll /= 0) THEN
@@ -560,7 +560,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
     END IF
   END DO
   !
@@ -623,14 +623,14 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           ENDIF !Check on border points in X direction
           IF(NSIZELBYSV_ll /= 0) THEN
             TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           ENDIF  !Check on points in Y direction
         ENDDO ! Loop on mode
       ELSE  ! valeur IMOMENTS =/ 1
@@ -646,14 +646,14 @@ IF (NSV >=1) THEN
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBX'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
             ENDIF !Check on border points in X direction
             IF(NSIZELBYSV_ll /= 0) THEN
               TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBY'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
             ENDIF  !Check on points in Y direction
           ENDDO ! Loop on moments
         ENDDO    ! Loop on modes
@@ -677,7 +677,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
         END IF             
         !
         IF(NSIZELBYSV_ll /= 0) THEN
@@ -685,7 +685,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF
       END DO
       IF (LDEPOS_DST(IMI)) THEN
@@ -695,7 +695,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           END IF             
           !
           IF(NSIZELBYSV_ll /= 0) THEN
@@ -703,7 +703,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           END IF             
         END DO      
       END IF  
@@ -771,14 +771,14 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           ENDIF !Check on border points in X direction
           IF(NSIZELBYSV_ll /= 0) THEN
             TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           ENDIF  !Check on points in Y direction
         ENDDO ! Loop on mode
       ELSE  ! valeur IMOMENTS =/ 1
@@ -794,14 +794,14 @@ IF (NSV >=1) THEN
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBX'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
             ENDIF !Check on border points in X direction
             IF(NSIZELBYSV_ll /= 0) THEN
               TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
               TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
               TZFIELD%CLBTYPE    = 'LBY'
               WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-              CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
             ENDIF  !Check on points in Y direction
           ENDDO ! Loop on moments
         ENDDO    ! Loop on modes
@@ -823,7 +823,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
         END IF             
         !
         IF(NSIZELBYSV_ll /= 0) THEN
@@ -831,7 +831,7 @@ IF (NSV >=1) THEN
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF            
       END DO
       IF (LDEPOS_SLT(IMI)) THEN
@@ -841,7 +841,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBX'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
           END IF             
           !
           IF(NSIZELBYSV_ll /= 0) THEN
@@ -849,7 +849,7 @@ IF (NSV >=1) THEN
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             TZFIELD%CLBTYPE    = 'LBY'
             WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
           END IF             
         END DO      
       END IF  
@@ -872,7 +872,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
 !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -880,7 +880,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -900,7 +900,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -908,7 +908,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -928,7 +928,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -936,7 +936,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
@@ -957,7 +957,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBX'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
       END IF
       !
       IF(NSIZELBYSV_ll /= 0) THEN
@@ -965,7 +965,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CLBTYPE    = 'LBY'
         WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_WRITE_FIELD_LB(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
       END IF
     END DO
   END IF
diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90
index 628ba7d6f..dc12b57ca 100644
--- a/src/MNH/write_les_budgetn.f90
+++ b/src/MNH/write_les_budgetn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
@@ -58,7 +58,7 @@ END MODULE MODI_WRITE_LES_BUDGET_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_CONF_n
diff --git a/src/MNH/write_les_rt_budgetn.f90 b/src/MNH/write_les_rt_budgetn.f90
index 558f7df3a..92f37d1db 100644
--- a/src/MNH/write_les_rt_budgetn.f90
+++ b/src/MNH/write_les_rt_budgetn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_RT_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
@@ -57,7 +57,7 @@ END MODULE MODI_WRITE_LES_RT_BUDGET_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_LES_BUDGET
diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90
index af1d62eac..10df1eebe 100644
--- a/src/MNH/write_les_sv_budgetn.f90
+++ b/src/MNH/write_les_sv_budgetn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_SV_BUDGET_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG  ! flag to perform the averages
@@ -57,7 +57,7 @@ END MODULE MODI_WRITE_LES_SV_BUDGET_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_CONF_n
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index 260b53bf0..f269d460d 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !######################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE  WRITE_LES_n(TPDIAFILE,HLES_AVG)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE! file to write
 CHARACTER(LEN=1), INTENT(IN) :: HLES_AVG ! flag to perform the averages
@@ -63,7 +63,7 @@ END MODULE MODI_WRITE_LES_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LES
 USE MODD_LES_n
 USE MODD_FIELD_n
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index ab6f980b4..c81ac0f78 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -9,7 +9,7 @@ MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 INTERFACE
       SUBROUTINE WRITE_LFIFM1_FOR_DIAG(TPFILE,HDADFILE)
 !
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),   INTENT(IN) :: TPFILE       ! outpput data file
 CHARACTER(LEN=28), INTENT(IN) :: HDADFILE     ! corresponding FM-file name of 
@@ -152,7 +152,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_GRID
 USE MODD_GRID_n
-USE MODD_IO_ll, ONLY : TFILEDATA
+USE MODD_IO, ONLY : TFILEDATA
 USE MODD_METRICS_n
 USE MODD_TIME
 USE MODD_TIME_n
@@ -230,16 +230,15 @@ USE MODI_FREE_ATM_PROFILE
 USE MODI_GPS_ZENITH
 USE MODI_CONTRAV
 !
-USE MODE_FM,              ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
 USE MODE_GRIDPROJ
 USE MODE_FIELD
-USE MODE_FMWRIT
 USE MODE_GATHER_ll
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
-! USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST
 USE MODE_THERMO
-USE MODE_TOOLS,           ONLY: UPCASE
+USE MODE_TOOLS,            ONLY: UPCASE
 USE MODE_MODELN_HANDLER
 USE MODI_LIDAR
 USE MODI_CLUSTERING
@@ -366,43 +365,43 @@ TZRSFILE => NULL()
 !
 !*       1.0    TPFILE%CNAME and HDADFILE :
 !
-CALL IO_WRITE_FIELD(TPFILE,'MASDEV',   NMASDEV)
-CALL IO_WRITE_FIELD(TPFILE,'BUGFIX',   NBUGFIX)
-CALL IO_WRITE_FIELD(TPFILE,'BIBUSER',  CBIBUSER)
-CALL IO_WRITE_FIELD(TPFILE,'PROGRAM',  CPROGRAM)
+CALL IO_Field_write(TPFILE,'MASDEV',   NMASDEV)
+CALL IO_Field_write(TPFILE,'BUGFIX',   NBUGFIX)
+CALL IO_Field_write(TPFILE,'BIBUSER',  CBIBUSER)
+CALL IO_Field_write(TPFILE,'PROGRAM',  CPROGRAM)
 !
-CALL IO_WRITE_FIELD(TPFILE,'L1D',      L1D)
-CALL IO_WRITE_FIELD(TPFILE,'L2D',      L2D)
-CALL IO_WRITE_FIELD(TPFILE,'PACK',     LPACK)
+CALL IO_Field_write(TPFILE,'L1D',      L1D)
+CALL IO_Field_write(TPFILE,'L2D',      L2D)
+CALL IO_Field_write(TPFILE,'PACK',     LPACK)
 !
-CALL IO_WRITE_FIELD(TPFILE,'MY_NAME',  TPFILE%CNAME)
-CALL IO_WRITE_FIELD(TPFILE,'DAD_NAME', HDADFILE)
+CALL IO_Field_write(TPFILE,'MY_NAME',  TPFILE%CNAME)
+CALL IO_Field_write(TPFILE,'DAD_NAME', HDADFILE)
 !
 IF (LEN_TRIM(HDADFILE)>0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'DXRATIO',NDXRATIO_ALL(1))
-  CALL IO_WRITE_FIELD(TPFILE,'DYRATIO',NDYRATIO_ALL(1))
-  CALL IO_WRITE_FIELD(TPFILE,'XOR',    NXOR_ALL(1))
-  CALL IO_WRITE_FIELD(TPFILE,'YOR',    NYOR_ALL(1))
+  CALL IO_Field_write(TPFILE,'DXRATIO',NDXRATIO_ALL(1))
+  CALL IO_Field_write(TPFILE,'DYRATIO',NDYRATIO_ALL(1))
+  CALL IO_Field_write(TPFILE,'XOR',    NXOR_ALL(1))
+  CALL IO_Field_write(TPFILE,'YOR',    NYOR_ALL(1))
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'SURF',     CSURF)
+CALL IO_Field_write(TPFILE,'SURF',     CSURF)
 !
 !*       1.1    Type and Dimensions :
 !
-CALL IO_WRITE_FIELD(TPFILE,'STORAGE_TYPE','DI')
+CALL IO_Field_write(TPFILE,'STORAGE_TYPE','DI')
 !
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
+CALL IO_Field_write(TPFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_write(TPFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_write(TPFILE,'KMAX',NKMAX)
 !
-CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',JPHEXT)
+CALL IO_Field_write(TPFILE,'JPHEXT',JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-  CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-  CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
+  CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+  CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+  CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
 ! 
 !* diagnostic of 1st mass point
 !
@@ -414,40 +413,40 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
-  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
+  CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
+  CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
 !
 END IF 
 !
-CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
+CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_write(TPFILE,'LAT0',XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',XLON0)
+CALL IO_Field_write(TPFILE,'BETA',XBETA)
 !
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
+CALL IO_Field_write(TPFILE,'XHAT',XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',XYHAT)
+CALL IO_Field_write(TPFILE,'ZHAT',XZHAT)
+CALL IO_Field_write(TPFILE,'ZTOP',XZTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
-CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
+CALL IO_Field_write(TPFILE,'ZS',   XZS)
+CALL IO_Field_write(TPFILE,'ZSMT', XZSMT)
+CALL IO_Field_write(TPFILE,'SLEVE',LSLEVE)
 !
 IF (LSLEVE) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
-  CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
+  CALL IO_Field_write(TPFILE,'LEN1',XLEN1)
+  CALL IO_Field_write(TPFILE,'LEN2',XLEN2)
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
-CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
-CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
-CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
+CALL IO_Field_write(TPFILE,'DTMOD',TDTMOD)
+CALL IO_Field_write(TPFILE,'DTCUR',TDTCUR)
+CALL IO_Field_write(TPFILE,'DTEXP',TDTEXP)
+CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
-CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
 !
 IF (LCARTESIAN .AND. LWIND_ZM) THEN
   LWIND_ZM=.FALSE.
@@ -455,12 +454,12 @@ IF (LCARTESIAN .AND. LWIND_ZM) THEN
 END IF
 !*       1.4    Reference state variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', XEXNTOP)
+CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHODREF',XRHODREF)
-CALL IO_WRITE_FIELD(TPFILE,'THVREF', XTHVREF)
+CALL IO_Field_write(TPFILE,'RHODREF',XRHODREF)
+CALL IO_Field_write(TPFILE,'THVREF', XTHVREF)
 !
 !
 !*       1.5    Variables necessary for plots
@@ -469,11 +468,11 @@ CALL IO_WRITE_FIELD(TPFILE,'THVREF', XTHVREF)
 ! level or constant theta level or constant PV level
 !
 IF (INDEX(CISO,'PR') /= 0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'PABST',XPABST)
+  CALL IO_Field_write(TPFILE,'PABST',XPABST)
 END IF
 !
 IF (INDEX(CISO,'TK') /= 0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'THT',XTHT)
+  CALL IO_Field_write(TPFILE,'THT',XTHT)
 END IF
 !
 ZCORIOZ(:,:,:)=SPREAD( XCORIOZ(:,:),DIM=3,NCOPIES=IKU )
@@ -504,13 +503,13 @@ IF (INDEX(CISO,'EV') /= 0) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPOVO)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZPOVO)
 END IF
 !
 !
 IF (LVAR_RS) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'UT',XUT)
-  CALL IO_WRITE_FIELD(TPFILE,'VT',XVT)
+  CALL IO_Field_write(TPFILE,'UT',XUT)
+  CALL IO_Field_write(TPFILE,'VT',XVT)
   !
   IF (LWIND_ZM) THEN
     TZFIELD2(1)%CMNHNAME   = 'UM_ZM'
@@ -538,20 +537,20 @@ IF (LVAR_RS) THEN
     CALL UV_TO_ZONAL_AND_MERID(XUT,XVT,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2)
   END IF
   !
-  CALL IO_WRITE_FIELD(TPFILE,'WT',XWT)
+  CALL IO_Field_write(TPFILE,'WT',XWT)
   !
   !   write mixing ratio for water vapor required to plot radio-soundings
   !
   IF (LUSERV) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
+    CALL IO_Field_write(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
   END IF
 END IF
 !
 !*   Latitude and Longitude arrays
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT)
-  CALL IO_WRITE_FIELD(TPFILE,'LON',XLON)
+  CALL IO_Field_write(TPFILE,'LAT',XLAT)
+  CALL IO_Field_write(TPFILE,'LON',XLON)
 END IF
 !
 !
@@ -563,15 +562,15 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD)
 !
 IF (LVAR_TURB) THEN
   IF (CTURB /= 'NONE') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'TKET',XTKET)
+    CALL IO_Field_write(TPFILE,'TKET',XTKET)
     !
     IF( NRR > 1 ) THEN
-      CALL IO_WRITE_FIELD(TPFILE,'SRCT',XSRCT)
-      CALL IO_WRITE_FIELD(TPFILE,'SIGS',XSIGS)
+      CALL IO_Field_write(TPFILE,'SRCT',XSRCT)
+      CALL IO_Field_write(TPFILE,'SIGS',XSIGS)
     END IF
     ! 
     IF(CTOM=='TM06') THEN
-      CALL IO_WRITE_FIELD(TPFILE,'BL_DEPTH',XBL_DEPTH)
+      CALL IO_Field_write(TPFILE,'BL_DEPTH',XBL_DEPTH)
     END IF
   END IF
 END IF
@@ -585,15 +584,15 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
   CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRR*3.6E6)
+  CALL IO_Field_write(TPFILE,TZFIELD,XINPRR*3.6E6)
   !
-  CALL IO_WRITE_FIELD(TPFILE,'INPRR3D',XINPRR3D)
-  CALL IO_WRITE_FIELD(TPFILE,'EVAP3D', XEVAP3D)
+  CALL IO_Field_write(TPFILE,'INPRR3D',XINPRR3D)
+  CALL IO_Field_write(TPFILE,'EVAP3D', XEVAP3D)
   !
   CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRR*1.0E3)
+  CALL IO_Field_write(TPFILE,TZFIELD,XACPRR*1.0E3)
   !
   IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C2R2' .OR. CCLOUD == 'C3R5' .OR.&
       CCLOUD == 'KHKO' .OR. CCLOUD == 'LIMA') THEN 
@@ -601,56 +600,56 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm hour-1'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRC*3.6E6)
+      CALL IO_Field_write(TPFILE,TZFIELD,XINPRC*3.6E6)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRC*1.0E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XACPRC*1.0E3)
     END IF 
     IF (SIZE(XINDEP) /= 0 ) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm hour-1'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINDEP*3.6E6)
+      CALL IO_Field_write(TPFILE,TZFIELD,XINDEP*3.6E6)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACDEP*1.0E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XACDEP*1.0E3)
     END IF 
   END IF 
   IF (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'C3R5' .OR. CCLOUD == 'LIMA') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRS*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRS*3.6E6)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRS*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRS*1.0E3)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRG*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRG*3.6E6)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRG*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRG*1.0E3)
   !
     IF (SIZE(XINPRH) /= 0 ) THEN
       CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm hour-1'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRH*3.6E6)
+      CALL IO_Field_write(TPFILE,TZFIELD,XINPRH*3.6E6)
       !
       CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP)
       TZFIELD = TFIELDLIST(IID)
       TZFIELD%CUNITS = 'mm'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRH*1.0E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XACPRH*1.0E3)
     ENDIF
   !
     ZWORK21(:,:) = XINPRR(:,:) + XINPRS(:,:) + XINPRG(:,:)
@@ -661,7 +660,7 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21*3.6E6)
   !
     ZWORK21(:,:) = (XACPRR(:,:) + XACPRS(:,:) + XACPRG(:,:))*1.0E3
     IF (SIZE(XINPRC) /= 0 ) &      
@@ -672,7 +671,7 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21*1.0E3)
   !
   END IF
   !
@@ -682,17 +681,17 @@ IF (LVAR_PR .AND. LUSERR .AND. SIZE(XINPRR)>0 ) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRCONV*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XPRCONV*3.6E6)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPACCONV*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XPACCONV*1.0E3)
     !
     CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRSCONV*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XPRSCONV*3.6E6)
   END IF
 END IF
 IF (LVAR_PR ) THEN
@@ -730,7 +729,7 @@ IF (LVAR_PR ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
 ENDIF
 !
 !
@@ -809,7 +808,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   !  
   TZFIELD%CMNHNAME   = 'VM90'
   TZFIELD%CSTDNAME   = ''
@@ -821,7 +820,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
   !  composantes U et V du flux d'humidité intégré sur 3000 metres
   TZFIELD%CMNHNAME   = 'UM91'
   TZFIELD%CSTDNAME   = ''
@@ -833,7 +832,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   !
   TZFIELD%CMNHNAME   = 'VM91'
   TZFIELD%CSTDNAME   = ''
@@ -845,7 +844,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
   !   Convergence d'humidité
   TZFIELD%CMNHNAME   = 'HMCONV'
@@ -858,7 +857,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK35)
+  CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK35)
   !
   !   Convergence d'humidité intégré sur 3000 mètres
   TZFIELD%CMNHNAME   = 'HMCONV3000'
@@ -871,7 +870,7 @@ IF (LHU_FLX) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK25)
+  CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK25)
   !
   IF  (CCLOUD(1:3) == 'ICE' .OR. CCLOUD == 'LIMA') THEN
     !  composantes U et V du flux surfacique d'hydrométéores  
@@ -885,7 +884,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     ! 
     TZFIELD%CMNHNAME   = 'VM92'
     TZFIELD%CSTDNAME   = ''
@@ -897,7 +896,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
     !  composantes U et V du flux d'hydrométéores intégré sur 3000 metres
     TZFIELD%CMNHNAME   = 'UM93'
     TZFIELD%CSTDNAME   = ''
@@ -909,7 +908,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK23)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK23)
     ! 
     TZFIELD%CMNHNAME   = 'VM93'
     TZFIELD%CSTDNAME   = ''
@@ -921,7 +920,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK24)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK24)
     !   Convergence d'hydrométéores
     TZFIELD%CMNHNAME   = 'HMCONV_TT'
     TZFIELD%CSTDNAME   = ''
@@ -933,7 +932,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK36)
+    CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK36)
     !   Convergence d'hydrométéores intégré sur 3000 mètres
     TZFIELD%CMNHNAME   = 'HMCONV3000_TT'
     TZFIELD%CSTDNAME   = ''
@@ -945,7 +944,7 @@ IF (LHU_FLX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,-ZWORK26)
+    CALL IO_Field_write(TPFILE,TZFIELD,-ZWORK26)
   ENDIF
 ENDIF
 !
@@ -965,43 +964,43 @@ IF (LVAR_MRW .OR. LLIMA_DIAG) THEN
       TZFIELD%CLONGNAME  = 'MRV'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRV'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RVT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RVT)*1.E3)
     END IF
     IF (LUSERC) THEN
       TZFIELD%CMNHNAME   = 'MRC'
       TZFIELD%CLONGNAME  = 'MRC'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRC'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*1.E3)
 !
       TZFIELD%CMNHNAME   = 'VRC'
       TZFIELD%CLONGNAME  = 'VRC'
       TZFIELD%CUNITS     = '1' !vol/vol
       TZFIELD%CCOMMENT   = 'X_Y_Z_VRC (vol/vol)'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*XRHODREF(:,:,:)/1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*XRHODREF(:,:,:)/1.E3)
     END IF
     IF (LUSERR) THEN
       TZFIELD%CMNHNAME   = 'MRR'
       TZFIELD%CLONGNAME  = 'MRR'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRR'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*1.E3)
 !
       TZFIELD%CMNHNAME   = 'VRR'
       TZFIELD%CLONGNAME  = 'VRR'
       TZFIELD%CUNITS     = '1' !vol/vol
       TZFIELD%CCOMMENT   = 'X_Y_Z_VRR (vol/vol)'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*XRHODREF(:,:,:)/1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*XRHODREF(:,:,:)/1.E3)
     END IF
     IF (LUSERI) THEN
       TZFIELD%CMNHNAME   = 'MRI'
       TZFIELD%CLONGNAME  = 'MRI'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRI'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RIT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RIT)*1.E3)
 !
       IF (LUSECI) THEN
-        CALL IO_WRITE_FIELD(TPFILE,'CIT',XCIT(:,:,:))
+        CALL IO_Field_write(TPFILE,'CIT',XCIT(:,:,:))
       END IF
     END IF
     IF (LUSERS) THEN
@@ -1009,21 +1008,21 @@ IF (LVAR_MRW .OR. LLIMA_DIAG) THEN
       TZFIELD%CLONGNAME  = 'MRS'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRS'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RST)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RST)*1.E3)
     END IF
     IF (LUSERG) THEN
       TZFIELD%CMNHNAME   = 'MRG'
       TZFIELD%CLONGNAME  = 'MRG'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRG'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RGT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RGT)*1.E3)
     END IF
     IF (LUSERH) THEN
       TZFIELD%CMNHNAME   = 'MRH'
       TZFIELD%CLONGNAME  = 'MRH'
       TZFIELD%CUNITS     = 'g kg-1'
       TZFIELD%CCOMMENT   = 'X_Y_Z_MRH'
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRT(:,:,:,IDX_RHT)*1.E3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RHT)*1.E3)
     END IF
   END IF
 END IF
@@ -1045,7 +1044,7 @@ IF (LVAR_MRSV) THEN
     WRITE(TZFIELD%CMNHNAME,'(A4,I3.3)')'MRSV',JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E3)
   END DO
 END IF
 ! microphysical C2R2 scheme scalar variables
@@ -1069,7 +1068,7 @@ IF(LVAR_MRW) THEN
         ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-3
       END IF
       WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     END DO
   END IF
   ! microphysical C3R5 scheme additional scalar variables
@@ -1086,7 +1085,7 @@ IF(LVAR_MRW) THEN
       TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E-3)
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E-3)
     END DO
   END IF
 END IF
@@ -1159,7 +1158,7 @@ IF (LLIMA_DIAG) THEN
     !
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-6*XRHODREF(:,:,:)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !
   IF (LUSERC) THEN
@@ -1174,7 +1173,7 @@ IF (LLIMA_DIAG) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK31(:,:,:)=XRT(:,:,:,2)*1.E3*XRHODREF(:,:,:)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 !
   IF (LUSERI) THEN
@@ -1189,7 +1188,7 @@ IF (LLIMA_DIAG) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK31(:,:,:)=XRT(:,:,:,4)*1.E3*XRHODREF(:,:,:)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 !
 END IF
@@ -1207,7 +1206,7 @@ IF (LCHEMDIAG) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
 END IF
 IF (LCHAQDIAG) THEN    !aqueous concentration in M
@@ -1228,7 +1227,7 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
     WHERE(((XRT(:,:,:,2)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
       ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,2))
     ENDWHERE
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
   !
   ZWORK31(:,:,:)=0.
@@ -1239,7 +1238,7 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
     WHERE(((XRT(:,:,:,3)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
       ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,3))
     ENDWHERE
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !  ZWORK31(:,:,:)=0.
 !  DO JSV = NSV_CHICBEG,NSV_CHICEND   ! ice phase
@@ -1249,7 +1248,7 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
 !    WHERE(((XRT(:,:,:,3)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
 !      ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,3))
 !    ENDWHERE
-!    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+!    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !  END DO
 END IF
 
@@ -1279,7 +1278,7 @@ IF (LPASPOL) THEN
     WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'PPT',JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTMP)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTMP)
   END DO
   DEALLOCATE(ZTMP)
   DEALLOCATE(ZRHOT)
@@ -1298,7 +1297,7 @@ IF (LCONDSAMP) THEN
     WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'CST',JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
   END DO
 END IF
 !
@@ -1315,7 +1314,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
   !
   ZWORK21(:,:) = 0.
   DO JK = IKB,IKE
@@ -1334,7 +1333,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21(:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
   !
   IF(.NOT.ALLOCATED(ZBET_SNW)) &
         ALLOCATE(ZBET_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3)))
@@ -1356,7 +1355,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_SNW(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SNW(:,:,:))
   !
   TZFIELD%CMNHNAME   = 'SNWBETA'
   TZFIELD%CSTDNAME   = ''
@@ -1368,7 +1367,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZBET_SNW(:,:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZBET_SNW(:,:,:))
   !
   TZFIELD%CMNHNAME   = 'SNWNOA'
   TZFIELD%CSTDNAME   = ''
@@ -1380,7 +1379,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1))
   !
   TZFIELD%CMNHNAME   = 'SNWMASS'
   TZFIELD%CSTDNAME   = ''
@@ -1392,7 +1391,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2))
   !
   ZWORK21(:,:) = 0.
   DO JK = IKB,IKE
@@ -1410,7 +1409,7 @@ IF(LBLOWSNOW) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21(:,:))
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
 END IF
 ! Lagrangian variables
 IF (LTRAJ) THEN
@@ -1427,7 +1426,7 @@ IF (LTRAJ) THEN
     TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A20,I3.3,A4)')'X_Y_Z_','Lagrangian variable ',JSV,' (M)'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
   END DO
   ! X coordinate
   DO JK=1,IKU
@@ -1441,7 +1440,7 @@ IF (LTRAJ) THEN
   TZFIELD%CMNHNAME   = 'X'
   TZFIELD%CLONGNAME  = 'X'
   TZFIELD%CCOMMENT   = 'X_Y_Z_X coordinate'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   ! Y coordinate
   DO JK=1,IKU
     DO JI=1,IIU
@@ -1454,7 +1453,7 @@ IF (LTRAJ) THEN
   TZFIELD%CMNHNAME   = 'Y'
   TZFIELD%CLONGNAME  = 'Y'
   TZFIELD%CCOMMENT   = 'X_Y_Z_Y coordinate'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 END IF
 ! linox scalar variables
 IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) THEN
@@ -1469,7 +1468,7 @@ IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
 END IF
 IF (LELECDIAG .AND. CELEC .NE. "NONE") THEN
@@ -1491,7 +1490,7 @@ IF (LELECDIAG .AND. CELEC .NE. "NONE") THEN
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
     END IF
     ZWORK31(:,:,:)=XSVT(:,:,:,JSV) * XRHODREF(:,:,:)  ! C/kg --> C/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 END IF
 ! Sea Salt variables
@@ -1515,7 +1514,7 @@ IF (LSALT) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','SALT',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
   CALL PPP2SALT(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND),XRHODREF,&
@@ -1533,26 +1532,26 @@ IF (LSALT) THEN
     TZFIELD%CLONGNAME  = 'SLTRGA'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) SALT MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_SLT(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SLT(:,:,:,JJ))
     !
     TZFIELD%CMNHNAME   = 'SLTRGAM'
     TZFIELD%CLONGNAME  = 'SLTRGAM'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) SALT MODE ',JJ
     ZWORK31(:,:,:)=ZRG_SLT(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_SLT(:,:,:,JJ)))**2))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm-3'
     WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 SALT MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZN0_SLT(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_SLT(:,:,:,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTSIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA SALT MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSIG_SLT(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_SLT(:,:,:,JJ))
     !SALT MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SLTMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1561,7 +1560,7 @@ IF (LSALT) THEN
     ZWORK31(:,:,:)= ZN0_SLT(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
        * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18 &  !um-->m
        * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !SALT BURDEN (g/m2)
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -1580,7 +1579,7 @@ IF (LSALT) THEN
     TZFIELD%CUNITS     = 'g m-2'
     WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
     TZFIELD%NDIMS      = 2
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
     !
     TZFIELD%NDIMS      = 3
   ENDDO
@@ -1601,7 +1600,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CDESLTNAMES(JSV)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','SALTDEP',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSSLTDEP(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSSLTDEP(:,:,:,JSV)*1.E9)
   END DO
   !
   DO JJ=1,NMODE_SLT
@@ -1631,7 +1630,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
                     * XAVOGADRO       & !==>#/mole
                     / XMD             & !==>#/kg_{air}
                     * XRHODREF(:,:,:)   !==>#/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! CLOUD:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1640,7 +1639,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
                     * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
                     * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !   FOR RAIN DROPS
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPN0A',JJ+NMODE_SLT
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1667,7 +1666,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
                     * XAVOGADRO       & !==>#/mole
                     / XMD             & !==>#/kg_{air}
                     * XRHODREF(:,:,:)   !==>#/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! RAIN:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ+NMODE_SLT
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1676,7 +1675,7 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
                     * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
                     * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !
 END IF
@@ -1701,7 +1700,7 @@ IF (LDUST) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUST',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
   CALL PPP2DUST(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND),XRHODREF,&
@@ -1711,26 +1710,26 @@ IF (LDUST) THEN
     TZFIELD%CLONGNAME  = 'DSTRGA'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) DUST MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZRG_DST(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_DST(:,:,:,JJ))
     !
     TZFIELD%CMNHNAME   = 'DSTRGAM'
     TZFIELD%CLONGNAME  = 'DSTRGAM'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) DUST MODE ',JJ
     ZWORK31(:,:,:)=ZRG_DST(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_DST(:,:,:,JJ)))**2))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm-3'
     WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 DUST MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZN0_DST(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_DST(:,:,:,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTSIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA DUST MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSIG_DST(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_DST(:,:,:,JJ))
     !DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'DSTMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1739,7 +1738,7 @@ IF (LDUST) THEN
     ZWORK31(:,:,:)= ZN0_DST(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
        * (ZRG_DST(:,:,:,JJ)**3)*1.d-18 &  !um-->m
        * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !DUST BURDEN (g/m2)
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -1758,7 +1757,7 @@ IF (LDUST) THEN
     TZFIELD%CUNITS     = 'g m-2'
     WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
     TZFIELD%NDIMS      = 2
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
     !
     TZFIELD%NDIMS      = 3
   ENDDO
@@ -1779,7 +1778,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CDEDSTNAMES(JSV)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUSTDEP',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSDSTDEP(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSDSTDEP(:,:,:,JSV)*1.E9)
   END DO
   !
   DO JJ=1,NMODE_DST
@@ -1809,7 +1808,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
                     * XAVOGADRO                     & !==>#/mole
                     / XMD                           & !==>#/kg_{air}
                     * XRHODREF(:,:,:)                 !==>#/m3  
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! CLOUD:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1818,7 +1817,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
           * (ZRG_DST(:,:,:,JJ)**3)*1.d-18               &  !um-->m
           * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !   FOR RAIN DROPS
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPN0A',JJ+NMODE_DST
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1845,7 +1844,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
                     * XAVOGADRO       & !==>#/mole
                     / XMD             & !==>#/kg_{air}
                     * XRHODREF(:,:,:)   !==>#/m3
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! RAIN:   DUST MASS CONCENTRATION
     WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ+NMODE_DST
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
@@ -1854,7 +1853,7 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
                     * (ZRG_DST(:,:,:,JJ)**3)*1.d-18     &  !um-->m
                     * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
 !
 END IF
@@ -1872,7 +1871,7 @@ IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
     TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','AERO',JSV
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
   IF (.NOT.(ASSOCIATED(XN3D)))   &
@@ -1889,132 +1888,132 @@ IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
     TZFIELD%CLONGNAME  = 'RGA'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'RG (nb) AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRG3D(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRG3D(:,:,:,JJ))
     !
     TZFIELD%CMNHNAME   = 'RGAM'
     TZFIELD%CLONGNAME  = 'RGAM'
     TZFIELD%CUNITS     = 'um'
     WRITE(TZFIELD%CCOMMENT,'(A20,I1)')'RG (m) AEROSOL MODE ',JJ
     ZWORK31(:,:,:)=XRG3D(:,:,:,JJ) / (EXP(-3.*(LOG(XSIG3D(:,:,:,JJ)))**2))
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'N0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'cm-3'
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XN3D(:,:,:,JJ)*1.E-6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XN3D(:,:,:,JJ)*1.E-6)
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
     WRITE(TZFIELD%CCOMMENT,'(A19,I1)')'SIGMA AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSIG3D(:,:,:,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSIG3D(:,:,:,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MSO4',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS SO4 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SO4,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SO4,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNO3',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NO3 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NO3,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NO3,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNH3',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NH3 AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NH3,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NH3,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MH2O',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS H2O AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_H2O,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_H2O,JJ))
     !
     IF (NSOA .EQ. 10) THEN
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA1',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA1 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA1,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA1,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA2',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA2 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA2,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA2,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA3',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA3 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA3,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA3,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA4',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA4 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA4,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA4,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA5',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA5 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA5,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA5,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA6',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA6 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA6,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA6,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA7',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA7 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA7,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA7,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA8',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA8 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA8,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA8,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA9',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA9 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA9,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA9,JJ))
       !
       WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'MSOA10',JJ
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ug m-3'
       WRITE(TZFIELD%CCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JJ
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA10,JJ))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA10,JJ))
     END IF
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MOC',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS OC AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_OC,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_OC,JJ))
     !
     WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MBC',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS BC AEROSOL MODE ',JJ
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_BC,JJ))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_BC,JJ))
   ENDDO
 END IF
 !
 !* Large Scale variables
 !
 IF (LVAR_LS) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LSUM', XLSUM)
-  CALL IO_WRITE_FIELD(TPFILE,'LSVM', XLSVM)
+  CALL IO_Field_write(TPFILE,'LSUM', XLSUM)
+  CALL IO_Field_write(TPFILE,'LSVM', XLSVM)
   !
   IF (LWIND_ZM) THEN
     TZFIELD2(1)%CMNHNAME   = 'LSUM_ZM'
@@ -2042,14 +2041,14 @@ IF (LVAR_LS) THEN
     CALL UV_TO_ZONAL_AND_MERID(XLSUM,XLSVM,23,TPFILE=TPFILE,TZFIELDS=TZFIELD2)
   ENDIF
   !
-  CALL IO_WRITE_FIELD(TPFILE,'LSWM', XLSWM)
-  CALL IO_WRITE_FIELD(TPFILE,'LSTHM',XLSTHM)
+  CALL IO_Field_write(TPFILE,'LSWM', XLSWM)
+  CALL IO_Field_write(TPFILE,'LSTHM',XLSTHM)
 !
   IF (LUSERV) THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('LSRVM',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'g kg-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XLSRVM(:,:,:)*1.E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XLSRVM(:,:,:)*1.E3)
   END IF
 END IF
 !
@@ -2070,7 +2069,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XUFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'VFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2082,7 +2081,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'WFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2094,7 +2093,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XWFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'THFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2106,7 +2105,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2118,7 +2117,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2130,7 +2129,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2142,7 +2141,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2154,7 +2153,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGXTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGXTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2166,7 +2165,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGYTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGYTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2178,7 +2177,7 @@ IF (LVAR_FRC .AND. LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPGROUNDFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XPGROUNDFRC(JT))
 !
   END DO
 END IF
@@ -2201,17 +2200,17 @@ IF (LTPZH .OR. LCOREF) THEN
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
   ZWORK31(:,:,:)=ZTEMP(:,:,:) - XTT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
 !* Pressure in hPa        
   CALL FIND_FIELD_ID_FROM_MNHNAME('PABST',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CMNHNAME   = 'PRES'
   TZFIELD%CUNITS = 'hPa'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPABST(:,:,:)*1E-2)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPABST(:,:,:)*1E-2)
 !
 !* Geopotential in meters
-  CALL IO_WRITE_FIELD(TPFILE,'ALT',XZZ)
+  CALL IO_Field_write(TPFILE,'ALT',XZZ)
 !
 !* Relative humidity in percent
   IF (LUSERV) THEN
@@ -2239,7 +2238,7 @@ IF (LTPZH .OR. LCOREF) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     TZFIELD%CMNHNAME   = 'VPRES'
     TZFIELD%CSTDNAME   = 'water_vapor_partial_pressure_in_air'
@@ -2252,7 +2251,7 @@ IF (LTPZH .OR. LCOREF) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK33(:,:,:)=ZWORK33(:,:,:)*ZWORK32(:,:,:)*1E-4
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     !
     IF (LCOREF) THEN
       ZWORK33(:,:,:)=(77.6*( XPABST(:,:,:)*1E-2                &
@@ -2268,7 +2267,7 @@ IF (LTPZH .OR. LCOREF) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
       !
       ZWORK33(:,:,:)=ZWORK33(:,:,:)+MZF(1,IKU,1,XZZ(:,:,:))*1E6/XRADIUS
       TZFIELD%CMNHNAME   = 'MCOREF'
@@ -2281,7 +2280,7 @@ IF (LTPZH .OR. LCOREF) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     END IF
   ELSE
     PRINT*, 'NO WATER VAPOR IN ',TPFILE%CNAME,' RELATIVE HUMIDITY IS NOT COMPUTED'
@@ -2322,7 +2321,7 @@ IF ( LMOIST_V .OR. LMSLP .OR. CBLTOP/='NONE' ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAV)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAV)
   END IF
 !
 END IF
@@ -2355,7 +2354,7 @@ IF (LVISI) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVISIKUN)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZVISIKUN)
 !
     IF ((CCLOUD == 'C2R2') .OR. (CCLOUD =='KHKO')) THEN
       ZVISIGUL(:,:,:) = 10000.
@@ -2375,7 +2374,7 @@ IF (LVISI) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVISIGUL)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZVISIGUL)
 ! Visibity Zhang                      
       TZFIELD%CMNHNAME   = 'VISIZHA'
       TZFIELD%CSTDNAME   = ''
@@ -2387,7 +2386,7 @@ IF (LVISI) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZVISIZHA)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZVISIZHA)
 !
       DEALLOCATE(ZVISIGUL,ZVISIZHA)
     END IF
@@ -2422,7 +2421,7 @@ IF (( LMOIST_E .OR. LBV_FR ) .AND. (NRR>0)) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAE)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAE)
   END IF
 END IF
 !-------------------------------------------------------------------------------
@@ -2448,7 +2447,7 @@ IF (LMOIST_ES .AND. (NRR>0)) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAES)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAES)
 ENDIF
 !
 !-------------------------------------------------------------------------------
@@ -2499,7 +2498,7 @@ IF ( LMOIST_L .OR. LMOIST_S1 .OR. LMOIST_S2 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAL)
   END IF
 !
 END IF
@@ -2554,7 +2553,7 @@ IF ( LMOIST_S1 .OR. LMOIST_S2 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAS1)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAS1)
   END IF
   IF (LMOIST_S2) THEN
 ! The Moist-air Entropy potential temperature (2nd order)
@@ -2568,7 +2567,7 @@ IF ( LMOIST_S1 .OR. LMOIST_S2 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZTHETAS2)  
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTHETAS2)  
   END IF
 !
 END IF
@@ -2591,7 +2590,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !    
 ! Vorticity y
   ZWORK32(:,:,:)=MZF(1,IKU,1,MXF(MYM(ZVOY(:,:,:))))
@@ -2605,7 +2604,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
   !
   IF (LWIND_ZM) THEN
     TZFIELD2(1)%CMNHNAME   = 'UM1_ZM'
@@ -2645,7 +2644,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
 ! Absolute Vorticity 
   ZWORK31(:,:,:)=MYF(MXF(ZVOZ(:,:,:))) + ZCORIOZ(:,:,:)
@@ -2659,7 +2658,7 @@ IF (LVORT) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
 END IF
 !    
@@ -2691,7 +2690,7 @@ IF ( LMEAN_POVO ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 END IF
 !
 ! Virtual Potential Vorticity in PV units
@@ -2713,7 +2712,7 @@ IF (LMOIST_V .AND. (NRR>0) ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 !
   IF (LMEAN_POVO) THEN
     IWORK1(:,:)=0
@@ -2735,7 +2734,7 @@ IF (LMOIST_V .AND. (NRR>0) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
 END IF
 !
@@ -2759,7 +2758,7 @@ IF (LMOIST_E .AND. (NRR>0) ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 !
   IF (LMEAN_POVO) THEN
     IWORK1(:,:)=0
@@ -2781,7 +2780,7 @@ IF (LMOIST_E .AND. (NRR>0) ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
     DEALLOCATE(IWORK1)
   END IF 
   !
@@ -2806,7 +2805,7 @@ IF (LMOIST_ES .AND. (NRR>0) ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 ENDIF
 !
 !
@@ -2827,7 +2826,7 @@ IF (LDIV) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   IF (LUSERV) THEN
     TZFIELD%CMNHNAME   = 'HMDIV'
@@ -2843,7 +2842,7 @@ IF (LDIV) THEN
     ZWORK31=MXM(XRHODREF*XRT(:,:,:,1))*XUT
     ZWORK32=MYM(XRHODREF*XRT(:,:,:,1))*XVT
     ZWORK33=GX_U_M(1,IKU,1,ZWORK31,XDXX,XDZZ,XDZX) + GY_V_M(1,IKU,1,ZWORK32,XDYY,XDZZ,XDZY)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
   END IF
 !
 ENDIF
@@ -2875,7 +2874,7 @@ IF (LCLSTR) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICLUSTERID)
+  CALL IO_Field_write(TPFILE,TZFIELD,ICLUSTERID)
   !
   TZFIELD%CMNHNAME   = 'CLUSTERLV'
   TZFIELD%CSTDNAME   = ''
@@ -2887,7 +2886,7 @@ IF (LCLSTR) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICLUSTERLV)
+  CALL IO_Field_write(TPFILE,TZFIELD,ICLUSTERLV)
   !
   TZFIELD%CMNHNAME   = 'CLDSIZE'
   TZFIELD%CSTDNAME   = ''
@@ -2899,7 +2898,7 @@ IF (LCLSTR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZCLDSIZE)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZCLDSIZE)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -2952,7 +2951,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 ! 
     TZFIELD%CMNHNAME   = 'VM88'
     TZFIELD%CSTDNAME   = ''
@@ -2964,7 +2963,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     IF (LWIND_ZM) THEN
       TZFIELD2(1)%CMNHNAME   = 'UM88_ZM'
@@ -2997,7 +2996,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME  = 'WM88'
     TZFIELD%CLONGNAME = 'WM88'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWT)
+    CALL IO_Field_write(TPFILE,TZFIELD,XWT)
   END IF
 !
   IF (LAGEO) THEN
@@ -3014,7 +3013,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
     TZFIELD%CMNHNAME   = 'VM89'
     TZFIELD%CSTDNAME   = ''
@@ -3026,7 +3025,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     IF (LWIND_ZM) THEN
       TZFIELD2(1)%CMNHNAME   = 'UM89_ZM'
@@ -3059,7 +3058,7 @@ IF (LGEO .OR. LAGEO) THEN
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CMNHNAME  = 'WM89'
     TZFIELD%CLONGNAME = 'WM89'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWT)
+    CALL IO_Field_write(TPFILE,TZFIELD,XWT)
   END IF
 !
 END IF
@@ -3083,7 +3082,7 @@ IF(LWIND_CONTRAV) THEN!$
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -3116,7 +3115,7 @@ IF (LMSLP) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -3141,7 +3140,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:) = 0.
@@ -3161,7 +3160,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:) = 0.
@@ -3181,7 +3180,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3201,7 +3200,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3221,7 +3220,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3241,7 +3240,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   ZWORK21(:,:)   = 0.
@@ -3261,7 +3260,7 @@ IF (LTHW) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
 END IF
 !
@@ -3302,7 +3301,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   ELSE
     PRINT * ,'YOU WANT TO COMPUTE THE ACCUMULATED RAIN'
     PRINT * ,'BUT NO RAIN IS PRESENT IN THE MODEL' 
@@ -3328,7 +3327,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
         JJ=INT(XMEAN_PR(JK+1))
         WRITE(TZFIELD%CMNHNAME,'(A9,2I2.2)')'LS_ACTOPR',JI,JJ
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+        CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
       END IF
     END DO
     !
@@ -3367,7 +3366,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   ELSE
     PRINT * ,'YOU WANT TO COMPUTE THE RAIN RATE'
     PRINT * ,'BUT NO RAIN IS PRESENT IN THE MODEL' 
@@ -3387,7 +3386,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   END IF
 !
 END IF
@@ -3416,7 +3415,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   !
   TZFIELD%CMNHNAME   = 'CINMAX'
   TZFIELD%CSTDNAME   = ''
@@ -3428,7 +3427,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
   IF (NCAPE >=1) THEN
     TZFIELD%CMNHNAME   = 'CAPE3D'
@@ -3441,7 +3440,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
     !
     TZFIELD%CMNHNAME   = 'CIN3D'
     TZFIELD%CSTDNAME   = 'atmosphere_convective_inhibition'
@@ -3453,7 +3452,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
     !
     TZFIELD%CMNHNAME   = 'DCAPE3D'
     TZFIELD%CSTDNAME   = ''
@@ -3465,7 +3464,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
   END IF
   !
   IF (NCAPE >=2) THEN
@@ -3483,7 +3482,7 @@ IF (NCAPE >=0 .AND. LUSERV) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 ENDIF
 !
@@ -3515,7 +3514,7 @@ IF (LBV_FR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !  
   IF (NRR > 0) THEN
     ZWORK32(:,:,:)=DZM(1,IKU,1,ZTHETAE(:,:,:))/ MZM(1,IKU,1,ZTHETAE(:,:,:))
@@ -3541,7 +3540,7 @@ IF (LBV_FR) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 END IF
 !
@@ -3569,7 +3568,7 @@ IF ( NGPS>=0 ) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
   !
   IF (NGPS>=1) THEN
     TZFIELD%CMNHNAME   = 'ZHD'
@@ -3582,7 +3581,7 @@ IF ( NGPS>=0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK23)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK23)
     !
     TZFIELD%CMNHNAME   = 'ZWD'
     TZFIELD%CSTDNAME   = ''
@@ -3594,7 +3593,7 @@ IF ( NGPS>=0 ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK24)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK24)
     !
   END IF
   !
@@ -3639,7 +3638,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   TZFIELD%CMNHNAME   = 'VDOP'
   TZFIELD%CSTDNAME   = ''
@@ -3651,7 +3650,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
 !
   TZFIELD%CMNHNAME   = 'ZDR'
   TZFIELD%CSTDNAME   = ''
@@ -3663,7 +3662,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK33)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK33)
 !
   TZFIELD%CMNHNAME   = 'KDP'
   TZFIELD%CSTDNAME   = ''
@@ -3675,7 +3674,7 @@ IF(LRADAR .AND. LUSERR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK34)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK34)
 !
    ELSE 
     !
@@ -3832,8 +3831,8 @@ IF(LRADAR .AND. LUSERR) THEN
           WRITE(YGRID_SIZE,'(I3.3)') 2*NMAX
           DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
             YRS=YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//YGRID_SIZE//TRIM(TPFILE%CNAME)
-            CALL IO_FILE_ADD2LIST(TZRSFILE,YRS,'TXT','WRITE',KRECL=8192)
-            CALL IO_FILE_OPEN_ll(TZRSFILE,HSTATUS='NEW')
+            CALL IO_File_add2list(TZRSFILE,YRS,'TXT','WRITE',KRECL=8192)
+            CALL IO_File_open(TZRSFILE,HSTATUS='NEW')
             ILURS = TZRSFILE%NLU
             WRITE(ILURS,'(A,4F12.6,2I5)') '**domaine LATLON ',ZWORK43(JI,1,1),ZWORK43(JI,4*NMAX-1,2*NMAX), &
                   ZWORK43(JI,2,1),ZWORK43(JI,4*NMAX,2*NMAX),2*NMAX,2*NMAX !! HEADER
@@ -3847,7 +3846,7 @@ IF(LRADAR .AND. LUSERR) THEN
             DO JV=2*NMAX,1,-1
               WRITE(ILURS,*) CLATLON(JV)
             END DO                  
-            CALL IO_FILE_CLOSE_ll(TZRSFILE)
+            CALL IO_File_close(TZRSFILE)
             TZRSFILE => NULL()
           END DO               
         END DO
@@ -3862,15 +3861,15 @@ IF(LRADAR .AND. LUSERR) THEN
                 INT(ANINT(10.*XELEV(JI,JEL))-10*INT(XELEV(JI,JEL)))
           DO JJ=1,SIZE(ZWORK42(:,:,:,:,:),5)
             YRS="P"//YRAD(JJ)//CNAME_RAD(JI)(1:3)//YELEV//TRIM(TPFILE%CNAME)
-            CALL IO_FILE_ADD2LIST(TZRSFILE,YRS,'TXT','WRITE')
-            CALL IO_FILE_OPEN_ll(TZRSFILE)
+            CALL IO_File_add2list(TZRSFILE,YRS,'TXT','WRITE')
+            CALL IO_File_open(TZRSFILE)
             ILURS = TZRSFILE%NLU
             DO JH=1,NBAZIM
               DO JV=1,NBSTEPMAX+1
                 WRITE(ILURS,"(F15.7)") ZWORK42_BIS(JI,JEL,JH,JV,JJ)
               END DO
             END DO                                    
-            CALL IO_FILE_CLOSE_ll(TZRSFILE)
+            CALL IO_File_close(TZRSFILE)
             TZRSFILE => NULL()
           END DO
         END DO
@@ -3983,7 +3982,7 @@ IF (LLIDAR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   TZFIELD%CMNHNAME   = 'LIPAR'
   TZFIELD%CSTDNAME   = ''
@@ -3995,7 +3994,7 @@ IF (LLIDAR) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK32)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK32)
 !
 END IF
 !
@@ -4039,7 +4038,7 @@ IF (CBLTOP == 'THETA') THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSHMIX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZSHMIX)
   !
   DEALLOCATE(ZSHMIX)
 ELSEIF (CBLTOP == 'RICHA') THEN
@@ -4083,7 +4082,7 @@ ELSEIF (CBLTOP == 'RICHA') THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSHMIX)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZSHMIX)
   !
   DEALLOCATE(ZRIB,ZSHMIX)
 ENDIF
@@ -4100,10 +4099,10 @@ IF (ALLOCATED(ZTHETAV)) DEALLOCATE(ZTHETAV)
 !* Ligthning
 !
 IF ( LCH_CONV_LINOX ) THEN 
-  CALL IO_WRITE_FIELD(TPFILE,'IC_RATE',    XIC_RATE)
-  CALL IO_WRITE_FIELD(TPFILE,'CG_RATE',    XCG_RATE)
-  CALL IO_WRITE_FIELD(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
-  CALL IO_WRITE_FIELD(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
+  CALL IO_Field_write(TPFILE,'IC_RATE',    XIC_RATE)
+  CALL IO_Field_write(TPFILE,'CG_RATE',    XCG_RATE)
+  CALL IO_Field_write(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
+  CALL IO_Field_write(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
 END IF
 !-------------------------------------------------------------------------------
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 1c0b42a31..4908ec514 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2000-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     ######################################
@@ -10,7 +10,7 @@ INTERFACE
 !
    SUBROUTINE WRITE_LFIFM1_FOR_DIAG_SUPP(TPFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 !*       0.1   Declarations of arguments
 !
@@ -96,7 +96,7 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP
 !
 USE MODE_ll
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_PARAMETERS
 USE MODD_CONF_n
 USE MODD_CONF
@@ -157,7 +157,7 @@ USE MODI_RADTR_SATEL
 USE MODI_UV_TO_ZONAL_AND_MERID
 !
 USE MODE_FIELD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 !
 USE MODI_GET_SURF_UNDEF
 !
@@ -242,7 +242,7 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD)
 !
 IF (NCONV_KF >= 0) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'CAPE',XCAPE)
+  CALL IO_Field_write(TPFILE,'CAPE',XCAPE)
 !
   ! top height (km) of convective clouds
   ZWORK21(:,:)= 0.
@@ -261,7 +261,7 @@ IF (NCONV_KF >= 0) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !
   ! base height (km) of convective clouds
   ZWORK21(:,:)= 0.
@@ -280,15 +280,15 @@ IF (NCONV_KF >= 0) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !
 END IF
 IF (NCONV_KF >= 1) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'DTHCONV',XDTHCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRVCONV',XDRVCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRCCONV',XDRCCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRICONV',XDRICONV)
+  CALL IO_Field_write(TPFILE,'DTHCONV',XDTHCONV)
+  CALL IO_Field_write(TPFILE,'DRVCONV',XDRVCONV)
+  CALL IO_Field_write(TPFILE,'DRCCONV',XDRCCONV)
+  CALL IO_Field_write(TPFILE,'DRICONV',XDRICONV)
 !  
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
     ! User scalar variables
@@ -305,7 +305,7 @@ IF (NCONV_KF >= 1) THEN
         WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A2,I3.3,A20)')'X_Y_Z_','SV',JSV,' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! microphysical C2R2 scheme scalar variables
@@ -322,7 +322,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! microphysical C3R5 scheme additional scalar variables
@@ -339,7 +339,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! electrical scalar variables
@@ -356,7 +356,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! chemical scalar variables
@@ -373,7 +373,7 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     ! lagrangian variables
@@ -390,17 +390,17 @@ IF (NCONV_KF >= 1) THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//' CONVective tendency'
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
   END IF
 !
 END IF
 IF (NCONV_KF >= 2) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'PRLFLXCONV',XPRLFLXCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'PRSFLXCONV',XPRSFLXCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'UMFCONV',   XUMFCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DMFCONV',   XDMFCONV)
+  CALL IO_Field_write(TPFILE,'PRLFLXCONV',XPRLFLXCONV)
+  CALL IO_Field_write(TPFILE,'PRSFLXCONV',XPRSFLXCONV)
+  CALL IO_Field_write(TPFILE,'UMFCONV',   XUMFCONV)
+  CALL IO_Field_write(TPFILE,'DMFCONV',   XDMFCONV)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -461,7 +461,7 @@ IF (LCLD_COV .AND. LUSERC) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !
 !  Higher top of the different species of clouds
 !
@@ -498,7 +498,7 @@ IF (LCLD_COV .AND. LUSERC) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   ENDIF
 !
   TZFIELD%CMNHNAME   = 'TCL'
@@ -511,9 +511,9 @@ IF (LCLD_COV .AND. LUSERC) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK22)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK22)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'CLDFR',XCLDFR)
+  CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR)
 !
 !  Visibility                                    
 !
@@ -532,7 +532,7 @@ IF (LCLD_COV .AND. LUSERC) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !
   DEALLOCATE(IWORK1,IWORK2,ICL_HE_ST,GMASK2,ZWORK22)
 END IF
@@ -544,24 +544,24 @@ END IF
 !
 IF (NRAD_3D >= 0) THEN
   IF (CRAD /= 'NONE') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'DTHRAD',      XDTHRAD)
-    CALL IO_WRITE_FIELD(TPFILE,'FLALWD',      XFLALWD)
-    CALL IO_WRITE_FIELD(TPFILE,'DIRFLASWD',   XDIRFLASWD)
-    CALL IO_WRITE_FIELD(TPFILE,'SCAFLASWD',   XSCAFLASWD)
-    CALL IO_WRITE_FIELD(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
-    CALL IO_WRITE_FIELD(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
-    CALL IO_WRITE_FIELD(TPFILE,'ZENITH',      XZENITH)
-    CALL IO_WRITE_FIELD(TPFILE,'AZIM',        XAZIM)
-    CALL IO_WRITE_FIELD(TPFILE,'DIR_ALB',     XDIR_ALB)
-    CALL IO_WRITE_FIELD(TPFILE,'SCA_ALB',     XSCA_ALB)
+    CALL IO_Field_write(TPFILE,'DTHRAD',      XDTHRAD)
+    CALL IO_Field_write(TPFILE,'FLALWD',      XFLALWD)
+    CALL IO_Field_write(TPFILE,'DIRFLASWD',   XDIRFLASWD)
+    CALL IO_Field_write(TPFILE,'SCAFLASWD',   XSCAFLASWD)
+    CALL IO_Field_write(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
+    CALL IO_Field_write(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
+    CALL IO_Field_write(TPFILE,'ZENITH',      XZENITH)
+    CALL IO_Field_write(TPFILE,'AZIM',        XAZIM)
+    CALL IO_Field_write(TPFILE,'DIR_ALB',     XDIR_ALB)
+    CALL IO_Field_write(TPFILE,'SCA_ALB',     XSCA_ALB)
     !
     CALL PRINT_MSG(NVERB_INFO,'IO','WRITE_LFIFM1_FOR_DIAG_SUPP','EMIS: writing only first band')
     CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%NDIMS = 2
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XEMIS(:,:,1))
+    CALL IO_Field_write(TPFILE,TZFIELD,XEMIS(:,:,1))
     !
-    CALL IO_WRITE_FIELD(TPFILE,'TSRAD',       XTSRAD)
+    CALL IO_Field_write(TPFILE,'TSRAD',       XTSRAD)
   ELSE
     PRINT*,'YOU WANT DIAGNOSTICS RELATED TO RADIATION'
     PRINT*,' BUT NO RADIATIVE SCHEME WAS ACTIVATED IN THE MODEL'
@@ -585,7 +585,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !Dust optical depth
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -606,7 +606,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !Dust extinction (optical depth per km)
     DO JK=IKB,IKE
       IKRAD = JK - JPVEXT
@@ -622,7 +622,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
   IF (LSALT) THEN
 !Salt optical depth between two vertical levels
@@ -641,7 +641,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !Salt optical depth
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -662,7 +662,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !Salt extinction (optical depth per km)
     DO JK=IKB,IKE
       IKRAD = JK - JPVEXT
@@ -678,7 +678,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
   IF (LORILAM) THEN
 !Orilam anthropogenic optical depth between two vertical levels
@@ -697,7 +697,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !Orilam anthropogenic optical depth
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
@@ -718,7 +718,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
 !Orilam anthropogenic extinction (optical depth per km)
     DO JK=IKB,IKE
       IKRAD = JK - JPVEXT
@@ -734,7 +734,7 @@ IF (NRAD_3D >= 1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END IF
 END IF
 !
@@ -756,7 +756,7 @@ IF (LCHEMDIAG) THEN
     TZFIELD%CMNHNAME   = 'FLX_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A6,A,A)')'X_Y_Z_',TRIM(CNAMES(JSV-NSV_CHEMBEG+1)),' Net chemical flux'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9)
   END DO
 END IF
 !-------------------------------------------------------------------------------
@@ -817,7 +817,7 @@ IF (LEN_TRIM(CRAD_SAT) /= 0 .AND. NRR /=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZIRBT)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZIRBT)
     !
     TZFIELD%CMNHNAME   = TRIM(YNAM_SAT(JI))//'_WVBT'
     TZFIELD%CSTDNAME   = ''
@@ -829,7 +829,7 @@ IF (LEN_TRIM(CRAD_SAT) /= 0 .AND. NRR /=0) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWVBT)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWVBT)
   END DO
   DEALLOCATE(ZIRBT,ZWVBT)
 END IF
@@ -926,7 +926,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_ZON10M)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_ZON10M)
     !
     TZFIELD%CMNHNAME   = 'VM10'
     TZFIELD%CSTDNAME   = ''
@@ -938,7 +938,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_MER10M)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_MER10M)
   ENDIF
   !
   IF (SIZE(XTKET)>0) THEN
@@ -954,7 +954,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK21)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
   END IF
   !
   IF(ANY(XCURRENT_SFCO2/=XUNDEF))THEN
@@ -968,7 +968,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_SFCO2)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SFCO2)
   END IF
   !
   IF(ANY(XCURRENT_SWD/=XUNDEF))THEN
@@ -982,7 +982,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_SWD)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SWD)
   END IF
   !
   IF(ANY(XCURRENT_SWU/=XUNDEF))THEN
@@ -996,7 +996,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_SWU)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_SWU)
   END IF
 !
   IF(ANY(XCURRENT_LWD/=XUNDEF))THEN
@@ -1010,7 +1010,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_LWD)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWD)
   END IF
 !
   IF(ANY(XCURRENT_LWU/=XUNDEF))THEN
@@ -1024,7 +1024,7 @@ IF (CSURF=='EXTE') THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XCURRENT_LWD)
+    CALL IO_Field_write(TPFILE,TZFIELD,XCURRENT_LWD)
   END IF
 END IF
 
@@ -1083,7 +1083,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'K'
     TZFIELD%CCOMMENT   = 'X_Y_potential temperature '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 ! *********************
 ! Wind
@@ -1096,7 +1096,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_U component of wind '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
   !
   ZWORK31(:,:,:) = MYF(XVT(:,:,:))
@@ -1107,7 +1107,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_V component of wind '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 ! *********************
 ! Water Vapour Mixing Ratio
@@ -1119,7 +1119,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'g kg-1'
     TZFIELD%CCOMMENT   = 'X_Y_Vapor Mixing Ratio '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK)*1.E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK)*1.E3)
   END DO
 ! *********************
 ! Geopotential in meters
@@ -1132,7 +1132,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm'
     TZFIELD%CCOMMENT   = 'X_Y_ALTitude '//TRIM(YPRES(JK))//' hPa'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWRES(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWRES(:,:,JK))
   END DO
 !
   DEALLOCATE(ZWRES,ZPRES,ZWORK32,ZWORK33,ZWORK34)
@@ -1187,7 +1187,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'Pa'
     TZFIELD%CCOMMENT   = 'X_Y_pressure '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
 ! *********************
 ! Potential Vorticity
@@ -1215,7 +1215,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'PVU'
     TZFIELD%CCOMMENT   = 'X_Y_POtential VOrticity '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
 ! *********************
 ! Wind
@@ -1227,7 +1227,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_U component of wind '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
   !
   ZWORK31(:,:,:) = MYF(XVT(:,:,:))
@@ -1237,7 +1237,7 @@ ALLOCATE(ZWORK34(IIU,IJU,IKU))
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm s-1'
     TZFIELD%CCOMMENT   = 'X_Y_V component of wind '//TRIM(YTH(JK))//' K'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWTH(:,:,JK))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWTH(:,:,JK))
   END DO
 !
   DEALLOCATE(ZWTH,ZTH,ZWORK32,ZWORK33,ZWORK34)
@@ -1280,7 +1280,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZAL)
 !
 !*       Standard Variables
 !
@@ -1301,7 +1301,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   END IF
 ! *********************
 ! Precipitation
@@ -1320,7 +1320,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   END IF
 ! *********************
 ! Pressure
@@ -1337,7 +1337,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
 ! *********************
 ! Potential Vorticity
 ! *********************
@@ -1370,7 +1370,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
 ! *********************
 ! Wind
 ! *********************
@@ -1387,7 +1387,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   !
   ZWORK31(:,:,:) = MYF(XVT(:,:,:))
   CALL ZINTER(ZWORK31, XZZ, ZWAL, ZAL, IIU, IJU, IKU, IKB, IAL, XUNDEF)
@@ -1402,7 +1402,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
 ! *********************
 ! Dust extinction (optical depth per km)
 ! *********************
@@ -1423,7 +1423,7 @@ IF (LISOAL .AND.XISOAL(1)/=0.) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWAL)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWAL)
   END IF
 !
 ! *********************
@@ -1465,7 +1465,7 @@ IF (LCOARSE) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !---------------------------------
 ! MOVING AVERAGE OF TKE OVER IDX+1 POINTS
   IDX = IDX/2
@@ -1495,7 +1495,7 @@ IF (LCOARSE) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 3
   TZFIELD%LTIMEDEP   = .TRUE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK31)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -1517,7 +1517,7 @@ IF (NEQ_BUDGET>0) THEN
     TZFIELD%CMNHNAME   = TRIM(CNAMES_BUDGET(JSV))//'_BUDGET'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES_BUDGET(JSV))//'_BUDGET'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTCHEM(JSV)%XB_REAC(:,:,:,:))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTCHEM(JSV)%XB_REAC(:,:,:,:))
   END DO
   !
   TZFIELD%CUNITS     = ''
@@ -1528,7 +1528,7 @@ IF (NEQ_BUDGET>0) THEN
     TZFIELD%CMNHNAME   = TRIM(CNAMES_BUDGET(JSV))//'_CHREACLIST'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = TRIM(CNAMES_BUDGET(JSV))//'_REACTION_LIST'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTCHEM(JSV)%NB_REAC(:))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTCHEM(JSV)%NB_REAC(:))
   END DO
 END IF
 !
@@ -1547,12 +1547,12 @@ IF (NEQ_PLT>0) THEN
     TZFIELD%CMNHNAME   = TRIM(CNAMES_PRODLOSST(JSV))//'_PROD'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES_PRODLOSST(JSV))//'_PROD'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPROD(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XPROD(:,:,:,JSV))
     !
     TZFIELD%CMNHNAME   = TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS'
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES_PRODLOSST(JSV))//'_LOSS'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XLOSS(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XLOSS(:,:,:,JSV))
   END DO
 END IF
 !
diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90
index 528b58ed0..2e96502f1 100644
--- a/src/MNH/write_lfifmn_fordiachron.f90
+++ b/src/MNH/write_lfifmn_fordiachron.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !     #############################################
@@ -98,11 +98,11 @@ USE MODD_LUNIT_n
 USE MODD_TIME
 USE MODD_TYPE_DATE
 USE MODD_NESTING
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
-USE MODE_FMWRIT
 USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
 !
 IMPLICIT NONE
@@ -131,26 +131,26 @@ LPACK=.FALSE.
 !
 !*       1.0    Version :
 !
-CALL IO_WRITE_FIELD(TPFILE,'L1D', L1D)
-CALL IO_WRITE_FIELD(TPFILE,'L2D', L2D)
-CALL IO_WRITE_FIELD(TPFILE,'PACK',LPACK)
-CALL IO_WRITE_FIELD(TPFILE,'SURF',CSURF)
+CALL IO_Field_write(TPFILE,'L1D', L1D)
+CALL IO_Field_write(TPFILE,'L2D', L2D)
+CALL IO_Field_write(TPFILE,'PACK',LPACK)
+CALL IO_Field_write(TPFILE,'SURF',CSURF)
 !
 !*       1.1    Dimensions :
 !
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
+CALL IO_Field_write(TPFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_write(TPFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_write(TPFILE,'KMAX',NKMAX)
 !
-CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',JPHEXT)
+CALL IO_Field_write(TPFILE,'JPHEXT',JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-  CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-  CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
+  CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+  CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+  CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
   !
   !* diagnostic of 1st mass point
   !
@@ -162,47 +162,47 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
-  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
+  CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
+  CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
+CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_write(TPFILE,'LAT0',XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',XLON0)
+CALL IO_Field_write(TPFILE,'BETA',XBETA)
 !
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
+CALL IO_Field_write(TPFILE,'XHAT',XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',XYHAT)
+CALL IO_Field_write(TPFILE,'ZHAT',XZHAT)
+CALL IO_Field_write(TPFILE,'ZTOP',XZTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
-CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
+CALL IO_Field_write(TPFILE,'ZS',   XZS)
+CALL IO_Field_write(TPFILE,'ZSMT', XZSMT)
+CALL IO_Field_write(TPFILE,'SLEVE',LSLEVE)
 !
 IF (LSLEVE) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
-  CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
+  CALL IO_Field_write(TPFILE,'LEN1',XLEN1)
+  CALL IO_Field_write(TPFILE,'LEN2',XLEN2)
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
-CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
-CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
-CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
+CALL IO_Field_write(TPFILE,'DTMOD',TDTMOD)
+CALL IO_Field_write(TPFILE,'DTCUR',TDTCUR)
+CALL IO_Field_write(TPFILE,'DTEXP',TDTEXP)
+CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
-CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
 !
 !*       1.6    Reference state variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', XEXNTOP)
+CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHODREF',XRHODREF)
-CALL IO_WRITE_FIELD(TPFILE,'THVREF', XTHVREF)
+CALL IO_Field_write(TPFILE,'RHODREF',XRHODREF)
+CALL IO_Field_write(TPFILE,'THVREF', XTHVREF)
 !
 LPACK=GPACK
 !
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index 19576446c..f08abfb15 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -11,7 +11,7 @@ INTERFACE
 !
 SUBROUTINE WRITE_LFIFM_n(TPFILE,HDADFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 IMPLICIT NONE
 !
@@ -238,10 +238,10 @@ USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
 USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
 USE MODD_LIMA_PRECIP_SCAVENGING_n
 !
-USE MODE_FM,    ONLY: IO_FILE_CLOSE_ll
-USE MODE_FMWRIT
+USE MODE_IO_FILE,        only: IO_File_close
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODE_FIELD
 USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
@@ -339,29 +339,29 @@ IKE=IKU-JPVEXT
 !
 !*       1.0    File and HDADFILE writing :
 !
-CALL IO_WRITE_FIELD(TPFILE,'FILETYPE',TPFILE%CTYPE)
+CALL IO_Field_write(TPFILE,'FILETYPE',TPFILE%CTYPE)
 !
 IF (LEN_TRIM(HDADFILE)>0) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'DXRATIO',NDXRATIO_ALL(IMI))
-  CALL IO_WRITE_FIELD(TPFILE,'DYRATIO',NDYRATIO_ALL(IMI))
-  CALL IO_WRITE_FIELD(TPFILE,'XOR',    NXOR_ALL(IMI))
-  CALL IO_WRITE_FIELD(TPFILE,'YOR',    NYOR_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'DXRATIO',NDXRATIO_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'DYRATIO',NDYRATIO_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'XOR',    NXOR_ALL(IMI))
+  CALL IO_Field_write(TPFILE,'YOR',    NYOR_ALL(IMI))
 END IF
 !
 !*       1.1    Type and Dimensions :
 !
-CALL IO_WRITE_FIELD(TPFILE,'IMAX',NIMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'JMAX',NJMAX_ll)
-CALL IO_WRITE_FIELD(TPFILE,'KMAX',NKMAX)
+CALL IO_Field_write(TPFILE,'IMAX',NIMAX_ll)
+CALL IO_Field_write(TPFILE,'JMAX',NJMAX_ll)
+CALL IO_Field_write(TPFILE,'KMAX',NKMAX)
 !
-CALL IO_WRITE_FIELD(TPFILE,'JPHEXT',JPHEXT)
+CALL IO_Field_write(TPFILE,'JPHEXT',JPHEXT)
 !
 !*       1.2    Grid variables :
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'RPK',   XRPK)
-  CALL IO_WRITE_FIELD(TPFILE,'LONORI',XLONORI)
-  CALL IO_WRITE_FIELD(TPFILE,'LATORI',XLATORI)
+  CALL IO_Field_write(TPFILE,'RPK',   XRPK)
+  CALL IO_Field_write(TPFILE,'LONORI',XLONORI)
+  CALL IO_Field_write(TPFILE,'LATORI',XLATORI)
 ! 
 !* diagnostic of 1st mass point
 !
@@ -373,51 +373,51 @@ IF (.NOT.LCARTESIAN) THEN
   CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR)
   DEALLOCATE(ZXHAT_ll,ZYHAT_ll)
 !
-  CALL IO_WRITE_FIELD(TPFILE,'LONOR',ZLONOR)
-  CALL IO_WRITE_FIELD(TPFILE,'LATOR',ZLATOR)
+  CALL IO_Field_write(TPFILE,'LONOR',ZLONOR)
+  CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)
 END IF 
 !
-CALL IO_WRITE_FIELD(TPFILE,'THINSHELL',LTHINSHELL)
-CALL IO_WRITE_FIELD(TPFILE,'LAT0',XLAT0)
-CALL IO_WRITE_FIELD(TPFILE,'LON0',XLON0)
-CALL IO_WRITE_FIELD(TPFILE,'BETA',XBETA)
+CALL IO_Field_write(TPFILE,'THINSHELL',LTHINSHELL)
+CALL IO_Field_write(TPFILE,'LAT0',XLAT0)
+CALL IO_Field_write(TPFILE,'LON0',XLON0)
+CALL IO_Field_write(TPFILE,'BETA',XBETA)
 !
-CALL IO_WRITE_FIELD(TPFILE,'XHAT',XXHAT)
-CALL IO_WRITE_FIELD(TPFILE,'YHAT',XYHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZHAT',XZHAT)
-CALL IO_WRITE_FIELD(TPFILE,'ZTOP',XZTOP)
+CALL IO_Field_write(TPFILE,'XHAT',XXHAT)
+CALL IO_Field_write(TPFILE,'YHAT',XYHAT)
+CALL IO_Field_write(TPFILE,'ZHAT',XZHAT)
+CALL IO_Field_write(TPFILE,'ZTOP',XZTOP)
 !
 IF (.NOT.LCARTESIAN) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LAT',XLAT)
-  CALL IO_WRITE_FIELD(TPFILE,'LON',XLON)
+  CALL IO_Field_write(TPFILE,'LAT',XLAT)
+  CALL IO_Field_write(TPFILE,'LON',XLON)
 END IF
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',   XZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT', XZSMT)
-CALL IO_WRITE_FIELD(TPFILE,'SLEVE',LSLEVE)
+CALL IO_Field_write(TPFILE,'ZS',   XZS)
+CALL IO_Field_write(TPFILE,'ZSMT', XZSMT)
+CALL IO_Field_write(TPFILE,'SLEVE',LSLEVE)
 !
 IF (LSLEVE) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'LEN1',XLEN1)
-  CALL IO_WRITE_FIELD(TPFILE,'LEN2',XLEN2)
+  CALL IO_Field_write(TPFILE,'LEN1',XLEN1)
+  CALL IO_Field_write(TPFILE,'LEN2',XLEN2)
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'DTMOD',TDTMOD)
-CALL IO_WRITE_FIELD(TPFILE,'DTCUR',TDTCUR)
-CALL IO_WRITE_FIELD(TPFILE,'DTEXP',TDTEXP)
-CALL IO_WRITE_FIELD(TPFILE,'DTSEG',TDTSEG)
+CALL IO_Field_write(TPFILE,'DTMOD',TDTMOD)
+CALL IO_Field_write(TPFILE,'DTCUR',TDTCUR)
+CALL IO_Field_write(TPFILE,'DTEXP',TDTEXP)
+CALL IO_Field_write(TPFILE,'DTSEG',TDTSEG)
 !
 !*       1.3    Configuration  variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'L1D',      L1D)
-CALL IO_WRITE_FIELD(TPFILE,'L2D',      L2D)
-CALL IO_WRITE_FIELD(TPFILE,'PACK',     LPACK)
-CALL IO_WRITE_FIELD(TPFILE,'CARTESIAN',LCARTESIAN)
-CALL IO_WRITE_FIELD(TPFILE,'LBOUSS',   LBOUSS)
+CALL IO_Field_write(TPFILE,'L1D',      L1D)
+CALL IO_Field_write(TPFILE,'L2D',      L2D)
+CALL IO_Field_write(TPFILE,'PACK',     LPACK)
+CALL IO_Field_write(TPFILE,'CARTESIAN',LCARTESIAN)
+CALL IO_Field_write(TPFILE,'LBOUSS',   LBOUSS)
 !
-CALL IO_WRITE_FIELD(TPFILE,'SURF',     CSURF)
-CALL IO_WRITE_FIELD(TPFILE,'CPL_AROME',LCPL_AROME)
-CALL IO_WRITE_FIELD(TPFILE,'COUPLING', LCOUPLING)
+CALL IO_Field_write(TPFILE,'SURF',     CSURF)
+CALL IO_Field_write(TPFILE,'CPL_AROME',LCPL_AROME)
+CALL IO_Field_write(TPFILE,'COUPLING', LCOUPLING)
 !
 !*       1.4    Prognostic variables :
 !
@@ -429,27 +429,27 @@ CALL IO_WRITE_FIELD(TPFILE,'COUPLING', LCOUPLING)
 !  CALL EXTRAPOL('E',XUT)
 !  CALL EXTRAPOL('N',XUT)
 !  CALL EXTRAPOL('S',XUT)
-CALL MPPDB_CHECK3D(XUT,"write_lfifmn before IO_WRITE_FIELD::XUT",PRECISION)
-CALL IO_WRITE_FIELD(TPFILE,'UT',XUT)
-CALL MPPDB_CHECK3D(XUT,"write_lfifmn after IO_WRITE_FIELD::XUT",PRECISION)
+CALL MPPDB_CHECK3D(XUT,"write_lfifmn before IO_Field_write::XUT",PRECISION)
+CALL IO_Field_write(TPFILE,'UT',XUT)
+CALL MPPDB_CHECK3D(XUT,"write_lfifmn after IO_Field_write::XUT",PRECISION)
 !
 !20131128 check XVT-> X_Y_W_V wind component for PRC
 CALL MPPDB_CHECK3D(XVT,"write_lfifmn::XVT",PRECISION)
 !
-CALL IO_WRITE_FIELD(TPFILE,'VT',XVT)
-CALL IO_WRITE_FIELD(TPFILE,'WT',XWT)
+CALL IO_Field_write(TPFILE,'VT',XVT)
+CALL IO_Field_write(TPFILE,'WT',XWT)
 !
-CALL IO_WRITE_FIELD(TPFILE,'THT',XTHT)
+CALL IO_Field_write(TPFILE,'THT',XTHT)
 !
 !*       1.4.2  Time t-dt:
 !
 IF ( (CUVW_ADV_SCHEME == 'CEN4TH') .AND. (CTEMP_SCHEME == 'LEFR') ) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'UM', XUM)
-  CALL IO_WRITE_FIELD(TPFILE,'VM', XVM)
-  CALL IO_WRITE_FIELD(TPFILE,'WM', XWM)
-  CALL IO_WRITE_FIELD(TPFILE,'DUM',XDUM)
-  CALL IO_WRITE_FIELD(TPFILE,'DVM',XDVM)
-  CALL IO_WRITE_FIELD(TPFILE,'DWM',XDWM)
+  CALL IO_Field_write(TPFILE,'UM', XUM)
+  CALL IO_Field_write(TPFILE,'VM', XVM)
+  CALL IO_Field_write(TPFILE,'WM', XWM)
+  CALL IO_Field_write(TPFILE,'DUM',XDUM)
+  CALL IO_Field_write(TPFILE,'DVM',XDVM)
+  CALL IO_Field_write(TPFILE,'DWM',XDWM)
 END IF
 !
 IF (MEAN_COUNT /= 0) THEN
@@ -467,20 +467,20 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind'
   ZWORK3D = XUM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'U2ME'
   TZFIELD%CLONGNAME  = 'U2ME'
   TZFIELD%CUNITS     = 'm2 s-2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_U component of mean wind variance'
   ZWORK3D = XU2_MEAN/MEAN_COUNT-XUM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'UMMA'
   TZFIELD%CLONGNAME  = 'UMMA'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_U component of max wind'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XUM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XUM_MAX)
 !
   TZFIELD%NGRID      = 3
 !
@@ -489,20 +489,20 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind'
   ZWORK3D = XVM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'V2ME'
   TZFIELD%CLONGNAME  = 'V2ME'
   TZFIELD%CUNITS     = 'm2 s-2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of mean wind variance'
   ZWORK3D = XV2_MEAN/MEAN_COUNT-XVM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'VMMA'
   TZFIELD%CLONGNAME  = 'VMMA'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_V component of max wind'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XVM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XVM_MAX)
 !
   TZFIELD%NGRID      = 4
 !
@@ -511,20 +511,20 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind'
   ZWORK3D = XWM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'W2ME'
   TZFIELD%CLONGNAME  = 'W2ME'
   TZFIELD%CUNITS     = 'm2 s-2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical mean wind variance'
   ZWORK3D = XW2_MEAN/MEAN_COUNT-XWM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'WMMA'
   TZFIELD%CLONGNAME  = 'WMMA'
   TZFIELD%CUNITS     = 'm s-1'
   TZFIELD%CCOMMENT   = 'X_Y_Z_vertical max wind'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XWM_MAX)
 !
   TZFIELD%NGRID      = 1
 !
@@ -533,60 +533,60 @@ IF (MEAN_COUNT /= 0) THEN
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature'
   ZWORK3D = XTHM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'TH2ME'
   TZFIELD%CLONGNAME  = 'TH2ME'
   TZFIELD%CUNITS     = 'K2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean potential temperature variance'
   ZWORK3D = XTH2_MEAN/MEAN_COUNT-XTHM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'THMMA'
   TZFIELD%CLONGNAME  = 'THMMA'
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_max potential temperature'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XTHM_MAX)
 !
   TZFIELD%CMNHNAME   = 'TEMPMME'
   TZFIELD%CLONGNAME  = 'TEMPMME'
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature'
   ZWORK3D = XTEMPM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'TEMP2ME'
   TZFIELD%CLONGNAME  = 'TEMP2ME'
   TZFIELD%CUNITS     = 'K2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean temperature variance'
   ZWORK3D = XTEMP2_MEAN/MEAN_COUNT-XTEMPM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'TEMPMMA'
   TZFIELD%CLONGNAME  = 'TEMPMMA'
   TZFIELD%CUNITS     = 'K'
   TZFIELD%CCOMMENT   = 'X_Y_Z_max temperature'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTEMPM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XTEMPM_MAX)
 !
   TZFIELD%CMNHNAME   = 'PABSMME'
   TZFIELD%CLONGNAME  = 'PABSMME'
   TZFIELD%CUNITS     = 'Pa'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure'
   ZWORK3D = XPABSM_MEAN/MEAN_COUNT
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
   TZFIELD%CMNHNAME   = 'PABS2ME'
   TZFIELD%CLONGNAME  = 'PABS2ME'
   TZFIELD%CUNITS     = 'Pa2'
   TZFIELD%CCOMMENT   = 'X_Y_Z_mean ABSolute Pressure variance'
   ZWORK3D = XPABS2_MEAN/MEAN_COUNT-XPABSM_MEAN**2/MEAN_COUNT**2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
   !
   TZFIELD%CMNHNAME   = 'PABSMMA'
   TZFIELD%CLONGNAME  = 'PABSMMA'
   TZFIELD%CUNITS     = 'Pa'
   TZFIELD%CCOMMENT   = 'X_Y_Z_max ABSolute Pressure'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPABSM_MAX)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPABSM_MAX)
 !
   IF (CTURB /= 'NONE') THEN
     TZFIELD%CMNHNAME   = 'TKEMME'
@@ -594,52 +594,52 @@ IF (MEAN_COUNT /= 0) THEN
     TZFIELD%CUNITS     = 'm2 s-2'
     TZFIELD%CCOMMENT   = 'X_Y_Z_mean kinetic energy'
     ZWORK3D= XTKEM_MEAN/MEAN_COUNT
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
 !
     TZFIELD%CMNHNAME   = 'TKEMMA'
     TZFIELD%CLONGNAME  = 'TKEMMA'
     TZFIELD%CUNITS     = 'm2 s-2'
     TZFIELD%CCOMMENT   = 'X_Y_Z_max kinetic energy'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTKEM_MAX)
+    CALL IO_Field_write(TPFILE,TZFIELD,XTKEM_MAX)
   END IF
 !
 END IF
 !
 !
 IF (CTURB /= 'NONE') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'TKET',XTKET)
-  IF (CPROGRAM == 'MESONH' .AND. LSPLIT_CFL) CALL IO_WRITE_FIELD(TPFILE,'TKEMS',XRTKEMS)
+  CALL IO_Field_write(TPFILE,'TKET',XTKET)
+  IF (CPROGRAM == 'MESONH' .AND. LSPLIT_CFL) CALL IO_Field_write(TPFILE,'TKEMS',XRTKEMS)
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'PABST',XPABST)
+CALL IO_Field_write(TPFILE,'PABST',XPABST)
 !
 IF (NRR >=1) THEN
-  IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
+  IF (LUSERV) CALL IO_Field_write(TPFILE,'RVT',XRT(:,:,:,IDX_RVT))
   IF (LUSERC) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RCT',XRT(:,:,:,IDX_RCT))
+    CALL IO_Field_write(TPFILE,'RCT',XRT(:,:,:,IDX_RCT))
     WRITE (ILUOUT,*) IDX_RCT,' RC min-max ',MIN_ll(XRT(:,:,:,IDX_RCT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RCT),INFO_ll)
   END IF
   IF (LUSERR) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RRT',XRT(:,:,:,IDX_RRT))
+    CALL IO_Field_write(TPFILE,'RRT',XRT(:,:,:,IDX_RRT))
     WRITE (ILUOUT,*) IDX_RRT,' RR min-max ',MIN_ll(XRT(:,:,:,IDX_RRT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RRT),INFO_ll)
   END IF 
   IF (LUSERI) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RIT',XRT(:,:,:,IDX_RIT))
+    CALL IO_Field_write(TPFILE,'RIT',XRT(:,:,:,IDX_RIT))
     WRITE (ILUOUT,*) IDX_RIT,' RI min-max ',MIN_ll(XRT(:,:,:,IDX_RIT),INFO_ll),MAX_ll(XRT(:,:,:,IDX_RIT),INFO_ll)
     IF ( CPROGRAM == 'MESONH' .AND. CCLOUD(1:3) == 'ICE') THEN
-      CALL IO_WRITE_FIELD(TPFILE,'CIT',XCIT(:,:,:))
+      CALL IO_Field_write(TPFILE,'CIT',XCIT(:,:,:))
     END IF
   END IF 
   IF (LUSERS) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RST',XRT(:,:,:,IDX_RST))
+    CALL IO_Field_write(TPFILE,'RST',XRT(:,:,:,IDX_RST))
     WRITE (ILUOUT,*) IDX_RST,' RS min-max ',MINVAL(XRT(:,:,:,IDX_RST)),MAXVAL(XRT(:,:,:,IDX_RST))
   END IF
   IF (LUSERG) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'RGT',XRT(:,:,:,IDX_RGT))
+    CALL IO_Field_write(TPFILE,'RGT',XRT(:,:,:,IDX_RGT))
     WRITE (ILUOUT,*) IDX_RGT,' RG min-max ',MINVAL(XRT(:,:,:,IDX_RGT)),MAXVAL(XRT(:,:,:,IDX_RGT))
   END IF 
-  IF (LUSERH) CALL IO_WRITE_FIELD(TPFILE,'RHT',XRT(:,:,:,IDX_RHT))
+  IF (LUSERH) CALL IO_Field_write(TPFILE,'RHT',XRT(:,:,:,IDX_RHT))
 END IF
 !
 IF (NSV >=1) THEN
@@ -658,7 +658,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -676,7 +676,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -694,7 +694,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -765,7 +765,7 @@ IF (NSV >=1) THEN
     END IF
     !
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
 !
     JSA=JSA+1
   END DO
@@ -773,7 +773,7 @@ IF (NSV >=1) THEN
   IF (LSCAV .AND. LAERO_MASS) THEN
   IF (ASSOCIATED(XINPAP)) THEN
   IF (SIZE(XINPAP) /= 0 ) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'INPAP',XINPAP)
+    CALL IO_Field_write(TPFILE,'INPAP',XINPAP)
     !
     ZWORK2D(:,:)  = XRHOLW*XINPRR(:,:)*XSVT(:,:,2,NSV_LIMA_SCAVMASS)/ &
                                         max( 1.e-20,XRT(:,:,2,3) ) !~2=at ground level
@@ -787,9 +787,9 @@ IF (NSV >=1) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 2
     TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
     !
-    CALL IO_WRITE_FIELD(TPFILE,'ACPAP',XACPAP)
+    CALL IO_Field_write(TPFILE,'ACPAP',XACPAP)
   END IF
   END IF
   END IF
@@ -815,15 +815,15 @@ IF (NSV >=1) THEN
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
       END IF
       ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
       JSA=JSA+1
     END DO
   END IF
   !
   IF (CELEC /= 'NONE') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'EFIELDU',XEFIELDU)
-    CALL IO_WRITE_FIELD(TPFILE,'EFIELDV',XEFIELDV)
-    CALL IO_WRITE_FIELD(TPFILE,'EFIELDW',XEFIELDW)
+    CALL IO_Field_write(TPFILE,'EFIELDU',XEFIELDU)
+    CALL IO_Field_write(TPFILE,'EFIELDV',XEFIELDV)
+    CALL IO_Field_write(TPFILE,'EFIELDW',XEFIELDW)
  !
     TZFIELD%CMNHNAME   = 'EMODULE'
     TZFIELD%CSTDNAME   = ''
@@ -836,34 +836,34 @@ IF (NSV >=1) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     ZWORK3D(:,:,:) = (XEFIELDU**2 + XEFIELDV**2 + XEFIELDW**2)**0.5
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK3D)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IAGGS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XNI_IAGGS*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XNI_IAGGS*1.E12)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('NI_IDRYG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XNI_IDRYG*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XNI_IDRYG*1.E12)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('NI_SDRYG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XNI_SDRYG*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XNI_SDRYG*1.E12)
  !
     CALL FIND_FIELD_ID_FROM_MNHNAME('INDUC_CG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'pC m-3 s-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XIND_RATE*1.E12)
+    CALL IO_Field_write(TPFILE,TZFIELD,XIND_RATE*1.E12)
  !
-    CALL IO_WRITE_FIELD(TPFILE,'TRIG_IC',   NMAP_TRIG_IC)
-    CALL IO_WRITE_FIELD(TPFILE,'IMPACT_CG', NMAP_IMPACT_CG)
-    CALL IO_WRITE_FIELD(TPFILE,'AREA_CG',   NMAP_2DAREA_CG)
-    CALL IO_WRITE_FIELD(TPFILE,'AREA_IC',   NMAP_2DAREA_IC)
-    CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DCG',NMAP_3DCG)
-    CALL IO_WRITE_FIELD(TPFILE,'FLASH_3DIC',NMAP_3DIC)
+    CALL IO_Field_write(TPFILE,'TRIG_IC',   NMAP_TRIG_IC)
+    CALL IO_Field_write(TPFILE,'IMPACT_CG', NMAP_IMPACT_CG)
+    CALL IO_Field_write(TPFILE,'AREA_CG',   NMAP_2DAREA_CG)
+    CALL IO_Field_write(TPFILE,'AREA_IC',   NMAP_2DAREA_IC)
+    CALL IO_Field_write(TPFILE,'FLASH_3DCG',NMAP_3DCG)
+    CALL IO_Field_write(TPFILE,'FLASH_3DIC',NMAP_3DIC)
  !
     IF (LLNOX_EXPLICIT) THEN
       TZFIELD%CMNHNAME   = 'LINOX'
@@ -876,7 +876,7 @@ IF (NSV >=1) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,NSV_LNOXEND))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,NSV_LNOXEND))
       JSA=JSA+1
     END IF
   END IF
@@ -894,7 +894,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -912,18 +912,18 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
 !
   IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. (.NOT. LSUPSAT)) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'SUPSATMAX',XSUPSAT(:,:,:))
-    CALL IO_WRITE_FIELD(TPFILE,'NACT',     XNACT(:,:,:))
+    CALL IO_Field_write(TPFILE,'SUPSATMAX',XSUPSAT(:,:,:))
+    CALL IO_Field_write(TPFILE,'NACT',     XNACT(:,:,:))
   END IF
   IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. LSUPSAT) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'SSPRO',XSSPRO(:,:,:))
-    CALL IO_WRITE_FIELD(TPFILE,'NPRO', XNPRO(:,:,:))
+    CALL IO_Field_write(TPFILE,'SSPRO',XSSPRO(:,:,:))
+    CALL IO_Field_write(TPFILE,'NPRO', XNPRO(:,:,:))
   END IF
 !
 #ifdef MNH_FOREFIRE
@@ -941,7 +941,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   END IF
@@ -959,7 +959,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME=TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
     TZFIELD%CSTDNAME   = ''
@@ -973,7 +973,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)')'X_Y_Z_','SNOWCANO',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWCANO(:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSNWCANO(:,:,JSV))
       JSA=JSA+1
     END DO
   ENDIF
@@ -991,7 +991,7 @@ IF (NSV >=1) THEN
       WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       JSA=JSA+1
     END DO
   !
@@ -1024,7 +1024,7 @@ IF (NSV >=1) THEN
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CUNITS     = 'ppp'
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       !
       YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without T
     END DO
@@ -1035,7 +1035,7 @@ IF (NSV >=1) THEN
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         TZFIELD%CUNITS     = 'ppp'
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         !
         YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without M
       END DO
@@ -1048,14 +1048,14 @@ IF (NSV >=1) THEN
         TZFIELD%CUNITS     = 'mol i m-2'
         TZFIELD%CCOMMENT   = 'X_Y_Accumulated moles of aqueous species at the surface'
         ZWORK2D(:,:)  = XACPRAQ(:,:,JSV-NSV_CHACBEG-NSV_CHAC/2+1)
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+        CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       END DO
       TZFIELD%NDIMS = 3
     END IF
     IF (LUSECHAQ.AND.LCH_PH) THEN  ! pH values in cloud
-      CALL IO_WRITE_FIELD(TPFILE,'PHC',XPHC)
+      CALL IO_Field_write(TPFILE,'PHC',XPHC)
       IF (NRR>=3) THEN
-        CALL IO_WRITE_FIELD(TPFILE,'PHR',XPHR)
+        CALL IO_Field_write(TPFILE,'PHR',XPHR)
         ! compute mean pH in accumulated surface water
         !ZWORK2D(:,:) = 10**(-XCH_PHINIT)
         WHERE (XACPRR > 0.)
@@ -1075,7 +1075,7 @@ IF (NSV >=1) THEN
         TZFIELD%NGRID      = 1
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 2
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D)
+        CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       ENDIF
     ENDIF
   ELSE IF (LCH_CONV_LINOX) THEN
@@ -1091,7 +1091,7 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = 'LINOXT'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
       YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
     END DO
   ENDIF  
@@ -1114,7 +1114,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_AERBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERBEG ',JSV
         IF (JSV==NSV_AEREND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AEREND ',JSV
         YCHNAMES(JSV-JSA)=  TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1133,7 +1133,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_AERDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPBEG ',JSV
         IF (JSV==NSV_AERDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1158,7 +1158,7 @@ IF (NSV >=1) THEN
         WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must equal or inferior to 3'
         WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
  !callabortstop
-        CALL IO_FILE_CLOSE_ll(TLUOUT)
+        CALL IO_File_close(TLUOUT)
         CALL ABORT
         STOP
       END IF ! Test IMOMENTS
@@ -1181,7 +1181,7 @@ IF (NSV >=1) THEN
           TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+          CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
           YDSTNAMES((JMODE-1)*IMOMENTS+1)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
         END DO ! Loop on mode
       ELSE
@@ -1194,7 +1194,7 @@ IF (NSV >=1) THEN
             TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
             TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
             WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-            CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+            CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
             YDSTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
           END DO ! Loop on moment
         END DO ! loop on mode
@@ -1220,7 +1220,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_DSTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTBEG ',JSV
         IF (JSV==NSV_DSTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1239,7 +1239,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_DSTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPBEG ',JSV
         IF (JSV==NSV_DSTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1264,7 +1264,7 @@ IF (NSV >=1) THEN
         WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be 3'
         WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
  !callabortstop
-        CALL IO_FILE_CLOSE_ll(TLUOUT)
+        CALL IO_File_close(TLUOUT)
         CALL ABORT
         STOP
       END IF
@@ -1288,7 +1288,7 @@ IF (NSV >=1) THEN
           TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+          CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
           YSLTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
         END DO ! Loop on moments
       END DO   ! Loop on modes
@@ -1312,7 +1312,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_SLTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTBEG ',JSV
         IF (JSV==NSV_SLTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1331,7 +1331,7 @@ IF (NSV >=1) THEN
         TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
         IF (JSV==NSV_SLTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPBEG ',JSV
         IF (JSV==NSV_SLTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
@@ -1352,7 +1352,7 @@ IF (NSV >=1) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICH_NBR)
+  CALL IO_Field_write(TPFILE,TZFIELD,ICH_NBR)
   !
   IF (ICH_NBR/=0) THEN
     TZFIELD%CMNHNAME   = 'NSV.TITRE'
@@ -1373,7 +1373,7 @@ IF (NSV >=1) THEN
         ICH_NAMES(ILREC*(JSV-1)+JT) = ICHAR(YCHNAMES(JSV)(JT:JT))
       ENDDO
     ENDDO
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ICH_NAMES)
+    CALL IO_Field_write(TPFILE,TZFIELD,ICH_NAMES)
     DEALLOCATE(YCHNAMES,ICH_NAMES)
   END IF 
   !
@@ -1391,66 +1391,66 @@ IF (NSV >=1) THEN
       TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
     END DO
   END IF
 END IF
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'LSUM', XLSUM)
-CALL IO_WRITE_FIELD(TPFILE,'LSVM', XLSVM)
-CALL IO_WRITE_FIELD(TPFILE,'LSWM', XLSWM)
-CALL IO_WRITE_FIELD(TPFILE,'LSTHM',XLSTHM)
-IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'LSRVM',XLSRVM)
+CALL IO_Field_write(TPFILE,'LSUM', XLSUM)
+CALL IO_Field_write(TPFILE,'LSVM', XLSVM)
+CALL IO_Field_write(TPFILE,'LSWM', XLSWM)
+CALL IO_Field_write(TPFILE,'LSTHM',XLSTHM)
+IF (LUSERV) CALL IO_Field_write(TPFILE,'LSRVM',XLSRVM)
 !
 CALL WRITE_LB_n(TPFILE)
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'DRYMASST',XDRYMASST)
+CALL IO_Field_write(TPFILE,'DRYMASST',XDRYMASST)
 !
 IF( CTURB /= 'NONE' .AND. CTOM=='TM06') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'BL_DEPTH',XBL_DEPTH)
+  CALL IO_Field_write(TPFILE,'BL_DEPTH',XBL_DEPTH)
 END IF
 !
 IF( CTURB /= 'NONE' .AND. LRMC01) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'SBL_DEPTH',XSBL_DEPTH)
+  CALL IO_Field_write(TPFILE,'SBL_DEPTH',XSBL_DEPTH)
 END IF
 !
 IF( CTURB /= 'NONE' .AND. CSCONV == 'EDKF' .AND.(CPROGRAM == 'MESONH' .OR. CPROGRAM == 'DIAG')) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'WTHVMF',XWTHVMF)
+  CALL IO_Field_write(TPFILE,'WTHVMF',XWTHVMF)
 END IF
 !
 IF( NRR > 1 .AND. CTURB /= 'NONE' ) THEN
-  CALL IO_WRITE_FIELD(TPFILE,'SRCT',XSRCT)
-  CALL IO_WRITE_FIELD(TPFILE,'SIGS',XSIGS)
+  CALL IO_Field_write(TPFILE,'SRCT',XSRCT)
+  CALL IO_Field_write(TPFILE,'SIGS',XSIGS)
 END IF
 !
 !*       1.5    Reference state variables :
 !
-CALL IO_WRITE_FIELD(TPFILE,'RHOREFZ',XRHODREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'THVREFZ',XTHVREFZ)
-CALL IO_WRITE_FIELD(TPFILE,'EXNTOP', XEXNTOP)
+CALL IO_Field_write(TPFILE,'RHOREFZ',XRHODREFZ)
+CALL IO_Field_write(TPFILE,'THVREFZ',XTHVREFZ)
+CALL IO_Field_write(TPFILE,'EXNTOP', XEXNTOP)
 !
 !
 !*       1.6  Tendencies                                         
 !
 IF (CPROGRAM == 'MESONH') THEN
   IF (CTEMP_SCHEME/='LEFR') THEN
-    CALL IO_WRITE_FIELD(TPFILE,'US_PRES',XRUS_PRES)
-    CALL IO_WRITE_FIELD(TPFILE,'VS_PRES',XRVS_PRES)
-    CALL IO_WRITE_FIELD(TPFILE,'WS_PRES',XRWS_PRES)
+    CALL IO_Field_write(TPFILE,'US_PRES',XRUS_PRES)
+    CALL IO_Field_write(TPFILE,'VS_PRES',XRVS_PRES)
+    CALL IO_Field_write(TPFILE,'WS_PRES',XRWS_PRES)
   END IF
   IF (LSPLIT_CFL) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'THS_CLD',XRTHS_CLD)
+    CALL IO_Field_write(TPFILE,'THS_CLD',XRTHS_CLD)
 !
     IF (NRR >=1) THEN
-      IF (LUSERV) CALL IO_WRITE_FIELD(TPFILE,'RVS_CLD',XRRS_CLD(:,:,:,IDX_RVT))
-      IF (LUSERC) CALL IO_WRITE_FIELD(TPFILE,'RCS_CLD',XRRS_CLD(:,:,:,IDX_RCT))
-      IF (LUSERR) CALL IO_WRITE_FIELD(TPFILE,'RRS_CLD',XRRS_CLD(:,:,:,IDX_RRT))
-      IF (LUSERI) CALL IO_WRITE_FIELD(TPFILE,'RIS_CLD',XRRS_CLD(:,:,:,IDX_RIT))
-      IF (LUSERS) CALL IO_WRITE_FIELD(TPFILE,'RSS_CLD',XRRS_CLD(:,:,:,IDX_RST))
-      IF (LUSERG) CALL IO_WRITE_FIELD(TPFILE,'RGS_CLD',XRRS_CLD(:,:,:,IDX_RGT))
-      IF (LUSERH) CALL IO_WRITE_FIELD(TPFILE,'RHS_CLD',XRRS_CLD(:,:,:,IDX_RHT))
+      IF (LUSERV) CALL IO_Field_write(TPFILE,'RVS_CLD',XRRS_CLD(:,:,:,IDX_RVT))
+      IF (LUSERC) CALL IO_Field_write(TPFILE,'RCS_CLD',XRRS_CLD(:,:,:,IDX_RCT))
+      IF (LUSERR) CALL IO_Field_write(TPFILE,'RRS_CLD',XRRS_CLD(:,:,:,IDX_RRT))
+      IF (LUSERI) CALL IO_Field_write(TPFILE,'RIS_CLD',XRRS_CLD(:,:,:,IDX_RIT))
+      IF (LUSERS) CALL IO_Field_write(TPFILE,'RSS_CLD',XRRS_CLD(:,:,:,IDX_RST))
+      IF (LUSERG) CALL IO_Field_write(TPFILE,'RGS_CLD',XRRS_CLD(:,:,:,IDX_RGT))
+      IF (LUSERH) CALL IO_Field_write(TPFILE,'RHS_CLD',XRRS_CLD(:,:,:,IDX_RHT))
     END IF 
   END IF
 END IF 
@@ -1469,7 +1469,7 @@ END IF
 !       TZFIELD%NTYPE      = TYPEREAL
 !       TZFIELD%NDIMS      = 3
 !       TZFIELD%LTIMEDEP   = .TRUE.
-!       CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
+!       CALL IO_Field_write(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
 !     END IF
 !     IF (JSV == NSV_C2R2END ) THEN
 !       TZFIELD%CMNHNAME   = 'RSVS_CLD2'
@@ -1482,7 +1482,7 @@ END IF
 !       TZFIELD%NTYPE      = TYPEREAL
 !       TZFIELD%NDIMS      = 3
 !       TZFIELD%LTIMEDEP   = .TRUE.
-!       CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
+!       CALL IO_Field_write(TPFILE,TZFIELD,XRRS_CLD(:,:,:,IRR))
 !     END IF
 !    END DO
 ! END IF
@@ -1492,31 +1492,31 @@ END IF
 !
 !
 IF (CRAD /= 'NONE') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'DTRAD_FULL',TDTRAD_FULL)
-  CALL IO_WRITE_FIELD(TPFILE,'DTRAD_CLLY',TDTRAD_CLONLY)
-!
-  CALL IO_WRITE_FIELD(TPFILE,'DTHRAD',      XDTHRAD)
-  CALL IO_WRITE_FIELD(TPFILE,'FLALWD',      XFLALWD)
-  CALL IO_WRITE_FIELD(TPFILE,'DIRFLASWD',   XDIRFLASWD)
-  CALL IO_WRITE_FIELD(TPFILE,'SCAFLASWD',   XSCAFLASWD)
-  CALL IO_WRITE_FIELD(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
-  CALL IO_WRITE_FIELD(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
-  CALL IO_WRITE_FIELD(TPFILE,'ZENITH',      XZENITH)
-  CALL IO_WRITE_FIELD(TPFILE,'AZIM',        XAZIM)
-  CALL IO_WRITE_FIELD(TPFILE,'DIR_ALB',     XDIR_ALB)
-  CALL IO_WRITE_FIELD(TPFILE,'SCA_ALB',     XSCA_ALB)
+  CALL IO_Field_write(TPFILE,'DTRAD_FULL',TDTRAD_FULL)
+  CALL IO_Field_write(TPFILE,'DTRAD_CLLY',TDTRAD_CLONLY)
+!
+  CALL IO_Field_write(TPFILE,'DTHRAD',      XDTHRAD)
+  CALL IO_Field_write(TPFILE,'FLALWD',      XFLALWD)
+  CALL IO_Field_write(TPFILE,'DIRFLASWD',   XDIRFLASWD)
+  CALL IO_Field_write(TPFILE,'SCAFLASWD',   XSCAFLASWD)
+  CALL IO_Field_write(TPFILE,'DIRSRFSWD',   XDIRSRFSWD)
+  CALL IO_Field_write(TPFILE,'CLEARCOL_TM1',NCLEARCOL_TM1)
+  CALL IO_Field_write(TPFILE,'ZENITH',      XZENITH)
+  CALL IO_Field_write(TPFILE,'AZIM',        XAZIM)
+  CALL IO_Field_write(TPFILE,'DIR_ALB',     XDIR_ALB)
+  CALL IO_Field_write(TPFILE,'SCA_ALB',     XSCA_ALB)
   !
   CALL PRINT_MSG(NVERB_INFO,'IO','WRITE_LFIFM_n','EMIS: writing only first band')
   CALL FIND_FIELD_ID_FROM_MNHNAME('EMIS',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%NDIMS = 2
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XEMIS(:,:,1))
+  CALL IO_Field_write(TPFILE,TZFIELD,XEMIS(:,:,1))
   !
-  CALL IO_WRITE_FIELD(TPFILE,'TSRAD',       XTSRAD)
+  CALL IO_Field_write(TPFILE,'TSRAD',       XTSRAD)
 ENDIF
 !
 IF (NRR > 1 .AND. CPROGRAM == 'MESONH') THEN
-  CALL IO_WRITE_FIELD(TPFILE,'CLDFR',XCLDFR)
+  CALL IO_Field_write(TPFILE,'CLDFR',XCLDFR)
 END IF
 !
 !
@@ -1527,33 +1527,33 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
 !
 ! 
 !
-  CALL IO_WRITE_FIELD(TPFILE,'DTDCONV',  TDTDCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'COUNTCONV',NCOUNTCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DTHCONV',  XDTHCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRVCONV',  XDRVCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRCCONV',  XDRCCONV)
-  CALL IO_WRITE_FIELD(TPFILE,'DRICONV',  XDRICONV)
+  CALL IO_Field_write(TPFILE,'DTDCONV',  TDTDCONV)
+  CALL IO_Field_write(TPFILE,'COUNTCONV',NCOUNTCONV)
+  CALL IO_Field_write(TPFILE,'DTHCONV',  XDTHCONV)
+  CALL IO_Field_write(TPFILE,'DRVCONV',  XDRVCONV)
+  CALL IO_Field_write(TPFILE,'DRCCONV',  XDRCCONV)
+  CALL IO_Field_write(TPFILE,'DRICONV',  XDRICONV)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRCONV*3.6E6)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPRCONV*3.6E6)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PACCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPACCONV*1.0E3)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPACCONV*1.0E3)
 !
   CALL FIND_FIELD_ID_FROM_MNHNAME('PRSCONV',IID,IRESP)
   TZFIELD = TFIELDLIST(IID)
   TZFIELD%CUNITS = 'mm hour-1'
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPRSCONV*3.6E6)
+  CALL IO_Field_write(TPFILE,TZFIELD,XPRSCONV*3.6E6)
 !
   IF ( LCH_CONV_LINOX ) THEN
-    CALL IO_WRITE_FIELD(TPFILE,'IC_RATE',    XIC_RATE)
-    CALL IO_WRITE_FIELD(TPFILE,'CG_RATE',    XCG_RATE)
-    CALL IO_WRITE_FIELD(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
-    CALL IO_WRITE_FIELD(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
+    CALL IO_Field_write(TPFILE,'IC_RATE',    XIC_RATE)
+    CALL IO_Field_write(TPFILE,'CG_RATE',    XCG_RATE)
+    CALL IO_Field_write(TPFILE,'IC_TOTAL_NB',XIC_TOTAL_NUMBER)
+    CALL IO_Field_write(TPFILE,'CG_TOTAL_NB',XCG_TOTAL_NUMBER)
   END IF
 !
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
@@ -1571,31 +1571,31 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C2R2BEG, NSV_C2R2END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_C1R3BEG, NSV_C1R3END
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_ELECBEG, NSV_ELECEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_PPBEG, NSV_PPEND
       WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
 #ifdef MNH_FOREFIRE
     IF (LFOREFIRE) THEN
@@ -1603,7 +1603,7 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
         WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
 #endif
@@ -1612,14 +1612,14 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
       IF (LORILAM) THEN
         DO JSV = NSV_AERBEG, NSV_AEREND
           TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-          CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+          CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
         END DO
       END IF
 ! linox scalar variables
@@ -1628,26 +1628,26 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
         TZFIELD%CMNHNAME   = 'DSVCONV_LINOX'
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
       END DO
     END IF
     DO JSV = NSV_LGBEG, NSV_LGEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_DSTBEG, NSV_DSTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
     DO JSV = NSV_SLTBEG, NSV_SLTEND
       TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
     END DO
   END IF
 !
@@ -1662,12 +1662,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRC*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRC*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRC',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRC*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRC*1.0E3)
 !
   ENDIF
   ENDIF
@@ -1677,12 +1677,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINDEP*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINDEP*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACDEP',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACDEP*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACDEP*1.0E3)
 !
   ENDIF
   ENDIF
@@ -1692,15 +1692,15 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRR*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRR*3.6E6)
 !
-    CALL IO_WRITE_FIELD(TPFILE,'INPRR3D',XINPRR3D)
-    CALL IO_WRITE_FIELD(TPFILE,'EVAP3D', XEVAP3D)
+    CALL IO_Field_write(TPFILE,'INPRR3D',XINPRR3D)
+    CALL IO_Field_write(TPFILE,'EVAP3D', XEVAP3D)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRR',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRR*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRR*1.0E3)
 !
   ENDIF
   ENDIF
@@ -1710,12 +1710,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRS*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRS*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRS',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRS*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRS*1.0E3)
   END IF
   END IF
 !
@@ -1724,12 +1724,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRG*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRG*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRG',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRG*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRG*1.0E3)
   END IF
   END IF
 !
@@ -1738,12 +1738,12 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XINPRH*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,XINPRH*3.6E6)
 !
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRH',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XACPRH*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,XACPRH*1.0E3)
   ENDIF
   ENDIF
 !
@@ -1756,7 +1756,7 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('INPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm hour-1'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D*3.6E6)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D*3.6E6)
 !
     ZWORK2D = XACPRR + XACPRS
     IF (SIZE(XINPRG) /= 0 ) ZWORK2D = ZWORK2D + XACPRG
@@ -1765,7 +1765,7 @@ IF (CPROGRAM /= 'IDEAL') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('ACPRT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CUNITS = 'mm'
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D*1.0E3)
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D*1.0E3)
   END IF
   END IF
 !
@@ -1784,7 +1784,7 @@ IF(LBLOWSNOW) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 3
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
       ZWORK2D(:,:) = 0.
       DO JK = IKB,IKE
         ZWORK2D(:,:) = ZWORK2D(:,:)+XSNWSUBL3D(:,:,JK) * &
@@ -1802,7 +1802,7 @@ IF(LBLOWSNOW) THEN
       TZFIELD%NTYPE      = TYPEREAL
       TZFIELD%NDIMS      = 2
       TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZWORK2D(:,:))
+      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D(:,:))
     END IF
   END IF
 ENDIF
@@ -1812,7 +1812,7 @@ ENDIF
 !
 IF (LFORCING) THEN
 !
-  CALL IO_WRITE_FIELD(TPFILE,'FRC',NFRC)
+  CALL IO_Field_write(TPFILE,'FRC',NFRC)
 !
   DO JT=1,NFRC
 !
@@ -1828,7 +1828,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TDTFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,TDTFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'UFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1840,7 +1840,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XUFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'VFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1852,7 +1852,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'WFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1864,7 +1864,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XWFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XWFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'THFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1876,7 +1876,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'RVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1888,7 +1888,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1900,7 +1900,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDRVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1912,7 +1912,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDRVFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GXTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1924,7 +1924,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGXTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGXTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'GYTHFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1936,7 +1936,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XGYTHFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XGYTHFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'PGROUNDFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1948,7 +1948,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XPGROUNDFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XPGROUNDFRC(JT))
 !
     TZFIELD%CMNHNAME   = 'TENDUFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1960,7 +1960,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDUFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDUFRC(:,JT))
 !
     TZFIELD%CMNHNAME   = 'TENDVFRC'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -1972,7 +1972,7 @@ IF (LFORCING) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 1
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTENDVFRC(:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTENDVFRC(:,JT))
 !
   END DO
 !
@@ -1992,7 +1992,7 @@ IF ( L2D_ADV_FRC ) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NADVFRC)
+  CALL IO_Field_write(TPFILE,TZFIELD,NADVFRC)
 !
   DO JT=1,NADVFRC
 !
@@ -2008,7 +2008,7 @@ IF ( L2D_ADV_FRC ) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TDTADVFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,TDTADVFRC(JT))
 !                                                                
     TZFIELD%CMNHNAME   = 'TH_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2020,7 +2020,7 @@ IF ( L2D_ADV_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDTHFRC(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XDTHFRC(:,:,:,JT))
 !    
     TZFIELD%CMNHNAME   = 'Q_ADV'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2032,7 +2032,7 @@ IF ( L2D_ADV_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDRVFRC(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XDRVFRC(:,:,:,JT))
 !
   ENDDO
 ENDIF
@@ -2049,7 +2049,7 @@ IF ( L2D_REL_FRC ) THEN
   TZFIELD%NTYPE      = TYPEINT
   TZFIELD%NDIMS      = 0
   TZFIELD%LTIMEDEP   = .FALSE.
-  CALL IO_WRITE_FIELD(TPFILE,TZFIELD,NRELFRC)
+  CALL IO_Field_write(TPFILE,TZFIELD,NRELFRC)
 !
   DO JT=1,NRELFRC
 !
@@ -2065,7 +2065,7 @@ IF ( L2D_REL_FRC ) THEN
     TZFIELD%NTYPE      = TYPEDATE
     TZFIELD%NDIMS      = 0
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,TDTRELFRC(JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,TDTRELFRC(JT))
 !                                                                
     TZFIELD%CMNHNAME   = 'TH_REL'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2077,7 +2077,7 @@ IF ( L2D_REL_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XTHREL(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XTHREL(:,:,:,JT))
 !    
     TZFIELD%CMNHNAME   = 'Q_REL'//YFRC
     TZFIELD%CSTDNAME   = ''
@@ -2089,7 +2089,7 @@ IF ( L2D_REL_FRC ) THEN
     TZFIELD%NTYPE      = TYPEREAL
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XRVREL(:,:,:,JT))
+    CALL IO_Field_write(TPFILE,TZFIELD,XRVREL(:,:,:,JT))
 !
   ENDDO
 ENDIF
@@ -2097,11 +2097,11 @@ ENDIF
 !*       1.11bis   Eddy Fluxes variables    ! Modif PP
 !
 IF ( LTH_FLX ) THEN
-   CALL IO_WRITE_FIELD(TPFILE,'VT_FLX',XVTH_FLUX_M)
-   CALL IO_WRITE_FIELD(TPFILE,'WT_FLX',XWTH_FLUX_M)
+   CALL IO_Field_write(TPFILE,'VT_FLX',XVTH_FLUX_M)
+   CALL IO_Field_write(TPFILE,'WT_FLX',XWTH_FLUX_M)
 END IF
 !
-IF ( LUV_FLX) CALL IO_WRITE_FIELD(TPFILE,'VU_FLX',XVU_FLUX_M)
+IF ( LUV_FLX) CALL IO_Field_write(TPFILE,'VU_FLX',XVU_FLUX_M)
 !
 !*       1.12   Balloon variables
 !
@@ -2119,36 +2119,36 @@ IF ( CPROGRAM=='REAL  ' ) THEN
 !
 !             i) Total fields (TOT=BASIC+TOTDIS)
 !
-      CALL IO_WRITE_FIELD(TPFILE,'UT15',   XUTOT)
-      CALL IO_WRITE_FIELD(TPFILE,'VT15',   XVTOT)
-      CALL IO_WRITE_FIELD(TPFILE,'TEMPTOT',XTTOT)
-      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESTOT',XPTOT)
-      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMTOT', XQTOT)
+      CALL IO_Field_write(TPFILE,'UT15',   XUTOT)
+      CALL IO_Field_write(TPFILE,'VT15',   XVTOT)
+      CALL IO_Field_write(TPFILE,'TEMPTOT',XTTOT)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_Field_write(TPFILE,'PRESTOT',XPTOT)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_Field_write(TPFILE,'HUMTOT', XQTOT)
 !
 !             ii) Environmental fields (ENV=TOT-VORDIS)
 !
-      CALL IO_WRITE_FIELD(TPFILE,'UT16',   XUENV)
-      CALL IO_WRITE_FIELD(TPFILE,'VT16',   XVENV)
-      CALL IO_WRITE_FIELD(TPFILE,'TEMPENV',XTENV)
-      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESENV',XPENV)
-      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMENV', XQENV)
+      CALL IO_Field_write(TPFILE,'UT16',   XUENV)
+      CALL IO_Field_write(TPFILE,'VT16',   XVENV)
+      CALL IO_Field_write(TPFILE,'TEMPENV',XTENV)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_Field_write(TPFILE,'PRESENV',XPENV)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_Field_write(TPFILE,'HUMENV', XQENV)
 !
     END IF
     IF (NDIAG_FILT >=1) THEN
 !
 !             iii) Basic (filtered) fields
 !
-      CALL IO_WRITE_FIELD(TPFILE,'UT17',   XUBASIC)
-      CALL IO_WRITE_FIELD(TPFILE,'VT17',   XVBASIC)
-      CALL IO_WRITE_FIELD(TPFILE,'TEMPBAS',XTBASIC)
-      IF (INDEX(CFILTERING,'P')/=0) CALL IO_WRITE_FIELD(TPFILE,'PRESBAS',XPBASIC)
-      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_WRITE_FIELD(TPFILE,'HUMBAS', XQBASIC)
+      CALL IO_Field_write(TPFILE,'UT17',   XUBASIC)
+      CALL IO_Field_write(TPFILE,'VT17',   XVBASIC)
+      CALL IO_Field_write(TPFILE,'TEMPBAS',XTBASIC)
+      IF (INDEX(CFILTERING,'P')/=0) CALL IO_Field_write(TPFILE,'PRESBAS',XPBASIC)
+      IF (INDEX(CFILTERING,'Q')/=0) CALL IO_Field_write(TPFILE,'HUMBAS', XQBASIC)
     END IF
     IF (NDIAG_FILT >=2) THEN
 !
 !             iv) Total disturbance tangential wind
 !
-      CALL IO_WRITE_FIELD(TPFILE,'VTDIS',XVTDIS)
+      CALL IO_Field_write(TPFILE,'VTDIS',XVTDIS)
 !
     END IF
 !
@@ -2169,7 +2169,7 @@ IF ( CPROGRAM=='REAL  ' ) THEN
       TZFIELD%CMNHNAME   = ADJUSTL(CDUMMY_2D(JSA))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_WRITE_FIELD(TPFILE,TZFIELD,XDUMMY_2D(:,:,JSA))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDUMMY_2D(:,:,JSA))
     END DO
   END IF
 !
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index a011479a3..b70fe68aa 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
@@ -67,7 +67,7 @@ END MODULE MODI_WRITE_PROFILER_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90
index 9a0430e09..d4851b5a3 100644
--- a/src/MNH/write_seriesn.f90
+++ b/src/MNH/write_seriesn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !########################
@@ -13,7 +13,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_SERIES_n(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),    INTENT(IN) :: TPDIAFILE    ! file to write
 !
@@ -67,14 +67,13 @@ END MODULE MODI_WRITE_SERIES_n
 !*    0. Declaration
 !     --------------
 ! 
-USE MODD_IO_ll,   ONLY: NGEN_VERB,TFILEDATA
+USE MODD_IO,      ONLY: NGEN_VERB, TFILEDATA
 USE MODD_LUNIT_n, ONLY: TLUOUT
 USE MODD_PARAMETERS
 USE MODD_SERIES
 USE MODD_SERIES_n
 !
 USE MODE_GATHER_ll
-USE MODE_IO_ll
 USE MODE_ll
 USE MODE_MSG
 !
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index 2a67c0fa1..92722fe09 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 2002-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !      ###########################
@@ -11,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE WRITE_STATION_n(TPDIAFILE)
 !
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
@@ -64,7 +64,7 @@ END MODULE MODI_WRITE_STATION_n
 !          ------------
 !
 USE MODD_CST
-USE MODD_IO_ll, ONLY: TFILEDATA
+USE MODD_IO,              ONLY: TFILEDATA
 USE MODD_LUNIT
 USE MODD_PARAMETERS
 !
diff --git a/src/MNH/write_surf_mnh.f90 b/src/MNH/write_surf_mnh.f90
index 7d54e17b0..2fb2021b5 100644
--- a/src/MNH/write_surf_mnh.f90
+++ b/src/MNH/write_surf_mnh.f90
@@ -171,15 +171,15 @@ END MODULE MODE_WRITE_SURF_MNH_TOOLS
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF,          ONLY: CPROGRAM
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
+USE MODD_CONF,           ONLY: CPROGRAM
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
 USE MODD_GRID
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
+USE MODD_IO,             ONLY: TFILE_SURFEX
 !
 IMPLICIT NONE
 !
@@ -209,7 +209,7 @@ IF( ( HREC=='LAT0' .OR. HREC=='LON0' .OR. HREC=='RPK' .OR. HREC=='BETA'  &
 ELSE
   !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEREAL,0,'WRITE_SURFX0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,PFIELD,KRESP)
   !
   IF (TRIM(CPROGRAM)=='PGD') THEN
     !Store these variables (necessary for PREP_PGD program when writing netCDF files)
@@ -282,15 +282,15 @@ END SUBROUTINE WRITE_SURFX0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
+USE MODE_FIELD,          ONLY: FIND_FIELD_ID_FROM_MNHNAME,TFIELDDATA,TFIELDLIST,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_TOOLS_ll
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
 USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
 USE MODD_GRID_n,        ONLY: XXHAT, XYHAT
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
+USE MODD_IO,            ONLY: TFILE_SURFEX
 USE MODD_IO_SURF_MNH,   ONLY :NMASK, CMASK,                          &
                               NIU, NJU, NIB, NJB, NIE, NJE,          &
                               NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
@@ -436,11 +436,11 @@ IF (      (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CDIR  = '--'
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
   END IF
   IF (HDIR=='H') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('XHAT',IID,IRESP)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IIU-NHALO),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IIU-NHALO),KRESP)
     IF (.NOT. (ASSOCIATED(XXHAT))) THEN
       !Store XXHAT if not yet done (necessary for PREP_PGD program when writing netCDF files)
       ALLOCATE(XXHAT(IIU-2*NHALO))
@@ -467,11 +467,11 @@ ELSE IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP)
     TZFIELD = TFIELDLIST(IID)
     TZFIELD%CDIR  = '--'
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZW1D(:),KRESP)
   END IF
   IF (HDIR=='H') THEN
     CALL FIND_FIELD_ID_FROM_MNHNAME('YHAT',IID,IRESP)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IJU-NHALO),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TFIELDLIST(IID),ZW1D(1+NHALO:IJU-NHALO),KRESP)
     IF (.NOT. (ASSOCIATED(XYHAT))) THEN
       !Store XYHAT if not yet done (necessary for PREP_PGD program when writing netCDF files)
       ALLOCATE(XYHAT(IJU-2*NHALO))
@@ -481,13 +481,13 @@ ELSE IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
   DEALLOCATE(ZW1D)
 ELSE IF (HDIR=='H') THEN
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO),KRESP)
 ELSE IF (HDIR=='A') THEN
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(:,:),KRESP)
 ELSE
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,1,'WRITE_SURFX1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PFIELD(:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,PFIELD(:),KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -545,20 +545,20 @@ END SUBROUTINE WRITE_SURFX1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG,TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPELOG,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_TOOLS_ll
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_DATA_COVER_PAR,ONLY : JPCOVER
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY :NMASK, CMASK,                          &
-                              NIU, NJU, NIB, NJB, NIE, NJE,          &
-                              NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
-                              NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
-USE MODD_PARAMETERS,    ONLY: XUNDEF, JPHEXT
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_DATA_COVER_PAR, ONLY: JPCOVER
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK,                          &
+                               NIU, NJU, NIB, NJB, NIE, NJE,          &
+                               NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
+                               NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
+USE MODD_PARAMETERS,     ONLY: XUNDEF, JPHEXT
 !
 USE MODI_GET_SURF_UNDEF
 USE MODI_UNPACK_1D_2D
@@ -648,7 +648,7 @@ TZFIELD%NGRID      = 0
 TZFIELD%NTYPE      = TYPELOG
 TZFIELD%NDIMS      = 0
 TZFIELD%LTIMEDEP   = .FALSE.
-CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,GCOVER_PACKED,KRESP)
+CALL IO_Field_write(TFILE_SURFEX,TZFIELD,GCOVER_PACKED,KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE ( YMSG, '( I5 )' ) KRESP
@@ -682,12 +682,12 @@ IF (.NOT. GCOVER_PACKED) THEN
     TZFIELD%CCOMMENT   = 'X_Y_'//TRIM(YREC)
     IF (OFLAG(JL2)) THEN
       ICOVER=ICOVER+1
-      CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,ICOVER),KRESP)
+      CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,ICOVER),KRESP)
     END IF
   END DO
 ELSE 
   CALL PREPARE_METADATA_WRITE_SURF(HREC,YDIR,HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2COV_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK3D(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
 END IF
 !
 DEALLOCATE(ZWORK3D)
@@ -746,20 +746,20 @@ END SUBROUTINE WRITE_SURFX2COV_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEREAL
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_TOOLS_ll
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_DATA_COVER_PAR,ONLY : JPCOVER
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY :NMASK, CMASK,                          &
-                              NIU, NJU, NIB, NJB, NIE, NJE,          &
-                              NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
-                              NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
-USE MODD_PARAMETERS,    ONLY: XUNDEF
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_DATA_COVER_PAR, ONLY: JPCOVER
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK,                          &
+                               NIU, NJU, NIB, NJB, NIE, NJE,          &
+                               NIU_ALL, NJU_ALL, NIB_ALL, NJB_ALL,    &
+                               NIE_ALL, NJE_ALL, NMASK_ALL, NHALO
+USE MODD_PARAMETERS,     ONLY: XUNDEF
 !
 USE MODI_GET_SURF_UNDEF
 USE MODI_UNPACK_1D_2D
@@ -827,11 +827,11 @@ IF (HDIR=='H' .OR. HDIR=='A') THEN
 !
   IF (HDIR=='H') THEN
     CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2_MNH',TZFIELD)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(1+NHALO:IIU-NHALO,1+NHALO:IJU-NHALO,:),KRESP)
   END IF
   IF (HDIR=='A') THEN
     CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,3,'WRITE_SURFX2_MNH',TZFIELD)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZWORK(:,:,:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZWORK(:,:,:),KRESP)
   END IF
 !
   DEALLOCATE(ZWORK)
@@ -842,7 +842,7 @@ ELSE IF (HDIR=='-') THEN
   WHERE (ZFIELD==ZUNDEF) ZFIELD=XUNDEF
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,4,TYPEREAL,2,'WRITE_SURFX2_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ZFIELD(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ZFIELD(:,:),KRESP)
 !
   DEALLOCATE(ZFIELD)
 END IF
@@ -897,15 +897,15 @@ END SUBROUTINE WRITE_SURFX2_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEINT
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NIU_ALL, NJU_ALL
-USE MODD_PARAMETERS,    ONLY: JPHEXT
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NIU_ALL, NJU_ALL
+USE MODD_PARAMETERS,     ONLY: JPHEXT
 !
 IMPLICIT NONE
 !
@@ -932,14 +932,14 @@ IF( (HREC=='IMAX' .OR. HREC=='JMAX' .OR. HREC=='KMAX') .AND.  &
 !
 ELSE IF (HREC=='VERSION' .OR. HREC=='BUG') THEN
   !Field is in fieldlist
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,HREC,KFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,HREC,KFIELD,KRESP)
 ELSE
   IFIELD = KFIELD
   IF (HREC=='IMAX') IFIELD = NIU_ALL-2*JPHEXT
   IF (HREC=='JMAX') IFIELD = NJU_ALL-2*JPHEXT
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEINT,0,'WRITE_SURFN0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,IFIELD,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -992,15 +992,15 @@ END SUBROUTINE WRITE_SURFN0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEINT
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NMASK, CMASK, &
-                              NIU, NJU, NIB, NJB, NIE, NJE
-USE MODD_PARAMETERS,    ONLY: NUNDEF
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK, &
+                               NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_PARAMETERS,     ONLY: NUNDEF
 !
 USE MODI_UNPACK_1D_2D
 !
@@ -1031,7 +1031,7 @@ CALL PRINT_MSG(NVERB_DEBUG,'IO','WRITE_SURFN1_MNH',TRIM(TFILE_SURFEX%CNAME)//':
 IF (HDIR=='-') THEN
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEINT,1,'WRITE_SURFN1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,KFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,KFIELD,KRESP)
 !
 ELSE IF (HDIR=='H') THEN
 !
@@ -1041,7 +1041,7 @@ ELSE IF (HDIR=='H') THEN
   CALL UNPACK_1D_2D(NMASK,KFIELD,IWORK(NIB:NIE,NJB:NJE))
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEINT,2,'WRITE_SURFN1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
 !
   DEALLOCATE(IWORK)
 END IF
@@ -1095,14 +1095,14 @@ END SUBROUTINE WRITE_SURFN1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPECHAR,TYPELOG
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPECHAR,TYPELOG
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NIU_ALL, NJU_ALL
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NIU_ALL, NJU_ALL
 !
 IMPLICIT NONE
 !
@@ -1130,7 +1130,7 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
     GCARTESIAN = .TRUE.
   END IF
   !
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,'CARTESIAN',GCARTESIAN,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,'CARTESIAN',GCARTESIAN,KRESP)
   !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
@@ -1140,7 +1140,7 @@ IF ( (CSTORAGE_TYPE=='PG' .OR. CSTORAGE_TYPE=='SU')  &
 END IF
 !
 CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPECHAR,0,'WRITE_SURFC0_MNH',TZFIELD)
-CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,HFIELD,KRESP)
+CALL IO_Field_write(TFILE_SURFEX,TZFIELD,HFIELD,KRESP)
 !
 IF (KRESP /=0) THEN
   WRITE ( YMSG, '( I5 )' ) KRESP
@@ -1191,15 +1191,15 @@ END SUBROUTINE WRITE_SURFC0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPEINT,TYPELOG
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPEINT,TYPELOG
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: NMASK, CMASK, &
-                              NIU, NJU, NIB, NJB, NIE, NJE
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: NMASK, CMASK, &
+                               NIU, NJU, NIB, NJB, NIE, NJE
 !
 USE MODI_UNPACK_1D_2D
 !
@@ -1235,7 +1235,7 @@ IF (HDIR=='-') THEN
     RETURN
   ELSE
     CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,1,'WRITE_SURFL1_MNH',TZFIELD)
-    CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,OFIELD(:),KRESP)
+    CALL IO_Field_write(TFILE_SURFEX,TZFIELD,OFIELD(:),KRESP)
   END IF
 !
 ELSE IF (HDIR=='H') THEN
@@ -1250,7 +1250,7 @@ ELSE IF (HDIR=='H') THEN
   WHERE(GWORK) IWORK = 1
 !
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'XY',HCOMMENT,4,TYPEINT,2,'WRITE_SURFL1_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,IWORK(:,:),KRESP)
   !
   DEALLOCATE(IWORK)
   DEALLOCATE(GWORK)
@@ -1306,14 +1306,14 @@ END SUBROUTINE WRITE_SURFL1_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_IO_WRITE_FIELD
-USE MODE_FIELD,         ONLY: TFIELDDATA,TYPELOG
+USE MODE_FIELD,          ONLY: TFIELDDATA,TYPELOG
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,        ONLY: CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
-USE MODD_IO_SURF_MNH,   ONLY: CMASK
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_IO_SURF_MNH,    ONLY: CMASK
 !
 IMPLICIT NONE
 !
@@ -1337,7 +1337,7 @@ IF( (CMASK /= 'FULL  ').AND. (HREC=='COVER') ) THEN
   RETURN
 ELSE
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPELOG,0,'WRITE_SURFL0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,OFIELD,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,OFIELD,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -1389,14 +1389,14 @@ END SUBROUTINE WRITE_SURFL0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,       ONLY: TFIELDDATA, TYPEDATE
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEDATE
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_IO_FILE
 USE MODE_MSG
 USE MODE_WRITE_SURF_MNH_TOOLS
 !
-USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
-USE MODD_IO_ll,         ONLY: TFILE_SURFEX
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
 USE MODD_TYPE_DATE
 !
 !
@@ -1432,7 +1432,7 @@ ELSE
   TZDATA%TIME  = PTIME
   !  
   CALL PREPARE_METADATA_WRITE_SURF(HREC,'--',HCOMMENT,0,TYPEDATE,0,'WRITE_SURFT0_MNH',TZFIELD)
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,TZDATA,KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,TZDATA,KRESP)
 END IF
 !
 IF (KRESP /=0) THEN
@@ -1483,13 +1483,13 @@ END SUBROUTINE WRITE_SURFT0_MNH
 !*      0.    DECLARATIONS
 !             ------------
 !
-USE MODE_FIELD,        ONLY: TFIELDDATA, TYPEINT, TYPEREAL
-USE MODE_FM
-USE MODE_FMWRIT
+USE MODE_FIELD,          ONLY: TFIELDDATA, TYPEINT, TYPEREAL
+use MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_IO_FILE
 USE MODE_MSG
 !
-USE MODD_IO_ll,        ONLY: TFILE_SURFEX
-USE MODD_CONF_n,       ONLY : CSTORAGE_TYPE
+USE MODD_IO,             ONLY: TFILE_SURFEX
+USE MODD_CONF_n,         ONLY: CSTORAGE_TYPE
 !
 !
 IMPLICIT NONE
@@ -1535,7 +1535,7 @@ ELSE
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,ITDATE(:,:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,ITDATE(:,:),KRESP)
   !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
@@ -1553,7 +1553,7 @@ ELSE
   TZFIELD%NDIMS      = 1
   TZFIELD%LTIMEDEP   = .FALSE.
   !
-  CALL IO_WRITE_FIELD(TFILE_SURFEX,TZFIELD,PTIME(:),KRESP)
+  CALL IO_Field_write(TFILE_SURFEX,TZFIELD,PTIME(:),KRESP)
 !
   IF (KRESP /=0) THEN
     WRITE ( YMSG, '( I5 )' ) KRESP
diff --git a/src/MNH/write_ts1d.f90 b/src/MNH/write_ts1d.f90
index a022f4a0a..f57d26eef 100644
--- a/src/MNH/write_ts1d.f90
+++ b/src/MNH/write_ts1d.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1995-2018 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !!    #############################
@@ -76,9 +76,8 @@
 !!    ------------------
 
 USE MODE_DATETIME
-USE MODE_FM,              ONLY: IO_FILE_CLOSE_ll,IO_FILE_OPEN_ll
-USE MODE_IO_MANAGE_STRUCT,ONLY: IO_FILE_ADD2LIST
-USE MODE_IO_ll
+USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
 USE MODE_GRIDPROJ
 USE MODE_ll
 !
@@ -88,7 +87,7 @@ USE MODD_NSV,             ONLY: NSV,NSV_CHEMBEG,NSV_CHEMEND,  &
 USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, LORILAM
 USE MODD_DYN_n,           ONLY: XTSTEP       ! time-step of the model
 USE MODD_DIM_n,           ONLY: NKMAX        ! # of points in Z of the physical grid
-USE MODD_IO_ll,           ONLY: TFILEDATA
+USE MODD_IO,           ONLY: TFILEDATA
 USE MODD_PARAMETERS,      ONLY: JPVEXT   ! vertical external points number
 USE MODD_GRID,      ONLY: XLATORI,XLONORI
 USE MODD_GRID_n,    ONLY: XXHAT,XYHAT,XZZ
@@ -230,8 +229,8 @@ DO JN=1,NBPROF
       (JINDEX >= 1).AND.(JINDEX <= IJU)) THEN  
   ! write picasso def-file
     IF (GSFIRSTCALL) THEN
-      CALL IO_FILE_ADD2LIST(TZFILE,YSIO1DDEF,'TXT','WRITE')
-      CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
+      CALL IO_File_add2list(TZFILE,YSIO1DDEF,'TXT','WRITE')
+      CALL IO_File_open(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
       ISIO1D = TZFILE%NLU
 
     ! write comment
@@ -274,12 +273,12 @@ DO JN=1,NBPROF
       END IF
     END DO
   
-    CALL IO_FILE_CLOSE_ll(TZFILE)
+    CALL IO_File_close(TZFILE)
     TZFILE => NULL()
 
     ! open picasso dat-file
-    CALL IO_FILE_ADD2LIST(TZFILE,YSIO1DDAT,'TXT','WRITE')
-    CALL IO_FILE_OPEN_ll(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
+    CALL IO_File_add2list(TZFILE,YSIO1DDAT,'TXT','WRITE')
+    CALL IO_File_open(TZFILE,HPOSITION='REWIND',HSTATUS='NEW')
     ISIO1D = TZFILE%NLU
 
     ! calculate ISSKIP
@@ -387,7 +386,7 @@ DO JN=1,NBPROF
     ENDDO
 
     IF ((CPROGRAM =='DIAG  ').AND.(LCHEMDIAG)) THEN
-      CALL IO_FILE_CLOSE_ll(TZFILE)
+      CALL IO_File_close(TZFILE)
       TZFILE => NULL()
     END IF
  
diff --git a/src/MNH/xy_to_latlon.f90 b/src/MNH/xy_to_latlon.f90
index e5e264332..49fa91ab6 100644
--- a/src/MNH/xy_to_latlon.f90
+++ b/src/MNH/xy_to_latlon.f90
@@ -54,29 +54,29 @@
 !!    no transfer of the file when closing   Dec. 09, 1996 (V.Masson)
 !!    + changes call to READ_HGRID
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
 !
-USE MODD_GRID      
-USE MODD_IO_ll,  ONLY: TFILEDATA
+USE MODD_GRID
+USE MODD_IO,               ONLY: TFILEDATA
 USE MODD_PGDDIM
 USE MODD_PGDGRID
 USE MODD_PARAMETERS
 USE MODD_LUNIT
 !
-USE MODE_FM
 USE MODE_GRIDPROJ
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 !
 USE MODI_INI_CST
 USE MODI_READ_HGRID
 !
-USE MODN_CONFIO, ONLY : NAM_CONFIO
+USE MODN_CONFIO,           ONLY: NAM_CONFIO
 !
 IMPLICIT NONE
 !
@@ -118,21 +118,21 @@ CALL INI_CST
 !
 !*    2.     Reading of namelist file
 !            ------------------------
-CALL INITIO_ll()
+CALL IO_Init()
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'XY2LATLON1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'XY2LATLON1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 INAM=TZNMLFILE%NLU
 READ(INAM,NAM_INIFILE)
 READ(INAM,NAM_CONFIO)
-CALL SET_CONFIO_ll()
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_Config_set()
+CALL IO_File_close(TZNMLFILE)
 !
 !*    1.     Opening of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_ADD2LIST(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2)
-CALL IO_FILE_OPEN_ll(TZINIFILE)
+CALL IO_File_add2list(TZINIFILE,TRIM(YINIFILE),'MNH','READ',KLFITYPE=2,KLFIVERB=2)
+CALL IO_File_open(TZINIFILE)
 !
 !*    2.     Reading of MESONH file
 !            ----------------------
@@ -142,7 +142,7 @@ CALL READ_HGRID(0,TZINIFILE,YNAME,YDAD,YSTORAGE_TYPE)
 !*    3.     Closing of MESONH file
 !            ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZINIFILE)
+CALL IO_File_close(TZINIFILE)
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 26370ed71..384239fd2 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -40,7 +40,7 @@
 !!  06/2016     (G.Delautier) phasage surfex 8
 !!    08/07/2016  P.Wautelet Removed MNH_NCWRIT define
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_FILE_ADD2LIST
+!  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
 !!
 !----------------------------------------------------------------------------
@@ -49,7 +49,7 @@
 !            -----------
 !
 USE MODD_CONF,   ONLY : CPROGRAM, L1D, L2D, LPACK
-USE MODD_IO_ll,  ONLY:  NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_IO,     ONLY:  NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
 USE MODD_LUNIT,  ONLY : TLUOUT0, TOUTDATAFILE
 USE MODD_PARAMETERS, ONLY : XUNDEF, NUNDEF, JPVEXT, JPHEXT, JPMODELMAX
 USE MODD_PARAM_n,     ONLY : CSURF
@@ -57,11 +57,11 @@ USE MODD_DIM_n,       ONLY : NIMAX, NJMAX
 USE MODD_CONF_n,   ONLY : CSTORAGE_TYPE
 !
 USE MODE_POS
-USE MODE_FM
-USE MODE_FMWRIT
-USE MODE_FMREAD
-USE MODE_IO_ll
-USE MODE_IO_MANAGE_STRUCT, ONLY : IO_FILE_ADD2LIST, IO_FILE_PRINT_LIST
+USE MODE_IO,               only: IO_Config_set, IO_Init
+USE MODE_IO_FIELD_READ,    only: IO_Field_read
+USE MODE_IO_FIELD_WRITE,   only: IO_Field_write, IO_Header_write
+USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -121,15 +121,15 @@ CALL INI_CST
 !*    1.      Set default names and parallelized I/O
 !             --------------------------------------
 !
-CALL INITIO_ll()
+CALL IO_Init()
 !
-CALL IO_FILE_ADD2LIST(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
-CALL IO_FILE_OPEN_ll(TLUOUT0)
+CALL IO_File_add2list(TLUOUT0,'OUTPUT_LISTING0','OUTPUTLISTING','WRITE')
+CALL IO_File_open(TLUOUT0)
 TFILE_OUTPUTLISTING => TLUOUT0
 ILUOUT0=TLUOUT0%NLU
 !
-CALL IO_FILE_ADD2LIST(TZNMLFILE,'PRE_ZOOM1.nam','NML','READ')
-CALL IO_FILE_OPEN_ll(TZNMLFILE)
+CALL IO_File_add2list(TZNMLFILE,'PRE_ZOOM1.nam','NML','READ')
+CALL IO_File_open(TZNMLFILE)
 ILUNAM = TZNMLFILE%NLU
 !
 CPGDFILE  = 'PGDFILE'                         ! name of the input file
@@ -139,7 +139,7 @@ CALL POSNAM(ILUNAM,'NAM_PGDFILE',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_PGDFILE)
 CALL POSNAM(ILUNAM,'NAM_CONFIO',GFOUND,ILUOUT0)
 IF (GFOUND) READ(UNIT=ILUNAM,NML=NAM_CONFIO)
-CALL SET_CONFIO_ll()
+CALL IO_Config_set()
 !
 !------------------------------------------------------------------------------
 !
@@ -149,8 +149,8 @@ CALL SET_CONFIO_ll()
 !*    2.1     Open PGD file
 !             -------------
 !
-CALL IO_FILE_ADD2LIST(TZPGDFILE,TRIM(CPGDFILE),'PGD','READ',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=2,KLFIVERB=5)
-CALL IO_FILE_OPEN_ll(TZPGDFILE)
+CALL IO_File_add2list(TZPGDFILE,TRIM(CPGDFILE),'PGD','READ',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=2,KLFIVERB=5)
+CALL IO_File_open(TZPGDFILE)
 !
 !*    2.2     Reading of initial grid
 !             -----------------------
@@ -160,15 +160,15 @@ CALL READ_HGRID(1,TZPGDFILE,YMY_NAME,YDAD_NAME,YSTORAGE_TYPE)
 ! NIMAX, NJMAX: size of input domain
 ALLOCATE(ZZS1  (NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
 ALLOCATE(ZZSMT1(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
-CALL IO_READ_FIELD(TZPGDFILE,'ZS',ZZS1)
-CALL IO_READ_FIELD(TZPGDFILE,'ZSMT',ZZSMT1)
+CALL IO_Field_read(TZPGDFILE,'ZS',ZZS1)
+CALL IO_Field_read(TZPGDFILE,'ZSMT',ZZSMT1)
 !
 !*    2.3     Define subdomain
 !             ----------------
 !
 CALL SET_SUBDOMAIN(TZNMLFILE,TZPGDFILE,IXOR_DAD,IYOR_DAD,IXOR,IYOR,IDXRATIO,IDYRATIO)
 !
-CALL IO_FILE_CLOSE_ll(TZNMLFILE)
+CALL IO_File_close(TZNMLFILE)
 !
 ! NIMAX, NJMAX: size of output domain
 !
@@ -195,16 +195,16 @@ IF ( (LEN_TRIM(YZOOMFILE) == 0) .OR. (ADJUSTL(YZOOMFILE) == ADJUSTL(CPGDFILE)) )
   YZOOMFILE=ADJUSTL(ADJUSTR(CPGDFILE)//'.z'//ADJUSTL(YZOOMNBR))
 END IF
 !
-CALL IO_FILE_ADD2LIST(TZZOOMFILE,TRIM(YZOOMFILE),'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5)
+CALL IO_File_add2list(TZZOOMFILE,TRIM(YZOOMFILE),'PGD','WRITE',KLFINPRAR=INT(1,KIND=LFI_INT),KLFITYPE=1,KLFIVERB=5)
 !PW: TODO: points to dad file (if existing) ! TZZOOMFILE%TDADFILE =>
 !
-CALL IO_FILE_OPEN_ll(TZZOOMFILE)
+CALL IO_File_open(TZZOOMFILE)
 CALL WRITE_HGRID(1,TZZOOMFILE)
 !
 !*    2.5     Preparation of surface physiographic fields
 !             -------------------------------------------
 !
-CALL IO_READ_FIELD(TZPGDFILE,'SURF',CSURF)
+CALL IO_Field_read(TZPGDFILE,'SURF',CSURF)
 !
 !
 IF (CSURF=='EXTE') THEN
@@ -224,26 +224,26 @@ IF (CSURF=='EXTE') THEN
 ELSE
   ALLOCATE(ZZS2(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
   ZZS2(:,:)=ZZS1(IXOR:IXOR+NIMAX+2*JPHEXT-1,IYOR:IYOR+NJMAX+2*JPHEXT-1)
-  CALL IO_WRITE_FIELD(TZZOOMFILE,'ZS',ZZS2)
+  CALL IO_Field_write(TZZOOMFILE,'ZS',ZZS2)
 END IF
 !
 ALLOCATE(ZZSMT2(NIMAX+2*JPHEXT,NJMAX+2*JPHEXT))
 ZZSMT2(:,:)=ZZSMT1(IXOR:IXOR+NIMAX+2*JPHEXT-1,IYOR:IYOR+NJMAX+2*JPHEXT-1)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'ZSMT',ZZSMT2)
+CALL IO_Field_write(TZZOOMFILE,'ZSMT',ZZSMT2)
 !
 !*    2.7     Write configuration variables in the output file
 !             ------------------------------------------------
 !
-CALL IO_WRITE_HEADER(TZZOOMFILE)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'DXRATIO',IDXRATIO)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'DYRATIO',IDYRATIO)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'XOR',    IXOR_DAD)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'YOR',    IYOR_DAD)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'L1D',    L1D)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'L2D',    L2D)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'PACK',   LPACK)
-CALL IO_WRITE_FIELD(TZZOOMFILE,'SURF',   CSURF)
-CALL IO_FILE_CLOSE_ll(TZZOOMFILE)
+CALL IO_Header_write(TZZOOMFILE)
+CALL IO_Field_write(TZZOOMFILE,'DXRATIO',IDXRATIO)
+CALL IO_Field_write(TZZOOMFILE,'DYRATIO',IDYRATIO)
+CALL IO_Field_write(TZZOOMFILE,'XOR',    IXOR_DAD)
+CALL IO_Field_write(TZZOOMFILE,'YOR',    IYOR_DAD)
+CALL IO_Field_write(TZZOOMFILE,'L1D',    L1D)
+CALL IO_Field_write(TZZOOMFILE,'L2D',    L2D)
+CALL IO_Field_write(TZZOOMFILE,'PACK',   LPACK)
+CALL IO_Field_write(TZZOOMFILE,'SURF',   CSURF)
+CALL IO_File_close(TZZOOMFILE)
 !
 !*    2.8     Shift to new PGD file
 !             ---------------------
@@ -255,16 +255,16 @@ CPGDFILE = YZOOMFILE
 !*    3.     CLOSE PARALLELIZED I/O
 !            ----------------------
 !
-CALL IO_FILE_CLOSE_ll(TZPGDFILE)
+CALL IO_File_close(TZPGDFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_FILE_PRINT_LIST()
+IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
 !
 WRITE(ILUOUT0,*)
 WRITE(ILUOUT0,*) '***************************'
 WRITE(ILUOUT0,*) '* ZOOM_PGD ends correctly *'
 WRITE(ILUOUT0,*) '***************************'
 !
-CALL IO_FILE_CLOSE_ll(TLUOUT0)
+CALL IO_File_close(TLUOUT0)
 !
 CALL END_PARA_ll(IINFO_ll)
 
diff --git a/src/MNH/zsmt_pgd.f90 b/src/MNH/zsmt_pgd.f90
index fc93dfacc..4fa76acf1 100644
--- a/src/MNH/zsmt_pgd.f90
+++ b/src/MNH/zsmt_pgd.f90
@@ -2,6 +2,7 @@
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
 !     ######################
       MODULE MODI_ZSMT_PGD
 !     ######################
@@ -10,7 +11,7 @@ INTERFACE
 !
       SUBROUTINE ZSMT_PGD(TPFILE,KZSFILTER,KSLEVE,KLOCZSFILTER,OHSLOP,PHSLOP,PSMOOTH_ZS)
 !
-USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_IO, ONLY: TFILEDATA
 !
 TYPE(TFILEDATA),     INTENT(IN)  :: TPFILE       ! File characteristics
 INTEGER,             INTENT(IN)  :: KZSFILTER    ! number of iterations for fine orography
@@ -65,12 +66,12 @@ END MODULE MODI_ZSMT_PGD
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_IO_ll,      ONLY : TFILEDATA
+USE MODD_IO,         ONLY : TFILEDATA
 USE MODD_PARAMETERS, ONLY : JPHEXT, XUNDEF
 !
 USE MODI_MNHGET_SURF_PARAM_n
-USE MODE_FMREAD
-USE MODE_FMWRIT
+USE MODE_IO_FIELD_READ,  only: IO_Field_read
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
 USE MODE_ll        , ONLY : GET_DIM_EXT_ll , ADD2DFIELD_ll , CLEANLIST_ll , UPDATE_HALO_ll
 USE MODD_ARGSLIST_ll, ONLY : LIST_ll 
 USE MODI_SUM_ll
@@ -149,12 +150,12 @@ ALLOCATE(ZSMOOTH_ZSINI(IIU,IJU))
 ALLOCATE(ZXHAT(IIU))
 ALLOCATE(ZYHAT(IJU))
 !
-CALL IO_READ_FIELD(TPFILE,'XHAT',ZXHAT)
-CALL IO_READ_FIELD(TPFILE,'YHAT',ZYHAT)
+CALL IO_Field_read(TPFILE,'XHAT',ZXHAT)
+CALL IO_Field_read(TPFILE,'YHAT',ZYHAT)
 
 !PW: bug/TODO: read a field in a file opened in WRITE mode
-!There is a test in IO_READ_FIELD_BYFIELD_X2 to allow this if TPFILE%CMODE='LFICDF4'
-CALL IO_READ_FIELD(TPFILE,'ZS',ZZS)
+!There is a test in IO_Field_read_BYFIELD_X2 to allow this if TPFILE%CMODE='LFICDF4'
+CALL IO_Field_read(TPFILE,'ZS',ZZS)
 !
 DO JI=1,JPHEXT
 ZZS(JI,:) = ZZS(IIB,:)
@@ -341,7 +342,7 @@ IF(OHSLOP) THEN
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  TZFIELD%LTIMEDEP   = .FALSE.
- CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSLOPEX)
+ CALL IO_Field_write(TPFILE,TZFIELD,ZSLOPEX)
  !
  TZFIELD%CMNHNAME   = 'ZSLOPEY'
  TZFIELD%CSTDNAME   = ''
@@ -353,7 +354,7 @@ IF(OHSLOP) THEN
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  TZFIELD%LTIMEDEP   = .FALSE.
- CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSLOPEY)
+ CALL IO_Field_write(TPFILE,TZFIELD,ZSLOPEY)
  !
  TZFIELD%CMNHNAME   = 'ZS_FILTR'
  TZFIELD%CSTDNAME   = ''
@@ -365,7 +366,7 @@ IF(OHSLOP) THEN
  TZFIELD%NTYPE      = TYPEREAL
  TZFIELD%NDIMS      = 2
  TZFIELD%LTIMEDEP   = .FALSE.
- CALL IO_WRITE_FIELD(TPFILE,TZFIELD,ZSMOOTH_ZSINI-ZFINE_ZS)
+ CALL IO_Field_write(TPFILE,TZFIELD,ZSMOOTH_ZSINI-ZFINE_ZS)
 END IF
 !-------------------------------------------------------------------------------
 !
@@ -373,8 +374,8 @@ END IF
 !              ---------------------------------------
 !
 !
-CALL IO_WRITE_FIELD(TPFILE,'ZS',  ZFINE_ZS)
-CALL IO_WRITE_FIELD(TPFILE,'ZSMT',ZSLEVE_ZS)
+CALL IO_Field_write(TPFILE,'ZS',  ZFINE_ZS)
+CALL IO_Field_write(TPFILE,'ZSMT',ZSLEVE_ZS)
 !
 DEALLOCATE(ZZS)
 DEALLOCATE(ZFINE_ZS)
-- 
GitLab