diff --git a/src/common/aux/modd_nsv.f90 b/src/common/aux/modd_nsv.f90
index 569539c404333b7b908e980a62d9c995894a2688..9cfa343c413e3b78171c89590cf04432585986fc 100644
--- a/src/common/aux/modd_nsv.f90
+++ b/src/common/aux/modd_nsv.f90
@@ -28,30 +28,35 @@
 !!       Pialat/Tulet  15/02/12 add ForeFire
 !!      Modification    01/2016  (JP Pinty) Add LIMA
 !!       V. Vionnet     07/17   add blowing snow
-!  P. Wautelet 10/03/2021: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables
 !  B. Vie         06/2021: add prognostic supersaturation for LIMA
+!  P. Wautelet 26/11/2021: add TSVLIST and TSVLIST_A to store the metadata of all the scalar variables
 !  A. Costes      12/2021: add Blaze fire model smoke
-!
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
+!                          + NSV_CHEM_LIST(_A) the size of the list
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
-USE MODD_PARAMETERS, ONLY : JPMODELMAX, &  ! Maximum allowed number of nested models
-                            JPSVMAX,    &  ! Maximum number of scalar variables
-                            JPSVNAMELGTMAX ! Maximum length of a scalar variable name
+USE MODD_FIELD,      ONLY: tfieldmetadata
+USE MODD_PARAMETERS, ONLY: JPMODELMAX, &     ! Maximum allowed number of nested models
+                           JPSVMAX,    &     ! Maximum number of scalar variables
+                           JPSVNAMELGTMAX, & ! Maximum length of a scalar variable name
+                           NMNHNAMELGTMAX
 !
 IMPLICIT NONE
 SAVE
 !
 REAL,DIMENSION(JPSVMAX) :: XSVMIN ! minimum value for SV variables
 !
-LOGICAL :: LINI_NSV = .FALSE. ! becomes True when routine INI_NSV is called
+LOGICAL :: LINI_NSV(JPMODELMAX) = .FALSE. ! becomes True when routine INI_NSV is called
 !
-CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSVNAMES_A !Names of all the scalar variables
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:,:), ALLOCATABLE, TARGET :: CSV_CHEM_LIST_A !Names of all the chemical variables
+TYPE(tfieldmetadata), DIMENSION(:,:), ALLOCATABLE, TARGET :: TSVLIST_A !Metadata of all the scalar variables
 
 INTEGER,DIMENSION(JPMODELMAX)::NSV_A = 0 ! total number of scalar variables
                                          ! NSV_A = NSV_USER_A+NSV_C2R2_A+NSV_CHEM_A+..
+INTEGER,DIMENSION(JPMODELMAX)::NSV_CHEM_LIST_A = 0 ! total number of chemical variables (including dust, salt...)
 INTEGER,DIMENSION(JPMODELMAX)::NSV_USER_A = 0  ! number of user scalar variables with 
                                                ! indices in the range : 1...NSV_USER_A
 !
@@ -90,7 +95,7 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_LGEND_A = 0 ! NSV_LGBEG_A...NSV_LGEND_A
 !
 INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOX_A = 0    ! number of lightning NOx
 INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXBEG_A = 0 ! with indices in the range :
-INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A                !                                 
+INTEGER,DIMENSION(JPMODELMAX)::NSV_LNOXEND_A = 0 ! NSV_LNOXBEG_A...NSV_LNOXEND_A
 INTEGER,DIMENSION(JPMODELMAX)::NSV_DST_A = 0    ! number of dust scalar
 INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTBEG_A = 0 ! with indices in the range :
 INTEGER,DIMENSION(JPMODELMAX)::NSV_DSTEND_A = 0 ! NSV_DSTBEG_A...NSV_DSTEND_A
@@ -145,6 +150,7 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_LIMA_SPRO_A = 0     ! Supersaturation
 INTEGER,DIMENSION(JPMODELMAX)::NSV_FF_A = 0    ! number of ForeFire scalar variables
 INTEGER,DIMENSION(JPMODELMAX)::NSV_FFBEG_A = 0 ! with indices in the range :
 INTEGER,DIMENSION(JPMODELMAX)::NSV_FFEND_A = 0 ! NSV_FFBEG_A...NSV_FFEND_A
+!
 #endif
 ! Blaze smoke indexes
 INTEGER,DIMENSION(JPMODELMAX)::NSV_FIRE_A = 0    ! number of Blaze smoke scalar variables
@@ -159,10 +165,15 @@ INTEGER,DIMENSION(JPMODELMAX)::NSV_SNWEND_A = 0 ! NSV_SNWBEG_A...NSV_SNWEND_A
 !
 ! variables updated for the current model
 !
-CHARACTER(LEN=JPSVNAMELGTMAX), DIMENSION(:), POINTER :: CSVNAMES !Names of all the scalar variables
+CHARACTER(LEN=NMNHNAMELGTMAX), DIMENSION(:), POINTER :: CSV_CHEM_LIST !Names of all the chemical variables
+TYPE(tfieldmetadata), DIMENSION(:), POINTER :: TSVLIST !Metadata of all the scalar variables
+
 CHARACTER(LEN=6), DIMENSION(:), ALLOCATABLE :: CSV ! name of the scalar variables
+
 INTEGER :: NSV         = 0 ! total number of user scalar variables
 !
+INTEGER :: NSV_CHEM_LIST = 0 ! total number of chemical variables (including dust, salt...)
+!
 INTEGER :: NSV_USER    = 0 ! number of user scalar variables with indices
                            ! in the range : 1...NSV_USER
 INTEGER :: NSV_C2R2    = 0 ! number of liq scalar used in C2R2 and in C3R5
@@ -255,6 +266,7 @@ INTEGER :: NSV_LIMA_SPRO     !
 INTEGER :: NSV_FF    = 0 ! number of ForeFire scalar variables
 INTEGER :: NSV_FFBEG = 0 ! with indices in the range :
 INTEGER :: NSV_FFEND = 0 ! NSV_FFBEG...NSV_FFEND
+!
 #endif
 ! Blaze smoke
 INTEGER :: NSV_FIRE    = 0 ! number of Blaze smoke scalar variables
diff --git a/src/common/micro/ini_lima_cold_mixed.F90 b/src/common/micro/ini_lima_cold_mixed.F90
index 86fe95eaacde80b550227a17344e3bb7070aaeec..12fca326bcaa6f7a708376d180894b31f96662d0 100644
--- a/src/common/micro/ini_lima_cold_mixed.F90
+++ b/src/common/micro/ini_lima_cold_mixed.F90
@@ -154,7 +154,7 @@ REAL :: ZRHOIW ! ice density
 !*       1.     CHARACTERISTICS OF THE SPECIES
 !   	        ------------------------------
 !
-CALL RAIN_ICE_PARAM_ASSOCIATE()
+!CALL RAIN_ICE_PARAM_ASSOCIATE()
 !
 !*       1.2    Ice crystal characteristics
 !
diff --git a/src/common/micro/lima_adjust_split.F90 b/src/common/micro/lima_adjust_split.F90
index 4466132f20e4d641be439f29b0473e5cef456998..e4d3ce84b52cfc42370c6b5b18ad619b9a4550d2 100644
--- a/src/common/micro/lima_adjust_split.F90
+++ b/src/common/micro/lima_adjust_split.F90
@@ -296,8 +296,8 @@ REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) &
                             ZRI, ZRI_IN,  &
                             Z_SIGS, Z_SRCS, &
                             ZW_MF, &
-                            ZCND, ZS, ZVEC1
-REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,3)) :: ZSIGQSAT2D, ZDUM
+                            ZCND, ZS, ZVEC1, ZDUM
+REAL, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2)) :: ZSIGQSAT2D
 !
 INTEGER, DIMENSION(SIZE(PRHODJ,1),SIZE(PRHODJ,2),SIZE(PRHODJ,3)) :: IVEC1
 !
diff --git a/src/mesonh/ext/boundaries.f90 b/src/mesonh/ext/boundaries.f90
index c74bce92f9e92c7c8ab278ff7d74f2e085446928..111dbc701d5c112ccc4d00cbf6331afb089f129c 100644
--- a/src/mesonh/ext/boundaries.f90
+++ b/src/mesonh/ext/boundaries.f90
@@ -199,6 +199,7 @@ USE MODD_PARAMETERS
 USE MODD_PARAM_LIMA, ONLY : NMOD_CCN, NMOD_IFN, LBOUND
 USE MODD_PARAM_n,    ONLY : CELEC,CCLOUD
 USE MODD_PASPOL,      ONLY : LPASPOL
+USE MODD_PRECISION,   ONLY: MNHREAL32
 USE MODD_REF_n
 USE MODD_SALT,        ONLY : LSALT
 
@@ -420,6 +421,24 @@ ELSE
 !
 END IF
 !
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+ZLBXVT(:,:,:)  = real(ZLBXVT(:,:,:),kind=MNHREAL32)
+ZLBXWT(:,:,:)  = real(ZLBXWT(:,:,:),kind=MNHREAL32)
+ZLBXTHT(:,:,:) = real(ZLBXTHT(:,:,:),kind=MNHREAL32)
+IF ( SIZE(PTKET,1) /= 0 ) THEN
+   ZLBXTKET(:,:,:) = real(ZLBXTKET(:,:,:),kind=MNHREAL32)
+END IF
+IF ( KRR > 0) THEN
+   ZLBXRT(:,:,:,:) = real(ZLBXRT(:,:,:,:),kind=MNHREAL32)
+END IF
+IF ( KSV > 0) THEN
+   ZLBXSVT(:,:,:,:) = real(ZLBXSVT(:,:,:,:),kind=MNHREAL32)
+END IF
+!     ============================================================ 
+!
 IF ( SIZE(PLBYTHS,1) /= 0 .AND.                       &
      (    HLBCY(1)=='OPEN' .OR. HLBCY(2)=='OPEN'    ))  THEN          
   ZLBYUT(:,:,:) = PLBYUM(:,:,:) + ZTSTEP * PLBYUS(:,:,:)
@@ -453,6 +472,24 @@ ELSE
 END IF
 !
 !
+!     ============================================================    
+!
+!  Reproductibility for RSTART -> truncate ZLB to real(knd=4) to have reproductible result
+!
+ZLBYUT(:,:,:)  = real(ZLBYUT(:,:,:),kind=MNHREAL32)
+ZLBYWT(:,:,:)  = real(ZLBYWT(:,:,:),kind=MNHREAL32)
+ZLBYTHT(:,:,:) = real(ZLBYTHT(:,:,:),kind=MNHREAL32)
+IF ( SIZE(PTKET,1) /= 0 ) THEN
+   ZLBYTKET(:,:,:) = real(ZLBYTKET(:,:,:),kind=MNHREAL32)
+END IF
+IF ( KRR > 0) THEN
+   ZLBYRT(:,:,:,:) = real(ZLBYRT(:,:,:,:),kind=MNHREAL32)
+END IF
+IF ( KSV > 0) THEN
+   ZLBYSVT(:,:,:,:) = real(ZLBYSVT(:,:,:,:),kind=MNHREAL32)
+END IF
+!     ============================================================ 
+!
 !-------------------------------------------------------------------------------
 ! PONDERATION COEFF for  Non-Normal velocities and pot temperature
 !
diff --git a/src/mesonh/ext/ini_budget.f90 b/src/mesonh/ext/ini_budget.f90
index 801952876e1ca4a93210909dbf147c264f8feee6..3adfe547cbf88c5ead1fe6ee53eda13afb2dd607 100644
--- a/src/mesonh/ext/ini_budget.f90
+++ b/src/mesonh/ext/ini_budget.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1995-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1995-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.
@@ -26,7 +26,7 @@ use modd_budget, only: nbudgets, tbudgets,
                        NBUDGET_U, NBUDGET_V, NBUDGET_W, NBUDGET_TH, NBUDGET_TKE,   &
                        NBUDGET_RV, NBUDGET_RC, NBUDGET_RR, NBUDGET_RI, NBUDGET_RS, &
                        NBUDGET_RG, NBUDGET_RH, NBUDGET_SV1
-use modd_nsv,    only: csvnames, nsv
+use modd_nsv,    only: nsv, tsvlist
 
 integer          :: ibudget
 integer          :: jsv
@@ -91,8 +91,8 @@ tbudgets(NBUDGET_RH)%nid      = NBUDGET_RH
 
 do jsv = 1, nsv
   ibudget = NBUDGET_SV1 - 1 + jsv
-  tbudgets(ibudget)%cname    = Trim( csvnames(jsv) )
-  tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // Trim( csvnames(jsv) )
+  tbudgets(ibudget)%cname    = Trim( tsvlist(jsv)%cmnhname )
+  tbudgets(ibudget)%ccomment = 'Budget for scalar variable ' // Trim( tsvlist(jsv)%cmnhname )
   tbudgets(ibudget)%nid      = ibudget
 end do
 
@@ -228,8 +228,8 @@ use modd_dyn,           only: lcorio, xseglen
 use modd_dyn_n,         only: xtstep, locean
 use modd_elec_descr,    only: linductive, lrelax2fw_ion
 use modd_field,         only: TYPEREAL
-use modd_nsv,           only: csvnames,                                                                            &
-                              nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end,      &
+use modd_fire,          only: lblaze
+use modd_nsv,           only: nsv_aerbeg, nsv_aerend, nsv_aerdepbeg, nsv_aerdepend, nsv_c2r2beg, nsv_c2r2end,      &
                               nsv_chembeg, nsv_chemend, nsv_chicbeg, nsv_chicend, nsv_csbeg, nsv_csend,            &
                               nsv_dstbeg, nsv_dstend, nsv_dstdepbeg, nsv_dstdepend, nsv_elecbeg, nsv_elecend,      &
 #ifdef MNH_FOREFIRE
@@ -238,11 +238,11 @@ use modd_nsv,           only: csvnames,
                               nsv_lgbeg, nsv_lgend,                                                                &
                               nsv_lima_beg, nsv_lima_end, nsv_lima_ccn_acti, nsv_lima_ccn_free, nsv_lima_hom_haze, &
                               nsv_lima_ifn_free, nsv_lima_ifn_nucl, nsv_lima_imm_nucl,                             &
-                              nsv_lima_nc, nsv_lima_nr, nsv_lima_ni, nsv_lima_scavmass, nsv_lima_spro,             &
-                              nsv_lima_ns, nsv_lima_ng, nsv_lima_nh,                                               &
+                              nsv_lima_nc, nsv_lima_nr, nsv_lima_ni, nsv_lima_ns, nsv_lima_ng, nsv_lima_nh,        &
+                              nsv_lima_scavmass, nsv_lima_spro,                                                    &
                               nsv_lnoxbeg, nsv_lnoxend, nsv_ppbeg, nsv_ppend,                                      &
                               nsv_sltbeg, nsv_sltend, nsv_sltdepbeg, nsv_sltdepend, nsv_snwbeg, nsv_snwend,        &
-                              nsv_user
+                              nsv_user, tsvlist
 use modd_parameters,   only: jphext
 use modd_param_c2r2,   only: ldepoc_c2r2 => ldepoc, lrain_c2r2 => lrain, lsedc_c2r2 => lsedc, lsupsat_c2r2 => lsupsat
 use modd_param_ice,    only: ladj_after, ladj_before, ldeposc_ice => ldeposc, lred, lsedic_ice => lsedic, lwarm_ice => lwarm
@@ -1029,6 +1029,12 @@ if ( lbu_rth ) then
   tzsource%cmnhname   = 'DCONV'
   tzsource%clongname  = 'KAFR convection'
   tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR'
+
+  call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
+
+  tzsource%cmnhname   = 'BLAZE'
+  tzsource%clongname  = 'blaze fire model contribution'
+  tzsource%lavailable = lblaze
   call Budget_source_add( tbudgets(NBUDGET_TH), tzsource )
 
   tzsource%cmnhname   = 'VTURB'
@@ -1456,6 +1462,11 @@ if ( tbudgets(NBUDGET_RV)%lenabled ) then
   tzsource%lavailable = hdconv == 'KAFR' .OR. hsconv == 'KAFR'
   call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
 
+  tzsource%cmnhname   = 'BLAZE'
+  tzsource%clongname  = 'blaze fire model contribution'
+  tzsource%lavailable = lblaze
+  call Budget_source_add( tbudgets(NBUDGET_RV), tzsource )
+
   tzsource%cmnhname   = 'VTURB'
   tzsource%clongname  = 'vertical turbulent diffusion'
   tzsource%lavailable = hturb == 'TKEL'
@@ -2945,7 +2956,7 @@ SV_BUDGETS: do jsv = 1, ksv
 
     tbudgets(ibudget)%tsources(:)%ngroup = 0
 
-    tzsource%ccomment = 'Budget of scalar variable ' // csvnames(jsv)
+    tzsource%ccomment = 'Budget of scalar variable ' // tsvlist(jsv)%cmnhname
     tzsource%ngrid    = 1
 
     tzsource%cunits   = '1'
@@ -4326,7 +4337,7 @@ end subroutine Budget_source_add
 subroutine Ini_budget_groups( tpbudgets, kbudim1, kbudim2, kbudim3 )
   use modd_budget,     only: tbudgetdata
   use modd_field,      only: TYPEINT, TYPEREAL
-  use modd_parameters, only: NMNHNAMELGTMAX, NSTDNAMELGTMAX
+  use modd_parameters, only: NMNHNAMELGTMAX, NSTDNAMELGTMAX, NLONGNAMELGTMAX, NUNITLGTMAX, NCOMMENTLGTMAX
 
   use mode_tools,  only: Quicksort
 
@@ -4337,9 +4348,9 @@ subroutine Ini_budget_groups( tpbudgets, kbudim1, kbudim2, kbudim3 )
 
   character(len=NMNHNAMELGTMAX)      :: ymnhname
   character(len=NSTDNAMELGTMAX)      :: ystdname
-  character(len=32)                  :: ylongname
-  character(len=40)                  :: yunits
-  character(len=100)                 :: ycomment
+  character(len=NLONGNAMELGTMAX)     :: ylongname
+  character(len=NUNITLGTMAX)         :: yunits
+  character(len=NCOMMENTLGTMAX)      :: ycomment
   integer                            :: ji, jj, jk
   integer                            :: isources ! Number of source terms in a budget
   integer                            :: inbgroups ! Number of budget groups
diff --git a/src/mesonh/ext/ini_nsv.f90 b/src/mesonh/ext/ini_nsv.f90
index 2ed8f9d4b1367d0dc4548910a5257b2eb4f08b24..3573e34ba187133e7b257c45e1af932de74f98c0 100644
--- a/src/mesonh/ext/ini_nsv.f90
+++ b/src/mesonh/ext/ini_nsv.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 2001-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 2001-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.
@@ -67,19 +67,21 @@ END MODULE MODI_INI_NSV
 !!      Modification    07/2017  (V. Vionnet) Add blowing snow condition
 !  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: add CSVNAMES and CSVNAMES_A to store the name of all the scalar variables
 !  P. Wautelet 30/03/2021: move NINDICE_CCN_IMM and NIMM initializations from init_aerosol_properties to ini_nsv
 !  B. Vie         06/2021: add prognostic supersaturation for LIMA
+!  P. Wautelet 26/11/2021: initialize TSVLIST_A
 !  A. Costes      12/2021: smoke tracer for fire model
-!! 
+!  P. Wautelet 14/01/2022: add CSV_CHEM_LIST(_A) to store the list of all chemical variables
+!                          + NSV_CHEM_LIST(_A) the size of the list
 !-------------------------------------------------------------------------------
 !
 !*       0.   DECLARATIONS
 !             ------------
 !
 USE MODD_BLOWSNOW,        ONLY: CSNOWNAMES, LBLOWSNOW, NBLOWSNOW3D, YPSNOW_INI
-USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, &
-                                LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP
+USE MODD_CH_AEROSOL
+! USE MODD_CH_AEROSOL,      ONLY: CAERONAMES, CDEAERNAMES, JPMODE, LAERINIT, LDEPOS_AER, LORILAM, &
+!                                 LVARSIGI, LVARSIGJ, NCARB, NM6_AER, NSOA, NSP
 USE MODD_CH_M9_n,         ONLY: CICNAMES, CNAMES, NEQ, NEQAQ
 USE MODD_CH_MNHC_n,       ONLY: LCH_PH, LUSECHEM, LUSECHAQ, LUSECHIC, CCH_SCHEME, LCH_CONV_LINOX
 USE MODD_CONDSAMP,        ONLY: LCONDSAMP, NCONDSAMP
@@ -89,7 +91,7 @@ USE MODD_DIAG_FLAG,       ONLY: LCHEMDIAG, LCHAQDIAG
 USE MODD_DUST,            ONLY: CDEDSTNAMES, CDUSTNAMES, JPDUSTORDER, LDEPOS_DST, LDSTINIT, LDSTPRES, LDUST, &
                                 LRGFIX_DST, LVARSIG, NMODE_DST, YPDEDST_INI, YPDUST_INI
 USE MODD_DYN_n,           ONLY: LHORELAX_SV,LHORELAX_SVC2R2,LHORELAX_SVC1R3,   &
-                                LHORELAX_SVLIMA,                               &
+                                LHORELAX_SVFIRE, LHORELAX_SVLIMA,              &
                                 LHORELAX_SVELEC,LHORELAX_SVCHEM,LHORELAX_SVLG, &
                                 LHORELAX_SVDST,LHORELAX_SVAER, LHORELAX_SVSLT, &
                                 LHORELAX_SVPP,LHORELAX_SVCS, LHORELAX_SVCHIC,  &
@@ -99,18 +101,17 @@ USE MODD_DYN_n,           ONLY: LHORELAX_SVFF
 #endif
 USE MODD_ELEC_DESCR,      ONLY: LLNOX_EXPLICIT
 USE MODD_ELEC_DESCR,      ONLY: CELECNAMES
+USE MODD_FIELD,           ONLY: TFIELDMETADATA, TYPEREAL
+USE MODD_FIRE
 #ifdef MNH_FOREFIRE
 USE MODD_FOREFIRE
 #endif
-!Blaze fire model
-USE MODD_FIRE
-USE MODD_DYN_n,     ONLY : LHORELAX_SVFIRE
-!
 USE MODD_ICE_C1R3_DESCR,  ONLY: C1R3NAMES
 USE MODD_LG,              ONLY: CLGNAMES, XLG1MIN, XLG2MIN, XLG3MIN
 USE MODD_LUNIT_n,         ONLY: TLUOUT
 USE MODD_NSV
 USE MODD_PARAM_C2R2,      ONLY: LSUPSAT
+USE MODD_PARAMETERS,      ONLY: NCOMMENTLGTMAX, NLONGNAMELGTMAX, NUNITLGTMAX
 USE MODD_PARAM_LIMA,      ONLY: NINDICE_CCN_IMM, NIMM, NMOD_CCN, LSCAV, LAERO_MASS, &
                                 NMOD_IFN, NMOD_IMM, LHHONI, &
                                 LSPRO,  &
@@ -142,17 +143,28 @@ INTEGER, INTENT(IN)             :: KMI ! model index
 !
 CHARACTER(LEN=2) :: YNUM2
 CHARACTER(LEN=3) :: YNUM3
+CHARACTER(LEN=NCOMMENTLGTMAX) :: YCOMMENT
+CHARACTER(LEN=NUNITLGTMAX)    :: YUNITS
+CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YAEROLONGNAMES
+CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YDUSTLONGNAMES
+CHARACTER(LEN=NLONGNAMELGTMAX), DIMENSION(:), ALLOCATABLE :: YSALTLONGNAMES
 INTEGER :: ILUOUT
+INTEGER :: ICHIDX ! Index for position in CSV_CHEM_LIST_A array
 INTEGER :: ISV ! total number of scalar variables
-INTEGER :: IMODEIDX, IMOMENTS
+INTEGER :: IMODEIDX
+INTEGER :: JAER
 INTEGER :: JI, JJ, JSV
 INTEGER :: JMODE, JMOM, JSV_NAME
+INTEGER :: INMOMENTS_DST, INMOMENTS_SLT !Number of moments for dust or salt
 !
 !-------------------------------------------------------------------------------
 !
-LINI_NSV = .TRUE.
+LINI_NSV(KMI) = .TRUE.
 
 ILUOUT = TLUOUT%NLU
+
+ICHIDX = 0
+NSV_CHEM_LIST_A(KMI) = 0
 !
 ! Users scalar variables are first considered
 !
@@ -361,7 +373,6 @@ ELSE
 END IF
 !
 #ifdef MNH_FOREFIRE
-
 ! ForeFire tracers
 IF (LFOREFIRE .AND. NFFSCALARS .GT. 0) THEN
   NSV_FF_A(KMI)    = NFFSCALARS
@@ -416,6 +427,7 @@ IF (LUSECHEM .AND.(NEQ .GT. 0)) THEN
   NSV_CHEMBEG_A(KMI)= ISV+1
   NSV_CHEMEND_A(KMI)= ISV+NSV_CHEM_A(KMI)
   ISV               = NSV_CHEMEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHEM_A(KMI)
 ELSE
   NSV_CHEM_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -439,6 +451,7 @@ IF ((LUSECHAQ .OR. LCHAQDIAG).AND.(NEQ .GT. 0)) THEN
     NSV_CHICBEG_A(KMI)= ISV+1
     NSV_CHICEND_A(KMI)= ISV+NSV_CHIC_A(KMI)
     ISV               = NSV_CHICEND_A(KMI)
+    NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_CHIC_A(KMI)
   ELSE
     NSV_CHIC_A(KMI) = 0
     NSV_CHICBEG_A(KMI)= 1
@@ -469,7 +482,6 @@ ELSE
 END IF
 ! aerosol variables
 IF (LORILAM.AND.(NEQ .GT. 0)) THEN
-  IF (ALLOCATED(XT_LS)) LAERINIT=.TRUE.
   NM6_AER = 0
   IF (LVARSIGI) NM6_AER = 1
   IF (LVARSIGJ) NM6_AER = NM6_AER + 1
@@ -477,6 +489,9 @@ IF (LORILAM.AND.(NEQ .GT. 0)) THEN
   NSV_AERBEG_A(KMI)= ISV+1
   NSV_AEREND_A(KMI)= ISV+NSV_AER_A(KMI)
   ISV              = NSV_AEREND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AER_A(KMI)
+
+  ALLOCATE( YAEROLONGNAMES(NSV_AER_A(KMI)) )
 ELSE
   NSV_AER_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -489,6 +504,7 @@ IF (LORILAM .AND. LDEPOS_AER(KMI)) THEN
   NSV_AERDEPBEG_A(KMI)= ISV+1
   NSV_AERDEPEND_A(KMI)= ISV+NSV_AERDEP_A(KMI)
   ISV                  = NSV_AERDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_AERDEP_A(KMI)
 ELSE
   NSV_AERDEP_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -505,15 +521,22 @@ IF (LDUST) THEN
   IF (ALLOCATED(XT_LS).AND. .NOT.(LDSTPRES)) LDSTINIT=.TRUE.
   IF (CPROGRAM == 'IDEAL ') LVARSIG = .TRUE.
   IF ((CPROGRAM == 'REAL  ').AND.LDSTINIT) LVARSIG = .TRUE.
-  NSV_DST_A(KMI)   = NMODE_DST*2
-  IF (LRGFIX_DST) THEN
-        NSV_DST_A(KMI) = NMODE_DST
-        LVARSIG = .FALSE.
+  !Determine number of moments
+  IF ( LRGFIX_DST ) THEN
+    INMOMENTS_DST = 1
+    IF ( LVARSIG ) CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'LVARSIG forced to FALSE because LRGFIX_DST is TRUE' )
+    LVARSIG = .FALSE.
+  ELSE IF ( LVARSIG ) THEN
+    INMOMENTS_DST = 3
+  ELSE
+    INMOMENTS_DST = 2
   END IF
-  IF (LVARSIG) NSV_DST_A(KMI) = NSV_DST_A(KMI) + NMODE_DST
+  !Number of entries = number of moments multiplied by number of modes
+  NSV_DST_A(KMI) = NMODE_DST * INMOMENTS_DST
   NSV_DSTBEG_A(KMI)= ISV+1
   NSV_DSTEND_A(KMI)= ISV+NSV_DST_A(KMI)
   ISV              = NSV_DSTEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DST_A(KMI)
 ELSE
   NSV_DST_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -526,6 +549,7 @@ IF ( LDUST .AND. LDEPOS_DST(KMI) ) THEN
   NSV_DSTDEPBEG_A(KMI)= ISV+1
   NSV_DSTDEPEND_A(KMI)= ISV+NSV_DSTDEP_A(KMI)
   ISV                  = NSV_DSTDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_DSTDEP_A(KMI)
 ELSE
   NSV_DSTDEP_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -542,15 +566,22 @@ IF (LSALT) THEN
   IF (ALLOCATED(XT_LS).AND. .NOT.(LSLTPRES)) LSLTINIT=.TRUE.
   IF (CPROGRAM == 'IDEAL ') LVARSIG_SLT = .TRUE.
   IF ((CPROGRAM == 'REAL  ').AND. LSLTINIT ) LVARSIG_SLT = .TRUE.
-  NSV_SLT_A(KMI)   = NMODE_SLT*2
-  IF (LRGFIX_SLT) THEN
-        NSV_SLT_A(KMI) = NMODE_SLT
-        LVARSIG_SLT = .FALSE.
+  !Determine number of moments
+  IF ( LRGFIX_SLT ) THEN
+    INMOMENTS_SLT = 1
+    IF ( LVARSIG_SLT ) CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'LVARSIG_SLT forced to FALSE because LRGFIX_SLT is TRUE' )
+    LVARSIG_SLT = .FALSE.
+  ELSE IF ( LVARSIG_SLT ) THEN
+    INMOMENTS_SLT = 3
+  ELSE
+    INMOMENTS_SLT = 2
   END IF
-  IF (LVARSIG_SLT) NSV_SLT_A(KMI) = NSV_SLT_A(KMI) + NMODE_SLT
+  !Number of entries = number of moments multiplied by number of modes
+  NSV_SLT_A(KMI) = NMODE_SLT * INMOMENTS_SLT
   NSV_SLTBEG_A(KMI)= ISV+1
   NSV_SLTEND_A(KMI)= ISV+NSV_SLT_A(KMI)
   ISV              = NSV_SLTEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLT_A(KMI)
 ELSE
   NSV_SLT_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -563,6 +594,7 @@ IF ( LSALT .AND. LDEPOS_SLT(KMI) ) THEN
   NSV_SLTDEPBEG_A(KMI)= ISV+1
   NSV_SLTDEPEND_A(KMI)= ISV+NSV_SLTDEP_A(KMI)
   ISV                  = NSV_SLTDEPEND_A(KMI)       
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_SLTDEP_A(KMI)
 ELSE
   NSV_SLTDEP_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -596,6 +628,7 @@ IF (.NOT.(LUSECHEM.OR.LCHEMDIAG) .AND. (LCH_CONV_LINOX.OR.LLNOX_EXPLICIT)) THEN
   NSV_LNOXBEG_A(KMI)= ISV+1
   NSV_LNOXEND_A(KMI)= ISV+NSV_LNOX_A(KMI)
   ISV               = NSV_LNOXEND_A(KMI)
+  NSV_CHEM_LIST_A(KMI) = NSV_CHEM_LIST_A(KMI) + NSV_LNOX_A(KMI)
 ELSE
   NSV_LNOX_A(KMI)   = 0
 ! force First index to be superior to last index
@@ -604,7 +637,7 @@ ELSE
   NSV_LNOXEND_A(KMI)= 0
 END IF
 !
-! finale number of NSV variable
+! Final number of NSV variables
 !
 NSV_A(KMI) = ISV
 !
@@ -726,26 +759,39 @@ IF ( LDUST ) THEN
 
   ! Initialization of dust names
   IF( .NOT. ALLOCATED( CDUSTNAMES ) ) THEN
-    IMOMENTS = ( NSV_DSTEND_A(KMI) - NSV_DSTBEG_A(KMI) + 1 ) / NMODE_DST
-    ALLOCATE( CDUSTNAMES(IMOMENTS * NMODE_DST) )
+    ALLOCATE( CDUSTNAMES(NSV_DST_A(KMI)) )
+    ALLOCATE( YDUSTLONGNAMES(NSV_DST_A(KMI)) )
     !Loop on all dust modes
-    IF ( IMOMENTS == 1 ) THEN
+    IF ( INMOMENTS_DST == 1 ) THEN
       DO JMODE = 1, NMODE_DST
         IMODEIDX = JPDUSTORDER(JMODE)
         JSV_NAME = ( IMODEIDX - 1 ) * 3 + 2
         CDUSTNAMES(JMODE) = YPDUST_INI(JSV_NAME)
+        !Add meaning of the ppv unit (here for moment 3)
+        YDUSTLONGNAMES(JMODE) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
       END DO
     ELSE
       DO JMODE = 1,NMODE_DST
         !Find which mode we are dealing with
         IMODEIDX = JPDUSTORDER(JMODE)
-        DO JMOM = 1, IMOMENTS
+        DO JMOM = 1, INMOMENTS_DST
           !Find which number this is of the list of scalars
-          JSV = ( JMODE - 1 ) * IMOMENTS + JMOM
+          JSV = ( JMODE - 1 ) * INMOMENTS_DST + JMOM
           !Find what name this corresponds to, always 3 moments assumed in YPDUST_INI
           JSV_NAME = ( IMODEIDX - 1) * 3 + JMOM
           !Get the right CDUSTNAMES which should follow the list of scalars transported in XSVM/XSVT
           CDUSTNAMES(JSV) = YPDUST_INI(JSV_NAME)
+          !Add meaning of the ppv unit
+          IF ( JMOM == 1 ) THEN !Corresponds to moment 0
+            YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [nb_aerosols/molec_{air}]'
+          ELSE IF ( JMOM == 2 ) THEN !Corresponds to moment 3
+            YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
+          ELSE IF ( JMOM == 3 ) THEN !Corresponds to moment 6
+            YDUSTLONGNAMES(JSV) = TRIM( YPDUST_INI(JSV_NAME) ) // ' [um6/molec_{air}*(cm3/m3)]'
+          ELSE
+            CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for DUST' )
+            YDUSTLONGNAMES(JMODE) = TRIM( YPDUST_INI(JSV_NAME) )
+          END IF
         ENDDO ! Loop on moments
       ENDDO    ! Loop on dust modes
     END IF
@@ -769,26 +815,39 @@ IF ( LSALT ) THEN
   IF ( NMODE_SLT < 1 .OR. NMODE_SLT > 8 ) CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'NMODE_SLT must in the 1 to 8 interval' )
 
   IF( .NOT. ALLOCATED( CSALTNAMES ) ) THEN
-    IMOMENTS = ( NSV_SLTEND_A(KMI) - NSV_SLTBEG_A(KMI) + 1 ) / NMODE_SLT
-    ALLOCATE( CSALTNAMES(IMOMENTS * NMODE_SLT) )
+    ALLOCATE( CSALTNAMES(NSV_SLT_A(KMI)) )
+    ALLOCATE( YSALTLONGNAMES(NSV_DST_A(KMI)) )
     !Loop on all dust modes
-    IF ( IMOMENTS == 1 ) THEN
+    IF ( INMOMENTS_SLT == 1 ) THEN
       DO JMODE = 1, NMODE_SLT
         IMODEIDX = JPSALTORDER(JMODE)
         JSV_NAME = ( IMODEIDX - 1 ) * 3 + 2
         CSALTNAMES(JMODE) = YPSALT_INI(JSV_NAME)
+        !Add meaning of the ppv unit (here for moment 3)
+        YSALTLONGNAMES(JMODE) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
       END DO
     ELSE
       DO JMODE = 1, NMODE_SLT
         !Find which mode we are dealing with
         IMODEIDX = JPSALTORDER(JMODE)
-        DO JMOM = 1, IMOMENTS
+        DO JMOM = 1, INMOMENTS_SLT
           !Find which number this is of the list of scalars
-          JSV = ( JMODE - 1 ) * IMOMENTS + JMOM
+          JSV = ( JMODE - 1 ) * INMOMENTS_SLT + JMOM
           !Find what name this corresponds to, always 3 moments assumed in YPSALT_INI
           JSV_NAME = ( IMODEIDX - 1 ) * 3 + JMOM
           !Get the right CSALTNAMES which should follow the list of scalars transported in XSVM/XSVT
           CSALTNAMES(JSV) = YPSALT_INI(JSV_NAME)
+          !Add meaning of the ppv unit
+          IF ( JMOM == 1 ) THEN !Corresponds to moment 0
+            YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [nb_aerosols/molec_{air}]'
+          ELSE IF ( JMOM == 2 ) THEN !Corresponds to moment 3
+            YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [molec_{aer}/molec_{air}]'
+          ELSE IF ( JMOM == 3 ) THEN !Corresponds to moment 6
+            YSALTLONGNAMES(JSV) = TRIM( YPSALT_INI(JSV_NAME) ) // ' [um6/molec_{air}*(cm3/m3)]'
+          ELSE
+            CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for SALT' )
+            YSALTLONGNAMES(JMODE) = TRIM( YPSALT_INI(JSV_NAME) )
+          END IF
         ENDDO ! Loop on moments
       ENDDO    ! Loop on dust modes
     END IF
@@ -809,131 +868,421 @@ END IF
 ! Initialize scalar variable names for snow
 IF ( LBLOWSNOW ) THEN
   IF( .NOT. ALLOCATED( CSNOWNAMES ) ) THEN
-    IMOMENTS = ( NSV_SNWEND_A(KMI) - NSV_SNWBEG_A(KMI) + 1 )
-    ALLOCATE( CSNOWNAMES(IMOMENTS) )
-    DO JMOM = 1, IMOMENTS
+    ALLOCATE( CSNOWNAMES(NSV_SNW_A(KMI)) )
+    DO JMOM = 1, NSV_SNW_A(KMI)
       CSNOWNAMES(JMOM) = YPSNOW_INI(JMOM)
-    ENDDO ! Loop on moments
+    END DO
   END IF
 END IF
 
-!Fill CSVNAMES_A for model KMI
+!Fill metadata for model KMI
 DO JSV = 1, NSV_USER_A(KMI)
   WRITE( YNUM3, '( I3.3 )' ) JSV
-  CSVNAMES_A(JSV,KMI) = 'SVUSER'//YNUM3
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(         &
+    CMNHNAME   = 'SVUSER' // YNUM3,             &
+    CSTDNAME   = '',                            &
+    CLONGNAME  = 'SVUSER' // YNUM3,             &
+    CUNITS     = 'kg kg-1',                     &
+    CDIR       = 'XY',                          &
+    CCOMMENT   = 'X_Y_Z_' // 'SVUSER' // YNUM3, &
+    NGRID      = 1,                             &
+    NTYPE      = TYPEREAL,                      &
+    NDIMS      = 3,                             &
+    LTIMEDEP   = .TRUE.                         )
 END DO
 
 DO JSV = NSV_C2R2BEG_A(KMI), NSV_C2R2END_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) )
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
+    CMNHNAME   = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                          &
+    CLONGNAME  = TRIM( C2R2NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CUNITS     = 'm-3',                                       &
+    CDIR       = 'XY',                                        &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                  &
+    NGRID      = 1,                                           &
+    NTYPE      = TYPEREAL,                                    &
+    NDIMS      = 3,                                           &
+    LTIMEDEP   = .TRUE.                                       )
 END DO
 
 DO JSV = NSV_C1R3BEG_A(KMI), NSV_C1R3END_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( C1R3NAMES(JSV-NSV_C1R3BEG_A(KMI)+1) )
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
+    CMNHNAME   = TRIM( C1R3NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                          &
+    CLONGNAME  = TRIM( C1R3NAMES(JSV-NSV_C2R2BEG_A(KMI)+1) ), &
+    CUNITS     = 'm-3',                                       &
+    CDIR       = 'XY',                                        &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                  &
+    NGRID      = 1,                                           &
+    NTYPE      = TYPEREAL,                                    &
+    NDIMS      = 3,                                           &
+    LTIMEDEP   = .TRUE.                                       )
 END DO
 
 DO JSV = NSV_LIMA_BEG_A(KMI), NSV_LIMA_END_A(KMI)
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SV LIMA ' // YNUM3,        &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = '',                         &
+    CUNITS     = 'kg-1',                     &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
+
   IF ( JSV == NSV_LIMA_NC_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(1) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(1) )
   ELSE IF ( JSV == NSV_LIMA_NR_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(2) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(2) )
   ELSE IF ( JSV >= NSV_LIMA_CCN_FREE_A(KMI) .AND. JSV < NSV_LIMA_CCN_ACTI_A(KMI) ) THEN
     WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_FREE_A(KMI) + 1
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(3) ) // YNUM2
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(3) ) // YNUM2
   ELSE IF (JSV >= NSV_LIMA_CCN_ACTI_A(KMI) .AND. JSV < ( NSV_LIMA_CCN_ACTI_A(KMI) + NMOD_CCN ) ) THEN
     WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_CCN_ACTI_A(KMI) + 1
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(4) ) // YNUM2
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(4) ) // YNUM2
   ELSE IF ( JSV == NSV_LIMA_SCAVMASS_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CAERO_MASS(1) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CAERO_MASS(1) )
+    TSVLIST_A(JSV, KMI)%CUNITS = 'kg kg-1'
   ELSE IF ( JSV == NSV_LIMA_NI_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(1) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(1) )
   ELSE IF ( JSV == NSV_LIMA_NS_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(2) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(2) )
   ELSE IF ( JSV == NSV_LIMA_NG_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(3) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(3) )
   ELSE IF ( JSV == NSV_LIMA_NH_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(4) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(4) )
   ELSE IF ( JSV >= NSV_LIMA_IFN_FREE_A(KMI) .AND. JSV < NSV_LIMA_IFN_NUCL_A(KMI) ) THEN
     WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_FREE_A(KMI) + 1
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(5) ) // YNUM2
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(5) ) // YNUM2
   ELSE IF ( JSV >= NSV_LIMA_IFN_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IFN_NUCL_A(KMI) + NMOD_IFN ) ) THEN
     WRITE( YNUM2, '( I2.2 )' ) JSV - NSV_LIMA_IFN_NUCL_A(KMI) + 1
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(6) ) // YNUM2
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(6) ) // YNUM2
   ELSE IF ( JSV >= NSV_LIMA_IMM_NUCL_A(KMI) .AND. JSV < ( NSV_LIMA_IMM_NUCL_A(KMI) + NMOD_IMM ) ) THEN
     WRITE( YNUM2, '( I2.2 )' ) NINDICE_CCN_IMM(JSV-NSV_LIMA_IMM_NUCL_A(KMI)+1)
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(7) ) // YNUM2
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(7) ) // YNUM2
   ELSE IF ( JSV == NSV_LIMA_HOM_HAZE_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_COLD_NAMES(8) )
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_COLD_NAMES(8) )
   ELSE IF ( JSV == NSV_LIMA_SPRO_A(KMI) ) THEN
-    CSVNAMES_A(JSV,KMI) = TRIM( CLIMA_WARM_NAMES(5) )
+    TSVLIST_A(JSV, KMI)%CUNITS = '1'
+    TSVLIST_A(JSV, KMI)%CMNHNAME = TRIM( CLIMA_WARM_NAMES(5) )
   ELSE
     CALL Print_msg( NVERB_FATAL, 'GEN', 'INI_NSV', 'invalid index for LIMA' )
   END IF
+
+   TSVLIST_A(JSV, KMI)%CLONGNAME = TRIM( TSVLIST_A(JSV, KMI)%CMNHNAME )
 END DO
 
 DO JSV = NSV_ELECBEG_A(KMI), NSV_ELECEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) )
+  IF ( JSV > NSV_ELECBEG .AND. JSV < NSV_ELECEND ) THEN
+    YUNITS = 'C kg-1'
+    WRITE( YCOMMENT, '( A6, A3, I3.3 )' ) 'X_Y_Z_', 'SVT', JSV
+  ELSE
+    YUNITS = 'kg-1'
+    WRITE( YCOMMENT, '( A6, A3, I3.3, A8 )' ) 'X_Y_Z_', 'SVT', JSV, ' (nb ions/kg)'
+  END IF
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                        &
+    CMNHNAME   = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                           &
+    CLONGNAME  = TRIM( CELECNAMES(JSV-NSV_ELECBEG_A(KMI)+1) ), &
+    CUNITS     = TRIM( YUNITS ),                               &
+    CDIR       = 'XY',                                         &
+    CCOMMENT   = TRIM( YCOMMENT ),                             &
+    NGRID      = 1,                                            &
+    NTYPE      = TYPEREAL,                                     &
+    NDIMS      = 3,                                            &
+    LTIMEDEP   = .TRUE.                                        )
 END DO
 
 DO JSV = NSV_LGBEG_A(KMI), NSV_LGEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) )
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                    &
+    CMNHNAME   = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                       &
+    CLONGNAME  = TRIM( CLGNAMES(JSV-NSV_LGBEG_A(KMI)+1) ), &
+    CUNITS     = 'm',                                      &
+    CDIR       = 'XY',                                     &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,               &
+    NGRID      = 1,                                        &
+    NTYPE      = TYPEREAL,                                 &
+    NDIMS      = 3,                                        &
+    LTIMEDEP   = .TRUE.                                    )
 END DO
 
 DO JSV = NSV_PPBEG_A(KMI), NSV_PPEND_A(KMI)
   WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_PPBEG_A(KMI)+1
-  CSVNAMES_A(JSV,KMI) = 'SVPP'//YNUM3
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVPP' // YNUM3,            &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVPP' // YNUM3,            &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
 END DO
 
 #ifdef MNH_FOREFIRE
 DO JSV = NSV_FFBEG_A(KMI), NSV_FFEND_A(KMI)
   WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_FFBEG_A(KMI)+1
-  CSVNAMES_A(JSV,KMI) = 'SVFF'//YNUM3
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVFF' // YNUM3,            &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVFF' // YNUM3,            &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
 END DO
 #endif
 
 DO JSV = NSV_CSBEG_A(KMI), NSV_CSEND_A(KMI)
   WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_CSBEG_A(KMI)
-  CSVNAMES_A(JSV,KMI) = 'SVCS'//YNUM3
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'SVCS' // YNUM3,            &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'SVCS' // YNUM3,            &
+    CUNITS     = 'kg kg-1',                  &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
 END DO
 
 DO JSV = NSV_CHEMBEG_A(KMI), NSV_CHEMEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                    &
+    CMNHNAME   = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                       &
+    CLONGNAME  = TRIM( CNAMES(JSV-NSV_CHEMBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                    &
+    CDIR       = 'XY',                                     &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,               &
+    NGRID      = 1,                                        &
+    NTYPE      = TYPEREAL,                                 &
+    NDIMS      = 3,                                        &
+    LTIMEDEP   = .TRUE.                                    )
 END DO
 
 DO JSV = NSV_CHICBEG_A(KMI), NSV_CHICEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                      &
+    CMNHNAME   = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                         &
+    CLONGNAME  = TRIM( CICNAMES(JSV-NSV_CHICBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                      &
+    CDIR       = 'XY',                                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                 &
+    NGRID      = 1,                                          &
+    NTYPE      = TYPEREAL,                                   &
+    NDIMS      = 3,                                          &
+    LTIMEDEP   = .TRUE.                                      )
 END DO
 
 DO JSV = NSV_AERBEG_A(KMI), NSV_AEREND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  !Determine moment to add meaning of the ppv unit
+  JAER = JSV - NSV_AERBEG_A(KMI) + 1
+  IF ( ANY( JAER == [JP_CH_M0i, JP_CH_M0j] ) ) THEN
+    !Moment 0
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [nb_aerosols/molec_{air}]'
+  ELSE IF ( ANY( JAER == [ JP_CH_SO4i, JP_CH_SO4j, JP_CH_NO3i, JP_CH_NO3j, JP_CH_H2Oi, JP_CH_H2Oj, JP_CH_NH3i, JP_CH_NH3j,   &
+                           JP_CH_OCi,  JP_CH_OCj,  JP_CH_BCi,  JP_CH_BCj,  JP_CH_DSTi, JP_CH_DSTj ] )                        &
+            .OR. ( NSOA == 10 .AND.                                                                                          &
+                   ANY( JAER == [ JP_CH_SOA1i, JP_CH_SOA1j, JP_CH_SOA2i, JP_CH_SOA2j, JP_CH_SOA3i, JP_CH_SOA3j, JP_CH_SOA4i, &
+                                  JP_CH_SOA4j, JP_CH_SOA5i, JP_CH_SOA5j, JP_CH_SOA6i, JP_CH_SOA6j, JP_CH_SOA7i, JP_CH_SOA7j, &
+                                  JP_CH_SOA8i, JP_CH_SOA8j, JP_CH_SOA9i, JP_CH_SOA9j, JP_CH_SOA10i, JP_CH_SOA10j ] )       ) ) THEN
+    !Moment 3
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [molec_{aer}/molec_{air}]'
+  ELSE IF ( ( LVARSIGI .AND. JSV == JP_CH_M6i ) .OR. ( LVARSIGJ .AND. JSV == JP_CH_M6j ) ) THEN
+    !Moment 6
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) ) // ' [um6/molec_{air}*(cm3/m3)]'
+  ELSE
+    CALL Print_msg( NVERB_WARNING, 'GEN', 'INI_NSV', 'unknown moment for AER' )
+    YAEROLONGNAMES = TRIM( CAERONAMES(JAER) )
+  END IF
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CAERONAMES(JSV-NSV_AERBEG_A(KMI)+1) ),     &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( YAEROLONGNAMES(JSV-NSV_AERBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
 END DO
 
 DO JSV = NSV_AERDEPBEG_A(KMI), NSV_AERDEPEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( CDEAERNAMES(JSV-NSV_AERDEPBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
 END DO
 
 DO JSV = NSV_DSTBEG_A(KMI), NSV_DSTEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDUSTNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ),     &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( YDUSTLONGNAMES(JSV-NSV_DSTBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
 END DO
 
 DO JSV = NSV_DSTDEPBEG_A(KMI), NSV_DSTDEPEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( CDEDSTNAMES(JSV-NSV_DSTDEPBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
 END DO
 
 DO JSV = NSV_SLTBEG_A(KMI), NSV_SLTEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CSALTNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ),     &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( YSALTLONGNAMES(JSV-NSV_SLTBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
 END DO
 
 DO JSV = NSV_SLTDEPBEG_A(KMI), NSV_SLTDEPEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) )
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) )
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                           &
+    CMNHNAME   = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                              &
+    CLONGNAME  = TRIM( CDESLTNAMES(JSV-NSV_SLTDEPBEG_A(KMI)+1) ), &
+    CUNITS     = 'ppv',                                           &
+    CDIR       = 'XY',                                            &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                      &
+    NGRID      = 1,                                               &
+    NTYPE      = TYPEREAL,                                        &
+    NDIMS      = 3,                                               &
+    LTIMEDEP   = .TRUE.                                           )
 END DO
 
 DO JSV = NSV_SNWBEG_A(KMI), NSV_SNWEND_A(KMI)
-  CSVNAMES_A(JSV,KMI) = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) )
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(                       &
+    CMNHNAME   = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ), &
+    CSTDNAME   = '',                                          &
+    CLONGNAME  = TRIM( CSNOWNAMES(JSV-NSV_SNWBEG_A(KMI)+1) ), &
+    CUNITS     = 'kg kg-1',                                   &
+    CDIR       = 'XY',                                        &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3,                  &
+    NGRID      = 1,                                           &
+    NTYPE      = TYPEREAL,                                    &
+    NDIMS      = 3,                                           &
+    LTIMEDEP   = .TRUE.                                       )
 END DO
 
+!Check if there is at most 1 LINOX scalar variable
+!if not, the name must be modified and different for all of them
+IF ( NSV_LNOX_A(KMI) > 1 ) &
+  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'NSV_LNOX_A>1: problem with the names of the corresponding scalar variables' )
+
 DO JSV = NSV_LNOXBEG_A(KMI), NSV_LNOXEND_A(KMI)
-  WRITE( YNUM3, '( I3.3 )' ) JSV-NSV_LNOXBEG_A(KMI)+1
-  CSVNAMES_A(JSV,KMI) = 'SVLNOX'//YNUM3
+  ICHIDX = ICHIDX + 1
+  CSV_CHEM_LIST_A(ICHIDX, KMI) = 'LINOX'
+
+  WRITE( YNUM3, '( I3.3 )' ) JSV
+
+  TSVLIST_A(JSV, KMI) = TFIELDMETADATA(      &
+    CMNHNAME   = 'LINOX',                    &
+    CSTDNAME   = '',                         &
+    CLONGNAME  = 'LINOX',                    &
+    CUNITS     = 'ppv',                      &
+    CDIR       = 'XY',                       &
+    CCOMMENT   = 'X_Y_Z_' // 'SVT' // YNUM3, &
+    NGRID      = 1,                          &
+    NTYPE      = TYPEREAL,                   &
+    NDIMS      = 3,                          &
+    LTIMEDEP   = .TRUE.                      )
 END DO
 
+IF ( ICHIDX /= NSV_CHEM_LIST_A(KMI) ) &
+  CALL Print_msg( NVERB_ERROR, 'GEN', 'INI_NSV', 'ICHIDX /= NSV_CHEM_LIST_A(KMI)' )
+
 END SUBROUTINE INI_NSV
diff --git a/src/mesonh/ext/modeln.f90 b/src/mesonh/ext/modeln.f90
index 8483c72b39309b33fbe9e17c19389311ff82e183..d1f6da84bd60cf9771f89e13f426e058d8284ba9 100644
--- a/src/mesonh/ext/modeln.f90
+++ b/src/mesonh/ext/modeln.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2023 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -9,10 +9,15 @@
 !
 INTERFACE
 !
-       SUBROUTINE MODEL_n(KTCOUNT,OEXIT)
+       SUBROUTINE MODEL_n( KTCOUNT, TPBAKFILE, TPDTMODELN, OEXIT )
 !
-INTEGER, INTENT(IN)   :: KTCOUNT  ! temporal loop index of model KMODEL
-LOGICAL, INTENT(INOUT):: OEXIT    ! switch for the end of the temporal loop
+USE MODD_IO,        ONLY: TFILEDATA
+USE MODD_TYPE_DATE, ONLY: DATE_TIME
+!
+INTEGER,                  INTENT(IN)    :: KTCOUNT    ! Temporal loop index of model KMODEL
+TYPE(TFILEDATA), POINTER, INTENT(OUT)   :: TPBAKFILE  ! Pointer for backup file
+TYPE(DATE_TIME),          INTENT(OUT)   :: TPDTMODELN ! Time of current model computation
+LOGICAL,                  INTENT(INOUT) :: OEXIT      ! Switch for the end of the temporal loop
 !
 END SUBROUTINE MODEL_n
 !
@@ -21,7 +26,7 @@ END INTERFACE
 END MODULE MODI_MODEL_n
 
 !     ################################### 
-      SUBROUTINE MODEL_n(KTCOUNT, OEXIT) 
+      SUBROUTINE MODEL_n( KTCOUNT, TPBAKFILE, TPDTMODELN, OEXIT )
 !     ###################################
 !
 !!****  *MODEL_n * -monitor of the model version _n 
@@ -274,6 +279,9 @@ END MODULE MODI_MODEL_n
 !  J.L. Redelsperger 03/2021: add Call NHOA_COUPLN (coupling O & A LES version)
 !  A. Costes      12/2021: add Blaze fire model
 !  C. Barthe   07/04/2022: deallocation of ZSEA
+!  P. Wautelet 08/12/2022: bugfix if no TDADFILE
+!  P. Wautelet 13/01/2023: manage close of backup files outside of MODEL_n
+!                          (useful to close them in reverse model order (child before parent, needed by WRITE_BALLOON_n)
 !!-------------------------------------------------------------------------------
 !
 !*       0.     DECLARATIONS
@@ -363,8 +371,10 @@ USE MODD_TIME_n
 USE MODD_TIMEZ
 USE MODD_TURB_CLOUD,     ONLY: NMODEL_CLOUD,CTURBLEN_CLOUD,XCEI
 USE MODD_TURB_n
+USE MODD_TYPE_DATE,      ONLY: DATE_TIME
 USE MODD_VISCOSITY
 !
+USE MODE_AIRCRAFT_BALLOON
 use mode_budget,           only: Budget_store_init, Budget_store_end
 USE MODE_DATETIME
 USE MODE_ELEC_ll
@@ -382,9 +392,11 @@ USE MODE_MODELN_HANDLER
 USE MODE_MPPDB
 USE MODE_MSG
 USE MODE_ONE_WAY_n
+USE MODE_WRITE_AIRCRAFT_BALLOON
 use mode_write_les_n,               only: Write_les_n
 use mode_write_lfifmn_fordiachro_n, only: WRITE_LFIFMN_FORDIACHRO_n
 USE MODE_WRITE_PROFILER_n,          ONLY: WRITE_PROFILER_n
+USE MODE_WRITE_STATION_n,           ONLY: WRITE_STATION_n
 !
 USE MODI_ADDFLUCTUATIONS
 USE MODI_ADVECTION_METSV
@@ -392,7 +404,6 @@ USE MODI_ADVECTION_UVW
 USE MODI_ADVECTION_UVW_CEN
 USE MODI_ADV_FORCING_n
 USE MODI_AER_MONITOR_n
-USE MODI_AIRCRAFT_BALLOON
 USE MODI_BLOWSNOW
 USE MODI_BOUNDARIES
 USE MODI_BUDGET_FLAGS
@@ -447,12 +458,10 @@ USE MODI_TURB_CLOUD_INDEX
 USE MODI_TWO_WAY
 USE MODI_UPDATE_NSV
 USE MODI_VISCOSITY
-USE MODI_WRITE_AIRCRAFT_BALLOON
 USE MODI_WRITE_DESFM_n
 USE MODI_WRITE_DIAG_SURF_ATM_N
 USE MODI_WRITE_LFIFM_n
 USE MODI_WRITE_SERIES_n
-USE MODI_WRITE_STATION_n
 USE MODI_WRITE_SURF_ATM_N
 !
 USE MODD_FIRE
@@ -462,8 +471,10 @@ IMPLICIT NONE
 !
 !
 !
-INTEGER, INTENT(IN)   :: KTCOUNT
-LOGICAL, INTENT(INOUT):: OEXIT
+INTEGER,                  INTENT(IN)    :: KTCOUNT    ! Temporal loop index of model KMODEL
+TYPE(TFILEDATA), POINTER, INTENT(OUT)   :: TPBAKFILE  ! Pointer for backup file
+TYPE(DATE_TIME),          INTENT(OUT)   :: TPDTMODELN ! Time of current model computation
+LOGICAL,                  INTENT(INOUT) :: OEXIT      ! Switch for the end of the temporal loop
 !
 !*       0.2   declarations of local variables
 !
@@ -482,6 +493,7 @@ REAL(kind=MNHTIME), DIMENSION(2) :: ZTIME_STEP,ZTIME_STEP_PTS
 CHARACTER                 :: YMI
 INTEGER                   :: IPOINTS
 CHARACTER(len=16)         :: YTCOUNT,YPOINTS
+CHARACTER(LEN=:), ALLOCATABLE :: YDADNAME
 !
 INTEGER :: ISYNCHRO          ! model synchronic index relative to its father
                              ! = 1  for the first time step in phase with DAD
@@ -552,16 +564,16 @@ LOGICAL :: GCLD                     ! conditionnal call for dust wet deposition
 LOGICAL :: GCLOUD_ONLY              ! conditionnal radiation computations for
                                 !      the only cloudy columns
 REAL, DIMENSION(SIZE(XRSVS,1), SIZE(XRSVS,2), SIZE(XRSVS,3), NSV_AER)  :: ZWETDEPAER
-
-
 !
-TYPE(TFILEDATA),POINTER :: TZBAKFILE, TZOUTFILE
+TYPE(TFILEDATA),POINTER :: TZOUTFILE
 ! TYPE(TFILEDATA),SAVE    :: TZDIACFILE
 !-------------------------------------------------------------------------------
 !
-TZBAKFILE=> NULL()
+TPBAKFILE=> NULL()
 TZOUTFILE=> NULL()
 !
+TPDTMODELN = TDTCUR
+!
 !*       0.    MICROPHYSICAL SCHEME
 !              ------------------- 
 SELECT CASE(CCLOUD)
@@ -997,18 +1009,24 @@ IF ( nfile_backup_current < NBAK_NUMB ) THEN
   IF ( KTCOUNT == TBACKUPN(nfile_backup_current + 1)%NSTEP ) THEN
     nfile_backup_current = nfile_backup_current + 1
     !
-    TZBAKFILE => TBACKUPN(nfile_backup_current)%TFILE
-    IVERB    = TZBAKFILE%NLFIVERB
+    TPBAKFILE => TBACKUPN(nfile_backup_current)%TFILE
+    IVERB    = TPBAKFILE%NLFIVERB
     !
-    CALL IO_File_open(TZBAKFILE)
+    CALL IO_File_open(TPBAKFILE)
     !
-    CALL WRITE_DESFM_n(IMI,TZBAKFILE)
+    CALL WRITE_DESFM_n(IMI,TPBAKFILE)
     CALL IO_Header_write( TBACKUPN(nfile_backup_current)%TFILE )
-    CALL WRITE_LFIFM_n( TBACKUPN(nfile_backup_current)%TFILE, TBACKUPN(nfile_backup_current)%TFILE%TDADFILE%CNAME )
-    TOUTDATAFILE => TZBAKFILE
-    CALL MNHWRITE_ZS_DUMMY_n(TZBAKFILE)
+    IF ( ASSOCIATED( TBACKUPN(nfile_backup_current)%TFILE%TDADFILE ) ) THEN
+      YDADNAME = TBACKUPN(nfile_backup_current)%TFILE%TDADFILE%CNAME
+    ELSE
+      ! Set a dummy name for the dad file. Its non-zero size will allow the writing of some data in the backup file
+      YDADNAME = 'DUMMY'
+    END IF
+    CALL WRITE_LFIFM_n( TBACKUPN(nfile_backup_current)%TFILE, TRIM( YDADNAME ) )
+    TOUTDATAFILE => TPBAKFILE
+    CALL MNHWRITE_ZS_DUMMY_n(TPBAKFILE)
     IF (CSURF=='EXTE') THEN
-      TFILE_SURFEX => TZBAKFILE
+      TFILE_SURFEX => TPBAKFILE
       CALL GOTO_SURFEX(IMI)
       CALL WRITE_SURF_ATM_n(YSURF_CUR,'MESONH','ALL',.FALSE.)
       IF ( KTCOUNT > 1) THEN
@@ -1020,10 +1038,10 @@ IF ( nfile_backup_current < NBAK_NUMB ) THEN
     !
     ! Reinitialize Lagragian variables at every model backup
     IF (LLG .AND. LINIT_LG .AND. CINIT_LG=='FMOUT') THEN
-      CALL INI_LG(XXHAT,XYHAT,XZZ,XSVT,XLBXSVM,XLBYSVM)
+      CALL INI_LG( XXHATM, XYHATM, XZZ, XSVT, XLBXSVM, XLBYSVM )
       IF (IVERB>=5) THEN
         WRITE(UNIT=ILUOUT,FMT=*) '************************************'
-        WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(TZBAKFILE%CNAME),' backup'
+        WRITE(UNIT=ILUOUT,FMT=*) '*** Lagrangian variables refreshed after ',TRIM(TPBAKFILE%CNAME),' backup'
         WRITE(UNIT=ILUOUT,FMT=*) '************************************'
       END IF
     END IF
@@ -1034,11 +1052,11 @@ IF ( nfile_backup_current < NBAK_NUMB ) THEN
 !
   ELSE
     !Necessary to have a 'valid' CNAME when calling some subroutines
-    TZBAKFILE => TFILE_DUMMY
+    TPBAKFILE => TFILE_DUMMY
   END IF
 ELSE
   !Necessary to have a 'valid' CNAME when calling some subroutines
-  TZBAKFILE => TFILE_DUMMY
+  TPBAKFILE => TFILE_DUMMY
 END IF
 !
 IF ( nfile_output_current < NOUT_NUMB ) THEN
@@ -1235,8 +1253,9 @@ IF (LCARTESIAN) THEN
   CALL SM_GRIDCART(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XDXHAT,XDYHAT,XZZ,ZJ)
   XMAP=1.
 ELSE
-  CALL SM_GRIDPROJ(XXHAT,XYHAT,XZHAT,XZS,LSLEVE,XLEN1,XLEN2,XZSMT,XLATORI,XLONORI, &
-                   XMAP,XLAT,XLON,XDXHAT,XDYHAT,XZZ,ZJ)
+  CALL SM_GRIDPROJ( XXHAT, XYHAT, XZHAT, XXHATM, XYHATM, XZS,      &
+                    LSLEVE, XLEN1, XLEN2, XZSMT, XLATORI, XLONORI, &
+                    XMAP, XLAT, XLON, XDXHAT, XDYHAT, XZZ, ZJ      )
 END IF
 !
 IF ( LFORCING ) THEN
@@ -1460,7 +1479,7 @@ XT_RELAX = XT_RELAX + ZTIME2 - ZTIME1 &
 !
 ZTIME1 = ZTIME2
 !
-CALL PHYS_PARAM_n( KTCOUNT, TZBAKFILE,                            &
+CALL PHYS_PARAM_n( KTCOUNT, TPBAKFILE,                            &
                    XT_RAD,  XT_SHADOWS, XT_DCONV, XT_GROUND,      &
                    XT_MAFL, XT_DRAG, XT_EOL, XT_TURB,  XT_TRACER, &
                    ZTIME, ZWETDEPAER, GMASKkids, GCLOUD_ONLY      )
@@ -1640,7 +1659,7 @@ XTIME_LES_BU_PROCESS = 0.
 !
 CALL MPPDB_CHECK3DM("before ADVEC_METSV:XU/V/W/TH/TKE/T,XRHODJ",PRECISION,&
                    &  XUT, XVT, XWT, XTHT, XTKET,XRHODJ)
- CALL ADVECTION_METSV ( TZBAKFILE, CUVW_ADV_SCHEME,                    &
+ CALL ADVECTION_METSV ( TPBAKFILE, CUVW_ADV_SCHEME,                    &
                  CMET_ADV_SCHEME, CSV_ADV_SCHEME, CCLOUD, NSPLIT,      &
                  LSPLIT_CFL, XSPLIT_CFL, LCFL_WRIT,                    &
                  CLBCX, CLBCY, NRR, NSV, TDTCUR, XTSTEP,               &
@@ -1742,7 +1761,7 @@ XT_ADVUVW = XT_ADVUVW + ZTIME2 - ZTIME1 - XTIME_LES_BU_PROCESS - XTIME_BU_PROCES
 !-------------------------------------------------------------------------------
 !
 IF (NMODEL_CLOUD==IMI .AND. CTURBLEN_CLOUD/='NONE') THEN
-  CALL TURB_CLOUD_INDEX( XTSTEP, TZBAKFILE,                               &
+  CALL TURB_CLOUD_INDEX( XTSTEP, TPBAKFILE,                               &
                          LTURB_DIAG, NRRI,                                &
                          XRRS, XRT, XRHODJ, XDXX, XDYY, XDZZ, XDZX, XDZY, &
                          XCEI                                             )
@@ -1929,7 +1948,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
     CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:),PTOWN=ZTOWN(:,:))
     CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
                           NSPLITG, IMI, KTCOUNT,                               &
-                          CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM,               &
+                          CLBCX,CLBCY,TPBAKFILE, CRAD, CTURBDIM,               &
                           LSUBG_COND,LSIGMAS,CSUBG_AUCV,XTSTEP,                &
                           XZZ, XRHODJ, XRHODREF, XEXNREF,                      &
                           ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM,   &
@@ -1949,7 +1968,7 @@ IF (CCLOUD /= 'NONE' .AND. CELEC == 'NONE') THEN
   ELSE
     CALL RESOLVED_CLOUD ( CCLOUD, CACTCCN, CSCONV, CMF_CLOUD, NRR, NSPLITR,    &
                           NSPLITG, IMI, KTCOUNT,                               &
-                          CLBCX,CLBCY,TZBAKFILE, CRAD, CTURBDIM,               &
+                          CLBCX,CLBCY,TPBAKFILE, CRAD, CTURBDIM,               &
                           LSUBG_COND,LSIGMAS,CSUBG_AUCV,                       &
                           XTSTEP,XZZ, XRHODJ, XRHODREF, XEXNREF,               &
                           ZPABST, XTHT,XRT,XSIGS,VSIGQSAT,XMFCONV,XTHM,XRCM,   &
@@ -2151,16 +2170,14 @@ IF (LFLYER) THEN
     ALLOCATE(ZSEA(IIU,IJU))
     ZSEA(:,:) = 0.
     CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:))
-    CALL AIRCRAFT_BALLOON(XTSTEP,                                             &
-                      XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI,              &
-                      XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD,  &
-                      XRHODREF,XCIT,PSEA=ZSEA(:,:))
+    CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI,                   &
+                           XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, &
+                           XRHODREF, XCIT, PSEA = ZSEA(:,:)                       )
     DEALLOCATE(ZSEA)
   ELSE
-    CALL AIRCRAFT_BALLOON(XTSTEP,                                             &
-                      XXHAT, XYHAT, XZZ, XMAP, XLONORI, XLATORI,              &
-                      XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD,  &
-                      XRHODREF,XCIT)
+    CALL AIRCRAFT_BALLOON( XTSTEP, XZZ, XMAP, XLONORI, XLATORI,                   &
+                           XUT, XVT, XWT, XPABST, XTHT, XRT, XSVT, XTKET, XTSRAD, &
+                           XRHODREF, XCIT                                         )
   END IF
 END IF
 
@@ -2169,10 +2186,8 @@ END IF
 !*       24.2    STATION (observation diagnostic)
 !               --------------------------------
 !
-IF (LSTATION)                                                            &
-  CALL STATION_n(XTSTEP,                                                 &
-                 XXHAT, XYHAT, XZZ,                                      &
-                 XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST   )
+IF ( LSTATION ) &
+  CALL STATION_n( XZZ, XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST )
 !
 !---------------------------------------------------------
 !
@@ -2184,16 +2199,14 @@ IF (LPROFILER)  THEN
     ALLOCATE(ZSEA(IIU,IJU))
     ZSEA(:,:) = 0.
     CALL MNHGET_SURF_PARAM_n (PSEA=ZSEA(:,:))
-    CALL PROFILER_n(XTSTEP,                                              &
-                  XXHAT, XYHAT, XZZ,XRHODREF,                            &
-                  XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
-                  XAER, MAX(XCLDFR,XICEFR), XCIT,PSEA=ZSEA(:,:))
+    CALL PROFILER_n( XZZ, XRHODREF,                             &
+                     XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET,     &
+                     XTSRAD, XPABST, XAER, XCIT, PSEA=ZSEA(:,:) )
     DEALLOCATE(ZSEA)
   ELSE
-    CALL PROFILER_n(XTSTEP,                                              &
-                  XXHAT, XYHAT, XZZ,XRHODREF,                            &
-                  XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, XTSRAD, XPABST, &
-                  XAER, MAX(XCLDFR,XICEFR), XCIT)
+    CALL PROFILER_n( XZZ, XRHODREF,                         &
+                     XUT, XVT, XWT, XTHT, XRT, XSVT, XTKET, &
+                     XTSRAD, XPABST, XAER, XCIT             )
   END IF
 END IF
 !
@@ -2230,15 +2243,6 @@ XT_STEP_BUD = XT_STEP_BUD + ZTIME2 - ZTIME1 + XTIME_BU
 !
 !-------------------------------------------------------------------------------
 !
-!*       26.    FM FILE CLOSURE
-!               ---------------
-!
-IF ( tzbakfile%lopened ) THEN
-  CALL IO_File_close(TZBAKFILE)
-END IF
-!
-!-------------------------------------------------------------------------------
-!
 !*       27.    CURRENT TIME REFRESH
 !               --------------------
 !
@@ -2270,6 +2274,8 @@ IF (OEXIT) THEN
     CALL MENU_DIACHRO(TDIAFILE,'END')
 #endif
     CALL IO_File_close(TDIAFILE)
+    ! Free memory of flyer that is not present on the master process of the file (was allocated in WRITE_AIRCRAFT_BALLOON)
+    CALL AIRCRAFT_BALLOON_FREE_NONLOCAL( TDIAFILE )
   END IF
   !
   CALL IO_File_close(TINIFILE)
diff --git a/src/mesonh/ext/radiations.f90 b/src/mesonh/ext/radiations.f90
index 43e9327e9a9106a8cfe4db3d24b093d53f4565c6..2ce3ff7dd8565c819745b9051509849eeee27520 100644
--- a/src/mesonh/ext/radiations.f90
+++ b/src/mesonh/ext/radiations.f90
@@ -134,7 +134,7 @@ USE MODD_CH_AEROSOL,  ONLY: LORILAM
 USE MODD_CONF,        ONLY: LCARTESIAN
 USE MODD_CST
 USE MODD_DUST,        ONLY: LDUST
-use modd_field,          only: tfielddata, TYPEREAL
+use modd_field,          only: tfieldmetadata, TYPEREAL
 USE MODD_GRID ,       ONLY: XLAT0, XLON0
 USE MODD_GRID_n ,     ONLY: XLAT, XLON
 USE MODD_IO,          ONLY: TFILEDATA
@@ -536,7 +536,7 @@ CHARACTER (LEN=2)               :: YDIR        ! Type of the data field
 INTEGER :: ISWB ! number of SW spectral bands (between radiations and surface schemes)
 INTEGER :: JSWB ! loop on SW spectral bands
 INTEGER :: JAE  ! loop on aerosol class
-TYPE(TFIELDDATA) :: TZFIELD
+TYPE(TFIELDMeTaDATA) :: TZFIELD2D, TZFIELD3D
 !
 REAL, DIMENSION(SIZE(PTHT,1),SIZE(PTHT,2),SIZE(PTHT,3)) :: ZDZPABST
 REAL :: ZMINVAL
@@ -898,7 +898,7 @@ IF (CAOP=='EXPL') THEN
   
  IF (LORILAM) THEN
    CALL AEROOPT_GET(                             &
-        PSVT(IIB:IIE,IJB:IJE,:,NSV_AERBEG:NSV_AEREND)        &  !I [ppp]  aerosols concentration
+        PSVT(IIB:IIE,IJB:IJE,:,NSV_AERBEG:NSV_AEREND)        &  !I [ppv]  aerosols concentration
         ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
         ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
         ,ZPIZA_AER_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)   &  !O [-] single scattering albedo of aerosols
@@ -912,7 +912,7 @@ IF (CAOP=='EXPL') THEN
  ENDIF
  IF(LDUST) THEN
    CALL DUSTOPT_GET(                             &
-        PSVT(IIB:IIE,IJB:IJE,:,NSV_DSTBEG:NSV_DSTEND)        &  !I [ppp] Dust scalar concentration
+        PSVT(IIB:IIE,IJB:IJE,:,NSV_DSTBEG:NSV_DSTEND)        &  !I [ppv] Dust scalar concentration
         ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
         ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
         ,ZPIZA_DST_TMP(IIB:IIE,IJB:IJE,IKB-JPVEXT:IKE-JPVEXT,:)   &  !O [-] single scattering albedo of dust
@@ -927,7 +927,7 @@ IF (CAOP=='EXPL') THEN
  ENDIF
  IF(LSALT) THEN
    CALL SALTOPT_GET(                             &
-        PSVT(IIB:IIE,IJB:IJE,:,NSV_SLTBEG:NSV_SLTEND)        &  !I [ppp] sea salt scalar concentration
+        PSVT(IIB:IIE,IJB:IJE,:,NSV_SLTBEG:NSV_SLTEND)        &  !I [ppv] sea salt scalar concentration
         ,PZZ(IIB:IIE,IJB:IJE,:)                   &  !I [m] height of layers
         ,PRHODREF(IIB:IIE,IJB:IJE,:)              &  !I [kg/m3] density of air
         ,PTHT(IIB:IIE,IJB:IJE,:)                  &  !I [K] potential temperature
@@ -2686,6 +2686,24 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
   ZSTORE_3D2(:,:,:) = 0.0
   ZSTORE_2D(:,:)   = 0.0
   !
+  TZFIELD2D = TFIELDMETADATA(                 &
+    CMNHNAME   = 'generic 2D for radiations', & !Temporary name to ease identification
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 2,                           &
+    LTIMEDEP   = .TRUE.                       )
+
+  TZFIELD3D = TFIELDMETADATA(                 &
+    CMNHNAME   = 'generic 3D for radiations', & !Temporary name to ease identification
+    CSTDNAME   = '',                          &
+    CDIR       = 'XY',                        &
+    NGRID      = 1,                           &
+    NTYPE      = TYPEREAL,                    &
+    NDIMS      = 3,                           &
+    LTIMEDEP   = .TRUE.                       )
+
   IF( KRAD_DIAG >= 1) THEN
     !
     ILUOUT = TLUOUT%NLU
@@ -2700,17 +2718,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SWF_DOWN'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SWF_DOWN'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SWF_DOWN'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SWF_DOWN'
+    TZFIELD3D%CLONGNAME  = 'SWF_DOWN'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_DOWN'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2721,17 +2733,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SWF_UP'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SWF_UP'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SWF_UP'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SWF_UP'
+    TZFIELD3D%CLONGNAME  = 'SWF_UP'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_UP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2742,17 +2748,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'LWF_DOWN'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'LWF_DOWN'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LWF_DOWN'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'LWF_DOWN'
+    TZFIELD3D%CLONGNAME  = 'LWF_DOWN'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_DOWN'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2763,17 +2763,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'LWF_UP'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'LWF_UP'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LWF_UP'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'LWF_UP'
+    TZFIELD3D%CLONGNAME  = 'LWF_UP'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_UP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2784,17 +2778,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'LWF_NET'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'LWF_NET'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LWF_NET'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'LWF_NET'
+    TZFIELD3D%CLONGNAME  = 'LWF_NET'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_NET'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2805,17 +2793,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SWF_NET'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SWF_NET'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SWF_NET'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SWF_NET'
+    TZFIELD3D%CLONGNAME  = 'SWF_NET'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_NET'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       DO JJ=IJB,IJE
@@ -2824,17 +2806,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'DTRAD_LW'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'DTRAD_LW'
-    TZFIELD%CUNITS     = 'K day-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_DTRAD_LW'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'DTRAD_LW'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_LW'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_LW'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JK=IKB,IKE
       DO JJ=IJB,IJE
@@ -2843,17 +2819,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'DTRAD_SW'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'DTRAD_SW'
-    TZFIELD%CUNITS     = 'K day-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_DTRAD_SW'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'DTRAD_SW'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_SW'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_SW'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2861,17 +2831,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,5)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RADSWD_VIS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RADSWD_VIS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_RADSWD_VIS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'RADSWD_VIS'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
 !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2879,17 +2843,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,6)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RADSWD_NIR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RADSWD_NIR'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_RADSWD_NIR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'RADSWD_NIR'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -2897,17 +2855,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR(IIJ,4)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RADLWD'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RADLWD'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_RADLWD'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'RADLWD'
+    TZFIELD2D%CLONGNAME  = 'RADLWD'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADLWD'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
   END IF
   !
   !
@@ -2921,17 +2873,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SWF_DOWN_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SWF_DOWN_CS'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SWF_DOWN_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SWF_DOWN_CS'
+    TZFIELD3D%CLONGNAME  = 'SWF_DOWN_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_DOWN_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2942,17 +2888,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SWF_UP_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SWF_UP_CS'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SWF_UP_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SWF_UP_CS'
+    TZFIELD3D%CLONGNAME  = 'SWF_UP_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_UP_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2963,17 +2903,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'LWF_DOWN_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'LWF_DOWN_CS'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LWF_DOWN_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'LWF_DOWN_CS'
+    TZFIELD3D%CLONGNAME  = 'LWF_DOWN_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_DOWN_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -2984,17 +2918,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'LWF_UP_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'LWF_UP_CS'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LWF_UP_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'LWF_UP_CS'
+    TZFIELD3D%CLONGNAME  = 'LWF_UP_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_UP_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3005,17 +2933,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'LWF_NET_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'LWF_NET_CS'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LWF_NET_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'LWF_NET_CS'
+    TZFIELD3D%CLONGNAME  = 'LWF_NET_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LWF_NET_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3026,17 +2948,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SWF_NET_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SWF_NET_CS'
-    TZFIELD%CUNITS     = 'W m-2'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SWF_NET_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SWF_NET_CS'
+    TZFIELD3D%CLONGNAME  = 'SWF_NET_CS'
+    TZFIELD3D%CUNITS     = 'W m-2'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SWF_NET_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK-JPVEXT
@@ -3047,17 +2963,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'DTRAD_SW_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'DTRAD_SW_CS'
-    TZFIELD%CUNITS     = 'K day-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_DTRAD_SW_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'DTRAD_SW_CS'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_SW_CS'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_SW_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK-JPVEXT
@@ -3068,17 +2978,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'DTRAD_LW_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'DTRAD_LW_CS'
-    TZFIELD%CUNITS     = 'K day-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_DTRAD_LW_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'DTRAD_LW_CS'
+    TZFIELD3D%CLONGNAME  = 'DTRAD_LW_CS'
+    TZFIELD3D%CUNITS     = 'K day-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_DTRAD_LW_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3086,17 +2990,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,5)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RADSWD_VIS_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RADSWD_VIS_CS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_RADSWD_VIS_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'RADSWD_VIS_CS'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_VIS_CS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_VIS_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3104,17 +3002,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,6)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RADSWD_NIR_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RADSWD_NIR_CS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_RADSWD_NIR_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'RADSWD_NIR_CS'
+    TZFIELD2D%CLONGNAME  = 'RADSWD_NIR_CS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADSWD_NIR_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3122,17 +3014,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZFLUX_TOP_GND_IRVISNIR_CS(IIJ,4)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RADLWD_CS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RADLWD_CS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_RADLWD_CS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'RADLWD_CS'
+    TZFIELD2D%CLONGNAME  = 'RADLWD_CS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_RADLWD_CS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
   END IF
   !
   !
@@ -3143,17 +3029,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZPLAN_ALB_VIS(IIJ)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'PLAN_ALB_VIS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'PLAN_ALB_VIS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_PLAN_ALB_VIS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'PLAN_ALB_VIS'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ALB_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ALB_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3161,17 +3041,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZPLAN_ALB_NIR(IIJ)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'PLAN_ALB_NIR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'PLAN_ALB_NIR'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_PLAN_ALB_NIR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'PLAN_ALB_NIR'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ALB_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ALB_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3179,17 +3053,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZPLAN_TRA_VIS(IIJ)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'PLAN_TRA_VIS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'PLAN_TRA_VIS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_PLAN_TRA_VIS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'PLAN_TRA_VIS'
+    TZFIELD2D%CLONGNAME  = 'PLAN_TRA_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_TRA_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3197,17 +3065,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZPLAN_TRA_NIR(IIJ)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'PLAN_TRA_NIR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'PLAN_TRA_NIR'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_PLAN_TRA_NIR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'PLAN_TRA_NIR'
+    TZFIELD2D%CLONGNAME  = 'PLAN_TRA_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_TRA_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3215,17 +3077,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZPLAN_ABS_VIS(IIJ)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'PLAN_ABS_VIS'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'PLAN_ABS_VIS'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_PLAN_ABS_VIS'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'PLAN_ABS_VIS'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ABS_VIS'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ABS_VIS'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     DO JJ=IJB,IJE
       DO JI=IIB,IIE
@@ -3233,17 +3089,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         ZSTORE_2D(JI,JJ) = ZPLAN_ABS_NIR(IIJ)
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'PLAN_ABS_NIR'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'PLAN_ABS_NIR'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_PLAN_ABS_NIR'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 2
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_2D)
+    TZFIELD2D%CMNHNAME   = 'PLAN_ABS_NIR'
+    TZFIELD2D%CLONGNAME  = 'PLAN_ABS_NIR'
+    TZFIELD2D%CUNITS     = ''
+    TZFIELD2D%CCOMMENT   = 'X_Y_PLAN_ABS_NIR'
+    CALL IO_Field_write(TPFILE,TZFIELD2D,ZSTORE_2D)
     !
     !
   END IF
@@ -3259,17 +3109,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'EFNEB_DOWN'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'EFNEB_DOWN'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_EFNEB_DOWN'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'EFNEB_DOWN'
+    TZFIELD3D%CLONGNAME  = 'EFNEB_DOWN'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_EFNEB_DOWN'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3280,17 +3124,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'EFNEB_UP'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'EFNEB_UP'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_EFNEB_UP'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'EFNEB_UP'
+    TZFIELD3D%CLONGNAME  = 'EFNEB_UP'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_EFNEB_UP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3301,17 +3139,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'FLWP'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'FLWP'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_FLWP'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'FLWP'
+    TZFIELD3D%CLONGNAME  = 'FLWP'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_FLWP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3322,17 +3154,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'FIWP'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'FIWP'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_FIWP'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'FIWP'
+    TZFIELD3D%CLONGNAME  = 'FIWP'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_FIWP'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3343,17 +3169,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'EFRADL'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'EFRADL'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_RAD_microm'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'EFRADL'
+    TZFIELD3D%CLONGNAME  = 'EFRADL'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_RAD_microm'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     ! 
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3364,17 +3184,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'EFRADI'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'EFRADI'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_RAD_microm'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'EFRADI'
+    TZFIELD3D%CLONGNAME  = 'EFRADI'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_RAD_microm'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3385,17 +3199,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'SW_NEB'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'SW_NEB'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_SW_NEB'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'SW_NEB'
+    TZFIELD3D%CLONGNAME  = 'SW_NEB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_SW_NEB'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     DO JK=IKB,IKE
       JKRAD = JK - JPVEXT
@@ -3406,17 +3214,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'RRTM_LW_NEB'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'RRTM_LW_NEB'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_LW_NEB'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'RRTM_LW_NEB'
+    TZFIELD3D%CLONGNAME  = 'RRTM_LW_NEB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_LW_NEB'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     !
     ! spectral bands
     IF (KSWB_OLD==6) THEN
@@ -3433,41 +3235,23 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
     END DO
 !
     DO JBAND=1,KSWB_OLD
-      TZFIELD%CMNHNAME   = 'ODAER_'//YBAND_NAME(JBAND)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_OD_'//YBAND_NAME(JBAND)
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZTAUAZ(:,:,:,JBAND))
+      TZFIELD3D%CMNHNAME   = 'ODAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'ODAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_OD_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZTAUAZ(:,:,:,JBAND))
       !
-      TZFIELD%CMNHNAME   = 'SSAAER_'//YBAND_NAME(JBAND)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND)
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZPIZAZ(:,:,:,JBAND))
+      TZFIELD3D%CMNHNAME   = 'SSAAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'SSAAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZPIZAZ(:,:,:,JBAND))
       !
-      TZFIELD%CMNHNAME   = 'GAER_'//YBAND_NAME(JBAND)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_G_'//YBAND_NAME(JBAND)
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZCGAZ(:,:,:,JBAND))
+      TZFIELD3D%CMNHNAME   = 'GAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'GAER_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_G_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZCGAZ(:,:,:,JBAND))
     ENDDO
 
     DO JBAND=1,KSWB_OLD
@@ -3480,17 +3264,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
           END DO
         END DO
       END DO
-      TZFIELD%CMNHNAME   = 'OTH_'//YBAND_NAME(JBAND)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND)
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+      TZFIELD3D%CMNHNAME   = 'OTH_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'OTH_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_OTH_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
       !
       DO JK=IKB,IKE
         JKRAD = JK - JPVEXT
@@ -3501,17 +3279,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
           END DO
         END DO
       END DO
-      TZFIELD%CMNHNAME   = 'SSA_'//YBAND_NAME(JBAND)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND)
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+      TZFIELD3D%CMNHNAME   = 'SSA_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'SSA_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_SSA_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
       !
       DO JK=IKB,IKE
         JKRAD = JK - JPVEXT
@@ -3522,17 +3294,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
           END DO
         END DO
       END DO
-      TZFIELD%CMNHNAME   = 'ASF_'//YBAND_NAME(JBAND)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-      TZFIELD%CUNITS     = ''
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%CCOMMENT   = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND)
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+      TZFIELD3D%CMNHNAME   = 'ASF_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CLONGNAME  = 'ASF_'//YBAND_NAME(JBAND)
+      TZFIELD3D%CUNITS     = ''
+      TZFIELD3D%CCOMMENT   = 'X_Y_Z_ASF_'//YBAND_NAME(JBAND)
+      CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
     END DO
   END IF
   !
@@ -3550,17 +3316,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
         END DO
       END DO
     END DO
-    TZFIELD%CMNHNAME   = 'O3CLIM'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'O3CLIM'
-    TZFIELD%CUNITS     = 'Pa Pa-1'
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_O3'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D)
+    TZFIELD3D%CMNHNAME   = 'O3CLIM'
+    TZFIELD3D%CLONGNAME  = 'O3CLIM'
+    TZFIELD3D%CUNITS     = 'Pa Pa-1'
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_O3'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D)
 ! 
 !cumulated optical thickness of aerosols
 !cumul begin from the top of the domain, not from the TOA !      
@@ -3581,17 +3341,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
       ZSTORE_2D(:,:) = ZSTORE_2D(:,:) + ZSTORE_3D(:,:,JK1)
       ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
     END DO
-    TZFIELD%CMNHNAME   = 'CUM_AER_LAND'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'CUM_AER_LAND'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_LAND'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_LAND'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
 !
 ! sea
     DO JK=IKB,IKE
@@ -3610,17 +3364,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
       ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
     END DO
 !
-    TZFIELD%CMNHNAME   = 'CUM_AER_SEA'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'CUM_AER_SEA'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_SEA'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_SEA'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
 !
 ! desert
     DO JK=IKB,IKE
@@ -3639,17 +3387,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
       ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
     END DO
 !    
-    TZFIELD%CMNHNAME   = 'CUM_AER_DES'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'CUM_AER_DES'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_DES'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_DES'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
 !
 ! urban
     DO JK=IKB,IKE
@@ -3668,17 +3410,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
       ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
     END DO
 !
-    TZFIELD%CMNHNAME   = 'CUM_AER_URB'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'CUM_AER_URB'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_URB'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_URB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
 !
 ! Volcanoes
     DO JK=IKB,IKE
@@ -3697,17 +3433,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
       ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
     END DO
 !
-    TZFIELD%CMNHNAME   = 'CUM_AER_VOL'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'CUM_AER_VOL'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_VOL'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_VOL'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
 !
 ! stratospheric background
     DO JK=IKB,IKE
@@ -3726,17 +3456,11 @@ IF( tpfile%lopened .AND. (KRAD_DIAG >= 1) ) THEN
       ZSTORE_3D2(:,:,JK1) = ZSTORE_2D(:,:)  
     END DO
 !
-    TZFIELD%CMNHNAME   = 'CUM_AER_STRB'
-    TZFIELD%CSTDNAME   = ''
-    TZFIELD%CLONGNAME  = 'CUM_AER_STRB'
-    TZFIELD%CUNITS     = ''
-    TZFIELD%CDIR       = 'XY'
-    TZFIELD%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
-    TZFIELD%NGRID      = 1
-    TZFIELD%NTYPE      = TYPEREAL
-    TZFIELD%NDIMS      = 3
-    TZFIELD%LTIMEDEP   = .TRUE.
-    CALL IO_Field_write(TPFILE,TZFIELD,ZSTORE_3D2)
+    TZFIELD3D%CMNHNAME   = 'CUM_AER_STRB'
+    TZFIELD3D%CLONGNAME  = 'CUM_AER_STRB'
+    TZFIELD3D%CUNITS     = ''
+    TZFIELD3D%CCOMMENT   = 'X_Y_Z_CUM_AER_OPT'
+    CALL IO_Field_write(TPFILE,TZFIELD3D,ZSTORE_3D2)
   ENDIF
 END IF
 !
diff --git a/src/mesonh/ext/read_exsegn.f90 b/src/mesonh/ext/read_exsegn.f90
index 3cdde4746acdcbb8831b76422aec6f2c6819ee95..c036b6284dbf22f12927c5222fa9aed3f31121df 100644
--- a/src/mesonh/ext/read_exsegn.f90
+++ b/src/mesonh/ext/read_exsegn.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.
@@ -21,7 +21,7 @@ INTERFACE
                    OCONDSAMP,OBLOWSNOW,                                            &
                    KRIMX,KRIMY, KSV_USER,                                          &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
-                   HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD                    )
+                   HEQNSYS,PTSTEP_ALL,HINIFILEPGD                                  )
 !
 USE MODD_IO,   ONLY: TFILEDATA
 !
@@ -72,7 +72,6 @@ CHARACTER (LEN=4),  INTENT(IN) :: HCLOUD ! Kind of microphysical scheme
 CHARACTER (LEN=4),  INTENT(IN) :: HELEC  ! Kind of electrical scheme
 CHARACTER (LEN=*),  INTENT(IN) :: HEQNSYS! type of equations' system
 REAL,DIMENSION(:),  INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models
-CHARACTER (LEN=*),  INTENT(IN) :: HSTORAGE_TYPE ! type of initial file
 CHARACTER (LEN=*),  INTENT(IN) :: HINIFILEPGD ! name of PGD file
 !
 END SUBROUTINE READ_EXSEG_n
@@ -95,7 +94,7 @@ END MODULE MODI_READ_EXSEG_n
                    OCONDSAMP, OBLOWSNOW,                                           &
                    KRIMX,KRIMY, KSV_USER,                                          &
                    HTURB,HTOM,ORMC01,HRAD,HDCONV,HSCONV,HCLOUD,HELEC,              &
-                   HEQNSYS,PTSTEP_ALL,HSTORAGE_TYPE,HINIFILEPGD                    )
+                   HEQNSYS,PTSTEP_ALL,HINIFILEPGD                                  )
 !     #########################################################################
 !
 !!****  *READ_EXSEG_n * - routine to read  the descriptor file EXSEG
@@ -302,20 +301,24 @@ END MODULE MODI_READ_EXSEG_n
 !  P. Wautelet 09/03/2021: simplify allocation of scalar variable names
 !  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
-!  R. Honnert  23/04/2021: add ADAP mixing length and delete HRIO and BOUT from CMF_UPDRAFT
+!  R. Honnert  23/04/2021: add HM21 mixing length and delete HRIO and BOUT from CMF_UPDRAFT
 !  S. Riette   11/05/2021  HighLow cloud
 !  A. Costes      12/2021: add Blaze fire model
+!  P. Wautelet 27/04/2022: add namelist for profilers
+!  P. Wautelet 24/06/2022: remove check on CSTORAGE_TYPE for restart of ForeFire variables
+!  P. Wautelet 13/07/2022: add namelist for flyers and balloons
+!  P. Wautelet 19/08/2022: add namelist for aircrafts
 !------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
 !              ------------
+USE MODD_AIRCRAFT_BALLOON, ONLY: NAIRCRAFTS, NBALLOONS
 USE MODD_BLOWSNOW
 USE MODD_BUDGET
 USE MODD_CH_AEROSOL
 USE MODD_CH_M9_n, ONLY : NEQ
 USE MODD_CONDSAMP
 USE MODD_CONF
-USE MODD_CONF_n,  ONLY: CSTORAGE_TYPE
 USE MODD_CONFZ
 ! USE MODD_DRAG_n
 USE MODD_DUST
@@ -343,7 +346,9 @@ USE MODI_TEST_NAM_VAR
 
 USE MODN_2D_FRC
 USE MODN_ADV_n      ! The final filling of these modules for the model n is
+USE MODN_AIRCRAFTS, ONLY: AIRCRAFTS_NML_ALLOCATE, NAM_AIRCRAFTS
 USE MODN_BACKUP
+USE MODN_BALLOONS,  ONLY: BALLOONS_NML_ALLOCATE, NAM_BALLOONS
 USE MODN_BLANK_n
 USE MODN_BLOWSNOW
 USE MODN_BLOWSNOW_n
@@ -365,6 +370,7 @@ USE MODN_ELEC
 USE MODN_EOL
 USE MODN_EOL_ADNR
 USE MODN_EOL_ALM
+USE MODN_FLYERS
 #ifdef MNH_FOREFIRE
 USE MODN_FOREFIRE
 #endif
@@ -394,6 +400,7 @@ USE MODN_PARAM_MFSHALL_n
 USE MODN_PARAM_n    ! realized in subroutine ini_model n
 USE MODN_PARAM_RAD_n
 USE MODN_PASPOL
+USE MODN_PROFILER_n
 USE MODN_RECYCL_PARAM_n
 USE MODN_SALT
 USE MODN_SERIES
@@ -459,7 +466,6 @@ CHARACTER (LEN=4),  INTENT(IN) :: HCLOUD ! Kind of microphysical scheme
 CHARACTER (LEN=4),  INTENT(IN) :: HELEC  ! Kind of electrical scheme
 CHARACTER (LEN=*),  INTENT(IN) :: HEQNSYS! type of equations' system
 REAL,DIMENSION(:),  INTENT(INOUT):: PTSTEP_ALL ! Time STEP of ALL models
-CHARACTER (LEN=*),  INTENT(IN) :: HSTORAGE_TYPE ! type of initial file
 CHARACTER (LEN=*),  INTENT(IN) :: HINIFILEPGD ! name of PGD file
 !
 !*       0.2   declarations of local variables
@@ -504,6 +510,7 @@ CALL INIT_NAM_CH_MNHCN
 CALL INIT_NAM_CH_SOLVERN
 CALL INIT_NAM_SERIESN
 CALL INIT_NAM_BLOWSNOWN
+CALL INIT_NAM_PROFILERn
 CALL INIT_NAM_STATIONn
 !
 WRITE(UNIT=ILUOUT,FMT="(/,'READING THE EXSEG.NAM FILE')")
@@ -559,6 +566,8 @@ CALL POSNAM(ILUSEG,'NAM_EOL_ADNR',GFOUND,ILUOUT)
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ADNR)
 CALL POSNAM(ILUSEG,'NAM_EOL_ALM',GFOUND,ILUOUT)
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_EOL_ALM)
+CALL POSNAM(ILUSEG,'NAM_PROFILERN',GFOUND,ILUOUT)
+IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_PROFILERn)
 CALL POSNAM(ILUSEG,'NAM_STATIONN',GFOUND,ILUOUT)
 IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_STATIONn)
 !
@@ -849,6 +858,21 @@ IF (KMI == 1) THEN
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BLOWSNOW)
   CALL POSNAM(ILUSEG,'NAM_VISC',GFOUND,ILUOUT)
   IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_VISC)
+
+  CALL POSNAM(ILUSEG,'NAM_FLYERS',GFOUND,ILUOUT)
+  IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_FLYERS)
+
+  IF ( NAIRCRAFTS > 0 ) THEN
+    CALL AIRCRAFTS_NML_ALLOCATE( NAIRCRAFTS )
+    CALL POSNAM(ILUSEG,'NAM_AIRCRAFTS',GFOUND,ILUOUT)
+    IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_AIRCRAFTS)
+  END IF
+
+  IF ( NBALLOONS > 0 ) THEN
+    CALL BALLOONS_NML_ALLOCATE( NBALLOONS )
+    CALL POSNAM(ILUSEG,'NAM_BALLOONS',GFOUND,ILUOUT)
+    IF (GFOUND) READ(UNIT=ILUSEG,NML=NAM_BALLOONS)
+  END IF
 END IF
 !
 !-------------------------------------------------------------------------------
@@ -892,7 +916,7 @@ CALL TEST_NAM_VAR(ILUOUT,'CLBCY(1)',CLBCY(1),'CYCL','WALL','OPEN')
 CALL TEST_NAM_VAR(ILUOUT,'CLBCY(2)',CLBCY(2),'CYCL','WALL','OPEN')
 !
 CALL TEST_NAM_VAR(ILUOUT,'CTURBDIM',CTURBDIM,'1DIM','3DIM')
-CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN',CTURBLEN,'DELT','BL89','RM17','DEAR','BLKR','ADAP')
+CALL TEST_NAM_VAR(ILUOUT,'CTURBLEN',CTURBLEN,'DELT','BL89','RM17','DEAR','BLKR','HM21')
 CALL TEST_NAM_VAR(ILUOUT,'CTOM',CTOM,'NONE','TM06')
 CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV',CSUBG_AUCV,'NONE','CLFR','SIGM','PDF','ADJU')
 CALL TEST_NAM_VAR(ILUOUT,'CSUBG_AUCV_RI',CSUBG_AUCV_RI,'NONE','CLFR','ADJU')
@@ -1623,7 +1647,7 @@ ELSE
   END IF
 END IF
 !
-IF(CTURBLEN=='RM17' .OR. CTURBLEN=='ADAP') THEN
+IF(CTURBLEN=='RM17' .OR. CTURBLEN=='HM21') THEN
   XCEDIS=0.34
 ELSE
   XCEDIS=0.84
@@ -1762,7 +1786,6 @@ END IF
 IF (CCLOUD == 'LIMA') THEN
   IF (HCLOUD == 'LIMA') THEN
     CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='READ'
-!!JPP    IF(HSTORAGE_TYPE=='TT') CGETSVT(NSV_LIMA_BEG:NSV_LIMA_END)='INIT'
   ELSE
     WRITE(UNIT=ILUOUT,FMT=9001) KMI
     WRITE(UNIT=ILUOUT,FMT='("THERE IS NO SCALAR VARIABLES FOR LIMA &
@@ -2057,9 +2080,6 @@ END IF
 IF (LFOREFIRE) THEN
   IF (OFOREFIRE) THEN
     CGETSVT(NSV_FFBEG:NSV_FFEND)='READ'
-    IF(HSTORAGE_TYPE=='TT') THEN
-      CGETSVT(NSV_FFBEG:NSV_FFEND)='INIT'
-    END IF
   ELSE
     WRITE(UNIT=ILUOUT,FMT=9001) KMI
     WRITE(UNIT=ILUOUT,FMT='("THERE IS NO FOREFIRE SCALAR VARIABLES IN INITIAL FMFILE",/,&
@@ -2073,9 +2093,6 @@ END IF
 IF (LBLAZE) THEN
   IF (OFIRE) THEN
     CGETSVT(NSV_FIREBEG:NSV_FIREEND)='READ'
-    IF(HSTORAGE_TYPE=='TT') THEN
-      CGETSVT(NSV_FIREBEG:NSV_FIREEND)='INIT'
-    END IF
   ELSE
     WRITE(UNIT=ILUOUT,FMT=9001) KMI
     WRITE(UNIT=ILUOUT,FMT='("THERE IS NO BLAZE SCALAR VARIABLES IN INITIAL FMFILE",/,&
@@ -3021,6 +3038,7 @@ CALL UPDATE_NAM_CH_MNHCN
 CALL UPDATE_NAM_CH_SOLVERN
 CALL UPDATE_NAM_SERIESN
 CALL UPDATE_NAM_BLOWSNOWN
+CALL UPDATE_NAM_PROFILERn
 CALL UPDATE_NAM_STATIONn
 !-------------------------------------------------------------------------------
 WRITE(UNIT=ILUOUT,FMT='(/)')
diff --git a/tools/check_commit_mesonh.sh b/tools/check_commit_mesonh.sh
index b31063a2c61d1dd6b853b2d36dfffa6a7dd319eb..16ee676292ee4259165fca92ac838927b075817d 100755
--- a/tools/check_commit_mesonh.sh
+++ b/tools/check_commit_mesonh.sh
@@ -168,10 +168,16 @@ if [ $compilation -eq 1 ]; then
 #  tar xfz MNH-V5-5-0_PHYEX.tar.gz 
 #  rm MNH-V5-5-0_PHYEX.tar.gz
 #  mv MNH-V5-5-0 $name
-  cp $TARGZDIR/MNH-V5-5-1-1abfa259.tar.gz .
-  tar xfz MNH-V5-5-1-1abfa259.tar.gz 
-  rm MNH-V5-5-1-1abfa259.tar.gz 
-  mv MNH-V5-5-1-1abfa259 $name
+#  cp $TARGZDIR/MNH-V5-5-1-1abfa259.tar.gz .
+#  tar xfz MNH-V5-5-1-1abfa259.tar.gz 
+#  rm MNH-V5-5-1-1abfa259.tar.gz 
+#  mv MNH-V5-5-1-1abfa259 $name
+
+  cp $TARGZDIR/MNH-V5-5-1-4458a1e70.tar.gz .
+  tar xfz MNH-V5-5-1-4458a1e70.tar.gz
+  rm MNH-V5-5-1-4458a1e70.tar.gz
+  mv MNH-V5-5-1-4458a1e70 $name
+
 
   cd $name/src
   rm -rf PHYEX