diff --git a/src/MNH/ini_deep_convection.f90 b/src/MNH/ini_deep_convection.f90
index 695d39a4d512f4fa48d0137b495279e39f1f62de..cd57a04d474a3de665c0b01f4bd2f5d574e7a0ea 100644
--- a/src/MNH/ini_deep_convection.f90
+++ b/src/MNH/ini_deep_convection.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1996-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1996-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -109,33 +109,23 @@ END MODULE MODI_INI_DEEP_CONVECTION
 !!                    for a correct restart this variable has to be writen in FM file
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 14/02/2019: remove CLUOUT/CLUOUT0 and associated variables
-!  P. Wautelet 14/02/2019: move UPCASE function to tools.f90
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_CH_AEROSOL,      ONLY: CAERONAMES
-USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_CONVPAR
-USE MODD_DUST,            ONLY: CDUSTNAMES
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 use modd_field,           only: tfieldmetadata, tfieldlist, TYPEREAL
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_NSV,             ONLY: NSV, NSV_USER, NSV_CHEMBEG, NSV_CHEMEND, NSV_C2R2BEG, NSV_C2R2END, &
-                                NSV_LGBEG, NSV_LGEND, NSV_LNOXBEG, NSV_LNOXEND, &
-                                NSV_DSTBEG, NSV_DSTEND, NSV_AERBEG, NSV_AEREND, &
-                                NSV_SLTBEG, NSV_SLTEND, NSV_PPBEG, NSV_PPEND, &
-                                NSV_C1R3BEG, NSV_C1R3END, NSV_ELECBEG, NSV_ELECEND
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_SALT,            ONLY: CSALTNAMES
+USE MODD_NSV,             ONLY: NSV, NSV_USER, TSVLIST,                               &
+                                NSV_AERDEPBEG, NSV_CHICBEG, NSV_CSBEG, NSV_DSTDEPBEG, &
+                                NSV_LIMA_BEG, NSV_PPBEG, NSV_SLTDEPBEG, NSV_SNWBEG,   &
+                                NSV_AERDEPEND, NSV_CHICEND, NSV_CSEND, NSV_DSTDEPEND, &
+                                NSV_LIMA_END, NSV_PPEND, NSV_SLTDEPEND, NSV_SNWEND
 USE MODD_TIME
 !
 use mode_field,           only: Find_field_id_from_mnhname
 USE MODE_IO_FIELD_READ,   only: IO_Field_read
-USE MODE_TOOLS,           ONLY: UPCASE
 !
 IMPLICIT NONE
 !
@@ -183,6 +173,8 @@ REAL, DIMENSION(:,:),   INTENT(INOUT) :: PCG_TOTAL_NUMBER ! Total number of CG
 INTEGER              :: IID
 INTEGER              :: IRESP
 INTEGER              :: JSV     ! number of tracers
+LOGICAL              :: GOLDFILEFORMAT
+LOGICAL              :: GREAD
 TYPE(TFIELDMETADATA) :: TZFIELD
 !
 !-------------------------------------------------------------------------------
@@ -196,6 +188,11 @@ TYPE(TFIELDMETADATA) :: TZFIELD
 !*       2. INITIALIZE CONVECTIVE TENDENCIES
 !	        --------------------------------
 !
+!If TPINIFILE file was written with a MesoNH version < 5.5.1, some variables had different names or were not available
+GOLDFILEFORMAT = (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+                   .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+                   .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) )
+
 PUMFCONV(:,:,:)  = 0.0
 PDMFCONV(:,:,:)  = 0.0
 PMFCONV(:,:,:)   = 0.0  ! warning, restart may be incorrect
@@ -258,8 +255,8 @@ ELSE
   END IF
 !
 !
- SELECT CASE(HGETSVCONV)
-  CASE('READ')
+ GETSVCONV: SELECT CASE(HGETSVCONV)
+  CASE('READ') GETSVCONV
     TZFIELD = TFIELDMETADATA(     &
       CMNHNAME   = 'generic for ini_deep_convection', & !Temporary name to ease identification
       CUNITS     = 's-1',         &
@@ -269,73 +266,39 @@ ELSE
       NDIMS      = 3,             &
       LTIMEDEP   = .TRUE.         )
     !
-    DO JSV = 1, NSV_USER
-      WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
+    DO JSV = 1, NSV
+      GREAD = .TRUE.
+
+      IF ( GOLDFILEFORMAT ) THEN
+        IF ( ( JSV >= 1         .AND. JSV <= NSV_USER  ) .OR. &
+             ( JSV >= NSV_PPBEG .AND. JSV <= NSV_PPEND )      ) THEN
+          WRITE( TZFIELD%CMNHNAME, '( A7, I3.3 )' ) 'DSVCONV', JSV
+          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        ELSE IF ( ( JSV >= NSV_LIMA_BEG  .AND. JSV <= NSV_LIMA_END  ) .OR. &
+                  ( JSV >= NSV_CSBEG     .AND. JSV <= NSV_CSEND     ) .OR. &
+                  ( JSV >= NSV_CHICBEG   .AND. JSV <= NSV_CHICEND   ) .OR. &
+                  ( JSV >= NSV_AERDEPBEG .AND. JSV <= NSV_AERDEPEND ) .OR. &
+                  ( JSV >= NSV_DSTDEPBEG .AND. JSV <= NSV_DSTDEPEND ) .OR. &
+                  ( JSV >= NSV_SLTDEPBEG .AND. JSV <= NSV_SLTDEPEND ) .OR. &
+                  ( JSV >= NSV_SNWBEG    .AND. JSV <= NSV_SNWEND    )      ) THEN
+          PDSVCONV(:,:,:,JSV) = 0.0
+          GREAD = .FALSE. !This variable was not written in pre-5.5.1 files
+        ELSE
+          TZFIELD%CMNHNAME   = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CMNHNAME )
+          TZFIELD%CLONGNAME  = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CLONGNAME )
+        END IF
+      ELSE
+        TZFIELD%CMNHNAME   = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CMNHNAME )
+        TZFIELD%CLONGNAME  = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CLONGNAME )
+      END IF
+      WRITE( TZFIELD%CCOMMENT, '( A, I3.3 )' )'X_Y_Z_DSVCONV', JSV
+      IF ( GREAD ) CALL IO_Field_read( TPINIFILE, TZFIELD, PDSVCONV(:,:,:,JSV) )
     END DO
-    DO JSV = NSV_C2R2BEG, NSV_C2R2END
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_C1R3BEG, NSV_C1R3END
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_ELECBEG, NSV_ELECEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_CHEMBEG, NSV_CHEMEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_AERBEG, NSV_AEREND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_LINOX'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_DSTBEG, NSV_DSTEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_SLTBEG, NSV_SLTEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_LGBEG, NSV_LGEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_PPBEG, NSV_PPEND
-      WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_read(TPINIFILE,TZFIELD,PDSVCONV(:,:,:,JSV))
-    END DO
- END SELECT
+
+  CASE('INIT') GETSVCONV
+    PDSVCONV(:,:,:,:) = 0.0
+
+ END SELECT GETSVCONV
 !
 !
 END IF
diff --git a/src/MNH/ini_lb.f90 b/src/MNH/ini_lb.f90
index 2d30bdde091ce44a8390135ce48bd16a5f95722d..c45c5066668507555fa6263373ae1c2af7af38d3 100644
--- a/src/MNH/ini_lb.f90
+++ b/src/MNH/ini_lb.f90
@@ -131,35 +131,29 @@ SUBROUTINE INI_LB(TPINIFILE,OLSOURCE,KSV,                          &
 !!      J.Escobar : 27/04/2016 : bug , test only on ANY(HGETSVM({{1:KSV}})=='READ'
 !!      J.-P. Pinty     09/02/16    Add LIMA that is LBC for CCN and IFN
 !!      M.Leriche       09/02/16    Treat gas and aq. chemicals separately
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
 !  P. Wautelet 13/02/2019: initialize PLBXSVM and PLBYSVM in all cases
-!  P. Wautelet 14/02/2019: move UPCASE function to tools.f90
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  S. Bielli      02/2019: Sea salt: significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !
-USE MODD_CH_AEROSOL
-USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
-USE MODD_CTURB
-USE MODD_CONF
-USE MODD_DUST
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-use modd_field,           only: tfieldmetadata, TYPELOG, TYPEREAL
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
+USE MODD_CTURB,           ONLY: XTKEMIN
+USE MODD_CONF,            ONLY: LCPL_AROME
+use modd_field,           only: NMNHDIM_UNKNOWN, tfieldmetadata, TYPELOG, TYPEREAL
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_LUNIT_n,         ONLY: TLUOUT
-USE MODD_NSV
-USE MODD_PARAMETERS,      ONLY: JPHEXT, NMNHNAMELGTMAX
+USE MODD_NSV,             ONLY: NSV, NSV_CS, NSV_CSBEG, NSV_CSEND, NSV_LIMA_BEG, NSV_LIMA_END,      &
+#ifdef MNH_FOREFIRE
+                                NSV_FF, NSV_FFBEG, NSV_FFEND,                                       &
+#endif
+                                NSV_LIMA_CCN_FREE, NSV_LIMA_IFN_FREE, NSV_PP, NSV_PPBEG, NSV_PPEND, &
+                                NSV_SNWBEG, NSV_SNWEND, NSV_USER, TSVLIST
+USE MODD_PARAMETERS,      ONLY: JPHEXT, JPSVNAMELGTMAX, NLONGNAMELGTMAX, NMNHNAMELGTMAX
 USE MODD_PARAM_LIMA,      ONLY: NMOD_CCN, NMOD_IFN
-USE MODD_PARAM_n
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_SALT
 !
 USE MODE_IO_FIELD_READ,   only: IO_Field_read, IO_Field_read_lb
 USE MODE_MSG
-USE MODE_TOOLS, ONLY: UPCASE
 !
 IMPLICIT NONE
 !
@@ -221,15 +215,16 @@ INTEGER             :: JSV,JRR                    ! Loop index for MOIST AND
                                                   !  additional scalar variables 
 INTEGER             :: IRR                        !  counter for moist variables
 INTEGER             :: IRESP
-INTEGER             :: ILUOUT   !  Logical unit number associated with TLUOUT
 LOGICAL :: GHORELAX_UVWTH  ! switch for the horizontal relaxation for U,V,W,TH in the FM file
 LOGICAL :: GHORELAX_TKE    ! switch for the horizontal relaxation for tke in the FM file
 LOGICAL :: GHORELAX_R, GHORELAX_SV ! switch for the horizontal relaxation 
                                    ! for moist and scalar variables
+LOGICAL :: GOLDFILEFORMAT
 CHARACTER (LEN= LEN(HGETRVM)), DIMENSION (7) :: YGETRXM ! Arrays with  the get indicators 
                                                         !  for the moist variables
 CHARACTER (LEN=1), DIMENSION (7) :: YC    ! array with the prefix of the moist variables
-CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME_BASE
+CHARACTER(LEN=NMNHNAMELGTMAX)  :: YMNHNAME_BASE
+CHARACTER(LEN=NLONGNAMELGTMAX) :: YLONGNAME_BASE
 TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
@@ -246,7 +241,10 @@ ENDIF
 !*       1.    SOME INITIALIZATIONS
 !              --------------------
 !
-ILUOUT = TLUOUT%NLU
+!If TPINIFILE file was written with a MesoNH version < 5.5.1, some variables had different names or were not available
+GOLDFILEFORMAT = (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+                   .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+                   .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) )
 !
 !
 !-------------------------------------------------------------------------------
@@ -283,37 +281,14 @@ ELSE
   IL3DYV=2 + 2*JPHEXT ! 4 
 ENDIF
 !
-IF (KSIZELBXU_ll/= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBXUM',IL3DXU,IRIMXU,PLBXUM)
-END IF
-
-IF ( KSIZELBX_ll /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBXVM',IL3DX,IRIMX,PLBXVM)
-ENDIF
-
-IF ( KSIZELBX_ll /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBXWM',IL3DX,IRIMX,PLBXWM)
-END IF
-
-IF ( KSIZELBY_ll /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBYUM',IL3DY,IRIMY,PLBYUM)
-END IF
-
-IF ( KSIZELBYV_ll  /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBYVM',IL3DYV,IRIMYV,PLBYVM)
-END IF
-
-IF (KSIZELBY_ll /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBYWM',IL3DY,IRIMY,PLBYWM)
-END IF
-
-IF (KSIZELBX_ll /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBXTHM',IL3DX,IRIMX,PLBXTHM)
-END IF
-
-IF ( KSIZELBY_ll /= 0) THEN
-  CALL IO_Field_read_lb(TPINIFILE,'LBYTHM',IL3DY,IRIMY,PLBYTHM)
-END IF
+IF ( KSIZELBXU_ll /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBXUM',  IL3DXU, IRIMXU, PLBXUM  )
+IF ( KSIZELBX_ll  /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBXVM',  IL3DX,  IRIMX,  PLBXVM  )
+IF ( KSIZELBX_ll  /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBXWM',  IL3DX,  IRIMX,  PLBXWM  )
+IF ( KSIZELBY_ll  /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBYUM',  IL3DY,  IRIMY,  PLBYUM  )
+IF ( KSIZELBYV_ll /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBYVM',  IL3DYV, IRIMYV, PLBYVM  )
+IF ( KSIZELBY_ll  /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBYWM',  IL3DY,  IRIMY,  PLBYWM  )
+IF ( KSIZELBX_ll  /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBXTHM', IL3DX,  IRIMX,  PLBXTHM )
+IF ( KSIZELBY_ll  /= 0 ) CALL IO_Field_read_lb( TPINIFILE, 'LBYTHM', IL3DY,  IRIMY,  PLBYTHM )
 !
 !*        2.3  LB-TKE
 !
@@ -321,11 +296,10 @@ SELECT CASE(HGETTKEM)
 CASE('READ') 
   IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
     IF (PRESENT(PLBXTKEMM).AND.PRESENT(PLBYTKEMM)) THEN
-      WRITE ( ILUOUT,*) 'LBXTKES AND LBYTKES WILL BE INITIALIZED TO 0'
+      CALL PRINT_MSG( NVERB_INFO, 'IO', 'INI_LB', 'LBXTKES and LBYTKE are initialized to PLBXTKEMM and PLBYTKEMM' )
       PLBXTKEM(:,:,:) = PLBXTKEMM(:,:,:)    
       PLBYTKEM(:,:,:) = PLBYTKEMM(:,:,:)
     ELSE
-!callabortstop
       CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize LBXTKES and LBYTKES')
     ENDIF
   ELSE
@@ -431,9 +405,8 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
             IF (PRESENT(PLBXRMM)) THEN
               PLBXRM(:,:,:,IRR)=PLBXRMM(:,:,:,IRR)
-              WRITE(ILUOUT,*) 'PLBXRS  will be initialized to 0 for LBXR'//YC(JRR)//'M'
+              CALL PRINT_MSG( NVERB_INFO, 'IO', 'INI_LB', 'PLBXRM is initialized to PLBXRMM for LBXR'//YC(JRR)//'M' )
             ELSE
-              !callabortstop
               CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBXRM for LBXR'//YC(JRR)//'M')
             ENDIF
         ELSE
@@ -449,9 +422,8 @@ IF(KSIZELBXR_ll  > 0 ) THEN
         IF (.NOT. LCPL_AROME .AND. OLSOURCE) THEN
             IF (PRESENT(PLBYRMM)) THEN
               PLBYRM(:,:,:,IRR)=PLBYRMM(:,:,:,IRR)
-              WRITE(ILUOUT,*) 'PLBYRS  will be initialized to 0 for LBYR'//YC(JRR)//'M'
+              CALL PRINT_MSG( NVERB_INFO, 'IO', 'INI_LB', 'PLBYRM is initialized to PLBYRMM for LBYR'//YC(JRR)//'M' )
             ELSE
-              !callabortstop
               CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBYRM for LBYR'//YC(JRR)//'M')
             ENDIF
          ELSE
@@ -472,1121 +444,216 @@ END IF
 !
 !*        2.6    LB-Scalar Variables
 !
-PLBXSVM(:,:,:,:) = 0.
-PLBYSVM(:,:,:,:) = 0.
-!
 IF (KSV > 0) THEN
   IF (ANY(HGETSVM(1:KSV)=='READ')) THEN
-    TZFIELD%CMNHNAME   = 'HORELAX_SV'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'HORELAX_SV'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = '--'
-    TZFIELD%CCOMMENT   = ''
-    TZFIELD%CLBTYPE    = 'NONE'
-    TZFIELD%NGRID      = 0
-    TZFIELD%NTYPE      = TYPELOG
-    TZFIELD%NDIMS      = 0
-    TZFIELD%LTIMEDEP   = .FALSE.
-    CALL IO_Field_read(TPINIFILE,TZFIELD,GHORELAX_SV)
+    TZFIELD = TFIELDMETADATA(    &
+      CMNHNAME   = 'HORELAX_SV', &
+      CSTDNAME   = '',           &
+      CLONGNAME  = 'HORELAX_SV', &
+      CUNITS     = '',           &
+      CDIR       = '--',         &
+      CCOMMENT   = '',           &
+      CLBTYPE    = 'NONE',       &
+      NGRID      = 0,            &
+      NTYPE      = TYPELOG,      &
+      NDIMS      = 0,            &
+      LTIMEDEP   = .FALSE.       )
+    CALL IO_Field_read( TPINIFILE, TZFIELD, GHORELAX_SV )
+
     IF ( GHORELAX_SV ) THEN
-      IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2   
+      IRIMX=(KSIZELBXSV_ll-2*JPHEXT)/2
       IRIMY=(KSIZELBYSV_ll-2*JPHEXT)/2
       IL3DX=2*ILBSIZEX+2*JPHEXT
       IL3DY=2*ILBSIZEY+2*JPHEXT
     ELSE
       IRIMX=0
       IRIMY=0
-      IL3DX=2*JPHEXT !2
-      IL3DY=2*JPHEXT !2
+      IL3DX=2*JPHEXT
+      IL3DY=2*JPHEXT
     END IF
   END IF
 END IF
-! User scalar variables
-IF (NSV_USER>0) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = 1, NSV_USER
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBXSVM',JSV
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'PLXYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBYSVM',JSV
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! C2R2 scalar variables
-IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'm-3'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_C2R2BEG, NSV_C2R2END
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'C2R2 PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C2R2 PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'C2R2 PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C2R2 PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! C1R3 scalar variables
-IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'm-3'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_C1R3BEG, NSV_C1R3END
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'C1R3 PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C1R3 PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'C1R3 PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize C1R3 PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-! LIMA: CCN and IFN scalar variables
-!
-IF (CCLOUD=='LIMA' ) THEN
-  DO JSV = NSV_LIMA_CCN_FREE, NSV_LIMA_CCN_FREE + NMOD_CCN - 1
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        TZFIELD = TSVLIST(JSV)
-        TZFIELD%CDIR = ''
-        YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
-
-        IF ( KSIZELBXSV_ll /= 0 .AND. SIZE(PLBXSVM,1) /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
-
-          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
-            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
-          END IF
-
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          TZFIELD%CLBTYPE    = 'LBX'
-
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-
-          IF (IRESP/=0) THEN
-            IF (PRESENT(PLBXSVMM)) THEN
-              PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-              WRITE(ILUOUT,*) 'CCN PLBXSVM   will be initialized to 0'
-            ELSE
-!callabortstop
-              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBXSVM')
-            ENDIF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 .AND. SIZE(PLBYSVM,1) /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
 
-          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
-            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
-          END IF
+! Scalar variables
+DO JSV = 1, NSV
+  SELECT CASE( HGETSVM(JSV) )
+    CASE ( 'READ' )
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CDIR = ''
+      TZFIELD%NDIMLIST(:) = NMNHDIM_UNKNOWN
+      YMNHNAME_BASE  = TRIM( TZFIELD%CMNHNAME  )
+      YLONGNAME_BASE = TRIM( TZFIELD%CLONGNAME )
 
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          TZFIELD%CLBTYPE    = 'LBY'
+      IF ( KSIZELBXSV_ll /= 0 .AND. SIZE( PLBXSVM, 1 ) /= 0 ) THEN
+        TZFIELD%CMNHNAME  = 'LBX_' // TRIM( YMNHNAME_BASE  )
+        TZFIELD%CLONGNAME = 'LBX_' // TRIM( YLONGNAME_BASE )
 
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF (IRESP/=0) THEN
-            IF (PRESENT(PLBYSVMM)) THEN
-              PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-              WRITE(ILUOUT,*) 'CCN PLBYSVM   will be initialized to 0'
-            ELSE
-!callabortstop
-              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize CCN PLBYSVM')
-            ENDIF
+        !Some variables were written with an other name in MesoNH < 5.5.1
+        IF ( GOLDFILEFORMAT ) THEN
+          IF ( JSV >= 1 .AND. JSV <= NSV_USER ) THEN
+            WRITE( TZFIELD%CMNHNAME, '( A6, I3.3 )' ) 'LBXSVM',JSV
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
+          ELSE IF ( JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END ) THEN
+            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME, TZFIELD%CLONGNAME )
+            TZFIELD%CSTDNAME  = ''
+          ELSE IF ( JSV >= NSV_PPBEG .AND. JSV <= NSV_PPEND ) THEN
+            TZFIELD%CMNHNAME  = 'LBX_PP'
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = 'LBX_PP'
+            IF ( JSV == NSV_PPBEG .AND. NSV_PP > 1 ) THEN
+              CMNHMSG(1) = 'reading older file (<5.5.1) for LBX_PP scalar variables'
+              CMNHMSG(2) = 'they are bugged: there should be several LBX_PP variables'
+              CMNHMSG(3) = 'but they were all written with the same name ''LBX_PP'''
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB' )
+            END IF
+#ifdef MNH_FOREFIRE
+          ELSE IF ( JSV >= NSV_FFBEG .AND. JSV <= NSV_FFEND ) THEN
+            TZFIELD%CMNHNAME  = 'LBX_FF'
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = 'LBX_FF'
+            IF ( JSV == NSV_FFBEG .AND. NSV_FF > 1 ) THEN
+              CMNHMSG(1) = 'reading older file (<5.5.1) for LBX_FF scalar variables'
+              CMNHMSG(2) = 'they are bugged: there should be several LBX_FF variables'
+              CMNHMSG(3) = 'but they were all written with the same name ''LBX_FF'''
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB' )
+            END IF
+#endif
+          ELSE IF ( JSV >= NSV_CSBEG .AND. JSV <= NSV_CSEND ) THEN
+            TZFIELD%CMNHNAME  = 'LBX_CS'
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = 'LBX_CS'
+            IF ( JSV == NSV_CSBEG .AND. NSV_CS > 1 ) THEN
+              CMNHMSG(1) = 'reading older file (<5.5.1) for LBX_CS scalar variables'
+              CMNHMSG(2) = 'they are bugged: there should be several LBX_CS variables'
+              CMNHMSG(3) = 'but they were all written with the same name ''LBX_CS'''
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB' )
+            END IF
           END IF
         END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-  !
-  DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        TZFIELD = TSVLIST(JSV)
-        TZFIELD%CDIR = ''
-        YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
 
-        IF ( KSIZELBXSV_ll /= 0 .AND. SIZE(PLBXSVM,1) /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
+        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 )' ) '2_Y_Z_', 'LBXSVM', JSV
+        TZFIELD%CLBTYPE     = 'LBX'
 
-          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
-            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
-          END IF
-
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          TZFIELD%CLBTYPE    = 'LBX'
+        CALL IO_Field_read_lb( TPINIFILE, TZFIELD, IL3DX, IRIMX, PLBXSVM(:,:,:,JSV), IRESP )
 
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF (IRESP/=0) THEN
-            IF (PRESENT(PLBXSVMM)) THEN
-              PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-              WRITE(ILUOUT,*) 'IFN PLBXSVM   will be initialized to 0'
+        IF ( IRESP /= 0 ) THEN
+          IF ( PRESENT( PLBXSVMM ) ) THEN
+            PLBXSVM(:,:,:,JSV) = PLBXSVMM(:,:,:,JSV)
+            CALL PRINT_MSG( NVERB_INFO, 'IO', 'INI_LB', 'PLBXSVM is initialized to PLBXSVMM for ' // TRIM( YMNHNAME_BASE ) )
+          ELSE
+            IF ( GOLDFILEFORMAT .AND. JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END ) THEN
+              !In pre 5.5.1 files, only CCN_FREE and IFN_FREE LIMA scalar variables were available (for LIMA scalar variables)
+              IF ( JSV >= NSV_LIMA_CCN_FREE .AND. JSV <= (NSV_LIMA_CCN_FREE+NMOD_CCN-1) ) THEN
+                CALL PRINT_MSG( NVERB_FATAL, 'IO', 'INI_LB', 'problem to initialize LIMA CCN_FREE PLBXSVM' )
+              ELSE IF ( JSV >= NSV_LIMA_IFN_FREE .AND. JSV <= (NSV_LIMA_IFN_FREE+NMOD_IFN-1) ) THEN
+                CALL PRINT_MSG( NVERB_FATAL, 'IO', 'INI_LB', 'problem to initialize LIMA IFN_FREE PLBXSVM' )
+              ELSE
+                PLBXSVM(:,:,:,JSV) = 0.
+                CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB', 'PLBXSVM is initialized to 0 for ' // TRIM( YMNHNAME_BASE ) )
+              END IF
+            ELSE IF ( ( JSV >= NSV_PPBEG  .AND. JSV <= NSV_PPEND ) .OR. &
+#ifdef MNH_FOREFIRE
+                      ( JSV >= NSV_FFBEG  .AND. JSV <= NSV_FFEND ) .OR. &
+#endif
+                      ( JSV >= NSV_CSBEG  .AND. JSV <= NSV_CSEND ) .OR. &
+                      ( JSV >= NSV_SNWBEG .AND. JSV <= NSV_SNWEND .AND. GOLDFILEFORMAT ) ) THEN !Snow was not written in <5.5.1
+              PLBXSVM(:,:,:,JSV) = 0.
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB', 'PLBXSVM is initialized to 0 for ' // TRIM( YMNHNAME_BASE ) )
             ELSE
-!callabortstop
-              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
-            ENDIF
+              CALL PRINT_MSG( NVERB_FATAL, 'IO', 'INI_LB', 'problem to initialize PLBXSVM for ' // TRIM( YMNHNAME_BASE ) )
+            END IF
           END IF
         END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 .AND. SIZE(PLBYSVM,1) /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
-
-          IF (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
-               .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) ) THEN
-            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME )
-          END IF
+      END IF
 
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          TZFIELD%CLBTYPE    = 'LBY'
+      IF ( KSIZELBYSV_ll /= 0 .AND. SIZE( PLBYSVM, 1 ) /= 0 ) THEN
+        TZFIELD%CMNHNAME  = 'LBY_' // TRIM( YMNHNAME_BASE  )
+        TZFIELD%CLONGNAME = 'LBY_' // TRIM( YLONGNAME_BASE )
 
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF (IRESP/=0) THEN
-            IF (PRESENT(PLBYSVMM)) THEN
-              PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-              WRITE(ILUOUT,*) 'IFN PLBYSVM   will be initialized to 0'
-            ELSE
-!callabortstop
-              CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize IFN')
-            ENDIF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! ELEC scalar variables
-IF (NSV_ELECEND>=NSV_ELECBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_ELECBEG, NSV_ELECEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'ELEC PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ELEC PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'ELEC PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ELEC PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Chemical gas phase scalar variables
-IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHGSBEG, NSV_CHGSEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Chemical PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize gas phase chemical PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Chemical PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize gas phase chemical PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Chemical aqueous phase scalar variables
-IF (NSV_CHACEND>=NSV_CHACBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHACBEG, NSV_CHACEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Chemical PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aqueous phase chemical PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Chemical PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aqueous phase chemical PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Chemical ice phase scalar variables
-IF (NSV_CHICEND>=NSV_CHICBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHICBEG, NSV_CHICEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Ice phase chemical PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ice phase chemical PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Ice phase chemical PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize ice phase chemical PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Orilam aerosol scalar variables
-IF (NSV_AEREND>=NSV_AERBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_AERBEG, NSV_AEREND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Aerosol PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Aerosol PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Orilam aerosols moist scalar variables
-IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_AERDEPBEG, NSV_AERDEPEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CDEAERNAMES(JSV-NSV_AERDEPBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Aerosol PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Aerosol PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize aerosol PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Dust scalar variables
-IF (NSV_DSTEND>=NSV_DSTBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_DSTBEG, NSV_DSTEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Dust PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Dust PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_DSTDEPBEG, NSV_DSTDEPEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Dust Desposition PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Dust Depoistion  PLBYSVM   will be initialized to 0'
-              ELSE
-                WRITE(ILUOUT,*) 'Pb to initialize dust PLBYSVM '
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize dust PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Sea salt scalar variables
-IF (NSV_SLTEND>=NSV_SLTBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_SLTBEG, NSV_SLTEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Sea Salt PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize sea salt PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Sea Salt PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize sea salt PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Passive pollutant variables
-IF (NSV_PPEND>=NSV_PPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_PPBEG, NSV_PPEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_PP'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Passive pollutant PLBXSVM   will be initialized to 0'
-              ELSE
-                PLBXSVM(:,:,:,JSV)=0.
-                WRITE(ILUOUT,*) 'Passive pollutant PLBXSVM   will be initialized to 0'
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_PP'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Passive pollutant PLBYSVM   will be initialized to 0'
-              ELSE
-                PLBYSVM(:,:,:,JSV)=0.
-                WRITE(ILUOUT,*) 'Passive pollutant PLBYSVM   will be initialized to 0'
-              ENDIF
+        !Some variables were written with an other name in MesoNH < 5.5.1
+        IF ( GOLDFILEFORMAT ) THEN
+          IF ( JSV >= 1 .AND. JSV <= NSV_USER ) THEN
+            WRITE( TZFIELD%CMNHNAME, '( A6, I3.3 )' ) 'LBYSVM',JSV
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
+          ELSE IF ( JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END ) THEN
+            CALL OLD_CMNHNAME_GENERATE_INTERN( TZFIELD%CMNHNAME, TZFIELD%CLONGNAME )
+            TZFIELD%CSTDNAME  = ''
+          ELSE IF ( JSV >= NSV_PPBEG .AND. JSV <= NSV_PPEND ) THEN
+            TZFIELD%CMNHNAME  = 'LBY_PP'
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = 'LBY_PP'
+            IF ( JSV == NSV_PPBEG .AND. NSV_PP > 1 ) THEN
+              CMNHMSG(1) = 'reading older file (<5.5.1) for LBY_PP scalar variables'
+              CMNHMSG(2) = 'they are bugged: there should be several LBY_PP variables'
+              CMNHMSG(3) = 'but they were all written with the same name ''LBY_PP'''
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB' )
             END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
 #ifdef MNH_FOREFIRE
-! ForeFire scalar variables
-IF (NSV_FFEND>=NSV_FFBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_FFBEG, NSV_FFEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_FF'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          WRITE(ILUOUT,*) 'ForeFire LBX_FF ', IRESP
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM   will be initialized to 0'
-              ELSE
-                PLBXSVM(:,:,:,JSV)=0.
-                WRITE(ILUOUT,*) 'ForeFire pollutant PLBXSVM   will be initialized to 0'
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_FF'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
-              ELSE
-                PLBYSVM(:,:,:,JSV)=0.
-                WRITE(ILUOUT,*) 'ForeFire scalar variable PLBYSVM will be initialized to 0'
-              ENDIF
+          ELSE IF ( JSV >= NSV_FFBEG .AND. JSV <= NSV_FFEND ) THEN
+            TZFIELD%CMNHNAME  = 'LBY_FF'
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = 'LBY_FF'
+            IF ( JSV == NSV_FFBEG .AND. NSV_FF > 1 ) THEN
+              CMNHMSG(1) = 'reading older file (<5.5.1) for LBY_FF scalar variables'
+              CMNHMSG(2) = 'they are bugged: there should be several LBY_FF variables'
+              CMNHMSG(3) = 'but they were all written with the same name ''LBY_FF'''
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB' )
             END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
 #endif
-! Conditional sampling variables
-IF (NSV_CSEND>=NSV_CSBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CSBEG, NSV_CSEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_CS'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Conditional sampling LBXSVM   will be initialized to 0'
-              ELSE
-                PLBXSVM(:,:,:,JSV)=0.
-                WRITE(ILUOUT,*) 'Conditional sampling PLBXSVM   will be initialized to 0'
-              ENDIF
+          ELSE IF ( JSV >= NSV_CSBEG .AND. JSV <= NSV_CSEND ) THEN
+            TZFIELD%CMNHNAME  = 'LBY_CS'
+            TZFIELD%CSTDNAME  = ''
+            TZFIELD%CLONGNAME = 'LBY_CS'
+            IF ( JSV == NSV_CSBEG .AND. NSV_CS > 1 ) THEN
+              CMNHMSG(1) = 'reading older file (<5.5.1) for LBY_CS scalar variables'
+              CMNHMSG(2) = 'they are bugged: there should be several LBY_CS variables'
+              CMNHMSG(3) = 'but they were all written with the same name ''LBY_CS'''
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB' )
             END IF
           END IF
         END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_CS'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Conditional sampling PLBYSVM   will be initialized to 0'
-              ELSE
-                PLBYSVM(:,:,:,JSV)=0.
-                WRITE(ILUOUT,*) 'Conditional sampling PLBYSVM   will be initialized to 0'
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Linox scalar variables
-IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_LNOXBEG, NSV_LNOXEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_LINOX'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Linox PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize linox PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_LINOX'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'Linox PLBYSVM   will be initialized to 0'
-              ELSE
-!calla bortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize linox PLBYSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-! Lagrangian variables
-IF (NSV_LGEND>=NSV_LGBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'm'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_LGBEG, NSV_LGEND
-    SELECT CASE(HGETSVM(JSV))
-      CASE ('READ')
-        IF ( KSIZELBXSV_ll /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DX,IRIMX,PLBXSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBXSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBXSVMM)) THEN
-                PLBXSVM(:,:,:,JSV)=PLBXSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'lagrangian PLBXSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize lagrangian PLBXSVM')
-              ENDIF
-            END IF
-          END IF
-        END IF
-        !
-        IF (KSIZELBYSV_ll  /= 0 ) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_read_lb(TPINIFILE,TZFIELD,IL3DY,IRIMY,PLBYSVM(:,:,:,JSV),IRESP)
-          IF ( SIZE(PLBYSVM,1) /= 0 ) THEN
-            IF (IRESP/=0) THEN
-              IF (PRESENT(PLBYSVMM)) THEN
-                PLBYSVM(:,:,:,JSV)=PLBYSVMM(:,:,:,JSV)
-                WRITE(ILUOUT,*) 'lagrangian PLBYSVM   will be initialized to 0'
-              ELSE
-!callabortstop
-                CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_LB','problem to initialize lagrangian PLBYSVM')
-              ENDIF
+        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 )' ) 'X_2_Z_', 'LBYSVM', JSV
+        TZFIELD%CLBTYPE     = 'LBY'
+
+        CALL IO_Field_read_lb( TPINIFILE, TZFIELD, IL3DY, IRIMY, PLBYSVM(:,:,:,JSV), IRESP )
+
+        IF ( IRESP /= 0 ) THEN
+          IF ( PRESENT( PLBYSVMM ) ) THEN
+            PLBYSVM(:,:,:,JSV) = PLBYSVMM(:,:,:,JSV)
+            CALL PRINT_MSG( NVERB_INFO, 'IO', 'INI_LB', 'PLBYSVM is initialized to PLBYSVMM for ' // TRIM( YMNHNAME_BASE ) )
+          ELSE
+            IF ( GOLDFILEFORMAT .AND. JSV >= NSV_LIMA_BEG .AND. JSV <= NSV_LIMA_END ) THEN
+              !In pre 5.5.1 files, only CCN_FREE and IFN_FREE LIMA scalar variables were available (for LIMA scalar variables)
+              IF ( JSV >= NSV_LIMA_CCN_FREE .AND. JSV <= (NSV_LIMA_CCN_FREE+NMOD_CCN-1) ) THEN
+                CALL PRINT_MSG( NVERB_FATAL, 'IO', 'INI_LB', 'problem to initialize LIMA CCN_FREE PLBYSVM' )
+              ELSE IF ( JSV >= NSV_LIMA_IFN_FREE .AND. JSV <= (NSV_LIMA_IFN_FREE+NMOD_IFN-1) ) THEN
+                CALL PRINT_MSG( NVERB_FATAL, 'IO', 'INI_LB', 'problem to initialize LIMA IFN_FREE PLBYSVM' )
+              ELSE
+                PLBYSVM(:,:,:,JSV) = 0.
+                CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB', 'PLBYSVM is initialized to 0 for ' // TRIM( YMNHNAME_BASE ) )
+              END IF
+            ELSE IF ( ( JSV >= NSV_PPBEG  .AND. JSV <= NSV_PPEND ) .OR. &
+#ifdef MNH_FOREFIRE
+                      ( JSV >= NSV_FFBEG  .AND. JSV <= NSV_FFEND ) .OR. &
+#endif
+                      ( JSV >= NSV_CSBEG  .AND. JSV <= NSV_CSEND ) .OR. &
+                      ( JSV >= NSV_SNWBEG .AND. JSV <= NSV_SNWEND .AND. GOLDFILEFORMAT ) ) THEN !Snow was not written in <5.5.1
+              PLBYSVM(:,:,:,JSV) = 0.
+              CALL PRINT_MSG( NVERB_WARNING, 'IO', 'INI_LB', 'PLBYSVM is initialized to 0 for ' // TRIM( YMNHNAME_BASE ) )
+            ELSE
+              CALL PRINT_MSG( NVERB_FATAL, 'IO', 'INI_LB', 'problem to initialize PLBYSVM for ' // TRIM( YMNHNAME_BASE ) )
             END IF
           END IF
         END IF
-      !
-      CASE('INIT')
-        IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
-        IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
+      END IF
+
+    CASE( 'INIT' )
+      IF ( SIZE(PLBXSVM,1) /= 0 ) PLBXSVM(:,:,:,JSV) = 0.
+      IF ( SIZE(PLBYSVM,1) /= 0 ) PLBYSVM(:,:,:,JSV) = 0.
+  END SELECT
+END DO
 !-------------------------------------------------------------------------------
 !
 !*       3.    COMPUTE THE LB SOURCES
@@ -1645,9 +712,10 @@ ENDIF
 !
 CONTAINS
 
-  SUBROUTINE OLD_CMNHNAME_GENERATE_INTERN( YMNHNAME )
+  SUBROUTINE OLD_CMNHNAME_GENERATE_INTERN( YMNHNAME, YLONGNAME )
 
     CHARACTER(LEN=*), INTENT(INOUT) :: YMNHNAME
+    CHARACTER(LEN=*), INTENT(INOUT) :: YLONGNAME
 
     INTEGER :: IPOS
     INTEGER :: JI
@@ -1666,6 +734,8 @@ CONTAINS
       YMNHNAME(JI:JI) = ' '
     END DO
 
+    YLONGNAME = TRIM( YMNHNAME )
+
   END SUBROUTINE OLD_CMNHNAME_GENERATE_INTERN
 
 END SUBROUTINE INI_LB
diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 21642620971a94e1c95256cb2739ce03f1e31b20..2e9702b85ea4cbd506b6aa0cf522c9376c3b1f9c 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -36,8 +36,6 @@ END MODULE MODI_INI_PROG_VAR
 !!    EXTERNAL
 !!    --------
 !!
-!!      Routine PGDFILTER      : to filter a 2D field.
-!!      Module  MODI_PGDFILTER
 !!
 !!    IMPLICIT ARGUMENTS
 !!    ------------------
@@ -99,42 +97,39 @@ END MODULE MODI_INI_PROG_VAR
 !  P. Wautelet 09/03/2021: move some chemistry initializations to ini_nsv
 !  P. Wautelet 10/03/2021: move scalar variable name initializations to ini_nsv
 !  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
 !
-USE MODD_CH_AEROSOL
-USE MODD_CH_M9_n,          ONLY: NEQ, CNAMES
-USE MODD_CH_MNHC_n,        ONLY: LUSECHEM, LUSECHAQ, LUSECHIC, LCH_PH 
-USE MODD_CONF
-USE MODD_CONF_n
-USE MODD_DIM_n
-USE MODD_DUST
-USE MODD_DYN_n
-use modd_field,            only: TFIELDMETADATA, TYPEREAL
-USE MODD_FIELD_n
+USE MODD_CH_M9_n,          ONLY: NEQ
+USE MODD_CH_MNHC_n,        ONLY: LUSECHEM
+USE MODD_CONF,             ONLY: NVERB
+USE MODD_CONF_n,           ONLY: NRR
+USE MODD_DIM_n,            ONLY: NIMAX_ll, NJMAX_ll
+USE MODD_DYN_n,            ONLY: LHORELAX_SV, LHORELAX_TKE, NRIMX, NRIMY, &
+                                 NSIZELBXSV_ll, NSIZELBYSV_ll, NSIZELBXTKE_ll, NSIZELBYTKE_ll
+use modd_field,            only: TFIELDMETADATA
+USE MODD_FIELD_n,          ONLY: XRT, XSIGS, XSRCT, XSVT, XTKET, XWT
 USE MODD_IO,               ONLY: TFILEDATA
-USE MODD_LSFIELD_n
-USE MODD_LUNIT
+USE MODD_LSFIELD_n,        ONLY: XLBXSVM, XLBYSVM, XLBXTKEM, XLBYTKEM
 USE MODD_LUNIT_n,          ONLY: TLUOUT
-USE MODD_NSV
-USE MODD_PARAM_n
-USE MODD_PARAMETERS
-USE MODD_SALT
-USE MODD_TURB_n
+USE MODD_NSV,              ONLY: NSV, NSV_AERBEG, NSV_AEREND, NSV_AERDEPBEG, NSV_AERDEPEND, NSV_CHEMBEG, NSV_CHEMEND, &
+                                 NSV_DSTBEG, NSV_DSTEND, NSV_DSTDEPBEG, NSV_DSTDEPEND, NSV_SLTBEG, NSV_SLTEND,        &
+                                 NSV_SLTDEPBEG, NSV_SLTDEPEND, TSVLIST
+USE MODD_PARAMETERS,       ONLY: JPHEXT, JPVEXT
+USE MODD_PARAM_n,          ONLY: CTURB
 !
 USE MODE_IO_FIELD_READ,    only: IO_Field_read
 USE MODE_IO_FILE,          ONLY: IO_File_close, IO_File_open
 USE MODE_IO_MANAGE_STRUCT, ONLY: IO_File_add2list
-USE MODE_MODELN_HANDLER
+USE MODE_MODELN_HANDLER,   ONLY: GET_CURRENT_MODEL_INDEX
 USE MODE_MSG
-USE MODE_POS
+USE MODE_POS,              ONLY: POSNAM
 use mode_tools_ll,         only: GET_INDICE_ll
 !
-USE MODI_PGDFILTER
-!
 USE MODN_CH_ORILAM
 USE MODN_DUST
 USE MODN_SALT
@@ -213,7 +208,6 @@ END IF
 !*       3.    PASSIVE SCALAR
 !              --------------
 !
-ALLOCATE(XSVT(0,0,0,0))
 IF(PRESENT(HCHEMFILE)) THEN
   WRITE(ILUOUT,*) 'Routine INI_PROG_VAR: CHEMical species read in ',TRIM(HCHEMFILE)
   ! Read dimensions in chem file and checks with output file
@@ -266,25 +260,18 @@ IF(PRESENT(HCHEMFILE)) THEN
     LSLTPRES=.FALSE.
     CALL POSNAM(ILUDES,'NAM_SALT',GFOUND,ILUOUT)
     IF (GFOUND) READ(UNIT=ILUDES,NML=NAM_SALT)
-  ! initialise NSV_* variables
   ENDIF
+
+  ! initialise NSV_* variables
   CALL INI_NSV(IMI)
   ALLOCATE(XSVT(IIU,IJU,IKU,NSV))
-  
-  ! Read scalars in chem file   
+
+  ! Read scalars in chem file
   IF (.NOT.LDUST) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppp'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_CHEMBEG,NSV_CHEMEND
-      TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+    DO JSV = NSV_CHEMBEG, NSV_CHEMEND
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+      TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
       CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),' NOT FOUND IN THE CHEM FILE ',HCHEMFILE
@@ -298,18 +285,10 @@ IF(PRESENT(HCHEMFILE)) THEN
   END IF
 
   IF (LORILAM) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppp'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
     DO JSV = NSV_AERBEG,NSV_AEREND
-      TZFIELD%CMNHNAME   = TRIM(CAERONAMES(JSV-NSV_AERBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+      TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
       CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
@@ -318,18 +297,10 @@ IF(PRESENT(HCHEMFILE)) THEN
     END DO ! JSV
     !
     IF (LDEPOS_AER(IMI)) THEN   
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
       DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-        TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        TZFIELD = TSVLIST(JSV)
+        TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+        TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
         CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
@@ -340,18 +311,10 @@ IF(PRESENT(HCHEMFILE)) THEN
   END IF ! lorilam
   
   IF (LDUST) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppp'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
     DO JSV = NSV_DSTBEG, NSV_DSTEND
-      TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+      TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
       CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
@@ -359,18 +322,10 @@ IF(PRESENT(HCHEMFILE)) THEN
     END DO ! JSV
 
     IF (LDEPOS_DST(IMI)) THEN   
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
       DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-        TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        TZFIELD = TSVLIST(JSV)
+        TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+        TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
         CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
@@ -381,18 +336,10 @@ IF(PRESENT(HCHEMFILE)) THEN
   END IF  ! LDUST
 
   IF (LSALT) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppp'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
     DO JSV = NSV_SLTBEG, NSV_SLTEND
-      TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      TZFIELD = TSVLIST(JSV)
+      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+      TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
       CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
       IF (IRESP/=0) THEN
         CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
@@ -400,18 +347,10 @@ IF(PRESENT(HCHEMFILE)) THEN
     END DO ! JSV
     !
     IF (LDEPOS_SLT(IMI)) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
       DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-        TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+        TZFIELD = TSVLIST(JSV)
+        TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+        TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
         CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
         IF (IRESP/=0) THEN
           WRITE(ILUOUT,*) TRIM(TZFIELD%CMNHNAME),'NOT FOUND IN THE CHEM FILE ',HCHEMFILE
diff --git a/src/MNH/paspol.f90 b/src/MNH/paspol.f90
index 7287cb0b4124a86bea399abaf67b9db2bc81f8fb..af5da06658860e8f4f327f6f0e2052e4821546ce 100644
--- a/src/MNH/paspol.f90
+++ b/src/MNH/paspol.f90
@@ -579,7 +579,7 @@ END DO
 !*	3.4 Ecriture conditionnelle.
 !
 IF ( tpfile%lopened ) THEN
-  TZFIELD = TFIELDMetaDATA(            &
+  TZFIELD = TFIELDMETADATA(            &
     CMNHNAME   = 'generic for paspol', & !Temporary name to ease identification
     CSTDNAME   = '',                   &
     CUNITS     = 'm-3',                &
diff --git a/src/MNH/read_cams_data_netcdf_case.f90 b/src/MNH/read_cams_data_netcdf_case.f90
index 89ab3518c9bb0b4ad0152fdc980b49cd1d630355..a4023d0917c837950a915e822d7b6ddcdc99c86e 100644
--- a/src/MNH/read_cams_data_netcdf_case.f90
+++ b/src/MNH/read_cams_data_netcdf_case.f90
@@ -88,8 +88,8 @@ END MODULE MODI_READ_CAMS_DATA_NETCDF_CASE
 !------------
 !
 USE MODD_CH_AEROSOL, ONLY: CORGANIC, NCARB, NSOA, NSP, LORILAM,&
-                           JPMODE, LVARSIGI, LVARSIGJ,CAERONAMES
-USE MODD_CH_M9_n,    ONLY: NEQ ,  CNAMES
+                           JPMODE, LVARSIGI, LVARSIGJ
+USE MODD_CH_M9_n,    ONLY: NEQ
 USE MODD_CH_MNHC_n,  ONLY: LUSECHEM,LUSECHAQ,LUSECHIC,LCH_PH
 USE MODD_CONF
 USE MODD_CONF_n
diff --git a/src/MNH/read_field.f90 b/src/MNH/read_field.f90
index 4f40512544ce67621915080d64b8d49cf89b1945..34a20049a6758d3c453f7d4d41355e1f06aadc64 100644
--- a/src/MNH/read_field.f90
+++ b/src/MNH/read_field.f90
@@ -247,56 +247,48 @@ END MODULE MODI_READ_FIELD
 !!          C.Lac        10/16 CEN4TH with RKC4 + Correction on RK loop
 !!                   09/2017 Q.Rodier add LTEND_UV_FRC
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!          V. Vionnet  07/17    add blowing snow scheme
-!!          P. Wautelet 01/2019  corrected intent of PDUM,PDVM,PDWM (OUT->INOUT)
+!  V. Vionnet       07/17:   add blowing snow scheme
+!  P. Wautelet    01/2019:  corrected intent of PDUM,PDVM,PDWM (OUT->INOUT)
 !  P. Wautelet 13/02/2019: removed PPABSM and PTSTEP dummy arguments (bugfix: PPABSM was intent(OUT))
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  S. Bielli      02/2019:  Sea salt : significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
 !  M. Leriche  10/06/2019: in restart case read all immersion modes for LIMA
-!! B. Vie         06/2020: Add prognostic supersaturation for LIMA
-!! F. Auguste  02/2021: add fields necessary for IBM
-!! T. Nagel    02/2021: add fields necessary for turbulence recycling
-!! J.L. Redelsperger 03/2021:  add necessary variables for Ocean LES case
+!  B. Vie         06/2020: Add prognostic supersaturation for LIMA
+!  F. Auguste     02/2021: add fields necessary for IBM
+!  T. Nagel       02/2021: add fields necessary for turbulence recycling
+!  JL. Redelsperger 03/2021:  add necessary variables for Ocean LES case
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !!-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_2D_FRC
-USE MODD_ADV_n
-USE MODD_BLOWSNOW
-USE MODD_BLOWSNOW_n
-USE MODD_CH_AEROSOL
-USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
-USE MODD_CONF
-USE MODD_CONF_n
-USE MODD_CST
-USE MODD_CTURB
-USE MODD_DUST
+USE MODD_2D_FRC,          ONLY: L2D_ADV_FRC, L2D_REL_FRC
+USE MODD_ADV_n,           ONLY: CTEMP_SCHEME, LSPLIT_CFL
+USE MODD_BLOWSNOW_n,      ONLY: XSNWCANO
+USE MODD_CONF,            ONLY: CCONF, CPROGRAM, L1D, LFORCING, NVERB
+USE MODD_CONF_n,          ONLY: IDX_RVT, IDX_RCT, IDX_RRT, IDX_RIT, IDX_RST, IDX_RGT, IDX_RHT
+USE MODD_CST,             ONLY: XALPW, XBETAW, XCPD, XGAMW, XMD, XMV, XP00, XRD
+USE MODD_CTURB,           ONLY: XTKEMIN
 USE MODD_DYN_n,           ONLY: LOCEAN
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-use modd_field,           only: tfieldmetadata, tfieldlist, TYPEDATE, TYPEREAL,TYPELOG,TYPEINT
+use modd_field,           only: tfieldmetadata, tfieldlist, TYPEDATE, TYPEREAL, TYPELOG, TYPEINT
 USE MODD_FIELD_n,         only: XZWS_DEFAULT
-#ifdef MNH_FOREFIRE
-USE MODD_FOREFIRE
-#endif
 USE MODD_IBM_PARAM_n,     ONLY: LIBM
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LATZ_EDFLX
-USE MODD_LG,              ONLY: CLGNAMES
+USE MODD_LATZ_EDFLX,      ONLY: LTH_FLX, LUV_FLX
 USE MODD_LUNIT_N,         ONLY: TLUOUT
-USE MODD_NSV
-USE MODD_OCEANH
+USE MODD_NSV,             ONLY: NSV, NSV_C2R2BEG, NSV_C2R2END, NSV_CSBEG, NSV_CSEND, &
+#ifdef MNH_FOREFIRE
+                                NSV_FFBEG, NSV_FFEND,                                &
+#endif
+                                NSV_PPBEG, NSV_PPEND, NSV_SNW, NSV_USER, TSVLIST
+USE MODD_OCEANH,          ONLY: NFRCLT, NINFRT, XSSOLA_T, XSSUFL_T, XSSTFL_T, XSSVFL_T
 USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
-!
+USE MODD_PARAMETERS,      ONLY: XUNDEF
 USE MODD_PARAM_n,         ONLY: CSCONV
-USE MODD_PASPOL
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_RECYCL_PARAM_n
+USE MODD_RECYCL_PARAM_n,  ONLY: LRECYCLE, LRECYCLN, LRECYCLS, LRECYCLW, NR_COUNT
 USE MODD_REF,             ONLY: LCOUPLES
-USE MODD_SALT
-USE MODD_TIME ! for type DATE_TIME
+USE MODD_TIME,            ONLY: DATE_TIME
 !
 use mode_field,           only: Find_field_id_from_mnhname
 USE MODE_IO_FIELD_READ,   only: IO_Field_read
@@ -418,7 +410,9 @@ INTEGER                      :: IIUP,IJUP    ! size  of working window arrays
 INTEGER                      :: JT           ! loop index
 LOGICAL                      :: GLSOURCE     ! switch for the source term (for ini_ls and ini_lb)
 LOGICAL                      :: ZLRECYCL     ! switch if turbulence recycling is activated
+LOGICAL                      :: GOLDFILEFORMAT
 CHARACTER(LEN=3)             :: YFRC         ! To mark the different forcing dates
+CHARACTER(LEN=3)             :: YNUM3
 CHARACTER(LEN=15)            :: YVAL
 REAL, DIMENSION(KIU,KJU,KKU) :: ZWORK        ! to compute supersaturation
 TYPE(TFIELDMETADATA)         :: TZFIELD
@@ -431,6 +425,10 @@ TYPE(TFIELDMETADATA)         :: TZFIELD
 GLSOURCE=.FALSE.
 ZWORK = 0.0
 !
+!If TPINIFILE file was written with a MesoNH version < 5.5.1, some variables had different names or were not available
+GOLDFILEFORMAT = (        TPINIFILE%NMNHVERSION(1) < 5                                                                            &
+                   .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) < 5 )                                      &
+                   .OR. ( TPINIFILE%NMNHVERSION(1) == 5 .AND. TPINIFILE%NMNHVERSION(2) == 5  .AND. TPINIFILE%NMNHVERSION(3) < 1 ) )
 !-------------------------------------------------------------------------------
 !
 !*       2.    READ PROGNOSTIC VARIABLES
@@ -811,477 +809,83 @@ ENDIF
 !
 ISV= SIZE(PSVT,4)
 !
-IF (NSV_USER>0) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = 1, NSV_USER              ! initialize according to the get indicators
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
+DO JSV = 1, NSV              ! initialize according to the get indicators
+  SELECT CASE( HGETSVT(JSV) )
+    CASE ('READ')
+      TZFIELD = TSVLIST(JSV)
+
+      IF ( GOLDFILEFORMAT .AND.                               &
+           ( ( JSV >= 1         .AND. JSV <= NSV_USER  ) .OR. &
+             ( JSV >= NSV_PPBEG .AND. JSV <= NSV_PPEND ) .OR. &
+#ifdef MNH_FOREFIRE
+             ( JSV >= NSV_FFBEG .AND. JSV <= NSV_FFEND ) .OR. &
+#endif
+             ( JSV >= NSV_CSBEG .AND. JSV <= NSV_CSEND ) )    ) THEN
+        !Some variables were written with an other name in MesoNH < 5.5.1
         WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CSTDNAME   = ''
         TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'm-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_C2R2BEG,NSV_C2R2END
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
+      ELSE
+        TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+        TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+      END IF
+
+      CALL IO_Field_read( TPINIFILE, TZFIELD, PSVT(:,:,:,JSV), IRESP )
+
+      IF ( IRESP /= 0 ) THEN
+        CALL PRINT_MSG( NVERB_WARNING, 'IO', 'READ_FIELD', 'PSVT set to 0 for ' // TRIM( TZFIELD%CMNHNAME ) )
         PSVT(:,:,:,JSV) = 0.
-        IF (LSUPSAT .AND. (HGETRVT == 'READ') ) THEN
+      END IF
+
+    CASE ('INIT')
+      PSVT(:,:,:,JSV) = 0.
+
+      IF ( JSV == NSV_C2R2END ) THEN
+        IF ( LSUPSAT .AND. (HGETRVT == 'READ') ) THEN
           ZWORK(:,:,:) = (PPABST(:,:,:)/XP00 )**(XRD/XCPD)
           ZWORK(:,:,:) = PTHT(:,:,:)*ZWORK(:,:,:)
-          ZWORK(:,:,:) = EXP(XALPW-XBETAW/ZWORK(:,:,:)-XGAMW*ALOG(ZWORK(:,:,:)))
+          ZWORK(:,:,:) = EXP(XALPW-XBETAW/ZWORK(:,:,:)-XGAMW*LOG(ZWORK(:,:,:)))
           !rvsat
           ZWORK(:,:,:) = (XMV / XMD)*ZWORK(:,:,:)/(PPABST(:,:,:)-ZWORK(:,:,:))
-          ZWORK(:,:,:) = PRT(:,:,:,1)/ZWORK(:,:,:)
+          ZWORK(:,:,:) = PRT(:,:,:,IDX_RVT)/ZWORK(:,:,:)
           PSVT(:,:,:,NSV_C2R2END ) = ZWORK(:,:,:)
         END IF
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'm-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_C1R3BEG,NSV_C1R3END
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-! LIMA variables
-!
-DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
-  SELECT CASE(HGETSVT(JSV))
-  CASE ('READ')
-    TZFIELD = TSVLIST(JSV)
-    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME ) // 'T'
-    TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
-    CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-  CASE ('INIT')
-    PSVT(:,:,:,JSV) = 0.
+      END IF
+
   END SELECT
 END DO
-!
-IF (NSV_ELECEND>=NSV_ELECBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_ELECBEG,NSV_ELECEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN
-          TZFIELD%CUNITS     = 'C m-3'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        ELSE
-          TZFIELD%CUNITS     = 'm-3'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
-        END IF
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_CHGSEND>=NSV_CHGSBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppbv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHGSBEG,NSV_CHGSEND
-    CNAMES(JSV-NSV_CHGSBEG+1) = UPCASE(CNAMES(JSV-NSV_CHGSBEG+1))
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHGSBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHIM',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_CHACEND>=NSV_CHACBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  !PW TODO: check units
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHACBEG,NSV_CHACEND
-    CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1) = UPCASE(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3,A4)')'X_Y_Z_','CHAQ',JSV,' (M)'
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-!***ATTENTION: BUG ? field written with a M suffix, read with a T suffix
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_CHICEND>=NSV_CHICBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHICBEG,NSV_CHICEND
-    CICNAMES(JSV-NSV_CHICBEG+1) = UPCASE(CICNAMES(JSV-NSV_CHICBEG+1))
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_SLTEND>=NSV_SLTBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_SLTBEG,NSV_SLTEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_SLTDEPEND>=NSV_SLTDEPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_DSTEND>=NSV_DSTBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_DSTBEG,NSV_DSTEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_DSTDEPEND>=NSV_DSTDEPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_AEREND>=NSV_AERBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_AERBEG,NSV_AEREND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_AERDEPEND>=NSV_AERDEPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_LGEND>=NSV_LGBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'm'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_LGBEG,NSV_LGEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_PPEND>=NSV_PPBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_PPBEG,NSV_PPEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CUNITS     = 'kg kg-1'
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
-        IF (IRESP/=0) THEN
-          PSVT(:,:,:,JSV) = 0.
-        END IF
-        !
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
-        TZFIELD%CUNITS     = 'm-3'
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PATC(:,:,:,JSV-NSV_PPBEG+1),IRESP)
-        IF (IRESP/=0) THEN
-          PATC(:,:,:,JSV-NSV_PPBEG+1) = 0.
-        ENDIF
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
+
+DO JSV = NSV_PPBEG, NSV_PPEND
+  SELECT CASE( HGETSVT(JSV) )
+    CASE ('READ')
+      WRITE( YNUM3, '( I3.3 )' ) JSV
+
+      TZFIELD = TFIELDMETADATA(            &
+        CMNHNAME   = 'ATC' // YNUM3,       &
+        CSTDNAME   = '',                   &
+        CLONGNAME  = 'ATC' // YNUM3,       &
+        CCOMMENT   = 'X_Y_Z_ATC' // YNUM3, &
+        CUNITS     = 'm-3',                &
+        CDIR       = 'XY',                 &
+        NGRID      = 1,                    &
+        NTYPE      = TYPEREAL,             &
+        NDIMS      = 3,                    &
+        LTIMEDEP   = .TRUE.                )
+
+      CALL IO_Field_read( TPINIFILE, TZFIELD, PATC(:,:,:,JSV-NSV_PPBEG+1), IRESP )
+
+      IF ( IRESP /= 0 ) THEN
         PATC(:,:,:,JSV-NSV_PPBEG+1) = 0.
-    END SELECT
-  END DO
-END IF
-!
-#ifdef MNH_FOREFIRE
-IF (NSV_FFEND>=NSV_FFBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_FFBEG,NSV_FFEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
-        IF (IRESP /= 0) THEN
-          PSVT(:,:,:,JSV) = 0.
-        END IF
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-#endif
-!
-IF (NSV_CSEND>=NSV_CSBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CSBEG,NSV_CSEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV),IRESP)
-        IF (IRESP /= 0) THEN
-          PSVT(:,:,:,JSV) = 0.
-        END IF
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppb'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = 'LINOXT'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-!
-IF (NSV_SNWEND>=NSV_SNWBEG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  DO JSV = NSV_SNWBEG,NSV_SNWEND
-    SELECT CASE(HGETSVT(JSV))
-      CASE ('READ')
-        TZFIELD%CMNHNAME   = TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,PSVT(:,:,:,JSV))
-      CASE ('INIT')
-        PSVT(:,:,:,JSV) = 0.
-    END SELECT
-  END DO
-END IF
-IF (NSV_SNW>=1) THEN
+      ENDIF
+
+    CASE ('INIT')
+      PATC(:,:,:,JSV-NSV_PPBEG+1) = 0.
+
+  END SELECT
+END DO
+
+IF ( NSV_SNW >= 1 ) THEN
   TZFIELD%CSTDNAME   = ''
   TZFIELD%CUNITS     = 'kg kg-1'
   TZFIELD%CDIR       = 'XY'
@@ -1289,20 +893,18 @@ IF (NSV_SNW>=1) THEN
   TZFIELD%NTYPE      = TYPEREAL
   TZFIELD%NDIMS      = 2
   TZFIELD%LTIMEDEP   = .TRUE.
-  DO JSV = 1,NSV_SNW
+  DO JSV = 1, NSV_SNW
     SELECT CASE(HGETSVT(JSV))
       CASE ('READ')
-        WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV      
+        WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV
         TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
         WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)') 'X_Y_Z_','SNOWCANO',JSV
-        CALL IO_Field_read(TPINIFILE,TZFIELD,XSNWCANO(:,:,JSV))
+        CALL IO_Field_read( TPINIFILE, TZFIELD, XSNWCANO(:,:,JSV) )
       CASE ('INIT')
         XSNWCANO(:,:,JSV) = 0.
     END SELECT
   END DO
-
 END IF
-
 !
 IF (CCONF == 'RESTA') THEN
   IF (CTEMP_SCHEME/='LEFR') THEN
diff --git a/src/MNH/spawn_field2.f90 b/src/MNH/spawn_field2.f90
index a36f754677fe08f348be9d5624852f6352805271..993f0ebd32726023a91b4f504902fe3b3a08c265 100644
--- a/src/MNH/spawn_field2.f90
+++ b/src/MNH/spawn_field2.f90
@@ -152,39 +152,31 @@ END MODULE MODI_SPAWN_FIELD2
 !!                   29/04/2016 (J.Escobar) bug in use of ZSVT_C in SET_LSFIELD_1WAY_ll        
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!      Modification 05/03/2018 (J.Escobar) bypass gridnesting special case KD(X/Y)RATIO == 1 not parallelized
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  J. Escobar  05/03/2018: bypass gridnesting special case KD(X/Y)RATIO == 1 not parallelized
+!  S. Bielli S.   02/2019: Sea salt: significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 14/03/2019: correct ZWS when variable not present in file
-!!      B. Vie          06/2020 Add prognostic supersaturation for LIMA
+!  B. Vie         06/2020: Add prognostic supersaturation for LIMA
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
 !               ------------
 !
-USE MODD_2D_FRC
-USE MODD_ADVFRC_n
-USE MODD_BIKHARDT_n
-USE MODD_CH_AEROSOL,      ONLY: CAERONAMES
-USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
-USE MODD_CONF
-USE MODD_CST
+USE MODD_2D_FRC,          ONLY: L2D_ADV_FRC, L2D_REL_FRC
+USE MODD_ADVFRC_n,        ONLY: ADVFRC_MODEL
+USE MODD_BIKHARDT_N,      ONLY: XBFX1, XBFX2, XBFX3, XBFX4, XBFY1, XBFY2, XBFY3, XBFY4, &
+                                XBMX1, XBMX2, XBMX3, XBMX4, XBMY1, XBMY2, XBMY3, XBMY4
+USE MODD_CST,             ONLY: XCPD, XP00, XRD, XRV
 USE MODD_CONF_n,          ONLY: CONF_MODEL
-USE MODD_DUST,            ONLY: CDUSTNAMES
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 use modd_field,           only: tfieldmetadata, TYPEREAL
 USE MODD_FIELD_n,         ONLY: FIELD_MODEL, XZWS_DEFAULT
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LATZ_EDFLX
+USE MODD_LATZ_EDFLX,      ONLY: LTH_FLX, LUV_FLX
 USE MODD_LBC_n,           ONLY: LBC_MODEL
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_LUNIT_n,         ONLY: LUNIT_MODEL,TLUOUT
-USE MODD_NSV
-USE MODD_REF_n,           ONLY: REF_MODEL
-USE MODD_PARAMETERS
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_RELFRC_n 
-USE MODD_SALT,            ONLY: CSALTNAMES
+USE MODD_LUNIT_n,         ONLY: TLUOUT
+USE MODD_NSV,             ONLY: NSV, NSV_CSBEG, NSV_CSEND, NSV_PPBEG, NSV_PPEND, NSV_USER, TSVLIST
+USE MODD_RELFRC_n,        ONLY: RELFRC_MODEL
 USE MODD_SPAWN
 !
 use mode_bikhardt
@@ -194,7 +186,6 @@ USE MODE_MSG
 USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
 USE MODE_THERMO
-USE MODE_TOOLS,           ONLY: UPCASE
 !
 IMPLICIT NONE
 !
@@ -265,6 +256,7 @@ INTEGER  :: IMI, JI,KI
 INTEGER  :: IDIMX_C, IDIMY_C
 INTEGER  :: IINFO_ll
 !$
+LOGICAL :: GOLDFILEFORMAT
 ! Arrays for reading fields of input SON 1 file
 REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZWORK3D
 REAL, DIMENSION(:,:),   ALLOCATABLE   :: ZWORK2D
@@ -273,6 +265,7 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE   :: ZPABST1,ZHUT1
 REAL, DIMENSION(:,:,:,:), ALLOCATABLE :: ZRT1
 LOGICAL :: GUSERV
 !
+CHARACTER(LEN=3)  :: YNUM3
 CHARACTER(LEN=15) :: YVAL
 TYPE(TFIELDMETADATA) :: TZFIELD
 !
@@ -284,6 +277,13 @@ TYPE(TFIELDMETADATA) :: TZFIELD
 IMI = GET_CURRENT_MODEL_INDEX()
 CALL GOTO_MODEL(2)
 CALL GO_TOMODEL_ll(2, IINFO_ll)
+
+IF (PRESENT(TPSONFILE)) THEN
+  !If TPSONFILE file was written with a MesoNH version < 5.5.1, some variables had different names or were not available
+  GOLDFILEFORMAT = (      TPSONFILE%NMNHVERSION(1) < 5                                                                            &
+                   .OR. ( TPSONFILE%NMNHVERSION(1) == 5 .AND. TPSONFILE%NMNHVERSION(2) < 5 )                                      &
+                   .OR. ( TPSONFILE%NMNHVERSION(1) == 5 .AND. TPSONFILE%NMNHVERSION(2) == 5  .AND. TPSONFILE%NMNHVERSION(3) < 1 ) )
+END IF
 !
 !*       1.0  recovers logical unit number of output listing
 !
@@ -834,327 +834,51 @@ IF (PRESENT(TPSONFILE)) THEN
   !
   ! Scalar variables
   !
-  IF (NSV /= 0) THEN
-    ! User scalar variables
-    IF (NSV_USER>0) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = 1, NSV_USER      ! Users Scalar Variables
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! microphysical C2R2 scheme scalar variables
-    IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'm-3'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_C2R2BEG,NSV_C2R2END
-        TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! LIMA variables
-    !
-    DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
-      TZFIELD = TSVLIST(JSV)
-      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME ) // 'T'
-      TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
-      CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-      IF ( IRESP == 0 ) PSVT(KIB2:KIE2, KJB2:KJE2, :, JSV) = ZWORK3D(KIB1:KIE1, KJB1:KJE1, :)
-    END DO
-    !
-    ! ELEC Scalar Variables
-    !
-    IF (NSV_ELECEND>=NSV_ELECBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_ELECBEG,NSV_ELECEND
-        TZFIELD%CMNHNAME   = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN
-          TZFIELD%CUNITS   = 'C m-3'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        ELSE
-          TZFIELD%CUNITS   = 'm-3'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
-        END IF
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! Chemical Scalar Variables
-    !
-    IF (NSV_CHEMEND>=NSV_CHEMBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_CHEMBEG,NSV_CHEMEND
-        TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! Ice phase chemical Scalar Variables
-    !
-    IF (NSV_CHICEND>=NSV_CHICBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_CHICBEG,NSV_CHICEND
-        CICNAMES(JSV-NSV_CHICBEG+1) = UPCASE(CICNAMES(JSV-NSV_CHICBEG+1))
-        TZFIELD%CMNHNAME   = TRIM(CICNAMES(JSV-NSV_CHICBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! Orilam Scalar Variables
-    !
-    IF (NSV_AEREND>=NSV_AERBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_AERBEG,NSV_AEREND
-        TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! Dust Scalar Variables
-    !
-    IF (NSV_DSTEND>=NSV_DSTBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_DSTBEG,NSV_DSTEND
-        TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! Sea Salt Scalar Variables
-    !
-    IF (NSV_SLTEND>=NSV_SLTBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_SLTBEG,NSV_SLTEND
-        TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! LG Scalar Variables
-    !
-    IF (NSV_LGEND>=NSV_LGBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'm'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_LGBEG,NSV_LGEND
-        TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! LNOx Scalar Variables
-    !
-!PW:TODO/bug1?: LINOX or LINOXT?
-!PW:TODO/bug2?: Same name of variable in a loop!
-    IF (NSV_LNOXEND>=NSV_LNOXBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv' !PW: TODO: not sure (depends if LINOX or LINOXT)
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-        TZFIELD%CMNHNAME   = 'LINOX'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-    !
-    ! Passive scalar variables
-    !
-    IF (NSV_PPEND>=NSV_PPBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_PPBEG,NSV_PPEND
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
+  DO JSV = 1, NSV
+    TZFIELD = TSVLIST(JSV)
+    IF ( GOLDFILEFORMAT .AND.                               &
+         ( ( JSV >= 1         .AND. JSV <= NSV_USER  ) .OR. &
+           ( JSV >= NSV_PPBEG .AND. JSV <= NSV_PPEND ) .OR. &
 #ifdef MNH_FOREFIRE
-    !
-    ! ForeFire variables
-    !
-    IF (NSV_FFEND>=NSV_FFBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_FFBEG,NSV_FFEND
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
+           ( JSV >= NSV_FFBEG .AND. JSV <= NSV_FFEND ) .OR. &
 #endif
-    !
-    ! Passive scalar variables
-    !
-    IF (NSV_CSEND>=NSV_CSBEG) THEN
+           ( JSV >= NSV_CSBEG .AND. JSV <= NSV_CSEND ) )    ) THEN
+        !Some variables were written with an other name in MesoNH < 5.5.1
+      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'kg kg-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_CSBEG,NSV_CSEND
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PSVT(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
+      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
+    ELSE
+      TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+      TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
     END IF
-    !
-    ! Passive scalar variables
-    !
-    IF (NSV_PP>=1) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'm-3'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = 1,NSV_PP
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_PPBEG-1
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_PPBEG-1
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-#ifdef MNH_FOREFIRE
-    !
-    ! ForeFire variables
-    !
-    IF (NSV_FF>=1) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'm-3'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = 1,NSV_FF
-        WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'ATC',JSV+NSV_FFBEG-1
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','ATC',JSV+NSV_FFBEG-1
-        CALL IO_Field_read(TPSONFILE,TZFIELD,ZWORK3D,IRESP)
-        IF(IRESP==0) PATC(KIB2:KIE2,KJB2:KJE2,:,JSV)=ZWORK3D(KIB1:KIE1,KJB1:KJE1,:)
-      END DO
-    END IF
-#endif
-  END IF
+
+    CALL IO_Field_read( TPSONFILE, TZFIELD, ZWORK3D, IRESP )
+
+    IF( IRESP == 0 ) PSVT(KIB2:KIE2, KJB2:KJE2, :, JSV) = ZWORK3D(KIB1:KIE1, KJB1:KJE1, :)
+  END DO
+  !
+  ! Passive scalar variables
+  !
+  DO JSV = NSV_PPBEG, NSV_PPEND
+    WRITE( YNUM3, '( I3.3 )' ) JSV
+
+    TZFIELD = TFIELDMETADATA(            &
+      CMNHNAME   = 'ATC' // YNUM3,       &
+      CSTDNAME   = '',                   &
+      CLONGNAME  = 'ATC' // YNUM3,       &
+      CCOMMENT   = 'X_Y_Z_ATC' // YNUM3, &
+      CUNITS     = 'm-3',                &
+      CDIR       = 'XY',                 &
+      NGRID      = 1,                    &
+      NTYPE      = TYPEREAL,             &
+      NDIMS      = 3,                    &
+      LTIMEDEP   = .TRUE.                )
+
+    CALL IO_Field_read( TPSONFILE, TZFIELD, ZWORK3D, IRESP )
+
+    IF( IRESP == 0 ) PATC(KIB2:KIE2, KJB2:KJE2, :, JSV-NSV_PPBEG+1) = ZWORK3D(KIB1:KIE1, KJB1:KJE1, :)
+  END DO
   !
   ! Secondary pronostic variables
   !
diff --git a/src/MNH/write_aircraft_balloon.f90 b/src/MNH/write_aircraft_balloon.f90
index a8dc25cb4964fa80b436fbc16c173c260fe86a99..f957e9f773ae4e7322f6196eda1fe6f9a66df72a 100644
--- a/src/MNH/write_aircraft_balloon.f90
+++ b/src/MNH/write_aircraft_balloon.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2000-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2000-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -71,37 +71,24 @@ END MODULE MODI_WRITE_AIRCRAFT_BALLOON
 !  P. Wautelet 03/03/2021: budgets: add tbudiachrometadata type (useful to pass more information to Write_diachro)
 !  P. Wautelet 11/03/2021: budgets: remove ptrajx/y/z optional dummy arguments of Write_diachro
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 ! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
-USE MODD_CST
+USE MODD_CST,             ONLY: XRV
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LUNIT
-USE MODD_PARAMETERS
+USE MODD_PARAMETERS,      ONLY: XUNDEF
 !
 USE MODD_AIRCRAFT_BALLOON
-USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, LORILAM, NSP, NCARB, NSOA,    & 
-                                JPMODE, JP_AER_BC, JP_AER_OC, JP_AER_DST, &
-                                JP_AER_H2O, JP_AER_SO4, JP_AER_NO3,       &
-                                JP_AER_NH3, JP_AER_SOA1, JP_AER_SOA2,     &
-                                JP_AER_SOA3, JP_AER_SOA4, JP_AER_SOA5,    &
-                                JP_AER_SOA6, JP_AER_SOA7, JP_AER_SOA8,    &
-                                JP_AER_SOA9, JP_AER_SOA10
-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
-USE MODD_NSV
-USE MODD_DIAG_IN_RUN
-!
-USE MODE_MODELN_HANDLER
-USE MODE_DUST_PSD
+USE MODD_NSV,             ONLY: tsvlist, nsv, nsv_aer, nsv_aerbeg, nsv_aerend, nsv_dst, nsv_dstbeg, nsv_dstend, &
+                                nsv_lima_beg, nsv_lima_end
+USE MODD_DIAG_IN_RUN,     ONLY: LDIAG_IN_RUN
+!
 USE MODE_AERO_PSD
+USE MODE_DUST_PSD
+USE MODE_MODELN_HANDLER,  ONLY: GET_CURRENT_MODEL_INDEX
 use mode_msg
 use mode_write_diachro,   only: Write_diachro
 !
@@ -404,72 +391,21 @@ IF (LDIAG_IN_RUN) THEN
 ENDIF
 !
 IF (SIZE(TPFLYER%SV,2)>=1) 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,1,:,1,JPROC) = TPFLYER%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,1,:,1,JPROC) = TPFLYER%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,1,:,1,JPROC) = TPFLYER%SV(:,JSV)
-  END DO
-! LIMA variables
-  DO JSV=NSV_LIMA_BEG,NSV_LIMA_END
-    JPROC = JPROC+1
+  ! Scalar variables
+  DO JSV = 1, NSV
+    JPROC = JPROC + 1
 
     YTITLE(JPROC)   = TRIM( TSVLIST(JSV)%CMNHNAME )
-    YUNIT(JPROC)    = TRIM( TSVLIST(JSV)%CUNITS )
-    YCOMMENT(JPROC) = ' '
-
-    ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%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,1,:,1,JPROC) = TPFLYER%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'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9
-  END DO
-  ! LiNOX passive tracer
-  DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-    JPROC = JPROC+1
-    WRITE (YTITLE(JPROC),FMT='(A5)') 'LiNOx'
-    YUNIT    (JPROC) = 'ppb'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9
-  END DO
-  ! aerosol scalar variables
-  DO JSV = NSV_AERBEG,NSV_AEREND
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(CAERONAMES(JSV-NSV_AERBEG+1))
-    YUNIT    (JPROC) = 'ppb'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9
+    YCOMMENT(JPROC) = ''
+    IF ( TRIM( TSVLIST(JSV)%CUNITS ) == 'ppv' ) THEN
+      YUNIT(JPROC)  = 'ppb'
+      ZWORK6(1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.e9 !*1e9 for conversion ppv->ppb
+    ELSE
+      YUNIT(JPROC)  = TRIM( TSVLIST(JSV)%CUNITS )
+      ZWORK6(1,1,1,:,1,JPROC) = TPFLYER%SV(:,JSV)
+    END IF
   END DO
+
   IF ((LORILAM).AND. .NOT.(ANY(TPFLYER%P(:) == 0.))) THEN
 
     ALLOCATE (ZSV(1,1,size(tpflyer%tpdates),NSV_AER))
@@ -485,7 +421,7 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
         ZRHO(1,1,:) = ZRHO(1,1,:) + TPFLYER%R(:,JRR)
       ENDDO
       ZRHO(1,1,:) = TPFLYER%TH(:) * ( 1. + XRV/XRD*TPFLYER%R(:,1) )  &
-                                  / ( 1. + ZRHO(1,1,:)                ) 
+                                  / ( 1. + ZRHO(1,1,:)                )
     ELSE
       ZRHO(1,1,:) = TPFLYER%TH(:)
     ENDIF
@@ -623,19 +559,12 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
       WRITE(YTITLE(JPROC),'(A4,I1)')'MDUST',JSV
       YUNIT    (JPROC) = 'ug m-3'
       WRITE(YCOMMENT(JPROC),'(A22,I1)')'MASS DUST AEROSOL MODE ',JSV
-      ZWORK6(1,1,1,:,1,JPROC) = ZPTOTA(1,1,:,JP_AER_DST,JSV)      
+      ZWORK6(1,1,1,:,1,JPROC) = ZPTOTA(1,1,:,JP_AER_DST,JSV)
     ENDDO
-    DEALLOCATE (ZSV,ZRHO) 
-    DEALLOCATE (ZN0,ZRG,ZSIG,ZPTOTA) 
+    DEALLOCATE (ZSV,ZRHO)
+    DEALLOCATE (ZN0,ZRG,ZSIG,ZPTOTA)
   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,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9
-  END DO
+
   IF ((LDUST).AND. .NOT.(ANY(TPFLYER%P(:) == 0.))) THEN
     ALLOCATE (ZSV(1,1,size(tpflyer%tpdates),NSV_DST))
     ALLOCATE (ZRHO(1,1,size(tpflyer%tpdates)))
@@ -649,7 +578,7 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
         ZRHO(1,1,:) = ZRHO(1,1,:) + TPFLYER%R(:,JRR)
       ENDDO
       ZRHO(1,1,:) = TPFLYER%TH(:) * ( 1. + XRV/XRD*TPFLYER%R(:,1) )  &
-                                          / ( 1. + ZRHO(1,1,:)                ) 
+                                          / ( 1. + ZRHO(1,1,:)                )
     ELSE
       ZRHO(1,1,:) = TPFLYER%TH(:)
     ENDIF
@@ -676,17 +605,9 @@ IF (SIZE(TPFLYER%SV,2)>=1) THEN
       WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
       ZWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV)
     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,1,:,1,JPROC) = TPFLYER%SV(:,JSV) * 1.E9
-  END DO
 ENDIF
 !
 IF (SIZE(TPFLYER%TSRAD)>0) THEN
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index 1051579a1398fa49c74c2963fb96fce04e0b4236..23cec11a885bdf6ed99dc18b9fc0c55605a52b21 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -78,50 +78,38 @@ END MODULE MODI_WRITE_LB_n
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
 !  S. Bielli      02/2019: Sea salt: significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_DIM_n
-USE MODD_DYN_n
-USE MODD_CONF_n
+USE MODD_CH_AEROSOL,     ONLY: JP_CH_CO, LAERINIT, LDEPOS_AER, LORILAM, NSP
+USE MODD_CONF,           ONLY: CPROGRAM
+USE MODD_CONF_n,         ONLY: LUSERV, LUSERC, LUSERR, LUSERI, LUSERS, LUSERG, LUSERH, NRR
+USE MODD_DUST,           ONLY: LDEPOS_DST, LDSTINIT, LDSTPRES, LDUST
+USE MODD_DYN_n,          ONLY: LHORELAX_RV, LHORELAX_RC, LHORELAX_RR, LHORELAX_RI, LHORELAX_RS,        &
+                               LHORELAX_RG, LHORELAX_RH, LHORELAX_SV, LHORELAX_TKE, LHORELAX_UVWTH,    &
+                               NRIMX, NRIMY,                                                           &
+                               NSIZELBX_ll, NSIZELBXR_ll, NSIZELBXSV_ll, NSIZELBXTKE_ll, NSIZELBXU_ll, &
+                               NSIZELBY_ll, NSIZELBYR_ll, NSIZELBYSV_ll, NSIZELBYTKE_ll, NSIZELBYV_ll
+use modd_field,          only: tfieldmetadata, NMNHDIM_UNKNOWN, TYPELOG, TYPEREAL
+USE MODD_GRID_n,         ONLY: XZZ
+USE MODD_IO,             ONLY: TFILEDATA
 USE MODD_LSFIELD_n
-USE MODD_LUNIT_n
-USE MODD_PARAM_n
-USE MODD_TURB_n
 USE MODD_NSV
-USE MODD_PARAM_LIMA,     ONLY: NMOD_CCN, NMOD_IFN
-USE MODD_PARAM_n
-!
+USE MODD_PARAMETERS,     ONLY: JPHEXT, JPVEXT, NLONGNAMELGTMAX, NMNHNAMELGTMAX
+USE MODD_PARAM_n,        ONLY: CTURB
+USE MODD_REF,            ONLY: XRHODREFZ
+USE MODD_SALT,           ONLY: LDEPOS_SLT, LSALT, LSLTINIT, LSLTPRES
+
 USE MODE_IO_FIELD_WRITE, only: IO_Field_write, IO_Field_write_lb
-USE MODE_ll
-USE MODE_MSG
-USE MODE_MODELN_HANDLER
-USE MODE_TOOLS, ONLY: UPCASE
-!
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_CH_M9_n,         ONLY: CNAMES, CICNAMES
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_CH_AEROSOL
-USE MODD_CH_AERO_n
+USE MODE_MODELN_HANDLER, ONLY: GET_CURRENT_MODEL_INDEX
+
 USE MODI_CH_AER_REALLFI_n
-USE MODD_CONF
-USE MODD_REF,   ONLY : XRHODREFZ
-USE MODD_CONF,  ONLY : CPROGRAM
-USE MODD_GRID_n, ONLY : XZZ
-USE MODD_PARAMETERS, ONLY : JPHEXT, JPVEXT
-USE MODD_DUST
-USE MODD_SALT
 USE MODI_DUSTLFI_n
 USE MODI_SALTLFI_n
-USE MODD_PARAMETERS,      ONLY: JPHEXT, NMNHNAMELGTMAX
-USE MODD_IO, ONLY: TFILEDATA
-use modd_field, only: tfieldmetadata, NMNHDIM_UNKNOWN, TYPELOG, TYPEREAL
-!
-!
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -130,45 +118,36 @@ TYPE(TFILEDATA),   INTENT(IN) :: TPFILE ! File characteristics
 !
 !*       0.2   Declarations of local variables
 !
-INTEGER            :: ILUOUT        ! logical unit
-!
 INTEGER            :: IRR           ! Index for moist variables
 INTEGER            :: JRR,JSV       ! loop index for moist and scalar variables
 ! 
 LOGICAL            :: GHORELAX_R, GHORELAX_SV   ! global hor. relax. informations
-INTEGER            :: IRIMX,IRIMY   ! size of the RIM zone
 CHARACTER (LEN=1), DIMENSION (7) :: YC    ! array with the prefix of the moist variables
 LOGICAL, DIMENSION (7)           :: GUSER ! array with the use indicator of the moist variables
 REAL,    DIMENSION(SIZE(XLBXSVM, 1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)) :: ZRHODREFX
 REAL,    DIMENSION(SIZE(XLBYSVM, 1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)) :: ZRHODREFY
 INTEGER            :: JK
 INTEGER            :: IMI    ! Current model index
-INTEGER           :: I
 INTEGER           :: ILBX,ILBY
 INTEGER           :: IIB, IIE, IJB, IJE, IKB, IKE
-INTEGER           :: IIU, IJU, IKU
 REAL, DIMENSION(SIZE(XLBXSVM,1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)) :: ZLBXZZ
 REAL, DIMENSION(SIZE(XLBYSVM,1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)) :: ZLBYZZ
-CHARACTER(LEN=NMNHNAMELGTMAX) :: YMNHNAME_BASE
+CHARACTER(LEN=NMNHNAMELGTMAX)  :: YMNHNAME_BASE
+CHARACTER(LEN=NLONGNAMELGTMAX) :: YLONGNAME_BASE
 TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
 !
 !*       1.    SOME INITIALIZATIONS
 !              --------------------
 !
-ILUOUT = TLUOUT%NLU
-!
 IMI = GET_CURRENT_MODEL_INDEX()
 
 IIB=JPHEXT+1
 IIE=SIZE(XZZ,1)-JPHEXT
-IIU=SIZE(XZZ,1)
 IJB=JPHEXT+1
 IJE=SIZE(XZZ,2)-JPHEXT
-IJU=SIZE(XZZ,2)
 IKB=JPVEXT+1
 IKE=SIZE(XZZ,3)-JPVEXT
-IKU=SIZE(XZZ,3)
 !
 !        2.  WRITE THE DIMENSION OF LB FIELDS
 !            --------------------------------
@@ -229,13 +208,14 @@ IF (NRR >=1) THEN
   YC(:)=(/"V","C","R","I","S","G","H"/)
   IRR=0
   !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA( &
+    CUNITS     = 'kg kg-1', &
+    CDIR       = '',        &
+    NGRID      = 1,         &
+    NTYPE      = TYPEREAL,  &
+    NDIMS      = 3,         &
+    LTIMEDEP   = .TRUE.     )
+
   ! Loop on moist variables
   DO JRR=1,7
     IF (GUSER(JRR)) THEN
@@ -278,589 +258,99 @@ IF (NSV >=1) THEN
     NTYPE      = TYPELOG,      &
     NDIMS      = 0,            &
     LTIMEDEP   = .FALSE.       )
-  CALL IO_Field_write(TPFILE,TZFIELD,GHORELAX_SV)
-!
-  IRIMX =(NSIZELBXSV_ll-2*JPHEXT)/2
-  IRIMY =(NSIZELBYSV_ll-2*JPHEXT)/2
-  IF (NSV_USER>0) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = 1,NSV_USER
-      IF(NSIZELBXSV_ll /= 0) THEN
-        WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBXSVM',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        WRITE(TZFIELD%CMNHNAME,'(A6,I3.3)')'LBYSVM',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-  END IF
-  !
-  IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm-3'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_C2R2BEG,NSV_C2R2END
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-  END IF
-  !
-  IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm-3'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_C1R3BEG,NSV_C1R3END
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
+  CALL IO_Field_write( TPFILE, TZFIELD, GHORELAX_SV )
+
+  IF ( LORILAM .OR. LDUST .OR. LSALT ) THEN
+    DO JK = 1, SIZE( XLBXSVM, 3 )
+      ZRHODREFX(:,:,JK) =  XRHODREFZ(JK)
     END DO
+    DO JK = 1, SIZE( XLBYSVM, 3 )
+      ZRHODREFY(:,:,JK) =  XRHODREFZ(JK)
+    ENDDO
   END IF
-!
-! LIMA: CCN and IFN scalar variables
-!
-  IF (CCLOUD=='LIMA' ) THEN
-    DO JSV = NSV_LIMA_CCN_FREE,NSV_LIMA_CCN_FREE+NMOD_CCN-1
-      TZFIELD = TSVLIST(JSV)
-      TZFIELD%CDIR = ''
-      TZFIELD%NDIMLIST(:) = NMNHDIM_UNKNOWN
-      YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
-      !
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
-        TZFIELD%CLONGNAME  = 'LBX_' // TRIM( YMNHNAME_BASE )
-        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) '2_Y_Z_', 'LBXSVM', JSV
-        TZFIELD%CLBTYPE    = 'LBX'
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
-        TZFIELD%CLONGNAME  = 'LBY_' // TRIM( YMNHNAME_BASE )
-        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) 'X_2_Z_', 'LBYSVM', JSV
-        TZFIELD%CLBTYPE    = 'LBY'
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-    !
-    DO JSV = NSV_LIMA_IFN_FREE,NSV_LIMA_IFN_FREE+NMOD_IFN-1
-      TZFIELD = TSVLIST(JSV)
-      TZFIELD%CDIR = ''
-      TZFIELD%NDIMLIST(:) = NMNHDIM_UNKNOWN
-      YMNHNAME_BASE = TRIM( TZFIELD%CMNHNAME )
-      !
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_' // TRIM( YMNHNAME_BASE )
-        TZFIELD%CLONGNAME  = 'LBX_' // TRIM( YMNHNAME_BASE )
-        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) '2_Y_Z_', 'LBXSVM', JSV
-        TZFIELD%CLBTYPE    = 'LBX'
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_' // TRIM( YMNHNAME_BASE )
-        TZFIELD%CLONGNAME  = 'LBY_' // TRIM( YMNHNAME_BASE )
-        WRITE( TZFIELD%CCOMMENT, '( A6, A6, I3.3 ) ' ) 'X_2_Z_', 'LBYSVM', JSV
-        TZFIELD%CLBTYPE    = 'LBY'
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
+
+  IF ( LORILAM ) THEN
+    IF ( NSIZELBXSV_ll /= 0 ) XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX( XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND), 0. )
+    IF ( NSIZELBYSV_ll /= 0 ) XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX( XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND), 0. )
+    IF ( LDEPOS_AER(IMI) .AND. ( NSIZELBXSV_ll /= 0 ) ) &
+        XLBXSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND) = MAX( XLBXSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND), 0. )
+    IF ( LDEPOS_AER(IMI) .AND. ( NSIZELBYSV_ll /= 0 ) ) &
+        XLBYSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND) = MAX( XLBYSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND), 0. )
+    IF ( LAERINIT ) THEN ! GRIBEX CASE (aerosols initialization)
+      IF ( ( NSIZELBXSV_ll /= 0 ) .AND. ( TRIM( CPROGRAM ) == 'REAL' .OR. TRIM( CPROGRAM ) == 'IDEAL' ) .AND. ( NSP > 1 ) ) &
+        CALL CH_AER_REALLFI_n( XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND), XLBXSVM(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), ZRHODREFX )
+      IF ( ( NSIZELBYSV_ll /= 0 ) .AND. ( TRIM( CPROGRAM ) == 'REAL' .OR. TRIM( CPROGRAM ) == 'IDEAL' ) .AND. ( NSP > 1 ) ) &
+        CALL CH_AER_REALLFI_n( XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND), XLBYSVM(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), ZRHODREFY )
+    END IF
   END IF
-!
-! ELEC
-!
-  IF (NSV_ELECEND>=NSV_ELECBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_ELECBEG,NSV_ELECEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
+
+  IF ( LDUST ) THEN
+    IF ( NSIZELBXSV_ll /= 0 ) XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND) = MAX( XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), 0. )
+    IF ( NSIZELBYSV_ll /= 0 ) XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND) = MAX( XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), 0. )
+    IF ( LDEPOS_DST(IMI) .AND. ( NSIZELBXSV_ll /= 0 ) ) &
+        XLBXSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND) = MAX( XLBXSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND), 0. )
+    IF ( LDEPOS_DST(IMI) .AND. ( NSIZELBYSV_ll /= 0 ) ) &
+        XLBYSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND) = MAX( XLBYSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND), 0. )
+    IF ( LDSTINIT .OR. LDSTPRES ) THEN ! GRIBEX case (dust initialization)
+      IF ( ( NSIZELBXSV_ll /= 0 ) .AND. ( TRIM( CPROGRAM ) == 'REAL' .OR. TRIM( CPROGRAM ) == 'IDEAL' ) .AND. ( NSV_DST > 1 ) ) &
+        CALL DUSTLFI_n( XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFX )
+      IF ( ( NSIZELBYSV_ll /= 0 ) .AND. ( TRIM( CPROGRAM ) == 'REAL' .OR. TRIM( CPROGRAM ) == 'IDEAL' ) .AND. ( NSV_DST > 1 ) ) &
+        CALL DUSTLFI_n( XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFY )
+    END IF
   END IF
-  !
-  !
-  IF (LORILAM) THEN
-    DO JK=1,SIZE(XLBXSVM,3)
-       ZRHODREFX(:,:,JK) =  XRHODREFZ(JK)
-       ZRHODREFY(:,:,JK) =  XRHODREFZ(JK)
-    ENDDO
-    !
-    IF (NSIZELBXSV_ll /= 0) &
-      XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX(XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND), 0.)
-    IF (NSIZELBYSV_ll /= 0) &
-      XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX(XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND), 0.)
-    IF (LDEPOS_AER(IMI).AND.(NSIZELBXSV_ll /= 0)) &
-        XLBXSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND) = MAX(XLBXSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND), 0.)      
-    IF (LDEPOS_AER(IMI).AND.(NSIZELBYSV_ll /= 0)) &
-        XLBYSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND) = MAX(XLBYSVM(:,:,:,NSV_AERDEPBEG:NSV_AERDEPEND), 0.)      
-    IF (LAERINIT) THEN ! GRIBEX CASE (aerosols initialization)
-    IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'REAL  ').AND.(NSP > 1)) &
-      CALL CH_AER_REALLFI_n(XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND),XLBXSVM(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),ZRHODREFX)
-    IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'REAL  ').AND.(NSP > 1)) &
-      CALL CH_AER_REALLFI_n(XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND),XLBYSVM(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),ZRHODREFY)
-    IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSP > 1)) &
-      CALL CH_AER_REALLFI_n(XLBXSVM(:,:,:,NSV_AERBEG:NSV_AEREND),XLBXSVM(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),ZRHODREFX)
-    IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSP > 1)) & 
-      CALL CH_AER_REALLFI_n(XLBYSVM(:,:,:,NSV_AERBEG:NSV_AEREND),XLBYSVM(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),ZRHODREFY)
+
+  IF ( LSALT ) THEN
+    IF ( SIZE( ZLBXZZ ) > 0 ) THEN
+      ILBX = SIZE( ZLBXZZ, 1 ) / 2 - 1
+      ZLBXZZ(1:ILBX+1,:,:)         = XZZ(IIB-1:IIB-1+ILBX,:,:)
+      ZLBXZZ(ILBX+2:2*ILBX+2,:,:)  = XZZ(IIE+1-ILBX:IIE+1,:,:)
+    ENDIF
+    IF ( SIZE( ZLBYZZ ) > 0 ) THEN
+      ILBY = SIZE( ZLBYZZ, 2 ) / 2 - 1
+      ZLBYZZ(:,1:ILBY+1,:)        = XZZ(:,IJB-1:IJB-1+ILBY,:)
+      ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:)
+    ENDIF
+    IF ( NSIZELBXSV_ll /= 0 ) XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND) = MAX( XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), 0. )
+    IF ( NSIZELBYSV_ll /= 0 ) XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND) = MAX( XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), 0. )
+    IF ( LDEPOS_SLT(IMI) .AND. ( NSIZELBXSV_ll /= 0 ) ) &
+        XLBXSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX( XLBXSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0. )
+    IF ( LDEPOS_SLT(IMI) .AND. ( NSIZELBYSV_ll /= 0 ) ) &
+        XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX( XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0. )
+    IF ( LSLTINIT .OR. LSLTPRES ) THEN ! GRIBEX case (dust initialization)
+      IF ( ( NSIZELBXSV_ll /= 0 ) .AND. ( TRIM( CPROGRAM ) == 'REAL' .OR. TRIM( CPROGRAM ) == 'IDEAL' ) .AND. ( NSV_SLT > 1 ) ) &
+        CALL SALTLFI_n( XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX, ZLBXZZ )
+      IF ( ( NSIZELBYSV_ll /= 0 ) .AND. ( TRIM( CPROGRAM ) == 'REAL' .OR. TRIM( CPROGRAM ) == 'IDEAL' ) .AND. ( NSV_SLT > 1 ) ) &
+        CALL SALTLFI_n( XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY, ZLBYZZ )
     END IF
-    !
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppv'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_AERBEG,NSV_AEREND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-    !
-    IF (LDEPOS_AER(IMI)) THEN
-      DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-        IF(NSIZELBXSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-        END IF             
-        !
-        IF(NSIZELBYSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-        END IF             
-      END DO      
-    END IF  
   END IF
-  !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'kg kg-1'
-  TZFIELD%CDIR       = ''
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CHEMBEG,NSV_CHEMEND
+
+  DO JSV = 1, NSV
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CDIR = ''
+    TZFIELD%NDIMLIST(:) = NMNHDIM_UNKNOWN
+    YMNHNAME_BASE  = TRIM( TZFIELD%CMNHNAME )
+    YLONGNAME_BASE = TRIM( TZFIELD%CLONGNAME )
+
     IF(NSIZELBXSV_ll /= 0) THEN
-      TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CLBTYPE    = 'LBX'
+      TZFIELD%CMNHNAME  = 'LBX_' // TRIM( YMNHNAME_BASE )
+      TZFIELD%CLONGNAME = 'LBX_' // TRIM( YLONGNAME_BASE )
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-    END IF
-    !
-    IF(NSIZELBYSV_ll /= 0) THEN
-      TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CLBTYPE    = 'LBY'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-    END IF
-  END DO
-  !
-  DO JSV = NSV_CHICBEG,NSV_CHICEND
-    IF(NSIZELBXSV_ll /= 0) THEN
-      TZFIELD%CMNHNAME   = 'LBX_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBX'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb( TPFILE, TZFIELD, NSIZELBXSV_ll, XLBXSVM(:,:,:,JSV) )
     END IF
-    !
+
     IF(NSIZELBYSV_ll /= 0) THEN
-      TZFIELD%CMNHNAME   = 'LBY_'//TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CLBTYPE    = 'LBY'
+      TZFIELD%CMNHNAME  = 'LBY_' // TRIM( YMNHNAME_BASE )
+      TZFIELD%CLONGNAME = 'LBY_' // TRIM( YLONGNAME_BASE )
+!PW: TODO: comment a adapter (a la lecture aussi)
       WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-    END IF
-  END DO
-  !
-  DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-    IF(NSIZELBXSV_ll /= 0) THEN
-      TZFIELD%CMNHNAME   = 'LBX_LINOX'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CLBTYPE    = 'LBX'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-    END IF
-    !
-    IF(NSIZELBYSV_ll /= 0) THEN
-      TZFIELD%CMNHNAME   = 'LBY_LINOX'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CLBTYPE    = 'LBY'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-      CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      CALL IO_Field_write_lb( TPFILE, TZFIELD, NSIZELBYSV_ll, XLBYSVM(:,:,:,JSV) )
     END IF
   END DO
-  !
-  IF (LDUST) THEN
-    DO JK=1,size(XLBXSVM,3)
-       ZRHODREFX(:,:,JK) =  XRHODREFZ(JK)
-    ENDDO
-    DO JK=1,size(XLBYSVM,3)
-      ZRHODREFY(:,:,JK) =  XRHODREFZ(JK)
-    ENDDO
-    IF (NSIZELBXSV_ll /= 0) &
-      XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND) = MAX(XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), 0.)
-    IF (NSIZELBYSV_ll /= 0) &
-      XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND) = MAX(XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), 0.)
-    IF (LDEPOS_DST(IMI).AND.(NSIZELBXSV_ll /= 0)) &
-        XLBXSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND) = MAX(XLBXSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND), 0.)      
-    IF (LDEPOS_DST(IMI).AND.(NSIZELBYSV_ll /= 0)) &
-        XLBYSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND) = MAX(XLBYSVM(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND), 0.)      
-    IF ((LDSTINIT).OR.(LDSTPRES)) THEN ! GRIBEX case (dust initialization)
-      IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_DST > 1)) THEN
-        CALL DUSTLFI_n(XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFX)
-      END IF
-      IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_DST > 1)) THEN
-        CALL DUSTLFI_n(XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFY)
-      END IF
-      IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1)) &
-        CALL DUSTLFI_n(XLBXSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFX)
-      IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1)) &
-        CALL DUSTLFI_n(XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFY)
-    END IF
-    !
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppv'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_DSTBEG,NSV_DSTEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-    IF (LDEPOS_DST(IMI)) THEN
-      DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-        IF(NSIZELBXSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-        END IF
-        !
-        IF(NSIZELBYSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-        END IF
-      END DO
-    END IF
-  ENDIF
-  !
-  IF (LSALT) THEN
-    DO JK=1,size(XLBXSVM,3)
-      ZRHODREFX(:,:,JK) =  XRHODREFZ(JK)
-    ENDDO
-    DO JK=1,size(XLBYSVM,3)
-      ZRHODREFY(:,:,JK) =  XRHODREFZ(JK)
-    ENDDO
-    IIU  = SIZE(XZZ,1)
-    IJU  = SIZE(XZZ,2)
-    IKU  = SIZE(XZZ,3)
-    IF (SIZE(ZLBXZZ) .NE. 0 ) THEN
-      ILBX=SIZE(ZLBXZZ,1)/2-1
-      ZLBXZZ(1:ILBX+1,:,:)         = XZZ(IIB-1:IIB-1+ILBX,:,:)
-      ZLBXZZ(ILBX+2:2*ILBX+2,:,:)  = XZZ(IIE+1-ILBX:IIE+1,:,:)
-    ENDIF
-    IF (SIZE(ZLBYZZ) .NE. 0 ) THEN
-      ILBY=SIZE(ZLBYZZ,2)/2-1
-      ZLBYZZ(:,1:ILBY+1,:)        = XZZ(:,IJB-1:IJB-1+ILBY,:)
-      ZLBYZZ(:,ILBY+2:2*ILBY+2,:) = XZZ(:,IJE+1-ILBY:IJE+1,:)
-    ENDIF
-    IF (NSIZELBXSV_ll /= 0) &
-      XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND) = MAX(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), 0.)
-    IF (NSIZELBYSV_ll /= 0) &
-      XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND) = MAX(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), 0.)
-    IF (LDEPOS_SLT(IMI).AND.(NSIZELBXSV_ll /= 0)) &
-        XLBXSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX(XLBXSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0.)      
-    IF (LDEPOS_SLT(IMI).AND.(NSIZELBYSV_ll /= 0)) &
-        XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND) = MAX(XLBYSVM(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND), 0.)      
-    IF ((LSLTINIT).OR.(LSLTPRES)) THEN ! GRIBEX case (dust initialization)
-      IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX, ZLBXZZ)
-      END IF
-      IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'REAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY, ZLBYZZ)
-      END IF
-      IF ((NSIZELBXSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBXSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFX, ZLBXZZ)
-      END IF
-      IF ((NSIZELBYSV_ll /= 0).AND.(CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1)) THEN
-        CALL SALTLFI_n(XLBYSVM(:,:,:,NSV_SLTBEG:NSV_SLTEND), ZRHODREFY, ZLBYZZ)
-      END IF
-    END IF
-    !
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppv'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_SLTBEG,NSV_SLTEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-    IF (LDEPOS_SLT(IMI)) THEN
-      DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-        IF(NSIZELBXSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBX'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-        END IF
-        !
-        IF(NSIZELBYSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          TZFIELD%CLBTYPE    = 'LBY'
-          WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-          CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-        END IF
-      END DO
-    END IF
-  ENDIF   
-  !
-  ! lagrangian variables
-  IF (NSV_LGEND>=NSV_LGBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_LGBEG,NSV_LGEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-!
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-  END IF
-  ! passive pollutants
-  IF (NSV_PPEND>=NSV_PPBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_PPBEG,NSV_PPEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_PP'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_PP'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-  END IF
-  ! conditional sampling
-  IF (NSV_CSEND>=NSV_CSBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_CSBEG,NSV_CSEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_CS'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_CS'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-  END IF
-#ifdef MNH_FOREFIRE
-  ! ForeFire scalar variables
-  IF (NSV_FFEND>=NSV_FFBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = ''
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_FFBEG,NSV_FFEND
-      IF(NSIZELBXSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBX_FF'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBX'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-      END IF
-      !
-      IF(NSIZELBYSV_ll /= 0) THEN
-        TZFIELD%CMNHNAME   = 'LBY_FF'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CLBTYPE    = 'LBY'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-      END IF
-    END DO
-  END IF
-#endif
 END IF
 !
 !-------------------------------------------------------------------------------
 !
 !
-END SUBROUTINE WRITE_LB_n  
+END SUBROUTINE WRITE_LB_n
diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90
index 70c104339ad6c10e365cb0712b75dca0d528e2e6..a14c099e66da32835771f770310cd2664e6da1b0 100644
--- a/src/MNH/write_lfifm1_for_diag.f90
+++ b/src/MNH/write_lfifm1_for_diag.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -145,115 +145,99 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG
 !  P. Wautelet 08/02/2019: minor bug: compute ZWORK36 only when needed
 !  S  Bielli      02/2019: sea salt: significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 18/03/2020: remove ICE2 option
-!      B. Vie          06/2020 Add prognostic supersaturation for LIMA
+!  B. Vie         06/2020: Add prognostic supersaturation for LIMA
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
 !  J.L Redelsperger 03/2021 Adding OCEAN LES Case and Autocoupled O-A LES 
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_DIM_n
-USE MODD_CONF
-USE MODD_CONF_n
-use modd_field,           only: tfieldmetadata, tfieldlist, TYPEINT, TYPEREAL
-USE MODD_GRID
-USE MODD_GRID_n
-USE MODD_IO, ONLY : TFILEDATA
-USE MODD_METRICS_n
-USE MODD_TIME
-USE MODD_TIME_n
-USE MODD_DYN_n
-USE MODD_FIELD_n
-USE MODD_GR_FIELD_n
-USE MODD_LSFIELD_n
-USE MODD_PARAM_n
-USE MODD_CURVCOR_n
-USE MODD_REF
-USE MODD_REF_n
-USE MODD_LUNIT, ONLY : TLUOUT0
-USE MODD_LUNIT_n
-USE MODD_TURB_n
-USE MODD_RADIATIONS_n
-USE MODD_FRC
-USE MODD_PRECIP_n
-USE MODD_CST
-USE MODD_CLOUDPAR
-USE MODD_DEEP_CONVECTION_n
-USE MODD_PARAM_KAFR_n
-USE MODD_NESTING
-USE MODD_PARAMETERS
+USE MODD_BLOWSNOW,          ONLY: LBLOWSNOW, NBLOWSNOW3D
+USE MODD_BLOWSNOW_n,        ONLY: XSNWSUBL3D
+USE MODD_CH_AERO_n,         ONLY: XN3D, XRG3D, XSIG3D
+USE MODD_CH_AEROSOL
+USE MODD_CH_M9_n,           ONLY: NEQAQ
+USE MODD_CH_MNHC_n,         ONLY: LCH_CONV_LINOX, LUSECHEM, XRTMIN_AQ
+USE MODD_CONDSAMP,          ONLY: LCONDSAMP
+USE MODD_CONF,              ONLY: CBIBUSER, CEQNSYS, CPROGRAM, L1D, L2D, LCARTESIAN, LFORCING, LPACK, LTHINSHELL, NBUGFIX, NMASDEV
+USE MODD_CONF_n,            ONLY: IDX_RVT, IDX_RCT, IDX_RRT, IDX_RIT, IDX_RST, IDX_RGT, IDX_RHT, &
+                                  LUSERV,  LUSERC,  LUSERR,  LUSERI,  LUSERS,  LUSERG,  LUSERH,  &
+                                  LUSECI, NRR, NRRI, NRRL
+USE MODD_CST,               ONLY: XALPI, XAVOGADRO, XBETAI, XCI, XCL, XCPD, XCPV, XG, XGAMI, XLSTT, XLVTT, &
+                                  XMD, XMV, XP00, XPI, XRADIUS, XRHOLW, XRD, XRV, XTT
+USE MODD_CSTS_DUST,         ONLY: XDENSITY_DUST, XM3TOUM3, XMOLARWEIGHT_DUST
+USE MODD_CURVCOR_n,         ONLY: XCORIOZ
+USE MODD_DEEP_CONVECTION_n, ONLY: XCG_RATE, XCG_TOTAL_NUMBER, XIC_RATE, XIC_TOTAL_NUMBER, XPACCONV, XPRCONV, XPRSCONV
 USE MODD_DIAG_FLAG
+USE MODD_DIM_n,             ONLY: NIMAX_ll, NJMAX_ll, NKMAX
+USE MODD_DUST,              ONLY: LDEPOS_DST, LDUST, NMODE_DST
+USE MODD_DYN_n,             ONLY: LOCEAN
+use modd_field,             only: tfieldmetadata, tfieldlist, TYPEINT, TYPEREAL
+USE MODD_FIELD_n,           ONLY: XCIT, XCLDFR, XPABSM, XPABST, XRT, XSIGS, XSRCT, XSVT, XTHT, XTKET, XUT, XVT, XWT, XZWS
+USE MODD_FRC,               ONLY: NFRC, XGXTHFRC, XGYTHFRC, XPGROUNDFRC, XRVFRC, XTENDRVFRC, XTENDTHFRC, XTHFRC, XUFRC, XVFRC, XWFRC
+USE MODD_GRID,              ONLY: XBETA, XLAT0, XLATORI, XLON0, XLONORI, XRPK
+USE MODD_GRID_n,            only: LSLEVE, XLAT, XLEN1, XLEN2, XLON, XZS, XXHAT, XYHAT, XZHAT, XZSMT, XZTOP, XZZ
+USE MODD_IO,                ONLY: TFILEDATA
+USE MODD_LSFIELD_n,         ONLY: XLSRVM, XLSTHM, XLSUM, XLSVM, XLSWM
+USE MODD_LUNIT,             ONLY: TLUOUT0
+USE MODD_METRICS_n,         ONLY: XDXX, XDYY, XDZX, XDZY, XDZZ
+USE MODD_MPIF
+USE MODD_NESTING,           ONLY: NDXRATIO_ALL, NDYRATIO_ALL, NXOR_ALL, NYOR_ALL
 USE MODD_NSV
-USE MODD_CH_M9_n,         ONLY : CNAMES, NEQAQ
-USE MODD_RAIN_C2R2_DESCR, ONLY : C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY : C1R3NAMES
-USE MODD_ELEC_DESCR, ONLY : CELECNAMES
-USE MODD_RAIN_C2R2_KHKO_PARAM
-USE MODD_ICE_C1R3_PARAM
-USE MODD_PARAM_ICE,       ONLY : LSEDIC
-USE MODD_PARAM_LIMA,      ONLY : NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM,&
-                                 LSCAV, LHHONI, LAERO_MASS,                    &
-                                 LLIMA_DIAG,                                   &
-                                 NSPECIE, XMDIAM_IFN, XSIGMA_IFN, ZFRAC=>XFRAC,&
-                                 XR_MEAN_CCN, XLOGSIG_CCN 
-USE MODD_PARAM_LIMA_WARM, ONLY : CLIMA_WARM_CONC, CAERO_MASS
-USE MODD_PARAM_LIMA_COLD, ONLY : CLIMA_COLD_CONC
-USE MODD_LG,              ONLY : CLGNAMES
-USE MODD_PASPOL,          ONLY : LPASPOL
-USE MODD_CONDSAMP,        ONLY : LCONDSAMP
-!
-USE MODD_DIAG_FLAG
-USE MODD_RADAR, ONLY: XLAT_RAD,XELEV,&
-     XSTEP_RAD,NBRAD,NBELEV,NBAZIM,NBSTEPMAX,&
-     NCURV_INTERPOL,LATT,LCART_RAD,NPTS_H,NPTS_V,XGRID,&
-     LREFR,LDNDZ,NMAX,CNAME_RAD,NDIFF,&
-     XLON_RAD,XALT_RAD,XLAM_RAD,XDT_RAD,LWBSCS,LWREFL
-use modd_precision,       only: MNHREAL_MPI
-!
-USE MODI_RADAR_SIMULATOR
-!
-USE MODD_DUST
-USE MODD_CSTS_DUST
-USE MODD_SALT
-USE MODD_BLOWSNOW
-USE MODD_CH_AEROSOL
-USE MODD_CH_AERO_n
-USE MODD_CH_MNHC_n
-USE MODE_DUST_PSD
-USE MODE_SALT_PSD
-USE MODE_BLOWSNOW_PSD
-USE MODE_AERO_PSD
+USE MODD_PARAMETERS,        ONLY: JPHEXT, JPVEXT, XUNDEF
+USE MODD_PARAM_LIMA_COLD,   ONLY: CLIMA_COLD_CONC
+USE MODD_PARAM_LIMA,        ONLY: NMOD_CCN, NMOD_IFN, NMOD_IMM, NINDICE_CCN_IMM, &
+                                  LSCAV, LLIMA_DIAG
+USE MODD_PARAM_LIMA_WARM,   ONLY: CLIMA_WARM_CONC, CAERO_MASS
+USE MODD_PARAM_n,           ONLY: CCLOUD, CDCONV, CELEC, CSURF, CTURB
+USE MODD_PASPOL,            ONLY: LPASPOL
+USE MODD_PRECIP_n,          ONLY: XACDEP, XACPRC, XACPRG, XACPRH, XACPRR, XACPRS, XEVAP3D, &
+                                  XINDEP, XINPRC, XINPRG, XINPRH, XINPRR, XINPRR3D, XINPRS
+use modd_precision,         only: MNHREAL_MPI
+USE MODD_RADAR,             ONLY: CNAME_RAD, LATT, LCART_RAD, LDNDZ, LREFR, LWBSCS, LWREFL,                      &
+                                  NBAZIM, NBELEV, NBRAD, NBSTEPMAX, NCURV_INTERPOL, NDIFF, NMAX, NPTS_H, NPTS_V, &
+                                  XALT_RAD, XDT_RAD, XELEV, XGRID, XLAM_RAD, XLAT_RAD, XLON_RAD, XSTEP_RAD
+USE MODD_REF,               ONLY: LBOUSS, LCOUPLES, XEXNTOP, XEXNTOPO, XRHODREFZ, XRHODREFZO, XTHVREFZ, XTHVREFZO
+USE MODD_REF_n,             ONLY: XEXNREF, XRHODREF, XTHVREF
+USE MODD_SALT,              ONLY: LDEPOS_SLT, LSALT, NMODE_SLT
+USE MODD_TIME,              ONLY: TDTEXP, TDTSEG
+USE MODD_TIME_n,            ONLY: TDTCUR, TDTMOD
+USE MODD_TURB_n,            only: CTOM, XBL_DEPTH
+USE MODD_VAR_ll,            ONLY: NMNH_COMM_WORLD
+
+USE MODE_AERO_PSD,          ONLY: PPP2AERO
+USE MODE_BLOWSNOW_PSD,      ONLY: PPP2SNOW
+USE MODE_DUST_PSD,          ONLY: PPP2DUST
+use mode_field,             only: Find_field_id_from_mnhname
+use MODE_GATHER_ll,         only: GATHERALL_FIELD_ll
+USE MODE_GRIDPROJ,          ONLY: SM_LATLON
+USE MODE_IO_FIELD_WRITE,    only: IO_Field_write
+USE MODE_IO_FILE,           only: IO_File_close, IO_File_open
+USE MODE_IO_MANAGE_STRUCT,  only: IO_File_add2list
+USE MODE_MODELN_HANDLER,    only: GET_CURRENT_MODEL_INDEX
+use mode_msg
+USE MODE_SALT_PSD,          ONLY: PPP2SALT
+USE MODE_THERMO,            ONLY: QSAT, SM_FOES
+USE MODE_TOOLS,             ONLY: UPCASE
+USE MODE_TOOLS_ll,          ONLY: GET_DIM_EXT_ll, GET_INDICE_ll
+
+USE MODI_CALCSOUND
+USE MODI_CLUSTERING
+USE MODI_COMPUTE_MEAN_PRECIP
+USE MODI_CONTRAV
+USE MODI_GPS_ZENITH
 USE MODI_GRADIENT_M
-USE MODI_GRADIENT_W
 USE MODI_GRADIENT_U
 USE MODI_GRADIENT_V
-USE MODI_SHUMAN
-USE MODI_RADAR_RAIN_ICE
+USE MODI_GRADIENT_W
 USE MODI_INI_RADAR
-USE MODI_COMPUTE_MEAN_PRECIP
-USE MODI_UV_TO_ZONAL_AND_MERID
-USE MODI_CALCSOUND
-USE MODI_FREE_ATM_PROFILE
-USE MODI_GPS_ZENITH
-USE MODI_CONTRAV
-!
-use mode_field,            only: Find_field_id_from_mnhname
-USE MODE_GRIDPROJ
-USE MODE_GATHER_ll
-USE MODE_IO_FIELD_WRITE,   only: IO_Field_write
-USE MODE_IO_FILE,          only: IO_File_close, IO_File_open
-USE MODE_IO_MANAGE_STRUCT, only: IO_File_add2list
-USE MODE_ll
-use mode_msg
-USE MODE_THERMO
-USE MODE_TOOLS,            ONLY: UPCASE
-USE MODE_MODELN_HANDLER
 USE MODI_LIDAR
-USE MODI_CLUSTERING
-!
-USE MODD_MPIF
-USE MODD_VAR_ll
+USE MODI_RADAR_RAIN_ICE
+USE MODI_RADAR_SIMULATOR
+USE MODI_SHUMAN
+USE MODI_UV_TO_ZONAL_AND_MERID
 !
 IMPLICIT NONE
 !
@@ -303,8 +287,8 @@ INTEGER, DIMENSION(:,:), ALLOCATABLE                    :: IWORK1
 integer :: ICURR,INBOUT,IERR
 !
 REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NSP+NCARB+NSOA,JPMODE):: ZPTOTA
-REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NMODE_DST*2):: ZSDSTDEP
-REAL,DIMENSION(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),NMODE_SLT*2):: ZSSLTDEP
+REAL,DIMENSION(:,:,:,:), POINTER :: ZSDSTDEP
+REAL,DIMENSION(:,:,:,:), POINTER :: ZSSLTDEP
 REAL,DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSIG_DST, ZRG_DST, ZN0_DST
 REAL,DIMENSION(:,:,:,:), ALLOCATABLE  :: ZSIG_SLT, ZRG_SLT, ZN0_SLT
 REAL,DIMENSION(:,:,:), ALLOCATABLE    :: ZBET_SNW, ZRG_SNW
@@ -1011,7 +995,7 @@ IF (LVAR_MRW .OR. LLIMA_DIAG) THEN
 !
       TZFIELD%CMNHNAME   = 'VRC'
       TZFIELD%CLONGNAME  = 'VRC'
-      TZFIELD%CUNITS     = '1' !vol/vol
+      TZFIELD%CUNITS     = 'ppv' !vol/vol
       TZFIELD%CCOMMENT   = 'X_Y_Z_VRC (vol/vol)'
       CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RCT)*XRHODREF(:,:,:)/1.E3)
     END IF
@@ -1024,7 +1008,7 @@ IF (LVAR_MRW .OR. LLIMA_DIAG) THEN
 !
       TZFIELD%CMNHNAME   = 'VRR'
       TZFIELD%CLONGNAME  = 'VRR'
-      TZFIELD%CUNITS     = '1' !vol/vol
+      TZFIELD%CUNITS     = 'ppv' !vol/vol
       TZFIELD%CCOMMENT   = 'X_Y_Z_VRR (vol/vol)'
       CALL IO_Field_write(TPFILE,TZFIELD,XRT(:,:,:,IDX_RRT)*XRHODREF(:,:,:)/1.E3)
     END IF
@@ -1068,76 +1052,52 @@ END IF
 ! User scalar variables
 ! individually in the file
 IF (LVAR_MRSV) THEN
-  TZFIELD = TFIELDMETADATA(                      &
-    CMNHNAME   = 'generic for scalar variables', & !Temporary name to ease identification
-    CSTDNAME   = '',                             &
-    CUNITS     = 'g kg-1',                       &
-    CDIR       = 'XY',                           &
-    NGRID      = 1,                              &
-    NTYPE      = TYPEREAL,                       &
-    NDIMS      = 3,                              &
-    LTIMEDEP   = .TRUE.                          )
-  !
   DO JSV = 1,NSV_USER
-    WRITE(TZFIELD%CMNHNAME,'(A4,I3.3)')'MRSV',JSV
+    TZFIELD = TSVLIST(JSV)
+    WRITE( TZFIELD%CMNHNAME, '( A4, I3.3 )' ) 'MRSV', JSV
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
-    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E3)
+    TZFIELD%CUNITS     = 'g kg-1'
+    WRITE( TZFIELD%CCOMMENT, '( A, I3.3 )' ) 'Mixing Ratio for user Scalar Variable', JSV
+    CALL IO_Field_write( TPFILE, TZFIELD, XSVT(:,:,:,JSV) * 1.E3 )
   END DO
 END IF
 ! microphysical C2R2 scheme scalar variables
 IF(LVAR_MRW) THEN
-  IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_C2R2BEG,NSV_C2R2END
-      TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      IF (JSV < NSV_C2R2END) THEN
-        TZFIELD%CUNITS     = 'cm-3'
-        ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-6
-      ELSE
-        TZFIELD%CUNITS     = 'l-1'
-        ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-3
-      END IF
-      WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-    END DO
-  END IF
+  DO JSV = NSV_C2R2BEG,NSV_C2R2END
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+   IF (JSV < NSV_C2R2END) THEN
+      TZFIELD%CUNITS     = 'cm-3'
+      ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-6
+    ELSE
+      TZFIELD%CUNITS     = 'l-1'
+      ZWORK31(:,:,:)=XSVT(:,:,:,JSV)*1.E-3
+    END IF
+    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','MRSV',JSV
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
+  END DO
   ! microphysical C3R5 scheme additional scalar variables
-  IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
-    TZFIELD%CSTDNAME   = ''
+  DO JSV = NSV_C1R3BEG,NSV_C1R3END
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
     TZFIELD%CUNITS     = 'l-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_C1R3BEG,NSV_C1R3END
-      TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E-3)
-    END DO
-  END IF
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E-3)
+  END DO
 END IF
 !
 ! microphysical LIMA scheme scalar variables
 !
 IF (LLIMA_DIAG) THEN
   IF (NSV_LIMA_END>=NSV_LIMA_BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD = TFIELDMETADATA(           &
+      CMNHNAME   = 'generic LIMA diag', & !Temporary name to ease identification
+      CDIR       = 'XY',                &
+      NGRID      = 1,                   &
+      NTYPE      = TYPEREAL,            &
+      NDIMS      = 3,                   &
+      LTIMEDEP   = .TRUE.               )
   END IF
   !
   DO JSV = NSV_LIMA_BEG,NSV_LIMA_END
@@ -1192,7 +1152,7 @@ IF (LLIMA_DIAG) THEN
       TZFIELD%CMNHNAME   = TRIM(CLIMA_COLD_CONC(5))//'T'
     END IF
     !
-! Supersaturation          
+! Supersaturation
     IF (JSV .EQ. NSV_LIMA_SPRO) THEN
       TZFIELD%CMNHNAME   = TRIM(CLIMA_WARM_CONC(5))//'T'
     END IF
@@ -1235,36 +1195,127 @@ IF (LLIMA_DIAG) THEN
   END IF
 !
 END IF
+IF (LELECDIAG .AND. CELEC .NE. "NONE") THEN
+  DO JSV = NSV_ELECBEG,NSV_ELECEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    IF ( JSV > NSV_ELECBEG .AND. JSV < NSV_ELECEND ) THEN
+      TZFIELD%CUNITS = 'C m-3'
+      WRITE( TZFIELD%CCOMMENT, '( A6, A3, I3.3 )' ) 'X_Y_Z_', 'SVT', JSV
+    ELSE
+      TZFIELD%CUNITS = 'm-3'
+      WRITE( TZFIELD%CCOMMENT, '( A6, A3, I3.3, A8 )' ) 'X_Y_Z_', 'SVT', JSV, ' (nb ions/m3)'
+    END IF
+    ZWORK31(:,:,:)=XSVT(:,:,:,JSV) * XRHODREF(:,:,:)  ! C/kg --> C/m3
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
+  END DO
+END IF
+!
+! Lagrangian variables
+IF (LTRAJ) THEN
+  DO JSV = NSV_LGBEG, NSV_LGEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    WRITE(TZFIELD%CCOMMENT,'(A6,A20,I3.3,A4)')'X_Y_Z_','Lagrangian variable ',JSV
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+  END DO
+
+  ! X coordinate
+  DO JK=1,IKU
+    DO JJ=1,IJU
+      DO JI=1,IIU-1
+       ZWORK31(JI,JJ,JK)=0.5*(XXHAT(JI)+XXHAT(JI+1))
+      END DO
+      ZWORK31(IIU,JJ,JK)=2.*ZWORK31(IIU-1,JJ,JK) - ZWORK31(IIU-2,JJ,JK)
+    END DO
+  END DO
+
+  TZFIELD = TFIELDMETADATA(            &
+    CMNHNAME   = 'X',                  &
+    CSTDNAME   = '',                   &
+    CLONGNAME  = 'X',                  &
+    CUNITS     = 'km',                 &
+    CDIR       = 'XY',                 &
+    CCOMMENT   = 'X_Y_Z_X coordinate', &
+    NGRID      = 1,                    &
+    NTYPE      = TYPEREAL,             &
+    NDIMS      = 3,                    &
+    LTIMEDEP   = .TRUE.                )
+
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31*1e-3)
+
+  ! Y coordinate
+  DO JK=1,IKU
+    DO JI=1,IIU
+      DO JJ=1,IJU-1
+        ZWORK31(JI,JJ,JK)=0.5*(XYHAT(JJ)+XYHAT(JJ+1))
+      END DO
+      ZWORK31(JI,IJU,JK)=2.*ZWORK31(JI,IJU-1,JK) - ZWORK31(JI,IJU-2,JK)
+    END DO
+  END DO
+
+  TZFIELD%CMNHNAME   = 'Y'
+  TZFIELD%CLONGNAME  = 'Y'
+  TZFIELD%CCOMMENT   = 'X_Y_Z_Y coordinate'
+
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31*1e-3)
+END IF
+!
+! Passive polluant scalar variables
+IF (LPASPOL) THEN
+  ALLOCATE(ZRHOT( SIZE(XTHT,1), SIZE(XTHT,2),SIZE(XTHT,3)))
+  ALLOCATE(ZTMP(  SIZE(XTHT,1), SIZE(XTHT,2),SIZE(XTHT,3)))
+!
+!* Density
+!
+  ZRHOT(:,:,:)=XPABST(:,:,:)/(XRD*XTHT(:,:,:)*((XPABST(:,:,:)/XP00)**(XRD/XCPD)))
+!
+!* Conversion g/m3.
 !
-! chemical scalar variables in gas phase ppbv
+  ZRHOT(:,:,:)=ZRHOT(:,:,:)*1000.0
+  !
+  DO JSV = NSV_PPBEG, NSV_PPEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS     = 'g m-3'
+
+    ZTMP(:,:,:)=ABS( XSVT(:,:,:,JSV)*ZRHOT(:,:,:) )
+    CALL IO_Field_write(TPFILE,TZFIELD,ZTMP)
+  END DO
+
+  DEALLOCATE(ZTMP)
+  DEALLOCATE(ZRHOT)
+END IF
+! Conditional sampling variables
+IF (LCONDSAMP) THEN
+  DO JSV = NSV_CSBEG, NSV_CSEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+  END DO
+END IF
+! chemical scalar variables in gas phase ppb
 IF (LCHEMDIAG) THEN
   DO JSV = NSV_CHGSBEG,NSV_CHGSEND
-    TZFIELD%CMNHNAME   = TRIM(UPCASE(CNAMES(JSV-NSV_CHGSBEG+1)))//'T'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ppb'
-    TZFIELD%CDIR       = 'XY'
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHIM',JSV
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
     CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
 END IF
 IF (LCHAQDIAG) THEN    !aqueous concentration in M
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'mol l-1' !Original value: 'M' (molar) but not known by udunits => replaced by equivalent mol l-1
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
   ZWORK31(:,:,:)=0.
   DO JSV = NSV_CHACBEG, NSV_CHACBEG-1+NEQAQ/2   !cloud water
-    TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'mol l-1' !Original value: 'M' (molar) but not known by udunits => replaced by equivalent mol l-1
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHAQ',JSV
     WHERE(((XRT(:,:,:,2)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
       ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,2))
@@ -1274,8 +1325,10 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
   !
   ZWORK31(:,:,:)=0.
   DO JSV = NSV_CHACBEG+NEQAQ/2, NSV_CHACEND    !rain water
-    TZFIELD%CMNHNAME   = TRIM(CNAMES(JSV-NSV_CHACBEG+NSV_CHGS+1))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'mol l-1' !Original value: 'M' (molar) but not known by udunits => replaced by equivalent mol l-1
     WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','CHAQ',JSV
     WHERE(((XRT(:,:,:,3)*XRHODREF(:,:,:))/1.e3) .GE. XRTMIN_AQ)
       ZWORK31(:,:,:)=(XSVT(:,:,:,JSV)*1000.)/(XMD*1.E+3*XRT(:,:,:,3))
@@ -1293,325 +1346,226 @@ IF (LCHAQDIAG) THEN    !aqueous concentration in M
 !    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
 !  END DO
 END IF
-
-! Passive polluant scalar variables
-IF (LPASPOL) THEN
-  ALLOCATE(ZRHOT( SIZE(XTHT,1), SIZE(XTHT,2),SIZE(XTHT,3)))
-  ALLOCATE(ZTMP(  SIZE(XTHT,1), SIZE(XTHT,2),SIZE(XTHT,3)))
-!
-!*	Density                                          
-!
-  ZRHOT(:,:,:)=XPABST(:,:,:)/(XRD*XTHT(:,:,:)*((XPABST(:,:,:)/XP00)**(XRD/XCPD)))
-!
-!*	Conversion g/m3.
-!
-  ZRHOT(:,:,:)=ZRHOT(:,:,:)*1000.0
+! Aerosol
+IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
+  DO JSV = NSV_AERBEG, NSV_AEREND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
+    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','AERO',JSV
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+  END DO
   !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'g m-3'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  IF (.NOT.(ASSOCIATED(XN3D)))   &
+    ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
+  IF (.NOT.(ASSOCIATED(XRG3D)))  &
+    ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
+  IF (.NOT.(ASSOCIATED(XSIG3D))) &
+    ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
   !
-  DO JSV = 1,NSV_PP
-    ZTMP(:,:,:)=ABS( XSVT(:,:,:,JSV+NSV_PPBEG-1)*ZRHOT(:,:,:) )
-    WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'PPT',JSV
+  CALL  PPP2AERO(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XRHODREF, &
+                 PSIG3D=XSIG3D, PRG3D=XRG3D, PN3D=XN3D, PCTOTA=ZPTOTA)
+
+  TZFIELD = TFIELDMETADATA(                   &
+    CMNHNAME   = 'generic for aerosol modes', &
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 3,                           &
+    LTIMEDEP   = .TRUE.                       )
+
+  DO JJ=1,JPMODE
+    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'RGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_Field_write(TPFILE,TZFIELD,ZTMP)
-  END DO
-  DEALLOCATE(ZTMP)
-  DEALLOCATE(ZRHOT)
-END IF
-! Conditional sampling variables
-IF (LCONDSAMP) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = '1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_CSBEG,NSV_CSEND
-    WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'CST',JSV
+    TZFIELD%CUNITS     = 'um'
+    WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'RG (nb) AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,XRG3D(:,:,:,JJ))
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'RGAM',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-  END DO
-END IF
-!
-!  Blowing snow variables
-!
-IF(LBLOWSNOW) THEN
-  TZFIELD = TFIELDMETADATA(                                             &
-    CMNHNAME   = 'SNWSUBL3D',                                           &
-    CSTDNAME   = '',                                                    &
-    CLONGNAME  = 'SNWSUBL3D',                                           &
-    CUNITS     = 'kg m-3 s-1',                                          &
-    CDIR       = 'XY',                                                  &
-    CCOMMENT   = 'X_Y_INstantaneous 3D Drifting snow sublimation flux', &
-    NGRID      = 1,                                                     &
-    NTYPE      = TYPEREAL,                                              &
-    NDIMS      = 3,                                                     &
-    LTIMEDEP   = .TRUE.                                                 )
-  CALL IO_Field_write(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
-  !
-  ZWORK21(:,:) = 0.
-  DO JK = IKB,IKE
-    ZWORK21(:,:) = ZWORK21(:,:)+XSNWSUBL3D(:,:,JK) * &
-                  (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW*3600*24
-  END DO
-  ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit
-  !
-  TZFIELD = TFIELDMETADATA(                                 &
-    CMNHNAME   = 'COL_SNWSUBL',                             &
-    CSTDNAME   = '',                                        &
-    CLONGNAME  = 'COL_SNWSUBL',                             &
-    CUNITS     = 'mm day-1',                                &
-    CDIR       = 'XY',                                      &
-    CCOMMENT   = 'X_Y_Column Sublimation Rate (mmSWE/day)', &
-    NGRID      = 4,                                         &
-    NTYPE      = TYPEREAL,                                  &
-    NDIMS      = 2,                                         &
-    LTIMEDEP   = .TRUE.                                     )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
-  !
-  IF(.NOT.ALLOCATED(ZBET_SNW)) &
-        ALLOCATE(ZBET_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3)))
-  IF(.NOT.ALLOCATED(ZRG_SNW))  &
-    ALLOCATE(ZRG_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3)))
-  IF(.NOT.ALLOCATED(ZMA_SNW))  &
-    ALLOCATE(ZMA_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3),NBLOWSNOW3D))
-  !
-  CALL PPP2SNOW(XSVT(:,:,:,NSV_SNWBEG:NSV_SNWEND),XRHODREF,&
-               PBET3D=ZBET_SNW, PRG3D=ZRG_SNW, PM3D=ZMA_SNW)
-  !
-  TZFIELD = TFIELDMETADATA(        &
-    CMNHNAME   = 'SNWRGA',         &
-    CSTDNAME   = '',               &
-    CLONGNAME  = 'SNWRGA',         &
-    CUNITS     = 'm',              &
-    CDIR       = 'XY',             &
-    CCOMMENT   = 'RG (mean) SNOW', &
-    NGRID      = 1,                &
-    NTYPE      = TYPEREAL,         &
-    NDIMS      = 3,                &
-    LTIMEDEP   = .TRUE.            )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SNW(:,:,:))
-  !
-  TZFIELD = TFIELDMETADATA(   &
-    CMNHNAME   = 'SNWBETA',   &
-    CSTDNAME   = '',          &
-    CLONGNAME  = 'SNWBETA',   &
-    CUNITS     = 'm',         &
-    CDIR       = 'XY',        &
-    CCOMMENT   = 'BETA SNOW', &
-    NGRID      = 1,           &
-    NTYPE      = TYPEREAL,    &
-    NDIMS      = 3,           &
-    LTIMEDEP   = .TRUE.       )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZBET_SNW(:,:,:))
-  !
-  TZFIELD = TFIELDMETADATA(              &
-    CMNHNAME   = 'SNWNOA',               &
-    CSTDNAME   = '',                     &
-    CLONGNAME  = 'SNWNOA',               &
-    CUNITS     = 'm-3',                  &
-    CDIR       = 'XY',                   &
-    CCOMMENT   = 'NUM CONC SNOW (#/m3)', &
-    NGRID      = 1,                      &
-    NTYPE      = TYPEREAL,               &
-    NDIMS      = 3,                      &
-    LTIMEDEP   = .TRUE.                  )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1))
-  !
-  TZFIELD = TFIELDMETADATA(        &
-    CMNHNAME   = 'SNWMASS',        &
-    CSTDNAME   = '',               &
-    CLONGNAME  = 'SNWMASS',        &
-    CUNITS     = 'kg m-3',         &
-    CDIR       = 'XY',             &
-    CCOMMENT   = 'MASS CONC SNOW', &
-    NGRID      = 1,                &
-    NTYPE      = TYPEREAL,         &
-    NDIMS      = 3,                &
-    LTIMEDEP   = .TRUE.            )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2))
-  !
-  ZWORK21(:,:) = 0.
-  DO JK = IKB,IKE
-    ZWORK21(:,:) = ZWORK21(:,:)+ZMA_SNW(:,:,JK,2) * &
-                   (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
-  END DO
-  ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit
-  TZFIELD = TFIELDMETADATA(                                 &
-    CMNHNAME   = 'THDS',                                    &
-    CSTDNAME   = '',                                        &
-    CLONGNAME  = 'THDS',                                    &
-    CUNITS     = 'mm',                                      &
-    CDIR       = 'XY',                                      &
-    CCOMMENT   = 'X_Y_THickness of Drifting Snow (mm SWE)', &
-    NGRID      = 4,                                         &
-    NTYPE      = TYPEREAL,                                  &
-    NDIMS      = 2,                                         &
-    LTIMEDEP   = .TRUE.                                     )
-  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
-END IF
-! Lagrangian variables
-IF (LTRAJ) THEN
-  TZFIELD%CSTDNAME   = ''
-  !PW TODO: check units
-  TZFIELD%CUNITS     = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_LGBEG,NSV_LGEND
-    TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
+    TZFIELD%CUNITS     = 'um'
+    WRITE(TZFIELD%CCOMMENT,'(A20,I1)')'RG (m) AEROSOL MODE ',JJ
+    ZWORK31(:,:,:)=XRG3D(:,:,:,JJ) / (EXP(-3.*(LOG(XSIG3D(:,:,:,JJ)))**2))
+    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'N0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A20,I3.3,A4)')'X_Y_Z_','Lagrangian variable ',JSV,' (M)'
-    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-  END DO
-  ! X coordinate
-  DO JK=1,IKU
-    DO JJ=1,IJU
-      DO JI=1,IIU-1
-       ZWORK31(JI,JJ,JK)=0.5*(XXHAT(JI)+XXHAT(JI+1))
-      END DO
-      ZWORK31(IIU,JJ,JK)=2.*ZWORK31(IIU-1,JJ,JK) - ZWORK31(IIU-2,JJ,JK)
-    END DO
-  END DO
-  TZFIELD%CMNHNAME   = 'X'
-  TZFIELD%CLONGNAME  = 'X'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_X coordinate'
-  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-  ! Y coordinate
-  DO JK=1,IKU
-    DO JI=1,IIU
-      DO JJ=1,IJU-1
-        ZWORK31(JI,JJ,JK)=0.5*(XYHAT(JJ)+XYHAT(JJ+1))
-      END DO
-      ZWORK31(JI,IJU,JK)=2.*ZWORK31(JI,IJU-1,JK) - ZWORK31(JI,IJU-2,JK)
-    END DO
-  END DO
-  TZFIELD%CMNHNAME   = 'Y'
-  TZFIELD%CLONGNAME  = 'Y'
-  TZFIELD%CCOMMENT   = 'X_Y_Z_Y coordinate'
-  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-END IF
-! linox scalar variables
-IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) THEN
-  DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-!PW:BUG?: same name for all variables
-    TZFIELD%CMNHNAME   = 'LINOXT'
-    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'cm-3'
+    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,XN3D(:,:,:,JJ)*1.E-6)
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ppb'
-    TZFIELD%CDIR       = 'XY'
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','LNOX',JSV
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
-  END DO
-END IF
-IF (LELECDIAG .AND. CELEC .NE. "NONE") THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JSV = NSV_ELECBEG,NSV_ELECEND
-    TZFIELD%CMNHNAME   = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
+    TZFIELD%CUNITS     = '1'
+    WRITE(TZFIELD%CCOMMENT,'(A19,I1)')'SIGMA AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,XSIG3D(:,:,:,JJ))
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MSO4',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN 
-      TZFIELD%CUNITS     = 'C m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-    ELSE
-      TZFIELD%CUNITS     = 'm-3'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
+    TZFIELD%CUNITS     = 'ug m-3'
+    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS SO4 AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SO4,JJ))
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNO3',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'ug m-3'
+    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NO3 AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NO3,JJ))
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNH3',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'ug m-3'
+    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NH3 AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NH3,JJ))
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MH2O',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'ug m-3'
+    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS H2O AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_H2O,JJ))
+    !
+    IF (NSOA .EQ. 10) THEN
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA1',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA1 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA1,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA2',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA2 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA2,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA3',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA3 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA3,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA4',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA4 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA4,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA5',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA5 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA5,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA6',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA6 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA6,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA7',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA7 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA7,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA8',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA8 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA8,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA9',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA9 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA9,JJ))
+      !
+      WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'MSOA10',JJ
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      TZFIELD%CUNITS     = 'ug m-3'
+      WRITE(TZFIELD%CCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JJ
+      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA10,JJ))
     END IF
-    ZWORK31(:,:,:)=XSVT(:,:,:,JSV) * XRHODREF(:,:,:)  ! C/kg --> C/m3
-    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-  END DO
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MOC',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'ug m-3'
+    WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS OC AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_OC,JJ))
+    !
+    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MBC',JJ
+    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+    TZFIELD%CUNITS     = 'ug m-3'
+    WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS BC AEROSOL MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_BC,JJ))
+  ENDDO
 END IF
-! Sea Salt variables
-IF (LSALT) THEN
-  IF(.NOT.ALLOCATED(ZSIG_SLT)) &
-    ALLOCATE(ZSIG_SLT(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_SLT))
-  IF(.NOT.ALLOCATED(ZRG_SLT))  &
-    ALLOCATE(ZRG_SLT(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_SLT))
-  IF(.NOT.ALLOCATED(ZN0_SLT))  &
-    ALLOCATE(ZN0_SLT(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_SLT))
-  !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%CUNITS     = 'ppb'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+! Dust variables
+IF (LDUST) THEN
+  IF(.NOT.ALLOCATED(ZSIG_DST)) &
+    ALLOCATE(ZSIG_DST(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_DST))
+  IF(.NOT.ALLOCATED(ZRG_DST))  &
+    ALLOCATE(ZRG_DST(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_DST))
+  IF(.NOT.ALLOCATED(ZN0_DST))  &
+    ALLOCATE(ZN0_DST(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_DST))
   !
-  DO JSV = NSV_SLTBEG,NSV_SLTEND
-    TZFIELD%CMNHNAME   = TRIM(UPCASE(CSALTNAMES(JSV-NSV_SLTBEG+1)))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','SALT',JSV
+  DO JSV = NSV_DSTBEG, NSV_DSTEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
+    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUST',JSV
     CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
-  CALL PPP2SALT(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND),XRHODREF,&
-               PSIG3D=ZSIG_SLT, PRG3D=ZRG_SLT, PN3D=ZN0_SLT)
-  !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
-  !
-  DO JJ=1,NMODE_SLT
-    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTRGA',JJ
+  CALL PPP2DUST(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND),XRHODREF,&
+               PSIG3D=ZSIG_DST, PRG3D=ZRG_DST, PN3D=ZN0_DST)
+
+  TZFIELD = TFIELDMETADATA(                &
+    CMNHNAME   = 'generic for dust modes', &
+    CSTDNAME   = '',                       &
+    CDIR       = 'XY',                     &
+    NGRID      = 1,                        &
+    NTYPE      = TYPEREAL,                 &
+    NDIMS      = 3,                        &
+    LTIMEDEP   = .TRUE.                    )
+
+  DO JJ=1,NMODE_DST
+    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTRGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
-    WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) SALT MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SLT(:,:,:,JJ))
+    WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) DUST MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_DST(:,:,:,JJ))
     !
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTRGAM',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTRGAM',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
-    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) SALT MODE ',JJ
-    ZWORK31(:,:,:)=ZRG_SLT(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_SLT(:,:,:,JJ)))**2))
+    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) DUST MODE ',JJ
+    ZWORK31(:,:,:)=ZRG_DST(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_DST(:,:,:,JJ)))**2))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
-    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTN0A',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm-3'
-    WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 SALT MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_SLT(:,:,:,JJ))
+    WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 DUST MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_DST(:,:,:,JJ))
     !
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTSIGA',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTSIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
-    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA SALT MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_SLT(:,:,:,JJ))
-    !SALT MASS CONCENTRATION
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SLTMSS',JJ
+    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA DUST MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_DST(:,:,:,JJ))
+    !DUST MASS CONCENTRATION
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'DSTMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A14,I1)')'MASSCONC MODE ',JJ
-    ZWORK31(:,:,:)= ZN0_SLT(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
-       * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18 &  !um-->m
-       * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
+    ZWORK31(:,:,:)= ZN0_DST(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
+       * (ZRG_DST(:,:,:,JJ)**3)*1.d-18 &  !um-->m
+       * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-    !SALT BURDEN (g/m2)
+    !DUST BURDEN (g/m2)
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
       ZWORK31(:,:,JK) = ZWORK31(:,:,JK) *(XZZ(:,:,JK+1)-XZZ(:,:,JK))      &
@@ -1624,7 +1578,7 @@ IF (LSALT) THEN
         ENDDO
       ENDDO
     ENDDO
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTBRDN',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTBRDN',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'g m-2'
     WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
@@ -1634,33 +1588,35 @@ IF (LSALT) THEN
     TZFIELD%NDIMS      = 3
   ENDDO
 END IF
-IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
-  !
-  ZSSLTDEP=XSVT(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND)
+IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
+  DO JSV = NSV_DSTBEG, NSV_DSTEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
+    WRITE(TZFIELD%CCOMMENT,'(A,I3.3)') 'X_Y_Z_DUSTDEP', JSV
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+  END DO
   !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppb'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  ZSDSTDEP => XSVT(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND)
   !
-  DO JSV = 1,NSV_SLTDEP
-    TZFIELD%CMNHNAME   = TRIM(UPCASE(CDESLTNAMES(JSV)))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','SALTDEP',JSV
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSSLTDEP(:,:,:,JSV)*1.E9)
-  END DO
+  TZFIELD = TFIELDMETADATA(                   &
+    CMNHNAME   = 'generic for dustdep modes', &
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 3,                           &
+    LTIMEDEP   = .TRUE.                       )
   !
-  DO JJ=1,NMODE_SLT
+  DO JJ=1,NMODE_DST
     ! FOR CLOUDS
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPN0A',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 DUSTDEP MODE ',JJ
     TZFIELD%CUNITS     = 'm-3'
     ! CLOUD: CALCULATE MOMENT 3 FROM TOTAL AEROSOL MASS
-    ZWORK31(:,:,:) = ZSSLTDEP(:,:,:,JJ)         &!==>molec_{aer}/molec_{air}
+    ZWORK31(:,:,:) = ZSDSTDEP(:,:,:,JJ)         &!==>molec_{aer}/molec_{air}
                      *(XMOLARWEIGHT_DUST/XMD)   &!==>kg_{aer}/kg_{air}
                      *XRHODREF(:,:,:)           &!==>kg_{aer}/m3_{air}
                      /XDENSITY_DUST             &!==>m3_{aer}/m3_{air}
@@ -1668,45 +1624,45 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
                      /(XPI*4./3.)                !==>um3_{aer}/m3_{air}
             !==>volume 3rd moment
     !CLOUD: CALCULATE MOMENT 0 FROM DISPERSION AND MEAN RADIUS
-    ZWORK31(:,:,:) =  ZWORK31(:,:,:)/                        &
-                      ((ZRG_SLT(:,:,:,JJ)**3)*               &
-                      EXP(4.5 * LOG(ZSIG_SLT(:,:,:,JJ))**2))
+    ZWORK31(:,:,:)=  ZWORK31(:,:,:)/      &
+                    ((ZRG_DST(:,:,:,JJ)**3)*      &
+                    EXP(4.5 * LOG(ZSIG_DST(:,:,:,JJ))**2))
     !CLOUD: RETURN TO CONCENTRATION #/m3
     ZWORK31(:,:,:)= ZWORK31(:,:,:) *   XMD/ &
-                    (XAVOGADRO*XRHODREF(:,:,:))
+                     (XAVOGADRO*XRHODREF(:,:,:))
     !CLOUD:  Get number concentration (#/molec_{air}==>#/m3)
-    ZWORK31(:,:,:)=                   &
-                    ZWORK31(:,:,:)    & !#/molec_{air}
-                    * XAVOGADRO       & !==>#/mole
-                    / XMD             & !==>#/kg_{air}
-                    * XRHODREF(:,:,:)   !==>#/m3
+    ZWORK31(:,:,:)=                         &
+                    ZWORK31(:,:,:)                  & !#/molec_{air}
+                    * XAVOGADRO                     & !==>#/mole
+                    / XMD                           & !==>#/kg_{air}
+                    * XRHODREF(:,:,:)                 !==>#/m3
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! CLOUD:   DUST MASS CONCENTRATION
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'DEPMASSCONC MODE ',JJ
     TZFIELD%CUNITS     = 'ug m-3'
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
-                    * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
-                    * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
+          * (ZRG_DST(:,:,:,JJ)**3)*1.d-18               &  !um-->m
+          * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !   FOR RAIN DROPS
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPN0A',JJ+NMODE_SLT
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPN0A',JJ+NMODE_DST
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 DUSTDEP MODE ',JJ+NMODE_SLT
+    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 DUSTDEP MODE ',JJ+NMODE_DST
     TZFIELD%CUNITS     = 'm-3'
     ! RAIN: CALCULATE MOMENT 3 FROM TOTAL AEROSOL MASS
-    ZWORK31(:,:,:) = ZSSLTDEP(:,:,:,JJ+NMODE_SLT)  &!==>molec_{aer}/molec_{air}
-                     *(XMOLARWEIGHT_DUST/XMD)      &!==>kg_{aer}/kg_{air}
-                     *XRHODREF(:,:,:)              &!==>kg_{aer}/m3_{air}
-                     /XDENSITY_DUST                &!==>m3_{aer}/m3_{air}
-                     *XM3TOUM3                     &!==>um3_{aer}/m3_{air}
-                     /(XPI*4./3.)                   !==>um3_{aer}/m3_{air}
-            !==>volume 3rd moment   
+    ZWORK31(:,:,:)=ZSDSTDEP(:,:,:,JJ+NMODE_DST)  &!==>molec_{aer}/molec_{air}
+            *(XMOLARWEIGHT_DUST/XMD)             &!==>kg_{aer}/kg_{air}
+            *XRHODREF(:,:,:)                     &!==>kg_{aer}/m3_{air}
+            *(1.d0/XDENSITY_DUST)                &!==>m3_{aer}/m3_{air}
+            *XM3TOUM3                            &!==>um3_{aer}/m3_{air}
+            /(XPI*4./3.)                          !==>um3_{aer}/m3_{air}
+            !==>volume 3rd moment
     !RAIN: CALCULATE MOMENT 0 FROM DISPERSION AND MEAN RADIUS
-    ZWORK31(:,:,:)= ZWORK31(:,:,:)/                        &
-                    ((ZRG_SLT(:,:,:,JJ)**3)*               &
-                    EXP(4.5 * LOG(ZSIG_SLT(:,:,:,JJ))**2))
+    ZWORK31(:,:,:)= ZWORK31(:,:,:)/                 &
+             ((ZRG_DST(:,:,:,JJ)**3)*               &
+              EXP(4.5 * LOG(ZSIG_DST(:,:,:,JJ))**2))
     !RAIN: RETURN TO CONCENTRATION #/m3
     ZWORK31(:,:,:)= ZWORK31(:,:,:) *   XMD/ &
                     (XAVOGADRO*XRHODREF(:,:,:))
@@ -1718,78 +1674,84 @@ IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
                     * XRHODREF(:,:,:)   !==>#/m3
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! RAIN:   DUST MASS CONCENTRATION
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ+NMODE_SLT
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ+NMODE_DST
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'DEPMASSCONC MODE ',JJ+NMODE_SLT
+    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'DEPMASSCONC MODE ',JJ+NMODE_DST
     TZFIELD%CUNITS     = 'ug m-3'
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
-                    * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
-                    * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
+                    * (ZRG_DST(:,:,:,JJ)**3)*1.d-18     &  !um-->m
+                    * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
+
+  ZSDSTDEP => NULL()
 !
 END IF
-! Dust variables
-IF (LDUST) THEN
-  IF(.NOT.ALLOCATED(ZSIG_DST)) &
-    ALLOCATE(ZSIG_DST(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_DST))
-  IF(.NOT.ALLOCATED(ZRG_DST))  &
-    ALLOCATE(ZRG_DST(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_DST))
-  IF(.NOT.ALLOCATED(ZN0_DST))  &
-    ALLOCATE(ZN0_DST(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_DST))
-  !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppb'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+! Sea Salt variables
+IF (LSALT) THEN
+  IF(.NOT.ALLOCATED(ZSIG_SLT)) &
+    ALLOCATE(ZSIG_SLT(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_SLT))
+  IF(.NOT.ALLOCATED(ZRG_SLT))  &
+    ALLOCATE(ZRG_SLT(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_SLT))
+  IF(.NOT.ALLOCATED(ZN0_SLT))  &
+    ALLOCATE(ZN0_SLT(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3), NMODE_SLT))
   !
-  DO JSV = NSV_DSTBEG,NSV_DSTEND
-    TZFIELD%CMNHNAME   = TRIM(UPCASE(CDUSTNAMES(JSV-NSV_DSTBEG+1)))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUST',JSV
+  DO JSV = NSV_SLTBEG, NSV_SLTEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
+    WRITE(TZFIELD%CCOMMENT,'(A,I3.3)') 'X_Y_Z_SALT', JSV
     CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
   END DO
   !
-  CALL PPP2DUST(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND),XRHODREF,&
-               PSIG3D=ZSIG_DST, PRG3D=ZRG_DST, PN3D=ZN0_DST)
-  DO JJ=1,NMODE_DST
-    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTRGA',JJ
+  CALL PPP2SALT(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND),XRHODREF,&
+               PSIG3D=ZSIG_SLT, PRG3D=ZRG_SLT, PN3D=ZN0_SLT)
+  !
+  TZFIELD = TFIELDMETADATA(                &
+    CMNHNAME   = 'generic for salt modes', &
+    CSTDNAME   = '',                       &
+    CDIR       = 'XY',                     &
+    NGRID      = 1,                        &
+    NTYPE      = TYPEREAL,                 &
+    NDIMS      = 3,                        &
+    LTIMEDEP   = .TRUE.                    )
+  !
+  DO JJ=1,NMODE_SLT
+    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTRGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
-    WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) DUST MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_DST(:,:,:,JJ))
+    WRITE(TZFIELD%CCOMMENT,'(A18,I1)')'RG (nb) SALT MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SLT(:,:,:,JJ))
     !
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTRGAM',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTRGAM',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'um'
-    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) DUST MODE ',JJ
-    ZWORK31(:,:,:)=ZRG_DST(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_DST(:,:,:,JJ)))**2))
+    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'RG (m) SALT MODE ',JJ
+    ZWORK31(:,:,:)=ZRG_SLT(:,:,:,JJ) / (EXP(-3.*(LOG(ZSIG_SLT(:,:,:,JJ)))**2))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !
-    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'DSTN0A',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'SLTN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'm-3'
-    WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 DUST MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_DST(:,:,:,JJ))
+    WRITE(TZFIELD%CCOMMENT,'(A13,I1)')'N0 SALT MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZN0_SLT(:,:,:,JJ))
     !
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTSIGA',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTSIGA',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = '1'
-    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA DUST MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_DST(:,:,:,JJ))
-    !DUST MASS CONCENTRATION
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'DSTMSS',JJ
+    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'SIGMA SALT MODE ',JJ
+    CALL IO_Field_write(TPFILE,TZFIELD,ZSIG_SLT(:,:,:,JJ))
+    !SALT MASS CONCENTRATION
+    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SLTMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'ug m-3'
     WRITE(TZFIELD%CCOMMENT,'(A14,I1)')'MASSCONC MODE ',JJ
-    ZWORK31(:,:,:)= ZN0_DST(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
-       * (ZRG_DST(:,:,:,JJ)**3)*1.d-18 &  !um-->m
-       * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
+    ZWORK31(:,:,:)= ZN0_SLT(:,:,:,JJ)*4./3.*3.14*2500.*1e9 & !kg-->ug
+       * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18 &  !um-->m
+       * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-    !DUST BURDEN (g/m2)
+    !SALT BURDEN (g/m2)
     ZWORK21(:,:)=0.0
     DO JK=IKB,IKE
       ZWORK31(:,:,JK) = ZWORK31(:,:,JK) *(XZZ(:,:,JK+1)-XZZ(:,:,JK))      &
@@ -1802,7 +1764,7 @@ IF (LDUST) THEN
         ENDDO
       ENDDO
     ENDDO
-    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'DSTBRDN',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A7,I1)')'SLTBRDN',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     TZFIELD%CUNITS     = 'g m-2'
     WRITE(TZFIELD%CCOMMENT,'(A6,I1)')'BURDEN',JJ
@@ -1812,33 +1774,36 @@ IF (LDUST) THEN
     TZFIELD%NDIMS      = 3
   ENDDO
 END IF
-IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
+IF (LSALT.AND.LDEPOS_SLT(IMI)) THEN
   !
-  ZSDSTDEP=XSVT(:,:,:,NSV_DSTDEPBEG:NSV_DSTDEPEND)
+  DO JSV = NSV_SLTDEPBEG, NSV_SLTDEPEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
+    WRITE(TZFIELD%CCOMMENT,'(A,I3.3)') 'X_Y_Z_SALTDEP', JSV
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+  END DO
   !
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppb'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  ZSSLTDEP => XSVT(:,:,:,NSV_SLTDEPBEG:NSV_SLTDEPEND)
   !
-  DO JSV = 1,NSV_DSTDEP
-    TZFIELD%CMNHNAME   = TRIM(UPCASE(CDEDSTNAMES(JSV)))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','DUSTDEP',JSV
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSDSTDEP(:,:,:,JSV)*1.E9)
-  END DO
+  TZFIELD = TFIELDMETADATA(                   &
+    CMNHNAME   = 'generic for saltdep modes', &
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 3,                           &
+    LTIMEDEP   = .TRUE.                       )
   !
-  DO JJ=1,NMODE_DST
+  DO JJ=1,NMODE_SLT
     ! FOR CLOUDS
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPN0A',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPN0A',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 DUSTDEP MODE ',JJ
     TZFIELD%CUNITS     = 'm-3'
     ! CLOUD: CALCULATE MOMENT 3 FROM TOTAL AEROSOL MASS
-    ZWORK31(:,:,:) = ZSDSTDEP(:,:,:,JJ)         &!==>molec_{aer}/molec_{air}
+    ZWORK31(:,:,:) = ZSSLTDEP(:,:,:,JJ)         &!==>molec_{aer}/molec_{air}
                      *(XMOLARWEIGHT_DUST/XMD)   &!==>kg_{aer}/kg_{air}
                      *XRHODREF(:,:,:)           &!==>kg_{aer}/m3_{air}
                      /XDENSITY_DUST             &!==>m3_{aer}/m3_{air}
@@ -1846,45 +1811,45 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
                      /(XPI*4./3.)                !==>um3_{aer}/m3_{air}
             !==>volume 3rd moment
     !CLOUD: CALCULATE MOMENT 0 FROM DISPERSION AND MEAN RADIUS
-    ZWORK31(:,:,:)=  ZWORK31(:,:,:)/      &
-                    ((ZRG_DST(:,:,:,JJ)**3)*      &
-                    EXP(4.5 * LOG(ZSIG_DST(:,:,:,JJ))**2))
+    ZWORK31(:,:,:) =  ZWORK31(:,:,:)/                        &
+                      ((ZRG_SLT(:,:,:,JJ)**3)*               &
+                      EXP(4.5 * LOG(ZSIG_SLT(:,:,:,JJ))**2))
     !CLOUD: RETURN TO CONCENTRATION #/m3
     ZWORK31(:,:,:)= ZWORK31(:,:,:) *   XMD/ &
-                     (XAVOGADRO*XRHODREF(:,:,:))
+                    (XAVOGADRO*XRHODREF(:,:,:))
     !CLOUD:  Get number concentration (#/molec_{air}==>#/m3)
-    ZWORK31(:,:,:)=                         &
-                    ZWORK31(:,:,:)                  & !#/molec_{air}
-                    * XAVOGADRO                     & !==>#/mole
-                    / XMD                           & !==>#/kg_{air}
-                    * XRHODREF(:,:,:)                 !==>#/m3  
+    ZWORK31(:,:,:)=                   &
+                    ZWORK31(:,:,:)    & !#/molec_{air}
+                    * XAVOGADRO       & !==>#/mole
+                    / XMD             & !==>#/kg_{air}
+                    * XRHODREF(:,:,:)   !==>#/m3
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! CLOUD:   DUST MASS CONCENTRATION
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
     WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'DEPMASSCONC MODE ',JJ
     TZFIELD%CUNITS     = 'ug m-3'
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
-          * (ZRG_DST(:,:,:,JJ)**3)*1.d-18               &  !um-->m
-          * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
+                    * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
+                    * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     !   FOR RAIN DROPS
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPN0A',JJ+NMODE_DST
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPN0A',JJ+NMODE_SLT
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 DUSTDEP MODE ',JJ+NMODE_DST
+    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 DUSTDEP MODE ',JJ+NMODE_SLT
     TZFIELD%CUNITS     = 'm-3'
     ! RAIN: CALCULATE MOMENT 3 FROM TOTAL AEROSOL MASS
-    ZWORK31(:,:,:)=ZSDSTDEP(:,:,:,JJ+NMODE_DST)  &!==>molec_{aer}/molec_{air}
-            *(XMOLARWEIGHT_DUST/XMD)             &!==>kg_{aer}/kg_{air}
-            *XRHODREF(:,:,:)                     &!==>kg_{aer}/m3_{air}
-            *(1.d0/XDENSITY_DUST)                &!==>m3_{aer}/m3_{air}
-            *XM3TOUM3                            &!==>um3_{aer}/m3_{air}
-            /(XPI*4./3.)                          !==>um3_{aer}/m3_{air}
-            !==>volume 3rd moment   
+    ZWORK31(:,:,:) = ZSSLTDEP(:,:,:,JJ+NMODE_SLT)  &!==>molec_{aer}/molec_{air}
+                     *(XMOLARWEIGHT_DUST/XMD)      &!==>kg_{aer}/kg_{air}
+                     *XRHODREF(:,:,:)              &!==>kg_{aer}/m3_{air}
+                     /XDENSITY_DUST                &!==>m3_{aer}/m3_{air}
+                     *XM3TOUM3                     &!==>um3_{aer}/m3_{air}
+                     /(XPI*4./3.)                   !==>um3_{aer}/m3_{air}
+            !==>volume 3rd moment
     !RAIN: CALCULATE MOMENT 0 FROM DISPERSION AND MEAN RADIUS
-    ZWORK31(:,:,:)= ZWORK31(:,:,:)/                 &
-             ((ZRG_DST(:,:,:,JJ)**3)*               &
-              EXP(4.5 * LOG(ZSIG_DST(:,:,:,JJ))**2))
+    ZWORK31(:,:,:)= ZWORK31(:,:,:)/                        &
+                    ((ZRG_SLT(:,:,:,JJ)**3)*               &
+                    EXP(4.5 * LOG(ZSIG_SLT(:,:,:,JJ))**2))
     !RAIN: RETURN TO CONCENTRATION #/m3
     ZWORK31(:,:,:)= ZWORK31(:,:,:) *   XMD/ &
                     (XAVOGADRO*XRHODREF(:,:,:))
@@ -1896,167 +1861,147 @@ IF (LDUST.AND.LDEPOS_DST(IMI)) THEN
                     * XRHODREF(:,:,:)   !==>#/m3
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
     ! RAIN:   DUST MASS CONCENTRATION
-    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'DSTDEPMSS',JJ+NMODE_DST
+    WRITE(TZFIELD%CMNHNAME,'(A9,I1)')'SLTDEPMSS',JJ+NMODE_SLT
     TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'DEPMASSCONC MODE ',JJ+NMODE_DST
+    WRITE(TZFIELD%CCOMMENT,'(A17,I1)')'DEPMASSCONC MODE ',JJ+NMODE_SLT
     TZFIELD%CUNITS     = 'ug m-3'
     ZWORK31(:,:,:)= ZWORK31(:,:,:)*4./3.*3.14*2500.*1e9 & !kg-->ug
-                    * (ZRG_DST(:,:,:,JJ)**3)*1.d-18     &  !um-->m
-                    * exp(4.5*log(ZSIG_DST(:,:,:,JJ))*log(ZSIG_DST(:,:,:,JJ)))
+                    * (ZRG_SLT(:,:,:,JJ)**3)*1.d-18     &  !um-->m
+                    * exp(4.5*log(ZSIG_SLT(:,:,:,JJ))*log(ZSIG_SLT(:,:,:,JJ)))
     CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
   END DO
+
+  ZSSLTDEP => NULL()
 !
 END IF
-! Aerosol
-IF ((LCHEMDIAG).AND.(LORILAM).AND.(LUSECHEM)) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppb'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+!
+!  Blowing snow variables
+!
+IF(LBLOWSNOW) THEN
+  TZFIELD = TFIELDMETADATA(                                             &
+    CMNHNAME   = 'SNWSUBL3D',                                           &
+    CSTDNAME   = '',                                                    &
+    CLONGNAME  = 'SNWSUBL3D',                                           &
+    CUNITS     = 'kg m-3 s-1',                                          &
+    CDIR       = 'XY',                                                  &
+    CCOMMENT   = 'X_Y_INstantaneous 3D Drifting snow sublimation flux', &
+    NGRID      = 1,                                                     &
+    NTYPE      = TYPEREAL,                                              &
+    NDIMS      = 3,                                                     &
+    LTIMEDEP   = .TRUE.                                                 )
+  CALL IO_Field_write(TPFILE,TZFIELD,XSNWSUBL3D(:,:,:))
   !
-  DO JSV = NSV_AERBEG,NSV_AEREND
-    TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A4,I3.3)')'X_Y_Z_','AERO',JSV
-    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+  ZWORK21(:,:) = 0.
+  DO JK = IKB,IKE
+    ZWORK21(:,:) = ZWORK21(:,:)+XSNWSUBL3D(:,:,JK) * &
+                  (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW*3600*24
   END DO
+  ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit
   !
-  IF (.NOT.(ASSOCIATED(XN3D)))   &
-    ALLOCATE(XN3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
-  IF (.NOT.(ASSOCIATED(XRG3D)))  &
-    ALLOCATE(XRG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
-  IF (.NOT.(ASSOCIATED(XSIG3D))) &
-    ALLOCATE(XSIG3D(SIZE(XSVT,1),SIZE(XSVT,2),SIZE(XSVT,3),JPMODE))
+  TZFIELD = TFIELDMETADATA(                                 &
+    CMNHNAME   = 'COL_SNWSUBL',                             &
+    CSTDNAME   = '',                                        &
+    CLONGNAME  = 'COL_SNWSUBL',                             &
+    CUNITS     = 'mm day-1',                                &
+    CDIR       = 'XY',                                      &
+    CCOMMENT   = 'X_Y_Column Sublimation Rate (mmSWE/day)', &
+    NGRID      = 4,                                         &
+    NTYPE      = TYPEREAL,                                  &
+    NDIMS      = 2,                                         &
+    LTIMEDEP   = .TRUE.                                     )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
   !
-  CALL  PPP2AERO(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XRHODREF, &
-                 PSIG3D=XSIG3D, PRG3D=XRG3D, PN3D=XN3D, PCTOTA=ZPTOTA) 
-  DO JJ=1,JPMODE
-    TZFIELD%CMNHNAME   = 'RGA'
-    TZFIELD%CLONGNAME  = 'RGA'
-    TZFIELD%CUNITS     = 'um'
-    WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'RG (nb) AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,XRG3D(:,:,:,JJ))
-    !
-    TZFIELD%CMNHNAME   = 'RGAM'
-    TZFIELD%CLONGNAME  = 'RGAM'
-    TZFIELD%CUNITS     = 'um'
-    WRITE(TZFIELD%CCOMMENT,'(A20,I1)')'RG (m) AEROSOL MODE ',JJ
-    ZWORK31(:,:,:)=XRG3D(:,:,:,JJ) / (EXP(-3.*(LOG(XSIG3D(:,:,:,JJ)))**2))
-    CALL IO_Field_write(TPFILE,TZFIELD,ZWORK31)
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'N0A',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'cm-3'
-    WRITE(TZFIELD%CCOMMENT,'(A16,I1)')'N0 AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,XN3D(:,:,:,JJ)*1.E-6)
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'SIGA',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = '1'
-    WRITE(TZFIELD%CCOMMENT,'(A19,I1)')'SIGMA AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,XSIG3D(:,:,:,JJ))
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MSO4',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ug m-3'
-    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS SO4 AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SO4,JJ))
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNO3',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ug m-3'
-    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NO3 AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NO3,JJ))
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MNH3',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ug m-3'
-    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS NH3 AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_NH3,JJ))
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A4,I1)')'MH2O',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ug m-3'
-    WRITE(TZFIELD%CCOMMENT,'(A22,I1)')'MASS H2O AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_H2O,JJ))
-    !
-    IF (NSOA .EQ. 10) THEN
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA1',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA1 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA1,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA2',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA2 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA2,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA3',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA3 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA3,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA4',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA4 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA4,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA5',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA5 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA5,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA6',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA6 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA6,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA7',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA7 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA7,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA8',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA8 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA8,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A5,I1)')'MSOA9',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A23,I1)')'MASS SOA9 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA9,JJ))
-      !
-      WRITE(TZFIELD%CMNHNAME,'(A6,I1)')'MSOA10',JJ
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ug m-3'
-      WRITE(TZFIELD%CCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JJ
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_SOA10,JJ))
-    END IF
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MOC',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ug m-3'
-    WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS OC AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_OC,JJ))
-    !
-    WRITE(TZFIELD%CMNHNAME,'(A3,I1)')'MBC',JJ
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    TZFIELD%CUNITS     = 'ug m-3'
-    WRITE(TZFIELD%CCOMMENT,'(A21,I1)')'MASS BC AEROSOL MODE ',JJ
-    CALL IO_Field_write(TPFILE,TZFIELD,ZPTOTA(:,:,:,JP_AER_BC,JJ))
-  ENDDO
+  IF(.NOT.ALLOCATED(ZBET_SNW)) &
+        ALLOCATE(ZBET_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3)))
+  IF(.NOT.ALLOCATED(ZRG_SNW))  &
+    ALLOCATE(ZRG_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3)))
+  IF(.NOT.ALLOCATED(ZMA_SNW))  &
+    ALLOCATE(ZMA_SNW(SIZE(XSVT,1), SIZE(XSVT,2), SIZE(XSVT,3),NBLOWSNOW3D))
+  !
+  CALL PPP2SNOW(XSVT(:,:,:,NSV_SNWBEG:NSV_SNWEND),XRHODREF,&
+               PBET3D=ZBET_SNW, PRG3D=ZRG_SNW, PM3D=ZMA_SNW)
+  !
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'SNWRGA',         &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'SNWRGA',         &
+    CUNITS     = 'm',              &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'RG (mean) SNOW', &
+    NGRID      = 1,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZRG_SNW(:,:,:))
+  !
+  TZFIELD = TFIELDMETADATA(   &
+    CMNHNAME   = 'SNWBETA',   &
+    CSTDNAME   = '',          &
+    CLONGNAME  = 'SNWBETA',   &
+    CUNITS     = 'm',         &
+    CDIR       = 'XY',        &
+    CCOMMENT   = 'BETA SNOW', &
+    NGRID      = 1,           &
+    NTYPE      = TYPEREAL,    &
+    NDIMS      = 3,           &
+    LTIMEDEP   = .TRUE.       )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZBET_SNW(:,:,:))
+  !
+  TZFIELD = TFIELDMETADATA(              &
+    CMNHNAME   = 'SNWNOA',               &
+    CSTDNAME   = '',                     &
+    CLONGNAME  = 'SNWNOA',               &
+    CUNITS     = 'm-3',                  &
+    CDIR       = 'XY',                   &
+    CCOMMENT   = 'NUM CONC SNOW (#/m3)', &
+    NGRID      = 1,                      &
+    NTYPE      = TYPEREAL,               &
+    NDIMS      = 3,                      &
+    LTIMEDEP   = .TRUE.                  )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,1))
+  !
+  TZFIELD = TFIELDMETADATA(        &
+    CMNHNAME   = 'SNWMASS',        &
+    CSTDNAME   = '',               &
+    CLONGNAME  = 'SNWMASS',        &
+    CUNITS     = 'kg m-3',         &
+    CDIR       = 'XY',             &
+    CCOMMENT   = 'MASS CONC SNOW', &
+    NGRID      = 1,                &
+    NTYPE      = TYPEREAL,         &
+    NDIMS      = 3,                &
+    LTIMEDEP   = .TRUE.            )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZMA_SNW(:,:,:,2))
+  !
+  ZWORK21(:,:) = 0.
+  DO JK = IKB,IKE
+    ZWORK21(:,:) = ZWORK21(:,:)+ZMA_SNW(:,:,JK,2) * &
+                   (XZZ(:,:,JK+1)-XZZ(:,:,JK))/XRHOLW
+  END DO
+  ZWORK21(:,:) = ZWORK21(:,:)*1000. ! vapor water in mm unit
+  TZFIELD = TFIELDMETADATA(                                 &
+    CMNHNAME   = 'THDS',                                    &
+    CSTDNAME   = '',                                        &
+    CLONGNAME  = 'THDS',                                    &
+    CUNITS     = 'mm',                                      &
+    CDIR       = 'XY',                                      &
+    CCOMMENT   = 'X_Y_THickness of Drifting Snow (mm SWE)', &
+    NGRID      = 4,                                         &
+    NTYPE      = TYPEREAL,                                  &
+    NDIMS      = 2,                                         &
+    LTIMEDEP   = .TRUE.                                     )
+  CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21(:,:))
+END IF
+! linox scalar variables
+IF (.NOT.(LUSECHEM .OR. LCHEMDIAG) .AND. LCH_CONV_LINOX) THEN
+  DO JSV = NSV_LNOXBEG, NSV_LNOXEND
+    TZFIELD = TSVLIST(JSV)
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
+    TZFIELD%CUNITS    = 'ppb'
+    WRITE(TZFIELD%CCOMMENT,'(A,I3.3)') 'X_Y_Z_LNOX', JSV
+    CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV)*1.E9)
+  END DO
 END IF
 !
 !* Large Scale variables
@@ -3422,7 +3367,7 @@ IF (LTOTAL_PR .AND. SIZE (XACPRR)>0 ) THEN
   !large-scale model
   IF (LMEAN_PR .AND. LUSERR) THEN
     TZFIELD = TFIELDMETADATA(                                               &
-      CSTDNAME   = 'generic LS_ACTOPR',                                     & !Temporary name to ease identification
+      CMNHNAME   = 'generic LS_ACTOPR',                                     & !Temporary name to ease identification
       CUNITS     = 'mm',                                                    &
       CDIR       = 'XY',                                                    &
       CCOMMENT   = 'X_Y_Large Scale ACccumulated TOtal Precipitation Rate', &
@@ -4221,12 +4166,6 @@ ELSEIF (CBLTOP == 'RICHA') THEN
   !
   DEALLOCATE(ZRIB,ZSHMIX)
 ENDIF
-  ! used before 5-3-1 version
-  !
-  !ZGAMREF=3.5E-3 ! K/m
-  !ZWORK31(:,:,1:IKU-1)=0.5*(XZZ(:,:,1:IKU-1)+XZZ(:,:,2:IKU))
-  !ZWORK31(:,:,IKU)=2.*ZWORK31(:,:,IKU-1)-ZWORK31(:,:,IKU-2)
-  !CALL FREE_ATM_PROFILE(ZTHETAV,ZWORK31,XZS,XZSMT,ZGAMREF,ZWORK32,ZWORK33)
 !
 IF (ALLOCATED(ZTHETAV)) DEALLOCATE(ZTHETAV)
 !
diff --git a/src/MNH/write_lfifm1_for_diag_supp.f90 b/src/MNH/write_lfifm1_for_diag_supp.f90
index 72c472fc49504a74fa47dd44e2328d83d00bd235..fe258339c24f28ce5f521bd18685baccdd86b2d8 100644
--- a/src/MNH/write_lfifm1_for_diag_supp.f90
+++ b/src/MNH/write_lfifm1_for_diag_supp.f90
@@ -90,65 +90,53 @@ END MODULE MODI_WRITE_LFIFM1_FOR_DIAG_SUPP
 !!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
 !!      J.-P. Chaboureau 07/2018 bug fix on XEMIS when calling CALL_RTTOVxx
 !!      J.-P. Chaboureau 09/04/2021 add the call to RTTOV13
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODE_ll
-USE MODD_CST
-use modd_field,           only: NMNHDIM_UNUSED, tfieldmetadata, tfieldlist, TYPEINT, TYPEREAL
-USE MODD_IO, ONLY: TFILEDATA
-USE MODD_PARAMETERS
-USE MODD_CONF_n
-USE MODD_CONF
-USE MODD_DEEP_CONVECTION_n
-USE MODD_DIM_n
-USE MODD_FIELD_n
-USE MODD_GRID_n
-USE MODD_LUNIT_n
-USE MODD_PARAM_n
-USE MODD_PARAM_KAFR_n
-USE MODD_PARAM_RAD_n
-USE MODD_RADIATIONS_n
-USE MODD_TIME_n
-USE MODD_TURB_n
-USE MODD_REF_n, ONLY: XRHODREF
-USE MODD_DIAG_FLAG
-USE MODD_NSV, ONLY : NSV,NSV_USER,NSV_C2R2BEG,NSV_C2R2END,             &
-                     NSV_C1R3BEG, NSV_C1R3END,NSV_ELECBEG,NSV_ELECEND, &
-                     NSV_CHEMBEG, NSV_CHEMEND,NSV_LGBEG,  NSV_LGEND
-USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_DUST,            ONLY: LDUST
-USE MODD_SALT,            ONLY: LSALT
-USE MODD_CH_AEROSOL,      ONLY: LORILAM
-USE MODD_CH_MNHC_n
-USE MODD_CH_BUDGET_n
-USE MODD_CH_PRODLOSSTOT_n
+USE MODD_CH_AEROSOL,        ONLY: LORILAM
+USE MODD_CH_BUDGET_n,       ONLY: CNAMES_BUDGET, NEQ_BUDGET, XTCHEM
 USE MODD_CH_FLX_n,          ONLY: XCHFLX
-USE MODD_RAD_TRANSF
-USE MODD_DIAG_IN_RUN, ONLY: XCURRENT_ZON10M,XCURRENT_MER10M,           &
-                            XCURRENT_SFCO2,XCURRENT_SWD, XCURRENT_LWD, &
-                            XCURRENT_SWU, XCURRENT_LWU
-!
-USE MODD_DYN_n
-USE MODD_CURVCOR_n
-USE MODD_METRICS_n
-USE MODD_DIAG_BLANK
-USE MODI_PINTER
-USE MODI_ZINTER
-USE MODI_GRADIENT_M
-USE MODI_GRADIENT_W
-USE MODI_GRADIENT_U
-USE MODI_GRADIENT_V
-USE MODI_GRADIENT_UV
-!
-USE MODI_SHUMAN
-USE MODE_NEIGHBORAVG
+USE MODD_CH_PRODLOSSTOT_n,  ONLY: CNAMES_PRODLOSST, NEQ_PLT, XLOSS, XPROD
+USE MODD_CST,               ONLY: XCPD, XP00, XRD, XTT
+USE MODD_CURVCOR_n,         ONLY: XCORIOZ
+USE MODD_DIAG_IN_RUN,       ONLY: XCURRENT_ZON10M, XCURRENT_MER10M,           &
+                                  XCURRENT_SFCO2, XCURRENT_SWD, XCURRENT_LWD, &
+                                  XCURRENT_SWU, XCURRENT_LWU
+USE MODD_DUST,              ONLY: LDUST
+use modd_field,             only: NMNHDIM_UNUSED, tfieldmetadata, tfieldlist, TYPEINT, TYPEREAL
+USE MODD_IO,                ONLY: TFILEDATA
+USE MODD_CONF,              ONLY: LCARTESIAN
+USE MODD_CONF_n,            ONLY: LUSERC, LUSERI, NRR
+USE MODD_DEEP_CONVECTION_n, ONLY: NCLBASCONV, NCLTOPCONV, XCAPE, XDMFCONV, XDRCCONV, XDRICONV, XDRVCONV, &
+                                  XDTHCONV, XDSVCONV, XMFCONV, XPRLFLXCONV, XPRSFLXCONV, XUMFCONV
+USE MODD_DIAG_FLAG,         ONLY: CRAD_SAT, LCHEMDIAG, LCLD_COV, LCOARSE, LISOAL, LISOPR, LISOTH, LRAD_SUBG_COND, &
+                                  NCONV_KF, NDXCOARSE, NRAD_3D, NRTTOVINFO, XISOAL, XISOPR, XISOTH
+USE MODD_FIELD_n,           ONLY: XCLDFR, XPABST, XSIGS, XTHT, XTKET, XRT, XUT, XVT, XWT
+USE MODD_GRID_n,            ONLY: XZHAT, XZZ
+USE MODD_METRICS_n,         ONLY: XDXX, XDYY, XDZX, XDZY, XDZZ
+USE MODD_NSV,               ONLY: NSV, NSV_CHEMBEG, NSV_CHEMEND, TSVLIST
+USE MODD_PARAMETERS,        ONLY: JPVEXT, NUNDEF, XUNDEF
+USE MODD_PARAM_KAFR_n,      ONLY: LCHTRANS
+USE MODD_PARAM_n,           ONLY: CRAD, CSURF
+USE MODD_PARAM_RAD_n,       only: NRAD_COLNBR
+USE MODD_RADIATIONS_N,      ONLY: NCLEARCOL_TM1, NDLON, NFLEV, NSTATM,                                  &
+                                  XAER, XAZIM, XCCO2, XDIR_ALB, XDIRFLASWD, XDIRSRFSWD, XDTHRAD, XEMIS, &
+                                  XFLALWD, XSCA_ALB, XSCAFLASWD, XSTATM, XTSRAD, XZENITH
+USE MODD_RAD_TRANSF,        ONLY: JPGEOST
+USE MODD_REF_n,             ONLY: XRHODREF
+USE MODD_SALT,              ONLY: LSALT
+USE MODD_TIME_n,            ONLY: TDTCUR
+USE MODD_TURB_n,            ONLY: LSIGMAS, LSUBG_COND, VSIGQSAT
+
+use mode_field,             only: Find_field_id_from_mnhname
+USE MODE_IO_FIELD_WRITE,    only: IO_Field_write
+USE MODE_MSG
+USE MODE_NEIGHBORAVG,       ONLY: BLOCKAVG, MOVINGAVG
+USE MODE_TOOLS_LL,          ONLY: GET_INDICE_ll
+
 #ifdef MNH_RTTOV_8
 USE MODI_CALL_RTTOV8
 #endif
@@ -158,14 +146,18 @@ USE MODI_CALL_RTTOV11
 #ifdef MNH_RTTOV_13
 USE MODI_CALL_RTTOV13
 #endif
+USE MODI_GET_SURF_UNDEF
+USE MODI_GRADIENT_M
+USE MODI_GRADIENT_U
+USE MODI_GRADIENT_UV
+USE MODI_GRADIENT_V
+USE MODI_GRADIENT_W
+USE MODI_PINTER
+USE MODI_SHUMAN
 USE MODI_RADTR_SATEL
 USE MODI_UV_TO_ZONAL_AND_MERID
-!
-use mode_field,          only: Find_field_id_from_mnhname
-USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-!
-USE MODI_GET_SURF_UNDEF
-!
+USE MODI_ZINTER
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -246,7 +238,6 @@ ZTEMP(:,:,:)=XTHT(:,:,:)*(XPABST(:,:,:)/ XP00) **(XRD/XCPD)
 !* Diagnostic variables related to deep convection
 !
 IF (NCONV_KF >= 0) THEN
-!
   CALL IO_Field_write(TPFILE,'CAPE',XCAPE)
 !
   ! top height (km) of convective clouds
@@ -288,121 +279,35 @@ IF (NCONV_KF >= 0) THEN
     NDIMS      = 2,                                &
     LTIMEDEP   = .TRUE.                            )
   CALL IO_Field_write(TPFILE,TZFIELD,ZWORK21)
-!
 END IF
+
 IF (NCONV_KF >= 1) THEN
-!
   CALL IO_Field_write(TPFILE,'DTHCONV',XDTHCONV)
   CALL IO_Field_write(TPFILE,'DRVCONV',XDRVCONV)
   CALL IO_Field_write(TPFILE,'DRCCONV',XDRCCONV)
   CALL IO_Field_write(TPFILE,'DRICONV',XDRICONV)
-!  
+!
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
-    ! User scalar variables
-    IF (NSV_USER>0) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 's-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = 1, NSV_USER
-        WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A2,I3.3,A20)')'X_Y_Z_','SV',JSV,' CONVective tendency'
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-    ! microphysical C2R2 scheme scalar variables
-    IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 's-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_C2R2BEG, NSV_C2R2END
-        TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//' CONVective tendency'
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-    ! microphysical C3R5 scheme additional scalar variables
-    IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 's-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_C1R3BEG,NSV_C1R3END
-        TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//' CONVective tendency'
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-    ! electrical scalar variables
-    IF (NSV_ELECEND>=NSV_ELECBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 's-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_ELECBEG,NSV_ELECEND
-        TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//' CONVective tendency'
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-    ! chemical scalar variables
-    IF (NSV_CHEMEND>=NSV_CHEMBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 's-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_CHEMBEG, NSV_CHEMEND
-        TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))//' CONVective tendency'
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-    ! lagrangian variables
-    IF (NSV_LGEND>=NSV_LGBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 's-1'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_LGBEG,NSV_LGEND
-        TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//' CONVective tendency'
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
+   ! scalar variables are recorded
+   ! individually in the file
+    TZFIELD = TFIELDMETADATA(     &
+      CMNHNAME   = 'generic for DSVCONV', & !Temporary name to ease identification
+      CUNITS     = 's-1',         &
+      CDIR       = 'XY',          &
+      NGRID      = 1,             &
+      NTYPE      = TYPEREAL,      &
+      NDIMS      = 3,             &
+      LTIMEDEP   = .TRUE.         )
+
+    DO JSV = 1, NSV
+      TZFIELD%CMNHNAME   = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CMNHNAME )
+      TZFIELD%CLONGNAME  = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CLONGNAME )
+      TZFIELD%CCOMMENT   = 'Convective tendency for ' // TRIM( TSVLIST(JSV)%CMNHNAME )
+      CALL IO_Field_write( TPFILE, TZFIELD, XDSVCONV(:,:,:,JSV) )
+    END DO
   END IF
-!
 END IF
+
 IF (NCONV_KF >= 2) THEN
   CALL IO_Field_write(TPFILE,'PRLFLXCONV',XPRLFLXCONV)
   CALL IO_Field_write(TPFILE,'PRSFLXCONV',XPRSFLXCONV)
@@ -762,22 +667,20 @@ END IF
 !
 !-------------------------------------------------------------------------------
 ! Net surface gaseous fluxes
-!print*,'LCHEMDIAG, NSV_CHEMBEG, NSV_CHEMEND=',&
-!LCHEMDIAG, NSV_CHEMBEG, NSV_CHEMEND
-
 IF (LCHEMDIAG) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppb m s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 2
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(     &
+    CMNHNAME   = 'generic for net chemical flux', & !Temporary name to ease identification
+    CUNITS     = 'ppb m s-1',   &
+    CDIR       = 'XY',          &
+    NGRID      = 1,             &
+    NTYPE      = TYPEREAL,      &
+    NDIMS      = 2,             &
+    LTIMEDEP   = .TRUE.         )
   !
   DO JSV = NSV_CHEMBEG, NSV_CHEMEND
-    TZFIELD%CMNHNAME   = 'FLX_'//TRIM(CNAMES(JSV-NSV_CHEMBEG+1))
-    TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-    WRITE(TZFIELD%CCOMMENT,'(A6,A,A)')'X_Y_Z_',TRIM(CNAMES(JSV-NSV_CHEMBEG+1)),' Net chemical flux'
+    TZFIELD%CMNHNAME  = 'FLX_' // TRIM( TSVLIST(JSV)%CMNHNAME )
+    TZFIELD%CLONGNAME = 'FLX_' // TRIM( TSVLIST(JSV)%CLONGNAME )
+    WRITE(TZFIELD%CCOMMENT,'(A6,A,A)')'X_Y_Z_',TRIM( TSVLIST(JSV)%CMNHNAME ),' Net chemical flux'
     CALL IO_Field_write(TPFILE,TZFIELD,XCHFLX(:,:,JSV-NSV_CHEMBEG+1) * 1E9)
   END DO
 END IF
@@ -1575,14 +1478,15 @@ END IF
 !               -------------------------------
 !
 IF (NEQ_BUDGET>0) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  !
-  TZFIELD%CUNITS     = 'ppv s-1'
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 4
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                   &
+    CMNHNAME   = 'generic for CNAMES_BUDGET', & !Temporary name to ease identification
+    CSTDNAME   = '',                          &
+    CUNITS     = 'ppv s-1',                   &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 4,                           &
+    LTIMEDEP   = .TRUE.                       )
   !
   DO JSV = 1, NEQ_BUDGET
     TZFIELD%CMNHNAME   = TRIM(CNAMES_BUDGET(JSV))//'_BUDGET'
@@ -1591,9 +1495,15 @@ IF (NEQ_BUDGET>0) THEN
     CALL IO_Field_write(TPFILE,TZFIELD,XTCHEM(JSV)%XB_REAC(:,:,:,:))
   END DO
   !
-  TZFIELD%CUNITS     = ''
-  TZFIELD%NTYPE      = TYPEINT
-  TZFIELD%NDIMS      = 1
+  TZFIELD = TFIELDMETADATA(                   &
+    CMNHNAME   = 'generic for reaction list', & !Temporary name to ease identification
+    CSTDNAME   = '',                          &
+    CUNITS     = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEINT,                     &
+    NDIMS      = 1,                           &
+    LTIMEDEP   = .TRUE.                       )
   !
   DO JSV=1, NEQ_BUDGET
     TZFIELD%CMNHNAME   = TRIM(CNAMES_BUDGET(JSV))//'_CHREACLIST'
@@ -1606,13 +1516,15 @@ END IF
 !
 ! chemical prod/loss terms
 IF (NEQ_PLT>0) THEN
-  TZFIELD%CSTDNAME   = ''
-  TZFIELD%CUNITS     = 'ppv s-1'
-  TZFIELD%CDIR       = 'XY'
-  TZFIELD%NGRID      = 1
-  TZFIELD%NTYPE      = TYPEREAL
-  TZFIELD%NDIMS      = 3
-  TZFIELD%LTIMEDEP   = .TRUE.
+  TZFIELD = TFIELDMETADATA(                      &
+    CMNHNAME   = 'generic for CNAMES_PRODLOSST', & !Temporary name to ease identification
+    CSTDNAME   = '',                             &
+    CUNITS     = 'ppv s-1',                      &
+    CDIR       = 'XY',                           &
+    NGRID      = 1,                              &
+    NTYPE      = TYPEREAL,                       &
+    NDIMS      = 3,                              &
+    LTIMEDEP   = .TRUE.                          )
   !
   DO JSV = 1, NEQ_PLT
     TZFIELD%CMNHNAME   = TRIM(CNAMES_PRODLOSST(JSV))//'_PROD'
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index a6e257254e49c4d8e41a0418d07390c6c308bb60..1a6694ce0a36402f5c39a0b899f8701148f8475b 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -153,14 +153,12 @@ END MODULE MODI_WRITE_LFIFM_n
 !!       M.Tomasini    06/12 2D west african monsoon: nesting for ADV forcing writing
 !!       Pialat/Tulet  15/02/2012 add ForeFire variables
 !!       J. Escobar    Mars 2014 , missing YDIR="XY" in 1.6 for tendencies fields 
-!!       J.escobar & M.Leriche 23/06/2014 Pb with JSA increment versus ini_nsv order initialization 
 !!       P. Tulet      Nov 2014 accumulated moles of aqueous species that fall at the surface
 !!       M.Faivre      2014
 !!       C.Lac         Dec.2014 writing past wind fields for centred advection
 !!       J.-P. Pinty   Jan 2015 add LNOx and flash map diagnostics
 !!       J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1
 !!       P. Tulet & M. Leriche    Nov 2015 add mean pH value in the rain at the surface
-!!       J.escobar     04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization
 !!       Modification    01/2016  (JP Pinty) Add LIMA
 !!       M.Mazoyer     04/16 : Add supersaturation fields
 !  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
@@ -180,115 +178,105 @@ END MODULE MODI_WRITE_LFIFM_n
 !  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
 !  P. Wautelet 11/03/2021: bugfix: correct name for NSV_LIMA_IMM_NUCL
 !  J.L. Redelsperger 03/2021: add OCEAN and auto-coupled O-A LES cases
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
 !
-USE MODD_DIM_n
+USE MODD_2D_FRC
+USE MODD_ADVFRC_n
+USE MODD_ADV_n,            ONLY: CUVW_ADV_SCHEME, XRTKEMS, CTEMP_SCHEME, LSPLIT_CFL
+USE MODD_AIRCRAFT_BALLOON, ONLY: LFLYER
+USE MODD_BLOWSNOW
+USE MODD_BLOWSNOW_n
+USE MODD_CH_AEROSOL
+USE MODD_CH_M9_n
+USE MODD_CH_MNHC_n,       ONLY: LUSECHEM,LCH_CONV_LINOX, &
+                                LUSECHAQ,LUSECHIC,LCH_PH, XCH_PHINIT
+USE MODD_CH_PH_n
+USE MODD_CLOUDPAR
+USE MODD_CONDSAMP
 USE MODD_CONF
 USE MODD_CONF_n
-use modd_field,       only: NMNHDIM_UNUSED, tfieldmetadata, tfieldlist, TYPEDATE, TYPEINT, TYPELOG, TYPEREAL
-USE MODD_GRID
-USE MODD_GRID_n
-USE MODD_TIME
-USE MODD_TIME_n
-USE MODD_FIELD_n
-USE MODD_MEAN_FIELD_n
+USE MODD_CST
+USE MODD_DEEP_CONVECTION_n
+USE MODD_DEF_EDDY_FLUX_n
+USE MODD_DEF_EDDYUV_FLUX_n
+USE MODD_DIM_n
 USE MODD_DUMMY_GR_FIELD_n
-USE MODD_LSFIELD_n
+USE MODD_DUST
 USE MODD_DYN_n
-USE MODD_PARAM_n
-USE MODD_REF
-USE MODD_LUNIT_n
-USE MODD_TURB_n
-USE MODD_RADIATIONS_n,   ONLY : XDTHRAD, NCLEARCOL_TM1, XFLALWD, &
-                                XZENITH, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD, &
-                                XDIRSRFSWD, XSCAFLASWD, XDIRFLASWD, XAZIM
-USE MODD_REF_n,  ONLY : XRHODREF
-USE MODD_FRC
-USE MODD_PRECIP_n
+USE MODD_ELEC_DESCR,      ONLY: LLNOX_EXPLICIT
+USE MODD_ELEC_FLASH
 USE MODD_ELEC_n
-USE MODD_CST
-USE MODD_CLOUDPAR
-USE MODD_DEEP_CONVECTION_n
-USE MODD_PARAM_KAFR_n
-USE MODD_NESTING
-USE MODD_PARAMETERS
+USE MODD_EOL_ADNR
+USE MODD_EOL_ALM
+USE MODD_EOL_MAIN
+USE MODD_EOL_SHARED_IO
+USE MODD_FIELD_n
+use modd_field,       only: NMNHDIM_UNUSED, tfieldmetadata, tfieldlist, TYPECHAR, TYPEDATE, TYPEINT, TYPELOG, TYPEREAL
+#ifdef MNH_FOREFIRE
+USE MODD_FOREFIRE
+#endif
+USE MODD_FRC
 USE MODD_GR_FIELD_n
-USE MODD_CH_MNHC_n,       ONLY: LUSECHEM,LCH_CONV_LINOX, &
-                                LUSECHAQ,LUSECHIC,LCH_PH, XCH_PHINIT
-USE MODD_CH_PH_n
-USE MODD_CH_M9_n
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES, LLNOX_EXPLICIT
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_NSV
-USE MODD_AIRCRAFT_BALLOON
+USE MODD_GRID
+USE MODD_GRID_n
 USE MODD_HURR_CONF, ONLY: LFILTERING,CFILTERING,NDIAG_FILT
 USE MODD_HURR_FIELD_n
-USE MODD_PREP_REAL, ONLY: CDUMMY_2D, XDUMMY_2D
-USE MODD_DUST
-USE MODD_SALT
+USE MODD_IBM_LSF,         ONLY: LIBM_LSF
+USE MODD_IBM_PARAM_n,     ONLY: LIBM, XIBM_LS
+USE MODD_IO, ONLY: TFILEDATA
+USE MODD_LATZ_EDFLX
+USE MODD_LIMA_PRECIP_SCAVENGING_n
+USE MODD_LSFIELD_n
+USE MODD_LUNIT_n
+USE MODD_MEAN_FIELD_n
+USE MODD_NESTING
+USE MODD_NSV
 USE MODD_OCEANH
+USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
+USE MODD_PARAMETERS
+USE MODD_PARAM_KAFR_n,      ONLY: LCHTRANS
+USE MODD_PARAM_LIMA,     ONLY: LSCAV, LAERO_MASS
+USE MODD_PARAM_n
 USE MODD_PASPOL
-#ifdef MNH_FOREFIRE
-USE MODD_FOREFIRE
-#endif
-USE MODD_CONDSAMP
-USE MODD_CH_AEROSOL
-USE MODD_BLOWSNOW
-USE MODD_BLOWSNOW_n
 USE MODD_PAST_FIELD_n
-USE MODD_ADV_n, ONLY: CUVW_ADV_SCHEME,XRTKEMS,CTEMP_SCHEME,LSPLIT_CFL
-USE MODD_ELEC_FLASH
-!
-USE MODD_PARAM_LIMA,     ONLY: LSCAV, LAERO_MASS
-USE MODD_LIMA_PRECIP_SCAVENGING_n
-!
-USE MODE_IO_FILE,        only: IO_File_close
-USE MODE_IO_FIELD_WRITE, only: IO_Field_write
-USE MODE_ll
-USE MODD_IO, ONLY: TFILEDATA
+USE MODD_PRECIP_n
+USE MODD_PREP_REAL, ONLY: CDUMMY_2D, XDUMMY_2D
+USE MODD_RADIATIONS_n,   ONLY : XDTHRAD, NCLEARCOL_TM1, XFLALWD, &
+                                XZENITH, XDIR_ALB, XSCA_ALB, XEMIS, XTSRAD, &
+                                XDIRSRFSWD, XSCAFLASWD, XDIRFLASWD, XAZIM
+USE MODD_RECYCL_PARAM_n
+USE MODD_REF
+USE MODD_REF_n,  ONLY : XRHODREF
+USE MODD_RELFRC_n
+USE MODD_SALT
+USE MODD_TIME
+USE MODD_TIME_n
+USE MODD_TURB_n
+
+USE MODE_EXTRAPOL
 use mode_field, only: Find_field_id_from_mnhname
 USE MODE_GATHER_ll
 USE MODE_GRIDPROJ
-USE MODE_MSG
+USE MODE_IO_FIELD_WRITE, only: IO_Field_write
+USE MODE_IO_FILE,        only: IO_File_close
+USE MODE_ll
 USE MODE_MODELN_HANDLER
+USE MODE_MPPDB
+USE MODE_MSG
 USE MODE_TOOLS, ONLY: UPCASE
-!
-USE MODI_WRITE_LB_n
-USE MODI_WRITE_BALLOON_n
-USE MODI_DUSTLFI_n
-USE MODI_SALTLFI_n
+
 USE MODI_CH_AER_REALLFI_n
-USE MODI_SALT_FILTER
 USE MODI_DUST_FILTER
-!
-!20131128
-USE MODE_MPPDB
-USE MODE_EXTRAPOL
-! Modif Eddy fluxes
-USE MODD_DEF_EDDY_FLUX_n       ! Ajout PP
-USE MODD_DEF_EDDYUV_FLUX_n     ! Ajout PP
-USE MODD_LATZ_EDFLX            ! Ajout PP
-!
-USE MODD_2D_FRC                  ! Ajout PP
-USE MODD_ADVFRC_n              ! Modif PP ADV FRC
-USE MODD_RELFRC_n
-!
-USE MODD_PARAM_C2R2
-!
-USE MODD_EOL_MAIN
-USE MODD_EOL_SHARED_IO
-USE MODD_EOL_ADNR
-USE MODD_EOL_ALM
-!
-USE MODD_RECYCL_PARAM_n
-USE MODD_IBM_PARAM_n,     ONLY: LIBM, XIBM_LS
-USE MODD_IBM_LSF,         ONLY: LIBM_LSF
-! 
+USE MODI_DUSTLFI_n
+USE MODI_SALT_FILTER
+USE MODI_SALTLFI_n
+USE MODI_WRITE_BALLOON_n
+USE MODI_WRITE_LB_n
+
 IMPLICIT NONE
 !
 !*       0.1   Declarations of arguments
@@ -303,9 +291,7 @@ INTEGER           :: IRESP          ! IRESP  : return-code if a problem appears
                                     !in LFI subroutines at the open of the file              
 !
 INTEGER           :: JSV            ! loop index for scalar variables
-INTEGER           :: JSA            ! beginning of chemical-aerosol variables
-
-! 
+!
 CHARACTER(LEN=3)  :: YFRC           ! to mark the time of the forcing
 INTEGER           :: JT             ! loop index
 !
@@ -320,15 +306,11 @@ REAL, DIMENSION(:), ALLOCATABLE   :: ZYHAT_ll    !   Position y in the conformal
                                                  ! plane (array on the complete domain)
 INTEGER :: IMI ! Current model index
 !
-INTEGER           :: ICH_NBR        ! to write number and names of scalar 
-INTEGER,DIMENSION(:),ALLOCATABLE :: ICH_NAMES !(chem+aero+dust) variables
-CHARACTER(LEN=NMNHNAMELGTMAX),DIMENSION(:),ALLOCATABLE :: YDSTNAMES,YCHNAMES, YSLTNAMES
-INTEGER           :: ILREC,ILENG    !in NSV.DIM and NSV.TITRE
 INTEGER           :: INFO_ll
-INTEGER :: IKRAD
 INTEGER           :: JI,JJ,JK   ! loop index
 INTEGER           :: IIU,IJU,IKU,IIB,IJB,IKB,IIE,IJE,IKE ! Arrays bounds
 !
+INTEGER              :: IDX
 INTEGER              :: IID
 TYPE(TFIELDMETADATA) :: TZFIELD
 !-------------------------------------------------------------------------------
@@ -338,6 +320,8 @@ TYPE(TFIELDMETADATA) :: TZFIELD
 IMI = GET_CURRENT_MODEL_INDEX()
 !
 ILUOUT=TLUOUT%NLU
+
+IDX = 1
 !
 ALLOCATE(ZWORK2D(SIZE(XTHT,1),SIZE(XTHT,2)))
 ALLOCATE(ZWORK3D(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)))
@@ -902,75 +886,45 @@ IF (NRR >=1) THEN
   IF (LUSERH) CALL IO_Field_write(TPFILE,'RHT',XRT(:,:,:,IDX_RHT))
 END IF
 !
-IF (NSV >=1) THEN
-  JSA=0
-  ! User scalar variables
-  IF (NSV_USER>0) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = 1,NSV_USER
-      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
+IF (NSV >= 1 ) THEN
+  ! aerosol scalar variables
+  IF ( LORILAM ) THEN
+    IF ((CPROGRAM == 'REAL  ').AND.(NSV_AER > 1).AND.(IMI==1).AND.(LAERINIT))  &
+      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), XRHODREF)
+    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_AER > 1).AND.(IMI==1))  &
+      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),  XRHODREF)
   END IF
-  ! microphysical C2R2 scheme scalar variables
-  IF (NSV_C2R2END>=NSV_C2R2BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm-3'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_C2R2BEG,NSV_C2R2END
-      TZFIELD%CMNHNAME   = TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
+
+  ! dust scalar variables
+  IF ( LDUST ) THEN
+    IF ((CPROGRAM == 'REAL  ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT)) &
+      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
+    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1).AND.(IMI==1)) &
+      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
+    !At this point, we have the tracer array in order of importance, i.e.
+    !if mode 2 is most important it will occupy place 1-3 of XSVT
+    CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
   END IF
-  ! microphysical C3R5 scheme additional scalar variables
-  IF (NSV_C1R3END>=NSV_C1R3BEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm-3'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_C1R3BEG,NSV_C1R3END
-      TZFIELD%CMNHNAME   = TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
+
+  ! sea salt scalar variables
+  IF ( LSALT ) THEN
+    IF ((CPROGRAM == 'REAL  ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT)) &
+      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
+    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
+      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
+    !At this point, we have the tracer array in order of importance, i.e.
+    !if mode 2 is most important it will occupy place 1-3 of XSVT
+    CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
   END IF
-!
-! microphysical LIMA variables
-!
-  DO JSV = NSV_LIMA_BEG, NSV_LIMA_END
 
+  !Store all scalar variables
+  DO JSV = 1, NSV
     TZFIELD = TSVLIST(JSV)
-    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME ) // 'T'
-    TZFIELD%CLONGNAME = TRIM( TZFIELD%CMNHNAME )
+    TZFIELD%CMNHNAME  = TRIM( TZFIELD%CMNHNAME )  // 'T'
+    TZFIELD%CLONGNAME = TRIM( TZFIELD%CLONGNAME ) // 'T'
     CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-!
-    JSA=JSA+1
   END DO
-!
+
   IF (LSCAV .AND. LAERO_MASS) THEN
   IF (ASSOCIATED(XINPAP)) THEN
   IF (SIZE(XINPAP) /= 0 ) THEN
@@ -995,33 +949,8 @@ IF (NSV >=1) THEN
   END IF
   END IF
   END IF
-!
-!
+
   ! electrical scalar variables
-  IF (NSV_ELECEND>=NSV_ELECBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_ELECBEG,NSV_ELECEND
-      TZFIELD%CMNHNAME   = TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      IF (JSV .GT. NSV_ELECBEG .AND. JSV .LT. NSV_ELECEND) THEN 
-        TZFIELD%CUNITS     = 'C m-3'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      ELSE
-        TZFIELD%CUNITS     = 'm-3'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3,A8)')'X_Y_Z_','SVT',JSV,' (nb ions/m3)'
-      END IF
-      ZWORK3D(:,:,:) = XSVT(:,:,:,JSV) * XRHODREF(:,:,:) ! C/kg --> C/m3
-      CALL IO_Field_write(TPFILE,TZFIELD,ZWORK3D)
-      JSA=JSA+1
-    END DO
-  END IF
-  !
   IF (CELEC /= 'NONE') THEN
     CALL IO_Field_write(TPFILE,'EFIELDU',XEFIELDU)
     CALL IO_Field_write(TPFILE,'EFIELDV',XEFIELDV)
@@ -1067,57 +996,6 @@ IF (NSV >=1) THEN
     CALL IO_Field_write(TPFILE,'AREA_IC',   NMAP_2DAREA_IC)
     CALL IO_Field_write(TPFILE,'FLASH_3DCG',NMAP_3DCG)
     CALL IO_Field_write(TPFILE,'FLASH_3DIC',NMAP_3DIC)
- !
-    IF (LLNOX_EXPLICIT) THEN
-      TZFIELD%CMNHNAME   = 'LINOX'
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'mol mol-1'
-      TZFIELD%CDIR       = 'XY'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,NSV_LNOXEND))
-      JSA=JSA+1
-    END IF
-  END IF
-  ! lagrangian variables
-  IF (NSV_LGEND>=NSV_LGBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_LGBEG,NSV_LGEND
-      TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
-  END IF
-  ! Passive scalar variables        
-  IF (LPASPOL) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_PPBEG,NSV_PPEND
-      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
   END IF
 !
   IF ( ((CCLOUD == 'KHKO') .OR.(CCLOUD == 'C2R2')) .AND. (.NOT. LSUPSAT)) THEN
@@ -1129,131 +1007,18 @@ IF (NSV >=1) THEN
     CALL IO_Field_write(TPFILE,'NPRO', XNPRO(:,:,:))
   END IF
 !
-#ifdef MNH_FOREFIRE
-  ! ForeFire scalar variables
-  IF ( LFOREFIRE ) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_FFBEG,NSV_FFEND
-      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
-  END IF
-#endif
-! Blowing snow variables
-  IF (LBLOWSNOW) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    DO JSV = NSV_SNWBEG,NSV_SNWEND
-      TZFIELD%CMNHNAME=TRIM(CSNOWNAMES(JSV-NSV_SNWBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    DO JSV = 1,(NSV_SNW)
-      WRITE(TZFIELD%CMNHNAME,'(A10,I3.3)')'SNOWCANO_M',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A8,I3.3)')'X_Y_Z_','SNOWCANO',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSNWCANO(:,:,JSV))
-      JSA=JSA+1
-    END DO
-  ENDIF
-  ! Conditional sampling variables  
-  IF (LCONDSAMP) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'kg kg-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_CSBEG,NSV_CSEND
-      WRITE(TZFIELD%CMNHNAME,'(A3,I3.3)')'SVT',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      JSA=JSA+1
-    END DO
-  !
-  END IF
-  ! number of chemical variables (chem+aero+dust)
-  ICH_NBR = 0
-  IF (LUSECHEM) ICH_NBR = ICH_NBR +NSV_CHEMEND-NSV_CHEMBEG+1 
-  IF (LUSECHIC) ICH_NBR = ICH_NBR +NSV_CHICEND-NSV_CHICBEG+1
-  IF (.NOT.LUSECHEM.AND.LCH_CONV_LINOX) ICH_NBR = ICH_NBR + &
-                                                  NSV_LNOXEND-NSV_LNOXBEG+1 
-  IF (LORILAM)  ICH_NBR = ICH_NBR +NSV_AEREND -NSV_AERBEG+1 
-  IF (LDUST)    ICH_NBR = ICH_NBR +NSV_DSTEND -NSV_DSTBEG+1
-  IF (LDEPOS_DST(IMI))  ICH_NBR = ICH_NBR +NSV_DSTDEPEND -NSV_DSTDEPBEG+1 
-  IF (LDEPOS_SLT(IMI))  ICH_NBR = ICH_NBR +NSV_SLTDEPEND -NSV_SLTDEPBEG+1 
-  IF (LDEPOS_AER(IMI))  ICH_NBR = ICH_NBR +NSV_AERDEPEND -NSV_AERDEPBEG+1 
-  IF (LSALT)    ICH_NBR = ICH_NBR +NSV_SLTEND -NSV_SLTBEG+1
-  IF (ICH_NBR /=0) ALLOCATE(YCHNAMES(ICH_NBR))
-  ! chemical scalar variables
   IF (LUSECHEM) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_CHEMBEG,NSV_CHEMEND
-      TZFIELD%CMNHNAME   = TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = 'ppv'
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      !
-      YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without T
-    END DO
-    !
-    IF (LUSECHIC) THEN
-      DO JSV = NSV_CHICBEG,NSV_CHICEND
-        TZFIELD%CMNHNAME   = TRIM(UPCASE(CICNAMES(JSV-NSV_CHICBEG+1)))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        TZFIELD%CUNITS     = 'ppv'
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        !
-        YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1) ! without M
-      END DO
-    ENDIF
     IF (LUSECHAQ.AND.NRR>=3) THEN ! accumulated moles of aqueous species that fall at the surface (mol/m2)
-      TZFIELD%NDIMS = 2
-      DO JSV = NSV_CHACBEG+NSV_CHAC/2,NSV_CHACEND
-        TZFIELD%CMNHNAME   = 'ACPR_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      DO JSV = NSV_CHACBEG + NSV_CHAC / 2, NSV_CHACEND
+        TZFIELD = TSVLIST(JSV)
+        TZFIELD%CMNHNAME   = 'ACPR_' // TRIM( TZFIELD%CMNHNAME )
+        TZFIELD%CLONGNAME  = 'ACPR_' // TRIM( TZFIELD%CLONGNAME )
         TZFIELD%CUNITS     = 'mol m-2'
         TZFIELD%CCOMMENT   = 'X_Y_Accumulated moles of aqueous species at the surface'
+        TZFIELD%NDIMS      = 2
         ZWORK2D(:,:)  = XACPRAQ(:,:,JSV-NSV_CHACBEG-NSV_CHAC/2+1)
         CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       END DO
-      TZFIELD%NDIMS = 3
     END IF
     IF (LUSECHAQ.AND.LCH_PH) THEN  ! pH values in cloud
       CALL IO_Field_write(TPFILE,'PHC',XPHC)
@@ -1262,7 +1027,7 @@ IF (NSV >=1) THEN
         ! compute mean pH in accumulated surface water
         !ZWORK2D(:,:) = 10**(-XCH_PHINIT)
         WHERE (XACPRR > 0.)
-          ZWORK2D(:,:) =  XACPHR(:,:) *1E3 / XACPRR(:,:) ! moles of H+ / l of water 
+          ZWORK2D(:,:) =  XACPHR(:,:) *1E3 / XACPRR(:,:) ! moles of H+ / l of water
         ELSE WHERE
           ZWORK2D(:,:) = XUNDEF
         END WHERE
@@ -1278,173 +1043,16 @@ IF (NSV >=1) THEN
         TZFIELD%NGRID      = 1
         TZFIELD%NTYPE      = TYPEREAL
         TZFIELD%NDIMS      = 2
+        TZFIELD%LTIMEDEP = .TRUE.
         CALL IO_Field_write(TPFILE,TZFIELD,ZWORK2D)
       ENDIF
     ENDIF
-  ELSE IF (LCH_CONV_LINOX) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppv'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-      TZFIELD%CMNHNAME   = 'LINOXT'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)') 'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      YCHNAMES(JSV-JSA)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-    END DO
-  ENDIF  
-  ! aerosol scalar variables
-  IF (LORILAM) THEN
-    IF ((CPROGRAM == 'REAL  ').AND.(NSV_AER > 1).AND.(IMI==1).AND.(LAERINIT))  &
-      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO), XRHODREF)
-    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_AER > 1).AND.(IMI==1))  &
-      CALL CH_AER_REALLFI_n(XSVT(:,:,:,NSV_AERBEG:NSV_AEREND),XSVT(:,:,:,NSV_CHEMBEG-1+JP_CH_CO),  XRHODREF)
-    IF (NSV_AEREND>=NSV_AERBEG) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_AERBEG,NSV_AEREND
-        TZFIELD%CMNHNAME   = TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        IF (JSV==NSV_AERBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERBEG ',JSV
-        IF (JSV==NSV_AEREND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AEREND ',JSV
-        YCHNAMES(JSV-JSA)=  TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO
-    END IF
-    IF (LDEPOS_AER(IMI)) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_AERDEPBEG,NSV_AERDEPEND
-        TZFIELD%CMNHNAME   = TRIM(CDEAERNAMES(JSV-NSV_AERDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        IF (JSV==NSV_AERDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPBEG ',JSV
-        IF (JSV==NSV_AERDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_AERDEPEND ',JSV
-        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO   ! Loop on aq dust scalar variables      
-    ENDIF
-  END IF
-  ! dust scalar variables
-  IF (LDUST) THEN
-    IF ((CPROGRAM == 'REAL  ').AND.(NSV_DST > 1).AND.(IMI==1).AND.(LDSTINIT)) &
-      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
-    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_DST > 1).AND.(IMI==1)) &
-      CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
-    !At this point, we have the tracer array in order of importance, i.e.
-    !if mode 2 is most important it will occupy place 1-3 of XSVT  
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppv'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
-    DO JSV = NSV_DSTBEG,NSV_DSTEND
-      TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      IF (JSV==NSV_DSTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTBEG ',JSV
-      IF (JSV==NSV_DSTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTEND ',JSV
-      YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-    END DO   ! Loop on dust scalar variables
-
-    IF (LDEPOS_DST(IMI)) THEN
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-        TZFIELD%CMNHNAME   = TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        IF (JSV==NSV_DSTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPBEG ',JSV
-        IF (JSV==NSV_DSTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPEND ',JSV
-        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO   ! Loop on aq dust scalar variables
-    ENDIF
   ENDIF
-  ! sea salt scalar variables
-  IF (LSALT) THEN
-    IF ((CPROGRAM == 'REAL  ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT)) &
-      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
-    IF ((CPROGRAM == 'IDEAL ').AND.(NSV_SLT > 1).AND.(IMI==1)) &
-      CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
-    !At this point, we have the tracer array in order of importance, i.e.
-    !if mode 2 is most important it will occupy place 1-3 of XSVT  
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'ppv'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
-    DO JSV = NSV_SLTBEG,NSV_SLTEND
-      TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-      IF (JSV==NSV_SLTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTBEG ',JSV
-      IF (JSV==NSV_SLTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTEND ',JSV
-      YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-    END DO   ! Loop on sea salt scalar variables
-
-    IF (LDEPOS_SLT(IMI)) THEN        
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppv'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-        TZFIELD%CMNHNAME   = TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        IF (JSV==NSV_SLTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPBEG ',JSV
-        IF (JSV==NSV_SLTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTDEPEND ',JSV
-        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO   ! Loop on aq dust scalar variables      
-    ENDIF
-  ENDIF  
   !
-  DO JSV=1,ICH_NBR
-    WRITE(ILUOUT,*)JSV,TRIM(YCHNAMES(JSV))
-  END DO
   TZFIELD = TFIELDMETADATA(                      &
-    CMNHNAME   = 'NSV.DIM',                      &
+    CMNHNAME   = 'NSVCHEM',                      &
     CSTDNAME   = '',                             &
-    CLONGNAME  = 'NSV.DIM',                      &
+    CLONGNAME  = 'NSVCHEM',                      &
     CUNITS     = '',                             &
     CDIR       = '--',                           &
     CCOMMENT   = 'Number of chemical variables', &
@@ -1452,52 +1060,24 @@ IF (NSV >=1) THEN
     NTYPE      = TYPEINT,                        &
     NDIMS      = 0,                              &
     LTIMEDEP   = .FALSE.                         )
-  CALL IO_Field_write(TPFILE,TZFIELD,ICH_NBR)
-  !
-  IF (ICH_NBR/=0) THEN
-    TZFIELD = TFIELDMETADATA(   &
-      CMNHNAME   = 'NSV.TITRE', &
-      CSTDNAME   = '',          &
-      CLONGNAME  = 'NSV.TITRE', &
-      CUNITS     = '',          &
-      CDIR       = '--',        &
-      CCOMMENT   = '',          &
-      NGRID      = 0,           &
-      NTYPE      = TYPEINT,     &
-      NDIMS      = 1,           &
-      LTIMEDEP   = .FALSE.      )
-    ILREC=LEN(YCHNAMES(1))
-    ILENG=ILREC*ICH_NBR
-    ALLOCATE(ICH_NAMES(ILENG))
-    DO JSV = 1,ICH_NBR
-      DO JT = 1,ILREC
-        ICH_NAMES(ILREC*(JSV-1)+JT) = ICHAR(YCHNAMES(JSV)(JT:JT))
-      ENDDO
-    ENDDO
-    CALL IO_Field_write(TPFILE,TZFIELD,ICH_NAMES)
-    DEALLOCATE(YCHNAMES,ICH_NAMES)
-  END IF 
+  CALL IO_Field_write(TPFILE,TZFIELD,NSV_CHEM_LIST)
   !
-  ! lagrangian variables
-  IF (NSV_LGEND>=NSV_LGBEG) THEN
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 'm'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = NSV_LGBEG,NSV_LGEND
-      TZFIELD%CMNHNAME   = TRIM(CLGNAMES(JSV-NSV_LGBEG+1))//'T'
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-    END DO
+  IF ( NSV_CHEM_LIST > 0 ) THEN
+    TZFIELD = TFIELDMETADATA(                    &
+      CMNHNAME   = 'SV_CHEM_LIST',               &
+      CSTDNAME   = '',                           &
+      CLONGNAME  = 'SV_CHEM_LIST',               &
+      CUNITS     = '',                           &
+      CDIR       = '--',                         &
+      CCOMMENT   = 'List of chemical variables', &
+      NGRID      = 0,                            &
+      NTYPE      = TYPECHAR,                     &
+      NDIMS      = 1,                            &
+      LTIMEDEP   = .FALSE.                       )
+    CALL IO_Field_write(TPFILE,TZFIELD,CSV_CHEM_LIST)
   END IF
 END IF
 !
-!
 CALL IO_Field_write(TPFILE,'LSUM', XLSUM)
 CALL IO_Field_write(TPFILE,'LSVM', XLSVM)
 CALL IO_Field_write(TPFILE,'LSWM', XLSWM)
@@ -1676,95 +1256,20 @@ IF (CDCONV /= 'NONE' .OR. CSCONV == 'KAFR') THEN
   IF ( LCHTRANS .AND. NSV > 0 ) THEN
    ! scalar variables are recorded
    ! individually in the file
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CUNITS     = 's-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    !
-    DO JSV = 1, NSV_USER
-      WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_C2R2BEG, NSV_C2R2END
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C2R2NAMES(JSV-NSV_C2R2BEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_C1R3BEG, NSV_C1R3END
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(C1R3NAMES(JSV-NSV_C1R3BEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_ELECBEG, NSV_ELECEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CELECNAMES(JSV-NSV_ELECBEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_PPBEG, NSV_PPEND
-      WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-#ifdef MNH_FOREFIRE
-    IF (LFOREFIRE) THEN
-      DO JSV = NSV_FFBEG, NSV_FFEND
-        WRITE(TZFIELD%CMNHNAME,'(A7,I3.3)')'DSVCONV',JSV
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-#endif
-    IF (LUSECHEM) THEN
-      DO JSV = NSV_CHEMBEG, NSV_CHEMEND
-        TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CNAMES(JSV-NSV_CHEMBEG+1)))
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-      IF (LORILAM) THEN
-        DO JSV = NSV_AERBEG, NSV_AEREND
-          TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(UPCASE(CAERONAMES(JSV-NSV_AERBEG+1)))
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-          CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-        END DO
-      END IF
-! linox scalar variables
-    ELSE IF (LCH_CONV_LINOX) THEN
-      DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-        TZFIELD%CMNHNAME   = 'DSVCONV_LINOX'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-      END DO
-    END IF
-    DO JSV = NSV_LGBEG, NSV_LGEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CLGNAMES(JSV-NSV_LGBEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_DSTBEG, NSV_DSTEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
-    END DO
-    DO JSV = NSV_SLTBEG, NSV_SLTEND
-      TZFIELD%CMNHNAME   = 'DSVCONV_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      WRITE(TZFIELD%CCOMMENT,'(A6,A7,I3.3)')'X_Y_Z_','DSVCONV',JSV
-      CALL IO_Field_write(TPFILE,TZFIELD,XDSVCONV(:,:,:,JSV))
+    TZFIELD = TFIELDMETADATA(     &
+      CMNHNAME   = 'generic for DSVCONV', & !Temporary name to ease identification
+      CUNITS     = 's-1',         &
+      CDIR       = 'XY',          &
+      NGRID      = 1,             &
+      NTYPE      = TYPEREAL,      &
+      NDIMS      = 3,             &
+      LTIMEDEP   = .TRUE.         )
+
+    DO JSV = 1, NSV
+      TZFIELD%CMNHNAME   = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CMNHNAME )
+      TZFIELD%CLONGNAME  = 'DSVCONV_' // TRIM( TSVLIST(JSV)%CLONGNAME )
+      TZFIELD%CCOMMENT   = 'Convective tendency for ' // TRIM( TSVLIST(JSV)%CMNHNAME )
+      CALL IO_Field_write( TPFILE, TZFIELD, XDSVCONV(:,:,:,JSV) )
     END DO
   END IF
 !
@@ -2366,11 +1871,11 @@ IF ( CPROGRAM=='REAL  ' ) THEN
       NDIMS      = 2,                                 &
       LTIMEDEP   = .TRUE.                             )
     !
-    DO JSA=1,SIZE(XDUMMY_2D,3)
-      TZFIELD%CMNHNAME   = ADJUSTL(CDUMMY_2D(JSA))
+    DO JI = 1, SIZE( XDUMMY_2D, 3 )
+      TZFIELD%CMNHNAME   = ADJUSTL(CDUMMY_2D(JI))
       TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
       TZFIELD%CCOMMENT   = 'X_Y_Z_'//TRIM(TZFIELD%CMNHNAME)
-      CALL IO_Field_write(TPFILE,TZFIELD,XDUMMY_2D(:,:,JSA))
+      CALL IO_Field_write(TPFILE,TZFIELD,XDUMMY_2D(:,:,JI))
     END DO
   END IF
 !
diff --git a/src/MNH/write_profilern.f90 b/src/MNH/write_profilern.f90
index 0b8eb5a791fdee7e48266546140eb8d9007bc85a..cb9dc945a871d87b4f5777bb1dc6f8bd463472a9 100644
--- a/src/MNH/write_profilern.f90
+++ b/src/MNH/write_profilern.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -10,7 +10,6 @@
 !  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
-!  J. Escobar  16/08/2018: From Pierre & Maud , correction use CNAMES(JSV-NSV_CHEMBEG+1)
 !  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !  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)
@@ -19,6 +18,7 @@
 !  M. Taufour     07/2021: modify RARE for hydrometeors containing ice and add bright band calculation for RARE
 !  P. Wautelet 01/09/2021: fix: correct vertical dimension for ALT and W
 !  P. Wautelet 19/11/2021: bugfix in units for LIMA variables
+!  P. Wautelet 04/02/2022: use TSVLIST to manage metadata of scalar variables
 !-----------------------------------------------------------------
 !      ###########################
 MODULE MODE_WRITE_PROFILER_n
@@ -84,24 +84,18 @@ 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_DUST,            ONLY: LDUST, NMODE_DST
+USE MODD_CH_AEROSOL,      ONLY: LORILAM, JPMODE
 USE MODD_CST,             ONLY: XRV
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
 use modd_field,           only: NMNHDIM_LEVEL, NMNHDIM_LEVEL_W, NMNHDIM_PROFILER_TIME, NMNHDIM_PROFILER_PROC, NMNHDIM_UNUSED, &
                                 tfieldmetadata_base, TYPEREAL
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_NSV
+USE MODD_NSV,             ONLY: tsvlist, nsv, nsv_aer, nsv_aerbeg, nsv_aerend, nsv_dst, nsv_dstbeg, nsv_dstend
 USE MODD_PARAMETERS,      ONLY: XUNDEF
 USE MODD_PARAM_n,         ONLY: CRAD
-USE MODD_PROFILER_n
+USE MODD_PROFILER_n,      ONLY: tprofiler
 USE MODD_RADIATIONS_n,    ONLY: NAER
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_SALT,            ONLY: CSALTNAMES, LSALT
-USE MODD_TYPE_PROFILER
+USE MODD_SALT,            ONLY: LSALT
 !
 USE MODE_AERO_PSD
 USE MODE_DUST_PSD
@@ -112,7 +106,6 @@ INTEGER,          INTENT(IN) :: KI
 !
 !*      0.2  declaration of local variables for diachro
 !
-character(len=NCOMMENTLGTMAX)                        :: ycomment
 character(len=NMNHNAMELGTMAX)                        :: yname
 character(len=NUNITLGTMAX)                           :: yunits
 CHARACTER(LEN=:),                        allocatable :: YGROUP   ! group title
@@ -125,6 +118,8 @@ INTEGER                                              :: JSV      ! loop counter
 integer                                              :: ji
 integer                                              :: irr !Number of moist variables
 REAL, DIMENSION(:,:,:),                  ALLOCATABLE :: ZRHO
+REAL, DIMENSION(:,:,:), TARGET,          ALLOCATABLE :: ZWORK
+REAL, DIMENSION(:,:,:), POINTER                      :: ZDATA
 REAL, DIMENSION(:,:,:,:),                ALLOCATABLE :: ZSV, ZN0, ZSIG, ZRG
 type(tbudiachrometadata)                             :: tzbudiachro
 type(tfieldmetadata_base), dimension(:), allocatable :: tzfields
@@ -133,7 +128,9 @@ type(tfieldmetadata_base), dimension(:), allocatable :: tzfields
 !
 IF (TPROFILER%X(KI)==XUNDEF) RETURN
 IF (TPROFILER%Y(KI)==XUNDEF) RETURN
-!
+
+ZDATA => Null()
+
 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
@@ -193,40 +190,22 @@ 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
-    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
-    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_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
-    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
-    yname  = Trim( tsvlist(jsv)%cmnhname )
-    yunits = Trim( tsvlist(jsv)%cunits )
-    ycomment = ''
-    call Add_profile( yname, ycomment, yunits, tprofiler%sv(:,:,:,jsv) )
-  end do
-  ! electrical scalar variables
-  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
-    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 )
+  ! Scalar variables
+  Allocate( zwork, mold = tprofiler%sv(:,:,:,1) )
+  do jsv = 1, nsv
+    if ( Trim( tsvlist(jsv)%cunits ) == 'ppv' ) then
+      yunits = 'ppb'
+      zwork = tprofiler%sv(:,:,:,jsv) * 1.e9 !*1e9 for conversion ppv->ppb
+      zdata => zwork
+    else
+      yunits = Trim( tsvlist(jsv)%cunits )
+      zdata => tprofiler%sv(:,:,:,jsv)
+    end if
+    call Add_profile( tsvlist(jsv)%cmnhname, '', yunits, zdata )
+    zdata => Null()
   end do
+  Deallocate( zwork )
+
   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)))
@@ -284,10 +263,6 @@ if ( Size( tprofiler%sv, 4 ) > 0  ) then
     DEALLOCATE (ZSV,ZRHO)
     DEALLOCATE (ZN0,ZRG,ZSIG)
   END IF
-  ! dust scalar variables
-  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)))
@@ -345,10 +320,6 @@ if ( Size( tprofiler%sv, 4 ) > 0  ) then
     DEALLOCATE (ZSV,ZRHO)
     DEALLOCATE (ZN0,ZRG,ZSIG)
   END IF
-  ! sea salt scalar variables
-  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
@@ -592,7 +563,7 @@ jproc = jproc + 1
 
 if ( jproc > iproc ) call Print_msg( NVERB_FATAL, 'IO', 'Add_profile', 'more profiles than expected' )
 
-ctitle(jproc)   = Trim( htitle)
+ctitle(jproc)   = Trim( htitle )
 ccomment(jproc) = Trim( hcomment )
 cunit(jproc)    = Trim( hunits )
 
diff --git a/src/MNH/write_stationn.f90 b/src/MNH/write_stationn.f90
index 972805565d248f7aa0d309cb3ed69d0aa07431c7..8d6d36ec605dc6dbf7ff3d9af174390c236a16f6 100644
--- a/src/MNH/write_stationn.f90
+++ b/src/MNH/write_stationn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2002-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2002-2022 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed 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.
@@ -60,33 +60,22 @@ END MODULE MODI_WRITE_STATION_n
 !  P. Wautelet 13/09/2019: budget: simplify and modernize date/time management
 !  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 04/02/2022: use TSVLIST to manage metadata of scalar variables
 ! --------------------------------------------------------------------------
 !
 !*      0. DECLARATIONS
 !          ------------
 !
+USE MODD_ALLSTATION_n,    ONLY: LDIAG_SURFRAD
 use MODD_BUDGET,          ONLY: tbudiachrometadata
-USE MODD_CH_M9_n,         ONLY: CNAMES
-USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, LORILAM, JPMODE
-USE MODD_CONF
-USE MODD_CST
-USE MODD_DIAG_IN_RUN
-USE MODD_DIM_n
-USE MODD_DUST,            ONLY: CDUSTNAMES, LDUST, NMODE_DST
-USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
-USE MODD_GRID_n
-USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
+USE MODD_CONF,            ONLY: LCARTESIAN
+USE MODD_CST,             ONLY: XRV
 USE MODD_IO,              ONLY: TFILEDATA
-USE MODD_LG,              ONLY: CLGNAMES
-USE MODD_LUNIT
-USE MODD_NSV
-USE MODD_PARAMETERS
+USE MODD_NSV,             ONLY: tsvlist, nsv, nsv_aer, nsv_aerbeg, nsv_aerend, &
+                                nsv_dst, nsv_dstbeg, nsv_dstend, nsv_slt, nsv_sltbeg, nsv_sltend
 USE MODD_PARAM_n,         ONLY: CRAD, CSURF
-USE MODD_PASPOL
-USE MODD_RAIN_C2R2_DESCR, ONLY: C2R2NAMES
-USE MODD_SALT,            ONLY: CSALTNAMES, LSALT, NMODE_SLT
-USE MODD_STATION_n
-USE MODD_ALLSTATION_n,    ONLY: LDIAG_SURFRAD
+USE MODD_PARAMETERS,      ONLY: XUNDEF
+USE MODD_STATION_n,       only: NUMBSTAT, STATION, TSTATION
 !
 USE MODE_AERO_PSD
 USE MODE_DUST_PSD
@@ -408,72 +397,19 @@ IF (SIZE(TSTATION%TKE,1)>0) THEN
   ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%TKE(:,II)
 END IF
 !
-!
-IF (LPASPOL) THEN
-    JSV=1
-    JPROC = JPROC+1
-    WRITE (YTITLE(JPROC),FMT='(A2,I3.3)')   'Sv',JSV
-    YUNIT    (JPROC) = 'kg kg-1'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV)
-ENDIF
-!
 IF (SIZE(TSTATION%SV,3)>=1) 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,1,:,1,JPROC) = TSTATION%SV(:,II,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,1,:,1,JPROC) = TSTATION%SV(:,II,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,1,:,1,JPROC) = TSTATION%SV(:,II,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,1,:,1,JPROC) = TSTATION%SV(:,II,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,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) * 1.E9
-  END DO
-  ! LiNOX passive tracer
-  DO JSV = NSV_LNOXBEG,NSV_LNOXEND
-    JPROC = JPROC+1
-    WRITE (YTITLE(JPROC),FMT='(A5)') 'LiNOx'
-    YUNIT    (JPROC) = 'ppb'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) * 1.E9
-  END DO
-  ! aerosol scalar variables
-  DO JSV = NSV_AERBEG,NSV_AEREND
-    JPROC = JPROC+1
-    YTITLE(JPROC)= TRIM(CAERONAMES(JSV-NSV_AERBEG+1))
-    YUNIT    (JPROC) = 'ppb'
-    YCOMMENT (JPROC) = ' '
-    ZWORK6 (1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) *1.E9
+  ! Scalar variables
+  DO JSV = 1, NSV
+    JPROC = JPROC + 1
+    YTITLE(JPROC)   = TRIM( TSVLIST(JSV)%CMNHNAME )
+    YCOMMENT(JPROC) = ''
+    IF ( TRIM( TSVLIST(JSV)%CUNITS ) == 'ppv' ) THEN
+      YUNIT(JPROC)  = 'ppb'
+      ZWORK6(1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) * 1.e9 !*1e9 for conversion ppv->ppb
+    ELSE
+      YUNIT(JPROC)  = TRIM( TSVLIST(JSV)%CUNITS )
+      ZWORK6(1,1,1,:,1,JPROC) = TSTATION%SV(:,II,JSV)
+    END IF
   END DO
 
   IF ((LORILAM).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN
@@ -490,15 +426,14 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
         ZRHO(1,1,:) = ZRHO(1,1,:) + TSTATION%R(:,II,JRR)
       ENDDO
       ZRHO(1,1,:) = TSTATION%TH(:,II) * ( 1. + XRV/XRD*TSTATION%R(:,II,1) )  &
-                                      / ( 1. + ZRHO(1,1,:)                ) 
+                                      / ( 1. + ZRHO(1,1,:)                )
     ELSE
       ZRHO(1,1,:) = TSTATION%TH(:,II)
     ENDIF
     ZRHO(1,1,:) =  TSTATION%P(:,II) / &
                   (XRD *ZRHO(1,1,:) *((TSTATION%P(:,II)/XP00)**(XRD/XCPD)) )
 
-
-   CALL PPP2AERO(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0,PCTOTA=ZPTOTA)
+    CALL PPP2AERO(ZSV,ZRHO, PSIG3D=ZSIG, PRG3D=ZRG, PN3D=ZN0,PCTOTA=ZPTOTA)
 
     DO JSV=1,JPMODE
       ! mean radius
@@ -611,19 +546,12 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
       WRITE(YCOMMENT,'(A24,I1)')'MASS SOA10 AEROSOL MODE ',JSV
       ZWORK6(1,1,1,:,1,JPROC)=ZPTOTA(1,1,:,JP_AER_SOA10,JSV)
       END IF
-      ENDDO
+    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,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) *1.E9
-  END DO
+
   IF ((LDUST).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN
     ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_DST))
     ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates)))
@@ -637,7 +565,7 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
         ZRHO(1,1,:) = ZRHO(1,1,:) + TSTATION%R(:,II,JRR)
       ENDDO
       ZRHO(1,1,:) = TSTATION%TH(:,II) * ( 1. + XRV/XRD*TSTATION%R(:,II,1) )  &
-                                      / ( 1. + ZRHO(1,1,:)                ) 
+                                      / ( 1. + ZRHO(1,1,:)                )
     ELSE
       ZRHO(1,1,:) = TSTATION%TH(:,II)
     ENDIF
@@ -664,19 +592,10 @@ IF (SIZE(TSTATION%SV,3)>=1) THEN
       WRITE(YCOMMENT(JPROC),'(A13,I1)')'N0 DUST MODE ',JSV
       ZWORK6 (1,1,1,:,1,JPROC) = ZN0(1,1,:,JSV)
     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,1,:,1,JPROC) = TSTATION%SV(:,II,JSV) *1.E9
-  END DO
-ENDIF
-!
+
   IF ((LSALT).AND. .NOT.(ANY(TSTATION%P(:,II) == 0.))) THEN
     ALLOCATE (ZSV(1,1,SIZE(tstation%tpdates),NSV_SLT))
     ALLOCATE (ZRHO(1,1,SIZE(tstation%tpdates)))
@@ -720,6 +639,7 @@ ENDIF
     DEALLOCATE (ZSV,ZRHO) 
     DEALLOCATE (ZN0,ZRG,ZSIG) 
   END IF
+END IF
 
 IF (ANY(TSTATION%TSRAD(:,:)/=XUNDEF)) THEN
   JPROC = JPROC+1