From 23dbb4dee886c9de84afc0b2975448ca982466f7 Mon Sep 17 00:00:00 2001
From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Date: Wed, 10 Mar 2021 11:50:16 +0100
Subject: [PATCH] Philippe 10/03/2021: use scalar variable names for dust and
 salt

---
 src/MNH/ini_prog_var.f90 |  87 +++----------
 src/MNH/write_lbn.f90    | 275 ++++++++++-----------------------------
 src/MNH/write_lfin.f90   | 213 +++++++-----------------------
 3 files changed, 136 insertions(+), 439 deletions(-)

diff --git a/src/MNH/ini_prog_var.f90 b/src/MNH/ini_prog_var.f90
index 62b6ee923..1f099672e 100644
--- a/src/MNH/ini_prog_var.f90
+++ b/src/MNH/ini_prog_var.f90
@@ -98,6 +98,7 @@ END MODULE MODI_INI_PROG_VAR
 !  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
+!  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -347,40 +348,16 @@ IF(PRESENT(HCHEMFILE)) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     !
-    IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1)/NMODE_DST
-    IF (IMOMENTS == 1) THEN
-      DO JMODE=1, NMODE_DST
-        !Index from which names are picked
-        ISV_NAME_IDX = (JPDUSTORDER(JMODE) - 1)*3 + 2
-        JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-             +  1                 & !Number of moments in this mode
-             + (NSV_DSTBEG -1)      !Previous list of tracers  
-        TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
-        IF (IRESP/=0) THEN
-          CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
-        END IF !IRESP
-      END DO !JMOD
-    ELSE  ! IMOMENTS diff 1
-      DO JMODE=1,NMODE_DST
-        DO JMOM=1,IMOMENTS
-          ISV_NAME_IDX = (JPDUSTORDER(JMODE) - 1)*3 + JMOM
-          JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-               + JMOM               & !Number of moments in this mode
-               + (NSV_DSTBEG -1)      !Previous list of tracers
-          TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
-          IF (IRESP/=0) THEN
-            CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//&
-                                             ' not found in the CHEM file '//TRIM(HCHEMFILE))
-          END IF !IRESP
-        END DO ! JMOM
-      END DO !JMOD
-    END IF !if IMOMENTS   
+    DO JSV = NSV_DSTBEG, NSV_DSTEND
+      TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+      IF (IRESP/=0) THEN
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
+      END IF !IRESP
+    END DO ! JSV
+
     IF (LDEPOS_DST(IMI)) THEN   
       TZFIELD%CSTDNAME   = ''
       TZFIELD%CUNITS     = 'ppp'
@@ -412,39 +389,15 @@ IF(PRESENT(HCHEMFILE)) THEN
     TZFIELD%NDIMS      = 3
     TZFIELD%LTIMEDEP   = .TRUE.
     !
-    IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1)/NMODE_SLT
-    IF (IMOMENTS == 1) THEN
-      DO JMODE=1, NMODE_SLT
-        !Index from which names are picked
-        ISV_NAME_IDX = (JPSALTORDER(JMODE) - 1)*3 + 2
-        JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-             +  1                 & !Number of moments in this mode
-             + (NSV_SLTBEG -1)      !Previous list of tracers  
-        TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
-        IF (IRESP/=0) THEN
-          CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
-        END IF !IRESP
-      END DO !JMOD
-    ELSE  ! IMOMENTS
-      DO JMODE=1,NMODE_SLT
-        DO JMOM=1,IMOMENTS
-          ISV_NAME_IDX = (JPSALTORDER(JMODE) - 1)*3 + JMOM
-          JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-               + JMOM               & !Number of moments in this mode
-               + (NSV_SLTBEG -1)      !Previous list of tracers
-          TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
-          IF (IRESP/=0) THEN
-            CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
-          END IF !IRESP
-        END DO ! JMOM
-      END DO !JMOD
-    END IF !if IMOMENTS
+    DO JSV = NSV_SLTBEG, NSV_SLTEND
+      TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_Field_read(TZCHEMFILE,TZFIELD,XSVT(:,:,:,JSV),IRESP)
+      IF (IRESP/=0) THEN
+        CALL PRINT_MSG(NVERB_FATAL,'GEN','INI_PROG_VAR',TRIM(TZFIELD%CMNHNAME)//' not found in the CHEM file '//TRIM(HCHEMFILE))
+      END IF !IRESP
+    END DO ! JSV
     !
     IF (LDEPOS_SLT(IMI)) THEN
       TZFIELD%CSTDNAME   = ''
diff --git a/src/MNH/write_lbn.f90 b/src/MNH/write_lbn.f90
index eb49412fa..dc3fd036f 100644
--- a/src/MNH/write_lbn.f90
+++ b/src/MNH/write_lbn.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1998-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1998-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -75,8 +75,9 @@ END MODULE MODI_WRITE_LB_n
 !!     P. Tulet    09/14    modif SALT
 !!     J.Escobar : 15/09/2015 : WENO5 & JPHEXT <> 1 
 !!    J.-P. Pinty  09/02/16 Add LIMA that is LBC for CCN and IFN
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  S. Bielli      02/2019: Sea salt: significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -143,8 +144,6 @@ LOGICAL, DIMENSION (7)           :: GUSER ! array with the use indicator of the
 REAL,    DIMENSION(SIZE(XLBXSVM, 1), SIZE(XLBXSVM,2), SIZE(XLBXSVM,3)) :: ZRHODREFX
 REAL,    DIMENSION(SIZE(XLBYSVM, 1), SIZE(XLBYSVM,2), SIZE(XLBYSVM,3)) :: ZRHODREFY
 INTEGER            :: JK
-!         Integers, counters for dust modes
-INTEGER            :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX
 INTEGER            :: IMI    ! Current model index
 CHARACTER(LEN=2)   :: INDICE ! to index CCN and IFN fields of LIMA scheme
 INTEGER           :: I
@@ -611,123 +610,51 @@ IF (NSV >=1) THEN
         CALL DUSTLFI_n(XLBYSVM(:,:,:,NSV_DSTBEG:NSV_DSTEND), ZRHODREFY)
     END IF
     !
-    IF ((CPROGRAM == 'REAL  ').OR. (CPROGRAM == 'IDEAL ')) THEN
-      ! In this case CDUSTNAMES is not allocated. We will use YPDUST_INI,
-      !but remember that this variable does not follow JPDUSTORDER
-      IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG + 1)/NMODE_DST
-      !Should equal 3 at this point
-      IF (IMOMENTS >  3) THEN
-        WRITE(YMSG,*) 'number of DST moments must be 3',NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LB_n',YMSG)
-      END IF ! Test IMOMENTS
-      !
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = ''
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      IF (IMOMENTS == 1) THEN
-        DO JMODE=1, NMODE_DST
-          !Index from which names are picked
-          ISV_NAME_IDX = (JPDUSTORDER(JMODE) - 1)*3 + 2
-          JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                +  1              & !Number of moments in this mode
-                + (NSV_DSTBEG -1)      !Previous list of tracers
-
-          IF(NSIZELBXSV_ll /= 0) THEN !Check on border points in X direction             
-            TZFIELD%CMNHNAME   = 'LBX_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBX'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-          ENDIF !Check on border points in X direction
-          IF(NSIZELBYSV_ll /= 0) THEN
-            TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBY'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-          ENDIF  !Check on points in Y direction
-        ENDDO ! Loop on mode
-      ELSE  ! valeur IMOMENTS =/ 1
-        DO JMODE=1,NMODE_DST
-          DO JMOM=1,IMOMENTS
-            ISV_NAME_IDX = (JPDUSTORDER(JMODE) - 1)*3 + JMOM
-            JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                + JMOM               & !Number of moments in this mode
-                + (NSV_DSTBEG -1)
-            !
-            IF(NSIZELBXSV_ll /= 0) THEN !Check on border points in X direction
-              TZFIELD%CMNHNAME   = 'LBX_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
-              TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-              TZFIELD%CLBTYPE    = 'LBX'
-              WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'2_Y_Z_','LBXSVM',JSV
-              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-            ENDIF !Check on border points in X direction
-            IF(NSIZELBYSV_ll /= 0) THEN
-              TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPDUST_INI(ISV_NAME_IDX))
-              TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-              TZFIELD%CLBTYPE    = 'LBY'
-              WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3,A8)')'X_2_Z_','LBYSVM',JSV
-              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-            ENDIF  !Check on points in Y direction
-          ENDDO ! Loop on moments
-        ENDDO    ! Loop on modes
-      END IF ! valeur IMOMENTS
-
-    ELSE  ! Test CPROGRAM
-      ! We are in the subprogram MESONH, CDUSTNAMES are allocated and are 
-      !in the same order as the variables in XSVM (i.e. following JPDUSTORDER)
-      !
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = ''
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'ppp'
+    TZFIELD%CDIR       = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    TZFIELD%LTIMEDEP   = .TRUE.
+    !
+    DO JSV = NSV_DSTBEG,NSV_DSTEND
+      IF(NSIZELBXSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
+        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBX'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      END IF
       !
-      DO JSV = NSV_DSTBEG,NSV_DSTEND
+      IF(NSIZELBYSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
+        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBY'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      END IF
+    END DO
+    IF (LDEPOS_DST(IMI)) THEN
+      DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
         IF(NSIZELBXSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
+          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
           CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-        END IF             
+        END IF
         !
         IF(NSIZELBYSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))
+          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
           CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
         END IF
       END DO
-      IF (LDEPOS_DST(IMI)) THEN
-        DO JSV = NSV_DSTDEPBEG,NSV_DSTDEPEND
-          IF(NSIZELBXSV_ll /= 0) THEN
-            TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBX'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-          END IF             
-          !
-          IF(NSIZELBYSV_ll /= 0) THEN
-            TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDEDSTNAMES(JSV-NSV_DSTDEPBEG+1))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBY'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-          END IF             
-        END DO      
-      END IF  
-    END IF  
-  ENDIF  
+    END IF
+  ENDIF
   !
   IF (LSALT) THEN
     DO JK=1,size(XLBXSVM,3)
@@ -772,120 +699,50 @@ IF (NSV >=1) THEN
       END IF
     END IF
     !
-    IF ((CPROGRAM == 'REAL  ').OR. (CPROGRAM == 'IDEAL ')) THEN
-      ! In this case CSALTNAMES is not allocated. We will use YPSALT_INI,
-      !but remember that this variable does not follow JPSALTORDER
-      IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG + 1)/NMODE_SLT
-      !Should equal 3 at this point
-      IF (IMOMENTS >  3) THEN
-        WRITE(YMSG,*) 'number of SLT moments must be 3',NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
-        CALL PRINT_MSG(NVERB_FATAL,'GEN','WRITE_LB_n',YMSG)
-      END IF ! Test IMOMENTS
-      !
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = ''
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      IF (IMOMENTS == 1) THEN
-        DO JMODE=1, NMODE_SLT
-          !Index from which names are picked
-          ISV_NAME_IDX = (JPSALTORDER(JMODE) - 1)*3 + 2
-          JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                +  1              & !Number of moments in this mode
-                + (NSV_SLTBEG -1)      !Previous list of tracers
-
-          IF(NSIZELBXSV_ll /= 0) THEN !Check on border points in X direction   
-            TZFIELD%CMNHNAME   = 'LBX_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBX'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-          ENDIF !Check on border points in X direction
-          IF(NSIZELBYSV_ll /= 0) THEN
-            TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBY'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-          ENDIF  !Check on points in Y direction
-        ENDDO ! Loop on mode
-      ELSE  ! valeur IMOMENTS =/ 1
-        DO JMODE=1,NMODE_SLT
-          DO JMOM=1,IMOMENTS
-            ISV_NAME_IDX = (JPSALTORDER(JMODE) - 1)*3 + JMOM
-            JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                + JMOM               & !Number of moments in this mode
-                + (NSV_SLTBEG -1)
-
-            IF(NSIZELBXSV_ll /= 0) THEN !Check on border points in X direction
-              TZFIELD%CMNHNAME   = 'LBX_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
-              TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-              TZFIELD%CLBTYPE    = 'LBX'
-              WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-            ENDIF !Check on border points in X direction
-            IF(NSIZELBYSV_ll /= 0) THEN
-              TZFIELD%CMNHNAME   = 'LBY_'//TRIM(YPSALT_INI(ISV_NAME_IDX))
-              TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-              TZFIELD%CLBTYPE    = 'LBY'
-              WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-              CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-            ENDIF  !Check on points in Y direction
-          ENDDO ! Loop on moments
-        ENDDO    ! Loop on modes
-      END IF ! valeur IMOMENTS
-    ELSE  ! Test CPROGRAM
-      ! We are in the subprogram MESONH, CSALTNAMES are allocated and are 
-      !in the same order as the variables in XSVM (i.e. following JPSALTORDER)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = ''
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'ppp'
+    TZFIELD%CDIR       = ''
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    TZFIELD%LTIMEDEP   = .TRUE.
+    !
+    DO JSV = NSV_SLTBEG,NSV_SLTEND
+      IF(NSIZELBXSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
+        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBX'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
+      END IF
       !
-      DO JSV = NSV_SLTBEG,NSV_SLTEND
+      IF(NSIZELBYSV_ll /= 0) THEN
+        TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
+        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+        TZFIELD%CLBTYPE    = 'LBY'
+        WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
+        CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
+      END IF
+    END DO
+    IF (LDEPOS_SLT(IMI)) THEN
+      DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
         IF(NSIZELBXSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
+          TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBX'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
           CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-        END IF             
+        END IF
         !
         IF(NSIZELBYSV_ll /= 0) THEN
-          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))
+          TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))
           TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
           TZFIELD%CLBTYPE    = 'LBY'
           WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
           CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-        END IF            
+        END IF
       END DO
-      IF (LDEPOS_SLT(IMI)) THEN
-        DO JSV = NSV_SLTDEPBEG,NSV_SLTDEPEND
-          IF(NSIZELBXSV_ll /= 0) THEN
-            TZFIELD%CMNHNAME   = 'LBX_'//TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBX'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'2_Y_Z_','LBXSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBXSV_ll,XLBXSVM(:,:,:,JSV))
-          END IF             
-          !
-          IF(NSIZELBYSV_ll /= 0) THEN
-            TZFIELD%CMNHNAME   = 'LBY_'//TRIM(CDESLTNAMES(JSV-NSV_SLTDEPBEG+1))
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            TZFIELD%CLBTYPE    = 'LBY'
-            WRITE(TZFIELD%CCOMMENT,'(A6,A6,I3.3)')'X_2_Z_','LBYSVM',JSV
-            CALL IO_Field_write_lb(TPFILE,TZFIELD,NSIZELBYSV_ll,XLBYSVM(:,:,:,JSV))
-          END IF             
-        END DO      
-      END IF  
-    END IF  
+    END IF
   ENDIF   
   !
   ! lagrangian variables
diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90
index eabe11f28..c84b0606a 100644
--- a/src/MNH/write_lfin.f90
+++ b/src/MNH/write_lfin.f90
@@ -1,4 +1,4 @@
-!MNH_LIC Copyright 1994-2020 CNRS, Meteo-France and Universite Paul Sabatier
+!MNH_LIC Copyright 1994-2021 CNRS, Meteo-France and Universite Paul Sabatier
 !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence
 !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
 !MNH_LIC for details. version 1.
@@ -163,16 +163,17 @@ END MODULE MODI_WRITE_LFIFM_n
 !!       J.escobar     04/08/2015 suit Pb with writ_lfin JSA increment , modif in ini_nsv to have good order initialization
 !!       Modification    01/2016  (JP Pinty) Add LIMA
 !!       M.Mazoyer     04/16 : Add supersaturation fields
-!!       P.Wautelet    11/07/2016 removed MNH_NCWRIT define
-!!       JP Chaboureau 27/11/2017 add wind tendency forcing
-!!                   02/2018 Q.Libois move Diagnostic related to the radiations in radiations.f90
-!!  Philippe Wautelet: 05/2016-04/2018: new data structures and calls for I/O
-!!       V. Vionnet    07/2017, add blowing snow variables
-!!       P.Wautelet    11/01/2019: bug correction in write XBL_DEPTH->XSBL_DEPTH
-!!       C.Lac         18/02/2019: add rain fraction as an output field
-!!      Bielli S. 02/2019  Sea salt : significant sea wave height influences salt emission; 5 salt modes
+!  P. Wautelet 05/2016-04/2018: new data structures and calls for I/O
+!  P. Wautelet 11/07/2016: remove MNH_NCWRIT define
+!  V. Vionnet     07/2017: add blowing snow variables
+!  JP Chaboureau 27/11/2017: add wind tendency forcing
+!  Q. Libois      02/2018: move Diagnostic related to the radiations in radiations.f90
+!  P. Wautelet 11/01/2019: bug correction in write XBL_DEPTH->XSBL_DEPTH
+!  C. Lac      18/02/2019: add rain fraction as an output field
+!  S. Bielli      02/2019: Sea salt: significant sea wave height influences salt emission; 5 salt modes
 !  P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg
 !  P. Tulet       02/2020: correction for dust and sea salts
+!  P. Wautelet 10/03/2021: use scalar variable names for dust and salt
 !-------------------------------------------------------------------------------
 !
 !*       0.    DECLARATIONS
@@ -295,8 +296,6 @@ INTEGER           :: JSA            ! beginning of chemical-aerosol variables
 CHARACTER(LEN=3)  :: YFRC           ! to mark the time of the forcing
 INTEGER           :: JT             ! loop index
 !
-INTEGER           :: JMOM, IMOMENTS, JMODE, ISV_NAME_IDX  ! dust modes
-! 
 REAL,DIMENSION(:,:), ALLOCATABLE  :: ZWORK2D     ! Working array
 REAL,DIMENSION(:,:,:), ALLOCATABLE  :: ZWORK3D     ! Working array
 !
@@ -1159,82 +1158,25 @@ IF (NSV >=1) THEN
       CALL DUSTLFI_n(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
     !At this point, we have the tracer array in order of importance, i.e.
     !if mode 2 is most important it will occupy place 1-3 of XSVT  
-    IF ((CPROGRAM == 'REAL  ').AND.((LDSTINIT).OR.(LDSTPRES)).OR.&
-       (CPROGRAM == 'IDEAL ')               ) THEN
-      ! In this case CDUSTNAMES is not allocated. We will use YPDUST_INI,
-      !but remember that this variable does not follow JPDUSTORDER
-      IMOMENTS = INT(NSV_DSTEND - NSV_DSTBEG+1)/NMODE_DST  
-      !Should equal 3 at this point
-      IF (IMOMENTS > 3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be less or equal to 3'
-        WRITE(ILUOUT,*) NSV_DSTBEG, NSV_DSTEND,NMODE_DST,IMOMENTS
-        call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LFIFM_n', 'number of moments must be less or equal to 3' )
-      END IF ! Test IMOMENTS
-      ALLOCATE(YDSTNAMES(NSV_DSTEND - NSV_DSTBEG+1))
-      !
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      IF (IMOMENTS == 1) THEN
-        DO JMODE=1, NMODE_DST
-          ISV_NAME_IDX = (JPDUSTORDER(JMODE) - 1)*3 + 2
-          JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                  +  1              & !Number of moments in this mode
-                  + (NSV_DSTBEG -1)      !Previous list of tracers
-          TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-          YDSTNAMES((JMODE-1)*IMOMENTS+1)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-        END DO ! Loop on mode
-      ELSE
-        DO JMODE=1,NMODE_DST
-          DO JMOM=1,IMOMENTS
-            ISV_NAME_IDX = (JPDUSTORDER(JMODE) - 1)*3 + JMOM
-            JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                 + JMOM               & !Number of moments in this mode
-                 + (NSV_DSTBEG -1)
-            TZFIELD%CMNHNAME   = TRIM(YPDUST_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-            CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-            YDSTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-          END DO ! Loop on moment
-        END DO ! loop on mode
-      END IF ! Valeur IMOMENTS
-!
-      DO JSV = NSV_DSTBEG,NSV_DSTEND
-        YCHNAMES(JSV-JSA) = YDSTNAMES(JSV-NSV_DSTBEG+1)
-      END DO   
-      DEALLOCATE(YDSTNAMES)
-    ELSE 
-      ! We are in the subprogram MESONH, CDUSTNAMES are allocated and are 
-      !in the same order as the variables in XSVT (i.e. following JPDUSTORDER)
-      !
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
-      DO JSV = NSV_DSTBEG,NSV_DSTEND
-        TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        IF (JSV==NSV_DSTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTBEG ',JSV
-        IF (JSV==NSV_DSTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTEND ',JSV
-        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO   ! Loop on dust scalar variables
-    END IF 
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'ppp'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    TZFIELD%LTIMEDEP   = .TRUE.
+    !
+    CALL DUST_FILTER(XSVT(:,:,:,NSV_DSTBEG:NSV_DSTEND), XRHODREF)
+    DO JSV = NSV_DSTBEG,NSV_DSTEND
+      TZFIELD%CMNHNAME   = TRIM(CDUSTNAMES(JSV-NSV_DSTBEG+1))//'T'
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      IF (JSV==NSV_DSTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTBEG ',JSV
+      IF (JSV==NSV_DSTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTEND ',JSV
+      YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
+    END DO   ! Loop on dust scalar variables
+
     IF (LDEPOS_DST(IMI)) THEN
       TZFIELD%CSTDNAME   = ''
       TZFIELD%CUNITS     = 'ppp'
@@ -1252,9 +1194,9 @@ IF (NSV >=1) THEN
         IF (JSV==NSV_DSTDEPBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPBEG ',JSV
         IF (JSV==NSV_DSTDEPEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_DSTDEPEND ',JSV
         YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO   ! Loop on aq dust scalar variables      
+      END DO   ! Loop on aq dust scalar variables
     ENDIF
-  ENDIF  
+  ENDIF
   ! sea salt scalar variables
   IF (LSALT) THEN
     IF ((CPROGRAM == 'REAL  ').AND.(NSV_SLT > 1).AND.(IMI==1).AND.(LSLTINIT)) &
@@ -1263,80 +1205,25 @@ IF (NSV >=1) THEN
       CALL SALTLFI_n(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF, XZZ)
     !At this point, we have the tracer array in order of importance, i.e.
     !if mode 2 is most important it will occupy place 1-3 of XSVT  
-    IF (((CPROGRAM == 'REAL  ').AND.(LSLTINIT)).OR.&
-        (CPROGRAM == 'IDEAL ')           ) THEN
-      ! In this case CSALTNAMES is not allocated. We will use YPSALT_INI,
-      !but remember that this variable does not follow JPSALTORDER
-      IMOMENTS = INT(NSV_SLTEND - NSV_SLTBEG+1)/NMODE_SLT  
-      !Should equal 3 at this point
-      IF (IMOMENTS .NE. 3) THEN
-        WRITE(ILUOUT,*) 'Error in write_lfin: number of moments must be equal to 3'
-        WRITE(ILUOUT,*) NSV_SLTBEG, NSV_SLTEND,NMODE_SLT,IMOMENTS
-        call Print_msg( NVERB_FATAL, 'GEN', 'WRITE_LFIFM_n', 'number of moments must be equal to 3' )
-      END IF
-      ALLOCATE(YSLTNAMES(NSV_SLTEND - NSV_SLTBEG+1))
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-!
-      IF (IMOMENTS == 1) THEN
-        DO JMODE=1, NMODE_SLT
-          ISV_NAME_IDX = (JPSALTORDER(JMODE) - 1)*3 + 2
-          JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                  +  1              & !Number of moments in this mode
-                  + (NSV_SLTBEG -1)      !Previous list of tracers
-          TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'
-          TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-          WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-          CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-          YSLTNAMES((JMODE-1)*IMOMENTS+1)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-        END DO ! Loop on mode
-      ELSE
-        DO JMODE=1, NMODE_SLT
-          DO JMOM = 1, IMOMENTS
-            ISV_NAME_IDX = (JPSALTORDER(JMODE) - 1)*IMOMENTS + JMOM
-            JSV = (JMODE-1)*IMOMENTS  & !Number of moments previously counted
-                 + JMOM               & !Number of moments in this mode
-                 + (NSV_SLTBEG -1)
-            TZFIELD%CMNHNAME   = TRIM(YPSALT_INI(ISV_NAME_IDX))//'T'  !The refererence which will be written to file
-            TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-            WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-            CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-            YSLTNAMES((JMODE-1)*IMOMENTS+JMOM)=TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-          END DO ! Loop on moment
-        END DO ! loop on mode
-      END IF ! IMOMENTS
-      !
-      DO JSV = NSV_SLTBEG,NSV_SLTEND
-        YCHNAMES(JSV-JSA) = YSLTNAMES(JSV-NSV_SLTBEG+1)
-      END DO   
-      DEALLOCATE(YSLTNAMES)
-    ELSE 
-      ! We are in the subprogram MESONH, CSALTNAMES are allocated and are 
-      !in the same order as the variables in XSVT (i.e. following JPSALTORDER)
-      TZFIELD%CSTDNAME   = ''
-      TZFIELD%CUNITS     = 'ppp'
-      TZFIELD%CDIR       = 'XY'
-      TZFIELD%NGRID      = 1
-      TZFIELD%NTYPE      = TYPEREAL
-      TZFIELD%NDIMS      = 3
-      TZFIELD%LTIMEDEP   = .TRUE.
-      !
-      CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
-      DO JSV = NSV_SLTBEG,NSV_SLTEND
-        TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
-        TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
-        WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
-        CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
-        IF (JSV==NSV_SLTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTBEG ',JSV
-        IF (JSV==NSV_SLTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTEND ',JSV
-        YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
-      END DO   ! Loop on sea salt scalar variables
-    END IF 
+    TZFIELD%CSTDNAME   = ''
+    TZFIELD%CUNITS     = 'ppp'
+    TZFIELD%CDIR       = 'XY'
+    TZFIELD%NGRID      = 1
+    TZFIELD%NTYPE      = TYPEREAL
+    TZFIELD%NDIMS      = 3
+    TZFIELD%LTIMEDEP   = .TRUE.
+    !
+    CALL SALT_FILTER(XSVT(:,:,:,NSV_SLTBEG:NSV_SLTEND), XRHODREF)
+    DO JSV = NSV_SLTBEG,NSV_SLTEND
+      TZFIELD%CMNHNAME   = TRIM(CSALTNAMES(JSV-NSV_SLTBEG+1))//'T'
+      TZFIELD%CLONGNAME  = TRIM(TZFIELD%CMNHNAME)
+      WRITE(TZFIELD%CCOMMENT,'(A6,A3,I3.3)')'X_Y_Z_','SVT',JSV
+      CALL IO_Field_write(TPFILE,TZFIELD,XSVT(:,:,:,JSV))
+      IF (JSV==NSV_SLTBEG) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTBEG ',JSV
+      IF (JSV==NSV_SLTEND) WRITE(ILUOUT,*)'MNHC: write_lfin:NSV_SLTEND ',JSV
+      YCHNAMES(JSV-JSA) = TZFIELD%CMNHNAME(1:LEN_TRIM(TZFIELD%CMNHNAME)-1)
+    END DO   ! Loop on sea salt scalar variables
+
     IF (LDEPOS_SLT(IMI)) THEN        
       TZFIELD%CSTDNAME   = ''
       TZFIELD%CUNITS     = 'ppp'
-- 
GitLab