diff --git a/src/LIB/SURCOUCHE/src/modd_field.f90 b/src/LIB/SURCOUCHE/src/modd_field.f90
index bdb77e321979fd6bbb624310f97b52f28510c6ec..b81b59f1f0354c2041f9908b0d3c7fb7230e0f3d 100644
--- a/src/LIB/SURCOUCHE/src/modd_field.f90
+++ b/src/LIB/SURCOUCHE/src/modd_field.f90
@@ -65,25 +65,26 @@ integer, parameter :: NMNHDIM_BUDGET_LES_TIME     = 24
 integer, parameter :: NMNHDIM_BUDGET_LES_AVG_TIME = 25
 integer, parameter :: NMNHDIM_BUDGET_LES_LEVEL    = 26
 integer, parameter :: NMNHDIM_BUDGET_LES_SV       = 27
+integer, parameter :: NMNHDIM_BUDGET_LES_PDF      = 28
 integer, parameter :: NMNHDIM_BUDGET_LES_MASK     = 100 ! This is not a true dimension
 
-integer, parameter :: NMNHDIM_SPECTRA_2PTS_NI     = 28
-integer, parameter :: NMNHDIM_SPECTRA_2PTS_NJ     = 29
-integer, parameter :: NMNHDIM_SPECTRA_SPEC_NI     = 30
-integer, parameter :: NMNHDIM_SPECTRA_SPEC_NJ     = 31
-integer, parameter :: NMNHDIM_SPECTRA_LEVEL       = 32
+integer, parameter :: NMNHDIM_SPECTRA_2PTS_NI     = 29
+integer, parameter :: NMNHDIM_SPECTRA_2PTS_NJ     = 30
+integer, parameter :: NMNHDIM_SPECTRA_SPEC_NI     = 31
+integer, parameter :: NMNHDIM_SPECTRA_SPEC_NJ     = 32
+integer, parameter :: NMNHDIM_SPECTRA_LEVEL       = 33
 
-integer, parameter :: NMNHDIM_SERIES_LEVEL        = 33
-integer, parameter :: NMNHDIM_SERIES_LEVEL_W      = 34
-integer, parameter :: NMNHDIM_SERIES_TIME         = 35  ! Time dimension for time series
+integer, parameter :: NMNHDIM_SERIES_LEVEL        = 34
+integer, parameter :: NMNHDIM_SERIES_LEVEL_W      = 35
+integer, parameter :: NMNHDIM_SERIES_TIME         = 36  ! Time dimension for time series
 
-integer, parameter :: NMNHDIM_FLYER_TIME          = 36  ! Time dimension for aircraft/balloon (dimension local to each flyer)
-integer, parameter :: NMNHDIM_PROFILER_TIME       = 37  ! Time dimension for profilers
-integer, parameter :: NMNHDIM_STATION_TIME        = 38  ! Time dimension for stations
+integer, parameter :: NMNHDIM_FLYER_TIME          = 37  ! Time dimension for aircraft/balloon (dimension local to each flyer)
+integer, parameter :: NMNHDIM_PROFILER_TIME       = 38  ! Time dimension for profilers
+integer, parameter :: NMNHDIM_STATION_TIME        = 39  ! Time dimension for stations
 
-integer, parameter :: NMNHDIM_PAIR                = 39  ! For values coming by pair (ie boundaries)
+integer, parameter :: NMNHDIM_PAIR                = 40  ! For values coming by pair (ie boundaries)
 
-integer, parameter :: NMNHDIM_LASTDIM_DIACHRO     = 39  ! Index of the last defined dimension for diachronic files
+integer, parameter :: NMNHDIM_LASTDIM_DIACHRO     = 40  ! Index of the last defined dimension for diachronic files
 
 integer, parameter :: NMNHDIM_BUDGET_NGROUPS      = 101 ! This is not a true dimension
 integer, parameter :: NMNHDIM_FLYER_PROC          = 102 ! This is not a true dimension
diff --git a/src/LIB/SURCOUCHE/src/modd_io.f90 b/src/LIB/SURCOUCHE/src/modd_io.f90
index 6291995025891bf291c480212bb98f796415d845..c8457cc2d32624a020d122c41cb318faa86a1d4c 100644
--- a/src/LIB/SURCOUCHE/src/modd_io.f90
+++ b/src/LIB/SURCOUCHE/src/modd_io.f90
@@ -46,12 +46,12 @@ LOGICAL, SAVE :: LLFIREAD   = .FALSE. ! TRUE will force LFI read (instead of Net
 LOGICAL, SAVE :: LVERB_OUTLST = .TRUE.  ! TRUE will PRINT_MSG in OUTPUT_LISTINGn files
 LOGICAL, SAVE :: LVERB_STDOUT = .FALSE. ! TRUE will also PRINT_MSG on standard output
 LOGICAL, SAVE :: LVERB_ALLPRC = .FALSE. ! FALSE: only process 0 do PRINT_MSG, TRUE: all processes
-INTEGER, SAVE :: NBUD_VERB        = NVERB_WARNING ! Verbosity level for budgets
+INTEGER, SAVE :: NBUD_VERB        = NVERB_INFO    ! Verbosity level for budgets
 INTEGER, SAVE :: NBUD_ABORT_LEVEL = NVERB_ERROR   ! Level of budget error necessary to force stop of application
-INTEGER, SAVE :: NIO_VERB        = NVERB_WARNING ! Verbosity level for IO
+INTEGER, SAVE :: NIO_VERB        = NVERB_INFO    ! Verbosity level for IO
 INTEGER, SAVE :: NIO_ABORT_LEVEL = NVERB_ERROR   ! Level of IO error necessary to force stop of application
 
-INTEGER, SAVE :: NGEN_VERB        = NVERB_WARNING ! Verbosity level for 'GEN' (generic) messages
+INTEGER, SAVE :: NGEN_VERB        = NVERB_INFO    ! Verbosity level for 'GEN' (generic) messages
 INTEGER, SAVE :: NGEN_ABORT_LEVEL = NVERB_ERROR   ! Level of 'GEN' error necessary to force stop of application
 
 CHARACTER(LEN=NDIRNAMELGTMAX) :: CIO_DIR = '' ! Directory for IO
diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90
index 363f282eb9f96565a7d59f6bfad5c0cb492cae2b..97466a414e1dbb88e5fb8746cb10d3e65706df1c 100644
--- a/src/LIB/SURCOUCHE/src/mode_field.f90
+++ b/src/LIB/SURCOUCHE/src/mode_field.f90
@@ -3046,9 +3046,8 @@ IDX = IDX+1
 !
 IF(IDX>MAXFIELDS) CALL ERR_INI_FIELD_LIST()
 TFIELDLIST(IDX)%CMNHNAME   = 'ACPRR'
-TFIELDLIST(IDX)%CSTDNAME   = 'rainfall_amount'
+TFIELDLIST(IDX)%CSTDNAME   = 'thickness_of_rainfall_amount'
 TFIELDLIST(IDX)%CLONGNAME  = 'ACPRR'
-!PW: TODO: CF-convention prefers 'kg m-2'
 TFIELDLIST(IDX)%CUNITS     = 'm'
 TFIELDLIST(IDX)%CDIR       = 'XY'
 TFIELDLIST(IDX)%CCOMMENT   = 'X_Y_ACcumulated Precipitation Rain Rate'
diff --git a/src/LIB/SURCOUCHE/src/mode_io_file.f90 b/src/LIB/SURCOUCHE/src/mode_io_file.f90
index 49dc8ef63e391999e9e479d0ae4ec0f729a747e4..c78973780f94f376e49a7249cbf2d26425da2760 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_file.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_file.f90
@@ -651,13 +651,13 @@ IF (TPFILE%LMASTER .AND. CPROGRAM/='LFICDF') THEN
     CASE(1)
       YCPIO='MESONH'
     CASE(2)
-      CALL PRINT_MSG(NVERB_INFO,'IO','IO_Transfer_list_addto','file '//TRIM(YFILEM)//' not transferred')
+      CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Transfer_list_addto','file '//TRIM(YFILEM)//' not transferred')
   END SELECT
 
   if (TPFILE%NLFITYPE==0 .or. TPFILE%NLFITYPE==1) then
     ICPT=ICPT+1
     WRITE (YCOMMAND,'(A," ",A," ",A," >> OUTPUT_TRANSFER",I3.3,"  2>&1 &")') YTRANS,YCPIO,TRIM(YFILEM),ICPT
-    CALL PRINT_MSG(NVERB_INFO,'IO','IO_Transfer_list_addto','YCOMMAND='//TRIM(YCOMMAND))
+    CALL PRINT_MSG(NVERB_DEBUG,'IO','IO_Transfer_list_addto','YCOMMAND='//TRIM(YCOMMAND))
     CALL SYSTEM_MNH(YCOMMAND)
   end if
 END IF
diff --git a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
index 9804348f8da7ba0f62912a75ce4861e77c93b6b6..477c389dbf6ffe6691029ff11a627e431b2e0a84 100644
--- a/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
+++ b/src/LIB/SURCOUCHE/src/mode_io_tools_nc4.f90
@@ -261,7 +261,7 @@ use modd_field,         only: NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NI_U, NMNHDIM_NJ_U
                               NMNHDIM_BUDGET_MASK_LEVEL, NMNHDIM_BUDGET_MASK_LEVEL_W,                           &
                               NMNHDIM_BUDGET_MASK_NBUMASK, NMNHDIM_BUDGET_TIME,                                 &
                               NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_AVG_TIME, NMNHDIM_BUDGET_LES_LEVEL,   &
-                              NMNHDIM_BUDGET_LES_SV,                                                            &
+                              NMNHDIM_BUDGET_LES_SV, NMNHDIM_BUDGET_LES_PDF,                                    &
                               NMNHDIM_SPECTRA_2PTS_NI, NMNHDIM_SPECTRA_2PTS_NJ,                                 &
                               NMNHDIM_SPECTRA_SPEC_NI, NMNHDIM_SPECTRA_SPEC_NJ, NMNHDIM_SPECTRA_LEVEL,          &
                               NMNHDIM_SERIES_LEVEL, NMNHDIM_SERIES_LEVEL_W,                                     &
@@ -270,7 +270,7 @@ use modd_field,         only: NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NI_U, NMNHDIM_NJ_U
                               NMNHDIM_ARAKAWA,                                                                  &
                               NMNHDIM_LASTDIM_NODIACHRO, NMNHDIM_LASTDIM_DIACHRO
 
-use modd_les,           only: nles_k, nspectra_k, xles_temp_mean_start, xles_temp_mean_step, xles_temp_mean_end
+use modd_les,           only: lles_pdf, nles_k, npdf, nspectra_k, xles_temp_mean_start, xles_temp_mean_step, xles_temp_mean_end
 use modd_les_n,         only: nles_times, nspectra_ni, nspectra_nj
 use modd_nsv,           only: nsv
 USE MODD_PARAMETERS_ll, ONLY: JPHEXT, JPVEXT
@@ -377,6 +377,9 @@ if ( tpfile%ctype == 'MNHDIACHRONIC' ) then
   !Dimension for the number of scalar variables
   if ( nsv > 0 ) call IO_Add_dim_nc4( tpfile, NMNHDIM_BUDGET_LES_SV, 'nsv', nsv )
 
+  !Dimension for the number of PDF
+  if ( lles_pdf ) call IO_Add_dim_nc4( tpfile, NMNHDIM_BUDGET_LES_PDF, 'npdf', npdf )
+
   !Dimensions for the number of horizontal wavelengths for non-local LES budgets (2 points correlations)
   if ( nspectra_ni > 0 ) call IO_Add_dim_nc4( tpfile, NMNHDIM_SPECTRA_2PTS_NI, 'nspectra_2pts_ni', nspectra_ni )
   if ( nspectra_nj > 0 .and. .not. l2d ) &
diff --git a/src/LIB/SURCOUCHE/src/mode_msg.f90 b/src/LIB/SURCOUCHE/src/mode_msg.f90
index c7164cb52ac4dba69e59d58de7fb3b23feb3574b..80d2f6677cf7209871081707050fbf5b14de918a 100644
--- a/src/LIB/SURCOUCHE/src/mode_msg.f90
+++ b/src/LIB/SURCOUCHE/src/mode_msg.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2017-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2017-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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,6 +11,7 @@
 !  P. Wautelet 02/07/2019: flush messages also for files opened with newunit (logical unit can be negative)
 !  P. Wautelet 17/01/2020: add 'BUD' category for Print_msg
 !  P. Wautelet 08/04/2020: add multiline Print_msg
+!  P. Wautelet 01/07/2021: add counters for the number of prints + subroutine Msg_stats
 !-----------------------------------------------------------------
 module mode_msg
 
@@ -23,6 +24,12 @@ integer, parameter :: NMSGLLINEMAX = 10  ! Maximum number of lines for a message
 
 character(len=NMSGLGTMAX), dimension(NMSGLLINEMAX) :: cmnhmsg = ''
 
+integer, save :: nfatal   = 0
+integer, save :: nerror   = 0
+integer, save :: nwarning = 0
+integer, save :: ninfo    = 0
+integer, save :: ndebug   = 0
+
 interface Print_msg
   module procedure Print_msg_1line, Print_msg_multi_cmnhmsg, Print_msg_multi
 end interface Print_msg
@@ -141,14 +148,19 @@ ilines = size( hmsg )
 SELECT CASE(KVERB)
   CASE(NVERB_FATAL)
     YPRE='FATAL:   '
+    nfatal = nfatal + 1
   CASE(NVERB_ERROR)
     YPRE='ERROR:   '
+    nerror = nerror + 1
   CASE(NVERB_WARNING)
     YPRE='WARNING: '
+    nwarning = nwarning + 1
   CASE(NVERB_INFO)
     YPRE='INFO:    '
+    ninfo = ninfo + 1
   CASE(NVERB_DEBUG)
     YPRE='DEBUG:   '
+    ndebug = ndebug + 1
   CASE DEFAULT
     IF (GWRITE_STDOUT) WRITE(UNIT=OUTPUT_UNIT,FMT=*) 'ERROR: PRINT_MSG: wrong verbosity level'
     IF (GWRITE_OUTLST) WRITE(UNIT=ILU,        FMT=*) 'ERROR: PRINT_MSG: wrong verbosity level'
@@ -256,4 +268,31 @@ END IF
 !
 end subroutine Print_msg_multi
 
+
+subroutine Msg_stats()
+
+character(len=10) :: ydebug
+character(len=10) :: yinfo
+character(len=10) :: ywarning
+character(len=10) :: yerror
+character(len=10) :: yfatal
+
+Write( ydebug,   '( I10 )' ) ndebug
+Write( yinfo,    '( I10 )' ) ninfo
+Write( ywarning, '( I10 )' ) nwarning
+Write( yerror,   '( I10 )' ) nerror
+Write( yfatal,   '( I10 )' ) nfatal
+
+Write( cmnhmsg(1), '( A )'      ) 'Number of calls to Print_msg (with actual printing):'
+Write( cmnhmsg(2), '( A, A10 )' ) '  Calls with level DEBUG:   ', ydebug
+Write( cmnhmsg(3), '( A, A10 )' ) '  Calls with level INFO:    ', yinfo
+Write( cmnhmsg(4), '( A, A10 )' ) '  Calls with level WARNING: ', ywarning
+Write( cmnhmsg(5), '( A, A10 )' ) '  Calls with level ERROR:   ', yerror
+Write( cmnhmsg(6), '( A, A10 )' ) '  Calls with level FATAL:   ', yfatal
+
+call Print_msg( NVERB_INFO, 'GEN', 'Msg_stats' )
+
+end subroutine Msg_stats
+
+
 end module mode_msg
diff --git a/src/MNH/call_rttov11.f90 b/src/MNH/call_rttov11.f90
index 8e69111883567834631b7ccbce85d926a4e8d862..e9eda58c83d726d4d3b27d595189f32abf9aadfd 100644
--- a/src/MNH/call_rttov11.f90
+++ b/src/MNH/call_rttov11.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2003-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
diff --git a/src/MNH/call_rttov13.f90 b/src/MNH/call_rttov13.f90
index 1ea5ca251092611145952dec6254defff741af6e..97ccf20af2a1a608ad00478b2f05046572cef425 100644
--- a/src/MNH/call_rttov13.f90
+++ b/src/MNH/call_rttov13.f90
@@ -1,6 +1,6 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2003-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt  
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
 !-----------------------------------------------------------------
 !    ########################
diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90
index 6e817aa0f12bc2c3c1aba44cdd08c812eabc000e..eee756dfbcdba0278206e33b4255e2cd1212b6c1 100644
--- a/src/MNH/ch_monitorn.f90
+++ b/src/MNH/ch_monitorn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
diff --git a/src/MNH/diag.f90 b/src/MNH/diag.f90
index 27d3244abd5f99a5aa06b83c1d033693ec57403b..4bfd2dc5e8e8453068b95e8dc0ae6f41c16faa3e 100644
--- a/src/MNH/diag.f90
+++ b/src/MNH/diag.f90
@@ -93,6 +93,7 @@
 !  P. Wautelet 28/03/2019: use MNHTIME for time measurement variables
 !  P. Wautelet 26/07/2019: bug correction: deallocate of zsea and ztown done too early
 !  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -141,10 +142,11 @@ USE MODD_TURB_n
 USE MODD_VAR_ll
 !
 USE MODE_DATETIME
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 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_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
 #ifdef MNH_IOLFI
 use mode_menu_diachro,     only: MENU_DIACHRO
@@ -203,7 +205,6 @@ LOGICAL:: GCLOUD_ONLY          ! conditionnal radiation computations for
                                 !      the only cloudy columns
 !
 INTEGER :: IIU, IJU, IKU
-INTEGER :: IINFO_ll               ! return code for _ll routines 
 REAL, DIMENSION(:,:),ALLOCATABLE          :: ZSEA,ZTOWN
 REAL, DIMENSION(:,:,:,:),ALLOCATABLE          :: ZWETDEPAER
 !
@@ -808,8 +809,6 @@ ZTIME2=ZTIME2-ZTIME0
 !WRITE(ILUOUT0,*) '|---------------------| -------------------|-------------------|'
 !
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
-!
 WRITE(ILUOUT0,*) ' '
 WRITE(ILUOUT0,*) '***************************** **************'
 WRITE(ILUOUT0,*) '*            EXIT  DIAG CORRECTLY          *'
@@ -817,13 +816,12 @@ WRITE(ILUOUT0,*) '**************************** ***************'
 !WRITE(ILUOUT0,*) '  (see time analysis in ',TRIM(TLUOUT0%CNAME),' )'
 WRITE(ILUOUT0,*) ' '
 !
-CALL IO_File_close(TLUOUT0)
 !-------------------------------------------------------------------------------
 !
 !*      10.    FINALIZE THE PARALLEL SESSION
 !              -----------------------------
 !
-CALL END_PARA_ll(IINFO_ll)
+CALL FINALIZE_MNH()
 !
 !-------------------------------------------------------------------------------
 END PROGRAM DIAG
diff --git a/src/MNH/finalize_mnh.f90 b/src/MNH/finalize_mnh.f90
new file mode 100644
index 0000000000000000000000000000000000000000..faabb9972201b09d35d1020b56ef477597ee9150
--- /dev/null
+++ b/src/MNH/finalize_mnh.f90
@@ -0,0 +1,73 @@
+!MNH_LIC Copyright 2021-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
+!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
+!MNH_LIC for details. version 1.
+!-----------------------------------------------------------------
+! Author:
+!  P. Wautelet 06/07/2021
+! Modifications:
+!
+!-----------------------------------------------------------------
+MODULE MODE_FINALIZE_MNH
+
+IMPLICIT NONE
+
+CONTAINS
+
+SUBROUTINE FINALIZE_MNH
+  USE MODD_CONF,             only: LCHECK, NMODEL
+  USE MODD_IO,               only: NIO_VERB, NVERB_DEBUG
+  USE MODD_LUNIT,            only: TLUOUT0
+  USE MODD_LUNIT_n,          only: LUNIT_MODEL
+  USE MODD_MNH_SURFEX_n,     only: SURFEX_DEALLO_LIST
+#ifdef CPLOASIS
+  USE MODD_SFX_OASIS,        only: LOASIS
+#endif
+
+  USE MODE_INIT_ll,          only: END_PARA_ll
+  USE MODE_IO_FILE,          only: IO_File_close
+  USE MODE_IO_MANAGE_STRUCT, only: IO_Filelist_print
+  USE MODE_MPPDB,            only: MPPDB_BARRIER
+  USE MODE_MSG,              only: MSG_STATS
+
+#ifdef CPLOASIS
+  USE MODI_SFX_OASIS_END
+#endif
+
+  IMPLICIT NONE
+
+  INTEGER :: IRESP
+  INTEGER :: JMODEL
+
+  !Print the list of all files and some statistics on them
+  IF ( NIO_VERB >= NVERB_DEBUG ) CALL IO_Filelist_print()
+
+  !Print the number of printed messages via Print_msg
+  CALL MSG_STATS()
+
+  !Close all the opened 'output listing' files
+  IF ( TLUOUT0%LOPENED ) CALL IO_File_close(TLUOUT0)
+  DO JMODEL = 1, NMODEL
+    IF ( ASSOCIATED( LUNIT_MODEL(JMODEL)%TLUOUT ) ) THEN
+      IF ( LUNIT_MODEL(JMODEL)%TLUOUT%LOPENED ) CALL IO_File_close( LUNIT_MODEL(JMODEL)%TLUOUT)
+    END IF
+  END DO
+
+  !Finalize the parallel libraries
+  IF ( LCHECK ) THEN
+    CALL MPPDB_BARRIER()
+  ELSE
+    CALL END_PARA_ll( IRESP )
+#ifdef CPLOASIS
+    IF ( LOASIS ) THEN
+      CALL SFX_OASIS_END()
+    END IF
+#endif
+  END IF
+
+  !Free SURFEX structures if necessary
+  CALL SURFEX_DEALLO_LIST()
+
+END SUBROUTINE FINALIZE_MNH
+
+END MODULE MODE_FINALIZE_MNH
diff --git a/src/MNH/forcing.f90 b/src/MNH/forcing.f90
index 04a4a91cd280cb170667db196631e49d3b3d9d88..14a65ad60ebc6668b4a38851dc32ab1b06259041 100644
--- a/src/MNH/forcing.f90
+++ b/src/MNH/forcing.f90
@@ -171,8 +171,8 @@ USE MODD_TIME
 use mode_budget,     only: Budget_store_init, Budget_store_end
 USE MODE_DATETIME
 USE MODE_GATHER_ll
-USE MODE_MSG
 USE MODE_ll
+USE MODE_MSG
 USE MODE_REPRO_SUM
 !
 USE MODI_GET_HALO
diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90
index a0776d1feb3532f5b459764fa81ec0c13369bdd3..45d7b9f9ac85e947fda34a09e56fe335c79d1d1c 100644
--- a/src/MNH/ini_lesn.f90
+++ b/src/MNH/ini_lesn.f90
@@ -39,6 +39,7 @@
 !  P. Wautelet 12/08/2020: bugfix: use NUNDEF instead of XUNDEF for integer variables
 !  P. Wautelet 04/01/2021: bugfix: nles_k was used instead of nspectra_k for a loop index
 !  P. Wautelet 30/03/2021: budgets: LES cartesian subdomain limits are defined in the physical domain
+!  P. Wautelet 09/07/2021: bugfix: altitude levels are on the correct grid position (mass point)
 ! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
@@ -72,6 +73,7 @@ USE MODD_CONDSAMP, ONLY : LCONDSAMP
 !
 USE MODI_INI_LES_CART_MASKn
 USE MODI_COEF_VER_INTERP_LIN
+USE MODI_SHUMAN
 !
 IMPLICIT NONE
 !
@@ -365,7 +367,7 @@ IF (ANY(XLES_ALTITUDES(:)/=XUNDEF)) THEN
       END DO
     END DO
   END DO
-  CALL COEF_VER_INTERP_LIN(XZZ,ZZ_LES,NKLIN_LES,XCOEFLIN_LES)
+  CALL COEF_VER_INTERP_LIN(MZF(XZZ),ZZ_LES,NKLIN_LES,XCOEFLIN_LES)
   !
   DEALLOCATE(ZZ_LES)
 END IF
diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90
index 7d5a3cd0df45721c88374309b73a19e9a79c2e70..08b25fba13d2dfdc78cdaf669b31ee81a1bdd62f 100644
--- a/src/MNH/ini_posprofilern.f90
+++ b/src/MNH/ini_posprofilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -65,7 +65,7 @@ END MODULE MODI_INI_POSPROFILER_n
 !!     C.Lac 10/2016  Add visibility diagnostic
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
-!      M.Taufour : modify RARE for hydrometeors containing ice and add bright band calculation for RARE
+!  M. Taufour  05/07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
 !! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -175,7 +175,7 @@ ALLOCATE(TPROFILER%RHOD  (ISTORE,IKU,NUMBPROFILER))
 ALLOCATE(TPROFILER%VISI  (ISTORE,IKU,NUMBPROFILER))
 ALLOCATE(TPROFILER%VISIKUN(ISTORE,IKU,NUMBPROFILER))
 ALLOCATE(TPROFILER%CRARE  (ISTORE,IKU,NUMBPROFILER))
-ALLOCATE(TPROFILER%CRARE_ATT  (ISTORE,IKU,NUMBPROFILER))
+ALLOCATE(TPROFILER%CRARE_ATT(ISTORE,IKU,NUMBPROFILER))
 ALLOCATE(TPROFILER%LWCZ  (ISTORE,IKU,NUMBPROFILER))
 ALLOCATE(TPROFILER%IWCZ  (ISTORE,IKU,NUMBPROFILER))
 ALLOCATE(TPROFILER%CIZ  (ISTORE,IKU,NUMBPROFILER))
diff --git a/src/MNH/ini_radiations_ecrad.f90 b/src/MNH/ini_radiations_ecrad.f90
index be2571b921452e8dcaea3888d809919b532c62d1..7c9349afeb1656c871411d9b57f8d9c34ffa569d 100644
--- a/src/MNH/ini_radiations_ecrad.f90
+++ b/src/MNH/ini_radiations_ecrad.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2018-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2018-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
diff --git a/src/MNH/mesonh.f90 b/src/MNH/mesonh.f90
index 27bd93e2cc2c8f80ad698f4ae9733821ecd29f9d..84017a6b994ac7be3f3681429bfd3a61771b67ed 100644
--- a/src/MNH/mesonh.f90
+++ b/src/MNH/mesonh.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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,8 @@
 !!      J.Escobar                 15/09/2015  WENO5 & JPHEXT <> 1
 !!      G.Delautier                  06/2016  phasage surfex 8
 !!      J. Pianezze               01/08/2016  add sfxoasis coupling functions
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!!      P. Wautelet          05/2016-04/2018  new data structures and calls for I/O
+!!      P. Wautelet               06/07/2021  use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -87,16 +88,15 @@
   USE MODD_SFX_OASIS, ONLY : LOASIS, LOASIS_GRID
 #endif
 !
-USE MODD_CONF
+USE MODD_CONF,             only: CPROGRAM, NMODEL
 USE MODD_NESTING
 USE MODD_CONF_n
-USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG
 !
 USE MODI_MODEL_n
 USE MODI_KID_MODEL
 !
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 USE MODE_IO,               only: IO_Init
-USE MODE_IO_MANAGE_STRUCT, only: IO_Filelist_print
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 !
@@ -108,7 +108,6 @@ USE MODD_MNH_SURFEX_n
   USE MODI_SFX_OASIS_INIT
   USE MODI_MNH_OASIS_GRID
   USE MODI_MNH_OASIS_DEFINE
-  USE MODI_SFX_OASIS_END
 #endif
 !
 USE MODE_MPPDB
@@ -213,26 +212,12 @@ DO
   !
 END DO
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
-!
 !-------------------------------------------------------------------------------
 !
 !*       3.    FINALIZE THE PARALLEL SESSION
 !              -----------------------------
 !
-IF (LCHECK) THEN
-  CALL MPPDB_BARRIER()
-ELSE
-  CALL END_PARA_ll(IINFO_ll)
-#ifdef CPLOASIS
-IF (LOASIS) THEN
-  CALL SFX_OASIS_END
-END IF
-#endif
-END IF
-!
-!
-CALL SURFEX_DEALLO_LIST
+CALL FINALIZE_MNH()
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/modd_mnh_surfexn.f90 b/src/MNH/modd_mnh_surfexn.f90
index 5863841a2e60edefea80eac670e1d60e63ffaaa7..ce56aad27ac4ab9b84403d8bc04933a10245c6f1 100644
--- a/src/MNH/modd_mnh_surfexn.f90
+++ b/src/MNH/modd_mnh_surfexn.f90
@@ -1,3 +1,13 @@
+!MNH_LIC Copyright 2016-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC This is part of the Meso-NH software governed 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:
+!  ???
+! Modifications:
+!  P. Wautelet 06/07/2021: secure SURFEX_DEALLO_LIST (possibility to call it even if YSURF_LIST not allocated)
+!-----------------------------------------------------------------
 MODULE MODD_MNH_SURFEX_n
 !
 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
@@ -57,12 +67,15 @@ INTEGER :: J
 REAL(KIND=JPRB) :: ZHOOK_HANDLE
 IF (LHOOK) CALL DR_HOOK("MODD_MNH_SURFEX_n:SURFEX_DEALLO_LIST",0,ZHOOK_HANDLE)
 !
-DO J=1,SIZE(YSURF_LIST)
-  CALL SURFEX_DEALLO(YSURF_LIST(J))
-ENDDO
+IF ( ASSOCIATED( YSURF_CUR ) ) NULLIFY(YSURF_CUR)
 !
-IF (ASSOCIATED(YSURF_CUR)) NULLIFY(YSURF_CUR)
-IF (ALLOCATED(YSURF_LIST)) DEALLOCATE(YSURF_LIST)
+IF ( ALLOCATED( YSURF_LIST ) ) THEN
+  DO J = 1, SIZE( YSURF_LIST )
+    CALL SURFEX_DEALLO( YSURF_LIST(J) )
+  ENDDO
+  !
+  DEALLOCATE(YSURF_LIST)
+END IF
 !
 IF (LHOOK) CALL DR_HOOK("MODD_MNH_SURFEX_n:SURFEX_DEALLO_LIST",1,ZHOOK_HANDLE)
 !
diff --git a/src/MNH/modd_param_ecradn.f90 b/src/MNH/modd_param_ecradn.f90
index a984d405b9456ef1f32580a0f373cd5fcc550783..3be9a339116b1b1db0928a80979b3a923350681c 100644
--- a/src/MNH/modd_param_ecradn.f90
+++ b/src/MNH/modd_param_ecradn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2017-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2017-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
diff --git a/src/MNH/modd_radiationsn.f90 b/src/MNH/modd_radiationsn.f90
index c0953ce5ebdea59995cd0e4c366681fb23580383..743c3707434493667b8b5eee8765ff3d6d67438c 100644
--- a/src/MNH/modd_radiationsn.f90
+++ b/src/MNH/modd_radiationsn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
diff --git a/src/MNH/modd_type_profiler.f90 b/src/MNH/modd_type_profiler.f90
index 64cd438eeb9774a852cb89895a4942e7fdea910e..b5fedbf60ab7d849a2d04fc98d3047daa34cad64 100644
--- a/src/MNH/modd_type_profiler.f90
+++ b/src/MNH/modd_type_profiler.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -31,7 +31,7 @@
 !!      Original    15/01/02
 !!     C.Lac 10/2016  Add visibility diagnostic
 !  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
-!  M.Taufour 07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
+!  M. Taufour  05/07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
diff --git a/src/MNH/mode_les_diachro.f90 b/src/MNH/mode_les_diachro.f90
index 1aeec63c152b37e0cd52545de59ca5bbbccd8b5a..f56b2ce0f607015dde207609bd257cbdcf1050da 100644
--- a/src/MNH/mode_les_diachro.f90
+++ b/src/MNH/mode_les_diachro.f90
@@ -654,15 +654,17 @@ end if
 
 end function Les_time_avg_1pt
 
-!#######################################################################
-subroutine Les_diachro_1D( tpdiafile, tpfield, odoavg, odonorm, pfield )
-!#######################################################################
+!##############################################################################################
+subroutine Les_diachro_1D( tpdiafile, tpfield, hgroup, hgroupcomment, odoavg, odonorm, pfield )
+!##############################################################################################
 
 use modd_field, only: NMNHDIM_BUDGET_LES_TIME, NMNHDIM_UNUSED, tfield_metadata_base
 use modd_io,    only: tfiledata
 
 type(tfiledata),                       intent(in) :: tpdiafile  ! File to write
 type(tfield_metadata_base),            intent(in) :: tpfield    ! Metadata of field
+character(len=*),                      intent(in) :: hgroup     ! Group of the field
+character(len=*),                      intent(in) :: hgroupcomment
 logical,                               intent(in) :: odoavg     ! Compute and store time average
 logical,                               intent(in) :: odonorm    ! Compute and store normalized field
 real,                    dimension(:), intent(in) :: pfield     ! Data array
@@ -687,7 +689,7 @@ if ( tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_TIME ) then
   tzfield%ndimlist(1) = NMNHDIM_UNUSED
   tzfield%ndimlist(3) = NMNHDIM_UNUSED
   tzfield%ndimlist(4) = NMNHDIM_UNUSED
-  call Les_diachro_common( tpdiafile, tzfield, reshape( pfield, [ 1, size( pfield, 1 ), 1, 1 ] ), &
+  call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment, reshape( pfield, [ 1, size( pfield, 1 ), 1, 1 ] ), &
                            odoavg, odonorm )
 else
   call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_1D', &
@@ -696,9 +698,9 @@ end if
 
 end subroutine Les_diachro_1D
 
-!#######################################################################
-subroutine Les_diachro_2D( tpdiafile, tpfield, odoavg, odonorm, pfield )
-!#######################################################################
+!##############################################################################################
+subroutine Les_diachro_2D( tpdiafile, tpfield, hgroup, hgroupcomment, odoavg, odonorm, pfield )
+!##############################################################################################
 
 use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_SV, NMNHDIM_BUDGET_LES_TIME, NMNHDIM_UNUSED, &
                       tfield_metadata_base
@@ -706,6 +708,8 @@ use modd_io,    only: tfiledata
 
 type(tfiledata),                         intent(in) :: tpdiafile  ! File to write
 type(tfield_metadata_base),              intent(in) :: tpfield    ! Metadata of field
+character(len=*),                        intent(in) :: hgroup     ! Group of the field
+character(len=*),                        intent(in) :: hgroupcomment
 logical,                                 intent(in) :: odoavg     ! Compute and store time average
 logical,                                 intent(in) :: odonorm    ! Compute and store normalized field
 real,                    dimension(:,:), intent(in) :: pfield     ! Data array
@@ -729,7 +733,7 @@ if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
      .and. tzfield%ndimlist(2) == NMNHDIM_BUDGET_LES_TIME  ) then
   tzfield%ndimlist(3) = NMNHDIM_UNUSED
   tzfield%ndimlist(4) = NMNHDIM_UNUSED
-  call Les_diachro_common( tpdiafile, tzfield,                                                &
+  call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment,                         &
                            reshape( pfield, [ size( pfield, 1 ), size( pfield, 2 ), 1, 1 ] ), &
                            odoavg, odonorm )
 else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_TIME &
@@ -738,7 +742,7 @@ else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_TIME &
   tzfield%ndimlist(2) = tzfield%ndimlist(1)
   tzfield%ndimlist(1) = NMNHDIM_UNUSED
   tzfield%ndimlist(3) = NMNHDIM_UNUSED
-  call Les_diachro_common( tpdiafile, tzfield,                                                &
+  call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment,                         &
                            reshape( pfield, [ 1, size( pfield, 1 ), 1, size( pfield, 2 ) ] ), &
                            odoavg, odonorm )
 else
@@ -749,9 +753,10 @@ end if
 
 end subroutine Les_diachro_2D
 
-!##########################################################################################
-subroutine Les_diachro_3D( tpdiafile, tpfield, odoavg, odonorm, pfield, hsuffixes, hmasks )
-!##########################################################################################
+!###############################################################################################
+subroutine Les_diachro_3D( tpdiafile, tpfield, hgroup, hgroupcomment, odoavg, odonorm, pfield, &
+                           hfieldnames, hfieldcomments, hmasks )
+!###############################################################################################
 
 use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_MASK, NMNHDIM_BUDGET_LES_SV, &
                       NMNHDIM_BUDGET_LES_TIME,  NMNHDIM_BUDGET_TERM,     NMNHDIM_UNUSED,        &
@@ -760,10 +765,13 @@ use modd_io,    only: tfiledata
 
 type(tfiledata),                           intent(in) :: tpdiafile  ! File to write
 type(tfield_metadata_base),                intent(in) :: tpfield    ! Metadata of field
+character(len=*),                          intent(in) :: hgroup     ! Group of the field
+character(len=*),                          intent(in) :: hgroupcomment
 logical,                                   intent(in) :: odoavg     ! Compute and store time average
 logical,                                   intent(in) :: odonorm    ! Compute and store normalized field
 real,                    dimension(:,:,:), intent(in) :: pfield     ! Data array
-character(len=*),        dimension(:),     optional, intent(in) :: hsuffixes
+character(len=*),        dimension(:),     optional, intent(in) :: hfieldnames
+character(len=*),        dimension(:),     optional, intent(in) :: hfieldcomments
 character(len=*),        dimension(:),     optional, intent(in) :: hmasks
 
 type(tfield_metadata_base) :: tzfield
@@ -792,29 +800,40 @@ if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
     call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_3D', 'wrong size for hmasks (' // Trim( tzfield%cmnhname ) // ')' )
 
   tzfield%ndimlist(4) = NMNHDIM_UNUSED
-  call Les_diachro_common( tpdiafile, tzfield,                                                                &
+  call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment,                                         &
                            reshape( pfield, [ size( pfield, 1 ), size( pfield, 2 ), size( pfield, 3 ), 1 ] ), &
                            odoavg, odonorm, hmasks = hmasks )
 else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
           .and. tzfield%ndimlist(2) == NMNHDIM_BUDGET_LES_TIME  &
           .and. tzfield%ndimlist(3) == NMNHDIM_BUDGET_TERM      ) then
-  if ( .not. Present( hsuffixes ) ) &
+  if ( .not. Present( hfieldnames ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_3D', &
+                    'optional dummy argument hfieldnames is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( .not. Present( hfieldcomments ) ) &
     call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_3D', &
-                    'optional dummy argument hsuffixes is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+                    'optional dummy argument hfieldcomments is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
 
-  if ( Size( hsuffixes ) /= Size( pfield, 3) ) &
-    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_3D', 'wrong size for hsuffixes (' // Trim( tzfield%cmnhname ) // ')' )
+  if ( Size( hfieldnames ) /= Size( pfield, 3) ) &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_3D', 'wrong size for hfieldnames (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Size( hfieldcomments ) /= Size( pfield, 3) ) &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_3D', 'wrong size for hfieldcomments (' // Trim( tzfield%cmnhname ) // ')' )
 
   tzfield%ndimlist(4) = NMNHDIM_UNUSED
-  call Les_diachro_common( tpdiafile, tzfield,                                                                &
+  call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment,                                         &
                            reshape( pfield, [ size( pfield, 1 ), size( pfield, 2 ), size( pfield, 3 ), 1 ] ), &
-                           odoavg, odonorm, hsuffixes = hsuffixes )
+                           odoavg, odonorm, hfieldnames = hfieldnames, hfieldcomments = hfieldcomments )
 else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
           .and. tzfield%ndimlist(2) == NMNHDIM_BUDGET_LES_TIME  &
           .and. tzfield%ndimlist(3) == NMNHDIM_BUDGET_LES_SV    ) then
-  if ( Present( hsuffixes ) ) &
+  if ( Present( hfieldnames ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_3D', &
+                    'optional dummy argument hfieldnames is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Present( hfieldcomments ) ) &
     call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_3D', &
-                    'optional dummy argument hsuffixes is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+                    'optional dummy argument hfieldcomments is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
 
   if ( Present( hmasks ) ) &
     call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_3D', &
@@ -822,7 +841,7 @@ else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
 
   tzfield%ndimlist(4) = tzfield%ndimlist(3)
   tzfield%ndimlist(3) = NMNHDIM_UNUSED
-  call Les_diachro_common( tpdiafile, tzfield,                                                                &
+  call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment,                                         &
                            reshape( pfield, [ size( pfield, 1 ), size( pfield, 2 ), 1, size( pfield, 3 ) ] ), &
                            odoavg, odonorm )
 else
@@ -832,21 +851,25 @@ end if
 
 end subroutine Les_diachro_3D
 
-!##########################################################################################
-subroutine Les_diachro_4D( tpdiafile, tpfield, odoavg, odonorm, pfield, hsuffixes, hmasks )
-!##########################################################################################
+!###############################################################################################
+subroutine Les_diachro_4D( tpdiafile, tpfield, hgroup, hgroupcomment, odoavg, odonorm, pfield, &
+                           hfieldnames, hfieldcomments, hmasks )
+!###############################################################################################
 
-use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_MASK, NMNHDIM_BUDGET_LES_SV, &
-                      NMNHDIM_BUDGET_LES_TIME,  NMNHDIM_BUDGET_TERM,     NMNHDIM_UNUSED,        &
+use modd_field, only: NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_MASK, NMNHDIM_BUDGET_LES_PDF,  NMNHDIM_BUDGET_LES_SV, &
+                      NMNHDIM_BUDGET_LES_TIME,  NMNHDIM_BUDGET_TERM,     NMNHDIM_UNUSED,                                 &
                       tfield_metadata_base
 use modd_io,    only: tfiledata
 
 type(tfiledata),                             intent(in) :: tpdiafile  ! File to write
-type(tfield_metadata_base), intent(in) :: tpfield ! Metadata of field
+type(tfield_metadata_base),                  intent(in) :: tpfield ! Metadata of field
+character(len=*),                            intent(in) :: hgroup     ! Group of the field
+character(len=*),                            intent(in) :: hgroupcomment
 logical,                                     intent(in) :: odoavg     ! Compute and store time average
 logical,                                     intent(in) :: odonorm    ! Compute and store normalized field
 real,                    dimension(:,:,:,:), intent(in) :: pfield     ! Data array
-character(len=*),        dimension(:),     optional, intent(in) :: hsuffixes
+character(len=*),        dimension(:),     optional, intent(in) :: hfieldnames
+character(len=*),        dimension(:),     optional, intent(in) :: hfieldcomments
 character(len=*),        dimension(:),     optional, intent(in) :: hmasks
 
 type(tfield_metadata_base) :: tzfield
@@ -872,32 +895,72 @@ if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL&
     call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
                     'optional dummy argument hmasks is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
 
+  if ( Present( hfieldnames ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hfieldnames is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Present( hfieldcomments ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hfieldcomments is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
   if ( Size( hmasks ) /= Size( pfield, 3) ) &
     call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_4D', 'wrong size for hmasks (' // Trim( tzfield%cmnhname ) // ')' )
 
-  call Les_diachro_common( tpdiafile, tzfield, pfield, odoavg, odonorm, hmasks = hmasks )
 else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
           .and. tzfield%ndimlist(2) == NMNHDIM_BUDGET_LES_TIME  &
           .and. tzfield%ndimlist(3) == NMNHDIM_BUDGET_TERM      &
           .and. tzfield%ndimlist(4) == NMNHDIM_BUDGET_LES_SV    ) then
-  if ( .not. Present( hsuffixes ) ) &
+  if ( .not. Present( hfieldnames ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hfieldnames is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( .not. Present( hfieldcomments ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hfieldcomments is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Present( hmasks ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hmasks is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Size( hfieldnames ) /= Size( pfield, 3) ) &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_4D', 'wrong size for hfieldnames (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Size( hfieldcomments ) /= Size( pfield, 3) ) &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_4D', 'wrong size for hfieldcomments (' // Trim( tzfield%cmnhname ) // ')' )
+
+else if (       tzfield%ndimlist(1) == NMNHDIM_BUDGET_LES_LEVEL &
+          .and. tzfield%ndimlist(2) == NMNHDIM_BUDGET_LES_TIME  &
+          .and. tzfield%ndimlist(3) == NMNHDIM_BUDGET_LES_MASK      &
+          .and. tzfield%ndimlist(4) == NMNHDIM_BUDGET_LES_PDF   ) then
+  if ( .not. Present( hmasks ) ) &
     call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
-                    'optional dummy argument hsuffixes is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+                    'optional dummy argument hmasks is needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
 
-  if ( Size( hsuffixes ) /= Size( pfield, 3) ) &
-    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_4D', 'wrong size for hsuffixes (' // Trim( tzfield%cmnhname ) // ')' )
+  if ( Present( hfieldnames ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hfieldnames is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Present( hfieldcomments ) ) &
+    call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
+                    'optional dummy argument hfieldcomments is not needed for tpfield (' // Trim( tzfield%cmnhname ) // ')' )
+
+  if ( Size( hmasks ) /= Size( pfield, 3) ) &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_4D', 'wrong size for hmasks (' // Trim( tzfield%cmnhname ) // ')' )
 
-  call Les_diachro_common( tpdiafile, tzfield, pfield, odoavg, odonorm, hsuffixes= hsuffixes )
 else
   call Print_msg( NVERB_ERROR, 'IO', 'Les_diachro_4D', &
                   'ndimlist configuration not yet implemented for ' // Trim( tzfield%cmnhname ) )
 end if
 
+call Les_diachro_common( tpdiafile, tzfield, hgroup, hgroupcomment, pfield, odoavg, odonorm,         &
+                         hfieldnames = hfieldnames, hfieldcomments = hfieldcomments, hmasks = hmasks )
+
 end subroutine Les_diachro_4D
 
-!##############################################################################################
-subroutine Les_diachro_common( tpdiafile, tpfield, pfield, odoavg, odonorm, hsuffixes, hmasks )
-!##############################################################################################
+!###################################################################################################
+subroutine Les_diachro_common( tpdiafile, tpfield, hgroup, hgroupcomment, pfield, odoavg, odonorm, &
+                               hfieldnames, hfieldcomments, hmasks )
+!###################################################################################################
 
 use modd_field,         only: tfield_metadata_base
 use modd_io,            only: tfiledata
@@ -910,10 +973,13 @@ implicit none
 
 type(tfiledata),                                          intent(in) :: tpdiafile ! File to write
 type(tfield_metadata_base),                               intent(in) :: tpfield
+character(len=*),                                         intent(in) :: hgroup    ! Group of the field
+character(len=*),                                         intent(in) :: hgroupcomment
 real,                       dimension(:,:,:,:),           intent(in) :: pfield    ! Data array
 logical,                                                  intent(in) :: odoavg    ! Compute and store time average
 logical,                                                  intent(in) :: odonorm   ! Compute and store normalized field
-character(len=*),           dimension(:),       optional, intent(in) :: hsuffixes
+character(len=*),           dimension(:),       optional, intent(in) :: hfieldnames
+character(len=*),           dimension(:),       optional, intent(in) :: hfieldcomments
 character(len=*),           dimension(:),       optional, intent(in) :: hmasks
 
 character(len=100),         dimension(:),     allocatable :: ycomment                      ! Comment string
@@ -941,13 +1007,13 @@ ijh = nles_current_jsup
 ikl = nles_levels(1)
 ikh = nles_levels(iles_k)
 
-if ( Present( hsuffixes ) ) then
+if ( Present( hfieldcomments ) ) then
   if ( Present( hmasks ) ) &
-    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_common', 'hsuffixes and hmasks optional arguments may not be present ' // &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_common', 'hfieldcomments and hmasks optional arguments may not be present ' // &
                     'at the same time (' // Trim( tpfield%cmnhname ) // ')' )
-  if ( Size( hsuffixes ) /= Size( pfield, 3) ) &
-    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_common', 'wrong size for hsuffixes (' // Trim( tpfield%cmnhname ) // ')' )
-  ycomment(:) = Trim( tpfield%ccomment(:) ) // ' ' // hsuffixes(:)
+  if ( Size( hfieldcomments ) /= Size( pfield, 3) ) &
+    call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_common', 'wrong size for hfieldcomments (' // Trim( tpfield%cmnhname ) // ')' )
+  ycomment(:) = Trim( tpfield%ccomment(:) ) // ': ' // hfieldcomments(:)
 else if ( Present( hmasks ) ) then
   if ( Size( hmasks ) /= Size( pfield, 3) ) &
     call Print_msg( NVERB_FATAL, 'IO', 'Les_diachro_common', 'wrong size for hmasks (' // Trim( tpfield%cmnhname ) // ')' )
@@ -965,9 +1031,9 @@ if ( odoavg .and. odonorm ) call Les_diachro_common_intern( .true.,  .true. )
 
 contains
 
-!#######################################################################################
+!##################################################
 subroutine Les_diachro_common_intern( oavg, onorm )
-!#######################################################################################
+!##################################################
 
 use modd_field,         only: NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_AVG_TIME, NMNHDIM_BUDGET_LES_MASK, &
                               NMNHDIM_BUDGET_LES_SV, NMNHDIM_UNUSED
@@ -988,6 +1054,7 @@ real,            dimension(:,:,:,:),     allocatable :: zfield  ! Normalized fie
 real,            dimension(:,:,:,:,:,:), allocatable :: zwork6  ! Contains physical field
 type(tbudiachrometadata)                             :: tzbudiachro
 type(date_time), dimension(:),           allocatable :: tzdates
+type(tfiledata)                                      :: tzfile
 
 !Reallocate each time necessary because can be reallocated to an other size in Les_time_avg
 Allocate( zfield(Size( pfield, 1 ), Size( pfield, 2 ), Size( pfield, 3 ), Size( pfield, 4 )) )
@@ -1017,8 +1084,9 @@ end if
 iresp = 0
 if ( oavg ) call Les_time_avg_4d( zfield, tzdates, iresp )
 
-if ( Present( hsuffixes ) ) then
-  ytitle(:) = Trim( tpfield%cmnhname ) // '_' // hsuffixes(:)
+if ( Present( hfieldnames ) ) then
+  !ytitle(:) = Trim( tpfield%cmnhname ) // '_' // hfieldnames(:)
+  ytitle(:) = hfieldnames(:)
 else
   ytitle(:) = tpfield%cmnhname
 endif
@@ -1057,9 +1125,9 @@ if ( iresp == 0 .and. any( zfield /= XUNDEF ) ) then
   tzbudiachro%clevels  (NLVL_SUBCATEGORY) = ''
   tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
 
-  tzbudiachro%lleveluse(NLVL_GROUP)       = .false.
-  tzbudiachro%clevels  (NLVL_GROUP)       = ''
-  tzbudiachro%ccomments(NLVL_GROUP)       = ''
+  tzbudiachro%lleveluse(NLVL_GROUP)       = .true.
+  tzbudiachro%clevels  (NLVL_GROUP)       = Trim( hgroup )
+  tzbudiachro%ccomments(NLVL_GROUP)       = Trim( hgroupcomment )
 
   tzbudiachro%lleveluse(NLVL_SHAPE)       = .true.
   tzbudiachro%clevels  (NLVL_SHAPE)       = 'Cartesian'
@@ -1113,19 +1181,41 @@ if ( iresp == 0 .and. any( zfield /= XUNDEF ) ) then
   tzbudiachro%nkh        = ikh
 
   if ( tzfields(1)%ndimlist(6) == NMNHDIM_BUDGET_LES_MASK ) then
-    tzfields(:)%ndimlist(6) = NMNHDIM_UNUSED
+    tzfile = tpdiafile
 
-    ! Loop on the different masks
-    ! Do not provide all tzfields once because they can be stored in different HDF groups (based on masks)
-    do jp = 1, Size( hmasks )
-      tzfields(jp)%clongname = Trim( ytitle(jp) ) // ' (' // Trim( hmasks(jp) ) // ')'
-      tzfields(jp)%ndims     = tzfields(jp)%ndims - 1
+    if ( Trim( tpdiafile%cformat ) == 'LFI' .or. Trim( tpdiafile%cformat ) == 'LFICDF4' ) then
+      !For LFI files, it is necessary to write all the 'processes' (source terms) of the different masks in one pass
+      !to ensure that they are grouped together and not overwritten
+      tzfile%cformat = 'LFI'
 
-      tzbudiachro%clevels(NLVL_MASK) = hmasks(jp)
-      tzbudiachro%ccomments(NLVL_MASK) = ''
+      do jp = 1, Size( hmasks )
+        tzfields(jp)%cmnhname  = Trim( ytitle(jp) ) // ' (' // Trim( hmasks(jp) ) // ')'
+        tzfields(jp)%clongname = Trim( ytitle(jp) ) // ' (' // Trim( hmasks(jp) ) // ')'
+      end do
 
-      call Write_diachro( tpdiafile, tzbudiachro, [ tzfields(jp) ], tzdates, zwork6(:,:,:,:,:,jp:jp) )
-    end do
+      call Write_diachro( tzfile, tzbudiachro, tzfields, tzdates, zwork6 )
+    end if
+
+    if ( Trim( tpdiafile%cformat ) /= 'LFI' ) then
+      tzfile%cformat = 'NETCDF4'
+
+      tzfields(:)%ndimlist(6) = NMNHDIM_UNUSED
+
+      ! Loop on the different masks
+      ! Do not provide all tzfields once because they can be stored in different HDF groups (based on masks)
+      do jp = 1, Size( hmasks )
+        !Keep the following line (about cmnhname, necessary especially if LFI files before (cmnhname was modified previously)
+        tzfields(jp)%cmnhname  = Trim( ytitle(jp) )
+        tzfields(jp)%clongname = Trim( ytitle(jp) ) // ' (' // Trim( hmasks(jp) ) // ')'
+        tzfields(jp)%ndims     = tzfields(jp)%ndims - 1
+
+        tzbudiachro%clevels(NLVL_MASK) = hmasks(jp)
+!PW:TODO? necessite le transfert d'info depuis les routines appelantes ou via des structures dans les modd
+        tzbudiachro%ccomments(NLVL_MASK) = ''
+
+        call Write_diachro( tzfile, tzbudiachro, [ tzfields(jp) ], tzdates, zwork6(:,:,:,:,:,jp:jp) )
+      end do
+    end if
   else
     !Set to the same value ('cart') than for the fields with no mask in Write_les_n
     !to put the fields in the same position of the netCDF file
@@ -1296,12 +1386,12 @@ tzbudiachro%lleveluse(NLVL_SUBCATEGORY) = .false.
 tzbudiachro%clevels  (NLVL_SUBCATEGORY) = ''
 tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
 
-tzbudiachro%lleveluse(NLVL_GROUP)       = .false.
-tzbudiachro%clevels  (NLVL_GROUP)       = ''
+tzbudiachro%lleveluse(NLVL_GROUP)       = .true.
+tzbudiachro%clevels  (NLVL_GROUP)       = 'Two_point_correlation'
 tzbudiachro%ccomments(NLVL_GROUP)       = ''
 
-tzbudiachro%lleveluse(NLVL_SHAPE)       = .true.
-tzbudiachro%clevels  (NLVL_SHAPE)       = 'Two_point_correlation'
+tzbudiachro%lleveluse(NLVL_SHAPE)       = .false.
+tzbudiachro%clevels  (NLVL_SHAPE)       = ''
 tzbudiachro%ccomments(NLVL_SHAPE)       = ''
 
 tzbudiachro%lleveluse(NLVL_TIMEAVG)     = .true.
@@ -1487,12 +1577,12 @@ tzbudiachro%lleveluse(NLVL_SUBCATEGORY) = .false.
 tzbudiachro%clevels  (NLVL_SUBCATEGORY) = ''
 tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
 
-tzbudiachro%lleveluse(NLVL_GROUP)       = .false.
-tzbudiachro%clevels  (NLVL_GROUP)       = ''
+tzbudiachro%lleveluse(NLVL_GROUP)       = .true.
+tzbudiachro%clevels  (NLVL_GROUP)       = 'Spectrum'
 tzbudiachro%ccomments(NLVL_GROUP)       = ''
 
-tzbudiachro%lleveluse(NLVL_SHAPE)       = .true.
-tzbudiachro%clevels  (NLVL_SHAPE)       = 'Spectrum'
+tzbudiachro%lleveluse(NLVL_SHAPE)       = .false.
+tzbudiachro%clevels  (NLVL_SHAPE)       = ''
 tzbudiachro%ccomments(NLVL_SHAPE)       = ''
 
 tzbudiachro%lleveluse(NLVL_TIMEAVG)     = .true.
@@ -1549,12 +1639,12 @@ tzbudiachro%lleveluse(NLVL_SUBCATEGORY) = .false.
 tzbudiachro%clevels  (NLVL_SUBCATEGORY) = ''
 tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
 
-tzbudiachro%lleveluse(NLVL_GROUP)       = .false.
-tzbudiachro%clevels  (NLVL_GROUP)       = ''
+tzbudiachro%lleveluse(NLVL_GROUP)       = .true.
+tzbudiachro%clevels  (NLVL_GROUP)       = 'Spectrum'
 tzbudiachro%ccomments(NLVL_GROUP)       = ''
 
-tzbudiachro%lleveluse(NLVL_SHAPE)       = .true.
-tzbudiachro%clevels  (NLVL_SHAPE)       = 'Spectrum'
+tzbudiachro%lleveluse(NLVL_SHAPE)       = .false.
+tzbudiachro%clevels  (NLVL_SHAPE)       = ''
 tzbudiachro%ccomments(NLVL_SHAPE)       = ''
 
 tzbudiachro%lleveluse(NLVL_TIMEAVG)     = .true.
diff --git a/src/MNH/modeln.f90 b/src/MNH/modeln.f90
index 238c707f92a83d883cbb2f98e311fb3f3c3fe4da..ea53387a50a48a98c70ba748a3b1315bbc4f2c74 100644
--- a/src/MNH/modeln.f90
+++ b/src/MNH/modeln.f90
@@ -322,7 +322,7 @@ USE MODD_LES
 USE MODD_LES_BUDGET
 USE MODD_LIMA_PRECIP_SCAVENGING_n
 USE MODD_LSFIELD_n
-USE MODD_LUNIT,          ONLY: TLUOUT0,TOUTDATAFILE
+USE MODD_LUNIT,          ONLY: TOUTDATAFILE
 USE MODD_LUNIT_n,        ONLY: TDIAFILE,TINIFILE,TINIFILEPGD,TLUOUT
 USE MODD_MEAN_FIELD
 USE MODD_MEAN_FIELD_n
@@ -382,6 +382,7 @@ USE MODE_MSG
 USE MODE_ONE_WAY_n
 use mode_write_les_n,               only: Write_les_n
 use mode_write_lfifmn_fordiachro_n, only: WRITE_LFIFMN_FORDIACHRO_n
+USE MODE_WRITE_PROFILER_n,          ONLY: WRITE_PROFILER_n
 !
 USE MODI_ADDFLUCTUATIONS
 USE MODI_ADVECTION_METSV
@@ -448,7 +449,6 @@ USE MODI_WRITE_AIRCRAFT_BALLOON
 USE MODI_WRITE_DESFM_n
 USE MODI_WRITE_DIAG_SURF_ATM_N
 USE MODI_WRITE_LFIFM_n
-USE MODI_WRITE_PROFILER_n
 USE MODI_WRITE_SERIES_n
 USE MODI_WRITE_STATION_n
 USE MODI_WRITE_SURF_ATM_N
@@ -2316,10 +2316,6 @@ IF (OEXIT) THEN
   !
   CALL  TIMING_SEPARATOR('=')
   !
-  !
-  !
-  CALL IO_File_close(TLUOUT)
-  IF (IMI==NMODEL) CALL IO_File_close(TLUOUT0)
 END IF
 !
 END SUBROUTINE MODEL_n
diff --git a/src/MNH/modn_param_ecradn.f90 b/src/MNH/modn_param_ecradn.f90
index 1cf2bfa4704a09d08eec5211e7aaa0e9ab4cb2f7..9d168f330b41adc2e54531345f39fd3320d79f92 100644
--- a/src/MNH/modn_param_ecradn.f90
+++ b/src/MNH/modn_param_ecradn.f90
@@ -1,13 +1,8 @@
-!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
-!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.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 modn 2006/11/23 17:22:54
-!-----------------------------------------------------------------
 !     ########################  
       MODULE MODN_PARAM_ECRAD_n
 !     ########################
diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90
index 3e5ea35b14a4343165833fcc22e6f09c9d624be0..370e214120d671ca8fd809fd3b69ee93a26c2e6b 100644
--- a/src/MNH/prep_ideal_case.f90
+++ b/src/MNH/prep_ideal_case.f90
@@ -320,7 +320,8 @@
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !  F. Auguste     02/2021: add IBM
 !  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
-!  Jean-Luc Redelsperger 03/2021 : : ocean LES case
+!  Jean-Luc Redelsperger 03/2021: ocean LES case
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
@@ -356,13 +357,14 @@ 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,        ONLY: NIO_VERB, NVERB_DEBUG, TFILE_DUMMY, TFILE_OUTPUTLISTING
+USE MODD_IO,        ONLY: TFILE_DUMMY, TFILE_OUTPUTLISTING
 USE MODD_CONF_n
 USE MODD_NSV,       ONLY: NSV
 use modd_precision, only: LFIINT, MNHREAL_MPI, MNHTIME
 !
 USE MODN_BLANK_n
 !
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 USE MODE_THERMO
 USE MODE_POS
 USE MODE_GRIDCART         ! Executive modules
@@ -372,7 +374,7 @@ 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_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 use mode_field,            only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars
@@ -1845,7 +1847,6 @@ IF (CSURF =='EXTE') THEN
   TFILE_SURFEX => TINIFILE
   CALL PREP_SURF_MNH('                            ','      ')
   NULLIFY(TFILE_SURFEX)
-  CALL SURFEX_DEALLO_LIST
 ELSE
   CSURF = "NONE"
 END IF
@@ -1927,10 +1928,6 @@ WRITE(NLUOUT,FMT=*) '****************************************************'
 WRITE(NLUOUT,FMT=*) '* PREP_IDEAL_CASE: PREP_IDEAL_CASE ENDS CORRECTLY. *'
 WRITE(NLUOUT,FMT=*) '****************************************************'
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
-!
-CALL IO_File_close(TLUOUT)
-!
-CALL END_PARA_ll(IINFO_ll)
+CALL FINALIZE_MNH()
 !
 END PROGRAM PREP_IDEAL_CASE
diff --git a/src/MNH/prep_nest_pgd.f90 b/src/MNH/prep_nest_pgd.f90
index b32bbce3008fcb1ec2528a24ca520faeebde9219..80b493fbcd6bcd3d097efeb2ccc6380bbe6bef6e 100644
--- a/src/MNH/prep_nest_pgd.f90
+++ b/src/MNH/prep_nest_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -92,6 +92,7 @@
 !!      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 06/07/2021: use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -101,7 +102,7 @@ USE MODD_CONF
 USE MODD_CONF_n
 USE MODD_CST
 USE MODD_DIM_n
-USE MODD_IO,            ONLY: NIO_VERB, NVERB_DEBUG, TFILE_SURFEX, TPTR2FILE
+USE MODD_IO,               ONLY: TFILE_SURFEX, TPTR2FILE
 USE MODD_GRID_n,           ONLY: XZSMT
 USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
 USE MODD_MNH_SURFEX_n
@@ -110,11 +111,12 @@ USE MODD_PARAMETERS
 USE MODD_VAR_ll,           ONLY: NPROC, IP, NMNH_COMM_WORLD
 !
 use mode_field,            only: Ini_field_list
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 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_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
 USE MODE_MNH_WORLD,        ONLY: INIT_NMNH_COMM_WORLD
 USE MODE_MODELN_HANDLER
@@ -384,23 +386,21 @@ END DO
 !*      12.    EPILOGUE
 !              --------
 !
-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(TLUOUT0)
-!
 !-------------------------------------------------------------------------------
 !
 !*      10.    FINALIZE THE PARALLEL SESSION
 !              -----------------------------
 !
-CALL END_PARA_ll(IINFO_ll)
+CALL FINALIZE_MNH()
+
+! CALL END_PARA_ll(IINFO_ll)
 !
-CALL SURFEX_DEALLO_LIST
+! CALL SURFEX_DEALLO_LIST
 !
 !-------------------------------------------------------------------------------
 
diff --git a/src/MNH/prep_pgd.f90 b/src/MNH/prep_pgd.f90
index 4beb4dc431da0653b67d5a0655ff033e1a748b34..046ddde7822141fefa4743338cfcb32469bca981 100644
--- a/src/MNH/prep_pgd.f90
+++ b/src/MNH/prep_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -78,7 +78,7 @@
 !  P. Wautelet 07/02/2019: remove OPARALLELIO argument from open and close files subroutines
 !                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
-!
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
@@ -89,16 +89,17 @@ 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,   ONLY : NIO_VERB,NVERB_DEBUG,TFILEDATA,TFILE_OUTPUTLISTING,TFILE_SURFEX
+USE MODD_IO,               only: TFILEDATA, TFILE_OUTPUTLISTING, TFILE_SURFEX
 use modd_precision,   only: LFIINT
 USE MODD_IO_SURF_MNH, ONLY : NHALO
 USE MODD_SPAWN, ONLY : NDXRATIO,NDYRATIO,NXSIZE,NYSIZE,NXOR,NYOR
 !
 use mode_field,            only: Ini_field_list
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 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_IO_MANAGE_STRUCT, only: IO_File_add2list
 use mode_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MSG
@@ -134,7 +135,6 @@ IMPLICIT NONE
 INTEGER :: IRESP    ! return code for I/O
 INTEGER :: ILUOUT0
 INTEGER :: ILUNAM
-INTEGER :: IINFO_LL
 LOGICAL :: GFOUND
 CHARACTER(LEN=28) :: YDAD     =' '        ! name of dad of input FM file
 CHARACTER(LEN=28) :: CPGDFILE ='PGDFILE'  ! name of the output file
@@ -332,13 +332,7 @@ WRITE(ILUOUT0,*) '***************************'
 !
 CALL IO_File_close(TZFILE)
 !
-CALL SURFEX_DEALLO_LIST
-!
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
-!
-CALL IO_File_close(TLUOUT0)
-!
-CALL END_PARA_ll(IINFO_ll)
+CALL FINALIZE_MNH()
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/prep_real_case.f90 b/src/MNH/prep_real_case.f90
index 3e3167691431dd68287e8573c951d8aa8ea3b985..2796da451deead2db67096d5ba9ddc2c5ffcb954 100644
--- a/src/MNH/prep_real_case.f90
+++ b/src/MNH/prep_real_case.f90
@@ -390,6 +390,7 @@
 !  P. Wautelet 20/03/2019: missing use MODI_INIT_SALT
 !  P. Wautelet 20/05/2019: add name argument to ADDnFIELD_ll + new ADD4DFIELD_ll subroutine
 !  T.Nagel        02/2021: add IBM
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -411,7 +412,7 @@ USE MODD_GRID_n
 USE MODD_HURR_CONF
 USE MODD_IBM_LSF,          ONLY: CIBM_TYPE, LIBM_LSF, NIBM_SMOOTH, XIBM_SMOOTH
 USE MODD_IBM_PARAM_n,      ONLY: XIBM_LS
-USE MODD_IO,               ONLY: TFILEDATA,NIO_VERB,NVERB_DEBUG,TFILE_SURFEX
+USE MODD_IO,               ONLY: TFILEDATA, TFILE_SURFEX
 USE MODD_LBC_n
 USE MODD_LSFIELD_n
 USE MODD_LUNIT,            ONLY: TPGDFILE,TLUOUT0,TOUTDATAFILE
@@ -429,13 +430,14 @@ USE MODD_TURB_n
 !
 USE MODE_EXTRAPOL
 use mode_field,            only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 USE MODE_GRIDCART
 USE MODE_GRIDPROJ
 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_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname
 USE MODE_ll
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
@@ -1159,7 +1161,6 @@ IF (.NOT. LCOUPLING ) THEN
     TFILE_SURFEX => TINIFILE
     CALL PREP_SURF_MNH(YSURFFILE,YSURFFILETYPE)
     NULLIFY(TFILE_SURFEX)
-    CALL SURFEX_DEALLO_LIST
   ENDIF
 !
   CALL SECOND_MNH(ZTIME2)
@@ -1248,12 +1249,8 @@ END IF
 CALL IO_File_close(TINIFILE)
 CALL IO_File_close(TPGDFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
+CALL FINALIZE_MNH()
 !
-CALL IO_File_close(TLUOUT0)
-!
-!
-CALL END_PARA_ll(IINFO_ll)
 !-------------------------------------------------------------------------------
 !
 CONTAINS 
diff --git a/src/MNH/prep_surfex.f90 b/src/MNH/prep_surfex.f90
index 16908f2aed0504c1434651fbb05cf86e40fd0b57..68ec7b3a8779d70d45f174ab868a07192b9dc4c5 100644
--- a/src/MNH/prep_surfex.f90
+++ b/src/MNH/prep_surfex.f90
@@ -36,7 +36,7 @@
 USE MODD_CONF,        ONLY : CPROGRAM,&
                              L1D, L2D, LPACK
 USE MODD_CONF_n,      ONLY : CSTORAGE_TYPE
-USE MODD_IO,          ONLY : TFILEDATA, NIO_VERB, NVERB_DEBUG, TFILE_SURFEX
+USE MODD_IO,          ONLY : TFILEDATA, TFILE_SURFEX
 USE MODD_LUNIT,       ONLY : TPGDFILE, TLUOUT0
 USE MODD_LUNIT_n,     ONLY : CINIFILE, TINIFILE
 USE MODD_MNH_SURFEX_n
@@ -44,11 +44,12 @@ USE MODD_PARAMETERS,  ONLY : JPMODELMAX,JPHEXT,JPVEXT, NUNDEF, XUNDEF
 USE MODD_TIME_n,      ONLY : TDTCUR
 !
 use mode_field,            only: Ini_field_list, Ini_field_scalars
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 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_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -200,12 +201,7 @@ WRITE(ILUOUT0,*) '|                                |'
 WRITE(ILUOUT0,*) '----------------------------------'
 CALL IO_File_close(TINIFILE)
 !
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
-!
-CALL IO_File_close(TLUOUT0)
-!
-CALL END_PARA_ll(IINFO_ll)
-CALL SURFEX_DEALLO_LIST
+CALL FINALIZE_MNH()
 !-------------------------------------------------------------------------------
 !
 END PROGRAM PREP_SURFEX
diff --git a/src/MNH/profilern.f90 b/src/MNH/profilern.f90
index f91695cd03a4bc5a6bfd7fc3e806daed877a3ea7..433a5c6ef02ae8a1630718f497b1f602b536f7a5 100644
--- a/src/MNH/profilern.f90
+++ b/src/MNH/profilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -12,7 +12,7 @@ INTERFACE
       SUBROUTINE PROFILER_n(PTSTEP,                               &
                             PXHAT, PYHAT, PZ,PRHODREF,            &
                             PU, PV, PW, PTH, PR, PSV, PTKE,       &
-                            PTS,PP, PAER, PCLDFR, PCIT,PSEA)
+                            PTS, PP, PAER, PCLDFR, PCIT, PSEA)
 !
 REAL,                     INTENT(IN)     :: PTSTEP ! time step
 REAL, DIMENSION(:),       INTENT(IN)     :: PXHAT  ! x coordinate
@@ -31,7 +31,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PP     ! pressure
 REAL, DIMENSION(:,:,:,:), INTENT(IN)     :: PAER   ! aerosol extinction
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PCLDFR ! cloud fraction
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PCIT   ! ice concentration
-REAL, DIMENSION(:,:),INTENT(IN) :: PSEA            ! for radar 
+REAL, DIMENSION(:,:),     INTENT(IN)     :: PSEA   ! for radar 
 !
 !-------------------------------------------------------------------------------
 !
@@ -84,7 +84,7 @@ END MODULE MODI_PROFILER_n
 !!     March,28, 2018 (P. Wautelet) replace TEMPORAL_DIST by DATETIME_DISTANCE
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
-!  M.Taufour 07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
+!  M. Taufour  05/07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
 ! --------------------------------------------------------------------------
 !       
 !*      0. DECLARATIONS
@@ -157,7 +157,7 @@ REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PP     ! pressure
 REAL, DIMENSION(:,:,:,:), INTENT(IN)     :: PAER   ! aerosol extinction
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PCLDFR ! cloud fraction
 REAL, DIMENSION(:,:,:),   INTENT(IN)     :: PCIT   ! ice concentration
-REAL, DIMENSION(:,:),INTENT(IN)          :: PSEA   ! for radar
+REAL, DIMENSION(:,:),     INTENT(IN)     :: PSEA   ! for radar 
 !
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/set_mass.f90 b/src/MNH/set_mass.f90
index 4563a4c6d85559ec5ec5a334bd5c3efdb7f4c3a0..b3402a0e3cd0ece6682058f04aa386e84f37686a 100644
--- a/src/MNH/set_mass.f90
+++ b/src/MNH/set_mass.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2010-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2010-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
diff --git a/src/MNH/spawning.f90 b/src/MNH/spawning.f90
index 850f27d65fa12a6993d2faededb4cead0288f306..15c7d98b76f599f4f2b5329cc09333df5c484bfb 100644
--- a/src/MNH/spawning.f90
+++ b/src/MNH/spawning.f90
@@ -78,6 +78,7 @@
 !                          (nsubfiles_ioz is now determined in IO_File_add2list)
 !  S. Bielli      02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 11/02/2020: bugfix: close TINIFILEPGD only if previously opened
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -105,7 +106,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, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
+USE MODD_IO,               only: TFILEDATA
 USE MODD_LSFIELD_n
 USE MODD_LBC_n
 USE MODD_LUNIT_n
@@ -116,9 +117,10 @@ USE MODD_TIME_n
 USE MODD_CH_MNHC_n
 USE MODD_GRID_n
 !
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 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_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_File_find_byname
 USE MODE_ll
 USE MODE_POS
 USE MODE_MODELN_HANDLER
@@ -128,7 +130,6 @@ USE MODI_BOUNDARIES
 !
 USE MODI_VERSION
 USE MODI_INIT_MNH
-USE MODD_MNH_SURFEX_n
 USE MODE_MPPDB
 !
 !
@@ -252,13 +253,8 @@ CALL SPAWN_MODEL2 (NRR,NSV_USER,CTURB,CSURF,CCLOUD,                     &
                    CCHEM_INPUT_FILE,YSPAFILE,YSPANBR,YSONFILE,          &
                    CINIFILE, CINIFILEPGD, LSPAWN_SURF                   )
 !
-CALL SURFEX_DEALLO_LIST
-!
-IF(NIO_VERB>=NVERB_DEBUG) CALL IO_Filelist_print()
-!
-CALL IO_File_close(TLUOUT)
-!
-CALL END_PARA_ll(IINFO_ll)
+CALL FINALIZE_MNH()
+
 
 CONTAINS
 
diff --git a/src/MNH/spectre.f90 b/src/MNH/spectre.f90
index 545c60629410ef29c5a16bfd5289f96038c41e28..a87838c936e9c344c04f5fcc40325dac525eeab5 100644
--- a/src/MNH/spectre.f90
+++ b/src/MNH/spectre.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2011-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2011-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -17,7 +17,8 @@
 !!
 !!
 !! Modifications:
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -25,8 +26,7 @@
 !
 !
 USE MODD_CONF
-USE MODD_IO, ONLY: NIO_VERB,NVERB_DEBUG,TFILEDATA
-USE MODD_LUNIT
+USE MODD_IO,               only: TFILEDATA
 USE MODD_LUNIT_n
 USE MODD_TIME_n
 USE MODD_DIM_ll
@@ -35,13 +35,13 @@ USE MODD_SPECTRE
 USE MODI_SPECTRE_MESONH
 USE MODI_SPECTRE_AROME
 !
-USE MODE_MSG
-USE MODE_POS
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 USE MODE_IO,               only: IO_Config_set, IO_Init
 USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
-USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list, IO_Filelist_print
-use mode_init_ll,          only: END_PARA_ll
+USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_MODELN_HANDLER
+USE MODE_MSG
+USE MODE_POS
 !USE MODD_TYPE_DATE
 USE MODI_VERSION
 !
@@ -60,8 +60,6 @@ INTEGER                          :: ILUNAM        ! Logical unit numbers for the
                                                   ! and for output_listing file
 LOGICAL                          :: GFOUND        ! Return code when searching namelist
 !
-INTEGER                          :: IINFO_ll      ! return code for _ll routines 
-!
 REAL,DIMENSION(:,:,:),ALLOCATABLE:: ZWORK         ! work array
 REAL,DIMENSION(:,:,:),ALLOCATABLE:: ZWORKAROME    ! work array
 INTEGER :: NI,NJ,NK
@@ -191,9 +189,6 @@ IF (CTYPEFILE=='MESONH') THEN
   CALL SPECTRE_MESONH(YOUTFILE)
   !
   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
@@ -205,8 +200,8 @@ ENDIF
 !*      4.    FINALIZE THE PARALLEL SESSION
 !              -----------------------------
 !
-CALL END_PARA_ll(IINFO_ll)
-!
+CALL FINALIZE_MNH()
+
 PRINT*, ' '
 PRINT*, '****************************************************'
 PRINT*, '*            EXIT  SPECTRE CORRECTLY          *'
diff --git a/src/MNH/write_diachro.f90 b/src/MNH/write_diachro.f90
index de060fcd60dce31ab3852296d6d139355b05f2ed..a1170be6f3aebdb1700ad5c83a90862597e00e6a 100644
--- a/src/MNH/write_diachro.f90
+++ b/src/MNH/write_diachro.f90
@@ -143,8 +143,9 @@ subroutine Write_diachro_lfi( tpdiafile, tpbudiachro, tpfields, tpdates, pvar, t
 
 use modd_aircraft_balloon, only: flyer
 use modd_budget,         only: NLVL_CATEGORY, NLVL_GROUP, NLVL_SHAPE, nbumask, nbutshift, nbusubwrite, tbudiachrometadata
-use modd_field,          only: NMNHDIM_ONE, NMNHDIM_UNKNOWN, NMNHDIM_FLYER_TIME, NMNHDIM_NOTLISTED, NMNHDIM_UNUSED, &
-                               TYPECHAR, TYPEINT, TYPEREAL,                                                         &
+use modd_field,          only: NMNHDIM_ONE, NMNHDIM_UNKNOWN, NMNHDIM_BUDGET_LES_MASK, &
+                               NMNHDIM_FLYER_TIME, NMNHDIM_NOTLISTED, NMNHDIM_UNUSED, &
+                               TYPECHAR, TYPEINT, TYPEREAL,                           &
                                tfield_metadata_base, tfielddata
 use modd_io,             only: tfiledata
 use modd_les,            only: nles_current_iinf, nles_current_isup, nles_current_jinf, nles_current_jsup, &
@@ -182,6 +183,7 @@ character(len=LFIUNITLGT),    dimension(:), allocatable :: yunits    !Used to re
 character(len=LFICOMMENTLGT), dimension(:), allocatable :: ycomments !Used to respect LFI fileformat
 INTEGER   ::   ILENG, ILENTITRE, ILENUNITE, ILENCOMMENT
 integer   :: iil, iih, ijl, ijh, ikl, ikh
+integer   :: idx
 INTEGER   ::   II, IJ, IK, IT, IN, IP, J, JJ
 INTEGER   ::   INTRAJT, IKTRAJX, IKTRAJY, IKTRAJZ
 INTEGER   ::   ITTRAJX, ITTRAJY, ITTRAJZ
@@ -255,6 +257,18 @@ else if ( tpbudiachro%clevels(NLVL_GROUP) == 'RhodJ' ) then
 else if ( tpbudiachro%nsv > 0 ) then
   Allocate( character(len=9) :: ygroup )
   Write( ygroup, '( "SV", i3.3, i4.4 )' ) tpbudiachro%nsv, nbutshift
+else if ( tpbudiachro%clevels(NLVL_CATEGORY) == 'LES_budgets' .and. tpbudiachro%clevels(NLVL_GROUP)(1:3)/='BU_' ) then
+  if ( tpfields(1)%ndimlist(6) == NMNHDIM_BUDGET_LES_MASK ) then
+    !Remove the name of the mask (different for each 'process') to get the common name for the group
+    idx = Index( tpfields(1)%cmnhname, ' ' )
+    if ( idx > 0 ) then
+      ygroup = tpfields(1)%cmnhname(1:idx- 1)
+    else
+      ygroup = Trim( tpfields(1)%cmnhname )
+    end if
+  else
+    ygroup = Trim( tpfields(1)%cmnhname )
+  end if
 else
   ygroup = Trim( tpbudiachro%clevels(NLVL_GROUP) )
 end if
@@ -285,7 +299,7 @@ if (       Trim( tpbudiachro%clevels(NLVL_CATEGORY) ) == 'LES_budgets' &
 end if
 
 if (       Trim( tpbudiachro%clevels(NLVL_CATEGORY) ) == 'LES_budgets' &
-     .and. Trim( tpbudiachro%clevels(NLVL_SHAPE) )    == 'Spectrum'    ) then
+     .and. Trim( tpbudiachro%clevels(NLVL_GROUP) )    == 'Spectrum'    ) then
   if ( tpbudiachro%ltcompress ) then
     ygroup = 'T_' // Trim( ygroup )
     !Limit to 10 characters (backward compatibility again...)
@@ -1085,7 +1099,7 @@ select case ( idims )
       if ( Size( tpfields ) /= 1 ) call Print_msg( NVERB_FATAL, 'IO', 'Write_diachro_nc4', &
                                                    'wrong size of tpfields (variable '//trim(tpfields(1)%cmnhname)//')' )
       call Diachro_one_field_write_nc4( tzfile, tpbudiachro, tpfields(1), pvar, [ 3 ], gsplit, gdistributed )
-    else if ( tpfields(1)%ndimlist(6) == NMNHDIM_BUDGET_NGROUPS ) then
+    else if ( tpfields(1)%ndimlist(6) == NMNHDIM_BUDGET_NGROUPS .or. tpfields(1)%ndimlist(6) == NMNHDIM_PROFILER_PROC ) then
       do ji = 1, Size( pvar, 6 )
         !Remark: [ integer:: ] is a constructor for a zero-size array of integers, [] is not allowed (type can not be determined)
         call Diachro_one_field_write_nc4( tzfile, tpbudiachro, tpfields(ji), pvar(:,:,:,:,:,ji:ji), [ integer:: ], &
@@ -1174,6 +1188,13 @@ select case ( idims )
         end if
       end if
 
+      ! Loop on the processes
+      do ji = 1, Size( pvar, 6 )
+        call Diachro_one_field_write_nc4( tzfile, tpbudiachro, tpfields(ji), pvar(:,:,:,:,:,ji:ji), [ 4 ], gsplit, gdistributed )
+      end do
+    else if (  tpfields(1)%ndimlist(4) == NMNHDIM_PROFILER_TIME &
+         .and. tpfields(1)%ndimlist(6) == NMNHDIM_PROFILER_PROC ) then
+      !Correspond to WRITE_PROFILER_n
       ! Loop on the processes
       do ji = 1, Size( pvar, 6 )
         call Diachro_one_field_write_nc4( tzfile, tpbudiachro, tpfields(ji), pvar(:,:,:,:,:,ji:ji), [ 4 ], gsplit, gdistributed )
@@ -1270,6 +1291,13 @@ select case ( idims )
       do ji = 1, Size( pvar, 6 )
         call Diachro_one_field_write_nc4( tzfile, tpbudiachro, tpfields(ji), pvar(:,:,:,:,:,ji:ji), [ 3, 4 ], gsplit, gdistributed )
       end do
+    else if (       tpfields(1)%ndimlist(3) == NMNHDIM_BUDGET_LES_LEVEL      &
+       .and. (      tpfields(1)%ndimlist(4) == NMNHDIM_BUDGET_LES_TIME       &
+               .or. tpfields(1)%ndimlist(4) == NMNHDIM_BUDGET_LES_AVG_TIME ) &
+              .and. tpfields(1)%ndimlist(5) == NMNHDIM_BUDGET_LES_PDF      ) then
+      if ( Size( tpfields ) /= 1 ) call Print_msg( NVERB_FATAL, 'IO', 'Write_diachro_nc4', &
+                                                   'wrong size of tpfields (variable '//trim(tpfields(1)%cmnhname)//')' )
+      call Diachro_one_field_write_nc4( tzfile, tpbudiachro, tpfields(1), pvar, [ 3, 4, 5 ], gsplit, gdistributed )
     else if (              tpfields(1)%ndimlist(3) == NMNHDIM_BUDGET_LES_LEVEL      &
               .and. (      tpfields(1)%ndimlist(4) == NMNHDIM_BUDGET_LES_TIME       &
                       .or. tpfields(1)%ndimlist(4) == NMNHDIM_BUDGET_LES_AVG_TIME ) &
diff --git a/src/MNH/write_les_budgetn.f90 b/src/MNH/write_les_budgetn.f90
index fec25b5ea6ee41a77ebf0b8f659e8b47d5c3154b..7827ba184b18d710839d63155d807c186b67eb01 100644
--- a/src/MNH/write_les_budgetn.f90
+++ b/src/MNH/write_les_budgetn.f90
@@ -98,8 +98,10 @@ INTEGER :: ILES_P1, ILES_P2
 INTEGER :: JK ! vertical loop counter
 INTEGER :: JT ! temporal loop counter
 !
-CHARACTER(len=9), DIMENSION(NMAX_ILES) :: YSUBTITLE
-CHARACTER(len=8)                       :: YGROUP
+CHARACTER(len=9),   DIMENSION(NMAX_ILES) :: YFIELDNAMES
+CHARACTER(len=100), DIMENSION(NMAX_ILES) :: YFIELDCOMMENTS
+character(len=:), allocatable          :: ygroup
+character(len=:), allocatable          :: ygroupcomment
 !
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLES_BUDGET
 !
@@ -114,7 +116,7 @@ type(tfield_metadata_base) :: tzfield
 ALLOCATE(ZLES_BUDGET(NLES_K,NLES_TIMES,NMAX_ILES))
 !
 ZLES_BUDGET=XUNDEF
-YSUBTITLE(:)=' '
+YFIELDNAMES(:)=' '
 
 tzfield%ngrid = 0 !Not on the Arakawa grid
 tzfield%ntype = TYPEREAL
@@ -131,7 +133,8 @@ gdonorm = Trim( cles_norm_type ) /= 'NONE'
 !*      1.  total (resolved+subgrid) kinetic energy budget
 !            ------------------------------------
 !
-YGROUP= 'BU_KE'
+ygroup = 'BU_KE'
+ygroupcomment = 'Total (resolved+subgrid) kinetic energy budget'
 ILES=0
 ILES_STA=ILES
 !
@@ -139,16 +142,18 @@ ILES_STA=ILES
 !     --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TEND'
+YFIELDNAMES(ILES)    = 'SBG_TEND'
+YFIELDCOMMENTS(ILES) = 'subgrid tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_TEND)
 !
 !
-!* 1.2 production by mean wind gradient
+!* 1.2 dynamic production by mean wind gradient
 !     ---------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES)= - XLES_SUBGRID_WU (:,:,1) * XLES_MEAN_DUDZ(:,:,1)  &
                        - XLES_SUBGRID_WV (:,:,1) * XLES_MEAN_DVDZ(:,:,1)  &
@@ -158,7 +163,8 @@ ZLES_BUDGET(:,:,ILES)= - XLES_SUBGRID_WU (:,:,1) * XLES_MEAN_DUDZ(:,:,1)  &
 !     ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_DP) - ZLES_BUDGET(:,:,2)
 !
@@ -169,7 +175,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_DP) - ZLES_BUDGET(:,:,2)
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_ADVM'
+YFIELDNAMES(ILES)    = 'SBG_ADVM'
+YFIELDCOMMENTS(ILES) = 'subgrid advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_ADVM)
 END IF
@@ -180,7 +187,8 @@ END IF
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_FORC'
+YFIELDNAMES(ILES)    = 'SBG_FORC'
+YFIELDCOMMENTS(ILES) = 'subgrid advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_FORC)
 END IF
@@ -190,7 +198,8 @@ END IF
 !      -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_TR)
 !
@@ -199,7 +208,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_TR)
 !      -----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_ADVR'
+YFIELDNAMES(ILES)    = 'SBG_ADVR'
+YFIELDCOMMENTS(ILES) = 'subgrid advection by resolved flow'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_ADVR)
 !
@@ -209,7 +219,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_ADVR)
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_PRES)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_PRES'
+YFIELDNAMES(ILES)    = 'SBG_PRES'
+YFIELDCOMMENTS(ILES) = 'subgrid pressure-correlation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_PRES)
 END IF
@@ -219,7 +230,8 @@ END IF
 !      ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TP'
+YFIELDNAMES(ILES)    = 'SBG_TP'
+YFIELDCOMMENTS(ILES) = 'subgrid thermal production'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_TP)
 !
@@ -228,7 +240,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_TP)
 !       -----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_DISS)
 !
@@ -238,7 +251,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_DISS)
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_NUMD'
+YFIELDNAMES(ILES)    = 'SBG_NUMD'
+YFIELDCOMMENTS(ILES) = 'subgrid numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_DIFF)
 END IF
@@ -248,7 +262,8 @@ END IF
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RELA'
+YFIELDNAMES(ILES)    = 'SBG_RELA'
+YFIELDCOMMENTS(ILES) = 'subgrid sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_RELA)
 END IF
@@ -258,7 +273,8 @@ END IF
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_NEST'
+YFIELDNAMES(ILES)    = 'SBG_NEST'
+YFIELDCOMMENTS(ILES) = 'subgrid average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_NEST)
 END IF
@@ -269,7 +285,8 @@ END IF
 !
 IF ( ANY(XLES_BU_SBG_TKE(:,:,NLES_MISC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_MISC'
+YFIELDNAMES(ILES)    = 'SBG_MISC'
+YFIELDCOMMENTS(ILES) = 'subgrid: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_SBG_TKE(:,:,NLES_MISC)
 END IF
@@ -279,7 +296,8 @@ END IF
 !       --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -292,7 +310,8 @@ ILES_STA=ILES
 !       --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_TEND)
 !
@@ -302,7 +321,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_TEND)
 !
 IF ( ANY(XLES_BU_RES_KE(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_ADV'
+YFIELDNAMES(ILES)    = 'RES_ADV'
+YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_Ke(:,:,NLES_ADVM)
 END IF
@@ -313,17 +333,19 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_KE(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_FORC'
+YFIELDNAMES(ILES)    = 'RES_FORC'
+YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_Ke(:,:,NLES_FORC)
 END IF
 !
 !
-!* 1.19 production by mean wind gradient
+!* 1.19 dynamic production by mean wind gradient
 !       --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Ke(:,:,NLES_DP)
 !
@@ -332,7 +354,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Ke(:,:,NLES_DP)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_TR)
 !
@@ -342,7 +365,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_TR)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_PRES'
+YFIELDNAMES(ILES)    = 'RES_PRES'
+YFIELDCOMMENTS(ILES) = 'resolved pressure-correlation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_PRES)
 !
@@ -351,7 +375,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_PRES)
 !       ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TP'
+YFIELDNAMES(ILES)    = 'RES_TP'
+YFIELDCOMMENTS(ILES) = 'resolved thermal production'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_GRAV)
 !
@@ -360,7 +385,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_GRAV)
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_VTURB) + XLES_BU_RES_KE(:,:,NLES_HTURB)
 !
@@ -369,7 +395,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_VTURB) + XLES_BU_RES_KE(:,:,NLES
 !
 IF ( ANY(XLES_BU_RES_KE(:,:,NLES_COR)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_CORI'
+YFIELDNAMES(ILES)    = 'RES_CORI'
+YFIELDCOMMENTS(ILES) = 'resolved Coriolis effect'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_COR)
 END IF
@@ -379,7 +406,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_KE(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NUMD'
+YFIELDNAMES(ILES)    = 'RES_NUMD'
+YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_DIFF)
 END IF
@@ -389,7 +417,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_KE(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RELA'
+YFIELDNAMES(ILES)    = 'RES_RELA'
+YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_RELA)
 END IF
@@ -399,7 +428,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_KE(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NEST'
+YFIELDNAMES(ILES)    = 'RES_NEST'
+YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_NEST)
 END IF
@@ -411,7 +441,8 @@ END IF
 IF ( ANY( XLES_BU_RES_KE(:,:,NLES_MISC) &
          +XLES_BU_RES_KE(:,:,NLES_CURV) /= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_MISC'
+YFIELDNAMES(ILES)    = 'RES_MISC'
+YFIELDCOMMENTS(ILES) = 'resolved: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_KE(:,:,NLES_MISC)  &
                       + XLES_BU_RES_KE(:,:,NLES_CURV)
@@ -421,7 +452,8 @@ END IF
 !       ------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -432,13 +464,14 @@ END DO
 !       -------
 !
 !
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = 'resolved KE budget'
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'resolved KE budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'm2 s-3'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
@@ -446,16 +479,18 @@ call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles),
 !*      2.  temperature variance budget
 !           ---------------------------
 !
-YGROUP= 'BU_THL2'
+ygroup = 'BU_THL2'
+ygroupcomment = 'Temperature variance budget'
 ILES=0
 !
 ILES_STA=ILES
 !
-!* 2.1 production by mean gradients
+!* 2.1 dynamic production by mean gradients
 !      ----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 ZLES_BUDGET(:,:,ILES)= - 2. * XLES_SUBGRID_WThl(:,:,1) * XLES_MEAN_dThldz(:,:,1)
@@ -466,7 +501,8 @@ ZLES_BUDGET(:,:,ILES)= - 2. * XLES_SUBGRID_WThl(:,:,1) * XLES_MEAN_dThldz(:,:,1)
 !
 IF ( ANY(XLES_SUBGRID_WThl2(:,:,1)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES) = - ( XLES_SUBGRID_WThl2 (JK+1,:,1)      &
@@ -483,7 +519,8 @@ END IF
 !      --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 ILES_P2=ILES
 !
 ZLES_BUDGET(:,:,ILES)= - 2. * XLES_RES_ddxa_Thl_SBG_UaThl(:,:,1)  &
@@ -494,7 +531,8 @@ ZLES_BUDGET(:,:,ILES)= - 2. * XLES_RES_ddxa_Thl_SBG_UaThl(:,:,1)  &
 !      -----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_DISS_Thl2(:,:,1)
 !
@@ -503,7 +541,8 @@ ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_DISS_Thl2(:,:,1)
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -516,7 +555,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_TEND)
 !
@@ -526,7 +566,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_TEND)
 !
 IF ( ANY(XLES_BU_RES_Thl2(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_ADV'
+YFIELDNAMES(ILES)    = 'RES_ADV'
+YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_ADVM)
 END IF
@@ -537,7 +578,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Thl2(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_FORC'
+YFIELDNAMES(ILES)    = 'RES_FORC'
+YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_FORC)
 END IF
@@ -547,7 +589,8 @@ END IF
 !      ----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_DP)
 
@@ -556,7 +599,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_DP)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_TR)
 !
@@ -565,7 +609,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_TR)
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_VTURB) + XLES_BU_RES_Thl2(:,:,NLES_HTURB)
 !
@@ -574,7 +619,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_VTURB) + XLES_BU_RES_Thl2(:,:,
 !
 IF ( ANY(XLES_BU_RES_Thl2(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NUMD'
+YFIELDNAMES(ILES)    = 'RES_NUMD'
+YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_DIFF)
 END IF
@@ -584,7 +630,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Thl2(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RELA'
+YFIELDNAMES(ILES)    = 'RES_RELA'
+YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_RELA)
 END IF
@@ -594,7 +641,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Thl2(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NEST'
+YFIELDNAMES(ILES)    = 'RES_NEST'
+YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_NEST)
 END IF
@@ -607,7 +655,8 @@ IF ( ANY( XLES_BU_RES_Thl2(:,:,NLES_MISC) &
          +XLES_BU_RES_Thl2(:,:,NLES_MICR) &
          + XLES_BU_RES_Thl2(:,:,NLES_PREF) /= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_MISC'
+YFIELDNAMES(ILES)    = 'RES_MISC'
+YFIELDCOMMENTS(ILES) = 'resolved: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Thl2(:,:,NLES_MISC) &
                       + XLES_BU_RES_Thl2(:,:,NLES_RAD ) &
@@ -620,7 +669,8 @@ END IF
 !       ---------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -631,7 +681,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 IF (NLES_TIMES>2) THEN
@@ -650,7 +701,8 @@ END IF
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)=  -XLES_MEAN_W(JK,:,1)                 &
@@ -667,7 +719,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - ( XLES_RES_W_SBG_Thl2   (JK+1,:,1)    &
@@ -684,29 +737,32 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       -------
 !
 !
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = 'thetal variance budget'
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'thetal variance budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'K2 s-1'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
 !*      3.  temperature flux budget
 !            ---------------------
 !
-YGROUP= 'BU_WTHL'
+ygroup = 'BU_WTHL'
+ygroupcomment = 'Temperature flux budget'
 ILES=0
 !
 ILES_STA=ILES
 !
-!* 3.1 production by mean gradients
+!* 3.1 dynamic production by mean gradients
 !     -----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 ZLES_BUDGET(:,:,ILES) =  - XLES_SUBGRID_W2(:,:,1) * XLES_MEAN_dThldz(:,:,1)
@@ -716,7 +772,8 @@ ZLES_BUDGET(:,:,ILES) =  - XLES_SUBGRID_W2(:,:,1) * XLES_MEAN_dThldz(:,:,1)
 !     -------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 !
 ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddz_Thl_SBG_W2(:,:,1) &
                       - ZLES_BUDGET(:,:,ILES_P1)
@@ -727,7 +784,8 @@ ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddz_Thl_SBG_W2(:,:,1) &
 !
 IF ( ANY(XLES_SUBGRID_W2Thl(:,:,1)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES) = - ( XLES_SUBGRID_W2Thl (JK+1,:,1)       &
@@ -746,7 +804,8 @@ END IF
 !
 IF ( ANY(XLES_SUBGRID_ThlPz(:,:,1)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_PRES'
+YFIELDNAMES(ILES)    = 'SBG_PRES'
+YFIELDCOMMENTS(ILES) = 'subgrid pressure-correlation'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_ThlPz(:,:,1)
 END IF
@@ -756,7 +815,8 @@ END IF
 !      ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TP'
+YFIELDNAMES(ILES)    = 'SBG_TP'
+YFIELDCOMMENTS(ILES) = 'subgrid thermal production'
 !
 IF (LUSERV) THEN
   ZLES_BUDGET(:,:,ILEs) =  XG * XLES_SUBGRID_ThlThv(:,:,1)   &
@@ -773,7 +833,8 @@ END IF
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -786,7 +847,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_TEND)
 !
@@ -795,7 +857,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_TEND)
 !
 IF ( ANY(XLES_BU_RES_WThl(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_ADV'
+YFIELDNAMES(ILES)    = 'RES_ADV'
+YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_WThl(:,:,NLES_ADVM)
 END IF
@@ -805,7 +868,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WThl(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_FORC'
+YFIELDNAMES(ILES)    = 'RES_FORC'
+YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_WThl(:,:,NLES_FORC)
 END IF
@@ -815,7 +879,8 @@ END IF
 !       ----------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_WThl(:,:,NLES_DP)
 !
@@ -823,7 +888,8 @@ ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_WThl(:,:,NLES_DP)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_WThl(:,:,NLES_TR)
 !
@@ -832,7 +898,8 @@ ZLES_BUDGET(:,:,ILES) =  XLES_BU_RES_WThl(:,:,NLES_TR)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_PRES'
+YFIELDNAMES(ILES)    = 'RES_PRES'
+YFIELDCOMMENTS(ILES) = 'resolved pressure-correlation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_PRES)
 !
@@ -841,7 +908,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_PRES)
 !       ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TP'
+YFIELDNAMES(ILES)    = 'RES_TP'
+YFIELDCOMMENTS(ILES) = 'resolved thermal production'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_GRAV)
 !
@@ -850,7 +918,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_GRAV)
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_VTURB) + XLES_BU_RES_WThl(:,:,NLES_HTURB)
 !
@@ -859,7 +928,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_VTURB) + XLES_BU_RES_WThl(:,:,
 !
 IF ( ANY(XLES_BU_RES_WThl(:,:,NLES_COR)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_CORI'
+YFIELDNAMES(ILES)    = 'RES_CORI'
+YFIELDCOMMENTS(ILES) = 'resolved Coriolis effect'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_COR)
 END IF
@@ -869,7 +939,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WThl(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NUMD'
+YFIELDNAMES(ILES)    = 'RES_NUMD'
+YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_DIFF)
 END IF
@@ -879,7 +950,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WThl(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RELA'
+YFIELDNAMES(ILES)    = 'RES_RELA'
+YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_RELA)
 END IF
@@ -889,7 +961,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WThl(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NEST'
+YFIELDNAMES(ILES)    = 'RES_NEST'
+YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_NEST)
 END IF
@@ -903,7 +976,8 @@ IF ( ANY( XLES_BU_RES_WThl(:,:,NLES_MISC) &
          +XLES_BU_RES_WThl(:,:,NLES_PREF) &
          +XLES_BU_RES_WThl(:,:,NLES_CURV) /= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_MISC'
+YFIELDNAMES(ILES)    = 'RES_MISC'
+YFIELDCOMMENTS(ILES) = 'resolved: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WThl(:,:,NLES_MISC) &
                       + XLES_BU_RES_WThl(:,:,NLES_RAD ) &
@@ -917,7 +991,8 @@ END IF
 !       --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -928,7 +1003,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 IF (NLES_TIMES>2) THEN
@@ -949,7 +1025,8 @@ END IF
 !       ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - XLES_MEAN_W(JK,:,1)                               &
@@ -966,7 +1043,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - ( XLES_RES_W_SBG_WThl(JK+1,:,1)   &
@@ -982,7 +1060,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ----------------------------------------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_DPGW'
+YFIELDNAMES(ILES)    = 'NSG_DPGW'
+YFIELDCOMMENTS(ILES) = 'neglected production by gradient of vertical velocity for subgrid quantity'
 !
 ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddxa_W_SBG_UaThl(:,:,1)
 !
@@ -991,7 +1070,8 @@ ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddxa_W_SBG_UaThl(:,:,1)
 !       -------------------------------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_DPGT'
+YFIELDNAMES(ILES)    = 'NSG_DPGT'
+YFIELDCOMMENTS(ILES) = 'neglected production by horizontal gradient of Thl for subgrid quantity'
 !
 ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Thl_SBG_UaW(:,:,1)       &
                       -ZLES_BUDGET(:,:,ILES_P1) -ZLES_BUDGET(:,:,ILES_P2)
@@ -1002,13 +1082,14 @@ ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Thl_SBG_UaW(:,:,1)       &
 !       -------
 !
 !
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = 'thetal flux budget'
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'thetal flux budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'm K s-2'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_les_rt_budgetn.f90 b/src/MNH/write_les_rt_budgetn.f90
index e2cb0096113e8b44e841339a15fc495dd93453bd..114d39cda70bc47d713bcfbddc3f550c9a27d491 100644
--- a/src/MNH/write_les_rt_budgetn.f90
+++ b/src/MNH/write_les_rt_budgetn.f90
@@ -91,8 +91,10 @@ INTEGER :: ILES_P1, ILES_P2
 INTEGER :: JK ! vertical loop counter
 INTEGER :: JT ! temporal loop counter
 !
-CHARACTER(len=9), DIMENSION(NMAX_ILES) :: YSUBTITLE
-CHARACTER(len=8)                       :: YGROUP
+CHARACTER(len=9),   DIMENSION(NMAX_ILES) :: YFIELDNAMES
+CHARACTER(len=100), DIMENSION(NMAX_ILES) :: YFIELDCOMMENTS
+character(len=:),   allocatable          :: ygroup
+character(len=:),   allocatable          :: ygroupcomment
 !
 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZLES_BUDGET
 !
@@ -125,16 +127,18 @@ gdonorm = Trim( cles_norm_type ) /= 'NONE'
 !           ---------------------------
 !
 !
-YGROUP= 'BU_RT2'
+ygroup = 'BU_RT2'
+ygroupcomment = 'Total water variance budget'
 ILES=0
 ILES_STA=ILES
 !
 !
-!* 2.1 production by mean gradients
+!* 2.1 dynamic production by mean gradients
 !      ----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 ZLES_BUDGET(:,:,ILES)= - 2. * XLES_SUBGRID_WRt(:,:,1) * XLES_MEAN_dRtdz(:,:,1)
@@ -144,7 +148,8 @@ ZLES_BUDGET(:,:,ILES)= - 2. * XLES_SUBGRID_WRt(:,:,1) * XLES_MEAN_dRtdz(:,:,1)
 !      --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 !
 ZLES_BUDGET(:,:,ILES)= - 2. * XLES_RES_ddxa_Rt_SBG_UaRt(:,:,1)  &
                           - ZLES_BUDGET(:,:,ILES_P1)
@@ -155,7 +160,8 @@ ZLES_BUDGET(:,:,ILES)= - 2. * XLES_RES_ddxa_Rt_SBG_UaRt(:,:,1)  &
 !
 IF ( ANY(XLES_SUBGRID_WRt2(:,:,1)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES) = - ( XLES_SUBGRID_WRt2 (JK+1,:,1)      &
@@ -172,7 +178,8 @@ END IF
 !      -----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_DISS_Rt2(:,:,1)
 !
@@ -181,7 +188,8 @@ ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_DISS_Rt2(:,:,1)
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -194,7 +202,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_TEND)
 !
@@ -204,7 +213,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_TEND)
 !
 IF ( ANY(XLES_BU_RES_Rt2(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_ADV'
+YFIELDNAMES(ILES)    = 'RES_ADV'
+YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_ADVM)
 END IF
@@ -214,7 +224,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Rt2(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_FORC'
+YFIELDNAMES(ILES)    = 'RES_FORC'
+YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_FORC)
 END IF
@@ -224,7 +235,8 @@ END IF
 !      ----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_DP)
 
@@ -233,7 +245,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_DP)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_TR)
 !
@@ -242,7 +255,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_TR)
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_VTURB) + XLES_BU_RES_Rt2(:,:,NLES_HTURB)
 !
@@ -252,7 +266,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_VTURB) + XLES_BU_RES_Rt2(:,:,NL
 !
 IF ( ANY(XLES_BU_RES_Rt2(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NUMD'
+YFIELDNAMES(ILES)    = 'RES_NUMD'
+YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_DIFF)
 END IF
@@ -262,7 +277,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Rt2(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RELA'
+YFIELDNAMES(ILES)    = 'RES_RELA'
+YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_RELA)
 END IF
@@ -272,7 +288,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Rt2(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NEST'
+YFIELDNAMES(ILES)    = 'RES_NEST'
+YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_NEST)
 END IF
@@ -283,7 +300,8 @@ END IF
 IF ( ANY( XLES_BU_RES_Rt2(:,:,NLES_MISC) &
          +XLES_BU_RES_Rt2(:,:,NLES_MICR)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_MISC'
+YFIELDNAMES(ILES)    = 'RES_MISC'
+YFIELDCOMMENTS(ILES) = 'resolved: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_Rt2(:,:,NLES_MISC) &
                       + XLES_BU_RES_Rt2(:,:,NLES_MICR)
@@ -294,7 +312,8 @@ END IF
 !       ---------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -305,7 +324,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 IF (NLES_TIMES>2) THEN
@@ -324,7 +344,8 @@ END IF
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)=  -XLES_MEAN_W(JK,:,1)                &
@@ -341,7 +362,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - ( XLES_RES_W_SBG_Rt2   (JK+1,:,1)    &
@@ -357,13 +379,14 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !* 2.16 writing
 !       -------
 !
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = 'Rt variance budget'
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'Rt variance budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'kg2 kg-2 s-1'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
@@ -371,15 +394,17 @@ call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles),
 !           -----------------------
 !
 !
-YGROUP= 'BU_WRT'
+ygroup = 'BU_WRT'
+ygroupcomment = 'Total water flux budget'
 ILES=0
 ILES_STA=ILES
 !
-!* 3.1 production by mean gradients
+!* 3.1 dynamic production by mean gradients
 !     -----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 ZLES_BUDGET(:,:,ILES) =  - XLES_SUBGRID_W2(:,:,1) * XLES_MEAN_dRtdz(:,:,1)
@@ -389,7 +414,8 @@ ZLES_BUDGET(:,:,ILES) =  - XLES_SUBGRID_W2(:,:,1) * XLES_MEAN_dRtdz(:,:,1)
 !     -------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(2) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 ILES_P2=ILES
 !
 ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddz_Rt_SBG_W2(:,:,1) &
@@ -402,7 +428,8 @@ ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddz_Rt_SBG_W2(:,:,1) &
 !
 IF ( ANY(XLES_SUBGRID_W2Rt(:,:,1)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES) = - ( XLES_SUBGRID_W2Rt (JK+1,:,1)       &
@@ -420,7 +447,8 @@ END IF
 !      -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_PRES'
+YFIELDNAMES(ILES)    = 'SBG_PRES'
+YFIELDCOMMENTS(ILES) = 'subgrid pressure-correlation'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_RtPz(:,:,1)
 !
@@ -429,7 +457,8 @@ ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_RtPz(:,:,1)
 !      ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TP'
+YFIELDNAMES(ILES)    = 'SBG_TP'
+YFIELDCOMMENTS(ILES) = 'subgrid thermal production'
 !
 ZLES_BUDGET(:,:,ILES) =  XG * XLES_SUBGRID_RtThv(:,:,1)   &
                             / XLES_MEAN_Thv     (:,:,1)
@@ -440,7 +469,8 @@ ZLES_BUDGET(:,:,ILES) =  XG * XLES_SUBGRID_RtThv(:,:,1)   &
 !
 !PW: not in the documentation, but set to 0 anyway
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 !
@@ -449,7 +479,8 @@ ZLES_BUDGET(:,:,ILES) = 0.
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -462,7 +493,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_TEND)
 !
@@ -471,7 +503,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_TEND)
 !
 IF ( ANY(XLES_BU_RES_WRt(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_ADV'
+YFIELDNAMES(ILES)    = 'RES_ADV'
+YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_ADVM)
 END IF
@@ -481,7 +514,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WRt(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_FORC'
+YFIELDNAMES(ILES)    = 'RES_FORC'
+YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_FORC)
 END IF
@@ -490,7 +524,8 @@ END IF
 !       ----------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_DP)
 !
@@ -498,7 +533,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_DP)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_TR)
 !
@@ -507,7 +543,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_TR)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_PRES'
+YFIELDNAMES(ILES)    = 'RES_PRES'
+YFIELDCOMMENTS(ILES) = 'resolved pressure-correlation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_PRES)
 !
@@ -516,7 +553,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_PRES)
 !       ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TP'
+YFIELDNAMES(ILES)    = 'RES_TP'
+YFIELDCOMMENTS(ILES) = 'resolved thermal production'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_GRAV)
 !
@@ -525,7 +563,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_GRAV)
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_VTURB) + XLES_BU_RES_WRt(:,:,NLES_HTURB)
 !
@@ -534,7 +573,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_VTURB) + XLES_BU_RES_WRt(:,:,NL
 !
 IF ( ANY(XLES_BU_RES_WRt(:,:,NLES_COR)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_CORI'
+YFIELDNAMES(ILES)    = 'RES_CORI'
+YFIELDCOMMENTS(ILES) = 'resolved Coriolis effect'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_COR)
 END IF
@@ -544,7 +584,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WRt(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NUMD'
+YFIELDNAMES(ILES)    = 'RES_NUMD'
+YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_DIFF)
 END IF
@@ -554,7 +595,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WRt(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RELA'
+YFIELDNAMES(ILES)    = 'RES_RELA'
+YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_RELA)
 END IF
@@ -564,7 +606,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WRt(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NEST'
+YFIELDNAMES(ILES)    = 'RES_NEST'
+YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_NEST)
 END IF
@@ -575,7 +618,8 @@ END IF
 IF ( ANY( XLES_BU_RES_WRt(:,:,NLES_MISC) &
          +XLES_BU_RES_WRt(:,:,NLES_MICR) /= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_MISC'
+YFIELDNAMES(ILES)    = 'RES_MISC'
+YFIELDCOMMENTS(ILES) = 'resolved: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_WRt(:,:,NLES_MISC) &
                       + XLES_BU_RES_WRt(:,:,NLES_MICR)
@@ -585,7 +629,8 @@ END IF
 !       --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -596,7 +641,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 IF (NLES_TIMES>2) THEN
@@ -617,7 +663,8 @@ END IF
 !       ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - XLES_MEAN_W(JK,:,1)                              &
@@ -634,7 +681,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - ( XLES_RES_W_SBG_WRt(JK+1,:,1)   &
@@ -650,7 +698,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ----------------------------------------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_DPGW'
+YFIELDNAMES(ILES)    = 'NSG_DPGW'
+YFIELDCOMMENTS(ILES) = 'neglected production by gradient of vertical velocity for subgrid quantity'
 !
 ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddxa_W_SBG_UaRt(:,:,1)
 !
@@ -659,7 +708,8 @@ ZLES_BUDGET(:,:,ILES)=- XLES_RES_ddxa_W_SBG_UaRt(:,:,1)
 !       -------------------------------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_DPGT'
+YFIELDNAMES(ILES)    = 'NSG_DPGT'
+YFIELDCOMMENTS(ILES) = 'neglected production by horizontal gradient of Thl for subgrid quantity'
 !
 ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Rt_SBG_UaW(:,:,1)       &
                       -ZLES_BUDGET(:,:,ILES_P1) -ZLES_BUDGET(:,:,ILES_P2)
@@ -668,13 +718,14 @@ ZLES_BUDGET(:,:,ILES)=-XLES_RES_ddxa_Rt_SBG_UaW(:,:,1)       &
 !* 3.22 writing
 !       -------
 !
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = 'Rt flux budget'
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'Rt flux budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'm kg kg-1 s-2'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
@@ -682,16 +733,19 @@ call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles),
 !           ------------------------------------------------------------
 !
 !
+ygroup = 'BU_THLR'
+ygroupcomment = 'Liquid potential temperature - total water covariance budget'
 YGROUP= 'BU_THLR'
 ILES=0
 ILES_STA=ILES
 !
 !
-!* 2.1 production by mean gradients
+!* 2.1 dynamic production by mean gradients
 !      ----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 ZLES_BUDGET(:,:,ILES)=-XLES_SUBGRID_WRt (:,:,1) * XLES_MEAN_dThldz(:,:,1) &
@@ -702,7 +756,8 @@ ZLES_BUDGET(:,:,ILES)=-XLES_SUBGRID_WRt (:,:,1) * XLES_MEAN_dThldz(:,:,1) &
 !      --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 !
 ZLES_BUDGET(:,:,ILES)= - XLES_RES_ddxa_Rt_SBG_UaThl(:,:,1)  &
                        - XLES_RES_ddxa_Thl_SBG_UaRt(:,:,1)  &
@@ -714,7 +769,8 @@ ZLES_BUDGET(:,:,ILES)= - XLES_RES_ddxa_Rt_SBG_UaThl(:,:,1)  &
 !
 IF ( ANY(XLES_SUBGRID_WThlRt(:,:,1)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES) = - ( XLES_SUBGRID_WThlRt (JK+1,:,1)      &
@@ -731,7 +787,8 @@ END IF
 !      -----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_DISS_ThlRt(:,:,1)
 !
@@ -740,7 +797,8 @@ ZLES_BUDGET(:,:,ILES) =  XLES_SUBGRID_DISS_ThlRt(:,:,1)
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -753,7 +811,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_TEND)
 !
@@ -763,7 +822,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_TEND)
 !
 IF ( ANY(XLES_BU_RES_ThlRt(:,:,NLES_ADVM)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(7) = 'RES_ADV'
+YFIELDNAMES(ILES)    = 'RES_ADV'
+YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_ADVM)
 END IF
@@ -773,7 +833,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_ThlRt(:,:,NLES_FORC)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_FORC'
+YFIELDNAMES(ILES)    = 'RES_FORC'
+YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_FORC)
 END IF
@@ -782,7 +843,8 @@ END IF
 !      ----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_DP)
 !
@@ -790,7 +852,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_DP)
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_TR)
 !
@@ -799,7 +862,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_TR)
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_VTURB) + XLES_BU_RES_ThlRt(:,:,NLES_HTURB)
 !
@@ -809,7 +873,8 @@ ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_VTURB) + XLES_BU_RES_ThlRt(:,
 !
 IF ( ANY(XLES_BU_RES_ThlRt(:,:,NLES_DIFF)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NUMD'
+YFIELDNAMES(ILES)    = 'RES_NUMD'
+YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_DIFF)
 END IF
@@ -819,7 +884,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_ThlRt(:,:,NLES_RELA)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RELA'
+YFIELDNAMES(ILES)    = 'RES_RELA'
+YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_RELA)
 END IF
@@ -829,7 +895,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_ThlRt(:,:,NLES_NEST)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_NEST'
+YFIELDNAMES(ILES)    = 'RES_NEST'
+YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_NEST)
 END IF
@@ -842,7 +909,8 @@ IF ( ANY( XLES_BU_RES_ThlRt(:,:,NLES_MISC) &
          +XLES_BU_RES_ThlRt(:,:,NLES_RAD ) &
          +XLES_BU_RES_ThlRt(:,:,NLES_MICR) /= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_MISC'
+YFIELDNAMES(ILES)    = 'RES_MISC'
+YFIELDCOMMENTS(ILES) = 'resolved: other effects'
 !
 ZLES_BUDGET(:,:,ILES) = XLES_BU_RES_ThlRt(:,:,NLES_MISC) &
                       + XLES_BU_RES_ThlRt(:,:,NLES_PREF) &
@@ -855,7 +923,8 @@ END IF
 !       ---------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 DO JLES=ILES_STA+1,ILES-1
@@ -866,7 +935,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 ZLES_BUDGET(:,:,ILES) = 0.
 IF (NLES_TIMES>2) THEN
@@ -885,7 +955,8 @@ END IF
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)=  -XLES_MEAN_W(JK,:,1)                &
@@ -902,7 +973,8 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JK=2,NLES_K-1
   ZLES_BUDGET(JK,:,ILES)= - ( XLES_RES_W_SBG_ThlRt (JK+1,:,1)    &
@@ -918,13 +990,14 @@ ZLES_BUDGET(NLES_K,:,ILES) = ZLES_BUDGET(NLES_K-1,:,ILES)
 !* 2.16 writing
 !       -------
 !
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = 'Thl-Rt covariance budget'
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'Thl-Rt covariance budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'K kg kg-1 s-1'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_les_sv_budgetn.f90 b/src/MNH/write_les_sv_budgetn.f90
index 4bed642c49d6f57d932b4a8e5771b2bf9045b0fe..6a3997964fff08e950d3de7c18fa1603f5e392ad 100644
--- a/src/MNH/write_les_sv_budgetn.f90
+++ b/src/MNH/write_les_sv_budgetn.f90
@@ -92,9 +92,10 @@ INTEGER :: JT ! temporal loop counter
 INTEGER :: JSV! scalar loop counter
 INTEGER :: JP ! process loop counter
 !
-CHARACTER(len=9), DIMENSION(NMAX_ILES)      :: YSUBTITLE
-CHARACTER(len=8)                            :: YGROUP
-CHARACTER(len=20)                           :: YTITLE
+CHARACTER(len=9),   DIMENSION(NMAX_ILES) :: YFIELDNAMES
+CHARACTER(len=100), DIMENSION(NMAX_ILES) :: YFIELDCOMMENTS
+character(len=:),   allocatable          :: ygroup
+character(len=:),   allocatable          :: ygroupcomment
 !
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZLES_BUDGET
 !
@@ -115,16 +116,18 @@ ZLES_BUDGET(:,:,:,:) = XUNDEF
 !           ----------------------------
 !
 !
-YGROUP='BU_SV2'
+ygroup = 'BU_SV2'
+ygroupcomment = 'Total scalar variance budget'
 !
 ILES=0
 ILES_STA=ILES
 !
-!* 2.1 production by mean gradients
+!* 2.1 dynamic production by mean gradients
 !      ----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 DO JSV=1,NSV
@@ -136,7 +139,8 @@ END DO
 !      --------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV)= - 2. * XLES_RES_ddxa_Sv_SBG_UaSv(:,:,1,JSV)  &
@@ -149,7 +153,8 @@ END DO
 !
 IF ( ANY(XLES_SUBGRID_WSv2(:,:,1,:)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JSV=1,NSV
   DO JK=2,NLES_K-1
@@ -168,7 +173,8 @@ END IF
 !      -----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) =  XLES_SUBGRID_DISS_Sv2(:,:,1,JSV)
@@ -179,7 +185,8 @@ END DO
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = 0.
@@ -194,7 +201,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_TEND,JSV)
@@ -205,7 +213,8 @@ END DO
 !
 IF ( ANY(XLES_BU_RES_Sv2(:,:,NLES_ADVM,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_ADV'
+  YFIELDNAMES(ILES)    = 'RES_ADV'
+  YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
 !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_ADVM,JSV)
@@ -217,7 +226,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Sv2(:,:,NLES_FORC,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_FORC'
+  YFIELDNAMES(ILES)    = 'RES_FORC'
+  YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
 !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_FORC,JSV)
@@ -229,7 +239,8 @@ END IF
 !      ----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_DP,JSV)
@@ -239,7 +250,8 @@ END DO
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_TR,JSV)
@@ -250,7 +262,8 @@ END DO
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_VTURB,JSV) &
@@ -262,7 +275,8 @@ END DO
 !
 IF ( ANY(XLES_BU_RES_Sv2(:,:,NLES_DIFF,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_NUMD'
+  YFIELDNAMES(ILES)    = 'RES_NUMD'
+  YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
 !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_DIFF,JSV)
@@ -274,7 +288,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Sv2(:,:,NLES_RELA,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_RELA'
+  YFIELDNAMES(ILES)    = 'RES_RELA'
+  YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
 !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_RELA,JSV)
@@ -286,7 +301,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Sv2(:,:,NLES_NEST,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_NEST'
+  YFIELDNAMES(ILES)    = 'RES_NEST'
+  YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
 !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_NEST,JSV)
@@ -298,7 +314,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_Sv2(:,:,NLES_MISC,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_MISC'
+  YFIELDNAMES(ILES)    = 'RES_MISC'
+  YFIELDCOMMENTS(ILES) = 'resolved: other effects'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_Sv2(:,:,NLES_MISC,JSV)
@@ -309,7 +326,8 @@ END IF
 !       ---------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = 0.
@@ -322,7 +340,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 IF (NLES_TIMES>2) THEN
   DO JSV=1,NSV
@@ -343,7 +362,8 @@ END IF
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JSV=1,NSV
   DO JK=2,NLES_K-1
@@ -361,7 +381,8 @@ END DO
 !       ----------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JSV=1,NSV
   DO JK=2,NLES_K-1
@@ -378,15 +399,13 @@ END DO
 !* 2.16 writing
 !       -------
 !
-YTITLE = "Sv variance budget  "
-
 tzfield%ngrid = 0 !Not on the Arakawa grid
 tzfield%ntype = TYPEREAL
 
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = ytitle
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'Sv variance budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'kg2 kg-2 s-1'
 
 tzfield%ndims = 4
@@ -399,7 +418,8 @@ tzfield%ndimlist(5:) = NMNHDIM_UNUSED
 gdoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
 gdonorm = trim(cles_norm_type) /= 'NONE'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles, :), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles, :), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
@@ -407,17 +427,19 @@ call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles,
 !           -----------------------
 !
 !
-YGROUP = 'BU_WSV'
+ygroup = 'BU_WSV'
+ygroupcomment = 'Total water flux budget'
 !
 !
 ILES=0
 ILES_STA=ILES
 !
-!* 3.1 production by mean gradients
+!* 3.1 dynamic production by mean gradients
 !     -----------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_M'
+YFIELDNAMES(ILES)    = 'SBG_DP_M'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by mean gradient'
 ILES_P1=ILES
 !
 DO JSV=1,NSV
@@ -430,7 +452,8 @@ END DO
 !     -------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DP_R'
+YFIELDNAMES(ILES)    = 'SBG_DP_R'
+YFIELDCOMMENTS(ILES) = 'subgrid dynamic production by resolved fluctuations'
 ILES_P2=ILES
 !
 DO JSV=1,NSV
@@ -445,7 +468,8 @@ END DO
 !
 IF ( ANY(XLES_SUBGRID_W2Sv(:,:,1,:)/= 0.) ) THEN
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TR'
+YFIELDNAMES(ILES)    = 'SBG_TR'
+YFIELDCOMMENTS(ILES) = 'subgrid turbulent transport'
 !
 DO JSV=1,NSV
   DO JK=2,NLES_K-1
@@ -464,7 +488,8 @@ END IF
 !      -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_PRES'
+YFIELDNAMES(ILES)    = 'SBG_PRES'
+YFIELDCOMMENTS(ILES) = 'subgrid pressure-correlation'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) =  XLES_SUBGRID_SvPz(:,:,1,JSV)
@@ -475,7 +500,8 @@ END DO
 !      ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_TP'
+YFIELDNAMES(ILES)    = 'SBG_TP'
+YFIELDCOMMENTS(ILES) = 'subgrid thermal production'
 !
 IF (LUSERV) THEN
   DO JSV=1,NSV
@@ -494,7 +520,9 @@ END IF
 !      -----------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_DISS'
+!PW: not in documentation. Always set to 0
+YFIELDNAMES(ILES)    = 'SBG_DISS'
+YFIELDCOMMENTS(ILES) = 'subgrid dissipation'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = 0.
@@ -505,7 +533,8 @@ END DO
 !      --------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'SBG_RESI'
+YFIELDNAMES(ILES)    = 'SBG_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of subgrid budget'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = 0.
@@ -520,7 +549,8 @@ ILES_STA=ILES
 !      --------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TEND'
+YFIELDNAMES(ILES)    = 'RES_TEND'
+YFIELDCOMMENTS(ILES) = 'resolved tendency'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_TEND,JSV)
@@ -531,7 +561,8 @@ END DO
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_ADVM,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_ADV'
+  YFIELDNAMES(ILES)    = 'RES_ADV'
+  YFIELDCOMMENTS(ILES) = 'resolved advection by mean flow'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_ADVM,JSV)
@@ -543,7 +574,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_FORC,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_FORC'
+  YFIELDNAMES(ILES)    = 'RES_FORC'
+  YFIELDCOMMENTS(ILES) = 'resolved advection by large-scale W forcing'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_FORC,JSV)
@@ -554,7 +586,8 @@ END IF
 !       ----------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_DP'
+YFIELDNAMES(ILES)    = 'RES_DP'
+YFIELDCOMMENTS(ILES) = 'resolved dynamic production by mean gradient'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_DP,JSV)
@@ -564,7 +597,8 @@ END DO
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TR'
+YFIELDNAMES(ILES)    = 'RES_TR'
+YFIELDCOMMENTS(ILES) = 'turbulent transport of resolved flux by itself'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_TR,JSV)
@@ -575,7 +609,8 @@ END DO
 !       -------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_PRES'
+YFIELDNAMES(ILES)    = 'RES_PRES'
+YFIELDCOMMENTS(ILES) = 'resolved pressure-correlation'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_PRES,JSV)
@@ -586,7 +621,8 @@ END DO
 !       ------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_TP'
+YFIELDNAMES(ILES)    = 'RES_TP'
+YFIELDCOMMENTS(ILES) = 'resolved thermal production'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_GRAV,JSV)
@@ -597,7 +633,8 @@ END DO
 !       ----------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_SBGT'
+YFIELDNAMES(ILES)    = 'RES_SBGT'
+YFIELDCOMMENTS(ILES) = 'resolved sink due to subgrid turbulence'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_VTURB,JSV) + XLES_BU_RES_WSv(:,:,NLES_HTURB,JSV)
@@ -608,7 +645,8 @@ END DO
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_COR,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_CORI'
+  YFIELDNAMES(ILES)    = 'RES_CORI'
+  YFIELDCOMMENTS(ILES) = 'resolved Coriolis effect'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_COR,JSV)
@@ -620,7 +658,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_DIFF,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_NUMD'
+  YFIELDNAMES(ILES)    = 'RES_NUMD'
+  YFIELDCOMMENTS(ILES) = 'resolved numerical diffusion'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_DIFF,JSV)
@@ -632,7 +671,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_RELA,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_RELA'
+  YFIELDNAMES(ILES)    = 'RES_RELA'
+  YFIELDCOMMENTS(ILES) = 'resolved sponge layer relaxation'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_RELA,JSV)
@@ -644,7 +684,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_NEST,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_NEST'
+  YFIELDNAMES(ILES)    = 'RES_NEST'
+  YFIELDCOMMENTS(ILES) = 'resolved average from smaller nested models'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_NEST,JSV)
@@ -656,7 +697,8 @@ END IF
 !
 IF ( ANY(XLES_BU_RES_WSv(:,:,NLES_MISC,:)/= 0.) ) THEN
   ILES=ILES+1
-  YSUBTITLE(ILES) = 'RES_MISC'
+  YFIELDNAMES(ILES)    = 'RES_MISC'
+  YFIELDCOMMENTS(ILES) = 'resolved: other effects'
   !
   DO JSV=1,NSV
     ZLES_BUDGET(:,:,ILES,JSV) = XLES_BU_RES_WSv(:,:,NLES_MISC,JSV)
@@ -667,7 +709,8 @@ END IF
 !       -------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'RES_RESI'
+YFIELDNAMES(ILES)    = 'RES_RESI'
+YFIELDCOMMENTS(ILES) = 'residual of resolved budget'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = 0.
@@ -680,7 +723,8 @@ END DO
 !       ------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_TEND'
+YFIELDNAMES(ILES)    = 'NSG_TEND'
+YFIELDCOMMENTS(ILES) = 'neglected tendency'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV) = 0.
@@ -703,7 +747,8 @@ END DO
 !       ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVM'
+YFIELDNAMES(ILES)    = 'NSG_ADVM'
+YFIELDCOMMENTS(ILES) = 'neglected advection by mean flow'
 !
 DO JSV=1,NSV
   DO JK=2,NLES_K-1
@@ -721,7 +766,8 @@ END DO
 !       ------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_ADVR'
+YFIELDNAMES(ILES)    = 'NSG_ADVR'
+YFIELDCOMMENTS(ILES) = 'neglected advection by resolved flow'
 !
 DO JSV=1,NSV
   DO JK=2,NLES_K-1
@@ -738,7 +784,8 @@ END DO
 !       ----------------------------------------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_DPGW'
+YFIELDNAMES(ILES)    = 'NSG_DPGW'
+YFIELDCOMMENTS(ILES) = 'neglected production by gradient of vertical velocity for subgrid quantity'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV)=- XLES_RES_ddxa_W_SBG_UaSv(:,:,1,JSV)
@@ -749,7 +796,8 @@ END DO
 !       -------------------------------------------------------------------------
 !
 ILES=ILES+1
-YSUBTITLE(ILES) = 'NSG_DPGT'
+YFIELDNAMES(ILES)    = 'NSG_DPGT'
+YFIELDCOMMENTS(ILES) = 'neglected production by horizontal gradient of Thl for subgrid quantity'
 !
 DO JSV=1,NSV
   ZLES_BUDGET(:,:,ILES,JSV)=-XLES_RES_ddxa_Sv_SBG_UaW(:,:,1,JSV)       &
@@ -760,15 +808,13 @@ END DO
 !* 3.22 writing
 !       -------
 !
-YTITLE = "Sv flux budget      "
-
 tzfield%ngrid = 0 !Not on the Arakawa grid
 tzfield%ntype = TYPEREAL
 
-tzfield%cmnhname  = ygroup
+tzfield%cmnhname  = ygroup !cmnhname will be overwritten by yfieldnames(:) in Les_diachro
 tzfield%cstdname  = ''
-tzfield%clongname = ygroup
-tzfield%ccomment  = ytitle
+tzfield%clongname = ygroup !clongname will be overwritten by yfieldnames(:) in Les_diachro
+tzfield%ccomment  = 'Sv flux budget' !ccomment will be completed with yfieldnames(:) in Les_diachro
 tzfield%cunits    = 'm kg kg-1 s-2'
 
 tzfield%ndims = 4
@@ -781,7 +827,8 @@ tzfield%ndimlist(5:) = NMNHDIM_UNUSED
 gdoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
 gdonorm = trim(cles_norm_type) /= 'NONE'
 
-call Les_diachro( tpdiafile, tzfield, gdoavg, gdonorm, zles_budget(:, :, :iles, :), hsuffixes = ysubtitle(:iles) )
+call Les_diachro( tpdiafile, tzfield, ygroup, ygroupcomment, gdoavg, gdonorm, zles_budget(:, :, :iles, :), &
+                  hfieldnames = yfieldnames(:iles), hfieldcomments = yfieldcomments(:iles) )
 
 !-------------------------------------------------------------------------------
 !
diff --git a/src/MNH/write_lesn.f90 b/src/MNH/write_lesn.f90
index e971d432cbfe94e4be5c582197476ede4ad2507a..1369cb378249bfbe9d38b9925d2d77117bde88a8 100644
--- a/src/MNH/write_lesn.f90
+++ b/src/MNH/write_lesn.f90
@@ -16,6 +16,9 @@ private
 public :: Write_les_n
 
 
+character(len=:), allocatable :: cgroup
+character(len=:), allocatable :: cgroupcomment
+
 logical :: ldoavg    ! Compute and store time average
 logical :: ldonorm   ! Compute and store normalized field
 
@@ -77,6 +80,7 @@ subroutine  Write_les_n( tpdiafile )
 use modd_conf_n,     only: luserv, luserc, luserr, luseri, lusers, luserg, luserh
 use modd_io,         only: tfiledata
 use modd_field,      only: NMNHDIM_BUDGET_LES_TIME, NMNHDIM_BUDGET_LES_LEVEL, NMNHDIM_BUDGET_LES_SV, NMNHDIM_BUDGET_LES_MASK, &
+                           NMNHDIM_BUDGET_LES_PDF,                                                                            &
                            NMNHDIM_SPECTRA_2PTS_NI, NMNHDIM_SPECTRA_2PTS_NJ,  NMNHDIM_SPECTRA_LEVEL, NMNHDIM_UNUSED,          &
                            TYPEREAL
 use modd_grid_n,     only: xdxhat, xdyhat
@@ -283,6 +287,9 @@ tfield%ndimlist(4:) = NMNHDIM_UNUSED
 ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
 ldonorm = .false.
 
+cgroup        = 'Miscellaneous'
+cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)'
+
 call Les_diachro_write( tpdiafile, zavg_pts_ll,                'AVG_PTS',  'number of points used for averaging',   '1', ymasks )
 call Les_diachro_write( tpdiafile, zavg_pts_ll / zcart_pts_ll, 'AVG_PTSF', 'fraction of points used for averaging', '1', ymasks )
 call Les_diachro_write( tpdiafile, zund_pts_ll,                'UND_PTS',  'number of points below orography',      '1', ymasks )
@@ -294,6 +301,9 @@ DEALLOCATE(ZUND_PTS_ll)
 !*      2.1  mean quantities
 !            ---------------
 !
+cgroup = 'Mean'
+cgroupcomment = 'Mean vertical profiles of the model variables'
+
 tfield%ndims = 3
 tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
 tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
@@ -374,6 +384,16 @@ call Les_diachro_write( tpdiafile, XLES_MEAN_WIND, 'MEANWIND',       'Profile of
 call Les_diachro_write( tpdiafile, XLES_RESOLVED_MASSFX, 'MEANMSFX', 'Total updraft mass flux',         'kg m-2 s-1', ymasks )
 
 if ( lles_pdf ) then
+  cgroup = 'PDF'
+  cgroupcomment = ''
+
+  tfield%ndims = 4
+  !tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
+  !tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
+  !tfield%ndimlist(3)  = NMNHDIM_BUDGET_LES_MASK
+  tfield%ndimlist(4)  = NMNHDIM_BUDGET_LES_PDF
+  tfield%ndimlist(5:) = NMNHDIM_UNUSED
+
   call Les_diachro_write( tpdiafile,   XLES_PDF_TH,  'PDF_TH',  'Pdf potential temperature Profiles', '1', ymasks )
   call Les_diachro_write( tpdiafile,   XLES_PDF_W,   'PDF_W',   'Pdf vertical velocity Profiles',     '1', ymasks )
   call Les_diachro_write( tpdiafile,   XLES_PDF_THV, 'PDF_THV', 'Pdf virtual pot. temp. Profiles',    '1', ymasks )
@@ -402,6 +422,9 @@ if ( lles_resolved ) then
   ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
   ldonorm = trim(cles_norm_type) /= 'NONE'
 
+  cgroup = 'Resolved'
+  cgroupcomment = 'Mean vertical profiles of the resolved fluxes, variances and covariances'
+
   tfield%ndims = 3
   tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
   tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
@@ -606,6 +629,9 @@ if ( lles_subgrid ) then
   ldoavg  = xles_temp_mean_start /= XUNDEF .and. xles_temp_mean_end /= XUNDEF
   ldonorm = trim(cles_norm_type) /= 'NONE'
 
+  cgroup = 'Subgrid'
+  cgroupcomment = 'Mean vertical profiles of the subgrid fluxes, variances and covariances'
+
   tfield%ndims = 3
   tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
   tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
@@ -724,6 +750,9 @@ ldonorm = trim(cles_norm_type) /= 'NONE'
 !            ------------------
 !
 if ( lles_updraft ) then
+  cgroup = 'Updraft'
+  cgroupcomment = 'Updraft vertical profiles of some resolved and subgrid fluxes, variances and covariances'
+
   call Les_diachro_write( tpdiafile, XLES_UPDRAFT,     'UP_FRAC', 'Updraft fraction',                                 '1' )
   call Les_diachro_write( tpdiafile, XLES_UPDRAFT_W,   'UP_W',    'Updraft W mean value',                             'm s-1' )
   call Les_diachro_write( tpdiafile, XLES_UPDRAFT_Th,  'UP_TH',   'Updraft potential temperature mean value',         'K' )
@@ -831,6 +860,9 @@ end if
 !            --------------------
 !
 if ( lles_downdraft ) then
+  cgroup = 'Downdraft'
+  cgroupcomment = 'Downdraft vertical profiles of some resolved and subgrid fluxes, variances and covariances'
+
   call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT,     'DW_FRAC', 'Downdraft fraction',                                 '1' )
   call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_W,   'DW_W',    'Downdraft W mean value',                             'm s-1' )
   call Les_diachro_write( tpdiafile, XLES_DOWNDRAFT_Th,  'DW_TH',   'Downdraft potential temperature mean value',         'K' )
@@ -946,7 +978,10 @@ end if
 !*      3.   surface normalization parameters
 !            --------------------------------
 !
-!Prepare metadate (used in Les_diachro_write calls)
+cgroup = 'Miscellaneous'
+cgroupcomment = 'Miscellaneous terms (geometry, various unclassified averaged terms...)'
+
+!Prepare metadata (used in Les_diachro_write calls)
 tfield%ndims = 2
 tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_LEVEL
 tfield%ndimlist(2)  = NMNHDIM_BUDGET_LES_TIME
@@ -965,6 +1000,9 @@ call Les_diachro_write( tpdiafile, XLES_DTHRADLW, 'DTHRADLW', 'LW radiative temp
 call Les_diachro_write( tpdiafile, XLES_RADEFF,   'RADEFF',   'Mean effective radius',             'micron' )
 
 
+cgroup = 'Surface'
+cgroupcomment = 'Averaged surface fields'
+
 ! !Prepare metadate (used in Les_diachro_write calls)
 tfield%ndims = 1
 tfield%ndimlist(1)  = NMNHDIM_BUDGET_LES_TIME
@@ -1162,7 +1200,7 @@ tfield%clongname = hmnhname
 tfield%ccomment  = hcomment
 tfield%cunits    = hunits
 
-call Les_diachro( tpdiafile, tfield, ldoavg, ldonorm, pdata )
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata )
 
 end subroutine Les_diachro_write_1D
 
@@ -1185,7 +1223,7 @@ tfield%clongname = hmnhname
 tfield%ccomment  = hcomment
 tfield%cunits    = hunits
 
-call Les_diachro( tpdiafile, tfield, ldoavg, ldonorm, pdata )
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata )
 
 end subroutine Les_diachro_write_2D
 
@@ -1209,7 +1247,7 @@ tfield%clongname = hmnhname
 tfield%ccomment  = hcomment
 tfield%cunits    = hunits
 
-call Les_diachro( tpdiafile, tfield, ldoavg, ldonorm, pdata, hmasks = hmasks )
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks )
 
 end subroutine Les_diachro_write_3D
 
@@ -1233,7 +1271,7 @@ tfield%clongname = hmnhname
 tfield%ccomment  = hcomment
 tfield%cunits    = hunits
 
-call Les_diachro( tpdiafile, tfield, ldoavg, ldonorm, pdata, hmasks = hmasks )
+call Les_diachro( tpdiafile, tfield, cgroup, cgroupcomment, ldoavg, ldonorm, pdata, hmasks = hmasks )
 
 end subroutine Les_diachro_write_4D
 
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 72b614ae57b534f0399a0ad289fd92898c7eecad..1bb11e435afd44755eff957d81908fa904554cb6 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -850,21 +850,17 @@ IF (NRTTOVINFO(1,1) /= NUNDEF) THEN
   CALL CALL_RTTOV8(NDLON, NFLEV, NSTATM, XEMIS(:,:,1), XTSRAD, XSTATM, XTHT, XRT, &
                   XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB),   &
                   LUSERI, NRTTOVINFO, TPFILE                                  )
-#else
-#ifdef MNH_RTTOV_11
+#elif MNH_RTTOV_11
   CALL CALL_RTTOV11(NDLON, NFLEV, XEMIS(:,:,1), XTSRAD, XTHT, XRT,            &
                   XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB),   &
                   LUSERI, NRTTOVINFO, TPFILE                                  )
-#else
-#ifdef MNH_RTTOV_13
+#elif MNH_RTTOV_13
   CALL CALL_RTTOV13(NDLON, NFLEV, XEMIS(:,:,1), XTSRAD, XTHT, XRT,            &
                   XPABST, XZZ, XMFCONV, XCLDFR, XUT(:,:,IKB), XVT(:,:,IKB),   &
                   LUSERI, NRTTOVINFO, TPFILE                                  )
 #else
 PRINT *, "RTTOV LIBRARY NOT AVAILABLE = ###CALL_RTTOV####"
 #endif
-#endif
-#endif
 END IF
 !
 !-------------------------------------------------------------------------------
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index 1a0d6af59bef2dc344b131242e4cb13661f47c8b..486978e1c2accda7b8125d056c48166d2a5f201c 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -3,59 +3,10 @@
 !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_WRITE_PROFILER_n
-!      ###########################
-!
-INTERFACE
-!
-      SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
-!
-USE MODD_IO, ONLY: TFILEDATA
-!
-TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
-!
-END SUBROUTINE WRITE_PROFILER_n
-!
-END INTERFACE
-!
-END MODULE MODI_WRITE_PROFILER_n
-!
-!     ##########################################
-      SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
-!     ##########################################
+! Author:
+!  P. Tulet    15/02/2002
 !
-!
-!!****  *WRITE_PROFILER* - write the balloon and aircraft trajectories and records
-!!                      in the diachronic file
-!!
-!!    PURPOSE
-!!    -------
-!
-!
-!!**  METHOD
-!!    ------
-!!    
-!!
-!!
-!!
-!!
-!!    EXTERNAL
-!!    --------
-!!
-!!    IMPLICIT ARGUMENTS
-!!    ------------------
-!!
-!!    REFERENCE
-!!    ---------
-!!
-!!    AUTHOR
-!!    ------
-!!      Pierre TULET             * Meteo-France *
-!!
-!!    MODIFICATIONS
-!!    -------------
-!!     Original 15/02/2002
+!  Modifications
 !  G. Delautier      2016: LIMA
 !  C. Lac         10/2016: add visibility diagnostics for fog
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
@@ -64,39 +15,40 @@ END MODULE MODI_WRITE_PROFILER_n
 !  P. Wautelet 09/10/2020: Write_diachro: use new datatype tpfields
 !  P. Wautelet 03/03/2021: budgets: add tbudiachrometadata type (useful to pass more information to Write_diachro)
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
-!  M.Taufour 07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
-! --------------------------------------------------------------------------
+!  P. Wautelet 05/07/2021: reorganisation to store point values correctly (not in vertical profiles)
+!  M. Taufour     07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
+!-----------------------------------------------------------------
+!      ###########################
+MODULE MODE_WRITE_PROFILER_n
+!      ###########################
 !
-!*      0. DECLARATIONS
-!          ------------
+implicit none
+
+private
+
+public :: WRITE_PROFILER_n
+
+CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: CCOMMENT ! comment string
+CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: CTITLE   ! title
+CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: CUNIT    ! physical unit
+
+REAL, DIMENSION(:,:,:,:,:,:), ALLOCATABLE :: XWORK6   ! contains temporal serie
+
+contains
 !
-USE MODD_CST
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_LUNIT
-USE MODD_PARAMETERS
+!#####################################
+SUBROUTINE WRITE_PROFILER_n(TPDIAFILE)
+!#####################################
 !
-USE MODD_TYPE_PROFILER
-USE MODD_PROFILER_n
-USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, LORILAM, JPMODE
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_DUST,            ONLY: CDUSTNAMES, LDUST, NMODE_DST
-USE MODD_SALT,            ONLY: CSALTNAMES, LSALT
-USE MODD_NSV
-USE MODD_RADIATIONS_n,    ONLY:NAER
-USE MODD_DIAG_IN_RUN
-USE MODD_PARAM_n,         ONLY: CRAD
 !
-USE MODE_AERO_PSD
-USE MODE_DUST_PSD
-use mode_write_diachro,   only: Write_diachro
+!****  *WRITE_PROFILER* - write the balloon and aircraft trajectories and records
+!                      in the diachronic file
 !
-USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
-USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
-USE MODD_PARAM_LIMA     , ONLY: NINDICE_CCN_IMM,NMOD_CCN,NMOD_IFN,NMOD_IMM
+!*      0. DECLARATIONS
+!          ------------
+!
+USE MODD_IO,         ONLY: TFILEDATA
+use MODD_PROFILER_n, only: NUMBPROFILER
 !
 IMPLICIT NONE
 !
@@ -109,61 +61,80 @@ TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
 !
 !       0.2  declaration of local variables
 !
-INTEGER     ::  II  ! loop
+INTEGER :: JI
 !
 !----------------------------------------------------------------------------
 !
-DO II=1,NUMBPROFILER
-  CALL PROFILER_DIACHRO_n(TPROFILER, II)
+DO JI = 1, NUMBPROFILER
+  CALL PROFILER_DIACHRO_n( TPDIAFILE, JI )
 ENDDO
 !
 !----------------------------------------------------------------------------
+END SUBROUTINE WRITE_PROFILER_n
 !----------------------------------------------------------------------------
-!
-CONTAINS
-!
-!----------------------------------------------------------------------------
-!----------------------------------------------------------------------------
-!
-!----------------------------------------------------------------------------
-SUBROUTINE PROFILER_DIACHRO_n(TPROFILER,II)
 
-use modd_budget, only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK,  &
-                       tbudiachrometadata
-use modd_field,  only: NMNHDIM_LEVEL, NMNHDIM_PROFILER_TIME, NMNHDIM_PROFILER_PROC, NMNHDIM_UNUSED, &
-                       tfield_metadata_base, TYPEREAL
 
-TYPE(PROFILER),     INTENT(IN)       :: TPROFILER
-INTEGER,            INTENT(IN)       :: II
+!----------------------------------------------------------------------------
+SUBROUTINE PROFILER_DIACHRO_n( TPDIAFILE, KI )
+
+use modd_budget,          only: NLVL_CATEGORY, NLVL_SUBCATEGORY, NLVL_GROUP, NLVL_SHAPE, NLVL_TIMEAVG, NLVL_NORM, NLVL_MASK, &
+                                tbudiachrometadata
+USE MODD_DIAG_IN_RUN,     only: LDIAG_IN_RUN
+USE MODD_DUST,            ONLY: CDUSTNAMES, LDUST, NMODE_DST
+USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, LORILAM, JPMODE
+USE MODD_CH_M9_n,         ONLY: CNAMES
+USE MODD_CST,             ONLY: XRV
+USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+use modd_field,           only: NMNHDIM_LEVEL, NMNHDIM_PROFILER_TIME, NMNHDIM_PROFILER_PROC, NMNHDIM_UNUSED, &
+                                tfield_metadata_base, TYPEREAL
+USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
+USE MODD_IO,              ONLY: TFILEDATA
+USE MODD_LG,              ONLY: CLGNAMES
+USE MODD_NSV
+USE MODD_PARAMETERS,      ONLY: XUNDEF
+USE MODD_PARAM_LIMA,      ONLY: NINDICE_CCN_IMM,NMOD_CCN,NMOD_IFN,NMOD_IMM
+USE MODD_PARAM_LIMA_COLD, ONLY: CLIMA_COLD_NAMES
+USE MODD_PARAM_LIMA_WARM, ONLY: CLIMA_WARM_NAMES, CAERO_MASS
+USE MODD_PARAM_n,         ONLY: CRAD
+USE MODD_PROFILER_n
+USE MODD_RADIATIONS_n,    ONLY: NAER
+USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
+USE MODD_SALT,            ONLY: CSALTNAMES, LSALT
+USE MODD_TYPE_PROFILER
 !
-!*      0.2  declaration of local variables for diachro
+USE MODE_AERO_PSD
+USE MODE_DUST_PSD
+use mode_write_diachro,   only: Write_diachro
 !
-REAL,    DIMENSION(:,:,:,:,:,:),  ALLOCATABLE :: ZWORK6   ! contains temporal serie
-REAL,    DIMENSION(:,:,:,:,:,:),  ALLOCATABLE :: ZW6      ! contains temporal serie to write
-REAL, DIMENSION(:,:,:,:),         ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG
-REAL, DIMENSION(:,:,:),           ALLOCATABLE :: ZRHO
+TYPE(TFILEDATA),  INTENT(IN) :: TPDIAFILE ! diachronic file to write
+INTEGER,          INTENT(IN) :: KI
 !
-INTEGER, DIMENSION(:),            ALLOCATABLE :: IGRID    ! grid indicator
-CHARACTER(LEN=  8)                            :: YGROUP   ! group title
-CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: YCOMMENT ! comment string
-CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: YTITLE   ! title
-CHARACTER(LEN=100), DIMENSION(:), ALLOCATABLE :: YUNIT    ! physical unit
+!*      0.2  declaration of local variables for diachro
 !
-INTEGER :: IPROC    ! number of variables records
-INTEGER :: JPROC    ! loop counter
-INTEGER :: JRR      ! loop counter
-INTEGER :: JSV      ! loop counter
-INTEGER :: IKU, IK  ! loop counter
-CHARACTER(LEN=2)  :: INDICE
+character(len=2)                                      :: yidx
+character(len=100)                                    :: ycomment
+character(len=100)                                    :: yname
+CHARACTER(LEN=:),                         allocatable :: YGROUP   ! group title
+INTEGER                                               :: IKU
+INTEGER                                               :: IPROC    ! number of variables records
+INTEGER                                               :: JPROC
+INTEGER                                               :: JRR      ! loop counter
+INTEGER                                               :: JSV      ! loop counter
+integer                                               :: ji
+integer                                               :: irr !Number of moist variables
+REAL, DIMENSION(:,:,:),                   ALLOCATABLE :: ZRHO
+REAL, DIMENSION(:,:,:,:),                 ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG
 type(tbudiachrometadata)                              :: tzbudiachro
 type(tfield_metadata_base), dimension(:), allocatable :: tzfields
 !
 !----------------------------------------------------------------------------
 !
-IF (TPROFILER%X(II)==XUNDEF) RETURN
-IF (TPROFILER%Y(II)==XUNDEF) RETURN
-IKU = SIZE(TPROFILER%W,2)    !nbre de niveaux sur la verticale SIZE(TPROFILER%W,2)
+IF (TPROFILER%X(KI)==XUNDEF) RETURN
+IF (TPROFILER%Y(KI)==XUNDEF) RETURN
+!
+IKU = SIZE(TPROFILER%W,2) !Number of vertical levels
 !
+!IPROC is too large (not a big problem) due to the separation between vertical profiles and point values
 IPROC = 25 + SIZE(TPROFILER%R,4) + SIZE(TPROFILER%SV,4)
 IF (LDIAG_IN_RUN) IPROC = IPROC + 15
 IF (LORILAM) IPROC = IPROC + JPMODE*3
@@ -171,493 +142,247 @@ IF (LDUST) IPROC = IPROC + NMODE_DST*3
 IF (LDUST .OR. LORILAM .OR. LSALT) IPROC=IPROC+NAER
 IF (SIZE(TPROFILER%TKE  )>0) IPROC = IPROC + 1
 !
-ALLOCATE (ZWORK6(1,1,IKU,size(tprofiler%tpdates),1,IPROC))
-ALLOCATE (YCOMMENT(IPROC))
-ALLOCATE (YTITLE  (IPROC))
-ALLOCATE (YUNIT   (IPROC))
-ALLOCATE (IGRID   (IPROC))
+ALLOCATE (XWORK6(1,1,IKU,size(tprofiler%tpdates),1,IPROC))
+ALLOCATE (CCOMMENT(IPROC))
+ALLOCATE (CTITLE  (IPROC))
+ALLOCATE (CUNIT   (IPROC))
 !
-IGRID  = 1
-YGROUP = TPROFILER%NAME(II)
+YGROUP = TPROFILER%NAME(KI)
 !
 !----------------------------------------------------------------------------
-DO IK=1, IKU
-!
-JPROC=0
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'Th'
-YUNIT    (JPROC) = 'K'
-YCOMMENT (JPROC) = 'Potential temperature' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%TH(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'Thv'
-YUNIT    (JPROC) = 'K'
-YCOMMENT (JPROC) = 'Virtual Potential temperature' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%THV(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'VISI'
-YUNIT    (JPROC) = 'km'
-YCOMMENT (JPROC) = 'Visibility'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%VISI(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'VISIKUN'
-YUNIT    (JPROC) = 'km'
-YCOMMENT (JPROC) = 'Visibility Kunkel'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%VISIKUN(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'RARE'
-YUNIT    (JPROC) = 'dBZ'
-YCOMMENT (JPROC) = 'Radar reflectivity'       
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%CRARE(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'RAREatt'
-YUNIT    (JPROC) = 'dBZ'
-YCOMMENT (JPROC) = 'Radar attenuated reflectivity'       
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%CRARE_ATT(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'P'
-YUNIT    (JPROC) = 'Pascal'
-YCOMMENT (JPROC) = 'Pressure' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%P(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'ALT'
-YUNIT    (JPROC) = 'm'
-YCOMMENT (JPROC) = 'Altitude' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZZ(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'LON'
-YUNIT    (JPROC) = 'degree'
-YCOMMENT (JPROC) = 'Longitude'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%LON(II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'LAT'
-YUNIT    (JPROC) = 'degree'
-YCOMMENT (JPROC) = 'Latitude'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%LAT(II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'ZON_WIND'
-YUNIT    (JPROC) = 'm s-1'
-YCOMMENT (JPROC) = 'Zonal wind'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZON(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'MER_WIND'
-YUNIT    (JPROC) = 'm s-1'
-YCOMMENT (JPROC) = 'Meridional wind'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%MER(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'FF'           
-YUNIT    (JPROC) = 'm s-1'
-YCOMMENT (JPROC) = 'Wind intensity'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%FF(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'DD'        
-YUNIT    (JPROC) = 'degree'
-YCOMMENT (JPROC) = 'Wind direction'
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%DD(:,IK,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'W'
-YUNIT    (JPROC) = 'm s-1'
-YCOMMENT (JPROC) = 'Air vertical speed' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%W(:,IK,II)
-!
-IF (LDIAG_IN_RUN) THEN
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'T2m'
-  YUNIT    (JPROC) = 'K'
-  YCOMMENT (JPROC) = '2-m temperature' 
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%T2M(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'Q2m'
-  YUNIT    (JPROC) = 'kg kg-1'
-  YCOMMENT (JPROC) = '2-m humidity' 
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%Q2M(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'HU2m'
-  YUNIT    (JPROC) = 'percent'
-  YCOMMENT (JPROC) = '2-m relative humidity' 
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%HU2M(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'zon10m'
-  YUNIT    (JPROC) = 'm s-1'
-  YCOMMENT (JPROC) = '10-m zonal wind' 
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZON10M(:,II)
-  !       
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'mer10m'
-  YUNIT    (JPROC) = 'm s-1'
-  YCOMMENT (JPROC) = '10-m meridian wind' 
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%MER10M(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'RN' 
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Net radiation'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%RN(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'H' 
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Sensible heat flux'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%H(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'LE' 
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Total Latent heat flux'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%LE(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'G' 
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Storage heat flux'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%GFLUX(:,II)
-  !
- IF (CRAD /= 'NONE') THEN
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'SWD'
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Downward short-wave radiation'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SWD(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'SWU'
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Upward short-wave radiation'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SWU(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'LWD'
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Downward long-wave radiation'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%LWD(:,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'LWU'
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Upward long-wave radiation'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%LWU(:,II)
-  !
- END IF
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'TKE_DISS'
-  YUNIT    (JPROC) = 'm2 s-2'
-  YCOMMENT (JPROC) = 'TKE dissipation rate'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%TKE_DISS(:,IK,II)
-  !
-  JPROC = JPROC + 1
-  YTITLE   (JPROC) = 'LEI' 
-  YUNIT    (JPROC) = 'W m-2'
-  YCOMMENT (JPROC) = 'Solid Latent heat flux'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%LEI(:,II)  
-!
-ENDIF
-!
-DO JRR=1,SIZE(TPROFILER%R,4)
-  JPROC = JPROC+1
-  YUNIT    (JPROC) = 'kg kg-1'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%R(:,IK,II,JRR)
-  IF (JRR==1) THEN
-    YTITLE   (JPROC) = 'Rv'
-    YCOMMENT (JPROC) = 'Water vapor mixing ratio' 
-  ELSE IF (JRR==2) THEN
-    YTITLE   (JPROC) = 'Rc'
-    YCOMMENT (JPROC) = 'Liquid cloud water mixing ratio' 
-  ELSE IF (JRR==3) THEN
-    YTITLE   (JPROC) = 'Rr'
-    YCOMMENT (JPROC) = 'Rain water mixing ratio' 
-  ELSE IF (JRR==4) THEN
-    YTITLE   (JPROC) = 'Ri'
-    YCOMMENT (JPROC) = 'Ice cloud water mixing ratio' 
-  ELSE IF (JRR==5) THEN
-    YTITLE   (JPROC) = 'Rs'
-    YCOMMENT (JPROC) = 'Snow mixing ratio' 
-  ELSE IF (JRR==6) THEN
-    YTITLE   (JPROC) = 'Rg'
-    YCOMMENT (JPROC) = 'Graupel mixing ratio' 
-  ELSE IF (JRR==7) THEN
-    YTITLE   (JPROC) = 'Rh'
-    YCOMMENT (JPROC) = 'Hail mixing ratio' 
-  END IF
-END DO
-  !
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'Rhod'
-YUNIT    (JPROC) = 'kg m-3'
-YCOMMENT (JPROC) = 'Density of dry air in moist' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%RHOD(:,IK,II)
-!
-IF (SIZE(TPROFILER%TKE,1)>0) THEN
-  JPROC = JPROC+1
-  YTITLE   (JPROC) = 'Tke'
-  YUNIT    (JPROC) = 'm2 s-2'
-  YCOMMENT (JPROC) = 'Turbulent kinetic energy' 
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%TKE(:,IK,II)
-END IF
-!
-IF (SIZE(TPROFILER%CIZ,1)>0) THEN
-  JPROC = JPROC + 1
-  YTITLE  (JPROC) = 'CIT'
-  YUNIT   (JPROC) = 'kg-3'
-  YCOMMENT(JPROC) = 'Ice concentration'
-  ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%CIZ(:,IK,II)
-END IF
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'IWV'
-YUNIT    (JPROC) = 'kg m-2'
-YCOMMENT (JPROC) = 'Integrated Water Vapour' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%IWV(:,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'ZTD'
-YUNIT    (JPROC) = 'm'
-YCOMMENT (JPROC) = 'Zenith Tropospheric Delay' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZTD(:,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'ZWD'
-YUNIT    (JPROC) = 'm'
-YCOMMENT (JPROC) = 'Zenith Wet Delay' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZWD(:,II)
-!
-JPROC = JPROC + 1
-YTITLE   (JPROC) = 'ZHD'
-YUNIT    (JPROC) = 'm'
-YCOMMENT (JPROC) = 'Zenith Hydrostatic Delay' 
-ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%ZHD(:,II)
-!
-IF (SIZE(TPROFILER%SV,4)>=1) THEN
+!Treat vertical profiles
+jproc = 0
+
+call Add_profile( 'Th',       'Potential temperature',         'K',      tprofiler%th        )
+call Add_profile( 'Thv',      'Virtual Potential temperature', 'K',      tprofiler%thv       )
+call Add_profile( 'VISI',     'Visibility',                    'km',     tprofiler%visi      )
+call Add_profile( 'VISIKUN',  'Visibility Kunkel',             'km',     tprofiler%visikun   )
+call Add_profile( 'RARE',     'Radar reflectivity',            'dBZ',    tprofiler%crare     )
+call Add_profile( 'RAREatt',  'Radar attenuated reflectivity', 'dBZ',    tprofiler%crare_att )
+call Add_profile( 'P',        'Pressure',                      'Pa',     tprofiler%p         )
+call Add_profile( 'ALT',      'Altitude',                      'm',      tprofiler%zz        )
+call Add_profile( 'ZON_WIND', 'Zonal wind',                    'm s-1',  tprofiler%zon       )
+call Add_profile( 'MER_WIND', 'Meridional wind',               'm s-1',  tprofiler%mer       )
+call Add_profile( 'FF',       'Wind intensity',                'm s-1',  tprofiler%ff        )
+call Add_profile( 'DD',       'Wind direction',                'degree', tprofiler%dd        )
+call Add_profile( 'W',        'Air vertical speed',            'm s-1',  tprofiler%w         )
+
+if ( ldiag_in_run ) &
+  call Add_profile( 'TKE_DISS', 'TKE dissipation rate', 'm2 s-2', tprofiler% tke_diss )
+
+if ( Size( tprofiler%ciz, 1 ) > 0 ) &
+  call Add_profile( 'CIT',      'Ice concentration',    'kg-3',   tprofiler%ciz )
+
+irr = Size( tprofiler%r )
+if ( irr >= 1 ) call Add_profile( 'Rv', 'Water vapor mixing ratio',        'kg kg-1', tprofiler%r(:,:,:,1) )
+if ( irr >= 2 ) call Add_profile( 'Rc', 'Liquid cloud water mixing ratio', 'kg kg-1', tprofiler%r(:,:,:,2) )
+if ( irr >= 3 ) call Add_profile( 'Rr', 'Rain water mixing ratio',         'kg kg-1', tprofiler%r(:,:,:,3) )
+if ( irr >= 4 ) call Add_profile( 'Ri', 'Ice cloud water mixing ratio',    'kg kg-1', tprofiler%r(:,:,:,4) )
+if ( irr >= 5 ) call Add_profile( 'Rs', 'Snow mixing ratio',               'kg kg-1', tprofiler%r(:,:,:,5) )
+if ( irr >= 6 ) call Add_profile( 'Rg', 'Graupel mixing ratio',            'kg kg-1', tprofiler%r(:,:,:,6) )
+if ( irr >= 7 ) call Add_profile( 'Rh', 'Hail mixing ratio',               'kg kg-1', tprofiler%r(:,:,:,7) )
+
+call Add_profile( 'Rhod', 'Density of dry air in moist', 'kg m-3', tprofiler%rhod )
+if ( Size( tprofiler%tke, 1 ) > 0 ) &
+  call Add_profile( 'Tke', 'Turbulent kinetic energy', 'm2 s-2', tprofiler%tke )
+
+if ( Size( tprofiler%sv, 4 ) > 0  ) then
   ! User scalar variables
-  DO JSV = 1,NSV_USER
-    JPROC = JPROC+1
-    WRITE (YTITLE(JPROC),FMT='(A2,I3.3)')   'Sv',JSV
-    YUNIT    (JPROC) = 'kg kg-1'
-    YCOMMENT (JPROC) = ' ' 
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV)
-  END DO
+  do jsv = 1, nsv_user
+    Write ( yname, fmt = '( a2, i3.3 )' ) 'Sv', jsv
+    call Add_profile( yname, '', 'kg kg-1', tprofiler%sv(:,:,:,jsv) )
+  end do
  ! Passive pollutant  scalar variables
-  DO JSV = NSV_PPBEG,NSV_PPEND
-    JPROC = JPROC+1
-    WRITE (YTITLE(JPROC),FMT='(A2,I3.3)')   'Sv',JSV
-    YUNIT    (JPROC) = ''
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV)
-  END DO
+  do jsv = nsv_ppbeg, nsv_ppend
+    Write ( yname, fmt = '( a2, i3.3 )' ) 'Sv', jsv
+    call Add_profile( yname, '', '1', tprofiler%sv(:,:,:,jsv) )
+  end do
  ! microphysical C2R2 scheme scalar variables
-  DO JSV = NSV_C2R2BEG,NSV_C2R2END
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-    YUNIT    (JPROC) = 'm-3'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV)
-  END DO
+  do jsv = nsv_ppbeg, nsv_ppend
+    call Add_profile( Trim( c2r2names(jsv - nsv_c2r2beg + 1) ), '', 'm-3', tprofiler%sv(:,:,:,jsv) )
+  end do
   ! microphysical C3R5 scheme additional scalar variables
-  DO JSV = NSV_C1R3BEG,NSV_C1R3END
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-    YUNIT    (JPROC) = 'm-3'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV)
-  END DO
+  do jsv = nsv_c1r3beg, nsv_c1r3end
+    call Add_profile( Trim( c1r3names(jsv - nsv_c1r3beg + 1) ), '', 'm-3', tprofiler%sv(:,:,:,jsv) )
+  end do
   ! LIMA variables
-  DO JSV=NSV_LIMA_BEG,NSV_LIMA_END
-    JPROC = JPROC+1
-    YUNIT    (JPROC) = 'kg-1'
-    YCOMMENT (JPROC) = ' '
-    IF (JSV==NSV_LIMA_NC) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(1))//'T' 
-    IF (JSV==NSV_LIMA_NR) YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(2))//'T' 
-    IF (JSV .GE. NSV_LIMA_CCN_FREE .AND. JSV .LT. NSV_LIMA_CCN_ACTI) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_FREE + 1)
-        YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(3))//INDICE//'T'
-    ENDIF
-    IF (JSV .GE. NSV_LIMA_CCN_ACTI .AND. JSV .LT. NSV_LIMA_CCN_ACTI + NMOD_CCN) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_CCN_ACTI + 1)
-        YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(4))//INDICE//'T'
-    ENDIF
-    IF (JSV .EQ. NSV_LIMA_SCAVMASS) YTITLE(JPROC)=TRIM(CAERO_MASS(1))//'T'
-    IF (JSV==NSV_LIMA_NI) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(1))//'T' 
-    IF (JSV .GE. NSV_LIMA_IFN_FREE .AND. JSV .LT. NSV_LIMA_IFN_NUCL) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_FREE + 1)
-        YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(2))//INDICE//'T'
-    ENDIF
-    IF (JSV .GE. NSV_LIMA_IFN_NUCL .AND. JSV .LT. NSV_LIMA_IFN_NUCL + NMOD_IFN) THEN
-        WRITE(INDICE,'(I2.2)')(JSV - NSV_LIMA_IFN_NUCL + 1)
-        YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(3))//INDICE//'T'
-    ENDIF
-    IF (JSV .GE. NSV_LIMA_IMM_NUCL .AND. JSV .LT. NSV_LIMA_IMM_NUCL + NMOD_IMM) THEN
-      WRITE(INDICE,'(I2.2)')(NINDICE_CCN_IMM(JSV - NSV_LIMA_IMM_NUCL + 1))
-      YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(4))//INDICE//'T'
-    ENDIF
-    IF (JSV .EQ. NSV_LIMA_HOM_HAZE) YTITLE(JPROC)=TRIM(CLIMA_COLD_NAMES(5))//'T'
-    IF (JSV .EQ. NSV_LIMA_SPRO)     YTITLE(JPROC)=TRIM(CLIMA_WARM_NAMES(5))//'T'
-
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV)
-  END DO 
+  do jsv = nsv_lima_beg, nsv_lima_end
+    if ( jsv == nsv_lima_nc ) then
+      yname = Trim( clima_warm_names(1) ) // 'T'
+    else if ( jsv == nsv_lima_nr ) then
+      yname = Trim( clima_warm_names(2) ) // 'T'
+    else if ( jsv >= nsv_lima_ccn_free .and. jsv < nsv_lima_ccn_free + nmod_ccn ) then
+      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ccn_free + 1
+      yname = Trim( clima_warm_names(3) ) // yidx // 'T'
+    else if ( jsv >= nsv_lima_ccn_acti .and. jsv < nsv_lima_ccn_acti + nmod_ccn ) then
+      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ccn_acti + 1
+      yname = Trim( clima_warm_names(4) ) // yidx // 'T'
+    else if ( jsv == nsv_lima_scavmass ) then
+      yname = Trim( caero_mass(1) ) // 'T'
+    else if ( jsv == nsv_lima_ni ) then
+      yname = Trim( clima_cold_names(1) ) // 'T'
+    else if ( jsv >= nsv_lima_ifn_free .and. jsv < nsv_lima_ifn_free + nmod_ifn ) then
+      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ifn_free + 1
+      yname = Trim( clima_cold_names(2) ) // yidx // 'T'
+    else if ( jsv >= nsv_lima_ifn_nucl .and. jsv < nsv_lima_ifn_nucl + nmod_ifn ) then
+      Write( yidx, '( i2.2 )' ) jsv - nsv_lima_ifn_nucl + 1
+      yname = Trim( clima_cold_names(3) ) // yidx // 'T'
+    else if ( jsv >= nsv_lima_imm_nucl .and. jsv < nsv_lima_imm_nucl + nmod_imm ) then
+      write( yidx, '( i2.2 )' ) nindice_ccn_imm(jsv - nsv_lima_imm_nucl + 1)
+      yname = Trim( clima_cold_names(4) ) // yidx // 'T'
+    else if ( jsv == nsv_lima_hom_haze ) then
+      yname = Trim( clima_cold_names(5) ) // 'T'
+    else if ( jsv == nsv_lima_spro ) then
+      yname = Trim( clima_warm_names(5) ) // 'T'
+    end if
+    call Add_profile( yname, '', 'kg-1', tprofiler%sv(:,:,:,jsv) )
+  end do
   ! electrical scalar variables
-  DO JSV = NSV_ELECBEG,NSV_ELECEND
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-    YUNIT    (JPROC) = 'C'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV)
-  END DO
+  do jsv = nsv_elecbeg, nsv_elecend
+    call Add_profile( Trim( celecnames(jsv - nsv_elecbeg + 1) ), '', 'C', tprofiler%sv(:,:,:,jsv) )
+  end do
   ! chemical scalar variables
-  DO JSV=NSV_CHEMBEG,NSV_CHEMEND
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
-    YUNIT    (JPROC) = 'ppb'
-    WRITE(YCOMMENT (JPROC),'(A5,A3,I3.3)') 'T(s) ','SVT',JSV
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9
-  END DO
-  IF ((LORILAM).AND. .NOT.(ANY(TPROFILER%P(:,IK,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,size(tprofiler%tpdates),NSV_AER))
-    ALLOCATE (ZRHO(1,1,size(tprofiler%tpdates)))
-    ALLOCATE (ZN0(1,1,size(tprofiler%tpdates),JPMODE))
-    ALLOCATE (ZRG(1,1,size(tprofiler%tpdates),JPMODE))
-    ALLOCATE (ZSIG(1,1,size(tprofiler%tpdates),JPMODE))
-    ZSV(1,1,:,1:NSV_AER) = TPROFILER%SV(:,IK,II,NSV_AERBEG:NSV_AEREND)
+  do jsv = nsv_chembeg, nsv_chemend
+    Write( ycomment, '( a5, a3, i3.3 )' ) 'T(s) ', 'SVT', jsv
+    call Add_profile( Trim( cnames(jsv - nsv_chembeg + 1) ), ycomment, 'ppb', tprofiler%sv(:,:,:,jsv) * 1.e9 )
+  end do
+  IF ( LORILAM .AND. .NOT.(ANY(TPROFILER%P(:,:,KI) == 0.)) ) THEN
+    ALLOCATE (ZSV (1,iku,size(tprofiler%tpdates),NSV_AER))
+    ALLOCATE (ZRHO(1,iku,size(tprofiler%tpdates)))
+    ALLOCATE (ZN0 (1,iku,size(tprofiler%tpdates),JPMODE))
+    ALLOCATE (ZRG (1,iku,size(tprofiler%tpdates),JPMODE))
+    ALLOCATE (ZSIG(1,iku,size(tprofiler%tpdates),JPMODE))
+    do ji = 1, iku
+      ZSV(1,ji,:,1:NSV_AER) = TPROFILER%SV(:,ji,KI,NSV_AERBEG:NSV_AEREND)
+    end do
     IF (SIZE(TPROFILER%R,4) >0) THEN
-      ZRHO(1,1,:) = 0.
-      DO JRR=1,SIZE(TPROFILER%R,4)
-        ZRHO(1,1,:) = ZRHO(1,1,:) + TPROFILER%R(:,IK,II,JRR)
-      ENDDO
-      ZRHO(1,1,:) = TPROFILER%TH(:,IK,II) * ( 1. + XRV/XRD*TPROFILER%R(:,IK,II,1) )  &
-                                          / ( 1. + ZRHO(1,1,:)                ) 
+      ZRHO(1,:,:) = 0.
+      do ji = 1, iku
+        DO JRR=1,SIZE(TPROFILER%R,4)
+          ZRHO(1,ji,:) = ZRHO(1,ji,:) + TPROFILER%R(:,ji,KI,JRR)
+        ENDDO
+        ZRHO(1,ji,:) = TPROFILER%TH(:,ji,KI) * ( 1. + XRV/XRD*TPROFILER%R(:,ji,KI,1) )  &
+                                             / ( 1. + ZRHO(1,ji,:)                )
+      end do
     ELSE
-      ZRHO(1,1,:) = TPROFILER%TH(:,IK,II)
+      do ji = 1, iku
+        ZRHO(1,ji,:) = TPROFILER%TH(:,ji,KI)
+      end do
     ENDIF
-    ZRHO(1,1,:) =  TPROFILER%P(:,IK,II) / &
-                  (XRD *ZRHO(1,1,:) *((TPROFILER%P(:,IK,II)/XP00)**(XRD/XCPD)) )
+    do ji = 1, iku
+      ZRHO(1,ji,:) =  TPROFILER%P(:,ji,KI) / &
+                      (XRD *ZRHO(1,ji,:) *((TPROFILER%P(:,ji,KI)/XP00)**(XRD/XCPD)) )
+    end do
     CALL PPP2AERO(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0)
     DO JSV=1,JPMODE
       ! mean radius
       JPROC = JPROC+1
-      WRITE(YTITLE(JPROC),'(A6,I1)')'AERRGA',JSV
-      YUNIT    (JPROC) = 'um'
-      WRITE(YCOMMENT(JPROC),'(A18,I1)')'RG (nb) AERO MODE ',JSV
-      ZWORK6 (1,1,IK,:,1,JPROC) = ZRG(1,1,:,JSV)
+      WRITE(CTITLE(JPROC),'(A6,I1)')'AERRGA',JSV
+      CUNIT(JPROC) = 'um'
+      WRITE(CCOMMENT(JPROC),'(A18,I1)')'RG (nb) AERO MODE ',JSV
+      do ji = 1, iku
+        XWORK6(1,1,ji,:,1,JPROC) = ZRG(1,ji,:,JSV)
+      end do
       ! standard deviation
       JPROC = JPROC+1
-      WRITE(YTITLE(JPROC),'(A7,I1)')'AERSIGA',JSV
-      YUNIT    (JPROC) = '  '
-      WRITE(YCOMMENT(JPROC),'(A16,I1)')'SIGMA AERO MODE ',JSV
-      ZWORK6 (1,1,IK,:,1,JPROC) = ZSIG(1,1,:,JSV)
+      WRITE(CTITLE(JPROC),'(A7,I1)')'AERSIGA',JSV
+      CUNIT(JPROC) = '  '
+      WRITE(CCOMMENT(JPROC),'(A16,I1)')'SIGMA AERO MODE ',JSV
+      do ji = 1, iku
+        XWORK6(1,1,ji,:,1,JPROC) = ZSIG(1,ji,:,JSV)
+      end do
       ! particles number
       JPROC = JPROC+1
-      WRITE(YTITLE(JPROC),'(A6,I1)')'AERN0A',JSV
-      YUNIT    (JPROC) = 'm-3'
-      WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 AERO MODE ',JSV
-      ZWORK6 (1,1,IK,:,1,JPROC) = ZN0(1,1,:,JSV)
+      WRITE(CTITLE(JPROC),'(A6,I1)')'AERN0A',JSV
+      CUNIT(JPROC) = 'm-3'
+      WRITE(CCOMMENT(JPROC),'(A13,I1)')'N0 AERO MODE ',JSV
+      do ji = 1, iku
+        XWORK6(1,1,ji,:,1,JPROC) = ZN0(1,ji,:,JSV)
+      end do
     ENDDO
-    DEALLOCATE (ZSV,ZRHO) 
-    DEALLOCATE (ZN0,ZRG,ZSIG) 
+    DEALLOCATE (ZSV,ZRHO)
+    DEALLOCATE (ZN0,ZRG,ZSIG)
   END IF
   ! dust scalar variables
-  DO JSV = NSV_DSTBEG,NSV_DSTEND
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
-    YUNIT    (JPROC) = 'ppb'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9
-  END DO
-  IF ((LDUST).AND. .NOT.(ANY(TPROFILER%P(:,IK,II) == 0.))) THEN
-    ALLOCATE (ZSV(1,1,size(tprofiler%tpdates),NSV_DST))
-    ALLOCATE (ZRHO(1,1,size(tprofiler%tpdates)))
-    ALLOCATE (ZN0(1,1,size(tprofiler%tpdates),NMODE_DST))
-    ALLOCATE (ZRG(1,1,size(tprofiler%tpdates),NMODE_DST))
-    ALLOCATE (ZSIG(1,1,size(tprofiler%tpdates),NMODE_DST))
-    ZSV(1,1,:,1:NSV_DST) = TPROFILER%SV(:,IK,II,NSV_DSTBEG:NSV_DSTEND)
+  do jsv = nsv_dstbeg, nsv_dstend
+    call Add_profile( Trim( cdustnames(jsv - nsv_dstbeg + 1) ), '', 'ppb', tprofiler%sv(:,:,:,jsv) * 1.e9 )
+  end do
+  IF ((LDUST).AND. .NOT.(ANY(TPROFILER%P(:,:,KI) == 0.))) THEN
+    ALLOCATE (ZSV (1,iku,size(tprofiler%tpdates),NSV_DST))
+    ALLOCATE (ZRHO(1,iku,size(tprofiler%tpdates)))
+    ALLOCATE (ZN0 (1,iku,size(tprofiler%tpdates),NMODE_DST))
+    ALLOCATE (ZRG (1,iku,size(tprofiler%tpdates),NMODE_DST))
+    ALLOCATE (ZSIG(1,iku,size(tprofiler%tpdates),NMODE_DST))
+    do ji = 1, iku
+      ZSV(1,ji,:,1:NSV_DST) = TPROFILER%SV(:,ji,KI,NSV_DSTBEG:NSV_DSTEND)
+    end do
     IF (SIZE(TPROFILER%R,4) >0) THEN
-      ZRHO(1,1,:) = 0.
-      DO JRR=1,SIZE(TPROFILER%R,4)
-        ZRHO(1,1,:) = ZRHO(1,1,:) + TPROFILER%R(:,IK,II,JRR)
-      ENDDO
-      ZRHO(1,1,:) = TPROFILER%TH(:,IK,II) * ( 1. + XRV/XRD*TPROFILER%R(:,IK,II,1) )  &
-                                          / ( 1. + ZRHO(1,1,:)                ) 
+      ZRHO(1,:,:) = 0.
+      do ji = 1, iku
+        DO JRR=1,SIZE(TPROFILER%R,4)
+          ZRHO(1,ji,:) = ZRHO(1,ji,:) + TPROFILER%R(:,ji,KI,JRR)
+        ENDDO
+        ZRHO(1,ji,:) = TPROFILER%TH(:,ji,KI) * ( 1. + XRV/XRD*TPROFILER%R(:,ji,KI,1) )  &
+                                             / ( 1. + ZRHO(1,ji,:)                )
+      end do
     ELSE
-      ZRHO(1,1,:) = TPROFILER%TH(:,IK,II)
+      do ji = 1, iku
+        ZRHO(1,ji,:) = TPROFILER%TH(:,ji,KI)
+      end do
     ENDIF
-    ZRHO(1,1,:) =  TPROFILER%P(:,IK,II) / &
-                  (XRD *ZRHO(1,1,:) *((TPROFILER%P(:,IK,II)/XP00)**(XRD/XCPD)) )
+    do ji = 1, iku
+      ZRHO(1,ji,:) =  TPROFILER%P(:,ji,KI) / &
+                     (XRD *ZRHO(1,ji,:) *((TPROFILER%P(:,ji,KI)/XP00)**(XRD/XCPD)) )
+    end do
     CALL PPP2DUST(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0)
     DO JSV=1,NMODE_DST
       ! mean radius
       JPROC = JPROC+1
-      WRITE(YTITLE(JPROC),'(A6,I1)')'DSTRGA',JSV
-      YUNIT    (JPROC) = 'um'
-      WRITE(YCOMMENT(JPROC),'(A18,I1)')'RG (nb) DUST MODE ',JSV
-      ZWORK6 (1,1,IK,:,1,JPROC) = ZRG(1,1,:,JSV)
+      WRITE(CTITLE(JPROC),'(A6,I1)')'DSTRGA',JSV
+      CUNIT(JPROC) = 'um'
+      WRITE(CCOMMENT(JPROC),'(A18,I1)')'RG (nb) DUST MODE ',JSV
+      do ji = 1, iku
+        XWORK6 (1,1,ji,:,1,JPROC) = ZRG(1,ji,:,JSV)
+      end do
       ! standard deviation
       JPROC = JPROC+1
-      WRITE(YTITLE(JPROC),'(A7,I1)')'DSTSIGA',JSV
-      YUNIT    (JPROC) = '  '
-      WRITE(YCOMMENT(JPROC),'(A16,I1)')'SIGMA DUST MODE ',JSV
-      ZWORK6 (1,1,IK,:,1,JPROC) = ZSIG(1,1,:,JSV)
+      WRITE(CTITLE(JPROC),'(A7,I1)')'DSTSIGA',JSV
+      CUNIT(JPROC) = '  '
+      WRITE(CCOMMENT(JPROC),'(A16,I1)')'SIGMA DUST MODE ',JSV
+      do ji = 1, iku
+        XWORK6 (1,1,ji,:,1,JPROC) = ZSIG(1,ji,:,JSV)
+      end do
       ! particles number
       JPROC = JPROC+1
-      WRITE(YTITLE(JPROC),'(A6,I1)')'DSTN0A',JSV
-      YUNIT    (JPROC) = 'm-3'
-      WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
-      ZWORK6 (1,1,IK,:,1,JPROC) = ZN0(1,1,:,JSV)
+      WRITE(CTITLE(JPROC),'(A6,I1)')'DSTN0A',JSV
+      CUNIT(JPROC) = 'm-3'
+      WRITE(CCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
+      do ji = 1, iku
+        XWORK6 (1,1,ji,:,1,JPROC) = ZN0(1,ji,:,JSV)
+      end do
     ENDDO
-    DEALLOCATE (ZSV,ZRHO) 
-    DEALLOCATE (ZN0,ZRG,ZSIG) 
+    DEALLOCATE (ZSV,ZRHO)
+    DEALLOCATE (ZN0,ZRG,ZSIG)
   END IF
   ! sea salt scalar variables
-  DO JSV = NSV_SLTBEG,NSV_SLTEND
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
-    YUNIT    (JPROC) = 'ppb'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%SV(:,IK,II,JSV) * 1.E9
-  END DO
-  IF (LDUST .OR. LORILAM .OR. LSALT) THEN
-  DO JSV = 1,NAER
-    JPROC = JPROC+1
-    WRITE(YTITLE(JPROC),'(A6,I1)')'AEREXT',JSV
-    YUNIT    (JPROC) = ' '
-    YCOMMENT (JPROC) = 'Aerosol Extinction'
-    ZWORK6 (1,1,IK,:,1,JPROC) = TPROFILER%AER(:,IK,II,JSV) 
-  END DO
-  ENDIF
-ENDIF
-!
-END DO
-!
-!----------------------------------------------------------------------------
-!
-
-ALLOCATE (ZW6(1,1,IKU,size(tprofiler%tpdates),1,JPROC))
-ZW6 = ZWORK6(:,:,:,:,:,:JPROC)
-DEALLOCATE(ZWORK6)
+  do jsv = nsv_sltbeg, nsv_sltend
+    call Add_profile( Trim( csaltnames(jsv - nsv_sltbeg + 1) ), '', 'ppb', tprofiler%sv(:,:,:,jsv) * 1.e9 )
+  end do
+  if ( ldust .or. lorilam .or. lsalt ) then
+    do jsv = 1, naer
+      Write( yname, '( a, i1 )' ) 'AEREXT', jsv
+      call Add_profile( yname, 'Aerosol Extinction', '1', tprofiler%aer(:,:,:,jsv) )
+    end do
+  end if
+end if
 
 allocate( tzfields( jproc ) )
 
-tzfields(:)%cmnhname  = ytitle(1 : jproc)
+tzfields(:)%cmnhname  = ctitle(1 : jproc)
 tzfields(:)%cstdname  = ''
-tzfields(:)%clongname = ytitle(1 : jproc)
-tzfields(:)%cunits    = yunit(1 : jproc)
-tzfields(:)%ccomment  = ycomment(1 : jproc)
+tzfields(:)%clongname = ctitle(1 : jproc)
+tzfields(:)%cunits    = cunit(1 : jproc)
+tzfields(:)%ccomment  = ccomment(1 : jproc)
 tzfields(:)%ngrid     = 0
 tzfields(:)%ntype     = TYPEREAL
 tzfields(:)%ndims     = 3
@@ -678,11 +403,11 @@ tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
 
 tzbudiachro%lleveluse(NLVL_GROUP)       = .true.
 tzbudiachro%clevels  (NLVL_GROUP)       = ygroup
-tzbudiachro%ccomments(NLVL_GROUP)       = 'Vertical profiles at position of profiler ' // Trim( ygroup )
+tzbudiachro%ccomments(NLVL_GROUP)       = 'Data at position of profiler ' // Trim( ygroup )
 
-tzbudiachro%lleveluse(NLVL_SHAPE)       = .false.
+tzbudiachro%lleveluse(NLVL_SHAPE)       = .true.
 tzbudiachro%clevels  (NLVL_SHAPE)       = 'Vertical_profile'
-tzbudiachro%ccomments(NLVL_SHAPE)       = ''
+tzbudiachro%ccomments(NLVL_SHAPE)       = 'Vertical profiles at position of profiler ' // Trim( ygroup )
 
 tzbudiachro%lleveluse(NLVL_TIMEAVG)     = .false.
 tzbudiachro%clevels  (NLVL_TIMEAVG)     = 'Not_time_averaged'
@@ -718,18 +443,206 @@ tzbudiachro%njh        = 1
 tzbudiachro%nkl        = 1
 tzbudiachro%nkh        = iku
 
-call Write_diachro( tpdiafile, tzbudiachro, tzfields, tprofiler%tpdates, zw6 )
+call Write_diachro( tpdiafile, tzbudiachro, tzfields, tprofiler%tpdates, xwork6(:,:,:,:,:,:jproc) )
 
-deallocate( tzfields )
+Deallocate( tzfields )
+Deallocate( xwork6 )
 
-DEALLOCATE (ZW6     )
-DEALLOCATE (YCOMMENT)
-DEALLOCATE (YTITLE  )
-DEALLOCATE (YUNIT   )
-DEALLOCATE (IGRID   )
-!----------------------------------------------------------------------------
-END SUBROUTINE PROFILER_DIACHRO_n
 !----------------------------------------------------------------------------
+!Treat point values
+
+ALLOCATE (XWORK6(1,1,1,size(tprofiler%tpdates),1,IPROC))
+
+jproc = 0
+
+if ( ldiag_in_run ) then
+  call Add_point( 'T2m',    '2-m temperature',               'K',       tprofiler%t2m    )
+  call Add_point( 'Q2m',    '2-m humidity',                  'kg kg-1', tprofiler%q2m    )
+  call Add_point( 'HU2m',   '2-m relative humidity',         'percent', tprofiler%hu2m   )
+  call Add_point( 'zon10m', '10-m zonal wind',               'm s-1',   tprofiler%zon10m )
+  call Add_point( 'mer10m', '10-m meridian wind',            'm s-1',   tprofiler%mer10m )
+  call Add_point( 'RN',     'Net radiation',                 'W m-2',   tprofiler%rn     )
+  call Add_point( 'H',      'Sensible heat flux',            'W m-2',   tprofiler%h      )
+  call Add_point( 'LE',     'Total Latent heat flux',        'W m-2',   tprofiler%le     )
+  call Add_point( 'G',      'Storage heat flux',             'W m-2',   tprofiler%gflux  )
+  if ( crad /= 'NONE' ) then
+    call Add_point( 'SWD',  'Downward short-wave radiation', 'W m-2',   tprofiler%swd    )
+    call Add_point( 'SWU',  'Upward short-wave radiation',   'W m-2',   tprofiler%swu    )
+    call Add_point( 'LWD',  'Downward long-wave radiation',  'W m-2',   tprofiler%lwd    )
+    call Add_point( 'LWU',  'Upward long-wave radiation',    'W m-2',   tprofiler%lwu    )
+  end if
+  call Add_point( 'LEI',    'Solid Latent heat flux',        'W m-2',   tprofiler%lei    )
+end if
+
+call Add_point( 'IWV', 'Integrated Water Vapour',   'kg m-2', tprofiler%iwv )
+call Add_point( 'ZTD', 'Zenith Tropospheric Delay', 'm',      tprofiler%ztd )
+call Add_point( 'ZWD', 'Zenith Wet Delay',          'm',      tprofiler%zwd )
+call Add_point( 'ZHD', 'Zenith Hydrostatic Delay',  'm',      tprofiler%zhd )
+
+Allocate( tzfields( jproc ) )
+
+tzfields(:)%cmnhname  = ctitle(1 : jproc)
+tzfields(:)%cstdname  = ''
+tzfields(:)%clongname = ctitle(1 : jproc)
+tzfields(:)%cunits    = cunit(1 : jproc)
+tzfields(:)%ccomment  = ccomment(1 : jproc)
+tzfields(:)%ngrid     = 0
+tzfields(:)%ntype     = TYPEREAL
+tzfields(:)%ndims     = 2
+tzfields(:)%ndimlist(1) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(2) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(3) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(4) = NMNHDIM_PROFILER_TIME
+tzfields(:)%ndimlist(5) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(6) = NMNHDIM_PROFILER_PROC
+
+tzbudiachro%lleveluse(NLVL_CATEGORY)    = .true.
+tzbudiachro%clevels  (NLVL_CATEGORY)    = 'Profilers'
+tzbudiachro%ccomments(NLVL_CATEGORY)    = 'Level for the different vertical profilers'
+
+tzbudiachro%lleveluse(NLVL_SUBCATEGORY) = .false.
+tzbudiachro%clevels  (NLVL_SUBCATEGORY) = ''
+tzbudiachro%ccomments(NLVL_SUBCATEGORY) = ''
+
+tzbudiachro%lleveluse(NLVL_GROUP)       = .true.
+tzbudiachro%clevels  (NLVL_GROUP)       = ygroup
+tzbudiachro%ccomments(NLVL_GROUP)       = 'Data at position of profiler ' // Trim( ygroup )
+
+tzbudiachro%lleveluse(NLVL_SHAPE)       = .true.
+tzbudiachro%clevels  (NLVL_SHAPE)       = 'Point'
+tzbudiachro%ccomments(NLVL_SHAPE)       = 'Values at position of profiler ' // Trim( ygroup )
+
+tzbudiachro%lleveluse(NLVL_TIMEAVG)     = .false.
+tzbudiachro%clevels  (NLVL_TIMEAVG)     = 'Not_time_averaged'
+tzbudiachro%ccomments(NLVL_TIMEAVG)     = 'Values are not time averaged'
+
+tzbudiachro%lleveluse(NLVL_NORM)        = .false.
+tzbudiachro%clevels  (NLVL_NORM)        = 'Not_normalized'
+tzbudiachro%ccomments(NLVL_NORM)        = 'Values are not normalized'
+
+tzbudiachro%lleveluse(NLVL_MASK)        = .false.
+tzbudiachro%clevels  (NLVL_MASK)        = ''
+tzbudiachro%ccomments(NLVL_MASK)        = ''
+
+tzbudiachro%lmobile    = .false.
+!Compression does not make sense here
+!Keep these values for backward compatibility of LFI files
+tzbudiachro%licompress = .true.
+tzbudiachro%ljcompress = .true.
+tzbudiachro%lkcompress = .false.
+tzbudiachro%ltcompress = .false.
+tzbudiachro%lnorm      = .false.
+!Horizontal boundaries in physical domain does not make sense here (but flyer position does)
+!These values are not written in the netCDF files
+!These values are written in the LFI files. They are kept for backward compatibility (and not set to default values)
+tzbudiachro%nil        = 1
+tzbudiachro%nih        = 1
+tzbudiachro%njl        = 1
+tzbudiachro%njh        = 1
+tzbudiachro%nkl        = 1
+tzbudiachro%nkh        = 1
+
+call Write_diachro( tpdiafile, tzbudiachro, tzfields, tprofiler%tpdates, xwork6(:,:,:,:,:,:jproc) )
+
+Deallocate( tzfields )
+
+
 !----------------------------------------------------------------------------
-!
-END SUBROUTINE WRITE_PROFILER_n
+!Treat position
+
+jproc = 0
+
+JPROC = JPROC + 1
+CTITLE   (JPROC) = 'LON'
+CUNIT    (JPROC) = 'degree'
+CCOMMENT (JPROC) = 'Longitude'
+XWORK6 (1,1,1,:,1,JPROC) = TPROFILER%LON(KI)
+
+JPROC = JPROC + 1
+CTITLE   (JPROC) = 'LAT'
+CUNIT    (JPROC) = 'degree'
+CCOMMENT (JPROC) = 'Latitude'
+XWORK6 (1,1,1,:,1,JPROC) = TPROFILER%LAT(KI)
+
+Allocate( tzfields( jproc ) )
+
+tzfields(:)%cmnhname  = ctitle(1 : jproc)
+tzfields(:)%cstdname  = ''
+tzfields(:)%clongname = ctitle(1 : jproc)
+tzfields(:)%cunits    = cunit(1 : jproc)
+tzfields(:)%ccomment  = ccomment(1 : jproc)
+tzfields(:)%ngrid     = 0
+tzfields(:)%ntype     = TYPEREAL
+tzfields(:)%ndims     = 1
+tzfields(:)%ndimlist(1) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(2) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(3) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(4) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(5) = NMNHDIM_UNUSED
+tzfields(:)%ndimlist(6) = NMNHDIM_PROFILER_PROC
+
+call Write_diachro( tpdiafile, tzbudiachro, tzfields, tprofiler%tpdates, xwork6(:,:,:,:,:,:jproc) )
+
+
+!Necessary because global variables (private inside module)
+Deallocate( xwork6  )
+Deallocate (ccomment)
+Deallocate (ctitle  )
+Deallocate (cunit   )
+
+
+contains
+
+
+subroutine Add_profile( htitle, hcomment, hunits, pfield )
+
+use mode_msg
+
+character(len=*),       intent(in) :: htitle
+character(len=*),       intent(in) :: hcomment
+character(len=*),       intent(in) :: hunits
+real, dimension(:,:,:), intent(in) :: pfield
+
+integer :: jk
+
+jproc = jproc + 1
+
+if ( jproc > iproc ) call Print_msg( NVERB_FATAL, 'IO', 'Add_profile', 'more profiles than expected' )
+
+ctitle(jproc)   = Trim( htitle)
+ccomment(jproc) = Trim( hcomment )
+cunit(jproc)    = Trim( hunits )
+
+do jk = 1, iku
+  xwork6(1, 1, jk, :, 1, jproc) = pfield(:, jk, ki)
+end do
+
+end subroutine Add_profile
+
+
+subroutine Add_point( htitle, hcomment, hunits, pfield )
+
+use mode_msg
+
+character(len=*),     intent(in) :: htitle
+character(len=*),     intent(in) :: hcomment
+character(len=*),     intent(in) :: hunits
+real, dimension(:,:), intent(in) :: pfield
+
+integer :: jk
+
+jproc = jproc + 1
+
+if ( jproc > iproc ) call Print_msg( NVERB_FATAL, 'IO', 'Add_profile', 'more profiles than expected' )
+
+ctitle(jproc)   = Trim( htitle)
+ccomment(jproc) = Trim( hcomment )
+cunit(jproc)    = Trim( hunits )
+
+xwork6(1, 1, 1, :, 1, jproc) = pfield(:, ki)
+
+end subroutine Add_point
+
+END SUBROUTINE PROFILER_DIACHRO_n
+
+END MODULE MODE_WRITE_PROFILER_n
diff --git a/src/MNH/write_seriesn.f90 b/src/MNH/write_seriesn.f90
index a1e425f39842f5fb842e9b524db845929f6549e2..54ed6c7c8cc5667860dc1c0bc285787c09f76772 100644
--- a/src/MNH/write_seriesn.f90
+++ b/src/MNH/write_seriesn.f90
@@ -119,6 +119,7 @@ REAL :: ZSIZEHB
 CHARACTER(LEN=100) :: YMSG
 type(tbudiachrometadata)                              :: tzbudiachro
 type(tfield_metadata_base), dimension(:), allocatable :: tzfields
+type(tfiledata)                                       :: tzfile
 !----------------------------------------------------------------------------
 !
 !*    1.     INITIALIZATION
@@ -303,15 +304,28 @@ tzbudiachro%njh        = njboxh
 tzbudiachro%nkl        = 1
 tzbudiachro%nkh        = ikmax
 
-! Loop on the different masks
-! Do not provide all tzfields once because they can be stored in different HDF groups (based on masks)
-do jp = 1 , nstemp_serie1
-  tzbudiachro%clevels(NLVL_MASK) = Trim( csmask1(jp) )
-  tzbudiachro%ccomments(NLVL_MASK) = ''
+tzfile = tpdiafile
+if ( Trim( tpdiafile%cformat ) == 'LFI' .or. Trim( tpdiafile%cformat ) == 'LFICDF4' ) then
+  !For LFI files, it is necessary to write all the 'processes' (source terms) of the different masks in one pass
+  !to ensure that they are grouped together and not overwritten
+  tzfile%cformat = 'LFI'
 
-  call Write_diachro( tpdiafile, tzbudiachro, [ tzfields(jp) ], tpsdates(1:nsnbstept), &
-                      xsseries1(1:1,1:1,1:1,1:nsnbstept,1:1,jp:jp)                 )
-end do
+  call Write_diachro( tzfile, tzbudiachro, tzfields, tpsdates(1:nsnbstept), &
+                      xsseries1(1:1,1:1,1:1,1:nsnbstept,1:1,:)              )
+end if
+
+if ( Trim( tpdiafile%cformat ) /= 'LFI' ) then! Loop on the different masks
+  tzfile%cformat = 'NETCDF4'
+
+  ! Do not provide all tzfields once because they can be stored in different HDF groups (based on masks)
+  do jp = 1 , nstemp_serie1
+    tzbudiachro%clevels(NLVL_MASK) = Trim( csmask1(jp) )
+    tzbudiachro%ccomments(NLVL_MASK) = ''
+
+    call Write_diachro( tzfile, tzbudiachro, [ tzfields(jp) ], tpsdates(1:nsnbstept), &
+                        xsseries1(1:1,1:1,1:1,1:nsnbstept,1:1,jp:jp)                 )
+  end do
+end if
 
 deallocate( tzfields )
 !
@@ -431,15 +445,27 @@ tzbudiachro%njh        = njboxh
 tzbudiachro%nkl        = 1
 tzbudiachro%nkh        = ikmax
 
-! Loop on the different masks
-! Do not provide all tzfields once because they can be stored in different HDF groups (based on masks)
-do jp = 1 , nstemp_serie2
-  tzbudiachro%clevels(NLVL_MASK) = csmask2(jp)
-  tzbudiachro%ccomments(NLVL_MASK) = ''
+if ( Trim( tpdiafile%cformat ) == 'LFI' .or. Trim( tpdiafile%cformat ) == 'LFICDF4' ) then
+  !For LFI files, it is necessary to write all the 'processes' (source terms) of the different masks in one pass
+  !to ensure that they are grouped together and not overwritten
+  tzfile%cformat = 'LFI'
 
-  call Write_diachro( tpdiafile, tzbudiachro, [ tzfields(jp) ], tpsdates(1:nsnbstept), &
-                      xsseries2(1:1,1:1,1:ikmax,1:nsnbstept,1:1,jp:jp)                 )
-end do
+  call Write_diachro( tzfile, tzbudiachro, tzfields, tpsdates(1:nsnbstept), &
+                      xsseries2(1:1,1:1,1:ikmax,1:nsnbstept,1:1,:)          )
+end if
+
+if ( Trim( tpdiafile%cformat ) /= 'LFI' ) then! Loop on the different masks
+  tzfile%cformat = 'NETCDF4'
+
+  ! Do not provide all tzfields once because they can be stored in different HDF groups (based on masks)
+  do jp = 1 , nstemp_serie2
+    tzbudiachro%clevels(NLVL_MASK) = csmask2(jp)
+    tzbudiachro%ccomments(NLVL_MASK) = ''
+
+    call Write_diachro( tzfile, tzbudiachro, [ tzfields(jp) ], tpsdates(1:nsnbstept), &
+                        xsseries2(1:1,1:1,1:ikmax,1:nsnbstept,1:1,jp:jp)              )
+  end do
+end if
 
 deallocate( tzfields )
 !
diff --git a/src/MNH/zoom_pgd.f90 b/src/MNH/zoom_pgd.f90
index 90103c5141e3712d2c40af6ca916c184b0856162..4f0961d8e48419a0a966933dcf1ac64215208bb7 100644
--- a/src/MNH/zoom_pgd.f90
+++ b/src/MNH/zoom_pgd.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2005-2019 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2005-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -42,14 +42,14 @@
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 07/02/2019: force TYPE to a known value for IO_File_add2list
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
-!!
+!  P. Wautelet 06/07/2021: use FINALIZE_MNH
 !----------------------------------------------------------------------------
 !
 !*    0.     DECLARATION
 !            -----------
 !
 USE MODD_CONF,   ONLY : CPROGRAM, L1D, L2D, LPACK
-USE MODD_IO,     ONLY:  NIO_VERB,NVERB_DEBUG,TFILE_OUTPUTLISTING,TFILEDATA
+USE MODD_IO,               only:  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,12 +57,13 @@ USE MODD_DIM_n,       ONLY : NIMAX, NJMAX
 USE MODD_CONF_n,   ONLY : CSTORAGE_TYPE
 use modd_precision, only: LFIINT
 !
+USE MODE_FINALIZE_MNH,     only: FINALIZE_MNH
 USE MODE_POS
 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_IO_MANAGE_STRUCT, only: IO_File_add2list
 USE MODE_ll
 USE MODE_MSG
 USE MODE_MODELN_HANDLER
@@ -258,18 +259,12 @@ CPGDFILE = YZOOMFILE
 !
 CALL IO_File_close(TZPGDFILE)
 !
-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(TLUOUT0)
-!
-CALL END_PARA_ll(IINFO_ll)
-
-IF (CSURF=='EXTE') CALL SURFEX_DEALLO_LIST
+CALL FINALIZE_MNH()
 !
 !-------------------------------------------------------------------------------
 !